dxx_0922 发表于 2011-1-16 15:09:43

M8 省电模式,T2定时启动问题

我用M8省电模式,T2定时启动.
功能都能正常进入省电,也能定时启动,但我想要5分钟起来一次,现在T2肯定无法直接定时那么长的,
我只定时了一秒的T2,起来后马上又进入省电,但感觉1S工作,1S省电.

#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/io.h>
#include "include.h"

unsigned char DelayCount;

void PortInit(void)
{
PORTB = 0x00;
DDRB= 0x00;
PORTC = 0x00; //作AD时,不能使用内部上拉电阻
DDRC= 0x00;
PORTD = 0x00;
DDRD= 0x00;
}

void Timer2Init(void)
{
ASSR= 0x08; //set async mode
SoftDelay(10);
TCNT2   =   0;                           /*清零Timer0计数器*/
OCR2    =   254;                                        /*每逢28产生一次匹配中断*/
TCCR2   =   0x07;                        /*工作于输出比较匹配模式,不连接OC0端口,时钟1024预分频*/
TIFR   |=   0x80;                                   /*清除输出比较匹配中断标志位*/
TIMSK|=   0x80;                           /*使能输出比较匹配中断*/
sei();                                                    /*使能全局中断*/
}

int main(void)
{
PortInit();
Timer2Init();
DDRC |= BIT(2);
PORTC |= BIT(2);
while((ASSR & BIT(1)));
MCUCR=(1<<SE)|(0<<SM2)|(1<<SM1)|(1<<SM0);//休眠使能,设置为省电模?
asm("SLEEP");//进入休眠模式
while(1)
{
   if(DelayCount){
   DelayCount = 0;
   MCUCR=(1<<SE)|(0<<SM2)|(1<<SM1)|(1<<SM0);//休眠使能,设置为省电模?
   asm("SLEEP");//进入休眠模式
   }
}
}

ISR(TIMER2_COMP_vect)
{           
MCUCR &= ~BIT(SE);
TCNT2   =   0;
DelayCount += 1;       
}

dxx_0922 发表于 2011-1-16 16:18:25

不会是有一次没进省电
?

巅f石 发表于 2012-7-23 16:10:34

关注,求解{:smile:}

taiyangshendi1 发表于 2012-7-23 22:01:04

没太看明白

zl_123 发表于 2014-7-15 10:47:42

mark                                    
页: [1]
查看完整版本: M8 省电模式,T2定时启动问题