proteus仿真51单片机串口双机通讯.docVIP

  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文档。上传文档
查看更多
51单片机的串口双机通讯 什么是串口 串口串行发送数据的? ? ?波特率是指串行端口每秒内可以传输的波特位数。这里所指的波特率,如标准9600不是每秒种可以传送9600个字节,而是指每秒可以传送9600个二进位一个字节8个二进位,如用串口模式1来传输,那么加上起始位和停止位,每个数据字节就要占用10个二进位9600bps用模式1传输时,每秒传输的字节数是9600÷10=960字节 三、51单片机串口相寄存器 SCON串口控制寄存器 SM0 SM1 工作方式 功能 波特率 0 0 方式0 8位同步移位寄存器 晶振频率 / 12 0 1 方式1 10位UART 可变 1 0 方式2 11位UART 晶振频率/32或晶振频率/64 1 1 方式3 11位UART 可变 SM2:多机通信控制位 多机通信是工作在方式2和方式3的,所以SM2主要用于方式2和方式3,多级通信时,SM2=1,当SM2=1时,只有当接收到的数据帧第9位(RB8)为1时,单片机才把前八位数据放入自己的SBUF中,否则,将丢弃数据帧。当SM2=0时,不论RB8的值是什么,都会把串口收到的数据放到SBUF中。 REN:允许接收位 REN用于控制是否允许接收数据,REN=1时,允许接收数据,REN=0时,拒绝接收数据 (4)TB8:要发送的第9位数据位 在方式2和方式3中,TB8是要作为数据帧第9位被发送出去的,在多机通信中,可用于判断当前数据帧的数据是地址还是数据,TB8=0为数据,TB8=1为地址 (5)RB8:接收到的第9位数据位 当单片机已经接收一帧数据帧时,会把数据帧中的第9位放到 RB8中。方式0不使用RB8,在方式2和方式3中,RB8为接收到的数据帧的第9位数据位。 TI:发送中断标志位 方式0中,不用管他。其他方式下,当发送数据完毕,硬件会将其置1,当 TI 被置1,会向CPU发送中断请求。我们记得要在中断服务程序中把 IT 置回0 (7)RI:接收中断标志位 当接受完一帧数据时,RI ?由硬件置1,当RI 被置1,会向CPU请求中断。同样要在中断服务程序中把 RI 置回0。 PCON功率控制寄存器 这个寄存器只有一个位SMOD,在方式1,2,3时,波特率都与SMOD有关,当SMOD=1时,波特率会增加一倍。复位时,SMOD变回0 四、计算波特率对应的定时值 、方式0和方式2的波特率 ? ? ? ?方式0的波特率是固定为fosc/12,以一个12M 的晶振来计算,那么它的波特率可以达到1M。 ? ? ? ?方式2的波特率是固定在fosc/64 或fosc/32,具体用那一种就取决于PCON 寄存器中的SMOD位,如SMOD 为0,波特率为focs/64,SMOD 为1,波特率为focs/32 2、方式1和方式3的波特率 ? ? ? ?模式1和模式3的波特率是可变的,取决于定时器1或2的溢出速率,就是说定时器1每溢出一次,串口发送一次数据。 ?通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1为自动重装值这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。 在这个定时模式2下定时器1计算公式如下: ? ? ? ?上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。 在51 芯片中定时器启动后会在每一个机器周期使定时寄存器TH的值加1,一个机器周期等于十二个振荡周期,所以可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M 的晶振用在51芯片上,那么51的计数速率就为1M。通常用11.0592M 晶体是为了得到标准的无误差的波特率要得到9600的波特率,晶振为11.0592M 和12M,定时器1 为模式2,SMOD 设为1,分别看看那所要求的TH1 为何值。代入公式: ? ? ? ?11.0592M: ? ? ? ?12M: ? ? ? ?上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600波特率。当然一定的误差是可以在使用中被接受的,就算使用11.0592M 的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。

文档评论(0)

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

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

1亿VIP精品文档

相关文档