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个数码管的。
附上电路图