51定时器




TL0(TL1)与TH0(TH1),因为是16位定时器/计数器,所以有两组专用的8位寄存器负责定时/计数的工作。 这两组特殊功能寄存器与普通的无符号字符型变量,功能几乎一样。唯一的区别在于,这两组特殊功能寄存器是定时器/计数器专用的,当定时开启后,TL0(TL1)自动跟随机器周期加一。当TL0(TL1)满了后,自动清零同时向TH0(TH1)进一位,不需要手动操作。 而当TL0(TL1)和TH0(TH1)都满了以后,此时如果定时中断和总中断都已经打开,那么就会发生溢出中断,同时这两个寄存器清零。
/**********************51单片机学习例程************************
* 平台:Keil U4 + STC89C52
* 名称:P1口控制流水灯闪烁
* 编写:Tony
* 日期:2022-1-23
* QQ : 674749794
* 晶体:12MHZ
* 变更记录:无
******************************************************************/
#include <reg52.h>
unsigned char cnt_60ms; //定义该变量为计数用变量,每隔60ms,该变量加一
sbit led= P1^0;
void Timer0_Init();
/********************************************
定时器0初始化函数,16位定时器,60ms溢出一次,开启中断
********************************************/
void Timer0_Init(){
TMOD=0x01; //模式设置,0b0000 0001,定时器0,工作模式1,16位定时器 (M1=0,M0=1)
ET0=1; //开启定时器0中断
TH0=0x15; //60ms溢出
TL0=0xA0; //
TR0=1; //使能定时器0
}
void main(){
led=0;
Timer0_Init();
EA=1; //开总中断
while(1){
if(cnt_60ms==15){
led=~led;//LED翻转
cnt_60ms=0;
}
}
}
void Timer0_In() interrupt 1
{
TH0=0x15; //60ms溢出
TL0=0xA0; //
cnt_60ms++; //计数加1
}
定时器2,自动装载模式
/**********************51单片机学习例程************************
* 平台:Keil U4 + STC89C52
* 名称:P1口控制流水灯闪烁
* 编写:Tony
* 日期:2022-1-23
* QQ : 674749794
* 晶体:12MHZ
* 变更记录:无
******************************************************************/
#include <reg52.h>
unsigned int cnt; //定义该变量为计数用变量,每隔60ms,该变量加一
sbit led= P1^0;
void Timer0_Init();
/********************************************
定时器0初始化函数,16位定时器,0.25ms溢出一次,开启中断
********************************************/
void Timer0_Init(){
TMOD=0x02; //模式设置,0b0000 0010,定时器0,工作模式2,8位定时器 (M1=1,M0=0)
ET0=1; //开启定时器0中断
TH0=0x06; //0.25ms溢出
TL0=0x06; //
TR0=1; //使能定时器0
cnt=0;
}
void main(){
led=0;
Timer0_Init();
EA=1; //开总中断
while(1){
if(cnt==1200){ //300ms
led=~led;//LED翻转
cnt=0;
}
}
}
void Timer0_In() interrupt 1
{
cnt++; //计数加1
}
浙公网安备 33010602011771号