📄 uartsend.a
字号:
ORG 0000H
LJMP MAIN;上电,转向主程序
ORG 0023H;串行口的中断入口地址
;LJMP SERVE1;转向中断服务程序
ORG 0030H;主程序
MAIN:
MOV TMOD,#20H;设T1工作方式2
MOV TH1,#0F3H;赋记数初值
MOV TL1,#0F3H;赋记数值
SETB TR1;启动定时器T1
MOV PCON,#80H;设SMOD=1
MOV SCON,#0D0H;置串行口方式3,允许接收
AJMP START
START:
;MOV DPTR,#4000H;置数据块首址
MOV DPTR,#TITLE;我们显示自己的汉字------------
;MOV R0,#80H;置发送字节数初值
;SETB ES;允许串行口中断
;SETB EA;CPU开中断
LOOP_SEND:
CLR A
;MOVX A,@DPTR;取第一个数据发送
MOVC A,@A+DPTR;我们取第一个数据发送
CJNE A,#'$',SEND_A;如果不是最后一个数据我们就发送这个数据,否则我们就结束程序.
;SJMP $;如果发送数据结束,我们就无限循环等待,免得出错.
LCALL DL10MS;调用延时子程序,好让上位机有反应的时间,来接受单片机的数据。
SJMP MAIN;我们让它循环发送数据,便于我们实验---------------------
MOV C,P;
MOV TB8,C;奇偶标志送TB8
SEND_A:
MOV SBUF,A;发送数据
JNB TI,$;
CLR TI
LCALL DL10MS;我们每发完一个数据就延时,好让上位机接收正常,免得出现乱码
INC DPTR;指向后一个数据.
LJMP LOOP_SEND;
;SJMP $;等待中断
;************;
;0.5毫秒延时子程序,执行一次时间为513微秒
DL512:MOV R2,#0FFH
LOOP1: DJNZ R2,LOOP1
RET
;
;10毫秒延时子程序(调用10次0.5毫秒延时子程序)
DL10MS:MOV R3,#64H
LOOP2: LCALL DL512
DJNZ R3,LOOP2
RET
TITLE:DB "d",'o'
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -