首页 单片机多机通讯

单片机多机通讯

举报
开通vip

单片机多机通讯 引用 单片机多机通讯 2010-07-19 16:40:57| 分类: 自动化专业知识 | 标签: |字号大中小 订阅 本文引用自热火《单片机多机通讯》 引用 单片机多机通讯 说明:该程序为多机通讯程序,最多可以挂 255 个从机。 该程序主机发送端与多个从机的接收端相接,主机的接收端与多个从机的 发送端相接。 该程序主要的目的为给从机发送作为命令的数据。 该程序调试成功,从机可正确接收。 //=======...

单片机多机通讯
引用 单片机多机通讯 2010-07-19 16:40:57| 分类: 自动化专业知识 | 标签: |字号大中小 订阅 本文引用自热火《单片机多机通讯》 引用 单片机多机通讯 说明:该程序为多机通讯程序,最多可以挂 255 个从机。 该程序主机发送端与多个从机的接收端相接,主机的接收端与多个从机的 发送端相接。 该程序主要的目的为给从机发送作为命令的数据。 该程序调试成功,从机可正确接收。 //========================================================== =========== // 多机通讯主机程序 //zhuji.c //writer:谷雨 2008 年 3 月 22 日于 EDA 实验室 //注:主机先发送地址,接收到应答后,再发送数据 //========================================================== =========== #include #define unit unsigned int #define uchar unsigned char #define addr1 0x31 //从机 1 地址 #define addr2 0x32 //从机 2 地址 void Uart_Init(void) { TMOD=0x20; //定时器 T1 使用工作方式 2 TH1=250; TH0=250; TR1=1; //开始计时 PCON=0x80; //SMOD=1; SCON=0xd0; //工作方式 3,9 位数据位,波特率 9600bit/s,允许接收 TI=1; RI=1; } uchar Receive(void) //接收数据程序 { uchar Data; while(!RI); //等待接受完毕 Data=SBUF; //接收数据 RI=0; return Data; } void send_addr(uchar addr) //发送地址 { uchar tem; while(addr!=tem) //如果发送的地址与从机应答的地址不一样,则一直发送 地址 { while(!TI); //等待发送完毕 TI=0; //软件复位 TI TB8=1; //发送地址帧 SBUF=addr; //发送地址 tem=Receive(); } } void send_data(uchar ddata) //发送数据,但此处由于与从机的协议,禁止发送 0xff { while(!TI); //等待发送完毕 TI=0; //软件复位 TI TB8=0; //发送数据帧 SBUF=ddata; //发送数据 while(!TI); } void main() { Uart_Init(); send_addr(addr1); //向从机 1 发地址 send_data(0x33); send_addr(addr2); //向从机 2 发地址 send_data(0x34); while(1); } //========================================================== =========== // 多机通讯从机 1 程序 //cong1.c //writer:谷雨 2008 年 3 月 22 日于 EDA 实验室 //注:从机先接收地址,然后与自己的地址比较,正确了再接收数据,修改地址可 挂多个从机 //========================================================== =========== #include #define unit unsigned int #define uchar unsigned char #define addr 0x31 //从机 1 地址 void Uart_Init(void) { TMOD=0x20; //定时器 T1 使用工作方式 2 TH1=250; TH0=250; TR1=1; //开始计时 PCON=0x80; //SMOD=1; SCON=0xd0; //工作方式 3,9 位数据位,波特率 9600bit/s,允许接收 TI=1; RI=1; } void send(uchar Data) //发送数据程序 { while(!TI); //等待发送完毕 SBUF=Data; TI=0; while(!TI); } uchar recv_data(void) //接收数据 { uchar date; while(!RI); //等待接受完毕 RI=0; if(RB8==1) //若当前接收为地址帧则返回 0xff return 0xff; date=SBUF; while(!RI); return date; } void main() { uchar tem,Data; Uart_Init(); while(1) { SM2=1; //只接收地址帧 //如果接收到的地址帧不是本机地址,则继续等待 while(tem!=addr) { while(!RI); RI=0; tem=SBUF; } //如果是本机地址,发送应答信号,并做好接受数据的准备 TB8=0; //主机不 检测 工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训 该位 send(addr); SM2=0; //允许接受数据信息 //接收数据 Data=recv_data(); if(Data==0xff) continue; switch(Data) { case 0x01: //在此可以写入要完成的动作,最多可完成 256 个动作 break; case 0x33: P1=0xaa; //为方便其间,赋值给 P1 口,测 P1 口电平来检测该程序 break; case 0x02: break; case 0x03: break; default: break; } } }
本文档为【单片机多机通讯】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_094640
暂无简介~
格式:pdf
大小:105KB
软件:PDF阅读器
页数:4
分类:互联网
上传时间:2011-08-04
浏览量:61