PIC16F877A 的sleep mode

发布者:colchery最新更新时间:2016-11-04 来源: eefocus关键字:PIC16F877A  sleep  mode 手机看文章 扫描二维码
随时随地手机看文章
power down mode也就是sleep mode,状态位PD被清零;程序中加入sleep()便可以使IC进入sleep mode。
在sleep mode下,若watchdog使能,则watchdog被清除后,继续工作;oscillator停止工作;IO口保持进入sleep mode时的状态;MCLR 许要设置为逻辑高电平。
 
从sleep mode醒来的几种方式:
1、外部MCLR的reset;
2、若watchdog使能,可以利用watchdog唤醒,TO bit被清;
3、INT唤醒,portB口有外部中断的功能;
另外在datasheet中也讲解到利用外部中断(如下几种可以唤醒device)
PIC16F877A 的sleep mode - 月光照耀太阳 - 月光传送者
从sleep mode唤醒后,如果GIE=0被清除,device执行sleep后的一条语句;如果GIE=1使能,唤醒后执行sleep后的一条句子后,进入中断地址0x0004H 处执行中断内容。通常在sleep后增加一条NOP()指令。
PIC16F877A 的sleep mode - 月光照耀太阳 - 月光传送者
 
另外在datasheet中提到在执行sleep指令前、过程中、以及之后如有中断,也可能不能使PD设置为0,使device进入sleep mode。所以最好在执行sleep mode前对PD位进行一下检查。 
 
下面的例程实现的功能是:正常工作时blink LED(RA0控制),外部中断控制是否进入sleep mode,进入sleep mode时,LED保持亮的状态。再次RB0 外部中断触发后,awake up device,LED灯继续闪烁。
#include
#define uchar unsigned char
#define uint unsigned int
// CONFIG
#pragma config FOSC = HS        // 12MHZ 外部晶振
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = ON         // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
#define DELAY 1000
uchar count;
void delay(uint x)  
{
    uint y,z;
    for(y=x;y>0;y--)
        for(z=25;z>0;z--);
}
void init(void)
{
    TRISB0=0;
    RB0=1;      
    TRISB0=1;   
    INTEDG=0;   
    INTF=0;     
    INTE=1;     
    GIE=1;      
}
void interrupt INT()    
{
    if(INTE&&INTF)
    {
        INTF=0;
        count++;
        TRISB0=0;  
        RB0=1;      
        TRISB0=1;   
    }
}
void main(void)
{
    uchar i,temp;
    TRISA=0x00;
    PORTA=0x00;
    
    init();
        while(1)
        {
            RA0 =1;
            delay(DELAY);
            RA0 = 0;
            delay(DELAY);
            if((count%2)== 1)
            {
                RA0=1;
                SLEEP();     //  go into sleep mode
                NOP();     
            }            
    }
}
下面的内容是从网上找的··

/SLEEP工作方式,单片机进入休眠,可以节省电源,提高A/D转换精度(此时AD转换必须选择内部RC作为A/D转换的时钟源)

//SLEEP工作方式相爱,芯片的振荡器停诊,因此没有系统时钟。在刚进入休眠工作模式下,如看门狗定时器是能状态,系统会自动把看门狗定时器的当前计数值清零

//使其重新计数,在SLEEP模式下,I/O端口保持执行SLEEP指令之前的状态。

//INTCON.GIE=1时,唤醒SLEEP计数之后,先执行SLEEP之后的一条语句,然后进入中断服务程序若不希望执行SLEEP之后的那条语句,可加上NOP指令

//INTCON.GIN=0,则唤醒SLEEP,但不进入中断。

//INTCON.INTE=0,则不管GIE为何值,按键时都不能唤醒SLEEP

//INT中断与休眠

#include

__CONFIG(0X3F39);//调试用

void DELAY_I(unsigned int);

void interrupt INT_ISR(void);

#define LED1 RB1

#define LED2 RB2

void main(void)

{

OPTION=0b1001101;//RB0/INT下降沿中断

TRISB=0b11111001;//设置RB0/RB1为输出

LED1=0;

LED2=0;

INTE=1;//中断控制寄存器INTCON的位4INTE(INT引脚中断使能)

GIE=1;//位7全局中断使能

SLEEP();//进入休眠工作方式

NOP();//SLEEP之后要加上NOP语句

LED1=1;//唤醒后LED1亮

while(1); //等待中断

}

void interrupt INT_ISR(void)

{

char x;

if(INTF)

{

LED2=1;

DELAY_I(30);

INTF=0;

}

}

void DELAY_I(unsigned int n)

{

unsigned int j;

char k;

for(j=0;j

for(k=246;k>0;k--) NOP();

}

关键字:PIC16F877A  sleep  mode 引用地址:PIC16F877A 的sleep mode

上一篇:PIC16F877的矩阵键盘
下一篇:PIC16F877A DS1302芯片驱动

推荐阅读最新更新时间:2024-03-16 15:19

单片机驱动MODE的方法和应用实例
单片机对modem要进行哪些初始化操作? 答:一般单片机的MODEM通讯必须要有两个背景知识,一个是AT命令集,另一个是通用非同步接收发送器(UART)。 AT命令集 下面介绍我通讯程式例子中涉及到的AT命令。 Dn:拨号命令。该命令使MODEM立即进入摘机状态,并拨出跟在后面的号码。D命令是基本的拨号命令,它受到其他命令的修饰可构成MODEM何时拨号以及如何拨号等操作。 T:音频拨号。例如,ATDT8886666,其中8886666为电话号码。 P:脉冲拨号。例如,ATDP8886666,其中8886666为电话号码。 ,:标准暂停。我们常常碰到拨打外线电话时需要暂停一下,等听到二次拨号音(外线)之后才能再拨后续的号码。缺省时暂
[单片机]
基于PIC16F877A的CAN智能传感器设计
随着科学技术的进步和发展,对车辆驾驶性能和安全舒适性的要求大为提高,使得车辆上的电子控制单元数量逐步增加,但是,车辆上的电控单元(如,各种开关、执行器、传感器等)的连接仍然以传统的配线束来实现,使得车内线束过多且布线复杂,从而造成了严重的电磁干扰,导致系统的可靠性下降。在高级轿车上,电子元件及其系统占据了整车超过20%的价格,而且,有日渐增加的趋势。在这种情况下,车内电控线路就会更加复杂,如何使车内的装置网络化,并降低配线束数量等成为改善车内系统的一个重点研究方向。 随着科学技术的进步和发展,对车辆驾驶性能和安全舒适性的要求大为提高,使得车辆上的电子控制单元数量逐步增加,但是,车辆上的电控单元(如,各种开关、执
[单片机]
基于<font color='red'>PIC16F877A</font>的CAN智能传感器设计
关于PIC单片机SLEEP
在执行SLEEP指令后进入睡眠省电模式。进入SLEEP模式后,主振荡停止,如果看门狗在烧写时打开了,看门狗定时器将被清并保持运行。I/O 口,周边模块和内部RAM将保持原来状态,所以如果要求睡眠后有很低功耗,应该在进入SLEEP前把IO口置为高阻抗的输入状态,不用的模块也要关闭。另有些周边模块与主时钟有关,如在异步模式下的USART,将不工作。 唤醒SLEEP的条件有很多,如IO口电平变化,AD转换结束,外部复位、看门狗溢出等,具体请参考数据手册。当执行SLEEP指令时,PC+1 的指令被预取指,当器件被一个中断条件唤醒时 (这个中断的应是已使能的),如果GIE(全局中断使能位)为0,器件将继续执行SLEEP指令下面的指令。 如果
[单片机]
如何利用PIC16F877A单片机读写AT24C系列储存器
AT24C系列在增强型PIC实验板上编程的硬件原理图如下图所示,U7为实验板上24C02芯片,SDA与单片机的RB5口相连,SCL与单片机RB4相连,七段数码管D5、D7、D8组成了显示单元,字形码的数据通过RC口送入,各数码管的显示片选信号分别不同的RA口进行控制。 在MPLab IDE软件中新建工程,加入源程序代码,同时进行芯片型号的选择和配置位的设置,我们实验所用的芯片型号为PIC16F877A。 编写的程序代码如下,其中程序流程图如下图所示。 软件代码 编好程序后将编译好的HEX码通过ICD2仿真烧写器烧入单片机芯片,上电运行,主程序中在O×01地址写入了“O×55”,在O×0
[单片机]
如何利用<font color='red'>PIC16F877A</font>单片机读写AT24C系列储存器
PIC单片机(PIC16F877A)万年历(温度闹钟年月日时分秒星期)
功能说明: LCD1602液晶显示年、月、日、时、分、秒、星期、温度,三个按键控制时间日期调整以及闹钟设定。 三个按键: 1、“校时”键,每次按下分别对应调整秒、调整分钟、调整小时、调整星期、调整日、调整月份、调整年份、调整闹钟分钟、调整闹钟小时、退出校时模式; 2、“增加/开闹钟功能”键,校时模式下按下此键则数值加一,非校时模式下按下此键则显示出闹钟时间并打开闹钟功能(屏幕显示字母A); 3、“减小/关闹钟功能”键,校时模式下按下此键则数值减一,非校时模式下按下此键则关闭闹钟显示并关闭闹钟功能(屏幕字母A消失);
[单片机]
PIC单片机(<font color='red'>PIC16F877A</font>)万年历(温度闹钟年月日时分秒星期)
PIC16f877a单片机DS18b20源程序
//调试总结: //显著的问题是,写时序、读时序中,PIC MCU向总线写1是通过改方向为输入方向由上拉电阻拉高数据线实现的,而非在输出方向下输出1,与AVR不同 //某IO口8位未全使用时,对整个IO口读取进行位运算无效 //使用if(dat2&0xf8==0xf8)时,进错分支导致显示乱码仍未找到原因,用if(dat2 =240)代替正常 #include pic.h #define uchar unsigned char #define uint unsigned int #define rs_h (PORTC|=0x01) #define rs_l (PORTC&=0xfe) #define rs_o (TRISC&
[单片机]
全面监测睡眠质量 躺在这张床上啥都知道
像苹果的 Apple Watch,三星的 Galaxy Watch,Fitbit 手环等智能穿戴的出现,对身体健康状况监测这类问题有很大的帮助,我们可以清晰准确地知道自己每天的运动量,心率,甚至是呼吸状况,那么有没有一款智能产品可以对我们的睡眠状况提供分析帮助呢?答案是当然有,Sleep Number 360 P5 就是这样一张智能床。   和其他许多的智能穿戴设备一样,Sleep Number 360 P5 的研发重心主要集中在数据上,研发成员在床垫内部安置了大量传感器,这些传感器可以监测用户是否在床上,睡眠时的翻身动作,呼吸和心率状况等数据,通过各种精准的算法对用户的这些数据开展关于睡眠质量的 SleepIQ 评级打分,用
[医疗电子]
PIC16F877A例程---DS1302程序
#include pic.h //调用头文件 //#include pic1687x.h __CONFIG(0x3F32); //芯片配置字 //__CONFIG(HS&UNPROTECT&PWRTEN&BORDIS&WDTDIS);//芯片配置字 //__CONFIG(0x3FFD&0x3FFF&0x3FF7&0x3FBF&0x3FFB);//芯片配置字 #define uchar unsigned char #define uint unsigned int //联接DS1302的端口定义 #define ds1302_rst RC2 //定义13
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved