单片机多机通信程序C语言,单片机串口通行与多机通信程序源码

本文详细介绍了1号机和2号机之间的通信程序设计,1号机通过定时发送命令,等待接收数据,而2号机在接收到特定命令后中断发送温度数据。1号机的主程序中设置了初始化串行口和定时器,并通过延时和判断标志位来实现数据的发送和接收。2号机则在初始化后开启中断,当接收到1号机的命令字节时,通过中断服务函数发送温度数据。
摘要由CSDN通过智能技术生成

(一)1号机通信程序设计

1、1号机初始化函数

1号机采用定时发送命令,等待接收数据的方式,使用初始化函数对串行口、定时器进行初始化。

void  csh1()

{

SM0 = 0;                        //串行口通信方式1,8位异步通信

SM1 = 1;

REN = 1;                                //允许接收

PCON = 0x80;                //波特率加倍

TMOD = 0x20;                // T1作波特率发生器,方式2

TH1 = 0xd0;                        //选定波特率

TL1 = 0xd0;

TR1 = 1;                                //起动定时器

}

2、1号机发送程序

两台机器之间约定一个命令字节格式,假设2号机接收到该命令字节,就向1号机发送温度数据,1号机接收到该温度数据后显示在数码管上。1号机定时发送请求命令字节。

1号机的主程序:

Void main()

{

csh1();                //初始化串行口、定时器

while(1)

{

delay();                         //延时

SBUF = 0xa5;                        //发送给1号机请求数据命令

while(~TI){  ;  }        //等待串行发送结束

TI = 0;                                //发送标志清零

while(~RI)                //等待接收2号机发来的数据

{  ;  }

RI = 0;                                //接收标志清零

wendu = SBUF;                //保存接收的数据到wendu单元,供显示使用

}

}

(二)2号机通信程序设计

2号机接收命令后发送数据,2号机的初始化函数如下。

2号机采用接收命令后,中断发送数据到1号机的方式,使用初始化函数对串行口、定时器、中断进行初始化。

void  csh2()

{

SM0 = 0;                        //串行口通信方式1,8位异步通信

SM1 = 1;

REN = 1;                                //允许接收

PCON = 0x80;                //波特率加倍

TMOD = 0x20;                // T1作波特率发生器,方式2

TH1 = 0xd0;                        //选定波特率

TL1 = 0xd0;

TR1 = 1;                                //起动定时器

EA = 1;                        //开中断

ES = 1;                                //开串行口中断

}

2号机串行通信中断服务函数

Void  tongxin( )  interrupt  4

{

If( TI == 1 ) TI = 0;                                        //如果是发送中断,清发送中断标志

else                                                                        //否则是接收中断,判断接收数据是否是命令

{RI = 0;                                                                 //清除接收中断标志

If( SBUF == 0xa5 ) SBUF = wendu; }         //接收的来自1号机的命令字节,则发送温度数据

}

2号机的主程序:

Void main()

{

csh2();                                //初始化串行口、定时器

while(1)

{

wdjc();                //温度检测函数

delay();                //延时

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值