標籤: 暫無標籤

MCS-51單片機的簡介說明及應用功能

1 MCS-51單片機 -MCS-51單片機主要應用特性

MCS-51單片機是美國INTE公司於1980年推出的產品,與MCS-48單片機相比,它的結構更先進,功能更強,在原來的基礎上增加了更多的電路單元和指令,指令數達111條,MCS-51單片機可以算是相當成功的產品,一直到現在,MCS-51系列或其兼容的單片機仍是應用的主流產品,各高校及專業學校的培訓教材仍與MCS-51單片機作為代表進行理論基礎學習。

MCS-51單片機MCS-51單片機
 

基本數據

MCS-51系列單片機主要包括8031、8051和8751等通用產品,其主要功能如下:
▲ 8位CPU
▲ 4kbytes 程序存儲器(ROM)
▲ 128bytes的數據存儲器(RAM)
▲ 32條I/O口線
▲ 111條指令,大部分為單位元組指令
▲ 21個專用寄存器
▲ 2個可編程定時/計數器
▲ 5個中斷源,2個優先順序
▲ 一個全雙工串列通信口
▲ 外部數據存儲器定址空間為64kB
▲ 外部程序存儲器定址空間為64kB
▲ 邏輯操作位定址功能
▲ 雙列直插40PinDIP封裝
▲ 單一 5V電源供電  

發展歷程

MCS-51以其典型的結構和完善的匯流排專用寄存器的集中管理,眾多的邏輯位操作功能及面向控制的豐富的指令系統,堪稱為一代「名機」,為以後的其它單片機的發展奠定了基礎。正因為其優越的性能和完善的結構,導致後來的許多廠商多沿用或參考了其體系結構,有許多世界大的電氣商豐富和發展了MCS-51單片機,象PHILIPS、Dallas、ATMEL等著名的半導體公司都推出了兼容MCS-51的單片機產品,就連中國的台灣WINBOND公司也發展了兼容C51(人們習慣將MCS-51簡稱C51,如果沒有特別聲明,二者同指MCS-51系列單片機)的單片機品種。

近年來C51獲得了飛速的發展,C51的發源公司INTEL由於忙於開發PC及高端微處理器而無精力繼續發展自己的單片機,而由其它廠商將其發展,最典型的是PHILIPS和ATML公司,PHILIPS公司主要是改善其性能,在原來的基礎上發展了高速I/O口,A/D轉換器,PWM(脈寬調製)、WDT等增強功能,並在低電壓、微功耗、擴展串列匯流排(I2C)和控制網路匯流排(CAN)等功能加以完善。

PHILIPS公司在發展C51的低功耗,高速度和增強型功能上作了不少貢獻,當初主要由其來發展C51單片機,他們的83Cxx和87Cxx系列省去了并行擴展匯流排,適合於作為家用電器類控制的經濟型單片機。

ATMEL公司推出的AT89Cxx系列兼容C51的單片機,完美地將Flash(非易失快閃記憶體技術)EEPROM與80C51內核結合起來,仍採用C51的總體結構和指令系統,Flash的可反擦寫程序存儲器能有效地降低開發費用,並能使單片機作多次重複使用。

Siemens公司也沿用C51的內核,相繼推出了C500系列單片機,在保持了與C51指令兼容的前提下,其產品的性能得到了進一步的提升,特別是在抗干擾性能,電磁兼容和通信控制匯流排功能上獨樹一幟,其產品常用於工作環境惡劣的場合。亦適用於通信和家用電器控制領域。

還有台灣的WINBOND公司亦開發了一系列兼容C51的單片機,其產品通常具備豐富的功能特性,而且與其質優價廉在市場也佔有一定的分額。

類別

下表是80C51系列單片機的主要分類及功能特性:
系列 典型晶元 I/O口 定時/計數器 中斷源 串列通信口 片內RAM 片內ROM 說明
51系列
80C31 4x8位 2x16位 5 1 128位元組 無  
80C51 4x8位 2x16位 5 1 128位元組 4kB掩膜ROM  
87C51 4x8位 2x16位 5 1 128位元組 4kBEPROM  
89C51 4x8位 2x16位 5 1 128位元組 4kBEEPROM  
52系列
80C32 4x8位 2x16位 6 1 256位元組 無  
80C51 4x8位 2x16位 6 1 256位元組 8kB掩膜ROM  
87C52 4x8位 2x16位 6 1 256位元組 4kBEPROM  
89C52 4x8位 2x16位 6 1 256位元組 4kBEEPROM  

代表產品8051性能簡介

8051是MCS-51系列單片機中的代表產品,它內部集成了功能強大的中央處理器,包含了硬體乘除法器、21個專用控制寄存器、4kB的程序存儲器、128位元組的數據存儲器、4組8位的并行口、兩個16位的可編程定時/計數器、一個全雙工的串列口以及布爾處理器。

MCS-51具有比較大的定址空間,地址線寬達16條,即外部數據存儲器和程序存儲器的定址範圍達2^16=64kB,這作為單片機控制來說已是比較大的,這同時具備對I/O口的訪問能力。此外,MCS-51採用模塊化結構,可方便地增刪一個模塊就可引腳和指令兼容的新產品。從而容易使產品形成系列化。

由於MCS-51集成了幾乎完善的8位中央處理單元,處理功能強,中央處理單元中集成了方便靈活的專用寄存器,硬體的加、減、乘、除法器和布爾處理機及各種邏輯運算和轉移指令,這給應用提供了極大的便利。

MCS-51的指令系統近乎完善,指令系統中包含了全面的數據傳送指令、完善的算術和邏輯運算指令、方便的邏輯操作和控制指令、對於編程來說,是相當靈活和方便的。

MCS-51單片機的工作頻率為2-12MHz,當振蕩頻率為12MHz時,一個機器周期為1us,這個速度應該說是比較快的。

8051中集成了完善的各種中斷源,用戶可十分方便地控制和使用其功能,使得它的應用範圍加大,可以說它可以滿足絕大部分的應用場合。

MCS-51把微型計算機的主要部件都集成在一塊心片上,使得數據傳送距離大大縮短,可靠性更高,運行速度更塊。由於屬於晶元化的微型計算機,各功能部件在晶元中的布局和結構達最優化,抗干擾能力加強,工作亦相對穩定。因此,在工業測控系統中,使用單片機是最理想的選擇。單片機屬於典型的嵌入式系統,所以它是低端控制系統最佳器件。

MCS-51的開發環境要求較低,軟體資源十分豐富,介紹其功能特性書籍和開發軟體隨處可取,只需配備一台PC(個人電腦——對電腦的配置基本上無要求),一台模擬編程器即可實現產品開發,早期的開發軟體多使用DOS版本,隨著Windows視窗軟體的普及,現在幾乎都使用Windows版本,並且軟體種類繁多,琳琅滿目,在眾多的單片機品種中,C51的環境資源是最豐富的,這給C51用戶帶來極大的便利。

2 MCS-51單片機 -MCS-51結構原理


8051是MCS-51系列單片機的典型產品,我們以這一代表性的機型進行系統的講解。

8051單片機包含中央處理器、程序存儲器(ROM)、數據存儲器(RAM)、定時/計數器、并行介面、串列介面和中斷系統等幾大單元及數據匯流排、地址匯流排和控制匯流排等三大匯流排,現在我們分別加以說明:
 
中央處理器
 
MCS-51單片機805內部結構
    
中央處理器(CPU)是整個單片機的核心部件,是8位數據寬度的處理器,能處理8位二進位數據或代碼,CPU負責控制、指揮和調度整個單元系統協調的工作,完成運算和控制輸入輸出功能等操作。

數據存儲器(RAM)     
8051內部有128個8位用戶數據存儲單元和128個專用寄存器單元,它們是統一編址的,專用寄存器只能用於存放控制指令數據,用戶只能訪問,而不能用於存放用戶數據,所以,用戶能使用的的RAM只有128個,可存放讀寫的數據,運算的中間結果或用戶定義的字型表。

程序存儲器(ROM)
    
8051共有4096個8位掩膜ROM,用於存放用戶程序,原始數據或表格。

定時/計數器(ROM)
   
8051有兩個16位的可編程定時/計數器,以實現定時或計數產生中斷用於控制程序轉向。

并行輸入輸出(I/O)口
    
8051共有4組8位I/O口(P0、 P1、P2或P3),用於對外部數據的傳輸。

全雙工串列口  
8051內置一個全雙工串列通信口,用於與其它設備間的串列數據傳送,該串列口既可以用作非同步通信收發器,也可以當同步移位器使用。

中斷系統
     
8051具備較完善的中斷功能,有兩個外中斷、兩個定時/計數器中斷和一個串列中斷,可滿足不同的控制要求,並具有2級的優先順序別選擇。

時鐘電路     
8051內置最高頻率達12MHz的時鐘電路,用於產生整個單片機運行的脈衝時序,但8051單片機需外置振蕩電容。

MCS-51的引腳說明 
MCS-51單片機8051引腳圖
     
MCS-51系列單片機中的8031、8051及8751均採用40Pin封裝的雙列直接DIP結構,右圖是它們的引腳配置,40個引腳中,正電源和地線兩根,外置石英振蕩器的時鐘線兩根,4組8位共32個I/O口,中斷口線與P3口線復用。現在我們對這些引腳的功能加以說明:

    ·Pin20:接地腳。

    ·Pin40:正電源腳,正常工作或對片內EPROM燒寫程序時,接 5V電源。

    ·Pin19:時鐘XTAL1腳,片內振蕩電路的輸入端。

    ·Pin18:時鐘XTAL2腳,片內振蕩電路的輸出端。

8051的時鐘有兩種方式,一種是片內時鐘振蕩方式,但需在18和19腳外接石英晶體(2-12MHz)和振蕩電容,振蕩電容的值一般取10p-30p。另外一種是外部時鐘方式,即將XTAL1接地,外部時鐘信號從XTAL2腳輸入。   
  
輸入輸出(I/O)引腳
    
Pin39-Pin32為P0.0-P0.7輸入輸出腳,Pin1-Pin1為P1.0-P1.7輸入輸出腳,Pin21-Pin28為P2.0-P2.7輸入輸出腳,Pin10-Pin17為P3.0-P3.7輸入輸出腳,這些輸入輸出腳的功能說明將在以下內容闡述。
MCS-51單片機8051時鐘電路
 
Pin9:RESET/Vpd複位信號復用腳,當8051通電,時鐘電路開始工作,在RESET引腳上出現24個時鐘周期以上的高電平,系統即初始複位。初始化后,程序計數器PC指向0000H,P0-P3輸出口全部為高電平,堆棧指鍾寫入07H,其它專用寄存器被清「0」。RESET由高電平下降為低電平后,系統即從0000H地址開始執行程序。然而,初始複位不改變RAM(包括工作寄存器R0-R7)的狀態,8051的初始態如下表:

 特殊功能寄存器

       初始態            

特殊功能寄存器 

       初始態      

 ACC

 00H

 B

 00H

 PSW

 00H

 SP

 07H

 DPH

 00H

 TH0

 00H

 DPL

 00H

 TL0

 00H

 IP

 xxx00000B

 TH1

 00H

 IE

 0xx00000B

 TL1

 00H

 TMOD

 00H

 TCON

 00H

 SCon

 xxxxxxxxB

 SBUF

 00H

 P0-P3

  1111111B 

 PCON

 0xxxxxxxB


8051的複位方式可以是自動複位,也可以是手動複位,見下圖。此外,RESET/Vpd還是一復用腳,Vcc掉電期間,此腳可接上備用電源,以保證單片機內部RAM的數據不丟失。
MCS-51單片機5081時鐘電路
                                                        
Pin30: ALE/PROG當訪問外部程序器時,ALE(地址鎖存)的輸出用於鎖存地址的低位位元組。而訪問內部程序存儲器時,ALE端將有一個1/6時鐘頻率的正脈衝信號,這個信號可以用於識別單片機是否工作,也可以當作一個時鐘向外輸出。更有一個特點,當訪問外部程序存儲器,ALE會跳過一個脈衝。

如果單片機是EPROM,在編程其間,將用於輸入編程脈衝。

Pin29:PESN當訪問外部程序存儲器時,此腳輸出負脈衝選通信號,PC的16位地址數據將出現在P0和P2口上,外部程序存儲器則把指令數據放到P0口上,由CPU讀入並執行。

Pin31:EA/Vpp程序存儲器的內外部選通線,8051和8751單片機,內置有4kB的程序存儲器,當EA為高電平並且程序地址小於4kB時,讀取內部程序存儲器指令數據,而超過4kB地址則讀取外部指令數據。如EA為低電平,則不管地址大小,一律讀取外部程序存儲器指令。顯然,對內部無程序存儲器的8031,EA端必須接地。

在編程時,EA/Vpp腳還需加上21V的編程電壓。
  

3 MCS-51單片機 -MCS-51單片機的指令時序


時序是用定時單位來描述的,MCS-51的時序單位有四個,它們分別是節拍、狀態、機器周期和指令周期,接下來我們分別加以說明。

節拍與狀態     
我們把振蕩脈衝的周期定義為節拍(為方便描述,用P表示),振蕩脈衝經過二分頻后即得到整個單片機工作系統的時鐘信號,把時鐘信號的周期定義為狀態(用S表示),這樣一個狀態就有兩個節拍,前半周期相應的節拍我們定義為1(P1),後半周期對應的節拍定義為2(P2)。

機器周期     
MCS-51有固定的機器周期,規定一個機器周期有6個狀態,分別表示為S1-S6,而一個狀態包含兩個節拍,那麼一個機器周期就有12個節拍,我們可以記著S1P1、S1P2……S6P1、S6P2,一個機器周期共包含12個振蕩脈衝,即機器周期就是振蕩脈衝的12分頻,顯然,如果使用6MHz的時鐘頻率,一個機器周期就是2us,而如使用12MHz的時鐘頻率,一個機器周期就是1us。

指令周期     
執行一條指令所需要的時間稱為指令周期,MCS-51的指令有單位元組、雙位元組和三位元組的,所以它們的指令周期不盡相同,也就是說它們所需的機器周期不相同,可能包括一到四個不等的機器周期。

MCS-51的指令時序     
MCS-51指令系統中,按它們的長度可分為單位元組指令、雙位元組指令和三位元組指令。執行這些指令需要的時間是不同的,也就是它們所需的機器周期是不同的,有下面幾種形式:

    △ 單位元組指令單機器周期
    △ 單位元組指令雙機器周期
    △ 雙位元組指令單機器周期
    △ 雙位元組指令雙機器周期
    △ 三位元組指令雙機器周期
    △ 單位元組指令四機器周期(如單位元組的乘除法指令)

下圖是MCS-51系列單片機的指令時序圖:
MCS-51單片機MCS-51的取指時序
 











上圖是單周期和雙周期取指及執行時序,圖中的ALE脈衝是為了鎖存地址的選通信號,顯然,每出現一次該信號單片機即進行一次讀指令操作。從時序圖中可看出,該信號是時鐘頻率6分頻后得到,在一個機器周期中,ALE信號兩次有效,第一次在S1P2和S2P1期間,第二次在S4P2和S5P1期間。 


典型的指令時序

單位元組單周期指令:
    
單位元組單周期指令只進行一次讀指令操作,當第二個ALE信號有效時,PC並不加1,那麼讀出的還是原指令,屬於一次無效的讀操作。

雙位元組單周期指令:
    
這類指令兩次的ALE信號都是有效的,只是第一個ALE信號有效時讀的是操作碼,第二個ALE信號有效時讀的是操作數。

單位元組雙周期指令:
    
兩個機器周期需進行四讀指令操作,但只有一次讀操作是有效的,后三次的讀操作均為無效操作。

單位元組雙周期指令有一種特殊的情況,象MOVX這類指令,執行這類指令時,先在ROM中讀取指令,然後對外部數據存儲器進行讀或寫操作,頭一個機器周期的第一次讀指令的操作碼為有效,而第二次讀指令操作則為無效的。在第二個指令周期時,則訪問外部數據存儲器,這時,ALE信號對其操作無影響,即不會再有讀指令操作動作。

上頁的時序圖中,我們只描述了指令的讀取狀態,而沒有畫出指令執行時序,因為每條指令都包含了具體的操作數,而操作數類型種類繁多,這裡不便列出,有興趣的讀者可參閱有關書籍。 
 
外部程序存儲器(ROM)讀時序   
MCS-51單片機8051外部程序存儲器讀時序
   
右圖8051外部程序存儲器讀時序圖,從圖中可看出,P0口提供低8位地址,P2口提供高8位地址,S2結束前,P0口上的低8位地址是有效的,之後出現在P0口上的就不再是低8位的地址信號,而是指令數據信號,當然地址信號與指令數據信號之間有一段緩衝的過度時間,這就要求,在S2其間必須把低8位的地址信號鎖存起來,這時是用ALE選通脈衝去控制鎖存器把低8位地址予以鎖存,而P2口只輸出地址信號,而沒有指令數據信號,整個機器周期地址信號都是有效的,因而無需鎖存這一地址信號。  
    
從外部程序存儲器讀取指令,必須有兩個信號進行控制,除了上述的ALE信號,還有一個PSEN(外部ROM讀選通脈衝),上圖顯然可看出,PSEN從S3P1開始有效,直到將地址信號送出和外部程序存儲器的數據讀入CPU後方才失效。而又從S4P2開始執行第二個讀指令操作。 
     
外部數據存儲器(RAM)讀時序   
MCS-51單片機8051外部程序存儲器讀時序
   
右圖8051外部數據存儲器讀寫時序圖,從ROM中讀取的需執行的指令,而CPU對外部數據存儲的訪問是對RAM進行數據的讀或寫操作,屬於指令的執行周期,值得一提的是,讀或寫是兩個不同的機器周期,但他們的時序卻是相似的,我們只對RAM的讀時序進行分析。

上一個機器周期是取指階段,是從ROM中讀取指令數據,接著的下個周期才開始讀取外部數據存儲器RAM中的內容。  
    
在S4結束后,先把需讀取RAM中的地址放到匯流排上,包括P0口上的低8位地址A0-A7和P2口上的高8位地址A8-A15。當RD選通脈衝有效時,將RAM的數據通過P0數據匯流排讀進CPU。第二個機器周期的ALE信號仍然出現,進行一次外部ROM的讀操作,但是這一次的讀操作屬於無效操作。
    
對外部RAM進行寫操作時,CPU輸出的則是WR(寫選通信號),將數據通過P0數據匯流排寫入外部存儲中。 

4 MCS-51單片機 -MCS-51單片機輸入輸出口


8051有4組8位I/O口:P0、P1、P2和P3口,P1、P2和P3為準雙向口,P0口則為雙向三態輸入輸出口,下面我們分別介紹這幾個口線:
MCS-51單片機P0口鎖存器和緩存器結構
 
P0口和P2口
右圖為P0口和P2口其中一位的電路圖,由圖可見,電路中包含一個數據輸出鎖存器和兩個三態數據輸入緩衝器,另外還有一個數據輸出的驅動和控制電路。這兩組口線用來作為CPU與外部數據存儲器、外部程序存儲器和I/O擴展口,而不能象P1、P3直接用作輸出口。它們一起可以作為外部地址匯流排,P0口身兼兩職,既可作為地址匯流排,也可作為數據匯流排。 
MCS-51單片機P2口鎖存器和緩存器結構
     
P2口作為外部數據存儲器或程序存儲器的地址匯流排的高8位輸出口AB8-AB15,P0口由ALE選通作為地址匯流排的低8位輸出口AB0-AB7。外部的程序存儲器由PSEN信號選通,數據存儲器則由WR和RD讀寫信號選通,因為216=64k,所以8051最大可外接64kB的程序存儲器和數據存儲器。
     
P1口
右圖為P1口其中一位的電路圖,P1口為8位準雙向口,每一位均可單獨定義為輸入或輸出口,當作為輸入口時,1寫入鎖存器,Q(非)=0,T2截止,內上拉電阻將電位拉至"1",此時該口輸出為1,當0寫入鎖存器,Q(非)=1,T2導通,輸出則為0。
MCS-51單片機P1口鎖存器和緩存器結構
     
作為輸入口時,鎖存器置1,Q(非)=0,T2截止,此時該位既可以把外部電路拉成低電平,也可由內部上拉電阻拉成高電平,正因為這個原因,所以P1口常稱為準雙向口。需要說明的是,作為輸入口使用時,有兩種情況,其一是:首先是讀鎖存器的內容,進行處理后再寫到鎖存器中,這種操作即讀—修改—寫操作,象JBC(邏輯判斷)、CPL(取反)、INC(遞增)、DEC(遞減)、ANL(與邏輯)和ORL(邏輯或)指令均屬於這類操作。其二是:讀P1口線狀態時,打開三態門G2,將外部狀態讀入CPU。  

P3口     
P3口的電路如上圖所示,P3口為準雙向口,為適應引腳的第二功能的需要,增加了第二功能控制邏輯,在真正的應用電路中,第二功能顯得更為重要。由於第二功能信號有輸入輸出兩種情況,我們分別加以說明。
MCS-51單片機P3口鎖存器結構
 
P3口的輸入輸出及P3口鎖存器、中斷、定時/計數器、串列口和特殊功能寄存器有關,P3口的第一功能和P1口一樣可作為輸入輸出埠,同樣具有位元組操作和位操作兩種方式,在位操作模式下,每一位均可定義為輸入或輸出。
    
我們著重討論P3口的第二功能,P3口的第二功能各管腳定義如下:

    △ P3.0     串列輸入口(RXD)
    △ P3.1     串列輸出口(TXD)
    △ P3.2     外中斷0(INT0)
    △ P3.3     外中斷1(INT1)
    △ P3.4     定時/計數器0的外部輸入口(T0)
    △ P3.5     定時/計數器1的外部輸入口(T1)
    △ P3.6     外部數據存儲器寫選通(WR)
    △ P3.7     外部數據存儲器讀選通(RD)
 
對於第二功能為輸出引腳,當作I/O口使用時,第二功能信號線應保持高電平,與非門開通,以維持從鎖存器到輸出口數據輸出通路暢通無阻。而當作第二功能口線使用時,該位的鎖存器置高電平,使與非門對第二功能信號的輸出是暢通的,從而實現第二功能信號的輸出。對於第二功能為輸入的信號引腳,在口線上的輸入通路增設了一個緩衝器,輸入的第二功能信號即從這個緩衝器的輸出端取得。而作為I/O口線輸入端時,取自三態緩衝器的輸出端。這樣,不管是作為輸入口使用還是第二功能信號輸入,輸出電路中的鎖存器輸出和第二功能輸出信號線均應置「1」。 

5 MCS-51單片機 -MCS-51單片機存儲器結構


程序存儲器     
一個微處理器能夠聰明地執行某種任務,除了它們強大的硬體外,還需要它們運行的軟體,其實微處理器並不聰明,它們只是完全按照人們預先編寫的程序而執行之。那麼設計人員編寫的程序就存放在微處理器的程序存儲器中,俗稱只讀程序存儲器(ROM)。程序相當於給微處理器處理問題的一系列命令。其實程序和數據一樣,都是由機器碼組成的代碼串。只是程序代碼則存放於程序存儲器中。

MCS-51具有64kB程序存儲器定址空間,它是用於存放用戶程序、數據和表格等信息。對於內部無ROM的8031單片機,它的程序存儲器必須外接,空間地址為64kB,此時單片機的端必須接地。強制CPU從外部程序存儲器讀取程序。對於內部有ROM的8051等單片機,正常運行時,則需接高電平,使CPU先從內部的程序存儲中讀取程序,當PC值超過內部ROM的容量時,才會轉向外部的程序存儲器讀取程序。

8051片內有4kB的程序存儲單元,其地址為0000H—0FFFH,單片機啟動複位后,程序計數器的內容為0000H,所以系統將從0000H單元開始執行程序。但在程序存儲中有些特殊的單元,這在使用中應加以注意:

其中一組特殊是0000H—0002H單元,系統複位后,PC為0000H,單片機從0000H單元開始執行程序,如果程序不是從0000H單元開始,則應在這三個單元中存放一條無條件轉移指令,讓CPU直接去執行用戶指定的程序。

另一組特殊單元是0003H—002AH,這40個單元各有用途,它們被均勻地分為五段,它們的定義如下:

     0003H—000AH  外部中斷0中斷地址區。

     000BH—0012H  定時/計數器0中斷地址區。

     0013H—001AH  外部中斷1中斷地址區。

     001BH—0022H  定時/計數器1中斷地址區。

     0023H—002AH  串列中斷地址區。

可見以上的40個單元是專門用於存放中斷處理程序的地址單元,中斷響應后,按中斷的類型,自動轉到各自的中斷區去執行程序。因此以上地址單元不能用於存放程序的其他內容,只能存放中斷服務程序。但是通常情況下,每段只有8個地址單元是不能存下完整的中斷服務程序的,因而一般也在中斷響應的地址區安放一條無條件轉移指令,指向程序存儲器的其它真正存放中斷服務程序的空間去執行,這樣中斷響應后,CPU讀到這條轉移指令,便轉向其他地方去繼續執行中斷服務程序。

數據存儲器
MCS-51單片機內部數據存儲器的配置
     
數據存儲器也稱為隨機存取數據存儲器。MCS-51單片機的數據存儲器在物理上和邏輯上都分為兩個地址空間,一個是內部數據存儲區和一個外部數據存儲區。MCS-51內部RAM有128或256個位元組的用戶數據存儲(不同的型號有分別),它們是用於存放執行的中間結果和過程數據的。MCS-51的數據存儲器均可讀寫,部分單元還可以位定址。 
    
8051內部RAM共有256個單元,這256個單元共分為兩部分。其一是地址從00H—7FH單元(共128個位元組)為用戶數據RAM。從80H—FFH地址單元(也是128個位元組)為特殊寄存器(SFR)單元。從圖1中可清楚地看出它們的結構分佈。
MCS-51單片機內部數據存儲器的配置
 
在00H—1FH共32個單元中被均勻地分為四塊,每塊包含八個8位寄存器,均以R0—R7來命名,我們常稱這些寄存器為通用寄存器。這四塊中的寄存器都稱為R0—R7,那麼在程序中怎麼區分和使用它們呢?聰明的INTEL工程師們又安排了一個寄存器——程序狀態字寄存器(PSW)來管理它們,CPU只要定義這個寄存的PSW的第3和第4位(RS0和RS1),即可選中這四組通用寄存器。對應的編碼關係如圖2所示。

內部RAM的20H—2FH單元為位定址區,既可作為一般單元用位元組定址,也可對它們的位進行定址。位定址區共有16個位元組,128個位,位地址為00H—7FH。位地址分配如表1所示,CPU能直接定址這些位,執行例如置「1」、清「0」、求「反」、轉移,傳送和邏輯等操作。我們常稱MCS-51具有布爾處理功能,布爾處理的存儲空間指的就是這些為定址區。 
 
表1  RAM位定址區地址表 
        單元地址               MSB        位地址        LSB 
          2FH                 7FH 7EH 7DH 7CH 7BH 7AH 79H 78H 
          2EH                 77H 76H 75H 74H 73H 72H 71H 70H 
          2DH                 6FH 6EH 6DH 6CH 6BH 6AH 69H 68H 
          2CH                 67H 66H 65H 64H 63H 62H 61H 60H 
          2BH                 5FH 5EH 5DH 5CH 5BH 5AH 59H 58H 
          2AH                 57H 56H 55H 54H 53H 52H 51H 50H 
          29H                 4FH 4EH 4DH 4CH 4BH 4AH 49H 48H 
          28H                 47H 46H 45H 44H 43H 42H 41H 40H 
          27H                 3FH 3EH 3DH 3CH 3BH 3AH 39H 38H 
          26H                 37H 36H 35H 34H 33H 32H 31H 30H 
          25H                 2FH 2EH 2DH 2CH 2BH 2AH 29H 28H 
          24H                 27H 26H 25H 24H 23H 22H 21H 20H 
          23H                 1FH 1EH 1DH 1CH 1BH 1AH 19H 18H 
          22H                 17H 16H 15H 14H 13H 12H 11H 10H 
          21H                 0FH 0EH 0DH 0CH 0BH 0AH 09H 08H 
          20H                 07H 06H 05H 04H 03H 02H 01H 00H 

特殊功能寄存器     
特殊功能寄存器(SFR)也稱為專用寄存器,特殊功能寄存器反映了MCS-51單片機的運行狀態。很多功能也通過特殊功能寄存器來定義和控制程序的執行。

MCS-51有21個特殊功能寄存器,它們被離散地分佈在內部RAM的80H—FFH地址中,這些寄存的功能已作了專門的規定,用戶不能修改其結構。表2是特殊功能寄存器分佈一覽表,我們對其主要的寄存器作一些簡單的介紹。

程序計數器PC(program Counter)     
程序計數器在物理上是獨立的,它不屬於特殊內部數據存儲器塊中。PC是一個16位的計數器,用於存放一條要執行的指令地址,定址範圍為64kB,PC有自動加1功能,即完成了一條指令的執行后,其內容自動加1。PC本身並沒有地址,因而不可定址,用戶無法對它進行讀寫,但是可以通過轉移、調用、返回等指令改變其內容,以控制程序按我們的要求去執行。

累加器ACC(accumulator)     
累加器A是一個最常用的專用寄存器,大部分單操作指令的一個操作數取自累加器,很多雙操作數指令中的一個操作數也取自累加器。加、減、乘、除法運算的指令,運算結果都存放於累加器A或AB累加器對中。大部分的數據操作都會通過累加器A進行,它形象於一個交通要道,在程序比較複雜的運算中,累加器成了制約軟體效率的「瓶頸」,它的功能較多,地位也十分重要。以至於後來發展的單片機,有的集成了多累加器結構,或者使用寄存器陣列來代替累加器,即賦予更多寄存器以累加器的功能,目的是解決累加器的「交通堵塞」問題。提高單片機的軟體效率。

 表2   特殊功能寄存器 
            標識符號           地址                     寄存器名稱 
              ACC                 0E0H                       累加器 
               B                    0F0H                       B寄存器 
              PSW               0D0H                    程序狀態字 
              SP                     81H                      堆棧指針 
             dptr            82H、83H   數據指針(16位)含DPL和DPH 
              IE                   0A8H               中斷允許控制寄存器 
              IP                   0B8H                中斷優先控制寄存器 
              P0                     80H                   I/O口0寄存器 
              P1                     90H                   I/O口1寄存器 
              P2                   0A0H                   I/O口2寄存器 
              P3                   0B0H                    I/O口3寄存器 
             PCON                87H         電源控制及波特率選擇寄存器 
             SCON                98H               串列口控制寄存器 
             SBUF                 99H            串列數據緩衝寄存器 
             TCON                88H               定時控制寄存器 
             TMOD               89H            定時器方式選擇寄存器 
             TL0                   8AH                 定時器0低8位 
             TH0                   8CH                 定時器0高8位 
             TL1                   8BH                 定時器1低8位 
             TH1                   8DH                定時器1高8位 
 
寄存器B     
在乘除法指令中,乘法指令中的兩個操作數分別取自累加器A和寄存器B,其結果存放於AB寄存器對中。除法指令中,被除數取自累加器A,除數取自寄存器B,結果商存放於累加器A,餘數存放於寄存器B中。

程序狀態字(Program Status Word)     
程序狀態字是一個8位寄存器,用於存放程序運行的狀態信息,這個寄存器的一些位可由軟體設置,有些位則由硬體運行時自動設置的。寄存器的各位定義如下,其中PSW.1是保留位,未使用。下表是它的功能說明,並對各

個位的定義介紹如下:

表3   程序狀態字   

  位序

 PSW.7 

PSW.6 

PSW.5  

PSW.4 

PSW.3 

 PSW.2 

  PSW.1  

  PSW.0 

  位標誌

 CY    

 AC

  F0

  RS1    

  RS0 

 OV 

   - 

 P 


       進位標誌位,此位有兩個功能:一是存放執行某寫算數運算時,存放進位標誌,可被硬體或軟體置位或清零。二是在位操作中作累加位使用。

PSW.6(AC) 輔助進位標誌位,當進行加、減運算時當有低4位向高4位進位或借位時,AC置位,否則被清零。AC輔助進位位也常用於十進位調整。

PSW.5(F0) 用戶標誌位,供用戶設置的標誌位。

PSW.4、PSW.3(RS1和 RS0) 寄存器組選擇位。可參見本章的圖2定義。

PSW.2(OV) 溢出標誌。帶符號加減運算中,超出了累加器A所能表示的符號數有效範圍(-128— 127)時,即產生溢出,OV=1。表明運算運算結果錯誤。如果OV=0,表明運算結果正確。
    
執行加法指令ADD時,當位6向位7進位,而位7不向C進位時,OV=1。或者位6不向位7進位,而位7向C進位時,同樣OV=1。
    
除法指令,乘積超過255時,OV=1。表面乘積在AB寄存器對中。若OV=0,則說明乘積沒有超過255,乘積只在累加器A中。
    
除法指令,OV=1,表示除數為0,運算不被執行。否則OV=0。

PSW.0(P) 奇偶校驗位。聲明累加器A的奇偶性,每個指令周期都由硬體來置位或清零,若值為1的位數奇數,則P置位,否則清零。

數據指針(DPTR)
    
數據指針為16位寄存器,編程時,既可以按16位寄存器來使用,也可以按兩個8位寄存器來使用,即高位位元組寄存器DPH和低位位元組DPL。
    
DPTR主要是用來保存16位地址,當對64kB外部數據存儲器定址時,可作為間址寄存器使用,此時,使用如下兩條指令:

            MOVX    A, @DPTR
            MOVX    @DPTR, A

在訪問程序存儲器時,DPTR可用來作基址寄存器,採用基址 變址定址方式訪問程序存儲器,這條指令常用於讀取程序存儲器內的表格數據。

            MOVC    A, @A @DPTR

堆棧指針SP(Stack Pointer)
   
MCS-51單片機堆棧結構圖
  
堆棧是一種數據結構,它是一個8位寄存器,它指示堆棧頂部在內部RAM中的位置。系統複位后,SP的初始值為07H,使得堆棧實際上是從08H開始的。但我們從RAM的結構分佈中可知,08H—1FH隸屬1—3工作寄存器區,若編程時需要用到這些數據單元,必須對堆棧指針SP進行初始化,原則上設在任何一個區域均可,但一般設在30H—1FH之間較為適宜。 
    
數據的寫入堆棧我們稱為入棧(PUSH,有些文獻也稱作插入運算或壓入),從堆棧中取出數據稱為出棧(POP,也稱為刪除運算或彈出),堆棧的最主要特徵是「後進先出」規則,也即最先入棧的數據放在堆棧的最底部,而最後入棧的數據放在棧的頂部,因此,最後入棧的數據出棧時則是最先的。這和我們往一個箱里存放書本一樣,需將最先放入箱底部的書取出,必須先取走最上層的書籍。這個道理非常相似。

那麼堆棧有何用途呢?堆棧的設立是為了中斷操作和子程序的調用而用於保存數據的,即常說的斷點保護和現場保護。微處理器無論是在轉入子程序和中斷服務程序的執行,執行完后,還是要回到主程序中來,在轉入子程序和中斷服務程序前,必須先將現場的數據進行保存起來,否則返回時,CPU並不知道原來的程序執行到哪一步,原來的中間結果如何?所以在轉入執行其它子程序前,先將需要保存的數據壓入堆棧中保存。以備返回時,再復原當時的數據。供主程序繼續執行。   
    
轉入中斷服務程序或子程序時,需要保存的數據可能有若干個,都需要一一地保留。如果微處理器進行多重子程序或中斷服務程序嵌套,那麼需保存的數據就更多,這要求堆棧還需要有相當的容量。否則會造成堆棧溢出,丟失應備份的數據。輕者使運算和執行結果錯誤,重則使整個程序紊亂。

MCS-51的堆棧是在RAM中開闢的,即堆棧要佔據一定的RAM存儲單元。同時MCS-51的堆棧可以由用戶設置,SP的初始值不同,堆棧的位置則不一定,不同的設計人員,使用的堆棧區則不同,不同的應用要求,堆棧要求的容量也有所不同。堆棧的操作只有兩種,即進棧和出棧,但不管是向堆棧寫入數據還是從堆棧中讀出數據,都是對棧頂單元進行的,SP就是即時指示出棧頂的位置(即地址)。在子程序調用和中斷服務程序響應的開始和結束期間,CPU都是根據SP指示的地址與相應的RAM存儲單元交換數據。

堆棧的操作有兩種方法:其一是自動方式,即在中斷服務程序響應或子程序調用時,返回地址自動進棧。當需要返回執行主程序時,返回的地址自動交給PC,以保證程序從斷點處繼續執行,這種方式是不需要編程人員干預的。第二種方式是人工指令方式,使用專有的堆棧操作指令進行進出棧操作,也只有兩條指令:進棧為PUSH指令,在中斷服務程序或子程序調用時作為現場保護。出棧操作POP指令,用於子程序完成時,為主程序恢復現場。

I/O口專用寄存器(P0、P1、P2、P3)
    
I/O口寄存器P0、P1、P2和P3分別是MCS-51單片機的四組I/O口鎖存器。MCS-51單片機並沒有專門的I/O口操作指令,而是把I/O口也當作一般的寄存器來使用,數據傳送都統一使用MOV指令來進行,這樣的好處在於,四組I/O口還可以當作寄存器直接定址方式參與其他操作。

定時/計數器(TL0、TH0、TL1和TH1)
    
MCS-51單片機中有兩個16位的定時/計數器T0和T1,它們由四個8位寄存器組成的,兩個16位定時/計數器卻是完全獨立的。我們可以單獨對這四個寄存器進行定址,但不能把T0和T1當作16位寄存來使用。

定時/計數器方式選擇寄存器(TMOD)
    
TMOD寄存器是一個專用寄存器,用於控制兩個定時計數器的工作方式,TMOD可以用位元組傳送指令設置其內容,但不能位定址,各位的定義如下,更詳細的內容,我們將在《MCS-51定時器和中斷系統》章節中敘述。

 表4   定時/計數器工作方式控制寄存器 TMOD 

  位序   

  D7   

 D6    

 D5  

  D4  

 D3    

 D2  

     D1  

  D0 

 位標誌

  GATE

 

 M1

 M0

 GATE  

 

 M1 

   M0 

 

 

    定時/計數器1

 

 

 

 定時/計數器0 

 

 


 串列數據緩衝器(SBUF)
    
串列數據緩衝器SBUF用來存放需發送和接收的數據,它由兩個獨立的寄存器組成,一個是發送緩衝器,另一個是接收緩衝器,要發送和接收的操作其實都是對串列數據緩衝器進行。

其他控制寄存器(TMOD)     
除了以上我們簡述的幾個專用寄存外,還有IP、IE、TCON、SCON和PCON等幾個寄存器,這幾個控制寄存器主要用於中斷和定時的,我們將在《MCS-51定時器和中斷系統》中詳細說明。
 

6 MCS-51單片機 -MCS-51的定時和計數器 


 MCS-51的單片機內有兩個16位可編程的定時/計數器,它們具有四種工作方式,其控制字和狀態均在相應的特殊功能寄存器中,通過對控制寄存器的編程,就可方便地選擇適當的工作方式。下面我們對它們的特性進行闡述。

定時/計數器的工作方式
    
MCS-51單片機MCS-51定時/計數器結構圖
 
MCS-51單片機內部的定時/計數器的結構如圖1所示,定時器T0特性功能寄存器TL0(低8位)和TH0(高8位)構成,定時器T1由特性功能寄存器TL1(低8位)和TH1(高8位)構成。特殊功能寄存器TMOD控制定時寄存器的工作方式,TCON則用於控制定時器T0和T1的啟動和停止計數,同時管理定時器T0和T1的溢出標誌等。程序開始時需對TL0、TH0、TL1和TH1進行初始化編程,以定義它們的工作方式和控制T0和T1的計數。

TMOD和TCON這兩個特殊功能寄存器的格式參見下表:

    [1]. 定時/計數器的方式控制字TMOD,位元組地址為89H,其格式如表1:  
 
  表1  TMOD寄存器結構 

 D7  

D6  

  D5  

D4  

 D3     

 D2

D1  

   D0 

 GATA  

 

 M1    

 M0

 GATA

 

 M1  

 M0 

 

 ←T1方式欄位→

 

 

 

    ←T0方式欄位→ 

 

 

                                                                                     [2]. 定時器控制積存器TCON,位元組地址為88H,位地址為88H—8FH,其格式如表2:

 
  表2  TCON結構 

 D7    

  D6  

    D5 

D4  

   D3

 D2  

 D1    

 D0 

 TF1  

 TR1

 TF0

 TR0

 IE1  

 IT1

    IE0

   IT0 


 TMOD和TCON各位的意義和用途我們將在下面的章節中予以介紹,需要注意的是,TCON的D0—D3位與中斷有關,我們會在中斷的內容中加以說明,MCS-51的定時/計數器共有四種工作方式,我們逐個進行討論。

工作方式0     
定時/計數器0的工作方式0電路邏輯結構見圖2(定時/計數器1與其完全一致),工作方式0是13位計數結構的工作方式,其計數器由TH的全部8位和TL的低5位構成,TL的高3位沒有使用。當=0時,多路開關接通振蕩脈衝的12分頻輸出,13位計數器以次進行計數。這就是定時工作方式。當=1時,多路開關接通計數引腳(To),外部計數脈衝由銀南腳To輸入。當計數脈衝發生負跳變時,計數器加1,這就是我們常稱的計數工作方式。  
MCS-51單片機定時/計數器內部結構
  
不管是哪種工作方式,當TL的低5位溢出時,都會向TH進位,而全部13位計數器溢出時,則會向計數器溢出標誌位TF0進位。

我們討論門控位GATA的功能,GATA位的狀態決定定時器運行控制取決於TR0的一個條件還是TR0和INT0引腳這兩個條件。當GATA=1時,由於GATA信號封鎖了與門,使引腳INT0信號無效。而這時候如果TR0=1,則接通模擬開關,使計數器進行加法計數,即定時/計數工作。而TR0=0,則斷開模擬開關,停止計數,定時/計數不能工作。

當GATA=0時,與門的輸出端由TR0和INT0電平的狀態確定,此時如果TR0=1,INT0=1與門輸出為1,允許定時/計數器計數,在這種情況下,運行控制由TR0和INT0兩個條件共同控制,TR0是確定定時/計數器的運行控制位,由軟體置位或清「0」。

如上所述,TF0是定時/計數器的溢出狀態標誌,溢出時由硬體置位,TF0溢出中斷被CPU響應時,轉入中斷時硬體清「0」,TF0也可由程序查詢和清「0」。

    在工作方式下,計數器的計數值範圍是:

          1—8192(2^13)

    當為定時工作方式時,定時時間的計算公式為:

         (2^13—計數初值)╳晶振周期╳12

    或   (2^13—計數初值)╳機器周期

    其時間單位與晶振周期或機器周期相同。

    如果單片機的晶振選為6.000MHz,則最小定時時間為:

        [2^13—(2^13—1)]╳1/6╳10-6╳12=2╳10^-6(s)=2(us)

        (2^13—0)╳1/6╳10-6╳12=16384╳10^-6(s)=16384(us)。

工作方式1
    
當M1,M0=01時,定時/計數器處於工作方式1,此時,定時/及數器的等效電路如圖3所示,仍以定時器0為例,定時器1與之完全相同。 
 
MCS-51單片機定時/計數器內部結構
 
可以看出,方式0和方式1的區別僅在於計數器的位數不同,方式0為13位,而方式1則為16位,由TH0作為高8位,TL0為低8位,有關控制狀態字(GATA、、TF0、TR0)和方式0相同。

    在工作方式1下,計數器的計數值範圍是:

          1—65536(2^16)

    當為定時工作方式1時,定時時間的計算公式為:

         (2^16—計數初值)╳晶振周期╳12

    或   (2^16—計數初值)╳機器周期

    其時間單位與晶振周期或機器周期相同。

    如果單片機的晶振選為6.000MHz,則最小定時時間為:

        [2^13—(2^16—1)]╳1/6╳10^-6╳12=2╳10^-6(s)=2(us)

        (2^16—0)╳1/6╳10^-6╳12=131072╳10^-6(s)=131072(us)。
  
工作方式2
    
當M1M0=10時,定時/計數器處於工作方式2.此時定時器的等效電阻如圖4所示.我們還是以定時/計數器0為例,定時/計數器1與之完全一致。 
 
MCS-51單片機定時/計數器內部結構
 
工作方式0和工作方式1的最大特點就是計數溢出后,計數器為全0,因而循環定時或循環計數應用時就存在反覆設置初值的問題,這給程序設計帶來許多不便,同時也會影響計時精度,工作方式2就針對這個問題而設置,它具有自動重裝載功能,即自動載入計數初值,所以也有的文獻稱之為自動重載入工作方式。在這種工作方式中,16位計數器分為兩部分,即以TL0為計數器,以TH0作為預置寄存器,初始化時把計數初值分別載入至TL0和TH0中,當計數溢出時,不再象方式0和方式1那樣需要「人工干預」,由軟體重新賦值,而是由預置寄存器TH以硬體方法自動給計數器TL0重新載入。

程序初始化時,給TL0和TH0同時賦以初值,當TL0計數溢出時,置位TF0的同時把預置寄存器TH0中的初值載入給TL0,TL0重新計數。如此反覆,這樣省去了程序不斷需給計數器賦值的麻煩,而且計數準確度也提高了。但這種方式也有其不利的一面,就是這樣一來的計數結構只有8位,計數值有限,最大隻能到255。所以這種工作方式很適合於那些重複計數的應用場合。例如我們可以通過這樣的計數方式產生中斷,從而產生一個固定頻率的脈衝。也可以當作串列數據通信的波特率發送器使用。

工作方式3     
當M1M0=11時,定時/計數器處於工作方式3,此時,定時/及數器的等效電路如圖3所示,仍以定時器0為例,值得注意的是,在工作方式3模式下,定時/計數器1的工作方式與之不同,下面我們分別討論。 
 
MCS-51單片機定時/計數器內部結構
 
在工作方式3模式下,定時/計數器0被拆成兩個獨立的8位計數器TL0和TH0。其中TL0既可以作計數器使用,也可以作為定時器使用,定時/計數器0的各控制位和引腳信號全歸它使用。其功能和操作與方式0或方式1完全相同。TH0就沒有那麼多「資源」可利用了,只能作為簡單的定時器使用,而且由於定時/計數器0的控制位已被TL0佔用,因此只能借用定時/計數器1的控制位TR1和TF1,也就是以計數溢出去置位TF1,TR1則負責控制TH0定時的啟動和停止。等效電路參見圖6。     由於TL0既能作定時器也能作計數器使用,而TH0隻能作定時器使用而不能作計數器使用,因此在方式3模式下,定時/計數器0可以構成二個定時器或者一個定時器和一個計數器。

如果定時/計數器0工作於工作方式3,那麼定時/計數器1的工作方式就不可避免受到一定的限制,因為自己的一些控制位已被定時/計數器借用,只能工作在方式0、方式1或方式2下,等效電路參見圖6 
 
在這種情況下,定時/計數器1通常作為串列口的波特率發生器使用,以確定串列通信的速率,因為已沒有TF1被定時/計數器0借用了,只能把計數溢出直接送給串列口。當作波特率發生器使用時,只需設置好工作方式,即可自動運行。如要停止它的工作,需送入一個把它設置為方式3的方式控制字即可,這是因為定時/計數器本身就不能工作在方式3,如硬把它設置為方式3,自然會停止工作。 

7 MCS-51單片機 -MCS-51單片機的中斷系統


對初學者來說,中斷這個概念比較抽象,其實單片機的處理系統與人的一般思維有著許多異曲同工之妙,我們舉個很貼切的比方,在日常生活和工作中有很多類似的情況。假如你正在上班,例如是編譯資料,這時侯電話鈴響了,你在書本上做個記號(以記下你現在正編譯到某某頁),然後與對方通電話,而此時恰好有客人到訪,你先停下通電話,與客人說幾句話,叫客人稍侯,然後回頭繼續通完電話,再與客人談話。談話完畢,送走客人,繼續你的資料編譯工作。

這就是日常生活和工作中的中斷現象,類似的情況還有很多,從編譯資料到接電話是第一次中斷,通電話的過程中引有客人到訪,這是第二次中斷,即在中斷的過程中又出現第二次中斷,這就是我們常說的中斷嵌套。處理完第二個中斷任務后,回頭處理第一個中斷,第一個中斷完成後,再繼續你原先的主要工作。

為什麼會出現這樣的中斷呢?道理很簡單,人非三頭六臂,人只有一個腦袋,在一種特定的時間內,可能會面對著兩、三甚至更多的任務。但一個人又不可能在同一時間去完成多樣任務,因此你只能采分析任務的輕重緩急,採用中斷的方法穿插去完成它們。那麼這種情況對於單片機中的中央處理器也是如此,單片機中CPU只有一個,但在同一時間內可能會面臨著處理很多任務的情況,如運行主程序、數據的輸入和輸出,定時/和計數時間已到要處理、可能還有一些外部的更重要的中斷請求(如超溫超壓)要先處理。此時也得象人的思維一樣停下某一樣(或幾樣)工作先去完成一些緊急任務的中斷方法。

這樣的一樣處理方法上升到計算機理論,就是一個資源面對多項任務的處理方式,由於資源有限,面對多項任務同時要處理時,就會出現資源競爭的現象。中斷技術就是為了解決資源競爭的一個可行的方法,採用中斷技術可使多項任務共享一個資源,所以有些文獻也稱中斷技術是一種資源共享技術。 
    
MCS-51的中斷結構 
 
MCS-51單片機中斷系統結構
 
計算機的中斷系統能夠加強CPU對多任務事件的處理能力。從而使它的應用範圍進一步擴大。在MCS-48結構的基礎上,MCS-51在增強了I/O的種類、功能和數量的同時,也增強了中斷能力。MCS-51提供了5個中斷源,兩個中斷優先順序控制,可實現兩個中斷服務嵌套。當CPU支持中斷屏蔽指令后,可將一部分或所有的中斷關斷,只有打開相應的中斷控制位后,方可接收相應的中斷請求。程序設置中斷的允許或屏蔽,也可設置中斷的優先順序。

中斷處理流程
CPU響應中斷請求后,就立即轉入執行中斷服務程序。不同的中斷源、不同的中斷要求可能有不同的中斷處理方法,但它們的處理流程一般都如下所述。

現場保護和現場恢復     
中斷是在執行其它任務的過程中轉去執行臨時的任務,為了在執行完中斷服務程序后,回頭執行原先的程序時,知道程序原來在何處打斷的,各有關寄存器的內容如何,就必須在轉入執行中斷服務程序前,將這些內容和狀態進行備份——即保護現場。就象文章開頭舉的例子,在看書時,電話玲響需傳去接電話時,必須在書本上做個記號,以便在接完電話后回來看書時,知道從哪些內容繼續往下看。計算機的中斷處理方法也如此,中斷開始前需將個有關寄存器的內容壓入堆棧進行保存,以便在恢復原來程序時使用。

中斷服務程序完成後,繼續執行原先的程序,就需把保存的現場內容從堆棧中彈出,恢復積存器和存儲單元的原有內容,這就是現場恢復。

如果在執行中斷服務時不是按上述方法進行現場保護和恢復現場,就會是程序運行紊亂,程序跑飛,自然使單片機不能正常工作。

中斷打開和中斷關閉     
在中斷處理進行過程中,可能又有新的中斷請求到來,這裡規定,現場保護和現場恢復的操作是不允許打擾的,否則保護和恢復的過程就可能使數據出錯,為此在進行現場保護和現場恢復的過程中,必須關閉總中斷,屏蔽其它所有的中斷,待這個操作完成後再打開總中斷,以便實現中斷嵌套。

中斷服務程序     
既然有中斷產生,就必然有其具體的需執行的任務,中斷服務程序就是執行中斷處理的具體內容,一般以子程序的形式出現,所有的中斷都要轉去執行中斷服務程序,進行中斷服務。

中斷返回     
執行完中斷服務程序后,必然要返回,中斷返回就是被程序運行從中斷服務程序轉回到原工作程序上來。在MCS-51單片機中,中斷返回是通過一條專門的指令實現的,自然這條指令是中斷服務程序的最後一條指令。

MCS-51的中斷源      
8051有5個中斷源,它們是兩個外中斷INT0(P3.2)和INT1(P3.3)、兩個片內定時/計數器溢出中斷TF0和TF1,一個是片內串列口中斷TI或RI,這幾個中斷源由TCON和SCON兩個特殊功能寄存器進行控制。

在前一節,我們已對TCON的控制位進行了說明,現在繼續對它的中斷控制有關的位進行談論。TCON寄存器的結構如下:

 表1  TCON寄存器結構 

TCON 

 D7    

 D6  

 D5 

D4   

   D3

   D2

  D1    

  D0 

 

  TF1  

 TR1

 TF0

  TR0  

 IE1

 IT1

 IE0

 IT0 

   位地址

 8FH

   8EH  

  8DH  

 8CH

   8BH  

8AH  

  89H  

   88H 


    · IE1:外部邊沿觸發中斷1請求標誌,其功能和操作類似於TF0。

    · IT1:外部中斷1類型控制位,通過軟體設置或清楚,用於控制外中斷的觸發信號類型。IT1=1,邊沿觸發。IT=0是電平觸發。

    · IE0:外部邊沿觸發中斷0請求標誌,其功能和操作類似於IE1。

    · IT0:外部中斷0類型控制位,通過軟體設置或清楚,用於控制外中斷的觸發信號類型。其功能和操作類似於IE1。

    SCON是串列口控制寄存器,位元組地址為98H,SCON的低二位是串列口的發送和接收中斷標誌,其格式如下:
 表2  SCON寄存器結構 

 SCON 

 D7

 D6

  D5

  D4  

D3   

D2   

 D1   

  D0 

 

 -

  -

 -  

 -

 -   

  -

  TI  

    RI 

   位地址

 

 

 

 

 

 

     99H  

 98H 


     · TI:MCS-51串列口的發送中斷標誌,在串列口以方式0發送時,每當發送完8位數據,由硬體置位。如果以方式1、方式2或方式3發送時,在發送停止位的開始時TI被置1,TI=1表示串列發送器正向CPU發出中斷請求,向串列口的數據緩衝器SBUF寫入一個數據后就立即啟動發送器繼續發送。但是CPU響應中斷請求后,轉向執行中斷服務程序時,並不清零TI,TI必須由用戶的中斷服務程序清「0」,即中斷服務程序必須有「CLR TI」或「ANL SCON, #0FDH」等指令來清零TI。                                       

    · RI:串列口接收中斷標誌.若串列口接收器允許接收,並以方式0工作,每當接收到8位數據時,RI被置1,若以方式1、2、3方式工作,當接收到半個停止位時,TI被置1,當串列口一方式2或3方式工作,且當SM2=1時,僅當接收到第9位數據RB8為1后,同時還要在接收到半個停止位時,RI被置1。RI為1表示串列口接收器正向CPU申請中斷。同樣RI標誌栩栩如生由用戶的軟體清「0」。 

中斷的控制

對於中斷控制,在上一節中我們已經對TCON和SCON進行了分析,其實它們兩個寄存器也是中斷的控制寄存器,負責對中斷的部分功能進行控制。我們這裡談論的是另外兩個控制寄存器IE和IP。

MCS-51的對中斷的開放和屏蔽是由中斷允許寄存器IE控制來實現的,IE的結構格式如下。

 
  表3  IE寄存器結構 

    IE  

D7   

 D6 

 D5   

D4  

D3   

 D2  

D1   

 D0 

 

 EA  

   -

   -  

 ES  

 ET1  

 EX1

  ET0

EX0 

 位地址

 AFH

 

 

  ACH

  ABH  

  AAH

 A9H   

 A8H 


                                                        
     下面我們對IE寄存器的各控制位進行介紹:
    △ EA:中斷總控制位,EA=1,CPU開放中斷。EA=0,CPU禁止所有中斷。

    △ ES: 串列口中斷控制位,ES=1允許串列口中斷,ES=0,屏蔽串列口中斷。

    △ ET1: 定時/計數器T1中斷控制位。ET1=1,允許T1中斷,ET1=0,禁止T1中斷。

    △ EX1: 外中斷1中斷控制位,EX1=1,允許外中斷1中斷,EX1=0,禁止外中斷1中斷。

    △ ET0: 定時/計數器T0中斷控制位。ET1=1,允許T0中斷,ET1=0,禁止T0中斷。

    △ EX0: 外中斷0中斷控制位,EX1=1,允許外中斷0中斷,EX1=0,禁止外中斷0中斷。

MCS-51有兩個中斷優先順序,即高優先順序和低優先順序,每個中斷源都可設置為高或低中斷優先順序。如果有一低優先順序的中斷正在執行,那麼高優先順序的中斷出現中斷請求時,CPU則會響應這個高有限級的中斷,也即高優先順序的中斷可以打斷低優先順序的中斷。而若CPU正在處理一個高優先順序的中斷,此時,就算是有低優先順序的中斷髮出中斷請求,CPU也不會理會這個中斷,而是繼續執行正在執行的中斷服務程序,一直到程序結束,執行最後一條返回指令,返回主程序然後再執行一條指令后才會響應新的中斷請求。

為了實現上述功能,MCS-51的中斷系統有兩個不可定址的優先順序狀態觸發器,一個指出CPU是否在執行高優先順序中斷服務程序,另一個指出CPU是否正在執行低優先順序的中斷服務程序,這兩個中斷觸發器的1狀態分別屏蔽所有中斷申請和同一級別的其他中斷申請,此外,MCS-51還有一個申請優先順序寄存IP,IP的格式如下,位元組地址是B8H。

 
  表4  IP中斷控制寄存器結構 

IP  

 D7

D6   

  D5  

 D4

D3    

D2   

D1   

D0 

 

  -  

  -  

   -  

 PS

 PT1

  Px1

  PT0  

 PX0 

    位地址

 

 

 

  BCH

 BBH

 BAH

  B9H  

    B8H 


                                                        △ PS:串列口中斷口優先順序控制位,PS=1,串列口中斷聲明為高優先順序中斷,PS=0,串列口定義為低優先順序中斷。

    △ PT1:定時器1優先順序控制位。PT1=1,聲明定時器1為高優先順序中斷,PT1=0定義定時器1為低優先順序中斷。

    △ PX1:外中斷1優先順序控制位。PT1=1,聲明外中斷1為高優先順序中斷,PX1=0定義外中斷1為低優先順序中斷。

    △ PT0:定時器0優先順序控制位。PT1=1,聲明定時器0為高優先順序中斷,PT1=0定義定時器0為低優先順序中斷。

    △ PX0:外中斷0優先順序控制位。PT1=1,聲明外中斷0為高優先順序中斷,PX1=0定義外中斷0為低優先順序中斷。

中斷的響應
MCS-51CPU在每一個機器周期順序檢查每一個中斷源,在機器周期的S6按優先順序處理所有被激活的中斷請求,此時,如果CPU沒有正在處理更高或相同優先順序的中斷,或者現在的機器周期不是所執行指令的最後一個機器周期,或者CPU不是正在執行RETI指令或訪問IE和IP的指令(因為按MCS-51中斷系統的特性規定,在執行完這些指令之後,還要在繼續執行一條指令,才會響應中斷),CPU在下一個機器周期響應激活了的最高級中斷請求。

中斷響應的主要內容就是由硬體自動生成一條長調用LCALL addr16指令,這裡的addr16就是程序存儲器中相應的中斷區入口地址,這些中斷源的服務程序入口地址如下:

      表5  個中斷源的服務程序入口地址 

   中斷源

 入口地址 

   外中斷0

     0003H 

   定時/計數器0

  000BH 

      外中斷1

   0013H 

 定時/計數器0

  001BH 

 串列口中斷

     0023H 

                                                                                      
生成lcall指令后,CPU緊跟著便執行之.首先將PC(程序計數器)的內容壓入堆棧保護斷點,然後把中斷入口地址賦予PC,CPU便按新的PC地址(即中斷服務程序入口地址)執行程序。

值得一提的是,各中斷區只有8個單元,一般情況下(除非中斷程序非常簡單),都不可能安裝下一個完整的中斷服務程序。因此,通常是在這些入口地址區放置一條無條件轉移指令,使程序按轉移的實際地址去執行真正的中斷服務程序。 

8 MCS-51單片機 -MCS-51的串列通信口


MCS-51單片機內部有一個全雙工的串列通信口,即串列接收和發送緩衝器(SBUF),這兩個在物理上獨立的接收發送器,既可以接收數據也可以發送數據。但接收緩衝器只能讀出不能寫入,而發送緩衝器則只能寫入不能讀出,它們的地址為99H。這個通信口既可以用於網路通信,亦可實現串列非同步通信,還可以構成同步移位寄存器使用。如果在傳行口的輸入輸出引腳上加上電平轉換器,就可方便地構成標準的RS-232介面。下面我們分別介紹。

基本概念

數據通信的傳輸方式
    
常用於數據通信的傳輸方式有單工、半雙工、全雙工和多工方式。

單工方式:數據僅按一個固定方向傳送。因而這種傳輸方式的用途有限,常用於串列口的列印數據傳輸與簡單系統間的數據採集。

半雙工方式:數據可實現雙向傳送,但不能同時進行,實際的應用採用某種協議實現收/發開關轉換。

全雙工方式:允許雙方同時進行數據雙向傳送,但一般全雙工傳輸方式的線路和設備較複雜。

多工方式:以上三種傳輸方式都是用同一線路傳輸一種頻率信號,為了充分地利用線路資源,可通過使用多路復用器或多路集線器,採用頻分、時分或碼分復用技術,即可實現在同一線路上資源共享功能,我們盛之為多工傳輸方式。

串列數據通信兩種形式
     
非同步通信
MCS-51單片機定時/計數器內部結構
     
在這種通信方式中,接收器和發送器有各自的時鐘,它們的工作是非同步的,非同步通信用一幀來表示一個字元,其內容如下:一個起始位,僅接著是若干個數據位,圖2是傳輸45H的數據格式。

同步通信
    
同步通信格式中,發送器和接收器由同一個時鐘源控制,為了克服在非同步通信中,每傳輸一幀字元都必須加上起始位和停止位,佔用了傳輸時間,在要求傳送數據量較大的場合,速度就慢得多。同步傳輸方式去掉了這些起始位和停止位,只在傳輸數據塊時先送出一個同步頭(字元)標誌即可。

同步傳輸方式比非同步傳輸方式速度快,這是它的優勢。但同步傳輸方式也有其缺點,即它必須要用一個時鐘來協調收發器的工作,所以它的設備也較複雜。  
    
串列數據通信的傳輸速率
    
串列數據傳輸速率有兩個概念,即每秒轉送的位數bps(Bit per second)和每秒符號數—波特率(Band rate),在具有數據機的通信中,波特率與調製速率有關。

MCS-51的串列口和控制寄存器
串列口控制寄存器
 
MCS-51單片機定時/計數器內部結構
 
MCS-51單片機串列口寄存器結構如圖3所示。SBUF為串列口的收發緩衝器,它是一個可定址的專用寄存器,其中包含了接收器和發送器寄存器,可以實現全雙工通信。但這兩個寄存器具有同一地址(99H)。MCS-51的串列數據傳輸很簡單,只要向發送緩衝器寫入數據即可發送數據。而從接收緩衝器讀出數據即可接收數據。

此外,從圖中可看出,接收緩衝器前還加上一級輸入移位寄存器,MCS-51這種結構目的在於接收數據時避免發生數據幀重疊現象,以免出錯,部分文獻稱這種結構為雙緩衝器結構。而發送數據時就不需要這樣設置,因為發送時,CPU是主動的,不可能出現這種現象。  
    
串列通信控制寄存器
    
在上一節我們已經分析了SCON控制寄存器,它是一個可定址的專用寄存器,用於串列數據的通信控制,單元地址是98H,其結構格式如下:

    表1  SCON寄存器結構 

  SCON     

D7   

 D6    

  D5  

D4   

   D3

  D2

D1   

   D0 

 

 SM0  

 SM1

 SM2  

  REN

   TB8

RB8   

 TI  

  RI 

   位地址

 9FH

  9EH  

  8DH

   9CH

   9BH

  9AH  

99H   

    98H 


                                 
下面我們對各控制位功能介紹如下:
    
     (1).SM0、SM1:串列口工作方式控制位。
        SM0,SM1    工作方式
            00      方式0
            01      方式1
            10      方式2
            11      方式3

    (2).SM2:多機通信控制位。

多機通信是工作於方式2和方式3,SM2位主要用於方式2和方式3。接收狀態,當串列口工作於方式2或3,以及SM2=1時,只有當接收到第9位數據(RB8)為1時,才把接收到的前8位數據送入SBUF,且置位RI發出中斷申請,否則會將接受到的數據放棄。當SM2=0時,就不管第位數據是0還是1,都難得數據送入SBUF,併發出中斷申請。
    
工作於方式0時,SM2必須為0。

    (3).REN:允許接收位。

REN用於控制數據接收的允許和禁止,REN=1時,允許接收,REN=0時,禁止接收。

    (4).TB8:發送接收數據位8。
    
在方式2和方式3中,TB8是要發送的——即第9位數據位。在多機通信中同樣亦要傳輸這一位,並且它代表傳輸的地址還是數據,TB8=0為數據,TB8=1時為地址。

    (5).RB8:接收數據位8。
    
在方式2和方式3中,RB8存放接收到的第9位數據,用以識別接收到的數據特徵。

    (6).TI:發送中斷標誌位。
    
可定址標誌位。方式0時,發送完第8位數據后,由硬體置位,其它方式下,在發送或停止位之前由硬體置位,因此,TI=1表示幀發送結束,TI可由軟體清「0」。

    (7).RI:接收中斷標誌位。
    
可定址標誌位。接收完第8位數據后,該位由硬體置位,在其他工作方式下,該位由硬體置位,RI=1表示幀接收完成。

 
電源管理寄存器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。

 中斷允許寄存器IE     
中斷允許寄存器在前一節中已闡述,這裡重述一下對串列口有影響的位ES。ES為串列中斷允許控制位,ES=1允許串列中斷,ES=0,禁止串列中斷。

       表3  IE中斷允許控制寄存器結構 

  位符號

  EA    

 -   

  -  

ES  

ET1  

 EX1  

ET0   

 EX0 

  位地址

  AFH  

    AEH  

 ADH

 ACH

   ABH

  AAH

A9H   

 A8H 


                                           

上一篇[車身配色]    下一篇 [黃金標準法則]

相關評論

同義詞:暫無同義詞