架構修改一下後..可以用74373做簡單的IO延伸輸出...透過共用匯流排傳輸PWM的資料...8051內部則運用TIMER+暫存器orRAM做虛擬計時器...每次把所有暫存器的值讀出、運算、回存和輸出計時終了訊號
| ˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍˍ
|-------|74373 陣列 |第二組LATCH |≡
8|PWM BUS| |同步化所有PWM |≡ 多組PWM同步輸出
0|-------| 預先拴鎖 |的信號 |≡
5|==控制信號==|ˍˍˍˍˍˍˍˍˍ|ˍˍˍˍˍˍˍˍˍˍ|≡
1|
|
|
Start
↓
掃瞄N個計時暫存器@記憶體
(Load Data[N]→DJNZ Data,PWM_CHG→SCAN_NEXT↑Load Data[N+1])
↓
PWM_CHG
(determine PWM_Data#N→Latch PWM status to first 74373 arrays→Load Data preset[N]→if(N==Last data)→↓PWM_Latch_Complete→else↑)
↓
PWM_Latch_Complete
(Output status→Latch second 74373 arrays→Output current PWM status)
↓
Restart PWM cycles
不過這個方式需要更多處理器時間...所以比較適合高時脈的處理器...至少要40Mhz以上...優點是所有輸出都是同步執行...並且所有計數器都處於計時模式,不浪費處理器時間,最高可達1/2內部RAM輸出(HI、LO各佔一組Byte)。
華邦有出一款高速51: W78E51-40 ,應該蠻適合做這個應用...不行的話還有PIC的MCU,最高速可以達到40MIPS...輸出可到數Mhz...>w<
[ 本帖最後由 omegaCD 於 2006-6-3 06:56 編輯 ] |