知道了單片機(jī)通過(guò)I/O口與外設(shè)打交道,也知道了單片機(jī)的程序與數(shù)據(jù)如何保存,到底單片機(jī)是如何運(yùn)行程序的?原來(lái)單片機(jī)和其他微機(jī)一樣,也擁有一個(gè)中央處理器(CPU),它是整個(gè)單片機(jī)的核心部件,是8位數(shù)據(jù)寬度的處理器,能處理8位二進(jìn)制數(shù)據(jù)或代碼,CPU負(fù)責(zé)控制、指揮和調(diào)度整個(gè)單元系統(tǒng)協(xié)調(diào)的工作,完成運(yùn)算和控制輸入輸出功能等操作。 它在單片機(jī)中的核心地位見(jiàn)圖2.10所示。它通過(guò)單片機(jī)的內(nèi)部總線,將單片機(jī)內(nèi)部的各個(gè)部分:程序存儲(chǔ)器(ROM)、數(shù)據(jù)存儲(chǔ)器(RAM)、定時(shí)/計(jì)數(shù)器、并行接口、串行接口和中斷系統(tǒng)等聯(lián)系在一起,內(nèi)部總線有三種:數(shù)據(jù)總線,專門用來(lái)傳送數(shù)據(jù)信息,地址總線專門用來(lái)傳送地址信息,選中各操作單元,控制總線專門用來(lái)傳送CPU各種控制命令,以便CPU統(tǒng)一指揮協(xié)調(diào)工作。完成程序所要執(zhí)行的各種功能。CPU執(zhí)行程序一般包括兩個(gè)主要過(guò)程:第一,就是從程序存儲(chǔ)器中取出指令,指令的地址由PC指針提供,在前面我們已經(jīng)知道,PC指針在CPU取指后會(huì)自動(dòng)加一,所以PC指針總是指向下一個(gè)將要取出的指令代碼或操作數(shù)。這樣,就能保證程序源源不斷往下執(zhí)行。第二,就是執(zhí)指過(guò)程,取出的指令代碼首先被送到CPU中控制器中的指令寄存器,再通過(guò)指令譯碼器譯碼變成各種電信號(hào),從而實(shí)現(xiàn)指令的各種功能。

4. 怎樣保證CPU工作?
現(xiàn)在我們知道了單片機(jī)怎樣取指、執(zhí)指,即怎樣運(yùn)行程序了。那么怎樣才能保證CPU有序的工作?這就必須提到單片機(jī)的兩個(gè)非常重要的外圍電路:?jiǎn)纹瑱C(jī)的時(shí)鐘電路和復(fù)位電路。在單片機(jī)上面有兩個(gè)引腳,分別是它的第18、19腳,其功能如下。
Pin19: 時(shí)鐘XTAL1腳,片內(nèi)振蕩電路的輸入端。
Pin18: 時(shí)鐘XTAL2腳,片內(nèi)振蕩電路的輸出端。
89S51的時(shí)鐘有兩種方式,一種是片內(nèi)時(shí)鐘振蕩方式,但需在18和19腳外接石英晶體和振蕩電容,振蕩電容的值一般取10p~30p。另外一種是外部時(shí)鐘方式,即將XTAL1接地,外部時(shí)鐘信號(hào)從XTAL2腳輸入。如圖2.11
當(dāng)時(shí)鐘電路起振后,產(chǎn)生一定頻率的時(shí)鐘信號(hào),單片機(jī)的CPU在時(shí)鐘信號(hào)的控制下,就能一步一步完成自己的工作。通常我們必須了解以下幾種周期。
【振蕩周期】:?jiǎn)纹瑱C(jī)外接石英晶體振蕩器的周期。如外接石英晶體的頻率若為12MHz,這其振蕩周期就是1/12微秒。
【狀態(tài)周期】:?jiǎn)纹瑱C(jī)完成一個(gè)最基本的動(dòng)作所需的時(shí)間周期。如掃描一次定時(shí)器T0引腳狀態(tài)所需要的時(shí)間。一個(gè)狀態(tài)周期=2個(gè)振蕩周期。
【機(jī)器周期】:?jiǎn)纹瑱C(jī)完成一次完整的具有一定功能的動(dòng)作所需的時(shí)間周期。如一次完整的讀操作或?qū)懖僮鲗?duì)應(yīng)的時(shí)間。一個(gè)機(jī)器周期=6個(gè)狀態(tài)周期。
【指令周期】:執(zhí)行完某條指令所需要的時(shí)間周期,一般需要1~4個(gè)機(jī)器周期,如MUL AB指令是四機(jī)器周期指令。一個(gè)指令周期=1~4個(gè)機(jī)器周期。
單片機(jī)工作時(shí),除了需要時(shí)鐘支持外,還必須有一個(gè)初始狀態(tài),即單片機(jī)的復(fù)位狀態(tài)。在單片機(jī)外部引腳第9腳,就是專門給單片機(jī)提供復(fù)位脈沖的。
Pin9: RESET/Vpd復(fù)位信號(hào)復(fù)用腳,當(dāng)89S51通電,時(shí)鐘電路開(kāi)始工作,在RESET引腳上出現(xiàn)24個(gè)時(shí)鐘周期以上的高電平,系統(tǒng)即初始復(fù)位。

圖2.11
初始化后,程序計(jì)數(shù)器PC指向0000H,P0~P3輸出口全部為高電平,堆棧指鐘寫入07H,其它專用寄存器被清“0”。RESET由高電平下降為低電平后,系統(tǒng)即從0000H地址開(kāi)始執(zhí)行程序。然而,初始復(fù)位不改變RAM(包括工作寄存器R0-R7)的狀態(tài),89S51的初始態(tài)如下表:
特殊功能寄存器初始態(tài)特殊功能寄存器初始態(tài)
ACC00HB00H
PSW00HSP07H
DPH00HTH000H
DPL00HTL000H
IPxxx00000BTH100H
IE0xx00000BTL100H
TMOD00HTCON00H
SCONxxxxxxxxBSBUF00H
P0-P31111111BPCON0xxxxxxxB
表2.5
89S51的復(fù)位方式可以是自動(dòng)復(fù)位,也可以是手動(dòng)復(fù)位,見(jiàn)下圖。此外,RESET/Vpd還是一復(fù)用腳,Vcc掉電期間,此腳可接上備用電源,以保證單片機(jī)內(nèi)部RAM的數(shù)據(jù)不丟失。

圖2.12

5. 按鍵為何能打斷原來(lái)的工作?
在前面的任務(wù)中,我們還看到一個(gè)現(xiàn)象,只要按一下S1鍵,發(fā)光管的閃動(dòng)就停止5秒,這就相當(dāng)于打斷了原來(lái)既定的工作,等到5秒延時(shí)一到,又恢復(fù)原來(lái)的工作。這就象我們平時(shí)通常所說(shuō)的“中斷”。單片機(jī)中也有中斷系統(tǒng),它有5個(gè)中斷源,它們能打斷單片機(jī)原來(lái)的工作,直到中斷結(jié)束才能繼續(xù)原來(lái)的工作。我們將在模塊五中詳細(xì)闡述。
6. 發(fā)光二極管為何按一定頻率閃爍?
在前面的任務(wù)中,燈有規(guī)律的閃動(dòng)和按鍵停5秒,都離不開(kāi)時(shí)間。那么,這個(gè)時(shí)間我們?cè)谇懊娴某绦蛑惺窃鯓拥玫降?原來(lái),在89S51單片機(jī)中有兩個(gè)定時(shí)器T0、T1,我們?cè)谇懊嬉惨呀?jīng)提到了,它在單片機(jī)中能夠?qū)崿F(xiàn)定時(shí)或計(jì)數(shù)功能。詳細(xì)的用法,在模塊五進(jìn)行講解。
7. 單片機(jī)的其他資源
通過(guò)本次任務(wù)的分析,我們基本上知道MCS-51單片機(jī)的結(jié)構(gòu),它由CPU、程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器、并行輸入輸出口、定時(shí)計(jì)數(shù)器、中斷系統(tǒng)等構(gòu)成,當(dāng)然除了本次任務(wù)用到的以上資源外,51單片機(jī)還有一個(gè)串行通訊口。
單片機(jī)的引腳除了我們前面介紹的4個(gè)并I/O口,兩根時(shí)鐘引腳(18、19腳),一根復(fù)位引腳(9腳),兩根電源腳(40、20腳)外,還有以下一些引腳。
Pin30: ALE/
當(dāng)訪問(wèn)外部程序器時(shí),ALE(地址鎖存)的輸出用于鎖存地址的低位字節(jié)。而訪問(wèn)內(nèi)部程序存儲(chǔ)器時(shí),ALE端將有一個(gè)1/6時(shí)鐘頻率的正脈沖信號(hào),這個(gè)信號(hào)可以用于識(shí)別單片機(jī)是否工作,也可以當(dāng)作一個(gè)時(shí)鐘向外輸出。更有一個(gè)特點(diǎn),當(dāng)訪問(wèn)外部程序存儲(chǔ)器,ALE會(huì)跳過(guò)一個(gè)脈沖。
如果單片機(jī)是EPROM,在編程其間,
將用于輸入編程脈沖。
Pin29:
當(dāng)訪問(wèn)外部程序存儲(chǔ)器時(shí),此腳輸出負(fù)脈沖選通信號(hào),PC的16位地址數(shù)據(jù)將出現(xiàn)在P0和P2口上,外部程序存儲(chǔ)器則把指令數(shù)據(jù)放到P0口上,由CPU讀入并執(zhí)行。
Pin31: EA/Vpp程序存儲(chǔ)器的內(nèi)外部選通線,89S51和8751單片機(jī),內(nèi)置有4kB的程序存儲(chǔ)器,當(dāng)EA為高電平并且程序地址小于4kB時(shí),讀取內(nèi)部程序存儲(chǔ)器指令數(shù)據(jù),而超過(guò)4kB地址則讀取外部指令數(shù)據(jù)。如EA為低電平,則不管地址大小,一律讀取外部程序存儲(chǔ)器指令。顯然,對(duì)內(nèi)部無(wú)程序存儲(chǔ)器的8031,EA端必須接地。
在編程時(shí),EA/Vpp腳還需加上21V的編程電壓(8751)。
其40個(gè)引腳的引腳圖如下:

圖2.13
