1、定时器简介
C51中的定时器和计数器是同一个硬件电路支持的,通过寄存器配置不同,就可以将他当做定时器或者计数器使用。 确切的说,定时器和计数器区别是致使他们背后的计数存储器加1的信号不同。当配置为定时器使用时,每经过1个机器周期,计数存储器的值就加1。而当配置为计数器时,每来一个负跳变信号 (信号从P3.4 或者P3.5引脚输入),就加1,以此达到计数的目的。 标准C51有2个定时器/计数器:T0和T1。他们的使用方法一致。C52相比C51多了一个T2。
①定时器和计数器,电路一样
②定时或者计数的本质就是让单片机某个部件数数
③当定时器用的时候,靠内部震荡电路数数
④当计数器用的时候,数外面的信号,读取针脚的数据
2、定时器怎么定时
定时器的本质原理: 每经过一个机器周期,就加1 寄存器
思考:
什么是晶振 晶振(晶体震荡器),又称数字电路的“心脏”,是各种电子产品里面必不可少的频率元器件。数字电路的所有工作都离不开时钟,晶振的好坏、晶振电路设计的好坏,会影响到整个系统的稳定性。
什么是时钟周期 时钟周期也称为振荡周期,定义为时钟频率的倒数。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟周期是一个时间的量。更小的时钟周期就意味着更高的工作频率
什么是机器周期 机器周期也称为CPU周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶 段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为 机器周期。一般情况下,一个机器周期由若干个时钟周期组成
——加一经过了多长时间
当晶振频率是11.0592MHz的时候,等于11059.2KHz = 11059200Hz
跳一次就等于一个机器周期,一个机器周期等于12个时钟周期
一个时钟周期等于晶振频率的倒数:1/11059200 秒
机器周期 = 12 x 时钟周期 =12 x (1/时钟频率) 秒 = 12 / 时钟频率 秒 = 12 / 11059200 秒 = 12 000 000 / 11059200 微秒 = 1.085 微秒
3、相关寄存器
4、关于TCON
5、配寄存器推荐用按位操作
①清零的时候,对应的需要清零的位与上0,不需要清零的位与上1
②置1的时候,需要置1的位置或1,不需要置一的位置或0
6、实验操作
通过定时器控制LED亮灭
代码如下:
#include "reg52.h"
sbit LED = P3^6;
void main()
{
int cnt = 0; //定义变量,记录爆表次数
LED = 1;
//1、配置定时器0工作模式16位计时
TMOD = 0x01;
//2、给初值,定一个10ms
TL0 = 0x00;
TH0 = 0xDC;
//3、开始计时
TR0 = 1;
//4、爆表,操作led,累计到1s,再操作led
//爆表,变量加1,加100次也就是1s,每隔1s转换led状态
while(1){
if(TF0 == 1)//爆表时,硬件修改TF0为1
{
TF0 = 0;//不用中断,必须软件清零
cnt++;
//重新给初值
TL0 = 0x00;
TH0 = 0xDC;
if(cnt == 100)//爆表100次经过了1s
{
cnt = 0;
LED = !LED;//每经过1s,翻转LED状态
}
}
}
}