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;
} 不会是有一次没进省电
? 关注,求解{:smile:} 没太看明白 mark
页:
[1]