51单片机对脉冲计数

问题遇到的现象和发生背景

51单片机对脉冲计数,添加TH1,显示数值范围增加至16位,即66536,使用汇编语言,尽量在原来代码上修改。

用代码块功能插入代码,请勿粘贴截图

原文链接:http://t.csdn.cn/H365S

编写汇编代码,并搭建仿真工程,已经验证

img


明天在我的博客展示仿真效果。
部分代码:

ORG        0000H
LJMP    INIT
ORG        0003H                //外部中断0
LJMP    INT0SUB                
ORG        0013H                //外部中断1
LJMP    INT1SUB

ORG        0100H
INIT:    CLR        P1.0        //控制端复位
        CLR        P1.1
        MOV        DPTR,#TABLE    //指向表头
        MOV        50H,#05H        //循环次数
        MOV        51H,#7FH        //位选信号
        MOV        TMOD,#50H    //工作模式
        MOV        TL1,#00H    //初始化
        SETB    EA            //启动总中断
        SETB    EX0            //启动外部中断0
        SETB    EX1            //启动外部中断1
        SETB    TR1            //启动计数器1
            
TRANS:    SETB    TR1            //启动计数器1
;        MOV        A,TL1        //16进制转10进制
;        MOV        B,#10
;        DIV        AB
;        MOV        40H,B        //个位
;        MOV        B,#10
;        DIV        AB
;        MOV        41H,B        //十位
;        MOV        42H,A        //百位        

        MOV     38H, TH1
        MOV     39H, TL1
        MOV     R6, 38H
        MOV     R7, 39H        
        MOV     R4, #00H
        MOV     R5, #10
        LCALL    UIDIV
        MOV        40H,R5        //个位
        MOV     R5, #10
        LCALL    UIDIV
        MOV        41H,R5        //十位
        MOV     R5, #10
        LCALL    UIDIV
        MOV        42H,R5        //百位        
        MOV     R5, #10
        LCALL    UIDIV
        MOV        43H,R5        //千位    
        MOV     R5, #10
        LCALL    UIDIV
        MOV        44H,R5        //万位    
        MOV     R5, #10
        LCALL    UIDIV
            

MAIN:    MOV        A,51H        //位选信号
        MOV        P0,A        //输出位信号
        SETB    P1.1        //上升沿
。。。。。

在TRANS:子程序里,现在只计算了TL1,现在需要加上TH1的数据作为高位,0x40到0x42定义个位到百位,首先需要扩展两位到千位和万位,再进行数制转换和显示就ok了