- 1、本文档共94页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机串口通信简介
【例6.2】现采用11.0592MHz的晶体,同样产生1200bit/s的波特率。 若SMOD=0,则可以计算出计数初值: X = 256 –11.0592?106/(32?12?1200)= 232 = E8H。 注意:这里是“=”,不是“?”。因此当晶振频率选用11.0592MHz时,极易获得标准的波特率(如1200、2400、4800、9600等),因此很多单片机应用系统选用这个看起来怪异的频率。 【例6.4】假设有两个单片机系统。编程将甲机的内部RAM中20个单元的数据块从串行口发送。乙机接收后,将数据存入其片内RAM中。假设串行口工作在方式1。波特率为1200bit/s,采用11.0592MHz的晶体,发送端和接收端都采用查询方式。 根据【例6.2】已知T1的计数初值为E8H。 发送程序 #include reg51.h uchar idata buf[20]; void main ( ) //主函数 { unsigned char i; TMOD = 0x20; //T1工作于方式2 SCON = 0x40; //串口工作于方式1 TH1 = 0xE8; TL1 = 0xE8; TR1 = 1; for (i = 0;i 20;i ++) { SBUF = buf [i]; while(TI = = 0); TI = 0; } for(;;) } } 接收程序 #include reg51.h uchar idata buf[20]; void main ( ) //主函数 { unsigned char i; TMOD = 0x20; //T1工作于方式2 SCON = 0x50; //串口工作于方式1,REN = 1 TH1 = 0xE8; TL1 = 0xE8; TR1 = 1; for (i = 0;i 20;i ++) { while(RI = = 0); RI = 0 buf [i] = SBUF; } for(;;) } 【例6.5】:题目同上,采用中断方式。 甲机发送程序: #include reg51.h uchar idata buf [20]; unsigned char i; void main ( ) //主函数 { TMOD = 0x20; //T1工作于方式2 SCON = 0x40; //串口工作于方式1 TH1 = 0xE8; TL1 = 0xE8; EA = 1; ES = 1; TR1 = 1; i = 0; SBUF = buf [i]; for(;;) } void trans_ISR( ) interrupt 4 //串行发送中断服务函数 { TI = 0; if(i 19) {i ++; SBUF = buf [i]; } else ES = 0; } 乙机接收程序: #include reg51.h uchar idata buf [20]; unsigned char i; void main ( ) //主函数 { TMOD = 0x20; //T1工作于方式2 SCON = 0x50; //串口工作于方式1,允许接收 TH1 = 0xE8; TL1 = 0xE8; EA = 1; ES = 1; TR1 = 1; i = 0; for(;;) } void receiv_ISR( ) interrupt 4 //串行发送中断服务函数 { RI = 0; if(i 20) { buf [i] = SBUF; i ++; } else ES = 0; } 6.5.3 多机通信 串行口的方式2和方式3有一个专门的应用, 即多机通信,通常采用主从式多机通信方式。 首先给各个从机定义地址编号,并将所有从机的 SM2设置为1。 在主机先发送一个数据块给某一个从机之前,它 必须先送出一个地址字节(这时主机应置TB8=1,表示 发送的是地址)。由于各从机SM2都为1,但接收到的 RB8都是1(地址信息),则能接收到来自主机的地址 信息。 中断后,各从机都要判断接收到的地址与自己的 地址是否相符。对于地址相符的从机,置SM2 = 0;对 于地址不相符的从机,仍然保持SM2=1。 对于地址相符的从机,置SM2=0,就使它已经满足 了上面的两个条件,能够接收主机随后发过来的所有 信息。 对于地址不相符的从机,因为SM2=1,则只有当 接收到的第9位数据为1,才能满足上面的两个条 件。
文档评论(0)