用中断来操作
#include<reg52.h>
int count=0;
main()
{
EA=1 ;
ET0=1;
TMOD=0x01;//0000 0010 代表模式1 定时器0 工作方式1(就是16位定时计数) TOMD是一个寄存器
TR0=1; //启动定时器
TH0=(65536-46080)/256; //50ms
TL0=(65536-46080)%256; //其晶振是11.0592MHz,定时50毫秒时候TH0初值
while(1);
}
t0() interrupt 1 //定时器0(参考下面图片)
{
count++;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
if(count==20){ //50*20=1000ms=1s
P1=~P1; //让小灯全亮(达到一秒的时候)
count=0; //并且让计数清零
}
}
至于其中的46080怎么算的呢??
答:
机器周期=12*时钟周期(我的晶振频率是11.0592MHz,T=1/f),计数器计的数N=t/机器周期
然后我们设定的是N=50000/1.08506944=46080(误差是在微秒级上的)所以是比较精确的50ms