智能车制作

标题: 大家帮忙看下这个外部中断!或者发给我一个外部中断的例程,谢谢了! [打印本页]

作者: riyakiss    时间: 2009-5-12 18:11
标题: 大家帮忙看下这个外部中断!或者发给我一个外部中断的例程,谢谢了!
本帖最后由 riyakiss 于 2009-5-12 20:17 编辑

下面是我的源代码,实现的就是利用外部中断IRP,以下降沿触发的方式,是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++);
  }
}
作者: riyakiss    时间: 2009-5-12 20:43
只能自己先顶一个了,难道没有人写过外部中断吗!!!
作者: jianghaitaoo    时间: 2009-5-13 16:39
把开关去了,直接用导线接GND和外部中断引脚,试试看有什么结果。我用的是凌阳的61板,不过和你这个差不多的。这个开关对我来说不懂,哎,知晓的搞些简单的程序。我一点电路知识都没有啊。好在我是在程序组。
作者: riyakiss    时间: 2009-5-13 18:40
我先用过你那种方案,直接把导线连起来,但那个样子,系统会更加不稳定,想问下,你那边有类似的外部中断程序吗,要是有的话,能否给我一个参考下,万分感谢了。
作者: TAOBINGJUN    时间: 2012-4-16 16:24
有 INTCR 这个寄存器么?编译都出错了




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2