51单片机定时器的配置与使用

定时器

定时器介绍:

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

定时器作用:
(1)用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
(2)替代长时间的Delay,提高CPU的运行效率和处理速度

(…)

定时器0初始化

在这里插入图片描述

定时器1初始化

在这里插入图片描述

中断源

在这里插入图片描述

#include "reg52.h"

typedef unsigned int u_int;
sbit LED1 = P2^1;
sbit LED0 = P2^0;

void Timer0Init()			//12MHz
{
	TMOD |= 0x01;		//0000 0001,低四位用于T0,GATE=0;C/T=0;M1M0=01:16位定时/计数器,与运算为了不让其它位受影响
	TH0 = 0xFC;			//给定时器赋初值,分为两个寄存器,一个配置高位,一个配置低位,单位是1us
					   //这里定时1ms,1ms=1000us,初值=65535-1000+1=64536,转为十六进制是0xFC18;
	TL0 = 0x18;
	ET0 = 1;		//打开定时器0中断允许
	EA = 1;			//打开中断总开关
	TR0 = 1;		//控制寄存器TCON的TR0,置1时定时器开启工作,置0时停止工作
}

//当定时器满时,会跳到中断处理函数
void Timer0interrupt() interrupt 1
{
	u_int mount;
	static u_int i;			//设定一个全局变量
	TH0 = 0xFC;				//当计时满溢出后,这两个标志位会清零,这时要给其重新上初始值
	TL0 = 0x18;
	i++;
	if(i == 1000)			//如果计时满1秒
	{
		i = 0;
		LED1 = ~LED1;			//LED灯亮灭
		
		//D2亮10次后点亮D1
		if(LED1 == 0)
		{
			mount++;
			if(mount == 10)
			{
				mount = 0;
				LED0 =~ LED0;
			}
		}
		
	}
}
int main()
{
	Timer0Init();
	while(1)
	{
	}
}

注意:定时器的的中断处理函数不一定要放到main.c文件中,也可以放到其他的文件,处理函数要用到变量可以在对应文件中声明,如果该变量要在main函数中改变的,如PWM控制的compare比较值,可以在main.c文件的开头声明该变量,用extern关键字

extern unsigned char compare
  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值