搜索
bottom↓
回复: 2

关于dspic30f5015 的外部中断问题

[复制链接]

出0入0汤圆

发表于 2010-3-23 16:17:54 | 显示全部楼层 |阅读模式
我使用外部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] 保存的数据很乱!不知道什么原因!

出0入0汤圆

 楼主| 发表于 2010-3-23 16:47:39 | 显示全部楼层
顶上去,各位帮忙看看啊

出0入0汤圆

 楼主| 发表于 2010-3-23 19:27:01 | 显示全部楼层
原来并不是程序的问题,是由于外部中断 有细小的杂波导致的误触发!加了RC 滤波解决了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 05:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表