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 |