單片微型計算機(jī)原理及接口技術(shù)(楊光友版)課件ch4_第1頁
單片微型計算機(jī)原理及接口技術(shù)(楊光友版)課件ch4_第2頁
單片微型計算機(jī)原理及接口技術(shù)(楊光友版)課件ch4_第3頁
單片微型計算機(jī)原理及接口技術(shù)(楊光友版)課件ch4_第4頁
單片微型計算機(jī)原理及接口技術(shù)(楊光友版)課件ch4_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第四章第四章 匯編語言程序設(shè)計匯編語言程序設(shè)計 4-1 4-1 匯編程序基本概念匯編程序基本概念4-1-1 4-1-1 程序設(shè)計語言程序設(shè)計語言 用于編制計算機(jī)程序的語言稱為用于編制計算機(jī)程序的語言稱為程序設(shè)計語言程序設(shè)計語言。按。按照語言的結(jié)構(gòu)及其功能可以分為三種:機(jī)器語言、匯編照語言的結(jié)構(gòu)及其功能可以分為三種:機(jī)器語言、匯編語言、高級語言。語言、高級語言。一、機(jī)器語言一、機(jī)器語言 用二進(jìn)制代碼用二進(jìn)制代碼0和和1表示指令和數(shù)據(jù)的最原始的程序表示指令和數(shù)據(jù)的最原始的程序設(shè)計語言。其直接取決于計算機(jī)的結(jié)構(gòu),響應(yīng)速度最快,設(shè)計語言。其直接取決于計算機(jī)的結(jié)構(gòu),響應(yīng)速度最快,但程序繁瑣、難認(rèn)、難記。

2、但程序繁瑣、難認(rèn)、難記。1)匯編語言指令與機(jī)器語言指令相對應(yīng),有效地利用存儲空間。)匯編語言指令與機(jī)器語言指令相對應(yīng),有效地利用存儲空間。2)指令直接訪問)指令直接訪問CPU的寄存器、存儲單元和的寄存器、存儲單元和I/O端口,可以充分端口,可以充分發(fā)揮發(fā)揮CPU的功能,滿足實時控制的要求。的功能,滿足實時控制的要求。3)是面向機(jī)器的語言,使用者必須對機(jī)器的硬件結(jié)構(gòu)、指令系)是面向機(jī)器的語言,使用者必須對機(jī)器的硬件結(jié)構(gòu)、指令系統(tǒng)都要熟悉。匯編語言程序的通用性差,程序移植起來不方便。統(tǒng)都要熟悉。匯編語言程序的通用性差,程序移植起來不方便。二、匯編語言二、匯編語言用匯編語言編寫的、完成特定功能的指令

3、序列。用匯編語言編寫的、完成特定功能的指令序列。特點有:特點有:匯編匯編 匯編語言程序到機(jī)器語言程序的轉(zhuǎn)換過程稱為匯編語言程序到機(jī)器語言程序的轉(zhuǎn)換過程稱為匯編匯編。1.手工匯編手工匯編:人工查指令表匯編。用于設(shè)計短小程序:人工查指令表匯編。用于設(shè)計短小程序或調(diào)試程序的場合。或調(diào)試程序的場合。2.機(jī)器匯編機(jī)器匯編:用匯編程序進(jìn)行匯編。:用匯編程序進(jìn)行匯編。三、高級語言三、高級語言 高級語言是以接近于人的自然語言,面向過程而獨高級語言是以接近于人的自然語言,面向過程而獨立于機(jī)器的通用語言。必須經(jīng)編譯程序或解釋程序進(jìn)行立于機(jī)器的通用語言。必須經(jīng)編譯程序或解釋程序進(jìn)行翻譯生成目標(biāo)程序,機(jī)器才能執(zhí)行。翻

4、譯生成目標(biāo)程序,機(jī)器才能執(zhí)行。 特點:特點:簡單、易學(xué)、通用性好,便于移植。但是,簡單、易學(xué)、通用性好,便于移植。但是,其目標(biāo)程序占存儲單元多,執(zhí)行時間長;在其目標(biāo)程序占存儲單元多,執(zhí)行時間長;在MCS-51系系列單片機(jī)開發(fā)應(yīng)用中,單片機(jī)的列單片機(jī)開發(fā)應(yīng)用中,單片機(jī)的C語言語言C51正得到越來正得到越來越廣泛的應(yīng)用。越廣泛的應(yīng)用。4-1-2 4-1-2 匯編語言的語句結(jié)構(gòu)匯編語言的語句結(jié)構(gòu)二、匯編語言的語句格式二、匯編語言的語句格式匯編語言一般由四部分組成。格式如下:匯編語言一般由四部分組成。格式如下: 標(biāo)號:標(biāo)號: 操作碼操作碼 操作數(shù)操作數(shù) ; 注釋注釋 START: MOV A, 30H

5、 ;A(30H) 各部分之間須用分隔符,即在標(biāo)號之后要加冒號各部分之間須用分隔符,即在標(biāo)號之后要加冒號“:”;在操;在操作作碼與操作數(shù)之間用空格間隔;在操作數(shù)內(nèi)部用逗號碼與操作數(shù)之間用空格間隔;在操作數(shù)內(nèi)部用逗號“,”將源操將源操作作數(shù)和目的操作數(shù)隔開;注釋段用分號(;)隔開。數(shù)和目的操作數(shù)隔開;注釋段用分號(;)隔開。 一一. 匯編語言指令類型匯編語言指令類型1.1.機(jī)器指令機(jī)器指令: 指令系統(tǒng)中的全部指令,每條指令有對應(yīng)的機(jī)器代碼。指令系統(tǒng)中的全部指令,每條指令有對應(yīng)的機(jī)器代碼。2 2. 偽指令偽指令: 匯編控制指令,僅提供匯編信息,沒有指令代碼。匯編控制指令,僅提供匯編信息,沒有指令代碼

6、。 4-1-3 4-1-3 偽指令偽指令 常用偽指令及其功能:常用偽指令及其功能:1. 1. ORGORG起始地址指令:指明程序和數(shù)據(jù)塊起始地址。起始地址指令:指明程序和數(shù)據(jù)塊起始地址。指令地址指令地址 機(jī)器碼機(jī)器碼源程序源程序ORGORG 2000H 2000H 2000H 78 30 2000H 78 30 MAIN MAIN:MOV R0MOV R0,#30H#30H 2002H E6 2002H E6MOV AMOV A,R0R0 ORG 3000HORG 3000H 3000H 23 3000H 23DB 23HDB 23H,100100,A A 3001H 64 3001H 64

7、3002H 3002H4141 2 2 . . D B D B 定 義 字 節(jié) 型 常 數(shù) 指 令 。定 義 字 節(jié) 型 常 數(shù) 指 令 。例:例: DB 12HDB 12H,100100,AA 4.4. EQU EQU 賦值。為標(biāo)號或標(biāo)識符賦值。賦值。為標(biāo)號或標(biāo)識符賦值。 X1 X1 EQU 2000HEQU 2000H X2 EQU 0FHX2 EQU 0FH MAIN:MAIN:MOV DPTRMOV DPTR,#X1#X1 ADD AADD A,#X2#X2 5.5. BITBIT 位定義。位定義。 例:例:FLAG BIT 30H FLAG BIT 30H 3. 3. DW DW 定

8、義字型常數(shù)指令。定義字型常數(shù)指令。例:例: DW 1234HDW 1234H,5678H5678H 6.6. ENDEND 結(jié)束匯編指令。結(jié)束匯編指令。 DS:定義存儲區(qū)從指定單元開始,保留一定數(shù)量存儲單元ORG 0500HDS 84-2 4-2 匯編語言程序設(shè)計匯編語言程序設(shè)計一一. .分析問題,建立數(shù)學(xué)模型分析問題,建立數(shù)學(xué)模型二二. .確定算法確定算法三三. .畫程序流程圖畫程序流程圖 四四. .分配內(nèi)存單元分配內(nèi)存單元 五五. .編制源程序編制源程序 六六. .調(diào)試程序調(diào)試程序開始開始1 YN? 常用程序結(jié)構(gòu)常用程序結(jié)構(gòu) 順序程序、分支程序、循環(huán)程序、子程序順序程序、分支程序、循環(huán)程序

9、、子程序4-2-2 4-2-2 順序程序順序程序 順序程序又稱簡單程序,程序走向只有一條路徑。順序程序又稱簡單程序,程序走向只有一條路徑。例例1 1:雙字節(jié)求補(bǔ)程序雙字節(jié)求補(bǔ)程序( (設(shè)數(shù)據(jù)在設(shè)數(shù)據(jù)在R4R5R4R5中中) ):MOVMOV A A,R5R5;取低字節(jié)取低字節(jié)CPLCPL A AADDADD A A,#01H#01H;低字節(jié)變補(bǔ)低字節(jié)變補(bǔ)MOVMOV R5 R5,A AMOVMOV A A,R4R4;取高字節(jié)取高字節(jié)CPLCPL A AADDC AADDC A,#00H#00H;高字節(jié)變補(bǔ)高字節(jié)變補(bǔ)MOVMOV R4 R4,A A例例2 2:將將30H單元內(nèi)的兩位單元內(nèi)的兩位B

10、CD碼拆開并轉(zhuǎn)換成碼拆開并轉(zhuǎn)換成ASCII碼,存入碼,存入RAM兩個單元中。兩個單元中。ORG 2000HMOV A ,30H ;取值取值A(chǔ)NL A,#0FH ;取低四位取低四位ADDA,#30H, ;轉(zhuǎn)換成轉(zhuǎn)換成ASCII碼碼MOV 32H ,A ;保存結(jié)果保存結(jié)果MOV A ,30H ;取值取值SWAP A ;高高4位與低四位互換位與低四位互換ANLA,#0FH ;取低四位(原高取低四位(原高4位)位)ADD A,#30H, ; 轉(zhuǎn)換成轉(zhuǎn)換成ASCII碼碼MOV 31H ,A ;保存結(jié)果保存結(jié)果 SJMP $ END 結(jié)束取數(shù)據(jù)低4位轉(zhuǎn)換成ASCII碼存ASCII碼取數(shù)據(jù)高4位轉(zhuǎn)換成ASC

11、II碼存ASCII碼開始4-2-34-2-3 分支程序分支程序由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成程序分支結(jié)構(gòu)。由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成程序分支結(jié)構(gòu)。單重分支程序單重分支程序一個判斷決策框,程序有兩條出路。一個判斷決策框,程序有兩條出路。兩種分支結(jié)構(gòu):兩種分支結(jié)構(gòu):條件滿足?N影響條件Y處理段條件滿足?N影響條件Y處理1處理2例例1 1: 求求R2R2中補(bǔ)碼絕對值,正數(shù)中補(bǔ)碼絕對值,正數(shù) 不變,負(fù)數(shù)變補(bǔ)。不變,負(fù)數(shù)變補(bǔ)。 ORG 1000H ORG 1000H MOV A MOV A,R2R2 JNB ACC.7 JNB ACC.7,NEXTNEXT;為正數(shù)?為正數(shù)? CPL

12、A CPL A ;負(fù)數(shù)變補(bǔ)負(fù)數(shù)變補(bǔ) INC AINC A MOV R2 MOV R2,A ANEXTNEXT:END END ;結(jié)束結(jié)束 多重分支程序多重分支程序一多次使用條件轉(zhuǎn)移指令,形成兩個以上判斷框。一多次使用條件轉(zhuǎn)移指令,形成兩個以上判斷框。例例2 2: 求符號函數(shù)求符號函數(shù)Y=SGN(X)Y=SGN(X) +1 +1 當(dāng)當(dāng) X0X0SGN(X)= 0 SGN(X)= 0 當(dāng)當(dāng) X=0X=0 -1 -1 當(dāng)當(dāng) X0X0X0?Y取XNY= 0Y= + 1開始Y=1X0?NY保存Y結(jié)束ORG 0100HSYMB: MOV A,40H ;取取X JZ STOR ;X=0,Y=X JB ACC

13、7,MINUS;X0 MOV A,# 1 ;X0,Y=+1 SJMP STORMINUS:MOV A,#FFH;X0,Y= -1STOR: MOV 41H,A ;保存保存Y RET二按分支號轉(zhuǎn)移二按分支號轉(zhuǎn)移如:分支號如:分支號=0,程序轉(zhuǎn)移到,程序轉(zhuǎn)移到ADDR0處;當(dāng)分支號處;當(dāng)分支號=1,程序轉(zhuǎn)移到程序轉(zhuǎn)移到ADDR1處;處; 。(1)用地址表法。用地址表法。例例3:設(shè)分支號已存入設(shè)分支號已存入A。MTJS:MOV DPTR,#1000HB ;取表首地址取表首地址 CLR C ;分支號分支號2 RLC A MOV R2,A MOVC A,A+DPTR;取分支地址低位取分支地址低位 PUS

14、H ACC ;入棧保存入棧保存 MOV A,R2 INC A MOVC A,A+DPTR;取分支地址高位取分支地址高位 PUSH ACC ;入棧保存入棧保存 RET ;分支地址分支地址PC,轉(zhuǎn)移轉(zhuǎn)移1000H: DW ADDR0 ;分支地址表分支地址表 DW ADDR1 ADDR0: ;程序段程序段0 A = ?0處理一處理二處理1n(2)轉(zhuǎn)移表法。轉(zhuǎn)移表法。用分支轉(zhuǎn)移指令用分支轉(zhuǎn)移指令 JMP A+DPTRJMP A+DPTR。例例4: 根據(jù)根據(jù)R0的值轉(zhuǎn)向的值轉(zhuǎn)向6個分支程序。個分支程序。 R010,轉(zhuǎn)向轉(zhuǎn)向SUB0; R020,轉(zhuǎn)向轉(zhuǎn)向SUB1; R060,轉(zhuǎn)向轉(zhuǎn)向SUB5;K=?轉(zhuǎn)SU

15、B0轉(zhuǎn)SUB1轉(zhuǎn)SUB5K=0 K=1 K=5開始 ORG2000H MOV DPTR,#TAB;轉(zhuǎn)移指令表首地址轉(zhuǎn)移指令表首地址 MOV A, R0 ;取數(shù)取數(shù) MOV B, #10 DIV AB ;A除除10,商在,商在A中中 CLR C RLC A ;A2A JMP A+DPTR ;PC A+DPTRTAB: AJMP SUB0 ;轉(zhuǎn)移指令表轉(zhuǎn)移指令表 AJMP SUB1 AJMP SUB2 AJMP SUB54-2-44-2-4 循環(huán)程序循環(huán)程序包含多次重復(fù)執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。包含多次重復(fù)執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。循環(huán)程序的構(gòu)成循環(huán)程序的構(gòu)成循環(huán)控制 ?循環(huán)工作循

16、環(huán)結(jié)束循環(huán)初始化YN一初始化部分一初始化部分循環(huán)準(zhǔn)備工作。如:清結(jié)果單元、循環(huán)準(zhǔn)備工作。如:清結(jié)果單元、設(shè)指針、設(shè)循環(huán)控制變量初值等。設(shè)指針、設(shè)循環(huán)控制變量初值等。二循環(huán)體二循環(huán)體需多次重復(fù)處理的程序段。需多次重復(fù)處理的程序段。三三. .循環(huán)控制部分循環(huán)控制部分1.1.修改指針和循環(huán)控制變量。修改指針和循環(huán)控制變量。2.2.檢測循環(huán)條件:滿足循環(huán)條件,繼續(xù)循環(huán),否則退出循環(huán)。檢測循環(huán)條件:滿足循環(huán)條件,繼續(xù)循環(huán),否則退出循環(huán)。四四. .結(jié)束部分結(jié)束部分 處理和保存循環(huán)結(jié)果。處理和保存循環(huán)結(jié)果。循環(huán)程序按結(jié)構(gòu)形式,分為循環(huán)程序按結(jié)構(gòu)形式,分為單重循環(huán)單重循環(huán)與與多重循環(huán)多重循環(huán)。 單重循環(huán)單重循

17、環(huán)簡單循環(huán)結(jié)構(gòu):循環(huán)體中不套循環(huán)。簡單循環(huán)結(jié)構(gòu):循環(huán)體中不套循環(huán)。例例1 1:求求n n個單字節(jié)數(shù)據(jù)的累加,設(shè)數(shù)據(jù)串已在個單字節(jié)數(shù)據(jù)的累加,設(shè)數(shù)據(jù)串已在4343H H起始單元,起始單元,數(shù)據(jù)串長度在數(shù)據(jù)串長度在4242H H單元,累加和不超過單元,累加和不超過2 2個字節(jié)。個字節(jié)。SUMSUM: MOVMOVR0R0,#42H#42H;設(shè)指針設(shè)指針MOVMOVA A,R0R0MOVMOVR2R2,A A ;循環(huán)計數(shù)器循環(huán)計數(shù)器n nCLRCLRA A ;結(jié)果單元清結(jié)果單元清0 0MOVMOVR3R3,A AADD1ADD1:INCINCR0R0 ;修改指針修改指針ADDADDA A,R0 R0

18、 ;累加累加JNC NEXTJNC NEXT ;處理進(jìn)位處理進(jìn)位INCINCR3R3 ;有進(jìn)位,高字節(jié)加有進(jìn)位,高字節(jié)加1 1NEXT:NEXT: DJNZ DJNZ R2,ADD1 R2,ADD1 ;循環(huán)控制:數(shù)據(jù)是否加完?循環(huán)控制:數(shù)據(jù)是否加完?MOVMOV40H40H,A A ;循環(huán)結(jié)束,保存結(jié)果循環(huán)結(jié)束,保存結(jié)果MOVMOV41H41H,R3R3RETRET循環(huán)控制方法:計數(shù)控制、特征標(biāo)志控制。循環(huán)控制方法:計數(shù)控制、特征標(biāo)志控制。一一. .計數(shù)控制:計數(shù)控制:設(shè)循環(huán)計數(shù)器,控制循環(huán)次數(shù)。正計數(shù)和倒計數(shù)兩種方式。設(shè)循環(huán)計數(shù)器,控制循環(huán)次數(shù)。正計數(shù)和倒計數(shù)兩種方式。例例2 2:為一串為一

19、串7 7位位ASCIIASCII碼數(shù)據(jù)的碼數(shù)據(jù)的D D7 7位加上奇校驗,設(shè)數(shù)據(jù)存位加上奇校驗,設(shè)數(shù)據(jù)存放在片外放在片外RAMRAM的的21012101H H起始單元,數(shù)據(jù)長度在起始單元,數(shù)據(jù)長度在21002100H H單元。單元。片外RAM2102H011010002101H001011012100HnMOV DPTRMOV DPTR,#2100H#2100HMOVX AMOVX A,DPTRDPTRMOV R2MOV R2,A ANEXTNEXT:INC DPTRINC DPTRMOVX AMOVX A,DPTRDPTRORL AORL A,#80H#80HJNB PJNB P,PASSP

20、ASSMOVX DPTRMOVX DPTR,A APASSPASS:DJNZ R2DJNZ R2,NEXTNEXTDONEDONE:SJMP DONESJMP DONE二二. .特征控制:特征控制:設(shè)定循環(huán)結(jié)束標(biāo)志實現(xiàn)循環(huán)控制。設(shè)定循環(huán)結(jié)束標(biāo)志實現(xiàn)循環(huán)控制。例例3 3:找正數(shù)表最小值。正數(shù)表存在片外找正數(shù)表最小值。正數(shù)表存在片外RAMRAM中以中以LISTLIST為為起始單元,用起始單元,用-1-1作為結(jié)束標(biāo)志。作為結(jié)束標(biāo)志。STARTSTART:MOVMOVDPTRDPTR,#LIST#LIST ;數(shù)表首地址數(shù)表首地址 MOVMOVB B,#127#127 ;預(yù)置最小值預(yù)置最小值NEXTNE

21、XT: MOVX A MOVX A,DPTRDPTR ;取數(shù)取數(shù) INCINCDPTRDPTR ;修改指針修改指針 CJNE ACJNE A,#-1#-1,NEXT1NEXT1;是否為數(shù)表結(jié)尾?是否為數(shù)表結(jié)尾? SJMP DONESJMP DONE ;循環(huán)結(jié)束循環(huán)結(jié)束NEXT1NEXT1:CJNE ACJNE A,B B,NEXT2NEXT2 ;比較比較NEXT2NEXT2:JNCJNCNEXTNEXT MOV MOVB B,A A ;保存較小值保存較小值 SJMP NEXTSJMP NEXTDONEDONE: SJMP DONE SJMP DONE習(xí)題:習(xí)題:統(tǒng)計一班考試為統(tǒng)計一班考試為10

22、0100分和不及格人數(shù),成績在分和不及格人數(shù),成績在4141H H起始單元。起始單元。多重循環(huán)多重循環(huán)循環(huán)體中套循環(huán)結(jié)構(gòu)。以雙重循環(huán)使用較多。循環(huán)體中套循環(huán)結(jié)構(gòu)。以雙重循環(huán)使用較多。例例4 4:將內(nèi)存一串單字節(jié)無符號數(shù)升序排序。將內(nèi)存一串單字節(jié)無符號數(shù)升序排序。步驟:步驟:每次取相鄰單元的兩個數(shù)比較,決定是否需要交換數(shù)據(jù)位置。每次取相鄰單元的兩個數(shù)比較,決定是否需要交換數(shù)據(jù)位置。第一次循環(huán),比較第一次循環(huán),比較N-1N-1次,取到數(shù)據(jù)表中最大值。次,取到數(shù)據(jù)表中最大值。第二次循環(huán),比較第二次循環(huán),比較N-2N-2次,取到次大值。次,取到次大值。 第第N-1N-1次循環(huán):比較一次,排序結(jié)束。次循

23、環(huán):比較一次,排序結(jié)束。片內(nèi)RAMMAX5241TAB3內(nèi)循環(huán)控制內(nèi)循環(huán)控制 ?循環(huán)工作循環(huán)工作循環(huán)結(jié)束循環(huán)結(jié)束外循環(huán)控制外循環(huán)控制 ?內(nèi)循環(huán)初始化內(nèi)循環(huán)初始化開始開始外循環(huán)初始化外循環(huán)初始化SORTSORT: MOV MOV A A,#N-1#N-1;N N個數(shù)據(jù)排序個數(shù)據(jù)排序 MOVMOV R4 R4,A A;外循外循環(huán)次數(shù)環(huán)次數(shù)LOOP1LOOP1: MOV MOV A A,R4R4 MOV MOV R3 R3,A A;內(nèi)循內(nèi)循環(huán)次數(shù)環(huán)次數(shù) MOVMOV R0 R0,#TAB#TAB;設(shè)數(shù)據(jù)指針設(shè)數(shù)據(jù)指針LOOP2LOOP2: MOV MOV A A,R0R0;取二數(shù)取二數(shù) MOVMOV

24、 B B,A A INC INC R0 R0 MOV MOV A A,R0R0 CJNE A CJNE A,B B,L1L1;比較比較L1L1: JNC JNC UNEX UNEX;ABAB,不交換不交換 DECDEC R0 R0;否則交換數(shù)據(jù)否則交換數(shù)據(jù) XCHXCH A A ,R0R0 INC INC R0 R0 MOV MOV R0 R0,A AUNEXUNEX: DJNZ R3 DJNZ R3,LOOP2LOOP2;內(nèi)循環(huán)結(jié)束?內(nèi)循環(huán)結(jié)束? DJNZ R4DJNZ R4,LOOP1LOOP1;外循環(huán)結(jié)束?外循環(huán)結(jié)束? RETRETR3R31=0 ?B (R0) A ( R0 + 1 )

25、循環(huán)結(jié)束循環(huán)結(jié)束外循環(huán)次數(shù)外循環(huán)次數(shù)R4R4R41=0 ?內(nèi)循環(huán)次數(shù)內(nèi)循環(huán)次數(shù)R3表首表首TABR0開始開始A BA B?( (R0)(R0+1)R0)(R0+1)R0 R0+1R0 R0+1Y YN N軟件延時程序軟件延時程序用循環(huán)程序?qū)⒅噶钪貜?fù)多次執(zhí)行,實現(xiàn)軟件延時。用循環(huán)程序?qū)⒅噶钪貜?fù)多次執(zhí)行,實現(xiàn)軟件延時。試計算延時程序的執(zhí)行時間。試計算延時程序的執(zhí)行時間。源程序源程序指令周期指令周期( (M) M) 指令執(zhí)行次數(shù)指令執(zhí)行次數(shù)習(xí)題:習(xí)題:DELAYDELAY:MOV R6MOV R6,#100#1001 1D1D1: MOV R7 MOV R7,#10#101 1D2D2: NOP N

26、OP1 1 DJNZ R7DJNZ R7,D2D22 2 DJNZ R6 DJNZ R6,D1D12 2 RET RET2 2計算延時程序的執(zhí)行時間計算延時程序的執(zhí)行時間( (設(shè)時鐘設(shè)時鐘f=6MHz,M=1s)f=6MHz,M=1s)。DELAYDELAY:MOV R6MOV R6,#64H#64H1 1I1I1: MOV R7 MOV R7,#0FFH#0FFH1 1I2I2: DJNZ R7 DJNZ R7,I2I22 2 DJNZ R6 DJNZ R6,I1I12 2 RET RET2 2延時時間計算:(設(shè)時鐘延時時間計算:(設(shè)時鐘f=12MHzf=12MHz)t=(1t=(11+11

27、+1100+2100+2100100255+2255+2100+2100+21)1)M=51.3 M=51.3 msms1 11001001001002552551001001 14-2-5 4-2-5 子程序子程序子程序:子程序:能完成某項特定功能的獨立程序段,可被反復(fù)調(diào)用。能完成某項特定功能的獨立程序段,可被反復(fù)調(diào)用。調(diào)用子程序:調(diào)用子程序:就是暫時中斷主程序的執(zhí)行,而轉(zhuǎn)到子程序的入就是暫時中斷主程序的執(zhí)行,而轉(zhuǎn)到子程序的入口地址去執(zhí)行子程序。子程序執(zhí)行完畢,自動返回主程序,主口地址去執(zhí)行子程序。子程序執(zhí)行完畢,自動返回主程序,主程序再繼續(xù)往下執(zhí)行。程序再繼續(xù)往下執(zhí)行。子程序設(shè)計子程序設(shè)計

28、一子程序入口用標(biāo)號作為子程序名。一子程序入口用標(biāo)號作為子程序名。二調(diào)用子程序之前設(shè)置好堆棧。二調(diào)用子程序之前設(shè)置好堆棧。三用返回指令三用返回指令RETRET結(jié)束子程序,并保結(jié)束子程序,并保 證堆棧棧頂為調(diào)用程序的返回地址。證堆棧棧頂為調(diào)用程序的返回地址。四四. .子程序嵌套須考慮堆棧容量。子程序嵌套須考慮堆棧容量。五五. .提供足夠的調(diào)用信息提供足夠的調(diào)用信息: :如:子程序名、子程序功能、入口如:子程序名、子程序功能、入口參數(shù)和出口參數(shù)、子程序占用的硬參數(shù)和出口參數(shù)、子程序占用的硬件資源、子程序中調(diào)用的其他子程件資源、子程序中調(diào)用的其他子程序名。序名。主程序CALL SCALL S子程序SR

29、ET子程序的類型子程序的類型按子程序與主程序之間傳遞參數(shù)的方式分類。按子程序與主程序之間傳遞參數(shù)的方式分類。入口參數(shù):入口參數(shù):調(diào)用子程序之前,需要傳給子程序的參數(shù)。調(diào)用子程序之前,需要傳給子程序的參數(shù)。出口參數(shù):出口參數(shù):子程序送回調(diào)用程序的結(jié)果參數(shù)。子程序送回調(diào)用程序的結(jié)果參數(shù)。選用不同的參數(shù)傳遞方式。選用不同的參數(shù)傳遞方式。 1.1.寄存器傳送參數(shù)寄存器傳送參數(shù)2.2.存儲器傳送參數(shù)存儲器傳送參數(shù)3.3.堆棧傳送參數(shù)堆棧傳送參數(shù)設(shè)計子程序應(yīng)滿足通用性的要求,不針對具體數(shù)據(jù)編程。設(shè)計子程序應(yīng)滿足通用性的要求,不針對具體數(shù)據(jù)編程。如:如:1.1.子程序功能為求單字節(jié)數(shù)的立方:子程序功能為求單

30、字節(jié)數(shù)的立方: A A A A3 3,入口參數(shù)和出口參數(shù)為入口參數(shù)和出口參數(shù)為A A。 2.2.子程序功能為求單字節(jié)數(shù)的子程序功能為求單字節(jié)數(shù)的n n次方:次方:(41(41H)(42H)H)(42H) (40H)(40H)A A,入口參數(shù)為入口參數(shù)為(40(40H)H)和和A A,出口參數(shù)為出口參數(shù)為(42(42H)(41H)H)(41H)。例例1 1:將將R4R5R6R4R5R6中三個字節(jié)數(shù)據(jù)對半分解,變成中三個字節(jié)數(shù)據(jù)對半分解,變成6 6個字節(jié),個字節(jié), 存入顯示緩沖區(qū)存入顯示緩沖區(qū)( (DISMEM0DISMEM0DISMEM5)DISMEM5)。1 1)子程序)子程序UFOR1UFOR1的功能:將的功能:將A A累加器累加器中單字節(jié)數(shù)據(jù),對半分解成兩個字中單字節(jié)數(shù)據(jù),對半分解成兩個字節(jié),存入節(jié),存入R0R0所指向的相鄰兩個單元所指向的相鄰兩個單元UFOR1UFOR1:MOV R0MOV R0,#0#0 XCHD A XCHD A,R0R0 ;保存低保存低半字節(jié)半字節(jié) INC R0INC R0 ;修改指針修改指針 MOV R0MOV R0,#0#0 SWAP A SWAP A XCHD A XCHD A,R0R0 ;保存高保存高半字節(jié)半字節(jié) RET

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論