关于重复进入睡眠模式的问题
关于重复进入睡眠模式的问题我写了一个很简单的程序,本意想mcu循环进入睡眠模式。可是只能进入一次,想请各位avr爱好者给我指点指点。
#include<iom16v.h>
#include<macros.h>
#include<sleep.h>
#pragma interrupt_handler int1_:3
unsigned int num=0;
void delay_nms(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<1141;j++);
}
void main()
{
unsigned int i,j;
DDRB=0XFF;
PORTB=0XFE;
MCUCR|=BIT(SE)|BIT(ISC11);
MCUCR=(0<<SM2)|(1<<SM1)|(0<<SM0); //设定为掉电模式
GICR|=BIT(INT1);
SREG|=BIT(7);
//asm("sleep");
while(1)
{
delay_nms(1000);
MCUCR=(0<<SM2)|(1<<SM1)|(0<<SM0); //设定为掉电模式
asm("sleep");
for(i=0;i<num;i++)
for(j=0;j<1141;j++)
PORTB=0XFF;
}
}
void int1_()
{
num=5;
} 上面的程序有问题,通过努力已经把睡眠模式写好了。
调试没问题了,现在拿出来共享!
#include<iom16v.h>
#include<macros.h>
#pragma interrupt_handler int1_:3
unsigned int num=0;
void delay_nms(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<1141;j++);
}
//=================================
void sleep_mode()//睡眠模式函数
{
MCUCR=BIT(SM1); //设定为掉电模式
MCUCR|=BIT(SE);//sleep必须紧跟其后
asm("sleep");//进入睡眠状态
}
//================================
void main()
{
unsigned int i,j;
DDRB=0XFF;
PORTB=0XFF;
MCUCR|=BIT(ISC11);//外部中断下降沿触发
GICR|=BIT(INT1);
SREG|=BIT(7);
while(1)
{
PORTB=0XFF;
delay_nms(1000);
sleep_mode();
//NOP();
PORTB=0XFE;
delay_nms(1000);
}
}
//========================
void int1_()//只是用来唤醒mcu,没有其它意义
{
num=5;
} 呵呵,来了,看看自己的帖子 这到好。。。做笔记啊。。。
不过这有好多人都这样干的。。。呵呵 请问如何用定时器唤醒??!!只能用定时器2的异步时钟吗?? 不是的,不同的模式,唤醒方式不一样,你好好看看数据手册啦!很简单的 mark
页:
[1]