欢迎入群共同学习交流
时间记录:2024/7/3
一、电路原理图
51单片机具有两个定时器T0、T1
二、知识点介绍
1、寄存器介绍
(1)TMOD方式寄存器
T0为例介绍:
工作方式选择位M1、M0
常用方式为方式1、方式2,方式2低八位装载计数值,高8位装载自动重装载值
工作模式选择位C/T
C/T为1时计数器模式,以外部引脚3.4/3.5上输入的脉冲为输入信号,C/T为0时定时器模式,以晶振频率为计数信号
门控位GATE
GATE为0时,仅由TR0、TR1来开启定时器T0、T1,GATE为1时,外部中断引脚为高电平时才能够通过TR0、TR1开启定时器T0、T1
(2)TCON控制寄存器
位4(TR0)为定时器T0启动控制位,位5(TF0)为定时器T0定时时间溢出标志位
(3)IE中断允许寄存器
位1(ET0)定时器T0中断允许位,位7(EA)总中断允许位
2、工作方式框图
(1)方式1
开启定时器后开始计数,计数到最大值2^16=65535时,下一个脉冲产生定时器中断,TF1位置1,同时从0开始下一次计数
(2)方式2
开启定时器后TLx开始计数,计数到最大值2^8=255时,下一个脉冲产生定时器中断,TF1位置1,同时将THx的值装载到TLx进行下一次计数
3、时钟时间介绍
(1)振荡周期:晶振周期
(2)状态周期(S):两个振荡周期
(3)机器周期:12个振荡周期
(4)指令周期:执行1条指令使用的时间周期
TH、TL初值设置公式(1ms为例):
TH:(65535-1000)/256
TL:(65535-1000)%256
三、代码示例
#include <reg51.h>sbit led = P1^0;void tim0Init(void);int main()
{tim0Init();while(1){}
}//初始化TIM0
void tim0Init(void)
{TMOD |= 0x01; // 选择定时器0,设置定时器模式,选择模式1 TH0 = (65535-1000)/256;TL0 = (65535-1000)%256; // 设置定时时间ET0=1; //开启定时器0中断EA=1; // 打开总中断TR0=1;//开启定时器0
}//定时器中断函数
void tim0Handler(void) interrupt 1
{static int cnt = 0;cnt++;TH0 = (65535-1000)/256;TL0 = (65535-1000)%256; // 重新设置定时时间if(cnt==1000) //1s计时{cnt=0;led=!led;}
}