




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、2021/8/1412010/5/18單片機(jī)原理與接口技術(shù)第四章第四章 MCS-51系列單片機(jī)程序設(shè)計系列單片機(jī)程序設(shè)計22021/8/144.1 匯編語言程序設(shè)計概述n計算機(jī)是仿照人的思維方式順序執(zhí)行一條條指令來完成特定計算機(jī)是仿照人的思維方式順序執(zhí)行一條條指令來完成特定任務(wù)的機(jī)器,計算機(jī)程序因此被定義為指令或語句的任務(wù)的機(jī)器,計算機(jī)程序因此被定義為指令或語句的“有序有序集合集合”,程序設(shè)計是指編寫計算機(jī)程序的過程程序設(shè)計是指編寫計算機(jī)程序的過程。n匯編語言是用指令助記符等表示的計算機(jī)指令,匯編語言是用指令助記符等表示的計算機(jī)指令,采用匯編語采用匯編語言編寫的程序被稱為匯編語言程序言編寫的程
2、序被稱為匯編語言程序。匯編語言程序具有代碼。匯編語言程序具有代碼效率高(編譯后的指令代碼占用存儲空間?。┖蛨?zhí)行時間短效率高(編譯后的指令代碼占用存儲空間?。┖蛨?zhí)行時間短等優(yōu)勢和特點。等優(yōu)勢和特點。n由于單片機(jī)的存儲器等資源有限,單片機(jī)應(yīng)用程序中經(jīng)常需由于單片機(jī)的存儲器等資源有限,單片機(jī)應(yīng)用程序中經(jīng)常需要面對硬件操作,且對程序執(zhí)行的時間有較為嚴(yán)格的要求或要面對硬件操作,且對程序執(zhí)行的時間有較為嚴(yán)格的要求或限制。因此,限制。因此,匯編語言程序設(shè)計匯編語言程序設(shè)計是單片機(jī)應(yīng)用系統(tǒng)設(shè)計的重是單片機(jī)應(yīng)用系統(tǒng)設(shè)計的重要基礎(chǔ)之一。要基礎(chǔ)之一。 32021/8/144.1 匯編語言程序設(shè)計概述1、匯編語言的特
3、點、匯編語言的特點: 匯編語言的特點歸納如下:匯編語言的特點歸納如下: 助記符指令與機(jī)器指令一一對應(yīng);助記符指令與機(jī)器指令一一對應(yīng); 程序代碼效率高,占用存儲空間小,運行速度快,程序代碼效率高,占用存儲空間小,運行速度快,匯編語言程序往往是最優(yōu)化的程序;匯編語言程序往往是最優(yōu)化的程序; 助記符指令(匯編指令)與計算機(jī)硬件聯(lián)系緊密,助記符指令(匯編指令)與計算機(jī)硬件聯(lián)系緊密,要求編程人員對計算機(jī)硬件較為熟悉;要求編程人員對計算機(jī)硬件較為熟悉; 匯編語言程序缺乏通用性,移植性較差。匯編語言程序缺乏通用性,移植性較差。 4.1.1 匯編語言的特點及語句格式匯編語言的特點及語句格式42021/8/14
4、4.1 匯編語言程序設(shè)計概述2、匯編語言的語句格式、匯編語言的語句格式MCS-51系列單片機(jī)匯編語言的語句格式如下:系列單片機(jī)匯編語言的語句格式如下: : ; 標(biāo)號是匯編語句地址的符號表示。標(biāo)號是匯編語句地址的符號表示。 用于規(guī)定該語句所執(zhí)行的操作。用于規(guī)定該語句所執(zhí)行的操作。 操作數(shù)為匯編指令的操作提供數(shù)據(jù)或地址操作數(shù)為匯編指令的操作提供數(shù)據(jù)或地址 注釋是指對一條匯編語句或一段匯編語言程序注釋是指對一條匯編語句或一段匯編語言程序的說明,以增加匯編語言程序的可讀性。的說明,以增加匯編語言程序的可讀性。 4.1.1 匯編語言的特點及語句格式匯編語言的特點及語句格式52021/8/144.1 匯編
5、語言程序設(shè)計概述 1、起始地址定位偽指令、起始地址定位偽指令ORG 格式:格式:標(biāo)號標(biāo)號:ORG 操作數(shù)操作數(shù) 說明:其功能是指出緊接其后的指令的目標(biāo)代碼的說明:其功能是指出緊接其后的指令的目標(biāo)代碼的第一個字節(jié)在程序存儲器中的絕對地址。例如:第一個字節(jié)在程序存儲器中的絕對地址。例如: ORG 0030H START:MOV A,#33H .n即定義標(biāo)號即定義標(biāo)號START表示的起始地址值為表示的起始地址值為0030H,該,該段程序的指令代碼從該地址開始順序存放。段程序的指令代碼從該地址開始順序存放。 4.1.2 匯編語言偽指令匯編語言偽指令 62021/8/144.1 匯編語言程序設(shè)計概述 2
6、、賦值偽指令、賦值偽指令EQU 格式:字符名稱格式:字符名稱 EQU 操作數(shù)操作數(shù) 說明:該指令用于說明:該指令用于字符名稱賦值字符名稱賦值。在同一個。在同一個源程序中,任何一個字符名稱只能賦值一次。源程序中,任何一個字符名稱只能賦值一次。且一旦賦值之后,整個源程序中該字符的值且一旦賦值之后,整個源程序中該字符的值就固定不變了。例如:就固定不變了。例如: ADPORT EQU 1001Hn即給字符名稱即給字符名稱ADPORT 賦值賦值16進(jìn)制數(shù)進(jìn)制數(shù)1001H。 4.1.2 匯編語言偽指令匯編語言偽指令 72021/8/144.1 匯編語言程序設(shè)計概述 3、數(shù)據(jù)地址賦值偽指令、數(shù)據(jù)地址賦值偽指
7、令DATA格式:字符名稱格式:字符名稱 DATA 操作數(shù)操作數(shù)說明:說明:DATA偽指令的功能與偽指令的功能與EQU偽指令相似,不同偽指令相似,不同之處在于之處在于DATA偽指令所定義的字符名稱偽指令所定義的字符名稱可先使用后可先使用后定義(賦值),也可先定義(賦值)后使用定義(賦值),也可先定義(賦值)后使用。在程。在程序中它常用來定義(賦值)序中它常用來定義(賦值)數(shù)據(jù)地址數(shù)據(jù)地址。 4.1.2 匯編語言偽指令匯編語言偽指令 82021/8/144.1 匯編語言程序設(shè)計概述 4、字節(jié)數(shù)據(jù)賦值偽指令、字節(jié)數(shù)據(jù)賦值偽指令DB格式:格式:標(biāo)號:標(biāo)號: DB數(shù)據(jù)表(字節(jié))數(shù)據(jù)表(字節(jié))說明:該偽指
8、令用于定義(賦值)若干說明:該偽指令用于定義(賦值)若干字節(jié)數(shù)據(jù)表字節(jié)數(shù)據(jù)表(固定常數(shù)),并存放在指定地址單元開始的程序(固定常數(shù)),并存放在指定地址單元開始的程序存儲器中。存儲器中。例如:例如: ORG 0050HTABLE:DB 99H,88H 即表示在地址即表示在地址0050H(標(biāo)號(標(biāo)號TABLE)開始定義(賦)開始定義(賦值)兩個字節(jié)數(shù)據(jù)(值)兩個字節(jié)數(shù)據(jù)(99H,88H)。)。 4.1.2 匯編語言偽指令匯編語言偽指令 92021/8/144.1 匯編語言程序設(shè)計概述 5、雙字節(jié)數(shù)據(jù)賦值偽指令、雙字節(jié)數(shù)據(jù)賦值偽指令DW格式:格式:標(biāo)號:標(biāo)號: DW數(shù)據(jù)表(雙字節(jié))數(shù)據(jù)表(雙字節(jié))說
9、明:該偽指令與說明:該偽指令與DB偽指令的不同之處在于偽指令的不同之處在于DW定義(賦值)定義(賦值)的是雙字節(jié)數(shù)據(jù),而的是雙字節(jié)數(shù)據(jù),而DB定義(賦值)的是單字節(jié)數(shù)據(jù)。定義(賦值)的是單字節(jié)數(shù)據(jù)。高高8位數(shù)據(jù)安排在低地址單元,低位數(shù)據(jù)安排在低地址單元,低8位數(shù)據(jù)安排在高地址單元位數(shù)據(jù)安排在高地址單元。6、預(yù)留空間定義偽指令、預(yù)留空間定義偽指令DS格式:格式:標(biāo)號:標(biāo)號: DS 操作數(shù)操作數(shù)說明:該偽指令的作用是通知匯編程序,從指定的地址單元開說明:該偽指令的作用是通知匯編程序,從指定的地址單元開始(通常由標(biāo)號指定首地址),保留由操作數(shù)(常數(shù)或表達(dá)始(通常由標(biāo)號指定首地址),保留由操作數(shù)(常數(shù)
10、或表達(dá)式)規(guī)定的字節(jié)空間。式)規(guī)定的字節(jié)空間。 4.1.2 匯編語言偽指令匯編語言偽指令 102021/8/144.1 匯編語言程序設(shè)計概述 7、位地址賦值偽指令、位地址賦值偽指令BIT格式:字符名稱格式:字符名稱 BIT 位地址位地址說明:該偽指令給字符名稱說明:該偽指令給字符名稱賦予位地址賦予位地址(片內(nèi)(片內(nèi)RAM和和SFR中的中的位地址),常用于位操作程序中。例如:位地址),常用于位操作程序中。例如: FLAG BIT 20H 即將位地址即將位地址20H賦予字符名稱賦予字符名稱FLAG。8、定義匯編結(jié)束偽指令、定義匯編結(jié)束偽指令END格式:格式:標(biāo)號:標(biāo)號:END說明:匯編結(jié)束偽指令說
11、明:匯編結(jié)束偽指令END的作用是的作用是通知匯編程序,匯編源程通知匯編程序,匯編源程序到此結(jié)束序到此結(jié)束。在一個匯編程序中,只允許出現(xiàn)一條。在一個匯編程序中,只允許出現(xiàn)一條END偽指偽指令,且必須安排在整個源程序的末尾處。令,且必須安排在整個源程序的末尾處。 4.1.2 匯編語言偽指令匯編語言偽指令 112021/8/144.1 匯編語言程序設(shè)計概述4. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu)1、順序結(jié)構(gòu)程序2、分支結(jié)構(gòu)程序3、循環(huán)結(jié)構(gòu)程序4、子程序5、中斷程序基本程序結(jié)構(gòu)122021/8/144. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu) 順序結(jié)構(gòu)是各類程序中最簡單的,也是最基本順序結(jié)構(gòu)是各類程序中最簡單的,也是
12、最基本的程序結(jié)構(gòu)。順序結(jié)構(gòu)程序的特征是的程序結(jié)構(gòu)。順序結(jié)構(gòu)程序的特征是整個程序段沒整個程序段沒有任何轉(zhuǎn)移指令有任何轉(zhuǎn)移指令。主要由數(shù)據(jù)傳遞類指令和數(shù)據(jù)運。主要由數(shù)據(jù)傳遞類指令和數(shù)據(jù)運算類指令組成,通常用于執(zhí)行數(shù)據(jù)傳送和較為簡單算類指令組成,通常用于執(zhí)行數(shù)據(jù)傳送和較為簡單的算術(shù)或邏輯運算任務(wù)。的算術(shù)或邏輯運算任務(wù)。 4.2.1 順序結(jié)構(gòu)順序結(jié)構(gòu)132021/8/144. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu)例例4-1,將內(nèi)部,將內(nèi)部 RAM 中中 20H 單元和單元和 30H 單元的無符號數(shù)單元的無符號數(shù)相加,存入相加,存入R0(高位)和(高位)和R1(低位)中。源程序如下:(低位)中。源程序如下:MO
13、V A,20H ;取出被加數(shù);取出被加數(shù)ADD A,30H ;兩數(shù)相加;兩數(shù)相加MOV R1,A ;低位存入;低位存入R1CLR A ;ADDC A,#00H ;取進(jìn)位標(biāo)志;取進(jìn)位標(biāo)志MOV R0,A ;高位存入;高位存入R0RET 4.2.1 順序結(jié)構(gòu)順序結(jié)構(gòu)142021/8/144. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu) 分支結(jié)構(gòu)程序利用分支結(jié)構(gòu)程序利用條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令,使程序在執(zhí),使程序在執(zhí)行某一指令后(產(chǎn)生測試條件),根據(jù)所規(guī)定的條行某一指令后(產(chǎn)生測試條件),根據(jù)所規(guī)定的條件滿足與否改變其后程序執(zhí)行的順序(產(chǎn)生分叉),件滿足與否改變其后程序執(zhí)行的順序(產(chǎn)生分叉),即即根據(jù)判斷條件的成
14、立與否來確定程序的走向根據(jù)判斷條件的成立與否來確定程序的走向。分。分支結(jié)構(gòu)程序的特征是程序段中有控制轉(zhuǎn)移類指令支結(jié)構(gòu)程序的特征是程序段中有控制轉(zhuǎn)移類指令(條件轉(zhuǎn)移指令)。(條件轉(zhuǎn)移指令)。依據(jù)程序分叉的數(shù)目,可將分支結(jié)構(gòu)程序細(xì)分為依據(jù)程序分叉的數(shù)目,可將分支結(jié)構(gòu)程序細(xì)分為單分支選擇結(jié)構(gòu)單分支選擇結(jié)構(gòu)和和多分支選擇結(jié)構(gòu)多分支選擇結(jié)構(gòu)兩類。兩類。 4.2.2 分支結(jié)構(gòu)分支結(jié)構(gòu)152021/8/144. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu)1、單分支選擇結(jié)構(gòu)、單分支選擇結(jié)構(gòu) 當(dāng)程序的判斷僅有兩個出口(分叉),即兩者選一時,稱為當(dāng)程序的判斷僅有兩個出口(分叉),即兩者選一時,稱為單分支結(jié)構(gòu)。通常用條件判斷指令
15、來選擇并確定程序的出口。單分支結(jié)構(gòu)。通常用條件判斷指令來選擇并確定程序的出口。例例4-3.設(shè)內(nèi)部設(shè)內(nèi)部RAM 40H和和41H單元中存放單元中存放2個個8位無符號二進(jìn)制位無符號二進(jìn)制數(shù),試編程找出其中的大數(shù)存人數(shù),試編程找出其中的大數(shù)存人30H單元中。源程序如下:單元中。源程序如下: MOV A,40H CJNE A,41H,LOOP ;取取2個數(shù)進(jìn)行比較個數(shù)進(jìn)行比較 LOOP: JNC LOOP1 ;根據(jù)根據(jù)CY值,判斷單分支出值,判斷單分支出 MOV A,41H ;41H單元中是大數(shù)單元中是大數(shù) LOOP1: MOV 30H,A ;40H單元中是大數(shù)單元中是大數(shù) RET 4.2.2 分支結(jié)
16、構(gòu)分支結(jié)構(gòu)162021/8/144. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu)2、多分支選擇結(jié)構(gòu)、多分支選擇結(jié)構(gòu) 當(dāng)程序的判別部分有兩個以上的出口(分叉)時,當(dāng)程序的判別部分有兩個以上的出口(分叉)時,稱為多分支選擇結(jié)構(gòu)。稱為多分支選擇結(jié)構(gòu)。例例4-4,設(shè)變量,設(shè)變量X的值存放在內(nèi)部的值存放在內(nèi)部RAM的的30H單元中,單元中,編程求解下列函數(shù)式,將求得的函數(shù)值編程求解下列函數(shù)式,將求得的函數(shù)值Y存人存人40H單單元。元。 X1 (X100) Y 0 (10X100) X一一1 (X10) 4.2.2 分支結(jié)構(gòu)分支結(jié)構(gòu)172021/8/144. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu) MOV A,30H ;取自變量
17、取自變量X值值 CJNE A,#10,LOOP ;與與10比較,比較,A中值不改變中值不改變LOOP: JC LOOP2 ;若;若X100,轉(zhuǎn),轉(zhuǎn)LOOP3 MOV 40H,00H ;因;因10X100,故,故Y=0 SJMP EXITLOOP2: DEC A ;因;因X100,故,故Y=X1 MOV 40H, AEXIT: RET182021/8/144. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu) 在程序設(shè)計中,遇到一段程序需要多次重復(fù)執(zhí)行的情況,在程序設(shè)計中,遇到一段程序需要多次重復(fù)執(zhí)行的情況,通常應(yīng)該采用循環(huán)結(jié)構(gòu)程序。通常應(yīng)該采用循環(huán)結(jié)構(gòu)程序。n1、循環(huán)結(jié)構(gòu)程序組成、循環(huán)結(jié)構(gòu)程序組成 循環(huán)結(jié)構(gòu)程序由
18、初始化、循環(huán)處理、循環(huán)控制和循環(huán)結(jié)束循環(huán)結(jié)構(gòu)程序由初始化、循環(huán)處理、循環(huán)控制和循環(huán)結(jié)束4部分組成。部分組成。 (1)初始化部分初始化部分 初始化部分設(shè)置循環(huán)處理之前的初始狀態(tài),如初始化部分設(shè)置循環(huán)處理之前的初始狀態(tài),如循環(huán)次數(shù)、循環(huán)次數(shù)、變量初值、地址指針初值變量初值、地址指針初值等。等。 (2)循環(huán)處理部分循環(huán)處理部分 循環(huán)處理部分又稱循環(huán)處理部分又稱循環(huán)體循環(huán)體,是,是重復(fù)執(zhí)行的數(shù)據(jù)處理程序段重復(fù)執(zhí)行的數(shù)據(jù)處理程序段,它是循環(huán)程序的它是循環(huán)程序的核心部分核心部分(功能主體)。(功能主體)。 4.2.3 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)192021/8/144. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu) (3)循環(huán)控制
19、部分循環(huán)控制部分控制部分控制部分控制循環(huán)繼續(xù)與否控制循環(huán)繼續(xù)與否。(4)結(jié)束部分結(jié)束部分結(jié)束部分對循環(huán)程序全部執(zhí)行結(jié)束后的結(jié)果進(jìn)行結(jié)束部分對循環(huán)程序全部執(zhí)行結(jié)束后的結(jié)果進(jìn)行分析、處理和保存。分析、處理和保存。循環(huán)結(jié)構(gòu)程序一般分為循環(huán)結(jié)構(gòu)程序一般分為“單重循環(huán)單重循環(huán)”和和“多重循多重循環(huán)環(huán)”兩類,循環(huán)次數(shù)的控制有多種方式,當(dāng)循環(huán)次兩類,循環(huán)次數(shù)的控制有多種方式,當(dāng)循環(huán)次數(shù)已知時,可采用循環(huán)次數(shù)計數(shù)器控制循環(huán);若循數(shù)已知時,可采用循環(huán)次數(shù)計數(shù)器控制循環(huán);若循環(huán)次數(shù)未知時,可按條件滿足與否控制循環(huán)。環(huán)次數(shù)未知時,可按條件滿足與否控制循環(huán)。 4.2.3 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)202021/8/144. 2
20、 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu)n 2循環(huán)程序設(shè)計循環(huán)程序設(shè)計在一個循環(huán)程序的循環(huán)體中不包含另外的循環(huán)結(jié)構(gòu)稱為單重在一個循環(huán)程序的循環(huán)體中不包含另外的循環(huán)結(jié)構(gòu)稱為單重循環(huán)。循環(huán)。例例4-5,設(shè)某字符串以回車符(,設(shè)某字符串以回車符(0DH)為結(jié)束標(biāo)志,并存放在)為結(jié)束標(biāo)志,并存放在內(nèi)部內(nèi)部RAM40H單元開始的連續(xù)存儲單元之中,編寫測試字符單元開始的連續(xù)存儲單元之中,編寫測試字符串長度的匯編語言程序。串長度的匯編語言程序。 編程思路編程思路 為測試字符串(為測試字符串(0DH)的長度,應(yīng)使用逐)的長度,應(yīng)使用逐個字符依次與回車符個字符依次與回車符(ODH)比較的方法。為此需要設(shè)一個字比較的方法。為此
21、需要設(shè)一個字符串指針和一個長度計數(shù)器,字符串指針用于指定字符,長符串指針和一個長度計數(shù)器,字符串指針用于指定字符,長度計數(shù)器用于累加字符串的長度。如比較不相等,則長度計度計數(shù)器用于累加字符串的長度。如比較不相等,則長度計數(shù)器和字符串指針都加數(shù)器和字符串指針都加1,以繼續(xù)往下比較;如果比較相等,以繼續(xù)往下比較;如果比較相等,則表示該字符為回車符,字符串結(jié)束,長度計數(shù)器的值就是則表示該字符為回車符,字符串結(jié)束,長度計數(shù)器的值就是字符串的長度。字符串的長度。 4.2.3 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)212021/8/144. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu)n 2循環(huán)程序設(shè)計循環(huán)程序設(shè)計 程序如下:程序如下: MO
22、V R7,0FFH ;設(shè)長度計數(shù)器初值設(shè)長度計數(shù)器初值 MOV R0,3FH ;字符串指針字符串指針 初值初值LOOP:INC R7 INC R0 CJNE R0,ODH,LOOP RET 4.2.3 循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)222021/8/144. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu) 4.2.4 子程序結(jié)構(gòu)子程序結(jié)構(gòu) 在編寫程序過程中,如果遇到在在編寫程序過程中,如果遇到在幾個程序段中都需要執(zhí)行某段相幾個程序段中都需要執(zhí)行某段相同程序的情況(功能獨立),為同程序的情況(功能獨立),為減少編程工作量和節(jié)省程序存儲減少編程工作量和節(jié)省程序存儲空間,就應(yīng)該采用子程序結(jié)構(gòu),空間,就應(yīng)該采用子程序結(jié)構(gòu),將重復(fù)執(zhí)行
23、的相同程序段編寫成將重復(fù)執(zhí)行的相同程序段編寫成為一個子程序為一個子程序(功能子程序)。(功能子程序)。返回返回調(diào)用調(diào)用斷點斷點子程序子程序主程序主程序232021/8/144. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu)MAIN: ;進(jìn)入主程序;進(jìn)入主程序MOV R0,#03H ;設(shè)置入口參數(shù)(延時;設(shè)置入口參數(shù)(延時1)ACALL SUBPRO ;調(diào)用子程序;調(diào)用子程序 ;子程序返回,繼續(xù)執(zhí)行主程序;子程序返回,繼續(xù)執(zhí)行主程序;#;子程序入口地址(子程序名稱);子程序入口地址(子程序名稱):SUBPRO;功能:延時子程序(延時時間由;功能:延時子程序(延時時間由R0初值設(shè)置)初值設(shè)置);入口參數(shù):;入口參
24、數(shù):R0內(nèi)存放延時計數(shù)初值內(nèi)存放延時計數(shù)初值 ;出口參數(shù):無;出口參數(shù):無;使用寄存器:;使用寄存器:R0、R1;#SUBPRO:MOV R1,#03HDJNZ R1,$ DJNZ R0,SUBPRORET ;子程序返回;子程序返回 END 4.2.3 子程序結(jié)構(gòu)子程序結(jié)構(gòu)242021/8/144. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu)單片機(jī)中斷程序設(shè)計主要有以下三個方面:單片機(jī)中斷程序設(shè)計主要有以下三個方面:1、中斷向量設(shè)置、中斷向量設(shè)置2、中斷初始化、中斷初始化3、中斷服務(wù)程序、中斷服務(wù)程序 4.2.5 中斷程序結(jié)構(gòu)中斷程序結(jié)構(gòu)252021/8/144. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu)例例4-7,設(shè)
25、,設(shè)89C51單片機(jī)外中斷單片機(jī)外中斷0(EX0)下降沿有效,每次進(jìn))下降沿有效,每次進(jìn)入中斷服務(wù)程序,要求將入中斷服務(wù)程序,要求將89C51單片機(jī)的單片機(jī)的P1.7P1.0取反。取反。主程序如下:主程序如下:ORG 0000H STAR:AJMP MAIN ;主程序原始入口;主程序原始入口 ORG 0003H ;外部中斷;外部中斷0中斷向量中斷向量 AJMP EXTR ;跳轉(zhuǎn)到;跳轉(zhuǎn)到EX0中斷服務(wù)子程序?qū)嶋H入中斷服務(wù)子程序?qū)嶋H入口地址口地址 ORG 0030H MAIN: SETB IT0 ;主程序?qū)嶋H入口,邊沿觸發(fā)設(shè)置;主程序?qū)嶋H入口,邊沿觸發(fā)設(shè)置 SETB EX0 ;外部中斷;外部中斷
26、0允許允許 SETB EA ;總中斷允許;總中斷允許HERE: AJMP HERE ;等待再次進(jìn)入中斷服務(wù)程序;等待再次進(jìn)入中斷服務(wù)程序 4.2.5 中斷程序結(jié)構(gòu)中斷程序結(jié)構(gòu)262021/8/144. 2 基本程序結(jié)構(gòu)基本程序結(jié)構(gòu)中斷服務(wù)子程序:中斷服務(wù)子程序: ORG 1200H EXTR:PUSH PSW ;保護(hù)現(xiàn)場;保護(hù)現(xiàn)場 CPL A ;累加器;累加器A數(shù)據(jù)取反數(shù)據(jù)取反 MOV P1,A ;數(shù)據(jù)輸出至;數(shù)據(jù)輸出至P1端口端口 POP PSW ;恢復(fù)現(xiàn)場;恢復(fù)現(xiàn)場 RETI ;中斷返回;中斷返回 4.2.5 中斷程序結(jié)構(gòu)中斷程序結(jié)構(gòu)272021/8/144.3 匯編語言程序設(shè)計實踐匯編語
27、言程序設(shè)計實踐匯編語言程序設(shè)計的一般步驟如下:匯編語言程序設(shè)計的一般步驟如下: 建立數(shù)學(xué)模型建立數(shù)學(xué)模型 用適用的數(shù)學(xué)方法描述所需要解決的問用適用的數(shù)學(xué)方法描述所需要解決的問題;題; 確定算法確定算法 將數(shù)學(xué)模型轉(zhuǎn)化為適合單片機(jī)處理(順序執(zhí)將數(shù)學(xué)模型轉(zhuǎn)化為適合單片機(jī)處理(順序執(zhí)行)的形式,采用繪制程序流程圖等方法表示程序設(shè)計的思行)的形式,采用繪制程序流程圖等方法表示程序設(shè)計的思路和依據(jù)。路和依據(jù)。 編寫源程序編寫源程序 采用模塊化設(shè)計方法,合理劃分功能模塊,采用模塊化設(shè)計方法,合理劃分功能模塊,分配存儲器和分配存儲器和I/O端口(依據(jù)硬件電路)等資源,確定各模塊端口(依據(jù)硬件電路)等資源,確
28、定各模塊內(nèi)各程序段的結(jié)構(gòu),編寫源程序文件。內(nèi)各程序段的結(jié)構(gòu),編寫源程序文件。 匯編及調(diào)試匯編及調(diào)試 在集成開發(fā)環(huán)境的支持下,匯編語言源程在集成開發(fā)環(huán)境的支持下,匯編語言源程序經(jīng)匯編生成目標(biāo)程序文件,并通過調(diào)試以及對運行結(jié)果的序經(jīng)匯編生成目標(biāo)程序文件,并通過調(diào)試以及對運行結(jié)果的分析,修正源程序中的錯誤,達(dá)到預(yù)期的設(shè)計目標(biāo)。分析,修正源程序中的錯誤,達(dá)到預(yù)期的設(shè)計目標(biāo)。282021/8/14 所謂查表,就是根據(jù)變量所謂查表,就是根據(jù)變量x在表格中查找在表格中查找y,使,使yf(x)。函數(shù)值函數(shù)值y事先根據(jù)變量事先根據(jù)變量x的取值范圍計算出,并按一定規(guī)律編的取值范圍計算出,并按一定規(guī)律編成表格存放在
29、計算機(jī)的程序存儲器中。當(dāng)用戶程序中需要用成表格存放在計算機(jī)的程序存儲器中。當(dāng)用戶程序中需要用這些數(shù)據(jù)時,直接按編排的索引值這些數(shù)據(jù)時,直接按編排的索引值(或程序號或程序號)尋找答案。這尋找答案。這樣編寫的程序稱為查表程序。查表程序是一種常用程序,廣樣編寫的程序稱為查表程序。查表程序是一種常用程序,廣泛應(yīng)用于泛應(yīng)用于LED顯示器控制顯示器控制、智能化儀表控制智能化儀表控制、打印機(jī)打印打印機(jī)打印以以及及數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換等功能程序中,具有程序簡單、執(zhí)行速度快等優(yōu)等功能程序中,具有程序簡單、執(zhí)行速度快等優(yōu)點。查表程序有多種結(jié)構(gòu)形式,下面舉例介紹一種常用的查點。查表程序有多種結(jié)構(gòu)形式,下面舉例介紹一種常
30、用的查表程序。表程序。4.3.1 查表程序查表程序4.3 匯編語言程序設(shè)計實踐匯編語言程序設(shè)計實踐292021/8/144.3.1 查表程序查表程序 例例4-8,將,將16進(jìn)制數(shù)轉(zhuǎn)換成進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼的子程序。假設(shè)碼的子程序。假設(shè)16進(jìn)制數(shù)存放在進(jìn)制數(shù)存放在R0中低中低4位,要求將轉(zhuǎn)換后的位,要求將轉(zhuǎn)換后的ASCII碼送回到碼送回到R0中。中。 設(shè)計思路:己知設(shè)計思路:己知0-9的的ASCII碼為碼為30H一一39H,AF的的ASCII碼為碼為41H一一46H。對十六進(jìn)制數(shù)而言,。對十六進(jìn)制數(shù)而言,0-F是連續(xù)的,是連續(xù)的,而對應(yīng)的而對應(yīng)的ASCII碼不連續(xù),查表方法對解決此類問題十分
31、有碼不連續(xù),查表方法對解決此類問題十分有效。根據(jù)題意,子程序的入口參數(shù)和出口參數(shù)均通過效。根據(jù)題意,子程序的入口參數(shù)和出口參數(shù)均通過R0傳傳遞,表中所有的值都是單字節(jié),表格長度為遞,表中所有的值都是單字節(jié),表格長度為16字節(jié)。字節(jié)。4.3 匯編語言程序設(shè)計實踐匯編語言程序設(shè)計實踐302021/8/14查表子程序:查表子程序:MOV A,R0 ;讀取主程序通過;讀取主程序通過R0傳送的十六進(jìn)制數(shù)傳送的十六進(jìn)制數(shù)ANL A,0FH ;屏蔽高;屏蔽高4位,取出低位,取出低4位位ADD A,#02H ;設(shè)置變址值(依據(jù)表首地址與查表指;設(shè)置變址值(依據(jù)表首地址與查表指 令所處位置)令所處位置)MOVC
32、 A,A+PC ;查表指令(獲得對應(yīng)的;查表指令(獲得對應(yīng)的ASCII碼)碼)MOV R0,A :通過:通過R0將查表結(jié)果傳遞給主程序?qū)⒉楸斫Y(jié)果傳遞給主程序RETTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H 程序中因為程序中因為“MOVC A,A+PC”指令與表格首址相隔兩個字指令與表格首址相隔兩個字節(jié),故變址調(diào)整值為節(jié),故變址調(diào)整值為2,程序中對應(yīng)變量,程序中對應(yīng)變量x的函數(shù)值的函數(shù)值y為單字節(jié)。為單字節(jié)。4.3.1 查表程序4.3 匯編語言程序設(shè)計實踐匯編語言程序設(shè)計實踐312021/8/
33、14 在在51系列單片機(jī)指令集中有單字節(jié)的算術(shù)運算(加、系列單片機(jī)指令集中有單字節(jié)的算術(shù)運算(加、減、乘、除)指令,但在實際程序設(shè)計中經(jīng)常會遇到減、乘、除)指令,但在實際程序設(shè)計中經(jīng)常會遇到多多字節(jié)算術(shù)運算問題字節(jié)算術(shù)運算問題,需要通過編制專門的功能子程序解,需要通過編制專門的功能子程序解決此類問題。決此類問題。例例4-9,多字節(jié)無符號數(shù)加法運算。假設(shè),多字節(jié)無符號數(shù)加法運算。假設(shè)R0中存放被中存放被加數(shù)低位字節(jié)地址指針,加數(shù)低位字節(jié)地址指針,R1中存放加數(shù)低位字節(jié)地址指中存放加數(shù)低位字節(jié)地址指針,針,R2中存放字節(jié)數(shù),多字節(jié)算術(shù)運算一般從低字節(jié)中存放字節(jié)數(shù),多字節(jié)算術(shù)運算一般從低字節(jié)(低位)
34、到高字節(jié)(高位)的順序依次進(jìn)行。(低位)到高字節(jié)(高位)的順序依次進(jìn)行。 4.3.2 算術(shù)運算程序4.3 匯編語言程序設(shè)計實踐匯編語言程序設(shè)計實踐322021/8/14匯編源程序如下:匯編源程序如下:ADDBIN:CLR C LOOP1: MOV A,R0;取被加數(shù)取被加數(shù) ADDC A,R1;兩數(shù)相加,帶進(jìn)位兩數(shù)相加,帶進(jìn)位 MOV R0,A INC R0 INC R1 DJNZ R2,LOOP1;未加完轉(zhuǎn)未加完轉(zhuǎn)LOOP1 JNC LOOP2;無進(jìn)位轉(zhuǎn)無進(jìn)位轉(zhuǎn)LOOP2 MOV R0,#0lH RET LOOP2: DEC R0 RET 4.3.2 算術(shù)運算程序4.3 匯編語言程序設(shè)計實踐
35、匯編語言程序設(shè)計實踐332021/8/14例例4-10,BCD碼多字節(jié)加法運算。假設(shè)碼多字節(jié)加法運算。假設(shè)R0中存放被加數(shù)中存放被加數(shù)低位字節(jié)地址指針,低位字節(jié)地址指針,R1中存放加數(shù)低位字節(jié)地址指針,中存放加數(shù)低位字節(jié)地址指針,R2中存放字節(jié)數(shù)。中存放字節(jié)數(shù)。 BCDADD: MOV 20H,R0 MOV 23H,R2 CLR C LP0: MOV A,R0 ;取被加數(shù);取被加數(shù) ADDC A,R1 ;兩數(shù)相加;兩數(shù)相加 DA A ;十進(jìn)制調(diào)整;十進(jìn)制調(diào)整 MOV RO,A INC R0 ;指針加;指針加1 DJN2 R2,LP0 ;做完加法否;做完加法否4.3.2 算術(shù)運算程序 MOV R
36、2,23H JNC RETURN ;有無進(jìn)位;有無進(jìn)位 MOV R0,#01H INC R3 RETURN: MOV R0,#20H RET 4.3 匯編語言程序設(shè)計實踐匯編語言程序設(shè)計實踐342021/8/14例例4-11,如圖,如圖4-2所示,所示,MCS-51單片機(jī)的單片機(jī)的P1作為作為輸出端口,連接輸出端口,連接8只發(fā)光二只發(fā)光二極管。按該電路工作原理,極管。按該電路工作原理,P1口各位輸出口各位輸出“0”時,將時,將發(fā)光二極管點亮;發(fā)光二極管點亮;P1口各口各位輸出位輸出“1”使發(fā)光二極管使發(fā)光二極管滅。分析下述匯編程序運滅。分析下述匯編程序運行后,行后,8個發(fā)光二極管點亮個發(fā)光二極
37、管點亮的規(guī)律。的規(guī)律。4.3.3 I/O接口控制程序圖圖4-2 P14-2 P1口驅(qū)動口驅(qū)動LEDLED示意圖示意圖4.3 匯編語言程序設(shè)計實踐匯編語言程序設(shè)計實踐352021/8/14主程序:主程序: LP:MOV P1,7EH LCALL DELAY MOV P1,0BDH LCALL DELAY MOV P1,#0DBH LCALL DELAY MOV P1,0E7H LCALL DELAY MOV P1,0DBH LCALL DELAY MOV P1,0BDH LCALL DELAY SJMP LP子程序:子程序: DELAY:MOV R2,0FAH L1:MOV R3,# 0FAH
38、L2:DJNZ R3,L2 DJNZ R2,L1 RET4.3.3 I/O接口控制程序接口控制程序362021/8/14 例例4-12: 按照圖按照圖4-2所示的電路,試編寫控制發(fā)光二極管指所示的電路,試編寫控制發(fā)光二極管指示燈移位的程序,要求示燈移位的程序,要求8個發(fā)光二極管依次亮一個,循環(huán)個發(fā)光二極管依次亮一個,循環(huán)左移,一個一個地亮,直至循環(huán)。相關(guān)源程序如下左移,一個一個地亮,直至循環(huán)。相關(guān)源程序如下: MOV A,7FH L1:MOV P1,A RL A LCALL DELAY;與例;與例4-11的延時程序相同的延時程序相同 SJMP Ll 4.3.3 I/O接口控制程序4.3 匯編語
39、言程序設(shè)計實踐匯編語言程序設(shè)計實踐372021/8/14一個函數(shù)的定義由類型、函數(shù)名、參數(shù)表和函數(shù)體四部分一個函數(shù)的定義由類型、函數(shù)名、參數(shù)表和函數(shù)體四部分組合而成。一個函數(shù)在程序中可以三種形態(tài)出現(xiàn):函數(shù)定組合而成。一個函數(shù)在程序中可以三種形態(tài)出現(xiàn):函數(shù)定義、函數(shù)調(diào)用、函數(shù)說明。義、函數(shù)調(diào)用、函數(shù)說明。 C51函數(shù)的一般格式為:函數(shù)的一般格式為:類型類型 函數(shù)名(參數(shù)表)函數(shù)名(參數(shù)表)參數(shù)說明;參數(shù)說明; 數(shù)據(jù)說明部分;數(shù)據(jù)說明部分;/注釋注釋 執(zhí)行語句部分;執(zhí)行語句部分; 4.4.1 C51程序結(jié)構(gòu)程序結(jié)構(gòu)4.4 面向面向51單片機(jī)的單片機(jī)的C語言程序語言程序382021/8/144.4.
40、2 C51數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)類型數(shù)據(jù)類型位型(位型(bit)字符型(字符型(char)整型(整型(int)長整型(長整型(long)浮點型(浮點型(float)雙精度浮點型(雙精度浮點型(double)數(shù)組類型(數(shù)組類型(array)結(jié)構(gòu)體類型(結(jié)構(gòu)體類型(struct)共用體(共用體(union)枚舉(枚舉(enum)基本類型基本類型構(gòu)造類型構(gòu)造類型指針類型指針類型空類型空類型1. 數(shù)據(jù)類型數(shù)據(jù)類型392021/8/14KEIL C51編譯器支持的數(shù)據(jù)類型、長度和值域如表編譯器支持的數(shù)據(jù)類型、長度和值域如表4-1所列。所列。數(shù)據(jù)類型數(shù)據(jù)類型長度長度/Byte值域值域BitUnsigned
41、charSigned charUnsigned intSigned intUnsigned longSigned longFloatDouble11224440,10255-128127065 535-32 76832 76704 294 967 295-2 147 483 6482 147 483 6471.176E-383.40E+38(6位數(shù)字)1.176E-383.40E+38(10位數(shù)字)表表4-1 KEIL C51 數(shù)據(jù)類型數(shù)據(jù)類型4.4.2 C51數(shù)據(jù)類型數(shù)據(jù)類型1. 數(shù)據(jù)類型數(shù)據(jù)類型402021/8/14 C語言的數(shù)據(jù)有語言的數(shù)據(jù)有常量常量、變量變量之分。之分。常量是在程序運行
42、的常量是在程序運行的過程中,其值不能改變的量過程中,其值不能改變的量;變量是在程序運行中,其值可變量是在程序運行中,其值可以改變的量以改變的量。一個變量由兩部分構(gòu)成:變量名和變量值,每。一個變量由兩部分構(gòu)成:變量名和變量值,每一個變量都有一個變量名,在內(nèi)存中占據(jù)一定的存儲單元一個變量都有一個變量名,在內(nèi)存中占據(jù)一定的存儲單元(地址),并在該內(nèi)存單元中存放該變量的值。(地址),并在該內(nèi)存單元中存放該變量的值。 常量定義:常量定義:#define CONST 44 /定義常量符號定義常量符號CONST,值為,值為44 變量定義:變量定義:char t; /定義字符型變量,變量名為定義字符型變量,變
43、量名為t C語言中習(xí)慣上以小寫字母定義變量,以大寫字母定義語言中習(xí)慣上以小寫字母定義變量,以大寫字母定義常量。另外由于常量。另外由于51單片機(jī)的寄存器及數(shù)據(jù)總線為單片機(jī)的寄存器及數(shù)據(jù)總線為8位所以在位所以在定義變量時,定義變量時,應(yīng)盡可能使用無符號字符型應(yīng)盡可能使用無符號字符型。 4.4.2 C51數(shù)據(jù)類型數(shù)據(jù)類型1. 數(shù)據(jù)類型數(shù)據(jù)類型-常量和變量常量和變量412021/8/14 2C51數(shù)據(jù)存儲類型數(shù)據(jù)存儲類型 51系列單片機(jī)的程序存儲器與數(shù)據(jù)存儲器是分開的,系列單片機(jī)的程序存儲器與數(shù)據(jù)存儲器是分開的,并獨立尋址。并獨立尋址。51系列單片機(jī)共有如下四個存儲空間:系列單片機(jī)共有如下四個存儲空間
44、: 片內(nèi)程序存儲空間;片內(nèi)程序存儲空間; 片外程序存儲空間;片外程序存儲空間; 片內(nèi)數(shù)據(jù)存儲空間;片內(nèi)數(shù)據(jù)存儲空間; 片外數(shù)據(jù)存儲空間。片外數(shù)據(jù)存儲空間。 C語言編程時在對常量、變量的定義時,要注意不語言編程時在對常量、變量的定義時,要注意不同功能的常量、變量應(yīng)存儲在不同的存儲區(qū),在定義同功能的常量、變量應(yīng)存儲在不同的存儲區(qū),在定義變量或常量時要定義成不同的存儲類型(變量或常量時要定義成不同的存儲類型(data, bdata, idata, pdata, xdata, code)。)。 4.4.2 C51數(shù)據(jù)類型數(shù)據(jù)類型422021/8/14存儲類型存儲類型存儲空間存儲空間databdatai
45、datapdataxdatacode內(nèi)部內(nèi)部RAM低低128單元,可直接尋址單元,可直接尋址片內(nèi)片內(nèi)RAM位尋址區(qū)位尋址區(qū)內(nèi)部內(nèi)部RAM,間接尋址,間接尋址片外片外RAM,256字節(jié)字節(jié)片外片外RAM,64KB代碼存儲區(qū),代碼存儲區(qū),64KB表表4-2 C51存儲類型與單片機(jī)存儲空間對應(yīng)關(guān)系存儲類型與單片機(jī)存儲空間對應(yīng)關(guān)系4.4.2 C51數(shù)據(jù)類型數(shù)據(jù)類型2C51數(shù)據(jù)存儲類型數(shù)據(jù)存儲類型432021/8/14 3特殊功能寄存器的定義特殊功能寄存器的定義 在在51單片機(jī)內(nèi)部單片機(jī)內(nèi)部RAM的高的高128字節(jié),分散著字節(jié),分散著21個特個特殊功能寄存器(殊功能寄存器(SFR),為了能直接訪問這些特
46、殊功能),為了能直接訪問這些特殊功能寄存器,寄存器,KEIL C51提供一種自主形式的定義方法,此提供一種自主形式的定義方法,此種方法與標(biāo)準(zhǔn)種方法與標(biāo)準(zhǔn)C語言不兼容,只適用于對語言不兼容,只適用于對8051系列單片系列單片機(jī)進(jìn)行定義。這種定義的方法引入關(guān)鍵字機(jī)進(jìn)行定義。這種定義的方法引入關(guān)鍵字“sfr”,如:,如: sfr TMOD=0 x89;/*定時定時/計數(shù)器方式控制寄存器地址計數(shù)器方式控制寄存器地址為為89H*/。sbit:特殊功能位聲明特殊功能位聲明,sbit led1=P10;4.4.2 C51數(shù)據(jù)類型數(shù)據(jù)類型442021/8/14將其視為將其視為片外數(shù)據(jù)存儲器片外數(shù)據(jù)存儲器的一個
47、單元,利用的一個單元,利用#define語句進(jìn)行語句進(jìn)行定義:定義:#define PORTA XBYTE0 x0020 /*將將PORTA定義為外部定義為外部I/O口,地址為口,地址為0 x0020*/例例: 要通過地址要通過地址0 x0020向外部寫數(shù)據(jù)向外部寫數(shù)據(jù)0 x01,下面分別用匯編語下面分別用匯編語言和言和C語言編程實現(xiàn):語言編程實現(xiàn):匯編語言實現(xiàn):匯編語言實現(xiàn):MOV DPTR,#0020HMOV A,#01HMOVX DPTR,AC語言實現(xiàn):語言實現(xiàn): #define PORTA XBYTE0 x0020PORTA=0 x01;4.4.2 C51數(shù)據(jù)類型數(shù)據(jù)類型4片外擴(kuò)展片外
48、擴(kuò)展I/O口口452021/8/14 C51的運算符主要包括算術(shù)運算、關(guān)系運算、邏的運算符主要包括算術(shù)運算、關(guān)系運算、邏輯運算、位操作運算、自增減運算及復(fù)合運算等。其輯運算、位操作運算、自增減運算及復(fù)合運算等。其運算符與表達(dá)式與運算符與表達(dá)式與C語言要求基本一致。語言要求基本一致。4.4.3 C51運算符和表達(dá)式運算符和表達(dá)式4.4.2 C51數(shù)據(jù)類型數(shù)據(jù)類型462021/8/144.4.3 C51運算符和表達(dá)式運算符分類運算符表達(dá)式示例優(yōu)先關(guān)系(高低)算術(shù)運算符* 乘法/ 除法% 求余+ 加法或正值- 減法或負(fù)值a+b;(a+b)*c;!算術(shù)運算符關(guān)系運算符邏輯運算符賦值運算符關(guān)系運算符 大
49、于= 大于或等于= 測試等于!= 測試不等于c(a+b)a=bc邏輯運算符& 邏輯與| 邏輯或! 邏輯非c=a&bb=!a位操作運算符& 按位與| 按位或 按位異或 按位取反 位右移c=a&ba=b1自增減運算符+ 自加1- 自減1+ii+復(fù)合運算符算術(shù)運算符及位操作運算符復(fù)合使用i+=3472021/8/14 C語言程序主要有順序、選擇和循環(huán)三種結(jié)構(gòu)。順序結(jié)語言程序主要有順序、選擇和循環(huán)三種結(jié)構(gòu)。順序結(jié)構(gòu)即語句逐條執(zhí)行,是最基本、最簡單的程序結(jié)構(gòu)。選擇構(gòu)即語句逐條執(zhí)行,是最基本、最簡單的程序結(jié)構(gòu)。選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的相關(guān)控制語句分別介紹如下:結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的相
50、關(guān)控制語句分別介紹如下: 1選擇結(jié)構(gòu)語句及流程圖選擇結(jié)構(gòu)語句及流程圖 在選擇結(jié)構(gòu)中常見的控制語句有:在選擇結(jié)構(gòu)中常見的控制語句有:if, else if, switch-case。其中。其中if、else if主要應(yīng)用在串行多分支結(jié)構(gòu)程序控主要應(yīng)用在串行多分支結(jié)構(gòu)程序控制中,而制中,而switch-case主要用于并行從分去結(jié)構(gòu)程序的控主要用于并行從分去結(jié)構(gòu)程序的控制中。圖制中。圖4-3所示為串行多分支結(jié)構(gòu)流程圖。所示為串行多分支結(jié)構(gòu)流程圖。 4.4.4 C51流程控制語句流程控制語句4.4 面向面向51單片機(jī)的單片機(jī)的C語言程序語言程序482021/8/14條件1處理1條件2條件n處理2處理
51、3處理4YYYNNN圖圖4-3 串行多分支結(jié)構(gòu)流程圖串行多分支結(jié)構(gòu)流程圖串行多分支結(jié)構(gòu)串行多分支結(jié)構(gòu)492021/8/14語句的基本形式:語句的基本形式:1) if(表達(dá)式表達(dá)式)語句;語句;/當(dāng)括號內(nèi)的表達(dá)式為真,則執(zhí)行當(dāng)括號內(nèi)的表達(dá)式為真,則執(zhí)行內(nèi)的語句;內(nèi)的語句;2) if(表達(dá)式表達(dá)式)語句語句1;else語句語句2;/當(dāng)括號內(nèi)的表達(dá)式為真,則執(zhí)行當(dāng)括號內(nèi)的表達(dá)式為真,則執(zhí)行內(nèi)內(nèi)的語句,否則執(zhí)行語句的語句,否則執(zhí)行語句2;3) if(表達(dá)式表達(dá)式1)語句語句1; else if(表達(dá)式表達(dá)式2)語句語句2; else語句語句n;/哪一個表達(dá)式條件為真,則執(zhí)行對應(yīng)哪一個表達(dá)式條件為真,則
52、執(zhí)行對應(yīng)中的語句,但判斷時表達(dá)式中的語句,但判斷時表達(dá)式1的優(yōu)的優(yōu)先級最高,只有條件不滿足時,才繼續(xù)向下判斷。先級最高,只有條件不滿足時,才繼續(xù)向下判斷。4) if(表達(dá)式表達(dá)式1) if(表達(dá)式表達(dá)式2) 語句語句1; else 語句語句2; /if的嵌套使用,只有當(dāng)表達(dá)式的嵌套使用,只有當(dāng)表達(dá)式1為真時,才進(jìn)行下一級判斷。為真時,才進(jìn)行下一級判斷。1選擇結(jié)構(gòu)語句及流程圖選擇結(jié)構(gòu)語句及流程圖502021/8/14 并行多分支結(jié)構(gòu)圖圖4-4并行多分支結(jié)構(gòu)流程圖并行多分支結(jié)構(gòu)流程圖512021/8/14switch-case語句表達(dá)形式:語句表達(dá)形式:switch(表達(dá)式表達(dá)式1) case 值
53、值1:語句:語句1;break; case 值值2:語句:語句2;break; case 值值N:語句:語句N;break; default: 語句語句N+1; 1選擇結(jié)構(gòu)語句及流程圖選擇結(jié)構(gòu)語句及流程圖4.4.4 C51流程控制語句流程控制語句522021/8/142 2循環(huán)結(jié)構(gòu)語句及流程圖循環(huán)結(jié)構(gòu)語句及流程圖 循環(huán)結(jié)構(gòu)中常見的控制語句主要有循環(huán)結(jié)構(gòu)中常見的控制語句主要有while, do while, for等。等。 While語句的一般形式為:語句的一般形式為:while(條件條件)語句;語句;,圖圖4-5 while結(jié)構(gòu)流程圖結(jié)構(gòu)流程圖4.4.4 C51流程控制語句流程控制語句5320
54、21/8/14 與與while相比,相比,do while的區(qū)別就是行執(zhí)行循環(huán)語句后的區(qū)別就是行執(zhí)行循環(huán)語句后判斷循環(huán)條件。語句的形式為:判斷循環(huán)條件。語句的形式為:do語句;語句;while(條件條件) 。流程圖如圖流程圖如圖4-6所示。所示。 圖圖4-6 do while結(jié)構(gòu)流程圖結(jié)構(gòu)流程圖 4.4.4 C51流程控制語句流程控制語句2循環(huán)結(jié)構(gòu)語句及流程圖循環(huán)結(jié)構(gòu)語句及流程圖542021/8/14for(表達(dá)式表達(dá)式1;表達(dá)式;表達(dá)式2;表達(dá)式;表達(dá)式3) 語句;語句;,for語句在執(zhí)語句在執(zhí)行時共有行時共有5個過程,具體執(zhí)行過程如下:個過程,具體執(zhí)行過程如下: 對表達(dá)式進(jìn)行賦值初始化對表
55、達(dá)式進(jìn)行賦值初始化 判斷表達(dá)式判斷表達(dá)式2是否為真,若為真則進(jìn)行循環(huán),若為假則是否為真,若為真則進(jìn)行循環(huán),若為假則退出循環(huán)退出循環(huán) 若表達(dá)式若表達(dá)式2為真,則執(zhí)行循環(huán)體內(nèi)的語句,并求解表達(dá)為真,則執(zhí)行循環(huán)體內(nèi)的語句,并求解表達(dá)式式3 回到第二步,再判斷表達(dá)式回到第二步,再判斷表達(dá)式2 退出退出for 循環(huán)循環(huán)4.4.4 C51流程控制語句流程控制語句2循環(huán)結(jié)構(gòu)語句及流程圖循環(huán)結(jié)構(gòu)語句及流程圖552021/8/14 51單片機(jī)內(nèi)部資源主要是特殊功能寄存器或單片機(jī)內(nèi)部資源主要是特殊功能寄存器或SFR尋址,尋址,在在KEIL C51中提供了定義這些寄存器的頭文件中提供了定義這些寄存器的頭文件,在進(jìn)行
56、在進(jìn)行C語言編程,應(yīng)在源程序的開始處包含頭文件,語言編程,應(yīng)在源程序的開始處包含頭文件,#include 。內(nèi)部資源的。內(nèi)部資源的C語言編程主要介紹外中語言編程主要介紹外中斷、定時器和串行口編程。斷、定時器和串行口編程。 C51編譯器支持在編譯器支持在C源程序中直接開發(fā)中斷程序,采用源程序中直接開發(fā)中斷程序,采用特殊語法定義中斷函數(shù),定義方法如下:特殊語法定義中斷函數(shù),定義方法如下: 返回值返回值 函數(shù)名函數(shù)名 interrupt n using m n代表單片機(jī)的中斷編號,代表單片機(jī)的中斷編號, n的范圍(的范圍(04)依次為外部)依次為外部中斷中斷0、定時、定時/計數(shù)器計數(shù)器0、外部中斷、
57、外部中斷1、定時、定時/計數(shù)器計數(shù)器1、串行口、串行口中斷。中斷。m表示通用寄存器組的的選擇,范圍(表示通用寄存器組的的選擇,范圍(0-3)。)。4.4.5 單片機(jī)資源與C語言編程562021/8/14 4.4.6 C語言程序?qū)嵗Z言程序?qū)嵗?在進(jìn)行單片機(jī)的在進(jìn)行單片機(jī)的C語言編程時,其步驟與匯編語言編語言編程時,其步驟與匯編語言編程沒有區(qū)別,首先要了解單片機(jī)系統(tǒng)硬件電路的設(shè)計,程沒有區(qū)別,首先要了解單片機(jī)系統(tǒng)硬件電路的設(shè)計,尤其單片機(jī)的外部資源的地址編碼,當(dāng)了解了單片機(jī)系尤其單片機(jī)的外部資源的地址編碼,當(dāng)了解了單片機(jī)系統(tǒng)的硬件電路后,就可以根據(jù)要求畫出流程圖,合理分統(tǒng)的硬件電路后,就可以根據(jù)
58、要求畫出流程圖,合理分配內(nèi)部資源進(jìn)行編程,下面以一個數(shù)據(jù)采集的實例進(jìn)行配內(nèi)部資源進(jìn)行編程,下面以一個數(shù)據(jù)采集的實例進(jìn)行說明。說明。 572021/8/14 圖4-7為ADC0809與51系列單片機(jī)(89S51)的接口電路原理圖,要求順序采集ADC0809的8個通道的模擬量,并存放在數(shù)組ADCON中 IN31IN42IN53IN64IN75START6EOCD3OE9CLK10VCCREF+GND13D1D2REF-D0D4D5D6D7ALE22ADD C23ADD B24ADD A25IN026IN127IN228IN31IN42IN53IN64IN75START6EOCD3OE9CLK10V
59、CCREF+GND13D1D2REF-D0D4D5D6D7ALE22ADD C23ADD B24ADD A25IN026IN127IN228IN31IN42IN53IN64IN75START6EOC7D38OE9CLK10VCC11REF+12GND13D114D215REF-16D017D418D519D620D721ALE22ADD C23ADD B24ADD A25IN026IN127IN228U2ADC0809VCCVCCCLKSTARTOESTARTEOC8910U3C231231231U3A564564564U3BP3.6P3.7STARTOEIN0IN1IN2IN3IN4IN5I
60、N6IN7A0A1A2P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7CS1123456781234567812345678JP6ADINCLK10CLK11D1213Q9Q8CLRPR10CLK11D1213Q9Q810CLK11D1213Q9Q8U5B74LS74VCCVCCALEP3.2P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78RST9P3.0/RxD10P3.1/TxD11P3.2/INT012P3.3/INT113P3.4/T014P3.5/T115P3.6/WR16P3.7/RD17XTAL218XTAL119VSS20P2.0/A821P2.1/
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房產(chǎn)代持合同協(xié)議書范本
- 汽車內(nèi)飾配件采購合同
- 離婚后住房分配合同樣本
- 二手施工設(shè)備購銷合同
- 家族遺產(chǎn)分配合同
- 借款擔(dān)保反擔(dān)保合同樣本
- 學(xué)校裝修合同案例
- 門面房屋買賣合同
- 太陽能發(fā)電政策考核試卷
- 新材料在新能源領(lǐng)域的應(yīng)用考核試卷
- 中央2025年中國科協(xié)所屬單位招聘社會在職人員14人筆試歷年參考題庫附帶答案詳解-1
- 殯儀服務(wù)員職業(yè)技能鑒定考試題(附答案)
- 電動葫蘆吊裝方案計劃
- 2025年山東電工電氣集團(tuán)招聘筆試參考題庫含答案解析
- 造價咨詢服務(wù)方案進(jìn)度計劃安排及保證措施
- 2024年認(rèn)證行業(yè)法律法規(guī)及認(rèn)證基礎(chǔ)知識 CCAA年度確認(rèn) 試題與答案
- 2024年濰坊工程職業(yè)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- JIS C9335-1-2014 家用和類似用途電器.安全性.第1部分:通用要求
- 甲溝炎治療的護(hù)理與預(yù)防
- 哈工大微電子工藝緒論01單晶硅
- 供養(yǎng)直系親屬有關(guān)文件
評論
0/150
提交評論