课程设计--多级通信系统.docVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多机通信系统 一.引言 随着单片机技术的不断发展,单片机的应用已经从单机向多机互联化方向发展。单片机在实时数据采集和数据处理方面,有着成本低,能满足一般要求,开发周期短等优点,其在智能家居,计算机的网络通信与数据传输,工业控制自动化等方面有着广泛的应用。 在多机通信系统中,要保证主机与从机间可靠的通信,必须要让通信接口具有识别功能,51单片机串行口控制寄存器SCON中的控制位SM2正是为了满足这一要求而设置的。 二.工作原理: (1)数据的传递 主机发送信息,可以传送到各个从机或指定从机,各从机发送的信息只能被主机接收。机通信(关键是地址帧的识别) 主机发送:地址帧、数据帧的鉴别是通过第9位数据确定: TB8=1,地址帧 TB8=0,数据帧 机接收: 各从机串行口工作在方式2、方式3下; (b)多机通信标志SM2(SCON.5)=1; 检查接收到的第9位RB8(SCON.2),当: RB8=1:地址帧,将地址装入SBUF,置位RI,发出接收中断请求;判断主机发送地址是否与本机相符,若相符,则将从机SM2清0(变成直通方式),准备接收其后传送来的数据。 RB8=0:数据帧,对SM2=1,RB8=0的从机,接收数据丢弃,而对SM2=0的从机:直通方式,不论RB8是0还是1,都将接受到的数据送SBUF,并发出中断请求。 多机通信的过程总结如下: (1)全部从机串行口工作方式初始化为2或3,置位SM2,允许中断; (2)主机置位TB8,发送要寻址的从机地址; (3)所有的从机均接收主机发送的地址,进入中断进行地址比较; (4)确认寻址从机,自身SM2清0,向主机返回地址供主机核对; (5)主机核对无误,向被寻址从机发送发送命令,通知从机进行一对一数据通信。 #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 P11 = P1^1; 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 { while(P1==0xff); if(P1==0xdf) Mode=0; else if(P1==0xbf) Mode=1; else Mode=2; P0 = leddata[Mode]; P20 = 0; if(Mode == 0) { P2 = leddata[10]; P10 = 0; P11 = 0; DelayMs(500); P10 = 1; P11 = 1; DelayMs(500); P10 = 0; P11 = 0; DelayMs(500); P10 = 1; P11 = 1; DelayMs(5

文档评论(0)

ze122230743 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档