channe 发表于 2013-1-30 19:44:19

贴片mega48 还是搞不清楚

使用AVRstudio + WINAVR

1. 插件的mega48所有模式 程序完全正常

2. 贴片的mega48相同程序
进入“   SLEEP_MODE_IDLE   可以唤醒
进入
SLEEP_MODE_PWR_DOWN
SLEEP_MODE_PWR_SAVE
无法唤醒。

请指点,万分感谢。

channe 发表于 2013-1-30 19:46:04

/*

        测试程序


*/


#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);
        }
       
}

ming1172848 发表于 2013-1-30 23:28:18

AVR掉电唤醒不了,好像是缺陷

信元苍穹 发表于 2013-1-31 12:20:01

dwj0 发表于 2013-2-1 14:55:10

channe 发表于 2013-1-30 19:46 static/image/common/back.gif
/*

        测试程序


dwj0 发表于 2013-2-1 14:56:10

手册上明确说了,在掉电模式时,只有电平中断能唤醒,下降沿是没用的

erpao 发表于 2013-2-1 15:04:26

48PA已经发现很多和WINAVR不和谐了,比如WDT,用winavr的就不正常,我也搞不清楚那里的问题,都是按照例子来的,换成datasheet中直接操作寄存器的例子,就正常了.winavr好久没更新了,估计新器件支持度不够.
关键地方还是汇编靠谱.
页: [1]
查看完整版本: 贴片mega48 还是搞不清楚