項(xiàng)目1信號燈控制課件_第1頁
項(xiàng)目1信號燈控制課件_第2頁
項(xiàng)目1信號燈控制課件_第3頁
項(xiàng)目1信號燈控制課件_第4頁
項(xiàng)目1信號燈控制課件_第5頁
已閱讀5頁,還剩341頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

項(xiàng)目1信號燈控制瀘州職業(yè)技術(shù)學(xué)院機(jī)電工程系《單片機(jī)應(yīng)用技術(shù)》精品課程組《單片機(jī)應(yīng)用技術(shù)》項(xiàng)目1信號燈控制瀘州職業(yè)技術(shù)學(xué)院機(jī)電工程系《單片機(jī)應(yīng)用技術(shù)》1本講主要內(nèi)容4相關(guān)知識1教學(xué)目標(biāo)2工作任務(wù)3項(xiàng)目實(shí)踐5能力拓展

6項(xiàng)目考核本講主要內(nèi)容4相關(guān)知識1教學(xué)目標(biāo)2工作任務(wù)3項(xiàng)目實(shí)踐2【教學(xué)目標(biāo)】1、終極目標(biāo):制作一個(gè)彩燈閃爍的單片機(jī)控制系統(tǒng)。2、促成目標(biāo):(1)了解單片機(jī)的基本概念及MCS系列單片機(jī)結(jié)構(gòu)特點(diǎn);了解典型單片機(jī)系列的基本情況;了解MCS系列單片機(jī)的發(fā)展及應(yīng)用領(lǐng)域;(2)了解MCS-5l單片機(jī)內(nèi)部結(jié)構(gòu)和功能;(3)掌握MCS-5l單片機(jī)引腳功能以及工作方式和單片機(jī)的存儲器結(jié)構(gòu)的特點(diǎn)、性能;(4)熟練掌握單片機(jī)的指令系統(tǒng)特點(diǎn);(5)理解單片機(jī)應(yīng)用系統(tǒng)開發(fā)的基本方法和設(shè)計(jì)流程;掌握MCS系列單片機(jī)的開發(fā)工具;掌握編程軟件、編程器、虛擬設(shè)備和仿真器的基本操作方法;了解單片機(jī)開發(fā)過程中的操作技巧和注意事項(xiàng);(6)掌握簡單的順序、分支、循環(huán)程序結(jié)構(gòu)和子程序的編寫和調(diào)用方法;(7)掌握延時(shí)子程序等典型程序的設(shè)計(jì)方法;(8)初步掌握單片機(jī)應(yīng)用系統(tǒng)分析和軟硬件設(shè)計(jì)的基本方法,建立單片機(jī)系統(tǒng)設(shè)計(jì)的基本概念;【教學(xué)目標(biāo)】1、終極目標(biāo):3設(shè)計(jì)一個(gè)彩燈閃爍的單片機(jī)控制系統(tǒng),在單片機(jī)的P0.0端口上接一個(gè)發(fā)光二極管L1,使L1不停地一亮一滅,一亮一滅的時(shí)間間隔為0.2秒,循環(huán)往復(fù)。【工作任務(wù)】【工作任務(wù)】4【活動一】總體設(shè)計(jì)1.系統(tǒng)組成

本系統(tǒng)功能由硬件和軟件兩大部份協(xié)調(diào)完成,硬件部分主要完成信息的顯示;軟件主要完成信號的處理及控制功能等。本系統(tǒng)的硬件采用模塊化設(shè)計(jì),以AT89S52單片機(jī)為核心,與LED彩燈閃爍電路組成控制系統(tǒng)。該系統(tǒng)硬件主要包括以下幾個(gè)模塊:AT89S52主控模塊、LED彩燈閃爍模塊等。其中AT89S52主要完成外圍硬件的控制以及一些運(yùn)算功能,LED彩燈電路完成燈光的閃爍功能。系統(tǒng)組成方框圖如圖1.1所示?!卷?xiàng)目實(shí)踐】【活動一】總體設(shè)計(jì)【項(xiàng)目實(shí)踐】5單片機(jī)LED彩燈電路復(fù)位電路時(shí)鐘電路電源電路

圖1.1LED彩燈閃爍控制系統(tǒng)組成方框圖【項(xiàng)目實(shí)踐】單LED彩燈電路復(fù)位電路時(shí)鐘電路電源電路圖1.6模塊化設(shè)計(jì)(Modulardesign)降低了程序設(shè)計(jì)的復(fù)雜性、便于修改、且使得支持系統(tǒng)不同部分的并行開發(fā)實(shí)現(xiàn)起來更容易。應(yīng)用軟件采用模塊化設(shè)計(jì)方法,該系統(tǒng)軟件主要由主程序、延時(shí)子程序模塊等組成,系統(tǒng)軟件結(jié)構(gòu)框圖如圖1.2所示。延時(shí)子程序主程序

圖1.2單片機(jī)彩燈閃爍系統(tǒng)軟件結(jié)構(gòu)框圖【項(xiàng)目實(shí)踐】模塊化設(shè)計(jì)(Modulardesign)降72.系統(tǒng)工作原理發(fā)光二極管簡稱為LED,由鎵(Ga)與砷(AS)、磷(P)的化合物制成的二極管,當(dāng)電子與空穴復(fù)合時(shí)能輻射出可見光,因而可以用來制成發(fā)光二極管,在電路及儀器中作為指示燈,或者組成文字或數(shù)字顯示。磷砷化鎵二極管發(fā)紅光,磷化鎵二極管發(fā)綠光,碳化硅二極管發(fā)黃光。發(fā)光二極管是一種把電能轉(zhuǎn)換成光能的半導(dǎo)體器件。它由PN節(jié)組成,在正向偏置的條件下導(dǎo)通,此時(shí)會發(fā)射出一定波長的光。發(fā)光二極管的發(fā)光功率近似的與導(dǎo)通電流成正比。目前大多數(shù)產(chǎn)品可以由集成電路直接驅(qū)動?!卷?xiàng)目實(shí)踐】2.系統(tǒng)工作原理【項(xiàng)目實(shí)踐】8圖1.3發(fā)光二極管發(fā)光效果圖圖1.4發(fā)光二極管發(fā)光實(shí)物圖【項(xiàng)目實(shí)踐】與小白熾燈泡和氖燈相比,發(fā)光二極管的特點(diǎn)是:工作電壓很低(有的僅一點(diǎn)幾伏),工作電流很?。ㄓ械膬H零點(diǎn)幾毫安即可發(fā)光),抗沖擊和抗震性能好,可靠性高,壽命長;通過調(diào)制通過的電流強(qiáng)弱可以方便地調(diào)制發(fā)光的強(qiáng)弱。由于有這些特點(diǎn),發(fā)光二極管在一些光電控制設(shè)備中用作光源,在許多電子設(shè)備中用作信號顯示器。把它的管心做成條狀,用7條條狀的發(fā)光管組成7段式半導(dǎo)體數(shù)碼管,每個(gè)數(shù)碼管可顯示0~9十個(gè)數(shù)目字。圖1.3發(fā)光二極管發(fā)光效果圖圖1.4發(fā)9發(fā)光二極管有很多類,如圖1.4所示為幾種發(fā)光二極管,其電氣原理圖如圖圖1.5所示,當(dāng)在它的A和K兩個(gè)電極加上合適的電壓的時(shí)候,它就會亮起來。說“合適的電壓”,是因?yàn)椴煌陌l(fā)光二極管工作電壓并不相同,一般是在1.6~2.8V之間,而工作電流則一般在2~30mA之間,但是實(shí)際工作的選擇范圍一般是4~10mA之間。圖1.5發(fā)光二極管電氣的電路圖形符號【項(xiàng)目實(shí)踐】發(fā)光二極管有很多類,如圖1.4所示為幾種發(fā)光二101.單片機(jī)選型

51系列單片機(jī)包括許多類型,它們的內(nèi)部結(jié)構(gòu)基本相同。AT89S52是目前應(yīng)用比較廣泛的51系列兼容單片機(jī)中的代表產(chǎn)品。

(1)主要性能:與MCS-51單片機(jī)產(chǎn)品兼容8K字節(jié)在系統(tǒng)可編程Flash存儲器1000次擦寫周期全靜態(tài)操作:0Hz~33Hz三級加密程序存儲器32個(gè)可編程I/O口線三個(gè)16位定時(shí)器/計(jì)數(shù)器八個(gè)中斷源

全雙工UART串行通道低功耗空閑和掉電模式掉電后中斷可喚醒看門狗定時(shí)器雙數(shù)據(jù)指針掉電標(biāo)識符【項(xiàng)目實(shí)踐】【活動二】硬件設(shè)計(jì)1.單片機(jī)選型全雙工UART串行通道【項(xiàng)目實(shí)踐】11(2)功能特性描述AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。使用Atmel公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。(3)AT89S52標(biāo)準(zhǔn)功能8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時(shí)器,2個(gè)數(shù)據(jù)指針,三個(gè)16位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止?!卷?xiàng)目實(shí)踐】(2)功能特性描述【項(xiàng)目實(shí)踐】12(4)AT89S52芯片引腳結(jié)構(gòu)圖1.6AT89S52芯片引腳結(jié)構(gòu)圖鑒于此,本項(xiàng)目選用AT89S52單片機(jī)作為主控制器。【注意】在后面的項(xiàng)目中,如無特殊說明,均以AT89S52單片機(jī)作為主控制器?!卷?xiàng)目實(shí)踐】(4)AT89S52芯片引腳結(jié)構(gòu)132.主控模塊設(shè)計(jì)電源、時(shí)鐘信號以及復(fù)位電路是單片機(jī)工作的基本條件,缺一不可。單片機(jī)基本系統(tǒng)包括電源電路、時(shí)鐘電路、復(fù)位電路。(1)電源電路模塊設(shè)計(jì)電源模塊為系統(tǒng)板上其它模塊提供+5V電源,系統(tǒng)板為從USB接口獲?。?V電源,只要用相應(yīng)配套的USB線從電腦主機(jī)獲取+5V直流電源。(2)時(shí)鐘電路模塊設(shè)計(jì)單片機(jī)的時(shí)鐘信號用來為單片機(jī)芯片內(nèi)部各種微操作提供時(shí)間基準(zhǔn)。MCS-51的時(shí)鐘信號可以由兩種方式產(chǎn)生,一種是內(nèi)部時(shí)鐘方式,利用芯片內(nèi)部的振蕩電路;另一種方式為外部時(shí)鐘方式。由于AT89S52單片機(jī)芯片內(nèi)有時(shí)鐘振蕩電路,因此本項(xiàng)目中采用內(nèi)部時(shí)鐘方式,只要在單片機(jī)的XTAL1和XTAL2引腳外接石英晶體和微調(diào)電容,就構(gòu)成了自激振蕩器并在單片機(jī)內(nèi)部產(chǎn)生時(shí)鐘脈沖信號,具體電路設(shè)計(jì)如圖1.3所示。圖中電容C1和C2的作用是穩(wěn)定頻率和快速起振,電容置在5~30pF,在此選擇30pF;晶振X1的振蕩頻率范圍在1.2~12MHz間選擇,本項(xiàng)目中選擇12MHz。時(shí)鐘電路為單片機(jī)產(chǎn)生時(shí)鐘脈沖序列,作為單片機(jī)工作的時(shí)間基準(zhǔn),典型的晶體振蕩頻率為12MHz?!卷?xiàng)目實(shí)踐】2.主控模塊設(shè)計(jì)【項(xiàng)目實(shí)踐】14(3)復(fù)位電路模塊設(shè)計(jì)復(fù)位電路使單片機(jī)或系統(tǒng)中的其他部件處于某種確定的狀態(tài)。當(dāng)在51單片機(jī)的RST引腳引入高電平并保持2個(gè)機(jī)器周期,單片機(jī)內(nèi)部就執(zhí)行復(fù)位操作。實(shí)際應(yīng)用中,復(fù)位操作有兩種基本形式:一種是上電復(fù)位,另一種是按鍵復(fù)位。本項(xiàng)目中采用按鍵復(fù)位方式,具體電路設(shè)計(jì)如圖1.3所示。在單片機(jī)運(yùn)行期間,可以利用此按鍵完成復(fù)位操作?!咀⒁狻吭诤竺娴捻?xiàng)目中,如無特殊說明,主控模塊的設(shè)計(jì)均按此方式設(shè)計(jì),不再贅述。3.LED彩燈模塊設(shè)計(jì)LED彩燈閃爍輸出電路采用發(fā)光二極管LED,LED的K極通過限流電阻R與單片機(jī)的P0口的P0.0連接,LED的A極連接到+5V電源。系統(tǒng)供電為+5V,LED上串接的電阻是1KΩ,如果此時(shí)LED上的電壓是2.0V,那么此時(shí)通過LED的電流為(5V-2V)/1000Ω=3mA。如果需要提高亮度,電流一般會控制在10mA左右,則此時(shí)電阻應(yīng)該選擇(5V-2V)/10mA=300Ω,所以可以就近選擇330Ω。該模塊與單片機(jī)的接口電路如圖1.7所示?!卷?xiàng)目實(shí)踐】(3)復(fù)位電路模塊設(shè)計(jì)【項(xiàng)目實(shí)踐】15圖1.7LED彩燈閃爍模塊與單片機(jī)的接口電路原理圖【項(xiàng)目實(shí)踐】圖1.7LED彩燈閃爍模塊與單片機(jī)的接口電路原理圖【項(xiàng)目161.算法設(shè)計(jì)根據(jù)系統(tǒng)工作原理圖1.7可知:當(dāng)P0.0端口輸出高電平,即P0.0=1時(shí),根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,這時(shí)發(fā)光二極管L1熄滅;我們可以使用SETBP0.0指令使P0.0端口輸出高電平;當(dāng)P0.0端口輸出低電平,即P0.0=0時(shí),發(fā)光二極管L1亮;我們可以使用CLRP0.0指令使P0.0端口輸出低電平。①延時(shí)程序設(shè)計(jì)由于單片機(jī)指令的執(zhí)行時(shí)間很短,屬于微秒級,而我們要求的彩燈閃爍時(shí)間間隔為0.2秒,相對于微秒來說,相差太大,所以我們在執(zhí)行彩燈點(diǎn)亮和熄滅指令時(shí),插入延時(shí)程序,來達(dá)到我們的要求。②循環(huán)程序結(jié)構(gòu)設(shè)計(jì)

【項(xiàng)目實(shí)踐】【活動三】軟件設(shè)計(jì)【項(xiàng)目實(shí)踐】【活動三】軟件設(shè)計(jì)17

由于需要控制發(fā)光二極管反復(fù)的一亮一滅,在程序中需要反復(fù)執(zhí)行該程序段,為了避免在程序中多次的編寫,我們采用循環(huán)結(jié)構(gòu)來實(shí)現(xiàn)該功能,可以通過利用條件轉(zhuǎn)移或無條件轉(zhuǎn)移指令LJMP或者AJMP來控制程序的跳轉(zhuǎn)執(zhí)行,達(dá)到發(fā)光二極管反復(fù)的一亮一滅的目的。③子程序設(shè)計(jì)由于發(fā)光二極管點(diǎn)亮的時(shí)間為0.2秒,熄滅的時(shí)間也為0.2秒,在程序中需要多次執(zhí)行同樣的計(jì)算和操作,如果每次都從頭開始編制該段程序,不僅麻煩,而且浪費(fèi)存儲空間。對于這種在一個(gè)程序中反復(fù)出現(xiàn)的程序段,我們采用子程序結(jié)構(gòu)來實(shí)現(xiàn)。當(dāng)主程序在運(yùn)行時(shí),需要調(diào)用子程序時(shí),只要執(zhí)行調(diào)用子程序指令A(yù)CALL或者LCALL,使主程序跳轉(zhuǎn)至子程序執(zhí)行,子程序處理完畢,用RET指令返回主程序,繼續(xù)執(zhí)行主程序后面的操作。2.?dāng)?shù)據(jù)結(jié)構(gòu)設(shè)計(jì)單片機(jī)的P0口線的P0.0用于發(fā)光二極管L1亮、滅的控制,當(dāng)P0.0=0表示L1點(diǎn)亮,當(dāng)P0.0=1表示L1熄滅;工作寄存器R5、R6、R7為延時(shí)子程序的循環(huán)變量?!卷?xiàng)目實(shí)踐】由于需要控制發(fā)光二極管反復(fù)的一亮一滅,在程序183.程序設(shè)計(jì)(1)主程序設(shè)計(jì)主程序主要完成硬件初始化、延時(shí)子程序調(diào)用等功能。①初始化通過初始化把P0.0設(shè)置為0,讓發(fā)光二極管點(diǎn)亮。②循環(huán)閃爍調(diào)用延時(shí)子程序,使發(fā)光二極管點(diǎn)亮0.2秒;然后修改P0.0的狀態(tài)為1,再調(diào)用延時(shí)子程序,使發(fā)光二極管熄滅0.2秒;最后使程序跳轉(zhuǎn)到開始重新執(zhí)行,就可以實(shí)現(xiàn)發(fā)光二極管循環(huán)閃爍。主程序設(shè)計(jì)流程圖如圖1.8所示?!卷?xiàng)目實(shí)踐】3.程序設(shè)計(jì)【項(xiàng)目實(shí)踐】19開始P0.0輸出“1”,L1燈熄滅調(diào)用延時(shí)子程序P0.0輸出“0”,L1燈點(diǎn)亮調(diào)用延時(shí)子程序圖1.8主程序設(shè)計(jì)流程圖【項(xiàng)目實(shí)踐】開始P0.0輸出“1”,L1燈熄滅調(diào)用延時(shí)子程20(2)延時(shí)子程序設(shè)計(jì)延時(shí)子程序完成發(fā)光二極管L1點(diǎn)亮或熄滅的延時(shí)時(shí)間。延時(shí)程序是一種應(yīng)用較為廣泛的小程序,一般采用多條語句循環(huán)執(zhí)行來實(shí)現(xiàn)延時(shí)。下面具體介紹其原理:系統(tǒng)所用的石英晶體振蕩頻率為11.0592MHz,因此,1個(gè)機(jī)器周期=1/石英頻率*12,即為12/11.0592微秒。機(jī)器周期微秒MOVR6,#20;2個(gè)2LOOP1:MOVR7,#230;2個(gè)2DJNZR7,$;2個(gè)2DJNZR6,LOOP1;2個(gè)2因此,上面的延時(shí)程序時(shí)間為【2+R6*(2+2*R7+2)】*機(jī)器周期=9282*12/11.0592=10.072ms。由以上可知,當(dāng)R6=10、R7=230時(shí),延時(shí)約5ms;當(dāng)R6=20、R7=230時(shí),延時(shí)約10ms,以此為基本的計(jì)時(shí)單位?!卷?xiàng)目實(shí)踐】(2)延時(shí)子程序設(shè)計(jì)【項(xiàng)目實(shí)踐】21

本項(xiàng)目要求延時(shí)0.2秒=200ms,10ms×R5=200ms,則R5=20,設(shè)計(jì)的延時(shí)子程序代碼如下:;****************************************************************;功能:延時(shí)子程序,延時(shí)0.2秒;****************************************************************DELAY200ms:MOVR5,#20;設(shè)置外循環(huán)初始值LOOP1:MOVR6,#20;外循環(huán)結(jié)構(gòu)開始,設(shè)置內(nèi)循環(huán)初始值LOOP2:MOVR7,#230;內(nèi)循環(huán)結(jié)構(gòu)開始DJNZR7,$;反復(fù)執(zhí)行本指令,指導(dǎo)R7=0為止DJNZR6,LOOP2;內(nèi)循環(huán)結(jié)構(gòu)判斷條件DJNZR5,LOOP1;外循環(huán)結(jié)構(gòu)判斷條件RET;子程序返回【項(xiàng)目實(shí)踐】本項(xiàng)目要求延時(shí)0.2秒=200ms,10ms×R22初始化外層變量R5=20開始初始化中層變量R6=20初始化內(nèi)層變量R7=230R7=0?NYR6=0?NYR5=0?NY子程序返回圖1.9延時(shí)子程序設(shè)計(jì)流程圖【項(xiàng)目實(shí)踐】初始化外層變量R5=20開始初始化中層變量R6=20初始化內(nèi)234.匯編語言源程序;**************************************************************;功能:主程序;**************************************************************ORG0000HSTART:CLRP0.0;當(dāng)P0.0端口輸出低電平時(shí),發(fā)光二極管L1點(diǎn)亮;LCALLDELAY200ms;調(diào)用延時(shí)子程序,LED燈點(diǎn)亮200msSETBP0.0;當(dāng)P0.0端口輸出高電平時(shí),發(fā)光二極管L1熄滅;LCALLDELAY200ms;調(diào)用延時(shí)子程序,L1熄滅200msLJMPSTART;跳轉(zhuǎn)到程序開始,L1一亮一滅,循環(huán)往復(fù);**************************************************************【項(xiàng)目實(shí)踐】4.匯編語言源程序【項(xiàng)目實(shí)踐】24;功能:延時(shí)子程序,延時(shí)0.2秒;**************************************************DELAY200ms:MOVR5,#20;設(shè)置外層循環(huán)變量初始值LOOP1:MOVR6,#20;外循環(huán)結(jié)構(gòu)開始,設(shè)置中層循環(huán)變量初始值LOOP2:MOVR7,#230;中層循環(huán)結(jié)構(gòu)開始,設(shè)置內(nèi)層循環(huán)變量初始值DJNZR7,$;內(nèi)層循環(huán)結(jié)構(gòu),反復(fù)執(zhí)行本指令,直到R7=0為止DJNZR6,LOOP2;內(nèi)循環(huán)結(jié)構(gòu)判斷條件DJNZR5,LOOP1;外循環(huán)結(jié)構(gòu)判斷條件RET;子程序返回END【項(xiàng)目實(shí)踐】;功能:延時(shí)子程序,延時(shí)0.2秒【項(xiàng)目實(shí)踐】25#include<AT89X51.H>//頭文件sbitL1=P0^0;//定義P0.0voiddelay02s(void)//延時(shí)0.2秒子程序{unsignedchari,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=230;k>0;k--);}voidmain(void){while(1){L1=0;delay02s();L1=1;delay02s();}}5.C語言源程序【項(xiàng)目實(shí)踐】voidmain(void)5.C語言源程序【項(xiàng)目實(shí)踐】26【活動四】系統(tǒng)仿真調(diào)試1.仿真器連接圖1.10仿真器的連接2.仿真器設(shè)置圖1.11仿真器設(shè)置菜單【項(xiàng)目實(shí)踐】【活動四】系統(tǒng)仿真調(diào)試圖1.10仿273.程序編譯調(diào)試(1)新建文件選擇菜單[文件|新建文件],如圖1.12所示。圖1.12新建文件【項(xiàng)目實(shí)踐】3.程序編譯調(diào)試圖1.12新建文件【項(xiàng)目28(2)輸入程序在出現(xiàn)的源程序窗口中輸入所需編寫的程序,如圖1.13所示。圖1.13輸入程序(3)保存程序選擇菜單[文件|保存文件],保存時(shí)文件名稱必須帶上后綴名“.ASM”,如圖1.14所示。圖1.14【項(xiàng)目實(shí)踐】(2)輸入程序圖1.13輸入程序(29(4)建立新項(xiàng)目選擇菜單[文件|新建項(xiàng)目],如圖1.15所示。圖1.15【項(xiàng)目實(shí)踐】(4)建立新項(xiàng)目圖1.15【項(xiàng)目實(shí)踐】30(5)加入模塊文件在彈出的窗口中,加入模塊文件,選擇剛才保存的文件YEGANG.ASM,如圖1.16所示。圖1.16(6)加入包含文件加入包含文件,若沒有包含文件,則可按取消鍵,此處按取消鍵。如圖1.17所示。圖1.17【項(xiàng)目實(shí)踐】(5)加入模塊文件圖1.131(7)保存項(xiàng)目在保存項(xiàng)目對話框中輸入項(xiàng)目名稱,注意此處無須添加后綴名,軟件會自動將后綴名設(shè)成“.PRJ”。按保存鍵將項(xiàng)目存在與你的源程序相同的文件夾下。如圖1.18所示。(8)仿真器設(shè)置選擇菜單[設(shè)置|仿真器設(shè)置],在彈出的“仿真器設(shè)置”對話框中,按圖1.19設(shè)置,選擇“使用偉福軟件模擬器”。圖1.18圖1.19【項(xiàng)目實(shí)踐】(7)保存項(xiàng)目(8)仿真器設(shè)置32(9)文件編譯選擇菜單[項(xiàng)目|編譯],進(jìn)行編譯程序,如圖10所示。如程序正確,編譯后將產(chǎn)生兩種格式的目標(biāo)文件:二進(jìn)制格式(BIN)目標(biāo)文件和英特爾格式(HEX)目標(biāo)文件,如圖1.20所示。如程序有錯(cuò)誤,則將在信息窗口指出錯(cuò)誤指令所在的源程序、行號、錯(cuò)誤代碼及錯(cuò)誤原因,則先修改程序,然后再進(jìn)行編譯程序。圖1.20【項(xiàng)目實(shí)踐】(9)文件編譯33(10)程序調(diào)試雙擊項(xiàng)目中YEGANG.ASM文件,在所需設(shè)置斷點(diǎn)的指令上右鍵設(shè)置斷點(diǎn),如圖1.21所示。圖1.21在程序調(diào)試時(shí),可選擇菜單[執(zhí)行|全速執(zhí)行]、[執(zhí)行|跟蹤]、[執(zhí)行|單步]、[執(zhí)行|執(zhí)行到光標(biāo)處]等命令運(yùn)行調(diào)試程序,如圖1.22所示。圖1.22【執(zhí)行】菜單【項(xiàng)目實(shí)踐】(10)程序調(diào)試圖1.2134在調(diào)試運(yùn)行的過程中,通過【窗口】菜單(見圖1-27),可以選擇打開CPU窗口、數(shù)據(jù)窗口等窗口以觀察系統(tǒng)運(yùn)行過程中有關(guān)寄存器的狀態(tài)、存儲器的內(nèi)容等信息,從而判斷程序執(zhí)行是否正確。(11)查看結(jié)果選擇菜單[窗口|數(shù)據(jù)窗口|DATA],如圖1.23、1.24所示。

圖1.23圖1.24【項(xiàng)目實(shí)踐】在調(diào)試運(yùn)行的過程中,通過【窗口】菜單(見圖1-35注意:DATA——片內(nèi)RAM區(qū)域CODE——ROM區(qū)域XDATA——片外RAM區(qū)域PDATA——分頁式數(shù)據(jù)存儲器,51中無用BIT——位尋址區(qū)域【說明】由于單片機(jī)系統(tǒng)的仿真調(diào)試步驟基本相同,在后面的項(xiàng)目設(shè)計(jì)中,不再贅述。

【項(xiàng)目實(shí)踐】注意:【項(xiàng)目實(shí)踐】36【第一部分】單片機(jī)的基本知識單片機(jī)是在一塊芯片上集成了中央處理部件(CPU)、存儲器(RAM、ROM)、定時(shí)器/計(jì)數(shù)器和各種輸入/輸出(I/O)接口(如并行I/O口、串行I/O口和A/D轉(zhuǎn)換器)等。由于單片機(jī)通常是為實(shí)時(shí)控制應(yīng)用而設(shè)計(jì)制造的,因此,又稱為微控制器(MCU)。

一、單片機(jī)的發(fā)展概況單片機(jī)自問世以來,性能不斷提高和完善,其資源不僅能滿足很多應(yīng)用場合的需要,而且具有集成度高、功能強(qiáng)、速度快、體積小、功耗低、使用方便、性能可靠、價(jià)格低廉等特點(diǎn),因此,在工業(yè)控制、智能儀器儀表、數(shù)據(jù)采集和處理、通信系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)、汽車工業(yè)、國防工業(yè)、高級計(jì)算器具、家用電器等領(lǐng)域的應(yīng)用日益廣泛,并且正在逐步取代現(xiàn)有的多片微機(jī)應(yīng)用系統(tǒng),單片機(jī)的潛力越來越被人們所重視。特別是當(dāng)前用CMOS工藝制成的各種單片機(jī),由于功耗低,使用的溫度范圍大、抗干擾能力強(qiáng)、能滿足一些特殊要求的應(yīng)用場合,更加擴(kuò)大了單片機(jī)的應(yīng)用范圍,也進(jìn)一步促進(jìn)了單片機(jī)技術(shù)的發(fā)展。【相關(guān)知識】【第一部分】單片機(jī)的基本知識【相關(guān)知識】37自1976年9月Intel公司推出MCS-48單片機(jī)以來,單片機(jī)就受到了廣大用戶的歡迎。因此,有關(guān)公司都爭相推出各自的單片機(jī)。如GI公司推出PIC1650系列單片機(jī),Rockwell公司推出了與6502微處理器兼容的R6500系列單片機(jī)。它們都是8位機(jī),片內(nèi)有8位中央處理器(CPU)、并行I/O口、8位定時(shí)器/計(jì)數(shù)器和容量有限的存儲器(RAM、ROM)以及簡單的中斷功能。1978年下半年Motorola公司推出M6800系列單片機(jī),Zilog公司相繼推出Z8單片機(jī)系列。1980年Intel公司在MCS-48系列基礎(chǔ)上又推出了高性能的MCS-51系列單片機(jī)。這類單片機(jī)均帶有串行I/O口,定時(shí)器/計(jì)數(shù)器為16位,片內(nèi)存儲容量(RAM,ROM)都相應(yīng)增大,并有優(yōu)先級中斷處理功能,單片機(jī)的功能、尋址范圍都比早期的擴(kuò)大了,它們是當(dāng)時(shí)單片機(jī)應(yīng)用的主流產(chǎn)品。【相關(guān)知識】自1976年9月Intel公司推出MCS-48單片機(jī)381982年Mostek公司和Intel公司先后又推出了性能更高的16位單片機(jī)MK68200和MCS-96系列,NS公司和NEC公司也分別在原有8位單片機(jī)的基礎(chǔ)上推出了16位單片機(jī)HPC16040和μPD783××系列。1987年Intel公司又宣布了性能比8096高兩倍的CMOS型80C196,1988年推出帶EPROM的87C196單片機(jī)。由于16位單片機(jī)推出的時(shí)間較遲、價(jià)格昂貴、開發(fā)設(shè)備有限等多種原因,至今還未得到廣泛應(yīng)用。而8位單片機(jī)已能滿足大部分應(yīng)用的需要,因此,在推出16位單片機(jī)的同時(shí),高性能的新型8位單片機(jī)也不斷問世。如:Motorola公司推出了帶A/D和多功能I/O的68MC11系列,Zilog公司推出了帶有DMA功能的Suqer8,Intel公司在1987年也推出了帶DMA和FIFO的UPI-452等。若要更詳細(xì)的了解請上相關(guān)的單片機(jī)網(wǎng)站。目前國際市場上8位、16位單片機(jī)系列已有很多,但是,在國內(nèi)使用較多的系列是Intel公司的產(chǎn)品,其中又以MCS-51系列單片機(jī)應(yīng)用尤為廣泛,二十幾年經(jīng)久不衰,而且還在更進(jìn)一步發(fā)展完善,價(jià)格越來越低,性能越來越好。【相關(guān)知識】1982年Mostek公司和Intel公司先后39二、單片機(jī)的應(yīng)用單片機(jī)是在一塊芯片上集成了一臺微型計(jì)算機(jī)所需的CPU、存儲器、輸入/輸出部件和時(shí)鐘電路等。因此它具有體積小,使用靈活、成本低、易于產(chǎn)品化、抗干擾能力強(qiáng),可在各種惡劣環(huán)境下可靠地工作等特點(diǎn)。特別是它應(yīng)用面廣,控制能力強(qiáng),使它在工業(yè)控制、智能儀表、外設(shè)控制、家用電器、機(jī)器人、軍事裝置等方面得到了廣泛的應(yīng)用。單片機(jī)主要可用于以下幾方面:1.智能儀表單片機(jī)應(yīng)用于各種儀器儀表的更新改造,實(shí)現(xiàn)儀表的數(shù)字化、智能化、多功能化、綜合化及柔性化,并使長期以來關(guān)于測量儀表中的誤差修正和線性化處理等難題迎刃而解。由單片機(jī)構(gòu)成的智能儀表,集測量、處理、控制功能于一體,測量速度和測量精度得到提高,控制功能得到增強(qiáng),簡化了儀器儀表的結(jié)構(gòu),利于使用、維修和改進(jìn)?!鞠嚓P(guān)知識】二、單片機(jī)的應(yīng)用【相關(guān)知識】402.工業(yè)實(shí)時(shí)控制

單片機(jī)應(yīng)用于各種工業(yè)實(shí)時(shí)控制中,如爐溫控制系統(tǒng)、火災(zāi)報(bào)警系統(tǒng)、化學(xué)成分的測量和控制等,單片機(jī)技術(shù)與測量技術(shù)、自動控制技術(shù)相結(jié)合,利用單片機(jī)作為控制器,發(fā)揮其數(shù)據(jù)處理和實(shí)時(shí)控制功能,提高系統(tǒng)的生產(chǎn)效率和產(chǎn)品的自動化程度。采用單片機(jī)作為機(jī)床數(shù)控系統(tǒng)的控制機(jī),可以提高機(jī)床數(shù)控系統(tǒng)的可靠性、增強(qiáng)功能、降低控制機(jī)成本,并有可能改變數(shù)控控制機(jī)的結(jié)構(gòu)模式。3.機(jī)電一體化單片機(jī)促進(jìn)了機(jī)電一體化的發(fā)展,利用單片機(jī)改造傳統(tǒng)的機(jī)電產(chǎn)品,能夠使產(chǎn)品體積減小、功能增強(qiáng)、結(jié)構(gòu)簡化,與傳統(tǒng)的機(jī)械產(chǎn)品相結(jié)合,構(gòu)成了自動化、智能化的機(jī)電一體化新產(chǎn)品。例如,在電傳打字機(jī)的設(shè)計(jì)中,由于采用單片機(jī),從而取代了近千個(gè)機(jī)械部件?!鞠嚓P(guān)知識】2.工業(yè)實(shí)時(shí)控制【相關(guān)知識】414.通訊接口在數(shù)據(jù)采集系統(tǒng)中,用單片機(jī)對模數(shù)轉(zhuǎn)換接口進(jìn)行控制,不僅可以提高采集速度,而且還可以對數(shù)據(jù)進(jìn)行預(yù)處理,如數(shù)字濾波、線性化處理及誤差修正等,在通信接口中,采用單片機(jī),可以對數(shù)據(jù)進(jìn)行編碼、解碼、分配管理以及接受/發(fā)送等工作。在一般計(jì)算機(jī)測控系統(tǒng)中,除打印機(jī)、鍵盤、磁盤驅(qū)動器、CRT等通用外部設(shè)備接口外,還有許多外部通信、采集、多路分配管理以及驅(qū)動控制等接口,如果完全由主機(jī)進(jìn)行管理,勢必造成主機(jī)負(fù)擔(dān)過重,降低系統(tǒng)的運(yùn)行速度,降低接口的管理水平。利用單片機(jī)進(jìn)行通訊接口的控制與管理,能夠提高系統(tǒng)的運(yùn)行速度,減少接口的通信密度,提高接口的管理水平。單片機(jī)在計(jì)算機(jī)網(wǎng)絡(luò)和數(shù)字通信中具有非常廣闊的應(yīng)用前景。【相關(guān)知識】4.通訊接口【相關(guān)知識】425.家用電器目前,國內(nèi)外各種家用電器已普通采用MCU代替?zhèn)鹘y(tǒng)的控制電路,使用的MCU大多是小型廉價(jià)型的單片機(jī)。在這些單片機(jī)中集成了許多外設(shè)的接口,如鍵盤、顯示器接口及A/D等功能單元,而不用并行擴(kuò)展總線,故常制作成為單片機(jī)應(yīng)用系統(tǒng)。例如洗衣機(jī)、電冰箱、微波爐、電飯鍋、電視機(jī)及其他視頻音像設(shè)備的控制器。目前的主要發(fā)展趨勢是模糊控制化,以形成眾多的模糊控制家電產(chǎn)品。此外,單片機(jī)成功應(yīng)用于玩具、游戲機(jī)、充電器、IC卡、電子鎖、電子秤、步進(jìn)電機(jī)、電子詞典、照相機(jī)、電風(fēng)扇和防盜報(bào)警等日常生活用品中;在汽車的點(diǎn)火控制、變速控制、排氣控制、節(jié)能控制、冷氣控制以及防滑剎車中也有很多應(yīng)用??傊?,單片機(jī)技術(shù)集計(jì)算機(jī)技術(shù)、電子技術(shù)、電氣技術(shù)、微電子技術(shù)于一身,作為一種智能化的現(xiàn)代開發(fā)工具,從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法,隨著現(xiàn)代電子技術(shù)的普及與發(fā)展,其應(yīng)用領(lǐng)域無所不至,無論是工業(yè)部門、民用部門乃至事業(yè)部門,都有其廣泛應(yīng)用。【相關(guān)知識】5.家用電器【相關(guān)知識】43【第二部分】單片機(jī)內(nèi)部結(jié)構(gòu)揭秘

MCS-51單片機(jī)是在一塊芯片中集成了CPU、RAM、ROM、定時(shí)器/計(jì)數(shù)器和多種功能的I/O線等一臺計(jì)算機(jī)所需要的基本功能部件,各功能部件由內(nèi)部總線聯(lián)接在一起。MCS-51單片機(jī)內(nèi)包含下列幾個(gè)部件,其基本結(jié)構(gòu)如圖1-2所示【相關(guān)知識】【第二部分】單片機(jī)內(nèi)部結(jié)構(gòu)揭秘【相關(guān)知識】44振蕩器及定時(shí)電路8051CPU4K字節(jié)ROM128字節(jié)RAM2個(gè)16位定時(shí)器/計(jì)數(shù)器64K總線擴(kuò)展控制可編程I/O可編程串行口頻率基準(zhǔn)源計(jì)數(shù)器中斷控制并行I/O口串行輸入串行輸出圖1.25單片機(jī)基本結(jié)構(gòu)框圖由圖可見,51單片機(jī)主要由以下幾部分組成:【相關(guān)知識】振蕩器及8051CPU4K字節(jié)128字節(jié)2個(gè)16位定時(shí)器/計(jì)45CPU系統(tǒng):◆8位CPU,含布爾處理器;◆一個(gè)片內(nèi)振蕩器及時(shí)鐘電路;◆總線邏輯控制;存儲器系統(tǒng):◆4K字節(jié)程序存儲器(ROM/EPROM/FLASH,可外擴(kuò)至64KB);◆128字節(jié)數(shù)據(jù)存儲器(RAM,可外擴(kuò)至64KB);◆特殊功能寄存器SFR;并行I/O口系統(tǒng):◆4個(gè)8位并行I/O端口線(32條可編程的I/O);其他功能單元:◆2個(gè)16位定時(shí)器/計(jì)數(shù)器;◆1個(gè)可編程全雙工異步串行口;◆中斷系統(tǒng)(具有5個(gè)中斷源、2個(gè)優(yōu)先級嵌套中斷結(jié)構(gòu))【相關(guān)知識】CPU系統(tǒng):【相關(guān)知識】46MCS-51單片機(jī)內(nèi)部結(jié)構(gòu)由微處理器(含運(yùn)算器和控制器)、存儲器、I/O口以及特殊功能寄存器SFR等構(gòu)成,芯片的內(nèi)部邏輯結(jié)構(gòu)如圖1.26所示。圖1.26芯片的內(nèi)部邏輯結(jié)構(gòu)【相關(guān)知識】MCS-51單片機(jī)內(nèi)部結(jié)構(gòu)由微處理器(含運(yùn)算47一、CPU系統(tǒng)CPU系統(tǒng)主要包含以下部件:◆8位CPU,含布爾處理器;◆一個(gè)片內(nèi)振蕩器及時(shí)鐘電路;◆總線邏輯控制;(一)中央處理器(CPU)中央處理器CPU是單片機(jī)的核心部件,由運(yùn)算器和控制器組成,此外在CPU的運(yùn)算器中還有一個(gè)專門進(jìn)行位數(shù)據(jù)操作的位處理器。8位的MCS-51單片機(jī)的CPU內(nèi)部有數(shù)術(shù)邏輯單元ALU(ArithmeticLogicUnit)、累加器A(8位)、寄存器B(8位)、程序狀態(tài)字PSW(8位)、程序計(jì)數(shù)器PC(有時(shí)也稱為指令指針,即IP,16位)、地址寄存器AR(16位)、數(shù)據(jù)寄存器DR(8位)、指令寄存器IR(8位)、指令譯碼器ID、控制器等部件組成。MCS—51單片機(jī)CPU內(nèi)部結(jié)構(gòu)見圖1.27所示?!鞠嚓P(guān)知識】一、CPU系統(tǒng)【相關(guān)知識】48圖1.27MCS—51單片機(jī)CPU內(nèi)部結(jié)構(gòu)圖【相關(guān)知識】圖1.27MCS—51單片機(jī)CPU內(nèi)部結(jié)構(gòu)圖【相關(guān)知識491.運(yùn)算器運(yùn)算器的功能主要進(jìn)行算術(shù)和邏輯運(yùn)算,它由算術(shù)邏輯單元ALU、累加器ACC、B寄存器、PSW狀態(tài)字寄存器和兩個(gè)暫存器組成。ALU是運(yùn)算器的核心部件,基本的算術(shù)邏輯運(yùn)算都在其中進(jìn)行。包括加、減、乘、除、增量、十進(jìn)制調(diào)整和比較等算術(shù)運(yùn)算;與、或、異或等邏輯運(yùn)算;左移位、右移位和半字節(jié)交換等操作;操作數(shù)暫存于累加器和相應(yīng)寄存器,操作結(jié)果存于累加器,操作結(jié)果的狀態(tài)保存于狀態(tài)寄存器(PSW)中。由于ALU內(nèi)部沒有寄存器,參加運(yùn)算的操作數(shù),必須放在累加器A中。累加器A也用于存放運(yùn)算結(jié)果。例如:執(zhí)行指令A(yù)DDA,B執(zhí)行這條指令時(shí),累加器A中的內(nèi)容通過輸入口In_1輸入ALU,寄存器B通過內(nèi)部數(shù)據(jù)總線經(jīng)輸入口In_2輸入ALU,A+B的結(jié)果通過ALU的輸出口Out內(nèi)部數(shù)據(jù)總線,送回到累加器A?!鞠嚓P(guān)知識】1.運(yùn)算器【相關(guān)知識】50位處理器是單片機(jī)中運(yùn)算器的重要組成部分(圖中未畫出),又稱布爾處理器,專門用來處理位操作,給單片機(jī)實(shí)現(xiàn)控制功能提供了極大的方便。在硬件上,位處理器以狀態(tài)寄存器中的進(jìn)位標(biāo)志位CY為累加器,有以位為單位的RAM和I/O空間,具有相應(yīng)的指令系統(tǒng),可提供17條位操作指令以實(shí)現(xiàn)置位、復(fù)位、取反,等于0轉(zhuǎn)、等于l轉(zhuǎn)及位與位之間的傳送,邏輯與、或等操作,操作結(jié)果送回進(jìn)位標(biāo)志位CY。2.控制器控制器的功能是控制單片機(jī)各部件協(xié)調(diào)動作。它由程序計(jì)數(shù)器PC、PC加1寄存器、指令寄存器、指令譯碼器、定時(shí)與控制電路組成。程序計(jì)數(shù)器PC(有時(shí)也稱為指令指針,即IP,16位)、地址寄存器AR(16位)、數(shù)據(jù)寄存器DR(8位)、指令寄存器IR(8位)、指令譯碼器ID、控制器等部件組成。其工作過程就是執(zhí)行程序的過程,而程序的執(zhí)行是在控制器的控制下進(jìn)行的。首先,從片內(nèi)外程序存儲器ROM中取出指令,送指令寄存器?!鞠嚓P(guān)知識】位處理器是單片機(jī)中運(yùn)算器的重要組成部分(圖中51然后通過指令寄存器再送指令譯碼器,將指令代碼譯成一種或幾種電平信號。與系統(tǒng)時(shí)鐘一起,送時(shí)序邏輯電路進(jìn)行綜合后產(chǎn)生各種按一定時(shí)間節(jié)拍變化的電平或脈沖控制信號,用以控制系統(tǒng)各部件進(jìn)行相應(yīng)的操作,完成指令的執(zhí)行。執(zhí)行程序就是重復(fù)這一過程。(1)程序計(jì)數(shù)器PC(ProgramCounter)程序計(jì)數(shù)器PC用來存放即將要執(zhí)行的指令地址,共16位,可對64K程序存儲器直接尋址。執(zhí)行指令時(shí),PC內(nèi)容的低8位經(jīng)P0口輸出,高8位經(jīng)P2口輸出。也就是說,程序執(zhí)行到什么地方,程序計(jì)數(shù)器PC就指到哪里,它始終是跟躥著程序的執(zhí)行。我們知道,用戶程序是存放在內(nèi)部的ROM中的,我們要執(zhí)行程序就要從ROM中一個(gè)個(gè)字節(jié)的讀出來,然后傳送到CPU中去執(zhí)行,那么ROM具體執(zhí)行到哪一條呢?這就需要我們的程序計(jì)數(shù)器PC來指示。程序計(jì)數(shù)器PC具有自動加1的功能,即從存儲器中讀出一個(gè)字節(jié)的指令碼后,PC自動加1(指向下一個(gè)存儲單元),以實(shí)現(xiàn)程序的順序執(zhí)行。PC沒有地址,是不可尋址的,因此,用戶無法對它進(jìn)行讀寫,但在執(zhí)行轉(zhuǎn)移、調(diào)用、返回等指令時(shí),能由硬件自動改變其內(nèi)容,以改變程序的執(zhí)行順序?!鞠嚓P(guān)知識】然后通過指令寄存器再送指令譯碼器,將指令代碼52(2)指令寄存器IR指令寄存器的作用就是用來存放即將執(zhí)行的指令代碼。在這里我們先簡單的了解下CPU執(zhí)行指令的過程,首先由程序存儲器(ROM)中讀取指令代碼送入到指令寄存器IR,經(jīng)指令譯碼器ID譯碼后再由定時(shí)與控制電路發(fā)出相應(yīng)的控制信號,從而完成指令的功能。關(guān)于指令在單片機(jī)內(nèi)部的執(zhí)行過程,請參考相關(guān)書籍。(3)指令譯碼器ID用于對送入指令寄存器中的指令進(jìn)行譯碼,所謂譯碼就是把指令轉(zhuǎn)變成執(zhí)行此指令所需要的電信號。當(dāng)指令送入譯碼器后,由譯碼器對該指令進(jìn)行譯碼,根據(jù)譯碼器輸出的信號,CPU控制電路定時(shí)地產(chǎn)生執(zhí)行該指令所需的各種控制信號,使單片機(jī)正確的執(zhí)行程序所需要的各種操作。(4)地址寄存器AR地址寄存器AR的作用是用來存放將要尋址的外部存儲器單元的地址信息,指令碼所在存儲單元的地址編碼,由程序計(jì)數(shù)器PC產(chǎn)生,而指令中操作數(shù)所在的存儲單元地址碼,由指令的操作數(shù)給定。從上圖中我們可以看到,地址寄存器AR通過地址總線AB與外部存儲器相連。

【相關(guān)知識】(2)指令寄存器IR【相關(guān)知識】53(5)數(shù)據(jù)寄存器DR用于存放寫入外部存儲器或I/O端口的數(shù)據(jù)信息??梢姡瑪?shù)據(jù)寄存器對輸出數(shù)據(jù)具有鎖存功能。數(shù)據(jù)寄存器與外部數(shù)據(jù)總線DB直接相連。(6)程序狀態(tài)字寄存器PSW用于記錄運(yùn)算過程中的狀態(tài),如是否溢出。進(jìn)位等。例如,累加器A的內(nèi)容為83H,執(zhí)行指令:ADDA,#8AH;累加器A與立即數(shù)8AH相加,并把結(jié)果存放在A中。指令執(zhí)行后,將產(chǎn)生和的結(jié)果為[1]0DH,而累加器A只有8位,只能存放低8位,即0DH,元法存放結(jié)果中的最高位B8。為些,在CPU內(nèi)設(shè)置一個(gè)進(jìn)位標(biāo)志位C,當(dāng)執(zhí)行加法運(yùn)算出現(xiàn)進(jìn)位時(shí),進(jìn)位標(biāo)志位C為1。(7)時(shí)序部件由時(shí)鐘電路和脈沖分配器組成,用于產(chǎn)生微操作控制部件所需的定時(shí)脈沖信號。

(二)時(shí)鐘電路時(shí)鐘電路用于產(chǎn)生單片機(jī)工作所需要的時(shí)鐘信號;而CPU的時(shí)序是指控制器在統(tǒng)一的時(shí)鐘信號下,按照指令功能發(fā)出在時(shí)間上有一定次序的信號,控制和啟動相關(guān)邏輯電路完成指令操作?!鞠嚓P(guān)知識】(5)數(shù)據(jù)寄存器DR【相關(guān)知識】541.時(shí)鐘電路8051型單片機(jī)芯片內(nèi)有時(shí)鐘電路,但石英晶體和微調(diào)電容需要外接。時(shí)鐘電路為單片機(jī)產(chǎn)生時(shí)鐘脈沖序列,作為單片機(jī)工作的時(shí)間基準(zhǔn),典型的晶體振蕩頻率為12MHz。MCS-51的時(shí)鐘信號可以由兩種方式產(chǎn)生,一種是內(nèi)部方式,利用芯片內(nèi)部的振蕩電路;另一種方式為外部方式,由于MCS-51有HMOS型與CHMOS型,它們的時(shí)鐘電路有一定的區(qū)別,這里僅介紹通常所用的HMOS型的時(shí)鐘電路。①內(nèi)部時(shí)鐘方式MCS-51內(nèi)部有一個(gè)用于構(gòu)成振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是此放大器的輸入端和輸出端。這個(gè)放大器與作為反饋元件的片外晶體或陶瓷諧振器一起構(gòu)成一個(gè)自激振蕩器。雖然有內(nèi)部振蕩電路,但要形成時(shí)鐘,必須外接元件,圖1-10a是單片機(jī)內(nèi)部時(shí)鐘方式的電路。外接晶體以及電容Cl和C2構(gòu)成并聯(lián)諧振電路,接在放大器的反饋回路中,外接電容的大小會影響振蕩器頻率的高低、振蕩器的穩(wěn)定性、起振的快速性和溫度的穩(wěn)定性.【相關(guān)知識】1.時(shí)鐘電路【相關(guān)知識】55晶體可在1.2M~12MHz之間任選,電容Cl和C2的一般在20pF~100pF之間選擇。若頻率穩(wěn)定性要求不高,可選用較為廉價(jià)的陶瓷諧振器,Cl和C2的典型值約為47pF。在設(shè)計(jì)印刷電路板時(shí),應(yīng)采用溫度穩(wěn)定性能好的高頻電容,晶體或陶瓷振蕩器和電容應(yīng)盡可能與單片機(jī)芯片靠近安裝,以減少寄生電容,提高系統(tǒng)穩(wěn)定性和可靠性。a)b)圖1.28MCS-51時(shí)鐘電路a)內(nèi)部時(shí)鐘方式b)外部時(shí)鐘方式電源【相關(guān)知識】晶體可在1.2M~12MHz之間任選,電容Cl和C2的一般56②外部時(shí)鐘方式外部時(shí)鐘方式是利用外部振蕩器信號源即時(shí)鐘源直接接入XTAL1或XTAL2。通常XTAL1接地,XTAL2接外部時(shí)鐘,電路見圖1-10b。由于XTAL2的邏輯電平不是TTL的,故建議外接一個(gè)4.7K~10K的上拉電阻。2.CPU時(shí)序單片機(jī)的時(shí)序是指CPU在執(zhí)行指令時(shí)所需控制信號的時(shí)間順序。時(shí)序信號是以時(shí)鐘脈沖為基準(zhǔn)產(chǎn)生的,分為兩大類:一類用于芯片內(nèi)部各功能部件的控制,用戶無須了解,這里不做詳細(xì)介紹;另一類用于通過單片機(jī)的引腳進(jìn)行片外存儲器或擴(kuò)展的I/O端口的控制,該部分時(shí)序信號對于分析、設(shè)計(jì)硬件電路至關(guān)重要。①時(shí)序單位MCS-51型單片機(jī)時(shí)序的有關(guān)單位從小到大依次為時(shí)鐘周期、狀態(tài)周期、機(jī)器周期、指令周期。

a)時(shí)鐘周期P時(shí)鐘周期是MCS-51型單片機(jī)中最小的時(shí)序單位,它是單片機(jī)內(nèi)部的時(shí)鐘振蕩器OSC振蕩頻率fosc的倒數(shù),又稱振蕩周期或拍。它隨振蕩電路的時(shí)鐘脈沖頻率fosc的高低而改變?!鞠嚓P(guān)知識】②外部時(shí)鐘方式【相關(guān)知識】57例如,若某單片機(jī)的時(shí)鐘頻率fosc=12MHz,則時(shí)鐘周期P=1/fosc=0.0833μs。但是,一旦時(shí)鐘電路確定,時(shí)鐘周期就固定不變了。時(shí)鐘脈沖是系統(tǒng)的基本工作脈沖,它控制著單片機(jī)的工作節(jié)奏,使單片機(jī)的每一步工作都統(tǒng)一到它的步調(diào)上來。b)狀態(tài)周期S狀態(tài)周期是由連續(xù)的兩個(gè)振蕩脈沖組成的,即1個(gè)狀態(tài)周期=2個(gè)時(shí)鐘周期。若某單片機(jī)的時(shí)鐘頻率fosc=12MHz,則狀態(tài)周期S=2/fosc=0.167μs。通常把一個(gè)狀態(tài)的前后兩個(gè)振蕩脈沖用P1、P2來表示。c)機(jī)器周期機(jī)器周期是單片機(jī)完成某種基本操作所需要的時(shí)間。指令的執(zhí)行速度和機(jī)器周期有關(guān),機(jī)器周期越少的指令執(zhí)行速度越快。一個(gè)機(jī)器周期由6個(gè)狀態(tài)即12個(gè)振蕩脈沖組成,分別用S1~S6來表示。這樣,一個(gè)機(jī)器周期中的12個(gè)振蕩周期就可以表示為S1P1、S1P2、S2P1、S2P2、…、S6P2。當(dāng)單片機(jī)系統(tǒng)的時(shí)鐘頻率fosc=12MHz時(shí),它的一個(gè)機(jī)器周期就等于12/fosc,也就是1μs。

【相關(guān)知識】例如,若某單片機(jī)的時(shí)鐘頻率fosc=12MHz,則時(shí)鐘周期P58d)指令周期指令周期是執(zhí)行一條指令所需要的時(shí)間,它是時(shí)序中最大的時(shí)間單位。由于執(zhí)行不同的指令所需要的時(shí)間長短不同,因此按照指令消耗的機(jī)器周期的多少來區(qū)別,MCS-51型單片機(jī)的指令可分為單機(jī)器周期指令、雙機(jī)器周期指令和四機(jī)器周期指令三種。而四機(jī)器周期指令只有乘法和除法共兩條指令,由此不難看出,當(dāng)系統(tǒng)時(shí)鐘頻率為12MHz時(shí),MCS-51型單片機(jī)的多數(shù)指令只需要消耗lμs或2μs就可以執(zhí)行完畢。②典型指令時(shí)序MCS-51的指令可分為單字節(jié)、雙字節(jié)和三字節(jié)指令,它們的機(jī)器周期是不同的,可以分為以下幾種情況:單字節(jié)指令單機(jī)器周期、單字節(jié)指令雙機(jī)器周期,雙字節(jié)拍令單機(jī)器周期和雙字節(jié)指令雙機(jī)器周期。幾種典型的單/雙機(jī)器周期指令時(shí)序如圖1-11所示,圖中地址鎖存器信號ALE是振蕩脈沖的1/6頻率信號,因此在一個(gè)機(jī)器周期中ALE信號有效兩次,第一次有效在S1P2和S2P1期間.第二次有效在S4P2和S5P1期間,ALE信號每次有效對應(yīng)單片機(jī)進(jìn)行一次讀指令操作,下面對幾種典型指令的時(shí)序加以分析說明?!鞠嚓P(guān)知識】d)指令周期【相關(guān)知識】59對單周期指令,當(dāng)指令操作碼讀入指令寄存器時(shí),便從S1P2開始執(zhí)行指令。如果是雙字節(jié)指令,如ADDA,#DATA,則在同一周期的S4上讀入第二字節(jié);如果為單字節(jié)指令,如INCA,則在S4期間仍進(jìn)行讀,但所讀出的字節(jié)被忽略,且PC也不再加1,在S6P2結(jié)束時(shí)完成指令操作。對于雙周期指令(例如單字節(jié)雙周期指令I(lǐng)NCDPTR),兩個(gè)機(jī)器周期共進(jìn)行四次讀指令操作,但后三次讀操作全無效。對單字節(jié)雙周期類指令如MOVX類情況有所不同,因?yàn)榇祟愔噶钍窃L問外部存儲器的,在執(zhí)行MOVX指令期間,外部RAM被訪問,且選通時(shí)跳過兩次取操作?!鞠嚓P(guān)知識】對單周期指令,當(dāng)指令操作碼讀入指令寄存器時(shí),便60圖1.29MCS-51單片機(jī)指令時(shí)序【相關(guān)知識】圖1.29MCS-51單片機(jī)指令時(shí)序【相61(三)總線控制邏輯MCS-51單片機(jī)屬總線型結(jié)構(gòu),通過地址/數(shù)據(jù)總線可以與存儲器(RAM、EPROM)、并行I/O接口芯片相連接。在訪問外部存儲器時(shí),P2口輸出高8位地址,P0口輸出低8位地址,由ALE(地址鎖存允許)信號將P0口(地址/數(shù)據(jù)總線)上的低8位鎖存到外部地址鎖存器中,從而為P0口接受數(shù)據(jù)作準(zhǔn)備。在訪問外部程序存儲器(即執(zhí)行MOVX)指令時(shí),PSEN(外部程序存儲器選通)信號有效,在訪問外部數(shù)據(jù)存儲器(即執(zhí)行MOVX)指令時(shí),由P3口自動產(chǎn)生讀/寫(/)信號,通過P0口對外部數(shù)據(jù)存儲器單元進(jìn)行讀/寫操作。MCS-51單片機(jī)所產(chǎn)生的地址、數(shù)據(jù)和控制信號與外部存儲器、并行I/O接口芯片連接簡單、方便。有關(guān)這部分內(nèi)容請參考單片機(jī)的系統(tǒng)擴(kuò)展知識?!鞠嚓P(guān)知識】(三)總線控制邏輯【相關(guān)知識】62二、存儲器系統(tǒng)存儲器是用來存放程序和數(shù)據(jù)的部件,MCS-51存儲器結(jié)構(gòu)與常見的微型計(jì)算機(jī)的配置方式不同,它把程序存儲器和數(shù)據(jù)存儲器分開,各有自已的尋址系統(tǒng),控制信號和功能。程序存儲器用來存放程序和始終要保留的常數(shù),例如:所編程序經(jīng)匯編后的機(jī)器碼。數(shù)據(jù)存儲器通常用來存放程序運(yùn)行中所需要的常數(shù)或變量。例如:做加法時(shí)的加數(shù)和被加數(shù)、做乘法時(shí)的乘數(shù)和被乘數(shù)、模/數(shù)轉(zhuǎn)換時(shí)實(shí)時(shí)記錄的數(shù)據(jù)等等。從物理地址空間看,MCS-51有四個(gè)存儲器地址空間,即:片內(nèi)程序存儲器和片外程序存儲器以及片內(nèi)數(shù)據(jù)存儲器和片外數(shù)據(jù)存儲器。圖1.30為51系列單片機(jī)存儲器地址空間分布圖?!鞠嚓P(guān)知識】二、存儲器系統(tǒng)【相關(guān)知識】63外部ROM內(nèi)部ROM(EA=1)外部ROM(EA=0)0000H0000H0FFFH0FFFH1000HFFFFH0000HFFFFH外部數(shù)據(jù)存儲器程序存儲器特殊功能寄存器區(qū)內(nèi)部RAM低128B00H80H7FHFFH圖1.305l系列單片機(jī)存儲器結(jié)構(gòu)和存儲器空間分配【相關(guān)知識】內(nèi)部外部0000H0000H0FFFH0FFFH1000HF64(一)程序存儲器程序存儲器主要用于存放程序代碼以及表格常數(shù),分為片內(nèi)ROM、片外ROM兩大部分,兩者統(tǒng)一編址。由于單片機(jī)工作時(shí)程序是不可修改的,其存儲單元只能度不能寫,故程序存儲器是只讀存儲器。程序存儲器以程序計(jì)數(shù)器PC作為地址指針,通過16位地址總線,可尋址的地址空間為64K字節(jié)。51單片機(jī)程序存儲器有16位地址,可尋址的范圍為64KB,因此片外程序存儲器最大容量為64KB,而片內(nèi)程序存儲器容量為4KB。程序存儲器在物理結(jié)構(gòu)上分為片內(nèi)程序存儲器和片外程序存儲器兩個(gè)部分,在邏輯結(jié)構(gòu)上(即用戶使用角度)為一個(gè)部分,采用同一指令(MOVC指令)進(jìn)行數(shù)據(jù)讀取,用外部引腳EA進(jìn)行區(qū)分低4KB空間使用的是片內(nèi)程序存儲器還是片外程序存儲器。對于8031單片機(jī)來說,它的內(nèi)部沒有ROM,因此,在實(shí)際使用時(shí),必須對它擴(kuò)展外部程序存儲器,最大可擴(kuò)展空間地址為64KB,此時(shí)8031單片機(jī)的EA端必須接地,強(qiáng)制CPU從外部程序存儲器讀取程序。對于內(nèi)部有ROM的8051,8751,89C51,89S51等單片機(jī),正常運(yùn)行時(shí),EA則需接高電平,使CPU先讀內(nèi)部程序存儲器中的程序,當(dāng)PC值超過內(nèi)部ROM的容量時(shí),才會轉(zhuǎn)而讀外部程序存儲器中的程序?!鞠嚓P(guān)知識】(一)程序存儲器【相關(guān)知識】65

單片機(jī)復(fù)位后PC的內(nèi)容為0000H,0000H單元為復(fù)位入口地址,故單片機(jī)從0000H單元開始取指令執(zhí)行程序。通常在0000~0002H單元中存放一條無條件轉(zhuǎn)移指令,以便轉(zhuǎn)移去執(zhí)行指定的主程序。內(nèi)部ROM的0003H~002AH共有40個(gè)單元,固定用于5個(gè)中斷源的中斷地址區(qū),具體內(nèi)容見51系列單片機(jī)的中斷入口地址表1-1。表1-151系列單片機(jī)的中斷入口地址表【相關(guān)知識】單片機(jī)復(fù)位后PC的內(nèi)容為0000H,0000H66(二)數(shù)據(jù)存儲器數(shù)據(jù)存儲器用來存放運(yùn)算的中間結(jié)果、標(biāo)志位,以及數(shù)據(jù)的暫存和緩沖等??梢苑譃槠瑑?nèi)RAM與片外RAM兩大部分,片外數(shù)據(jù)存儲器RAM的地址空間為64KB。1.片內(nèi)數(shù)據(jù)存儲器5l系列單片機(jī)內(nèi)部共有256個(gè)數(shù)據(jù)存儲器單元,地址為00H~FFH,按其功能劃分為兩部分,低128單元(地址00H~7FH)和高128單元(地址80H~FFH),如圖1.31所示。其中低128單元是供用戶使用的數(shù)據(jù)存儲單元,高128單元是為特殊功能寄存器提供的特殊功能寄存器區(qū)?!鞠嚓P(guān)知識】(二)數(shù)據(jù)存儲器【相關(guān)知識】67(低128單元)(高128單元)FFHF0HBE0HACCD0HPSWB8HIPB0HP3A8HIEA0HP299HSBUF98HSCON90HP18DHTH18CHTH08BHTL18AHTL089HTMOD88HTCON87HPCON83HDPH82HDPL81HSP80HP0第0組工作寄存器第1組工作寄存器第2組工作寄存器第3組工作寄存器位尋址區(qū)位地址00H~7FH用戶RAM區(qū)(堆棧、數(shù)據(jù)反沖)特殊功能寄存器區(qū)(SFR區(qū))00H08H07H10H0FH18H17H20H1FH30H2FH7FH圖1.31MCS—5l單片機(jī)內(nèi)部數(shù)據(jù)存儲器分布【相關(guān)知識】(低128單元)(高128單元)FFHF0HB68(1)片內(nèi)數(shù)據(jù)存儲器低128單元片內(nèi)數(shù)據(jù)存儲器低128單元按照功能不同,可分為工作寄存器區(qū)、位尋址區(qū)、用戶RAM區(qū)三個(gè)區(qū)域:①工作寄存器區(qū)(00H~1FH)工作寄存器區(qū)占內(nèi)部RAM的前32個(gè)單元,地址為00H~1FH,共分4組,每組有8個(gè)寄存器,組號依次為0、l、2、3。每個(gè)寄存器都是8位,在組內(nèi)按R0~R7編號,用于存放操作數(shù)及中間結(jié)果等。由于它們的功能及作用預(yù)先不做規(guī)定,故稱之為工作寄存器,工作寄存器與RAM地址的對應(yīng)關(guān)系見表1.2?!鞠嚓P(guān)知識】(1)片內(nèi)數(shù)據(jù)存儲器低128單元【相關(guān)知識】69

表1.2寄存器和RAM地址對照表【相關(guān)知識】表1.2寄存器和RAM地址704組工作寄存器在任一時(shí)刻,CPU只使用其中一組,正在使用的這些寄存器稱為當(dāng)前寄存器,當(dāng)前程序使用的工作寄存區(qū)由程序狀態(tài)字寄存器PSW中的RS0和RS1兩位組合來確定,RS0和RS1的狀態(tài)和工作寄存區(qū)對應(yīng)關(guān)系見表1.3,CPU通過對PSW中的D4、D3位內(nèi)容的修改,就能任選一個(gè)工作寄存器區(qū)。表1.3工作寄存器區(qū)選擇【相關(guān)知識】4組工作寄存器在任一時(shí)刻,CPU只使用其中一71例如:SETBPSW.3CLRPSW.4;選定第1區(qū)SETBPSW.4CLRPSW.3;選定第2區(qū)SETBPSW.3SETBPSW.4;選定第3區(qū)不設(shè)定則選定第0區(qū),也叫默認(rèn)值,這個(gè)特點(diǎn)使MCS-51具有快速現(xiàn)場保護(hù)功能。特別注意的是,如果不加設(shè)定,在同一段程序中R0-R7只能用一次,若用兩次程序會出錯(cuò)。如果用戶程序不需要四個(gè)工作寄存器區(qū),則不用的工作寄存器單元可以作一般的RAM使用。

【相關(guān)知識】例如:SETBPSW.3【相關(guān)知識】72

工作寄存器區(qū)主要用來存放操作數(shù)和運(yùn)算的中間結(jié)果,利用工作寄存器為CPU提供數(shù)據(jù),能夠提高程序的運(yùn)行速度。MCS-51系列為內(nèi)部RAM提供了豐富的操作指令,執(zhí)行速度快。工作寄存器單元,除以寄存器的形式使用(即以寄存器符號R0~R7表示)外,還可以存儲單元的形式(以單元地址00H~1FH)表示。②位尋址區(qū)(20H~2FH)內(nèi)部RAM的20H~2FH單元為位尋址區(qū),有16個(gè)單元,共有128位,該區(qū)的每一位都有一個(gè)位地址,依次編址00H~7FH。位尋址區(qū)的16個(gè)單元可以進(jìn)行字節(jié)操作,也可以對單元中的某一位單獨(dú)進(jìn)行位操作,其中所有位均可以直接尋址,如表1.4所示?!鞠嚓P(guān)知識】工作寄存器區(qū)主要用來存放操作數(shù)和運(yùn)算的中間結(jié)果,73表1.4內(nèi)部RAM位尋址區(qū)的位地址映象【相關(guān)知識】表1.4【相關(guān)知識】74每位的地址有兩種表示形式。一種是以位地址的形式表示的,例如,位尋址區(qū)最開始的地址是00H,第2位、第3位的地址分別是01H,02H,最后兩位的地址分別是7EH和7FH;另一種是以存儲單元地址加位的地址的形式表示,例如,開始的第2位表示為20H.1,倒數(shù)第2位表示為2FH.6。位尋址區(qū)的每一位都可以視作軟件觸發(fā)器,由程序直接進(jìn)行位處理。通常把各種程序狀態(tài)標(biāo)志、位控制變量設(shè)在位尋址區(qū)內(nèi)。同樣,位尋址區(qū)的RAM單元也可以作一般的數(shù)據(jù)緩沖器使用。③用戶RAM區(qū)(30H~7FH)內(nèi)部RAM中地址為30H~7FH的80個(gè)單元是用戶RAM區(qū),也是數(shù)據(jù)緩沖區(qū),它們只能以存儲單元的形式來使用,沒有任何規(guī)定或限制,但通常用作堆棧區(qū)以及存放用戶數(shù)據(jù)?!鞠嚓P(guān)知識】每位的地址有兩種表示形式。一種是以位地址的形式75(2)特殊功能寄存器(SFR)

內(nèi)部數(shù)據(jù)存儲器的高128單元是特殊功能寄存器區(qū)。特殊功能寄存器一般用于存放相應(yīng)功能部件的控制命令、狀態(tài)和數(shù)據(jù)。因?yàn)檫@些寄存器的功能已作了專門的規(guī)定,故稱為特殊功能寄存器(SpecialFunctionRegister),簡稱SFR。它們離散地分布在80H~FFH的RAM空間中。805l的特殊功能寄存器除了程序計(jì)數(shù)器PC,共有21個(gè),可以進(jìn)行位尋址的特殊功能寄存器以及可位尋址特殊功能寄存器的位地址映象分別見表1.5和表1.6。下面介紹一下程序計(jì)數(shù)器PC以及較為常用的幾個(gè)特殊功能寄存器:【相關(guān)知識】(2)特殊功能寄存器(SFR)【相關(guān)知識】76表1-5MCS-51特殊功能寄存器一覽表【相關(guān)知識】表1-5MCS-5177圖1.32【相關(guān)知識】圖1.32【相關(guān)知識】78表1.6MCS-51特殊功能寄存器的位地址映象【相關(guān)知識】表1.6MCS-51特殊功能寄存器的位地址映象【相關(guān)知識】79①累加器A(Accumulator)它是一個(gè)8位寄存器,是程序中最常用的特殊功能寄存器.其主要功能為存放操作數(shù)以及存放運(yùn)算的中間結(jié)果。單片機(jī)中大部分單操作數(shù)指令的操作數(shù)取自累加器,多操作數(shù)指令中的一個(gè)操作數(shù)也取自累加器。加、減、乘、除算術(shù)運(yùn)算指令的運(yùn)算結(jié)果都存放于累加器A或AB寄存器中。指令系統(tǒng)中用A作為累加器的助記符。②寄存器BB寄存器是一個(gè)8位寄存器,主要用于乘除法的運(yùn)算。乘法指令中,B為乘數(shù),乘積的高位亦存于B中。除法指令中,B為除數(shù),并將余數(shù)存于B中。在其它指令中,寄存器B也可以作為一般數(shù)據(jù)寄存器來使用。③程序狀態(tài)字PSW(ProgramStatusWord)程序狀態(tài)字寄存器是一個(gè)8位寄存器,用于存放指令執(zhí)行時(shí)的狀態(tài)信息。其中有些位的狀態(tài)是根據(jù)指令執(zhí)行結(jié)果后,由硬件自動設(shè)置的。PSW的狀態(tài)可用專門的指令進(jìn)行測試,也可以用指令讀出?!鞠嚓P(guān)知識】①累加器A(Accumulator)【相關(guān)知80一些條件轉(zhuǎn)移指令將根據(jù)PSW中有關(guān)位的狀態(tài)來進(jìn)行條件轉(zhuǎn)移,其各位定義如下:位序PSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0位標(biāo)志CYACF0RS1RS0OV-Pa)CY(PSW·7)進(jìn)位標(biāo)志。在執(zhí)行某些算術(shù)和邏輯指令時(shí),可以被硬件或軟件置位或清零。在布爾處理機(jī)中它被認(rèn)為是位累加器,其重要性相當(dāng)于一般中央處理機(jī)中的累加器A。b)AC(PSW·6)輔助進(jìn)位標(biāo)志。當(dāng)進(jìn)行加法或減法操作而產(chǎn)生由低4位數(shù)(BCD碼一位)向高4位數(shù)進(jìn)位或借位時(shí),AC將被硬件置位,否則就被清零。AC被用于BCD碼調(diào)整。詳見DAA指令。c)F0(PSW·5)用戶標(biāo)志位,F(xiàn)0是用戶定義的一個(gè)狀態(tài)標(biāo)記,用軟件來使它置位或清零。該標(biāo)志位狀態(tài)一經(jīng)設(shè)定,可由軟件測試F0,以控制程序的流向。d)RS1,RS0(PSW·4,PSW·3)寄存器區(qū)選擇控制位??梢杂密浖碇梦换蚯辶阋源_定工作寄存器區(qū)。RS1,RS0與寄存器區(qū)的對應(yīng)關(guān)系見表2-3?!鞠嚓P(guān)知識】一些條件轉(zhuǎn)移指令將根據(jù)PSW中有關(guān)位的狀態(tài)來進(jìn)行條件轉(zhuǎn)移,其81e)OV(PSW·2)溢出標(biāo)志。當(dāng)執(zhí)行算術(shù)指令時(shí),由硬件置位或清零,以指示溢出狀態(tài)。當(dāng)執(zhí)行加法指令A(yù)DD時(shí),位6向位7有進(jìn)位而位7不向CY進(jìn)位時(shí),或位6不向位7進(jìn)位而位7向CY進(jìn)位時(shí),溢出標(biāo)志OV置位,否則清零。溢出標(biāo)志常用于ADD和SUBB指令對帶符號數(shù)作加減運(yùn)算時(shí),OV=1表示加減運(yùn)算的結(jié)果超出了目的寄存器A所能表示的帶符號數(shù)(2的補(bǔ)碼)的范圍(-128-+127),參見第3章中關(guān)于ADD和SUBB指令的說明。在MCS-51中,無符號數(shù)乘法指令MUL的執(zhí)行結(jié)果也會影響溢出標(biāo)志。若置于累加器A和寄存器B的兩個(gè)數(shù)的乘積超過255時(shí),OV=1,否則OV=0。此積的高8位放在B內(nèi),低8位放在A內(nèi)。因此,OV=0意味著只要從A中取得乘積即可,否則要從BA寄存器對中取得乘積。除法指令DIV也會影響溢出標(biāo)志。當(dāng)除數(shù)為0時(shí),OV=1,否則OV=0。f)PSW.1位未定義?!鞠嚓P(guān)知識】e)OV(PSW·2)溢出標(biāo)志。當(dāng)執(zhí)行算術(shù)82g)P(PSW.0)奇偶標(biāo)志,每個(gè)指令周期都由硬件來置位或清“0”,以表示累加器A中1的位數(shù)的奇偶數(shù)。若1的位數(shù)為奇數(shù),P置“1”,否則P清“0”。P標(biāo)志位對串行通信中的數(shù)據(jù)傳輸有重要的意義,在串行通信中常用奇偶校驗(yàn)的辦法來檢驗(yàn)數(shù)據(jù)傳輸?shù)目煽啃?。在發(fā)送端可根據(jù)P的值對數(shù)據(jù)的奇偶置位或清零。通信協(xié)議中規(guī)定采用奇校驗(yàn)的辦法,則P=0時(shí),應(yīng)對數(shù)據(jù)(假定由A取得)的奇偶位置位,否則就清0。④數(shù)據(jù)指針DPTR(DataPointer)數(shù)據(jù)指針DPTR是一個(gè)16位特殊功能寄存器,但它既可以按16位寄存器使用,也可以作為兩個(gè)8位寄存器使用,其高位字節(jié)寄存器用DPH表示,低位字節(jié)寄存器用DPL來表示。DPTR主要用來存放16位地址,當(dāng)對64KB外部存儲器尋址時(shí),可作為間址寄存器用。可以用下列兩條傳送指令:MOVXA,@DPTR和MOVX@DPTR,A。在訪問程序存儲器時(shí),DPTR可用作基址寄存器,有一條采用基址+變址尋址方式的指令MOVCA,@A+DPTR,常用于讀取存放在程序存儲器內(nèi)的表格常數(shù)?!鞠嚓P(guān)知識】g)P(PSW.0)奇偶標(biāo)志,每個(gè)指令周期都83⑤堆棧指針寄存器SP(StackPointer)堆棧指針寄存器SP是一個(gè)8位的特殊功能寄存器,主要用來存放堆棧的棧頂?shù)刂?。下面就詳?xì)介紹一下MCS-51的堆棧:a)堆棧的概念堆棧是一種數(shù)據(jù)結(jié)構(gòu),是一片按照“先進(jìn)后出”原則工作的連續(xù)存儲區(qū)域。這片存儲區(qū)域的一端固定,稱為棧底,另一端激活,稱為棧頂,并用堆棧指針寄存器SP存放棧頂?shù)刂?,SP亦稱為堆棧指針,總是指向棧頂。堆棧位于內(nèi)部RAM中地址為30H~7FH的區(qū)域內(nèi)。b)堆棧的操作數(shù)據(jù)寫入堆棧稱為入?;驂簵#瑢?yīng)指令的助記符為PUSH;數(shù)據(jù)從堆棧中讀出稱為出?;驈棾?,對應(yīng)指令的助記符為POP。堆棧的操作只能從棧頂進(jìn)行,在堆棧為空時(shí),SP指向棧底,即棧頂與棧底重合。當(dāng)把數(shù)據(jù)存入堆棧時(shí),SP上跳,從堆棧取出數(shù)據(jù)時(shí)SP下跳,堆棧操作遵循先進(jìn)后出的原則,即:先壓入堆棧的數(shù)據(jù),最后才能彈出?!鞠嚓P(guān)知識】⑤堆棧指針寄存器SP(StackPoin84【相關(guān)知識】進(jìn)棧操作:先SP加l,后寫入數(shù)據(jù)。出棧操作:先讀出數(shù)據(jù),后SP減1。系統(tǒng)復(fù)位后,SP的初始化值為07H,使堆棧實(shí)際上從08H開始,而堆棧一般是在內(nèi)部RAM的30H~7FH單元中開辟,所以程序設(shè)計(jì)時(shí)應(yīng)注意把SP的初始值置為30H以后。SP的內(nèi)容一確定,堆棧的位置就確定下來。由于SP可以初始化不同值,因此,堆棧的位置是浮動的。除用軟件直接改變SP值外,在執(zhí)行PUSH,POP指令,各種子程序調(diào)用,中斷響應(yīng),子程序返回(RET)和中斷返回(RETI)等指令時(shí),SP值將自動調(diào)整。c)堆棧的類型。堆棧類型可以分為向上生長型和向下生長型兩種。向上生長型是指隨著數(shù)據(jù)的不斷入棧,棧頂?shù)刂凡粩嘣龃?,反之,隨著數(shù)據(jù)的不斷出棧,棧頂?shù)刂纺緮鄿p小;所謂向下生長型是指隨著數(shù)據(jù)的不斷入棧,棧頂?shù)刂凡粩鄿p小。反之,隨著數(shù)據(jù)的不斷出棧,棧頂?shù)刂凡粩嘣龃?,如圖1.33所示?!鞠嚓P(guān)知識】進(jìn)棧操作:先SP加l,后寫入數(shù)據(jù)。85圖1.33堆棧類型示意圖d)堆棧的用途。堆棧主要用于存放調(diào)用子程序或中斷時(shí)的返回地址或斷點(diǎn)地址,另外在中斷服務(wù)時(shí)用于保護(hù)CPU現(xiàn)場。⑥I/O端口寄存器P0-P3特殊功能寄存器P0,P1,P2和P3分別是I/O端口P0-P3的鎖存器。P0-P3作為特殊功能寄存器還可用直接尋址方式參與其它操作指令?!鞠嚓P(guān)知識】圖1.33堆棧類型示意圖d)86⑦串行數(shù)據(jù)緩沖器串行數(shù)據(jù)緩沖器SBUF用于存放欲發(fā)送或已接收的數(shù)據(jù),它實(shí)際上由兩個(gè)獨(dú)立的寄存器組成,一個(gè)是發(fā)送緩沖器,另一個(gè)是接收緩沖器。當(dāng)要發(fā)送的數(shù)據(jù)傳送到SBUF時(shí),進(jìn)的是發(fā)送緩沖器。當(dāng)要從SBUF讀數(shù)據(jù)時(shí),則取自接收緩沖器,取走的是剛接收到的數(shù)據(jù)。⑧定時(shí)器/計(jì)數(shù)器MCS-51系列中有兩個(gè)16位定時(shí)器/計(jì)數(shù)器T0和T1。它們各由兩個(gè)獨(dú)立的8位寄存器組成,共有四個(gè)獨(dú)立的寄存器:TH0,TL0,TH1,TL1??梢詫@四個(gè)寄存

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論