双机通信实例

[复制链接]
2733|5
 楼主| tianli1980 发表于 2012-4-19 09:05 | 显示全部楼层 |阅读模式
单片机双机通信需要设置相同的波特率以及串口通信数据格式,同时为了长距离传输的需要,经常需要转换为标准的串行通信接口。
发送方程序设计:
#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]=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[i];
     CheckSum+=buf[i];    //求校验和
     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[i]=SBUF;     //接收一个数据
      CheckSum+=buf[i];    //求校验和
     }
while(RI==0);
RI=0;       //接收A机校验和
    if((SBUF^CheckSum)==0)   //比较检验和
{
SBUF=0x00;
break;
}       //校验和相同则发"00"
   else
{
SBUF=0xEE;     //出错发"EE",重新接收
    while(TI==0);
TI=0;
    }
}
}
jxmzzr 发表于 2012-4-20 08:33 | 显示全部楼层
简单又实用的东西
设置相同的波特率
设置相的传输方式和数据格式
协议上约定好发送方和接收方。:lol
okyouwin 发表于 2012-4-20 16:24 | 显示全部楼层
学习下,·!~!~
 楼主| tianli1980 发表于 2012-4-20 22:52 | 显示全部楼层
很好的串行接口通信的例子,简单实用,学习了,谢谢楼主。
tee. 发表于 2012-4-21 08:22 | 显示全部楼层
呵呵,不错。给个实例就是好。
renyi581176 发表于 2012-4-21 10:15 | 显示全部楼层
多谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

482

主题

2214

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部