- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
例9.3 利用方式1,实现点对点的双机通信。在嵌入式控制系统中,如果通信的双方距离非常近,如在一个机械装置中,或只有几米并没有干扰,双机通信可以采用TTL电平的点对点的通信。此时通信双方只用三根线实现简单连接。甲机的TXD接乙机的RXD,甲机的RXD接乙机的TXD,双方的地线相连。具体如图9.6所示。将甲机片内ARM 0x30~0x3f的内容传到乙机片内ARM 0x40~0x4f。波特率选1200bps,主机频率12M,查表9.2,T1初值0xe8。 甲机程序: #include reg51.h #include absacc.h void main(void) { unsigned char i; TMOD=0x20;//T1方式2,做波特率发生器 TH1=TL1=0xe8; PCON=0x00; SCON=0x40; TR1=1; for(i=0;i16;i++) { SBUF=DBYTE[0x30+i]; while(TI= =0); TI=0; } } 乙机程序: #include reg51.h #include absacc.h void main(void) { unsigned char i; TMOD=0x20; TH1=TL1=0xe8; PCON=0x00; SCON=0x50; TR1=1; for(i=0;i16;i++) { while(RI= =0); RI=0; DBYTE[0x40+i] =SBUF; } } 例9.4 实现有握手信号和校验的双机通信。 在实际嵌入式系统控制中,虽然在距离很近时可以采用TTL电平的点对点通信,但为了通信的可靠性,一般在通信前通过握手信号建立链路,在通信中采用各种校验来保证信息传输正确。在本例中,波特率选1200bps。并假定甲机为主机,乙机是从机。 通信开始甲机先发一个查询信号0xaa,乙机收到后应答0xbb,甲机收到0xbb后,说明链路已建立,开始发送数据。假定发10个数据,在发送过程中,甲机对发送数据求和,在10个数据发送完毕,将数据和做为第十一个数据发给乙方。然后接收乙方是否数据传输正确的代码,如果代码是0x00,说明数据传输正确,结束通信。如果是0xff,说明数据传输不正确,甲方要重新发送。 乙方上电初始化后,接收允许,收到查询信号0xaa并回答0xbb后开始接收数据并对数据求和,接收结束,把此和与甲方发来的累加结果对比,如果相同说明数据传输正确,给对方发一0x00,结束通信。如果结果不正确则给甲方发一0xff,要求甲方重新发送。 程序如下: 甲机发送: #includereg51.h unsigned char buf[10]; unsigned char pf; void main(void) { unsigned char i; TMOD=0x20; //定时器/计数器波特率选1200bps工作方式2 TL1=oxe8; //波特率选1200bps,T1初值 TH1=oxe8; PCON=0x00; TR1=1; //启动T1 SCON=0x50; //串口工作方式1,接收允许 do{ SBUF=0xaa; //甲机给乙机发握手信号 while(TI= =0); //等乙机取走 TI=0; //手工清TI,准备下次发送 While(RI= =0)//等对方应答 RI=0;//收到对方应答,手工清RI,准备下次接收 } while((SBUF^0xbb)!=0); //应答信号是否0xbb,是,链路建立,传数据 do{ pf=0; //累加器清0 for(i=0;i10;i++) // 循环十次,每次发一个字节 { SBUF=buf[i]; //发一个字节 pf+=buf[i]; //累加器求和 while(TI==0); //等乙机取走 TI=0; //乙机取走,手工清TI,准备下次发送 } SBUF=pf; //最后发累加器和 while(TI==0); //等乙机取走 TI=0; //手工清TI,准备下次发送 while(RI==0); //等对方信息 RI=0; //手工清RI,准备下次接收 } While(SBUF!=0); //对方回答0x00,发送正确,结束发送。如回答非0x00,回到前面 } // do While()循环开始,重新发送 乙机接收 #includereg51.h unsigned char buf[10]; unsigned cha
文档评论(0)