菜鸟带你秒杀单片机之51单片机篇—定时器

定时器对于每个MCU来说都是非常重要的功能,实现精确的定时器,测频率,产生PWM都是靠的定时器,定时器的位数决定了定时器的精度,目前就我们所遇到有8位的定时器,16位的定时器,32位的定时器。功能一个比一个强。位数越高PWM的精度就越高,变化就越细腻,便于控制。51的定时就AT89X51来说有两个定时器T0和T1,52单片机又增加了一个T2。每个定时器都有4中工作模式,第一种:13位的定时器,第二种是16位的定时器,第三种:8位的自动重载。第四种就是T0分离的两个8位定时器。而T1停止工作。


要想熟练的运用这些东西不是靠的死记硬背,东西是死的人是活的。学习这类东西其实调试和看头文件,研究头文件和调试的窗口,你就可以迅速的掌握一款单片机。在看数据手册,你就会很容易的理解他们。


这张图已经把很多东西说明清楚了,定时器的振荡频率是晶振的12分频,意思就是说我们平时有的12MHz的晶振时,定时的每个计数都是1us.而且可以看出16位的定时器实际是由两个8位的定时组成的。最后溢出置位TF1.至于那个外部中断就是测方波的脉宽的了。

#include<reg52.h>

void t0_init(void)
{
	TMOD |= 0x01;     //定时的工作模式和定时或者计数
	TH0 = -50000>>8;
	TL0 = -50000%255; //将一个数分配到两个8位寄存器中
	ET0 = 1;          //打开定时器0的局部中断使能
}

void main(void)
{
   t0_init();
   EA = 1;	 		  //使能全局中断
   TR0= 1;			  //定时器开始计数
   for(;;)		 	  //等待定时器溢出中断。这个是定时器中断的方法,是硬件的,我们可以用查询的方式,就是软件来做的。判断TF0的情况,
   {
   		PCON = 0x01;  //停止CPU的活动,节能。降低功耗。
   }
}

void t0_overflow_isr(void) interrupt 1	 //中断服务程序
{
	 TH0 = -50000>>8;
	 TL0 = -50000&255;//51的定时器功能弱,不能自己重装,必须软件手动重装,。然每次都是从0开始计数到0xffff
	 P1 ^= 0x01;//每次取反P1.0口。
}

值得注意的是51的定时器就是一个一直向上加的定时器,直到溢出,而其它的单片机定时就有很多的模式,设定一个值进行比较,或者溢出了不管一直在计数等到第二次又触发,或者是减的,等等,千万不要以为单片机就只有一个定时器溢出。多想想,不定期更新中。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值