大神麻烦进来看看

2019-07-16 02:53发布

org 0000hajmp mainorg 0003hajmp int00

main:



MOV TMOD,#21H ;串口设置MOV SCON,#40HMOV PCON,#80HMOV TH1,#0F9HMOV TL1,#0F9HSETB TR1



mov R1,#10; 目标计数设定存放

setb ea   ;定时器设置setb ex0    ;外部中断设置ACALL SEND3B1:AJMP B1

int00:CLR EACLR P1.0a1:jnb p3.2,$SETB P1.0jnb p2.6,$CLR P1.2inc R1acall send3jb p2.6,$SETB P1.2ajmp a1a2:SETB EAretisend3:clr amov a,R1mov sbuf,ajnb ti,$clr tiret





end

输出结果为什么是 0B 0C 0D 0E 0F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D········· 而不是 0f到10???
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
hughqfb
2019-07-17 02:49
ORG 0000H
AJMP MAIN
ORG 0003H        :;        INT0中断地址
AJMP INT00

MAIN:
        MOV TMOD,#21H ;TMOD=0010 0001  T1工作方式2,8位自动重装
        MOV SCON,#40H ;SCON=0100 0000  串口工作方式1
        MOV PCON,#80H ;PCON=1000 0000  SMOD=1,
        MOV TH1,#0F9H ;初值
        MOV TL1,#0F9H ;
        SETB TR1          ;启动定时器
        SETB EA       ;开CPU中断
        SETB EX0      ;开外部中断
        MOV R1,#10   
        ACALL SEND3          ;调用SEND3
        END


INT00:
        CLR EA                  ;关闭中断
        CLR P1.0
A1:                                  ;此函数完成中断检测
        JNB P3.2,$          ;P3.2即INT0引脚不为1时原地跳转
        SETB P1.0          ;否则P1.0=1,
        JNB P2.6,$
        CLR P1.2
        INC R1              ;R1中操作数加一
        ACALL SEND3          ;调用SEND3函数
        JB P2.6,$          ;为1时原地跳转
        SETB P1.2          ;否则P1.2=1
        AJMP A1                  ;循环
A2:
        SETB EA                  ;开总中断
        RETI                  ;由中断返回主函数
SEND3:
        CLR A
        MOV A,R1
        MOV SBUF,A          ;发送R1中数据
        JNB TI,$          ;未发送完成就一直原地跳转,即TI=0,如TI=1,则执行下面的清零操作
        CLR TI                  ;清除中断标志
        RET

还看不懂就不怪我了!


       


一周热门 更多>