整套課件教程:單片機C51項目設(shè)計與開發(fā)_第1頁
整套課件教程:單片機C51項目設(shè)計與開發(fā)_第2頁
整套課件教程:單片機C51項目設(shè)計與開發(fā)_第3頁
整套課件教程:單片機C51項目設(shè)計與開發(fā)_第4頁
整套課件教程:單片機C51項目設(shè)計與開發(fā)_第5頁
已閱讀5頁,還剩537頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 單片機C51項目設(shè)計與開發(fā)項目1 廣告燈的控制與制作任務(wù)1信號燈的控制任務(wù)2流水燈的控制任務(wù)3花樣燈的控制任務(wù)4廣告燈的設(shè)計和制作下一頁返回項目2 電子表的控制和制作任務(wù)1 電子表的靜態(tài)顯示設(shè)計任務(wù)2電子表的動態(tài)顯示設(shè)計任務(wù)3電子表的調(diào)整設(shè)計任務(wù)4電子表的設(shè)計和制作上一頁下一頁返回項目3點陣LED的控制和制作任務(wù)1 8X8點陣LED模擬電梯運行任務(wù)2 漢字顯示控制上一頁下一頁返回項目4 數(shù)字電壓表的控制和制作任務(wù)1 LCM1602液晶顯示任務(wù)2數(shù)字電壓表的設(shè)計與制作上一頁下一頁返回項目5 萬年歷的控制和制作任務(wù)1 PG160128A液晶顯示任務(wù)2 萬年歷的計時控制任務(wù)3 萬年歷的溫度控制任務(wù)

2、4 萬年歷的設(shè)計和制作上一頁下一頁返回項目6 機器人的控制和制作任務(wù)1追光機器人的設(shè)計與制作任務(wù)2滅火機器人的設(shè)計與制作任務(wù)3相撲機器人的設(shè)計與制作上一頁返回項目1 廣告燈的控制與制作任務(wù)1信號燈的控制任務(wù)2流水燈的控制任務(wù)3花樣燈的控制任務(wù)4廣告燈的設(shè)計和制作返回任務(wù)1 信號燈的控制任務(wù)描述將AT89C51的P1.0端口作為輸出口,在此端口上接一個發(fā)光二極管L1,使用單片機實現(xiàn)發(fā)光二極管閃爍的效果,閃爍問隔為0.2 s。即單片機上電工作后,L1發(fā)光二極管不停地一亮一滅,其亮滅的問隔時問為0.2 s,依此重復(fù)循環(huán)。任務(wù)分析1.硬件電路分析在單片機的P1.0端口用導(dǎo)線連接一個發(fā)光二極管,此發(fā)光二

3、極管的閃爍情況可作為信號燈。電路原理如圖1-1所示,當P1.0端口輸出高電平,即P1.0=1時,根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,這時發(fā)光二極管L1熄滅;當P1.0端口輸出低電平,即P1.0=0時,發(fā)光二極管L1亮。下一頁返回任務(wù)1 信號燈的控制2.軟件設(shè)計思路單片機指令的執(zhí)行時問是很短的,大多都是微秒級,而我們要求閃爍的時問問隔是0.2 s,相對于微秒來說,相差太大,所以在執(zhí)行某一指令時,要插入延時程序。任務(wù)中要求獲得0.2 s的時問長度,當單片機時鐘電路中晶振頻率為12 MHz時,一個機器周期為1 s,0.2 s就是1 s的200 000倍。在程序編寫中,常用循環(huán)語句來完成計數(shù),從而獲得需要

4、的延時時問。采用單片機C語言編寫一個0.2 s的延時程序如下:上一頁下一頁返回任務(wù)1 信號燈的控制上一頁下一頁返回任務(wù)1 信號燈的控制參考源程序上一頁下一頁返回任務(wù)1 信號燈的控制上一頁下一頁返回任務(wù)1 信號燈的控制系統(tǒng)仿真調(diào)試 在Keil中建立工程項目,新建C語言文件,并在編輯區(qū)中輸入上面的源程序,編譯后得到HEX文件。運行Proteus,在編輯窗口繪制圖1-1所示的電路圖,加載編譯得到的HEX文件,進行仿真調(diào)試。運行仿真調(diào)試圖如圖1-2所示。知識拓展MCS-51單片機的基本組成1.80C5,單片機的基本結(jié)構(gòu)單片機的基本結(jié)構(gòu)如圖1-3所示。80C51單片機主要由以下兒部分組成。(1) CPU

5、系統(tǒng)上一頁下一頁返回任務(wù)1 信號燈的控制8位CPU,含布爾處理器。時鐘電路??偩€控制邏輯。(2)存儲器系統(tǒng)4 KB的程序存儲器(ROM/EPROM/FLASH,可外擴至64 KB ) 。128 B的數(shù)據(jù)存儲器(RAM,可再外擴64 KB ) 。特殊功能寄存器SFRo(3) I/O口和其他功能單元4個并行I/O口。2個16位定時/計數(shù)器。1個全雙工異步串行。中斷系統(tǒng)(5個中斷源、2個優(yōu)先級)。上一頁下一頁返回任務(wù)1 信號燈的控制2. MCS-51單片機的內(nèi)部組成(1) 80C51單片機的內(nèi)部結(jié)構(gòu)80C51單片機由微處理器(含運算器和控制器)、存儲器、I/O口以及特殊功能寄存器SFR等構(gòu)成,內(nèi)部邏

6、輯結(jié)構(gòu)如圖1-4所示(圖中未畫出增強型單片機相關(guān)部件)。(2) 80C51的微處理器作為80C51單片機的核心部分的微處理器是一個8位的高性能中央處理器(CPU),它的作用是讀入并分析每條指令,根據(jù)各指令的功能,控制單片機的各功能部件執(zhí)行指定的運算或操作。它主要由以下兩部分構(gòu)成。上一頁下一頁返回任務(wù)1 信號燈的控制1)運算器運算器由算術(shù)/邏輯運算單元ALU,累加器ACC,寄存器B、暫存寄存器、程序狀態(tài)字寄存器PSW組成。它完成的任務(wù)是實現(xiàn)算術(shù)和邏輯運算、位變量處理和數(shù)據(jù)傳送等操作。2)控制器同一般微處理器的控制器一樣,80C51的控制器也由指令寄存器IR、指令譯碼器ID、定時及控制邏輯電路和程

7、序計數(shù)器PC等組成。(3) 80C51的片內(nèi)存儲器80C51單片機的片內(nèi)存儲器與一般微機的存儲器的配置不同。一般微機的ROM和RAM安排在同一空問的不同范圍(稱為普林斯頓結(jié)構(gòu))。而80C51單片機的存儲器在物理上設(shè)計成程序存儲器和數(shù)據(jù)存儲器兩個獨立的空問(稱為哈佛結(jié)構(gòu))。上一頁下一頁返回任務(wù)1 信號燈的控制3. 80C51單片機的封裝和引腳80C51系列單片機采用雙列直插式(DIP ) , QFP44 C Quad Flat Pack)和LCC C Leaded Chip Carrier)形式封裝。這里介紹常用的總線型DIP40封裝和非總線型DIP20封裝,如圖1-5所示。知識鏈接1.文件包含

8、程序中的第一行為#include ,是一個文件包含處理。文件包含是指一個源文件可將另一個源文件的內(nèi)容全部包含進來。用尖括號時,編譯器從C標準庫文件所在的目錄中尋找要包含的文件,這稱為標準方式;用雙撇號時,系統(tǒng)先在用戶當前目錄中尋找要包含的文件,若找不到,再按標準方式查找。上一頁下一頁返回任務(wù)1 信號燈的控制2.宏定義宏定義命令為#define,它的作用是用一個宏定義來替換一個字符串,而這個字符串既可以是常數(shù),也可以是其他字符串,甚至還可以是帶參數(shù)的宏。宏定義的一般格式:#define宏名字符串3. C51擴展的關(guān)鍵字sfr和sbitMCS-51單片機內(nèi)有21個特殊功能寄存器(SFR,只能用直接

9、尋址方式訪問。特殊功能寄存器中還有11個可進行位尋址的寄存器。上一頁下一頁返回任務(wù)1 信號燈的控制4. for循環(huán)語句其一般格式為:for(表達式1;表達式2;表達式3)動作表達式1:通常是設(shè)定起始值。表達式2:通常是條件判斷式,如果條件為真時,執(zhí)行動作,否則終止循環(huán)。表達式3:通常是步長表達式,執(zhí)行動作完畢后,必須再回到這里做運算,然后再到表達式2中做判斷。5. while循環(huán)語句其一般格式為:while(條件表達式)上一頁下一頁返回任務(wù)1 信號燈的控制動作先測試條件表達式是否成立,當條件表達式為真時,執(zhí)行循環(huán)內(nèi)的動作,做完后又繼續(xù)跳回條件表達式做測試,如此反復(fù)直到條件表達式為假為止。使用時

10、要避免條件永真,造成死循環(huán)。6. C51程序的結(jié)構(gòu)特點C51程序由函數(shù)構(gòu)成,函數(shù)是C51程序的基本單位。函數(shù)的組成。一個函數(shù)由“函數(shù)定義”和“函數(shù)體”兩個部分組成。函數(shù)定義部分包括函數(shù)類型、函數(shù)名、形式參數(shù)說明等,函數(shù)名后面必須跟一個圓括號0,形式參數(shù)說明在0內(nèi)進行,函數(shù)也可以沒有形式參數(shù)。上一頁下一頁返回任務(wù)1 信號燈的控制函數(shù)體由一對花括弧組成,在里面的內(nèi)容就是函數(shù)體,如果一個函數(shù)有多個,則最外面的一對為函數(shù)體的范圍。函數(shù)體的內(nèi)容為若干條語句,一般有兩類語句,一類為說明語句,用來對函數(shù)中將要用到的變量進行定義;另一類為執(zhí)行語句,用來完成一定的功能或算法。有的函數(shù)體僅有一對,其中既沒有變量定

11、義語句,也沒有執(zhí)行語句,這也是合法的,稱為“空函數(shù)”。 一個C51程序必須有且只能有一個名為main()的函數(shù),它是一個特殊的函數(shù),也稱為該程序的主函數(shù),無論main函數(shù)在整個程序中的位置如何,程序的執(zhí)行都是從main()函數(shù)開始的。表達方式靈活。上一頁下一頁返回任務(wù)1 信號燈的控制C51可利用C語言提供的多種運算符組成各種表達式,還可以采用多種方法來獲得表達式的值,從而使用戶在程序設(shè)計中具有更大的靈活性。C51同C語言一樣,語法規(guī)則不太嚴格,程序設(shè)計的白由度比較大,程序的書寫格式白由靈活。C51本身沒有輸入/輸出語句。標準的輸入和輸出是通過調(diào)用庫函數(shù)scanf和printf它們分別是輸入庫函

12、數(shù)和輸出庫函數(shù)。對于單片機應(yīng)用系統(tǒng)來說,由于具體要求不同,應(yīng)用系統(tǒng)的輸入/輸出方式多種多樣,不可能一律采用串行口作輸入和輸出。因此應(yīng)該根據(jù)實際需要,由應(yīng)用系統(tǒng)的研制人員白己來編寫滿足特定需要的輸入/輸出函數(shù)。上一頁下一頁返回任務(wù)1 信號燈的控制為了使程序便于閱讀和理解,可以給程序加上一些注釋。注釋部分由符號“/*”開始,由符號“*/”結(jié)束,或在符號“/,之后。在“/*”和“*/”之問的內(nèi)容即為注釋內(nèi)容,注釋內(nèi)容可在一行寫完,也可以分成兒行來寫。注釋部分不參加編譯,編譯時注釋的內(nèi)容不產(chǎn)生可執(zhí)行代碼。注釋在程序中的作用是很重要的,一個良好的程序設(shè)計者應(yīng)該在程序中使用足夠的注釋來說明整個程序的功能、

13、有關(guān)算法和注意事項等。需要注意的是,注釋不能嵌套,即在“/*”和“*/”之問不允許再次出現(xiàn)“/*”和“*/”。上一頁返回任務(wù)2 流水燈的控制任務(wù)描述用AT89C51單片機的P1口做輸出口,白制一款簡易的流水燈。用AT89C51的P1口做輸出口,接8只發(fā)光二極管,試編寫程序,使發(fā)光二極管實現(xiàn)流水的效果,每盞燈亮滅的時問問隔為0.2 s。即單片機上電工作后,第一個發(fā)光二極管P1.0被點亮,0.2 s后,P1.0被熄滅,第二個發(fā)光二極管P1.1被點亮,依此類推,重復(fù)循環(huán)。任務(wù)分析1.硬件電路分析單片機要正常運行,必須具備三個最基本的硬件條件:電源正常、時鐘正常和復(fù)位正常。本流水燈實際上就是一個帶有8

14、個發(fā)光二極管的單片機最小應(yīng)用系統(tǒng),即為由發(fā)光二極管、晶振、復(fù)位、電源等電路和必要的軟件組成的單個單片機。其具體硬件組成如圖1-6所示。下一頁返回任務(wù)2 流水燈的控制2.軟件設(shè)計思路上述硬件原理圖搭建完成上電之后,還不能看到流水燈循環(huán)點亮的現(xiàn)象,我們還需要告訴單片機怎么來進行工作,即編寫程序控制單片機引腳電平的高低變化,來實現(xiàn)發(fā)光二極管的一亮一滅。根據(jù)流水燈的具體要求,程序的流程圖如圖1-7所示。參考源程序上一頁下一頁返回任務(wù)2 流水燈的控制上一頁下一頁返回任務(wù)2 流水燈的控制上一頁下一頁返回任務(wù)2 流水燈的控制系統(tǒng)仿真調(diào)試在Keil中建立工程項目,新建C語言文件,并在編輯區(qū)中輸入上面的源程序,

15、編譯后得到HEX文件。運行Proteus,在編輯窗口繪制如圖1-6所示的電路圖,加載編譯得到的HEX文件,進行仿真調(diào)試。運行仿真圖如圖1-8所示。知識拓展MCS-51單片機存儲器結(jié)構(gòu)1.80C51單片機的程序存儲器配置80C51單片機的程序計數(shù)器PC是16位的計數(shù)器,所以能尋址64 KB的程序存儲器地址范圍。允許用戶程序調(diào)用或轉(zhuǎn)向64 KB的任何存儲單元。上一頁下一頁返回任務(wù)2 流水燈的控制MCS-51系列的80C51在芯片內(nèi)部有4 KB的掩膜ROM, 87C51在芯片內(nèi)部有4 KB的EPROM,而80C31在芯片內(nèi)部沒有程序存儲器,應(yīng)用時要在單片機外部配置一定容量的EPROM o 80C51

16、程序存儲器的配置如圖1-9所示。 80C51的EA引腳為訪問內(nèi)部或外部程序存儲器的選擇端。接高電平時,CPU將首先訪問內(nèi)部存儲器,當指令地址超過OFFFH時,自動轉(zhuǎn)向片外ROM去取指令;接低電平時(接地),CPU只能訪問外部程序存儲器(對于80C31單片機,由于其內(nèi)部無程序存儲器,只能采用這種接法)。2. 80C51單片機的數(shù)據(jù)存儲器配置80C51單片機的數(shù)據(jù)存儲器分為片外RAM和片內(nèi)RAM兩大部分,如圖1-10所示。上一頁下一頁返回任務(wù)2 流水燈的控制80C51片內(nèi)RAM共有256 B,其地址范圍為00HFFH。其中低128 B,地址范圍在00H7FH之問,分成工作寄存器區(qū)、位尋址區(qū)、通用R

17、AM區(qū)三部分。高128 B(特殊功能寄存器區(qū)SFR)地址范圍在80HFFH之問。片外RAM地址空問為64 KB,地址范圍是0000HFFFFH .與程序存儲器地址空問不同的是,片外RAM地址空問與片內(nèi)RAM地址空問在地址的低端0000H007FH是重疊的。這就需要采用不同的尋址方式加以區(qū)分。另外,片外RAM不能進行堆棧操作。在80C51單片機中,盡管片內(nèi)RAM的容量不大,但它的功能多,使用靈活,是單片機應(yīng)用系統(tǒng)設(shè)計時必須要周密考慮的。上一頁下一頁返回任務(wù)2 流水燈的控制(1)工作寄存器區(qū)80C51單片機片內(nèi)RAM低端的OOH1FH共32 B,分成4個工作寄存器組,每組占8個單元。寄存器0組:地

18、址00H07H 。寄存器1組:地址08H0FH 。寄存器2組:地址10H17H 。寄存器3組:地址18H1FH。可以對這兩位進行編程,以選擇不同的工作寄存器組。工作寄存器組與RS1, RS0的關(guān)系及地址見表1-1。上一頁下一頁返回任務(wù)2 流水燈的控制(2)位尋址區(qū)內(nèi)部RAM的20H2FH共16B是位尋址區(qū)。其128位的地址范圍是00H7FH,對被尋址的位可進行位操作。人們常將程序狀態(tài)標志和位控制變量設(shè)在位尋址區(qū)內(nèi),對于該區(qū)未用到的單元也可以作為通用RAM使用。位地址與字節(jié)地址的關(guān)系見表1-2。(3)通用RAM區(qū)位尋址區(qū)之后的30H7FH共80 B為通用RAM區(qū)。這些單元可以作為數(shù)據(jù)緩沖器使用,

19、這一區(qū)域的操作指令非常豐富,數(shù)據(jù)處理方便靈活。在實際應(yīng)用中,常需在RAM區(qū)設(shè)置堆棧,80C51的堆棧一般設(shè)在30H7FH的范圍內(nèi),棧頂?shù)奈恢糜啥褩V羔楽P指示。復(fù)位時SP的初值為07H,在系統(tǒng)初始化時可以重新設(shè)置。上一頁下一頁返回任務(wù)2 流水燈的控制(4)特殊功能寄存器(SFR區(qū))特殊功能寄存器(SFR)也稱為專用寄存器,特殊功能寄存器反映了MC S-51單片機的運行狀態(tài),很多功能也通過特殊功能寄存器來定義和控制程序的執(zhí)行。MCS-51單片機有21個特殊功能寄存器(SFR),它們離散地分布在內(nèi)部RAM區(qū)的80HFFH地址中。這些寄存器的功能已作了專門的規(guī)定,用戶不能修改其結(jié)構(gòu)。其具體地址分配見

20、表1-3。知識鏈接1.變量的使用(1)變量的定義變量是指在程序執(zhí)行過程中,其值可以改變的量。一個變量應(yīng)該有一個名字,在內(nèi)存中占據(jù)一定的存儲單元,變量定義必須放在變量使用之前,一般放在函數(shù)體的開頭部分。上一頁下一頁返回任務(wù)2 流水燈的控制變量定義的一般格式:存儲類型 數(shù)據(jù)類型 變量名其中,數(shù)據(jù)類型和存儲類型見表1-4和表1-5。(2)變量的類型C51編譯器支持的數(shù)據(jù)類型、數(shù)據(jù)長度和其值域見表1-4。如果在變量定義時省略類型標志符,編譯器會自動使用默認存儲類型。默認的存儲類型進一步由SMALL, COMPACT和LARGE存儲模式指令限制,參見表1-6。2.函數(shù)的調(diào)用函數(shù)調(diào)用的一般形式為:函數(shù)名(

21、實際參數(shù)列表);上一頁下一頁返回任務(wù)2 流水燈的控制在一個函數(shù)中需要用到某個函數(shù)的功能時,就調(diào)用該函數(shù)。調(diào)用者稱為主調(diào)函數(shù),被調(diào)用者稱為被調(diào)函數(shù)。若被調(diào)函數(shù)是有參函數(shù),則主調(diào)函數(shù)必須把被調(diào)函數(shù)所需的參數(shù)傳遞給被調(diào)函數(shù)。傳遞給被調(diào)函數(shù)的數(shù)據(jù)稱為實際參數(shù),簡稱實參。實參是有確定值的常量、變量或表達式,若有多個參數(shù),各參數(shù)問需要用逗號分開。3. C51位運算符位運算的操作對象只能是整型和字符型數(shù)據(jù),不能是浮點型數(shù)據(jù)。C51提供以下6種位運算:按位與(&);按位或();上一頁下一頁返回任務(wù)2 流水燈的控制按位異或();按位取反();左移()。上一頁返回任務(wù)3 花樣燈的控制任務(wù)描述本任務(wù)以AT89C51

22、單片機為核心,采用常用電了器件設(shè)計,白制一款簡易的花樣燈。用AT89C51的P1口做輸出口,接8只發(fā)光二極管,試編寫程序,使第一盞燈(P1.0)和最后一盞燈(P1.7)同時向中問點亮,形成兩盞燈從兩頭向中問合攏亮滅的現(xiàn)象,直到只有中問兩盞燈(P1.3和P1.4)亮,然后再從中問向兩頭依次點亮。其兩盞燈同時亮滅的問隔時問為5 ms,依此類推,重復(fù)循環(huán)。下一頁返回任務(wù)3 花樣燈的控制任務(wù)分析1.硬件電路分析根據(jù)以上項目分析,結(jié)合以前所學課程,可以選擇本課程中所學的MCS-51單片機芯片作為微控制器,八盞燈都用“模擬電了電路技術(shù)”課程中所學的發(fā)光二極管來代替,為了避免發(fā)光二極管在工作中過流燒毀,每個

23、發(fā)光二極管所在電路中串聯(lián)一個470的電阻。設(shè)計的硬件電路原理圖如圖1-11所示。2.軟件電路分析(圖1-12)上一頁下一頁返回任務(wù)3 花樣燈的控制參考源程序上一頁下一頁返回任務(wù)3 花樣燈的控制上一頁下一頁返回任務(wù)3 花樣燈的控制系統(tǒng)仿真調(diào)試在Keil中建立工程項目,新建C語言文件,并在編輯區(qū)中輸入上面的源程序,編譯后得到HEX文件。運行Proteus,在編輯窗口繪制圖1-11所示的電路圖,加載編譯得到的HEX文件,進行仿真調(diào)試。運行仿真圖如圖1-13所示。知識拓展并行輸入/輸出口結(jié)構(gòu)80C51單片機有4個8位的并行I/O接口P0, P1, P2和P3,各接口均由接口鎖存器、輸出驅(qū)動器和輸入緩沖

24、器組成。各接口除可以作為字節(jié)輸入/輸出外,它們的每一條接口線也可以單獨用作位輸入/輸出線。各接口編址于特殊功能寄存器中,既有字節(jié)地址又有位地址。對接口鎖存器進行讀寫,就可以實現(xiàn)接口的輸入/輸出操作。上一頁下一頁返回任務(wù)3 花樣燈的控制1 .PO口PO接口由1個輸出鎖存器、1個轉(zhuǎn)換開關(guān)MUX, 2個三態(tài)輸入緩沖器、輸出驅(qū)動電路、1個與門及1個反相器組成,如圖1-14所示。(1) PO用作通用I/O接口當系統(tǒng)不進行片外的ROM擴展(此時EA=1),也不進行片外的RAM擴展(內(nèi)部RAM傳送使用MOV類指令)時,PO作為通用I/O口使用,在這種情況下,單片機硬件自動使控制C=0 ,MUX開關(guān)接向鎖存器

25、的反相輸出端,另外,與門輸出的“0”使輸出驅(qū)動器的上拉場效應(yīng)管T1處于截止狀態(tài)。因此,作為輸出口時,PO口為漏極開路輸出,工作時需外接上拉電阻。上一頁下一頁返回任務(wù)3 花樣燈的控制(2)Po用作地址/數(shù)據(jù)總線當系統(tǒng)進行片外的ROM擴展(此時EA -0或進行片外RAM擴展時,PO用作地址/數(shù)據(jù)總線。在這種情況下,單片機內(nèi)硬件自動使C=1, MUX開關(guān)接向反相器的輸出端,這時與門的輸出由地址/數(shù)據(jù)線的狀態(tài)決定。2. P1接口P1接口的位結(jié)構(gòu)如圖1-15所示。由圖1-15可見,P1接口由1個輸出鎖存器、2個三態(tài)輸入緩沖器和輸出驅(qū)動電路組成,在內(nèi)部設(shè)有上拉電阻。P1接口是通用的準雙向I/O接口。輸出高

26、電平時,能向外提供拉電流負載,不必再接上拉電阻。當接口用作輸入時,須向鎖存器寫入1.上一頁下一頁返回任務(wù)3 花樣燈的控制3. P2接口P2接口由1個輸出鎖存器、1個轉(zhuǎn)換開關(guān)MUX, 2個三態(tài)輸入緩沖器、輸出驅(qū)動電路和1個反相器組成。P2接口的位結(jié)構(gòu)如圖1-16所示。(1)P2用作通用I/O接口當不需要在單片機芯片外部擴展程序存儲器(對于80C51/87C51, EA -1),僅可能擴展256 B的片外RAM時,只用到了地址線的低8位,P2接口仍可以作為通用I/O接口使用。4. P3口P3接口的位結(jié)構(gòu)如圖1-17所示。P3接口由1個輸出鎖存器、3個輸入緩沖器(其中2個為三態(tài))、輸出驅(qū)動電路和1個

27、與非門組成。輸出驅(qū)動電路與P3接口和P1接口相同,內(nèi)部設(shè)有上拉電阻。上一頁下一頁返回任務(wù)3 花樣燈的控制(1) P3用作第一功能的通用I/O接口當CPU對P3接口進行字節(jié)或位尋址時(多數(shù)應(yīng)用場合是把兒條接口線設(shè)為第二功能,另外兒條接口線設(shè)為第一功能,這時宜采用位尋址方式),單片機內(nèi)部的硬件自動將第二功能輸出線的W置1,這時,對應(yīng)的接口線為通用I/O接口方式。(2) P3用作第二功能使用當CPU不對P3接口進行字節(jié)或位尋址時,單片機內(nèi)部硬件自動將接口鎖存器的Q端置。這時,P3接口可以作為第二功能使用。各引腳的定義如下。P3.0: RXD(串行接口輸入)。P3.1: TXD(串行接口輸出)。P3.

28、3: INTO(外部中斷0輸入)。上一頁下一頁返回任務(wù)3 花樣燈的控制P3.3: INT1(外部中斷1輸入)。P3.4: TO(定時/計數(shù)器0的外部輸入)。P3.5: T1(定時/計數(shù)器1的外部輸入)。P3.6: WR(片外數(shù)據(jù)存儲器“寫”選通控制輸出)。P3.7: RD(片外數(shù)據(jù)存儲器“讀”選通控制輸出)。P3接口相應(yīng)的接口線處于第二功能,應(yīng)滿足的條件如下。串行I/O接口處于運行狀態(tài)(RXD, TXD ) 。外部中斷已經(jīng)打開(INTO , INT1 ) 。定時器/計數(shù)器處于外部計數(shù)狀態(tài)(T0, T1)。執(zhí)行讀/寫外部RAM的指令(RD、WR)。上一頁下一頁返回任務(wù)3 花樣燈的控制5.并行接口

29、的負載能力P0, P1, P2, P3接口的輸入和輸出電平與CMOS電平和TTL電平均兼容。PO接口的每一位接口線可以驅(qū)動8個LSTTL負載。在作為通用I/O接口時,由于輸出驅(qū)動電路是開漏方式,由集電極開路(OC門)電路或漏極開路電路驅(qū)動時,需外接上拉電阻;當作為地址/數(shù)據(jù)總線使用時,接口線輸出不是開漏的,無須外接上拉電阻。P1, P2, P3接口的每一位能驅(qū)動4個LSTTL負載。它們的輸出驅(qū)動電路設(shè)有內(nèi)部上拉電阻,所以可以方便地由集電極開路(OC門)電路或漏極開路電路所驅(qū)動,而無須外接上拉電阻。上一頁下一頁返回任務(wù)3 花樣燈的控制知識鏈接構(gòu)造數(shù)據(jù)類型一一一維數(shù)組數(shù)組是一組有序數(shù)據(jù)的集合,數(shù)組

30、中的每一個數(shù)據(jù)元素都屬于同一個數(shù)據(jù)類型。數(shù)組中的各個元素可以用數(shù)組名和下標來唯一確定。一維數(shù)組只有一個下標。在C語言中,數(shù)組必須先定義,然后才能使用,一維數(shù)組的定義形式如下:數(shù)據(jù)類型數(shù)組名【常量表達式;其中,“數(shù)據(jù)類型”說明了數(shù)組中各個元素的類型。“數(shù)組名”是整個數(shù)組的標識符,它的命名方法與變量的命名方法一樣?!俺A勘磉_式”說明了該數(shù)組的長度,即該數(shù)組中的元素個數(shù)。常數(shù)表達式必須用方括號1括起來,而且其中不能含有變量。上一頁返回任務(wù)4 廣告燈的設(shè)計和制作任務(wù)描述用AT89C51的P1, P2部分口做輸出口,其具體硬件連接方式如圖1-18所示,試編寫程序來實現(xiàn)以下功能。任務(wù)分析1.硬件電路分析把

31、“單片機系統(tǒng)”區(qū)域中的P1.0, P1.1, P1.2分別接第一組紅燈、綠燈和藍燈,P1.4,P1.5, P1.6分別接第二組紅燈、綠燈和藍燈,P2.0, P2.1, P2.2分別接第三組紅燈、綠燈和藍燈。每組紅燈、綠燈和藍燈都分別并聯(lián)四個,依次按順序排開。每組燈與單片機的端口都接有電阻和三極管,其具體硬件連接如圖1-18所示。下一頁返回任務(wù)4 廣告燈的設(shè)計和制作2.軟件設(shè)計思路廣告燈的程序設(shè)計思路與任務(wù)3中的設(shè)計思路相同,通過取數(shù)組的數(shù)據(jù)改變單片機端口的值,進而控制發(fā)光二極管的變化。參考源程序上一頁下一頁返回任務(wù)4 廣告燈的設(shè)計和制作上一頁下一頁返回任務(wù)4 廣告燈的設(shè)計和制作上一頁下一頁返回

32、任務(wù)4 廣告燈的設(shè)計和制作上一頁下一頁返回任務(wù)4 廣告燈的設(shè)計和制作上一頁下一頁返回任務(wù)4 廣告燈的設(shè)計和制作系統(tǒng)仿真調(diào)試在Keil中建立工程項目,新建C語言文件,并在編輯區(qū)中輸入上面的源程序,編譯后得到HEX文件。運行Proteus,在編輯窗口繪制圖1-18所示的電路圖,加載編譯得到的HEX文件,進行仿真調(diào)試。運行仿真圖如圖1-19所示。知識拓展1.時鐘電路及時序單片機的工作過程是:取一條指令、譯碼,進行微操作,再取一條指令、譯碼進行微操作,這樣自動地、一步一步地由微操作依序完成相應(yīng)指令規(guī)定的功能。各指令的微操作在時問上有嚴格的次序,這種微操作的時問次序稱作時序。單片機的時鐘信號用來為單片機

33、芯片內(nèi)部各種微操作提供時問基準。上一頁下一頁返回任務(wù)4 廣告燈的設(shè)計和制作(1) 80C51的時鐘產(chǎn)生方式80C51單片機的時鐘信號通常有兩種產(chǎn)生方式:內(nèi)部時鐘方式和外部時鐘方式。內(nèi)部時鐘方式如圖1-20 (a)所示。外部時鐘方式是把外部已有的時鐘信號引入單片機內(nèi),如圖1-20 (b)所示。此方式常用于多片80C51單片機同時工作,以便于各單片機的同步。一般要求外部信號高電平的持續(xù)時問大于30 ns,且為頻率低于12 MHz的方波。對于CHMOS工藝的單片機,外部時鐘要由XTAL1端引入,而XTAL2引腳應(yīng)懸空。(2) 80C51的時鐘信號晶振周期(或外部時鐘信號周期)為最小的時序單位,如圖1

34、-21所示。上一頁下一頁返回任務(wù)4 廣告燈的設(shè)計和制作(3) 80C51的典型時序1)單周期指令時序單字節(jié)指令時序如圖1-22 (a)所示。在S1P2開始把指令操作碼讀入指令寄存器,并執(zhí)行指令。但在S4P2開始讀的下一指令的操作碼要丟棄,且程序計數(shù)器PC不加1。雙字節(jié)指令時序如圖1-22 (b)所示。在S1P2開始把指令操作碼讀入指令寄存器,并執(zhí)行指令。在S4P2開始再讀入指令的第二字節(jié)。單字節(jié)、雙字節(jié)指令均在S6P2結(jié)束操作。2)雙周期指令時序?qū)τ趩巫止?jié)指令時序,在兩個機器周期之內(nèi)要進行4次讀操作。只是后3次讀操作無效,如圖1-23所示。上一頁下一頁返回任務(wù)4 廣告燈的設(shè)計和制作由圖中可以看

35、到,每個機器周期中ALE信號有效兩次,具有穩(wěn)定的頻率,可以將其作為外部設(shè)備的時鐘信號。但應(yīng)注意,在對片外部RAM進行讀/寫操作時,ALE信號會出現(xiàn)非周期現(xiàn)象,如圖1-24所示。2.單片機的復(fù)位電路復(fù)位是使單片機或系統(tǒng)中的其他部件處于某種確定的初始狀態(tài)。單片機的工作就是從復(fù)位開始的。(1)復(fù)位電路當在80C51單片機的RST引腳引入高電平并保持2個機器周期時,單片機內(nèi)部就執(zhí)行復(fù)位操作(若該引腳持續(xù)保持高電平,單片機就處于循環(huán)復(fù)位狀態(tài))。實際應(yīng)用中,復(fù)位操作有兩種基本形式:一種是上電復(fù)位,另一種是上電與按鍵均有效的復(fù)位,如圖1-25所示。上一頁下一頁返回任務(wù)4 廣告燈的設(shè)計和制作(2)單片機復(fù)位后

36、的狀態(tài)單片機的復(fù)位操作使單片機進入初始化狀態(tài)。初始化后,程序計數(shù)器PC=0000H,所以程序從0000H地址單元開始執(zhí)行。單片機啟動后,片內(nèi)RAM為隨機值,運行中的復(fù)位操作不改變片內(nèi)RAM的內(nèi)容。特殊功能寄存器復(fù)位后的狀態(tài)是確定的:POP3為FFH, SP為07H, SBUF不定,IP, IE和PCON的有效位為0,其余的特殊功能寄存器的狀態(tài)均為00H 。相應(yīng)的意義如下。POP3=FFH:相當于各口鎖存器已寫入1,此時不但可用于輸出,也可用于輸入。SP=07H:堆棧指針指向片內(nèi)RAM的07H單元(首個入棧內(nèi)容將寫入08H單元)。上一頁下一頁返回任務(wù)4 廣告燈的設(shè)計和制作IP , IE和PCON

37、的有效位為0,各中斷源處于低優(yōu)先級且均被關(guān)斷,串行通信的波特率PSW=00H,當前工作寄存器為0組。知識鏈接1.C51的關(guān)鍵字關(guān)鍵字是一類具有固定名稱和特定含義的特殊標識符,有時又稱為保留字。在編寫C語言源程序時,一般不允許將關(guān)鍵字另作他用,換句話說,就是標識符的命名不要與關(guān)鍵字相同。與其他計算機語言相比,C語言的關(guān)鍵字是比較少的,ANSIC標準一共規(guī)定了32個關(guān)鍵字,表1-7按用途列出了ANSIC標準的關(guān)鍵字。C51編譯器除了支持ANSIC標準的關(guān)鍵字以外,還擴展了如表1-8所示的關(guān)鍵字。上一頁下一頁返回任務(wù)4 廣告燈的設(shè)計和制作2. switch case語句其一般格式為:switch(條

38、件表達式) case條件值1:動作1breakcase條件值2:動作2breakcase條件值3:上一頁下一頁返回任務(wù)4 廣告燈的設(shè)計和制作動作3breakcase條件值4:動作4breakdefaut: break;switch內(nèi)的條件表達式的結(jié)果必須為整數(shù)或字符。switch以條件表達式的值來與各case的條件值對比,如果與某個條件值相符合,則執(zhí)行該case的動作;如果所有的條件值都不符合,則執(zhí)行default的動作。每一個動作之后一般要寫break,否則就會繼續(xù)執(zhí)行下一個case的動作,這是我們不希望看到的。上一頁下一頁返回任務(wù)4 廣告燈的設(shè)計和制作另外,case之后的條件值必須是數(shù)據(jù)常

39、數(shù),不能是變量,而且不可以重復(fù),即條件值必須各不相同,當有數(shù)種case所做的動作一樣時,也可以寫在一起,即上下并列。一般當程序必須做多選1時,可以采用switch語句。break是跳出循環(huán)的語句,任何由switch, for, while, do-while構(gòu)成的循環(huán),都可以用break來跳出,必須注意的是,break一次只能跳出一層循環(huán),通常都和if連用,當某些條件成立后,就跳出循環(huán)。當所有case的條件值都不成立時,就執(zhí)行default所指定的動作,執(zhí)行完成后,也要使用break指令跳出switch循環(huán)。上一頁返回圖1-1信號燈電路原理圖返回圖1-2信號燈的仿真調(diào)試圖返回圖1-3 80C5

40、1單片機的基本結(jié)構(gòu)返回圖1-4 80C51內(nèi)部邏輯結(jié)構(gòu)返回圖1-5 80C51單片機引腳封裝返回圖1-6流水燈的原理圖返回圖1-7流水燈程序的流程圖返回圖1-8流水燈的仿真圖返回圖1-9 80C51程序存儲器的配置返回圖1-10 80C51單片機RAM的配置返回表1-1 80C51單片機工作寄存器地址表返回表1-2 80C51單片機的位地址表返回表1-3 80C51特殊功能寄存器位地址及字節(jié)地址表返回表1-4基本數(shù)據(jù)類型的長度返回表1-4基本數(shù)據(jù)類型的長度返回表1-5 C51存儲類型修飾符返回表1-6存儲模式及說明返回圖1-11花樣燈的原理圖返回圖1-12花樣燈的設(shè)計流程圖返回圖1-13花樣燈

41、的仿真圖返回圖1-14 PO接口的位結(jié)構(gòu)返回圖1-15P1接口的位結(jié)構(gòu)返回圖1-16 P2接口的位結(jié)構(gòu)返回圖1-17 P3接口的位結(jié)構(gòu)返回圖1-18廣告燈的原理圖返回圖1-19廣告燈的仿真圖返回圖1-20 80C51單片機的時鐘信號返回圖1-21 80C51單片機的時鐘信號返回圖1-22單周期指令時序返回圖1-23單字節(jié)雙周期指令時序返回圖1-24訪問外部RAM的雙周期指令時序返回圖1-25單片機的復(fù)位電路返回表1-7 ANSIC標準的關(guān)鍵字返回表1-7 ANSIC標準的關(guān)鍵字返回表1-8 C51編譯器擴展的關(guān)鍵字返回項目2 電子表的控制和制作任務(wù)1 電子表的靜態(tài)顯示設(shè)計任務(wù)2電子表的動態(tài)顯示

42、設(shè)計任務(wù)3電子表的調(diào)整設(shè)計任務(wù)4電子表的設(shè)計和制作返回任務(wù)1 電子表的靜態(tài)顯示設(shè)計任務(wù)描述用AT89C51的PO和P1口做輸出口,接兩只七段數(shù)碼管,編寫程序,使兩只七段數(shù)碼管實現(xiàn)顯示兩位十進制數(shù)字,從00一直加到99,每隔0.5 s數(shù)值加1,如此重復(fù)循環(huán)。任務(wù)分析1.硬件電路分析如圖2-1所示,用AT89C51的PO口和P1口做輸出口,接兩只七段數(shù)碼管,PO口所接的數(shù)碼管顯示十位數(shù)字,P1口所接的數(shù)碼管顯示個位數(shù)字。因為是靜態(tài)顯示,LED處于持續(xù)發(fā)光狀態(tài),R1R14選擇470 ,其主要作用是限流。下一頁返回任務(wù)1 電子表的靜態(tài)顯示設(shè)計2.軟件設(shè)計思路主程序的流程圖如圖2-2所示。參考源程序上一

43、頁下一頁返回任務(wù)1 電子表的靜態(tài)顯示設(shè)計上一頁下一頁返回任務(wù)1 電子表的靜態(tài)顯示設(shè)計系統(tǒng)仿真調(diào)試在Keil中建立工程項目,新建C語言文件,并在編輯區(qū)中輸入上面的源程序,編譯后得到HEX文件。運行Proteus,在編輯窗口繪制如圖2-3所示電路圖,加載編譯得到的HEX文件,進行仿真調(diào)試。上一頁下一頁返回任務(wù)1 電子表的靜態(tài)顯示設(shè)計按下窗口下面的工具條中的play鍵,兩只數(shù)碼管從00開始計數(shù),一直加到99,然后回到00,循環(huán)往復(fù)。還可以按下pause鍵暫停,按下stop鍵停止仿真。在運行過程中,如果按下RST鍵,就可以復(fù)位到00。仿真運行過程中,可以觀察每一個引腳的電平高低的變化。知識拓展數(shù)碼管顯

44、示1.原理及控制電路圖2-4所示為七段LED數(shù)碼管的原理圖,數(shù)碼管由8個發(fā)光二極管構(gòu)成,通過不同的組合可顯示數(shù)字09,字符AF, H, L, P, R, U, Y,符號“一”及小數(shù)點“.”。上一頁下一頁返回任務(wù)1 電子表的靜態(tài)顯示設(shè)計共陽極數(shù)碼管的8個發(fā)光二極管的陽極(二極管正端)連接在一起。通常,公共陽極接高電平(一般接電源正極),其他管腳接段驅(qū)動電路輸出端。當某段驅(qū)動電路的輸出端為低電平時,則該端所連接的字段導(dǎo)通并點亮,根據(jù)發(fā)光字段的不同組合,可顯示出各種數(shù)字或字符。共陰極數(shù)碼管的8個發(fā)光二極管的陰極(二極管負端)連接在一起。通常,公共陰極接低電平(一般接地),其他管腳接段驅(qū)動電路輸出端。

45、當某段驅(qū)動電路的輸出端為高電平時,則該端所連接的字段導(dǎo)通并點亮,根據(jù)發(fā)光字段的不同組合,可顯示出各種數(shù)字或字符。要顯示出某一數(shù)字或字符,共陰極和共陽極數(shù)碼管的字型編碼恰好對應(yīng)相反,使用共陽極數(shù)碼管,數(shù)據(jù)為0表示對應(yīng)字段亮,數(shù)據(jù)為1表示對應(yīng)字段暗;而使用共陰極數(shù)碼管,數(shù)據(jù)為0表示對應(yīng)字段暗,數(shù)據(jù)為1表示對應(yīng)字段亮。如要顯示“0”,共陽極數(shù)碼管的字型編碼應(yīng)為11000000B(即COH,共陰極數(shù)碼管的字型編碼應(yīng)為00111111B(即3FH)。表2-1中列出了共陽極數(shù)碼管的字型編碼表。上一頁下一頁返回任務(wù)1 電子表的靜態(tài)顯示設(shè)計2.靜態(tài)顯示原理靜態(tài)顯示是指數(shù)碼管顯示某一字符時,相應(yīng)的發(fā)光二極管恒定

46、導(dǎo)通或恒定截止。這種顯示方式的各位數(shù)碼管相互獨立,公共端恒定接地(共陰極)或接正電源(共陽極)。每個數(shù)碼管的8個字段分別與一個8位I/O口地址相連,I/O口只要有段碼輸出,相應(yīng)字符即顯示出來,并保持不變,直到I/O口輸出新的段碼。采用靜態(tài)顯示方式,較小的電流即可獲得較高的亮度,且占用CPU時問少,編程簡單,顯示便于監(jiān)測和控制,但其占用的I/O口多,硬件電路復(fù)雜,成本高,只適合于顯示位數(shù)較少的場合。上一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計任務(wù)描述用AT89C51的P1口做計數(shù)輸入口,P3口接數(shù)碼管LEDMPX(顯示兩位數(shù)字的數(shù)碼管),編寫程序,使數(shù)碼管實現(xiàn)動態(tài)顯示的效果,顯示兩位十進制數(shù)字,從00

47、一直加到99,每隔0.5 s加1,不斷遞增,依此重復(fù)循環(huán)。動態(tài)顯示時,兩位數(shù)字自左向右交替顯示,時問問隔為20 ms次內(nèi),實際運用中,時問問隔也不能太短。任務(wù)分析1.硬件電路分析如圖2-5所示,用AT89C51的P1, P3口做輸出口,P3作為兩位數(shù)碼管的數(shù)據(jù)端口,P1口的P1.0和P1.1控制數(shù)碼管的公共端口,P0, P2口懸空,因為是動態(tài)顯示,LED處于問斷發(fā)光狀態(tài),所以P3口外接電阻R2R9選擇100 。下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計2.軟件設(shè)計思路主程序?qū)崿F(xiàn)00 99的計數(shù),時問問隔為0.5 s。中斷程序?qū)崿F(xiàn)動態(tài)顯示,動態(tài)顯示的流程圖如圖2-6所示。參考源程序上一頁下一頁返回任

48、務(wù)2 電子表的動態(tài)顯示設(shè)計上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計系統(tǒng)仿真調(diào)試數(shù)碼管的動態(tài)顯示:在Keil中建立工程項目,新建C語言文件,并在編輯區(qū)中輸入上面的源程序,編譯后得到HEX文件。運行Proteus,在編輯窗口繪制如圖2-7所示的電路圖,加載編譯得到的HEX文件,進行仿真調(diào)試。上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計按下窗口下面的工具條中的play鍵,數(shù)碼管從00開始計數(shù),一直加到99,然后回到00,循環(huán)往復(fù)。還可以按下pause鍵暫停,按下stop鍵停止仿真。在運行過程中,如果按下RST鍵,可以復(fù)位到00.仿真運行過程中,可以觀察

49、每一個引腳的電平高低的變化。知識拓展1動態(tài)顯示上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計動態(tài)顯示是一位一位地輪流點亮各位數(shù)碼管,這種逐位點亮顯示器的方式稱為位掃描。通常,各位數(shù)碼管的段選線相應(yīng)并聯(lián)在一起,由一個8位的I/O口控制,稱為數(shù)碼管的數(shù)據(jù)端;各位數(shù)碼管的位選線(公共陰極或陽極)由另外的I/O口控制,稱為數(shù)碼管的控制端。動態(tài)方式顯示時,各數(shù)碼管分時輪流選通,要使其穩(wěn)定顯示,必須采用掃描方式,即在某一時刻只選通一位數(shù)碼管,并送出相應(yīng)的段碼,在另一時刻選通另一位數(shù)碼管,并送出相應(yīng)的段碼。依此規(guī)律循環(huán),即可使各位數(shù)碼管顯示將要顯示的字符。這些字符是在不同的時刻分別顯示,但由于人眼存在視覺暫留

50、效應(yīng),只要每位顯示問隔足夠短,就可以給人以同時顯示的感覺。采用動態(tài)顯示方式比較節(jié)省I/O口,硬件電路也較靜態(tài)顯示方式簡單,但其亮度不如靜態(tài)顯示方式,而且在顯示位數(shù)較多時,CPU要依次掃描,占用CPU較多的時問。上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計知識拓展2MCS-51的中斷1.MCS-5,的中斷系統(tǒng)結(jié)構(gòu)(1)中斷的概念計算機具有實時處理能力,能對外界發(fā)生的事件進行及時的處理,這是依靠它們的中斷系統(tǒng)來實現(xiàn)的。CPU在處理某一事件A時,發(fā)生了另一事件B請求CPU迅速去處理(中斷發(fā)生);CPU暫時中斷當前的工作,轉(zhuǎn)去處理事件B(中斷響應(yīng)和中斷服務(wù));待CPU將事件B處理完畢后,再回到原來事件

51、A被中斷的地方繼續(xù)處理事件A(中斷返回),這一過程稱為中斷。如圖2-8所示。上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計(2) MCS-51中斷系統(tǒng)的結(jié)構(gòu)MCS-51的中斷系統(tǒng)有5個中斷源,2個優(yōu)先級,可實現(xiàn)二級中斷嵌套。由片內(nèi)特殊功能寄存器中的中斷允許寄存器IE控制CPU是否響應(yīng)中斷請求;由中斷優(yōu)先級寄存器IP安排各中斷源的優(yōu)先級;同一優(yōu)先級內(nèi)各中斷同時提出中斷請求時,由內(nèi)部查詢邏輯確定其響應(yīng)次序。MCS-51單片機的中斷系統(tǒng)由中斷請求標志位(在相關(guān)的特殊功能寄存器中)、中斷允許寄存器IE/中斷優(yōu)先級寄存器IP及內(nèi)部硬件查詢電路組成,如圖2-9所示,圖中反映了MCS-51單片機中斷系統(tǒng)的功能

52、和控制情況。上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計2. MCS-51的中斷源(1)中斷源MCS-51單片機有5個中斷源。INTO:外部中斷0請求,可由P3.2腳輸入。通過ITO(TCON.O來決定其為低電平有效還是下降沿有效。一旦輸入信號有效,中斷標志IEO (TCON.1)置1(由硬件自動完成),向CPU申請中斷。INT 1:外部中斷1請求,可由P3.3腳輸入。通過IT 1 (TCON.2)來決定其為低電平有效還是下降沿有效。一旦輸入信號有效,中斷標志IE1 (TCON.3置1(由硬件自動完成),向CPU申請中斷。TFO:定時器TO溢出中斷請求。當定時器0產(chǎn)生溢出時,置位中斷標志TFO

53、(由硬件自動完成),向CPU申請中斷。上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計(2)中斷請求標志在中斷系統(tǒng)中,應(yīng)用哪種中斷,采用哪種觸發(fā)方式,要由定時/計數(shù)器的控制寄存器TCON和串行口控制寄存器SCON的相應(yīng)位進行規(guī)定。TCON和SCON都屬于特殊功能寄存器,字節(jié)地址分別為88H和98H,可進行位尋址。1) TCON的中斷標志TCON是定時/計數(shù)器TO和T1的控制寄存器,它鎖存2個定時/計數(shù)器的溢出中斷標志及外部中斷INTO和INT 1的中斷標志,與中斷有關(guān)的各位定義如下:上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計2 ) SCON的中斷標志SCON是串行口控制寄存器,與中斷有關(guān)的是它的

54、低兩位TI和RI,定義如下:RI(SCON.0)串行口接收中斷標志位。當允許串行口接收數(shù)據(jù)時,每接收完一個串行幀,由硬件置位RI。CPU響應(yīng)中斷時,不能自動清除RI,必須由軟件清除。TI (SCON.1)串行口發(fā)送中斷標志位。當CPU將一個發(fā)送數(shù)據(jù)寫入串行口發(fā)送緩沖器時,就啟動了發(fā)送過程。每發(fā)送完一個串行幀,由硬件置位TI o CPU響應(yīng)中斷時,不能自動清除TI, TI必須由軟件清除。上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計3. MCS-5,中斷的控制(1)中斷允許控制CPU對中斷系統(tǒng)所有中斷以及某個中斷源的開放和屏蔽是由中斷允許寄存器IE控制的,IE的狀態(tài)可通過程序由軟件設(shè)定,某位設(shè)定為

55、1,相應(yīng)的中斷源中斷允許;某位設(shè)置為0,相應(yīng)的中斷源中斷屏蔽。CPU復(fù)位時,IE各位清0,禁止所有中斷。IE寄存器(字節(jié)地址為A8H)各位的定義如下:上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計(2)中斷優(yōu)先級控制MCS-51單片機有兩個中斷優(yōu)先級,可實現(xiàn)二級中斷服務(wù)嵌套。每個中斷源的中斷優(yōu)先級都是由中斷優(yōu)先級寄存器IP中的相應(yīng)位的狀態(tài)來規(guī)定的。IP的狀態(tài)由軟件設(shè)定,某位設(shè)定為1,則相應(yīng)的中斷源為高優(yōu)先級中斷;某位設(shè)定為0,則相應(yīng)的中斷源為低優(yōu)先級中斷。單片機復(fù)位時,IP各位清0,各中斷源同為低優(yōu)先級中斷。IP寄存器(字節(jié)地址為B8H)各位的定義如下:上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)

56、計同一優(yōu)先級中的中斷申請不止一個時,則有中斷優(yōu)先權(quán)排隊問題。同一優(yōu)先級的中斷優(yōu)先權(quán)排隊,由中斷系統(tǒng)硬件確定的自然優(yōu)先級形成,其排列見表2-2。MCS-51單片機的中斷優(yōu)先級有三條原則:CPU同時接收到兒個中斷時,首先響應(yīng)優(yōu)先級別最高的中斷請求。正在進行的中斷過程不能被新的同級或低優(yōu)先級的中斷請求所中斷。正在進行的低優(yōu)先級中斷服務(wù),能被高優(yōu)先級中斷請求所中斷。知識鏈接1中斷服務(wù)函數(shù)C51編譯器支持在C語言源程序中直接編寫8051單片機的中斷服務(wù)函數(shù)程序。定義中斷服務(wù)函數(shù)的一般形式為:上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計函數(shù)類型 函數(shù)名(形式參數(shù)數(shù)表)(interrupt m) (usin

57、g n)其中,interrupt為關(guān)鍵字,其后m是中斷號,m的取值范圍為0310編譯器從8m+3處產(chǎn)生中斷向量,具體的中斷號m和中斷向量取決于不同的8051系列單片機芯片。(1)關(guān)鍵字using對函數(shù)目標代碼的影響在函數(shù)的入口處將當前工作寄存器組保護到堆棧中:指定的工作寄存器內(nèi)容不會改變;函數(shù)返回之前將被保護的工作寄存器組從堆棧中恢復(fù)。使用關(guān)鍵字using在函數(shù)中確定一個工作寄存器組時必須十分小心,要保證任何寄存器組的切換都只在控制的區(qū)域內(nèi)發(fā)生,如果做不到這一點,將產(chǎn)生不正確的函數(shù)結(jié)果。另外,還要注意,帶using屬性的函數(shù),原則上不能返回bit類型的值,并且關(guān)鍵字using不允許用于外部函數(shù)

58、。上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計(2)關(guān)鍵字interrupt對中斷函數(shù)目標代碼的影響關(guān)鍵字interrupt也不允許用于外部函數(shù)。在進入中斷函數(shù)時,特殊功能寄存器ACC, B,DPH, DPL, PSW將被保存入棧;如果不使用寄存器組切換,則將中斷函數(shù)中所用到的全部工作寄存器都入棧;函數(shù)返回之前,所有的寄存器內(nèi)容出棧;中斷函數(shù)由8051單片機指令RETI結(jié)束。(3)編寫8051單片機中斷函數(shù)時應(yīng)遵循的規(guī)則中斷函數(shù)不能進行參數(shù)傳遞,中斷函數(shù)中包含任何參數(shù)聲明都將導(dǎo)致編譯出錯。中斷函數(shù)沒有返回值,如果企圖定義一個返回值,將得到不正確的結(jié)果。因此,建議在定義中斷函數(shù)時將其定義為voi

59、d類型,以明確說明沒有返回值。上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計在任何情況下都不能直接調(diào)用中斷函數(shù),否則會產(chǎn)生編譯錯誤。因為中斷函數(shù)的返回是由8051單片機指令RETI完成的,RETI指令影響8051單片機的硬件中斷系統(tǒng)。如果在沒有實際中斷請求的情況下直接調(diào)用中斷函數(shù),RETI指令的操作結(jié)果會產(chǎn)生一個致命的錯誤。如果中斷函數(shù)中用到浮點運算,必須保存浮點寄存器的狀態(tài),當沒有其他程序執(zhí)行浮點運算時,可以不保存。C51編譯器的數(shù)學函數(shù)庫math. h中,提供了保存浮點寄存器狀態(tài)的庫函數(shù)pfsave和恢復(fù)浮點寄存器狀態(tài)的庫函數(shù)restore。上一頁下一頁返回任務(wù)2 電子表的動態(tài)顯示設(shè)計如果在

60、中斷函數(shù)中調(diào)用了其他函數(shù),則被調(diào)用函數(shù)所使用的寄存器組必須與中斷函數(shù)相同。用戶必須保證按要求使用相同的寄存器組,否則會產(chǎn)生不正確的結(jié)果,這一點必須引起足夠的注意。如果定義中斷函數(shù)時沒有使用using選項,則由編譯器選擇一個寄存器組作絕對寄存器組訪問。另外,由于中斷的產(chǎn)生不可預(yù)測,中斷函數(shù)對其他函數(shù)的調(diào)用可能形成違規(guī)調(diào)用,需要時可將被中斷函數(shù)所調(diào)用的其他函數(shù)定義成可再入函數(shù)。 C51編譯器從絕對地址8m+3處產(chǎn)生一個中斷向量,其中m為中斷號。該向量包含一個到中斷函數(shù)入口地址的絕對跳轉(zhuǎn)。在對源程序編譯時,可用編譯控制指令NOINTVECTOR抑制中斷向量的產(chǎn)生,從而使用戶能夠從獨立的匯編程序模塊中

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論