打印

关于dspic30f5015 的外部中断問題

[复制链接]
1659|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lixiangwen284|  楼主 | 2010-3-23 13:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用外部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] 保存的数据很乱!不知道什么原因!
沙发
lixiangwen284|  楼主 | 2010-3-23 19:21 | 只看该作者
原来程序没有问题,是由于外部中断 有细小的杂波导致的误触发!

使用特权

评论回复
板凳
IJK| | 2010-3-25 11:46 | 只看该作者
或许是硬件造成的,可以用示波器看看。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝