}
g=num; P0=table[g]; ge=0; delay(2); ge=1;
//---------------------------------------------------------------- void timer_init(void) //定时/计数器初始化 {
TMOD=0x06; //计数器0工作工作方式2,自动重装初值 TH0=0; //计数器初值为0 TL0=0;
TR0=1; //计数器开始计数 ET0=1; //打开计数器0中断
RCAP2H=(65536-62500)/256; //在程序初始化的时候给RCAP2L和RCAP2H赋值, RCAP2L=(65536-62500)%6; //TH2
和
TL2
将会在中断产生时自动使
TH2=RCAP2H,TL2=RCAP2L。 }
TH2=RCAP2H; //12M晶振下每次中断62.5ms TL2=RCAP2L;
ET2=1; //打开定时器2中断 TR2=1; //定时器2开始计时 EA=1; //开总中断
//---------------------------------------------------------------- void timer2(void) interrupt 5 //定时器2中断(62.5ms) {
time++;
TF2=0; //定时器2的中断标志位TF2不能够由硬件清零,所以要在中断服务程序中将其
清零
if (time==16) //定时1s时间到 {
第34页
}
time=0; //计时清0 EA=0; //关中断
fre=(long)count*256+TL0; //count*256强制转换成long型,否则将不产生进位 TL0=0; //清零计数器0计数 TH0=0;
count=0; //清零计数器0计数 EA=1; //开始中断 }
//---------------------------------------------------------------- void timer0(void) interrupt 1 //计数器0中断 {
count++;
第35页