[工学]第6章 单片机的串行接口及串行通信V10.pptVIP

[工学]第6章 单片机的串行接口及串行通信V10.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]第6章 单片机的串行接口及串行通信V10

第6章 单片机的串行接口及串行通信 SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。 在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。在方式0时,SM2必须是0。 REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。 TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。在双机通信时,可以用作数据的奇偶校验位;或在多机通信中,作为地址帧/数据帧的标志位(一般约定:TB8 = 0为数据帧,TB8 = 1为地址帧 )。 在方式0和方式1中,该位未用。 RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。 else SBUF=txbuffer[outcount]; } } } 中断程序判断数据帧接收并存储于缓冲区之后,将全局位变量commandok置1。主程序不断查询这个位变量,当查到该位变量为1时将接收缓冲区内容读取分析,根据命令及命令参数执行对应的处理程序。 命令分析程序首先分析接收缓冲区中存放的地址 是否与本机地址相符,如果相符才能进一步判断,如 果不符则退出程序等待下一次通信帧的接收。命令分 析程序中通常设计一个多分支结构,根据不同界定符 执行对应的分析处理程序。相关命令分析程序如下: /*----------命令分析处理程序----------*/ void command_proccess(void) { commandok=0; //清除接收命令成功位变量 //判断接收地址是否与本机相符 if(rxbuffer[1]==set_address) { //判断起始界定符,转向对应分支 switch(rxbuffer[0]) { case #: //起始界定符为ASCII码# txbuffer[0]=; //发送数据帧的起始界定符 txbuffer[1]=set_address; //发送数据帧的本机地址 measure_data_proccess(0x00);//启动检测程序 txbuffer[2]=LEDDATA1+0x30; //将检测结果变为 txbuffer[3]=LEDDATA2+0x30; //ASCII码发送 txbuffer[4]=LEDDATA30x0f; txbuffer[4]=txbuffer[4]+0x30; if(rxbuffer[2]==0) //精度要求为一位小数 { txbuffer[5]=‘.’; //发送数据帧中加入小数点 //的ASCII码 txbuffer[6]=LEDDATA4+0x30; //发送小数值ASCII码 txbuffer[7]=0x0d; //发送结束符 } else //精度要求为整数 { txbuffer[5]=LEDDATA4+0x30; //发送最后一位整数 txbuffer[6]=0x0d; //发送结束符 } outcount=0x00; //设置发送计数变量初始值 SBUF=txbuffer[0]; //启动发送 tx_data_finish=0; //清除发送结束标志变量 break; } //分析处理执行结束,将相关变量清零 vcommandok=0; rxbuffer[0]=0x00; rxbuffer[1]=0x00; rxbuffer[2]=0x00; rxbuffer[3]=0x00; rx

文档评论(0)

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

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

1亿VIP精品文档

相关文档