ge_guo_wei 发表于 2012-4-23 20:05:11

AVR休眠与唤醒的问题

我最近最做单片机低功耗设计,需要用到AVR的休眠与唤醒。我用ICC编写的程序如下
#include<iom16v.h>
#include <macros.h>
#progma interrupt_handler int1_isr:3
#define uchar unsigned char
#define uint unsigned int
uchar n;cnt=0;
//======================
void delay_ms(uint k)
{
       uint i,j;
       for(i=0;i<k;i++)
       {
                  for(j=0;j<1140;j++);
       }
}
//=======================延时子程序
void main(void)
{
       DDRB=0xff;
       PORTB=0xff;
       DDRD=0x00;
       PORTD=0xff;
       DDRA=0x00;
       PORTA=0xff;
       DDRC=0x00;
       PORTC=0xff;
       MCUCR=0x60;
       GICR=0x80;
       SREG=0x80;
                 PORTB=0xaa;
                    delay_ms(5000);
                     PORTB=0x55;
                     delay_ms(5000);
             PORTB=0xff;
       
       
           while(1)        
           {
                     delay_ms(10);
                 MCUCR|=0x70;
               

                     asm("sleep");
                       NOP();
                       NOP();
                       NOP();
                       MCUCR&=0x2f;
                       delay_ms(2);
                        // asm("nop");
                        do
                        {
                          cnt--;
                                delay_ms(2);
                        }
                        while(cnt!=0);           }
                   PORTB=0xff;
}

void int1_isr(void)
{
MCUCR&=0x2f;
PORTB=0X00;
cnt=5000;

}
中断唤醒后,好像复位中断一样,没有执行中断程序。而且也没有执行sleep的下一条指令,这与AVR单片机的描述不对应啊。而用IAR编写的程序可以执行中断程序,中断返回后执行sleep下一条指令,这是怎么回事,求解答。又可以解答的可以与我联系。
页: [1]
查看完整版本: AVR休眠与唤醒的问题