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

正文內容

mcs51程序設計(存儲版)

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

下一頁面
  

【正文】 可按該地址用 MOVC 指令從 EPROM 中讀出并發(fā)送該字符串。調用程序可位于 MCS51 全部地址空間的任何地方,因為 MOVC 指令能訪問所有 64K 字節(jié)。 Y 也有各種結構,如有時 y 可取定字長的數(shù),但不是所有該字長的數(shù)都有對應的 x;有時 y 可取小于 m( m 為定值)的自然數(shù)子集。它由輸入條件或運算結果來確定轉入各自的處理程序。這時可以用轉移指令 AJMP(或 LJMP)組成一個轉移表。 程序如下: ORG 0000H PJ2: MOV DPTR, TAB2 CLR C MOV R5, 0 MOV A, R6 RLC A ; R6*2 JNC AD1 INC R5 ;有進位,高 8 位加 1 AD1: ADD A, R6 ; R6*3 JNC AD2 INC R5 ;有進位,高 8 位加 1 AD2: MOV A, R5 ADD A, DPH ; DPTR 高 8 位調整 MOV A, R6 JMP A+DPTR ;得散轉地址 TAB2: LJMB LOP0 LJMP LOP1 ?? LJMP LOPn END 用 AJMP 組成的散轉表為二字節(jié)一項,而用 LJMP 組成的散轉表則為三字節(jié)一項,根據(jù) R6 中的內容或乘 2,或乘 3 得每一處理程序的入口地址表指針。 以上程序中標號 LOP0、 LOP LOP2 所指的程序與例 1 相同,可自已完整以上程序 還有用 RET 指令實現(xiàn)散轉的,此法用得很少,這里就不敘述了。 程序如下: ORG 0000H PJ3: MOV DPTR, TAB3 MOV A, R3 ADD A, R3 ; R3*2 JNC CAD INC DPH ;有進位 DPTR 高位加 1 CAD: MOV R2, A ;暫存 R2 MOVC A, A+DPTR XCH A, R2 ;處理程序入口地址高 8 位暫存 R2 INC A MOVC A, A+DPTR MOV DPL, A ;處理程序入口地址低 8 位暫存 DPL MOV DPH, R2 CLR A JMP A+DPTR TAB3: DW LOP0 DW LOP1 DW LOP2 END 本例可實現(xiàn) 64K 范圍內的轉移,但散轉數(shù) n 應小于 256。 LOP0: LJMP LLOP0 LOP3: LJMP LLOP3 ( 2)可以直接用 LJMP 指令組成轉移表。 下面介紹幾種實現(xiàn)散轉程序的方法。 程序為: ORG 0000H START: 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 01H, 02H, 04H, 08H, 10H, 20H, 40H, 80H DB 80H, 40H, 20H, 10H, 08H, 04H, 02H, 01H DB 00H, 0FFH, 00H, 0FFH, 00H, 0FFH, 03H DEL: MOV R7, 0FFH DEL1: MOV R6, 0FFH DEL2: DJNZ R6, DEL2 DJNZ R7, DEL1 RET END 用 MOVC A, A+DPTR 查表指令編程 例 24: 用查表方法編寫彩燈控制程序,編程使彩燈先順次點亮,再逆次點亮,然后連閃三下,反復循環(huán)。 查表,就是根據(jù)變量 x 在表格中查找 y,使 y=f( x)。一開始的 POP 指令已調整了棧指針的內容。按通常方法,需要先把這些字符裝入 RAM 中,然后用傳遞指針的方法來實現(xiàn)參數(shù)傳遞。 程序段參數(shù)傳遞 以上這些參數(shù)傳遞方法,多數(shù)是在調用子程序前,把值裝入適當?shù)募拇嫫鱾鬟f參數(shù)。 該程序仍采用堆棧來傳遞參數(shù),但現(xiàn)在傳到子程序的參數(shù) 為一個字節(jié),傳回到主程序的參數(shù)為兩個字節(jié),這樣堆棧的大小在調用前后是不一樣的。它先從堆棧中讀出調程序存放的數(shù)據(jù),然后用它的低 4 位去訪問一個局部的 16 項的 ASCII 碼表,把得到的 ASCII 碼放回堆棧中,然后返回。之后子程序可按棧指針訪問堆棧中的參數(shù),同時可把結果參數(shù)送回堆棧中。因此,僅需把20H 單元中兩個 BCD 數(shù)拆開,分別何 30H 相加就行了,可以編出程序如下: ORG 0000H ASCH: MOV R0,22H MOV R0,00H MOV A,20H XCHD A,R0 ORL 22H,30H SWAP A ORL A,30H MOV 21H,A SJMP $ END 用指針寄存器來傳遞參數(shù) 由于數(shù)據(jù)一般存放在存貯器中,而不是工作寄存器中,故可用指針來指示數(shù)據(jù)的位置,這樣可以大大節(jié)省傳遞數(shù)據(jù)的工作量,并可實現(xiàn)可變長度運算。由于主程序每 次調用子程序的工作是事先按排的,根據(jù)實際情況,有時可以省去保護現(xiàn)場的工作。如果每次都從頭開始編制一段程序,不僅麻煩 ,而且浪費存儲空間。 編制該程序的方法:依次將相鄰兩個單元的內容作比較,即第一個數(shù)和第二個數(shù)比較,第二個數(shù)和第三個數(shù)比較??,如果符合從小到大的順序則不改變它們在內存中的位置,否則交換它們之間的位置。 多重循環(huán)程序 如果在一個循環(huán)體中又包含了其他的循環(huán)程序,即循環(huán)中還套著循環(huán),這種程序稱為多重循環(huán)程序。首先全速運行程序,看所有數(shù)據(jù)是否傳到 40H 為起點的 8 個單元中,若不正確,再單步運行程序,看程序的每一步是否正確,若不正確,再反復修改,直到正確為止,若正確說明此程序編好了。 編完的程序,是否正確,要在仿真軟件中調試,調試方法在第二章中已作全面介紹再不多述。數(shù)據(jù)傳送程序的編寫都離不開循環(huán)程序,下面講解數(shù)據(jù)傳送程序的編寫方法。這時需要根據(jù)判斷循環(huán)條件的成立與否,或用建立標志的方法,控制循環(huán)程序的結果。 此程序也可寫成通用子程序形式: CLEAR: CLR A LOOP: MOVX DPTR, A INC DPTR ; 修改地址指針 DJNZ R2, LOOP ; 控制循環(huán) RET 使用時只要給定入口參數(shù)及被清零單元個數(shù),調用此子程序就行: ORG 0000H MOV DPTR, 20xxH MOV R2, 50 ACALL CLEAR SJMP $ CLEAR: CLR A LOOP: MOVX DPTR, A INC DPTR ; 修改地址指針 DJNZ R2, LOOP ; 控制循環(huán) RET END 入口參數(shù)是由實際需要而定,若要清 4000H 為起點的 100 個單元,只要改動前面兩句就行。下面舉例說明循環(huán)程序的使用。即至少執(zhí)行一次循環(huán)體。 循環(huán)程序一般由五部分組成: 初始化部分:為循環(huán)程序做準備。因為簡單程序,每條指令只執(zhí)行一次,而分支程序則根據(jù)條件的不同,會跳過一些指令,執(zhí)行另一些指令。在這一范圍內的 ASCII 碼減 30H 或 37H 就可以獲得對應的十六進制數(shù)。由于這是一條帶借位的減法指令,在執(zhí)行該指令前,先把進位位清零。 此例相反的過程是將字節(jié)拆開分成兩個半字節(jié):例如將 40H 單元中的內容拆開后分別送 41H、 42H 單元中。我們使用時用下面比較簡單的程序, ORG 0000H 開始 R0← 40H A←( R0) A 送( 42H) ( 40H) +( 41H)和送 A 返回 MOV 40H, 01H MOV 41H, 02H ACALL AD1 END 這樣使用起來很方便,向 40H、 41H 單元送數(shù),叫入口參數(shù)。 該程序若用 ADD A, direct 指令編程時,可寫出如下程序: ORG 0000H MOV 30H, 02 MOV A, 01 ADD A, 30H END 該程序若用 ADD A, Ri 指令編程時,可寫出如下程序: ORG 0000H MOV R0, 02 MOV A, 01 ADD A, R0 END 注意間接尋址方式的用法, Ri (i=0, 1) 即 Ri 只有 R0 和 R1 該程序若用 ADD A, data 指令編程時,可寫出如下程序: ORG 0000H MOV A, 01 ADD A, 02 END 從以上例子可見,同一個程序有多種編寫方法,思路不同編出來的程序不同,但結果都一樣,但我們認為最后一個程序較好。以下程序為了學習的方便都可全軟件仿真,每一個程序可在仿真軟件中檢驗它的正確性。本章將通過一些基本程序,介紹部分常用程序設計方法。 根據(jù)所用計 算機的指令系統(tǒng),按照已編制的程序框圖用匯編語言編制出源程序。除非用特殊指令讓它跳轉,不然它會在 PC 控制下執(zhí)行。在調用通用程序之前,先判斷是哪一種類型,再調相應的子程序。我們在看書的時候要適應這種思路。因為大部分程序總包含有判斷、比較等情況。用減法指令比較大小,會破壞累加器中的內容,故作減法前先保存累加器中的內容。 解: 正數(shù)補碼是其本身,負數(shù)的補碼是其反碼加 1。循環(huán)程序中的某些指 令可以反復執(zhí)行多次。 修改部分:每執(zhí)行一次循環(huán)體后,對指針作一次修改,使指針指向下一數(shù)據(jù)所在位置,為進入下一輪處理作準備。即先根據(jù)判斷結果,控制循環(huán)的執(zhí)行與否,有時可以不進入循環(huán)體就退出循環(huán)程序。 如:將 40H 為起點的 8 個單元清“ 0” ORG 0000H CLEAR: CLR A ; A 清 0 MOV R0, 40H ;確定清 0 單元起始地址 MOV R7, 08 ;確定要清除的單元個數(shù) LOOP: MOV R0, A ;清單元 INC R0 ;指向下一個單元 DJNZ R7, LOOP ;控制循環(huán) END 此程序的前 24 句為設定循環(huán)初值, 57 句為循環(huán)體。 程序如下: ORG 8000H SAD: MOV R0, 40H ;設數(shù)據(jù)指針 MOV R5, NUN ; 計數(shù)值 0AH→ R5 SAD1: MOV R2, 0 ; 和的高 8 位清零 MOV R3, 0 ; 和的低 8 位清零 LOOP: MOV A, R3 ; 取加數(shù) ADD A, R0 MOV R3, A ; 存和的低 8 位 JNC LOP1 INC R2 ; 有進位,和的高 8 位 +1 LOP1: INC R0 ; 指向下一數(shù)據(jù)地址 DJN
點擊復制文檔內容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1