贴片mega48 还是搞不清楚
使用AVRstudio + WINAVR1. 插件的mega48所有模式 程序完全正常
2. 贴片的mega48相同程序
进入“ SLEEP_MODE_IDLE 可以唤醒
进入
SLEEP_MODE_PWR_DOWN
SLEEP_MODE_PWR_SAVE
无法唤醒。
请指点,万分感谢。
/*
测试程序
*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/sleep.h>
#include <avr/pgmspace.h>
void delay_10ms(unsigned int t)
{
while(t--)
_delay_ms(10);
}
#define RUN 0
#define DOWN 0
#define ALARM 5
void delay_us(void)
{
}
*/
unsigned char key_down_count;
unsigned char key_up_count;
volatile unsigned char temp_s;
int main(void)
{
PORTC=0xFF;
PORTD=0xFF;
PORTB=0xFF;
DDRB =(1<<RUN); //PB0设为输出高电平,灯灭
DDRC =(1<<ALARM);
DDRC |=(1<<DOWN);
// 保证PD2 上拉输入
DDRD &= ~(1<<2);
EICRA = 1<<1; // INT0 下降沿中断
EIMSK = 1; // 使能 INT0
sei(); //开中断
//Read_RTC();
//temp_s = (l_tmpdisplay + 30)%60 ;
for(;;)
{
PORTB = 0xFE;
delay_10ms(1);
PORTB = 0xFF;
delay_10ms(1);
PORTC = 0xFE;
delay_10ms(1);
PORTC = 0xFF;
delay_10ms(1);
if(++i > 0xF0)
{
i=0;
set_sleep_mode(SLEEP_MODE_IDLE); //设定为掉电模式
sleep_mode(); //进入睡眠状态
}
}
}
ISR(INT0_vect) //外部中断0服务程序 唤醒源
{
unsigned char i;
for(i=0; i<0x3F; i++)
{
PORTC = 0xFE;
delay_10ms(2);
PORTC = 0xFF;
delay_10ms(2);
}
} AVR掉电唤醒不了,好像是缺陷 channe 发表于 2013-1-30 19:46 static/image/common/back.gif
/*
测试程序
手册上明确说了,在掉电模式时,只有电平中断能唤醒,下降沿是没用的 48PA已经发现很多和WINAVR不和谐了,比如WDT,用winavr的就不正常,我也搞不清楚那里的问题,都是按照例子来的,换成datasheet中直接操作寄存器的例子,就正常了.winavr好久没更新了,估计新器件支持度不够.
关键地方还是汇编靠谱.
页:
[1]