官术网_书友最值得收藏!

第1章 發(fā)光二極管的單燈閃爍設(shè)計(jì)

教學(xué)導(dǎo)航

978-7-111-59346-1-Chapter01-1.jpg

1.1 單片機(jī)概述

單片微型計(jì)算機(jī)簡(jiǎn)稱為單片機(jī),是一種集成電路芯片,是采用超大規(guī)模集成電路技術(shù)把計(jì)算機(jī)系統(tǒng)集成到一塊硅片上構(gòu)成的一個(gè)小而完善的微型計(jì)算機(jī)系統(tǒng),包括具有數(shù)據(jù)處理能力的中央處理器CPU、隨機(jī)存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、多種I/O口和中斷系統(tǒng)、定時(shí)器/計(jì)時(shí)器等功能(可能還包括顯示驅(qū)動(dòng)電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A-D轉(zhuǎn)換器等電路),并且通過(guò)內(nèi)部的地址總線、數(shù)據(jù)總線和控制總線將各部分功能電路組合為一個(gè)整體,是典型的嵌入式微控制器(Microcontroller Unit,MCU)。單片機(jī)內(nèi)部結(jié)構(gòu)如圖1-1所示。

978-7-111-59346-1-Chapter01-2.jpg

圖1-1 單片機(jī)內(nèi)部結(jié)構(gòu)

單片機(jī)和計(jì)算機(jī)相比,只缺少了I/O設(shè)備。一塊芯片就成了一臺(tái)計(jì)算機(jī)。它的體積小、質(zhì)量輕、價(jià)格便宜,為學(xué)習(xí)、應(yīng)用和開(kāi)發(fā)提供了便利條件。同時(shí),學(xué)習(xí)使用單片機(jī)是了解計(jì)算機(jī)原理與結(jié)構(gòu)的最佳選擇。它最早是被用在工業(yè)控制領(lǐng)域。

由于單片機(jī)在工業(yè)控制領(lǐng)域的廣泛應(yīng)用,單片機(jī)由芯片內(nèi)僅有CPU的專用處理器發(fā)展而來(lái)。最早的設(shè)計(jì)理念是通過(guò)將大量外圍設(shè)備和CPU集成在一個(gè)芯片中,使計(jì)算機(jī)系統(tǒng)更小,更容易集成到復(fù)雜的而對(duì)體積要求嚴(yán)格的控制設(shè)備當(dāng)中。

現(xiàn)代人類生活中所用的每件電子和機(jī)械產(chǎn)品中幾乎都會(huì)集成有單片機(jī)。手機(jī)、電話、計(jì)算器、家用電器、電子玩具、掌上電腦以及鼠標(biāo)等計(jì)算機(jī)配件中都配有1~2片單片機(jī)。汽車上一般配備40多片單片機(jī),復(fù)雜的工業(yè)控制系統(tǒng)上甚至可能有數(shù)百臺(tái)單片機(jī)在同時(shí)工作。單片機(jī)的數(shù)量不僅遠(yuǎn)超過(guò)PC和其他計(jì)算機(jī)的總和,甚至比人類的數(shù)量還要多。

1.1.1 單片機(jī)的發(fā)展

單片機(jī)誕生于1971年,經(jīng)歷了SCM、MCU、SOC三大階段,由當(dāng)時(shí)的4位、8位單片機(jī),發(fā)展到現(xiàn)在的32位300M的高速單片機(jī)。

早期的SCM單片機(jī)都是8位或4位的。其中最成功的是INTEL的8031,此后在8031上發(fā)展出了MCS51系列MCU系統(tǒng)?;谶@一系統(tǒng)的單片機(jī)系統(tǒng)直到現(xiàn)在還在廣泛使用。隨著工業(yè)控制領(lǐng)域要求的提高,開(kāi)始出現(xiàn)了16位單片機(jī),但因?yàn)樾詢r(jià)比不理想并未得到很廣泛的應(yīng)用。20世紀(jì)90年代后隨著消費(fèi)電子產(chǎn)品大發(fā)展,單片機(jī)技術(shù)得到了巨大提高。隨著INTEL i960系列特別是后來(lái)的ARM系列的廣泛應(yīng)用,32位單片機(jī)迅速取代16位單片機(jī)的高端地位,并且進(jìn)入主流市場(chǎng)。

而傳統(tǒng)的8位單片機(jī)的性能也得到了飛速提高,處理能力比起20世紀(jì)80年代提高了數(shù)百倍。目前,高端的32位SOC單片機(jī)主頻已經(jīng)超過(guò)300MHz,性能直追20世紀(jì)90年代中期的專用處理器,而普通的型號(hào)出廠價(jià)格跌落至1美元,最高端的型號(hào)也只有10美元。

當(dāng)代單片機(jī)系統(tǒng)已經(jīng)不再只在裸機(jī)環(huán)境下開(kāi)發(fā)和使用,大量專用的嵌入式操作系統(tǒng)被廣泛應(yīng)用在全系列的單片機(jī)上。作為掌上計(jì)算機(jī)和手機(jī)核心處理的高端單片機(jī)甚至可以直接使用Windows和Linux操作系統(tǒng)。

1.1.2 單片機(jī)的應(yīng)用

目前單片機(jī)滲透到我們生活的各個(gè)領(lǐng)域,幾乎很難找到哪個(gè)領(lǐng)域沒(méi)有單片機(jī)的蹤跡。導(dǎo)彈的導(dǎo)航裝置電路板,飛機(jī)上各種儀表的控制,計(jì)算機(jī)的網(wǎng)絡(luò)通信與數(shù)據(jù)傳輸,工業(yè)自動(dòng)化過(guò)程的實(shí)時(shí)控制和數(shù)據(jù)處理,廣泛使用的各種智能IC卡,民用豪華轎車的安全保障系統(tǒng),錄像機(jī)、攝像機(jī)、全自動(dòng)洗衣機(jī)的控制以及程控玩具、電子寵物等,這些都離不開(kāi)單片機(jī)。更不用說(shuō)自動(dòng)控制領(lǐng)域的機(jī)器人、智能儀表、醫(yī)療器械以及各種智能機(jī)械了。單片機(jī)廣泛應(yīng)用于儀器儀表、家用電器、醫(yī)用設(shè)備、航空航天、專用設(shè)備的智能化管理及過(guò)程控制等領(lǐng)域,大致可分如下幾個(gè)范疇。

1.智能儀器

單片機(jī)具有體積小、功耗低、控制功能強(qiáng)、擴(kuò)展靈活、微型化和使用方便等優(yōu)點(diǎn),廣泛應(yīng)用于儀器儀表中,結(jié)合不同類型的傳感器,可實(shí)現(xiàn)諸如電壓、電流、功率、頻率、濕度、溫度、流量、速度、厚度、角度、長(zhǎng)度、硬度、元素以及壓力等物理量的測(cè)量。采用單片機(jī)控制使得儀器儀表數(shù)字化、智能化、微型化,且功能比起采用電子或數(shù)字電路更加強(qiáng)大。例如精密的測(cè)量設(shè)備(電壓表、功率計(jì)、示波器及各種分析儀等)。

2.工業(yè)控制

單片機(jī)具有體積小、控制功能強(qiáng)、功耗低、環(huán)境適應(yīng)能力強(qiáng)、擴(kuò)展靈活和使用方便等優(yōu)點(diǎn),用單片機(jī)可以構(gòu)成形式多樣的控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)、通信系統(tǒng)、信號(hào)檢測(cè)系統(tǒng)、無(wú)線感知系統(tǒng)、測(cè)控系統(tǒng)以及機(jī)器人等應(yīng)用控制系統(tǒng)。例如工廠流水線的智能化管理,電梯智能化控制、各種報(bào)警系統(tǒng),與計(jì)算機(jī)聯(lián)網(wǎng)構(gòu)成二級(jí)控制系統(tǒng)等。

3.家用電器

現(xiàn)在的家用電器廣泛采用了單片機(jī)控制,從電飯煲、洗衣機(jī)、電冰箱、空調(diào)機(jī)、彩色電視機(jī)、其他音響視頻器材,再到電子稱量設(shè)備和白色家用電器等。

4.網(wǎng)絡(luò)和通信

現(xiàn)代的單片機(jī)普遍具備通信接口,可以很方便地與計(jì)算機(jī)進(jìn)行數(shù)據(jù)通信,為在計(jì)算機(jī)網(wǎng)絡(luò)和通信設(shè)備間的應(yīng)用提供了極好的物質(zhì)條件,現(xiàn)在的通信設(shè)備基本上都實(shí)現(xiàn)了單片機(jī)智能控制,從手機(jī)、電話機(jī)、小型程控交換機(jī)、樓宇自動(dòng)通信呼叫系統(tǒng)、列車無(wú)線通信、再到日常工作中隨處可見(jiàn)的移動(dòng)電話、集群移動(dòng)通信、無(wú)線電對(duì)講機(jī)等。

5.醫(yī)用設(shè)備領(lǐng)域

單片機(jī)在醫(yī)用設(shè)備中的用途也相當(dāng)廣泛,例如醫(yī)用呼吸機(jī)、各種分析儀、監(jiān)護(hù)儀、超聲診斷設(shè)備及病床呼叫系統(tǒng)等。

6.模塊化系統(tǒng)

某些專用單片機(jī)設(shè)計(jì)用于實(shí)現(xiàn)特定功能,從而在各種電路中進(jìn)行模塊化應(yīng)用,而不要求使用人員了解其內(nèi)部結(jié)構(gòu)。如音樂(lè)集成單片機(jī),看似簡(jiǎn)單的功能,微縮在純電子芯片中(有別于磁帶機(jī)的原理),就需要復(fù)雜的類似于計(jì)算機(jī)的原理。如:音樂(lè)信號(hào)以數(shù)字的形式存于存儲(chǔ)器中(類似于ROM),由微控制器讀出,轉(zhuǎn)化為模擬音樂(lè)電信號(hào)(類似于聲卡)。

在大型電路中,這種模塊化應(yīng)用極大地縮小了體積,簡(jiǎn)化了電路,降低了損壞、錯(cuò)誤率,也方便于更換。

7.汽車電子

單片機(jī)在汽車電子中的應(yīng)用非常廣泛,例如汽車中的發(fā)動(dòng)機(jī)控制器,基于CAN總線的汽車發(fā)動(dòng)機(jī)智能電子控制器、GPS導(dǎo)航系統(tǒng)、ABS防抱死系統(tǒng)、制動(dòng)系統(tǒng)以及胎壓檢測(cè)等。

此外,單片機(jī)在工商、金融、科研、教育、電力、通信、物流和航空航天等領(lǐng)域都有著十分廣泛的用途。

1.1.3 單片機(jī)的分類

單片機(jī)作為計(jì)算機(jī)發(fā)展的一個(gè)重要分支領(lǐng)域,根據(jù)目前發(fā)展情況,從不同角度單片機(jī)大致可以分為通用型/專用型、總線型/非總線型及工控型/家用電器型。

1.通用型/專用型

這是按單片機(jī)適用范圍來(lái)區(qū)分的。例如,80C51是通用型單片機(jī),它不是為某種專門用途設(shè)計(jì)的;專用型單片機(jī)是針對(duì)一類產(chǎn)品甚至某一個(gè)產(chǎn)品設(shè)計(jì)生產(chǎn)的,例如為了滿足電子體溫計(jì)的要求,在片內(nèi)集成ADC接口等功能的溫度測(cè)量控制電路。

2.總線型/非總線型

這是按單片機(jī)是否提供并行總線來(lái)區(qū)分的??偩€型單片機(jī)普遍設(shè)置有并行地址總線、數(shù)據(jù)總線、控制總線,這些引腳用以擴(kuò)展,并行外圍器件都可通過(guò)串行口與單片機(jī)連接,另外,許多單片機(jī)已把所需要的外圍器件及外設(shè)接口集成在片內(nèi),因此在許多情況下可以不要并行擴(kuò)展總線,大大節(jié)省封裝成本和芯片體積,這類單片機(jī)稱為非總線型單片機(jī)。

3.控制型/家用電器型

這是按單片機(jī)大致應(yīng)用的領(lǐng)域進(jìn)行區(qū)分的。一般而言,工控型尋址范圍大,運(yùn)算能力強(qiáng);用于家用電器的單片機(jī)多為專用型,通常是小封裝、低價(jià)格,外圍器件和外設(shè)接口集成度高。

1.2 MCS-51單片機(jī)的基本結(jié)構(gòu)與功能

1.2.1 MCS-51單片機(jī)的基本組成結(jié)構(gòu)

MCS-51系列單片機(jī)內(nèi)部由CPU、RAM、ROM、定時(shí)/計(jì)數(shù)器、并行接口、串行接口、中斷系統(tǒng)和時(shí)鐘電路組成,MCS-51系列單片機(jī)的內(nèi)部結(jié)構(gòu)示意圖如圖1-2所示。

978-7-111-59346-1-Chapter01-3.jpg

圖1-2 MCS-51系列單片機(jī)的內(nèi)部結(jié)構(gòu)示意圖

1.CPU

中央處理器是單片機(jī)的核心,完成運(yùn)算和控制功能。MCS-51的CPU能處理8位二進(jìn)制數(shù)或代碼。

2.RAM

RAM用于存放計(jì)算和控制過(guò)程中的數(shù)據(jù),單元內(nèi)的數(shù)據(jù)可讀寫,掉電后信息會(huì)丟失。MCS-51芯片中共有256個(gè)RAM單元,但其中高128單元被專用寄存器占用,能作為寄存器供用戶使用的只是低128單元,用于存放可讀寫的數(shù)據(jù)。因此通常所說(shuō)的內(nèi)部數(shù)據(jù)存儲(chǔ)器就是指低128單元,簡(jiǎn)稱為內(nèi)部RAM。

3.ROM

MCS-51共有4KB內(nèi)部ROM,用于存放控制單片機(jī)工作的程序、原始數(shù)據(jù)或表格,掉電后不會(huì)丟失,稱為程序存儲(chǔ)器,簡(jiǎn)稱為內(nèi)部ROM。單片機(jī)工作之前必須先將編制好的應(yīng)用程序下載至芯片的ROM中。

4.定時(shí)/計(jì)數(shù)器

8051共有兩個(gè)16位的定時(shí)/計(jì)數(shù)器,實(shí)現(xiàn)對(duì)內(nèi)部時(shí)鐘或外部信號(hào)的計(jì)數(shù)功能。當(dāng)設(shè)定的定時(shí)/計(jì)數(shù)數(shù)值滿足一定的條件后,定時(shí)/計(jì)數(shù)器會(huì)做出標(biāo)記通知CPU,CPU響應(yīng)后完成相應(yīng)操作。

5.并行接口

MCS-51共有4個(gè)8位的I/O口(P0、P1、P2、P3),以實(shí)現(xiàn)數(shù)據(jù)的并行輸入/輸出。并行接口可以按8位并行方式使用,也可一位一位使用。

6.串行接口

MCS-51單片機(jī)有一個(gè)全雙工的串行口,提供與外部串行輸入/輸出設(shè)備的連接或通信,只能一位一位地使用。

7.中斷系統(tǒng)

中斷系統(tǒng)提高了單片機(jī)對(duì)外部意外事件的感知能力。當(dāng)外部某一事件發(fā)生時(shí),CPU能及時(shí)知道、響應(yīng)并進(jìn)行相應(yīng)的處理。8051共有5個(gè)中斷源,即外中斷兩個(gè),定時(shí)/計(jì)數(shù)中斷兩個(gè),串行口中斷一個(gè)。所有中斷可設(shè)置為高級(jí)和低級(jí)共兩個(gè)優(yōu)先級(jí)別。

8.時(shí)鐘電路

時(shí)鐘電路為單片機(jī)各部件的工作提供統(tǒng)一的時(shí)鐘,使各部件能在統(tǒng)一的節(jié)拍下進(jìn)行協(xié)調(diào)一致的工作。MCS-51芯片的內(nèi)部有時(shí)鐘電路,但石英晶體和微調(diào)電容需外接。系統(tǒng)允許的晶振頻率一般為6MHz和12MHz。

1.2.2 單片機(jī)引腳排列及功能

MCS-51系列單片機(jī)40引腳雙列直插式封裝(DIP-40)的外形及引腳排列如圖1-3所示。

978-7-111-59346-1-Chapter01-4.jpg

圖1-3 MCS-51單片機(jī)引腳及功能

1.輸入/輸出接口信號(hào)引腳

P0口:P0.0~P0.7,8位雙向I/O端口。

P1口:P1.0~P1.7,8位雙向I/O端口。

P2口:P2.0~P2.7,8位雙向I/O端口。

P3口:P3.0~P3.7,8位雙向I/O端口。

2.控制信號(hào)引腳

ALE:地址鎖存控制信號(hào)。ALE以晶振固定頻率的1/6輸出正脈沖。在系統(tǒng)擴(kuò)展時(shí),ALE用于控制P0口輸出的低8位地址鎖存,以實(shí)現(xiàn)低8位地址和數(shù)據(jù)的隔離。

978-7-111-59346-1-Chapter01-5.jpg N:外部程序存儲(chǔ)器的讀選通信號(hào)。在讀外部ROM時(shí),978-7-111-59346-1-Chapter01-6.jpg 有效(低電平),以實(shí)現(xiàn)外部ROM單元的讀取操作。

978-7-111-59346-1-Chapter01-7.jpg A:訪問(wèn)程序存儲(chǔ)器控制信號(hào)。當(dāng)978-7-111-59346-1-Chapter01-8.jpg 信號(hào)為低電平時(shí),對(duì)ROM的讀操作限定在外部程序存儲(chǔ)器;當(dāng)EA信號(hào)為高電平時(shí),對(duì)ROM的操作從內(nèi)部程序存儲(chǔ)器開(kāi)始,延至外部程序存儲(chǔ)器。

RST:復(fù)位信號(hào)。當(dāng)該引腳的信號(hào)為高電平,并延續(xù)兩個(gè)機(jī)器周期以上時(shí),完成單片機(jī)的復(fù)位,內(nèi)部相應(yīng)單元完成初始化,單片機(jī)進(jìn)入工作狀態(tài)。當(dāng)單片機(jī)正常工作時(shí),RST為低電平。

3.其他信號(hào)引腳

XTAL1和XTAL2:外接晶體引線端。當(dāng)使用芯片內(nèi)部時(shí)鐘時(shí),用于外接石英晶體和微調(diào)電容。當(dāng)使用外部時(shí)鐘時(shí),則XTAL2用于輸入外部振蕩脈沖,該信號(hào)直接送至內(nèi)部時(shí)鐘電路,而XTAL1必須接地。

VSS:地線。

VCC:+5V電源。

4.P3口接第二功能信號(hào)引腳

P3.0(RXD):(串行數(shù)據(jù)接收)。

P3.1(TXD):(串行數(shù)據(jù)發(fā)送)。

P3.2978-7-111-59346-1-Chapter01-9.jpg :(外部中斷0申請(qǐng))。

P3.3978-7-111-59346-1-Chapter01-10.jpg :(外部中斷1申請(qǐng))。

P3.4(T0):(定時(shí)/計(jì)數(shù)器0外部輸入)。

P3.5(T1):(定時(shí)/計(jì)數(shù)器1外部輸入)。

P3.6978-7-111-59346-1-Chapter01-11.jpg :(外部數(shù)據(jù)存儲(chǔ)器寫脈沖)。

P3.7978-7-111-59346-1-Chapter01-12.jpg :(外部數(shù)據(jù)存儲(chǔ)器讀脈沖)。

5.EPROM程序存儲(chǔ)器固化

編程脈沖:ALE/PROG。

編程電壓(25V):978-7-111-59346-1-Chapter01-13.jpg 。

備用電源引入:RST/VPD。

另外,對(duì)于AT89S51芯片,內(nèi)部包含F(xiàn)lash ROM,P1.5、P1.6和P1.7用于程序固化(下載)使用,與內(nèi)部EPROM的芯片下載不同。

1.2.3 單片機(jī)存儲(chǔ)器、寄存器結(jié)構(gòu)

計(jì)算機(jī)的存儲(chǔ)空間一般分為存放程序和存放數(shù)據(jù)兩類,存儲(chǔ)配置有兩種典型結(jié)構(gòu):哈佛結(jié)構(gòu)和普林斯頓結(jié)構(gòu)。哈佛結(jié)構(gòu)的程序空間(ROM)和數(shù)據(jù)空間(RAM)分為兩個(gè)隊(duì)列尋址。普林斯頓結(jié)構(gòu)的程序空間(ROM)和數(shù)據(jù)空間(RAM)同在一個(gè)空間隊(duì)列尋址。

本書介紹的MCS-51系列單片機(jī)采用的是哈佛結(jié)構(gòu)的存儲(chǔ)結(jié)構(gòu),單片機(jī)存儲(chǔ)結(jié)構(gòu)如圖1-4所示。MCS-51系列單片機(jī)的存儲(chǔ)器分為ROM和RAM兩類。MCS-51系列單片機(jī)內(nèi)部有4KB的ROM,最大可擴(kuò)展到64KB,所以可使用的最大程序空間為64KB;內(nèi)部有128B的RAM,還可以擴(kuò)展外部RAM共64KB。訪問(wèn)外部設(shè)備與訪問(wèn)RAM一樣,外部設(shè)備是與RAM統(tǒng)一編址的。MCS-51系列單片機(jī)可訪問(wèn)的片外RAM和外設(shè)單元共64KB。MCS-51系列單片機(jī)對(duì)ROM的訪問(wèn)和片內(nèi)RAM的訪問(wèn)是用不同指令實(shí)現(xiàn)的。

從物理空間看,單片機(jī)的存儲(chǔ)器結(jié)構(gòu)較為復(fù)雜,分為4個(gè)部分,即片內(nèi)ROM、片外ROM、片內(nèi)RAM和片外RAM。但從邏輯空間上看,實(shí)際上存在3個(gè)獨(dú)立的空間。片內(nèi)、片外的程序存儲(chǔ)器在同一個(gè)邏輯空間,它們的地址為0x0000~0xffff(64KB),是連續(xù)的;片內(nèi)的數(shù)據(jù)存儲(chǔ)器占一個(gè)邏輯空間,地址為0x00~0xff(256B);片外的數(shù)據(jù)存儲(chǔ)器占一個(gè)邏輯空間,地址為0x0000~0xffff(64KB)。MCS-51系列單片機(jī)會(huì)用不同的指令去訪問(wèn)不同的存儲(chǔ)器空間。

1.低128個(gè)單元內(nèi)部數(shù)據(jù)存儲(chǔ)區(qū)

MCS-51系列單片機(jī)的內(nèi)部數(shù)據(jù)存儲(chǔ)器(RAM)共有256個(gè)單元,通常把256個(gè)單元分成兩部分:低128個(gè)單元(0x00~0x7f)和高128個(gè)單元(0x80~0xff)。

978-7-111-59346-1-Chapter01-14.jpg

圖1-4 單片機(jī)存儲(chǔ)器結(jié)構(gòu)

低128個(gè)單元內(nèi)部數(shù)據(jù)存儲(chǔ)器按用途分為寄存器區(qū)、位尋址區(qū)和用戶數(shù)據(jù)區(qū)3個(gè)區(qū)域:

寄存器區(qū)MCS-51系列單片機(jī)共有4組工作寄存器,每組8個(gè)單元,用R0~R7編號(hào)。它們用來(lái)暫存數(shù)據(jù)及中間結(jié)果,使用靈活。4組工作寄存器占用內(nèi)部RAM的0x00~0x1f單元。在某一時(shí)刻,CPU只能使用其中的一組工作寄存器(稱為當(dāng)前寄存器)。它由程序狀態(tài)寄存器(PSW)中的RS1、RS0位的狀態(tài)決定。單片機(jī)復(fù)位后,RS1和RS0默認(rèn)為工作寄存器0組。

位尋址區(qū)內(nèi)部RAM的0x20~0x2f單元既可以字節(jié)尋址,作為一般的RAM單元使用,又可以位尋址,進(jìn)行布爾操作。在使用C51編程時(shí),程序所定義的位變量會(huì)被分配在此處空間,最多可以定義128個(gè)位變量。

用戶數(shù)據(jù)區(qū)內(nèi)部RAM的0x30~0x7f單元是提供用戶使用的數(shù)據(jù)區(qū)。用戶的數(shù)據(jù)存放在此區(qū)域,在實(shí)際使用時(shí),常把堆棧開(kāi)辟在此。在使用C51編程時(shí)定義data存儲(chǔ)數(shù)據(jù)類型變量將分配在此段RAM空間,同時(shí)系統(tǒng)設(shè)定的堆??臻g也在此段RAM空間。

2.高128個(gè)單元特殊功能寄存器(SFR)區(qū)

對(duì)于MCS-51系列單片機(jī),在內(nèi)部數(shù)據(jù)存儲(chǔ)器0x80~0xff的高128個(gè)單元中,特殊功能寄存器只占用其中的21個(gè)單元,其余單元無(wú)定義,用戶不能對(duì)這些單元進(jìn)行讀寫操作。MCS-51系列單片機(jī)可尋址的特殊功能寄存器見(jiàn)表1-1。

1-1 特殊功能寄存器

978-7-111-59346-1-Chapter01-15.jpg

程序計(jì)數(shù)器(PC)用于控制程序的執(zhí)行,不是特殊功能寄存器(SFR)。PC存放將要執(zhí)行程序的地址,它有自動(dòng)加1的功能。單片機(jī)根據(jù)PC的內(nèi)容取指令執(zhí)行,PC沒(méi)有地址,不能賦值,只能通過(guò)轉(zhuǎn)移指令改變其內(nèi)容。

下面介紹一些SFR的用途,其他SFR在后面的章節(jié)中介紹。如果能熟練地掌握這些SFR的使用,也就掌握了MCS-51系列單片機(jī)的基本技術(shù)。

1)累加器A。

累加器A為8位寄存器,它是使用最頻繁的寄存器,功能較多,地位重要,直接與運(yùn)算器打交道。CPU中的算術(shù)和邏輯運(yùn)算都要通過(guò)累加器A。MCS-51系列單片機(jī)大部分指令的操作都取自累加器A。

2)寄存器B。

寄存器B為8位寄存器,主要用于乘法和除法運(yùn)算,也可以作為暫存器使用。在乘法運(yùn)算中,乘數(shù)存于寄存器B中,被乘數(shù)存于累加器A中。乘法運(yùn)算后,乘積的高8位存于寄存器B中,低8位存于累加器A中。在除法運(yùn)算中,除數(shù)存于寄存器B中,被除數(shù)存于累加器A中。除法運(yùn)算后,余數(shù)存于寄存器B中,商存于累加器A中。

3)程序狀態(tài)寄存器。

程序狀態(tài)寄存器(PSW)為8位寄存器,存放程序執(zhí)行過(guò)程中的各種狀態(tài)信息。有些位是根據(jù)程序的執(zhí)行結(jié)果由硬件自動(dòng)設(shè)置的,有些位由軟件設(shè)置。程序狀態(tài)寄存器在程序的運(yùn)行過(guò)程中占有重要的地位,各位的具體含義見(jiàn)表1-2。

1-2 程序狀態(tài)寄存器的位表

978-7-111-59346-1-Chapter01-16.jpg

進(jìn)位標(biāo)志位(CY):進(jìn)位標(biāo)志位(CY)是最常用的標(biāo)志位,常用于表示最高位向前的進(jìn)位和借位及位運(yùn)算。在加、減法運(yùn)算中,如果操作結(jié)果在最高位有進(jìn)位(加法運(yùn)算時(shí))或有借位(減法運(yùn)算時(shí)),則該位由硬件置“1”,否則清“0”。在布爾運(yùn)算中,位傳送、位與、位或等操作都是通過(guò)進(jìn)位標(biāo)志位實(shí)現(xiàn)的。

輔助進(jìn)位標(biāo)志位(AC):它也稱為半進(jìn)位標(biāo)志。在進(jìn)行算術(shù)加、減法運(yùn)算中,當(dāng)?shù)?位向高4位有進(jìn)位(加法運(yùn)算時(shí))或有借位(減法運(yùn)算時(shí)),則該位由硬件置“1”,否則清“0”。

用戶標(biāo)志位F0、F1:其功能與內(nèi)部RAM中可位尋址區(qū)的各位相似。

RS1、RS0:它為工作寄存器組選擇位,用于選擇CPU當(dāng)前使用的寄存器組。具體定義見(jiàn)表1-3。單片機(jī)復(fù)位后,RS1、RS0為00,即當(dāng)前工作寄存器組為第0組。

1-3 工作寄存器的地址表

978-7-111-59346-1-Chapter01-17.jpg

溢出標(biāo)志位(OV):它反映運(yùn)算結(jié)果是否溢出,一般用于帶符號(hào)數(shù)運(yùn)算結(jié)果的判別,由硬件根據(jù)運(yùn)算結(jié)果自動(dòng)設(shè)置。

奇偶標(biāo)志位(P):它反映累加器A的奇偶性。如果累加器A中有奇數(shù)個(gè)“1”,則該位由硬件置“1”,否則清“0”。它完全由累加器A中的內(nèi)容來(lái)決定。MCS-51單片機(jī)的校驗(yàn)為偶校驗(yàn)。

4)堆棧指針。

堆棧用來(lái)暫存數(shù)據(jù),按照“先進(jìn)后出”的原則存取數(shù)據(jù),一端固定(棧底)、一端浮動(dòng)(棧頂)。MCS-51在片內(nèi)RAM中專門開(kāi)辟出一個(gè)區(qū)域(一組連續(xù)的存儲(chǔ)單元)作為堆棧區(qū),用堆棧指針(SP)來(lái)表示堆棧的位置。

系統(tǒng)復(fù)位后,SP的內(nèi)容為0x07,堆棧設(shè)在0x07處,程序初始化時(shí)SP可設(shè)置不同的值,因此堆棧位置是浮動(dòng)的,SP的內(nèi)容一經(jīng)確定,堆棧的位置也就確定下來(lái)。堆棧必須設(shè)在片內(nèi)的RAM區(qū),采用C51編譯系統(tǒng)會(huì)自動(dòng)設(shè)置SP的內(nèi)容。

5)數(shù)據(jù)指針寄存器。

數(shù)據(jù)指針寄存器(DPTR)是16位寄存器,用于存放16位的數(shù)據(jù)或地址。數(shù)據(jù)指針寄存器一般用于訪問(wèn)片外RAM或程序存儲(chǔ)器,也可以分成兩個(gè)8位寄存器使用,即存放高8位的寄存器DPH和存放低8位的寄存器DPL。

3.內(nèi)部程序存儲(chǔ)器

MCS-51系列單片機(jī)的內(nèi)部程序存儲(chǔ)器(ROM)用于存放編制好的程序和表格常數(shù)。有些單元具有特殊的功能,使用時(shí)應(yīng)加以注意。ROM的低地址空間0x0000~0x002a單元被保留,留給上電復(fù)位后的引導(dǎo)程序的地址及5個(gè)中斷服務(wù)程序的入口地址。在實(shí)際應(yīng)用系統(tǒng)中,主程序的存放是從0x002b單元后開(kāi)始的。

1)0x0000~0x0002系統(tǒng)復(fù)位后,PC=0x0000,程序從0x0000單元開(kāi)始取指令執(zhí)行。

2)0x0003~0x002a共40個(gè)單元,被分成5段,作為5個(gè)中斷源的中斷入口地址。中斷響應(yīng)后,按中斷種類,自動(dòng)轉(zhuǎn)到各中斷區(qū)的首地址去執(zhí)行程序,因此在中斷地址區(qū)中理應(yīng)存放中斷服務(wù)程序。但通常情況下,8個(gè)單元難以存下一個(gè)完整的中斷服務(wù)程序,在C51編譯器中,不同的中斷入口對(duì)應(yīng)相應(yīng)的中斷向量函數(shù)。

0x0003:外部中斷0中斷入口地址,C51對(duì)應(yīng)的中斷向量為interrupt 0。

0x000b:定時(shí)/計(jì)數(shù)器0中斷入口地址,C51對(duì)應(yīng)的中斷向量為interrupt 1。

0x0013:外中斷1中斷入口地址,C51對(duì)應(yīng)的中斷向量為interrupt 2。

0x001b:定時(shí)/計(jì)數(shù)器1中斷入口地址,C51對(duì)應(yīng)的中斷向量為interrupt 3。

0x0023:串行中斷入口地址,C51對(duì)應(yīng)的中斷向量為interrupt 4。

相關(guān)資料查詢單片機(jī)數(shù)據(jù)手冊(cè)。

1.2.4 單片機(jī)I/O端口

MCS-51單片機(jī)有4個(gè)8位并行雙向I/O端口P0~P3,共32根I/O線。每一根I/O線能獨(dú)立用作輸入或輸出。

1)P0端口。

P0由一個(gè)輸出鎖存器、兩個(gè)三態(tài)輸出緩沖器,輸出驅(qū)動(dòng)電路及控制電路組成。P0口作為I/O口使用時(shí),應(yīng)接上拉電阻,CPU內(nèi)部發(fā)出控制信號(hào)低電平封鎖與門,使輸出驅(qū)動(dòng)電路上方的場(chǎng)效應(yīng)晶體管截止,同時(shí)又使多路開(kāi)關(guān)MUX把鎖存器Q與輸出驅(qū)動(dòng)電路下方的場(chǎng)效應(yīng)晶體管的柵極連通,Q為1時(shí)場(chǎng)效應(yīng)晶體管導(dǎo)通,為0時(shí)截止。通道選擇器的控制信號(hào)為1時(shí),開(kāi)關(guān)接通上側(cè),為0時(shí)接通下側(cè)。P0口是雙向口。P0口有兩個(gè)三態(tài)輸入緩沖器用于讀操作。下方的三態(tài)緩沖器用于讀引腳信號(hào),上方的三態(tài)緩沖器用于讀端口鎖存器的內(nèi)容。由兩類指令分別產(chǎn)生讀引腳和讀鎖存器的脈沖,用于選通三態(tài)緩沖器。當(dāng)執(zhí)行一條讀引腳指令時(shí),讀引腳脈沖把下方三態(tài)緩沖器打開(kāi),這時(shí)端口引腳上的數(shù)據(jù)經(jīng)過(guò)該緩沖器讀入到內(nèi)部總線。有時(shí),端口已處于輸出狀態(tài),CPU的某些操作是先將端口原數(shù)據(jù)讀入,經(jīng)過(guò)運(yùn)算修改后,再寫到端口輸出,這類指令讀入的數(shù)據(jù)是鎖存器的內(nèi)容,可能改變其值,然后重新寫入端口鎖存器,稱為“讀—改—寫”指令。

在擴(kuò)展系統(tǒng)中,P0口作為地址/數(shù)據(jù)總線使用時(shí)可分為兩種情況:一種是以P0口引腳輸出地址/數(shù)據(jù)信息。這時(shí)CPU內(nèi)部發(fā)出的控制信號(hào)高電平打開(kāi)與門,同時(shí)又使多路開(kāi)關(guān)MUX把CPU內(nèi)部地址/數(shù)據(jù)線經(jīng)反相與輸出驅(qū)動(dòng)場(chǎng)效應(yīng)晶體管V2的柵極接通,輸出驅(qū)動(dòng)場(chǎng)效應(yīng)晶體管V1、V2構(gòu)成推拉式輸出電路,其負(fù)載能力大大加強(qiáng);另一種情況由P0輸入數(shù)據(jù),這時(shí)輸入信號(hào)是從引腳通過(guò)輸入緩沖器進(jìn)入內(nèi)部總線。當(dāng)P0口被用作地址/數(shù)據(jù)線時(shí),就無(wú)法再作I/O口使用了。

某些系列單片機(jī)兼容MCS-51單片機(jī),但在某些功能方面做了修改,如STC廠家生產(chǎn)的51系列單片機(jī)的P0口內(nèi)部連接了上拉電阻。P0口內(nèi)部結(jié)構(gòu)如圖1-5所示。

978-7-111-59346-1-Chapter01-18.jpg

圖1-5 P0口內(nèi)部結(jié)構(gòu)

2)P1口。

P1口在電路結(jié)構(gòu)上與P0口有所不同,其輸出驅(qū)動(dòng)電路場(chǎng)效應(yīng)晶體管接有上拉電阻。P1口作為通用I/O使用。當(dāng)P1口作用輸入時(shí),也必須先寫入鎖存器,再讀引腳狀態(tài)。P1口是準(zhǔn)雙向口。當(dāng)P1口用作輸出時(shí),不必外接上拉電阻。P1端口結(jié)構(gòu)如圖1-6所示。

8051的P1、P2、P3端口輸出驅(qū)動(dòng)器接有上拉電阻作負(fù)載,用作輸入時(shí),端口引腳拉成高電平,它們都是準(zhǔn)雙向口。

3)P2口。

P2口的位結(jié)構(gòu)比P1口多了一個(gè)控制轉(zhuǎn)換部分。當(dāng)P2口作通用I/O時(shí),多路開(kāi)關(guān)MUX使鎖存器輸出端Q與輸出驅(qū)動(dòng)輸入端接通,構(gòu)成一個(gè)準(zhǔn)雙向口。在擴(kuò)展系統(tǒng)中,P2口輸出高8位地址。此時(shí)MUX在CPU控制下轉(zhuǎn)向內(nèi)部地址線,使高8位地址碼通過(guò)輸出驅(qū)動(dòng)器送到P2端口引腳上。P2端口結(jié)構(gòu)如圖1-7所示。

978-7-111-59346-1-Chapter01-19.jpg

圖1-6 P1端口結(jié)構(gòu)

978-7-111-59346-1-Chapter01-20.jpg

圖1-7 P2端口結(jié)構(gòu)

4)P3口。

P3口也是多功能口。當(dāng)?shù)诙敵龉δ芏吮3指唠娖綍r(shí),打開(kāi)與非門,鎖存器輸出可通過(guò)與非門和輸出驅(qū)動(dòng)場(chǎng)效應(yīng)晶體管送至引腳端,這是用作通用I/O口輸出的情況。輸入時(shí),仍通過(guò)三態(tài)緩沖器讀出引腳信號(hào)。P3端口結(jié)構(gòu)如圖1-8所示。

在P3口用于第二功能的情況下,輸出時(shí),鎖存器輸出Q=1。打開(kāi)與非門,第二功能輸出端內(nèi)容通過(guò)與非門和輸出驅(qū)動(dòng)場(chǎng)效應(yīng)晶體管送至端口引腳,輸入時(shí),端口引腳的第二功能信號(hào)通過(guò)緩沖器送到內(nèi)部第二輸入功能端。

1.2.5 單片機(jī)時(shí)鐘結(jié)構(gòu)

978-7-111-59346-1-Chapter01-21.jpg

圖1-8 P3端口結(jié)構(gòu)

在MCS-51芯片內(nèi)部有一個(gè)高增益反相放大器,其輸入端為芯片引腳XTAL1,其輸出端為引腳XTAL2。而在芯片的外部,XTAL1和XTAL2之間跨接晶體振蕩器和微調(diào)電容,從而構(gòu)成一個(gè)穩(wěn)定的自激振蕩器,這就是單片機(jī)的時(shí)鐘電路,常用單片機(jī)時(shí)鐘電路結(jié)構(gòu)如圖1-9所示。一般地,電容C1和C2取30pF左右,晶體的振蕩頻率范圍是1.2~12MHz,某些高速單片機(jī)芯片的時(shí)鐘頻率已達(dá)40MHz。晶體振蕩頻率高,則系統(tǒng)的時(shí)鐘頻率也高,單片機(jī)運(yùn)行速度也就快。MCS-51在通常應(yīng)用情況下,使用振蕩頻率為6MHz或12MHz,使用串口通信的單片機(jī)電路通常使用11.0592MHz的晶振。傳統(tǒng)MCS-51單片機(jī)的晶振經(jīng)過(guò)12分頻后作為內(nèi)部時(shí)鐘,為CPU、定時(shí)器等功能模塊提供時(shí)鐘源。STC單片機(jī)的時(shí)鐘可以不分頻,為CPU提供時(shí)鐘源,理論上是傳統(tǒng)MCS-51單片機(jī)速度的12倍。在由多片單片機(jī)組成的系統(tǒng)中,為了各單片機(jī)之間時(shí)鐘信號(hào)的同步,應(yīng)當(dāng)引入唯一的公用外部脈沖信號(hào)作為各單片機(jī)的振蕩脈沖。這時(shí),外部的脈沖信號(hào)是經(jīng)XTAL2引腳注入,外部時(shí)鐘源接法如圖1-10所示。

單片機(jī)執(zhí)行指令的最小時(shí)間單位為時(shí)鐘周期,傳統(tǒng)的MCS-51單片機(jī)的時(shí)鐘周期的頻率為晶振頻率的1/12,STC系列單片機(jī)的時(shí)鐘速度是傳統(tǒng)單片機(jī)的12倍,指令執(zhí)行速度更快。

978-7-111-59346-1-Chapter01-22.jpg

圖1-9 常用單片機(jī)時(shí)鐘電路結(jié)構(gòu)

978-7-111-59346-1-Chapter01-23.jpg

圖1-10 外部時(shí)鐘源接法

1.2.6 單片機(jī)復(fù)位結(jié)構(gòu)

單片機(jī)復(fù)位是使CPU和系統(tǒng)中的其他功能部件都處在一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)開(kāi)始工作。例如復(fù)位后PC=0000H,使單片機(jī)從首地址0000H開(kāi)始重新執(zhí)行程序。無(wú)論是在單片機(jī)剛開(kāi)始接上電源時(shí),還是斷電后或者發(fā)生故障后都要復(fù)位。

1.復(fù)位條件

必須使RST引腳(9)加上持續(xù)兩個(gè)機(jī)器周期(即24個(gè)振蕩周期)的高電平。例如,若時(shí)鐘頻率為12MHz,每機(jī)器周期為1μs,則需2μs以上的高電平。

2.復(fù)位電路

單片機(jī)常見(jiàn)的復(fù)位電路如圖1-11所示。圖1-11a為上電復(fù)位電路,它是利用電容充電來(lái)實(shí)現(xiàn)的。在接電瞬間,RESET端的電位與VCC相同,隨著充電電流的減少,RESET的電位逐漸下降。只要保證RESET為高電平的時(shí)間大于兩個(gè)機(jī)器周期,便能正常復(fù)位。圖1-11b為按鍵復(fù)位電路。該電路除具有上電復(fù)位功能外,在按下RESET復(fù)位鍵時(shí),電源經(jīng)電阻R1、R2分壓,在REAET端產(chǎn)生一個(gè)復(fù)位高電平,也能夠是單片機(jī)系統(tǒng)復(fù)位。

978-7-111-59346-1-Chapter01-24.jpg

圖1-11 單片機(jī)常見(jiàn)的復(fù)位電路

a)上電復(fù)位電路 b)按鍵復(fù)位及上電復(fù)位電路

3.復(fù)位狀態(tài)

復(fù)位后,片內(nèi)各專用寄存器狀態(tài)如下:

978-7-111-59346-1-Chapter01-25.jpg

1.3 發(fā)光二極管閃爍設(shè)計(jì)

1.3.1 單片機(jī)控制的發(fā)光二極管閃爍電路結(jié)構(gòu)

單片機(jī)控制的發(fā)光二極管電路如圖1-12所示。圖中發(fā)光二極管VD1的陽(yáng)極由晶體管9012驅(qū)動(dòng),當(dāng)單片機(jī)的P3口的高4位P3.7~P3.4輸出“1000”時(shí),74LS154的輸出端“Y8”輸出低電平,晶體管VT9導(dǎo)通,在此種情況下當(dāng)單片機(jī)的P2.0端口輸出“0”時(shí)則發(fā)光二極管點(diǎn)亮,當(dāng)P2.0輸出“1”則發(fā)光二極管熄滅。當(dāng)P2.0周期性的輸出“0”和“1”則可以看到發(fā)光二極管進(jìn)行“亮”與“滅”的閃爍。根據(jù)發(fā)光二極管電路的結(jié)構(gòu),在PC上編寫單片機(jī)控制程序,編譯后生成單片機(jī)的CPU可執(zhí)行的機(jī)器碼,并將生成的機(jī)器碼寫入單片機(jī)的FLASHROM中,單片機(jī)啟動(dòng)后執(zhí)行FLASHROM中的程序。CPU所執(zhí)行的每條指令都是編寫的用戶程序。由于MCS-51單片機(jī)的軟硬件資源有限,因此單片機(jī)系統(tǒng)不像PC系統(tǒng)通過(guò)操縱系統(tǒng)來(lái)管理軟硬件資源,所有的軟硬件資源都由用戶程序直接管理,由CPU根據(jù)用戶所編寫的單片機(jī)程序來(lái)執(zhí)行任務(wù)。

978-7-111-59346-1-Chapter01-26.jpg

圖1-12 單片機(jī)控制的發(fā)光二極管電路

1.3.2 偉福編譯系統(tǒng)編譯單片機(jī)程序

1.設(shè)置仿真器參數(shù)

單片機(jī)程序編譯調(diào)試程序種類有很多,中文編譯界面的集成系統(tǒng)有偉福編譯環(huán)境。使用該編譯系統(tǒng)可以通過(guò)仿真器進(jìn)行程序的單步、跟蹤、設(shè)置斷點(diǎn)等方式直接調(diào)試設(shè)計(jì)程序。通過(guò)官方網(wǎng)站下載安裝后,直接雙擊快捷方式圖標(biāo)啟動(dòng)。偉福編譯器啟動(dòng)界面如圖1-13所示。單擊界面上的仿真器設(shè)置按鈕,在圖1-14所示的界面中設(shè)置各項(xiàng)參數(shù),仿真器選項(xiàng)設(shè)置如圖1-14所示,選擇硬件仿真類型為“V5/S”,仿真頭為“POD-H8X5X”,具體單片機(jī)型號(hào)選擇為ATMEL公司的“AT89S51”單片機(jī)。仿真頭的晶振頻率默認(rèn)為12MHz。如果使用偉福公司的仿真器進(jìn)行程序調(diào)試,則將仿真器選擇選項(xiàng)的“√”去掉,如果沒(méi)有仿真器實(shí)物,要設(shè)置該選項(xiàng)有效,可以通過(guò)編譯環(huán)境進(jìn)行虛擬調(diào)試,但對(duì)于一些器件的交互式操作則不能實(shí)現(xiàn)仿真功能。仿真器的編譯語(yǔ)言設(shè)置如圖1-15所示。

978-7-111-59346-1-Chapter01-27.jpg

圖1-13 偉福編譯器啟動(dòng)界面

在圖1-15所示的語(yǔ)言界面下設(shè)置編譯器使用編程語(yǔ)言選項(xiàng),使用C51編寫單片機(jī)程序方便快捷。可以使用Keil的C51編譯器,在編譯器路徑中指定C51所在的路徑。如果使用匯編語(yǔ)言編寫單片機(jī)程序則可以不設(shè)置該選項(xiàng)。

2.編寫單片機(jī)程序

設(shè)置仿真器后可以進(jìn)行程序設(shè)計(jì),本書采用C51編寫單片機(jī)設(shè)計(jì)程序。新建源文件“main.c”過(guò)程如下:執(zhí)行菜單命令“文件”→“新建文件”,然后保存文件,將文件名設(shè)置為“main.c”,文件名的擴(kuò)展名需要設(shè)置為“.C”。在執(zhí)行C程序過(guò)程中,首先從“main()”函數(shù)開(kāi)始執(zhí)行。新建源文件界面如圖1-16所示。在源文件中輸入程序代碼,代碼如下:

978-7-111-59346-1-Chapter01-28.jpg

圖1-14 仿真器選項(xiàng)設(shè)置

978-7-111-59346-1-Chapter01-29.jpg

圖1-15 仿真器的編譯語(yǔ)言設(shè)置

978-7-111-59346-1-Chapter01-30.jpg

978-7-111-59346-1-Chapter01-31.jpg

程序代碼的內(nèi)容中“#include<reg51.h>”的功能為添加功能頭文件,C51編譯器為MCS-51單片機(jī)的特殊功能寄存器進(jìn)行了定義,使用該行代碼可以直接使用“reg51.h”頭文件中定義的特殊功能寄存器。

“sbit LED=P2^0;”定義LED變量代表了P2端口的P2.0,直接對(duì)“LED”的任何操作即是對(duì)P2.0進(jìn)行操作,而采用宏定義的方式定義對(duì)P2.0的置1,清0,取反等操作更有利于程序在不同硬件系統(tǒng)中的移植。

“void Delay_Nms(unsigned int n);”為函數(shù)聲明,該函數(shù)為延時(shí)nms的延時(shí)函數(shù)。該函數(shù)定義在“main()”后,而在“main()”中調(diào)用了該函數(shù),因此必須在“main()”函數(shù)之前對(duì)該函數(shù)進(jìn)行聲明。

“main()”函數(shù)首先進(jìn)行初始化操作,將P3口的P3.7~P3.4設(shè)置為“1000”,而確保74LS154的Y8輸出為0,從而使VT9導(dǎo)通,確保了二極管能夠被點(diǎn)亮。由于while語(yǔ)句的條件為真,CPU而后始終執(zhí)行while循環(huán)語(yǔ)句,while語(yǔ)句功能為將P2.0的輸出狀態(tài)取反一次,而后延時(shí)500ms。循環(huán)執(zhí)行該while語(yǔ)句,結(jié)果是發(fā)光二極管實(shí)現(xiàn)了周期為1s的閃爍功能。

978-7-111-59346-1-Chapter01-32.jpg

圖1-16 新建源文件界面

3.單片機(jī)程序的編譯

源程序編寫后,需要進(jìn)行編譯。編譯單片機(jī)程序需要建立一個(gè)完整的項(xiàng)目。執(zhí)行菜單命令“文件”→“新建項(xiàng)目”,在彈出的圖1-17所示的窗口中選擇加入的源文件,新建項(xiàng)目中加載源文件如圖1-17所示,加入新建的源文件“main.c”,而后在彈出的窗口中加入項(xiàng)目包含的頭文件,在圖1-18所示的窗口中選擇頭文件,如果不需要加入頭文件則單擊“取消”按鈕,本項(xiàng)目中不需要加入其他頭文件,選擇“取消”按鈕,在彈出圖1-19所示的窗口中選擇保存的項(xiàng)目的名稱與路徑,保存項(xiàng)目窗口如圖1-19所示,將項(xiàng)目名稱設(shè)置為“LED_FALSH”,并將項(xiàng)目路徑與源文件路徑設(shè)置為同一路徑。保存項(xiàng)目用鼠標(biāo)后雙擊圖1-20所示的“main.c”源文件打開(kāi)項(xiàng)目中的源文件。鼠標(biāo)右鍵單擊“模塊文件”選項(xiàng)可以添加或移除源文件,項(xiàng)目中源文件管理操作如圖1-21所示。鼠標(biāo)右鍵單擊“包含文件”選擇可以添加或移除頭文件。

978-7-111-59346-1-Chapter01-33.jpg

圖1-17 新建項(xiàng)目中加載源文件

978-7-111-59346-1-Chapter01-34.jpg

圖1-18 加載頭文件窗口0

978-7-111-59346-1-Chapter01-35.jpg

圖1-19 保存項(xiàng)目窗口

978-7-111-59346-1-Chapter01-36.jpg

圖1-20 新建的項(xiàng)目窗口

978-7-111-59346-1-Chapter01-37.jpg

圖1-21 項(xiàng)目中源文件管理操作

執(zhí)行菜單命令“項(xiàng)目”→“全部編譯”,編譯系統(tǒng)對(duì)項(xiàng)目進(jìn)行編譯,在消息窗口中顯示編譯的消息結(jié)果,當(dāng)程序無(wú)任何錯(cuò)誤后,編譯器將生成“LED_FLASH.HEX”文件,將該文件下載到單片機(jī),單片機(jī)執(zhí)行程序后將看到對(duì)應(yīng)的發(fā)光二極管進(jìn)行周期約為1s的閃爍操作,項(xiàng)目編譯操作如圖1-22所示。

978-7-111-59346-1-Chapter01-38.jpg

圖1-22 項(xiàng)目編譯操作

4.單片機(jī)程序的調(diào)試

程序編譯后,如果連接了仿真器,可以通過(guò)調(diào)試工具對(duì)程序進(jìn)行調(diào)試,可以進(jìn)行跟蹤調(diào)試、單步調(diào)試、連續(xù)調(diào)試以及復(fù)位等操作,通過(guò)項(xiàng)目觀察窗口可以觀察I/O端口、寄存器、定義的變量的數(shù)值變化。單擊圖1-23所示的單步調(diào)試按鈕,則單步調(diào)試單片機(jī)程序,圖1-23中箭頭所指的位置為即將執(zhí)行的程序位置,每單擊一次單步運(yùn)行按鈕則執(zhí)行一行程序,如果遇到函數(shù)調(diào)用則完成單次的函數(shù)調(diào)用;跟蹤運(yùn)行按鈕遇到函數(shù)調(diào)用則進(jìn)入函數(shù)內(nèi)部進(jìn)行單步運(yùn)行,單擊連續(xù)運(yùn)行則CPU連續(xù)運(yùn)行單片機(jī)程序;單擊復(fù)位按鈕則回到起始位置執(zhí)行程序。在調(diào)試過(guò)程中如果希望執(zhí)行到某一行停下來(lái),可以在某行插入斷點(diǎn),先將光標(biāo)設(shè)置在需要插入斷點(diǎn)的行,然后執(zhí)行菜單命令“執(zhí)行”→“設(shè)置或取消斷點(diǎn)”,單擊連續(xù)運(yùn)行按鈕則程序運(yùn)行到設(shè)置斷點(diǎn)的位置停下來(lái)。通過(guò)項(xiàng)目的觀察窗口可以觀察調(diào)試過(guò)程中參數(shù)的變化,如本項(xiàng)目可以通過(guò)觀察P2、P3口的變化來(lái)驗(yàn)證程序的調(diào)試結(jié)果。

978-7-111-59346-1-Chapter01-39.jpg

圖1-23 程序調(diào)試界面

在調(diào)試過(guò)程中可以執(zhí)行菜單命名“外設(shè)/端口”單獨(dú)將P0~P3端口的狀態(tài)顯示出來(lái),設(shè)置觀察外設(shè)狀態(tài)如圖1-24所示,單片機(jī)復(fù)位后P0~P3端口的電位均為高電平,也可以將定時(shí)器、串口、中斷等外設(shè)顯示出來(lái)。

在沒(méi)有使用仿真器的情況下可以使用該仿真功能觀察I/O端口的變化,在調(diào)試過(guò)程中觀察外設(shè)端口電平如圖1-25所示在程序執(zhí)行的所在位置對(duì)應(yīng)P3口、P2口的輸出電平。

978-7-111-59346-1-Chapter01-40.jpg

圖1-24 設(shè)置觀察外設(shè)狀態(tài)

978-7-111-59346-1-Chapter01-41.jpg

圖1-25 在調(diào)試過(guò)程中觀察外設(shè)端口電平

1.4 習(xí)題

1.MCS-51單片機(jī)的基本組成包括哪幾部分?

2.MCS-51單片機(jī)的P0口的功能包括哪些?

3.MCS-51單片機(jī)的P0口作為I/O端口使用時(shí)需要如何進(jìn)行處理?

4.MCS-51單片機(jī)P1口的功能有哪些?

5.MCS-51單片機(jī)P2口的功能有哪些?

6.MCS-51單片機(jī)P3口的功能有哪些?

7.MCS-51單片機(jī)的常用復(fù)位方式有哪幾種?

8.MCS-51單片機(jī)復(fù)位后P0~P3口輸出的狀態(tài)是哪種狀態(tài)?

主站蜘蛛池模板: 论坛| 子洲县| 兴业县| 扶余县| 衡南县| 北海市| 五家渠市| 香格里拉县| 旅游| 宜宾县| 淄博市| 金山区| 丰顺县| 建湖县| 无极县| 靖西县| 西贡区| 上栗县| 金平| 渭南市| 克山县| 泸水县| 中宁县| 尤溪县| 永昌县| 保定市| 郸城县| 尖扎县| 芒康县| 瑞安市| 民丰县| 金堂县| 奎屯市| 石柱| 中山市| 当雄县| 龙陵县| 加查县| 盐边县| 阳春市| 镇平县|