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

文章介绍了51单片机中定时器的配置,包括选择定时器模式、设置系统频率和定时器时钟。在STC-ISP软件配置后,文章强调了还需要手动开启中断并配置中断允许寄存器IE。此外,还提供了一个定时器0中断服务函数的示例,用于处理定时事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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

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

定时器配置

  • 在比赛的时候可以使用STC-ISP软件来对定时器的模式和初值进行配置;
    在这里插入图片描述
    • 系统频率:你所使用的晶振频率;
    • 选择定时器:一般51单片机常用的是定时器0和定时器1;
    • 定时器模式:16位就是0xFFFF=65535次计数容量
      在这里插入图片描述
    • 定时器时钟(FOSC):1T则是晶振频率为单位的一个周期,12T则是12次晶振震荡周期作为定时器计数一次;

定时器中断

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

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

位序号D7D6D5D4D3D2D1D0
位符号EAET2ESET1EX1ET0EX0
  • 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;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值