- 單片機(jī)技術(shù)與項(xiàng)目實(shí)踐
- 王恩亮 陳潔主編
- 11770字
- 2019-07-30 17:09:09
第1章 發(fā)光二極管的單燈閃爍設(shè)計(jì)
教學(xué)導(dǎo)航
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所示。
圖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所示。
圖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所示。
圖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ù)的隔離。
N:外部程序存儲(chǔ)器的讀選通信號(hào)。在讀外部ROM時(shí),
有效(低電平),以實(shí)現(xiàn)外部ROM單元的讀取操作。
A:訪問(wèn)程序存儲(chǔ)器控制信號(hào)。當(dāng)
信號(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.2 :(外部中斷0申請(qǐng))。
P3.3 :(外部中斷1申請(qǐng))。
P3.4(T0):(定時(shí)/計(jì)數(shù)器0外部輸入)。
P3.5(T1):(定時(shí)/計(jì)數(shù)器1外部輸入)。
P3.6 :(外部數(shù)據(jù)存儲(chǔ)器寫脈沖)。
P3.7 :(外部數(shù)據(jù)存儲(chǔ)器讀脈沖)。
5.EPROM程序存儲(chǔ)器固化
編程脈沖:ALE/PROG。
編程電壓(25V): 。
備用電源引入: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)。
圖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 特殊功能寄存器
程序計(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)寄存器的位表
進(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 工作寄存器的地址表
溢出標(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所示。
圖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所示。
圖1-6 P1端口結(jié)構(gòu)
圖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)
圖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í)行速度更快。
圖1-9 常用單片機(jī)時(shí)鐘電路結(jié)構(gòu)
圖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ù)位。
圖1-11 單片機(jī)常見(jiàn)的復(fù)位電路
a)上電復(fù)位電路 b)按鍵復(fù)位及上電復(fù)位電路
3.復(fù)位狀態(tài)
復(fù)位后,片內(nèi)各專用寄存器狀態(tài)如下:
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ù)。
圖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所示。
圖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所示。在源文件中輸入程序代碼,代碼如下:
圖1-14 仿真器選項(xiàng)設(shè)置
圖1-15 仿真器的編譯語(yǔ)言設(shè)置
程序代碼的內(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的閃爍功能。
圖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)右鍵單擊“包含文件”選擇可以添加或移除頭文件。
圖1-17 新建項(xiàng)目中加載源文件
圖1-18 加載頭文件窗口0
圖1-19 保存項(xiàng)目窗口
圖1-20 新建的項(xiàng)目窗口
圖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所示。
圖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é)果。
圖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口的輸出電平。
圖1-24 設(shè)置觀察外設(shè)狀態(tài)
圖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)?
- Learning SQL Server Reporting Services 2012
- 圖解西門子S7-200系列PLC入門
- 數(shù)字道路技術(shù)架構(gòu)與建設(shè)指南
- 辦公通信設(shè)備維修
- 從零開(kāi)始學(xué)51單片機(jī)C語(yǔ)言
- 固態(tài)存儲(chǔ):原理、架構(gòu)與數(shù)據(jù)安全
- Intel Edison智能硬件開(kāi)發(fā)指南:基于Yocto Project
- Hands-On Deep Learning for Images with TensorFlow
- 微控制器的應(yīng)用
- 筆記本電腦維修技能實(shí)訓(xùn)
- Learning Less.js
- Corona SDK Mobile Game Development:Beginner's Guide
- The Reinforcement Learning Workshop
- 計(jì)算機(jī)應(yīng)用基礎(chǔ)案例教程(Windows 7+Office 2010)
- Liferay 6.2 User Interface Development