【第十四届蓝桥杯单片机组】学习笔记(3):定时器和计数器

定时器和计数器

  • 前言
  • 定时器配置
  • 定时器中断
    • 51单片机中断允许寄存器IE
    • 中断服务函数

前言

定时器作为单片机的内设用途十分广泛:控制信号的采样周期、产生周期信号、测量单片机运行时间、时间片轮转多线程…

关于51单片机定时器的详细解释在我的另外一篇文章:51单片机定时器中有介绍,这里就不再重复了,本篇文章主要是介绍蓝桥杯比赛中需要知道的定时器模式等,介绍如何快速使用编写代码。

定时器配置

  • 在比赛的时候可以使用STC-ISP软件来对定时器的模式和初值进行配置;
    【第十四届蓝桥杯单片机组】学习笔记(3):定时器和计数器_第1张图片
    • 系统频率:你所使用的晶振频率;
    • 选择定时器:一般51单片机常用的是定时器0和定时器1;
    • 定时器模式:16位就是0xFFFF=65535次计数容量
      【第十四届蓝桥杯单片机组】学习笔记(3):定时器和计数器_第2张图片
    • 定时器时钟(FOSC):1T则是晶振频率为单位的一个周期,12T则是12次晶振震荡周期作为定时器计数一次;

定时器中断

通过ISP工具配置完定时器之后,是没有开启定时器中断的,这里还需要我们去在初始化定时器后,再去配置中断寄存器;

51单片机中断允许寄存器IE

位序号 D7 D6 D5 D4 D3 D2 D1 D0
位符号 EA ET2 ES ET1 EX1 ET0 EX0
  • EA:全局中断(中断总开关)
  • ET2、ET1、ET0:定时器2,定时器1,定时器0中断
  • ES:串口中断
  • EX1、EX0:外部中断

所以我们如果想开启定时器0中断,那么需要使能EA和ET0

void Timer0Init(void)		//1毫秒@11.0592MHz
{
	AUXR |= 0x80;			//定时器时钟1T模式
	TMOD &= 0xF0;			//设置定时器模式
	TL0 = 0xCD;				//设置定时初始值
	TH0 = 0xD4;				//设置定时初始值
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
	
	/*上述的代码是ISP工具生成的定时器的模式初值设置代码,如果要开启中断则要自己写下面两句,开启中断*/
	
	EA=1;//开启总中断
	ET0=1;//开启定时器0中断
}

中断服务函数

51单片机的中断服务函数是在正常函数定义后面加上interrupt 中断服务号来编写的,中断服务号就存储了对应中断源的中断入口地址;

  • 定时器0:interrupt 1
  • 定时器1:interrupt 3
void Time0Isr() interrupt 1	//定时器0中断回调函数
{
	static uint8_t num=0;
	if(num<100)
	{
		num++;
	}
	else
	{
		LED1=~LED1;//中断服务函数,如果是定时器没有自动重装载的话记得在这里重装初始,即设置:TH0和TL0的值
		num=0;
	}
}

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