大家帮忙看下这个外部中断!或者发给我一个外部中断的例程,谢谢了!
- UID
- 790112
- 性别
- 男
|
大家帮忙看下这个外部中断!或者发给我一个外部中断的例程,谢谢了!
下面是我的源代码,实现的就是利用外部中断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编辑过] |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
可能是信号抖动引起的。加上硬件或软件的去抖处理就可以了。 |
|
|
|
|
|
- UID
- 790112
- 性别
- 男
|
我里面的delay函数就是去抖的啊!还是不起作用啊!当然,是不是我的去抖写的有问题呢? 其实我猜也应该是硬件问题,而且多半是抖动的问题,因为Debug的时候,一点问题都没有,中断就只执行了一次,很正常,但是一整体运行,就总是中断两次——灯的状态总是要改变两次。真是搞人啊! 当然不知道是不是这个问题:我下降沿脉冲的触发方式有问题——我硬件上线路接法有问题! 希望版主能给点解决方法吧!万分感谢! [em72] |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
|
|
|
|
|