- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多机通信 双机通信时,两台单片机地位是平等的,此时,两台单片机的串行口均可工作于方式1。多机通信是指一台主机和多台从机之间的通信。而在多机通信中,有主机和从机之分,多机通信时,主机发送的信息可以传送到各个从机,而各从机发送的信息只能被主机接收,其中的主要问题是怎样识别地址和怎样维持主机与指定从机之间的通信。 1. 多机通信连接电路 在串行方式2或方式3条件下,可实现一台主机和多台从机之间的通信,其连接电路如图7.13所示。 2. 多机通信原理 多机通信时,主机向从机发送的信息分为地址帧和数据帧两类,以第9位可编程TB8作区分标志,TB8=0,表示数据;TB8=1,表示地址。多机通信充分利用了89C51串行控制寄存器SCON中的多机通信控制位SM2的特性。当SM2=1时,CPU接收的前8位数据是否送入SBUF取决于接收的第9位RB8的状态:若RB8=1,将接收到的前8位数据送入SBUF,并置位RI产生中断请求;若 送来的数据帧。其余从机由于地址不符,则仍保持SM2=1状态,因而不能接收主机传送来的数据帧。这就是多机通信中主、从机一对一的通信情况。这种通信只能在主、从机之间进行,如果想在两个从机之间进行通信,则要通过主机作中介才能实现。 3. 多机通信过程 主、从机工作于方式2或方式3,主机置 SM2=0,REN=1;从机置SM2=1,REN=1。 (2) 主机置位TB8=1,向从机发送寻址地址帧,各从机因满足接收条件(SM2=1,RB8=1),从而接收到主机发来的地址,并与本机地址进行比较。 (3) 地址一致的从机(被寻址机)将SM2清0,并向主机返回地址,供主机核对。地址不一致的从机(未被寻址机)保持SM2=1。 (4) 主机核对返回的地址,若与此前发出的地址一致则准备发送数据;若不一致则返回(2)重新发送地址帧。 (5) 主机向从机发送数据,此时主机的TB8=0,只有被选中的那台从机能接收到该数据。其他从机则舍弃该数据。 (6) 本次通信结束后,从机重新置SM2=1,等待下次通信。 RS-422与RS-485 RS-422由RS-232发展而来,是一种单机发送、多机接收的单向、平衡传输规范。 EIA于1983年在RS-422基础上制定了RS-485标准,增加了多点、双向通信能力等。 RS-422与RS-485 RS-422与RS-485共同的特点: 数据信号采用差分传输的方式 采用正逻辑,+2~+6V表示逻辑“ 1”, -2~-6V表示逻辑“ 0” 传输速率提高(1Mbps),传输距离延长(1200m),并允许在一条总线上连接多个接收器 * * * * * * * * * * * * #includereg52.h unsigned char flag,num; void main() { TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; REN=1; SM0=0; SM1=1; ES=1; EA=1; while(1) { if(flag==1) { ES=0; flag=0; SBUF=num; while(!TI); TI=0; ES=1; } } } 例3:在例1基础上,将单片机收到的数据,再发回PC机 void ser() interrupt 4 { RI=0; num=SBUF; flag=1; } 例4:电脑向单片机发送字符(串) 例5:单片机向电脑发送字符(串) void init() { TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; REN=1; SM0=0; SM1=1; ES=1; EA=1; } void ser() interrupt 4 { TI=0; } #includereg52.h #define uchar unsigned char void init(); void main() { init(); while(1) { SBUF=‘Y’; } } void init() { TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; REN=1; SM0=0; SM1=1; ES=1; EA=1; } void ser() interrupt 4 { TI=0; } #includer
文档评论(0)