打印

关于pic10F202的睡眠与唤醒

[复制链接]
2426|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
caoyonglu|  楼主 | 2013-5-6 13:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
pic, pi, ic
pic10f202该设置哪些标志位来唤醒和睡眠,为什么我设置多处睡眠,无法唤醒
沙发
ayb_ice| | 2013-5-6 15:58 | 只看该作者
睡眠前设置好唤醒源,一般通过IO下降沿唤醒

使用特权

评论回复
板凳
caoyonglu|  楼主 | 2013-5-6 16:05 | 只看该作者
pic10f202只有一个控制其电平变化的使能位,其他的什么都没有啊,也没有设置上升沿还是下降沿啊

使用特权

评论回复
地板
caoyonglu|  楼主 | 2013-5-7 16:40 | 只看该作者

PIC10F202的睡眠与唤醒

本帖最后由 caoyonglu 于 2013-6-13 17:17 编辑

还是有问题啊

使用特权

评论回复
5
凌锋华| | 2013-5-27 17:32 | 只看该作者
怎样解决了?能分享一下原程序吗?我正遇到 这方面的难题!谢谢

使用特权

评论回复
6
caoyonglu|  楼主 | 2013-6-13 17:18 | 只看该作者
还是没有达到睡眠,依然耗电很严重

使用特权

评论回复
7
兰天白云| | 2013-6-13 17:28 | 只看该作者
caoyonglu 发表于 2013-6-13 17:18
还是没有达到睡眠,依然耗电很严重

如果IO口接一个1欧电阻,然后这个IO口输出高电平,那么在休眠时功耗也是很大的

使用特权

评论回复
8
opal11| | 2013-8-16 22:11 | 只看该作者
休眠前先断开IO引脚的耗电。

使用特权

评论回复
9
opal11| | 2013-8-19 19:30 | 只看该作者
以前做的一个LED控制开关,待机小于1uA
#include<pic.h>

#define uint unsigned int
#define uchar unsigned char

#define SW1 GP3
#define led1 GP1

__CONFIG(0x00000);

bit on,work,ing,b,q;                //b q释放状态位

uchar n,m,time;

void sys_init()
{
        OSCCAL &= 0xfe;       
        OPTION = 0x86;                        //关电平变化时唤醒 上拉 定时器0时钟 128分频
        TRISGPIO = 0x08;                //GP0输入 GP1 GP2输出
        on = 0;
        work = 0;
        ing = 0;
        time = 0;
        led1 = 1;
        q = 0;
}

void delay10ms()                        //按键消抖延时
{
        uchar i,j;
        for(i=5;i>0;i--)
                for(j=80;j>0;j--);       
}
void sos()
{
                if(TMR0==1)
                {
                        time++;       
                        TMR0 = 2;
                }
                if(time>=3)                //100ms               
                {
                        time = 0;
                        m++;
                        n++;
                        if(m<16)
                        {
                                if(m<3)
                                {
                                        led1 = 0;       
                                }
                                else if(m<5)
                                {
                                        led1 = 1;                               
                                }
                                else if(m<7)
                                {
                                        led1 = 0;                                       
                                }
                                else if(m<9)
                                {
                                        led1 = 1;                               
                                }
                                else if(m<11)
                                {
                                        led1 = 0;                                       
                                }
                                else
                                {
                                        led1 = 1;                                       
                                }
                        }
                        else if((m>15)&&(m<37))
                        {
                                if(m<20)
                                {
                                        led1 = 0;       
                                }
                                else if(m<22)
                                {
                                        led1 = 1;                               
                                }
                                else if(m<26)
                                {
                                        led1 = 0;                                       
                                }
                                else if(m<28)
                                {
                                        led1 = 1;                               
                                }
                                else if(m<32)
                                {
                                        led1 = 0;                                       
                                }
                                else
                                {
                                        led1 = 1;                                       
                                }
                        }                       
                        else if((m>36)&&(m<52))
                        {
                                if(m<39)
                                {
                                        led1 = 0;       
                                }
                                else if(m<41)
                                {
                                        led1 = 1;                               
                                }
                                else if(m<43)
                                {
                                        led1 = 0;                                       
                                }
                                else if(m<45)
                                {
                                        led1 = 1;                               
                                }
                                else if(m<47)
                                {
                                        led1 = 0;                                       
                                }
                                else
                                {
                                        led1 = 1;                                       
                                }
                        }
                        else if((m>51)&&(m<60))
                        {
                                led1 = 1;
                        }
                        else
                        {
                                m = 0;
                        }                                                       
                }
}

void main()
{       
        sys_init();
        for(;;)
        {
                if(work==0)
                {
                        if((SW1==0)&&(ing==0))                        //第一次触发
                        {
                                delay10ms();
                                if((SW1==0)&&(ing==0))
                                {
                                        led1 = 0;                               
                                        on = 1;
                                        ing = 1;
                                }
                        }
                        if(on==1)                                                //第一次触发释放
                        {
                                if(SW1==1)                                       
                                {
                                        delay10ms();
                                        if(SW1==1)
                                        {
                                                work = 1;
                                                on = 0;
                                        }
                                }
                        }
                        else                                                        //进入休眠模式
                        {
                                if(SW1==1)
                                {
                                        delay10ms();
                                        if(SW1==1)
                                        {
                                        //        STATUS |= 0x80;                //引脚电平变化时从休眠中唤醒导致的复位
                                                OPTION = 0x06;
                                                SLEEP();                        //引脚电平变化时从休眠中唤醒导致的复位
                                        }
                                }
                        }
                }
                else
                {
                        if(((SW1==0)&&(on==0))&&(q==0))        //第二次触发 判断是否长按两秒以上
                        {
                                delay10ms();
                                while((SW1==0)&&(on==0))
                                {       
                                        ing = 0;                                //非闪灯模式
                                        if(TMR0==1)
                                        {
                                                time++;       
                                                TMR0 = 2;
                                        }
                                        if(time>60)                                //2秒以上进入闪灯模式
                                        {
                                                on = 1;
                                                ing = 1;
                                                b = 1;
                                                m = 0;                                               
                                        }                                                                               
                                }
                                time = 0;
                        }
                        if((q==1)||(b==1))
                        {
                                if(SW1==1)                                        //触发释放
                                {
                                        delay10ms();
                                        if(SW1==1)
                                        {                                               
                                                q = 0;
                                                b = 0;
                                        }
                                }
                        }                       
                        if(on==1)                                                //闪灯模式
                        {                                               
                                sos();
                                if(b==0)
                                {
                                        if(SW1==0)
                                        {
                                                delay10ms();
                                                n = 0;                                                                                       
                                                while((SW1==0)&&(q==0))
                                                {       
                                                        ing = 0;                                        //关机模式                                                
                                                        sos();
                                                        if(n>20)                                //两秒以上进入闪灯正常模式
                                                        {
                                                                on = 0;
                                                                ing = 1;
                                                                b = 1;
                                                                led1 = 0;                                                       
                                                                q = 1;                                               
                                                        }                                                                               
                                                }
                                                n = 0;                                                                               
                                        }                                                                                                       
                                }
                        }
                        if(ing==0)                                        //关灯 进入休眠模式
                        {
                                led1 = 1;                       
                                work = 0;
                                ing = 1;
                                on = 0;
                                time = 0;
                        }                       
                }                       
        }
}

使用特权

评论回复
评论
le176825000 2021-3-14 04:40 回复TA
你这个很牛的 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

47

帖子

0

粉丝