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

正文內(nèi)容

mcs51程序設(shè)計(更新版)

2025-09-21 10:02上一頁面

下一頁面
  

【正文】 指向下一個單元 MOV A, DPTR ;讀出數(shù)送 A 暫存 MOVX R0, A ;送數(shù)到新單元 DJNZ R7, LOOP ; 8 個送完了嗎?未完轉(zhuǎn)到 LOOP 繼續(xù)送 END 送完了順序執(zhí)行,結(jié)束。常用的就是那么幾條,編程方法也就那么幾種,掌握了編程基本方法可脫離書本自己編,先編簡單程序,再編復(fù)雜程序,先編短程序,后編長程序。例如:一個簡單的 1+2 程序,首先應(yīng)將 1 與 2 送到加法指令所規(guī)定的單元中,再用一個加法指令將兩數(shù)相加,加后的結(jié)果存放在哪里,全由編寫程序時安排好存儲單元,若程序運行成功 ,結(jié)果一定在你編程時規(guī)定的那個單元,若那個單元被用或被其它的程序占了,數(shù)就存不進,讀不出。而有 些循環(huán)程序事先不知道循環(huán)次數(shù)。 程序如下: ORG 0000H MOV DPTR, 20xxH CLEAR: CLR A MOV R2, 32H ; 置計數(shù)值 LOOP: MOVX DPTR, A INC DPTR ; 修改地址指針 DJNZ R2, LOOP ; 控制循環(huán) END 本例中循環(huán)次數(shù)是已知,用 R2 作循環(huán)次數(shù)計數(shù)器。根據(jù)需要解決問題的 實際情況,對循環(huán)次數(shù)的控制有多種,循環(huán)次數(shù)已知的,用計數(shù)器來控制循環(huán),循環(huán)次數(shù)末知的,可以按條件控制循環(huán),也可以用邏輯尺控制循環(huán)。 結(jié)束部分:分析及存放執(zhí)行結(jié)果。但是程序的執(zhí)行時間并不節(jié)省。 程序為 : 圖 54:例 5 流程圖 ORG 0000H CMPT: JNB , NCH ; (A)0,不需轉(zhuǎn)換 CPL A ADD A, 1 SETB ;保存符號 NCH: RET END 分支程序在實際使用中用處很大,除了用于比較數(shù)的大小之外,常用于控制子程序的轉(zhuǎn)移。 例 5 : 將 ASCII 碼表的 ASCII 碼轉(zhuǎn)換為十六進制數(shù),如果 ASCII 碼不能轉(zhuǎn)換成十六進制數(shù),用戶標(biāo)志位置 1。 例 4: 兩個無符號數(shù)比較大小 設(shè)兩個連續(xù)外部 RAM 單元 ST1 和 ST2 中存放不帶符號的二進制數(shù),找出其中的大數(shù)存入 ST3 單元中。要求取出兩個單元中的低半字節(jié)、合并成一個字節(jié)后,存 42H 單元。 此程序也可這樣寫,用子程序調(diào)用的方法寫。 MOV R2, 02 ; 2 送 R2 MOV A, 01 ; 1 送 A ADD A, R2 ;相加,結(jié)果 3 存 A 中 END ;程序結(jié)束標(biāo)志,必不可少的。程序看懂了,再編一些短的,容易的程序,特別是一些專用語句的編程方法要記下,慢慢逐步編長程序,編多了,熟能生巧。第 5 章 MCS— 51 程序設(shè)計 程序設(shè)計是為了解決某一個問題,將指令有序地組合在一起。 程序編寫是一個較復(fù)雜艱難的過程,要有較強的抽象思維和邏輯思維能力,學(xué)習(xí)編程 一般先看程序,分析程序。明確了這些后,可寫出程序如下: ORG 0000H ; 定下面這段程序在存儲器中的首地址,必不可少的。它的完整程序是: ORG 0000H MOV 40H, 01H MOV 41H, 02H AD1: MOV R0, 40H ; 設(shè) R0 為數(shù)據(jù)指針 MOV A, R0 ;取 N1 INC R0 ;修改指針 ADD A, R0 ; N1+N2 INC R0 MOV R0, A ;存結(jié)果 END 流程圖如圖 51 所示。 例 2: 將兩個半字節(jié)數(shù)合并成一個一字節(jié)數(shù) 設(shè):內(nèi)部 RAM40H, 41H 單元中分別存放著 8 位二進制數(shù)。 下面舉兩個分支程序的例子。執(zhí)行 SJMP指令后,實現(xiàn)程序的轉(zhuǎn)移。設(shè)二進制數(shù)放在累加器 A 中,其補碼放回到 A中。重復(fù)次數(shù)越多,循環(huán)程序的優(yōu)越性就越明顯。 通常 4 部分又稱為循環(huán)體。 循環(huán)結(jié)構(gòu)的程序,不論是先處理后判斷,還是先判斷后處理,其關(guān)鍵是控制循環(huán)的次數(shù)。 例如:設(shè)有 50 個外部 RAM 單元要清“ 0”,即為循環(huán)次數(shù)存放在 R2 寄存器中,其首址存放在 DPTR 中,設(shè)為 20xxH。以上介紹的幾個循環(huán)程序例子,它們的循環(huán)次數(shù)都是已知的,適合用計數(shù)器置初值的方法。 循環(huán)程序在數(shù)據(jù)傳送 方面的應(yīng)用 數(shù)據(jù)傳送在程序編寫中占有很重要的位置,編程離不開數(shù)據(jù)的處理和傳送,初編程時往往是不知道數(shù)據(jù)怎么處理。編程有很大的靈活性,很高的技巧,首先應(yīng)該多看實例,有些指令的用法比較特殊專一,要記下來,如以上程序,還有查表程序,散轉(zhuǎn)程序等等。 例 12: 將外部存儲器以 20xxH 為起始地址的 8 個單元中的內(nèi)容傳到內(nèi)部 RAM以 40H為起始地址的 8 個單元中。 此程序傳數(shù)的最大個數(shù)為 FFH 即 256 個,超過此數(shù)該程序就有問題,該問題出在高字節(jié)不能改變,要使高字節(jié)也能變,程序要作如下變動: ORG 0000H MOV R2, 00H ;定外部存儲器取數(shù)單元的起始地址低字節(jié) MOV R3, 20H ;定外部存儲器取數(shù)單元的起始地址高字節(jié) MOV R4, 00H ;定外部存儲器存數(shù)單元的起始地址低字節(jié) MOV R5, 40H ;定外部存儲器存數(shù)單元的起始地址高字節(jié) MOV R6, 08H ;定送數(shù)的個數(shù)低字 節(jié) MOV R7, 04H ;定送數(shù)的個數(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,指向下一個單元 MOV R2, DPL MOV R3, DPH ;新地址送 R R3,為送下一個作準(zhǔn)備 MOV DPL, R4 MOV DPH, R5 MOVX DPTR, A ;送數(shù)到 4000H 單元 INC DPTR ;存數(shù)單元加 1,指向下一個單元 MOV R4, DPL MOV R5, DPH ;新地址送 R R5,為送下一個作準(zhǔn)備 LOP: DJNZ R7, LOP1 ;高字節(jié)送完了嗎?未完轉(zhuǎn)到 LOP1 繼續(xù)送 LOP2: DJNZ R6, LOP1 ;未完接著轉(zhuǎn)去送低字節(jié),完了順序執(zhí)行, END ;結(jié)束程序。 ( 2)外循環(huán)可以一層層向內(nèi)循環(huán)進入,結(jié)束時由里往外一層層退出。 設(shè)數(shù)列首地址在 R0 寄存器中, R2 為外循環(huán)次數(shù)計數(shù)器, R3 為內(nèi)循環(huán)次數(shù)計數(shù)器,R1 為交換標(biāo)志。 節(jié)省存儲器空間。它的缺點是工作寄存 器數(shù)量有限,不能傳遞太多的數(shù)據(jù);主程序必須先把數(shù)據(jù)送到工作寄存器;參數(shù)個數(shù)固定,不能由主程序任意改定。利用 MS51 的帶進位加法指令,可以直接編寫出下面的程序。下面以幾個簡單的例子說明用堆棧來傳遞參數(shù)的方法。 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 子程序只完成了一位十六進制數(shù)到 ASCII 碼的轉(zhuǎn)換,對于一個字節(jié)中兩個十六進制數(shù),需由主程序把它分成兩個一位十六進制數(shù),然后兩次調(diào)用 HASC,才能完成轉(zhuǎn)換。如果在子程序出口處,棧指針與實際的棧內(nèi)容不相符合,這時應(yīng)修改棧指針。 例 22:字符串發(fā)送子程序。 ORG 0000H SOUT: POP DPH ;棧中指針 POP DPL SOT1: CLR A MOVC A, A+DPTR INC DPTR JZ SEND JNB TI, $ ; $為本條指令地址 CLR TI MOV SBUF, A SJMP SOT1 SEND: JMP A+DPTR END 下面從發(fā)送字符串‘ MCS51 CONTROLLER’為例,說明該子程序使用 方法。 ( 4) 子程序只使用累加器 A 和數(shù)據(jù)指針 DPTR,應(yīng)用程序可以在調(diào)用前,把這些寄存器壓入堆棧中,保護它們的內(nèi)容。表格的存放內(nèi)容也各有不同,有的只存放 y 值,有的既有 x 值又有y 值。 MCS51 指令系統(tǒng)中有一條跳轉(zhuǎn)指 JMP ADPTR,用它可以容易地實現(xiàn)散轉(zhuǎn)功能。 標(biāo)號為 LOP0 的程序為由 P1 口控制的彩燈兩端向中間點亮,標(biāo)號為 LOP1 的程序為 由 P1 口控制的彩燈左移順次點亮, 標(biāo)號為 LOP2 的程序為由 P1 口控制的 彩燈右移順次點亮 程序如下: ORG 0000H MOV DPTR, TAB1 MOV A, R6 ADD A, R6 JNC PAD INC DPH PAD: JMP A+DPTR TAB1: AJMP LOP0 AJMP LOP1 AJMP LOP2 LOP1: MOV A, 0FEH LP1: MOV P1, A ACALL DEL RL A AJMP LP1 RET LOP2: MOV A, 7FH LP2: MOV P1, A ACALL DEL RR A AJMP LP2 RET LOP0: MOV R0, 00H LOOP: CLR A MOV A, R0 ADD A, 0CH MOVC A, A+PC CJNE A, 03H, LOOP1 JMP START LOOP1: MOV P1, A ACALL DEL INC R0 JMP LOOP TAB: DB 81H, 42H, 24H, 18H, 03H DEL: MOV R4, 0FFH DEL1: MOV R3, 0FFH DEL2: DJNZ R3, DEL2 DJNZ R4, DEL1 RET END 本例僅適用于散轉(zhuǎn)表首地址 TAB1 和處理程序入口地址 LOP0, LOP1,?? LOPn 在同一個 2K范圍的存儲區(qū)的情況。將累加器清零后用 JMP A+DPTR 直接轉(zhuǎn) 向各個處理程序的入口
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1