波特率与晶振
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
为什么51系列单片机常用11.0592MHz的晶振设计?
现在有许多极好的编译程序能显示代码,在速度和尺寸两方面都是非凡有效的。
现代的编绎器非常适应寄存器和变量的使用方面,比手动编译有较好的优越性,甚至在其它常规方面,所以C应是看代码方面最合适的。
答1:因为它能够准确地划分成时钟频率,与UART(通用异步接收器/发送器)量常见的波特率相关。
特别是较高的波特率(19600,19200),不管多么古怪的值,这些晶振都是准确,常被使用的。
答2:当定时器1被用作波特率发生器时,波特率工作于方式1和方式3是由定时器1的溢出率和SMOD 的值(PCON.7------双倍速波特率)决定:
方式1、3波特率= (定时器1的溢出率)
特殊时,定时器被设在自动重袋模式(模式2,TMOD的高四位为0100B),其为:
方式1、 3波特率=
11.0592MHZ晶振的一些典型波特率如下:
更换一种计算方式,它将以修改公式达到我们需求的波特率来计算出晶振。
最小晶振频率=波特率x 384 x 2 SMOD
这就是我们所需波特率的最小晶振频率,此频率能成倍增加达到我们需求的时钟频率。
例如:波特率为19.2KH2的最小晶振频率:
3.6864=19200x384x2(波特率为19.2K的SMOD为1 )
11.0592=3.6864x3
其中TH1是由倍乘数(3)确定
TH1=256-3=253=0FDH
用来确定定时器的重装值,公式也可改为倍乘数的因子:
晶振频率=波特率x(256-TH1)x384x2 SMOD
这是波特率为19.24K的晶振频率。
以上的例子可知,被乘数(3)是用来确定TH1:
TH1=256-3=253=0FDH
19.2K波特率的晶振为
11.0592=19200x(256-0FDH)x384x2(19.2 k的SMOD为1)
其它值也会得出好的结果,但是11.0592MHZ是较高的晶振频率,也允许高波特率。
设定80C51串行异步通讯的波特率
本文的目的在于补充及阐明一些有关的内容。
这些内容涉及到将标准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)。
定时器重载值的基本公式规定如下:
波特率
)则除数为(若
晶振频率
192 1 384 256 1 = − = SMOD TH
例如:当晶振为11.0592MHz时,如果需要获得9600波特率的通讯速率,则定时器重载值为:
)(十六进制的xFD 0 253 3 256
9600
384
11059200
256 = − = −
也可以根据公式,从其他已知条件求出波特率或晶振频率,如下所示:
1 256
192 1 384
TH
SMOD
−
= = )则除数为(若
晶振频率
波特率
)则乘数为(若设定的波特率所需的最小晶振频率192 1 384 = × = 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)。
- 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并没有被预先设定。
在许多应- 3 -
用中,这会对串行口发送第一个字符带来影响,尽管出现这种影响的机会很少。
通过逻辑分析
仪观察自串行口发出的第一个字节,可以看到:微处理器复位结束后这个效应就被激发。
第一
个字节开始发送,但在逻辑分析仪上看不到任何本来应该有的单个单个的位。
这个情况出现的原因是:在第一个字节传输完成之前,TL1必须有一次定时溢出。
如果TL1 没有被预先设置,那么其值将会被设置为复位值“0”。
根据TH1中的重载值(此值同时取决于
波特率和晶振频率),这可能会在传送开始时产生一个最大为255个标准位时间的非工作延迟。
还有,在大多数应用中,这并不很重要。
实际上,当电源上电后,在第一个串行字符发送之前,此延时期间是有利的。
但是,如果要求第一个串行字符应该要立即起动,那么,TL1可以
预先设置为一不是“0”的数值。
如果不需要延迟,TL1所设定的数值应该等于TH1中的数值。