打印
[家电应用]

166A掉电模式下不能唤醒

[复制链接]
1767|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gannjava|  楼主 | 2013-12-13 14:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
se, pc, CD, LCD, pd
问题描述:在掉电模式下,不能唤醒,经过仿真跟踪,发现主要是在掉电模式下,不能进Timer3 中断,系统中试用12M内部RC和 32K外部晶振,LPD程序如下:
void        POWER_down(void) interrupt 14                                                   //掉电中断
{
        //标志位清0
        _nop_();
        LPDCON &=        Bin(10111111);



//首先关掉所以需要耗电的元件,降低损耗
                P1|=Bin(11111100);
                P3|=Bin(00001111);        //先关灯
                P4=Bin(11111111);         //关灯关公共端

       
                if(LPDCON&0x20)                 //如果是因为电压高于设定LPD值时进入中断的,即将进入正常状态
                {

                        //io_Beep        =        0;
                        _nop_();
                        Init_System();          //重新初始化
                }
                else
                {
                        sysLPD        =        1;                                        //出现了低电压中断,设置电池供电标志
                        LPDCON =        Bin(10101101);                //&= 0xFB;                //设置电压高于4.35产生中断
                        CLKCON =         Bin(10001000);                                //D7加速,D6D5无效,D4无效,D3=1打开,D2=0选择32K
                        //Old_Mode = Mode;
                        ////////////////调整LCD电压///////////////////////////
                         DISPCON= 0x7F;                //0X68;                 //3V电源供电
                        //DISPCON=Bin(01101111);            //开LCD驱动,开对比度控制,选第15段对比度
                       
                         //BIT7            BIT6       BIT5   BIT4    BIT3   BIT2    BIT1     BIT0
                        //DISPSEL   LCDON      ELCC   DUTY          VOL3          VOL2    VOL1           VOL0
                        //0LCD;1LED   1                    1             0                   0                  0                 1             1
                        //lcdFAMER f=12m/512/disclk =64         ;disclk=0x016e     



                        //设置晶振为32768HZ外振,以及中断时间,其他中断,重新定义IO口
                        P0SS=0x00;            //P0模式选择寄存器          0=IO           1=segment
                         //SEG1-SEG8   
                         P1SS =0Xff;
                         //SEG9-SEG16   
                         P2SS =0X03;   //P2.0,P2.1为SEG
                         //COM1-COM8   
                         P3SS =0XFF;

                        P0CR        =Bin(10000000);                                            //端口输入输出控制寄存器          0 输入 1 输出       
                        //0.0--小功率,0.1--蜂鸣器,0.2--同步,0.3--超温,0.4--触摸,0.5--power
                        P0PCR        =Bin(10000000);                                                  //输入端口内部上拉电阻控制   0关闭, 1开启
                        P0                =Bin(10000000);                                                  //端口数据寄存器

                        P1CR        =Bin(11111111);                                          
                        P1PCR        =0xff;                       
                        P1                =0x00;                                                                //P1用做LCD输出SEG

                        P2CR        =Bin(11111111);                                                               
                        P2PCR        =Bin(11111111);       
                        P2                =0xff;                                                                //P2.0,P2.1LCD的SEG

                        P3CR        =0xff;
                        P3PCR        =0xff;       
                        P3                =0x00;                                                                //P3用做COM口

                    P4CR        =Bin(11111111);
                        P4PCR        =0xff;       
                        P4                =Bin(00011111);       

                        BANK1SEL() ;
                        P5CR        =Bin(11111111);                                                //注意:P5和P0地址一样,P5在BANK1,一定要加上地址设置
                        P5PCR        =0xff;       
                        P5                =0x00;       
                        BANK0SEL() ;

                        DISPCON1 =0X00;                //LCD参数,固定
                         DISPCLK0 =0x00;           //LCD时钟控制寄存器
                         DISPCLK1 =0x00;                 //0x000=使用系统时钟
        ///////////////重新定义时间中断////////////////////////
                        EA                =        0;
                        //定时器3代替定时器0
                        BANK1SEL() ;
                        TF3=0;
                        //T3CON =Bin(00000010);           ////0B0000    0110     1分频
                        T3CON =Bin(00000000);
                //BIT7         BIT6    BIT5       BIT4      BIT3      BIT2        BIT1        BIT0
                    // TF3     --   T3PS.1          T3PS.0                -        TR3               T3CLK.1                T3CLK.0                  
                        TL3=LOBYTE(2^16 -16384);
                        TH3=HIBYTE(2^16 -16384);
                          //IEN1 |=0x10 ;   
                        //ET3=1;   
                          TR3=1;                                                                          //开启TIMER 3定时器
                           BANK0SEL() ;
                        EA                =        1;



                }
//                LPDCON &= 0xEB;//清中断标志

}
沙发
neyo.zhong| | 2013-12-27 17:21 | 只看该作者
可能的原因如下:
1.定时中断没有开启
2.你进入了STOP模式,只有外部中断 IO口中断可以唤醒(部分型号BT中断也可以唤醒)

使用特权

评论回复
板凳
liguohong327| | 2015-9-23 00:09 | 只看该作者
备注下,后面学习用

使用特权

评论回复
地板
毁灭2012| | 2015-10-19 21:48 | 只看该作者
看看,是值得学习的例子,多谢分享。

使用特权

评论回复
5
布谷鸟2015| | 2015-10-19 22:16 | 只看该作者
原因1和2都是往往我们容易忽视的地方啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

5

帖子

0

粉丝