[問題]8051的一個開關控制程式

看板ASM作者 (wayne)時間15年前 (2008/09/29 17:12), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
各位大大,小弟正在看有關8051的書,剛好看到了這個開關程式的寫法 不是很了解他在寫什麼?麻煩各位大大幫我一下了?感謝~ 他的硬體接線是P1接8個LED燈,P2接八個按鈕開關 輸入和輸出"1"都是沒有動作,要是"0"才代表有發送或接收到訊號 而開關是按鈕開關需要除彈跳 程式如下: ZERO EQU 30H ;連續偵測按鍵被按下的次數 ONE EQU 31H ;連續偵測按鍵以釋放的次數 KEYTEMP EQU 32H ;未除彈跳的鍵值 KEYDATA EQU 33H ;以除彈跳的鍵值 STATUS EQU 34H ;按鍵狀態 ORG 00H MOV P1,#FFH MOV KEYTEMP,#FFH MOV KEYDATA,#FFH LOOP: ACALL KEYSCAN MOV A,#FFH XCH A,KEYDATA CJNE A,#FFH,CHG SJMP LOOP CHG: XRL P1,A SJMP LOOP KEYSCAN: PUSH A MOV P2,#FFH MOV A,P2 CPL A MOV STATUS,A CJNE A,#0,KEYIN INC ONE MOV A,ONE CJNE A,#5,K3 MOV ZERO,#0 MOV KEYTEMP,#FFH MOV KEYDATA,#FFH SJMP K3 KEYIN: MOV ONE,#0 MOV A,STATUS CJNE A,KEYTEMP,K2 MOV A,ZERO CJNE A,#5,K1 SJMP K3 K1: INC ZERO MOV A,ZERO CJNE A,#5,K3 MOV A,KEYTEMP MOV KEYDATA,A SJMP K3 K2: MOV KEYTEMP,A MOV ZERO,#1 K3: POP A RET END 動作要求: 按鈕開關輸入,按一次對應的LED燈亮,再按同一顆開關的話LED燈會暗 上面的程式是直接從書上抄下來的,也做過測試了!可以正確的動作 而我的問題如下: 1.問什麼再KEYSCAN程式段中要寫一個 CPL A 在這取補數有什麼用意嗎? 2.在程式中ZERO和ONE這兩個暫存器到底是在做什麼事情,為什麼要判斷他們兩個的 值是不是等於5,為何是5不是別的數字? 3.這支程式是怎麼解決彈跳問題的? 4.這個程式因該還有其他比較簡單的寫法吧?麻煩能不能稍微指導小弟一下? 謝謝各位大大把我的問題看完了!這是我第一次PO文!所以不知道什麼叫做作業文! 假如我的文章有違反板規的地方,麻煩告訴我一聲!我會自D的! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.166.162.21
文章代碼(AID): #18u9lbuV (ASM)
文章代碼(AID): #18u9lbuV (ASM)