|
如果你選的單片機(jī)的晶振一定,比如12MHZ來(lái)說(shuō)吧,機(jī)器周期是1us,就是說(shuō)每1us產(chǎn)生一次計(jì)數(shù),就拿50ms來(lái)說(shuō),這是你想要的計(jì)時(shí),意思是,對(duì)機(jī)器周期進(jìn)行50000計(jì)數(shù)就可以得到我想要的,可T0是一個(gè)可以對(duì)機(jī)器周期能進(jìn)行65536次計(jì)數(shù),也就是說(shuō)我想要的50MS不能讓T0溢出,怎么辦,那么先給這個(gè)定時(shí)器里面放些數(shù),放多少,就是我們想要的50MS在加上一個(gè)多少就能等于65536,也就是65536和50000的差值,這個(gè)值就是我們說(shuō)的初值。
為什么除以256,因?yàn)槲覀兊挠?jì)時(shí)器是兩個(gè)8位組成的,那么要把那些差值裝進(jìn)這兩個(gè)8位,那么低8位最多能裝256個(gè)機(jī)器周期,那么256計(jì)滿了就用高8位的,就是說(shuō)低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)定時(shí)到1秒時(shí)執(zhí)行花括號(hào)里面的語(yǔ)句
{ }
}
因?yàn)門(mén)H0為高八位,最低位是2的8次方,也就是256,TL0中的最小值為256,而TL0為低八位最高位時(shí)2的7次方,也就是128,TL0最多放下255.你想,如果我要放一個(gè)超過(guò)256的數(shù),肯定是超過(guò)先放高八位,把剩下的部分放在低八位中了,TH0=(65536-50000)/256就是把TL0中放不下的部分放在TH0中,再把剩下的部分放在TH0中。
|
|