2193|0

35

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

双机通信实例 [复制链接]

单片机双机通信需要设置相同的波特率以及串口通信数据格式,同时为了长距离传输的需要,经常需要转换为标准的串行通信接口
发送方程序设计
#include<reg52.h>
#define uchar unsigned char
uchar idata buf[10];
uchar CheckSum;     //检验和
void main(void)
{
uchar i;
SCON  = 0x50;     //设置串行口: 方式 1, 8位UART, 允许接收
TMOD  |= 0x20;           //设置定时器T1, 方式 2, 8位自动重装
PCON  =0x80;      //设置SMOD=1
TL1    =0xF4;      //波特率4800bit/s,初值
TH1    =0xF4;
TR1    = 1;                          //启动定时器T1
for(i=0;i<10;i++)     //初始化数据
{
buf=i;
}
do
{
    SBUF=0xAB;     //发送联络信号"AB"
    while(TI==0);     //等待发送结束
    TI=0;
    while(RI==0);     //等待B机回答
    RI=0;
   }while((SBUF^0xBA)!=0);   //B机未准备好,继续联络
do
{
   CheckSum=0;     //清检验和
   for(i=0;i<10;i++)
{
SBUF=buf;
     CheckSum+=buf;    //求校验和
     while(TI==0);
     TI=0;
    }
   SBUF=CheckSum;    //发送校验和
   while(TI==0);
TI=0;
   while(RI==0);
RI=0;       //等待B机应答
}while(SBUF!=0);     //出错则重发
}



接收方程序设计
接收方B可以按照同样的方式建立项目。接收方B的程序源代码示例如下
#include<reg52.h>
#define uchar unsigned char
uchar idata buf[10];
uchar CheckSum;     //检验和
void main(void)
{
uchar i;
SCON  = 0x50;     //设置串行口: 方式 1, 8位UART, 允许接收
TMOD  |= 0x20;           //设置定时器T1, 方式 2, 8位自动重装
PCON  =0x80;      //设置SMOD=1
TL1    =0xF4;      //波特率4800bit/s,初值
TH1    =0xF4;
TR1    = 1;                          //启动定时器T1
do
{
}while(RI==0);
RI=0;
while((SBUF^0xAB)!=0)    //判断A机是否发出请求
    SBUF=0xBA;     //发送应答信号"BA"
    while(TI==0);     //等待发送结束
    TI=0;
    while(1)
{
CheckSum=0;     //清校验和
     for(i=0;i<10;i++)
     {
while(RI==0);
RI=0;
      buf=SBUF;     //接收一个数据
      CheckSum+=buf;    //求校验和
     }
while(RI==0);
RI=0;       //接收A机校验和
    if((SBUF^CheckSum)==0)   //比较检验和
{
SBUF=0x00;
break;
}       //校验和相同则发"00"
   else
{
SBUF=0xEE;     //出错发"EE",重新接收
    while(TI==0);
TI=0;
    }
}
}

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表