拾:最小系統與省電工作方式
1、什麼是最小系統? 能讓微控制器正常工作的最小電路,我們稱之為最小系統。 2、最下系統包含哪些電路? ①電源電路。 ②晶振電路。 ③復位電路。
晶振電路 晶振是為電路提供頻繁基準的元器件,通常分為有源晶振和無源晶振兩個大類。
復位電路 51晶片,通常在上電的瞬間需要一個短暫的時間進行內部引數的初始化,這個時候晶片無法立即進入工作狀態。通常稱上電初始化這些工作為復位。 復位電路的基本功能是:系統上電時提供復位訊號,直至電源穩定後,撤銷復位訊號。為可靠起見,電源穩定後還要經一定的延時(共大於兩個機器週期)才撤銷復位訊號。
省電
1、為什麼要省電? ①便攜、耐用 2、有哪些省電途徑? ①低工作電壓 ②省電工作方式 ③內部模組的單獨開關 ④工作頻率的設定 ⑤優秀的軟體設計
省電工作方式
51有兩種可用軟體來選擇的省電方式——空閒工作方式和掉電工作方式。 暫存器PCON(電源控制暫存器)中PD(PCON.1)和IDL(PCON.0)位來控制。
SMOD | GF1 | GF0 | PD | IDL |
SMOD是序列口波特率倍增位。當SMOD=1時,序列口波特率加倍。系統復位預設為SMOD=0。 GF1,GF0:兩個通用工作標誌位,使用者可以自由使用。 PD:掉電模式設定位。PD=0微控制器處於正常工作狀態。PD=1單片夾進入掉電(Power Down)模式,可由外部中斷或硬體復位模式喚醒,進入掉電模式後,外部晶振停振,CPU、定時器、序列口全部停止工作,只有外部中斷工作。 IDL:空閒模式設定位。IDL=0微控制器處於正常工作狀態。IDL=1微控制器進入空閒(Idle)模式,除CPU不工作外,其餘仍繼續工作,在空閒模式下可由任一中斷或硬體復位喚醒。
外部中斷使用
2個外部中斷資源:外部中斷0(INT0、對應P3.2引腳)和外部中斷1(INT1、對應P3.3引腳)。 外部中斷有兩種觸發方式:低電平觸發方式、負跳變觸發方式。
EA | EX1 | EX0 |
EA:中斷允許總開關位。EA=1,開中斷;EA=0,禁用所有中斷。 EX1:外部中斷1允許位。ET1=1,開INT1中斷;ET1=0,關INT1中斷。 EX0:外部中斷0允許位。ET0=1,開INT0中斷;ET0=0,關INT0中斷。 還有一箇中斷優先順序控制暫存器IP可設定某個中斷源為高優先順序還是低優先順序中斷,一般情況下不需要設定。
TCON暫存器
IE1 | IT1 | IE0 | IT0 | ||||
外部中斷1 | 外部中斷1 | 外部中斷0 | 外部中斷0 |
實驗
彙編程式碼
******************************************************************/
* 【課程11】 ****微控制器的省電工作模式***********
* 【說 明】 ****讓微控制器工作在省電模式,
* 【描 述】 ****讓微控制器工作在省電模式,通過外部中斷推出省電模式
******************************************************************/
ORG 0000H
JMP MAIN
ORG 0003H
MOV PCON,#00H
RETI
ORG 0030H
MAIN: SETB IT0 ;設定邊沿觸發
SETB EA ;開總中斷開關
SETB EX0 ;開中斷0
MOV R2,#10
JX: CLR P1.0 ;控制LED燈閃爍10次
CALL DELAY
SETB P1.0
CALL DELAY
DJNZ R2,JX
MOV PCON,#01H ;進入省電模式
JMP MAIN
DELAY: ;延時子函式
MOV R7,#0FFH ;延時程式
W1: MOV R6,#0fFH
W2: DJNZ R6,W2
DJNZ R7,W1
RET
END
C程式碼
******************************************************************/
* 【課程11】 ****微控制器的省電工作模式***********
* 【說 明】 ****讓微控制器工作在省電模式,
* 【描 述】 ****讓微控制器工作在省電模式,通過外部中斷推出省電模式
******************************************************************/
#include<reg51.h> //51標頭檔案,
#include <intrins.h>
//---------常用的兩個巨集定義--------------
#define uint8 unsigned char
#define uint16 unsigned int
sbit LED=P1^0; //發光二極體引腳定義
/*----------------------------------
函式名:INT0_i()
功能: 中斷服務程式
-------------------------------------*/
void INT0_i() interrupt 0
{
PCON=0x00; //退出省電模式
}
/*----------------------------------
函式名:main()
功能: 主程式
-------------------------------------*/
void main()
{
uint16 i,j;
IT0=1; //選擇外部中斷0為下降沿觸發
EX0=1; //開啟外部中斷0
EA=1; //開啟總中斷
LED=1;
while(1)
{
for(i=0;i<20;i++)
{
for(j=0;j<30000;j++) //延時一段時間
_nop_();
LED=~LED; //讓LED燈閃爍
}
PCON=0x01; //進入空閒模式
}
}