Re: [問題] 我想用C51模擬串列式輸出
※ 引述《icetofux (豆腐)》之銘言:
: MOV R0,#8 ;R0為右旋8次用的計數暫存器
: MOV A,R1 ;R1是從PORT1讀入的數值
: LOOP: MOV R2,A ;將目前右旋結束後的值(8-BIT)保留於R2
: ANL A,#00000001 ;把A中的值與00000001做AND並丟回A
: CALL CHECK ;進入CHECK副程式
: MOV A,R2 ;將剛剛右旋結束的值(8-BIT)讀回A
: RR A ;右旋A中的值
: DJNZ R0,LOOP ;計數暫存器R0的值-1如果不是0(還沒轉8次)回到LOOP
: .
: .
: .
: CHECK: JZ LOW ;如果暫存器A為0跳至LOW
: JNZ HIGH ;如果暫存器A不為0(是1)跳至HIGH
: HIGH: SEBT P2.1 ;讓PORT2.1為1
: LOW: CLR P2.1 ;讓PORT2.1為0
: RET ;回到主程式
處理完資料輸出後,接著問題就很簡單了,我還需要一個clock output來讓接收端
讀取資料,依照硬體設計者的想法,傳送資料主要是靠一個data output及一個clock
output來處理,當clock為上升緣時,則接收data output放出的資料,大致上像是這
樣:
┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐
clock ─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └──
0 0 1 1 0 0 1 1
data ┌───────┐ ┌───────┐
────────┘ └───────┘ └─
上面靠著大家的幫
忙,已經把data output(PORT2.1)架構描繪出來了,clock output基本上也不難,
若要產生方波,只需要重複對clock output做clr->delay->sebt->delay重複動作即
可,假設我的clock output為PORT2.0,程式大致上是:
CLOCK: CLR P2.0
CALL DELAY
SEBT P2.0
CALL DELAY
JMP CLOCK
即可產生從負緣開始,時間長2*DELAY的方波,然而程式整合上卻發現了一點小問題:
程式的執行是由上往下執行的,我要如何讓兩個完全不同動作的程式片段同時執行呢?
先呼叫CLOCK程式段的話,如果不結束CLOCK就不會向下執行DATA OUTPUT程式段,如果
結束了CLOCK,資料又因為沒有CLOCK而沒辦法被後端應用線路讀入,請問有辦法讓兩個
程式段"同時"進行嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.167.85.215
討論串 (同標題文章)