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