版权声明:本文为博主原创文章,未经博主允许不得转载。 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循环来实现延时功能,很简单,但是存在问题:
- 延时时间不准确
- 严重浪费cpu资源
所以我们要使用单片机的定时/计数器来实现延时功能。
MSC51单片机中有两个16位定时器/计数器(即T0和T1)。
如图:
- 当单片机计数器连接欸到输入脉冲时,计数器就可以开始工作。
- 16位的计数器范围:0000~ffff,当超出这个范围是会溢出。 16位的计数器范围:0000~ffff,当超出这个范围是会溢出。
计时器/定时器原理图
如图:
- 当开关打到上面,计数器与振荡器相连,实现定时器功能。
- 当开关打到下面,计数器与T1相连,实现计时器功能。
- 控制端可以控制计数器/定时器的启动和停止。
定时器相关的寄存器
时间:2018年9月18日22:53:36
-END-