注解說是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
|