任务4.4 基于多机通讯程序编写与调试.ppt

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

多机通信的应用领域 MCS-51多机通信原理 若SM2?=?0,则接收的第9位数据不论是0还是1,从机都将产生RI?=?1中断标志,接收到的数据装入SBUF中。 SM2、RB8与从机动作关系 通信过程 多机通信在编程时为了使通讯接口具有识别功能,给每个串口分配地址,先让从机的SM2=1,主机发送相应的地址,从机接收的地址如果符合本机的地址,就再次向主机发送本机地址,同时让从机的SM2=0准备接收数据;如果主机接收到的地址与发送的地址相符合,主机就发送数据,从机接到相应的数据后做出相应的动作,从而完成串口识别的作用。 void UartInit( void ) { TMOD = 0x20; //定时器T1使用工作方式2 TH1 = 0XFd; TH1 = 0XFd; TR1 = 1; //开始计时 PCON = 0x00; //SMOD=1; SCON = 0xd0; //工作方式3,9位数据位,波特率9600bit/s,允许接收 TI = 0; RI = 0; } void SendAddr( uchar addr ) { { TB8 = 1; //发送地址帧 SBUF = addr; //发送地址 while( !TI ); //等待发送完毕 TI = 0; //软件复位TI } } void SendData( uchar ddata ) { TB8 = 0; //发送数据帧 SBUF = ddata; //发送数据 while( !TI ); //等待发送完毕 TI = 0; //软件复位TI } void main() { uchar tem; UartInit( ); while( 1 ) { if( s0 == 0 ) { while(addr1!=tem) { SendAddr( addr1 ); //向从机1发地址 tem = Receive( ); } SendData( 0x33 ); } if( s1 == 0 ) { while(addr2!=tem) { SendAddr( addr2 ); //向从机2发地址 tem = Receive( ); } SendData( 0x34 ); } } } void UartInit( void ) { TMOD = 0x20; //定时器T1使用工作方式2 TH1 = 0XFd; TH1 = 0XFd; TR1 = 1; //开始计时 PCON = 0x00; //SMOD=1; SCON = 0xd0; //工作方式3,9位数据位,波特率9600bit/s,允许接收 TI = 0; RI = 0; } void send( uchar Data ) { SBUF = Data; while( !TI ); //等待发送完毕 TI = 0; } uchar Recvadd(void) { uchar date; while( !RI ); //等待接受完毕 RI = 0; if( RB8 == 1 ) //若当前接收为地址帧则返回0xff { date = SBUF; return date; } else return 0xff; } uchar RecvData(void) { uchar date; while( !RI ); //等待接受完毕 RI = 0; date = SBUF; return date; } void main() { uchar tem,Data; UartInit( ); while( 1 ) { SM2 = 1; //只接收地址帧 while( tem != addr ) //如果接收到的地址帧不是本机地址,则继续等待 { tem=Recvadd()

文档评论(0)

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

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

1亿VIP精品文档

相关文档