新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機電源管理寄存器PCON的用法

        單片機電源管理寄存器PCON的用法

        作者: 時間:2016-11-24 來源:網絡 收藏
        我們知道單片機內部有一個電源管理寄存器PCON,這個寄存器的最低兩位,IDL和PD這兩位分別用來設定是否使單片機進入空閑模式和掉電模式。
        1. 空閑模式
        當單片機進入空閑模式時,除CPU處于休眠狀態外,其余硬件全部處于活動狀態,芯片中程序未涉及到的數據存儲器和特殊功能寄存器中的數據在空閑模式期間都將保持原值。但假若定時器正在運行,那么計數器寄存器中的值還將會增加。單片機在空閑模式下可由任一個中斷或硬件復位喚醒,需要注意的是,使用中斷喚醒單片機時,程序從原來停止處繼續運行,當使用硬件復位喚醒單片機時,程序將從頭開始執行。
        讓單片機進入空閑模式的目的通常是為了降低系統的功耗,舉個很簡單的例子,大家都用過數字萬用表,在正常使用的時候表內部的單片機處于正常工作模式,當不用時,又忘記了關掉萬用表的電源,大多數表在等待數分鐘后,若沒有人為操作,它便會自動將液晶顯示關閉,以降低系統功耗,通常類似這種功能的實現就是使用了單片機的空閑模式或是掉電模式。以STC89系列單片機為例,當單片機正常工作時的功耗通常為4mA~7mA,進入空閑模式時其功耗降至2mA,當進入掉電模式時功耗可降至0.1μA以下。
        2. 休眠模式
        當單片機進入掉電模式時,外部晶振停振、CPU、定時器、串行口全部停止工作,只有外部中斷繼續工作。使單片機進入休眠模式的指令將成為休眠前單片機執行的最后一條指令,進入休眠模式后,芯片中程序未涉及到的數據存儲器和特殊功能寄存器中的數據都將保持原值。可由外部中斷低電平觸發或由下降沿觸發中斷或者硬件復位模式換醒單片機,需要注意的是,使用中斷喚醒單片機時,程序從原來停止處繼續運行,當使用硬件復位喚醒單片機時,程序將從頭開始執行。
        【例】:開啟兩個外部中斷,設置低電平觸發中斷,用定時器計數并且顯示在數碼管的前兩位,當計到5時,使單片機進入空閑(休眠)模式,同時關閉定時器,當單片機響應外部中斷后,從空閑(休眠)模式返回,同時開啟定時器。
        程序代碼如下:
        #include //52系列單片機頭文件
        #define uchar unsigned char
        #define uint unsigned int
        sbit dula=P2^6; //申明U1鎖存器的鎖存端
        sbit wela=P2^7; //申明U2鎖存器的鎖存端
        uchar code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71};
        uchar num;
        void delayms(uint);
        void display(uchar shi,uchar ge) //顯示子函數
        {
        dula=1;
        P0=table[shi]; //送十位段選數據
        dula=0;
        P0=0xff; //送位選數據前關閉所有顯示,防止打開位選鎖存時
        wela=1; //原來段選數據通過位選鎖存器造成混亂
        P0=0xfe; //送位選數據
        wela=0;
        delayms(5); //延時
        dula=1;
        P0=table[ge]; //送個位段選數據
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        delayms(5);
        }
        void delayms(uint xms)
        {
        uint i,j;
        for(i=xms;i>0;i--) //i=xms即延時約xms毫秒
        for(j=110;j>0;j--);
        }
        void main()
        {
        uchar a,b,num1;
        TMOD=0x01; //設置定時器0為工作方式1(0000 0001)
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%6;
        EA=1;
        ET0=1;
        EX0=1;
        EX1=1;
        P0=1;
        while(1)
        {
        if(num>=20)
        {
        num=0;
        num1++;
        if(num1==6)
        {
        ET0=0;
        PCON=0x02; (或PCON=0x01;)
        }
        a=num1/10;
        b=num1;
        }
        display(a,b);
        }
        }
        void timer0() interrupt 1
        {
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%6;
        num++;
        }
        void ex_int0() interrupt 0
        {
        PCON=0;
        ET0=1;
        }
        void ex_int1() interrupt 2
        {
        PCON=0;
        ET0=1;
        }
        分析:
        (1) EA=1; 開總中斷
        ET0=1; 開定時器0中斷
        EX0=1; 開外部中斷0
        EX1=1; 開外部中斷1
        P0=1; 啟動定時器0
        (2)主程序中有“ET0=0;”下句是“PCON=0x02;”意思是在進入休眠模式之前要先把定時器關閉,這樣方可一直等待外部中斷的產生,如果不關閉定時器,定時器的中斷同樣也會喚醒單片機,使其退出休眠模式,這樣我們便看不出進入休眠模式和返回的過程。
        (3)void ex_int0() interrupt 0
        {
        PCON=0;
        ET0=1;
        }
        這是外部中斷0服務程序,當進入外部中斷服務程序后,首先將PCON中原先設定的休眠控制位清除(如果不清除,程序也可以正常運行,大家最好親自做實驗驗證),接下來再重新開啟定時器0。在使用是還是保留中斷喚醒的中斷服務程序為好。
        (4)下載程序后,實驗現象如下:數碼管從“00”開始遞增顯示,到“05”后,再過一秒后,數碼管變成只顯示一個“5”,單片機進入休眠或空閑模式,用導線一端連接地,另一端接觸P3.2或P3.3,數碼管重新從“06”開始顯示,遞增下去。整個過程演示了單片機從正常工作模式進入休眠模式或空閑模式,然后再從休眠模式或空閑模式返回到正常工作模式。
        (5)測試過程大家可將數字萬用表調節到電流檔,然后串接入電路中,觀察單片機在正常工作模式、休眠模式、空閑模式下流過系統的總電流變化情況,經測試可發現結果如下:正常工作電流>空閑模式電流>休眠模式電流。

        電源管理寄存器PCON
          PCON主要是為CHMOS型單片機的電源控制而設置的專用寄存器,單元地址是87H,其結構格式如下:
        表2 PCON電源管理寄存器結構
        PCON D7 D6 D5 D4 D3 D2 D1 D0
        位符號 SMOD - - - GF1 GF0 PD IDL
        在CHMOS型單片機中,除SMOD位外,其他位均為虛設的,SMOD是串行口波特率倍增位,當SMOD=1時,串行口波特率加倍。系統復位默認為SMOD=0。
        各位的定義: SMOD:該位與串口通信有關。
        SMOD=0; 串口方式1,2,3時,波特率正常。
        SMOD=1; 串口方式1,2,3時,波特率加倍。
        GF1,GF0:兩個通用工作標志位,用戶可以自由使用。
        PD:掉電模式設定位。
        PD=0 單片機處于正常工作狀態。
        PD=1 單片機進入掉電(Power Down)模式,可由外部中斷或硬件復位模式喚醒,進入掉電模式后,外部晶振停振,CPU、定時器、串行口全部停止工作,只有外部中斷工作。
        IDL:空閑模式設定位。
        IDL=0 單片機處于正常工作狀態。
        IDL=1 單片機進入空閑(Idle)模式,除CPU不工作外,其余仍繼續工作,在空閑模式下可由任一個中斷或硬件復位喚醒。


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 铜梁县| 洛隆县| 三江| 丰镇市| 堆龙德庆县| 云安县| 瑞安市| 聊城市| 共和县| 遂昌县| 深圳市| 隆子县| 三河市| 绥棱县| 玉环县| 辉县市| 蒙山县| 岑溪市| 仁化县| 库伦旗| 滦南县| 玛多县| 红安县| 依兰县| 永寿县| 林州市| 玉屏| 新宁县| 泽库县| 曲阜市| 阜新| 铜川市| 牡丹江市| 新龙县| 巨鹿县| 闵行区| 开化县| 东乡县| 儋州市| 龙门县| 鱼台县|