51单片机的定时/计数器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mylovewanzi/article/details/82764980

51单片机的定时/计数器


实现LED灯闪烁,代码如下:

#include <reg51.h>  //51单片机头文件
sbit LED = P0^0;   //定义特殊寄存器p0.0;注意:sbit 必须小写、P 大写!
void main()
{
	unsigned int i;   //定义无符号数i
	while(1)					
	{
		for(i=0;i<52000;i++);	//for循环,实现延时
		LED = ~LED;
	}
}

在上面的程序中,使用for循环来实现延时功能,很简单,但是存在问题:

  1. 延时时间不准确
  2. 严重浪费cpu资源

所以我们要使用单片机的定时/计数器来实现延时功能。

MSC51单片机中有两个16位定时器/计数器(即T0和T1)。

单片机计时器原理
如图:

  1. 当单片机计数器连接欸到输入脉冲时,计数器就可以开始工作。
  2. 16位的计数器范围:0000~ffff,当超出这个范围是会溢出。 16位的计数器范围:0000~ffff,当超出这个范围是会溢出。

计时器/定时器原理图

计时器/定时器原理图

如图:

  1. 当开关打到上面,计数器与振荡器相连,实现定时器功能。
  2. 当开关打到下面,计数器与T1相连,实现计时器功能。
  3. 控制端可以控制计数器/定时器的启动和停止。

定时器相关的寄存器

定时器相关的寄存器

时间:2018年9月18日22:53:36


-END-

猜你喜欢

转载自blog.csdn.net/mylovewanzi/article/details/82764980