freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

mcs51程序設(shè)計(jì)(專業(yè)版)

  

【正文】 將累加器清零后用 JMP A+DPTR 直接轉(zhuǎn) 向各個(gè)處理程序的入口。 MCS51 指令系統(tǒng)中有一條跳轉(zhuǎn)指 JMP ADPTR,用它可以容易地實(shí)現(xiàn)散轉(zhuǎn)功能。 ( 4) 子程序只使用累加器 A 和數(shù)據(jù)指針 DPTR,應(yīng)用程序可以在調(diào)用前,把這些寄存器壓入堆棧中,保護(hù)它們的內(nèi)容。 例 22:字符串發(fā)送子程序。 ORG 0000H HA24: MOV A, 50H SWAP A PUSH ACC ACALL HASC POP ACC MOV R1, A INC R1 PUSH 50H ACALL HASC POP ACC MOV R1, A INC R1 MOV A, 51H SWAP A PUSH ACC ACALL HASC POP ACC MOV R1, A INC R1 PUSH 51H ACALL HASC POP ACC MOV R1, A END HASC 子程序只完成了一位十六進(jìn)制數(shù)到 ASCII 碼的轉(zhuǎn)換,對(duì)于一個(gè)字節(jié)中兩個(gè)十六進(jìn)制數(shù),需由主程序把它分成兩個(gè)一位十六進(jìn)制數(shù),然后兩次調(diào)用 HASC,才能完成轉(zhuǎn)換。利用 MS51 的帶進(jìn)位加法指令,可以直接編寫出下面的程序。 節(jié)省存儲(chǔ)器空間。 此程序傳數(shù)的最大個(gè)數(shù)為 FFH 即 256 個(gè),超過此數(shù)該程序就有問題,該問題出在高字節(jié)不能改變,要使高字節(jié)也能變,程序要作如下變動(dòng): ORG 0000H MOV R2, 00H ;定外部存儲(chǔ)器取數(shù)單元的起始地址低字節(jié) MOV R3, 20H ;定外部存儲(chǔ)器取數(shù)單元的起始地址高字節(jié) MOV R4, 00H ;定外部存儲(chǔ)器存數(shù)單元的起始地址低字節(jié) MOV R5, 40H ;定外部存儲(chǔ)器存數(shù)單元的起始地址高字節(jié) MOV R6, 08H ;定送數(shù)的個(gè)數(shù)低字 節(jié) MOV R7, 04H ;定送數(shù)的個(gè)數(shù)高字節(jié) MOV A, R7 JZ LOP2 JNZ LOP ;以上三句是判一下 R7 高字節(jié)是否為 0 LOP1: MOV DPL, R2 MOV DPH, R3 MOV A, DPTR ;讀出 20xx 單元的數(shù)送 A 暫存 INC DPTR ;取數(shù)單元加 1,指向下一個(gè)單元 MOV R2, DPL MOV R3, DPH ;新地址送 R R3,為送下一個(gè)作準(zhǔn)備 MOV DPL, R4 MOV DPH, R5 MOVX DPTR, A ;送數(shù)到 4000H 單元 INC DPTR ;存數(shù)單元加 1,指向下一個(gè)單元 MOV R4, DPL MOV R5, DPH ;新地址送 R R5,為送下一個(gè)作準(zhǔn)備 LOP: DJNZ R7, LOP1 ;高字節(jié)送完了嗎?未完轉(zhuǎn)到 LOP1 繼續(xù)送 LOP2: DJNZ R6, LOP1 ;未完接著轉(zhuǎn)去送低字節(jié),完了順序執(zhí)行, END ;結(jié)束程序。編程有很大的靈活性,很高的技巧,首先應(yīng)該多看實(shí)例,有些指令的用法比較特殊專一,要記下來(lái),如以上程序,還有查表程序,散轉(zhuǎn)程序等等。以上介紹的幾個(gè)循環(huán)程序例子,它們的循環(huán)次數(shù)都是已知的,適合用計(jì)數(shù)器置初值的方法。 循環(huán)結(jié)構(gòu)的程序,不論是先處理后判斷,還是先判斷后處理,其關(guān)鍵是控制循環(huán)的次數(shù)。重復(fù)次數(shù)越多,循環(huán)程序的優(yōu)越性就越明顯。執(zhí)行 SJMP指令后,實(shí)現(xiàn)程序的轉(zhuǎn)移。 例 2: 將兩個(gè)半字節(jié)數(shù)合并成一個(gè)一字節(jié)數(shù) 設(shè):內(nèi)部 RAM40H, 41H 單元中分別存放著 8 位二進(jìn)制數(shù)。明確了這些后,可寫出程序如下: ORG 0000H ; 定下面這段程序在存儲(chǔ)器中的首地址,必不可少的。第 5 章 MCS— 51 程序設(shè)計(jì) 程序設(shè)計(jì)是為了解決某一個(gè)問題,將指令有序地組合在一起。 MOV R2, 02 ; 2 送 R2 MOV A, 01 ; 1 送 A ADD A, R2 ;相加,結(jié)果 3 存 A 中 END ;程序結(jié)束標(biāo)志,必不可少的。要求取出兩個(gè)單元中的低半字節(jié)、合并成一個(gè)字節(jié)后,存 42H 單元。 例 5 : 將 ASCII 碼表的 ASCII 碼轉(zhuǎn)換為十六進(jìn)制數(shù),如果 ASCII 碼不能轉(zhuǎn)換成十六進(jìn)制數(shù),用戶標(biāo)志位置 1。但是程序的執(zhí)行時(shí)間并不節(jié)省。根據(jù)需要解決問題的 實(shí)際情況,對(duì)循環(huán)次數(shù)的控制有多種,循環(huán)次數(shù)已知的,用計(jì)數(shù)器來(lái)控制循環(huán),循環(huán)次數(shù)末知的,可以按條件控制循環(huán),也可以用邏輯尺控制循環(huán)。而有 些循環(huán)程序事先不知道循環(huán)次數(shù)。常用的就是那么幾條,編程方法也就那么幾種,掌握了編程基本方法可脫離書本自己編,先編簡(jiǎn)單程序,再編復(fù)雜程序,先編短程序,后編長(zhǎng)程序。 象這樣的小程序很有用的,一般將它編寫成通用的子程序: MOVE: MOV DPL, R2 MOV DPH, R3 MOVX A, DPTR MOV DPL, R4 MOV DPH, R5 MOVX A, DPTR CJNE R2, 0FFH, MOV1 INC R3 MOV1: INC R2 CJNE R2, 0FFH, MOV2 INC R5 MOV2: INC R4 CJNE R6, 00H, MOV3 CJNE R7, 00H, MOV4 MOV3: DEC R6 SJMP MOVE MOV4: DEC R6 DEC R7 SJMP MOVE RET 程 序中 R R3 定數(shù)據(jù)塊的首地址, R R5 定數(shù)據(jù)塊目標(biāo)地址, R6 為傳送多少個(gè)數(shù)的低字節(jié), R7 為傳送多少個(gè)數(shù)的高字節(jié),使用此子程序時(shí)只要將這 6 個(gè)數(shù)送入,調(diào)用此程序就行。 MCS51 指令系統(tǒng)中,提供了兩條調(diào)用子程序指令 ACALL 及 LCALL,和一條返回主程序的指令 RET。 ORG 0000H NADD: MOV R7, 3 CLR C NADD1: MOV A, R0 ADDC A, R1 MOV R0, A DEC R0 DEC R0 DJNZ R7, NADD1 DJNZ R7, NADD1 INC R0 RET END 用堆棧來(lái)傳遞參數(shù) 堆??梢杂糜趥鬟f參數(shù)。對(duì)于需多次使用該功能的程序的場(chǎng)合,需占用很多程序空間。 在實(shí)際應(yīng)用中,經(jīng)常需要發(fā)送各種字符串。 前面介紹了四種基本的參數(shù)傳遞方法,實(shí)際上,可以按需要合并使用兩種或幾種參數(shù)傳遞方法,以達(dá)到減少程序長(zhǎng)度,加快運(yùn)行速度、節(jié)省工作單元等目標(biāo)。該指令是把累加器 A 的 8 位無(wú)符號(hào)數(shù)(作地址的低 8 位)與 16 位數(shù)據(jù)指針的內(nèi)容相加,其和送入程序計(jì)數(shù)器,作為轉(zhuǎn)移指令的地址。 例 26: 根據(jù) R3 的內(nèi)容轉(zhuǎn)向?qū)?yīng)處理程序。用查表指令,找到對(duì)應(yīng)的轉(zhuǎn)向地址,把它裝入 DPTR 中。由于每 一個(gè)情況都有判斷和轉(zhuǎn)移,如對(duì) n 個(gè)情況,需要 n 個(gè)判斷和轉(zhuǎn)移,因此它的缺點(diǎn)是程序比較長(zhǎng)。子程序在每一條 MOVC 指令前累加器裝入適當(dāng)?shù)膮?shù),這樣基本上可“隨機(jī)訪問”參數(shù)表。子程 序根據(jù)棧內(nèi)的返回地址,決定從何處找到這些常數(shù),然后在需要時(shí),從程序存貯器中讀出這些參數(shù)。 我們編寫程序時(shí)可以將例 18 當(dāng)作子程序調(diào)用,子程序名為 HASC。入口時(shí),( R0),( R1)分別指向加數(shù)和被加數(shù)的低位字節(jié),出口時(shí)( R0)指向結(jié)果的高位字節(jié)。 簡(jiǎn)化程序的邏輯結(jié)構(gòu),同時(shí)也便于子程序調(diào)試。 首先全速運(yùn)行程序,看所有數(shù)據(jù)是否傳到 4000H 為起點(diǎn)的 8 個(gè)單元中,若不正確,再單步運(yùn)行程序,看程序的每一步是否正確,若不正確,再反復(fù)修改,直到正確為止。開始編程序要全力以赴,不讓任何人打擾,不中斷思路,一 氣呵成。 ( 2)循環(huán)次數(shù)末知的循環(huán)程序。如圖 55( b)所示。采用循環(huán)程序,使程序縮短,節(jié)省存儲(chǔ)單元。執(zhí)行 JNC 指令后,形成了分支。下面的程序都是講的通用子程序。 例 1: 編寫 1+2 的程序 首先用 ADD A, Rn 指令,該指令是將寄存器 Rn 中的數(shù)與累加器 A 中的數(shù)相加,結(jié)果存于 A 中,這就要求先將 1 和 2 分別送到 A 中和寄存器 Rn 中,而 Rn 有四組,每組有八個(gè)單元 R0~R7,首先要知道 Rn 在哪組,默認(rèn)值(不設(shè)定值)是第 0 組,在同一個(gè)程序中,同組中的 Rn 不能重復(fù)使用,不然會(huì)數(shù)據(jù)出錯(cuò),唯獨(dú) A 可反復(fù)使用,不出問題。程序有簡(jiǎn)有繁,有些復(fù)雜程序往往是由簡(jiǎn)單的基本程序所構(gòu)成。 程序到此編寫完成,然后在仿真軟件中調(diào)試、驗(yàn)證,若不對(duì),反復(fù)修改程序,直到完全正確為止。 流程圖如圖 52 所示 程序如下: ORG 0000H START: MOV R1, 40H MOV A, R1 ANL A, 0FH ;取第一個(gè)半字節(jié) SWAP A INC R1 XCH A, R1 ;取第二字節(jié) ANL A, 0FH ;取第二個(gè)半字節(jié) ORL A, R1 ;拼字 INC R1 MOV R1, A ;存放結(jié)果 圖 52 例 2 流程圖 RET END 上面程序先要在 RAM 的 40H、 41H 單元中輸入兩個(gè)數(shù) ,(輸入法見第二章軟件仿真部分)例如輸入 08 和 06,再看 86 是否送入 42H 單元。 由 ASCII 碼表可知, 30H~39H 為 0~9 的 ASCII 碼, 41H~46H 為 A~F 的 ASCII 碼。由于要有循環(huán)準(zhǔn)備、結(jié)束判斷等指令,速度要比簡(jiǎn)單程序稍慢些。 循環(huán)程序又分單循環(huán)和多重循環(huán)。不能用以上方法。編好的程序又可作為以后程序中的子程序,持之以恒,你就會(huì)成為編程高手。此章講的所有程序都應(yīng)在 Franklin 仿真軟件中調(diào)試,調(diào)試是研究程序、讀懂程序、學(xué)習(xí)編寫程序的過程。 子程序的調(diào)用,一般包含兩個(gè)部分,保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)。調(diào)用時(shí),主程序可用 PUSH 指令把參數(shù)壓入堆棧中。下面介紹把一個(gè)字節(jié)的兩位十六進(jìn)制數(shù)變成兩位 ASCII 碼的子程序。這些字符串,通常放在 EPROM(程序存貯器)中。 5 . 5 查表程序設(shè)計(jì) 查表程序是一種常用程序,它廣泛使用于 LED 顯示器控制、打印機(jī)打印以及數(shù)據(jù)補(bǔ)償,計(jì)算、轉(zhuǎn)換等功能程序中,具 有程序簡(jiǎn)單、執(zhí)行速度快等優(yōu)點(diǎn)。執(zhí)行 JMP A+DPTR 指令后,累加器和 16 位數(shù)據(jù)指針的內(nèi)容均不受影響。處理程序的入口分別是 LOP0~ LOP2。 用轉(zhuǎn)移地址表實(shí)現(xiàn)散轉(zhuǎn) 當(dāng)轉(zhuǎn)向范圍比較大時(shí),可直接使用轉(zhuǎn)向地址表方法,即把每個(gè)處理程序的入口地址直接置于地址表內(nèi)。有多種方法能實(shí) 現(xiàn)散轉(zhuǎn)程序,但通常用逐次比較法,即把所有各個(gè)情況逐一進(jìn)行比較,若有符合便轉(zhuǎn)向?qū)?yīng)的處理程序。 ( 3) 傳遞到子程序的 參數(shù)可按最方便的次序列表,而不必按使用的次序排列。調(diào)用時(shí),常數(shù)作為程序代碼的一部分,緊跟在調(diào)用子程序后面。 例 19: 把內(nèi)部 RAM 中 50H、 51H 的雙字節(jié)十六進(jìn)制數(shù)轉(zhuǎn)換為 4 位 ASCII 碼,存放于( R1)指向的 4 個(gè)內(nèi)部 RAM 內(nèi)部單元。 例 17: 將( R0)和( R1)指出的內(nèi)部 RAM 中兩個(gè) 3 字節(jié)無(wú)符號(hào)整數(shù)相加,結(jié)果送( R0)指出的內(nèi)部 RAM 中。 調(diào)用子程序有幾個(gè)優(yōu)點(diǎn): 避免對(duì)相同程序段的重復(fù)編制。 第二輪經(jīng)過五次兩兩比較后,得到次大數(shù)。 程序初步編好后,在仿真軟件中調(diào)試,調(diào)試時(shí)先打開 Franklin 仿真軟件的外部數(shù)據(jù)窗口( Xdata View),在外部數(shù)據(jù)窗口( Xdata View)中的 20xxH 為起點(diǎn)的 8 個(gè)單元中任意送數(shù),再又打開一個(gè) Franklin 仿真軟件的外部數(shù)據(jù)窗口( Xdata View)。 根據(jù)此程序,自已編出程序流程圖,編程與程序
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1