溢出的时候进入中断,也就是从0xFFFF到0x0000的时候,标准51的晶振频率除以12就是计时器加1的频率,如果你用的是12MHz的晶体,那就是每隔1us你的计时器自动加1,所以最大能计时的时间范围就是从0x0000到0xFFFF,也就是从0到65535,65.5ms左右,你要每秒定时,或者你用频率很低的晶振,或者你要设置一个变量来计数,把定时器设置到50ms一中断,然后在中断中给变量加1,等变量到20,就证明到1秒了,再执行你的程序。
/*------------------------------T0---------------------------------*/
void int0()
{
k=0;
EA=0;
ET0=0;
TR0=0;
TMOD=0x01;
TL0=0x0c;
TH0=0x00;
ET0=1;
TR0=1;
EA=1 ;
}
/*----------------------------中断---------------------------------*/
static void t0_init() interrupt 1 using 1
{
TL0=0x00;
TH0=0x4c;
k++;
}
这个是标准晶振11.0592的50ms定时(现实中没有12M晶振)
定时1s只需要判断if(k=20){...此处添加你需要执行的程序...}即可
给初始值就是有公式计算的 一个固定公式 里面有几个参数 都是你知道具体值的参数 你可以带入 然后得出应该给他赋值多少 公式忘了 不好意思
楼主随便找一本单片机的书来看就有阿 静下心来就懂了 别急于求成
其他的一楼说的很清楚了
现实中没有12M晶振?
那我手里这个12M的晶振是假了的....