單片機的基本結(jié)構(gòu)與工作原理
89C51單片機的工作方式
89C51單片機共有復(fù)位、程序執(zhí)行、低功耗以及編程和校驗等四種工作方式。
1.復(fù)位方式
(l)復(fù)位操作復(fù)位是單片機的初始化操作,其主要功能是把PC初始化為OOOOH,使單片機從0000H單元開始執(zhí)行程序。除了進入系統(tǒng)的正常初始化之外,當(dāng)由于程序運行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時,為擺脫困境,也需按復(fù)位鍵以重新啟動。
除PC之外,復(fù)位操作還對其它一些特殊功能寄存器有影響,它們的復(fù)位狀態(tài)如上表所示。
復(fù)位操作還對單片機的個別引腳信號有影響。例如在復(fù)位期間,ALE和信號變?yōu)闊o效狀態(tài),即ALE=LPSEN=1。(2)復(fù)位信號及其產(chǎn)生
①復(fù)位信號
RST引腳是復(fù)位信號的輸入端,復(fù)位信號是高電平有效,其有效時間應(yīng)持續(xù)24個振蕩脈沖周期(即兩個機器周期)以上,若使用頻率為6MHz的晶振,則復(fù)位信號持續(xù)時間應(yīng)超過4μs才能完成復(fù)位操作;產(chǎn)生復(fù)位信號的電路邏輯如下圖所示。
整個復(fù)位電路包括芯片內(nèi)外兩部分。外部電路產(chǎn)生的復(fù)位信號(RST)送施密特觸發(fā)器,再由片內(nèi)復(fù)位電路在每個機器周期的S5P2時刻對施密特觸發(fā)器的輸出進行采樣。然后才得到內(nèi)部復(fù)位操作所需要的信號。
?、趶?fù)位方式復(fù)位操作有上電自動復(fù)位、按鍵手動復(fù)位和外部脈沖復(fù)位三種方式,示于下圖中。
上電自動復(fù)位是通過外部復(fù)位電路的電容充電來實現(xiàn)的,其電路如上圖(a)所示。這樣,只要電源VCC的上升時間不超過1ms,就可以實現(xiàn)自動上電復(fù)位,即接通電源就完成了系統(tǒng)的復(fù)位初始化。按鍵電平復(fù)位是通過使復(fù)位端經(jīng)電阻與Vcc電源接通而實現(xiàn)的,其電路如上圖(b)所示。而按鍵復(fù)位電路圖中的電阻電容參數(shù)適宜于6MHz晶振,能保證復(fù)位信號高電平持續(xù)時間大于2個機器周期。外部脈沖復(fù)位是由外部提供一個復(fù)位脈沖。此復(fù)位脈沖應(yīng)保持寬度大于兩個機器周期,如上圖(c)所示。復(fù)位脈沖過后,由內(nèi)部下拉電阻保證RST端的低電平。
2.程序執(zhí)行方式
程序執(zhí)行方式是單片機的基本工作方式。由于復(fù)位后PC=0000H,因此程序執(zhí)行總是從地址0000H開始的。但一般程序并不是真正從0000H開始,為此就得在0000H開始的單元中存放一條無條件轉(zhuǎn)移指令,以便跳轉(zhuǎn)到實際程序的人口去執(zhí)行。
3.低功耗工作方式
80C51有兩種低功耗方式,即待機方式和掉電保護方式。待機方式和掉電保護方式時所涉及的硬件如上圖所示。待機方式和掉電方式都是由電源控制寄存器(PCON)的有關(guān)位來控制的。電源控制寄存器(PCON)寄存器是一個逐位定義的8位寄存器,其格式如下:
其中:SMOD為波特率倍增位,在串行通信時使用;CF1為
通用標(biāo)志位1;GF0為通用標(biāo)志位0;PD為掉電方式位,PD=l,則進入掉電方式;IDL為待機方式位,IDL=1,則進入待機方式。要想使單片機進入待機或掉電工作方式,只要執(zhí)行一條能使IDL或PD位為1的指令就可以了。
(1)待機方式
?、艽龣C方式的進入如果使用指令使PCON寄存器IDL位置1,則89C51即進入待機方式。這時振蕩器仍然運行,并向中斷邏輯、串行口和定時器/計數(shù)器電路提供時鐘,但向CPU提供時鐘的電路被阻斷,因此CPU不能工作,而中斷功能繼續(xù)存在,但與CPU有關(guān)的如SP、PC、PSW、ACC以及全部通用寄存器都被“凍結(jié)”在原狀態(tài)。
?、诖龣C方式的退出
采用中斷方法退出待機方式。在待機方式下,若引入一個外中斷請求信號,在單片機響應(yīng)中斷的同時,PCON.0位(即PD位)被硬件自動清0,單片機就退出待機方式而進入正常工作方式。在中斷服務(wù)程序中只需安排一條RETI指令,就可以使單片機恢復(fù)正常工作后,返回斷點繼續(xù)執(zhí)行程序。
(2)掉電保護方式
?、俚綦姳Wo方式的進入
PCON寄存器的PD位控制單片機進入掉電保護方式。當(dāng)80C51單片機在檢測到電源故障時,除進行信息保護外,還應(yīng)把PCON.I位置“1”,使之進入掉電保護方式。此時單片機一切工作都停止,只有內(nèi)部RAM單元的內(nèi)容被保存。
?、诘綦姳Wo方式的退出89C51單片機備用電源由Vcc端引入。當(dāng)Vcc恢復(fù)正常后,只要硬件復(fù)位信號維持l0ms,即能使單片機退出掉電保護方式。在待機和掉電方式期間引腳的狀態(tài)見下表。
4.編程方式
89C51片內(nèi)有4K字節(jié)的FlashROM代碼存儲器陣列。有低電壓編程和高電壓編程(12V)兩種模式。低電壓編程狀態(tài)為用戶在系統(tǒng)中編程89C51提供了一個方便的途徑,而高電壓編程(12V)模式與一般常規(guī)的Flash或EPROM編程器兼容。
(1)閃速存儲器編程方式上表列出了89C51閃速存儲器的編程、校驗、寫鎖定位及讀芯片標(biāo)記時的邏輯電平。89C51的存儲器原碼陣列在以上兩種編程狀態(tài)都是一個字節(jié)編程。如果Flash存儲器不空,整個存儲器必須在片擦除狀態(tài)下擦空。元的內(nèi)容被保存。②掉電保護方式的退出89C51單片機備用電源由Vcc端引入。當(dāng)Vcc恢復(fù)正常后,只要硬件復(fù)位信號維持l0ms,即能使單片機退出掉電保護方式。在待機和掉電方式期間引腳的狀態(tài)見表4。
4.編程方式
89C51片內(nèi)有4K字節(jié)的FlashROM代碼存儲器陣列。有低電壓編程和高電壓編程(12V)兩種模式。低電壓編程狀態(tài)為用戶在系統(tǒng)中編程89C51提供了一個方便的途徑,而高電壓編程(12V)模式與一般常規(guī)的Flash或EPROM編程器兼容。
(1)閃速存儲器編程方式上表列出了89C51閃速存儲器的編程、校驗、寫鎖定位及讀芯片標(biāo)記時的邏輯電平。89C51的存儲器原碼陣列在以上兩種編程狀態(tài)都是一個字節(jié)編程。如果Flash存儲器不空,整個存儲器必須在片擦除狀態(tài)下擦空。
(2)閃速存儲器編程
?、倬幊趟惴ㄔ诰幊?9C51之前,地址、數(shù)據(jù)、控制信號必須按上表和上圖(a)、(b)設(shè)置。編程89C51有以下步驟:(a)在地址線上輸入存儲器地址。(b)在數(shù)據(jù)線上輸入正確數(shù)據(jù)。(c)如上圖所示的、正確的控制信號組合。(d)對于高電壓編程模式,將EA的反/Vpp升至12V。(e)向ALE/PROG的反給出一個編程脈沖。字節(jié)寫周期,由自己定時,一般不超過1.5ms。(f)改變地址和數(shù)據(jù),重復(fù)(a)~(e)步,直到所有目的文件(OBJ文件)結(jié)束。
②數(shù)據(jù)查詢(DataPolling)89C51具備通過數(shù)據(jù)查詢來檢測寫循環(huán)結(jié)束的特性。在寫周期期間,若試圖讀取剛寫入的字節(jié),則將在P0.7引腳上得到寫入數(shù)據(jù)的反碼。一旦寫周期完成,所有輸出上將出現(xiàn)剛寫入的真實數(shù)據(jù),于是可以開始下輪循環(huán)。在寫周期啟動后,數(shù)據(jù)查詢可在任何時候開始。
?、蹨?zhǔn)備好/忙(RDY/BSY的反)字節(jié)編程的進程也可以通過RDY/BSY輸出信號檢測。如上圖所示,編程期間ALE/PRO的反升為高電平后,P3.4引腳被拉成低電平,表示BUS;而當(dāng)編程完成后又被拉高電平,表示READY。
④編程校驗如果鎖定位LB1和LB2沒有被編程,代碼數(shù)據(jù)可經(jīng)由數(shù)據(jù)線讀回,用來校驗。鎖定位不能直接被校驗,其校驗只有通過觀察其特性是否被允許而間接得到證實。
?、菪酒脸麄€EPROM陣列和三個鎖定位的電擦除可通過正確的控制信號組合,并保持ALE/PROG的反引腳處于低電平l0ms來完成。在芯片擦操作中,代碼陣列全被寫“1”。且在任何非空存儲字節(jié)被重復(fù)編程之前,必須首先執(zhí)行擦除操作。
⑥讀特征字節(jié)特征字節(jié)的讀取步驟和區(qū)域030H、031H、032H的標(biāo)準(zhǔn)校驗步驟相似,所不同的是P3.6和P3.7必須為邏輯低電平,返回值如下所示:(030H)=1EH表示AT-MEL生產(chǎn),(031H)=51H表示89C51,(032H)=FFH表示12V編程,(032H)=05H表示5V編程。
(3)程序鎖定位的功能和編程89C51片內(nèi)含有三個鎖定位,但是不含密碼陣列。可以不編程(U)也可以編程(P)以獲得一些附加特性,如上表所示為89C51程序鎖定位不同的編程狀況及其特點。當(dāng)?shù)谝患壖用軙r,EA的反邏輯電壓被取樣并鎖存。在復(fù)位期間,如果器件為上電而不是復(fù)位,鎖存器內(nèi)容初始化為一個隨機值,直到復(fù)位操作結(jié)束。鎖定位的編程方法可參照表5的邏輯電平進行。