|
STC8H單片機外部中斷0 P32接霍爾傳感器讀取直流電機轉(zhuǎn)數(shù),由于電機一轉(zhuǎn)就干擾中斷口,用示波器測方波,有許多不規(guī)則的毛刺尖峰,引發(fā)錯誤中斷,正常方波大約為135Hz 約7.5毫秒,在外部中斷第一次開啟定時器,外部中斷第二次關(guān)閉定時器,然后讀取范圍就框定在5~10毫秒,以下就是修改后的程序,但不知什么問題,在外部中斷里無法開啟定時器中斷計數(shù),望大俠指點
void T0_in(void) //外部中斷0初始化
{
IT0 = 1;
EX0 = 1;
EA = 1;
}
void INT0_Isr() interrupt 0
{
if(quan_flg==1) //外部中斷啟動標志
{
cishu++; //脈沖次數(shù)++
if(cishu%2==0)
{
zd_x=1;//當(dāng)脈沖來了引發(fā)中斷 且脈沖是第一次來時。 啟動定時器。
}
else
{
zd_x=0;//當(dāng)下一次脈沖來時 關(guān)閉定時器。
}
}
}
void init_Timer2() //10微秒@12.000MHz
{
AUXR &= 0xFB; //定時器時鐘12T模式
T2L = 0xF6; //設(shè)置定時初始值
T2H = 0xFF; //設(shè)置定時初始值
AUXR |= 0x10; //定時器2開始計時
IE2 = 0x04;//ET2; //使能定時器中斷
}
void Timer2() interrupt 12
{
if(zd_x==1)//定時器啟動標志
{
zd_time++; //時間計數(shù)++
}
if(zd_time>=5000&&zd_time<=10000)//時間計數(shù)大于等于5000US小于等于10000US
{
zd_time=0; //時間計數(shù)清零
pulse++; //讀取5000uS~10000US內(nèi)電機的轉(zhuǎn)數(shù)
}
AUXINTIF &= ~0x01;//T2IF; //清中斷標志
}
|
|