版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、《單片微機(jī)原理及應(yīng)用》教學(xué)課件,第二講:指令與編程,本講重點(diǎn): 尋址方式; MCS-51指令集; 偽指令; 匯編語言與簡單程序設(shè)計(jì).,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,第三章 指令系統(tǒng)及程序設(shè)計(jì)(P.43),51系列單片機(jī)指令集含有111條指令,每條指令在執(zhí)行時要花去一定的時間,以機(jī)器周期為單位。按指令執(zhí)行時間分類:單周期(64條);雙周期(45條);4周期(2條),按指令的功能分類,可分為5大類:數(shù)據(jù)傳送類
2、(29條);算術(shù)運(yùn)算類(24條)邏輯運(yùn)算及移位類(24);控制轉(zhuǎn)移類(17條)位操作類(17條),每條指令在程序存儲器ROM中占據(jù)一定的空間,以字節(jié)為單位。按指令所占字節(jié)數(shù)分類:單字節(jié)(49條);雙字節(jié)(46條);3字節(jié)(16條),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,ASM-51指令的格式(P.44),方括符[ ]表示可選項(xiàng)標(biāo)號代表指令所在地址,1-8個字母/數(shù)字,“:”結(jié)尾操作碼就是指令功能助記符,指令實(shí)體目的操作數(shù)源操作數(shù)
3、注釋,以“;”開頭,[標(biāo)號:]操作碼 [目的操作數(shù)][,源操作數(shù)][;注釋],《單片微機(jī)原理及應(yīng)用》教學(xué)課件,51單片機(jī)指令的尋址方式(P.45),寄存器尋址立即尋址寄存器間接尋址直接尋址變址尋址(基址寄存器+變址寄存器間接尋址)相對尋址位尋址,尋址方式:指令按地址獲得操作數(shù)的方式七種尋址方式,一條指令可能含多種尋址方式,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,寄存器尋址——(P.45)從寄存器中讀取操作數(shù)或存放操作數(shù)進(jìn)寄存器
4、例:MOV A,B ; (A) ←(B) MOV 30H,R0 ;(30H)←(R0) MOV A,R1 ; (A) ←(R1),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,立即尋址——(P.45)操作數(shù)直接就出現(xiàn)在指令中例:MOV A,#64H ;(A)← 立即數(shù) 64H ADD A,#05H ;(A)←(A)+立即數(shù) 05H注意:符號“#”表明其后跟的是立即數(shù), 立即數(shù)——就是數(shù)字量
5、本身。,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,寄存器間接尋址——(P.46)寄存器中的內(nèi)容是一個地址,由該地址單元尋址到所需的操作數(shù),注意:1)“間接”表示某寄存器中的“內(nèi)容”只是一個“單元地址”,這個地址單元中存放的數(shù)據(jù)才是要找的“操作數(shù)”。2)符號“@”表示“在…”,其含義與讀音皆同“at”。,例:[ MOV R1,#30H ;(R1)← 立即數(shù)30H ],[ MOV R1,#30H ;(R1)← 立即數(shù)30H ] MOV
6、 @R1,#0FH ;(30H)←立即數(shù)0FH MOV A,@R1 ;(A)←((30H))=#0FH,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,直接尋址——(P.46)指令中直接給出了操作數(shù)所在單元的地址或名稱 例:MOV R1,1FH ;(R1) ←(1FH) MOV 30H,4AH ;(30H)←(4AH),在本單片機(jī)中規(guī)定:訪問特殊功能寄存器SFR只能采用直接尋址方式。例如:MOV A, SP
7、; (A) ←(SP) MOV A, 81H ; (A) ←(SP) MOV P1, #5AH ; (P1)←(#5AH) MOV 90H,#5AH ; (P1)←(#5AH) MOV B, 30H ; (B) ←(30H),SFR的地址見 P.33表,,,相同,相同,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,在本單片機(jī)中訪問特殊功能寄存器S
8、FR只能采用直接尋址方式的原因:SFR分布在80H~0FFH范圍內(nèi),而52系列單片機(jī)有256字節(jié)的片內(nèi)RAM,其中的80H~0FFH的RAM與SFR所占地址重疊。,?MOV A, 90H 等效于 MOV A, P1 屬直接尋址 ?MOV A, @R0 ;[事先已知 (R0) = #90H ] 執(zhí)行的操作:A ←(90H) 屬寄存器間接尋址, ?隨意寫的指令
9、如:MOV A, 85H 則是非法的!,于是規(guī)定: 80H~0FFH范圍內(nèi)的RAM只能用寄存器間接尋址方式,而SFR只能用直接尋址方式。從而解決了地址沖突的問題。例如:,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,存儲器配置(片內(nèi)RAM),89C51片內(nèi)RAM 128字節(jié)(00H—7FH)89C52片內(nèi)RAM 256字節(jié)(00H—0FFH),,,,,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有的RAM區(qū),普通
10、RAM區(qū),位尋址區(qū),工作寄存器區(qū),,SFR分布在80H-FFH其中92個位可位尋址,80H,FFH,,89C51 128字節(jié),,89C52 256字節(jié),只能直接尋址,只能寄存器間接尋址,,,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,變址尋址——(P.47) 也稱為: 基址寄存器+變址寄存器間接尋址,以16位的地址指針寄存器DPTR或 16位的PC寄存器為基址寄存器,以累加器 A 為變址寄存器,兩者中的“內(nèi)容”形成一個16位的
11、“地址”,該“地址”所指的存儲單元中的內(nèi)容才是操作數(shù)。,P47例:[設(shè):A中已存有#A4H,DPTR中已存有#1234H] MOVC A,@A+DPTR;(A)←((A)+(DPTR))操作:將A4H+1234H=12D8H單元中的數(shù)放進(jìn)累加器A,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,相對尋址——(P.47)當(dāng)前PC值加上指令中規(guī)定的偏移量 rel,構(gòu)成實(shí)際的操作數(shù)地址例: SJMP rel 操作:跳轉(zhuǎn)到的目的地址 = 當(dāng)前
12、16位PC值 + rel,注意:1)“當(dāng)前PC值”指程序中下一條指令所在的首地址, 是一個16位數(shù);2)符號“rel”表示“偏移量”,是一個帶符號的單字 節(jié)數(shù),范圍是:-128—+127(80H—7FH),,在實(shí)際編程中,“rel” 通常用標(biāo)號代替,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,位尋址——(P.48)指令中直接給出了操作數(shù)所在的位地址。例: CLR P1.0 ;(P1.0) ← 0 SETB
13、ACC.7 ;(ACC.7)← 1 CPL C ;( C )← NOT( C ),注意: 1)位地址里的數(shù)據(jù)只可能是一個 0 或 1 2)有的位地址十分明確,如 P1.0, ACC.7等, 有的位地址則“不太明確”,如: [MOV A,17H ; (A)←(17H),17H是字節(jié)地址] MOV ACC.0,17H ;(ACC.0)←(17H),這里ACC.0 是位地址所
14、以該指令中的17H是22H單元的第7位,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,片內(nèi)RAM中有128個位可按位尋址的位,位地址:00H—7FH分布在:20H—2FH單元;另外,在SFR中還有92個位可按位尋址,,,,,00H,20H,2FH,7FH,1FH,30H,80H,FFH,52子系列才有的RAM區(qū),普通RAM區(qū),位尋址區(qū),工作寄存器區(qū),27H,22H,21H,20H,26H,24H,25H,23H,28H,,,07 06 05
15、 04 03 02 01 00,,,,,,,,0F 0E 0D 0C 0B 0A 09 08,,,,,,,,17 16 15 14 13 12 11 10,,,,,,,,1F 1E 1D 1C 1B 1A 19 18,,,,,,,,27 26 25 24 23 22 21 20,,,,,,,,2F 2E 2D 2C 2B 2A 29 28,,,,,,,,37 36 35 34 33
16、 32 31 30,,,,,,,,3F 3E 3D 3C 3B 3A 39 38,,,,,,,,47 46 45 44 43 42 41 40,,,,,,,,,,2FH,7F 7E 7D 7C 7B 7A 79 78,,,,,,,,,位地址,,總共128個可按位尋址的位,單元地址,,17,D7 D6 D5 D4 D3 D2 D1 D0,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,位尋址——(P.48)指令中直接給出了操
17、作數(shù)所在的位地址。例: CLR P1.0 ;(P1.0) ← 0 SETB ACC.7 ;(ACC.7)← 1 CPL C ;( C )← NOT( C ),注意: 1)位地址里的數(shù)據(jù)只可能是一個 0 或 1 2)有的位地址十分明確,如 P1.0, ACC.7等, 有的位地址則“不太明確”,如: [MOV A,17H ; (A)←(17H),17H是字節(jié)地址]
18、 MOV ACC.0,17H ;(ACC.0)←(17H),這里ACC.0 是位地址所以該指令中的17H是22H單元的第7位,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,MCS-51指令集,功能分五類,共111條指令,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,MCS-51指令集(五大類功能)P.49頁,數(shù)據(jù)傳送類指令: (29條)算術(shù)運(yùn)算類指令: (24條)邏輯運(yùn)算及移位類指令: (24條)控制轉(zhuǎn)
19、移類指令: (17條)位操作(布爾操作)類指令:(17條),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,內(nèi)部存儲器間傳送: (MOV——16條)外部數(shù)據(jù)存儲器與累加器間傳送: (MOVX——4條)程序存儲器向累加器傳送: (MOVC——2條)數(shù)據(jù)交換:(XCH,XCHD,SWAP——5條)堆棧操作: (PUSH,POP——2
20、條),(一)數(shù)據(jù)傳送類指令(5種/29條) P.49,——見P.49的表3-2,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,,,,,,,,,Acc 累加器,Direct 直接尋址,@Ri 間接尋址,Rn 寄存器,#data 立即數(shù),,,,,,,,,,Rn: R0—R7@Ri: @R0,@R1#data:8位立即數(shù)#data16:16位立即數(shù)direct:直接地址rel: 8位帶符號偏移量,(一)數(shù)據(jù)傳送類指令(5種/29條),內(nèi)
21、部存儲器間傳送指令 (16條): MOV 類指令的操作方向總是后面的操作數(shù) 指向前面的操作數(shù)!例:MOV A,30H ——(A)?(30H),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,數(shù)據(jù)傳送類指令(續(xù)) P.52,外部數(shù)據(jù)存儲器與累加器間傳送 (4條):MOVX類指令可在累加器與以@DPTR或@Ri所代表的外部 RAM 之間進(jìn)行數(shù)據(jù)傳送。,例如: MOVX A, @DPTR ——(A)? ((DPTR))MOVX A,
22、@Ri ——(A)? ((Ri)) MOVX @DPTR, A ——((DPTR)) ?(A) MOVX @Ri, A ——((Ri)) ?(A),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,程序存儲器向累加器傳送指令(2條): MOVC A,@A+DPTR MOVC A,@A+PC ——通常稱為查表指令,尋址方式屬: “基址寄存器 + 變址寄存器間接尋址”,數(shù)據(jù)傳送類
23、指令(續(xù)) P.52,@A+DPTR或@A+PC指向程序存儲器中的某單元。擬傳送給累加器ACC 的數(shù)據(jù)就是程序中事先寫進(jìn)去的表格數(shù)據(jù)。這些表格數(shù)據(jù)往往用偽指令 DB,DW 等定義在程序中。,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,數(shù)據(jù)傳送類指令(續(xù)),數(shù)據(jù)交換指令(5條): ——P.53XCH A,direct (字節(jié)互換)XCH A,@Ri (字節(jié)互換)
24、 XCH A,Rn (字節(jié)互換)(A) (direct)[或((Ri)),或(Rn)],,,XCHD A,@Ri 累加器 Acc的低4位與((Ri))的低4位互換,各自的高4位不變,SWAP A 累加器 Acc的低4位與自身的高4位互換,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,堆棧操作指令(2條): ——P.54,PUSH——壓棧指令,POP ——彈棧指令,√堆棧區(qū)由特殊功能寄存器堆棧指針SP 管
25、理√堆棧區(qū)可以安排在 RAM區(qū)任意位置,一般不安排在工作寄存器區(qū)和可按位尋址的RAM區(qū),而是放在RAM區(qū)的靠后的位置√堆??偸侵赶驐m敗掏ǔUSH與POP兩條指令成對使用,數(shù)據(jù)傳送類指令(續(xù)),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,例如:設(shè)(A)=7BH; (35H)=11H 并且知道(SP)=60H PUSH ACC ;(61H) ? #7BH PUSH 35H ;(62H) ?
26、 (35H) 即:(62H) ? #11H,POP ACC ;(A) ? (62H) 即:(A)? #11H POP 5AH ;(5AH) ? (61H) 即:(5AH) ? #7BH,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,(二)算術(shù)運(yùn)算類指令(6種/24條) P.54,加法運(yùn)算:
27、 (ADD——4條)帶進(jìn)位加法運(yùn)算: (ADDC——4條)帶借位減法運(yùn)算: (SUBB——4條)加1/減1操作: (INC,DEC——9條)單字節(jié)乘/除法運(yùn)算: (MUL,DIV——2條)十進(jìn)制調(diào)整: (DA A——1條),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,(二)算術(shù)運(yùn)算類指令(續(xù)) P.55,加法運(yùn)算:
28、 (ADD——4條)帶進(jìn)位加法運(yùn)算: (ADDC——4條)帶借位減法運(yùn)算: (SUBB——4條),所有的加法(ADD)、帶進(jìn)位加法(ADDC)、帶借位減法(SUBB)運(yùn)算都是以 A為一個加數(shù)或被減數(shù),最終結(jié)果也存進(jìn) A 。,加法(ADD)、帶進(jìn)位加法(ADDC) 以及帶借位減法(SUBB)運(yùn)算中,如果產(chǎn)生了進(jìn)位或借位,將自動對PSW中的Cy標(biāo)志位置“1” 。,帶進(jìn)位加法(A
29、DDC):(A)?(A)+(Cy)+(第二操作數(shù))帶借位減法(SUBB):(A)?(A)-(Cy)-(第二操作數(shù)),?,?,?,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,(二)算術(shù)運(yùn)算類指令(續(xù)) P.57,加1/減1操作: (INC,DEC——9條)INC, DEC與用加/減法指令做加1/減1 操作不同之處在于INC、DEC不影響標(biāo)志位.,單字節(jié)乘/除運(yùn)算: (MUL,DIV——2條)兩個單字節(jié)數(shù)的乘/除法運(yùn)算只在A與B之間進(jìn)行
30、。MUL AB: (A)與(B)相乘, 積為16位數(shù), (A)?積的高8位; (B)?積的低8位DIV AB: (A)除以(B),結(jié)果用2字節(jié)表示, (A)?商的整數(shù)部分;(B)?余數(shù),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,(二)算術(shù)運(yùn)算類指令(續(xù)) P.60,BCD碼是指“用二進(jìn)制表達(dá)的十進(jìn)制數(shù)”。如: 十進(jìn)制數(shù)20可以用二進(jìn)制數(shù)00010100B表示;
31、 也可以用十六進(jìn)制數(shù)14H表示; 還可以用BCD碼 00100000B 或 20H 表示。,4個二進(jìn)制位就可以表示一位BCD碼: 0000~1001 可表示十進(jìn)制數(shù)(BCD數(shù)) 0~9; 8個二進(jìn)制位就可以表示兩位壓縮的BCD碼:00000000~10011001 表示 00~99。,?,?,十進(jìn)制調(diào)整: (DA
32、 A——1條)用于兩個BCD碼之間的相加,這條指令只能跟在 ADD 或 ADDC 之后,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,若(A)3~0?9或(AC)=1則(A)3~0?(A)3~0+6; 若(A)7~4?9或(CY)=1則(A)7~4?(A)7~4+6;,P.60例5:兩個十進(jìn)制數(shù)“65”與“58”相加,根據(jù)常識,顯然其和應(yīng)當(dāng)為“123”。,MOV A,#65H ADD A,#58H
33、 DA A結(jié)果:(A)= 23H (CY)= 1,?,?,?,指令 “DA A” 完成的操作:,6 5 0110 0101 5 8 0101 1000,,+,,,1,3,18,19,2,6 6 0110 0110,,,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,若(A)3~0?9或(AC)=1則(A)3~0?(A)3~0+6; 若(A)7~4?9或(CY)=1則(A)7~4?(A)7~
34、4+6;,又如:兩個十進(jìn)制數(shù)“39”與“58”相加,根據(jù)常識,顯然其和應(yīng)當(dāng)為“97”。,MOV A,#39H ADD A,#58H DA A結(jié)果:(A)= 97H (CY)= 0,?,?,?,3 9 0011 1001 5 8 0101 1000,,+,,0,7,23,9,6 0110,,指令 “DA A” 完成的操作:,,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,(三)
35、邏輯運(yùn)算及移位類指令(5種/24條) —— P.61,邏輯與運(yùn)算: (ANL——6條)邏輯或運(yùn)算: (ORL——6條)邏輯異或運(yùn)算: (XRL——6條)累加器清零/取反: (CLR,CPL——2條)累加器移位操作: (RL,RLC,RR,RRC—4條),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,邏輯運(yùn)算及移位類指令(續(xù))
36、 P.61,邏輯與(ANL),邏輯或(ORL),邏輯異或(XRL):,,累加器清零/取反操作 (CLR,CPL——2條),CLR A ——對累加器清零 1 Byte 1 個Tm CPL A ——對累加器按位取非 1 Byte 1 個Tm,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,邏輯運(yùn)算指令的常見用法,邏輯與ANL用于清0或者保留某些位:例: ANL A, #0FH; 則(A) = 0AH,( 已知累加器A中已存有數(shù):
37、9AH ),邏輯或ORL用于置1或者保留某些位:例: ORL A, #0FH; 則(A) = 9FH,邏輯異或XRL用于取反或者保留某些位:例: XRL A, #0FH; 則(A) = 95H (A) ? 1001 1010 #0FH ? 0000 1111 95H ? 1001 0101,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,邏輯運(yùn)算及移位類指令(續(xù)) P.64,累
38、加器移位操作:(RL,RLC,RR,RRC——4條),RL A 左環(huán)移,,,,,,累加器 A,,,,,,,,累加器 A,Cy,,,,,,,,累加器 A,Cy,,,,,,累加器 A,RRC A 帶進(jìn)位位右環(huán)移,RR A 右環(huán)移,RLC A
39、 帶進(jìn)位位左環(huán)移,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,(四)控制轉(zhuǎn)移類指令(4種/17條) P.65,此類指令改變程序的執(zhí)行順序——改變當(dāng)前PC值,無條件轉(zhuǎn)移: (LJMP,AJMP,SJMP,JMP——4條),條件轉(zhuǎn)移(判斷跳轉(zhuǎn)): (JZ,JNZ,CJNE,DJNZ——8條),子程序調(diào)用及返回: (LCALL,ACALL,RET,RETI——4條),空操作:
40、 (NOP——1條) “耗時”一個機(jī)器周期。 do nothing!,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,控制轉(zhuǎn)移類指令(續(xù)) P.65-67,無條件轉(zhuǎn)移: LJMP,AJMP,SJMP,JMP——4條,LJMP addr16 長跳轉(zhuǎn)指令 ——可在64K范圍內(nèi)跳轉(zhuǎn),AJMP addr11 絕對跳轉(zhuǎn)指令 ——可在指令所在的2K范圍內(nèi)跳轉(zhuǎn),
41、SJMP rel 相對跳轉(zhuǎn)指令 ——可在當(dāng)前PC-128與+127范圍內(nèi)跳轉(zhuǎn),JMP @A+DPTR 間接長跳轉(zhuǎn)指令 ——可在以DPTR為基址 + A為偏移量 之和所指向的64K程序范圍內(nèi)跳轉(zhuǎn),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,控制轉(zhuǎn)移類指令(續(xù)) P.67-69,條件轉(zhuǎn)移: JZ,JNZ,CJNE,DJNZ——8條,JZ relJNZ re
42、l——根據(jù)Acc的內(nèi)容是否為0決定是否跳轉(zhuǎn),DJNZ direct,relDJNZ Rn, rel——將direct(或Rn)里的內(nèi)容減 1,結(jié)果不等于0就跳轉(zhuǎn);等于0則不跳轉(zhuǎn)繼續(xù)往下走。,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,條件轉(zhuǎn)移(續(xù)),CJNE A, #data, relCJNE A, direct,rel CJNE @Ri,#data, relCJNE Rn, #data, rel ——將A(或@
43、Ri,或Rn)與#data(或direct)相比較,其值不相等就跳轉(zhuǎn);相等則不跳轉(zhuǎn),繼續(xù)往下走。,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,控制轉(zhuǎn)移類指令(續(xù)) P.70,LCALL addr16 子程序長調(diào)用指令——可在64K范圍內(nèi)調(diào)用子程序,子程序調(diào)用及返回: (LCALL,ACALL,RET,RETI——4條),ACALL addr11 子程序絕對調(diào)用指令——可在指令所在的2K范圍
44、內(nèi)調(diào)用子程序,RET 子程序返回指令——子程序結(jié)束并返回調(diào)用的下一條指令,RETI 中斷服務(wù)子程序返回指令——中斷結(jié)束/返回被打斷處的下一條指令,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,(五)位操作類指令(17條) P.71,位操作類指令 以位為單位進(jìn)行邏輯運(yùn)算及操作,可分為4種:,位傳送: (MOV——2條),位清零/置位:
45、 (CLR,SETB——4條),位邏輯與/或/非運(yùn)算:(ANL,ORL,CPL——6條),位條件轉(zhuǎn)移: (JC,JNC,JB,JNB,JBC——5條),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,位操作類指令(續(xù)) P.72,位傳送指令(2條): MOV C, bit ——(C)?(bit) MOV bit, C ——(bit)?(C) 注: bit表示位地址,位清零/置位指令(4條): CLR bit(
46、或C)—— (bit或 C)?“0” SETB bit(或C)—— (bit或 C)?“1”,位邏輯與/或/非指令(6條): ANL C,bit(或/bit) ORL C,bit(或/bit) CPL bit (或 C) 注:“/bit”表示對bit位先取反然后再參加運(yùn)算,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,位操作類指令(續(xù)) P.74,判位條件轉(zhuǎn)移指令(5條):,JC rel——(Cy
47、)=“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn),JNC rel——(Cy)?“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn),JB bit,rel ——(bit)=“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn),JNB bit,rel ——(bit)?“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn),JBC bit,rel ——(bit)=“1”就先將其清零 再跳轉(zhuǎn); 否則,不動此位也不跳轉(zhuǎn)。,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,任務(wù)一:控制一盞燈點(diǎn)亮,任
48、務(wù)二:紅燈周期性地亮/滅,JOB3: CLR P1.1 ; P1.1清“0” ,亮綠燈REDO: SETB P1.3 ;將P1.3置“1”CHECK:JNB P1.3,CHECK ;檢測傳感器是否被阻斷LOOP: ………… ;有入侵者,報(bào)警! AJMP REDO ;再跳回去檢測,JOB1: CLR P1.0 ;P1.0清“0”,亮紅燈HERE: AJMP HERE
49、 ;原地等待,不做別的事,JOB2: CPL P1.0 ;對P1.0取反:紅燈亮/滅 ACALL DELAY ;延時1秒 AJMP JOB2 ;重復(fù),任務(wù)三:紅外防盜報(bào)警,前面的簡單測控實(shí)例中的程序:,位操作指令,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,任務(wù)一:控制一盞燈點(diǎn)亮,任務(wù)二:紅燈周期性地亮/滅,JOB3: CLR P1.1 ; P1.1清“0” ,亮綠燈REDO: SET
50、B P1.3 ;將P1.3置“1”CHECK:JNB P1.3,CHECK ;檢測傳感器是否被阻斷LOOP: ………… ;有入侵者,報(bào)警! AJMP REDO ;再跳回去檢測,JOB1: CLR P1.0 ;P1.0清“0”,亮紅燈HERE: AJMP HERE ;原地等待,不做別的事,JOB2: CPL P1.0 ;對P1.0取反:紅燈亮/滅 ACALL
51、 DELAY ;延時1秒 AJMP JOB2 ;重復(fù),任務(wù)三:紅外防盜報(bào)警,跳轉(zhuǎn)指令,前面的簡單測控實(shí)例中的程序:,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,小結(jié):MCS-51指令集(五大類功能),數(shù)據(jù)傳送類指令 (29條)算術(shù)運(yùn)算類指令 (24條)邏輯運(yùn)算及移位類指令 (24條)控制轉(zhuǎn)移類指令 (17條)位操作(布爾操作)類指令 (17條),
52、小結(jié),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,內(nèi)部存儲器間傳送: (MOV——16條)外部數(shù)據(jù)存儲器RAM與累加器間傳送: (MOVX——4條)程序存儲器ROM向累加器傳送: (MOVC——2條)數(shù)據(jù)交換:(XCH,XCHD,SWAP——5條)堆棧操作: (PUSH,POP——2條),(一)數(shù)據(jù)傳送類指令(5種/29條),小結(jié),《單片微機(jī)
53、原理及應(yīng)用》教學(xué)課件,(二)算術(shù)運(yùn)算類指令(6種/24條),加法運(yùn)算 (ADD——4條)帶進(jìn)位加法運(yùn)算 (ADDC——4條)帶借位減法運(yùn)算 (SUBB——4條)加1/減1操作 (INC,DEC——9條)單字節(jié)乘/除法運(yùn)算(MUL,DIV——2條)十進(jìn)制調(diào)整 (DA A——1條),小結(jié),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,(三)邏輯運(yùn)算及移位指令(5種/24條)
54、,邏輯與運(yùn)算: (ANL——6條)邏輯或運(yùn)算: (ORL——6條)邏輯異或運(yùn)算: (XRL——6條)累加器清零/取反: (CLR,CPL——2條)累加器移位操作:(RL,RLC,RR,RRC—4條),小結(jié),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,(四)控制轉(zhuǎn)移類指令(4種/17條),無條件轉(zhuǎn)移: (LJMP,AJMP,SJMP,JMP——4條),條件轉(zhuǎn)移(判斷跳轉(zhuǎn)):
55、 (JZ,JNZ,CJNE,DJNZ——8條),子程序調(diào)用及返回: (LCALL,ACALL,RET,RETI——4條),空操作: (NOP——1條),小結(jié),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,(五)位操作類指令(4種17條),位傳送: (MOV——2條),位清零/置位: (CLR,SETB——4條),位邏輯與/或/非運(yùn)算:
56、 (ANL,ORL,CPL——6條),位條件轉(zhuǎn)移: (JC,JNC,JB,JNB,JBC——5條),小結(jié),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,匯編語言與 簡單程序設(shè)計(jì),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,匯編語言程序設(shè)計(jì)中的數(shù),計(jì)算機(jī)只能識別二進(jìn)制數(shù)——機(jī)器指令,它原本是不認(rèn)識常用的十六進(jìn)制數(shù)和十進(jìn)制數(shù)的。,機(jī)器指令/目標(biāo)代碼: 由0/1代碼組成
57、的操作碼與操作數(shù)。,十六進(jìn)制數(shù):便于讀寫記憶的二進(jìn)制數(shù)的簡寫形式。 (0~9,A~F 后綴:H/h),BCD碼:用二進(jìn)制數(shù)表達(dá)的十進(jìn)制數(shù)。 (0~9表示為:0000~1001B 后綴:B/b,H/h),二進(jìn)制數(shù):由0/1組成、“逢2進(jìn)1”的數(shù)制。 如:01011110B (0~1 后綴:B/b),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,匯編語言編程基本規(guī)則,匯編語言:用助記符描述的指令的集
58、合。,√指令中以 A—F 開頭的十六進(jìn)制數(shù)前必須添一個 “0”。,√二進(jìn)制數(shù)必須帶后綴“B”或“b”;十六進(jìn)制數(shù)必須帶后綴“H”或“h”;十進(jìn)制數(shù)的后綴是“D”或“d”或無.,[標(biāo)號:]操作碼 [目的操作數(shù)][,源操作數(shù)][;注釋],匯編程序:匯編語言編寫的程序借助編譯工具編譯成為目標(biāo)代碼,計(jì)算機(jī)才能識別。這個編譯工具稱為匯編程序。,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,匯編程序的偽指令,匯編程序 → 軟件→ 工具→工具軟件:
59、 將程序員用匯編語言編寫的程序翻譯成機(jī)器碼,(真)指令:告訴計(jì)算機(jī)如何操作以及做何種操作,用匯編語言編寫的程序在此被稱為應(yīng)用程序,偽指令:告訴匯編程序在翻譯應(yīng)用程序時有何具體約定。偽指令不進(jìn)行具體的操作,那是真指令的事。 比如:從何處開始,何處結(jié)束,某些編程者自己規(guī)定的
60、表述代表什么意思……,?,?,?,?,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,匯編程序的常用偽指令,ORG addr16——ASM51程序中一定要寫!規(guī)定編譯后的機(jī)器代碼存放的起始位置。,END ——ASM51程序中一定要寫!表示翻譯到此結(jié)束,其后的任何內(nèi)容不予理睬。,符號名稱 EQU 表達(dá)式將表達(dá)式的值賦予符號名稱。程序中凡出現(xiàn)該符號名稱就等同于該表達(dá)式。,$ ——“當(dāng)前PC值”也叫位置計(jì)數(shù)器
61、代表正在執(zhí)行的指令所在位置。,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,匯編程序的常用偽指令(續(xù)),符號名稱 BIT 位地址將位地址的值賦予符號名稱。程序中凡出現(xiàn)該符號名稱就代表該位地址。,DW 雙字節(jié)數(shù)據(jù)[或雙字節(jié)數(shù)據(jù)組]將雙字節(jié)數(shù)據(jù)[或雙字節(jié)數(shù)據(jù)組]順序存放在此后的存儲單元中。占據(jù)相應(yīng)存儲空間。,DB 8位數(shù)據(jù)[或8位數(shù)據(jù)組]將8位數(shù)據(jù)[或8位數(shù)據(jù)組]順序存放在此后的存儲單元中。占相應(yīng)數(shù)量的存儲空間。,《單片微機(jī)原理及應(yīng)用》教學(xué)
62、課件,程序的順序/分支/循環(huán)三種基本結(jié)構(gòu),ORG 2000HBCD2B:MOV A, R2 ;取入口數(shù)據(jù) ANL A, #0F0H ;取出十位 SWAP A ;高4位 低4位 MOV B, #0AH MUL AB ;十位乘10 MOV R3,A ;積暫存進(jìn)R3 MOV A, R2;再取入口數(shù)據(jù)
63、 ANL A, #0FH ;取出個位 ADD A, R3 MOV R2,A ;結(jié)果 R2 RET ;若不是子程序可用END,例P.82—1: 將R2中BCD碼數(shù)轉(zhuǎn)為二進(jìn)制數(shù)存進(jìn)R2(此子程序在下一例中還要用到),,,,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,編程要點(diǎn): 兩字節(jié) BCD碼數(shù)范圍為: 0000H—9999H 相應(yīng)2進(jìn)制/16進(jìn)制數(shù)為: 0000H—270FH
64、 調(diào)用 BCD2B子程序?qū)崿F(xiàn)“千位,百位”轉(zhuǎn)為二進(jìn)制, 并乘100; 再調(diào) BCD2B子程序?qū)崿F(xiàn)“十位,個位”轉(zhuǎn)為二進(jìn)制; 最后,對位相加。,例P.82—2:將R5R4中的雙字節(jié)BCD碼數(shù)轉(zhuǎn)為 二進(jìn)制數(shù)存于R5R4中。,程序的順序/分支/循環(huán)三種基本結(jié)構(gòu),?,?,?,?,《單片微機(jī)原理及應(yīng)用》教學(xué)課件,例P.82—2: 將R5R4中的兩字節(jié)BCD碼數(shù)轉(zhuǎn)為二進(jìn)制數(shù)存于R5R4中,,,,,,X 100,,,,,,,,千
65、百,十 個,二進(jìn)制,+,,,,,,,Cy,+,(R5),(R4),(R5),(R4),(R6),(A),(R5),(A),二進(jìn)制,二進(jìn)制,二進(jìn)制,二進(jìn)制,二進(jìn)制,調(diào) BCD2B,調(diào) BCD2B,,程序的順序/分支/循環(huán)三種基本結(jié)構(gòu),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,ORG 2000H VAR EQU 30H ;定義緩存單元 FUNC EQU 31H ;書中缺此二句BR1: MOV A,VAR
66、 ;取出變量“X” JZ COMP ;若=0,就賦 0 JNB ACC.7,POS1 ;判斷 = 正? MOV A,#0FFH ;(-1 = +1取反加1) SJMP COMP ;輸出 -1POS1:MOV A,#01H ;輸出 +1COMP:MOV FUNC,A ;賦給函數(shù)“Y”HERE:AJMP HERE EN
67、D,,P.83例3:,1 (X>0) 0 (X=0) –1(X<0),Y=,,程序的順序/分支/循環(huán)三種基本結(jié)構(gòu),《單片微機(jī)原理及應(yīng)用》教學(xué)課件,任務(wù)一:控制一盞燈點(diǎn)亮 任務(wù)二:紅燈周期性亮/滅 任務(wù)三:紅外防盜報(bào)警,0RG 0000H AJMP MAIN ORG 0003H RL A ACALL DELAY RETIMAI
68、N:MOV A,#80H SETB EX0 SETB EAWAIT:JB ACC.0,JOB1 JB ACC.1,JOB2 JB ACC.2,JOB3 AJMP WAIT,JOB1: CLR P1.0 ;亮紅燈HERE: AJMP HERE,JOB2: CPL P1.0 ;亮/滅 ACALL DELAY ;延時1秒 AJMP JOB2
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)指令
- 單片機(jī)學(xué)習(xí)資料
- 單片機(jī)指令匯總
- 單片機(jī)指令大全
- 單片機(jī)學(xué)習(xí)之pic單片機(jī)c語言編程教程
- 單片機(jī)匯編指令
- 單片機(jī)編程
- 單片機(jī)學(xué)習(xí)資料大全
- 單片機(jī)指令系統(tǒng)
- 51單片機(jī)指令表
- 單片機(jī)指令系統(tǒng)75018
- 51單片機(jī)c語言編程-管理資料下載
- 單片機(jī)最全指令表
- 單片機(jī)-匯編指令集、
- 單片機(jī)指令系統(tǒng)3
- 單片機(jī)編程實(shí)例大全
- 單片機(jī)編程實(shí)例大全
- 單片機(jī)學(xué)習(xí)機(jī)及編程器的設(shè)計(jì)與制作
- 單片機(jī)應(yīng)用編程技巧
- 單片機(jī)編程100例
評論
0/150
提交評論