蓝桥杯单片机-定时器

一、简介

有三个寄存器与定时器相关(TMOD,TCON,数值设置寄存器TH TL)

1、定时器工作方式设置寄存器TMOD

GATE: 门控制位

GATE=0时,定时器/计数器启动与停止仅受TCON寄存器中的TRX(X=0/1)来控制.

=1时,由TCON寄存器中的TRX和外部中断引脚(INT0或INT1)上的电平共同控制.

C/T: 定时器模式和计数器模式选择位

C/T=1时为计数器模式

C/T=0时为定时器模式

M1,M0: 工作方式选择位(M1在左)

00方式0,16位自动重装; 

01方式1,16位;

10方式2,8位自动重装载;

11方式3,不可屏蔽中断的16位自动重装定时器;

2、定时器(中断)与外部中断设置寄存器TCON

定时器/计数器 和 外部中断 控制寄存器。字节地址为88H,可以位寻址

TF1:

当定时器1计满溢出时,由硬件自动将TF1置1,并申请中断;进入中断服务程序后,由硬件自动清零。

使用软件查询方式的话,查询到该位置1后,就需要用软件(写代码)清零

TR1: 

TR=1表示启动定时器,需要配合GATE和INT1

        当GATE=1,且INT1为高电平时,TR1置1启动定时器1

        当GATE=0时,TR1置1启动定时器1

TF0:

定时器0溢出标志位,功能和用法同TF1

TR0:

定时器0运行控制位,功能和用法同TR1

二、应用

一般使用STC-ISP软件进行定时器的初始化设置,并简单修改(1初值 2设置ET EA)

1、50ms产生一次中断(50ms执行一次中断函数中的程序)

蓝桥杯单片机-定时器_第1张图片

void Timer0Init(void)		//50毫秒@11.0592MHz
{
	AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x00;		//设置定时初始值
	TH0 = 0x4C;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
	
	
	ET0=1;
	EA=1;
	TR0 = 1;		//定时器0开始计时
}

void Timer0_serve(void) interrupt 1
{

}

2、定时器延时应用(以延时3s为例)

        通过TR0对定时器进行开关控制

void Timer0Init(void)		//30毫秒@12.000MHz
{
	AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0xD0;		//设置定时初始值
	TH0 = 0x8A;		//设置定时初始值
	TF0 = 0;		//清除TF0标志
	//TR0 = 1;		//定时器0开始计时
	ET0=1;
	EA=1;
}


unsigned char j;
void Timer0_serve(void) interrupt 1
{
	j++;
	if(j==100)		//达到3s定时
	{
		j=0;
        //
		TR0 = 0;
	}
}


void template()
{
	if()
	{
        //
		TR0 = 1;		//定时器0开始计时
	}
}

NOTES:

1、选择12T的原因

        12T定时时间更长(在16位自动重载模式下可最大定时71ms);1T定时器在16位自动重载模式下可最大定时5ms。两种周期下的精度都可至 1us。且实际应用中一般用到50ms 10ms定时比较多。选择12T可直接定时50ms,故选择12T的周期是更合适的。

2、定时器初值的计算(以晶振12M,16位模式,定时10ms为例)

        10ms=10000us

        65536-10000=55536(d8f0) 

        TH0=0xd8,TL0=0xf0 

 3、设置TMOD时,先后的赋值方式

TMOD = 0x04;       //设置定时器0计数器模式	
TMOD &= 0x0f;      //设置定时器1 16位自动重装载模式

由stc15的库文件中可以看到,TMOD的复位值为0000,0000
故TMOD &= 0x04; 是无效的赋值方式

(stc15.h    ↓ ↓ ↓ ↓)

▲文中不足之处请大家指正

你可能感兴趣的:(单片机,蓝桥杯)