下面是我的源代码,实现的就是利用外部中断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++);
}
}
[此贴子已经被作者于2009-5-12 22:41:30编辑过]
我里面的delay函数就是去抖的啊!还是不起作用啊!当然,是不是我的去抖写的有问题呢?
其实我猜也应该是硬件问题,而且多半是抖动的问题,因为Debug的时候,一点问题都没有,中断就只执行了一次,很正常,但是一整体运行,就总是中断两次——灯的状态总是要改变两次。真是搞人啊!
当然不知道是不是这个问题:我下降沿脉冲的触发方式有问题——我硬件上线路接法有问题!
希望版主能给点解决方法吧!万分感谢!
[em72]我会好好考虑版主的意见的,谢谢 !
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |