第三章 MCS-51系列單片_第1頁
第三章 MCS-51系列單片_第2頁
第三章 MCS-51系列單片_第3頁
第三章 MCS-51系列單片_第4頁
第三章 MCS-51系列單片_第5頁
已閱讀5頁,還剩110頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第一節(jié) 匯編語言與指令系統(tǒng)一 、匯編語言程序設計的重要性 對于要求反應靈敏性高的實時控制系統(tǒng)以及要求體積小系統(tǒng)小的許多“電腦化”產(chǎn)品,應用匯編語言特別好。二、MCS51系統(tǒng)單片機的指令系統(tǒng) 通常用符號指令(即匯編語言)來描述計算機的指令系統(tǒng)。MCS51的指令系統(tǒng)有42種操作碼助記符,用來描述33種操作功能(因為有的操作功能可用多種助記符)共有111條指令。1、指令分類、指令分類 按字節(jié)數(shù)分:按字節(jié)數(shù)分: 49條 單字節(jié)指令 操作碼 45條 雙字節(jié)指令 操作碼 數(shù)據(jù)或?qū)ぶ贩绞?17條 三字節(jié)指令 操作碼 數(shù)據(jù)或?qū)ぶ贩绞?數(shù)據(jù)或?qū)ぶ贩绞?按指令執(zhí)行時間分:按指令執(zhí)行時間分: 64條 單周期指令 1

2、2T 45條 雙周期指令 24T 2條 四周期指令(乘除) 48T 按功能分:按功能分: 數(shù)據(jù)傳送類 27條 1 算術運算類 24條 SWAP 邏輯運算類 24條 + 1 控制轉(zhuǎn)移類 17條 + 5 判位轉(zhuǎn)移指令 布爾處理類 17條 52、常用的縮寫符號、常用的縮寫符號 在描述MCS51指令系統(tǒng)的功能時,我門經(jīng)常使用下面的縮寫符號,其意義如下: A 累加器ACC * 乘 AB 累加器ACC和寄存器B組成的寄存器 / 除 direct 直接地址 與#data 立即數(shù),表示一 個常數(shù) 或 間接尋址 異或 大于 不等于 傳送 寄存器 ( ) 寄存器內(nèi)容() 由寄存器尋址的存儲器單元內(nèi)容( ) 寄存器

3、的內(nèi)容取反 r r r 指令編碼中r r r三位值由工作寄存器Rn確定, R0R7對應的r r r為000111。$ 指本條指令起始地址(指令地址)rel 相對偏移量,其值為128 +127 第二節(jié)第二節(jié) 尋址方式尋址方式 指令給出參與運算的數(shù)據(jù)的形式稱為尋址方式。MCS51的指令系統(tǒng)包含了以下6種指令尋址方式。 一一 、立即尋址、立即尋址 指令字節(jié)中包含了 操作數(shù),該操作數(shù)便被 稱為立即數(shù)。 例如 MOV A, #70H 其指令執(zhí)行過程見左圖二、寄存器尋址二、寄存器尋址 由指令指出某一寄存器(R0R7 、 A 、 B 、 CY 、 AB 、 DPTR)的內(nèi)容作為操作數(shù)。 例如 INC R0;

4、 (R0)+ 1 R0 其指令執(zhí)行過程見下圖:三、寄存器間接尋址三、寄存器間接尋址 由指令指出某一寄存器(R0 、R1 、 DPTR)的內(nèi) 容作為操作數(shù)的地址。訪問的存儲空間:內(nèi)部RAM(00H0FFH),外部RAM。 如 ANL A,R0;(A)(R0) A 其指令執(zhí)行過程見下圖: 四四 、直接尋址、直接尋址 指令中含有操作數(shù)的直接地址,該地址表達參與傳送或運算的數(shù)據(jù)所在的字節(jié)單元或位單元的地址。此方式可訪問以下四種存儲空間: 特殊功能寄存器SFR(只能用直接尋址) 內(nèi)部數(shù)據(jù)RAM 低 128B(00H7FH) 位地址空間 程序存儲器(0000H0FFFFH) 如 ANL 70H,#48H;

5、(78H)48H 70H 其指令執(zhí)行過程見下圖:五、基寄存器加變址寄存器間接尋址五、基寄存器加變址寄存器間接尋址 即以PC或DPTR為基寄存器,以A作為變址寄存器,二者間內(nèi)容相加形成16位的地址,該地址即為操作數(shù)的地址。訪問空間是程序存儲器。 例 MOVC A,A+PC; (A)+(PC) A MOVC A,A+DPTR;(A)+(DPTR) A六、相對尋址六、相對尋址 (PC)+指令中的偏移量rel(128+127) 轉(zhuǎn)移地址。 例 JC 80H;C=1時執(zhí)行過程如下圖所示: 七、七、MCS51不同存儲空間與所用指令及其尋址方式的不同存儲空間與所用指令及其尋址方式的對應關系對應關系 見表2-

6、5八、數(shù)據(jù)操作八、數(shù)據(jù)操作 MCS51系列單片機能對位、半字節(jié)、字節(jié)和雙字節(jié)數(shù)據(jù)進行各種操作。為保存數(shù)據(jù)操作的結果標志, MCS51系列單片機在特殊功能寄存器中包含一個狀態(tài)字寄存器PSW,其格式和功能如下:進位標志或位處理機的累加器C輔助進位標志用戶標志位工作寄存器選擇高 位工作寄存器選擇低 位溢出標志用戶標志位進位標志第三節(jié)第三節(jié) 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 數(shù)據(jù)傳送類指令有29條,是指令系統(tǒng)中量最多、使 用也最多的指令。其數(shù)據(jù)傳送操作如下圖所示:direct (直接尋址)Ri(間接尋址)Rn寄存器data立即數(shù)累加器A一一 、以累加器、以累加器A為目的操作數(shù)的指令(為目的操作數(shù)的指令(4

7、條)條) 機器碼MOV A , Rn ; 1110 1r r r (Rn)(A)MOV A , direct ; 1110 0101 (direct)(A) directMOV A , Ri ; 1110 011i (Ri)(A)MOV A , #data ; 1111 0100 #datd(A) #data 其中 r r r R0R7 000 R0 001 R1 010 R2 011 R3 100 R4 101 R5 110 R6 111 R7 i=0 時 R0 R0 i=1 時 R1 R1 二、二、以以Rn為目的操作數(shù)的指令(為目的操作數(shù)的指令(3條)條) MOV Rn , A ; (A)

8、 (Rn ) MOV Rn , direct ; (direct ) (Rn) MOV Rn , #data ; #data (Rn) 三、以直接尋址的單元為目的操作數(shù)的指令(三、以直接尋址的單元為目的操作數(shù)的指令(5條)條) MOV direct , A ; (A) (direct) MOV direct , Rn ; (Rn) (direct) MOV direct , direct; 85H 源地址 目的地址 MOV direct , Ri ; (Ri) (direct) MOV direct , #data ; #data (direct)四、以寄存器間接尋址的單元為目的操作數(shù)的指令四

9、、以寄存器間接尋址的單元為目的操作數(shù)的指令 (3條)條) MOV Ri , A; (A) (Ri) MOV Ri , direct; (direct) (Ri) MOV Ri , #data ; #data (Ri) 若direct(直接地址)是P0口P3口,則表明是對口 進行操作 例 MOV P1 , A ; (A) (P1口)若不寫P1口, 指令可寫成 MOV 90H , A 以上指令中,累加器A特別重要。因為CPU對它具有寄存器所沒有的操作指令五、五、16位數(shù)據(jù)傳送指令位數(shù)據(jù)傳送指令 MOV DPTR ,#data16; 90H 高8位 低8位 即 高8位DPH 低8位DPL 例 設(7

10、0H)=60H,(60H)=20H,P1口為輸入口,當前(P1)=0B7H,執(zhí)行下面程序的結果是什么? MOV R0,#70H;70H R0 R0 MOV A , R0;(R0)=(70H)=60H A MOV R1,A ; (A)=60H R1 R1 MOV B , R1;(R1)=(60H)=20H B MOV R0,P1 ;(P1)=0B7H (R0)= (70H)=0B7H (70H)=0B7H (60H)=20H (B)=20H (A)=60H (R1)=60H (R0)=70H 執(zhí)行前: 內(nèi)部 RAM : 60H 20H : 70H 60H : 執(zhí)行后: 內(nèi)部 RAM : 60H

11、20H : 70H B7H :六、棧操作指令六、棧操作指令 1 、進棧指令 PUSH direct;(SP)+1 (SP),(direct) (sp)例 設 (SP)=60H (ACC)=30H (B)=70H執(zhí)行下述指令 PUSH ACC ;(SP)+1 (SP) 即61H (SP), (ACC)=30H (SP)=(61H) PUSH B ;(SP)+1 (SP) 即62H (SP), (B)=70H (SP)=(62H) 結果 (61H)=30H (62H)=70H (SP)=6 棧及堆棧指針的變化見下圖: SP+162H 70HSP+161H 30H SP60H SP62H 70HSP

12、161H 30HSP160H 2 、退棧指令 POP direct; (SP) (direct) , (SP)1 (SP) 例 設 (SP)=62H (62H)=70H (61H)=30H 執(zhí)行下述指令 POP DPH ; (SP)=(62H )=70H (DPH ) , (SP) 1 (SP) 即61H (SP ) POP DPL ; (SP)=(61H )=30H (DPL ) , (SP) 1 (SP) 即60H (SP ) 結果 (SP)=60H (DPTR)=7030H 棧及堆棧指針的變化見上圖。 七、字節(jié)交換指令七、字節(jié)交換指令 XCH A,Rn; (A)(Rn) XCH A,di

13、rect; (A)(direct) XCH A,Ri ; (A)(Ri) ) 八、半字節(jié)交換指令八、半字節(jié)交換指令 XCHD A,Ri ; (A)03(Ri) )03 SWAP A ; (A)03(A )47 例 (A)=15H (R0)=30H (30H)=34H XCHD A,R0 結果 (A)=14H (30H)=35H 九、累加器九、累加器A與外部數(shù)據(jù)存儲器傳送指令與外部數(shù)據(jù)存儲器傳送指令 MOVX A,DPTR;(DPTR) (A)MOVX A,Ri ;(P2)(Ri) (A) MOVX DPTR,A ;(A) (DPTR)MOVX Ri ,A ;( A )( (P2)(Ri) 十、

14、查表指令十、查表指令 1 、 MOVC A,A+PC (A)+(PC) (A) 例 (A)=30H 指令 1000H 83H MOVC A,A+PC執(zhí)行后的結果 (PC)+(A)=(1001H+30H) =(1031H) (A) 顯然PC與該查表指令的地址有關, (A)=00H0FFH(256),因此所查的表格只能存放在該查表指令以下的 256單元內(nèi),表格的大小也受到此限制。 例 ORG 8000H 8000H E430 MOV A ,#30H 8002H 83 MOVC A,A+PC : : ORG 8030H DB 41H,42H,43H, 44H,45H DB 46H,47H,48H,

15、49H,4AH : : (PC)=8003H (A)=30H (PC)+(A)=(8003H+30H)=(8033H)=44H 44H (A) 即 (A)=44H 2 、 MOVC A,A+DPTR;(A)+(DPTR) (A) 顯然上述指令與指令存放地址無關,因此所查的表格的大小及位置可在程序存儲器中的任意位置。十一、數(shù)據(jù)傳送類指令匯總一覽表十一、數(shù)據(jù)傳送類指令匯總一覽表 見表3-1第四節(jié)第四節(jié) 算術操作指令算術操作指令 算術操作類指令有24條。 一、加法指令一、加法指令 1 、不帶進位的加法指令 ADD A,Rn ;(Rn)+(A) (A)ADD A,direct ;(direct)+(A

16、) (A) ADD A,Ri ;(Ri)+(A) (A)ADD A,#data ;#data+(A) (A) 對標志位的影響: 指令執(zhí)行后 累加器中 A7 有進位,則 Cy=1 否則 Cy=0 A3 有進位,則 AC=1 否則 AC=0 當 A6 有進位A7 無進位或 A7有進位A6無進位時, 則 OV=1 否則 OV=0 當ACC中有奇?zhèn)€“1”時,P=1;有偶個“1”時,P=0 例 (A)=53H (R0)=0FCH 執(zhí)行指令 ADD A, R0 后 0101 0011 + 1111 1100 1 0100 1111 Cy OV=0 AC=0 P=1 (A)=4FH 2、帶進位的加法指令 A

17、DDC A,Rn ; Cy+ (Rn)+(A) (A)ADDC A,direct ; Cy+ (direct)+(A) (A) ADDC A,Ri ; Cy+ (Ri)+(A) (A)ADDC A,#data ; Cy+ #data+(A) (A) 影響標志位:( Cy 、OV 、AC 、P)同不帶進位的加法指令。 二、減法指令(只有帶進位的減法指令)二、減法指令(只有帶進位的減法指令) SUBB A,Rn ; ( A)(Rn)-Cy (A)SUBB A,direct ; ( A)(direct)-Cy (A) SUBB A,Ri ;( A)(Ri)-Cy (A) SUBB A,#data ;

18、( A)#dataCy (A) 影響標志位: Cy :A7 有借位,則 Cy=1 否則 Cy=0 AC: A3 有借位,則 AC=1 否則 AC=0 OV: A6 有借位A7 無借位或 A7有借位A6 無借位時,則 OV=1 否則 OV=0 P: ACC中有奇?zhèn)€“1”時,P=1; 有偶個“1”時,P=0 三、加三、加 1指令指令 INC A ;(A)+1 (A) INC Rn ;(Rn)+1 (Rn) INC direct ;(direct)+1 (direct) INC Ri ;(Ri)+1 (Ri) INC DPTR ;(DPTR)+1 (DPTR) 注意:若原數(shù)為0FFH,則+1后變成

19、00H。 此類運算不影響任何標志位(除 INC A 對 P 有影響外)。當修改輸出口Pi時, 原來口數(shù)據(jù)的值將從口鎖存器讀入,而不是讀引腳. 四、減四、減 1指令指令 DEC A ;(A)-1 (A) DEC Rn ;(Rn)-1 (Rn) DEC direct ;(direct)-1 (direct) DEC Ri ;(Ri)-1 (Ri) 注意:若原數(shù)為00H,則-1后變成 0FFH。 此類運算不影響任何標志位(除 INC A 對 P 有影響外)。當修改輸出口Pi時,原來口數(shù)據(jù)的值將從口鎖存器讀入,而不是讀引腳。 五、其他算術操作指令五、其他算術操作指令 1 、累加器內(nèi)容十進制調(diào)整指令 D

20、A A ;不影響溢出標志 該指令對A的上一條加法指令所得的結果進行調(diào)整,使它調(diào)整為壓縮BCD碼。 操作過程是: 若(A)309(AC)=1,則 (A)+06H (A) 若(A)749(Cy)=1,則 (A)+60H (A) 注意: 不能用DA A 對十進制減法操作的結果調(diào)整。 借助Cy可實現(xiàn)多位BCD數(shù)相加(ADDC)。 2 、乘法指令 MUL AB;積的高8位 B,積的低8位 A若積大于255 OV=1 否則 OV=0; Cy0 3 、除法指令 DIV AB;A/B 商 A,余數(shù) B 若 B=0 則 OV=1 否則 OV=0; Cy0 六、算術操作類指令匯總一覽表六、算術操作類指令匯總一覽表

21、 見表3-2第五節(jié)第五節(jié) 邏輯操作類指令邏輯操作類指令 邏輯操作類指令有24條。 一、與指令一、與指令 ANL A,Rn ;(A)(Rn) (A) ANL A,direct ;(A)(direct ) (A) ANL A,Ri ;(A)(Ri) ) (A) ANL A,#data ;(A) #data (A) ANL direct , A ; ( direct)(A ) ( direct )ANL direct,#data;(direct ) #data ( direct ) 二、或指令二、或指令 ORL A,Rn ;(A)(Rn) (A) ORL A,direct ;(A)(direct )

22、 (A) ORL A,Ri ;(A)(Ri) ) (A)ORL A,#data ;(A) #data (A) ORL direct , A ; ( direct)(A ) ( direct )ORL direct,#data;(direct ) #data ( direct) 三、異或指令三、異或指令 XRL A,Rn ;(A)(Rn) (A) XRL A,direct ;(A) (direct ) (A)XRL A,Ri ;(A) (Ri) ) (A)XRL A,#data ;(A) #data (A) XRL direct , A ; ( direct) (A ) ( direct )XR

23、L direct,#data;(direct ) #data ( direct ) 上述三組指令(ANL、ORL 、 XRL)中,若以輸出口Pi作 為目的操作數(shù)時,讀入原始數(shù)據(jù)來自口鎖存器,而非引腳。四、四、A操作指令操作指令 1 、取反指令 CPL A 2 、清零指令 CLR A 3 、左循環(huán)指令 RL A 4 、右循環(huán)指令 RR A 5 、帶進位左循環(huán)指令 RLC A 6 、帶進位右循環(huán)指令 RRC A 第36條操作指令功能見圖3-1。 五、邏輯操作類指令匯總一覽表五、邏輯操作類指令匯總一覽表 見表3-4第六節(jié)第六節(jié) 程序轉(zhuǎn)移類指令程序轉(zhuǎn)移類指令 歸入本類指令有17條(也可22條,此時位轉(zhuǎn)

24、移指令可歸入此類)。 一、無條件轉(zhuǎn)移指令一、無條件轉(zhuǎn)移指令 1 、絕對轉(zhuǎn)移(短跳轉(zhuǎn))指令、絕對轉(zhuǎn)移(短跳轉(zhuǎn))指令 AJMP addr11(標號);(PC)+2 (PC), 指令中的a10a0 (PC)100 目的地址范圍:AJMP指令后面一條指令的同一個 2KB區(qū)域的程序存儲器中。 PC AJMPa10a8 a7a0PC+2 H 2KB 2 、 長轉(zhuǎn)移(長跳轉(zhuǎn))指令長轉(zhuǎn)移(長跳轉(zhuǎn))指令 LJMP addr16(標號);指令中的a15a0 (PC) 目的地址范圍:64KB區(qū)域的程序存儲器內(nèi)任意單元。 3 、 相對短轉(zhuǎn)移(相對跳轉(zhuǎn))指令相對短轉(zhuǎn)移(相對跳轉(zhuǎn))指令 SJMP rel(標號);(PC)

25、+2 (PC), (PC)+ rel (PC) 注: rel是有符號數(shù),其范圍為-128 rel+127 目的地址=源地址+2+ rel例 KRD: SJMP PKRD 若 KRD=0100H PKRD=0123H 則 0123H=0100H+2+rel rel=21H 若 KRD=0100H PKRD=00F0H 則 0123H=0100H+2+rel rel=0FFEEH rel=0EEH P C S JM P re lP C + 2 H -126+129-128+127轉(zhuǎn)移地址范圍4 、相對長轉(zhuǎn)移(散轉(zhuǎn))指令、相對長轉(zhuǎn)移(散轉(zhuǎn))指令 JMP A+DPTR;(DPTR)+(A) (PC)

26、利用此指令能實現(xiàn)程序在64KB程序存儲器內(nèi)的散轉(zhuǎn)。 例 (A)0,2,4,6,8,TAB=1800H,請 分析執(zhí)行下列指令后PC的變化情況 MOV DPTR,#TAB;(DPTR)=1800H JMP A+DPTR;(1800H+(A) (PC) : : 1800H TAB:AJMP 100H ; 指令中的a10a0 (PC)100, (PC)1511不變 AJMP 200H AJMP 300H AJMP 400H AJMP 500H 該段程序執(zhí)行后,若(A)=0,程序?qū)⑥D(zhuǎn)移到1800H ,執(zhí)行完 AJMP 100H 后, (PC)1511 =0001 1B,(PC)100 = 100 000

27、0 0000 B (PC)=0001 1100 0000 0000B=1900H二、無條件轉(zhuǎn)移指令二、無條件轉(zhuǎn)移指令 1 、測試條件符合轉(zhuǎn)移指令、測試條件符合轉(zhuǎn)移指令 轉(zhuǎn)移條件 JZ rel ; (A)=0 JNZ rel ; (A)0 JC rel ; Cy =1 JNC rel ; Cy =0 轉(zhuǎn)移條件 JB bit,rel ; (bit)=1 JNB bit,rel ; (bit)=0 JBC bit,rel ; (bit)=1, 執(zhí)行后 0 (bit) 條件滿足轉(zhuǎn)移否則順序執(zhí)行 2 、比較不相等轉(zhuǎn)移指令、比較不相等轉(zhuǎn)移指令 CJNE A ,direct,rel CJNE A ,#dat

28、a ,rel CJNE Rn ,#data ,rel CJNE Ri,#data ,rel 判Cy:當?shù)谝徊僮鲾?shù)第二操作數(shù)時, Cy =1 否則 Cy=0 例: CJNE A ,#60H,NEQ ;(A)60H 轉(zhuǎn)至 NEQ : ;(A)= 60H 處理程序 : NEQ:JC LOW ;(A) 60H 處理程序 : LOW: ; (A) 60H 處理程序 : : 3 、減、減1不為不為 0轉(zhuǎn)移指令轉(zhuǎn)移指令 DJNZ Rn ,rel;(Rn)-1 (Rn) 若 (Rn) =0 則 (PC)+2 (PC) ; (Rn) 0 則 (PC)+2+rel (PC) DJNZ direct ,rel;(d

29、irect)-1 (direct) 若 (direct) =0 則 (PC)+3 (PC) ; (direct) 0 則 (PC)+3+rel (PC) 例 延時程序START: SETB P1.0 ;1 P1.0 DL: MOV 30H,#30H DL0: MOV 31H,#0F0H DL1: DJNZ 31H,DL1 DJNZ 30H,DL0 CPL P1.0 ;0 P1.0 AJMP DL P1.0輸出波形見圖3-2。三、調(diào)子指令三、調(diào)子指令 1 、絕對調(diào)子(短調(diào)用)指令、絕對調(diào)子(短調(diào)用)指令 ACALL addr11; (PC)+2 (PC) , (SP)+1 (SP) , (PC7

30、0) (SP) ; (SP)+1 (SP) , (PC158) (SP) ;指令中的2KB區(qū)域地址 a100 ( PC100) 2 、長調(diào)子(長調(diào)用)指令、長調(diào)子(長調(diào)用)指令 LCALL addr16; (PC)+3 (PC) , (SP)+1 (SP) , (PC70) (SP) ; (SP)+1 (SP) , (PC158) (SP) ; 指令中地址 a150 ( PC)3 、返主(返回)指令 RET ; (SP) (PC158) , (SP)1 (SP) , (SP) (PC70) , (SP)-1 (SP) 不影響任何標志,一般與ACALL,LCALL指令相連。 4 、中斷返主(返回

31、)指令 RETI ;除RET指令的功能外,還清除內(nèi)部相應 的中斷狀態(tài)寄存器。 四、空操作指令四、空操作指令 NOP ; (PC)+1 (PC) , 不影響狀態(tài)。五、程序轉(zhuǎn)移類指令匯總一覽表五、程序轉(zhuǎn)移類指令匯總一覽表 見表3-7第七節(jié)第七節(jié) 位操作類指令位操作類指令 Cy作為布爾處理機的累加器以RAM和SFR的位尋址區(qū)的位單元作為操作數(shù)。 一、位傳送指令一、位傳送指令 MOV C ,bit ;(bit) (C) MOV bit,C ; (C) (bit) 二、位邏輯操作指令二、位邏輯操作指令 1、位變量修改指令 CLR C ; 0 (C) CLR bit ; 0 ( bit ) CPL C ;

32、 (C) (C) CPL bit ; ( bit ) ( bit ) SETB C ; 1 (C) SETB bit ; 1 ( bit ) 2、邏輯操作指令 ANL C ,bit ;(C)(bit) (C) ANL C ,/bit ;(C)(bit) (C) ORL C ,bit ;(C)(bit) (C) ORL C ,/bit ;(C)(bit) (C) 三、位條件轉(zhuǎn)移指令三、位條件轉(zhuǎn)移指令 見測試條件符合轉(zhuǎn)移指令 四、位操作類指令匯總一覽表四、位操作類指令匯總一覽表 見表3-8。 再次重申一下:把輸出口Pi作為目的操作數(shù)的指令中,原 來口數(shù)據(jù)的值將從口鎖存器讀入,而不是從引腳讀入。這些

33、 指令是:ANL;ORL;XRL;JBC;CPL;INC; DEC;DJNZ;MOV Px.y , C; CLR Px.y 和 SETB Px.y 。第八節(jié)第八節(jié) 匯編語言源程序的格式和偽指令匯編語言源程序的格式和偽指令 一、匯編語言源程序的格式匯編語言源程序的格式 1、指令格式、指令格式: 操作碼 操作數(shù)1, 操作數(shù)2, 操作數(shù)3 指令操作碼助記符 2、標號和注釋、標號和注釋 標號加在指令以前,它必須以字母開始,后跟18個 字母或數(shù)字,并以冒號“:”結尾。標號不能與匯編保留 符號重復,標號的值是它后面的指令存儲地址。 注釋是對某一條指令或某一段程序的功能說明,它必 須以分號“;”開始,如果一

34、行寫不下,可以另起一行, 但都必須以分號“;”開始,下面為含有標號和注釋的程 序行: 標號:操作碼 操作數(shù)1, 操作數(shù)2, 操作數(shù)3;注釋 二、偽指令二、偽指令 偽指令也稱匯編指令,大多數(shù)偽指令在匯編時不產(chǎn)生機器語言指令,它僅提供匯編控制信息。以下是幾種常用的偽指令。 1、ORG 指令指令 格式: ORG m 十進制或十六進制數(shù) 它是定位偽指令,表明(匯編地址)生成的機器指令起始存儲器地址為m。 2、END 指令指令 格式: END 或 END 標號 它是結束匯編偽指令,表明匯編到此結束。 3、DB 指令指令 格式: 標號 DB X1, X2 , X3 , , Xn 它是定義字節(jié)偽指令, Xi

35、為單字節(jié)數(shù)據(jù)可用十進制或十六進制數(shù)、 表達式或單引號“ ”所括起來的一個字符串表示。 例如 ORG 1000H DB ASCII 1000H A S C I I程序存儲器 4、DW 指令指令 格式: 標號 DW Y1, Y2 , Y3 , , Yn 它是定義字偽指令, Yi為雙字節(jié)數(shù)據(jù),其表達方式同DB中的Xi ,每個字的低8位先放, 高8位后放 5、DS 指令指令 格式: 標號: DS X 數(shù)字 它是定義保留字節(jié)數(shù)偽指令, 它表明應保留X個單元的字節(jié)數(shù)。 6、bit 指令指令 格式: 標號 DS 項 它是定義某特定位標號的偽指令, 項是所定義的位,經(jīng)定義后可用標號來代替項所定義的位。第九節(jié)第

36、九節(jié) 算術邏輯處理程序算術邏輯處理程序 例3-2 多字節(jié)無符號數(shù)相加。設被加數(shù)與加數(shù)已分別在以ADR1與ADR2為初址的片內(nèi)數(shù)據(jù)存儲器區(qū)域中,自低字節(jié)起,由低到高依次存放;它們的字節(jié)數(shù)為L;要求加得的和放回原放被加數(shù)的單元。 程序的流程框圖見圖3-5 相應的程序如下: MOV R0,#ADR1 | MOV R0,A MOV R1,#ADR2 | INC R0 MOV R2,#L | INC R1 CLR C | DJNZ R2,LOOPLOOP:MOV A,R0 | DONE: ADDC A,R1設 ADR1=30H,ADR2=40H,L=03H,則程序執(zhí)行過程為: (R0)=30H (R1)

37、=40H (R2)=03H CY=“0” (R0)A,即(30H)A(R1)+(A) A 即 (40H)+(30H)A A (R0)= (30H) (R0)+1 (R0)即30H+1=31H,31H (R0) (R1)+1 (R1)即40H+1=41H,41H (R1) R21 R2 即 3 1 =2 R2 判R2=0? (R2)=02H0轉(zhuǎn)至LOOP即 (R2)=01H0轉(zhuǎn)至LOOP即 (R2)=0DONE R030H R140H 第十節(jié)第十節(jié) 數(shù)制轉(zhuǎn)換程序數(shù)制轉(zhuǎn)換程序 例 3-11 CJNE A,#09H,NEQ SJMP LOW NEQ: JC LOW ADD A,#37H SJMP D

38、ONE LOW: ADD A,#30H DONE: 子程序設計中參數(shù)傳遞的方法用下面例子說明一、用工作寄存器或累加器來傳遞參數(shù)一、用工作寄存器或累加器來傳遞參數(shù) 例 3-13 將某BCD碼數(shù)據(jù)轉(zhuǎn)換為ASCII碼的子程序。 TRANS1: MOV DPTR,#TAB MOVC A,A+DPTR RET TAB: DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H TRANS2: INC A MOVC A ,A+PC RET TAB: DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H 二、用指針寄存器來傳遞參數(shù)二、用

39、指針寄存器來傳遞參數(shù) MOV R0,#ADR1 MOV R1,#ADR2 MOV R2,#L CLR C LOOP:MOV A,R0 ADDC A,R1 MOV R0,A INC R0 INC R1 DJNZ R2,LOOP RET三、用堆棧來傳遞參數(shù)三、用堆棧來傳遞參數(shù) 主程序:進棧 PUSH 子程序:出棧 POP TRANS3:MOV R0,SP DEC R0 DEC R0 XCH A ,R0 MOV DPTR,#TAB MOVC A, A+DPTR XCH A ,R0 RET TAB: DB 30H,31H,32H,33H,34H DB 35H,36H,37H, 38H,39H 例:把內(nèi)

40、部單元的RAM中50H壓縮BCD碼轉(zhuǎn)換成2位ASCII碼,轉(zhuǎn)換結果存放于R1指向的2個內(nèi)部RAM的單元中。 BASC: MOV A,50H SWAP A ANL A,#0FH PUSH ACC ACALL TRANS3 POP ACC MOV R1,A INC R1 MOV A,50H ANL A,#0FH PUSH ACC ACALL TRANS3 POP ACC MOV R1,A DONE: 第十一節(jié)第十一節(jié) 多分支轉(zhuǎn)移(散轉(zhuǎn))程序多分支轉(zhuǎn)移(散轉(zhuǎn))程序 單片機可方便的實現(xiàn)很多分支出口的轉(zhuǎn)移,也稱散轉(zhuǎn),在多種程序中用得很多,其示意圖見圖 3-7 例 3-15 設計有256路分支出口的轉(zhuǎn)移地

41、址,要轉(zhuǎn)移到某分支的信息存放在R2中。 MOV DPTR,#TAB MOV A,R2 CLR C RLC A JNC LOW INC DPH LOW: MOV R3,A MOVC A ,A+DPTR PUSH A MOV A,R3 INC A MOVC A ,A+DPTR RETTAB: DW ADDR 00,ADDR 01,ADDR 02, ADDR 0FFH例如 轉(zhuǎn)移分支為第81H路,則DPTR、SP指針變化如下: SP Addr81H815 Addr81H07 SP 程序ROM內(nèi)部RAM第十二節(jié)第十二節(jié) 延時程序延時程序 例 3-16 設計一延時程序,延時時間為1ms。 (設晶振為12M

42、HZ) DELAY1:MOV R1,#0AH;1 DL2:MOV R2,#18H ;1 DL1:NOP ;1 NOP ;1 DJNZ R2,DL1 ; 2 DJNZ R1,DL2 ;2 RET 延時時間= 1+ 1+(1+1+2)24+2 10+2 1s = 993 s =0.993ms第十三節(jié)第十三節(jié) 定時器定時器 / 計數(shù)器應用程序計數(shù)器應用程序例 3-18 要求利用單片機內(nèi)部的定時器 / 計數(shù)器,達到 1min 延時。程序準備工作: 1min 延時,顯然用一個定時器 / 計數(shù)器 不行,因用T0作定時不發(fā)生中斷(定時 1ms ), T1計數(shù)6000次 (600001ms=1min)發(fā)生中斷

43、,因此要 對T0 、T1相應的SFR進行設置。 1、方式控制字(TMOD) T0不用門控,方式1定時,則(TMOD)03=0001B T1不用門控,方式1計數(shù),則(TMOD)47=0101B即(TMOD)=01010001B2、16位計數(shù)器的初值確定位計數(shù)器的初值確定T0 :1ms=65536X 03E8H=10000HX X=0FC18H TH0=0FCH TL0=18H T1 :60000=65536X 0EA60H=10000HX X=15A0H TH1=15H TL1=0A0Ht = (216x)s 12 fosc = (655366x)s 12 fosc 晶振頻率計數(shù)初值3、確定控制

44、寄存器、確定控制寄存器TCON及中斷允許控制寄存器及中斷允許控制寄存器IE EA=1 ET1=1 即 IE=88H TR0=1 TR1=1 中斷入口地址:001BH D7 D6 D5 D4 D3 D2 D1 D0 IE EA / ET2 ES ET1 EX1 ET0 EX0 D7 D6 D5 D4 D3 D2 D1 D0 TCON TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 4、程序框圖、程序框圖 主程序框圖T0 、T1 初始化T1 引腳清零允許T0 、T1工作程序工作1ms定時到?NY1ms定時到?T1 計數(shù)值+1重置TH0、TL0初值 繼續(xù) N中斷子程序框圖置位1min

45、時間到的位標志中斷返回 5、程序清單 見 P126127第十三節(jié)第十三節(jié) 外部中斷應用程序外部中斷應用程序 例 3-20 某工業(yè)監(jiān)控系統(tǒng),具有溫度、壓力、PH值等多路監(jiān)控功能。在PH7時將向CPU申請中斷,CPU相應后令P3.0引腳輸出高電平,經(jīng)驅(qū)動,使加堿管道電磁閥接通1 s,以調(diào)整PH值。(0003H是 INT0的中斷入口地址)溫度1超限?壓力超限?PH超限?溫度2超限?中斷返回中斷子程序散轉(zhuǎn)框圖轉(zhuǎn)溫超1服務程序轉(zhuǎn)溫超2服務程序轉(zhuǎn)壓超服務程序轉(zhuǎn)PH超服務程序PH超限服務程序框圖保護現(xiàn)場中斷返回加減1 s撤除中斷恢復現(xiàn)場習題 1 、多字節(jié)無符號壓縮BCD碼數(shù)相加。設被加數(shù)與 加數(shù)已分別在以A

46、DR1與 ADR2為初址的片內(nèi)數(shù)據(jù) 存儲器區(qū)域中,自高字節(jié)起,由高到低要依次存放;它們的字節(jié)數(shù)為L;求加得的和放 回原放被加數(shù)的單元。 2 、請寫出例3-3的程序流程框圖,并簡述程序執(zhí)行 過程。 3 、試改用CJNE指令重編例3-7的程序。第一節(jié)第一節(jié) 最小系統(tǒng)與程序存儲器的擴展最小系統(tǒng)與程序存儲器的擴展 MCS5151單片機在擴展時,其引腳構成三總線結構:地址總線AB(P2、P0口)、數(shù)據(jù)總線DB(P0口分時復用)和控制總線CB(P3口及P1口部分引腳)。 各種擴展電路的外接芯片都通過該三總線與單片機連接。從圖4-1中可看出P0分時復用地址總線和數(shù)據(jù)總線,ALE連接至地址鎖存器的使能端。當A

47、LE為高時,鎖存器內(nèi)容更新;當ALE 時,實現(xiàn)鎖存。因而可看出當ALE為高時,P0口輸出地址線A0A7,當ALE 時, 鎖存在地址鎖存器的輸出端,從而達到分時復用的目的。 當外接芯片過多超過總線的驅(qū)動能力時,系統(tǒng)將不能可靠工作,此時因加用總線驅(qū)動器。常用的單向驅(qū)動器有74LS244、74LS240(帶反向輸出)、 74LS241;雙向總線驅(qū)動器有74LS245圖4-2列出了74LS244、 74LS245兩種芯片的引腳圖。從圖中可看出: 74LS244: xAx輸入、xYx輸出,且是三態(tài)驅(qū)動,并分成二組分別 由1G、2G 控制。 74LS245:雙向驅(qū)動 A B 當G=“0”且DIR=“1”時

48、,AB(輸出允許), 當G=“0”且DIR=“0”時,BA(輸入允許)。 圖4-3是74LS244、74LS245用于MCS51總線驅(qū)動器時的具體連接圖。 從圖中可看出:P0口分時復用數(shù)據(jù)總線(有輸入、輸出),因此要用雙向驅(qū)動器74LS245。 故當PSENRD=“0”即DIR=“0”時,BA 即A/D P0口, 當PSENRD=“1”即DIR=“1”時,AB 即P0口A/D (數(shù)據(jù)/地址)。 P2口只要加用74LS244且1G=2G=“0”,保證任何時候P2口A。 一、最小系統(tǒng)一、最小系統(tǒng) 圖4-4示出了8031的最小系統(tǒng)。由于8031片內(nèi)無ROM,因此我們要用片外程序存儲器來存放程序。圖中

49、2716用作片外程序存儲器、74LS373用作地址鎖存器,這樣系統(tǒng)就要用到地址和數(shù)據(jù)總線。下面我們將按照地址總線、數(shù)據(jù)總線、控制總線的具體連接方式來說明8031是如何和片外芯片相連接的,在說明圖4-4之前,讓我們先了解一下常用的EPROM芯片和地址鎖存器以及8031的工作時序。1、EPROM芯片芯片 常用EPROM芯片有2716(2k8bit)、 2732(4k8bit)、 2764(8k8bit)、27128(16k8bit)、 27256(32k8bit)、 27512(64k8bit)等,圖4-6所示的是常用EPROM芯片的引腳圖。其引腳說明與工作方式為: 引腳說明 A0A15:地址線。

50、其中2716為A0A10 、 2732為 A0A11 、2764為A0A12 、 27128為A0A13、 27256為A0A14、 27512為A0A15 。 O0O7 :輸出數(shù)據(jù)線。 CE :片選信號,低電平有效。 VPP :編程電源端。 PGM:編程控制信號。 VCC :電源端。+5V GND:接地端。 工作方式 見表4-1 2、地址鎖存器、地址鎖存器 常用的地址鎖存器芯片有74LS373、74LS273、8282、8212等。 74LS373 74LS373是8D鎖存器,其結構示意圖見圖4-7。 74LS273 帶清除端CLR的8D觸發(fā)器,當CLR=“0”時,D=“0”,CLK在上升沿

51、時觸發(fā)器內(nèi)容更新。 74LS373、74LS273、8282與MCS51的連接 見圖4-9。 3、工作時序、工作時序 最小系統(tǒng)的工作時序見圖4-5,從圖中可看出: ALE 時,PCL輸出鎖存(ALE=“1”時PCL 出現(xiàn)在P0口、 PCH出現(xiàn)在P2口上)。 PSEN=“0”時,程序存儲器根據(jù)地址總線上出 現(xiàn)的地址(此時為PC 值) 輸出指令代碼,在 時 通過數(shù)據(jù)總線把指令輸入到 單片機內(nèi)。 在一個機器周期內(nèi)ALE、PSEN兩次有效,即在一個機 器周期內(nèi)可兩次取指。 4、MCS51單片機與外圍芯片的連接單片機與外圍芯片的連接 單片機擴展時的三總線結構單片機擴展時的三總線結構 8031單片機與74

52、LS373連接從而構成系統(tǒng)擴展時的三總線結構。即P0口是數(shù)據(jù)總線(分時復用);74LS373輸出地址線A0A7 、P2口輸出地址線A8A15從而構成地址總線;其余各控制信號構成控制總線。(具體見圖4-1、4-4)。 數(shù)據(jù)線連接數(shù)據(jù)線連接 P0.0P0.7 2716 O0O7 地址線連接地址線連接 P0.0P0.7 74LS373 D0D7 ; Q0Q7 2716 A0A7 ;P2.0 2716 A8 ; P2.1 2716 A9 ;P2.2 2716 A10 。 注意:盡管P2口有余下的引腳,但也不能再作為一般I/O口線使用。 控制線連接控制線連接 ALE 74LS373 G ;PSEN 27

53、16 OE; 74LS373 OE、2716 CE接地。 其它電路其它電路(復位、時鐘見圖4-4) 二、用二、用EPROM 的程序存儲器擴展的程序存儲器擴展 1、用單片、用單片EPROM 的擴展電路的擴展電路 對于8051、8751、9052、8752等片內(nèi)含程序存儲器的機型來說,圖4-4便是擴展片外存儲器的電路。 若擴展2K單元不夠,可將圖4-4中的2716改為2732、2764、27128、27256或27512等容量更大的EPROM,則擴展的容量依次為4K、8K、16K、32K、64K。當然每遞升一檔,地址線將多用一根,P2口更高一位口線將用于傳送這位的地址信息。例如在圖4-4的基礎上改用2732時,添用P2.3來傳遞A11 ;改用2764時,再添用P2.4來傳遞A12 ;圖4-10示出了應用27128的擴展電路 在既用片內(nèi)程序存儲器又有片外程序存儲器的情況下,EA一般應接高電平,當PC片內(nèi)程序存儲器容量時,選用片內(nèi)程序存儲器,否則選用片外程序存儲器 2、用多片、用多片EPROM 的擴展電路的擴展電路 用多片E

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論