




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第1章基礎(chǔ)知識
1.1計算機(jī)的基本認(rèn)識1.2尋址方式
1.3單片機(jī)及其發(fā)展概況1.1計算機(jī)的基本認(rèn)識為理解計算機(jī)系統(tǒng)的構(gòu)成、工作原理及過程,我們先來看用算盤計算如下代數(shù)式的過程:12×34+56÷7-8=408首先要有算盤作為計算工具,在計算機(jī)里用“運(yùn)算器”(即算術(shù)邏輯運(yùn)算單元)作為計算工具,由它承擔(dān)算術(shù)運(yùn)算和邏輯運(yùn)算。在計算機(jī)里,除了加、減、乘、除四則運(yùn)算外,還需要“與、或、非、異或”等邏輯運(yùn)算。其次需要紙和筆記錄算式、計算步驟、中間結(jié)果及最終結(jié)果。在計算機(jī)中,起到紙和筆作用的器件是寄存器和存儲器(寄存器在中央處理器內(nèi),存取速度快,但數(shù)量少,用于存放中間結(jié)果;而存儲器一般位于中央處理器外,由成千上萬個存儲單元組成,容量大,與寄存器相比,存取速度慢一些,常用于存放數(shù)據(jù)、計算步驟)。在計算上述算式時,先計算12?
?34,并把中間結(jié)果記錄下來;再計算56?
?7,并記錄中間結(jié)果;接著將上述兩步中間結(jié)果相加得到和,并記錄下來;再減去8。以上計算步驟由人腦控制,如果改用計算機(jī)進(jìn)行,可用計算機(jī)STM8匯編語言指令寫出如下的計算步驟:LDA,#12 ;將被乘數(shù)12送CPU內(nèi)寄存器ALDXL,A ;寄存器A送XL寄存器LDA,#34 ;將乘數(shù)34送CPU內(nèi)寄存器AMULX,A ;計算12?×?34,乘積的高8位存放在寄存器XH中,低8位存放在寄存器XL中LDWR02,X ;結(jié)果保存到R02字存儲單元中CLRWX ;?16位寄存器X清0LDA,#56 ;將被除數(shù)56送CPU內(nèi)寄存器ALDXL,A ;被除數(shù)轉(zhuǎn)送CPU內(nèi)寄存器XLLDA,#7 ;除數(shù)7送CPU內(nèi)寄存器ADIVX,A ;計算56?÷?7,商存放在寄存器XL中(XH肯定為0),余數(shù)存放在寄存器A中ADDWX,R02 ;求12?×?34?+?56?÷?7的運(yùn)算結(jié)果SUBWX,#8 ;再減去8LDWR02,X ;將結(jié)果保存到R02字存儲單元中;算式“12×34+56÷7-8”的結(jié)果408保存在R02字存儲單元中上述計算步驟存放在存儲器中,由計算機(jī)內(nèi)的控制器執(zhí)行,控制器在時鐘信號的控制下,從存儲器中取出指令和數(shù)據(jù),并根據(jù)指令操作碼內(nèi)容發(fā)出相應(yīng)的控制信號。此外,為向計算機(jī)輸入數(shù)據(jù)、指令,還需輸入設(shè)備,如鍵盤;為輸出處理結(jié)果或顯示機(jī)器的狀態(tài),還需輸出設(shè)備,如各類顯示器、指示燈等。因此,計算機(jī)系統(tǒng)的基本結(jié)構(gòu)大致如圖1-1所示。圖1-1計算機(jī)系統(tǒng)的基本結(jié)構(gòu)在計算機(jī)中,往往把運(yùn)算器、控制器做在同一芯片上,稱為中央處理器(CentralProcessorUnit,簡稱CPU),有時也稱為微處理器(MicroprocessorUnit,簡稱MPU)。為進(jìn)一步減小電路板的面積,提高系統(tǒng)的可靠性,降低成本,將輸入/輸出接口電路、時鐘電路以及一定容量的存儲器、運(yùn)算器、控制器等部件集成到同一芯片內(nèi),就成為單片機(jī)(也稱為微控制單元,即MicrocontrollerUnit,簡稱MCU),其含義是一個芯片就具備了一套完整計算機(jī)系統(tǒng)必需的基本部件。為了滿足不同的應(yīng)用需求,將不同功能的外圍電路,如定時器、中斷控制器、AD及DA轉(zhuǎn)換器、串行通信接口電路(如UART、SPI、I2C或CAN等),甚至LCD顯示驅(qū)動電路等集成在一個管芯內(nèi),形成系列化產(chǎn)品,就構(gòu)成了所謂“嵌入式”單片機(jī)控制器(EmbeddedMicrocontroller)。
1.總線的概念在模擬電路中,器件、部件之間的連線不多,關(guān)系也不復(fù)雜,一般按“串聯(lián)”方式連接。但在以微處理器為核心的計算機(jī)系統(tǒng)中,器件、部件均要與微處理器相連,所需連線多,如果仍采用模擬電路的串聯(lián)方式,在微處理器與各器件間單獨(dú)連線,則所需的連線數(shù)量將很多,為此在計算機(jī)電路中普遍采用總線連接方式:每一器件的數(shù)據(jù)線并接在一起,構(gòu)成數(shù)據(jù)總線;地址線并接在一起,構(gòu)成地址總線;然后與CPU的數(shù)據(jù)、地址總線相連,形成“并聯(lián)”關(guān)系。為避免混亂,任何時候最多允許一個設(shè)備與CPU通信,因此需要用控制線進(jìn)行控制和選擇,使選中芯片的片選信號(或)或輸出允許信號有效。系統(tǒng)(包括器件)中所有的控制線被稱為控制總線。
(1)地址總線(AddressBus,簡稱AB)。地址總線為單向,用于傳送地址信息,如圖1-1中運(yùn)算器與存儲器之間的地址總線,地址總線的數(shù)目決定了可以尋址的存儲單元。一根地址線有兩種狀態(tài),即可以區(qū)分兩個存儲單元;兩根地址線有四種狀態(tài),可以尋址四個存儲單元;依此類推,8位微處理器通常有16根地址線,可以尋址216(即64?K)個存儲單元。一般存儲單元的大小為一個字節(jié),因此8位微處理器的尋址范圍通常為64KB。不過由于90nm、130nm線寬工藝已非常成熟、穩(wěn)定,在同一管芯內(nèi)集成更多的存儲單元已不再困難,因此最近這幾年進(jìn)入市場的8位MCU芯片的尋址能力已突破64KB,如STM8內(nèi)核MCU系列芯片的內(nèi)部地址總線為24位,可直接尋址16MB的存儲空間。
(2)數(shù)據(jù)總線(DataBus,簡稱DB)。數(shù)據(jù)總線一般為雙向,用于CPU與存儲器、CPU與外設(shè),或外設(shè)與外設(shè)之間傳送數(shù)據(jù)(包括數(shù)據(jù)及指令碼)信息。在計算機(jī)中,為了提高數(shù)據(jù)處理的速度,總是一次處理由多位二進(jìn)制數(shù)組成的信息,即在運(yùn)算器中,數(shù)據(jù)線的數(shù)目應(yīng)與待處理的數(shù)據(jù)位數(shù)相同。因此,運(yùn)算器數(shù)據(jù)線的數(shù)目往往不止一條,一般為4條、8條、16條、32條,甚至64條。運(yùn)算器內(nèi)數(shù)據(jù)線的多少稱為微處理器的“字長”。字長是衡量微處理器運(yùn)算速度及精度的重要指標(biāo)之一,也是劃分微處理器檔次的重要依據(jù)。根據(jù)字長大小,可將微處理器分為1位機(jī)、4位機(jī)、8位機(jī)、16位機(jī)、32位機(jī)、64位機(jī)等。
1位機(jī)的運(yùn)算器只有一根數(shù)據(jù)線,每次只能處理一位二進(jìn)制數(shù),工業(yè)上常用其取代繼電器來控制線路的通和斷、設(shè)備的開和關(guān)。4位機(jī)有四根數(shù)據(jù)線,早期多見于家用電器,如電視機(jī)、空調(diào)機(jī)、洗衣機(jī)、電話機(jī)等的控制電路中。8位、16位、32位機(jī)功能強(qiáng)大,既可用于工業(yè)控制、家用電器,也可以作為通用微機(jī)系統(tǒng)的中央處理器。
(3)控制總線(ControlBus,簡稱CB)??刂瓶偩€是計算機(jī)系統(tǒng)中所有控制信號線的總稱,在控制總線中傳送的信息是控制信息。
2.時鐘周期、機(jī)器周期及指令周期
(1)時鐘周期。計算機(jī)在時鐘信號的作用下,以節(jié)拍方式工作,因此,必須有一個時鐘發(fā)生器電路。輸入微處理器的時鐘信號的周期稱為時鐘周期。
(2)機(jī)器周期。機(jī)器完成一個基本動作所需的時間稱為機(jī)器周期,一般由一個或一個以上的時鐘周期組成。例如,在標(biāo)準(zhǔn)MCS-51系列單片機(jī)中,一個機(jī)器周期由12個時鐘周期組成。隨著技術(shù)與工藝的進(jìn)步,目前許多MCU芯片的一個機(jī)器周期已縮短為一個時鐘周期。
(3)指令周期。執(zhí)行一條指令所需的時間稱為指令周期,它由一個或數(shù)個機(jī)器周期組成。在采用復(fù)雜指令系統(tǒng)的微處理器中,指令周期的長短取決于指令的類型,即指令將要進(jìn)行的操作及復(fù)雜程度:簡單指令,如INCA(累加器A內(nèi)容加1)一般只需一個機(jī)器周期,而復(fù)雜指令,如MUL(乘)、DIV(除)指令往往需要數(shù)個機(jī)器周期。1.1.1計算機(jī)系統(tǒng)的工作過程及其內(nèi)部結(jié)構(gòu)
1.CPU的內(nèi)部結(jié)構(gòu)運(yùn)算器和控制器構(gòu)成了中央處理器核心部件,8位通用微處理器內(nèi)部基本結(jié)構(gòu)可用圖1-2描述,它由算術(shù)邏輯運(yùn)算單元ALU(ArithmeticLogicUnit)、累加器A(8位)、寄存器B(8位)、程序狀態(tài)字寄存器PSW(8位)、程序計數(shù)器PC(也稱為指令指針,即IP,16位)、地址寄存器AR(16位)、數(shù)據(jù)寄存器DR(8位)、指令寄存器IR(8位)、指令譯碼器ID、控制器等部件組成。圖1-2CPU內(nèi)部結(jié)構(gòu)簡圖
(1)程序計數(shù)器PC(ProgramCounter)是CPU內(nèi)部的寄存器,用于記錄將要執(zhí)行的指令碼所在存儲單元的地址編碼。一般來說,PC的長度與CPU地址線的數(shù)目一致,例如8位微機(jī)CPU一般具有16根地址線(A15~A0),PC的長度也是16位。復(fù)位后,PC具有確定值,例如在MCS-51系列單片機(jī)中,復(fù)位后,PC?=?0000H,即復(fù)位后將從程序存儲器的0000H單元讀取第一條指令碼。由于復(fù)位后PC的值就是第一條指令碼存放的單元地址,因此在程序設(shè)計時,必須了解復(fù)位后PC的值是什么,以便確定第一條指令碼從存儲器哪一個存儲單元開始存放。PC具有自動加1功能,即從存儲器中讀出一個字節(jié)的指令碼后,PC會自動加1,并指向下一個存儲單元。
(2)地址寄存器AR(AddressRegister)用于存放將要尋址的外部存儲器單元的地址信息,指令碼所在存儲單元的地址編碼一般由程序計數(shù)器PC產(chǎn)生,而指令中操作數(shù)所在存儲單元的地址碼由指令的操作數(shù)給定。地址寄存器AR通過地址總線AB與外部存儲器相連。
(3)指令寄存器IR(InstructionRegister)用于存放取指階段讀出的指令代碼的第一字節(jié),即操作碼。存放在IR中的指令碼經(jīng)指令譯碼器ID譯碼后,輸入控制器并產(chǎn)生相應(yīng)的控制信號,使CPU完成指令規(guī)定的動作。
(4)數(shù)據(jù)寄存器DR(DataRegister)用于存放寫入外部存儲器或I/O端口的數(shù)據(jù)信息。數(shù)據(jù)寄存器DR對輸出數(shù)據(jù)具有鎖存功能,數(shù)據(jù)寄存器與外部數(shù)據(jù)總線DB直接相連。
(5)算術(shù)邏輯運(yùn)算單元ALU主要用于算術(shù)(加、減、乘、除)、邏輯(與、或、非以及異或)運(yùn)算。由于ALU內(nèi)部沒有寄存器,因此參加運(yùn)算的操作數(shù)必須放在累加器A中(運(yùn)算結(jié)果也存放在累加器A中)。例如執(zhí)行
ADDA,B ;?A←A?+?B指令時,累加器A的內(nèi)容通過輸入口In_1輸入ALU,寄存器B的內(nèi)容通過內(nèi)部數(shù)據(jù)總線經(jīng)輸入口In_2輸入ALU,A?+?B的結(jié)果通過ALU的輸出口Out經(jīng)內(nèi)部數(shù)據(jù)總線送回累加器A。
(6)程序狀態(tài)字寄存器PSW用于記錄運(yùn)算過程中的狀態(tài),如是否溢出、進(jìn)位等。假設(shè)累加器A的內(nèi)容為83H,執(zhí)行指令
ADDA,#8AH ;累加器A與立即數(shù)8AH相加,并把結(jié)果存在A中將產(chǎn)生進(jìn)位,因?yàn)?3H+8AH的結(jié)果為10DH,而累加器A長度只有8位,只能存放低8位,即0DH,無法存放結(jié)果中的最高位。因此,在CPU內(nèi)設(shè)置一個進(jìn)位標(biāo)志C,當(dāng)執(zhí)行加法運(yùn)算出現(xiàn)進(jìn)位時,進(jìn)位標(biāo)志C為1。程序狀態(tài)字寄存器中各標(biāo)志位的含義與CPU的類型有關(guān),在2.2.1節(jié)中將詳細(xì)介紹STM8內(nèi)核CPU內(nèi)各標(biāo)志位的含義。
2.存儲器存儲器是計算機(jī)系統(tǒng)中必不可少的存儲設(shè)備,主要用于存放程序(指令)和數(shù)據(jù)。盡管寄存器和存儲器均用于存儲信息,但CPU內(nèi)的寄存器數(shù)量少,存取速度快,主要用于臨時存放參加運(yùn)算的操作數(shù)和中間結(jié)果;而存儲器一般在CPU外(單片機(jī)CPU例外,其內(nèi)部一般均含有一定容量的存儲器),單獨(dú)封裝。在存儲器芯片內(nèi),存儲單元數(shù)目多,從幾千字節(jié)到數(shù)千兆字節(jié),能存放大量信息,但存取速度比CPU內(nèi)部的寄存器要慢得多。目前,存儲器的存取速度已成為制約計算機(jī)運(yùn)行速度的關(guān)鍵因素之一。存儲器的種類很多,根據(jù)存儲器能否隨機(jī)讀寫,可將存儲器分為兩大類:只讀存儲器(ReadOnlyMemory,簡稱ROM)和隨機(jī)讀寫存儲器(RandomAccessMemory,簡稱RAM)。根據(jù)存儲器存儲單元結(jié)構(gòu)和信息保存方式的不同,又可將隨機(jī)讀寫存儲器分為靜態(tài)RAM(由多個雙極型晶體管或MOS管構(gòu)成,存取速度快,無需刷新,但組成一個存儲單元所需的晶體管數(shù)目較多,集成度低,價格略高)和動態(tài)RAM(依靠MOS管柵極與襯底之間的寄生電容保存信息,多為單管結(jié)構(gòu),集成度高,但寄生電容容量小,漏電大,信息保存時間短,僅為毫秒級,需要刷新電路,致使動態(tài)RAM存儲器系統(tǒng)電路復(fù)雜化,不適合用于僅需少量存儲容量的單片機(jī)系統(tǒng))。只讀存儲器中“只讀”的含義是信息寫入后,只能讀出,不能隨機(jī)修改,適合存放系統(tǒng)監(jiān)控程序。在單片機(jī)應(yīng)用系統(tǒng)中,所需的存儲器容量不大,外圍電路應(yīng)盡可能簡單,因此幾乎不使用動態(tài)RAM,常使用PROM(可編程只讀存儲器)、EPROM(紫外光可擦寫只讀存儲器,目前已被OTPROM、FlashROM取代)、OTPROM(一次性編程只讀存儲器,內(nèi)部結(jié)構(gòu)、工作原理與EPROM相似,是一種沒有擦除窗口的EPROM)、EEPROM(也稱為E2PROM,是一種電可擦寫的只讀存儲器,結(jié)構(gòu)與EPROM類似,但絕緣柵很薄,高速電子可穿越絕緣層而中和浮柵上的正電荷,起到擦除目的,也就是說可通過高電壓擦除)、FlashROM(電可擦寫只讀存儲器,寫入速度比EEPROM快,也稱為閃爍存儲器)等只讀存儲器作為程序存儲器,使用SRAM(靜態(tài)存儲器)作隨機(jī)讀寫RAM,使用E2PROM或FRAM(鐵電存儲器,讀寫速度快,操作方式與SRAM相似)作非易失的數(shù)據(jù)存儲器。盡管這些存儲器的工作原理不同,但內(nèi)部結(jié)構(gòu)基本相同。
E2PROM與FlashROM的區(qū)別在于:E2PROM可重復(fù)擦寫30萬次以上,遠(yuǎn)大于FlsahROM(一般為1萬次);E2PROM可單字節(jié)擦除、寫入,而FlsahROM只能按塊方式擦除、寫入。因此,在MCU系統(tǒng)中,F(xiàn)lsahROM常用于存放系統(tǒng)控制程序代碼,而將E2PROM作為非易性數(shù)據(jù)存儲器使用。
1)內(nèi)部結(jié)構(gòu)
EPROM、EEPROM、FlashROM、SRAM、FRAM等存儲器內(nèi)部結(jié)構(gòu)可以用圖1-3描述,由地址譯碼器、存儲單元、讀寫控制電路等部分組成。圖1-3存儲器芯片及內(nèi)部結(jié)構(gòu)寄存器或存儲器中的一個存儲單元等效于一組觸發(fā)器,每個觸發(fā)器有兩個穩(wěn)定狀態(tài),可以記錄一位二進(jìn)制數(shù)。每一存儲單元包含的觸發(fā)器的個數(shù)稱為存儲單元的字長。對于并行存取的存儲器芯片,存儲單元內(nèi)包含的觸發(fā)器的個數(shù)與存儲器芯片的數(shù)據(jù)線條數(shù)相同。存儲器芯片內(nèi)的存儲單元數(shù)目與存儲器芯片的地址線條數(shù)有關(guān)。例如,圖1-3中的62256隨機(jī)讀寫靜態(tài)存儲器芯片含有15根地址線(A14~A0),可以尋址215共32K個存儲單元。為了便于存取,給每個存儲單元編號(通常用存儲器地址線的狀態(tài)編碼作為存儲單元的編號),圖1-3中的32K個存儲單元的地址編碼為0000H~7FFFH。該芯片的每個存儲單元可以容納一個8位二進(jìn)制數(shù),即該芯片的存儲容量為32KB。存儲單元的長度可以大于或小于8位,例如PIC16C56單片機(jī)內(nèi)的程序存儲器容量為1?K?×?12位,即共有1024個存儲單元,每個存儲單元可以存放12位二進(jìn)制數(shù),即存儲單元的字長為12位。存儲單元地址編碼與存儲單元中的內(nèi)容是兩個不同的概念,存儲單元地址編碼的長度由存儲器芯片所包含的存儲單元的個數(shù)決定。例如,6264存儲器芯片含有8K個(13根地址線)存儲單元,地址編碼為0000000000000B~1111111111111B(用十六進(jìn)制表示時,地址編碼為0000H~1FFFH),每個存儲單元的長度為8位。因此,每個存儲單元的內(nèi)容可以是00H~FFH之間的二進(jìn)制數(shù)。又例如,圖1-3中的62256存儲器含有32K個(15根地址線)存儲單元,地址編碼為000000000000000B~111111111111111B(用十六進(jìn)制表示時,地址編碼為0000H~7FFFH),每個存儲單元的長度也是為8位,圖中0000H單元的內(nèi)容為12H,0001H單元的內(nèi)容為23H,而0002H單元的內(nèi)容為0A5H。
PIC16C56單片機(jī)程序存儲器容量為1K?×?12位,存儲單元地址編碼為0000000000B~1111111111B(用十六進(jìn)制表示時,地址編碼為000H~3FFH),每個存儲單元的長度為12位。因此,每個存儲單元的內(nèi)容可以是000H~FFFH之間的二進(jìn)制數(shù)。在內(nèi)置128字節(jié)RAM的MCS-51單片機(jī)芯片中,內(nèi)部RAM存儲單元的地址編碼為00H~7FH,每個單元的內(nèi)容可以是00H~FFH之間的二進(jìn)制數(shù)。
2)存儲器工作狀態(tài)存儲器芯片的工作狀態(tài)由存儲器控制信號的電平狀態(tài)決定,如表1-1所示。表1-1存儲器工作狀態(tài)
3)存儲器讀操作下面以CPU讀取存儲器中地址編號為0000H的存儲單元的內(nèi)容為例,說明CPU讀存儲器中某一個存儲單元信息的操作過程,如圖1-4所示,具體步驟如下:①?CPU地址寄存器AR給出將要讀取的存儲單元地址信息,即0000H;圖1-4CPU讀取存儲器操作過程示意圖②存儲單元地址信息通過地址總線A15~A0輸入到存儲器芯片的地址線上(CPU地址總線與存儲器地址總線相連);③存儲器芯片內(nèi)的地址譯碼器對存儲器地址信號A14~A0進(jìn)行譯碼,并選中0000H單元;④?CPU給出讀控制信號(接存儲器的端),將選中的0000H存儲單元內(nèi)容輸出到數(shù)據(jù)總線D7~D0(存儲器數(shù)據(jù)總線與CPU數(shù)據(jù)總線相連),因此0000H單元的內(nèi)容12H就通過存儲器數(shù)據(jù)總線輸入到CPU內(nèi)部的數(shù)據(jù)寄存器DR中,然后送到CPU內(nèi)部某一個特定寄存器或暫存器內(nèi),這樣便完成了存儲器的讀操作過程。對于存儲器來說,執(zhí)行讀操作后,被讀出的存儲單元信息將保持不變。
4)存儲器寫操作在圖1-4中,把某一個數(shù)據(jù),如55H寫入存儲器內(nèi)某一個存儲單元,假設(shè)為0003H單元,操作過程如下:①?CPU地址寄存器AR給出待寫入的存儲單元的地址編碼,如0003H,通過地址總線A15~A0輸入到存儲器芯片的地址線A14~A0上;②存儲器芯片內(nèi)的地址譯碼器對存儲器地址信號A14~A0進(jìn)行譯碼,并選中0003H單元;③在寫操作過程中,寫入的數(shù)據(jù)55H存放在CPU內(nèi)的數(shù)據(jù)寄存器DR中,當(dāng)CPU寫控制信號有效時(與存儲器寫允許信號相連),DR寄存器中的內(nèi)容55H就通過數(shù)據(jù)總線D7~D0傳輸?shù)酱鎯ζ髦斜贿x中的0003H存儲單元,因此0003H單元的內(nèi)容即刻變?yōu)?5H,完成了存儲器的寫操作過程。可見,執(zhí)行寫操作后,被寫入的存儲單元原有信息將不復(fù)存在。1.1.2指令、指令系統(tǒng)及程序計算機(jī)通過執(zhí)行一系列的指令來完成復(fù)雜的計算、判斷、控制等操作過程。從CPU內(nèi)部結(jié)構(gòu)看,CPU的所有工作均可歸納為:從存儲器中取出指令碼和數(shù)據(jù),經(jīng)過算術(shù)或邏輯運(yùn)算后,輸出相應(yīng)的結(jié)果。
1.指令及指令系統(tǒng)將CPU所能執(zhí)行的各種操作,如從指定的存儲單元中取數(shù)據(jù)、將CPU內(nèi)特定寄存器的內(nèi)容寫入存儲器某一指定的存儲單元中以及算術(shù)或邏輯運(yùn)算等操作,用命令形式記錄下來,就稱為指令(Instruction)。一條指令與計算機(jī)的一種基本操作相對應(yīng)。當(dāng)然,指令只能用二進(jìn)制代碼表示,例如,在MCS-51系列單片機(jī)中,累加器A中的內(nèi)容除以寄存器B中的內(nèi)容(即A?÷?B)的操作用84H作為指令的代碼。為使計算機(jī)能夠準(zhǔn)確地理解和執(zhí)行指令所規(guī)定的動作,不同操作對應(yīng)的指令要用不同的指令代碼表示,或者說,不同的指令代碼表示不同的操作。例如,在MCS-51系列單片機(jī)中,“E4H”表示將累加器Acc清0;“F4H”表示將累加器Acc內(nèi)容按位取反;“74HxxH”表示將立即數(shù)“xxH”傳送到累加器Acc中(這條指令碼長度為兩個字節(jié),其中,“74H”表示將立即數(shù)傳送到累加器Acc中,是操作碼;而xxH就是要傳送的立即數(shù))。在計算機(jī)中,所有指令的集合稱為指令系統(tǒng)。一條指令通常由操作碼和操作數(shù)兩部分組成:操作碼(Operationcode)決定了指令要執(zhí)行的動作,一般用一個字節(jié)表示,除非指令數(shù)目很多,才需要用兩個字節(jié)表示(用一個字節(jié)表示指令操作碼時,最多可以表示256種操作,即256條指令;操作數(shù)(Operand)指定了參加操作的數(shù)據(jù)或數(shù)據(jù)所在的存儲單元的地址。不同的計算機(jī)指令系統(tǒng)所包含的指令種類、數(shù)目、指令代碼對應(yīng)的操作等由CPU設(shè)計人員指定,因此,不同種類的CPU具有不同的指令系統(tǒng)。一般來說,不同系列CPU的指令系統(tǒng)不一定相同,除非它們彼此兼容。根據(jù)計算機(jī)指令系統(tǒng)的特征,可將計算機(jī)指令系統(tǒng)分為兩大類,即復(fù)雜指令系統(tǒng)(ComplexInstructionSetComputer,CISC)和精簡指令系統(tǒng)(ReducedInstructionSetComputer,RISC)。采用復(fù)雜指令結(jié)構(gòu)的計算機(jī)系統(tǒng),如MCS-51、STM8系列單片機(jī)具有如下特點(diǎn):
(1)指令機(jī)器碼長短不一。簡單指令碼只有一個字節(jié),而復(fù)雜指令可能需要兩個或兩個以上的字節(jié)描述。如空操作指令,僅有操作碼(如00H),沒有操作數(shù),指令碼僅為一個字節(jié)。此外某些指令使用了約定的操作數(shù),例如,在MCS-51系列單片機(jī)中,操作碼E4H規(guī)定的動作是將累加器Acc清0,操作對象明確,無須再指定,這類指令碼也只用一個字節(jié)表示,或者說,這類指令的操作數(shù)隱含在操作碼字節(jié)中。而有些指令,如將立即數(shù)送累加器Acc,就必須給出操作數(shù),這樣的指令需要用兩個字節(jié)表示,第一字節(jié)表示指令的操作碼,第二字節(jié)表示操作數(shù),該指令表示為74H(操作碼)、xxH(操作數(shù))。還有些指令含有兩個操作數(shù),如在MCS-51系列單片機(jī)中,CPU內(nèi)不同存儲單元之間的數(shù)據(jù)傳送指令碼為85H(操作碼)、xxH(存儲單元地址)、yyH(另一個存儲單元地址),可見,這樣的指令需要用三個字節(jié)表示。在上面列舉的指令中,指令的操作碼和操作數(shù)均用二進(jìn)制代碼表示,且指令格式約定為:操作碼(第一字節(jié))?+?操作數(shù)(第二、三字節(jié)表示操作數(shù)或操作數(shù)所在存儲單元的地址)由于指令的操作碼和操作數(shù)均存放在存儲器中,而每條指令占用的字節(jié)數(shù)(長短)不同,因此,指令中的操作碼不僅指明了該指令所要執(zhí)行的操作,而且隱含了指令占用的字節(jié)數(shù)。根據(jù)指令代碼的長短,可將指令分為單字節(jié)指令:這類指令僅有操作碼,沒有操作數(shù),或者操作數(shù)隱含在操作碼字節(jié)中。雙字節(jié)指令:這類指令第一字節(jié)為操作碼,第二個字節(jié)為操作數(shù)。多字節(jié)指令:這類指令第一字節(jié)為操作碼,第二、三字節(jié)為操作數(shù)或操作數(shù)所在的存儲單元地址。
(2)可選擇兩條或兩條以上指令完成同一操作,程序設(shè)計靈活性大,但缺點(diǎn)是指令數(shù)目較多(這類CPU一般具有數(shù)十條~百余條指令)。例如,在MCS-51系列單片機(jī)中,將累加器Acc內(nèi)容清0,可以選擇下列指令之一實(shí)現(xiàn):
CLRA
;直接將累加器A清0
MOVA,#00H
;將立即數(shù)00H寫入累加器A中
ANLA,#00H
;用立即數(shù)00H與累加器A內(nèi)容相與,使累加器A內(nèi)容變?yōu)?
(3)?CISC指令內(nèi)核結(jié)構(gòu)復(fù)雜,元件數(shù)目較多,功耗較大。采用精簡指令技術(shù)的計算機(jī)指令系統(tǒng)情況剛好相反:完成同一種操作,一般只有一條指令可供選擇,指令數(shù)目相對較少,尤其是采用了精簡指令的單片機(jī)CPU,如PIC系列、Atmel的AVR系列單片機(jī),指令數(shù)目僅為數(shù)十條,但程序設(shè)計的靈活性相對較差。另外,在采用精簡指令技術(shù)的計算機(jī)系統(tǒng)中,指令機(jī)器碼長度相同,例如PIC16C54單片機(jī)任意一條指令的機(jī)器碼長度均為12位(1.5字節(jié))。由于所有指令碼長度相同,取指、譯碼過程中不必做更多的判斷,因而指令執(zhí)行速度較快。無論采用何種類型的指令系統(tǒng),任何CPU的指令系統(tǒng)都包含:數(shù)據(jù)傳送指令、算術(shù)及邏輯運(yùn)算指令、控制轉(zhuǎn)移指令等基本類型。此外,在單片機(jī)系統(tǒng)中,可能還具有位操作指令,以簡化控制系統(tǒng)的程序設(shè)計。用二進(jìn)制代碼表示的指令稱為機(jī)器語言指令,其中的二進(jìn)制代碼稱為指令的機(jī)器碼。機(jī)器語言指令是計算機(jī)系統(tǒng)唯一能夠理解和執(zhí)行的指令。正因如此,才形象地將二進(jìn)制代碼形式的指令稱為機(jī)器語言指令。
2.程序程序(Program)就是指令的有機(jī)組合,是完成特定工作所用到的指令(這些指令當(dāng)然是某個特定計算機(jī)系統(tǒng)的指令)的總稱。一段程序通常由多條指令組成,程序中所包含的指令數(shù)目及種類由程序的功能決定,短則數(shù)十行、數(shù)百行,長則可達(dá)數(shù)萬行以上。用機(jī)器語言指令碼編寫的程序就稱為機(jī)器語言程序。例如:機(jī)器語言指令 含義(即對應(yīng)匯編語言指令)
74AA ;
MOVA,#0AAH
E4 ;
CLEA
854030 ;
MOV30H,40H
3.匯編語言及匯編語言程序機(jī)器語言指令中的操作碼和操作數(shù)均用二進(jìn)制數(shù)表示、書寫,沒有明顯的特征,一般人很難理解和記憶,使程序編寫工作成了一件非常困難和乏味的事。為此,人們想出了一個辦法:將每條指令操作碼所要完成的動作用特定符號表示,即用指令功能的英文縮寫替代指令操作碼,形成了指令操作碼的助記符;并將機(jī)器語言指令中的操作數(shù)也用CPU內(nèi)的寄存器名、存儲單元地址或I/O端口號代替,形成了操作數(shù)助記符——這樣就獲得了匯編語言指令??梢?,匯編語言指令比機(jī)器語言指令更容易理解和記憶。用指令助記符(由操作碼助記符和操作數(shù)助記符組成)表示的指令稱為匯編語言指令。由匯編語言指令構(gòu)成的程序稱為匯編語言程序(也稱為匯編語言源程序)。可見,匯編語言程序容易理解、可讀性強(qiáng),方便了程序的編寫和維護(hù)。由于匯編語言指令與機(jī)器語言指令一一對應(yīng),而機(jī)器語言指令中每一指令碼的含義由CPU決定,因此不同計算機(jī)系統(tǒng)匯編語言指令的格式、助記符等不一定相同。例如,在STM8內(nèi)核CPU中,將立即數(shù)55H送累加器A的匯編語言指令記作:
LDA,#$55 其中,#表示立即數(shù);$表示隨后的55為十六進(jìn)制數(shù)(采用Motorola匯編語言格式)。在IntelMCS-51系列單片機(jī)芯片中,將立即數(shù)55H送累加器A的操作表示為
MOVA,#55H在MotorolaM6805系列單片機(jī)中,表示為
LDAA$55在PIC系列單片機(jī)中,表示為
MOVLW0x55其中,MOVLW是“MOVLiteraltoW”的縮寫,含義是操作數(shù)傳送到工作寄存器W中(在PIC系列單片機(jī)CPU內(nèi),工作寄存器W與STM8以及MCS-51CPU內(nèi)累加器A的地位、作用相同);0x表示隨后的數(shù)是十六進(jìn)制數(shù)。當(dāng)然,計算機(jī)只能理解和執(zhí)行二進(jìn)制代碼形式的機(jī)器語言指令,不能理解和執(zhí)行匯編語言指令。但是,可以通過專門軟件或手工查表方式,將匯編語言源程序中的匯編語言指令逐條翻譯成對應(yīng)的機(jī)器語言指令。將匯編語言程序轉(zhuǎn)換為機(jī)器語言程序的過程稱為匯編(或編譯)過程;將匯編語言指令轉(zhuǎn)換為機(jī)器語言指令的程序稱為匯編程序。可見,匯編程序的功能就是逐一讀出匯編語言源程序中的匯編語言指令,再通過查表、比較方式,將其中的匯編語言指令逐一轉(zhuǎn)換成相應(yīng)的機(jī)器語言指令。當(dāng)然這個過程也可以由人工查表完成,即所謂的人工匯編。
4.偽指令(Pseudoinstruction)在匯編語言源程序中,除了包含可以轉(zhuǎn)化為特定計算機(jī)系統(tǒng)的機(jī)器語言指令所對應(yīng)的匯編語言指令外,還可能包含一些偽指令,如“EQU”、“END”等。“偽”者,假也,盡管不是計算機(jī)系統(tǒng)對應(yīng)的指令,匯編時也不產(chǎn)生機(jī)器碼,但匯編語言程序中的偽指令并非可有可無。偽指令的作用是:指導(dǎo)匯編程序?qū)υ闯绦蜻M(jìn)行匯編。偽指令不是CPU指令,匯編時不產(chǎn)生機(jī)器碼。顯然,偽指令與CPU類型無關(guān),僅與匯編程序(也稱為匯編器)版本有關(guān),因此,程序中引用某一偽指令時,只需考慮用于將“匯編語言源程序”轉(zhuǎn)化為對應(yīng)CPU機(jī)器語言指令的“匯編程序”是否支持所用的偽指令。
STM8內(nèi)核CPU支持的匯編語言偽指令,可參閱第4章有關(guān)內(nèi)容。
5.匯編語言指令的一般格式
Intel系列CPU、STM8內(nèi)核CPU的匯編語言指令格式為[標(biāo)號:]指令操作碼助記符[第一操作數(shù)][,第二操作數(shù)][,第三操作數(shù)][;注釋]指令操作碼助記符是指令功能的英文縮寫,必不可少。例如,用“MOV”作為數(shù)據(jù)傳送指令的操作碼助記符。指令操作碼助記符之后是操作數(shù),不同指令所包含的操作數(shù)的個數(shù)不同。有些指令,如空操作指令“NOP”就沒有操作數(shù)。有些指令僅含有一個操作數(shù),操作數(shù)與操作碼之間用“空格”隔開,如累加器A內(nèi)容加1指令,表示為“INCA”,其中INC為指令的助記符,是英文“Increase”的縮寫;A是操作數(shù),即累加器Acc的簡稱。有些指令含有兩個操作數(shù),例如,將立即數(shù)55H傳送到累加器A中的指令表示為“MOVA,#55H”,其中MOV是指令操作碼助記符;第一操作數(shù)為累加器A;第二操作數(shù)為55H,#表示立即數(shù)。有些指令含有三個操作數(shù),如“當(dāng)累加器A不等于某一個數(shù)時,轉(zhuǎn)移”指令,用“CJNEA,#55H,LOOP”,其中CJNE是指令操作碼助記符;LOOP是標(biāo)號,即相對地址。在多操作數(shù)指令中,各操作數(shù)之間用“,”(逗號)隔開?!?;”(分號)后的內(nèi)容是注釋信息。在指令后加注釋信息是為了提高指令或程序的可讀性,以方便閱讀、理解該指令或其以下程序段的功能。匯編時,匯編程序不處理分號后的注釋內(nèi)容,換句話說,加注釋信息不影響程序的匯編和執(zhí)行,因此,注釋信息可以加在指令后,也可以單獨(dú)占據(jù)一行。盡管注釋內(nèi)容可有可無,但為了提高程序的可讀性,方便程序的維護(hù),在指令后加適當(dāng)?shù)淖⑨屝畔⑹潜匾?。?biāo)號是符號化的地址碼,在分支程序中經(jīng)常用到。
6.指令的執(zhí)行過程程序中的指令機(jī)器碼順序存放在存儲器中。例如,將存儲器0020H單元與0021H單元中的內(nèi)容相加,結(jié)果存放在002FH單元中,可以用如下指令實(shí)現(xiàn):
MOVA,0020H ;將存儲器0020H單元中的內(nèi)容傳送到累加器A中
;該指令對應(yīng)的機(jī)器碼為E52000
ADDA,0021H ;將存儲器0021H單元中的內(nèi)容與累加器A的內(nèi)容相加,和存放在
;累加器A中該指令對應(yīng)的機(jī)器碼為252100
MOV002FH,A ;將結(jié)果傳送到存儲器002FH單元中。該指令對應(yīng)的機(jī)器碼為F52F00假設(shè)這些指令的機(jī)器碼從存儲器0000H單元開始存放,如圖1-5所示。對于特定的CPU來說,復(fù)位后,程序計數(shù)器PC的值是固定的。為方便起見,假設(shè)復(fù)位后,PC的值正是這個小程序第一條指令所在的存儲單元地址,即0000H。圖1-5指令執(zhí)行過程示意圖下面是計算機(jī)執(zhí)行存儲單元中指令代碼的操作過程:①將程序計數(shù)器PC中的內(nèi)容,即第一條指令所在的存儲單元地址0000H,通過內(nèi)部地址總線送地址寄存器AR中。②當(dāng)PC中的內(nèi)容可靠地傳送到AR后,PC內(nèi)容自動加1,指向下一個存儲單元。③地址寄存器AR中的內(nèi)容,通過外部地址總線AB將0000H單元地址信息送到存儲器地址總線上。④存儲器芯片內(nèi)的地址譯碼器對地址信號進(jìn)行譯碼,并選中存儲器芯片內(nèi)的0000H單元。⑤?CPU給出存儲器讀控制信號,0000H單元中的內(nèi)容“E5”經(jīng)存儲器和CPU之間的數(shù)據(jù)總線DB送到CPU內(nèi)部的數(shù)據(jù)寄存器DR中。⑥由于指令第一字節(jié)是操作碼,不是操作數(shù)(CPU設(shè)計時約定),因此進(jìn)入數(shù)據(jù)寄存器DR中的E5H,即指令的第一字節(jié)將送入指令寄存器IR中保存,這樣就完成了第一條指令操作碼的取出過程。⑦指令譯碼器ID對指令寄存器IR中的內(nèi)容(即操作碼)進(jìn)行譯碼,以確定指令所要執(zhí)行的操作,指示CPU內(nèi)的控制器給出相應(yīng)的控制信號,這樣就完成了指令的譯碼過程。譯碼后,就知道了該指令有無操作數(shù)以及存放位置,同時也就知道了指令的字節(jié)數(shù)。譯碼后,得知操作碼為E5的指令是三字節(jié)指令,操作碼E5之后的兩個字節(jié)是操作數(shù)所在的存儲單元地址(假設(shè)低8位地址在前,因此0020H單元地址編碼在存儲器中的存放順序是2000),需要取出隨后的兩個字節(jié)。⑧將程序計數(shù)器PC內(nèi)容(當(dāng)前為0001H)傳送到地址寄存器AR中,同時程序計數(shù)器PC自動加1,指向下一存儲單元,即0002H單元。⑨地址寄存器AR內(nèi)容(目前為0001H)通過外部地址總線AB輸出到存儲器地址總線上。存儲器芯片內(nèi)的地址譯碼器對地址信號進(jìn)行譯碼,并選中存儲器芯片內(nèi)的0001H單元。⑩?CPU給出存儲器讀控制信號,結(jié)果0001H單元中的內(nèi)容“20”經(jīng)存儲器和CPU之間的數(shù)據(jù)總線DB送到CPU內(nèi)部的數(shù)據(jù)寄存器DR中。由于第二字節(jié)是指令操作數(shù)所在存儲單元地址的低8位,因此數(shù)據(jù)寄存器DR中的內(nèi)容通過內(nèi)部數(shù)據(jù)總線送入暫存器中。重復(fù)⑧~⑩的操作過程,取出指令第三字節(jié),即操作數(shù)所存在存儲單元地址的高8位,并存放在數(shù)據(jù)寄存器DR中。進(jìn)入指令執(zhí)行階段。由于這條指令第二、三字節(jié)是操作數(shù)所在存儲單元地址,因此,在執(zhí)行階段將存放在DR中的高8位內(nèi)容送地址寄存器AR的高8位,將存放在暫存器中的低8位送AR的低8位,形成操作數(shù)的16位地址碼,經(jīng)AR輸出。AR輸出的地址信號經(jīng)存儲器芯片內(nèi)的地址譯碼器譯碼后,在存儲器讀信號的控制下,將0020H單元中的內(nèi)容2FH經(jīng)存儲器數(shù)據(jù)總線DB輸入CPU內(nèi)部數(shù)據(jù)寄存器DR,然后傳送到累加器A中,這樣就完成了指令的執(zhí)行過程??梢?,一條指令的執(zhí)行過程包括了:取操作碼(取指令第一字節(jié))→譯碼(對指令操作碼進(jìn)行翻譯,指示控制器給出相應(yīng)的控制信號)→取操作數(shù)(取出指令第二、三字節(jié),指令第一字節(jié),即操作碼字節(jié)將告訴CPU該指令的長短)→執(zhí)行指令規(guī)定的操作。然后,不斷重復(fù)“取操作碼→譯碼→取操作數(shù)→執(zhí)行”的過程,執(zhí)行隨后的指令,直到程序結(jié)束為止。在指令取出的過程中,程序計數(shù)器PC每輸出一個地址編碼到地址寄存器AR后,PC的內(nèi)容自動加1,指向下一個存儲單元。1.2尋址方式指令由操作碼和操作數(shù)組成,確定指令中操作數(shù)所在存儲單元地址的方式,就稱為尋址方式。只有操作碼的指令,不存在尋址方式問題。對于雙操作數(shù)指令來說,每一個操作數(shù)都有自己的尋址方式。例如,在含有兩個操作數(shù)的指令中,第一操作數(shù)(也稱為目的操作數(shù))有自己的尋址方式,第二操作數(shù)(稱為源操作數(shù))也有自己的尋址方式。在現(xiàn)代計算機(jī)系統(tǒng)中,為減少指令碼的長度,對于算術(shù)、邏輯運(yùn)算指令,一般將第一操作數(shù)和第二操作數(shù)的運(yùn)算結(jié)果經(jīng)ALU數(shù)據(jù)輸出口回送CPU內(nèi)部數(shù)據(jù)總線,再存放到第一操作數(shù)所在的存儲單元(或CPU內(nèi)某一寄存器)中。例如,累加器A內(nèi)容(目的操作數(shù))加寄存器B(源操作數(shù))內(nèi)容,所得的“和”將存放到累加器A中,這樣就不必為運(yùn)算結(jié)果指定另一個存儲單元地址,縮短了指令碼的長度。當(dāng)然,運(yùn)算后,累加器A中的原有信息(即被加數(shù))將不復(fù)存在。如果在其后的指令中還需要用到指令執(zhí)行前目的操作數(shù)中的信息,可先將目的操作數(shù)保存到CPU內(nèi)另一寄存器或存儲器的某一存儲單元中。指令中的操作數(shù)只能是下列內(nèi)容之一:
(1)?CPU內(nèi)某個寄存器名,如累加器A、通用寄存器B、堆棧指針SP等。CPU內(nèi)含有什么寄存器由CPU的類型決定。例如,在MCS-51系列單片機(jī)CPU內(nèi),就含有累加器A、通用寄存器B、堆棧指針SP、程序狀態(tài)字寄存器PSW以及工作寄存器組R7~R0。而在PIC16C5X系列CPU內(nèi),含有工作寄存器W(類似于其他CPU的累加器A)、狀態(tài)寄存器STATUS(類似于其他CPU的程序狀態(tài)字寄存器PSW)、特殊功能寄存器SFR、端口控制寄存器TRISA、TRISB、TRISC等。
(2)存儲單元。存儲單元地址的范圍由CPU尋址能力及實(shí)際安裝的存儲器容量、連接方式?jīng)Q定。
(3)?I/O端口號。在通用微機(jī)系統(tǒng)中,I/O地址空間與存儲器地址空間相互獨(dú)立。在單片機(jī)系統(tǒng)中,I/O端口地址空間往往與外存儲器地址空間連在一起,不再區(qū)分。
(4)常數(shù)。常數(shù)的類型及范圍也與CPU的類型有關(guān)。STM8內(nèi)核CPU支持的尋址方式,可參閱第4章的有關(guān)內(nèi)容。1.3單片機(jī)及其發(fā)展概況目前,計算機(jī)硬件向巨型化、微型化和單片化三個方向高速發(fā)展。自1975年美國德克薩斯儀器公司(TexasInstruments)第一塊單片微型計算機(jī)芯片TMS-1000問世以來,在短短的三十多年間,單片機(jī)技術(shù)已發(fā)展成為計算機(jī)技術(shù)一個非常有前途的分支,它有自己的技術(shù)特征、規(guī)范、發(fā)展道路和應(yīng)用領(lǐng)域。單片機(jī)芯片具有體積小、個性突出、價格低廉等優(yōu)點(diǎn)。一方面,單片機(jī)芯片是自動控制系統(tǒng)的核心部件,廣泛應(yīng)用于工業(yè)控制、智能化儀器儀表、通信終端設(shè)備、家用電器、高檔電子玩具等領(lǐng)域;另一方面,由于模擬技術(shù)的局限性—模擬信號在傳輸、存儲、重現(xiàn)過程中不可避免地存在失真以及保密性差等無法克服的缺點(diǎn),在高速ADC與DAC器件、數(shù)字信號處理技術(shù)的推動下,電子技術(shù)正逐步向數(shù)字化方向發(fā)展,而電子技術(shù)數(shù)字化的關(guān)鍵和核心是數(shù)字信號的處理,單片機(jī)正是電子技術(shù)數(shù)字化三類可選的核心部件之一。1.3.1單片機(jī)及其特點(diǎn)在通用微機(jī)中央處理器的基礎(chǔ)上,將輸入/輸出(I/O)接口電路、時鐘電路以及一定容量的存儲器等部件集成在同一個芯片上,再加上必要的外圍器件,如晶體振蕩器,就構(gòu)成了一個較為完整的計算機(jī)硬件系統(tǒng)。由于這類計算機(jī)系統(tǒng)的基本部件均集成在同一芯片內(nèi),因此被稱為單片微控制器(Single-Chip-MicroController,簡稱單片機(jī))、微控制單元(MicroControllerUnit,簡稱MCU)或嵌入式控制器(EmbeddedController)。對于通用微處理器來說,其主要任務(wù)是數(shù)值計算和信息處理,在運(yùn)算速度和存儲容量方面的要求是速度越快越好,容量越大越好,因此它沿著高速、大容量方向發(fā)展:字長由8位(如8085)、16位(如8086、80286),迅速向32位(如80486)、64位(如Pentium系列CPU,Pentium系列CPU內(nèi)部數(shù)據(jù)總線為32位,對外數(shù)據(jù)總線為64位,因而Pentium還不是真正意義上的64位微處理器)過渡,時鐘信號的頻率由最初的4.77MHz向33MHz、66MHz、100MHz、200MHz、400MHz、600MHz、1GHz、2GHz、3GHz,甚至更高頻率過渡。而單片機(jī)主要面向工業(yè)控制,8位字長已足夠(在工業(yè)控制中,一般僅需要控制線路的通、斷,觸點(diǎn)的吸合與釋放,有時4位單片機(jī)也能勝任),盡管也有16位、32位的單片機(jī)芯片,但這些高檔單片機(jī)芯片主要用于語音及圖像處理、Internet及局域網(wǎng)系統(tǒng);時鐘信號頻率也不高,一般在數(shù)十兆赫茲以內(nèi)。單片機(jī)芯片作為控制系統(tǒng)的核心部件,除了具備通用微機(jī)CPU的數(shù)值計算功能外,還必須具有靈活、強(qiáng)大的控制功能,以便實(shí)時監(jiān)測系統(tǒng)的輸入量、控制系統(tǒng)的輸出量,實(shí)現(xiàn)自動控制功能。單片機(jī)主要面向工業(yè)控制,工作環(huán)境比較惡劣,常有高溫、強(qiáng)電磁干擾,甚至含有腐蝕性氣體,在太空中工作的單片機(jī)控制系統(tǒng),還必須具有一定的抗輻射功能,因而決定了單片機(jī)CPU與通用微機(jī)CPU相比,具有如下的技術(shù)特征和發(fā)展方向:
(1)抗干擾性強(qiáng),工作溫度范圍寬(按工作溫度分類,有民用級、工業(yè)級、汽車級及軍用級)。而通用微機(jī)CPU一般只要求在室溫下工作(與民用級單片機(jī)芯片工作溫度大致相同),抗干擾性能也較差。
(2)可靠性高。在工業(yè)控制中,任何差錯都可能造成極其嚴(yán)重的后果,因此在單片機(jī)芯片中普遍采用硬件看門狗技術(shù),通過定時“復(fù)位”方式喚醒處于“失控”狀態(tài)下的單片機(jī)芯片。
(3)電磁輻射量小。高可靠性和低電磁輻射指標(biāo)決定了單片機(jī)系統(tǒng)時鐘頻率比通用微處理器低得多。為此,單片機(jī)芯片一般采用Harvard雙總線結(jié)構(gòu),指令和數(shù)據(jù)存儲器空間相互獨(dú)立,并通過各自的數(shù)據(jù)總線與CPU相連,使取指、讀寫數(shù)據(jù)能同時進(jìn)行,以提高數(shù)據(jù)的吞吐率,以便在不降低數(shù)據(jù)吞吐率的條件下,能使用更低的時鐘頻率。而通用微處理器一般采用傳統(tǒng)的馮·諾依曼(VonNeumann)結(jié)構(gòu),指令、數(shù)據(jù)位于同一個存儲空間內(nèi),共用同一條數(shù)據(jù)總線,取指、讀寫數(shù)據(jù)不同時進(jìn)行,只能通過提高時鐘頻率方式來提高數(shù)據(jù)的吞吐率。
(4)控制功能很強(qiáng),數(shù)值計算能力相對較差。而通用微機(jī)CPU具有很強(qiáng)的數(shù)值運(yùn)算能力,但控制能力相對較弱,將通用微機(jī)用于工業(yè)控制時,一般需要增加一些專用的接口電路,如承擔(dān)AD/DA轉(zhuǎn)換任務(wù)的數(shù)據(jù)采集卡等。
(5)指令系統(tǒng)比通用微機(jī)系統(tǒng)簡單。
(6)單片機(jī)芯片往往不是單一的數(shù)字電路芯片,而是數(shù)字、模擬混合電路系統(tǒng),即單片機(jī)芯片內(nèi)常集成了一定數(shù)量的模擬比較器,1~2路的多個通道8位、10位或12位分辨率的AD及DA轉(zhuǎn)換電路。目前,內(nèi)置8位或10位分辨率ADC轉(zhuǎn)換器的8位、32位MCU芯片比比皆是,如MCS-51兼容芯片中的P89LPC900系列、AT89LPC21×系列、STC12C54××AD系列等;而STM8內(nèi)核8位MCU芯片均集成了10位或12位多個通道的ADC轉(zhuǎn)換器;ARM內(nèi)核的32位MCU芯片幾乎均帶有10位或12位的ADC轉(zhuǎn)換器。
(7)采用嵌入式結(jié)構(gòu)。盡管同一系列內(nèi)品種、規(guī)格繁多,但彼此差異卻不大。
(8)更新?lián)Q代速度比通用微處理器慢得多。Intel公司1980年推出標(biāo)準(zhǔn)MCS-51內(nèi)核8051(HMOS工藝)、80C51(HCMOS工藝)單片機(jī)芯片后,持續(xù)生產(chǎn)、使用了十余年,直到1996年3月才被增強(qiáng)型MCS-51內(nèi)核8XC5×芯片取代。1.3.2單片機(jī)技術(shù)現(xiàn)狀及將來發(fā)展趨勢目前,單片機(jī)芯片系列、品種、規(guī)格繁多,先后經(jīng)歷了4位機(jī)、8位機(jī)、16位機(jī)、新一代8位機(jī)、32位機(jī)等幾個具有代表性的發(fā)展階段。4位機(jī)主要用在家用電器,如電視機(jī)、空調(diào)機(jī)、洗衣機(jī)中。隨著8位機(jī)價格的下降,在家用電器中已開始大量采用8位機(jī),以便在家用電器中采用一些新技術(shù),如模糊控制、變頻調(diào)速等,以提升家用電器的智能化、自動化程度,降低系統(tǒng)的能耗。
16位機(jī)具有較強(qiáng)的數(shù)值運(yùn)算能力和較快的反應(yīng)速度,常用在需要實(shí)時控制、處理的系統(tǒng)中,盡管16位單片機(jī)進(jìn)入市場也有十余年,但一直未能取代8位機(jī)芯片而成為主流品種,目前已被強(qiáng)化了控制接口功能的新一代8位機(jī)和數(shù)值運(yùn)算能力更強(qiáng)的32位嵌入式單片機(jī)芯片所取代。32位嵌入式單片機(jī)芯片具有很強(qiáng)的數(shù)值計算能力,在語音識別、圖像處理、機(jī)器人控制、Internet接入設(shè)備需求的刺激下,32位嵌入式單片機(jī)芯片的銷量也在迅速上升。在今后一段時期內(nèi),8位、16位和32位嵌入式單片機(jī)芯片銷量的絕對值可能會有不同程度的增長,但在目前,甚至今后相當(dāng)長,如5年、10年時間內(nèi),8位單片機(jī)芯片,尤其是強(qiáng)化了控制接口功能的新一代8位單片機(jī),如STM8內(nèi)核芯片、PIC系列、Freescale(飛思卡爾,前身為Motorola公司的半導(dǎo)體事業(yè)部,2004年從Motorola公司獨(dú)立出來)的RS08(即MC9RS08×××)與HCS08(MC9S08×××)系列、Atmel的AVR系列等,依然是單片機(jī)芯片的主流品種。
1.新一代8位單片機(jī)芯片
8位單片機(jī)先后經(jīng)歷了三個發(fā)展階段。第一代8位單片機(jī)芯片(如Intel公司的MCS-48系列)功能較差,它實(shí)際上是8位通用微處理器單元電路和基本I/O接口電路、小容量存儲器、中斷控制器等部件的簡單組合。這類芯片沒有串行通信功能,不帶AD、DA轉(zhuǎn)換器,中斷控制和管理能力也較弱,功耗大,因而應(yīng)用范圍受到了很大的限制。為提高單片機(jī)的控制功能,拓寬其應(yīng)用領(lǐng)域,在20世紀(jì)80年代初,Intel、Motorola等公司在第一代8位單片機(jī)電路的基礎(chǔ)上,嵌入了通用串行通信控制和管理接口部件(UART),強(qiáng)化中斷控制器功能,增加定時/計數(shù)器個數(shù),更新存儲器種類,擴(kuò)展存儲器容量,部分系列、型號芯片內(nèi)還集成了AD、DA轉(zhuǎn)換接口電路,形成了第二代8位MCU芯片,如Intel公司的MCS-51系列、Motorola公司的6801及6805系列、Zilog公司的Z8系列,以及NEC公司的uPD7800系列等MCU芯片。第二代8位單片機(jī)芯片投放市場后,迅速取代了第一代8位單片機(jī)芯片,成為當(dāng)時單片機(jī)芯片的主流,并持續(xù)了十余年。第二代8位單片機(jī)芯片的特點(diǎn)是通用性強(qiáng),但個性依然不突出,控制功能也有限,仍不能滿足不同應(yīng)用領(lǐng)域、不同測控系統(tǒng)的需求。20世紀(jì)90年代后,各大芯片生產(chǎn)廠商,如Intel、NXP(恩智蒲,前身為Philips公司半導(dǎo)體事業(yè)部,2006年末從Philips公司獨(dú)立出來)、Winbond、Atmel、SST(即SiliconStorageTechnology)、Microchip、Freescale、TemicSemiconductorTechnology等,在第二代8位單片機(jī)CPU內(nèi)核的基礎(chǔ)上,除了進(jìn)一步強(qiáng)化原有的功能(如在串行接口部件中增加幀錯誤偵測和地址自動識別功能)外,針對不同的應(yīng)用領(lǐng)域,將不同功能、用途的外圍接口電路嵌入到第二代單片機(jī)CPU內(nèi),形成了規(guī)格、品種繁多的新一代8位單片機(jī)芯片。新一代8位單片機(jī)芯片系列品種繁多,主流品種有:
(1)?ST公司的STM8內(nèi)核系列。
ST(意法半導(dǎo)體)公司的STM8內(nèi)核MCU是最近兩年進(jìn)入市場的MCU芯片,包括STM8S(標(biāo)準(zhǔn)系列)、STM8L(低壓低功耗系列)、STM8A(汽車專用系列)三個子系列,采用0.13μm工藝、CISC指令系統(tǒng),是目前8位MCU市場上功能較完備、性價比較高的主流品種之一。其主要特點(diǎn)是功耗低、集成的外設(shè)種類多,且與ST公司生產(chǎn)的ARMCortex-M3內(nèi)核的STM32芯片兼容,內(nèi)嵌單線仿真接口電路(開發(fā)設(shè)備簡單)、可靠性高、價格低廉。此外,該系列芯片加密功能完善,被破解的風(fēng)險小,在工業(yè)控制、智能化儀器儀表、家用電器等領(lǐng)域具有廣泛的應(yīng)用前景,是中低價位控制系統(tǒng)的首選芯片之一。
(2)?Freescale的RS08、HCS08內(nèi)核系列。
Freescale的RS08(即MC9RS08×××)與HCS08(MC9S08×××,飛思卡爾8位MCU的主流芯片)系列,以及已經(jīng)停產(chǎn)的原Motorola公司的MC68HC05、MC68HC11、MC68HC12系列,其特點(diǎn)是在相同的處理速度下所用的時鐘頻率較MCS-51內(nèi)核芯片低得多,因而高頻噪聲低、抗干擾能力強(qiáng),特別適合在工業(yè)控制領(lǐng)域及惡劣環(huán)境下使用。
(3)?MicroChip公司的PIC系列及兼容芯片。
MicroChip(微芯科技)公司8位單片機(jī)主要包括PIC10F、PIC12C/F、PIC16C/16F、PIC17C、PIC18C/18F等系列,也是目前國內(nèi)8位MCU芯片的主流品種之一。其特點(diǎn)是采用RISC指令系統(tǒng),指令數(shù)目少、運(yùn)行速度快、工作電壓低、功耗小、I/O引腳支持互補(bǔ)推挽輸出方式,驅(qū)動能力較強(qiáng),任意一個I/O口均可直接驅(qū)動LED發(fā)光二極管。該系列MCU芯片最大缺點(diǎn)是,集成的外設(shè)種類不多,功能有限,即性價比不高,適用于用量大、檔次低、價格敏感的電子產(chǎn)品,在辦公自動化設(shè)備、電子通信、智能化儀器儀表、汽車電子、金融電子、工業(yè)控制等領(lǐng)域有一定的優(yōu)勢。
PIC系列兼容芯片主要有臺灣MICON(麥肯)公司的MDT20××系列、臺灣義隆電子股份有限公司的EM78系列(與Microchip公司的PIC16C××系列引腳兼容),其主要特點(diǎn)是價格低廉,甚至比中小規(guī)模數(shù)字IC芯片高不了多少。
(4)?MCS-51系列及兼容芯片。
MCS-51系列最先由Intel公司開發(fā),后來其他公司通過技術(shù)轉(zhuǎn)讓、技術(shù)交換等方式獲得了MCS-51(包括8051與80C51)內(nèi)核技術(shù)的使用權(quán),生產(chǎn)廠家眾多,目前主要生產(chǎn)商有NXP、Atmel、Winbond(W78、W77、W79系列)、SST、STC、Infineo(XC886系列)、SiliconLaboratories(C8051F×××系列)、LG(GMS90系列)等。其特點(diǎn)是通用性較強(qiáng),采用CISC指令系統(tǒng),指令格式與Intel公司8位微處理相同或相近。MCS-51進(jìn)入市場時間早,總線技術(shù)開放,開發(fā)設(shè)備多,芯片及其開發(fā)設(shè)備價格低廉,操作速度較快,電磁兼容性也較好,曾經(jīng)是國內(nèi)8位單片機(jī)芯片的主流品種之一。盡管MCS-51系列問世初期,給人的印象是功能少、性價比不高,但經(jīng)歷數(shù)十年的改進(jìn)后,現(xiàn)在的MCS-51兼容芯片無論是功能,還是性能指標(biāo)都有了質(zhì)的飛躍。例如SiliconLaboratories的C8051F×××系列功能很強(qiáng),開發(fā)環(huán)境也有較大的改善,只是價格偏高。當(dāng)然由于其內(nèi)部架構(gòu)的限制,MCS-51內(nèi)核兼容芯片性價比不可能太高,功耗也較大。也正因如此,最近一兩年來,許多知名的MCU芯片生產(chǎn)商不再推出新的MCS-51兼容芯片(甚至一些公司已停止MCS-51的技術(shù)支持)。隨著非MCS-51內(nèi)核8位MCU芯片、32位內(nèi)核MCU芯片開發(fā)工具的不斷成熟,開發(fā)環(huán)境的不斷完善,MCS-51內(nèi)核芯片在不久的將來也許會逐漸消失。
(5)?ATMEL公司的AVR系列。
AVR系列單片機(jī)采用增強(qiáng)型RISC結(jié)構(gòu),在一個時鐘周期內(nèi)可執(zhí)行復(fù)雜指令,每兆赫茲具有1MIPS(每秒指令數(shù))的處理能力。AVR單片機(jī)工作電壓為2.7~6.0V,功耗小,廣泛應(yīng)用于計算機(jī)外部設(shè)備、工業(yè)實(shí)時控制、儀器儀表、通訊設(shè)備、家用電器、宇航設(shè)備等領(lǐng)域。
2.16位單片機(jī)
16位單片機(jī)操作速度及數(shù)據(jù)吞吐能力等性能指標(biāo)比8位機(jī)有較大的提高,但市場占有率遠(yuǎn)沒有8位、32位MCU芯片高,生產(chǎn)廠家也少,目前主要有RENESAS(日本瑞薩科技)的H8S、H8SX、R8C、MC16C系列,F(xiàn)reescale的S12、S12X、HC16系列,Microchip公司的PIC24F、PIC24H、dsPIC30F、dsPIC33D系列
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 投標(biāo)文件密封檢查表
- Brand KPIs for health insurance:Plan Seguro in Mexico-英文培訓(xùn)課件2025.4
- 物理中考二輪復(fù)習(xí)教案 8實(shí)驗(yàn)專題2(力學(xué))
- 仔細(xì)研讀活動方案
- 仙林品牌活動策劃方案
- 代理進(jìn)貨活動方案
- 以廠為家活動方案
- 以茶會友戶外活動方案
- 仰韶酒廠活動方案
- TJSQA-溫室氣體?產(chǎn)品碳足跡量化方法與要求?鋁合金型材產(chǎn)品
- 國家開放大學(xué)《光伏電池原理與工藝》形考任務(wù)1-4參考答案
- 綠色建筑工程監(jiān)理實(shí)施細(xì)則
- 燃?xì)馍a(chǎn)安全事故應(yīng)急處置工作手冊
- 陜西省西安市數(shù)學(xué)中考2024年試題及答案解析
- DB37T 1914-2024 液氨存儲與裝卸作業(yè)安全技術(shù)規(guī)范
- NBT 47013.11-2015 承壓設(shè)備無損檢測 第11部分:X射線數(shù)字成像檢測
- 中職2024-2025學(xué)年高一上學(xué)期期末語文試題04(解析版)
- 2024年廣西桂盛金融信息科技服務(wù)有限公司招聘筆試沖刺題(帶答案解析)
- 浙江省2024年中考數(shù)學(xué)試卷(含答案)
- 電信營業(yè)廳店面運(yùn)營方案(2篇)
- “避風(fēng)港規(guī)則”在視頻分享網(wǎng)站版權(quán)侵權(quán)認(rèn)定中的適用
評論
0/150
提交評論