版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)原理及其應(yīng)用第五章第1頁(yè),共53頁(yè),2023年,2月20日,星期一補(bǔ)充
匯編語(yǔ)言源程序的格式
源程序基本上由主程序、子程序、中斷服務(wù)子程序組成。編制匯編語(yǔ)言源程序根據(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單元開(kāi)始存放5 LJMP MAIN ;跳到主程MAIN6 ORG 0003H ;從0003H開(kāi)始存放程序段7 LJMP INTERUPT1 ;跳到外部中斷0處理子程序第2頁(yè),共53頁(yè),2023年,2月20日,星期一前言
匯編語(yǔ)言源程序的格式8 ORG 0030H ;從0030H開(kāi)始存放程序段9 MAIN: ;主程序標(biāo)號(hào)說(shuō)明10 MOV SP,#30H;設(shè)置堆棧指針,可以大于30H11 LCALL INITIATE;調(diào)用初始化子程12 FCY: ;控制程序循環(huán)標(biāo)號(hào)
LCALL SUB ;調(diào)用功能子程序13 LJMP FCY ;跳到FCY構(gòu)成循環(huán)14 ORG xxxx ;以下功能程序的存放地址15 INITIATE:……;初始化子程序標(biāo)號(hào)16 RET ;子程序返回17 SUB: …… ;功能子程序標(biāo)號(hào)18 RET ;子程序返回19INTERUPT1:……;外部中斷0功能程序20 RETI ;中斷返回21 TABLE: ;表的標(biāo)號(hào)22 DB00H,01H ;表的數(shù)據(jù)
END
;源程序結(jié)束,停止匯編。
第3頁(yè),共53頁(yè),2023年,2月20日,星期一前言
匯編語(yǔ)言源程序的格式第1~3行:把一些符號(hào)或變量定義成通俗的符號(hào)。第4、6、8、14行:表示程序存儲(chǔ)的開(kāi)始地址。第5行:使CPU在執(zhí)行程序時(shí),從0000H跳過(guò)各中斷源的入口地址,主程序以跳轉(zhuǎn)的目標(biāo)地址作為起始地址開(kāi)始編寫。第6行:中斷服務(wù)程序的存儲(chǔ)地址。第9、12、15、17、19行:為程序語(yǔ)句標(biāo)號(hào)。第10行:設(shè)置堆棧指針一般最小設(shè)30H,棧區(qū)夠用還可以增大。第21、22行:為查表指令的表。第4頁(yè),共53頁(yè),2023年,2月20日,星期一§5-1匯編語(yǔ)言概述一、匯編語(yǔ)言程序設(shè)計(jì)的一般步驟分析課題確定算法畫流程圖編寫程序上機(jī)調(diào)試當(dāng)接到程序設(shè)計(jì)的任務(wù)后,首先對(duì)任務(wù)進(jìn)行詳盡的分析,搞清楚已知的數(shù)據(jù)和想要得到的結(jié)果,程序應(yīng)該完成何種的功能。第5頁(yè),共53頁(yè),2023年,2月20日,星期一§4-4匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)一、匯編語(yǔ)言程序設(shè)計(jì)的一般步驟分析課題確定算法畫流程圖編寫程序上機(jī)調(diào)試
根據(jù)實(shí)際問(wèn)題的要求和指令系統(tǒng)的特點(diǎn),確定解決問(wèn)題的具體步驟。根據(jù)任務(wù)要求,對(duì)不同的計(jì)算方法進(jìn)行比較,選擇最適宜的算法。第6頁(yè),共53頁(yè),2023年,2月20日,星期一§4-4匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)一、匯編語(yǔ)言程序設(shè)計(jì)的一般步驟分析課題確定算法畫流程圖編寫程序上機(jī)調(diào)試將解決問(wèn)題的具體步驟用一種約定的幾何圖形、指向線和必要的文字說(shuō)明描述出來(lái)的圖形。第7頁(yè),共53頁(yè),2023年,2月20日,星期一§4-4匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)一、匯編語(yǔ)言程序設(shè)計(jì)的一般步驟分析課題確定算法畫流程圖編寫程序上機(jī)調(diào)試
經(jīng)過(guò)上述各步驟后,解決問(wèn)題的思路已經(jīng)非常清楚,所以接下來(lái)就可以按流程圖的順序?qū)γ恳粋€(gè)功能框選用合適的指令編寫出匯編語(yǔ)言程序。第8頁(yè),共53頁(yè),2023年,2月20日,星期一§4-4匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)一、
匯編語(yǔ)言程序設(shè)計(jì)的一般步驟分析課題確定算法畫流程圖編寫程序上機(jī)調(diào)試在應(yīng)用程序的設(shè)計(jì)中,幾乎沒(méi)有一個(gè)程序只經(jīng)過(guò)一次編寫就完全成功的,所以必須經(jīng)過(guò)上機(jī)調(diào)試。第9頁(yè),共53頁(yè),2023年,2月20日,星期一二、評(píng)價(jià)程序質(zhì)量的標(biāo)準(zhǔn)
(1)程序的執(zhí)行時(shí)間。(2)程序所占用的內(nèi)存字節(jié)數(shù)。(3)程序的邏輯性、可讀性。(4)程序的兼容性、可擴(kuò)展性。(5)程序的可靠性。
第10頁(yè),共53頁(yè),2023年,2月20日,星期一三、匯編程序結(jié)構(gòu)按程序的走向可以將程序分成5種結(jié)構(gòu):簡(jiǎn)單程序分支程序循環(huán)程序查表程序子程序第11頁(yè),共53頁(yè),2023年,2月20日,星期一簡(jiǎn)單程序
簡(jiǎn)單程序是指一種無(wú)分支的順序執(zhí)行程序,即CPU從第一條指令開(kāi)始依次執(zhí)行每一條指令,直到最后一條指令。這種程序雖然比較簡(jiǎn)單,但也能完成一定的功能,并且往往也是構(gòu)成復(fù)雜程序的基礎(chǔ)。拆字程序拼字程序求和程序第12頁(yè),共53頁(yè),2023年,2月20日,星期一ORG1000HMOVA,R0ADDA,R2MOVR0,AMOVA,R1ADDCA,R3MOVR1,AMOVA,#0ADDCA,#0MOVR2,ASJMP$END求和程序
例:設(shè)2個(gè)16位二進(jìn)制數(shù)分別存于R1R0和R3R2中,求二者的和,并將和存于R2R1R0。解:
分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試(R0)+(R2)送R0單元;(R1)+(R3)+Cy送R1單元;Cy+0送R2單元開(kāi)始(R0)+(R2)送R0單元
(R1)+(R3)+Cy送R1單元Cy+0送R2單元結(jié)束第13頁(yè),共53頁(yè),2023年,2月20日,星期一拆字程序
例:將20H單元中存放的一個(gè)兩位的BCD拆開(kāi)并轉(zhuǎn)換成ASCII碼,然后存入21H和22H單元。解:
分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試22H21H20H89H38H39H拆開(kāi)BCD碼,然后分別或#30H即可。ORG1000HMOVR0,#22HMOV@R0,#0MOVA,20HXCHDA,@R0ORL22H,#30HSWAPAORLA,#30HMOV21H,ASJMP$END開(kāi)始將22H清零將A、22H中低4位交換將22H內(nèi)容或#30H累加器A中高低4位交換20H單元的內(nèi)容送AA與#30H相或后送21H結(jié)束第14頁(yè),共53頁(yè),2023年,2月20日,星期一拼字程序
例:將30H和31H單元中存放的2個(gè)一字節(jié)BCD碼組合成一個(gè)2位的BCD碼存入32H單元,31H單元中的數(shù)為低4位。解:
分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試32H31H30H04H07H47H將30H單元的高4與低4交換,再與31H單元相或MOVA,30HSWAPAORLA,31HMOV32H,ASJMP$開(kāi)始將30H單元的內(nèi)容送A將A中高、低4位交換將A中內(nèi)容與31H單元內(nèi)容相或?qū)中內(nèi)容存入32H單元結(jié)束第15頁(yè),共53頁(yè),2023年,2月20日,星期一進(jìn)制轉(zhuǎn)換程序
例:將內(nèi)部RAM的20H單元中的8位無(wú)符號(hào)二進(jìn)制數(shù)轉(zhuǎn)換為3位BCD碼,并將結(jié)果存放在FIRST(百位)和SECOND(十位、個(gè)位)兩單元中。解:
分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試22H21H十位、個(gè)位百位先除以100,取出百位;再除以10位,取出十位和個(gè)位。FIRSTDATA22H
SECONDDATA21H ORG1000HHBCD:MOVA,20H MOVB,#100 DIVAB MOVFIRST,A MOVA,B MOVB,#10 DIVAB SWAPA ORLA,B MOVSECOND,A SJMP$開(kāi)始將20H單元的內(nèi)容送A將A除以100將A中內(nèi)容存入FIRSTBA,再將A除以10結(jié)束將A、B合成后存入SECOND第16頁(yè),共53頁(yè),2023年,2月20日,星期一分支程序
分支程序就是條件分支程序,即根據(jù)不同的條件執(zhí)行不同的程序段。在編寫分支程序時(shí),關(guān)鍵是如何判斷分支的條件。在MCS-51中可以直接用來(lái)判斷分支條件的指令不是很多,只有累加器為零(或不為零)、比較條件轉(zhuǎn)移指令CJNE等,但它還提供位條件轉(zhuǎn)移指令,如JC,JB等。把這些指令結(jié)合在一起使用,就可以完成各種各樣的條件判斷,如正負(fù)判斷、溢出判斷、大小判斷等。分段函數(shù)符號(hào)函數(shù)比較大小第17頁(yè),共53頁(yè),2023年,2月20日,星期一例:兩個(gè)無(wú)符號(hào)數(shù)分別存于ONE和TWO單元,試比較它們的大小,將較大者存人MAX單元。若兩數(shù)相等則任存入一個(gè)即可。
解:
分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試比較大?。汉?jiǎn)單分支程序MOV A,ONECJNE A,TWO,NEXT1NEXT1: JCNEXT2MOVMAX,ONESJMP$NEXT2:MOV MAX,TWO SJMP$返回開(kāi)始將ONE單元的內(nèi)容送A結(jié)束A≥TWO將TWO單元內(nèi)容送MAX單元YN將ONE單元內(nèi)容送MAX單元第18頁(yè),共53頁(yè),2023年,2月20日,星期一例:設(shè)變量X存放于VAR單元,函數(shù)值Y存放在FUNC單元。試按照下式的要求給Y賦值。解:
Y=
分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試符號(hào)函數(shù)VAR DATA 30HFUNC DATA 31HMOV A,VARJZ COMPJNB ACC.7,POSI
MOV A,#0FFHSJMP COMPPOSI:
MOVA,#1COMP:
MOVFUNC,ASJMP$開(kāi)始將VAR單元的內(nèi)容送A結(jié)束A=0?將0送FUNC單元A>0?將1送FUNC單元將-1送FUNC單元YNYN第19頁(yè),共53頁(yè),2023年,2月20日,星期一例:設(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$開(kāi)始將VAR單元的內(nèi)容送A結(jié)束A>20?將0送FUNC單元A<10?將-1送FUNC單元將1送FUNC單元YYNN第20頁(yè),共53頁(yè),2023年,2月20日,星期一多重分支程序設(shè)計(jì)——散轉(zhuǎn)法
根據(jù)某種輸入或運(yùn)算的結(jié)果轉(zhuǎn)向各個(gè)處理程序稱為散轉(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;依次類推。第21頁(yè),共53頁(yè),2023年,2月20日,星期一【分析】用直接轉(zhuǎn)移指令組成一個(gè)轉(zhuǎn)移表,然后把菜單號(hào)讀入累加器(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第22頁(yè),共53頁(yè),2023年,2月20日,星期一MUL AB;由于長(zhǎng)跳轉(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第23頁(yè),共53頁(yè),2023年,2月20日,星期一(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)的程序;處理程序的入口符號(hào)地址分別為PR0~PRn(n<256)【分析】將PR0
~PRn入口地址(16位地址)列在表格中,故每一項(xiàng)占兩個(gè)單元;PRn在表中的偏移量為2n,因此將R3的內(nèi)容乘“2”即得PRn在表中的偏移地址;從偏移地址2n和2n+1兩個(gè)單元分別取出PRn的高8位地址和低8位地址送DPTR寄存器,用JMP@A+DPTR指令(A先清零)即轉(zhuǎn)移到PRn入口執(zhí)行。第24頁(yè),共53頁(yè),2023年,2月20日,星期一【入口參數(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第25頁(yè),共53頁(yè),2023年,2月20日,星期一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 第26頁(yè),共53頁(yè),2023年,2月20日,星期一(3)利用地址偏移量表實(shí)現(xiàn)散轉(zhuǎn)這種方法將轉(zhuǎn)移目標(biāo)地址與表首地址差列表,作為轉(zhuǎn)移目標(biāo)地址。【例】【功能】有5個(gè)按鍵0,1,2,3,4,根據(jù)按下的鍵轉(zhuǎn)向不同的處理程序,分別為PR0,PR1,PR2,PR3,PR4?!痉治觥繀R編時(shí),利用了偽指令的數(shù)學(xué)計(jì)算功能,標(biāo)首地址加上處理程序與標(biāo)首地址差即可轉(zhuǎn)到處理程序?!救肟趨?shù)】(B)=轉(zhuǎn)向程序號(hào)(鍵盤編碼)。【出口參數(shù)】轉(zhuǎn)移到相應(yīng)的子程序入口。第27頁(yè),共53頁(yè),2023年,2月20日,星期一 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第28頁(yè),共53頁(yè),2023年,2月20日,星期一循環(huán)程序
一、循環(huán)程序的應(yīng)用場(chǎng)合二、循環(huán)程序的組成三、循環(huán)程序舉例字符串長(zhǎng)度求最大值數(shù)組清0第29頁(yè),共53頁(yè),2023年,2月20日,星期一循環(huán)程序
一、循環(huán)程序的應(yīng)用場(chǎng)合分段函數(shù)符號(hào)函數(shù)比較大小
在程序執(zhí)行時(shí),往往同樣的一組操作要重復(fù)許多次。當(dāng)然可以采用簡(jiǎn)單程序,重復(fù)使用同樣的指令來(lái)完成,但若使用循環(huán)程序,重復(fù)執(zhí)行同一條指令許多次來(lái)完成重復(fù)操作,就可大大減化程序。例如:要使00H—7FH單元的內(nèi)容清0。方法1:用128條賦值指令完成。方法2:只用一條賦值指令,并使之執(zhí)行128次,每次執(zhí)行時(shí)操作數(shù)亦作相應(yīng)的變化以完成規(guī)定的操作。方法1:MOV00H,#0MOV01H,#0
………MOV7FH,#0方法2:
MOVR0,#128CLRAUP:MOV@R0,ADJNZR0,UPSJMP$第30頁(yè),共53頁(yè),2023年,2月20日,星期一循環(huán)程序
一、循環(huán)程序的應(yīng)用場(chǎng)合二、循環(huán)程序的組成循環(huán)程序一般由四部分組成:
置循環(huán)初值循環(huán)體循環(huán)修改部分循環(huán)控制部分確定循環(huán)開(kāi)始時(shí)的狀態(tài),如使得工作單元清0,計(jì)數(shù)器置初值等。要求重復(fù)執(zhí)行的部分。每循環(huán)一次就要需要修改一次初值,以便在一定情況下,能結(jié)束循環(huán)。根據(jù)循環(huán)結(jié)束條件,判斷是否結(jié)束循環(huán)流程圖第31頁(yè),共53頁(yè),2023年,2月20日,星期一循環(huán)程序
圖1圖2第32頁(yè),共53頁(yè),2023年,2月20日,星期一例:使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$開(kāi)始給R0賦128、A清0A送@R0R0減1結(jié)束R0=00H?YN第33頁(yè),共53頁(yè),2023年,2月20日,星期一數(shù)組清0思考:如下程序能使00H—7FH單元清0嗎?為什么?
MOVR0,#0MOVR7,#128CLRAUP:MOV@R0,AINCR0DJNZR7,UPSJMP$第34頁(yè),共53頁(yè),2023年,2月20日,星期一例:內(nèi)存中以STRING開(kāi)始的區(qū)域有若干個(gè)字符和數(shù)字,一般稱為一個(gè)字符串,最末一個(gè)字符為"$",試統(tǒng)計(jì)這些字符數(shù)字的數(shù)目,結(jié)果存人NUM單元字符串長(zhǎng)度分析命題確定算法畫流程圖編寫程序上機(jī)調(diào)試NUM DATA2DHSTRINGDATA21H ORG0030HCLR AMOVR0,#STRINGLOOP: CJNE@R0,#24H,NEXTSJMPCOMPNEXT: INC A INC R0SJMP LOOPCOMP:INC AMOV NUM,ASJMP$開(kāi)始給R0賦21H、A清0A加1,并送2DH單元A加1R0加1結(jié)束@R0=24H?YN第35頁(yè),共53頁(yè),2023年,2月20日,星期一例:從外部RAM中BLOCK單元開(kāi)始有一個(gè)無(wú)符號(hào)數(shù)數(shù)據(jù)塊,其長(zhǎng)度存于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開(kāi)始給DPTR賦BLOCK,LEN-1,取出第一個(gè)數(shù)A與下一個(gè)RAM內(nèi)容相減結(jié)束Cy=0?YNLEN減1A<-BLEN=0?A送MAX單元NY恢復(fù)A第36頁(yè),共53頁(yè),2023年,2月20日,星期一多重循環(huán)程序設(shè)計(jì)【例1】【功能】設(shè)計(jì)一個(gè)延時(shí)10ms的程序?!痉治觥垦訒r(shí)程序的延時(shí)主要與所用晶振和延時(shí)程序中的循環(huán)次數(shù)有關(guān)。已知AT89C51單片機(jī)使用的晶振為12MHz,則可知一個(gè)機(jī)器周期T為1us?!救肟趨?shù)】(R0)=毫秒數(shù),(R1)=1ms延時(shí)預(yù)定值?!境隹趨?shù)】定時(shí)到,退出程序。
ORG 2000H指令機(jī)器周期數(shù)
1 MOVR0,#0AH;毫秒數(shù)→R0 1 2 DL2: MOVR1,#MT;1ms延時(shí)值→R1 1 3 DL1: NOP 1 4 NOP 1 5 DJNZR1,DL1;1ms延時(shí)循環(huán) 2 6 DJNZR0,DL2;10ms延時(shí)循環(huán) 2第37頁(yè),共53頁(yè),2023年,2月20日,星期一循環(huán)程序設(shè)計(jì)該延時(shí)程序是一個(gè)雙重循環(huán)程序,內(nèi)循環(huán)1ms延時(shí)的預(yù)定值MT需計(jì)算:
(1+1+2)×1T×MT=1000T
MT=250=0FAH用0FAH代替程序中的MT,則該程序執(zhí)行后,能實(shí)現(xiàn)10ms的延時(shí)。若考慮第1、2、6行延時(shí)參數(shù)配置指令的時(shí)間因素,則該段延時(shí)程序的精確延時(shí)時(shí)間計(jì)算式為:
1×1+(1+2)×1×10+(1+1+2)×1×250×10=10.031ms第38頁(yè),共53頁(yè),2023年,2月20日,星期一多重循環(huán)程序設(shè)計(jì)【例2】將內(nèi)存一串單字節(jié)無(wú)符號(hào)數(shù)升序排序(冒泡法)。分析命題并確定算法:每次取相鄰單元的兩個(gè)數(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)初始化開(kāi)始外循環(huán)初始化第39頁(yè),共53頁(yè),2023年,2月20日,星期一SORT:MOV A,#N-1 ;N個(gè)數(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個(gè)數(shù)
MOV B,A ;第n個(gè)數(shù)放入B INC R0 MOV A,@R0 ;取第n+1個(gè)數(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開(kāi)始A≥B?(R0)←→(R0+1)R0←R0+1YN第40頁(yè),共53頁(yè),2023年,2月20日,星期一5-5查表程序例5-19
一個(gè)十六進(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
第41頁(yè),共53頁(yè),2023年,2月20日,星期一子程序
一、子程序的應(yīng)用場(chǎng)合二、子程序的優(yōu)缺點(diǎn)三、編制子程序注意事項(xiàng)四、子程序舉例第42頁(yè),共53頁(yè),2023年,2月20日,星期一2.參數(shù)傳遞入口參數(shù):調(diào)用子程序之前,需要傳給子程序的參數(shù)。出口參數(shù):子程序送回調(diào)用程序的結(jié)果參數(shù)。(1)子程序無(wú)須傳遞參數(shù)
如:延時(shí)子程序
第43頁(yè),共53頁(yè),2023年,2月20日,星期一例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ù)
第44頁(yè),共53頁(yè),2023年,2月20日,星期一例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)通過(guò)操作數(shù)地址傳遞參數(shù)
第45頁(yè),共53頁(yè),2023年,2月20日,星期一例5-26
在HEX單元存放兩個(gè)十六進(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)通過(guò)堆棧傳遞參數(shù)
第46頁(yè),共53頁(yè),2023年,2月20日,星期一子程序: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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026湖北十堰市丹江口市衛(wèi)生健康局所屬事業(yè)單位選聘14人參考考試題庫(kù)附答案解析
- 2026年上半年黑龍江事業(yè)單位聯(lián)考省人民政府黑瞎子島建設(shè)和管理委員會(huì)招聘4人參考考試題庫(kù)附答案解析
- 2026重慶飛駛特人力資源管理有限公司外派至中鐵建重慶石化銷售有限公司廚師崗招聘1人參考考試試題附答案解析
- 天津市西青區(qū)2025-2026學(xué)年高三上學(xué)期1月期末地理試題(原卷版+解析版)
- 鎮(zhèn)漁船跟幫生產(chǎn)制度
- 變電房安全生產(chǎn)管理制度
- 水表生產(chǎn)管理制度范本
- 安全生產(chǎn)檔案制度范本
- 2026云南羅平鋅電股份有限公司管理人員社會(huì)化招聘2人備考考試題庫(kù)附答案解析
- 車輛生產(chǎn)運(yùn)行制度
- 2026海南安保控股有限責(zé)任公司招聘11人筆試備考試題及答案解析
- 2026中國(guó)電信四川公用信息產(chǎn)業(yè)有限責(zé)任公司社會(huì)成熟人才招聘?jìng)淇碱}庫(kù)及參考答案詳解
- 天津市重點(diǎn)名校2026屆高一數(shù)學(xué)第一學(xué)期期末統(tǒng)考試題含解析
- 工程車輛銷售合同范本
- 項(xiàng)目施工策劃培訓(xùn)課件
- 腹壁切口疝教學(xué)課件
- 睡眠監(jiān)測(cè)基礎(chǔ)知識(shí)
- 2025寧德時(shí)代新能源科技股份有限公司招聘?jìng)淇碱}庫(kù)及答案詳解(新)
- GB/T 31897.1-2025燈具性能第1部分:一般要求
- 金融機(jī)構(gòu)反洗錢合規(guī)管理文件模板
- 2025年中國(guó)AGV行業(yè)分析報(bào)告-產(chǎn)業(yè)規(guī)?,F(xiàn)狀與發(fā)展規(guī)劃趨勢(shì)
評(píng)論
0/150
提交評(píng)論