标题: 如果想要单片机计数的时长超过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     ;设置定时器11模式,即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
yzwzfyz 发表于 2020-3-27 07:02
在中断服务子程序中,加一个计数器,计数不满时,立即返回。计数计满时再执行你的主服务内容!
如此10000 ...

呃呃,对不起,我刚刚学习,学的不精。其实我之前改过显示分秒的,是在原来的加一个分钟中断,和显示,然后计数超过一百秒,没有要求上限,我有点😵
作者: BSq    时间: 2020-3-27 10:12
Y_G_G 发表于 2020-3-27 08:20
如果你定时器中断不改变的话,100S的延时要用3个地址在存放时间数据
在定时器中使用DJNZ来实现

对对,我之前改分秒显示就是这样改的,加一个存储单元,加一个d'j'n'z




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1