在我们步入单片机学习时,大部分人接触的第一款单片机,是国产的STC单片机STC89C51,而最最容易让人忽视的,是单片机的晶振电路部分选用的晶振。
为什么这么说呢?
因为有的STC开发板,有的选用的晶振为11.0592MHz,有的则是是选用12MH。 这两个晶振相差不到1MHz,也同样能够为我们的单片机提供所需的时钟频率。
那么,既然都能让我们单片机正常工作,那为啥不做成一样的呢? 我们又应该如何选择它们呢? 接下来为大家解答!
(1)11.0592MHz晶振
在STC89C51单片机中,该晶振主要用于精准的生成串口的波特率值9600,我们的波特率计算公式如下:
TH1 = TL1 = 256 - 晶振值/12/2/16/波特率
此时,代入波特率与晶振值,可得出TH1为一个整数。
而改用12MHz的晶振,则无法精确计算出串口所需波特率9600下,TH1值成为整数。
另外,11.0592Mhz晶振用于生成定时器时钟时,则会导致一定的定时误差。 如:
T = 1 / 11059200 Hz
其结果,即单片机的机器周期,为除不尽的非整数。
而STC单片机的时钟周期为机器周期的12倍。 即12T。
在如定时为1ms时,则需要单片机计算n*12T,让定时器溢出一次,这无法得出整数的1ms,存在误差。
(2)12MHz晶振
该晶振主要用精确生成定时器所需时钟频率,如,处理出我们想要的1ms定时器,则该时钟下的时钟周期为
12*T = 12 / 12000000 = 1/1000000
定时1ms时,则相当于让计算1000个时钟周期,定时器溢出一次,即
t = 1000 * (12*T) = 1/1000 = 1ms
类似的,11.0592MHz晶振则无法精确生成这个精确的1ms时钟。
(3)总结
晶振的选用,无非就是通过时钟频率,来计算单片机外设(定时器、串口等)所需的时钟频率。
查单片机数据手册,在单片机能够使用的晶振值范围内,选择合适的晶振值,来达到自己想要的时钟精度目的。
相关文章