单片机串行口通信的波特率是如何确定的

STC单片机自适应波特率串口的实现方法
查看: 4201|
评论: 0|原作者: 赵培宇
摘要:   STC单片机自适应波特率串口的实现方法通常有以下几种:   (1)协议约定通信开始时主机固定发送1 个字符,从机以不同的波特率试探接收,当接收到的数据与约定相同时,确定该波特率即是正确的通信波特率。    ...
  STC自适应波特率串口的实现方法通常有以下几种:
  (1)协议约定通信开始时主机固定发送1 个字符,从机以不同的波特率试探接收,当接收到的数据与约定相同时,确定该波特率即是正确的通信波特率。
  (2)协议约定通信开始时主机发送1 串字符,从机以某固定波特率接收,然后通过软件分析接收到的数据,计算出接收数据与发送数据之间的倍数关系,从而确定正确的波特率。
  (3)协议约定通信开始时主机固定发送1 个字符,从机用单片机定时器检测RXD 上的信号宽度,通过计算来确定主机的波特率。
  以上3 种方法,第一种由于需要多次试探,效率很低;第二种计算量过大,不适合单片机处理;第三种方式单片机有现成的定时器资源,计算也相对简单,所以优选这种。
  要测量脉冲宽度,前提是单片机的时钟信号必须稳定。目前很多STC单片机可选外接晶振时钟或片内RC振荡时钟,片内RC振荡时钟省去了外部的晶振等元件,成本降低、电路板的体积也可以缩小,这对成本及体积敏感的应用很具优势。但选用片内RC振荡时,频率会有±15%左右的误差,频率的稳定性也比外接晶振要差,按理论计算值设置波特率参数,无法保证可靠的通信,但按以上自适应波特率串口的第三种方法,每次通信前实测、计算、确定波特率常数,就可以实现稳定可靠的通信,这样充分利用了STC单片机的优势。
  1 STC 单片机的特点
  标准51 芯片由于定时器最高分辨率只有1 μs,对于较高的通信波特率来说,测量精度不够,导致计算值不准,无法正常工作。STC系列单片机是在标准51单片机基础上发展起来的,它增加了很多实用的接口电路,扩大了时钟的频率范围,设计出了1T 时钟的芯片,可以通过软件对系统时钟分频,并提供了片内RC振荡时钟,在目前51芯片的市场占有极大的份额。STC系列单片机采用片内RC振荡时钟、自适应波特率串口通信技术,可以广泛地应用于分布式控制、智能仪表、通信等行业。
  2 自适应工作原理
  STC 单片机采用异步通信,UART 工作于模式1(8位UART,波特率可变),用定时计数器2做波特率发生器,工作于模式2(8位自动重装模式),主从机按图1方式连接,从机自适应主机的波特率。
  自适应过程由主机发送联络字符开始。为了使从机获得最大的测量脉宽,提高测量精度,由主机发送二进制“0”.如图2所示,二进制“0”由1位起始位,8位数据位(低位在先)及1位停止位构成,其中1位起始位和8位数据位全为0,所以低电平的宽度为9 b.
  从机查询RXD引脚的电平,检测到低电平后就启动定时器0开始计时,再检测到高电平就停止定时器0计时,根据定时器0的定时值就可以计算出主机的波特率。
  当时钟分频寄存器CLK_DIV=0(不分频),特殊功能寄存器AUXR=0xC0(T0 用1T 时钟),则:
  而STC51 系列单片机在UART 模式1,时钟模式为1T 时,其波特率公式为:
  从机UART在模式1下,将式(4)或式(6)计算结果作为定时器1重装值,设定通信参数,通过串口回送应答信号给主机。主机如正确接收到从机回送的信号,就说明从机已完成波特率自适应,可以开始正常通信了。
  3 误差分析
  为保证可靠通信,要求通信双方的波特率相对误差小于2.5%.
  在自适应波特率校准系统中,误差主要来自两个方面,一是定时器T0 启动和停止滞后造成的误差ΔT0;二是波特率发生器T1 本身固有的一个机器周期误差ΔT1 = ±1.由于STC51单片机采用1T 时钟定时,ΔT0 误差只有标准51系列芯片的1 12,系统误差主要由ΔT1 决定。
  以STC12C5620为例,当采用片内RC振荡,时钟频率通常在5.2~6.9 MHz 之间。当时钟频率为5.2 MHz,SMOD=1时,UART时钟分别按12T,1T 计算,见表1,表2.
  表1、表2中加粗部分表示可以选用的波特率值,由表1、表2可知,只要编程时选择合适的时钟,在5.2 MHz时钟频率下,波特率可以在300~115 200 b/s 之间实现自适应,由T1 取整带来的误差在0.5%以内。当系统时钟为6.9 MHz时,用同样的方法计算,也可以证明波特率可以在300~115 200 b/s 之间实现自适应,由T1 取整带来的误差也在0.5%以内。由此可见,STC12C5620采用片内RC振荡,可以在300~115 200 b/s之间完成波特率自适应,实现稳定可靠的通信。
  4 软件流程与程序
  主机软件流程图如图3所示,从机软件流程图如图4所示。
  以下为C51波特率自适应程序:
  5 应用实例
  采用STC12C5620 设计的重力检测开关,如图5 所示。为降低成本、缩小体积,采用了片内RC振荡,不设按键及显示。重力检测开关首次工作前需设定一些参数,并校准。由于没有键盘及显示,采用和计算机联机设置、校准。本电路采用了上述的自适应波特率工作方式,由PC机作主机,通过串口来初始化重力检测开关的各参数。
  设置时,将重力检测开关与计算机之间用RS 232线连接好,然后点击PC机软件界面上的“连接串口”按钮进行波特率自适应,当界面上状态栏提示“连接串口成功!”时,表示波特率自适应工作正确完成, 如图6所示,可以进行参数设置和校准操作。设置、校准后,重力检测开关就可脱机正常工作了。
  经反复验证,该电路在300~115 200 b/s 波特率范围内可稳定通信工作。
  6 结语
  该波特率自适应方法,可扩展应用于其他单片机系统,解决对方的波特率未知、或对方的波特率有偏差而无法正常通信的问题,即使对方的波特率不是标准值也可正常工作,具有较大的实用价值。
上一篇:下一篇:
Powered by &
这里是—这里可以学习 —这里是。
栏目导航:  摘要:阐述了89C51单片机串行通信口的结构及波特率的计算方法,通过对89C52串行通信口波特率发生器结构的分析,指出" />
免费阅读期刊
论文发表、论文指导
周一至周五
9:00&22:00
MCS―51系列单片机串行通信波特率的研究
2013年28期目录
&&&&&&本期共收录文章20篇
  摘要:阐述了89C51单片机串行通信口的结构及波特率的计算方法,通过对89C52串行通信口波特率发生器结构的分析,指出了89C52产生波特率的两种方式。计算出了89C51和89C52产生波特率与初值的对应关系,找出了波特率的最大值,给出了初始化编程的实例。 中国论文网 /8/view-5799313.htm  关键词:波特率;串行通信口;单片机;89C52   中图分类号:TP393 文献标识码:A 文章编号:(5-03   随着智能化控制仪表和网络设备的大力发展与使用,单片机的串行通信应用也无处不在,单片机作为前台计算机与其他计算机的通信,比如和PC微机的通信十分广泛,设计通信系统的首要问题是单片机串行通信口的正确使用,主要是波特率的设定以及串口的初始化编程,在单片机课程的教学中,单片机串口的应用是一个最具综合性的应用,也是一个难点,为此,结合教学与多年科研应用,特对MCS-51单片机的子51和子52单片机的波特率分别进行了分析与研究。   1 89C51单片机波特率的确定   1.1 89C51串行通信口的结构   89C51内部有2个16位定时/计数器,分别称为T0和T1,每个计数器均有四种工作方式:方式0(13位计数),方式1(16位计数),方式2(自动重装的1个8位计数),方式3(2个独立8位计数)。从图1可以看出,内部结构确定仅使用T1定时器的溢出频率去产生串行通信口的波特率。由于收、发时钟应该是周期性信号,所以T1工作在方式2,初值被装入TH1,由TL1计数并产生周期性溢出频率信号,溢出率是否除以2,由PCON中SMOD位的值确定,只有当SMOD=0时,才被除以2,上下输出的脉冲信号均被除以16,然后作为收、发时钟脉冲信号。   1.2 波特率的计算   单片机串行通信口有4种工作方式:方式0,波特率固定为fosc/12, 方式2,波特率固定为(2SMOD/64)×fosc ,方式1和方式3的波特率可以调整,在单片机与PC微机的RS-232C串口通信时,必须调整单片机串口通信的波特率,以达到与PC微机串口通信波特率相同。   T1工作在方式2,8位自动重装方式,溢出率取决于TH1中的初值:   1.3 波特率与TH1初值的关系   如果单片机与PC微机通信,其晶体振荡频率不再选用6MHZ、12MHZ、24MHZ,应该使用11.0592 MHZ,由此所计算出波特率与PC微机固有的各种频率能相吻合的情况下,能保证TH1中的初值是整数值。   选fosc=11.0592 MHZ,(1)式代人(2)式,得:   计算出波特率与初值(TH1)的对应关系见表1所示。从表1可以看出,在fosc=11.0592 MHZ的条件下,单片机串口最高波特率为19200波特,(TH1)=FDH,但要求SMOD=1。为了获得更高的波特率,有两种方法,第一,选择更高频率的晶体振荡器,例如22.1184MHZ,但是,89C52单片机工作频率一般限制在12 MHZ以内;第二,使用MCS-51中的子52系列单片机,例如89C52等。   2 89C52单片机波特率的确定   2.1 89C52串行通信口波特率发生器的结构   89C52串行通信口波特率发生器的结构见图2所示。89C52内部增加了定时/计数器T2,它和T0、T1一样,也有一个定时控制字(T2CON),新增了一个16位捕捉寄存器RCAP2H、RCAP2L,T2用作16位自动重装定时/计数时,RCAP2H、RCAP2L被用来存放16位初始值。   89C52串行通信口波特率发生器有2种方法:   第一种,将T2CON中的TCLK和RCLK均清零,则由T1的溢出率产生收、发时钟,这与89C51完全相同。   第二种,将T2CON中的TCLK和RCLK均置1,,则由T2的溢出率产生收、发时钟,注意,这时T2定时脉冲频率是主频的1/2。   2.2 T2波特率的计算   从图2可以看出,T2波特率的产生采用了16位自动重装方式,当T2产生溢出时,溢出信号控制将RCAP2H、RCAP2L寄存器中的初值重新装入TH2和TL2中,并从此初值开始重新计数。   2.3 波特率与RCAP2H、RCAP2L初值的关系   如果选择fosc=11.0592 MHZ,由(4)式计算出波特率与RCAP2H、RCAP2L初值的关系如表2所示。   由表2可以看出,最高通信波特率可以达到38400 bps,89C52比89C51通信的波特率提高了一倍,而且89C52主频脉冲频率可以为24 MHZ, 所以选用22.1184MHZ的主频时,89C52通信波特率还可以提高。   3 单片机串行通信初始化   单片机串行通信初始化的主要内容为:   确定定时/计数器的工作方式字和控制字;   对定时/计数器赋初值;   确定串行通信口的工作方式(SCON);   设置中断寄存器IE和IP;   启动定时。   例如,89C52采用方式1进行通信,每帧信息10位,波特率38400 bps,T2自动重装方式,fosc=11.0592 MHZ,串行通信处于高优先级中断方式,初始化程序段:   4 结束语   AT89C52单片机,包括W77E58单片机内部具有3个16位的定时/计数器,其中,T1、T2都可以用作串口波特率的发生器,但是,T2可以产生更高的波特率。如果单片机应用到串行通信系统中,最好选用子52系列的单片机。单片机串口的正确使用一定是建立在较完整的通信原理之上。   参考文献:   [1] 李朝青. 单片机原理及接口技术[M]. 北京:航天航空大学出版社,2007.   [2] 李全利. 单片机原理及接口技术[M]. 北京:高等教育出版社,2009.   [3] 李华贵, 李鹏. 微机原理与接口技术[M]. 北京:电子工业出版社,2010.
转载请注明来源。原文地址:
【xzbu】郑重声明:本网站资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有,如有不愿意被转载的情况,请通知我们删除已转载的信息。
xzbu发布此信息目的在于传播更多信息,与本网站立场无关。xzbu不保证该信息(包括但不限于文字、数据及图表)准确性、真实性、完整性等。后使用快捷导航没有帐号?
查看: 3719|回复: 7
我想用单片机通过串口控制GPRS,单片机的波特率是9600,gprs是115200,请问怎么设置gprs和单片机通信时的波特率?
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
我想用单片机通过串口控制GPRS,单片机的波特率是9600,gprs是115200,请问怎么设置gprs和单片机通信时的波特率?我是新手,请各位知道的帮帮忙!
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
如果GPRS模块的波特率不能调的话,换个晶振,以提高你的单片机波特率啊。 再说就算11.0592MHz的晶振最大波特率也是19200啊。 问一下,你用的GPRS模块是那种呢?
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
难道你的单片机波特率不能设置为115200吗?
有的单片机的波特率是自适应的,不需要设置,有的要设置进行修改。
AVR的单片机7.3728M都可以设成的高晶振的也可以,楼上说最大19200是错误的,你最好去看一下书。
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
引用 2 楼 lengqing1309 的回复:
难道你的单片机波特率不能设置为115200吗?
有的单片机的波特率是自适应的,不需要设置,有的要设置进行修改。
AVR的单片机7.3728M都可以设成的高晶振的也可以,楼上说最大19200是错误的,你最好去看一下书。
兄弟,人家是有前提的,19200的波特率,是在使用了11兆晶振的前提下,看漏了吧,呵呵。
在线时间1 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
对,我说的是51&&11.059的
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
52单片机用定时器2就能在11.0592M时达到115200的波特率。
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
在线时间0 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
一粒金砂(初级), 积分 0, 距离下一级还需 5 积分
GPRS模块都有一个初始化通信参数吧,包括波特率,停止位之类的,然后肯定还有一个AT命令时能够改变这些参数的.看看书明书,应该是能够找到的.
Powered by
逛了这许久,何不进去瞧瞧?MCS-51单片机串行口工作方式与波特率计算举例;1)方式0;方式0是外接串行移位寄存器方式;实际应用在串行I/O口与并行I/O口之间的转换;2)方式1;方式1是点对点的通信方式;接收端;在发送或接收到一帧数据后,硬件置TI=1或RI=;(1)发送:CPU执行一条写SBUF指令,启动了;输出移位寄存器的第9位;(2)接收:REN=1后,允许接收;端电平,当检
MCS-51单片机串行口工作方式与波特率计算举例
方式0是外接串行移位寄存器方式。工作时,数据从RXD串行地输入/输出,TXD输出移位脉冲,使外部的移位寄存器移位。波特率固定为fosc/12(即,TXD每机器周期输出一个同位脉冲时,RXD接收或发送一位数据)。每当发送或接收完一个字节,硬件置TI=1或RI=1,申请中断,但必须用软件清除中断标志。
实际应用在串行I/O口与并行I/O口之间的转换。
方式1是点对点的通信方式。8位异步串行通信口,TXD为发送端,RXD为
接收端。一帧为10位,1位起始位、8位数据位(先低后高)、1位停止位。波特率由T1或T2的溢出率确定。
在发送或接收到一帧数据后,硬件置TI=1或RI=1,向CPU申请中断;但必须用软件清除中断标志,否则,下一帧数据无法发送或接收。
(1)发送:CPU执行一条写SBUF指令,启动了串行口发送,同时将1写入
输出移位寄存器的第9位。发送起始位后,在每个移位脉冲的作用下,输出移位寄存器右移一位,左边移入0,在数据最高位移到输出位时,原写入的第9位1的左边全是0,检测电路检测到这一条件后,使控制电路作最后一次移位,/SEND和DATA无效,发送停止位,一帧结束,置TI=1。
(2)接收:REN=1后,允许接收。接收器以所选波特率的16倍速率采样RXD
端电平,当检测到一个负跳变时,启动接收器,同时把1FFH写入输入移位寄存器(9位)。由于接、发双方时钟频率有少许误差,为此接收控制器把一位传送时间16等分采样RXD,以其中7、8、9三次采样中至少2次相同的值为接收值。接收位从移位寄存器右边进入,1左移出,当最左边是起始位0时,说明已接收8位数据,再作最后一次移位,接收停止位。此后:
A、若RI=0、SM2=0,则8位数据装入SBUF,停止位入RB8,置RI=1。
B、 若RI=0、SM2=1,则只有停止位为1时,才有上述结果。
C、若RI=0、SM2=1,且停止位为0,则所接数据丢失。
D、若RI=1,则所接收数据丢失。
无论出现那种情况,检测器都重新检测RXD的负跳变,以便接收下一帧。
3)方式2、方式3
方式2和方式3是9位异步串行通信,一般用在多机通信系统中或奇偶校验的通信过程。在通讯中,TB8和RB8位作为数据的第9位,位SM2也起作用。方式2与方式3的区别只是波特率的设置方式不同。
向SBUF写入一个数据就启动串口发送,同时将TB8写入输出移位寄存器第9位。开始时,SEND和DATA都是低电平,把起始位输出到TXD。DATA为高,第一次移位时,将‘1’移入输出移位寄存器的第9位,以后每次移位,左边移入‘0’,当TB8移到输出位时,其左边是一个‘1’和全‘0’。检测到此条件,再进行最后一次移位,/SEND=1,DATA=0,输出停止位,置TI=1。
置REN=1,与方式1类似,接收器以波特率的16倍速率采样RXD端。。。在
起始位0移到输入寄存器的最左边时,进行最后一次移位。在RI=0,SM2=0或接收到的第9位=1时,收到的一字节数据装入SBUF,第9位进入RB8,置RI=1;然后又开始检测RXD端负跳变。
3、 多机通信
在这里,多机系统是指‘一主多从’。51系列单片机中,利用第9位TB8/RB8
来区分地址与数据信息,用位SM2确定接收方是否对地址或数据帧敏感。其原则是:
1)发送方用第9位TB8=1标志地址帧,TB8=0标志数据帧。
2)接收方若设置SM2=1,则只能接收到地址信息,若设SM2=0,则不管是地址还
是数据帧,都能接收到。
利用方式2、3的特点,在点对点的通讯中,在发送方可以用第9位TB8
作为奇偶校验位。在接收方,SM2位必须清0。
1)方式0的波特率=fosc/12
2)方式2的波特率=2^smod*fosc/64
3)方式1、3的波特率由T1或T2的溢出率和SMOD位确定:
(1)用T1:波特率=2^smod*T1定时器的溢出率/32,T1为方式
T1定时器溢出率=1/((12/fosc)*(256-X))
例:已知fosc=6MHz,SMOD=0,设置波特率为2400,求T1的计数初值X。
波特率=1/((12/fosc)*(256-X))/32=fosc/12*32(256-X)
(256-X)=fosc/M/6-X~=6.5104
X~=250=FAH 只能近似计算。
若fosc=11.0592MHz, 则256-X=11./384= X=F4H;可精确算出,对其它常用的标准波特率也是能正确算出。所以这个晶振频率是最常用的。
如果SMOD=1,则同样的X初值得出的波特率加倍。
(3)用T2:
在52型单片机中,串口方式1、3的波特率发生器选择由TCLK、RCLK位
确定是T1还是T2。若TCLK=1,则发送器波特率来自T2,否则来自T1。若RCLK=1,则接收器波特率来自T2,否则来自T1。
由T2产生的波特率与SMOD无关。T2定时的最小单元=2/fosc。T2的溢出脉冲16分频后作为串口的发送或接收脉冲。
波特率=(1/((2/fosc)(65536-X)))/16=fosc/(32(65536-X))
例:已知fosc=11.0592MHz,求波特率=2400时的X
0/(32(65536-X)) 65536-X=144 X=65392=FF70H
计数器初值寄存器:RCAP2H=0FFH,RCAP2L=70H。
包含各类专业文献、中学教育、行业资料、应用写作文书、外语学习资料、幼儿教育、小学教育、专业论文、各类资格考试、16MCS-51单片机串行口工作方式与波特率计算举例等内容。 
 MCS-51 串行接口的工作方式应为方式 1 ()6.串行口的中断,CPU 响应中断后,...()8、串行口的方式 2 的波特率为 FOSC/12 ()9、80C51 单片机中的 TXD 为...  波特率计算 波特率计算 在串行通信中, 收发双方对发送或接收的数据速率要有一定的约 定, 我们通过软件对 MCS―51串行口编程可约定四种工作方式。 其中, 方式0和...  二:串行接口控制与状态寄存器 MCS-51 串行口的工作方式选择、中断标志、可编程位的设置、波特率的增倍均是通 过两个特殊功能寄存器 SCON 和 PCON 来控制的。 1...  1.方式 0 (1)特点 1.用作串行口扩展,具有固定的波特率,为 Fo 串口的工作方式---51 系列单片机 串口的工作方式串行口分四种工作方式,由 SCON 中的 SMO、SM1...  51单片机波特率计算_计算机软件及应用_IT/计算机_专业资料。51 单片机波特率设置方法 51 芯片的串口可以工作在几个丌同的工作模式下, 其工作模式的设置就是使用 SCON...  位异步通信方式 9 位异步通信方式 波特率 fosc/12 可变 fosc/32 或 fosc/64 可变 3.MCS-51 单片机串行口各种工作方式的波特率如何设置,怎样计算定时器的初值? ...  8、MCS-51 单片机系列串行口的工作方式,波特率的计算、涉及的 寄存器。 第 4 章 MCS-51 单片机系统的扩展技术 1、三总线的概念,存储器扩展中地址译码方法,程序...  一,串行口的控制寄存器 MCS-51 单片机串行口是由缓冲器 SBUF, 移位寄存器 , ...工作方式 方式 0 方式 1 方式 2 方式 3 说明 波特率 f o s c /12 由...  在 51 单片机中波特率的计算方法一、传统 51 单片机波特率的算法传统 51 单片机的及其周期是晶振的 1/12,一般在使用串口工作方式 1 使用 时,波特率的计算公式: ...}

我要回帖

更多关于 单片机串行口 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信