它是80C51單片機(jī)中最具有特色的部分,幾乎所有80C51系列功能的增加和擴(kuò)展都是通過(guò)增加特殊功能寄存器來(lái)達(dá)到目的的。英文縮寫為SFR,是Special Function Register(特殊功能寄存器)的縮寫。
MCS-51單片機(jī)的CPU字長(zhǎng)為8位,內(nèi)部包含運(yùn)算器、控制器和特殊功能寄存器。由于特殊功能寄存器在功能和使用方法方面與存儲(chǔ)器比較相似,因此將與存儲(chǔ)器一同講解。本小節(jié)僅介紹運(yùn)算器和控制器的基本情況。
MCS-51單片機(jī)內(nèi)部集成了微處理器、存儲(chǔ)器、輸入接口和輸出接口,其體系結(jié)構(gòu)如圖2-1所示。在MCS-51單片機(jī)中,ROM存放程序代碼,RAM存放數(shù)據(jù),因此ROM和RAM分別被稱為程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器。因?yàn)椋绦虼鎯?chǔ)器和數(shù)據(jù)存儲(chǔ)器是獨(dú)立分開(kāi)的,所以MCS-51單片機(jī)屬于哈佛體系結(jié)構(gòu)。
在微型計(jì)算機(jī)中,所有信息(如數(shù)值、符號(hào)和圖像等)均以二進(jìn)制形式存儲(chǔ)、傳輸和計(jì)算。由于二進(jìn)制數(shù)冗長(zhǎng)、不方便讀寫和辨認(rèn),因此,現(xiàn)代微型計(jì)算機(jī)也支持編程時(shí)使用書寫長(zhǎng)度更短的十六進(jìn)制數(shù)和十進(jìn)制數(shù),同時(shí)也為各種非數(shù)值信息提供了相應(yīng)的數(shù)值編碼(即用數(shù)值表示非數(shù)值信息)方法。
I2 C總線是Philips公司開(kāi)發(fā)的一種簡(jiǎn)單、雙向二線制同步串行總線。它只需要兩根線(串行時(shí)鐘線和串行數(shù)據(jù)線)即可在連接于總線上的器件之間傳送信息。這種總線的主要特性如下:
中斷系統(tǒng)是計(jì)算機(jī)的重要組成部分。實(shí)時(shí)控制、故障自動(dòng)處理、計(jì)算機(jī)與外圍設(shè)備間的數(shù)據(jù)傳送往往采用中斷系統(tǒng)。中斷系統(tǒng)的應(yīng)用大大提高了計(jì)算機(jī)效率。
Philips公司生產(chǎn)的與MCS 51單片機(jī)兼容的CMOS型單片機(jī)中,8XC552的功能最強(qiáng),最具有代表性。它除了具有8051單片機(jī)的全部功能之外,又增加了大量的硬件:高速I/O、PWM、A/D、WDT、計(jì)數(shù)器的捕獲/比較邏輯、串行總線I2CBUS等都集成在片內(nèi)。
定時(shí)器T2和連接到這個(gè)寄存器上的4個(gè)16位捕捉寄存器及1個(gè)比較器組成定時(shí)器T2與捕捉比較邏輯。當(dāng)在相應(yīng)引腳上電平發(fā)生變化時(shí),捕捉寄存器將捕捉定時(shí)器T2的內(nèi)容,比較邏輯是以固定的時(shí)間去設(shè)置、復(fù)位和觸發(fā)P4口的輸出。
Philips公司生產(chǎn)的與MCS 51單片機(jī)兼容的CMOS型單片機(jī)中,8XC552的功能最強(qiáng),最具有代表性。它除了具有8051單片機(jī)的全部功能之外,又增加了大量的硬件:高速I/O、PWM、A/D、WDT、計(jì)數(shù)器的捕獲/比較邏輯、串行總線I2CBUS等都集成在片內(nèi)。
8XC51GB有15個(gè)中斷源,對(duì)應(yīng)有15個(gè)固定的中斷矢量地址(見(jiàn)圖10.8)。其中有7個(gè)外部中斷是INT0~INT6,外部中斷引腳與端口3和端口5引腳的功能復(fù)用;有8個(gè)內(nèi)部中斷,它們分別是3個(gè)定時(shí)器中斷(定時(shí)器T0、T1、T2)、2個(gè)可編程定時(shí)計(jì)數(shù)器陣列中斷(PCA、PCA1)、1個(gè)串行口中斷、1個(gè)SEP中斷和1個(gè)A/D中斷。下面分別對(duì)各個(gè)中斷作簡(jiǎn)要介紹。
中斷服務(wù)處理子程序可簡(jiǎn)稱為中斷服務(wù)處理程序或中斷程序,用于處理單片機(jī)的中斷事件,只能被單片機(jī)硬件調(diào)用執(zhí)行,而不能通過(guò)子程序調(diào)用指令(ACALL或LCALL)調(diào)用執(zhí)行。中斷服務(wù)處理程序只能通過(guò)RETI指令返回。
當(dāng)需要清0操作的字節(jié)單元的個(gè)數(shù)增加時(shí),程序中MOV指令的個(gè)數(shù)也會(huì)隨之增加。為了降低程序中重復(fù)代碼的數(shù)量,縮短程序的長(zhǎng)度,可以采用循環(huán)程序結(jié)構(gòu)進(jìn)行程序設(shè)計(jì)。
分支結(jié)構(gòu)程序的指令執(zhí)行順序與指令在ROM中的存放順序不同,其中某些具有判斷功能的指令會(huì)根據(jù)判斷結(jié)果改變接下來(lái)的指令執(zhí)行順序,從而使程序產(chǎn)生一個(gè)或多個(gè)分支流向??捎糜诜种ЫY(jié)構(gòu)程序設(shè)計(jì)的判斷指令主要包括JZ、CJNE和JB等有條件轉(zhuǎn)移指令。根據(jù)程序分支的數(shù)量,可以將分支程序分為三類:?jiǎn)畏种?、一般多分支和散轉(zhuǎn)多分支。
目前,結(jié)構(gòu)化是程序設(shè)計(jì)的基本要求,可以使程序結(jié)構(gòu)清晰、易于讀寫且方便調(diào)試,也能夠提高程序設(shè)計(jì)的效率。在結(jié)構(gòu)化程序設(shè)計(jì)中,程序的基本結(jié)構(gòu)有三種,即順序結(jié)構(gòu)、分支結(jié)構(gòu)及循環(huán)結(jié)構(gòu)。而子程序(也被稱為函數(shù)或過(guò)程)是一種提高程序模塊化程度和重復(fù)利用率的程序設(shè)計(jì)技巧,有時(shí)也被當(dāng)作一種基本的程序結(jié)構(gòu)。
AT89C2051單片機(jī)內(nèi)部有2KB的閃速存儲(chǔ)器陣列,一片新的AT89C2051,其存儲(chǔ)陣列處于擦除狀態(tài)(FFH),此時(shí)可對(duì)其編程,存儲(chǔ)陣列一次編程1字節(jié),若編程任何非空字節(jié)時(shí),需對(duì)整個(gè)存儲(chǔ)陣列進(jìn)行片擦除。