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???
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
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
还看不懂就不怪我了!
一周热门 更多>