日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]power down mode也就是sleep mode,狀態(tài)位PD被清零;程序中加入sleep()便可以使IC進(jìn)入sleep mode。在sleep mode下,若watchdog使能,則watchdog被清除后,繼續(xù)工作;oscillator停止工作;IO口保持進(jìn)入sleep mode時(shí)

power down mode也就是sleep mode,狀態(tài)位PD被清零;程序中加入sleep()便可以使IC進(jìn)入sleep mode。在sleep mode下,若watchdog使能,則watchdog被清除后,繼續(xù)工作;oscillator停止工作;IO口保持進(jìn)入sleep mode時(shí)的狀態(tài);MCLR 許要設(shè)置為邏輯高電平。從sleep mode醒來(lái)的幾種方式:1、外部MCLR的reset;2、若watchdog使能,可以利用watchdog喚醒,TO bit被清;3、INT喚醒,portB口有外部中斷的功能;另外在datasheet中也講解到利用外部中斷(如下幾種可以喚醒device)從sleep mode喚醒后,如果GIE=0被清除,device執(zhí)行sleep后的一條語(yǔ)句;如果GIE=1使能,喚醒后執(zhí)行sleep后的一條句子后,進(jìn)入中斷地址0x0004H 處執(zhí)行中斷內(nèi)容。通常在sleep后增加一條NOP()指令。另外在datasheet中提到在執(zhí)行sleep指令前、過(guò)程中、以及之后如有中斷,也可能不能使PD設(shè)置為0,使device進(jìn)入sleep mode。所以最好在執(zhí)行sleep mode前對(duì)PD位進(jìn)行一下檢查。下面的例程實(shí)現(xiàn)的功能是:正常工作時(shí)blink LED(RA0控制),外部中斷控制是否進(jìn)入sleep mode,進(jìn)入sleep mode時(shí),LED保持亮的狀態(tài)。再次RB0 外部中斷觸發(fā)后,awake up device,LED燈繼續(xù)閃爍。#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 1000uchar 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(); } }}下面的內(nèi)容是從網(wǎng)上找的··

/SLEEP工作方式,單片機(jī)進(jìn)入休眠,可以節(jié)省電源,提高A/D轉(zhuǎn)換精度(此時(shí)AD轉(zhuǎn)換必須選擇內(nèi)部RC作為A/D轉(zhuǎn)換的時(shí)鐘源)

//SLEEP工作方式相愛(ài),芯片的振蕩器停診,因此沒(méi)有系統(tǒng)時(shí)鐘。在剛進(jìn)入休眠工作模式下,如看門狗定時(shí)器是能狀態(tài),系統(tǒng)會(huì)自動(dòng)把看門狗定時(shí)器的當(dāng)前計(jì)數(shù)值清零

//使其重新計(jì)數(shù),在SLEEP模式下,I/O端口保持執(zhí)行SLEEP指令之前的狀態(tài)。

//INTCON.GIE=1時(shí),喚醒SLEEP計(jì)數(shù)之后,先執(zhí)行SLEEP之后的一條語(yǔ)句,然后進(jìn)入中斷服務(wù)程序若不希望執(zhí)行SLEEP之后的那條語(yǔ)句,可加上NOP指令

//INTCON.GIN=0,則喚醒SLEEP,但不進(jìn)入中斷。

//INTCON.INTE=0,則不管GIE為何值,按鍵時(shí)都不能喚醒SLEEP

//INT中斷與休眠

#include

__CONFIG(0X3F39);//調(diào)試用

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;//設(shè)置RB0/RB1為輸出

LED1=0;

LED2=0;

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

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

SLEEP();//進(jìn)入休眠工作方式

NOP();//SLEEP之后要加上NOP語(yǔ)句

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();

}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉