




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)基礎(chǔ)知識(shí)第1章 單片機(jī)基礎(chǔ)知識(shí)1.1 概 述1.2 單片機(jī)系統(tǒng)的組成 1.3 單片機(jī)中數(shù)的表示及編碼1.4 習(xí) 題1.1.2 單片機(jī)及其發(fā)展?fàn)顩r 1單片機(jī)名稱的來(lái)源 根據(jù)單片機(jī)的物理形態(tài)和內(nèi)容,早期的單片機(jī)稱為Single-Chip Microcomputer。從仙童公司的第一款單片機(jī)F-8開(kāi)始,甚至到MCS-51時(shí)期,這些單片機(jī)確實(shí)準(zhǔn)確地體現(xiàn)了Single-Chip Microcomputer的形態(tài)和內(nèi)容。但是,隨著單片機(jī)發(fā)展到MCS-96、新一代80C51、M68HC05等系列單片機(jī)時(shí),這些單片機(jī)面向?qū)ο?,突出控制功能,在片?nèi)集成了許多外圍電路及外設(shè)接口,如A/D、PWM、WDT等,
2、突破了傳統(tǒng)意義的單片機(jī)結(jié)構(gòu),發(fā)展成Microcontroller的體系結(jié)構(gòu),因此,目前國(guó)外已經(jīng)逐步統(tǒng)一稱單片機(jī)為MCU(Micro Controller Unit)。由于它實(shí)行嵌入式應(yīng)用,因此也稱為嵌入式微控制器。1.1.3 80C51系列單片機(jī)簡(jiǎn)介 盡管各類單片機(jī)很多,但無(wú)論從世界范圍還是從國(guó)內(nèi)范圍來(lái)看,使用最為廣泛的還是MCS-51型單片機(jī),因此本書也將以MCS-51型系列為主,來(lái)介紹單片機(jī)的原理及應(yīng)用。MCS-51型系列單片機(jī)共有十幾種芯片,表1-1列舉了比較典型的幾種芯片的型號(hào)及主要技術(shù)性能指標(biāo)。 表1-1:子系列片內(nèi)ROM形式ROM容量RAM 容量計(jì)數(shù)器并行口串行口中斷源制造工藝無(wú)R
3、OM掩膜ROMEPROM片內(nèi)片外片內(nèi)片外51子系列8031805187514KB60KB128B64KB2164815HMOS80C3180C5187C514KB60KB128B64KBCHMOS52子系列8032805287528KB56KB256B64KB3164817HMOS83C25280C25287C2528KB56KB256B64KBCHMOS 80C51型單片機(jī)屬于Intel公司的MCS-51系列單片機(jī),MCS-51系列單片機(jī)采用兩種半導(dǎo)體工藝生產(chǎn)。一種是HMOS工藝,即高密度短溝道MOS工藝。另外一種是CHMOS工藝,即互補(bǔ)金屬氧化物的HMOS工藝。表1-1的芯片型號(hào)中帶有“C
4、”的都為CHMOS工藝,其余的為一般的HMOS工藝。CHMOS是CMOS和HMOS的結(jié)合,除具有HMOS高速度、高密度的特點(diǎn)外,還具有CMOS低功耗的優(yōu)點(diǎn)。比如8051型的功耗為630mW,而80C51的功耗只有120mW。 目前,Intel公司將80C51型單片機(jī)的內(nèi)核使用權(quán)以專利互換或者出售的形式轉(zhuǎn)讓給其他的著名IC制造商,如Philips、ATMEL、AMD、Dallas、Siemens、LG、華邦等。這些公司在80C51內(nèi)核基礎(chǔ)上,擴(kuò)展了針對(duì)不同需求的外圍電路,如A/D、PWM、WDT,引入使用方便并且價(jià)格便宜的Flash ROM等,使80C51的功能更加齊全、針對(duì)性更強(qiáng),鞏固并發(fā)展了
5、Intel公司單片機(jī)的地位,成為當(dāng)今世界8位單片機(jī)的主流。1.1.4 單片機(jī)的特點(diǎn)及應(yīng)用領(lǐng)域單片機(jī)的主要特點(diǎn)如下:(1)很高的性價(jià)比。目前許多單片機(jī)的價(jià)格只要幾元人民幣。(2)集成度高,體積小,可靠性好。內(nèi)部采用總線結(jié)構(gòu),減少各芯片間的連線。(3)控制能力強(qiáng)。單片機(jī)的指令豐富,能滿足各種工業(yè)控制的要求。(4)低功耗、低電壓,一般在3V6V范圍內(nèi)工作,低電壓供電的單片機(jī)電源下限可達(dá)1V2V,1V以下供電的單片機(jī)也已誕生,便于生產(chǎn)便攜式設(shè)備。(5)易擴(kuò)展??筛鶕?jù)需要進(jìn)行并行或者串行擴(kuò)展,形成網(wǎng)絡(luò)控制系統(tǒng)。 由于單片機(jī)的特點(diǎn)比較突出,因此,在各個(gè)應(yīng)用領(lǐng)域都可以見(jiàn)到它的身影,主要的應(yīng)用領(lǐng)域有:(1)工
6、業(yè)自動(dòng)化控制。這是最早采用單片機(jī)控制的領(lǐng)域之一,如各種測(cè)控系統(tǒng)、PLC等。(2)智能化家用電器。用單片機(jī)控制來(lái)替代傳統(tǒng)的電子線路控制是當(dāng)前家用電器的發(fā)展趨勢(shì),如空調(diào)、洗衣機(jī)、電視機(jī)等。(3)智能化儀表。采用單片機(jī)的智能化儀表,加強(qiáng)了數(shù)據(jù)處理能力和網(wǎng)絡(luò)數(shù)據(jù)傳送能力,提高了儀表的檔次,如各種探測(cè)儀表、自動(dòng)抄表系統(tǒng)等。(4)辦公自動(dòng)化設(shè)備。目前的辦公設(shè)備中多數(shù)都嵌入了單片機(jī)系統(tǒng),如打印機(jī)、復(fù)印機(jī)、掃描儀等。(5)軍用航空等尖端領(lǐng)域的應(yīng)用更加突出。1.2 單片機(jī)系統(tǒng)的組成 當(dāng)單片機(jī)內(nèi)部的計(jì)算機(jī)外圍功能單元不能滿足對(duì)象控制要求的時(shí)候,通過(guò)系統(tǒng)擴(kuò)展,在外部并行總線上擴(kuò)展相應(yīng)的計(jì)算機(jī)外圍功能單元所構(gòu)成的系統(tǒng)
7、,稱為單片機(jī)系統(tǒng)。這個(gè)定義強(qiáng)調(diào)的是單片機(jī)系統(tǒng)的硬件組成,而一個(gè)完整的單片機(jī)系統(tǒng)應(yīng)該包括硬件系統(tǒng)和軟件系統(tǒng)兩大部分,如圖1-2所示。圖1-2 單片機(jī)系統(tǒng)結(jié)構(gòu)框圖 單片機(jī)系統(tǒng)的硬件由單片機(jī)芯片和外部接口電路及設(shè)備組成。而單片機(jī)芯片則包括了中央處理器(CPU)、存儲(chǔ)器(ROM/RAM)、I/O接口及其他功能單元(定時(shí)計(jì)數(shù)器、中斷系統(tǒng)、串行接口)。它們通過(guò)AB(地址總線)、DB(數(shù)據(jù)總線)、CB(控制總線)相互連接,如圖1-3所示。1.2.1 單片機(jī)系統(tǒng)的硬件組成圖1-3 單片機(jī)系統(tǒng)的硬件結(jié)構(gòu)圖 1微處理器(CPU) CPU主要由兩部分組成:運(yùn)算器和控制器。(1)運(yùn)算器:運(yùn)算器主要完成算術(shù)運(yùn)算和邏輯運(yùn)
8、算并進(jìn)行邏輯測(cè)試,如零值測(cè)試和兩個(gè)值的比較,通常算術(shù)操作產(chǎn)生一個(gè)運(yùn)算結(jié)果,而一個(gè)邏輯操作產(chǎn)生一個(gè)判決。運(yùn)算器主要由以下幾部分組成。 累加器A:用來(lái)存放參與算術(shù)或者邏輯運(yùn)算的一個(gè)操作數(shù)和運(yùn)算結(jié)果。 暫存器TMP:用來(lái)暫時(shí)存放參與算術(shù)或者邏輯運(yùn)算的另一個(gè)操作數(shù)。該操作數(shù)主要來(lái)自其他數(shù)據(jù)寄存器或者內(nèi)存單元中。 算術(shù)邏輯單元ALU:主要完成把傳送到微處理器的數(shù)據(jù)進(jìn)行算術(shù)和邏輯運(yùn)算。ALU具有兩個(gè)主要的輸入來(lái)源,一個(gè)累加器,一個(gè)來(lái)自數(shù)據(jù)寄存器,它能夠完成這兩個(gè)數(shù)的相加和相減,也能夠完成某些邏輯運(yùn)算。 標(biāo)志寄存器F:用來(lái)存放ALU運(yùn)算結(jié)果的標(biāo)志位,如進(jìn)位標(biāo)志、溢出標(biāo)志等。 例如:將兩個(gè)數(shù)12H和31H相加
9、,在相加之前,操作數(shù)12H存放在累加器A中,31H存放在數(shù)據(jù)寄存器中,執(zhí)行兩個(gè)數(shù)相加的控制線發(fā)出“加”操作信號(hào),ALU就把兩個(gè)數(shù)相加,所加結(jié)果存入累加器A中,覆蓋原來(lái)累加器A中的內(nèi)容,執(zhí)行完后,累加器A中的內(nèi)容就是43H。 (2)控制器 控制器主要是協(xié)調(diào)和控制整個(gè)計(jì)算機(jī)系統(tǒng)的操作,主要由以下幾部分組成。 程序計(jì)數(shù)器PC:為了能夠保證程序能夠連續(xù)地運(yùn)行下去,CPU必須具備某種手段來(lái)確定一條指令的地址,程序計(jì)數(shù)器就是執(zhí)行這項(xiàng)工作。當(dāng)執(zhí)行程序時(shí),CPU將自動(dòng)修改PC的內(nèi)容,使之總是指向下一條指令的存放地址。 指令寄存器IR:保存當(dāng)前正在執(zhí)行的一條指令。當(dāng)執(zhí)行一條指令時(shí),先把它從程序存儲(chǔ)器中取出,然后
10、再傳送到指令寄存器。 指令譯碼器ID:要執(zhí)行給定指令的操作,必須給操作碼譯碼,以便確定所要求的操作,指令譯碼器就是負(fù)責(zé)這項(xiàng)工作。操作碼一經(jīng)譯碼后就向操作控制器發(fā)出具體操作的特定信號(hào)。 時(shí)序產(chǎn)生器:用來(lái)產(chǎn)生脈沖序列和各種節(jié)拍脈沖,每個(gè)節(jié)拍脈沖對(duì)應(yīng)于一種操作,就像是體育老師的口令、交響樂(lè)團(tuán)的指揮一樣。 操作控制器:根據(jù)指令譯碼器的信號(hào),產(chǎn)生相應(yīng)的操作控制信號(hào),以便啟動(dòng)規(guī)定的動(dòng)作,比如一次內(nèi)存讀寫操作,一次算術(shù)邏輯操作,一次輸入/輸出操作,指揮并控制CPU、內(nèi)存和輸入/輸出設(shè)備之間的數(shù)據(jù)流向。 相對(duì)控制器而言,運(yùn)算器的動(dòng)作是接受控制器的命令而動(dòng)作的,即運(yùn)算器所進(jìn)行的所有操作都是由控制器發(fā)出的控制信號(hào)
11、來(lái)指揮的。 2總線 總線(BUS)是計(jì)算機(jī)各部件之間傳送信息的公共通道。微機(jī)中有內(nèi)部總線和外部總線兩類。內(nèi)部總線是CPU內(nèi)部之間的連線,外部總線是指CPU與其他部件之間的連線。外部總線有三種:數(shù)據(jù)總線DB(Data Bus)、地址總線AB(Address Bus)和控制總線CB(Control Bus)。(1)地址總線(AB):地址總線寬度根據(jù)尋址范圍來(lái)確定的,當(dāng)尋址范圍是4KB212B時(shí),需要的地址線寬度為12位,由于80C51單片機(jī)的尋址范圍最多可達(dá)64KB,因此地址總線寬度為16位,由P0口經(jīng)地址鎖存器提供低8位地址(A0A7);P2口直接提供高8位地址(A8A15)。因地址信號(hào)是由CP
12、U發(fā)出的,故地址總線是單方向的。(2)數(shù)據(jù)總線(DB):由于80C51單片機(jī)為8位機(jī),故數(shù)據(jù)總線寬度為8位,用于傳送數(shù)據(jù)和指令,由P0口提供。(3)控制總線(CB):控制總線隨時(shí)掌控各種部件的狀態(tài),并根據(jù)需要向有關(guān)部件發(fā)出控制命令。 3存儲(chǔ)器 存儲(chǔ)器的主要功能就是用來(lái)存放程序代碼和數(shù)據(jù)。(1)存儲(chǔ)器的分類 按照存儲(chǔ)器的存取功能分,可分為:隨機(jī)存取存儲(chǔ)器(Random Access Memory,RAM)。它可以隨機(jī)寫入和讀出,讀寫速度快,但是斷電后,存儲(chǔ)的數(shù)據(jù)就要丟失。主要用來(lái)存放各種處理數(shù)據(jù)。 只讀存儲(chǔ)器(Read Only Memory,ROM)。它在一般情況下只能讀不能寫,當(dāng)然,在滿足一
13、定條件下也可以完成寫入操作,否則,讀的數(shù)據(jù)又從何而來(lái)呢?它的另外一個(gè)特點(diǎn)就是掉電不丟失,能長(zhǎng)期保存數(shù)據(jù)。從寫入方式來(lái)看,ROM也有很多分類,主要有:掩膜ROM、EPROM、EEPROM、FLASHROM和OTPROM(一次性編程ROM)。 按照存儲(chǔ)器結(jié)構(gòu)分,可分為: 普林斯頓結(jié)構(gòu)。一般微機(jī)只有一個(gè)地址空間,ROM和RAM可以隨意安排在這一地址范圍內(nèi)不同的空間,即ROM和RAM的地址在同一個(gè)隊(duì)列里分配不同的地址空間。CPU訪問(wèn)存儲(chǔ)器時(shí),一個(gè)地址對(duì)應(yīng)唯一的存儲(chǔ)空間,可以是ROM,也可以是RAM,并用同一種指令訪問(wèn)。 哈佛結(jié)構(gòu)。如80C51的存儲(chǔ)器結(jié)構(gòu)分程序存儲(chǔ)器空間和數(shù)據(jù)存儲(chǔ)器空間,總共有4個(gè)物理
14、存儲(chǔ)空間,即片內(nèi)程序存儲(chǔ)器空間、片外程序存儲(chǔ)器空間、片內(nèi)數(shù)據(jù)存儲(chǔ)器空間、片外數(shù)據(jù)存儲(chǔ)器空間,并用不同的指令訪問(wèn)程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器,這種程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器分開(kāi)的結(jié)構(gòu)就稱為哈佛結(jié)構(gòu)。 (2)存儲(chǔ)器的操作 存儲(chǔ)器的操作分為讀操作和寫操作。 例如,將數(shù)據(jù)存儲(chǔ)器30H中的內(nèi)容03H讀出到累加器A中。其步驟如下: CPU將要讀存儲(chǔ)空間的地址碼30H送到地址總線上,選通地址為30H的存儲(chǔ)單元。 CPU的控制器發(fā)出“讀”信號(hào),建立存儲(chǔ)器到CPU的數(shù)據(jù)流向。 存儲(chǔ)器將地址為30H的存儲(chǔ)單元中的內(nèi)容03H釋放到數(shù)據(jù)總線上。 CPU將數(shù)據(jù)總線上的數(shù)據(jù)03H讀入到累加器A中。 注意:讀操作不影響原來(lái)單元內(nèi)容,
15、即30H中的內(nèi)容還是03H,類似計(jì)算機(jī)操作中的“復(fù)制”。 例如,將數(shù)據(jù)10H送到地址為40H的內(nèi)部數(shù)據(jù)存儲(chǔ)單元中。其步驟如下: CPU將要寫入的存儲(chǔ)空間的地址碼40H送到地址總線上,選通地址為40H的存儲(chǔ)單元。 將數(shù)據(jù)10H送到數(shù)據(jù)總線上。 CPU控制器發(fā)出“寫”信號(hào),建立CPU到存儲(chǔ)器的數(shù)據(jù)流向。 存儲(chǔ)器將數(shù)據(jù)10H送入到地址為40H的存儲(chǔ)單元中。注意:寫操作要改變?cè)瓉?lái)單元的內(nèi)容,類似計(jì)算機(jī)操作中的“粘貼”,如果40H單元中原來(lái)的內(nèi)容是20H,經(jīng)過(guò)這次寫操作后,40H單元中的內(nèi)容就改為10H。(3)堆棧 堆棧就是在單片機(jī)RAM中,專門劃出一個(gè)區(qū)域用來(lái)臨時(shí)存放一些重要數(shù)據(jù)碼或者地址碼。對(duì)于堆棧
16、,應(yīng)主要掌握以下幾點(diǎn)。 棧底地址:用來(lái)確定堆棧的深度,一般可在程序初始化部分通過(guò)對(duì)堆棧指針SP 的賦值來(lái)確定,如MOV SP,#60H,就是將堆棧的棧底設(shè)定為60H(深度為32B)。 堆棧指針:用來(lái)指出當(dāng)前棧頂?shù)拇鎯?chǔ)單元的地址。 堆棧原則:堆棧操作遵循“先進(jìn)后出”的原則。 如圖1-4是一堆棧的結(jié)構(gòu)圖。通過(guò)這個(gè)圖可以了解以下幾點(diǎn): 這個(gè)堆棧的棧底為50H,在程序初始化過(guò)程中可以通過(guò)指令MOV SP,#50H來(lái)指定,同時(shí)確定堆棧深度為51H7FH,在具體使用中的堆棧深度根據(jù)實(shí)際需要保存的數(shù)據(jù)個(gè)數(shù)來(lái)確定。 當(dāng)前堆棧指針SP的值為54H,即當(dāng)前棧頂為54H。 這4個(gè)數(shù)據(jù)的壓棧順序?yàn)?0H、14H、58
17、H、64H,根據(jù)“先進(jìn)后出”原則,這4個(gè)數(shù)據(jù)的出棧順序?yàn)?4H、58H、14H、10H。 從上面幾點(diǎn)看,堆棧與手槍彈夾的結(jié)構(gòu)和工作原理十分相似。 圖1-4 堆棧結(jié)構(gòu)示意圖 4輸入/輸出設(shè)備及其接口電路 單片機(jī)系統(tǒng)的輸入/輸出設(shè)備也稱作I/O設(shè)備,比如鍵盤、鼠標(biāo)、顯示器、微型打印機(jī)等。輸入/輸出(I/O)接口由大規(guī)模集成電路組成的I/O器件構(gòu)成,用來(lái)連接主機(jī)和相應(yīng)的I/O設(shè)備(如:鍵盤、鼠標(biāo)、顯示器、打印機(jī)等),使得這些設(shè)備和主機(jī)之間傳送的數(shù)據(jù)、信息在形式上和速度上都能匹配。不同的I/O設(shè)備必須配置與其相適應(yīng)的I/O接口。通常,這些接口電路集成在一塊芯片上。如8255A、8155、8253、DA
18、C0832、ADC0809等擴(kuò)展芯片。1.2.2 單片機(jī)系統(tǒng)軟件組成 只配備硬件設(shè)備的單片機(jī)系統(tǒng),并不能完成我們所需要實(shí)現(xiàn)的功能,硬件是實(shí)現(xiàn)功能的載體,而軟件是硬件的靈魂,目前用來(lái)設(shè)計(jì)軟件的語(yǔ)言分為三類。1機(jī)器語(yǔ)言 機(jī)器語(yǔ)言的主要特點(diǎn)是:(1)由一組二進(jìn)制碼組成,直接能被計(jì)算機(jī)識(shí)別并執(zhí)行。(2)不同的微處理器,采用不同的機(jī)器語(yǔ)言。(3)可讀性差,直觀性差,容易出錯(cuò),目前基本不采用。 2匯編語(yǔ)言 匯編語(yǔ)言的主要特點(diǎn)是:(1)用助記符代替機(jī)器語(yǔ)言中的操作碼。(2)匯編語(yǔ)言翻譯成機(jī)器語(yǔ)言的方法有兩種:一種是手工查表匯編,一種是機(jī)器匯編。由于機(jī)器匯編方便,目前基本上都是采用機(jī)器匯編。(3)不同的微處理
19、器采用不同的匯編語(yǔ)言。(4)較直觀,可讀性好,占用內(nèi)存少,速度快。 3.高級(jí)語(yǔ)言高級(jí)語(yǔ)言的主要特點(diǎn)是:(1)采用類似人類自然語(yǔ)言的程序設(shè)計(jì)語(yǔ)言。(2)通過(guò)專門的編譯程序翻譯成機(jī)器語(yǔ)言。(3)通用性強(qiáng),移植性好,不隨微處理器的不同而不同。(4)目前較流行的有C51、PL/M和BASIC語(yǔ)言。 三種語(yǔ)言各有特點(diǎn),本書介紹的是匯編語(yǔ)言,雖然不同類型單片機(jī)的匯編語(yǔ)言有所不同,但還是有很多相似之處,可以舉一反三。同時(shí),在掌握匯編語(yǔ)言的基礎(chǔ)上,再去掌握高級(jí)語(yǔ)言的編程,能達(dá)到事半功倍的效果。1.3 單片機(jī)中數(shù)的表示及編碼 在日常生活中,我們經(jīng)常使用的是十進(jìn)制數(shù),而在單片機(jī)中,二進(jìn)制機(jī)器編碼是它的基本語(yǔ)言,考
20、慮到二進(jìn)制在書寫和閱讀方面的缺點(diǎn),在單片機(jī)軟件編寫過(guò)程中,常引入十六進(jìn)制數(shù)來(lái)表示。 如何進(jìn)行十進(jìn)制、二進(jìn)制、十六進(jìn)制之間的相互轉(zhuǎn)換,是基本的數(shù)字處理能力,這里不再詳述。對(duì)此有疑問(wèn)的初學(xué)者,可以參考有關(guān)的數(shù)字電路基礎(chǔ)的數(shù)據(jù),本書主要介紹正負(fù)數(shù)在計(jì)算機(jī)中的表示方法和有關(guān)編碼知識(shí)。1.3.1 正數(shù)和負(fù)數(shù)在單片機(jī)中的表示方法 在日常數(shù)字表示中,有符號(hào)數(shù)的正負(fù)性可以用“+”、“-”來(lái)表示,但是在計(jì)算機(jī)數(shù)字表示中,有符號(hào)數(shù)的正負(fù)根據(jù)其最高位是“0”還是“1”來(lái)區(qū)分。如在8位微機(jī)中,D7位表示這個(gè)數(shù)的符號(hào),是“1”,表示負(fù)數(shù),是“0”,表示正數(shù),其余位表示數(shù)值位的大小,如圖1-5所示。圖1-5 8位有符號(hào)數(shù)
21、的表示方法 【例1-1】指出N1和N2的值。解:由于N1的D7位為1,是負(fù)數(shù),后面的數(shù)值位的值為6,則N1= -6;由于N2的D7位為0,是正數(shù),后面的數(shù)值位的值為7,則N2=+7。那么,在計(jì)算機(jī)中,-6和+7的存儲(chǔ)形式真的如此嗎?我們來(lái)看一下下面的例子?!纠?-2】求S=N1+N2=-6+7。解:根據(jù)例1-1的結(jié)果,-6=1000 0110B,+7=0000 0111B,則運(yùn)算過(guò)程如下: 10000110B N1+00000111B N2 10001101B S=-13 S=-13,很明顯,結(jié)果錯(cuò)誤,那么問(wèn)題出在哪里呢?主要是因?yàn)橛蟹?hào)數(shù)在計(jì)算機(jī)中的表示方法出現(xiàn)錯(cuò)誤。在計(jì)算機(jī)中,有符號(hào)數(shù)的表
22、示方法有3種:原碼、反碼和補(bǔ)碼。我們上面兩個(gè)例子采用的都是原碼,但是,計(jì)算機(jī)中,負(fù)數(shù)是以補(bǔ)碼形式存儲(chǔ)并參與運(yùn)算的。下面我們來(lái)具體了解正負(fù)數(shù)的原碼、反碼和補(bǔ)碼。 1正數(shù)的原碼、反碼、補(bǔ)碼正數(shù)的表示最簡(jiǎn)單,它的原碼、反碼和補(bǔ)碼都一樣,即【X】原 =【X】反 =【X】補(bǔ) = X【例1-3】X=+9,求其原碼、反碼、補(bǔ)碼。解:+9=00001001B,則【+9】原 =【+9】反 =【+9】補(bǔ) = 00001001B 2負(fù)數(shù)的原碼、反碼和補(bǔ)碼負(fù)數(shù)的原碼:符號(hào)位為1,其余位為數(shù)值位?!纠?-4】X=-9,求X的原碼。解:符號(hào)位為1,數(shù)值位為9 = 0001001所以,【-9】原 =10001001B。負(fù)數(shù)
23、的反碼:原碼的符號(hào)位不變,其余位取反。【例1-5】X=-9,求X的反碼。解:【-9】原 =10001001B,根據(jù)符號(hào)位不變,其余位取反的方法可得,【-9】反 =11110110B負(fù)數(shù)的補(bǔ)碼:反碼加1,即【X】補(bǔ) =【X】反 +1?!纠?-6】X=-9,求X的補(bǔ)碼。解:【-9】原 =10001001B,【-9】反 = 11110110B,根據(jù)補(bǔ)碼等于反碼加1,則【-9】補(bǔ) =【-9】反 +1 = 11110110B+1=11110111B 3零的原碼、反碼和補(bǔ)碼零的原碼:由于零分為+0和-0,則其原碼有兩種:【+0】原 = 00000000B【-0】原 = 10000000B零的反碼也有兩種:
24、【+0】反 = 00000000B【-0】反 = 11111111B零點(diǎn)補(bǔ)碼:由于+0的補(bǔ)碼等于原碼,-0的補(bǔ)碼等于其反碼加1,所以,不管是+0還是-0,它的補(bǔ)碼只有一個(gè):【+0】補(bǔ) =【-0】補(bǔ) = 00000000B綜上所述,歸納如下。對(duì)于正數(shù): 【X】原 =【X】反 =【X】補(bǔ) = X對(duì)于負(fù)數(shù):【X】反 =【X】原 數(shù)值位取反,符號(hào)位不變【X】補(bǔ) =【X】反 +1 學(xué)會(huì)了補(bǔ)碼的運(yùn)算,我們回過(guò)來(lái)看例1-2,采用補(bǔ)碼運(yùn)算,【-6】補(bǔ) = 11111010B【+7】補(bǔ) = 00000111B則S=-6+7的運(yùn)算如下: 11111010B N1+00000111B N2 00000001B S=
25、1結(jié)果正確,至此,大家應(yīng)該明白在計(jì)算機(jī)中,有符號(hào)數(shù)的運(yùn)算采用的是數(shù)的補(bǔ)碼形式。1.3.2 常用編碼 1BCD碼 采用二進(jìn)制碼對(duì)每一個(gè)十進(jìn)制數(shù)進(jìn)行編碼,稱為BCD碼,用【】BCD表示,例如:51=【0101 0001】BCD,在這里,【0101 0001】BCD不能認(rèn)為是二進(jìn)制碼01010001B,因?yàn)?1010001B的十進(jìn)制為81,而【0101 0001】BCD的十進(jìn)制為51,顯然存在區(qū)別。具體的十進(jìn)制與BCD碼之間的關(guān)系如表1-2所示。 表1-2 8421BCD編碼表十 進(jìn) 制 數(shù)8421BCD碼十 進(jìn) 制 數(shù)8421BCD碼00000501011000160110200107011130
26、011810004010091001 2BCD碼的加法運(yùn)算BCD碼的加法運(yùn)算與二進(jìn)制碼的加法運(yùn)算規(guī)則一樣,但有時(shí)候會(huì)出錯(cuò),例如: 【0101 1001】BCD 59+【0010 1000】BCD 28 【1000 0001】BCD 81顯然,運(yùn)算結(jié)果是錯(cuò)誤的,因?yàn)樵谶\(yùn)算過(guò)程中,低四位向高四位有進(jìn)位,所以要進(jìn)行修正,具體的修正條件和方法如下:(1)低四位向高四位有進(jìn)位,低四位加6修正。(2)高四位向更高位有進(jìn)位,高四位加6修正。(3)低四位出現(xiàn)非法BCD碼,低四位加6修正。(4)高四位出現(xiàn)非法BCD碼,高四位加6修正。(5)同一個(gè)四位出現(xiàn)兩種修正條件,則只需修正一次即可。 【例1-7】已知X=【
27、0110 0001】BCD,Y=【0010 0110】BCD,求S=X+Y。解: 【0110 0001】BCD X(61)+【0010 0110】BCD Y(26) 【1000 0111】BCD S(87)不滿足要修正的條件,無(wú)需修正,結(jié)果正確。 【例1-8】已知X=【0100 1000】BCD,Y=【0101 1001】BCD,求S=X+Y。解:【0100 1000】BCD X(48)+【0101 1001】BCD Y(59)【1010 0001】BCD ;滿足(1)、(4)修正條件,進(jìn)行加6修正+ 0110 0110 【0001 0000 0111】BCD S(107)結(jié)果:S=【0001
28、0000 0111】BCD ,由于高四位加6后,向更高位有進(jìn)位1,其實(shí)也就是向百位有進(jìn)位,所以最后的結(jié)果應(yīng)為107。 3BCD碼減法 BCD碼在進(jìn)行減法運(yùn)算時(shí),也會(huì)出現(xiàn)需要修正的現(xiàn)象,其修正條件和方法如下:(1)低四位向高四位有借位,低四位減6修正。(2)高四位向更高位有借位,高四位減6修正。(3)低四位出現(xiàn)非法BCD碼,低四位減6修正。(4)高四位出現(xiàn)非法BCD碼,高四位減6修正。(5)若同一個(gè)四位出現(xiàn)兩種修正條件,則只需修正一次即可。 【例1-9】已知X=【0010 0010】BCD,Y=【0001 0001】BCD,求S=X-Y。解:【0010 0010】BCD X(22)-【0001
29、0001】BCD Y(11)【0001 0001】BCD S(11);不滿足修正條件,無(wú)需修正 【例1-10】已知X=【0010 0001】BCD,Y=【0101 1001】BCD,求S=X-Y。解:【0010 0001】BCD X(21)-【0101 1001】BCD Y(59)【1100 1000】BCD ;滿足(1)、(2)、(4)修正條件,進(jìn)行減6修正- 0110 0110 1(借位)【0110 0010】BCD S(62)BCD碼是無(wú)符號(hào)數(shù),這里的結(jié)果S=62,不符合條件,但是,由于向更高位(百位)借位了,所以,結(jié)果應(yīng)該是62-100 = -38。 4ASCII碼 在計(jì)算機(jī)中,除了處
30、理數(shù)字信息外,還必須處理用來(lái)組織、控制或表示數(shù)據(jù)的字母和符號(hào),這些字母或符號(hào)也必須按照特定的規(guī)則用二進(jìn)制來(lái)編碼。 目前這種編碼規(guī)則普遍采用的是ASCII碼(American Standard Code for Information Interchange,美國(guó)信息交換標(biāo)準(zhǔn)碼),由7位二進(jìn)制碼組成,可以表示128個(gè)字符,包括數(shù)字(09)、大小寫英文字母、標(biāo)點(diǎn)符號(hào)和控制字符,具體如表1-3所示。表1-3 ASCII編碼表 根據(jù)此表,我們應(yīng)該掌握以下幾點(diǎn):(1)根據(jù)已知道某個(gè)數(shù)字、字母、標(biāo)點(diǎn)符號(hào)或控制字符,能夠找出其ASCII碼。(2)大寫英文字母的ASCII碼比小寫英文字母的ASCII碼小20H
31、,如,“A”的ASCII碼為41H,“a”的ASCII碼為61H。(3)數(shù)字09的ASCII碼為30H39H。1.4 習(xí) 題 1PC機(jī)和單片機(jī)都是屬于微型機(jī),它們之間有什么區(qū)別?2簡(jiǎn)述單片機(jī)的特點(diǎn)及主要應(yīng)用領(lǐng)域,并舉例說(shuō)明。3MCS-51單片機(jī)的51子系列和52子系列有哪些主要區(qū)別?4單片機(jī)系統(tǒng)的硬件組成由哪幾部分組成?并說(shuō)明各個(gè)部分的主要功能。5什么叫總線?總線可以分為哪幾種?6堆棧的操作原則是什么?如何來(lái)確定堆棧的棧底地址?7機(jī)器語(yǔ)言、匯編語(yǔ)言和高級(jí)語(yǔ)言各有什么優(yōu)缺點(diǎn)?8在8位單片機(jī)中,有符號(hào)數(shù)的正負(fù)號(hào)如何表示?9原碼、反碼、補(bǔ)碼之間的換算關(guān)系是怎么樣的?10什么叫BCD碼?BCD碼和二進(jìn)
32、制碼之間有何區(qū)別? 11分別求出下列各數(shù)的原碼、反碼和補(bǔ)碼,分別用二進(jìn)制和十六進(jìn)制數(shù)表示。(1)+37(2)-54(3)+121(4)-21612將下列數(shù)轉(zhuǎn)換成BCD碼。(1)123(2)864(3)56.75(4)34913已知十進(jìn)制數(shù)X、Y,求S=X+Y,用十六進(jìn)制表示。(1)X=45,Y=89;(2)X=-65,Y=78;(3)X=-76,Y=34。 14已知BCD碼X、Y,求S=X+Y,T=X-Y。(1)X=【0011 0100】BCD,Y=【0101 0010】BCD (2)X=【0101 0110】BCD,Y=【0010 1001】BCD (3)X=【1000 0110】BCD,Y
33、=【0100 0010】BCD 15查表寫出下列字符的ASCII碼。(1)D(2)7(3)?(4)e第2章 MCS-51單片機(jī)硬件與系統(tǒng)擴(kuò)展2.1 MCS-51外部引腳2.2 P0、P1、P2、P3口的內(nèi)部結(jié)構(gòu)及使用2.3 單片機(jī)內(nèi)部硬件資源2.4 時(shí)鐘與復(fù)位電路2.5 單片機(jī)系統(tǒng)擴(kuò)展2.6 習(xí) 題 對(duì)于硬件系統(tǒng)設(shè)計(jì)人員來(lái)說(shuō),掌握單片機(jī)硬件資源是十分重要的,只有熟悉了單片機(jī)的硬件“家底”,才能合理安排、正確使用現(xiàn)有資源,并做到物盡其用。MCS-51單片機(jī)是美國(guó)Intel公司的產(chǎn)品,但在實(shí)際應(yīng)用時(shí)常常選用美國(guó)ATMEL公司的產(chǎn)品,如AT89C51/52(40腳)和AT89C2051(20腳)。A
34、TMEL公司AT系列單片機(jī)相當(dāng)于Intel公司單片機(jī)的Flash版本,兩者硬件結(jié)構(gòu)相同,指令兼容,但Flash版本可以使程序的修改、調(diào)整更加方便,所以ATMEL公司的產(chǎn)品幾乎成了MSC-51系列單片機(jī)的主流。2.1 MCS-51外部引腳 AT89C51/52的外部有40個(gè)腳(與8051/8751相同,如圖2-1所示),這些管腳根據(jù)功能可以將它們分成三大組:1系統(tǒng)工作必需的引腳(5個(gè)腳)VCC(40腳)、VSS(20腳):電源5V和地(AT89LV系列芯片可以工作在2.7V6V)。RST/VPD(9腳):RST即為RESET的縮寫,VPD為備用電源。該引腳為單片機(jī)的上電復(fù)位或掉電保護(hù)端。當(dāng)單片機(jī)
35、振蕩器工作時(shí),該引腳上出現(xiàn)持續(xù)兩個(gè)機(jī)器周期的高電平,可以使單片機(jī)回復(fù)到初始狀態(tài)(復(fù)位)。上電時(shí),考慮到振蕩器有一定的起振時(shí)間,該引腳上高電平必須持續(xù)10 ms以上才能保證有效復(fù)位。XTAL1、XTAL2:接晶振,實(shí)際使用時(shí)還需加兩個(gè)30pF的補(bǔ)償電容,常用晶振頻率有6MHz、12 MHz和11.0592 MHz,AT89C51/52最高工作頻率達(dá)24 MHz。上述管腳的電壓或波形不滿足要求的話,系統(tǒng)無(wú)法工作,一般表現(xiàn)為無(wú)法啟動(dòng)。2與外部電路聯(lián)絡(luò)的腳(32個(gè)腳)P0:在擴(kuò)展時(shí)作為數(shù)據(jù)總線/地址低8位線,擴(kuò)展不用時(shí)可以作為用戶I/O線。P1:僅作用戶I/O口。P2:在擴(kuò)展時(shí)作為地址高8位線,擴(kuò)展不
36、用時(shí)作為用戶I/O線。P3:首先保證第二功能(如表2-1所示),若第二功能不用,則可作為用戶I/O線。 3控制腳(3個(gè)腳)(1)/VPP(31腳):為片內(nèi)、片外ROM選擇控制腳,具體如圖2-2所示,早期的8031等內(nèi)部沒(méi)有ROM,故使用時(shí)接地,目前AT89C51/52內(nèi)部均有ROM(Flash),所以使用時(shí)直接接VCC。對(duì)于EPROM型單片機(jī)(如8751),在編程期間該腳用于提供編程電壓(VPP)。圖2-2 MCS-51程序存儲(chǔ)器結(jié)構(gòu)(2)ALE/PROG(30腳):地址鎖存有效信號(hào)輸出端。ALE在每個(gè)機(jī)器周期內(nèi)輸出兩個(gè)脈沖,在訪問(wèn)片外程序存儲(chǔ)器期間,下降沿用于控制鎖存P0輸出的低8位地址;在
37、不訪問(wèn)片外程序存儲(chǔ)器期間,可作為對(duì)外輸出的時(shí)鐘脈沖或用于定時(shí)目的,但要注意,在訪問(wèn)片外數(shù)據(jù)存儲(chǔ)器期間,ALE脈沖會(huì)跳空一個(gè),此時(shí)作為時(shí)鐘輸出就不妥了。對(duì)于片內(nèi)含有EPROM的機(jī)型,在編程期間,該引腳用作編程脈沖PROG的輸入端。(3)(29腳):片外程序存儲(chǔ)器讀選通信號(hào)輸出端,低電平有效。當(dāng)從外部程序存儲(chǔ)器讀取指令或常數(shù)期間,每個(gè)機(jī)器周期該信號(hào)兩次有效,以通過(guò)數(shù)據(jù)總線P0口讀回指令或常數(shù)。要注意的是該腳與外部數(shù)據(jù)存儲(chǔ)器的讀、寫無(wú)關(guān)。用于控制的腳其實(shí)還有P3口的、,它們用于外部數(shù)據(jù)存儲(chǔ)器及I/O的讀、寫控制。盡管控制線數(shù)量不多,但在應(yīng)用系統(tǒng)中擔(dān)當(dāng)著十分重要的角色,在系統(tǒng)擴(kuò)展部分我們可以體會(huì)這一點(diǎn)
38、。2.2 P0、P1、P2、P3口的內(nèi)部結(jié)構(gòu)及使用 2.2.1 P0口的內(nèi)部結(jié)構(gòu)及使用特點(diǎn)由圖2-3可見(jiàn),電路中包含一個(gè)數(shù)據(jù)輸出鎖存器、兩個(gè)三態(tài)數(shù)據(jù)輸入緩沖器、一個(gè)數(shù)據(jù)輸出的驅(qū)動(dòng)電路和一個(gè)輸出控制電路。當(dāng)對(duì)P0口進(jìn)行寫操作時(shí),由鎖存器和驅(qū)動(dòng)電路構(gòu)成數(shù)據(jù)輸出通路。由于通路中已有輸出鎖存器,因此數(shù)據(jù)輸出時(shí)可以與外設(shè)直接連接,而不需再加數(shù)據(jù)鎖存電路。圖2-3 P0口一位結(jié)構(gòu)圖 在P0口的內(nèi)部有一個(gè)多路轉(zhuǎn)接電路MUX,在控制信號(hào)的作用下,多路轉(zhuǎn)接電路可以分別接通鎖存器輸出或地址/數(shù)據(jù)線,使P0口作為外部擴(kuò)展時(shí)的數(shù)據(jù)總線/兼地址低8位線。另外,P0口結(jié)構(gòu)的一大特點(diǎn)(不同于P1、P2、P3口)為輸出電路是
39、漏極開(kāi)路電路,當(dāng)P0口進(jìn)行一般的I/O輸出時(shí)必須外接上拉電阻才能有高電平輸出。當(dāng)P0口進(jìn)行一般的I/O輸入時(shí),必須先向電路中的鎖存器寫入“1”,使場(chǎng)效應(yīng)管V2截止,以避免V2導(dǎo)通對(duì)引腳讀入的影響。2.2.2 P1口的內(nèi)部結(jié)構(gòu)及使用特點(diǎn) 因?yàn)镻1口通常是作為通用I/O口使用的,所以在電路結(jié)構(gòu)上與P0口有一些不同之處,如圖2-4所示。首先它不再需要多路轉(zhuǎn)接電路MUX;其次是電路的內(nèi)部有上拉電阻,與場(chǎng)效應(yīng)管共同組成輸出驅(qū)動(dòng)電路。為此,P1口作為輸出口使用時(shí),無(wú)需再外接上拉電阻。圖2-4 P1口一位結(jié)構(gòu)圖2.2.3 P2口的內(nèi)部結(jié)構(gòu)及使用特點(diǎn)如圖2-5所示,P2口電路比P1口電路多了一個(gè)多路轉(zhuǎn)接電路M
40、UX,這又正好與P0口一樣。P2口可以作為通用I/O口使用,這時(shí)多路轉(zhuǎn)接電路開(kāi)關(guān)倒向鎖存器Q端,同時(shí)又可作為高位地址線使用,此時(shí)多路轉(zhuǎn)接電路開(kāi)關(guān)應(yīng)倒向“地址”位置。圖2-5 P2口一位結(jié)構(gòu)圖2.2.4 P3口的內(nèi)部結(jié)構(gòu)及使用特點(diǎn) P3口的特點(diǎn)在于,為適應(yīng)引腳信號(hào)第二功能的需要,增加了第二功能控制邏輯。由于第二功能信號(hào)有輸入和輸出兩類,因此分兩種情況說(shuō)明,結(jié)構(gòu)如圖2-6所示。對(duì)于第二功能為輸出的信號(hào)引腳,當(dāng)作為I/O使用時(shí),第二功能信號(hào)引線應(yīng)保持高電平,與非門開(kāi)通,以維持從鎖存器到輸出端數(shù)據(jù)輸出通路的暢通。圖2-6 P3口一位結(jié)構(gòu)圖 對(duì)于第二功能為輸入的信號(hào)引腳,在口線的輸入通路上增加了一個(gè)緩沖
41、器,輸入的第二功能信號(hào)就從這個(gè)緩沖器的輸出端取得。而作為I/O使用的數(shù)據(jù)輸入,仍取自三態(tài)緩沖器的輸出端。不管是作為輸入口使用還是第二功能信號(hào)輸入,輸出電路中的鎖存器輸出和第二功能輸出信號(hào)線都應(yīng)保持高電平。P3口作為輸入使用時(shí),也必須先寫“1”,讓輸出電路的場(chǎng)效應(yīng)管截止。2.2.5 P0、P1、P2、P3作I/O使用實(shí)例1驅(qū)動(dòng)LED實(shí)例 驅(qū)動(dòng)LED,幾乎是每個(gè)應(yīng)用系統(tǒng)中都會(huì)碰到的,分為低電平點(diǎn)亮和高電平點(diǎn)亮兩種。在高電平時(shí),由于端口內(nèi)部結(jié)構(gòu)決定了輸出的電流不到1mA(使用時(shí)常常會(huì)在這里出錯(cuò),認(rèn)為既然是高電平就一定能點(diǎn)亮LED),而允許輸入的電流可以達(dá)20mA 左右,因此兩種驅(qū)動(dòng)LED的電路在結(jié)構(gòu)
42、上會(huì)有較大差別。圖2-7(a)是低電平驅(qū)動(dòng)LED的電路,LED上的電流可以用以下公式計(jì)算:I = (5-1.8) / R+5VR3+5V其中1.8V是普通型LED的壓降。圖2-7(b)是高電平驅(qū)動(dòng)LED的電路,電流由R3決定。圖2-7(c)是錯(cuò)誤的高電平驅(qū)動(dòng)電路(輸出電流太?。?圖2-7 驅(qū)動(dòng)LED電路 圖2-7 驅(qū)動(dòng)LED電路(續(xù))2驅(qū)動(dòng)繼電器實(shí)例 繼電器的驅(qū)動(dòng),從電平角度來(lái)說(shuō)也有高電平驅(qū)動(dòng)和低電平驅(qū)動(dòng)兩種,但實(shí)際使用的繼電器的工作電壓都是9 V、12 V甚至更高,所以除了考慮驅(qū)動(dòng)電流是否足夠(繼電器所需的驅(qū)動(dòng)電流可用繼電器的標(biāo)稱工作電壓除以標(biāo)稱電阻來(lái)估算,常見(jiàn)的大約在40 mA60 mA
43、,所以不管哪種結(jié)構(gòu)都需要三極管等電流放大電路)外,還要考慮低電平、高電平哪種驅(qū)動(dòng)更容易實(shí)現(xiàn)。 圖2-8(a)是常常會(huì)犯錯(cuò)誤的所謂低電平驅(qū)動(dòng)電路,盡管低電平時(shí)繼電器確實(shí)能工作,但當(dāng)輸出為高電平而想使繼電器截止時(shí),結(jié)果卻無(wú)法跳開(kāi),好像被粘住一樣,原因是CPU輸出的高電平只有5 V,而繼電器的供電有12 V,而且這時(shí)繼電器的供電12 V將有可能使CPU損壞(在使用芯片時(shí)不允許輸入端的電壓超過(guò)電源電壓)。圖2-8(b)是用高電平驅(qū)動(dòng)的電路,圖2-8(c)是低電平驅(qū)動(dòng)。在需要同時(shí)驅(qū)動(dòng)的繼電器數(shù)量比較多時(shí),可以選用專用的驅(qū)動(dòng)芯片ULN2003A/ULN2003,其內(nèi)部含有7路獨(dú)立的驅(qū)動(dòng)電路(還包含了繼電器
44、線包回路的續(xù)流二極管),使用起來(lái)十分方便。 (a) (b) (c)圖2-8 驅(qū)動(dòng)繼電器電路 3光耦器件的接口電路 單片機(jī)應(yīng)用在強(qiáng)電系統(tǒng)時(shí),為提高抗干擾能力,隔離輸出級(jí)帶來(lái)的干擾和不安全性,常常使用光耦器件作為接口,常用光耦器件的內(nèi)部結(jié)構(gòu)如圖2-9所示。圖2-9 常用光耦內(nèi)部結(jié)構(gòu) 光耦器件的接口實(shí)例如圖2-10所示。圖中的7407是用來(lái)增加驅(qū)動(dòng)能力的P1口為低電平時(shí)光耦導(dǎo)通,負(fù)載得電而工作。圖2-10 光耦接口應(yīng)用實(shí)例2.3 單片機(jī)內(nèi)部硬件資源圖2-11是MCS-51單片機(jī)的內(nèi)部結(jié)構(gòu)框圖,從圖中可以看出,單片機(jī)內(nèi)部主要包括: 圖2-11 單片機(jī)內(nèi)部結(jié)構(gòu)框圖(1)一個(gè)8位CPU(含運(yùn)算器、控制器)
45、。(2)一個(gè)片內(nèi)振蕩器及時(shí)鐘電路。(3)片內(nèi)存儲(chǔ)器(RAM和ROM,AT89C系列是Flash)。(4)特殊功能寄存器(SFR)。(5)4個(gè)8位并行I/O口(P0、P1、P2、P3)。(6)一個(gè)全雙工可編程串行口。(7)定時(shí)器/計(jì)數(shù)器中斷系統(tǒng)。 2.3.1 片內(nèi)程序存儲(chǔ)器 在MCS-51單片機(jī)系列中,8031、8032內(nèi)部沒(méi)有程序存儲(chǔ)器,8051/8751/AT89C51內(nèi)部有4K的程序存儲(chǔ)器,8052/8752/AT89C52內(nèi)部有8K的程序存儲(chǔ)器。程序存儲(chǔ)器有不同版本,有些是ROM,如8051/8052等;有些是EPROM,如8751/8752等;有些是Flash,如AT89C51/AT8
46、9C52等。程序存儲(chǔ)器主要用來(lái)存放程序,同時(shí)也常常用來(lái)存放數(shù)據(jù)表格(通過(guò)DB指令建立數(shù)碼管字型表等),在具體存放程序和建立數(shù)據(jù)表格時(shí)應(yīng)該注意,程序存儲(chǔ)器的部分空間的使用是有規(guī)定的,主要如下。(1)0000H:稱為復(fù)位入口地址,系統(tǒng)復(fù)位后,程序計(jì)數(shù)器PC的內(nèi)容為0000H,程序就從0000H開(kāi)始重新執(zhí)行。(2)0003H:外部中斷0入口地址,當(dāng)外部中斷0發(fā)生且被響應(yīng)后,CPU將停止原來(lái)的程序(會(huì)自動(dòng)記錄停止時(shí)的程序位置,以便“回來(lái)”后能“繼續(xù)工作”),程序直接轉(zhuǎn)入0003H這個(gè)入口地址,進(jìn)而執(zhí)行中斷后需要執(zhí)行的任務(wù),0003H又稱為外部中斷0矢量地址。(3)000BH:定時(shí)器T0中斷入口地址。(
47、4)0013H:外部中斷1入口地址。(5)001BH:定時(shí)器T1中斷入口地址。(6)0023H:串行口中斷入口地址。 在上述入口地址區(qū)域不能放置用戶的程序和建立數(shù)據(jù)表格,原因是:由于兩個(gè)中斷入口地址間僅有8個(gè)單元(如0003H到000BH),用來(lái)存放中斷發(fā)生后的用戶程序(一般稱中斷服務(wù)程序)顯然是不夠的,我們將中斷服務(wù)程序放在程序存儲(chǔ)器的其他“自由”空間,在這些入口地址放一條跳轉(zhuǎn)指令(如:LJMP XXXX,其中“XXXX”就是實(shí)際中斷服務(wù)程序的起始地址或標(biāo)號(hào)),由這條跳轉(zhuǎn)指令去“找到”實(shí)際的中斷服務(wù)程序。2.3.2 片內(nèi)部數(shù)據(jù)存儲(chǔ)器圖2-12是單片機(jī)內(nèi)部數(shù)據(jù)存儲(chǔ)器結(jié)構(gòu)框圖,對(duì)于8031/80
48、51/8751/AT89C51,內(nèi)部有128 B(00H7 FH)的數(shù)據(jù)存儲(chǔ)器,80H地址以上的空間離散分布著SFR(特殊功能寄存器),沒(méi)有用戶可用的RAM;對(duì)于8032/8052/8752/AT89C52,內(nèi)部有256B數(shù)據(jù)存儲(chǔ)器,00H7FH的單元與8051等相同,但在80H地址以上的空間則既有SFR(采用寄存器或直接尋址),同時(shí)也有用戶可用的RAM(采用寄存器間接尋址)。 圖2-12 內(nèi)部數(shù)據(jù)存儲(chǔ)器結(jié)構(gòu)1通用工作寄存器區(qū) 地址00H1FH的空間為通用工作寄存器區(qū),32個(gè)單元又可以分成4個(gè)組,分別如下。(1)00H07H:工作寄存器0組,符號(hào)為R0R7。(2)08H0FH:工作寄存器1組,
49、符號(hào)為R0R7。(3)10H17H:工作寄存器2組,符號(hào)為R0R7。(4)18H1FH:工作寄存器3組,符號(hào)為R0R7。上述4個(gè)組的寄存器符號(hào)都為R0R7,也就是說(shuō),一個(gè)符號(hào)(如R0)可以對(duì)應(yīng)4個(gè)單元(如00H、08H、10H、18H),使用時(shí)是否會(huì)混淆呢?當(dāng)然不會(huì),因?yàn)樵谑褂玫娜魏螘r(shí)候只能選中一個(gè)組,到底使用哪個(gè)組,由特殊功能寄存器PSW來(lái)指定(見(jiàn)SFR部分介紹)。2位尋址區(qū) 什么是位尋址區(qū)呢?可以這么來(lái)理解,這些區(qū)除了每個(gè)單元都有確定的單元地址外,單元內(nèi)的8位數(shù)的每個(gè)位置也有地址。要理解這點(diǎn)我們不妨打個(gè)比方:一個(gè)單元好像一間宿舍,單元的地址對(duì)應(yīng)宿舍的房間號(hào),而位則對(duì)應(yīng)宿舍內(nèi)的床,位地址正好
50、對(duì)應(yīng)床鋪號(hào),位尋址區(qū)的地址如表2-2所示。單元地址MSB 位 地 址 LSB2FH7F7E7D7C7B7A79782EH77767574737271702DH6F6E6D6C6B6A69682CH67666564636261602BH5F5E5D5C5B5A59582AH575655545352515029H4F4E4D4C4B4A494828H474645444342414027H3F3E3D3C3B3A393826H373635343332313025H2F2E2D2C2B2A292824H272625242322212023H1F1E1D1C1B1A191822H171615141312
51、111021H0F0E0D0C0B0A090820H0706050403020100 位尋址區(qū)比普通用戶RAM相比具有的優(yōu)點(diǎn)是,它具有位尋址功能,常常用來(lái)做標(biāo)記,同時(shí)利用位操作功能可以使程序更加簡(jiǎn)單,除了位尋址區(qū)有位地址之外,特殊功能寄存(SFR)中地址末位是0H或8H的12個(gè)單元也有位地址。在使用位地址時(shí),容易與單元地址混淆,如地址“20H”,既可以理解成單元的地址,也可以理解成24H單元中的一個(gè)位地址(見(jiàn)表2-2倒數(shù)第5行),具體是指單元地址還是位地址,除了看文字表述外,在指令中看指令的類型和含義就可知道了。3用戶RAM區(qū) 30H7FH之間是普通的用戶RAM。對(duì)于8032/8052/875
52、2/AT89C52還包括80HFFH空間,這里的單元沒(méi)有通用寄存器中的符號(hào)(即具有寄存器尋址功能),也沒(méi)有位尋址區(qū)中的位地址,每個(gè)單元只有一個(gè)特定的地址與之相對(duì)應(yīng)。需要強(qiáng)調(diào)的是,30H7FH可以采用直接尋址和寄存器間接尋址,而80HFFH只能通過(guò)寄存器間接尋址,不能采用直接尋址。4特殊功能寄存器區(qū) 特殊功能寄存器簡(jiǎn)稱SFR(Special Function Register),在單片機(jī)中扮演著十分重要的角色。它們離散地分布在地址為80HFFH的空間中,特殊功能寄存器地址表如表2-3所示,這里先介紹幾個(gè)常用的特殊功能寄存器,其余的在相關(guān)章節(jié)應(yīng)用時(shí)介紹。 (1)累加器ACC(E0H):累加器ACC
53、(Accumulator)為8位寄存器,助記符記作A,是最常用、最繁忙的專用寄存器,所有的運(yùn)算結(jié)果最終都放在ACC中,許多功能的實(shí)現(xiàn)必須由A來(lái)完成,如與外部RAM的數(shù)據(jù)傳送等。(2)寄存器B(F0H):寄存器B是一個(gè)專門為乘法、除法運(yùn)算設(shè)置的,在乘法、除法運(yùn)算中由A和B來(lái)完成,所以寄存器B又稱為乘法除法寄存器。(3)程序狀態(tài)寄存器PSW(D0H):PSW(Program Status Word)用來(lái)存放程序運(yùn)行后的各種標(biāo)志或狀態(tài),供程序查詢或判斷用。內(nèi)部8位的具體定義如下:D7HD6HD5HD4HD3HD2HD1HD0HCyACF0RS1RS0OVF1PCy(PSW.7)進(jìn)位標(biāo)志位。Cy是PS
54、W中最常用的標(biāo)志位。其功能有二:一是存放算術(shù)運(yùn)算的進(jìn)位標(biāo)志,在進(jìn)行加或減運(yùn)算時(shí),如果操作結(jié)果的最高位有進(jìn)位或借位時(shí),Cy由硬件置“1”,否則被清“0”;二是在位操作中,作累加位使用。AC(PSW.6)輔助進(jìn)位標(biāo)志位。在進(jìn)行加減運(yùn)算中,當(dāng)?shù)?位向高4位進(jìn)位或借位時(shí),AC由硬件置“1”,否則AC位被清“0”。在BCD碼調(diào)整中也要用到AC位狀態(tài)。F0(PSW.5)用戶標(biāo)志位。這是一個(gè)供用戶定義的標(biāo)志位,需要利用軟件方法置位或復(fù)位,用以控制程序的轉(zhuǎn)向。RS1和RS0(PSW.4,PSW.3)寄存器組選擇位。它們被用于選擇CPU當(dāng)前使用的通用寄存器組號(hào),其對(duì)應(yīng)關(guān)系如表2-4所示。RS1 RS0寄 存 器
55、 組片內(nèi)RAM地址0 0第0組00H07H0 1第1組08H0FH1 0第2組10H17H1 1第3組18H1FH表2-4 寄存器組選擇表OV:做加法或減法時(shí),由硬件置位或清零,以指示運(yùn)算結(jié)果是否溢出。OV=1反映運(yùn)算結(jié)果超出了累加器的數(shù)值范圍(無(wú)符號(hào)數(shù)的范圍為0255,以補(bǔ)碼形式表示一個(gè)有符號(hào)數(shù)的范圍為-128+127)。進(jìn)行無(wú)符號(hào)數(shù)的加法或減法時(shí),OV的值與進(jìn)位位C的值相同;進(jìn)行有符號(hào)數(shù)的加法時(shí),如最高位、次高位之一有進(jìn)位,或做減法時(shí),如最高位、次高位之一有借位,OV被置位,即OV的值為最高位和次高位的異或(C7C6)。P(PSW.0)奇偶標(biāo)志位。表明累加器A中內(nèi)容的奇偶性,如果A中有奇數(shù)
56、個(gè)“1”,則P置“1”,否則置“0”。凡是改變累加器A中內(nèi)容的指令均會(huì)影響P標(biāo)志位。此標(biāo)志位對(duì)串行通信中的數(shù)據(jù)傳輸有重要的意義,在串行通信中常采用奇偶校驗(yàn)的辦法來(lái)校驗(yàn)數(shù)據(jù)傳輸?shù)目煽啃?。?)數(shù)據(jù)指針DPTR(83H、82H):數(shù)據(jù)指針是單片機(jī)中唯一一個(gè)用戶可操作的16位寄存器。編程時(shí),DPTR既可以按16位寄存器使用,也可以將兩個(gè)8位寄存器分開(kāi)使用,即:DPH(83H)代表DPTR高位字節(jié)DPL(82H)代表DPTR低位字節(jié)DPTR通常在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器、外部I/O端口時(shí)作地址指針使用(把地址賦值給DPTR),也在程序存儲(chǔ)器進(jìn)行查表時(shí)作基址,DPTR的尋址范圍為64 KB(216)。(5)堆
57、棧指針SP(81H):堆棧操作是在內(nèi)存RAM區(qū)專門開(kāi)辟出來(lái)的按照“先進(jìn)后出”原則進(jìn)行數(shù)據(jù)存取的一種工作方式,主要用于子程序調(diào)用及返回、中斷處理斷點(diǎn)的保護(hù)及返回,它在完成子程序嵌套和多重中斷處理中是必不可少的。為保證逐級(jí)正確返回,進(jìn)入棧區(qū)的“斷點(diǎn)”數(shù)據(jù)應(yīng)遵循“先進(jìn)后出”的原則。SP用來(lái)指示堆棧所處的位置,在進(jìn)行操作之前,先用指令給SP賦值,以規(guī)定棧區(qū)在RAM區(qū)的起始地址(棧底層)。當(dāng)數(shù)據(jù)推入棧區(qū)后,SP的值也自動(dòng)隨之變化。MCS-51單片機(jī)系統(tǒng)復(fù)位后,SP初始化為07H(在通用寄存器區(qū)0組R7),實(shí)際編程時(shí),最好先將SP設(shè)置到RAM地址的高端,如對(duì)于8031/8051/8751/AT89C51等
58、,設(shè)置在60H以上。對(duì)于8032/8052/8752/AT89C52則設(shè)置成A0H等。如SP不在RAM地址的高端,則很容易破壞用戶放在RAM中的臨時(shí)數(shù)據(jù),程序調(diào)試時(shí),這種錯(cuò)誤相對(duì)比較隱蔽,不太容易被發(fā)現(xiàn)。綜上所述,片內(nèi)數(shù)據(jù)存儲(chǔ)器可以用表2-5表示。表2-5 MCS-51 片內(nèi)RAM結(jié)構(gòu)地 址 范 圍功能或名稱80HFFHSFR、數(shù)據(jù)緩沖區(qū)30H7FH數(shù)據(jù)緩沖區(qū)20H2FH位尋址區(qū)18H1FH工作寄存器3組,R0R710H17H工作寄存器2組,R0R708H0FH工作寄存器1組,R0R700H07H工作寄存器0組,R0R7(6)程序計(jì)數(shù)器PC:PC(Program Counter)是一個(gè)16位專
59、用寄存器,可尋址范圍是0000H0FFFFH,共64 KB。PC用于存放CPU下一條要執(zhí)行的指令地址,CPU 要執(zhí)行哪條指令時(shí),就把該條指令所在的單元的地址送上地址總線。在順序執(zhí)行程序中,當(dāng)PC的內(nèi)容被送到地址總線后會(huì)自動(dòng)加1,即(PC) (PC)+1,又指向CPU 下一條要執(zhí)行的指令地址。需要注意的是用戶無(wú)法通過(guò)指令改變PC中的數(shù)值,也即PC是不可操作的。 2.4.1 時(shí)鐘與時(shí)序1時(shí)鐘 單片機(jī)內(nèi)部每個(gè)部件要想?yún)f(xié)調(diào)一致地工作,必須在統(tǒng)一口令時(shí)鐘信號(hào)的控制下工作。單片機(jī)工作所需要的時(shí)鐘信號(hào)有兩種產(chǎn)生方式,即內(nèi)部時(shí)鐘方式和外部時(shí)鐘方式。圖2-13(a)是內(nèi)部時(shí)鐘方式:?jiǎn)纹瑱C(jī)內(nèi)部有一個(gè)用于構(gòu)成振蕩器
60、的高增益反相放大器,引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端,這個(gè)放大器與作為反饋元件的片外晶振一起構(gòu)成自激振蕩器。在該圖中,電容C1和C2取30 pF左右,晶體的振蕩頻率范圍是1.2 MHz12 MHz(AT89C51/52最高工作頻率達(dá)24 MHz),晶體振蕩頻率高,則系統(tǒng)的時(shí)鐘頻率也高,單片機(jī)運(yùn)行速度也就快。在通常應(yīng)用情況下,MCS-51單片機(jī)使用振蕩頻率為6 MHz或12 MHz,在通信系統(tǒng)中則常用11.0592 MHz,這樣可使誤差最小。 圖2-13(b)是外部時(shí)鐘方式:時(shí)鐘信號(hào)來(lái)自外部的振蕩電路(大多數(shù)情況是來(lái)自另外單片機(jī)的時(shí)鐘信號(hào),以保持多片CPU工作同步),外接
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度磚渣清運(yùn)與建筑廢棄物處理設(shè)施建設(shè)合同
- 2025年度汽車零部件展覽展示技術(shù)服務(wù)合同
- 二零二五年度多式聯(lián)運(yùn)托盤租賃及信息共享合同
- 2025年度對(duì)講機(jī)技術(shù)支持與服務(wù)合同
- 二零二五年度智能駕駛車輛抵押融資合同
- 2025版水利工程設(shè)計(jì)咨詢與施工監(jiān)理合同4篇
- 2025年度運(yùn)輸貨物裝卸機(jī)械租賃合同協(xié)議書專業(yè)版
- 2025年度養(yǎng)老機(jī)構(gòu)設(shè)施改造升級(jí)工程合同
- 知識(shí)產(chǎn)權(quán)交易居間合同模板
- 二零二五年度包裝行業(yè)企業(yè)職工養(yǎng)老保險(xiǎn)集體勞動(dòng)合同
- 2024-2025學(xué)年上外版高二上學(xué)期期中英語(yǔ)試卷與參考答案
- 《學(xué)習(xí)地圖》課件
- 抓住人工智能科學(xué)機(jī)遇 A new golden age of discovery Seizing the AI for Science opportunity 2024
- 松材線蟲(chóng)調(diào)查培訓(xùn)
- 方志敏《可愛(ài)的中國(guó)》全文閱讀
- 2024年廣西區(qū)公務(wù)員錄用考試《行測(cè)》真題及答案解析
- 《地區(qū)智能電網(wǎng)調(diào)度技術(shù)支持系統(tǒng)應(yīng)用功能規(guī)范》
- 框架借款協(xié)議書(2篇)
- 物業(yè)防恐防暴演練課件
- DB12-T 3034-2023 建筑消防設(shè)施檢測(cè)服務(wù)規(guī)范
- 銷售人員崗位職責(zé)培訓(xùn)
評(píng)論
0/150
提交評(píng)論