为什么 执行的时候 一开始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
|