|
如果你選的單片機的晶振一定,比如12MHZ來說吧,機器周期是1us,就是說每1us產(chǎn)生一次計數(shù),就拿50ms來說,這是你想要的計時,意思是,對機器周期進行50000計數(shù)就可以得到我想要的,可T0是一個可以對機器周期能進行65536次計數(shù),也就是說我想要的50MS不能讓T0溢出,怎么辦,那么先給這個定時器里面放些數(shù),放多少,就是我們想要的50MS在加上一個多少就能等于65536,也就是65536和50000的差值,這個值就是我們說的初值。
為什么除以256,因為我們的計時器是兩個8位組成的,那么要把那些差值裝進這兩個8位,那么低8位最多能裝256個機器周期,那么256計滿了就用高8位的,就是說低8位滿一次高8位加1,那么高8位裝多少,低8位就滿了幾次,算法就是用差值除一下256取其整數(shù),剩下的,就是還剩了小于256次數(shù)的就放在低8位,就是差值 的余數(shù)。
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
flag++;
if(flag==20)//當(dāng)定時到1秒時執(zhí)行花括號里面的語句
{ }
}
因為TH0為高八位,最低位是2的8次方,也就是256,TL0中的最小值為256,而TL0為低八位最高位時2的7次方,也就是128,TL0最多放下255.你想,如果我要放一個超過256的數(shù),肯定是超過先放高八位,把剩下的部分放在低八位中了,TH0=(65536-50000)/256就是把TL0中放不下的部分放在TH0中,再把剩下的部分放在TH0中。
|
|