51单片机定时器中断

定时器介绍:51单片机的定时器属于单片机的内部资源,其电路连接和运转均在单片机的内部完成

定时器的作用:

1用于计时系统,可实现软件计时,或者使程序每隔一段固定的时间完成一项操作

2替代长时间delay,提高CPU的运行效率和处理速度

stc89c52定时器资源

定时器个数:3个(T0,T1,T2),T0和T1和传统的单片机兼容,T2是此单片机增加的资源。

定时器框图

定时器在单片机中就像一个闹钟,根据时钟输出的信号,每隔一秒,计数单元的数值就会增加一;

当计数单元的数值增加到设定的闹钟提醒时间时,计数单元就会向中断系统发出中断申请,产生闹铃提醒,使程序跳转到中断服务函数中执行。

时钟                 >                            计数单元               >               中断系统

提供计数单元的脉冲                    时钟计数                                  产生中断,执行定时任务

stc89c52的T0和T1均有四种工作模式

模式0:13位定时器/计数器

模式1:16位定时器/计数器

模式2:8位自动重装模式

模式3;两个8位计数器

以下是定时器0的模式图,定时器1模式图与定时器0相同

 以下是定时器2的模式图:

注意模式2定时器运用的是8位重装模式这里的THO和TLO相等。

 中断的概念

cpu在处理事件A时,发生了事件B请求去处理事件B,这时候中断就产生了。cpu暂时停止中断当前的工作,转去处理事件B(中断响应),当事件B处理完后,再回来处理事件A(中断返回),这一过程成为中断。

中断等级

51单片机中一共有5个中断源,分别是外部中断0;定时器0,外部中断1,定时器1,串口中断,中断等级从小到大分别是01234

在运用c语言编写程序时需要调用以下中断号,进行中断

 然后需要将打开中断的开关打开,举个例子如果想运用定时器0进行中断的话。先要把ETO关上也就是将1赋给ETO然后把EA关上把1赋给EA,然后选择一个PTO这里没有固定的选法

以上就是单片机中断和定时的原理内容

此段代码是运用定时器0中断,先选定定时器的模式,然后给TLO,THO,赋初值,将TF0清零后然开TRO开始计时,将中断打开,ET0=1,EA=1,PT0=0,到这里定时器0初始化完成,接着运用定时器0中断号void Timer0_Routine() interrupt 1在中断里输入要完成的任务给TH0,TL0赋初值完成任务以后退出中断,继续执行其他任务。

#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;
		
	}
}
*/

定时器2与定时0不一样的地方就是它用的是8位重装模式所以在TH0和TL0赋值相等,然后再tmod选择上选择定时器2即可

void main()
{
		TMOD|=0x02;//八位重装模块
		TH0=220;
	  TL0=220;
	  TR0=1;//启动定时器0
	  ET0=1;//允许定时器0中断
	  EA=1;//总中断允许
	  while(1)
		{
			
		}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值