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]