用51单片机的定时/计数器T0计时功能,作为秒计数时间,当一秒产生时,秒计数加1,记到六十自动从0开始。十位数由接在P0的数码管显示,个位数由接在P2的数码管显示出来。
因为单片机的计时器T0最大定时只有65536μs,所以我们要定时1s,可以通过设置定时器T0一次计时50ms,计时20次刚好是1s。
代码如下:
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV R0,#00H; //秒数
MOV R1,#00H;//定时器次数
MOV TMOD,#01H;//定时器0工作在方式1
MOV TH0,#3CH;//设置初值
MOV TL0,#0B0H;
SETB TR0;//定时器0允许工作
SHOW:
MOV A,R0;//显示秒数
MOV B,#10;
DIV AB;
MOV DPTR,#TABLE;
MOVC A,@A+DPTR;
MOV P0,A;
MOV A,B;
MOVC A,@A+DPTR;
MOV P2,A;
WAIT;
JNB TF0,WAIT;
CLR TF0;
MOV TH0,#3CH;
MOV TL0,#0B0H;
INC R1;
CJNE R1,#20,NEXT1;
MOV R1,#00H;
INC R0;
CJNE R0,#60,NEXT2;
MOV R0,#00H;
NEXT2:
LJMP SHOW
NEXT1:
LJMP WAIT;
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
当然,可以在这个程序基础上增加暂停,重置等功能。
用51单片机的定时/计数器T0计时功能,作为秒计数时间,当一秒产生时,秒计数加1,记到六十自动从0开始。十位数由接在P0的数码管显示,个位数由接在P2的数码管显示出来。
因为单片机的计时器T0最大定时只有65536μs,所以我们要定时1s,可以通过设置定时器T0一次计时50ms,计时20次刚好是1s。
代码如下:
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV R0,#00H; //秒数
MOV R1,#00H;//定时器次数
MOV TMOD,#01H;//定时器0工作在方式1
MOV TH0,#3CH;//设置初值
MOV TL0,#0B0H;
SETB TR0;//定时器0允许工作
SHOW:
MOV A,R0;//显示秒数
MOV B,#10;
DIV AB;
MOV DPTR,#TABLE;
MOVC A,@A+DPTR;
MOV P0,A;
MOV A,B;
MOVC A,@A+DPTR;
MOV P2,A;
WAIT;
JNB TF0,WAIT;
CLR TF0;
MOV TH0,#3CH;
MOV TL0,#0B0H;
INC R1;
CJNE R1,#20,NEXT1;
MOV R1,#00H;
INC R0;
CJNE R0,#60,NEXT2;
MOV R0,#00H;
NEXT2:
LJMP SHOW
NEXT1:
LJMP WAIT;
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
当然,可以在这个程序基础上增加暂停,重置等功能。
举报