控制/MCU
了解这个问题之前首先需要知道什么是晶振。
1
晶振,顾名思义晶体振荡器的意思。它起到的作用是为单片机系统提供基准时钟信号,类似于我们人的心跳。单片机内部所有的工作都是以这个时钟信号为步调基准来进行工作的。
之前的文章第一次认识压电换能器中简单描述了晶体的压电效应。那么这里还有一个概念,一般情况下,无论是机械振动的振幅,还是交变电场的振幅都非常小。但是,当交变电场的频率为某一特定值时,振幅骤然增大,产生共振,称之为压电振荡。这一特定频率就是石英晶体的固有频率,也称为谐振频率。
STC89C52单片机的18脚和19脚是晶振引脚,一般我们会接一个11.0592MHz的晶振(它每秒钟振荡11,059,200次),外加两个20pF的电容,电容的作用是辅助晶振起振,并维持振荡信号的稳定。
51单片时钟源硬件连接原理图
2
计算机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。一个机器周期包括12个时钟周期。我们算一下一个机器周期是多长时间。设一个单片机工作于11.0592M晶振,它的时钟周期是1/11.0592MHz(微秒)。它的一个机器周期是12*(1/11059200)微秒。计算出来并不是一个整数,这为什么还要选用它呢?
3
51单片机里有非常重要的概念——定时器和计数器。定时器和计数器是单片机内部的同一个模块,通过配置 SFR(特殊功能寄存器)可以实现两种不同的功能,我们大多数情况下是使用定时器功能,来完成比如延时、中断等任务。
TMOD寄存器:定时器模式寄存器(地址0x89、不可位寻址)
TMOD定时器模式列表
那么这个又跟选用11.0592MHz的晶振有什么关联?
4
在这里需要借助串口(串行数据通信接口)做说明,串口收发数据有一个非常重要的概念——波特率(比特率Baud)。波特率就是发送一位二进制数据位的速率,即发送一位二进制数据的持续时间为1/Baud。这也是两个独立的系统之间进行串行数据通信前需要确定的一个重要因素。
以定时器T1作为波特率发生器来讲解,方式 1 下的波特率发生器必须使用定时器T1的模式2,也就是自动重装载模式,定时器的重载值计算公式为:
TH1 = TL1 = 256 - 晶振值/12 /2/16 /波特率
和波特率有关的还有一个寄存器,是一个电源管理寄存器 PCON,他的最高位可以把波特率提高一倍,也就是如果写 PCON |= 0x80 以后,计算公式就成了:
TH1 = TL1 = 256 - 晶振值/12 /16 /波特率
公式中数字的含义这里解释一下,256是8位定时器的溢出值,也就是TL1的溢出值,晶振值就是11059200,12是说1个机器周期等于12个时钟周期,16是说把一个信号采集16次。
由此可以知道当时钟频率选用11.0592MHz时,是很容易获得标准波特率的,所以很多单片机系统会选用这个看起来比较怪参数的晶振了。
定时器T1工作于模式2时的常用波特率及初值
单片机的定时器一直是一个非常重要的部分,无论是51单片还是其它架构的单片机,熟悉和理解定时器都是非常有必要的。
全部0条评论
快来发表一下你的评论吧 !