以51微控制器 12MHz晶振情況下為例 #define STAYTIME 781//定時200ms 其他時間可以自己算 int tcount,p_count; double speed; void t0_init(void) { TH0=0x00; TL0=0x00; TMOD|=0x02; ET0=1; TR0=1; IT0=1;//外部中斷下降沿觸發 EX0=1; } void pulse_int(void) interrupt 0 { p_count++; } void t0_int(void) interrupt 1 { tcount++; if(tcount>STAYTIME){ tcount=0; EX0=0;//關輸入脈衝的中斷 ET0=0; speed=p_count/20;//單位就是 轉/秒 //下面重新開始 p_count=0; ET0=1; EX0=1; } } } void main() { t0_init(); EA=1; while(1); }
以51微控制器 12MHz晶振情況下為例 #define STAYTIME 781//定時200ms 其他時間可以自己算 int tcount,p_count; double speed; void t0_init(void) { TH0=0x00; TL0=0x00; TMOD|=0x02; ET0=1; TR0=1; IT0=1;//外部中斷下降沿觸發 EX0=1; } void pulse_int(void) interrupt 0 { p_count++; } void t0_int(void) interrupt 1 { tcount++; if(tcount>STAYTIME){ tcount=0; EX0=0;//關輸入脈衝的中斷 ET0=0; speed=p_count/20;//單位就是 轉/秒 //下面重新開始 p_count=0; ET0=1; EX0=1; } } } void main() { t0_init(); EA=1; while(1); }