打印

双机通信实例

[复制链接]
1928|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 | 只看该作者
很好的串行接口通信的例子,简单实用,学习了,谢谢楼主。

使用特权

评论回复
5
tee.| | 2012-4-21 08:22 | 只看该作者
呵呵,不错。给个实例就是好。

使用特权

评论回复
6
renyi581176| | 2012-4-21 10:15 | 只看该作者
多谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

482

主题

2214

帖子

11

粉丝