注解說(shuō)是R0中斷次數(shù),但我看起來(lái)好像R0都是沒(méi)變化的,學(xué)單片機(jī)時(shí)間不長(zhǎng),不太懂,請(qǐng)教R0在這個(gè)過(guò)程是怎么計(jì)數(shù)的?謝謝!
===倒計(jì)時(shí)程序===
COUNT: MOV R0,#00H ;重置定時(shí)器中斷次數(shù)
MOV TH1,#3CH
MOV TL1,#0B0H ;重置定時(shí)器
RECOUNT:MOV A,R6;R6 保存了倒計(jì)時(shí)的時(shí)間,之前先將搶答時(shí)間或回答時(shí)間給R6
MOV B,#0AH
DIV AB ;除十分出個(gè)位/十位
MOV 30H,A ;十位存于(30H)
MOV 31H,B ;個(gè)位存于(31H)
MOV R5,30H ; 取十位
MOV R4,31H ; 取個(gè)位
MOV A,R6
SUBB A,#07H
JNC LARGER ; 大于5s跳到LARGER,小于等于5s會(huì)提醒
MOV A,R0
CJNE A,#0AH,FULL 1s中0.5s向下運(yùn)行
CLR RING
AJMP CHECK
FULL: CJNE A,#14H,CHECK 下面是1s的情況,響并顯示號(hào)數(shù)并清R0,重新計(jì)
SETB RING
MOV A,R6
JZ QUIT ;計(jì)時(shí)完畢
MOV R0,#00H
DEC R6 ;一秒標(biāo)志減1
AJMP CHECK
LARGER: MOV A,R0
CJNE A,#14H,CHECK 如果1s向下運(yùn)行,否者跳到查"停/顯示"
DEC R6 ;計(jì)時(shí)一秒R6自動(dòng)減1
MOV R0,#00H
CHECK: JNB P3.1,QUIT ;如按下停止鍵退出
ACALL DISPLAY
JB OK,ACCOUT 如果是搶答倒計(jì)時(shí),如是則查詢(xún)搶答,否者跳過(guò)查詢(xún)繼續(xù)倒數(shù)(這里起到鎖搶答作用)
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 ; 如果按下了"停止鍵"執(zhí)行的程序
CLR RING
AJMP START
|