xuetingxun2010 发表于 2009-8-14 20:23:54

关于重复进入睡眠模式的问题

关于重复进入睡眠模式的问题
我写了一个很简单的程序,本意想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;
}

xuetingxun2010 发表于 2009-8-15 11:40:46

上面的程序有问题,通过努力已经把睡眠模式写好了。
调试没问题了,现在拿出来共享!
#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;
}

xuetingxun2010 发表于 2009-8-28 20:51:01

呵呵,来了,看看自己的帖子

hetiger 发表于 2009-8-29 11:32:00

这到好。。。做笔记啊。。。
不过这有好多人都这样干的。。。呵呵

huanghaiming 发表于 2009-9-4 12:01:53

请问如何用定时器唤醒??!!只能用定时器2的异步时钟吗??

xuetingxun2010 发表于 2009-9-7 20:15:59

不是的,不同的模式,唤醒方式不一样,你好好看看数据手册啦!很简单的

pujing 发表于 2010-3-23 18:40:28

mark
页: [1]
查看完整版本: 关于重复进入睡眠模式的问题