為什么 執行的時候 一開始R7給任意值是可以 運行的
文件夾里的 有一點的區別 反正 都是同一個問題 R7 按鍵+1之后波形不對。
應為調試不出來原本 P1.1的代碼刪了[qq] [/qq]
ZKB1 EQU 30H
ZKB2 EQU 31H
ORG 0000H
RESET: AJMP START
ORG 000BH
LJMP ITP0
ORG 0100H
START: MOV R7,#50 ;zkb1 初值
MOV ZKB1,R7
MAIN: MOV SP,#60H
MOV TMOD,#01H
KEYCHA:LCALL PT0M0
MOV A,#100 ;;;;
SUBB A,ZKB1
MOV ZKB2,A
;;;;;定時器送入初值,每10us進入一次中斷
MOV R4,ZKB1
MOV 32H,ZKB2
MOV A,#01H
MOV P2,A
HERE: LCALL KEYJUDGE
AJMP HERE
PT0M0: MOV TH0,#0ECH ;定時器送入初值,每5ms進入一次中斷
MOV TL0,#78H
SETB ET0
SETB EA
SETB TR0
RET
;==============================================================波形
ITP0: MOV A,ZKB1
CJNE A,0,HZKB ;;;;;;;;;;;;;;;高電平 結束
MOV A,ZKB2
CJNE A,0,LZKB
CPL P2.0 ;;;;;;;;;;;;;;;平 結束
LJMP RETURN
HZKB: MOV TH0,#0ECH ;定時器送入初值,每5ms進入一次中斷
MOV TL0,#78H
DEC ZKB1
RETI
LZKB: MOV TH0,#0ECH
MOV TL0,#78H
CJNE A,32H,EXIT2
CPL P2.0
DEC ZKB2
RETI
RETURN:MOV ZKB1,R4
MOV ZKB2,32H
MOV TH0,#0ECH
MOV TL0,#78H
RETI
EXIT2:
DEC ZKB2
RETI
;=================================================================按鍵
KEYJUDGE:
JB P1.0,$ ;若按鍵被按下,則繼續執行
LCALL DELAY ;延時1 ms消抖
JB P1.0,EXIT1
;若P3.0為高,說明按鍵誤檢測,退出子程序
CLR TR0
JNB P1.0,$
;等待按鍵松開
INC R7 ;按鍵次數的個位加1
MOV ZKB1,R7
SETB TR0
LJMP KEYCHA
EXIT1:RET
;=================================================延時 1ms
DELAY: MOV R7,#200
DEL1: MOV R6,#25
DEL2:
DJNZ R6,DEL2
DJNZ R7,DEL1
RET
END
|