串口发送程序(51汇编)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

串口发送程序(51汇编)
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 $;等待中断
;SERVE1:
;JNB RI,LOOP;是接收中断,清除RI,转入接收从机的应答信息
;CLR TI;是发送中断,清除此中断标志
;SJMP ENDT
;LOOP:
;MOV A,SBUF;取从机的应答信息
;JZ LOOP1;判应答信号是#00H
;MOVX A,@DPTR;否则主机重发
;MOV C,P;
;MOV TB8,C;
;MOV SBUF,A;主机重发原数据
;SJMP ENDT;
;LOOP1:
;INC DPTR;修改地址指针,准备发送下一个数据
;MOVX A,@DPTR;
;MOV C,P;
;MOV TB8,C;
;MOV SBUF,A;发送
;DJNZ R0,ENDT;数据块未发送完,返回继续发送
;CLR ES;全部发送完,禁止串行口中断
;ENDT:
;RETI;中断返回
;************;
;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 "哈哈...串口发送成功啦!!",'$'
TITLE:DB "*",'$'
;TITLE:DB "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%",'$'
END。

相关文档
最新文档