|
|
void timer_init() //定時(shí)器初始化
{
TMOD=0x01; //設(shè)置定時(shí)器0方式1,即16位計(jì)數(shù),用TH0TL1來計(jì)數(shù)
TH0=0x3c; //設(shè)置初值50ms,TH0=(65536-50000)/256 這是按機(jī)器周期1us算的
TL0=0XB0; //TL0=(65536-50000)%256 這是按機(jī)器周期1us算的
TR0=1; //開始計(jì)數(shù)工作
ET0=1; //開啟中斷允許
EA=1; //開啟總中斷允許
}
機(jī)器周期就是晶振動(dòng)12次的時(shí)間,用T表示的話 T=1/12000000x12,其中1/12000000是12MHz晶振振動(dòng)1次的時(shí)間,乘上12是1個(gè)機(jī)器周期需要振動(dòng)12次,算出來就是1us時(shí)間
TH0TL0組成的16位計(jì)數(shù)器如果從0x0000計(jì)數(shù)到0xffff就需要65536個(gè)機(jī)器周期,為了達(dá)到計(jì)數(shù)50000次,即50ms,所以設(shè)置起點(diǎn)(65536-50000)=15536,用16進(jìn)制表示就是0x3CB0 |
|