久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6101|回復: 0
打印 上一主題 下一主題
收起左側

用51hei-5板子學習單片機的空閑與掉電模式

[復制鏈接]
跳轉到指定樓層
樓主
ID:1 發表于 2010-4-9 17:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

    我們知道單片機內部有一個電源管理寄存器PCON,這個寄存器的最低兩位,IDL和PD這兩位分別用來設定是否使單片機進入空閑模式和掉電模式。
1. 空閑模式
     當單片機進入空閑模式時,除CPU處于休眠狀態外,其余硬件全部處于活動狀態,芯片中程序未涉及到的數據存儲器和特殊功能寄存器中的數據在空閑模式期間都將保持原值。但假若定時器正在運行,那么計數器寄存器中的值還將會增加。單片機在空閑模式下可由任一個中斷或硬件復位喚醒,需要注意的是,使用中斷喚醒單片機時,程序從原來停止處繼續運行,當使用硬件復位喚醒單片機時,程序將從頭開始執行。
     讓單片機進入空閑模式的目的通常是為了降低系統的功耗,舉個很簡單的例子,大家都用過數字萬用表,在正常使用的時候表內部的單片機處于正常工作模式,當不用時,又忘記了關掉萬用表的電源,大多數表在等待數分鐘后,若沒有人為操作,它便會自動將液晶顯示關閉,以降低系統功耗,通常類似這種功能的實現就是使用了單片機的空閑模式或是掉電模式。以STC89系列單片機為例,當單片機正常工作時的功耗通常為4mA~7mA,進入空閑模式時其功耗降至2mA,當進入掉電模式時功耗可降至0.1μA以下。
2.  休眠模式
     當單片機進入掉電模式時,外部晶振停振、CPU、定時器、串行口全部停止工作,只有外部中斷繼續工作。使單片機進入休眠模式的指令將成為休眠前單片機執行的最后一條指令,進入休眠模式后,芯片中程序未涉及到的數據存儲器和特殊功能寄存器中的數據都將保持原值?捎赏獠恐袛嗟碗娖接|發或由下降沿觸發中斷或者硬件復位模式換醒單片機,需要注意的是,使用中斷喚醒單片機時,程序從原來停止處繼續運行,當使用硬件復位喚醒單片機時,程序將從頭開始執行。
 下面的例子演示單片機進入空閑和休眠模式,并且演示出從空閑和休眠模式中喚醒的過程。
     【例】:在實驗板上完成如下描述,開啟兩個外部中斷,設置低電平觸發中斷,用定時器計數并且顯示在數碼管的前兩位,當計到5時,使單片機進入空閑(休眠)模式,同時關閉定時器,當單片機響應外部中斷后,從空閑(休眠)模式返回,同時開啟定時器。
 新建文件part3.4.1.c,程序代碼如下:
#include <reg52.h>      //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)%256;
 EA=1;
 ET0=1;
 EX0=1;
 EX1=1;
 TR0=1;
 while(1)
 {
  if(num>=20)
  {
   num=0;
   num1++;
   if(num1==6)
   {
    ET0=0;
    PCON=0x02; (或PCON=0x01;)
   }
   a=num1/10;
   b=num1%10;
  }
  display(a,b);
 }
}
void timer0() interrupt 1
{
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 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
 TR0=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,(或者直接按下板子上的int0鍵),數碼管重新從“06”開始顯示,遞增下去。整個過程演示了單片機從正常工作模式進入休眠模式或空閑模式,然后再從休眠模式或空閑模式返回到正常工作模式。
 (5)測試過程大家可將數字萬用表調節到電流檔,然后串接入電路中,觀察單片機在正常工作模式、休眠模式、空閑模式下流過系統的總電流變化情況,經測試可發現結果如下:正常工作電流>空閑模式電流>休眠模式電流。

[此貼子已經被作者于2010-4-9 18:30:50編輯過]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人在线播放 | 久久亚洲美女 | 国产91中文| 日日干日日射 | 色综合久| 夜久久| 欧美一区在线视频 | 精品日韩一区二区 | 欧美v在线| 综合一区二区三区 | 成人免费网站www网站高清 | 国产一区二区在线免费视频 | 亚洲狠狠爱| 日本黄色短片 | 久久综合伊人一区二区三 | 久久久久久久久久久久久久久久久久久久 | 午夜男人天堂 | 日韩成人免费 | 亚洲免费视频播放 | 欧美福利影院 | 日本粉嫩一区二区三区视频 | 国产伦一区二区三区 | 成人不卡 | 我爱操| 日韩欧美国产一区二区 | 国外成人在线视频网站 | 亚洲欧美一区二区三区在线 | 午夜成人免费电影 | 一区二区免费在线观看 | 欧美在线视频一区 | 日韩区| 亚洲色图综合 | 欧美一区二区三区在线视频 | 99精品欧美一区二区三区综合在线 | 国产精品美女久久久久aⅴ国产馆 | 成年人在线观看 | 中文字幕乱码一区二区三区 | 亚洲激情在线 | 天天躁人人躁人人躁狂躁 | 精品一区二区三区四区外站 | 7777在线视频免费播放 |