51单片机有两个16位的定时器/计数器,其核心部件为加法计数器。
- 初始化步骤
(1)TMOD的确定
(2)计数器的计数初值X
已知需要计的数n : X=2N-n
(3)开中断。定时器/计数器在中断方式工作时,需开CPU中断和源中断——编程IE寄存器;
(4)启动定时器/计数器——编程TCON中的TR1或TR0位。
- 定时器/计数器结构图
TCON为
- 计数器控制寄存器(TCON)
- 工作方式控制寄存器(TMOD)
- 工作模式1
- 工作模式2
- 工作模式3
- 代码
#include <REGX52.H>
typedef unsigned char u8;
typedef unsigned int u16;
sbit led=P1^2;
//定时器0初始化
void TIMEr0Init ()
{
TMOD|=0x01;//工作方式控制寄存器,01为定时模式
TH0=0xFC; // 高八位 赋初值
TL0=0x18; // 低八位
ET0=1; // 打开定时器0中断允许位
EA=1; //打开中断允许总控制位
TR0=1; //启动定时器工作
}
void main()
{
TIMEr0Init();
while(1);
}
void Time0() interrupt 1 //定时器0的中断号为1,外部中断0中断号为0,外部中断1中断号为2,定时器中断1中断号为3,串口中断号为4
{
static u16 i;
TH0=0xFC; //因为这个模式下不自动加载,故需要重新赋值
TL0=0x18;
i++;
if(i==3000)
{
i=0; //清零
led=~led;
}
}