网站大量收购独家精品文档,联系QQ:2885784924

主从单片机通讯实例主从单片机通讯实例.doc

主从单片机通讯实例主从单片机通讯实例.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
主从单片机通讯实例主从单片机通讯实例

最近在开发一个单片机多机通信系统,主从式分布,请问如何给从机分配地址?主机发送广播询问地址时,从机如何校验地址?用C如何编写代码?以一主机,2从机为例单片机a,b,c. a为主机,bc为从机。a上有一个外部中断0输入,按第一次a的两个LED亮500ms,再按一下,b机的两个LED灯亮500ms,第三次按下c机的两个LED灯亮500ms,然后周而复始。两个数码管分别显示0/1/2, 和abc(bc由从机反馈)/* 主从通信基本步骤: 1. 主机从机初始化为方式2或者3,从机都置SM2=1,允许中断 2. 主机置TB8=1,发送从机地址 3. 所有从机均接收主机发送要寻址的从机地址 4. 被寻址的从机确认地址后,置本机SM2=0,向主机返回地址,供主机核对 5. 核对无误后,主机向被寻址的从机发送命令,通知从机接受或者发送数据。 6. 本次通信结束后,主从机重置SM2=1,主机可再对其他从机寻址 */****************************************************************** 主机a: ****************************************************************** #include reg51.h#define uchar unsigned char #define uint unsigned int uchar leddata[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x40,0x00}; uchar Mode; sbit P10 = P1^0; sbit P13 = P1^3; sbit P17 = P1^7; sbit P20 = P2^0; sbit P21 = P2^1; void UART_init() { TMOD = 0x20; TH1 = 0xfd; TL1 = 0xfd; TR1 = 1; SCON = 0xd0; ES = 1; EX0 = 1; IT0 = 1; //INT0下跳触发 EA = 1; TI = 0; } void DelayMs(int ms) { uchar i; while(ms--) for(i=0; i120; i++); } void putc_to_SerialPort(uchar c) { SBUF = c; while(TI == 0); TI = 0; } void MasterControl(unsigned char Addr, unsigned char Comd) { TB8 = 1; putc_to_SerialPort(Addr); DelayMs(50); TB8 = 0; putc_to_SerialPort(Comd); DelayMs(50); } Ex0_int(void) interrupt 0 { P0 = leddata[Mode]; P20 = 0; if(Mode == 0) { P2 = leddata[10]; P10 = 0; P13 = 0; DelayMs(500); P10 = 1; P13 = 1; // MasterControl(b,C); // MasterControl(c,C); } else if(Mode == 1) { P10 = 1; P13 = 1; MasterControl(b,O); // MasterControl(c,C); } else if(Mode == 2) { P10 = 1; P13 = 1; // MasterControl(b,C); MasterControl(c,O); } Mode = (Mode + 1) % 3; } com_int(void) interrupt 4 { if(RI) { RI = 0; if(SBUF == b) { P2 = leddata[11]; } if(SBUF ==

文档评论(0)

yxutcangfp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档