广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 Http://www.zlgmcu.com
- 1 -
设定80C51串行异步通讯的波特率
本文的目的在于补充及阐明一些有关的内容。这些内容涉及到将
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
8051或80C51串行口
(UART)应用于通常的RS-232串行通讯时,如何确定波特率及晶振频率。这里简化了标准的波
特率计算公式,并重申此公式可用于解决其他参数,如晶振频率和定时器重载值。
下面的讨论需要读者已经具备8051/80C51串行口和定时器的一些知识。这里讨论的内容可
以考虑作为《Philips 80C51 Family Microcontroller Data Book》中“定时器/计数器和标准
串行口”章节的补充说明。
因为我们假设使用标准串行口进行 RS-232 串行通讯,因此,串行口应工作于方式1或方
式3(波特率可变的模式),定时器 T1 应工作于方式2(8位定时器,自动重载模式,用作波特
率发生器)。在这里,对于CMOS工艺的微处理器,根据SMOD位是否被设置,所有的公式均可提
供2个时间除数的选择。对于NMOS工艺的器件,总是使用默认值(SMOD≠1)。
定时器重载值的基本公式
规定
关于下班后关闭电源的规定党章中关于入党时间的规定公务员考核规定下载规定办法文件下载宁波关于闷顶的规定
如下:
波特率
)则除数为(若
晶振频率
19213842561 =−= SMODTH
例如:当晶振为11.0592MHz时,如果需要获得9600波特率的通讯速率,则定时器重载值为:
) (十六进制的 xFD02533256
9600
384
11059200
256 =−=−
也可以根据公式,从其他已知条件求出波特率或晶振频率,如下所示:
1256
1921384
TH
SMOD
−
== )则除数为(若
晶振频率
波特率
)则乘数为(若设定的波特率所需的最小晶振频率 1921384 =×= SMOD
按上述公式,对于SMOD=1的CMOS器件,若使用19.2K的通讯波特率,则应使用的最小晶振
频率为19200*192,即3.6864MHz。当使用这个公式时,作为最大波特率的定时器重载值总是为
255(十六进制数0xFF),即TH1=256-1。
因此,按此方法计算,使用相差偶倍数的晶振频率,采用不同的定时器重载值,可以产生
相同的波特率。举例来说,3.6864MHz的4倍是14.7456MHz。在14.7456MHz的晶振频率下,只要
使用1/4的定时器溢出率:252(十六进制数0xFC),即TH1=256-4,作为定时器重载值,就可
以同样产生19.2k的通讯波特率。
一、用于产生标准波特率的晶振频率
下表列出了当80C51串行口工作在标准波特率下时可以使用的晶振频率。此表假设串行口
工作于方式1或方式3(波特率可变的模式),定时器 T1 应工作于方式2(8位定时器,自动重载
模式)。此表同时假设所需产生的最小波特率为9600(包括可使用置位SMOD位使波特率倍增)。
如果仅需产生一个较低数值的波特率,那可以选用许多晶振频率。
最小定时数值(timer count)栏指出:在当前晶振频率下,用以产生表中所给出的最大
波特率时,所需的最小定时数值。最后一栏为定时器重载值,用以产生最小定时数值。定时器
重载值显然是等于256减去最小定时数值。
在相同的晶振频率下,如需产生另外的通讯波特率,则可以将最小定时数值按照前面的方
法连续乘以2倍,并计算得出新的定时器重载值。例如,在晶振频率为1.8432MHz时,需产生为
4800的通讯波特率,定时数值将为2(因为9600的波特率是4800的两倍),定时器重载值为254
(256-2,或十六进制0xFE)。
广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 Http://www.zlgmcu.com
- 2 -
二、偏差频率的晶振所带来的影响
有时,人们希望在设计中使用一偏差频率的晶振,但仍想使用串行口进行调试。
因为大多数终端(或其他 RS-232 器件)与其他装置通讯过程中,使用的波特率会有几个
百分点的误差,但经常是能够成功完成。注意:在应用场合的正常操作中,如果需要对另外的
RS-232 器件进行通讯,那么,不推荐使用偏差频率进行串行通讯。
关于频率偏差的允许值应该是多少,则没有这方面的精确限制。因为这取决于器件通讯、
波特率、所有器件的精确频率,等等。但,可以这么说,如果频率偏差少于5%,可能通讯会可
靠工作。这个稍微用点肯定的数字是从以下几点得来的:对于一个10位的串行代码(1个起动位、
8个数据位、1个停止位),只要有10%的数据错误概率(在一个数据帧的末尾加上或减去一个位
时间),就会使接收器发生偏差。如果人们想要十分可靠的通讯效果,那么一个位时间的错误看
起来是十分过分的。因此考虑其10%的一半(5%)就不错了。
这就是为什么常常可以在应用中看到人们使用一个许多标准的“非定制”晶振,在调试、
出厂测试等工作中完成串行通讯。举个例,比如著名的“彩色脉冲串(color burst)”,当使用
3.579545MHz晶振时,速度要比3.6864MHz晶振慢3%。3.6864MHz可以作为理想的波特率发生器。
同样的,在某些情况时,可以用低成本的晶振代替低标准的晶振。另外一个明显的替换则出现
在表中,以标准的14.31818MHz晶振代替非标的14.7456MHz晶振,这个替换所产生的误差小于3%,
由于它有快速的指令执行速度,因此更方便。反之,3.58MHz晶振在许多的应用中就太慢了。
也应该记住,如果字符的传输的方式不是“返回-返回”式,那么 RS-232 的通讯能力是
非常健壮(抗干扰能力很强)。如果需要在特别应用中,不按规定使用串行口时,这一点会非常
重要。当数据全速发送时,一旦接收器没能同步上,接收器就没有机会再次同步传输数据帧。
但是,当字符与字符间有一短暂的间隔(大约2-3个位时间或更长),接收器就能够完全正确地
锁定起始位,不会产生数据帧错误。最坏的情况下,在通讯中只要有一个字节时间或更长时间
的短暂间隔,接收器不论如何地不同步,也总会做到再同步。
三、分析一个小小的已知现象
在大多数应用程序的串行口设置代码中,定时器寄存器TL1并没有被预先设定。在许多应
广州周立功单片机发展有限公司 Tel: (020)38730976 38730977 Fax: 38730925 Http://www.zlgmcu.com
- 3 -
用中,这会对串行口发送第一个字符带来影响,尽管出现这种影响的机会很少。通过逻辑分析
仪观察自串行口发出的第一个字节,可以看到:微处理器复位结束后这个效应就被激发。第一
个字节开始发送,但在逻辑分析仪上看不到任何本来应该有的单个单个的位。
这个情况出现的原因是:在第一个字节传输完成之前,TL1必须有一次定时溢出。如果TL1
没有被预先设置,那么其值将会被设置为复位值“0”。根据TH1中的重载值(此值同时取决于
波特率和晶振频率),这可能会在传送开始时产生一个最大为255个标准位时间的非工作延迟。
还有,在大多数应用中,这并不很重要。实际上,当电源上电后,在第一个串行字符发送
之前,此延时期间是有利的。但是,如果要求第一个串行字符应该要立即起动,那么,TL1可以
预先设置为一不是“0”的数值。如果不需要延迟,TL1所设定的数值应该等于TH1中的数值。