微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机双机串口通信程序设计

单片机双机串口通信程序设计

时间:12-05 来源:互联网 点击:
利用方式1实现单片机双机通信,主频为6M,波特率为2400bps,电路见图5-10。当两个单片机距离较近时,甲、乙两机的发送端与接收端分别直接相联,两机共地。执行程序,甲机将亮灯信号发送给乙机,若通信正常,乙机接收到信号后点亮20个发光二极管。乙机采用查询与中断两种工作方式。当然20个LED乙机可单独控制,也可接受甲机的控制,并执行甲机指令,还需要进一步完善程序.
甲机发送程序:
org 0000h
sta:mov tmod,#20h;设置波特率
mov tl1,#0FAh
mov th1,#0FAh
setb tr1
mov scon,#40h;置工作方式1
clr ti
mov a,#00h
mov sbuf,a ;发送亮灯信号
wait: jbc ti,cont;发送成功清标志
ajmp wait ;等待发送完毕
cont: sjmp sta;重复发送
end

乙机查询工作方式接收:

org 0000h
mov tmod,#20h ;设置通信波特率
mov tl1,#0FAh
mov th1,#0FAh
setb tr1
mov scon,#40h
clr ri
setb ren ;允许接收
wait: jbc ri,read;接收成功清标志
ajmp wait ;接收未完等待
read: mov a ,sbuf
mov p1,a;接收亮灯信号送P1口
sjmp $
end

乙机中断工作方式接收
org 0000h
ajmp main
org 0023h
ajmp zd ;转串口中断程序
START: MOV TMOD,#20h
mov tl1,#0FAh
mov th1,#0FAh
setb tr1
mov scon,#50h
clr ri
mov ie,#90h;开中断

MAIN:sjmp $ 主程序
zd:clr ri ;清接收标志
;==============中断程序还要再完善==============
mov a ,sbuf ;读接收信号
mov p1,a
MOV R1,A ;将收到的信号送缓存
reti;中断返回
end

单片机双机串口通讯原理图>

采用方式2 通信,数据帧格式是11位的,TB8为奇偶校验位,接收过程要求判断RB8,若出错置F0标志为1,正确则置F0标志为0,然后返回。发送波特率375kbps,晶振为12MHz,所以SMOD=l。由于传送数据的波特率与定时器无关,所以程序中无需对定时器编程. 以下程序出自http://www.51hei.com一位单片机大侠之手,借来用用,如果什么什么错误或者需要改进的地方请大家指出,不过我这里基本测试通过了。
send:
MOVSCON,#80H;设置串行口为方式2
MOVPCON,#80H;SMOD=l
MOV R0,#50H;设数据块指针
MOV R7,#20 ;设数据块长度
STA: MOVA,@R0;取数据给A
MOV C,P
MOV TB8,C ;奇偶位P送给TB8,
MOV SBUF,A ;启动发送
;====================================================
WAIT: JBCTI,CONT ;若发完一帧数据,清标志后发下一帧数据
AJMP WAIT ;未完等待
;=======================================================
CONT:INCR0 ;修改数据指针
DJNZ R7,STA;循环发送至结束
RET
;================
;乙机接收程序如下:
;在进行双机通信时,两机应采用相同的工作方式和波特率。
;=============================================
MOVSCON,#90H;设置串行口为方式2,REN为1,允许接收
MOVPCON,#80H;SMOD=1
MOVR0,#50H;设置数据块首址
MOVR7,#20;置数据块长度
;=========================================================
WAIT:JBCRI,READ;接收完一帧数据则RI清零并读入数据
AJMP WAIT;未完等待
;==========================================
READ:MOV A,SBUF ;读入数据
JNB PSW.0,PZ ;收到数为偶数则转
JNB RB8,ERR;收到数为奇数,发端为偶数则通信出错
SJMPRIGHT ;相符则正确
PZ:JB RB8,ERR ;收到数为偶数,发端为奇数则出错
;========================================
RlGHT:MOV@R0,A ;通信正确,存放数据
INC R0;更改地址指针
DJNZR7,WAIT;数据块接收完否,未完继续
CLR PSW.5;通信正确,置F0为0
RET ;返回
ERROR:SETBPSW.5;通信出错,置F0为l
RET ;返回

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top