【51单片机】定时器(江科大)

7.1定时器

1.定时器介绍:
51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成
2. 定时器作用:
(1)用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
(2)替代长时间的Delay,提高CPU的运行效率和处理速度
定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号,每隔“一秒”,计数单元的数值就增加一,当计数单元数值增加到“设定的闹钟提醒时间”时,计数单元就会向中断系统发出中断申请,产生“响铃提醒”,使程序跳转到中断服务函数中执行
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
定时器相关寄存器
在这里插入图片描述
1.配置定时器工作模式寄存器(TMOD)
在这里插入图片描述

(1)配置定时器0,不用定时器1,该定时器使用的是模式1,所以M1=0,M0=1
(2)当C/T=0时,多路开关连接到系统时钟的分频输出,T0对时钟周期计数,T0工作在定时方式。当C/T=1时,多路开关连接到外部脉冲输入P3.4/T0,即T0工作在计数方式。所以C/T=0
(3)当GATE=0(TMOD.3)时,如TRO=1,则定时器计数。所以GATE=0
综上1.高四位不变,低四位清零 2.高四位不变,低四位为0001
在这里插入图片描述

2.配置定时器控制寄存器(TCON)
在这里插入图片描述

3.定时器初始化直接生成
第一句已配置,不需要,直接删除
在这里插入图片描述
此外还缺少中断配置,加上ET0=1(允许中断);EA=1;PT0=0(低优先级);即可
4.定时器0的中断信号
在这里插入图片描述

5.Timer0.c的完整代码

#include <REGX52.H>

/**
  * @brief  定时器0初始化,1毫秒@12.000MHz
  * @param  无
  * @retval 无
  */
void Timer0Init(void)
{
   
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式 
	TL0 = 0x18;		//设置定时初值
	TH0 = 0xFC;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	ET0=1;          //允许中断
	EA=1;
	PT0=0;          //低优先级
}

/*定时器中断函数模板
void Timer0_Routine() interrupt 1
{
	static unsigned int T0Count;//静态变量,不清零
	TL0 = 0x18;		//设置定时初值
	TH0 = 0xFC;		//设置定时初值
	T0Count++;
	if(T0Count>=1000)
	{
		T0Count=0;
	}
}
*/

定时器中断函数模板不容易模块化,会引用一些主函数的变量,一般放在主函数中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值