1. 如何用單片機做一個簡單的倒計時器
一般我們用定時器來做計時器,實現時間得加。每次中斷發生,用一個變數自增來判斷時間是否到1S,到了之後清零這個變數,另一個時間變數自增來作時間得增加。現在就是要把這個自增的時間變數改為自減,判斷當小於0時,又賦初值,然後繼續自減判斷。
2. 幫忙解讀一下51單片機99秒倒計時程序。
大概是下面這樣的
ORG 00H ;復位後主程序入口
JMP START ;轉移至主程序
ORG 0BH ;中斷服務程序入口
JMP TIMER ,轉移至中斷
START: MOV TMOD,#01H ;選擇定時器工作方式1
MOV TH0,#0BDH ;定時器0高8位給初始值
MOV TL0,#0C0H ;定時器0給低八位初始值
MOV IE,#82H
MOV 20H,#10 ;地址位20H的寄存器賦值
MOV 21H,#10 ;同上
MOV R7,#16 ;同上
CLR TR0
A4: MOV P2,#19H
CALL DELAY ;調用延時子程序
ANL P2,#00H ;與p2口數據進行與運算
MOV P2,#29H
CALL DELAY ;調用延時子程序
ORL P2,#00H
JB P1.0,A4
SETB TR0 ;打開定時器0
A1: MOV A,20H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
ADD A,#10H
MOV P2,A
CALL DELAY
ANL P2,#00H
MOV A,21H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
ADD A,#20H
MOV P2,A
CALL DELAY
ANL P2,#00H
MOV A,#01H
CJNE A,21H,A1 ;判斷是否到10
MOV A,#01
CJNE A,20H,A1 ;判斷是否到10
JMP START ;跳入主程序
TIMER: DJNZ R7,A2
MOV TH0,#0BDH
MOV TL0,#0C0H
MOV R7,#16
DJNZ 20H,A2
MOV 20H,#10
DJNZ 21H,A2
MOV 21H,#10
A2: RETI
DELAY: MOV R6,#248
DJNZ R6,$
RET
TABLE: DB 00H,00H,01H,02H,03H,04H ;定義表
DB 05H,06H,07H,08H,09H
END;結束
o(∩_∩)o...,給分吧
3. 編一個AT89C51單片機00 —99 秒的匯編程序,要求有循環和暫停,用兩個獨立數碼管顯示
;利用中斷的99秒計時器,動態掃描兩位數碼管
;P0口接J3,數據埠
;P2.2接J2B端子,表示段碼鎖存
;P2.3接J2A端子,標志位碼鎖存
LATCH1BITP2.2
LATCH2BITP2.3
ORG00H
JMPSTART
ORG0BH
JMPTIM0
START:MOVR3,#00;中斷循環次數
MOVR4,#0;時間初值
MOVDPTR,#TABLE
MOVSP,#40H
MOVTMOD,#01H;定時器工作方式
MOVTH0,#HIGH(65536-3800)
MOVTL0,#LOW(65536-3800);初值4MS
SETBTR0
MOVIE,#82H;開中斷
TIM0:
MOVTH0,#HIGH(65536-3800)
MOVTL0,#LOW(65536-3800)
INCR3
CJNER3,#250,X1;1S
MOVR3,#0
MOVA,R4;十進制轉換
MOVB,#10
DIVAB
MOV20H,B;個位
MOV21H,A;十位
INCR4
CJNER4,#100,LEDSCAN;到100則清零
MOVR4,#0
LEDSCAN:CALLSCAN;調用數碼管掃描
X1:PUSHACC
PUSHPSW
CALLSCAN
POPPSW
POPACC
RETI
SCAN:
MOVA,21H
MOVCA,@A+DPTR
MOVP0,A
SETBLATCH1
CLRLATCH1
MOVP0,#11111110B;掃描子程序
SETBLATCH2
CLRLATCH2
CALLDELAY1
MOVA,20H
MOVCA,@A+DPTR
MOVP0,A
SETBLATCH1
CLRLATCH1
MOVP0,#11111101B;0代表選通該位數碼管
SETBLATCH2
CLRLATCH2
CALLDELAY1
RET
DELAY:MOVR5,#50;典型延時程序
D1:MOVR6,#40
D2:MOVR7,#248
CALLSCAN
DJNZR7,$
DJNZR6,D2
DJNZR5,D1
RET
DELAY1:MOVR6,#4;掃描延時
D3:MOVR7,#248
DJNZR7,$
DJNZR6,D3
RET
TABLE:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;共陰字碼表
是用動態掃描的方法顯示的,用了2個鎖存器,8個數碼管的。
附上電路圖