波特率与晶振

  • 格式:doc
  • 大小:42.00 KB
  • 文档页数:5

为什么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晶振的一些典型波特率如下:

波特率 SMOD TH1 19200 1 0FDH 9600 0 0FDH 4800 0 0FAH 2400 0 0F4H 1200 0 0E8H 300 0 0A0H

更换一种计算方式,它将以修改公式达到我们需求的波特率来计算出晶振。 最小晶振频率=波特率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中的数值。