




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
單片機(jī)原理及其應(yīng)用第五章第一頁,共五十三頁,2022年,8月28日補(bǔ)充
匯編語言源程序的格式
源程序基本上由主程序、子程序、中斷服務(wù)子程序組成。編制匯編語言源程序根據(jù)MCS-51單片機(jī)ROM的出廠內(nèi)部定義,一般按這樣的主框架編制:
;程序變量定義區(qū)1 SDA BIT P1.3 ;定義SDA位變量2 IO EQU P0 ;定義I/O等值P0口3 ByteCon DATA 30H ;定義字節(jié)變量ByteCon
;程序主體部分4 ORG 0000H ;程序段從0000H單元開始存放5 LJMP MAIN ;跳到主程MAIN6 ORG 0003H ;從0003H開始存放程序段7 LJMP INTERUPT1 ;跳到外部中斷0處理子程序第二頁,共五十三頁,2022年,8月28日前言
匯編語言源程序的格式8 ORG 0030H ;從0030H開始存放程序段9 MAIN: ;主程序標(biāo)號說明10 MOV SP,#30H;設(shè)置堆棧指針,可以大于30H11 LCALL INITIATE;調(diào)用初始化子程12 FCY: ;控制程序循環(huán)標(biāo)號
LCALL SUB ;調(diào)用功能子程序13 LJMP FCY ;跳到FCY構(gòu)成循環(huán)14 ORG xxxx ;以下功能程序的存放地址15 INITIATE:……;初始化子程序標(biāo)號16 RET ;子程序返回17 SUB: …… ;功能子程序標(biāo)號18 RET ;子程序返回19INTERUPT1:……;外部中斷0功能程序20 RETI ;中斷返回21 TABLE: ;表的標(biāo)號22 DB00H,01H ;表的數(shù)據(jù)
END
;源程序結(jié)束,停止匯編。
第三頁,共五十三頁,2022年,8月28日前言
匯編語言源程序的格式第1~3行:把一些符號或變量定義成通俗的符號。第4、6、8、14行:表示程序存儲的開始地址。第5行:使CPU在執(zhí)行程序時,從0000H跳過各中斷源的入口地址,主程序以跳轉(zhuǎn)的目標(biāo)地址作為起始地址開始編寫。第6行:中斷服務(wù)程序的存儲地址。第9、12、15、17、19行:為程序語句標(biāo)號。第10行:設(shè)置堆棧指針一般最小設(shè)30H,棧區(qū)夠用還可以增大。第21、22行:為查表指令的表。第四頁,共五十三頁,2022年,8月28日§5-1匯編語言概述一、匯編語言程序設(shè)計(jì)的一般步驟分析課題確定算法畫流程圖編寫程序上機(jī)調(diào)試當(dāng)接到程序設(shè)計(jì)的任務(wù)后,首先對任務(wù)進(jìn)行詳盡的分析,搞清楚已知的數(shù)據(jù)和想要得到的結(jié)果,程序應(yīng)該完成何種的功能。第五頁,共五十三頁,2022年,8月28日§4-4匯編語言程序設(shè)計(jì)基礎(chǔ)一、匯編語言程序設(shè)計(jì)的一般步驟分析課題確定算法畫流程圖編寫程序上機(jī)調(diào)試
根據(jù)實(shí)際問題的要求和指令系統(tǒng)的特點(diǎn),確定解決問題的具體步驟。根據(jù)任務(wù)要求,對不同的計(jì)算方法進(jìn)行比較,選擇最適宜的算法。第六頁,共五十三頁,2022年,8月28日§4-4匯編語言程序設(shè)計(jì)基礎(chǔ)一、匯編語言程序設(shè)計(jì)的一般步驟分析課題確定算法畫流程圖編寫程序上機(jī)調(diào)試將解決問題的具體步驟用一種約定的幾何圖形、指向線和必要的文字說明描述出來的圖形。第七頁,共五十三頁,2022年,8月28日§4-4匯編語言程序設(shè)計(jì)基礎(chǔ)一、匯編語言程序設(shè)計(jì)的一般步驟分析課題確定算法畫流程圖編寫程序上機(jī)調(diào)試
經(jīng)過上述各步驟后,解決問題的思路已經(jīng)非常清楚,所以接下來就可以按流程圖的順序?qū)γ恳粋€功能框選用合適的指令編寫出匯編語言程序。第八頁,共五十三頁,2022年,8月28日§4-4匯編語言程序設(shè)計(jì)基礎(chǔ)一、
匯編語言程序設(shè)計(jì)的一般步驟分析課題確定算法畫流程圖編寫程序上機(jī)調(diào)試在應(yīng)用程序的設(shè)計(jì)中,幾乎沒有一個程序只經(jīng)過一次編寫就完全成功的,所以必須經(jīng)過上機(jī)調(diào)試。第九頁,共五十三頁,2022年,8月28日二、評價(jià)程序質(zhì)量的標(biāo)準(zhǔn)
(1)程序的執(zhí)行時間。(2)程序所占用的內(nèi)存字節(jié)數(shù)。(3)程序的邏輯性、可讀性。(4)程序的兼容性、可擴(kuò)展性。(5)程序的可靠性。
第十頁,共五十三頁,2022年,8月28日三、匯編程序結(jié)構(gòu)按程序的走向可以將程序分成5種結(jié)構(gòu):簡單程序分支程序循環(huán)程序查表程序子程序第十一頁,共五十三頁,2022年,8月28日簡單程序
簡單程序是指一種無分支的順序執(zhí)行程序,即CPU從第一條指令開始依次執(zhí)行每一條指令,直到最后一條指令。這種程序雖然比較簡單,但也能完成一定的功能,并且往往也是構(gòu)成復(fù)雜程序的基礎(chǔ)。拆字程序拼字程序求和程序第十二頁,共五十三頁,2022年,8月28日ORG1000HMOVA,R0ADDA,R2MOVR0,AMOVA,R1ADDCA,R3MOVR1,AMOVA,#0ADDCA,#0MOVR2,ASJMP$END求和程序
例:設(shè)2個16位二進(jìn)制數(shù)分別存于R1R0和R3R2中,求二者的和,并將和存于R2R1R0。解:
分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試(R0)+(R2)送R0單元;(R1)+(R3)+Cy送R1單元;Cy+0送R2單元開始(R0)+(R2)送R0單元
(R1)+(R3)+Cy送R1單元Cy+0送R2單元結(jié)束第十三頁,共五十三頁,2022年,8月28日拆字程序
例:將20H單元中存放的一個兩位的BCD拆開并轉(zhuǎn)換成ASCII碼,然后存入21H和22H單元。解:
分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試22H21H20H89H38H39H拆開BCD碼,然后分別或#30H即可。ORG1000HMOVR0,#22HMOV@R0,#0MOVA,20HXCHDA,@R0ORL22H,#30HSWAPAORLA,#30HMOV21H,ASJMP$END開始將22H清零將A、22H中低4位交換將22H內(nèi)容或#30H累加器A中高低4位交換20H單元的內(nèi)容送AA與#30H相或后送21H結(jié)束第十四頁,共五十三頁,2022年,8月28日拼字程序
例:將30H和31H單元中存放的2個一字節(jié)BCD碼組合成一個2位的BCD碼存入32H單元,31H單元中的數(shù)為低4位。解:
分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試32H31H30H04H07H47H將30H單元的高4與低4交換,再與31H單元相或MOVA,30HSWAPAORLA,31HMOV32H,ASJMP$開始將30H單元的內(nèi)容送A將A中高、低4位交換將A中內(nèi)容與31H單元內(nèi)容相或?qū)中內(nèi)容存入32H單元結(jié)束第十五頁,共五十三頁,2022年,8月28日進(jìn)制轉(zhuǎn)換程序
例:將內(nèi)部RAM的20H單元中的8位無符號二進(jìn)制數(shù)轉(zhuǎn)換為3位BCD碼,并將結(jié)果存放在FIRST(百位)和SECOND(十位、個位)兩單元中。解:
分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試22H21H十位、個位百位先除以100,取出百位;再除以10位,取出十位和個位。FIRSTDATA22H
SECONDDATA21H ORG1000HHBCD:MOVA,20H MOVB,#100 DIVAB MOVFIRST,A MOVA,B MOVB,#10 DIVAB SWAPA ORLA,B MOVSECOND,A SJMP$開始將20H單元的內(nèi)容送A將A除以100將A中內(nèi)容存入FIRSTBA,再將A除以10結(jié)束將A、B合成后存入SECOND第十六頁,共五十三頁,2022年,8月28日分支程序
分支程序就是條件分支程序,即根據(jù)不同的條件執(zhí)行不同的程序段。在編寫分支程序時,關(guān)鍵是如何判斷分支的條件。在MCS-51中可以直接用來判斷分支條件的指令不是很多,只有累加器為零(或不為零)、比較條件轉(zhuǎn)移指令CJNE等,但它還提供位條件轉(zhuǎn)移指令,如JC,JB等。把這些指令結(jié)合在一起使用,就可以完成各種各樣的條件判斷,如正負(fù)判斷、溢出判斷、大小判斷等。分段函數(shù)符號函數(shù)比較大小第十七頁,共五十三頁,2022年,8月28日例:兩個無符號數(shù)分別存于ONE和TWO單元,試比較它們的大小,將較大者存人MAX單元。若兩數(shù)相等則任存入一個即可。
解:
分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試比較大?。汉唵畏种С绦騇OV A,ONECJNE A,TWO,NEXT1NEXT1: JCNEXT2MOVMAX,ONESJMP$NEXT2:MOV MAX,TWO SJMP$返回開始將ONE單元的內(nèi)容送A結(jié)束A≥TWO將TWO單元內(nèi)容送MAX單元YN將ONE單元內(nèi)容送MAX單元第十八頁,共五十三頁,2022年,8月28日例:設(shè)變量X存放于VAR單元,函數(shù)值Y存放在FUNC單元。試按照下式的要求給Y賦值。解:
Y=
分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試符號函數(shù)VAR DATA 30HFUNC DATA 31HMOV A,VARJZ COMPJNB ACC.7,POSI
MOV A,#0FFHSJMP COMPPOSI:
MOVA,#1COMP:
MOVFUNC,ASJMP$開始將VAR單元的內(nèi)容送A結(jié)束A=0?將0送FUNC單元A>0?將1送FUNC單元將-1送FUNC單元YNYN第十九頁,共五十三頁,2022年,8月28日例:設(shè)變量X存放于VAR單元,函數(shù)值Y存放在FUNC單元。試按照下式的要求給Y賦值。解:
Y=
分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試分段函數(shù)MOV A,VARCJNE A,#10,NEXT1NEXT1: JCNEXT2MOVR0,#1CJNE A,#21,NEXT3NEXT3: JNCNEXT4
MOVR0,#0SJMPNEXT4NEXT2:
MOV R0,#0FFHNEXT4:
MOVFUNC,R0SJMP$開始將VAR單元的內(nèi)容送A結(jié)束A>20?將0送FUNC單元A<10?將-1送FUNC單元將1送FUNC單元YYNN第二十頁,共五十三頁,2022年,8月28日多重分支程序設(shè)計(jì)——散轉(zhuǎn)法
根據(jù)某種輸入或運(yùn)算的結(jié)果轉(zhuǎn)向各個處理程序稱為散轉(zhuǎn)多分支,即散轉(zhuǎn)程序。(1)利用轉(zhuǎn)移指令表實(shí)現(xiàn)轉(zhuǎn)移將轉(zhuǎn)移到不同程序的轉(zhuǎn)移指令列成表格,判斷條件后查表,執(zhí)行表中的轉(zhuǎn)移指令?!纠俊竟δ堋磕巢藛斡?項(xiàng)。根據(jù)輸入數(shù)碼轉(zhuǎn)去執(zhí)行相應(yīng)的子程序。即輸入“1”,執(zhí)行子程序1;輸入“2”,執(zhí)行子程序2;依次類推。第二十一頁,共五十三頁,2022年,8月28日【分析】用直接轉(zhuǎn)移指令組成一個轉(zhuǎn)移表,然后把菜單號讀入累加器(A),轉(zhuǎn)移表首地址放入DPTR中,利用JMP@A+DPTR實(shí)現(xiàn)散轉(zhuǎn)?!救肟趨?shù)】(R3)=存輸入鍵盤碼1~9?!境隹趨?shù)】轉(zhuǎn)移到相應(yīng)的子程序入口。
ORG 0030HKEY_JMP:MOV DPTR,#PRGTBL;子程序入口首地址送 DPTR MOV A,R3;把鍵盤輸入緩沖區(qū)內(nèi)容送累加器(A) DEC A ;由于輸入數(shù)碼為1~9,因此需減1MOV B,#03H第二十二頁,共五十三頁,2022年,8月28日MUL AB;由于長跳轉(zhuǎn)指令LJMP占用3B, ;各子程序入口地址相距3BJMP@A+DPTR;根據(jù)輸入碼,執(zhí)行相應(yīng)的子程序
ORG 2000H;程序入口地址表PRGTBL: LJMP NO1LJMP NO2 LJMP NO3 LJMP NO4LJMPNO5LJMP NO6 LJMP NO7 LJMP NO8 LJMP NO9 END第二十三頁,共五十三頁,2022年,8月28日(2)利用轉(zhuǎn)向地址表實(shí)現(xiàn)轉(zhuǎn)移這種方法將轉(zhuǎn)移地址列成表格,將表格的內(nèi)容作為轉(zhuǎn)移的目標(biāo)地址?!纠俊竟δ堋扛鶕?jù)R3(0~n)的內(nèi)容轉(zhuǎn)向?qū)?yīng)的程序;處理程序的入口符號地址分別為PR0~PRn(n<256)【分析】將PR0
~PRn入口地址(16位地址)列在表格中,故每一項(xiàng)占兩個單元;PRn在表中的偏移量為2n,因此將R3的內(nèi)容乘“2”即得PRn在表中的偏移地址;從偏移地址2n和2n+1兩個單元分別取出PRn的高8位地址和低8位地址送DPTR寄存器,用JMP@A+DPTR指令(A先清零)即轉(zhuǎn)移到PRn入口執(zhí)行。第二十四頁,共五十三頁,2022年,8月28日【入口參數(shù)】(R3)=0~n
轉(zhuǎn)移?!境隹趨?shù)】轉(zhuǎn)移到相應(yīng)的子程序入口。
PR0 EQU 0110H PR1 EQU 0220H PR2 EQU 0330H ······················· ORG 0030H KEY_JMP: MOV DPTR,#TAB MOV A,R3 ADD A,R3 ;(A)←(R3)*2 JNC NADD INC DPH ;(R3*2)>256第二十五頁,共五十三頁,2022年,8月28日NADD:MOVR3,A MOVC A,@A+DPTRXCH A,R3 ;轉(zhuǎn)移地址高8位
INC AMOVC A,@A+DPTRMOV DPL,A ;轉(zhuǎn)移地址低8位
MOV DPH,R3CLR AJMP @A+DPTRTAB: DWPR0,PR1,PR2,···········PRnPR0: 處理程序0PR1: 處理程序1 · · PRn: 處理程序nEND 第二十六頁,共五十三頁,2022年,8月28日(3)利用地址偏移量表實(shí)現(xiàn)散轉(zhuǎn)這種方法將轉(zhuǎn)移目標(biāo)地址與表首地址差列表,作為轉(zhuǎn)移目標(biāo)地址。【例】【功能】有5個按鍵0,1,2,3,4,根據(jù)按下的鍵轉(zhuǎn)向不同的處理程序,分別為PR0,PR1,PR2,PR3,PR4?!痉治觥繀R編時,利用了偽指令的數(shù)學(xué)計(jì)算功能,標(biāo)首地址加上處理程序與標(biāo)首地址差即可轉(zhuǎn)到處理程序?!救肟趨?shù)】(B)=轉(zhuǎn)向程序號(鍵盤編碼)?!境隹趨?shù)】轉(zhuǎn)移到相應(yīng)的子程序入口。第二十七頁,共五十三頁,2022年,8月28日 ORG 0030H KEY_JMP: MOV A,B MOV DPTR,#TAB MOVC A,@A+DPTR JMP @A+DPTR TAB: DB PR0-TAB DB PR1-TAB DB PR2-TAB DB PR3-TAB DB PR4-TAB PR0: 處理程序0PR1: 處理程序1 PR2: 處理程序2 PR3: 處理程序3 PR4: 處理程序4 END第二十八頁,共五十三頁,2022年,8月28日循環(huán)程序
一、循環(huán)程序的應(yīng)用場合二、循環(huán)程序的組成三、循環(huán)程序舉例字符串長度求最大值數(shù)組清0第二十九頁,共五十三頁,2022年,8月28日循環(huán)程序
一、循環(huán)程序的應(yīng)用場合分段函數(shù)符號函數(shù)比較大小
在程序執(zhí)行時,往往同樣的一組操作要重復(fù)許多次。當(dāng)然可以采用簡單程序,重復(fù)使用同樣的指令來完成,但若使用循環(huán)程序,重復(fù)執(zhí)行同一條指令許多次來完成重復(fù)操作,就可大大減化程序。例如:要使00H—7FH單元的內(nèi)容清0。方法1:用128條賦值指令完成。方法2:只用一條賦值指令,并使之執(zhí)行128次,每次執(zhí)行時操作數(shù)亦作相應(yīng)的變化以完成規(guī)定的操作。方法1:MOV00H,#0MOV01H,#0
………MOV7FH,#0方法2:
MOVR0,#128CLRAUP:MOV@R0,ADJNZR0,UPSJMP$第三十頁,共五十三頁,2022年,8月28日循環(huán)程序
一、循環(huán)程序的應(yīng)用場合二、循環(huán)程序的組成循環(huán)程序一般由四部分組成:
置循環(huán)初值循環(huán)體循環(huán)修改部分循環(huán)控制部分確定循環(huán)開始時的狀態(tài),如使得工作單元清0,計(jì)數(shù)器置初值等。要求重復(fù)執(zhí)行的部分。每循環(huán)一次就要需要修改一次初值,以便在一定情況下,能結(jié)束循環(huán)。根據(jù)循環(huán)結(jié)束條件,判斷是否結(jié)束循環(huán)流程圖第三十一頁,共五十三頁,2022年,8月28日循環(huán)程序
圖1圖2第三十二頁,共五十三頁,2022年,8月28日例:使00H---7FH單元清0。數(shù)組清0分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試7FH…00H00H00H00H用MOV@R0,A做循環(huán)主體,修改R0的值,可以將0送入00H—7FH單元中。MOVR0,#128CLRAUP:DECR0 MOV@R0,ACJNER0,#00H,UPSJMP$開始給R0賦128、A清0A送@R0R0減1結(jié)束R0=00H?YN第三十三頁,共五十三頁,2022年,8月28日數(shù)組清0思考:如下程序能使00H—7FH單元清0嗎?為什么?
MOVR0,#0MOVR7,#128CLRAUP:MOV@R0,AINCR0DJNZR7,UPSJMP$第三十四頁,共五十三頁,2022年,8月28日例:內(nèi)存中以STRING開始的區(qū)域有若干個字符和數(shù)字,一般稱為一個字符串,最末一個字符為"$",試統(tǒng)計(jì)這些字符數(shù)字的數(shù)目,結(jié)果存人NUM單元字符串長度分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試NUM DATA2DHSTRINGDATA21H ORG0030HCLR AMOVR0,#STRINGLOOP: CJNE@R0,#24H,NEXTSJMPCOMPNEXT: INC A INC R0SJMP LOOPCOMP:INC AMOV NUM,ASJMP$開始給R0賦21H、A清0A加1,并送2DH單元A加1R0加1結(jié)束@R0=24H?YN第三十五頁,共五十三頁,2022年,8月28日例:從外部RAM中BLOCK單元開始有一個無符號數(shù)數(shù)據(jù)塊,其長度存于LEN單元,試求出數(shù)據(jù)塊中最大的數(shù),并存入MAX單元。求最大值分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試LENDATA30HMAXDATA31HBLOCKDATA0100H ORG0400HFMAX: MOVDPTR,#BLOCK DECLEN MOVXA,@DPTRLOOP: CLR C MOVB,A INCDPTR MOVXA,@DPTR SUBB A,B JNC NEXT MOV A,B SJMP NEXT1NEXT: ADD A,BNEXT1: DJNZ LEN,LOOP MOV MAX,A SJMP$ END開始給DPTR賦BLOCK,LEN-1,取出第一個數(shù)A與下一個RAM內(nèi)容相減結(jié)束Cy=0?YNLEN減1A<-BLEN=0?A送MAX單元NY恢復(fù)A第三十六頁,共五十三頁,2022年,8月28日多重循環(huán)程序設(shè)計(jì)【例1】【功能】設(shè)計(jì)一個延時10ms的程序。【分析】延時程序的延時主要與所用晶振和延時程序中的循環(huán)次數(shù)有關(guān)。已知AT89C51單片機(jī)使用的晶振為12MHz,則可知一個機(jī)器周期T為1us。【入口參數(shù)】(R0)=毫秒數(shù),(R1)=1ms延時預(yù)定值?!境隹趨?shù)】定時到,退出程序。
ORG 2000H指令機(jī)器周期數(shù)
1 MOVR0,#0AH;毫秒數(shù)→R0 1 2 DL2: MOVR1,#MT;1ms延時值→R1 1 3 DL1: NOP 1 4 NOP 1 5 DJNZR1,DL1;1ms延時循環(huán) 2 6 DJNZR0,DL2;10ms延時循環(huán) 2第三十七頁,共五十三頁,2022年,8月28日循環(huán)程序設(shè)計(jì)該延時程序是一個雙重循環(huán)程序,內(nèi)循環(huán)1ms延時的預(yù)定值MT需計(jì)算:
(1+1+2)×1T×MT=1000T
MT=250=0FAH用0FAH代替程序中的MT,則該程序執(zhí)行后,能實(shí)現(xiàn)10ms的延時。若考慮第1、2、6行延時參數(shù)配置指令的時間因素,則該段延時程序的精確延時時間計(jì)算式為:
1×1+(1+2)×1×10+(1+1+2)×1×250×10=10.031ms第三十八頁,共五十三頁,2022年,8月28日多重循環(huán)程序設(shè)計(jì)【例2】將內(nèi)存一串單字節(jié)無符號數(shù)升序排序(冒泡法)。分析命題并確定算法:每次取相鄰單元的兩個數(shù)比較,決定是否需要交換數(shù)據(jù)位置。第一次循環(huán),比較N-1次,取到數(shù)據(jù)表中最大值。第二次循環(huán),比較N-2次,取到次大值。
…第N-1次循環(huán):比較一次,排序結(jié)束。內(nèi)循環(huán)控制?循環(huán)工作循環(huán)結(jié)束外循環(huán)控制?內(nèi)循環(huán)初始化開始外循環(huán)初始化第三十九頁,共五十三頁,2022年,8月28日SORT:MOV A,#N-1 ;N個數(shù)據(jù)排序
MOV R4,A ;外循環(huán)次數(shù)LOOP1:MOV A,R4 MOV R3,A ;內(nèi)循環(huán)次數(shù)
MOV R0,#TAB ;設(shè)數(shù)據(jù)指針LOOP2:MOV A,@R0 ;取第n個數(shù)
MOV B,A ;第n個數(shù)放入B INC R0 MOV A,@R0 ;取第n+1個數(shù) CJNEA,B,L1 ;比較L1: JNC UNEX ;A≥B,不交換
DEC R0 ;否則交換數(shù)據(jù)
XCH A,@R0 INC R0 MOV @R0,AUNEX:DJNZR3,LOOP2 ;內(nèi)循環(huán)結(jié)束?
DJNZR4,LOOP1 ;外循環(huán)結(jié)束?
RETR3←R3—1=0?B←(R0)A←(R0+1)循環(huán)結(jié)束外循環(huán)次數(shù)→R4R4←R4—1=0?內(nèi)循環(huán)次數(shù)→R3表首TAB→R0開始A≥B?(R0)←→(R0+1)R0←R0+1YN第四十頁,共五十三頁,2022年,8月28日5-5查表程序例5-19一個十六進(jìn)制數(shù)存放在HEX單元的低四位,將其轉(zhuǎn)換成ASCII碼并送回HEX單元。
編程:
ORG0100HHEXEQU30HHEXASC:MOV
A,HEXANLA
,#00001111BADDA,#3;變址調(diào)整MOVCA,@A+PCMOVHEX,A;2字節(jié)RET ;1字節(jié)ASCTAB:DB 30H,3lH,32H,33HDB 34H,35H,36H,37HDB 38H,39H,41H,42HDB 43H,44H,45H,46HEND
第四十一頁,共五十三頁,2022年,8月28日子程序
一、子程序的應(yīng)用場合二、子程序的優(yōu)缺點(diǎn)三、編制子程序注意事項(xiàng)四、子程序舉例第四十二頁,共五十三頁,2022年,8月28日2.參數(shù)傳遞入口參數(shù):調(diào)用子程序之前,需要傳給子程序的參數(shù)。出口參數(shù):子程序送回調(diào)用程序的結(jié)果參數(shù)。(1)子程序無須傳遞參數(shù)
如:延時子程序
第四十三頁,共五十三頁,2022年,8月28日例5-24雙字節(jié)求補(bǔ)子程序CPLD。解
入口參數(shù):(R7R6)=16位數(shù)
出口參數(shù):(R7R6)=求補(bǔ)后的16位數(shù)
CPLD:MOVA,R6 CPLA ADDA,#1 MOVR6,A MOVA,R7 CPLA ADDCA,#0 MOVR7,A RET(2)用累加器和工作寄存器傳遞參數(shù)
第四十四頁,共五十三頁,2022年,8月28日例5-25n字節(jié)求補(bǔ)子程序。解
入口參數(shù):(R0)=求補(bǔ)數(shù)低字節(jié)指針,(R7)=n-1
出口參數(shù):(R0)=求補(bǔ)后的高字節(jié)指針
CPLN:MOVA,@R0 CPLA ADDA,#1 MOV @R0,ANEXT:INCR0 MOVA,@R0 CPLA ADDCA,#0 MOV@R0,A DJNZR7,NEXT RET(3)通過操作數(shù)地址傳遞參數(shù)
第四十五頁,共五十三頁,2022年,8月28日例5-26
在HEX單元存放兩個十六進(jìn)制數(shù),將它們分別轉(zhuǎn)換成ASCⅡ碼并存入ASC和ASC+1單元。解
由于要進(jìn)行兩次轉(zhuǎn)換,故可調(diào)用查表子程序完成。主程序:MAIN:…PUSH HEX ;取被轉(zhuǎn)換數(shù)
LCALL HASC ;轉(zhuǎn)入子程序*PC→POP ASC ;ASCL—ASC MOV A,HEX ;取被轉(zhuǎn)換數(shù)
SWAP A ;處理高四位
PUSH ACC LCALL HASC ;轉(zhuǎn)子程序
POP ASC+1 ;ASCH→ASC+1
…(4)通過堆棧傳遞參數(shù)
第四十六頁,共五十三頁,2022年,8月28日子程序:HASC:DECSP
DECSP;修改SP指向HEXPOP ACC;彈出HEXANL A,#0FH;屏蔽高四位
。ADD A,#5;變址調(diào)整MOVC A,@A+PC;查表PUSH ACC;結(jié)果入棧
(2字節(jié))
INC SP;
(1字節(jié))
INC SP;修改SP指向斷點(diǎn)位置(1字節(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中職新能源課題申報(bào)書
- 廣東省課題的申報(bào)書
- 博士生人文課題申報(bào)書
- 中藥農(nóng)業(yè)課題申報(bào)書
- 甘肅黨建課題申報(bào)書范例
- 腎內(nèi)科課題申報(bào)書
- 協(xié)同育人課題申報(bào)書參考
- 文學(xué) 課題申報(bào)書
- 人工綠化合同范本
- 變更經(jīng)營范圍合同范例
- 小學(xué)生守則、日常行為規(guī)范教育實(shí)施方案
- 部編版小學(xué)六年級道德與法治下冊課堂達(dá)標(biāo)檢測試卷全冊含答案
- 巖土工程中的非線性問題分析
- 《普洱茶的定義》課件
- 儲備土地管護(hù)投標(biāo)方案 (技術(shù)方案)
- TensorFlow+Keras深度學(xué)習(xí)人工智能實(shí)踐應(yīng)用
- 學(xué)技能如何打逃生繩結(jié)固定繩結(jié)
- 自驅(qū)型成長:如何培養(yǎng)孩子的自律力
- 特殊教育:康復(fù)訓(xùn)練課程標(biāo)準(zhǔn)(年版)
- DCMM理論知識考試試題及答案
- 談心談話記錄100條范文(6篇)
評論
0/150
提交評論