注解说是R0中断次数,但我看起来好像R0都是没变化的,学单片机时间不长,不太懂,请教R0在这个过程是怎么计数的?谢谢!
===倒计时程序===
COUNT: MOV R0,#00H ;重置定时器中断次数
MOV TH1,#3CH
MOV TL1,#0B0H ;重置定时器
RECOUNT:MOV A,R6;R6 保存了倒计时的时间,之前先将抢答时间或回答时间给R6
MOV B,#0AH
DIV AB ;除十分出个位/十位
MOV 30H,A ;十位存于(30H)
MOV 31H,B ;个位存于(31H)
MOV R5,30H ; 取十位
MOV R4,31H ; 取个位
MOV A,R6
SUBB A,#07H
JNC LARGER ; 大于5s跳到LARGER,小于等于5s会提醒
MOV A,R0
CJNE A,#0AH,FULL 1s中0.5s向下运行
CLR RING
AJMP CHECK
FULL: CJNE A,#14H,CHECK 下面是1s的情况,响并显示号数并清R0,重新计
SETB RING
MOV A,R6
JZ QUIT ;计时完毕
MOV R0,#00H
DEC R6 ;一秒标志减1
AJMP CHECK
LARGER: MOV A,R0
CJNE A,#14H,CHECK 如果1s向下运行,否者跳到查"停/显示"
DEC R6 ;计时一秒R6自动减1
MOV R0,#00H
CHECK: JNB P3.1,QUIT ;如按下停止键退出
ACALL DISPLAY
JB OK,ACCOUT 如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)
AJMP RECOUNT
ACCOUT:JNB P1.0,TRUE1
JNB P1.1,TRUE2
JNB P1.2,TRUE3
JNB P1.3,TRUE4
JNB P1.4,TRUE5
JNB P1.5,TRUE6
JNB P1.6,TZ3
JNB P1.7,TZ4
AJMP RECOUNT
TZ3: JMP TRUE7
TZ4: JMP TRUE8
QUIT: CLR OK ; 如果按下了"停止键"执行的程序
CLR RING
AJMP START
|