打印
[AVR单片机]

AVR单片机外部中断问题

[复制链接]
2803|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sqjh1988|  楼主 | 2012-11-21 13:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void system_init()
{
PORTD=0x7d;
DDRD=0x70;
PORTC=0XFF;
DDRC=0XFF;
PORTG=0XFF;
DDRG=0XFF;
// PORTA=0XBF;
// DDRA=0XFF;
}
void interrupt3_init()//外部中断3初始化
{
EIMSK|=0x08;//使能外部3中断
EICRA=0x80; //INT3下降沿触发中断
MCUCSR=0X00;
}
void djfz() //电机反转
{
     uchar a,b,k;
  for(k=n;k>0;k--)//转动10圈
  {
     if(motorstop==1)
   {
   break;
  }
  for(b=0;b<50;b++)//逆时针转一圈
     {
      if(motorstop==1)
   {
    break;
   }
   for(a=0;a<4;a++)
         {
    if(motorstop==1)
    {
     break;
    }
    PORTC=table0[a];
    delay_ms(5);
      
   }
         }
  // if(motorstop==1)
  //  break;
   
     }
}
void djzz()//电机正传
{
uchar a;
uchar b;
uchar k;
//for(m=10;m>0;m--)
   //{
     for(k=5;k>0;k--)
   {
    if(flag2==1)
     break;
   for(b=0;b<50;b++)
      {
    if(flag2==1)
      break;
   for(a=0;a<4;a++)
     {
       if(flag2==1)
    {
     break;
    }
    PORTC=table1[a];
    delay_ms(5);
   }
       }
   
    }

//}   
}
ISR(INT3_vect)
{

SREG|=0X00;
motorstop=1;
SREG|=0X80;
}
void interrupt1_init()
{
EIMSK|=0x02;//使能外部1中断
EICRA=0x0c; //INT1上升沿触发中断
MCUCSR=0X00;
}
ISR(INT1_vect)//电机寻零位
{
SREG|=0X00;
flag2=1;
SREG|=0X80;
}
int main()
{   
    system_init();

SREG|=0X00;
interrupt1_init();//开INT1中断
SREG|=0X80;
    flag2=0;
djzz();//电机寻零位
flag2=0;
EIMSK|=0x00;//关INT1中断
SREG|=0X00;
interrupt3_init();
SREG|=0X80;
motorstop=0;
n=10;
djfz();
}
为什么中断1可以用,中断3 不能用,电机无法反转,软件仿真显示的结果是电机正传过后执行外部中断3初始化,然后就一直在服务程序里循环跳不出来,导致电机反转程序无法执行,软件仿真单步运行时,执行到中断3服务程序时提示的错误是AVR Simulator: Stack pointer below start of RAM,为什么会这样,大家别只看不给解答啊,拜托拜托。。。。

相关帖子

沙发
程序逻辑| | 2012-11-21 22:29 | 只看该作者
顶起    确实看不懂

使用特权

评论回复
板凳
程序逻辑| | 2012-11-21 22:32 | 只看该作者
建议楼主在中断函数里加入在某口输出电平点亮LED灯   看看中断函数究竟执行了没有  如果执行了 那就是这段中断代码没有达到你想要的目的  再找原因不迟

使用特权

评论回复
地板
huangxz| | 2012-11-21 22:45 | 只看该作者
AVR Simulator: Stack pointer below start of RAM 是因为你所使用的仿真芯片类型没有选对,
从程序上看没有比较明显的问题,不过建议看下工程设置以及产生的汇编代码是否有什么问题。

使用特权

评论回复
5
sqjh1988|  楼主 | 2012-11-22 09:05 | 只看该作者
我用的是AVR studio4仿真的,就在刚打开软件时,有个软件仿真选项,选定芯片ATMEGA128,进入主界面时就没有进行什么设置了,AVR单片机我刚开始用,好多东西还不理解,那句警告的意思跟存储器空间分配没有关系吗?

使用特权

评论回复
6
sqjh1988|  楼主 | 2012-11-22 09:07 | 只看该作者
我软件仿真的时候单步调试已经显示能进入中断了,就是在服务函数里一直执行出不来。

使用特权

评论回复
7
huangxz| | 2012-11-23 23:32 | 只看该作者
avr mega128软仿真肯定是没有问题的,建议楼主将完整代码贴出来。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

23

帖子

0

粉丝