蓝桥杯单片机备战(十)定时器的基本原理与应用

1.原理实现

 

(1)、什么是定时/计数器?

定时/计数器,是一种能够对内部时钟信号或外部输入信号进行计数,当计数值达到设定要求时,向CPU提出中断处理请求,从而实现定时或者计数功能的外设。定时/计数器的最基本工作原理是进行计数

22年比赛用的是15F2K61S2,定时器资源和60S2一样,拥有定时/计数器0、定时/计数器1、定时/计数器2三个定时计数器。

查找手册得知这三个定时器都为16位加法计数器,由低8位TLx和高8位THx两个寄存器组成,最大计数值为65535个计数脉冲。这个65535是等于2的16次方得来的。

作为定时器时:

计数信号的来源选择周期性的内部时钟脉冲

作为计数器时:

计数信号的来源选择非周期性的外部输入信号


(2)、作为定时器时,他是怎么进行计数的呢?

假设选取内部时钟为12MHz,分频为12分频,我们现在定时10MS.

首先内部时钟为12MHz,12分频后就是1MHz,那么一个时钟就是1/1M = 1us,那么一个定时器就能够定时65535us,我们要定时10ms也就是10000us,那么我们给定时器赋一个55535的初值,也就是0xD8EF,高八位TH = 0xD8,低八位TL = 0xEF。每经过1us计数器加1,10000us后计数器溢出产生一个定时器中断,这时即为定时了10ms。


(3)、相关的寄存器

1.TCON是中断控制寄存器

2.TMOD模式控制寄存器,不能进行位寻址,只能字节操作。

本期我们使用的是16位定时计数器模式,所以我们M1 M0位0 1

3.上文提到的低8位TLx和高8位THx两个寄存器

4.特殊功能寄存器AUXR(控制分频是12分频还是1分频)

查找得AUXR的地址:0x8E

需要自行去头文件定义


2.代码实现

1.编程思路

题目:使用定时器0的模式0定时100ms,每100ms所有LED电平翻转

(1)、初始化函数

1.配置工作模式,即对TMOD寄存器编程。

2.计算技术初值,即对THx和TLx寄存器进行赋值。

3.配置分频,即对AUXR寄存器进行按位与和按位或进行赋值

4.使能定时/计数器中断,即ET0或ET1置1。

5.打开总中断,即EA =1。

6.启动定时器,即TR0或TR1置1。

(2)、中断服务函数

1.如果不是自动重装模式,需要对THx和TLx重新赋值。

2.进行间隔定时到达的逻辑处理(越少越好)。


2.代码

#include <REGX52.H>

unsigned char num = 0;

void TIM_Init()
{ 
  //配置TMOD寄存器
	TMOD = 0x00;
  //配置自动装载值
	TL0 = 0xEF;
	TH0 = 0xD8;//这里定时了10ms
	//配置分频(1分频),12分频AUXR = (AUXR&0x7f)|0x80;
	AUXR = (AUXR&0x7f);
	//使能定时/计数器中断
	ET0 = 1;
	//打开总中断
	EA = 1;
	//启动定时器
	TR0 = 1;
}

void TIM0_Start() interrupt 1
{
	num++;//每10ms秒++
	if(num==10) //每100msLED取反
		{
			num = 0;
			P0 = ~P0;//p0状态取反
		}
}
void main()
{
	P2 = (P2 & 0x1f) | 0x80;
	TIM_Init();
	while(1)
	{
		
	}
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值