我使用外部INT0和INT1的外部中断来检测电机旋转的两个脉冲,当电机旋转一圈时,將产生1个INT0脉冲和64个INT1脉冲。
以前是能很好的配合(两个INT0之间能接收到64个INT1的脉冲),但是不知道我改了什么地方后,两个INT0之间能接收到INT1的脉冲就不准了。
大致的程序是这个样子:
初始化 Interrupt
void Interrupt_Init(void)
{
INTCON1 = 0;
_NSTDIS = 1; _ALTIVT = 0;
_DISI = 1;
_INT0EP = 0; _INT1EP = 0;
IEC0 = 0x0000;
IEC1 = 0x0000;
IEC2 = 0x0000;
IFS0 = 0x0000;
IFS1 = 0x0000;
IFS2 = 0x0000;
_IPL = 5; _INT0IP = 7;
_INT1IP = 6;
}
假設中斷處理是這樣的:
int TEMP1;
int TEMP2;
int memory[40];
///////////////////////////////////////////////////
void _ISRoutine _INT0Interrupt(void)
{
if (!TEMP2)
{
_INT1IE = 1;
}
_INT0IF = 0;
TEMP1++;
TEMP2++;
memory[TEMP2] = TEMP1;
TEMP1= 0;
}
////////////////////////////////////
void _ISRoutine _INT1Interrupt(void)
{
TEMP1++;
_INT1IF = 0;
}
///////////////////////////////////////
int main()
{
Interrupt_Init();
_INT0IE = 1; // 允许外部INT0中断
while(1)
{
NOP();
}
}
其中memory[TEMP2]保存的就是一圈中INT1中断的次数 = TEMP1;
但是,memory[TEMP2] 保存的数据很乱!不知道什么原因! |