标题: 如果想要单片机计数的时长超过100s应该怎么改动汇编程序? [打印本页]
作者: BSq 时间: 2020-3-26 19:29
标题: 如果想要单片机计数的时长超过100s应该怎么改动汇编程序?
;定义数据RAM空间
LMS EQU 37H ;定义一个变量存放计数值毫秒
LMIAO EQU 38H ;定义一个变量存放计数值秒
;数据存放
ORG 0100H
TABLE: DB 0C0h,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H
;表:共阳数码管 0-9
ORG 0000H
LJMP MAIN
ORG 000BH ;中断入口
LJMP TIMER
ORG 0200H
MAIN: MOV TMOD,#01H ;设置定时器1为1模式,即16位计算模式
MOV TH0,#0D8H ;给计数寄存器赋值,10毫秒时间
MOV TL0,#0F0H
MOV IE,#82H ;开总中断和T0中断
CLR A
MOV LMS,A ;计数缓冲清0
MOV LMIAO,A
SETB TR0 ;
M1: MOV A,LMS
CJNE A,#100,M2 ;以10毫秒计数,100次即为1秒
MOV LMS,#0
MOV A,LMIAO
INC A
MOV LMIAO,A
CJNE A,#100,M2 ;如果加到100秒,则清0
MOV LMIAO,#0
M2: LCALL DISPLAY ;显示
SJMP M1
TIMER: INC LMS ;定时中断产生,以10毫秒计数加1
MOV TH0,#0D8H ;重新装入定时器值10毫秒
MOV TL0,#0F0H
RETI
DISPLAY: MOV DPTR,#TABLE ;数码管显示子程序
MOV A,LMIAO
MOV B,#10
DIV AB
SETB P3.4
SETB P3.3 ;千位数码管
MOVC A,@A+DPTR
MOV P1,A
MOV P1,#0FFH
CLR P3.3 ;百位数码管
MOV A,B
MOVC A,@A+DPTR
ANL A,#0X7F ;加入小数点
MOV P1,A
MOV P1,#0FFH
MOV A,LMS
MOV B,#10
DIV AB
CLR P3.4
SETB P3.3 ;十位数码管
MOVC A,@A+DPTR
MOV P1,A
MOV P1,#0FFH
CLR P3.3 ;个位数码管
MOV A,B
MOVC A,@A+DPTR
MOV P1,A
MOV P1,#0FFH
RET
END
作者: yzwzfyz 时间: 2020-3-27 07:02
在中断服务子程序中,加一个计数器,计数不满时,立即返回。计数计满时再执行你的主服务内容!
如此10000秒也行、这么简单事,如何就想不到呢?
作者: Y_G_G 时间: 2020-3-27 08:20
如果你定时器中断不改变的话,100S的延时要用3个地址在存放时间数据
在定时器中使用DJNZ来实现
作者: BSq 时间: 2020-3-27 10:10
呃呃,对不起,我刚刚学习,学的不精。其实我之前改过显示分秒的,是在原来的加一个分钟中断,和显示,然后计数超过一百秒,没有要求上限,我有点😵
作者: BSq 时间: 2020-3-27 10:12
对对,我之前改分秒显示就是这样改的,加一个存储单元,加一个d'j'n'z
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |