文章目录
1.计时器
因为51单片机的机器周期计算公式是12/晶振频率MHz,若晶振为12MHz,则机器周期就是12/(12×10^6)=1us,也就是说计数器没1us计数一次。
一般来说,12MHz晶振下,16位定时器满计数是65536次,每次1us,最大就能计时65.536ms,则65536减去多少就是定时多少,如(65536-X)/256,就是定时X微秒。
那么T=1/(X/12)就是一个机器周期 ,(65536-Z(初值))*T就是定时的时间
比如是12M的晶振那么 设置TMOD=0x01, 计时器模式
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;就是设置了50ms的定时
2、计时器中断 1S 闪光灯
我们使用计时器中断来设置 1S 闪光灯
#include <reg52.h> //51头文件
sbit LED1 = P1^0; //位定义 LED1硬件接口
int num = 0;
//中断服务特殊功能寄存器配置
void init()
{
TMOD = 0x01; //定时器16为计数工作模式
TH0 =(65536-50000)/256;;
TL0 =(65536-50000)%256; //50ms 定时
ET0 = 1; //开定时器0中断
TR0 = 1;//启动定时器0
EA = 1; //开总中断
}
//定时器0中断服务程序 不用软件延时
void timer0() interrupt 1
{
TH0 =(65536-50000)/256;;
TL0 =(65536-50000)%256; //50ms 定时 模式1非自动重装需要手动重装再次定时
num++;
if (num == 20) { // 20 * 50ms 为 1s
num = 0;
LED1 = ~LED1;
}
}
void main()
{
LED1 = 0; //拉低IO点亮LED1
init();//初始化定时器0
while(1);//程序停留
}
文档参考:
关于51单片机的定时器T0、T1总结
http://www.51hei.com/bbs/dpj-103111-1.html