版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、單片機原理及應(yīng)用,曾衛(wèi)華 地球物理與信息技術(shù)學院 測控教研室教五樓123 E-mail:,單片機原理及應(yīng)用課主要講授內(nèi)容,第一章:緒論;,第二章:MCS-51單片機的硬件結(jié)構(gòu);,第三章: MCS-51單片機的指令系統(tǒng)及匯編編程;,第四章: MCS-51單片機的擴展;,第五章: MCS-51單片機的C程序設(shè)計;,第六章:綜合實例;,3-13 定時/計數(shù)器,3-2 尋址方式,3-3 數(shù)據(jù)傳送類指令,3-4 算術(shù)運算類指令,3-9 算術(shù)運算程序,3-10 碼型轉(zhuǎn)換程序,3-11 多分支轉(zhuǎn)移程序,3-12 軟件延時程序,3-5 邏輯運算與循環(huán)類指令,3-1 指令格式及常用符號,3-6 控制轉(zhuǎn)移類指令,
2、3-14 中斷技術(shù),3-7 位操作類指令,3-15 串行接口,3-8 匯編語言源程序的格式和偽指令,第三章 MCS-51單片機的指令系統(tǒng)及匯編編程,一. 匯編語言指令格式 標號:操作助記符 操作數(shù)1,操作數(shù)2;注釋 換行表示一條指令結(jié)束。 例: LOOP: MOV A,#40H ;取參數(shù),1.標號:指令的符號地址。 2.操作助記符:指明指令功能。,3.操作數(shù):指令操作對象。 數(shù)據(jù)、地址、寄存器名及約定符號。 4.注釋:說明指令在程序中的作用。 操作助記符和操作數(shù)是指令主體。,MOV_move傳送 XCH_exchange交換 ANL_and logic與邏輯運算 XOR_exclusive o
3、r異或運算 MUL_Multiply乘法 RR_rotate right右循環(huán) SJMP_short jump短跳轉(zhuǎn) RET_return 子程序返回,3-1 指令格式及常用符號,二. 機器語言指令格式,操作碼 操作數(shù)1 操作數(shù)2 有單字節(jié)、雙字節(jié)和三字節(jié)指令。,匯編語言指令中操作碼和操作數(shù)是指令主體,稱為指令可執(zhí)行部分,指令表中可查出對應(yīng)指令代碼。,舉例: 匯編語言:機器語言: MOV A,R0E8H MOV R6,#32H7E 32H MOV 40H,#64H75 40 64H,11101000,三. 常用符號:指令描述約定,3-2 尋址方式,操作數(shù)類型 位(b) 位尋址區(qū)中的一位二進制數(shù)
4、據(jù) 字節(jié)(B) 8位二進制數(shù)據(jù) 字(W) 16位雙字節(jié)數(shù)據(jù),一.立即尋址 指令中給出實際操作數(shù)據(jù)(立即數(shù)),一般用于為寄存器或存儲器賦常數(shù)初值。 舉例: 8位立即數(shù): MOV A,#40H ;(A)40H 16位立即數(shù): MOV DPTR,#2100H ;(DPTR)2100H,例:設(shè)存儲器兩個單元的內(nèi)容如圖所示, 執(zhí)行指令 MOV A,40H 后,A = ?,二、直接尋址方式,指令操作數(shù)是存儲器單元地址,數(shù)據(jù)在存儲器單元中。 MOV A,40H;(A)(40H),直接尋址方式對數(shù)據(jù)操作時,地址是固定值,而地址所指定的單元內(nèi)容為變量形式。,56H,思考題:直接尋址方式指令和立即尋址方式指令的形
5、式有什么不同?,例:MOV A,R0;(A)(R0)設(shè)指令執(zhí)行前 A=20H,R0=40H,執(zhí)行指令后,A= ?,R0= ?,四、寄存器間接尋址方式 指令的操作數(shù)為寄存器名,寄存器中為數(shù)據(jù)地址。 存放地址的寄存器稱為間址寄存器或數(shù)據(jù)指針。 例:MOV A,R0;(A)(R0) 設(shè)指令執(zhí)行前 A=20H,R0=40H,地址為40H存儲器單元內(nèi)容如圖所示。執(zhí)行指令后, A= ? ,R0 = ? , (40H)= ?,34H,40H,34H,40H,40H,0100 0000,A,0010 0000,R0,0100 0000,R0,三、寄存器尋址方式指令操作數(shù)為寄存器名,數(shù)據(jù)在寄存器中。,五、變址尋
6、址方式 數(shù)據(jù)在存儲器中,指令給出的寄存器中為數(shù)據(jù)的基地址和偏移量。數(shù)據(jù)地址 = 基地址 + 偏移量。,例:MOVC A,A+DPTR;(A)(A)+(DPTR) 設(shè)指令執(zhí)行前 A=09H,DPTR=2000H,存儲器單元內(nèi)容如圖所示。執(zhí)行指令后,A= ? DPTR= ?,12H,2000H,六、位尋址方式 指令給出位地址。一位數(shù)據(jù)在存儲器位尋址區(qū)。 例: MOV C,00H;Cy(位地址00H或20H.0) 設(shè)指令執(zhí)行前 Cy=1,位地址40H存儲器單元如圖,執(zhí)行指令后,Cy= ?,0,相對尋址是以程序計數(shù)器PC的當前值(指讀出該2字節(jié)或3字節(jié)的跳轉(zhuǎn)指令后,PC指向的下條指令的地址)為基準,加
7、上指令中給出的相對偏移量 rel 形成目標地址的尋址方式 。 rel 是一個帶符號的8位二進制數(shù),取值范圍是128127,以補碼形式置于操作碼之后存放。,七、相對尋址,如: JC rel ; rel75H,小結(jié):,3-3數(shù)據(jù)傳送類指令,指令功能分類: 數(shù)據(jù)傳送、數(shù)據(jù)操作、布爾處理、程序控制。,數(shù)據(jù)傳送指令:用于實現(xiàn)寄存器、存儲器之間的 數(shù)據(jù)傳送。 內(nèi)部傳送指令:片內(nèi)數(shù)據(jù)存儲器數(shù)據(jù)傳送。 外部傳送指令:片外數(shù)據(jù)存儲器數(shù)據(jù)傳送。 交 換 指 令 :片內(nèi)數(shù)據(jù)存儲器數(shù)據(jù)傳送。 堆棧操作指令:片內(nèi)數(shù)據(jù)存儲器數(shù)據(jù)傳送。 查 表 指 令 :程序存儲器數(shù)據(jù)傳送。,一、內(nèi)部傳送指令:實現(xiàn)片內(nèi)數(shù)據(jù)存儲器中數(shù)據(jù)傳送
8、。指令格式: MOV 目的操作數(shù),源操作數(shù) 尋址方式:立即尋址、直接尋址、寄存器尋址、寄存 器間址。,習題1:找出配對指令,實現(xiàn)反向傳送。,指令機器碼: 11101rrr E8EF 11100101 n E5 n 1110011i E6、E7 01110100 d 74 d 10101rrr n 1010011i n 85 n1 n2 90 d1 d2,MOV A,Rn ;(A)(Rn),n=0-7 MOV A,n ;(A)(n),MOV A,Ri ;(A)(Ri),i=0,1 MOV A,#d ;(A)d,MOV Rn,n ;(Rn)(n)MOV Ri,n ;(Ri)(n) MOV n1,n
9、2 ;(n1)(n2),MOV DPTR,#d1d2 ;DPTRd1d2,例3-3-1:順序執(zhí)行下列指令序列,求每一步執(zhí)行結(jié)果。,MOV A,#30H MOV 4FH,A MOV R0,#20H MOV R0,4FH MOV 21H,20H,習題2:用兩種尋址方式實現(xiàn),將片內(nèi)RAM 60H單元的數(shù)據(jù)傳送給累加器A。,解: MOV A,#60H,MOV R0,#60H MOV A,R0,;(A)= 30H ;(4FH)= 30H ;(R0)= 20H ;(20H)= 30H ;(21H)= 30H,MOV R0,60H MOV A,R0,解: MOV A,60H,說明:,只有指令表中的指令才有對
10、應(yīng)指令代碼,計算機才能執(zhí)行。編程時,不能隨意創(chuàng)造發(fā)明指令。,1. 一條指令中不能同時出現(xiàn)兩個工作寄存器:非法指令:MOV R1,R2MOV R2,R0,2. 間址寄存器只能使用 R0、R1。 非法指令:MOV A,R2,3. SFR區(qū)只能直接尋址,不能用寄存器間接尋址。非法指令:MOV R0,#80HMOV A,R0,4. 指令表:B:指令字節(jié)數(shù),M:機器周期數(shù),二、外部傳送指令實現(xiàn)片外數(shù)據(jù)存儲器和A累加器之間的數(shù)據(jù)傳送。,指令格式:MOVX 目的操作數(shù),源操作數(shù) 尋址方式:片外數(shù)據(jù)存儲器用寄存器間址方式。 1. DPTR作16位數(shù)據(jù)指針,尋址64KB片外RAM空間MOVX A,DPTR;(A
11、)(DPTR) MOVX DPTR,A;(DPTR)(A) 2. Ri作8位數(shù)據(jù)指針,尋址256B片外RAM空間 MOVXA,Ri;(A)(P2)8+(Ri) MOVXRi,A ;(P2)8+(Ri) (A),例3-3-2:實現(xiàn)片外數(shù)據(jù)存儲器數(shù)據(jù)傳送(2000H)(2100H)。,MOV DPTR,#2000H MOVX A,DPTR MOV DPTR,#2100H MOVX DPTR,A,習題3:將片外RAM 0000H單元的數(shù)據(jù)傳送到片內(nèi)RAM的 60H單元。,; DPTR= 2000H ; A= X ; DPTR= 2100H ;(2100H)= X,片外數(shù)據(jù)存儲器不能直接尋址。下列為非
12、法指令: MOVX A,2000H MOVX 2100H,2000H,思考題:為什么對DPTR的數(shù)據(jù)傳送使用內(nèi)部傳送指令?,三、交換指令實現(xiàn)片內(nèi)RAM區(qū)的數(shù)據(jù)雙向傳送。,1. 字節(jié)交換指令 XCH A,Rn ;(A) (Rn) XCH A,Ri;(A) (Ri) XCH A,n ;(A) (n),習題4:將片內(nèi)RAM60H單元與61H單元的數(shù)據(jù)交換。,例:設(shè)A= 29H,執(zhí)行指令 XCH A,2AH后,A= ?(2AH)= ?,38H,29H,XCH 60H,61H 對嗎?,29 H,2. 半字節(jié)交換指令,XCHD A,Ri ;A03 (Ri)03 SWAP A ;A47 A03,例3-4-3
13、:將片內(nèi)RAM 2AH和2BH單元中的ASCII碼轉(zhuǎn)換成壓縮式BCD碼存入20H單元。,MOV A,#0,MOV R0,#2AH,MOV R1,#2BH,XCHD A,R0,SWAP A,XCHD A,R1,XCH A,20H,85H,R1,R0,習題:交換片內(nèi)RAM 40H單元和41H單元的低半字節(jié)。, 56H SP 02 ,四、堆棧操作指令 入棧指令:PUSH n ;(SP)(SP)+1,(SP)(n) 出棧指令:POP n ;(n)(SP),(SP)(SP)-1,例:設(shè) A=02H,B=56H,執(zhí)行下列指令后,SP= ?,A= ? ,B= ?, SP , SP 02 , SP 56H 0
14、2 , 56H 02H SP , SP 56H 02 , SP 56H 02 ,02H,A,00H,02H,00H,02H,02H,SBR: MOV SP,#30H ;設(shè)棧底 PUSH A PUSH B MOV A,#0 MOV B,#01 POP B POP A,五、查表指令 實現(xiàn)從程序存儲器讀取數(shù)據(jù)到A累加器,只能使用變址間接尋址方式。 多用于查常數(shù)表程序,可直接求取常數(shù)表中的函數(shù)值。,1DPTR為基址寄存器 MOVCA,A+DPTR ;(A)(A)+(DPTR) 查表范圍為 64KB 程序存儲器任意空間,稱為遠程查表指令 。 2PC為基址寄存器 MOVCA,A+PC;(A)(A)+(PC
15、) 常數(shù)表只能在查表指令后256B范圍內(nèi)。,例:查表法求Y=X2。設(shè)X(0X15)在片內(nèi)RAM的20H單元中,要求查表求Y,存入片內(nèi)RAM 21H單元。,1)ORG 1000H SQU:MOV DPTR,#TAB;確定表首地址(基地址) MOV A,20H;取X(偏移量 MOVC A,A+DPTR;查表求Y=X2 MOV 21H,A;保存Y RET;子程序結(jié)束 ;其它程序段 ORG 3000H;常數(shù)表格首地址 TAB:DB 00,01,04,09,225;平方表,2)指令地址 源程序 ORG 1000H ;程序起始地址 1000H SQU: MOV A,20H;取X 1002H ADD A,#
16、3 ;修正偏移量 1004H MOVC A,A+PC ;查表求Y=X2 1005H MOV 21H,A;存結(jié)果 1007H RET ;子程序結(jié)束 1008H TAB: DB 00,01,04 ;平方表 100BH DB 09,225,思考題:當0X255時,如何用查表法編程求Y=X2。,例:查表法求Y=X2。設(shè)X(0X15)在片內(nèi)RAM的20H單元中,要求將查表求Y,存入片內(nèi)RAM21H單元。,習題:找出指令錯誤并改正:,1MOV A,#1000H;A1000H 2MOVX A,1000H;A(1000H)片外RAM 3MOVC A,1000H;A(1000H)片外ROM 4MOVX 60H,
17、A;片外RAM(60H)A 5MOV R0,60H;片內(nèi)RAM:(61H)(60H) MOV 61H,R0 6. XCH R1,R2;R1R2 7. MOVX DPTR,#2000H;DPTR2000H 8. MOVX 60H,DPTR;片內(nèi)RAM片外RAM,3-4算術(shù)運算類指令,與數(shù)據(jù)傳送指令不同,多數(shù)算術(shù)運算指令會影響標志位的狀態(tài),即CPU執(zhí)行算術(shù)運算指令后,根據(jù)數(shù)據(jù)操作情況自動設(shè)置標志位的狀態(tài)。,一、狀態(tài)標志,MCS-51 的程序狀態(tài)字寄存器 PSW 為標志寄存器。其格式如下:,1標志位(自動設(shè)置狀態(tài)),1)Cy:進位標志位 保存運算后最高位的進位/借位狀態(tài),當有進位/借位,Cy=1,否
18、則Cy=0。 2)AC:輔助進位標志位 保存低半字節(jié)的進位/借位狀態(tài),當D3產(chǎn)生進位/借位,AC=1,否則AC=0。用于十進制調(diào)整。 3)OV:溢出標志位 OV=Cy7Cy6,補碼運算產(chǎn)生溢出OV=1,否則OV=0。 4)P:奇偶標志位 反映累加器A中數(shù)據(jù)的奇偶性。當1的個數(shù)為奇數(shù),P=1,否則P=0。,2用戶選擇位(編程設(shè)置狀態(tài)),1)F0:用戶自定義標志位。2)RS1、RS0: 工作寄存器組選擇位。復位時,PSW=00H,例:復位后,設(shè)置使用工作寄存器2組,其余標志位不變。,解: MOV PSW,#,18H,1)不帶進位加法:ADD A,源操作數(shù) ADD A,R2 ;(A)(A)+(R2)
19、,影響Cy、OV、AC、P 例1:A=3BH,PSW=0,執(zhí)行指令 ADD A,#3BH 求:A= ,Cy= ,OV= ,AC= ,P= , PSW= ?,二、算術(shù)運算指令完成片內(nèi) RAM 和 A 中數(shù)據(jù)的加減乘除運算。,(一)加減指令 1.加法指令,0011 1011 + 0011 1011 0111 0110,76H 0 0 1 1,01000001= 41H,1001 1010 1110 0011 + 0 1 0111 1101,2)帶進位加法: ADDC A,源操作數(shù) ADDC A,R2 ;(A)(A)+(R2)+Cy,影響Cy、OV、AC、P,7DH 1 1 0 0,例2:A= 9A
20、H,R2= E3H,PSW= 0,執(zhí)行指令 ADDC A,R2 后求: A= ,Cy= ,OV= ,AC= ,P= , PSW= ?,10000100 = 84H,帶進位加法指令A(yù)DDC用于多字節(jié)運算,例:設(shè)雙字節(jié)數(shù) X 存在片內(nèi)RAM 41H、40H單元,Y存在42H、43H單元,編程求 Z=X+Y,并存入片內(nèi)RAM單元44H、45H、46H。,ADDS:MOV A,40H ADD A,42H MOV 44H,A MOV A,41H ADDC A,43H MOV 45H,A MOV A,#0 ADDC A,#0 MOV 46H,A RET,;取被加數(shù)低字節(jié) ;加上加數(shù)低字節(jié) ;保存和的低字節(jié)
21、 ;取被加數(shù)高字節(jié) ;加上加數(shù)高字節(jié) ;保存和的高字節(jié) ;求高字節(jié)進位 ;子程序結(jié)束,十進制加法指令: ADD A,源操作數(shù) DA A 帶進位十進制加法指令: ADDC A,源操作數(shù) DA A,作業(yè):BCD碼加法編程。 設(shè)X、Y為4位壓縮BCD碼,求 Z=X+Y。,3)BCD調(diào)整指令: DAA; 對BCD碼加法結(jié)果進行調(diào)整,2減法指令SUBB A,源操作數(shù);帶借位減法指令,SUBB A,R2;(A)(A)-(R2)-Cy, ;影響Cy、OV、AC、P,00 0 0 0 0,習題:編程求雙字節(jié)減法。設(shè)X、Y存在片內(nèi) RAM 40H起始單元,計算 Z=X-Y 。,例:A= 5AH,R2= 5AH,
22、Cy= 0,執(zhí)行下列指令 SUBB A,R2 求:A= ,Cy= ,OV= ,P= ,AC= 。,3. 增量、減量指令,INC 單操作數(shù) 如:INC R2 ;(R2)(R2)+1 DEC 單操作數(shù) 如: DEC R2 ;(R2)(R2)-1 INC DPTR;(DPTR)(DPTR)+1 不影響標志位狀態(tài)。,注意:沒有指令 DEC DPTR 可用指令 DEC DPL 代替否?,習題:編程完成對DPTR的減一操作.,例:A= 246(F6H),B= 13(0DH),執(zhí)行指令 DIV AB 后 求:A= ,B= ,Cy= ,OV= ,P= ? 解: 246 13 = 18(12H),余數(shù)= 12(
23、0CH)。,4.乘除指令,MUL AB;BAAB,Cy0, ;當積高字節(jié)B=0,OV0;B0,則OV1,例:A= 96(60H), B= 192(C0H),執(zhí)行指令 MUL AB 后, 求:A= ,B= ,Cy= ,OV= ,P= ? 解: 96 192 = 18432(4800H),00H 48H 0 1 0,12H 0CH 0 0 0,思考題:如何實現(xiàn)多字節(jié)數(shù)據(jù)的乘除運算。,DIV AB ;AB,A商,B余數(shù),Cy0, ;當除數(shù)B=0,OV1;B0,則OV0,3-5 邏輯運算與循環(huán)類指令,一.單操作數(shù)指令(A累加器為操作數(shù)) 1. A清0指令: CLR A ;(A)0 2. A取反指令:C
24、PL A ;(A)/(A),3. 循環(huán)移位指令: 1)8位循環(huán)指令: RL A ;A循環(huán)左移一位 RR A ;A循環(huán)右移一位,2)9位循環(huán)指令: RLC A;帶Cy循環(huán)左移一位 RRC A;帶Cy循環(huán)右移一位,例3-4-7:設(shè) A= 11000101 ,Cy= 0,分別執(zhí)行下列單條指令:CPL A 求:A= ,Cy= RL A RLC A,00111010 0,10001011 0,10001010 1,用9位循環(huán)指令實現(xiàn)多字節(jié)移位例:編程將寄存器 R6R5 中的雙字節(jié)數(shù)X左移一位。,CLR C MOV A,R5 RLC A MOV R5,A MOV A,R6 RLC A MOV R6,A,;
25、Cy=0, 設(shè) R6= 55H ,R5= AAH,;R6=01010101,R5=10101010,Cy=0,;R6=01010101,R5=01010100,Cy=1,;R6=10101011,R5=01010100,Cy=0,思考題:如何將寄存器R6R5中的雙字節(jié)數(shù)X右移一位。,二.雙操作數(shù)邏輯運算指令(對位邏輯運算):ANL、ORL、XRL,習題1:如何將累加器A中的數(shù)據(jù)高4位清0,低位不變?習題2:如何將寄存器R2中的數(shù)據(jù)奇數(shù)位取反,偶數(shù)位不變?,例3-5-8 A=01B,表示隨機狀態(tài),為1或0,執(zhí)行下述一組指令執(zhí)行后A的值如何? XRL A,#0C0H;將累加器A的內(nèi)容D7、D6取反
26、 ORL A,#03H ;將累加器A的內(nèi)容D1、D0置1 ANL A,#0E7H;將累加器A的內(nèi)容D4、D3清0 解 :執(zhí)行上述指令后,A=100011B。,3-6 控制轉(zhuǎn)移類指令 轉(zhuǎn)移指令通過改寫PC的當前值,從而改變CPU執(zhí)行程序的順序,使程序發(fā)生跳轉(zhuǎn)。,按轉(zhuǎn)移條件分類: 1)無條件轉(zhuǎn)移: 執(zhí)行無條件轉(zhuǎn)移指令,程序無條件轉(zhuǎn)移到指定處。 2)條件轉(zhuǎn)移: 指令中給出轉(zhuǎn)移條件,執(zhí)行指令時,先測試條件,若滿足條件,則程序發(fā)生轉(zhuǎn)移,否則,仍順序執(zhí)行程序。,按轉(zhuǎn)移方式分類:,1) 絕對轉(zhuǎn)移:指令給出轉(zhuǎn)移目的的絕對地址 nn,執(zhí)行指令后,PCnn。,2) 相對轉(zhuǎn)移:指令給出轉(zhuǎn)移目的與轉(zhuǎn)移指令的相對偏移量
27、e,執(zhí)行指令后,PCPC + e 。,例:地址源程序 1000H LJMP 2000H 1003H 2000H ;轉(zhuǎn)移目的指令,例:地址 源程序 1000H SJMP 02 1004H ;轉(zhuǎn)移目的指令,一.無條件轉(zhuǎn)移指令 1.長轉(zhuǎn)移指令:LJMP nn ;PC nn 指令機器碼: 02 nnH nnL指令轉(zhuǎn)移范圍:64KB,2.絕對轉(zhuǎn)移指令: AJMP pn;PCPC+2;PC100pn100 ;PC1511不變 指令機器碼:pn108 00001,pn70 指令轉(zhuǎn)移范圍:2KB 轉(zhuǎn)移時要求轉(zhuǎn)移前后保持 PC1511不變。,相對偏移量 e 的計算式: e = 目的指令地址 -(轉(zhuǎn)移指令地址+指
28、令字節(jié)數(shù)) = 目的地址 - PC當前值,3.短轉(zhuǎn)移指令: SJMP e ;PCPC+2,PCPC+e 指令機器碼: 80H,e 相對偏移量 e為8位補碼。 指令轉(zhuǎn)移范圍:前128后127字節(jié),編程時,用標號代替轉(zhuǎn)移目的地址,轉(zhuǎn)移指令的操作數(shù)交給匯編程序計算。LJMP NEXT AJMP NEXT SJMP NEXT NEXT:,例1:計算轉(zhuǎn)移指令的相對偏移量 e ,并判斷是否超出轉(zhuǎn)移范圍。,例2:求原地踏步指令的指令代碼 HERE: SJMP HERE,求出指令代碼為:80H FEH 明確轉(zhuǎn)移范圍?,相對偏移量 = 2150H -(2130H+2)= 001EH, 只取低8位:e = 1EH
29、 指令機器碼:80 1E H,指令地址 源程序2130H SJMP NEXT 2150H NEXT:MOV A,R2,習題:計算程序中轉(zhuǎn)移指令的相對偏移量 e ,并判斷是否超出轉(zhuǎn)移范圍。地址 源程序2130H LOOP: 21B0H SJMP LOOP,4間接轉(zhuǎn)移指令(多分支轉(zhuǎn)移指令) JMP A+DPTR. ;PCA+DPTR 指令機器碼 73H,指令轉(zhuǎn)移范圍64KB。,KEY: MOV DPTR,#KTAB MOV A,40H ADD A,A JMP A+DPTR KTAB: AJMP FUNC0 AJMP FUNC1 FUNC0: FUNC1: ,應(yīng)用:處理功能鍵。 要求不同功能鍵執(zhí)行不
30、同程序段。設(shè)每個功能鍵對應(yīng)一個鍵值 X(0XFH)。 設(shè)X已存入片內(nèi)RAM的40H單元中。 若X=0,則執(zhí)行程序段FUNC0 若X=1,則執(zhí)行程序段FUNC1 。,二條件轉(zhuǎn)移指令,1. 判零轉(zhuǎn)移指令JZ e ;PCPC+2, ;若A=00H,PCPC+e(轉(zhuǎn)移), ;若A00H,PC不變(不轉(zhuǎn)移),條件轉(zhuǎn)移指令形成程序的分支,賦予計算機判斷決策能力轉(zhuǎn)移條件:1)標志位的狀態(tài) 2)位地址中的狀態(tài),JNZ e ;PCPC+2,若A00H, ;PCPC+ e(轉(zhuǎn)移) ;若A=00H,PC不變(不轉(zhuǎn)移),2.判Cy轉(zhuǎn)移指令 JC e ;Cy=1則轉(zhuǎn)移,Cy=0不轉(zhuǎn)移 JNC e;Cy=0則轉(zhuǎn)移,Cy=
31、1不轉(zhuǎn)移,3.判位轉(zhuǎn)移指令 JB b,e ;(b)=1轉(zhuǎn)移,否則不轉(zhuǎn)移JNB b,e ;(b)=0轉(zhuǎn)移,否則不轉(zhuǎn)移,4. 判位清0轉(zhuǎn)移指令:JBC b,e ;(b)=1轉(zhuǎn)移,且(b)0,否則不轉(zhuǎn)移,5. 比較不相等轉(zhuǎn)移指令: CJNE 操作數(shù)1,操作數(shù)2,e,CJNE A,n,e ;PCPC+3 ;若A(n),則PCPC+e ;且當A(n),Cy=0,當A(n),Cy=1; ;若A =(n),PC不變,且Cy=0。,相當于兩個操作數(shù)相減,僅影響標志狀態(tài),不保存結(jié)果,6循環(huán)轉(zhuǎn)移指令: DJNZ 操作數(shù),e DJNZ R2,e ;PCPC+2,R2R2-1 ;若R20,PCPC+e, ;若R2=0
32、,PC不變。,例:用于循環(huán)結(jié)構(gòu)程序。設(shè)要求程序循環(huán)執(zhí)行100次 MOV R2,#100 ;設(shè)循環(huán)計數(shù)器初值 LOOP: ;多次循環(huán)程序段 DJNZ R2,LOOP;循環(huán)控制 ;循環(huán)結(jié)束,習題:當循環(huán)計數(shù)器初值為0,循環(huán)次數(shù)有多少?,三、子程序調(diào)用和返回指令,子程序調(diào)用和返回指令也使程序發(fā)生轉(zhuǎn)移。,(一)長調(diào)用指令 LCALL nn ;PCPC+3, ;SPSP+1,(SP)PCL,SPSP+1,(SP)PCH;PCnn nn為子程序起始地址,編程時可用標號代替。 指令機器碼:12 nnH nnL 指令調(diào)用范圍:64KB,子程序調(diào)用過程:,與轉(zhuǎn)移指令不同:轉(zhuǎn)移時, 先用堆棧保存當前地址,(二)絕
33、對調(diào)用指令 ACALL pn ;PCPC+2 ;SPSP+1,(SP)PCL,SPSP+1 ; (SP)PCH , PC100pn100 ;PC1511不變 pn為子程序首地址 指令機器碼:pn10810001,pn70 指令調(diào)用范圍 2KB。,(三)子程序返回指令 RET ;PCH(SP),SPSP-1,PCL(SP),SPSP-1 指令機器碼:22H RET指令從堆棧彈出保存的PC地址,實現(xiàn)子程序返回。,20H 92H,21H 53H,SP,SP,SP,SP,SP,PC,2000H,208FH,2092H,2100H,2150H,2153H,2200H,2250H,2251H,2153H,
34、2092H,21FFH,2200H,SP,SP,SP,SP,SP,SP,SP,SP,MAIN:MOV SP,#30H;設(shè)置棧底 LCALL SUB ;調(diào)用子程序 SUB: ;子程序段 RET ;返回主程序,例:子程序嵌套,注意:1.子程序起始指令要使用標號,用作子程序名。 2. 執(zhí)行返回指令RET之前,保證棧頂內(nèi)容為主程序返回地址,以便正確返回主程序。,常用格式: MAIN:;主程序 LCALL SUBR;調(diào)用SUBR SUBR:;子程序首地址 RET;子程序返回,3-7 位操作類指令 對片內(nèi)RAM中位尋址區(qū)操作。位累加器Cy和位地址b。,一位傳送 MOV C,b ;Cy(b) MOV b,C
35、 ;(b)Cy,例:將位地址20H的一位數(shù)傳送到位地址30H中: MOV C,20H MOV 30H,C 二位清0、置1、取反:CLR、SETB、CPL: CLR C ;Cy0, CLR 40H;(位地址40H) 0,三邏輯運算:ANL、ORL: ANL C,40H ;CC(40H)ANL C,/40H ;CC/(40H),例:設(shè) Cy=1,(位地址40H)=1,執(zhí)行指令 ANL C,/40H 后, Cy= ? , (位地址40H)= ?,位地址表示法:位地址 40H,位寄存器 F0,字節(jié)加位 ACC.0,0,習題:設(shè)累加器A中數(shù)據(jù)為 29H,Cy=0,執(zhí)行指令 ORL C,0E3H 后,Cy
36、= ?,1,3.判位轉(zhuǎn)移指令 JB b,e ;(b)=1轉(zhuǎn)移,否則不轉(zhuǎn)移JNB b,e ;(b)=0轉(zhuǎn)移,否則不轉(zhuǎn)移,4. 判位清0轉(zhuǎn)移指令:JBC b,e ;(b)=1轉(zhuǎn)移,且(b)0,否則不轉(zhuǎn)移,四、位條件轉(zhuǎn)移指令,1.JC e ;Cy=1則轉(zhuǎn)移,Cy=0不轉(zhuǎn)移2.JNC e;Cy=0則轉(zhuǎn)移,Cy=1不轉(zhuǎn)移,3-8 匯編語言源程序的格式和偽指令,匯編語言程序: 用匯編語言編寫的、完成特定功能的指令序列。 匯編程序: 能將匯編語言源程序轉(zhuǎn)換成機器語言目標程序的系統(tǒng)軟件。,匯編語言程序到機器語言程序的轉(zhuǎn)換過程稱為匯編。 1.手工匯編:人工查指令表匯編。用于設(shè)計短小程序或調(diào)試程序的場合。 2.機
37、器匯編:用匯編程序進行匯編。,源程序使用機器匯編要考慮匯編程序的約定,1)按指令格式和語法規(guī)則編寫程序。 常數(shù)的表示: 十進制數(shù):20 十六進制數(shù):87H,0F0H 二進制數(shù):01011001B 字符:H 字符串:“Hello”。 2)使用偽指令提供匯編信息。,匯編的主要任務(wù):,1)確定程序中每條匯編語言指令的指令機器碼。 2)確定每條指令在存儲器中的存放地址。 3)提供錯誤信息。 4)提供目標執(zhí)行文件(*.BIN/*.HEX)和列表文件(*.LST)。,一. 匯編語言指令類型 1.機器指令: 指令系統(tǒng)中的全部指令,每條指令有對應(yīng)的機器代碼。 2. 偽指令: 匯編控制指令,僅提供匯編信息,沒有
38、指令代碼。,一. 匯編語言指令類型,3. 宏指令: 宏匯編功能:將需要多次反復執(zhí)行的程序段定義成一個宏指令名(宏定義),編程時,可在程序中使用宏指令名來替代一段程序(宏調(diào)用)。,宏定義過程: 宏指令名 MACRO 形式參數(shù) ;定義程序段 ENDM 宏調(diào)用過程: 宏指令名 實際參數(shù) 宏指令名 實際參數(shù),二匯編控制指令(偽指令)常用偽指令及其功能:,1. ORG起始地址偽指令:指明程序和數(shù)據(jù)塊起始地址。 指令地址 機器碼源程序 ORG 2000H 2000H 78 30 MAIN:MOV R0,#30H 2002H E6 MOV A,R0 ORG 3000H 3000H 23 DB 23H,100
39、,A 3001H 64 3002H 41,2.DB 定義字節(jié)型常數(shù)偽指令。 例: DB 12H,100,A,4. EQU 等值偽指令。為標號或標識符賦值。 X1 EQU 2000H X2 EQU 0FH MAIN:MOV DPTR,#X1 ADD A,#X2,5. END 結(jié)束匯編偽指令。 例:START: END START,3. DW 定義字型常數(shù)偽指令。例: DW 1234H,5678H,三、匯編語言程序設(shè)計步驟,(一).確定方案和計算方法 (二).了解應(yīng)用系統(tǒng)的硬件配置、性能指標。 (三).建立系統(tǒng)數(shù)學模型,確定控制算法和操作步驟。 (四).畫程序流程圖 表示程序結(jié)構(gòu)和程序功能,(五)
40、. 編制源程序 1.合理分配存儲器單元和了解I/O接口地址。 2.按功能設(shè)計程序,明確各程序之間的相互關(guān)系。 3.用注釋行說明程序,便于閱讀和修改調(diào)試和修改。,(六).程序仿真調(diào)試,例:雙字節(jié)變補程序(設(shè)數(shù)據(jù)在R4R5中): MOV A,R5;取低字節(jié) CPL A ADD A,#1;低字節(jié)變補 MOV R5,A MOV A,R4;取高字節(jié) CPL A ADDC A,#0;高字節(jié)變補 MOV R4,A,四、常用程序結(jié)構(gòu): 直線程序、分支程序、循環(huán)程序、子程序,一、 直線程序 直線程序又稱簡單程序,程序走向只有一條路徑。,例4-3-4 壓縮式BCD碼分解成為單字節(jié)BCD碼。,MOV R0,#40H
41、;設(shè)指針 MOV A,R0;取一個字節(jié) MOV R2,A;暫存 ANL A,#0FH;清0高半字節(jié) INC R0 MOV R0,A ;保存數(shù)據(jù)個位 MOV A,R2 SWAP A ;十位換到低半字節(jié) ANL A,#0FH INC R0 MOV R0,A;保存數(shù)據(jù)十位,十 個,二、單重分支程序由條件轉(zhuǎn)移指令構(gòu)成程序判斷框部分,形成程序分支結(jié)構(gòu)。,一個判斷決策框,程序有兩條出路。,例 求R2中補碼絕對值,正數(shù)不變,負數(shù)變補。 MOV A,R2 JNB ACC.7,NEXT;為正數(shù)? CPL A ;負數(shù)變補 INC A MOV R2,A NEXT:SJMP NEXT ;結(jié)束,例:行李計價:當G5,M
42、=G3; 當G5,M=G3+(G-5)(5-3),FRT: MOV A,40H;取行李重量計價單位G MOV R3,A MOV B,#03H;M=G3 MUL AB MOV R2,A;暫存3G MOV A,R3;取回G CJNE A,#05H,L1;G5 ? WWW: MOV A, R2 SJMP WETC L1:JC WWW;是,轉(zhuǎn)至WWW SUBB A,#05H;否則M=3G+2(G-5) RLC A ADD A,R2 WETC:MOV 41H,A ;存結(jié)果M RET,三、循環(huán)程序 包含多次重復執(zhí)行的程序段,循環(huán)結(jié)構(gòu)使程序緊湊。,循環(huán)程序的構(gòu)成,各個環(huán)節(jié)任務(wù): 一初始化部分 循環(huán)準備工作。
43、如:清結(jié)果單元、設(shè)指針、設(shè)循環(huán)控制變量初值等。,二循環(huán)體 循環(huán)工作部分: 需多次重復處理的工作。 循環(huán)控制部分: 1.修改指針和循環(huán)控制變量。 2.檢測循環(huán)條件:滿足循環(huán)條件,繼續(xù)循環(huán),否則退出循環(huán)。 三.結(jié)束部分 處理和保存循環(huán)結(jié)果。 允許0次循環(huán)的循環(huán)結(jié)構(gòu):在循環(huán)工作之前檢測循環(huán)條件。,(一)、 單重循環(huán)簡單循環(huán)結(jié)構(gòu):循環(huán)體中不套循環(huán)。,例:求n個單字節(jié)數(shù)據(jù)的累加,設(shè)數(shù)據(jù)串已在43H起始單元,數(shù)據(jù)串長度在42H單元,累加和不超過2個字節(jié)。,SUM:MOVR0,#42H;設(shè)指針 MOVA,R0 MOVR2,A ;循環(huán)計數(shù)器n CLRA ;結(jié)果單元清0 MOVR3,A ADD1:INCR0 ;
44、修改指針 ADDA,R0 ;累加 JNC NEXT ;處理進位 INCR3 ;有進位,高字節(jié)加1 NEXT:DJNZ R2,ADD1 ;循環(huán)控制:數(shù)據(jù)是否加完? MOV40H,A ;循環(huán)結(jié)束,保存結(jié)果 MOV41H,R3 RET,循環(huán)控制方法:計數(shù)控制、特征標志控制。,1.計數(shù)控制: 設(shè)循環(huán)計數(shù)器,控制循環(huán)次數(shù)。正計數(shù)和倒計數(shù)兩種方式。 例:為一串7位ASCII碼數(shù)據(jù)的D7位加上奇校驗,設(shè)數(shù)據(jù)存放在片外RAM的2101H起始單元,數(shù)據(jù)長度在2100H單元。,MOV DPTR,#2100H MOVX A,DPTR MOV R2,A NEXT:INC DPTR MOVX A,DPTR ORL A,
45、#80H JNB P,PASS MOVX DPTR,A PASS:DJNZ R2,NEXT DONE:SJMP DONE,2.特征控制:設(shè)定循環(huán)結(jié)束標志實現(xiàn)循環(huán)控制。,例:找正數(shù)表最小值。正數(shù)表存在片外RAM中以LIST為起始單元,用-1作為結(jié)束標志。,START:MOVDPTR,#LIST ;數(shù)表首地址 MOVB,#127 ;預(yù)置最小值 NEXT: MOVX A,DPTR ;取數(shù) INCDPTR ;修改指針 CJNE A,#-1,NEXT1;是否為數(shù)表結(jié)尾? SJMP DONE ;循環(huán)結(jié)束 NEXT1:CJNE A,B,NEXT2 ;比較 NEXT2:JNCNEXT MOVB,A ;保存較小
46、值 SJMP NEXT DONE: SJMP DONE,習題:統(tǒng)計一班考試為100分和不及格人數(shù),成績單在41H起始單元。,(二)、 多重循環(huán)循環(huán)體中套循環(huán)結(jié)構(gòu)。以雙重循環(huán)使用較多。,例將內(nèi)存一串單字節(jié)無符號數(shù)升序排序。 步驟: 每次取相鄰單元的兩個數(shù)比較,決定是否需要交換數(shù)據(jù)位置。 第一次循環(huán),比較N-1次,取到數(shù)據(jù)表中最大值。 第二次循環(huán),比較N-2次,取到次大值。 第N-1次循環(huán):比較一次,排序結(jié)束。,SORT: MOV A,#N-1;N個數(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:
47、 MOV A,R0;取二數(shù) MOV B,A INC R0 MOV A,R0 CJNE A,B,L1;比較 L1: JNC UNEX;AB,不交換 DEC R0;否則交換數(shù)據(jù) XCH A ,R0 INC R0 MOV R0,A UNEX: DJNZ R3,LOOP2;內(nèi)循環(huán)結(jié)束? DJNZ R4,LOOP1;外循環(huán)結(jié)束? RET,四、子程序子程序:能完成某項特定功能的獨立程序段,可被反復調(diào)用。,1、子程序設(shè)計 一子程序入口用標號作為子程序名。 二調(diào)用子程序之前設(shè)置好堆棧。 三用返回指令RET結(jié)束子程序,并保 證堆棧棧頂為調(diào)用程序的返回地址。 四.子程序嵌套須考慮堆棧容量。 五.提供足夠的調(diào)用信息
48、: 如:子程序名、子程序功能、入口參數(shù)和出口參數(shù)、子程序占用的硬件資源、子程序中調(diào)用的其他子程序名。,2、子程序的類型按子程序與主程序之間傳遞參數(shù)的方式分類。,入口參數(shù):調(diào)用子程序之前,需要傳給子程序的參數(shù)。 出口參數(shù):子程序送回調(diào)用程序的結(jié)果參數(shù)。,選用不同的參數(shù)傳遞方式。 1.寄存器傳送參數(shù) 2.存儲器傳送參數(shù) 3.堆棧傳送參數(shù),設(shè)計子程序應(yīng)滿足通用性的要求,不針對具體數(shù)據(jù)編程。 如:1.子程序功能為求單字節(jié)數(shù)的立方: AA3,入口參數(shù)和出口參數(shù)為A。 2.子程序功能為求單字節(jié)數(shù)的n次方:(41H)(42H)(40H)A,入口參數(shù)為(40H)和A,出口參數(shù)為(42H)(41H)。,例:將R
49、4R5R6中三個字節(jié)數(shù)據(jù)對半分解,變成6個字節(jié), 存入顯示緩沖區(qū)(DISMEM0DISMEM5)。,1)子程序UFOR1的功能:將A累加器中單字節(jié)數(shù)據(jù),對半分解成兩個字節(jié),存入R0所指向的相鄰兩個單元 UFOR1:MOV R0,#0 XCHD A,R0 ;保存低半字節(jié) INC R0 ;修改指針 MOV R0,#0 SWAP A XCHD A,R0 ;保存高半字節(jié) RET 2)調(diào)用子程序UFOR1之前,將待分解的內(nèi)容送A,存放地址送R0。,例 比較兩個數(shù)據(jù)串是否完全相等,若完全相等,A=0;否則A=FFH。,PMT:MOVR2,A;設(shè)數(shù)串長度 CHC:MOVA,R0;各取數(shù)串中的一個數(shù) MOV4
50、2H,R1 CJNE A,42H,NOM;是否相等?不相等轉(zhuǎn)移 INCR0;相等,修改指針 INCR1 DJNZ R2,CHC;全部比較完? MOVA,#0;完全相等 SJMP PEND NOM:MOVA,#0FFH;不完全相等 PEND:RET,例:查表求出數(shù)據(jù)的ASCII碼,再以字符形式輸出。,1)子程序HEXASC功能:取出堆棧中數(shù)據(jù),查表將低半字節(jié)轉(zhuǎn)換成ASCII碼送累加器A。 2)分別將待轉(zhuǎn)換數(shù)據(jù)入棧,然后調(diào)用子程序HEXASC。,MOV SP,#30H PUSH 40H ;入口參數(shù)入棧 LCALL HEXASC POP A HEXASC:DEC SP ;跳過返回地址 DEC SP
51、POP A ;取入口參數(shù) ;查表求ASCII碼 PUSH A ;保存出口參數(shù) INC SP ;指向返回地址 INC SP RET DB 0,1, ;ASCII碼表,3-9 算術(shù)運算程序一、 多字節(jié)加減運算程序,1.多字節(jié)加法子程序,Z=X+Y。 ADDS:CLRC LOOP:MOVA,R0 ADDC A,R1 ;加一字節(jié) MOVR0,A ;存和一字節(jié) INCR0 ;修改指針 INCR1 DJNZ R2,LOOP ;全部字節(jié)加完? RET,習題1 編寫十進制多字節(jié)加法子程序,Z=X+Y。 習題2 編寫多字節(jié)減法子程序,Z=X-Y。 思考題 修改程序使運算結(jié)果保存到其他存儲單元。,二、多字節(jié)無符號
52、數(shù)乘除運算,相加計算多字節(jié)乘法程序,步驟: 1.部分積清零。 2.檢測乘數(shù)各位, 為1則部分積對位加被乘數(shù),否則加0。 3.對位方法:被乘數(shù)左移或部分積右移。,初值: 0 00 Cy R4R5 右移R6R7并檢測Cy + R2R3 當Cy=1 Cy R4R5 得部分積并右移對位 乘積最后右移一次,110 101 110 000 + 110 11110,例:雙字節(jié)相乘 R2R3R6R7R4R5R6R7 解:部分積清零,右移檢測乘數(shù),決定部分積是否加被乘數(shù),部分積右移對位。,循 環(huán) 16 次,相減計算多字節(jié)除法程序,步驟:1.對齊高位被除數(shù)試減除數(shù)。2.若夠減商上1,不夠減商上0且恢復余數(shù)。3.余
53、數(shù)左移或除數(shù)右移對位。4.循環(huán)重復前3步,直至取夠相應(yīng)位數(shù)的商。,例R2R3R4R5R6R7R4R5 (余數(shù)R2R3) 解1.判斷R2R3R6R7?使商不大于16位。 2.被除數(shù)左移1位,試減除數(shù)。 3.若夠減,商加1并保留余數(shù)。,10111 0101/ 01110110 0101 0100 0101 1001 0101 1001 0101 1000 0101 011,CyR2R3R4R50 - R6R7 + 1 夠減 R2R3 不夠減恢復余數(shù),循環(huán)16次,3-10 碼型轉(zhuǎn)換程序(一)十六進制數(shù)轉(zhuǎn)換為ASCII碼,(二)ASCII碼轉(zhuǎn)換為十六進制數(shù),09的ASCII碼:3039H,AF的ASC
54、II碼:4146H。,HASC:CJNE A,#0AH,NAHEX:CLR C N: JNC N1SUBBA,#30H ADD A,#30HCJNEA,#0AH,N SJMPSEN:JC N1 N1:ADD A,#37HSJMP AE SE:RETN1: SUBB A,#11H CJNE A,#06H,N2 N2:JNCERR ADDA,#0AH SJMP AE ERR:MOVA,#0FFH AE:RET,(三)BCD碼與二進制數(shù)之間的轉(zhuǎn)換有乘法和除法兩種轉(zhuǎn)換方式。,1BCD碼轉(zhuǎn)換為二進制數(shù) D = dn-110n-1+dn-210n-2+d1101+d0100 =( dn-110+dn-2
55、)10 +dn-3)10 + d1) 10+ d0 “整數(shù)十翻二”:從最高位開始,按二進制運算法則循環(huán)“乘十加次低位”:B=B10+bi 。,2二進制數(shù)轉(zhuǎn)換為BCD碼B = bn-12n-1 + bn-22n-2 + + b121 + b020 =( bn-12 + bn-2 )2 + bn-3)2 + b1)+ b0,“整數(shù)二翻十”:從最高位開始,按十進制運算法則循環(huán)“乘二加次低位”:D=D2+di 。,除法轉(zhuǎn)換式: bn-12n-1 + bn-22n-2+ +b0 = dm-110m-1 + dm-210m-2+ +d0 兩邊同時除基數(shù),兩邊的整數(shù)或小數(shù)應(yīng)該分別相等。 除基數(shù),取出1位余數(shù)
56、,得到的商繼續(xù)除基數(shù)取余數(shù)。循環(huán)“除基取余”操作,得到轉(zhuǎn)換進制的各位系數(shù)。,編程習題要求 1.為程序標明必要注釋。 2.上機調(diào)試通過。 3.給出程序執(zhí)行前設(shè)定的數(shù)據(jù),并記錄程序執(zhí)行后的結(jié)果數(shù)據(jù)。 4.要求寫明數(shù)據(jù)的存儲單元。,3-11 多分支轉(zhuǎn)移程序1多次使用條件轉(zhuǎn)移指令,形成兩個以上判斷框。,例 求符號函數(shù)Y=SGN(X) +1 當 X0 SGN(X)= 0 當 X=0 -1 當 X0,SYMB: MOV A,40H ;取X JZ STOR ;X=0,Y=X JB ACC7,MINUS;X0 MOV A,# 1 ;X0,Y=+1 SJMP STOR MINUS:MOV A,#0FFH;X0,
57、Y= -1 STOR: MOV 41H,A ;保存Y RET,2按分支號轉(zhuǎn)移,如:分支號=0,程序轉(zhuǎn)移到ADDR0處;當分支號=1,程序轉(zhuǎn)移到ADDR1處; 。,(1)用地址表法。設(shè)分支號已存入A。 MTJS:MOV DPTR,#TAB ;取表首地址 CLR C ;分支號2 RLC A MOV R2,A MOVC A,A+DPTR;取分支地址低位 PUSH ACC ;入棧保存 MOV A,R2 INC A MOVC A,A+DPTR;取分支地址高位 PUSH ACC ;入棧保存 RET ;分支地址PC,轉(zhuǎn)移 TAB: DW ADDR0 ;分支地址表 DW ADDR1 ADDR0: ;程序段0
58、,(2)轉(zhuǎn)移表法。用分支轉(zhuǎn)移指令 JMP A+DPTR。設(shè)R7R6=分支號,MTJS:MOV DPTR,#TAB;指向表首地址 MOV A,R7 ;分支號高字節(jié)3 MOV B,#03H MUL AB ;乘積不超過1字節(jié) ADD A,DPH MOV DPH,A MOV A,R6 ;分支號低字節(jié)3 MOV B,#03H MUL AB XCH A,B ADD A,DPH ;DPHDPH+(R7、R6)3)高字節(jié) MOV DPH,A XCH A,B ;A(R7、R6)3)低字節(jié) JMP A+DPTR ;實現(xiàn)多分支轉(zhuǎn)移 TAB: LJMP ADDR0 ;轉(zhuǎn)移表 LJMP ADDR1 LJMP ADDRN ADDR0: ;程序段0 ,DELAY:MOV R6,#64H1 I1: MOV R7,#0FFH1 I2: DJNZ R7,I22 DJNZ R6,I12 RET2,3-12 軟件延時程序。用循環(huán)程序?qū)⒅噶钪貜投啻螆?zhí)行,實現(xiàn)軟件延時。,試計算延時程序的執(zhí)行時間。 源程序機器周期(M) 指令執(zhí)行次數(shù),習題 DELAY:MOV R6,#1001 D1:MOV R7,#101 D2:NOP1 DJNZ R7,D22 DJNZ R6,D12 RET2 計算延時程序的執(zhí)行時間(設(shè)時鐘f=6MHz)。,延時時間計算:(設(shè)時鐘f=12MHz) t=(11+1100+2100255+2100
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 玻璃及玻璃制品成型工達標能力考核試卷含答案
- 石英晶體濾波器制造工安全宣貫水平考核試卷含答案
- 醋酸裝置操作工崗前技術(shù)理論考核試卷含答案
- 海洋浮標工7S執(zhí)行考核試卷含答案
- 電子電氣產(chǎn)品能效檢驗員崗前創(chuàng)新實踐考核試卷含答案
- 摩托車裝調(diào)工崗前崗中考核試卷含答案
- 乳品濃縮工復測模擬考核試卷含答案
- 浙江省溫州市2025-2026學年高三上學期1月期末考試語文試題附答案
- 老年疼痛患者頸腰背痛綜合方案
- 素養(yǎng)導向的整合性復習:九年級“國情與責任”專題深度建構(gòu)
- 醫(yī)療器械經(jīng)營企業(yè)質(zhì)量管理體系文件(2025版)(全套)
- 出鐵廠鐵溝澆注施工方案
- 2025年中小學教師正高級職稱評聘答辯試題(附答案)
- 現(xiàn)代企業(yè)管理體系架構(gòu)及運作模式
- 古建筑設(shè)計工作室創(chuàng)業(yè)
- 公司酶制劑發(fā)酵工工藝技術(shù)規(guī)程
- 2025省供銷社招聘試題與答案
- 單位內(nèi)部化妝培訓大綱
- 河堤植草護坡施工方案
- 2025中國氫能源產(chǎn)業(yè)發(fā)展現(xiàn)狀分析及技術(shù)突破與投資可行性報告
- 高校行政管理流程及案例分析
評論
0/150
提交評論