77范文网 - 专业文章范例文档资料分享平台

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

来源:网络收集 时间:2020-08-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

51单片机的串口双机通讯

一、什么是串口

串口是串行发送数据的接口,是相对于并口来说的,是一个广泛的定义。本期我们说的串口指的是指UART或是RS232。

二、什么是波特率

波特率是指串行端口每秒内可以传输的波特位数。这里所指的波特率,如标准9600不是每秒种可以传送9600个字节,而是指每秒可以传送9600个二进位。一个字节需要8个二进位,如用串口模式1来传输,那么加上起始位和停止位,每个数据字节就要占用10个二进位。9600bps用模式1传输时,每秒传输的字节数是9600÷10=960个字节,发送一个字节大概需要1ms时间。

三、51单片机串口相关寄存器

1、SCON串口控制寄存器

(1)SM0和SM1:方式选择寄存器

其中SM0和SM1的工作方式如下表所示: SM0 0 0 1 1

SM1 0 1 0 1

工作方式 方式0 方式1 方式2 方式3

功能

8位同步移位寄存器

10位UART 11位UART 11位UART

波特率 晶振频率 / 12

可变

晶振频率/32或晶振频率/64

可变

(2)SM2:多机通信控制位

多机通信是工作在方式2和方式3的,所以SM2主要用于方式2和方式3,多级通信时,SM2=1,当SM2=1时,只有当接收到的数据帧第9位(RB8)为1时,单片机才把前八位数据放入自己的SBUF中,否则,将丢弃数据帧。当SM2=0时,不论RB8的值是什么,都会把串口收到的数据放到SBUF中。 (3)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位数据位。

(6)TI:发送中断标志位

方式0中,不用管他。其他方式下,当发送数据完毕,硬件会将其置1,当 TI 被置1,会向CPU发送中断请求。我们记得要在中断服务程序中把 IT 置回0。

(7)RI:接收中断标志位

当接受完一帧数据时,RI 由硬件置1,当RI 被置1,会向CPU请求中断。同样要在中断服务程序中把 RI 置回0。

2、PCON功率控制寄存器 7 6 5 4 3 2 1 0 SMOD / / / / / / / 这个寄存器只有一个位SMOD,在方式1,2,3时,波特率都与SMOD有关,当SMOD=1时,波特率会增加一倍。复位时,SMOD变回0。

四、计算波特率对应的定时值

1、方式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每溢出一次,串口发送一次数据。

3、使用定时器1计算初值

对于这几种方式,我们 通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1为自动重装值。这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。

在这个定时模式2下定时器1波特率计算公式如下:

fosc2SMOD 波特率??3212?(256?X)

上式中focs是晶振频率,X是定时器的初值。如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。 然后推导出,

X?256?focs?(SMOD?1)

384?波特率

在51 芯片中定时器启动后会在每一个机器周期使定时寄存器TH的值加1,一个机器周期等于十二个振荡周期,所以可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M 的晶振用在51芯片上,那么51的计数速率就为1M。通常用11.0592M 晶体是为了得到标准的无误差的波特率。我们以9600的波特率为例,如果要得到9600bps的波特率,晶振为11.0592M 和12M,定时器1 为模式2,SMOD 设为1,分别看看那所要求的TH1 为何值。代入公式: 11.0592M:

11.0592M(1?1)X?256??250

384?9600

12M:

12M?(1?1)X?256??249.49

384?9600

上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600波特率。当然一定的误差是可以在使用中被接受的,就算使用11.0592M 的晶体振荡器也会因晶体本身所存在的误差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。

下面给出用波特率对应定时器值及其误差,如下表: 波特率(bps) 晶振 (MHz) 11.0592 11.0592 11.0592 初值 SMOD=0 SMOD=1 误差 (%) 晶振 (MHz) 初值 SMOD=0 SMOD=1 误差(%) SMOD=0 SMOD=1 19200 9600 4800 / 0xfd 0xfa 0xfd 0xfa 0xf4 0 0 0 12 12 12 / 0xfd 0xf9 0xfd 0xf9 0xf3 / 8.51 -6.99 8.51 -6.99 0.16 五、双机通讯仿真实例

本期介绍的是51单片机的双机通讯,使用的波特率是9600,一个主机一个从机。主机按键获得按键的数值,然后发送给从机,从机接收到按键的键值,通过数码管显示出来。

这里面用到了我们前期的单个数码管仿真,独立按键仿真。

需要这些仿真的小伙伴,可以关注微信公众号“单片机仿真”,回复“串口通讯”获取源代码,进行参考。

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库proteus仿真51单片机串口双机通讯在线全文阅读。

proteus仿真51单片机串口双机通讯.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/1144098.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: