首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

大家帮忙看下这个外部中断!或者发给我一个外部中断的例程,谢谢了!

大家帮忙看下这个外部中断!或者发给我一个外部中断的例程,谢谢了!

下面是我的源代码,实现的就是利用外部中断IRQ,以下降沿触发的方式,是B口的电平反复反向。IRQ的电平变化,我是利用将GND和PE0之间用一单刀双置开关连接。通过拨动开关,来改变PE0引脚的电平。

功能:将开关从一侧拨到另一侧时,使PE0和GND导通,产生下降沿,从而使中断触发,B口电平全部反向,但是遇到了问题:每次电平反向了两次。我用Debug调试的话,都是只反向一次,怎么回事呢?调试一句句执行语句都没有问题,但是整体运行却有问题。

下面是我的代码,功能不复杂,就是简单的外部中断,希望大家耐烦看下,能帮我解决这个问题:

注:我用的是清华的那块DG128的板子。一般做智能车的同学都有用过吧!


#include<hidef.h>
#include<mc9s12dg128.h>

void Delay();

void main(void)
{
DDRB = 0xff; // PTB as output


PORTB = 0xff; // LEDs off
INTCR = 0xC0;


EnableInterrupts;
for (;;);
}



#pragma CODE_SEG NON_BANKED // Define Program ROM and Interrupt Vectors,in Non_Bank Area
#pragma TRAP_PROC // Define SegMent of Interrupt Serve Entrance




void OutINT(void)
{
DisableInterrupts;
Delay();
PORTB = ~PORTB;
Delay();
EnableInterrupts;
}

#pragma CODE_SEG DEFAULT // Define Program ROM and Interrupt Vectors,Return Default Area


void Delay(void)
{
int i,j;
for(i = 0; i<1000; i++)
{
for(j = 0; j<1000; j++);
}
}



WfBk3Cbg.jpg
pHuvLdFe.jpg

[此贴子已经被作者于2009-5-12 22:41:30编辑过]

可能是信号抖动引起的。加上硬件或软件的去抖处理就可以了。
海纳百川  有容乃大

我里面的delay函数就是去抖的啊!还是不起作用啊!当然,是不是我的去抖写的有问题呢?

其实我猜也应该是硬件问题,而且多半是抖动的问题,因为Debug的时候,一点问题都没有,中断就只执行了一次,很正常,但是一整体运行,就总是中断两次——灯的状态总是要改变两次。真是搞人啊!

当然不知道是不是这个问题:我下降沿脉冲的触发方式有问题——我硬件上线路接法有问题!

希望版主能给点解决方法吧!万分感谢!

[em72]
可以先加个阻容滤波电路试试。
海纳百川  有容乃大

我会好好考虑版主的意见的,谢谢 !

返回列表