單片機(jī)原理及其應(yīng)用第五章_第1頁(yè)
單片機(jī)原理及其應(yīng)用第五章_第2頁(yè)
單片機(jī)原理及其應(yīng)用第五章_第3頁(yè)
單片機(jī)原理及其應(yīng)用第五章_第4頁(yè)
單片機(jī)原理及其應(yīng)用第五章_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片機(jī)原理及其應(yīng)用第五章第1頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二補(bǔ)充 匯編語(yǔ)言源程序的格式 源程序基本上由主程序、子程序、中斷服務(wù)子程序組成。編制匯編語(yǔ)言源程序根據(jù)MCS-51單片機(jī)ROM的出廠內(nèi)部定義,一般按這樣的主框架編制: ;程序變量定義區(qū)1SDABITP1.3;定義SDA位變量 2IOEQUP0;定義I/O等值P0口3ByteConDATA30H;定義字節(jié)變量ByteCon;程序主體部分4ORG0000H;程序段從0000H單元開(kāi)始存放 5LJMPMAIN;跳到主程MAIN6ORG0003H;從0003H開(kāi)始存放程序段7LJMPINTERUPT1;跳到外部中斷0處理

2、子程序第2頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二前言 匯編語(yǔ)言源程序的格式8ORG0030H ;從0030H開(kāi)始存放程序段9MAIN: ;主程序標(biāo)號(hào)說(shuō)明10MOVSP,#30H ;設(shè)置堆棧指針,可以大于30H11LCALLINITIATE ;調(diào)用初始化子程12 FCY: ;控制程序循環(huán)標(biāo)號(hào)LCALLSUB ;調(diào)用功能子程序13LJMPFCY ;跳到FCY構(gòu)成循環(huán)14ORGxxxx ;以下功能程序的存放地址15 INITIATE: ;初始化子程序標(biāo)號(hào)16RET ;子程序返回17 SUB: ;功能子程序標(biāo)號(hào)18RET ;子程序返回19 INTERUPT1: ;外部中斷0功能程序2

3、0RETI ;中斷返回21 TABLE: ;表的標(biāo)號(hào)22DB 00H,01H ;表的數(shù)據(jù) END ;源程序結(jié)束,停止匯編。 第3頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二前言 匯編語(yǔ)言源程序的格式第13行:把一些符號(hào)或變量定義成通俗的符號(hào)。第4、6、8、14行:表示程序存儲(chǔ)的開(kāi)始地址。第5行:使CPU在執(zhí)行程序時(shí),從0000H跳過(guò)各中斷源的入口地址,主程序以跳轉(zhuǎn)的目標(biāo)地址作為起始地址開(kāi)始編寫(xiě)。第6行:中斷服務(wù)程序的存儲(chǔ)地址。第9、12、15、17、19行:為程序語(yǔ)句標(biāo)號(hào)。第10行:設(shè)置堆棧指針一般最小設(shè)30H,棧區(qū)夠用還可以增大。第21、22行:為查表指令的表。第4頁(yè),共53頁(yè),

4、2022年,5月20日,2點(diǎn)36分,星期二5-1 匯編語(yǔ)言概述一、匯編語(yǔ)言程序設(shè)計(jì)的一般步驟 分析課題 確定算法 畫(huà)流程圖 編寫(xiě)程序 上機(jī)調(diào)試當(dāng)接到程序設(shè)計(jì)的任務(wù)后,首先對(duì)任務(wù)進(jìn)行詳盡的分析,搞清楚已知的數(shù)據(jù)和想要得到的結(jié)果,程序應(yīng)該完成何種的功能。第5頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二4-4 匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)一、匯編語(yǔ)言程序設(shè)計(jì)的一般步驟 分析課題 確定算法 畫(huà)流程圖 編寫(xiě)程序 上機(jī)調(diào)試 根據(jù)實(shí)際問(wèn)題的要求和指令系統(tǒng)的特點(diǎn),確定解決問(wèn)題的具體步驟。根據(jù)任務(wù)要求,對(duì)不同的計(jì)算方法進(jìn)行比較,選擇最適宜的算法。 第6頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二

5、4-4 匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)一、匯編語(yǔ)言程序設(shè)計(jì)的一般步驟 分析課題 確定算法 畫(huà)流程圖 編寫(xiě)程序 上機(jī)調(diào)試將解決問(wèn)題的具體步驟用一種約定的幾何圖形、指向線和必要的文字說(shuō)明描述出來(lái)的圖形。第7頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二4-4 匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)一、匯編語(yǔ)言程序設(shè)計(jì)的一般步驟 分析課題 確定算法 畫(huà)流程圖 編寫(xiě)程序 上機(jī)調(diào)試 經(jīng)過(guò)上述各步驟后,解決問(wèn)題的思路已經(jīng)非常清楚,所以接下來(lái)就可以按流程圖的順序?qū)γ恳粋€(gè)功能框選用合適的指令編寫(xiě)出匯編語(yǔ)言程序。 第8頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二4-4 匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)一、 匯編語(yǔ)言程序設(shè)計(jì)的一般

6、步驟 分析課題 確定算法 畫(huà)流程圖 編寫(xiě)程序 上機(jī)調(diào)試在應(yīng)用程序的設(shè)計(jì)中,幾乎沒(méi)有一個(gè)程序只經(jīng)過(guò)一次編寫(xiě)就完全成功的,所以必須經(jīng)過(guò)上機(jī)調(diào)試。 第9頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二二、評(píng)價(jià)程序質(zhì)量的標(biāo)準(zhǔn) (1)程序的執(zhí)行時(shí)間。 (2)程序所占用的內(nèi)存字節(jié)數(shù)。 (3)程序的邏輯性、可讀性。 (4)程序的兼容性、可擴(kuò)展性。 (5)程序的可靠性。 第10頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二三、匯編程序結(jié)構(gòu)按程序的走向可以將程序分成5種結(jié)構(gòu):簡(jiǎn)單程序 分支程序 循環(huán)程序 查表程序 子程序第11頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二簡(jiǎn)單程序 簡(jiǎn)

7、單程序是指一種無(wú)分支的順序執(zhí)行程序,即CPU從第一條指令開(kāi)始依次執(zhí)行每一條指令,直到最后一條指令。 這種程序雖然比較簡(jiǎn)單,但也能完成一定的功能,并且往往也是構(gòu)成復(fù)雜程序的基礎(chǔ)。拆字程序 拼字程序 求和程序 第12頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二ORG 1000HMOV A, R0ADD A, R2MOV R0, AMOV A, R1ADDC A, R3MOV R1, AMOV A, #0ADDC A, #0MOV R2, ASJMP $END求和程序 例:設(shè)2個(gè)16位二進(jìn)制數(shù)分別存于R1R0和R3R2中,求二者的和,并將和存于R2R1R0。 解 : 分析命題確定算法畫(huà)流

8、程圖編寫(xiě)程序上機(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è),2022年,5月20日,2點(diǎn)36分,星期二拆字程序 例:將20H單元中存放的一個(gè)兩位的BCD拆開(kāi)并轉(zhuǎn)換成ASCII碼,然后存入21H 和22H單元。 解 : 分析命題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試22H21H20H89H38H39H拆開(kāi)BCD碼,然后分別或#30H即可。ORG 1000HMOV R0, #22HMOV R0,#0MOV A,20H XCHD A,R0ORL 22H

9、,#30HSWAP AORL A,#30HMOV 21H,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è),2022年,5月20日,2點(diǎn)36分,星期二拼字程序 例:將30H和31H單元中存放的2個(gè)一字節(jié)BCD碼組合成一個(gè)2位的BCD碼存入32H單元,31H單元中的數(shù)為低4位。 解 : 分析命題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試32H31H30H04H07H47H將30H單元的高4與低4交換,再與31H單元相或 MOV A,30HSWAP AORL A,31HMOV 32H,

10、ASJMP $開(kāi)始將30H單元的內(nèi)容送A將A中高、低4位交換將A中內(nèi)容與31H單元內(nèi)容相或?qū)中內(nèi)容存入32H單元結(jié)束第15頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二進(jìn)制轉(zhuǎn)換程序 例:將內(nèi)部RAM的20H單元中的8位無(wú)符號(hào)二進(jìn)制數(shù)轉(zhuǎn)換為3位BCD碼,并將結(jié)果存放在FIRST(百位)和SECOND(十位、個(gè)位)兩單元中。 解 : 分析命題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試22H21H十位、個(gè)位百位先除以100,取出百位;再除以10位,取出十位和個(gè)位。FIRST DATA 22HSECOND DATA 21HORG 1000HHBCD: MOV A, 20HMOV B, #100DIV

11、 ABMOV FIRST,AMOV A, BMOV B, #10DIV ABSWAP AORL A, BMOV SECOND, ASJMP $開(kāi)始將20H單元的內(nèi)容送A將A除以100將A中內(nèi)容存入FIRSTBA, 再將A除以10結(jié)束將A、B合成后存入SECOND第16頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二分支程序 分支程序就是條件分支程序,即根據(jù)不同的條件執(zhí)行不同的程序段。在編寫(xiě)分支程序時(shí),關(guān)鍵是如何判斷分支的條件。在MCS-51中可以直接用來(lái)判斷分支條件的指令不是很多,只有累加器為零(或不為零)、比較條件轉(zhuǎn)移指令CJNE等,但它還提供位條件轉(zhuǎn)移指令,如JC,JB等。把這些指

12、令結(jié)合在一起使用,就可以完成各種各樣的條件判斷,如正負(fù)判斷、溢出判斷、大小判斷等。分段函數(shù) 符號(hào)函數(shù) 比較大小 第17頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二例:兩個(gè)無(wú)符號(hào)數(shù)分別存于ONE和TWO單元,試比較它們的大小,將較大者存人MAX單元。若兩數(shù)相等則任存入一個(gè)即可。 解 :分析命題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試比較大?。汉?jiǎn)單分支程序MOV A,ONECJNEA, TWO,NEXT1NEXT1: JC NEXT2 MOV MAX,ONESJMP $NEXT2: MOV MAX,TWO SJMP $返回開(kāi)始將ONE單元的內(nèi)容送A結(jié)束A TWO將TWO單元內(nèi)容送MAX單元YN

13、將ONE單元內(nèi)容送MAX單元第18頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二例:設(shè)變量X存放于VAR單元,函數(shù)值Y存放在FUNC單元。試按照下式的要求給Y賦值。 解 : Y= 分析命題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試符號(hào)函數(shù)VARDATA30HFUNCDATA31H MOVA,VAR JZ COMP JNB ACC.7,POSI MOVA,#0FFH SJMPCOMPPOSI: MOV A,#1COMP: MOV FUNC,A SJMP $開(kāi)始將VAR單元的內(nèi)容送A結(jié)束A=0?將0送FUNC單元A 0?將1送FUNC單元將-1送FUNC單元YNYN第19頁(yè),共53頁(yè),2022年,

14、5月20日,2點(diǎn)36分,星期二例:設(shè)變量X存放于VAR單元,函數(shù)值Y存放在FUNC單元。試按照下式的要求給Y賦值。 解 : Y= 分析命題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試分段函數(shù)MOV A,VARCJNEA,#10,NEXT1NEXT1: JC NEXT2 MOV R0,#1CJNE A,#21,NEXT3NEXT3: JNC NEXT4 MOV R0,#0 SJMP NEXT4NEXT2: MOV R0,#0FFHNEXT4: MOV FUNC,R0 SJMP $開(kāi)始將VAR單元的內(nèi)容送A結(jié)束A 20?將0送FUNC單元A 1 0?將-1送FUNC單元將1送FUNC單元YYNN第20頁(yè),共5

15、3頁(yè),2022年,5月20日,2點(diǎn)36分,星期二多重分支程序設(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è),2022年,5月20日,2點(diǎn)36分,星期二【分析】用直接轉(zhuǎn)移指令組成一個(gè)轉(zhuǎn)移表,然后把菜單號(hào)讀入累加器(A),轉(zhuǎn)移表首地址放入DPTR中,利用JMP A+DPTR實(shí)現(xiàn)散轉(zhuǎn)?!救肟趨?shù)】(R3)=存輸入鍵盤(pán)碼1

16、9?!境隹趨?shù)】轉(zhuǎn)移到相應(yīng)的子程序入口。 ORG 0030HKEY_JMP:MOV DPTR, #PRGTBL;子程序入口首地址送DPTR MOV A, R3;把鍵盤(pán)輸入緩沖區(qū)內(nèi)容送累加器(A) DEC A;由于輸入數(shù)碼為19,因此需減1 MOV B, #03H第22頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二 MUL AB ;由于長(zhǎng)跳轉(zhuǎn)指令LJMP占用3B, ;各子程序入口地址相距3B JMP A+DPTR ;根據(jù)輸入碼,執(zhí)行相應(yīng)的子程序 ORG 2000H ;程序入口地址表PRGTBL:LJMP NO1 LJMP NO2 LJMP NO3 LJMP NO4 LJMP NO5 L

17、JMP NO6 LJMP NO7 LJMP NO8 LJMP NO9 END第23頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二(2) 利用轉(zhuǎn)向地址表實(shí)現(xiàn)轉(zhuǎn)移 這種方法將轉(zhuǎn)移地址列成表格,將表格的內(nèi)容作為轉(zhuǎn)移的目標(biāo)地址?!纠俊竟δ堋扛鶕?jù)R3(0n)的內(nèi)容轉(zhuǎn)向?qū)?yīng)的程序;處理程序的入口符號(hào)地址分別為PR0PRn(n256)【分析】將PR0 PRn入口地址(16位地址)列在表格中,故每一項(xiàng)占兩個(gè)單元;PRn在表中的偏移量為2n,因此將R3的內(nèi)容乘“2”即得PRn在表中的偏移地址;從偏移地址2n和2n+1兩個(gè)單元分別取出PRn的高8位地址和低8位地址送DPTR寄存器,用JMP A+DPT

18、R指令(A先清零)即轉(zhuǎn)移到PRn入口執(zhí)行。第24頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二【入口參數(shù)】(R3)=0n 轉(zhuǎn)移?!境隹趨?shù)】轉(zhuǎn)移到相應(yīng)的子程序入口。PR0EQU0110HPR1EQU0220HPR2EQU0330HORG0030HKEY_JMP:MOVDPTR, #TAB MOVA, R3ADDA, R3;(A)(R3)*2JNCNADDINCDPH;(R3*2)256第25頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二NADD: MOV R3, A MOVC A, A+DPTR XCHA, R3 ;轉(zhuǎn)移地址高8位 INCA MOVCA, A+DPTR MO

19、VDPL,A;轉(zhuǎn)移地址低8位 MOVDPH, R3 CLRA JMPA+DPTR TAB: DW PR0,PR1,PR2, PRn PR0:處理程序0 PR1:處理程序1 PRn:處理程序n END第26頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二(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)

20、(鍵盤(pán)編碼)?!境隹趨?shù)】轉(zhuǎn)移到相應(yīng)的子程序入口。第27頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二 ORG0030HKEY_JMP:MOVA, BMOVDPTR, #TABMOVCA,A+DPTRJMPA+DPTR TAB:DBPR0-TABDBPR1-TABDBPR2-TABDBPR3-TABDBPR4-TAB PR0:處理程序0 PR1:處理程序1 PR2:處理程序2 PR3:處理程序3 PR4:處理程序4END第28頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二循環(huán)程序 一、循環(huán)程序的應(yīng)用場(chǎng)合二、循環(huán)程序的組成三、循環(huán)程序舉例字符串長(zhǎng)度 求最大值 數(shù)組清0 第29

21、頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二循環(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ù)操作,就可大大減化程序。例如:要使00H7FH單元的內(nèi)容清0。方法1:用128條賦值指令完成。方法2:只用一條賦值指令,并使之執(zhí)行128次,每次執(zhí)行時(shí)操作數(shù)亦作相應(yīng)的變化以完成規(guī)定的操作。方法1:MOV 00H,#0 MOV 01H,#0 MOV 7FH,#0方法2: MOV R0,#128 CLR AUP:MOV R0,A DJNZ

22、 R0,UP SJMP $第30頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二循環(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è),2022年,5月20日,2點(diǎn)36分,星期二循環(huán)程序 圖 1 圖 2第32頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二例:使00H-7FH單元清0。 數(shù)組清0分析命題

23、確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試7FH00H00H00H00H用MOV R0,A 做循環(huán)主體,修改R0的值,可以將0送入00H7FH單元中。 MOV R0,#128 CLR AUP:DEC R0MOV R0,ACJNE R0,#00H,UP SJMP $開(kāi)始給R0賦128、A清0A送R0R0減1結(jié)束R0=00H?YN第33頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二數(shù)組清0思考:如下程序能使00H7FH單元清0嗎?為什么? MOV R0,#0 MOV R7,#128CLR AUP:MOV R0,AINC R0 DJNZ R7,UP SJMP $第34頁(yè),共53頁(yè),2022年,5月2

24、0日,2點(diǎn)36分,星期二例:內(nèi)存中以STRING開(kāi)始的區(qū)域有若干個(gè)字符和數(shù)字,一般稱為一個(gè)字符串,最末一個(gè)字符為$,試統(tǒng)計(jì)這些字符數(shù)字的數(shù)目,結(jié)果存人NUM單元 字符串長(zhǎng)度分析命題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試NUM DATA 2DHSTRING DATA 21HORG 0030H CLRA MOV R0,#STRINGLOOP: CJNE R0,#24H,NEXT SJMP COMP NEXT:INC AINC R0 SJMP LOOPCOMP: INC A MOV NUM,A SJMP $開(kāi)始給R0賦21H、A清0A加1,并送2DH單元A加1R0加1結(jié)束 R0=24H?YN第35頁(yè),共5

25、3頁(yè),2022年,5月20日,2點(diǎn)36分,星期二例:從外部RAM中BLOCK單元開(kāi)始有一個(gè)無(wú)符號(hào)數(shù)數(shù)據(jù)塊,其長(zhǎng)度存于LEN單元,試求出數(shù)據(jù)塊中最大的數(shù),并存入MAX單元。 求最大值分析命題確定算法畫(huà)流程圖編寫(xiě)程序上機(jī)調(diào)試 LEN DATA 30H MAX DATA 31HBLOCK DATA 0100HORG 0400H FMAX:MOV DPTR,#BLOCKDEC LENMOVX A,DPTRLOOP:CLRCMOV B,AINC DPTRMOVX A,DPTRSUBBA,BJNCNEXTMOVA,BSJMPNEXT1NEXT:ADDA,BNEXT1:DJNZLEN, LOOPMOVMAX

26、,ASJMP $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è),2022年,5月20日,2點(diǎn)36分,星期二多重循環(huán)程序設(shè)計(jì)【例1】【功能】設(shè)計(jì)一個(gè)延時(shí)10ms的程序。【分析】延時(shí)程序的延時(shí)主要與所用晶振和延時(shí)程序中的循環(huán)次數(shù) 有關(guān)。已知AT89C51單片機(jī)使用的晶振為12MHz,則可知一個(gè)機(jī)器周期T為1us?!救肟趨?shù)】(R0)=毫秒數(shù),(R1)=1ms延時(shí)預(yù)定值?!境隹趨?shù)】定時(shí)到,退出程序。 ORG2000H 指令機(jī)器周期數(shù)1MOV R0 , #0AH ;毫秒數(shù)R0

27、 12DL2:MOV R1 , #MT ;1ms延時(shí)值R1 13DL1:NOP 14NOP 15DJNZ R1 , DL1 ;1ms延時(shí)循環(huán) 26DJNZ R0 , DL2 ;10ms延時(shí)循環(huán) 2第37頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二循環(huán)程序設(shè)計(jì)該延時(shí)程序是一個(gè)雙重循環(huán)程序,內(nèi)循環(huán)1ms延時(shí)的預(yù)定值MT需計(jì)算: (1+1+2)1TMT=1000T MT=250=0FAH用0FAH代替程序中的MT,則該程序執(zhí)行后,能實(shí)現(xiàn)10ms的延時(shí)。若考慮第1、2、6行延時(shí)參數(shù)配置指令的時(shí)間因素,則該段延時(shí)程序的精確延時(shí)時(shí)間計(jì)算式為:11+(1+2)110+(1+1+2)125010=

28、10.031ms第38頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二多重循環(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è),2022年,5月20日,2點(diǎn)36分,星期二SORT: MOV A,#N-1;N個(gè)數(shù)據(jù)排序 MOV R4,A;外循環(huán)次數(shù)LOOP1: MOV A,R4 MOV R3,

29、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ù) CJNE A,B,L1;比較L1: JNC UNEX;AB,不交換 DEC R0;否則交換數(shù)據(jù) XCH A ,R0 INC R0 MOV R0,AUNEX: DJNZ R3,LOOP2;內(nèi)循環(huán)結(jié)束? DJNZ R4,LOOP1;外循環(huán)結(jié)束? RETR3R31=0 ?B (R0) A ( R0 + 1 )循環(huán)結(jié)束外循環(huán)次數(shù)R4R4R41=0 ?內(nèi)循環(huán)次數(shù)R3表首TABR0開(kāi)始A B?(R0)(R0+1)R0 R0+1YN第

30、40頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二5-5 查表程序例5-19 一個(gè)十六進(jìn)制數(shù)存放在HEX單元的低四位,將其轉(zhuǎn)換成ASCII碼并送回HEX單元。 編程: ORG 0100H HEX EQU 30HHEXASC:MOV A, HEX ANL A ,#00001111B ADD A, #3 ;變址調(diào)整 MOVC A, A+PC MOV HEX,A ;2字節(jié) RET ;1字節(jié)ASCTAB:DB30H,3lH,32H,33H DB34H,35H,36H,37H DB38H,39H,41H,42H DB43H,44H,45H,46H END 第41頁(yè),共53頁(yè),2022年,5月2

31、0日,2點(diǎn)36分,星期二子程序 一、子程序的應(yīng)用場(chǎng)合二、子程序的優(yōu)缺點(diǎn)三、編制子程序注意事項(xiàng)四、子程序舉例第42頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二2. 參數(shù)傳遞入口參數(shù):調(diào)用子程序之前,需要傳給子程序的參數(shù)。出口參數(shù):子程序送回調(diào)用程序的結(jié)果參數(shù)。(1)子程序無(wú)須傳遞參數(shù)如:延時(shí)子程序 第43頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二例5-24 雙字節(jié)求補(bǔ)子程序CPLD。解 入口參數(shù):(R7R6)=16位數(shù) 出口參數(shù):(R7R6)=求補(bǔ)后的16位數(shù) CPLD: MOV A,R6 CPL A ADD A,#1 MOV R6,A MOV A,R7 CPL A A

32、DDC A,#0 MOV R7,A RET (2)用累加器和工作寄存器傳遞參數(shù) 第44頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二例5-25 n字節(jié)求補(bǔ)子程序。解 入口參數(shù):(R0)=求補(bǔ)數(shù)低字節(jié)指針,(R7)=n-1 出口參數(shù):(R0)=求補(bǔ)后的高字節(jié)指針 CPLN: MOV A,R0 CPL A ADD A,#1 MOVR0,A NEXT: INC R0 MOV A,R0 CPL A ADDC A,#0 MOV R0,A DJNZ R7,NEXT RET(3)通過(guò)操作數(shù)地址傳遞參數(shù) 第45頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二例5-26 在HEX單元存放兩個(gè)十

33、六進(jìn)制數(shù),將它們分別轉(zhuǎn)換 成ASC碼并存入ASC和ASC+1單元。解 由于要進(jìn)行兩次轉(zhuǎn)換,故可調(diào)用查表子程序完成。主程序:MAIN: PUSH HEX;取被轉(zhuǎn)換數(shù) LCALLHASC;轉(zhuǎn)入子程序 *PC POP ASC;ASCLASC MOVA,HEX;取被轉(zhuǎn)換數(shù) SWAPA;處理高四位 PUSHACC LCALLHASC ;轉(zhuǎn)子程序 POPASC+1;ASCH ASC+1 (4)通過(guò)堆棧傳遞參數(shù) 第46頁(yè),共53頁(yè),2022年,5月20日,2點(diǎn)36分,星期二子程序:HASC:DEC SP DEC SP ;修改SP指向HEX POPACC ;彈出HEX ANL A,#0FH ;屏蔽高四位 。 ADD A,#5 ;變址調(diào)整 MOVCA,A+PC ;查表 PUSHACC ;結(jié)果入棧 (2字節(jié)) INCSP ; (1字節(jié))

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論