已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、多机通信原理 在多机通信中,主机必须要能对各个从机进行识别,在51系列单片机中可以通过SCON寄存器的SM2位来实现。当串口以方式2或方式3发送数据时,每一帧信息都是11位,第9位是数据可编程位,通过给TB8置1或置0来区别地址帧和数据帧,当该位为1时,发送地址帧;该位为0时,发送数据帧。 在多机通信过程中,主机先发送某一从机的地址,等待从机的应答,所有的从机接收到地址帧后与本机地址进行比较,若相同,则将SM2置0准备接收数据;若不同,则丢弃当前数据,SM2位不变。二、多机通信电路图 此处,U1作为主机,U2为从机1,U3为从机2。三、C语言程序(1)主机程序#include#include#define _SUCC_ 0x0f/数据传送成功#define _ERR_ 0xf0/数据传送失败unsigned char Table9=0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39;unsigned char Buff20; /数据缓冲区unsigned char temp=0xff;sbit KEY1=P16;sbit KEY2=P17;/unsigned char addr;/延时1ms函数void delay_1ms(unsigned int t)unsigned int x,y;for(x=t;x0;x-)for(y=110;y0;y-);/缓冲区初始化void Buff_init()unsigned char i; /将Table里的数据放到缓冲区里for(i=0;i9;i+)Buffi= Tablei;delay_1ms(100);/串口初始化函数void serial_init()TMOD=0x20;/定时器1工作于方式2TH1=0xfd;TL1=0xfd;/波特率为9600PCON=0;SCON=0xd0; /串口工作于方式3TR1=1;/开启定时器TI=0;RI=0;/发送数据函数void SEND_data(unsigned char *Buff)unsigned char i;unsigned char lenth;unsigned char check;lenth=strlen(Buff); /计算数据长度check=lenth;TI=0; /发送数据长度TB8=0; /发送数据帧SBUF=lenth;while(!TI);TI=0; for(i=0;ilenth;i+) /发送数据check=checkBuffi;TB8=0;SBUF=Buffi;while(!TI);TI=0;TB8=0; /发送校验字节SBUF=check;while(!TI);TI=0;/向指定从机地址发送数据void ADDR_data(unsigned addr)while(temp!=addr)/主机等待从机返回其地址作为应答信号TI=0;/发送从机地址TB8=1;/发送地址帧SBUF=addr;while(!TI);TI=0;RI=0;while(!RI);temp=SBUF;RI=0;temp=_ERR_;/主机等待从机数据接收成功信号while(temp!=_SUCC_)SEND_data(Buff);RI=0;while(!RI);temp=SBUF;RI=0;void main()Buff_init();serial_init();while(1)if(KEY1=0)delay_1ms(5);if(KEY1=0)while(!KEY1);ADDR_data(0x01);if(KEY2=0)delay_1ms(5);if(KEY2=0)while(!KEY2);ADDR_data(0x02);(2)从机1程序#include#include#define addr 0x01/从机1的地址#define _SUCC_ 0x0f/数据传送成功#define _ERR_ 0xf0/数据传送失败unsigned char aa=0xff;/主机与从机之间通信标志unsigned char Buff20;/数据缓冲区/串口初始化函数void serial_init()TMOD=0x20;/定时器1工作于方式2TH1=0xfd;TL1=0xfd;/波特率为9600PCON=0;SCON=0xd0; /串口工作于方式3TR1=1;/开启定时器TI=0;RI=0;/接收数据函数unsigned char RECE_data(unsigned char *Buff)unsigned char i,temp;unsigned char lenth;unsigned char check;RI=0;/接收数据长度while(!RI);if(RB8=1)/若接收到地址帧,则返回0xfereturn 0xfe;lenth=SBUF;RI=0;check=lenth;for(i=0;ilenth;i+)/接收数据while(!RI);if(RB8=1)/若接收到地址帧,则返回0xfereturn 0xfe;Buffi=SBUF;check=check(Buffi);RI=0;while(!RI);/接收校验字节if(RB8=1)/若接收到地址帧,则返回0xfereturn 0xfe;temp=SBUF;RI=0;check=tempcheck;/将从主机接收到的校验码与自己计算的校验码比对if(check!=0)/校验码不一致,表明数据接收错误,向主机发送错误信号,函数返回0xffTI=0;TB8=0;SBUF=_ERR_;while(!TI);TI=0;return 0xff;TI=0; /校验码一致,表明数据接收正确,向主机发送成功信号,函数返回0x00TB8=0;SBUF=_SUCC_;while(!TI);TI=0;return 0;void main()serial_init();while(1)SM2=1; /接收地址帧while(aa!=addr)/从机等待主机请求自己的地址RI=0;while(!RI);aa=SBUF;RI=0;TI=0;/一旦被请求,从机返回自己的地址作为应答,等待接收数据TB8=0;SBUF=addr;while(!TI);TI=0;SM2=0; /接收数据帧aa=0xff;/从机接收数据,并将数据保存到数据缓冲区while(aa=0xff)aa=RECE_data(Buff);if(aa=0xfe)continue;P1=Buff1; /查看接收到的数据(3)从机2程序#include#include#define addr 0x02/从机2的地址#define _SUCC_ 0x0f/数据传送成功#define _ERR_ 0xf0/数据传送失败unsigned char aa=0xff;/主机与从机之间通信标志unsigned char Buff20;/数据缓冲区/串口初始化函数void serial_init()TMOD=0x20;/定时器1工作于方式2TH1=0xfd;TL1=0xfd;/波特率为9600PCON=0;SCON=0xd0; /串口工作于方式3TR1=1;/开启定时器TI=0;RI=0;/接收数据函数unsigned char RECE_data(unsigned char *Buff)unsigned char i,temp;unsigned char lenth;unsigned char check;RI=0;/接收数据长度while(!RI);if(RB8=1)/若接收到地址帧,则返回0xfereturn 0xfe;lenth=SBUF;RI=0;check=lenth;for(i=0;ilenth;i+)/接收数据while(!RI);if(RB8=1)/若接收到地址帧,则返回0xfereturn 0xfe;Buffi=SBUF;check=check(Buffi);RI=0;while(!RI);/接收校验字节if(RB8=1)/若接收到地址帧,则返回0xfereturn 0xfe;temp=SBUF;RI=0;check=tempcheck;/将从主机接收到的校验码与自己计算的校验码比对if(check!=0)/校验码不一致,表明数据接收错误,向主机发送错误信号,函数返回0xffTI=0;TB8=0;SBUF=_ERR_;while(!TI);TI=0;return 0xff;TI=0; /校验码一致,表明数据接收正确,向主机发送成功信号,函数返回0x00TB8=0;SBUF=_SUCC_;while(!TI);TI=0;return 0;void main()serial_init();while(1)SM2=1; /接收地址帧while(aa!=addr)/从机等待主机请求自己的地址RI=0;while(!
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 6-做负责任大国学案 2026-2027学年统编版道德与法治九年级下册
- 时尚领域创意主管业绩考核表
- 项目验收标准与流程设计手册
- 地产策划项目规划与实施绩效评估表
- 工业设备技术员KPI考核表
- 速递物流关于调整快递收费标准的通知4篇
- 会计事务所注册会计师客户评价与效率考核表
- 回复客户投诉产品的回复函(7篇范文)
- 能源行业智能监测与调度管理系统设计实现方案
- 请求确认签约细节函8篇
- 小学道德与法治新部编版六年级上册全册知识点(2026秋)
- 2026年秋招:中国建材笔试题及答案
- 自考09462 国际贸易实务(英语)(短句背诵版适配答题)
- 2026矿区微电网白皮书 多源协控 构建绿色矿区韧性微网-阳光电源
- 新苏教版三年级数学上册第七单元《1.数量关系的分析(1)》课件
- 2026年秋大象版(新教材)小学科学五年级上册教学计划及进度表
- 空压机日常巡检记录
- GB/T 28300-2025热轧棒材和盘条表面质量等级
- 护理科研文献检索与管理
- 【MOOC】《医学心理学》(北京大学)章节期末中国大学慕课答案
- 拖欠工程款上访信范文
评论
0/150
提交评论