《微控制器技術(shù)與應(yīng)用》學(xué)習(xí)情景四 微控制器C51語言程序設(shè)計(jì)_第1頁
《微控制器技術(shù)與應(yīng)用》學(xué)習(xí)情景四 微控制器C51語言程序設(shè)計(jì)_第2頁
《微控制器技術(shù)與應(yīng)用》學(xué)習(xí)情景四 微控制器C51語言程序設(shè)計(jì)_第3頁
《微控制器技術(shù)與應(yīng)用》學(xué)習(xí)情景四 微控制器C51語言程序設(shè)計(jì)_第4頁
《微控制器技術(shù)與應(yīng)用》學(xué)習(xí)情景四 微控制器C51語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

學(xué)習(xí)情景四微控制器C51語言程序設(shè)計(jì)4.1任務(wù)1C51語言基礎(chǔ)應(yīng)用4.2任務(wù)2語句與流程控制4.3任務(wù)3函數(shù)及應(yīng)用4.4任務(wù)4簡單十字路口交通信號燈的控制4.5情景評價(jià)4.6情景總結(jié)返回4.1任務(wù)1C51語言基礎(chǔ)應(yīng)用4.1.1任務(wù)內(nèi)容本任務(wù)主要介紹C51語言的基本知識,包括標(biāo)識符、常量、基本數(shù)據(jù)類型等。4.1.2任務(wù)實(shí)施1.標(biāo)識符(1)關(guān)鍵字關(guān)鍵字是C51語言規(guī)定的一批標(biāo)識符,在源程序中代表固定的含義,不能另作他用。C51語言除了支持如表4一1所示的ANSI標(biāo)準(zhǔn)C語言中的關(guān)鍵字外,還根據(jù)MCS一51系列微控制器的結(jié)構(gòu)特點(diǎn)擴(kuò)展部分關(guān)鍵字,如表4一2所示。下一頁返回4.1任務(wù)1C51語言基礎(chǔ)應(yīng)用

(2)預(yù)定義標(biāo)識符預(yù)定義標(biāo)識符是指C51語言提供的系統(tǒng)函數(shù)的名字(如scanf,printf)和預(yù)編譯處理命令(如include,define)等。C51語言語法允許用戶把這類標(biāo)識符另作他用,但將使這些標(biāo)識符失去系統(tǒng)規(guī)定的原意。因此,為了避免誤解,建議用戶不要把預(yù)定義標(biāo)識符另作他用。(3)自定義標(biāo)識符由用戶根據(jù)需要定義的標(biāo)識符,一般用來給變量、函數(shù)、數(shù)組或文件等命名。程序中使用的自定義標(biāo)識符除要遵循標(biāo)識符的命名規(guī)則外,還應(yīng)做到“見名知意”,即選擇具有相關(guān)含義的英文單詞或漢語拼音,以增加程序的可讀性。如果自定義標(biāo)識符與關(guān)鍵字相同,程序在編譯時(shí)將給出出錯(cuò)信息;如果自定義標(biāo)識符與預(yù)定義標(biāo)識符相同,系統(tǒng)不報(bào)錯(cuò)。上一頁下一頁返回4.1任務(wù)1C51語言基礎(chǔ)應(yīng)用

2.常量在程序運(yùn)行過程中其值始終不變的量稱為常量。在C51語言中,可以使用整型常量、實(shí)型常量、字符型常量。(1)整型常量整型常量又稱為整數(shù)。在C51語言中,整數(shù)可以用十進(jìn)制、八進(jìn)制和十六進(jìn)制形式來表示。但是,C51中數(shù)據(jù)的輸出形式只有十進(jìn)制和十六進(jìn)制兩種。十六進(jìn)制數(shù):用數(shù)字0和字母x或X開頭,如Ox5a、-Ox9c等。上一頁下一頁返回4.1任務(wù)1C51語言基礎(chǔ)應(yīng)用

(2)實(shí)型常量實(shí)型常量又稱實(shí)數(shù)。在C51語言中,實(shí)數(shù)有兩種表示形式,均采用十進(jìn)制數(shù),默認(rèn)格式輸出時(shí)最多只保留6位小數(shù)。①小數(shù)形式:由數(shù)字和小數(shù)點(diǎn)組成。②指數(shù)形式:小數(shù)形式的實(shí)數(shù)E[±1]整數(shù)。(3)字符型常量用單引號括起來的一個(gè)字符,它代表ASCII字符集中的一個(gè)字符稱為字符常量。上一頁下一頁返回4.1任務(wù)1C51語言基礎(chǔ)應(yīng)用

3.基本數(shù)據(jù)類型數(shù)據(jù)類型是指變量的內(nèi)在存儲方式,即存儲變量所需的字節(jié)數(shù)以及變量的取值范圍。C51語言中變量的基本數(shù)據(jù)類型如表4一3所示,其中bit、shit、sfr、sfr16為C51語言新增的數(shù)據(jù)類型,可以有效地利用MCS-51系列微控制器的內(nèi)部資源。所謂變量,是指在程序運(yùn)行過程中其值可以改變的量。上一頁下一頁返回4.1任務(wù)1C51語言基礎(chǔ)應(yīng)用變量應(yīng)該先定義后使用,定義格式如下:數(shù)據(jù)類型變量標(biāo)識符[=初值〕變量定義通常放在函數(shù)的開頭部分,但也可以放在函數(shù)的外部或復(fù)合語句的開頭。以float為例,變量的定義方式主要有以下3種。當(dāng)在一個(gè)表達(dá)式中出現(xiàn)不同數(shù)據(jù)類型的變量時(shí),必須進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。C51語言中數(shù)據(jù)類型的轉(zhuǎn)換有兩種方式:自動(dòng)類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換。上一頁下一頁返回4.1任務(wù)1C51語言基礎(chǔ)應(yīng)用

(1)自動(dòng)類型轉(zhuǎn)換不同數(shù)據(jù)類型的變量在運(yùn)算時(shí),由編譯系統(tǒng)自動(dòng)將它們轉(zhuǎn)換成同一數(shù)據(jù)類型,再進(jìn)行運(yùn)算。自動(dòng)轉(zhuǎn)換規(guī)則:bit→char→int→long→float→signed→unsigned。自左至右數(shù)據(jù)長度增加,即參加運(yùn)算的各個(gè)變量都轉(zhuǎn)換為它們之中數(shù)據(jù)最長的數(shù)據(jù)類型。當(dāng)賦值運(yùn)算符左右兩側(cè)類型不一致時(shí),編譯系統(tǒng)會按上述規(guī)則,自動(dòng)把右側(cè)表達(dá)式的類型轉(zhuǎn)換成左側(cè)變量的類型再賦值。(2)強(qiáng)制類型轉(zhuǎn)換根據(jù)程序設(shè)計(jì)的需要,可以進(jìn)行強(qiáng)制類型轉(zhuǎn)換,強(qiáng)制類型轉(zhuǎn)換是利用強(qiáng)制類型轉(zhuǎn)換符將一個(gè)表達(dá)式強(qiáng)制轉(zhuǎn)換成所需要的類型。其格式如下:(類型)表達(dá)式上一頁返回4.2任務(wù)2語句與流程控制4.2.1任務(wù)內(nèi)容本任務(wù)主要學(xué)習(xí)C51語言賦值語句、函數(shù)調(diào)用語句、復(fù)合語句、空語句、順序結(jié)構(gòu)、分支結(jié)構(gòu)及循環(huán)結(jié)構(gòu)的靈活應(yīng)用。4.2.2任務(wù)實(shí)施1.基本語句基本語句主要用于順序結(jié)構(gòu)程序的編寫,包括賦值語句、函數(shù)調(diào)用語句、復(fù)合語句、空語句等。在C51語言中,語句的結(jié)束符為分號。(1)賦值語句在任何合法的賦值表達(dá)式的尾部加上一個(gè)分號就構(gòu)成了賦值語句。賦值語句的一般形式為:

變量=表達(dá)式;下一頁返回4.2任務(wù)2語句與流程控制(2)函數(shù)調(diào)用語句在C51語言中,若函數(shù)僅進(jìn)行某些操作而不返回函數(shù)值,這時(shí)函數(shù)的調(diào)用可作為一條獨(dú)立的語句,稱為函數(shù)調(diào)用語句。其一般形式為:函數(shù)名(實(shí)際參數(shù)表);(3)復(fù)合語句在C51語言中,把多條語句用一對大括號括起來組成的語句稱為復(fù)合語句。復(fù)合語句又稱為“語句塊”,其一般格式為:{語句1;語句2;…;語句n;}注意:大括號之后不再加分號復(fù)合語句雖然可由多條語句組成,但它是一個(gè)整體,相當(dāng)于一條語句,凡可以使用單一語句的位置都可以使用復(fù)合語句。在復(fù)合語句內(nèi),不僅可以有執(zhí)行語句,還可以有變量定義(或說明)語句。上一頁下一頁返回4.2任務(wù)2語句與流程控制(4)空語句如果一條語句只有語句結(jié)束符號“;”則稱為空語句。例如:;空語句在執(zhí)行時(shí)不產(chǎn)生任何動(dòng)作,但仍有一定的作用。比如,預(yù)留位置或用來作為空循環(huán)體。但是,在程序中隨意加分號也會導(dǎo)致邏輯上的錯(cuò)誤,需要慎用。2.流程語句流程控制語句有順序結(jié)構(gòu)、分支結(jié)構(gòu)及循環(huán)結(jié)構(gòu)三種語句,順序語句就是按照語句在程序中出現(xiàn)的先后順序進(jìn)行執(zhí)行,相對比較簡單。在此就重點(diǎn)介紹分支語句和循環(huán)語句。上一頁下一頁返回4.2任務(wù)2語句與流程控制(1)分支語句C51語言的流程控制語句主要用于編寫具有分支結(jié)構(gòu)或循環(huán)結(jié)構(gòu)的程序,包括分支語句(if,if-else,if-else-if,switch)、循環(huán)語句(while,do-while,for)和輔助控制語句(breakcontinue)為了便于理解,如圖4.2所示給出一個(gè)用簡單的微控制器應(yīng)用系統(tǒng)。微控制器采用89C51,在P1口的低4位P1.0~P1.3接了4個(gè)發(fā)光二極管(DO~D3),在P3口的中間4位P3.2~P3.5接了4個(gè)具有鎖定功能的按鍵(K1一K4)。上一頁下一頁返回4.2任務(wù)2語句與流程控制

if語句的一般形式為:if(表達(dá)式)語句;其中,if是C51語言的關(guān)鍵字,表達(dá)式兩側(cè)的圓括號不可少,最后的語句可以是C51語言任意合法的語句。如圖4.3所示給出了if語句的執(zhí)行過程:先計(jì)算表達(dá)式,如果表達(dá)式的值為真(非零),則執(zhí)行其后的語句;否則,順序執(zhí)行if語句后的下一條語句??梢?,if語句是一種單分支語句。

(2)循環(huán)語句在程序設(shè)計(jì)中經(jīng)常會遇到需要重復(fù)執(zhí)行的操作,如延時(shí)、累加、累乘、數(shù)據(jù)傳遞等,利用循環(huán)結(jié)構(gòu)來處理各類重復(fù)操作既簡單又方便。C51語言中提供了3種語句來實(shí)現(xiàn)循環(huán)結(jié)構(gòu),分別是while語句、do-while語句和fn:語句。其中,while語句又稱為“當(dāng)”型循環(huán),do-while語句又稱為“直到”型循環(huán)。上一頁下一頁返回4.2任務(wù)2語句與流程控制①while語句。while語句的一般形式為:while(表達(dá)式){循環(huán)體}其中,“表達(dá)式”可以是C51語言中任意合法的表達(dá)式,其作用是控制循環(huán)體是否執(zhí)行;“循環(huán)體”是循環(huán)語句中需要重復(fù)執(zhí)行的部分,可以是一條簡單的可執(zhí)行語句,也可以是用大括號括起來的復(fù)合語句。②do-while語句。do-while語句的一般形式為:do{循環(huán)體}while(表達(dá)式);其中,“表達(dá)式”可以是C51語言中任意合法的表達(dá)式,其作用是控制循環(huán)體是否執(zhí)行;“循環(huán)體”可以是C51語言中任意合法的可執(zhí)行語句;最后的“;”不可丟,表示do-while語句結(jié)束。上一頁下一頁返回4.2任務(wù)2語句與流程控制③for語句。for語句的一般形式為:for(表達(dá)式1;表達(dá)式2;表達(dá)式3){循環(huán)體}其中,“表達(dá)式1',“表達(dá)式2",“表達(dá)式3”可以是C51語言中任意合法的表達(dá)式,3個(gè)表達(dá)式之間用“;”隔開,其作用是控制循環(huán)體是否執(zhí)行;循環(huán)體可以是C51語言中任意合法的可執(zhí)行語句。for語句的典型應(yīng)用形式為:for(循環(huán)變量初值;循環(huán)條件;循環(huán)變量增值)循環(huán)體上一頁返回4.3任務(wù)3函數(shù)及應(yīng)用4.3.1任務(wù)內(nèi)容C51語言設(shè)計(jì)程序就是編寫函數(shù),下面先介紹C51語言中函數(shù)定義的一般格式,格式如下。[函數(shù)類型〕函數(shù)名([參數(shù)列表])[{存儲模式}][函數(shù)種類][interruptn][usingn{局部變量定義可執(zhí)行語句}其中,大括號以外的部分稱為函數(shù)頭;大括號以內(nèi)的部分稱為函數(shù)體。如果函數(shù)體內(nèi)無語句,則稱之為空函數(shù)??蘸瘮?shù)不執(zhí)行任何操作,定義它的口的只是為了以后程序功能的擴(kuò)充。函數(shù)頭中各部分的含義如下。下一頁返回4.3任務(wù)3函數(shù)及應(yīng)用①函數(shù)類型(return-t9pe}:函數(shù)返回值的類型,即函數(shù)類型(默認(rèn)為lnt)。②函數(shù)名(funcname:函數(shù)名。在同一程序中,函數(shù)名必須唯一。③參數(shù)列表(args):函數(shù)的參數(shù)列表。參數(shù)可有可無。若有,則稱之為有參函數(shù),各參數(shù)之間要用“,”分隔;若無,則稱之為無參函數(shù)。④存儲模式(small,compact/large):指定函數(shù)的存儲模式。⑤函數(shù)種類(reentrant):指定函數(shù)是遞歸的或可重入的。⑥interruptn:指定函數(shù)是一個(gè)中斷函數(shù)。n為中斷源的編號(0~4)。⑦usingn:指定函數(shù)所用的工作寄存器組。n為工作寄存器組的編號(0~3)。上一頁下一頁返回4.3任務(wù)3函數(shù)及應(yīng)用從函數(shù)的定義格式可以看出,C51語言在4個(gè)方面對標(biāo)準(zhǔn)C語言的函數(shù)進(jìn)行了擴(kuò)展:指定函數(shù)的存儲模式;指定函數(shù)是可重入的;指定函數(shù)是一個(gè)中斷函數(shù);指定函數(shù)所用的工作寄存器組。在構(gòu)成C51語言設(shè)計(jì)程序的若干個(gè)函數(shù)中,有且僅有一個(gè)是主函數(shù)main()。由于C51語言程序的執(zhí)行都是從main()函數(shù)開始的,也是在main()函數(shù)中結(jié)束整個(gè)程序運(yùn)行的,其他函數(shù)只有在執(zhí)行main()函數(shù)的過程中被調(diào)用才能被執(zhí)行。注意:同變量一樣,函數(shù)也必須先定義后使用。所有函數(shù)在定義時(shí)都是相互獨(dú)立的,一個(gè)函數(shù)中不能再定義其他函數(shù),但可以相互調(diào)用。函數(shù)調(diào)用的一般規(guī)則是:主函數(shù)可以調(diào)用其他普通函數(shù);普通函數(shù)之間可以相互調(diào)用;普通函數(shù)不能調(diào)用主函數(shù)上一頁下一頁返回4.3任務(wù)3函數(shù)及應(yīng)用4.3.2任務(wù)實(shí)施MCS-51系列微控制器通常有5個(gè)中斷源,為了方便使用,C51語言對它們進(jìn)行了編號,如表4一4所示。當(dāng)CPU正在執(zhí)行一個(gè)特定任務(wù)時(shí),可能有更緊急的事情需要CPU處理,這就涉及中斷優(yōu)先級。高優(yōu)先級中斷程序可以中斷正在處理的低優(yōu)先級中斷程序,因此最好給每種不同優(yōu)先級程序分配不同的工作寄存器組,以達(dá)到壓棧保護(hù)的目的。中斷函數(shù)的定義格式如下:函數(shù)類型函數(shù)名()interrupt中斷編號using工作寄存器組編號

{

可執(zhí)行語句

}上一頁下一頁返回4.3任務(wù)3函數(shù)及應(yīng)用4.3.3任務(wù)擴(kuò)展在主函數(shù)和中斷函數(shù)中都可調(diào)用的函數(shù)容易產(chǎn)生問題。MCS一51系列微控制器一般使用寄存器傳遞函數(shù)參數(shù),局部變量一般存放在片內(nèi)RAM中。由于片內(nèi)RAM的容量很小(只有1288),函數(shù)重入時(shí)會破壞或覆蓋上次調(diào)用的數(shù)據(jù)。為此,C51語言提供了關(guān)鍵字:P-PritT'9rit,用于將相應(yīng)的函數(shù)指定為可重入函數(shù)。所謂重入函數(shù),是指可以在函數(shù)體內(nèi)間接調(diào)用其自身的函數(shù)。重入函數(shù)可以被遞歸調(diào)用和多重調(diào)用,而不用擔(dān)心變量被覆蓋,因?yàn)槊看魏瘮?shù)調(diào)用中的局部變量都會被單獨(dú)保存起來。重入函數(shù)的定義格式如下:上一頁下一頁返回4.3任務(wù)3函數(shù)及應(yīng)用函數(shù)類型函數(shù)名(形參列表)reentrant{局部變量說明可執(zhí)行語句}上一頁返回4.4任務(wù)4簡單十字路口交通信號燈的控制4.4.1任務(wù)內(nèi)容十字路口交通信號燈的控制是一個(gè)比較復(fù)雜的問題,既要保證車輛的安全通行,又要考慮緊急情況處理、放行/禁行時(shí)間顯示、車流量統(tǒng)計(jì)以及根據(jù)車流量的大小自動(dòng)調(diào)整放行/禁行時(shí)間等。4.4.2任務(wù)實(shí)施簡易十字路口交通信號燈控制僅考慮以下簡單情況:若東西方向?yàn)榉判芯€,則南北方向?yàn)榻咕€;反之亦然。交通信號燈的變化是固定的,變化規(guī)律如表4一5所示。下一頁返回4.4任務(wù)4簡單十字路口交通信號燈的控制當(dāng)兩個(gè)方向(東西方向和南北方向)交替地成為放行線和禁止線時(shí),即可實(shí)現(xiàn)簡易十字路口交通信號燈控制。放行線—綠燈亮放行xs后,黃燈亮警告ys,然后紅燈亮禁止(x+y)s;禁止線—紅燈亮禁止(x+力S,然后綠燈亮放行xs后,黃燈亮警告”。在模擬情況下,為了在較短時(shí)間內(nèi)看到控制效果,可以假設(shè)x=4,y=1,即單向放行時(shí)間最多為5s}1.硬件電路設(shè)計(jì)東西方向和南北方向共需要4組12個(gè)信號燈,建議采用ProteusISIS中的TRAFFICLIGHTS元件,如圖4.4所示。微控制器系統(tǒng)采用Atmel公司的89C51芯片,晶振選用12MHz,信號燈的控制使用P1口。P1.0、P1.1、P1.2分別控制東西方向的紅、綠、黃信號燈;P1.4,Pl.5、P1.6分別控制南北方向的紅、綠、黃信號燈。上一頁下一頁返回4.4任務(wù)4簡單十字路口交通信號燈的控制

2.軟件設(shè)計(jì)從硬件電路圖可以看出,當(dāng)P1口有關(guān)引腳輸出高電平1時(shí),則點(diǎn)亮相應(yīng)的“信號燈”;當(dāng)P1口有關(guān)引腳輸出低電平0時(shí),則熄滅相應(yīng)的“信號燈”。為了實(shí)現(xiàn)交通運(yùn)行狀態(tài)的控制要求,P1口輸出的控制碼有4種,如表4一6所示根據(jù)交通燈的運(yùn)行狀態(tài),主程序流程圖如圖4.5所示。4.4.3任務(wù)擴(kuò)展完善任務(wù)實(shí)施中的源程序功能。上一頁返回4.5情景評價(jià)考核評價(jià)按表4-

溫馨提示

  • 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

提交評論