教學(xué)課件 51單片機(jī)學(xué)習(xí)_第1頁
教學(xué)課件 51單片機(jī)學(xué)習(xí)_第2頁
教學(xué)課件 51單片機(jī)學(xué)習(xí)_第3頁
教學(xué)課件 51單片機(jī)學(xué)習(xí)_第4頁
教學(xué)課件 51單片機(jī)學(xué)習(xí)_第5頁
已閱讀5頁,還剩129頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第二講:指令與編程本講重點(diǎn):

尋址方式;MCS-51指令集;偽指令;匯編語言與簡單程序設(shè)計(jì).單片微機(jī)原理及應(yīng)用》教學(xué)課件第二講:指令與編程本講重點(diǎn):單片微機(jī)原理及應(yīng)用》教學(xué)課件第三章

指令系統(tǒng)及程序設(shè)計(jì)(P.43)51系列單片機(jī)指令集含有111條指令

每條指令在執(zhí)行時(shí)要花去一定的時(shí)間,以機(jī)器周期為單位。按指令執(zhí)行時(shí)間分類:單周期(64條);雙周期(45條);4周期(2條)按指令的功能分類,可分為5大類:數(shù)據(jù)傳送類(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é)課件第三章指令系統(tǒng)及程序設(shè)計(jì)(P.43)51系列單片機(jī)指令集ASM-51指令的格式(P.44)方括符[]表示可選項(xiàng)標(biāo)號代表指令所在地址,1-8個(gè)字母/數(shù)字,“:”結(jié)尾操作碼就是指令功能助記符,指令實(shí)體目的操作數(shù)源操作數(shù)注釋,以“;”開頭[標(biāo)號:]操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]單片微機(jī)原理及應(yīng)用》教學(xué)課件ASM-51指令的格式(P.44)方括符[]表示可選項(xiàng)[標(biāo)51單片機(jī)指令的尋址方式(P.45)寄存器尋址立即尋址寄存器間接尋址直接尋址變址尋址(基址寄存器+變址寄存器間接尋址)相對尋址位尋址尋址方式:指令按地址獲得操作數(shù)的方式七種尋址方式,一條指令可能含多種尋址方式單片微機(jī)原理及應(yīng)用》教學(xué)課件51單片機(jī)指令的尋址方式(P.45)寄存器尋址尋址方式:指令寄存器尋址——(P.45)從寄存器中讀取操作數(shù)或存放操作數(shù)進(jìn)寄存器例:MOVA,B;(A)←(B)

MOV30H,R0

;(30H)←(R0)

MOVA,R1;(A)←(R1)單片微機(jī)原理及應(yīng)用》教學(xué)課件寄存器尋址——(P.45)單片微機(jī)原理及應(yīng)用》教學(xué)課件立即尋址——(P.45)操作數(shù)直接就出現(xiàn)在指令中例:MOVA,#64H;(A)←立即數(shù)64H

ADDA,#05H

;(A)←(A)+立即數(shù)05H注意:符號“#”表明其后跟的是立即數(shù),立即數(shù)——就是數(shù)字量本身。單片微機(jī)原理及應(yīng)用》教學(xué)課件立即尋址——(P.45)單片微機(jī)原理及應(yīng)用》教學(xué)課件寄存器間接尋址——(P.46)寄存器中的內(nèi)容是一個(gè)地址,由該地址單元尋址到所需的操作數(shù)注意:1)“間接”表示某寄存器中的“內(nèi)容”只是一個(gè)“單元地址”,這個(gè)地址單元中存放的數(shù)據(jù)才是要找的“操作數(shù)”。2)符號“@”表示“在…”,其含義與讀音皆同“at”。例:[MOVR1,#30H;(R1)←立即數(shù)30H

]

[MOVR1,#30H;(R1)←立即數(shù)30H

]

MOV@R1,#0FH;(30H)←立即數(shù)0FH

MOVA,@R1;(A)←((30H))=#0FH單片微機(jī)原理及應(yīng)用》教學(xué)課件寄存器間接尋址——(P.46)注意:例:[MOVR1,直接尋址——(P.46)指令中直接給出了操作數(shù)所在單元的地址或名稱例:MOVR1,1FH;(R1)←(1FH)

MOV30H,4AH;(30H)←(4AH)在本單片機(jī)中規(guī)定:訪問特殊功能寄存器SFR只能采用直接尋址方式。例如:MOVA,SP;(A)←(SP)MOVA,81H;(A)←(SP)

MOVP1,#5AH;(P1)←(#5AH)MOV90H,#5AH;(P1)←(#5AH)

MOVB,30H;(B)←(30H)SFR的地址見P.33表相同相同單片微機(jī)原理及應(yīng)用》教學(xué)課件直接尋址——(P.46)在本單片機(jī)中規(guī)定:訪問特殊功能寄存器在本單片機(jī)中訪問特殊功能寄存器SFR只能采用直接尋址方式的原因:SFR分布在80H~0FFH范圍內(nèi),而52系列單片機(jī)有256字節(jié)的片內(nèi)RAM,其中的80H~0FFH的RAM與SFR所占地址重疊。MOVA,90H等效于MOVA,

P1屬直接尋址MOVA,@R0;[事先已知(R0)=#90H]執(zhí)行的操作:A←(90H)屬寄存器間接尋址,隨意寫的指令如:MOVA,85H則是非法的!于是規(guī)定:80H~0FFH范圍內(nèi)的RAM只能用寄存器間接尋址方式,而SFR只能用直接尋址方式。從而解決了地址沖突的問題。例如:單片微機(jī)原理及應(yīng)用》教學(xué)課件在本單片機(jī)中訪問特殊功能寄存器SFR只能采用直接尋址方式的原存儲器配置(片內(nèi)RAM)89C51片內(nèi)RAM

128字節(jié)(00H—7FH)89C52片內(nèi)RAM

256字節(jié)(00H—0FFH)00H20H2FH7FH1FH30H80HFFH52子系列才有的RAM區(qū)普通RAM區(qū)位尋址區(qū)工作寄存器區(qū)SFR分布在80H-FFH其中92個(gè)位可位尋址80HFFH89C51128字節(jié)89C52256字節(jié)只能直接尋址只能寄存器間接尋址單片微機(jī)原理及應(yīng)用》教學(xué)課件存儲器配置(片內(nèi)RAM)89C51片內(nèi)RAM128字節(jié)(0變址尋址——(P.47)也稱為:基址寄存器+變址寄存器間接尋址以16位的地址指針寄存器DPTR或16位的PC寄存器為基址寄存器,以累加器A為變址寄存器,兩者中的“內(nèi)容”形成一個(gè)16位的“地址”,該“地址”所指的存儲單元中的內(nèi)容才是操作數(shù)。P47例:[設(shè):A中已存有#A4H,DPTR中已存有#1234H]

MOVCA,@A+DPTR;(A)←((A)+(DPTR))操作:將A4H+1234H=12D8H單元中的數(shù)放進(jìn)累加器A單片微機(jī)原理及應(yīng)用》教學(xué)課件變址尋址——(P.47)以16位的地址指針寄存器DPTR或相對尋址——(P.47)當(dāng)前PC值加上指令中規(guī)定的偏移量rel,構(gòu)成實(shí)際的操作數(shù)地址例:SJMPrel

操作:跳轉(zhuǎn)到的目的地址

=

當(dāng)前16位PC值+rel注意:1)“當(dāng)前PC值”指程序中下一條指令所在的首地址,是一個(gè)16位數(shù);2)符號“rel”表示“偏移量”,是一個(gè)帶符號的單字節(jié)數(shù),范圍是:-128—+127(80H—7FH),在實(shí)際編程中,“rel”通常用標(biāo)號代替單片微機(jī)原理及應(yīng)用》教學(xué)課件相對尋址——(P.47)注意:在實(shí)際編程中,“rel”通常位尋址——(P.48)指令中直接給出了操作數(shù)所在的位地址。例:CLRP1.0;(P1.0)←0

SETBACC.7;(ACC.7)←1

CPLC

;(C)←NOT(C)注意:1)位地址里的數(shù)據(jù)只可能是一個(gè)0

1

2)有的位地址十分明確,如

P1.0,ACC.7等,

有的位地址則“不太明確”,如:

[MOVA,17H;(A)←(17H),17H是字節(jié)地址]

MOVACC.0,17H;(ACC.0)←(17H),這里ACC.0是位地址所以該指令中的17H是22H單元的第7位單片微機(jī)原理及應(yīng)用》教學(xué)課件位尋址——(P.48)注意:單片微機(jī)原理及應(yīng)用》教學(xué)課件片內(nèi)RAM中有128個(gè)位可按位尋址的位,位地址:00H—7FH分布在:20H—2FH單元;另外,在SFR中還有92個(gè)位可按位尋址00H20H2FH7FH1FH30H80HFFH52子系列才有的RAM區(qū)普通RAM區(qū)位尋址區(qū)工作寄存器區(qū)27H22H21H20H26H24H25H23H28H07060504030201000F0E0D0C0B0A090817161514131211101F1E1D1C1B1A191827262524232221202F2E2D2C2B2A292837363534333231303F3E3D3C3B3A393847464544434241402FH7F7E7D7C7B7A7978位地址總共128個(gè)可按位尋址的位單元地址17D7D6D5D4D3D2D1D0單片微機(jī)原理及應(yīng)用》教學(xué)課件片內(nèi)RAM中有128個(gè)位可按位尋址的位,位地址:00H—7F位尋址——(P.48)指令中直接給出了操作數(shù)所在的位地址。例:CLRP1.0;(P1.0)←0

SETBACC.7;(ACC.7)←1

CPLC

;(C)←NOT(C)注意:1)位地址里的數(shù)據(jù)只可能是一個(gè)0

1

2)有的位地址十分明確,如

P1.0,ACC.7等,

有的位地址則“不太明確”,如:

[MOVA,17H;(A)←(17H),17H是字節(jié)地址]

MOVACC.0,17H;(ACC.0)←(17H),這里ACC.0是位地址所以該指令中的17H是22H單元的第7位單片微機(jī)原理及應(yīng)用》教學(xué)課件位尋址——(P.48)注意:單片微機(jī)原理及應(yīng)用》教學(xué)課件MCS-51指令集功能分五類,共111條指令單片微機(jī)原理及應(yīng)用》教學(xué)課件MCS-51指令集功能分五類,共111條指令單片微機(jī)原理及應(yīng)MCS-51指令集(五大類功能)P.49頁數(shù)據(jù)傳送類指令:(29條)算術(shù)運(yùn)算類指令:(24條)邏輯運(yùn)算及移位類指令:(24條)控制轉(zhuǎn)移類指令:(17條)位操作(布爾操作)類指令:(17條)單片微機(jī)原理及應(yīng)用》教學(xué)課件MCS-51指令集(五大類功能)P.49頁數(shù)據(jù)傳送類指令:內(nèi)部存儲器間傳送:(MOV——16條)外部數(shù)據(jù)存儲器與累加器間傳送:(MOVX——4條)程序存儲器向累加器傳送:(MOVC——2條)數(shù)據(jù)交換:(XCH,XCHD,SWAP——5條)堆棧操作:(PUSH,POP——2條)(一)數(shù)據(jù)傳送類指令(5種/29條)P.49——見P.49的表3-2單片微機(jī)原理及應(yīng)用》教學(xué)課件內(nèi)部存儲器間傳送:(MOV——16條)(一)數(shù)據(jù)傳送類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)部存儲器間傳送指令(16條):

MOV類指令的操作方向總是后面的操作數(shù)指向前面的操作數(shù)!例:MOVA,30H——(A)(30H)

單片微機(jī)原理及應(yīng)用》教學(xué)課件Acc累加器Direct直接尋址@Ri間接尋址Rn寄數(shù)據(jù)傳送類指令(續(xù))P.52外部數(shù)據(jù)存儲器與累加器間傳送(4條):MOVX類指令可在累加器與以@DPTR或@Ri所代表的外部RAM之間進(jìn)行數(shù)據(jù)傳送。例如:

MOVXA,@DPTR——(A)((DPTR))MOVXA,@Ri——(A)

((Ri))MOVX@DPTR,A——((DPTR))(A)MOVX@Ri,A——((Ri))(A)單片微機(jī)原理及應(yīng)用》教學(xué)課件數(shù)據(jù)傳送類指令(續(xù))P.52外部數(shù)據(jù)存儲器與累加器程序存儲器向累加器傳送指令(2條):MOVCA,@A+DPTR

MOVCA,@A+PC

——通常稱為查表指令,尋址方式屬:“基址寄存器

+變址寄存器間接尋址”數(shù)據(jù)傳送類指令(續(xù))P.52@A+DPTR或@A+PC指向程序存儲器中的某單元。擬傳送給累加器ACC的數(shù)據(jù)就是程序中事先寫進(jìn)去的表格數(shù)據(jù)。這些表格數(shù)據(jù)往往用偽指令DB,DW等定義在程序中。單片微機(jī)原理及應(yīng)用》教學(xué)課件程序存儲器向累加器傳送指令(2條):數(shù)據(jù)傳送類指令(續(xù))數(shù)據(jù)傳送類指令(續(xù))數(shù)據(jù)交換指令(5條):——P.53XCHA,direct(字節(jié)互換)XCHA,@Ri(字節(jié)互換)XCHA,Rn(字節(jié)互換)(A)(direct)[或((Ri)),或(Rn)]XCHDA,@Ri累加器Acc的低4位與((Ri))的低4位互換,各自的高4位不變SWAPA累加器Acc的低4位與自身的高4位互換單片微機(jī)原理及應(yīng)用》教學(xué)課件數(shù)據(jù)傳送類指令(續(xù))數(shù)據(jù)交換指令(5條):堆棧操作指令(2條):——P.54PUSH——壓棧指令POP——彈棧指令√堆棧區(qū)由特殊功能寄存器堆棧指針SP

管理√堆棧區(qū)可以安排在RAM區(qū)任意位置,一般不安排在工作寄存器區(qū)和可按位尋址的RAM區(qū),而是放在RAM區(qū)的靠后的位置√堆??偸侵赶驐m敗掏ǔUSH與POP兩條指令成對使用數(shù)據(jù)傳送類指令(續(xù))單片微機(jī)原理及應(yīng)用》教學(xué)課件堆棧操作指令(2條):——P.54PUSH——壓棧例如:設(shè)(A)=7BH;(35H)=11H并且知道(SP)=60HPUSHACC;(61H)#7BHPUSH35H;(62H)(35H)即:(62H)#11HPOPACC;(A)(62H)即:(A)#11HPOP5AH;(5AH)(61H)即:(5AH)#7BH單片微機(jī)原理及應(yīng)用》教學(xué)課件例如:設(shè)(A)=7BH;(35H)=11HP(二)算術(shù)運(yùn)算類指令(6種/24條)

P.54加法運(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)整:

(DAA——1條)單片微機(jī)原理及應(yīng)用》教學(xué)課件(二)算術(shù)運(yùn)算類指令(6種/24條)P.54加法運(yùn)算:(二)算術(shù)運(yùn)算類指令(續(xù))P.55加法運(yùn)算:

(ADD——4條)帶進(jìn)位加法運(yùn)算:

(ADDC——4條)帶借位減法運(yùn)算:

(SUBB——4條)所有的加法(ADD)、帶進(jìn)位加法(ADDC)、帶借位減法(SUBB)運(yùn)算都是以A為一個(gè)加數(shù)或被減數(shù),最終結(jié)果也存進(jìn)A。加法(ADD)、帶進(jìn)位加法(ADDC)以及帶借位減法(SUBB)運(yùn)算中,如果產(chǎn)生了進(jìn)位或借位,將自動對PSW中的Cy標(biāo)志位置“1”。帶進(jìn)位加法(ADDC):(A)(A)+(Cy)+(第二操作數(shù))帶借位減法(SUBB):(A)(A)-(Cy)-(第二操作數(shù))單片微機(jī)原理及應(yīng)用》教學(xué)課件(二)算術(shù)運(yùn)算類指令(續(xù))P.55加法運(yùn)算:(二)算術(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條)兩個(gè)單字節(jié)數(shù)的乘/除法運(yùn)算只在A與B之間進(jìn)行。MULAB:(A)與(B)相乘,積為16位數(shù),(A)積的高8位;(B)積的低8位DIVAB:(A)除以(B),結(jié)果用2字節(jié)表示,(A)商的整數(shù)部分;(B)余數(shù)單片微機(jī)原理及應(yīng)用》教學(xué)課件(二)算術(shù)運(yùn)算類指令(續(xù))P.57加1/減1操作:(二)算術(shù)運(yùn)算類指令(續(xù))P.60BCD碼是指“用二進(jìn)制表達(dá)的十進(jìn)制數(shù)”。如:十進(jìn)制數(shù)20可以用二進(jìn)制數(shù)00010100B表示;也可以用十六進(jìn)制數(shù)14H表示;還可以用BCD碼00100000B或20H表示。4個(gè)二進(jìn)制位就可以表示一位BCD碼:0000~1001可表示十進(jìn)制數(shù)(BCD數(shù))0~9;

8個(gè)二進(jìn)制位就可以表示兩位壓縮的BCD碼:00000000~10011001表示00~99。十進(jìn)制調(diào)整:

(DAA——1條)用于兩個(gè)BCD碼之間的相加,這條指令只能跟在ADD或ADDC之后單片微機(jī)原理及應(yīng)用》教學(xué)課件(二)算術(shù)運(yùn)算類指令(續(xù))P.60BCD碼是指“若(A)3~09或(AC)=1則(A)3~0(A)3~0+6;若(A)7~49或(CY)=1則(A)7~4(A)7~4+6;P.60例5:兩個(gè)十進(jìn)制數(shù)“65”與“58”相加,根據(jù)常識,顯然其和應(yīng)當(dāng)為“123”。MOVA,#65HADDA,#58H

DAA結(jié)果:(A)=23H(CY)=1指令“DAA”完成的操作:65011001015801011000

+13181926601100110單片微機(jī)原理及應(yīng)用》教學(xué)課件若(A)3~09或(AC)=1則(A)3~0(A)3~0若(A)3~09或(AC)=1則(A)3~0(A)3~0+6;若(A)7~49或(CY)=1則(A)7~4(A)7~4+6;又如:兩個(gè)十進(jìn)制數(shù)“39”與“58”相加,根據(jù)常識,顯然其和應(yīng)當(dāng)為“97”。MOVA,#39HADDA,#58H

DAA結(jié)果:(A)=97H(CY)=039001110015801011000

+0723960110指令“DAA”完成的操作:單片微機(jī)原理及應(yīng)用》教學(xué)課件若(A)3~09或(AC)=1則(A)3~0(A)3~0(三)邏輯運(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)算及移位類指令(5種/24條)

邏輯運(yùn)算及移位類指令(續(xù))P.61邏輯與(ANL),邏輯或(ORL),邏輯異或(XRL):累加器清零/取反操作(CLR,CPL——2條)CLRA——對累加器清零1Byte1個(gè)TmCPLA——對累加器按位取非1Byte1個(gè)Tm指令形式ByteTmANL(ORL,XRL)direct,A21ANL(ORL,XRL)direct,#data32ANL(ORL,XRL)A,#data21ANL(ORL,XRL)A,direct21ANL(ORL,XRL)A,@Ri11ANL(ORL,XRL)A,Rn11單片微機(jī)原理及應(yīng)用》教學(xué)課件邏輯運(yùn)算及移位類指令(續(xù))P.61邏輯與(ANL),邏邏輯運(yùn)算指令的常見用法邏輯與ANL用于清0或者保留某些位:例:ANLA,#0FH;則(A)=0AH(已知累加器A中已存有數(shù):9AH)邏輯或ORL用于置1或者保留某些位:例:ORLA,#0FH;則(A)=9FH邏輯異或XRL用于取反或者保留某些位:例:XRLA,#0FH;則(A)=95H(A)10011010#0FH00001111

95H10010101單片微機(jī)原理及應(yīng)用》教學(xué)課件邏輯運(yùn)算指令的常見用法邏輯與ANL用于清0或者保留某些位:(邏輯運(yùn)算及移位類指令(續(xù))P.64累加器移位操作:(RL,RLC,RR,RRC——4條)RLA左環(huán)移累加器A累加器ACy累加器ACy累加器ARRCA

帶進(jìn)位位右環(huán)移RRA右環(huán)移RLCA帶進(jìn)位位左環(huán)移單片微機(jī)原理及應(yīng)用》教學(xué)課件邏輯運(yùn)算及移位類指令(續(xù))P.64累加器移位操作:((四)控制轉(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條)空操作:(NOP——1條)“耗時(shí)”一個(gè)機(jī)器周期。donothing!單片微機(jī)原理及應(yīng)用》教學(xué)課件(四)控制轉(zhuǎn)移類指令(4種/17條)P.65此類指令改變程控制轉(zhuǎn)移類指令(續(xù))P.65-67無條件轉(zhuǎn)移:LJMP,AJMP,SJMP,JMP——4條LJMPaddr16長跳轉(zhuǎn)指令——可在64K范圍內(nèi)跳轉(zhuǎn)AJMPaddr11絕對跳轉(zhuǎn)指令——可在指令所在的2K范圍內(nèi)跳轉(zhuǎn)SJMPrel相對跳轉(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.65-67無條件轉(zhuǎn)控制轉(zhuǎn)移類指令(續(xù))P.67-69條件轉(zhuǎn)移:JZ,JNZ,CJNE,DJNZ——8條JZrelJNZrel——根據(jù)Acc的內(nèi)容是否為0決定是否跳轉(zhuǎn)DJNZdirect,relDJNZRn,rel——將direct(或Rn)里的內(nèi)容減1,結(jié)果不等于0就跳轉(zhuǎn);等于0則不跳轉(zhuǎn)繼續(xù)往下走。單片微機(jī)原理及應(yīng)用》教學(xué)課件控制轉(zhuǎn)移類指令(續(xù))P.67-69條件轉(zhuǎn)移:條件轉(zhuǎn)移(續(xù))CJNEA,

#data,relCJNEA,

direct,relCJNE@Ri,#data,relCJNERn,

#data,rel——將A(或@Ri,或Rn)與#data(或direct)相比較,其值不相等就跳轉(zhuǎn);相等則不跳轉(zhuǎn),繼續(xù)往下走。單片微機(jī)原理及應(yīng)用》教學(xué)課件條件轉(zhuǎn)移(續(xù))CJNEA,#data,rel單片微控制轉(zhuǎn)移類指令(續(xù))P.70LCALLaddr16子程序長調(diào)用指令——可在64K范圍內(nèi)調(diào)用子程序子程序調(diào)用及返回:(LCALL,ACALL,RET,RETI——4條)ACALLaddr11子程序絕對調(diào)用指令——可在指令所在的2K范圍內(nèi)調(diào)用子程序RET子程序返回指令——子程序結(jié)束并返回調(diào)用的下一條指令RETI中斷服務(wù)子程序返回指令——中斷結(jié)束/返回被打斷處的下一條指令單片微機(jī)原理及應(yīng)用》教學(xué)課件控制轉(zhuǎn)移類指令(續(xù))P.70LCALLa(五)位操作類指令(17條)P.71位操作類指令以位為單位進(jìn)行邏輯運(yùn)算及操作,可分為4種:

位傳送:(MOV——2條)位清零/置位:(CLR,SETB——4條)位邏輯與/或/非運(yùn)算:(ANL,ORL,CPL——6條)位條件轉(zhuǎn)移:(JC,JNC,JB,JNB,JBC——5條)單片微機(jī)原理及應(yīng)用》教學(xué)課件(五)位操作類指令(17條)P.71位操作類指令位操作類指令(續(xù))P.72位傳送指令(2條):

MOVC,bit——(C)(bit)MOVbit,C——(bit)(C)

注:bit表示位地址位清零/置位指令(4條):CLRbit(或C)——(bit或C)“0”

SETBbit(或C)——(bit或C)“1”

位邏輯與/或/非指令(6條):ANLC,bit(或/bit)ORLC,bit(或/bit)CPLbit(或C)

注:“/bit”表示對bit位先取反然后再參加運(yùn)算單片微機(jī)原理及應(yīng)用》教學(xué)課件位操作類指令(續(xù))P.72位傳送指令(2位操作類指令(續(xù))P.74判位條件轉(zhuǎn)移指令(5條):

JCrel——(Cy)=“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn)JNCrel——(Cy)“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn)JBbit,rel——(bit)=“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn)JNBbit,rel

——(bit)“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn)JBCbit,rel

——(bit)=“1”就先將其清零再跳轉(zhuǎn);否則,不動此位也不跳轉(zhuǎn)。單片微機(jī)原理及應(yīng)用》教學(xué)課件位操作類指令(續(xù))P.74判位條件轉(zhuǎn)移指任務(wù)一:控制一盞燈點(diǎn)亮任務(wù)二:紅燈周期性地亮/滅JOB3:CLRP1.1;P1.1清“0”,亮綠燈REDO:SETBP1.3;將P1.3置“1”CHECK:JNBP1.3,CHECK;檢測傳感器是否被阻斷LOOP:…………;有入侵者,報(bào)警! AJMPREDO;再跳回去檢測JOB1:

CLRP1.0

;P1.0清“0”,亮紅燈HERE:AJMPHERE

;原地等待,不做別的事JOB2:CPLP1.0;對P1.0取反:紅燈亮/滅ACALLDELAY;延時(shí)1秒AJMPJOB2;重復(fù)任務(wù)三:紅外防盜報(bào)警

前面的簡單測控實(shí)例中的程序:位操作指令單片微機(jī)原理及應(yīng)用》教學(xué)課件任務(wù)一:控制一盞燈點(diǎn)亮任務(wù)二:紅燈周期性地亮/滅JOB3:任務(wù)一:控制一盞燈點(diǎn)亮任務(wù)二:紅燈周期性地亮/滅JOB3:CLRP1.1;P1.1清“0”,亮綠燈REDO:SETBP1.3;將P1.3置“1”CHECK:JNBP1.3,CHECK;檢測傳感器是否被阻斷LOOP:…………;有入侵者,報(bào)警!

AJMPREDO

;再跳回去檢測JOB1:

CLRP1.0;P1.0清“0”,亮紅燈HERE:AJMPHERE

;原地等待,不做別的事JOB2:CPLP1.0;對P1.0取反:紅燈亮/滅ACALLDELAY;延時(shí)1秒AJMPJOB2

;重復(fù)任務(wù)三:紅外防盜報(bào)警跳轉(zhuǎn)指令

前面的簡單測控實(shí)例中的程序:單片微機(jī)原理及應(yīng)用》教學(xué)課件任務(wù)一:控制一盞燈點(diǎn)亮任務(wù)二:紅燈周期性地亮/滅JOB3:小結(jié):MCS-51指令集(五大類功能)數(shù)據(jù)傳送類指令(29條)算術(shù)運(yùn)算類指令(24條)邏輯運(yùn)算及移位類指令(24條)控制轉(zhuǎn)移類指令(17條)位操作(布爾操作)類指令(17條)小結(jié)單片微機(jī)原理及應(yīng)用》教學(xué)課件小結(jié):MCS-51指令集(五大類功能)數(shù)據(jù)傳送類指令內(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ī)原理及應(yīng)用》教學(xué)課件內(nèi)部存儲器間傳送:(MOV——16條)(一)數(shù)據(jù)傳送類(二)算術(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)整(DAA——1條)小結(jié)單片微機(jī)原理及應(yīng)用》教學(xué)課件(二)算術(shù)運(yùn)算類指令(6種/24條)加法運(yùn)算(三)邏輯運(yùn)算及移位指令(5種/24條)邏輯與運(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é)課件(三)邏輯運(yùn)算及移位指令(5種/24條)邏輯與運(yùn)算:(四)控制轉(zhuǎn)移類指令(4種/17條)無條件轉(zhuǎn)移:(LJMP,AJMP,SJMP,JMP——4條)條件轉(zhuǎn)移(判斷跳轉(zhuǎn)):(JZ,JNZ,CJNE,DJNZ——8條)子程序調(diào)用及返回:(LCALL,ACALL,RET,RETI——4條)空操作:(NOP——1條)小結(jié)單片微機(jī)原理及應(yīng)用》教學(xué)課件(四)控制轉(zhuǎn)移類指令(4種/17條)無條件轉(zhuǎn)移:條件轉(zhuǎn)移(判(五)位操作類指令(4種17條)位傳送:(MOV——2條)位清零/置位:(CLR,SETB——4條)位邏輯與/或/非運(yùn)算:(ANL,ORL,CPL——6條)位條件轉(zhuǎn)移:(JC,JNC,JB,JNB,JBC——5條)小結(jié)單片微機(jī)原理及應(yīng)用》教學(xué)課件(五)位操作類指令(4種17條)位傳送:匯編語言與簡單程序設(shè)計(jì)單片微機(jī)原理及應(yīng)用》教學(xué)課件匯編語言與簡單程序設(shè)計(jì)單片微機(jī)原理及應(yīng)用》教匯編語言程序設(shè)計(jì)中的數(shù)計(jì)算機(jī)只能識別二進(jìn)制數(shù)——機(jī)器指令,它原本是不認(rèn)識常用的十六進(jìn)制數(shù)和十進(jìn)制數(shù)的。機(jī)器指令/目標(biāo)代碼:由0/1代碼組成的操作碼與操作數(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é)課件匯編語言程序設(shè)計(jì)中的數(shù)計(jì)算機(jī)只能識別二進(jìn)制數(shù)——機(jī)器指令,它匯編語言編程基本規(guī)則匯編語言:用助記符描述的指令的集合?!讨噶钪幸訟—F

開頭的十六進(jìn)制數(shù)前必須添一個(gè)“0”?!潭M(jìn)制數(shù)必須帶后綴“B”或“b”;十六進(jìn)制數(shù)必須帶后綴“H”或“h”;十進(jìn)制數(shù)的后綴是“D”或“d”或無.[標(biāo)號:]操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]匯編程序:匯編語言編寫的程序借助編譯工具編譯成為目標(biāo)代碼,計(jì)算機(jī)才能識別。這個(gè)編譯工具稱為匯編程序。單片微機(jī)原理及應(yīng)用》教學(xué)課件匯編語言編程基本規(guī)則匯編語言:用助記符描述的指令的集合?!讨竻R編程序的偽指令匯編程序→軟件→

工具→工具軟件:將程序員用匯編語言編寫的程序翻譯成機(jī)器碼(真)指令:告訴計(jì)算機(jī)如何操作以及做何種操作用匯編語言編寫的程序在此被稱為應(yīng)用程序偽指令:告訴匯編程序在翻譯應(yīng)用程序時(shí)有何具體約定。偽指令不進(jìn)行具體的操作,那是真指令的事。

比如:從何處開始,何處結(jié)束,某些編程者自己規(guī)定的表述代表什么意思……

單片微機(jī)原理及應(yīng)用》教學(xué)課件匯編程序的偽指令匯編程序→軟件→工具→工具軟件:匯編程序的常用偽指令ORGaddr16——ASM51程序中一定要寫!規(guī)定編譯后的機(jī)器代碼存放的起始位置。END——ASM51程序中一定要寫!表示翻譯到此結(jié)束,其后的任何內(nèi)容不予理睬。符號名稱EQU表達(dá)式將表達(dá)式的值賦予符號名稱。程序中凡出現(xiàn)該符號名稱就等同于該表達(dá)式。$——“當(dāng)前PC值”也叫位置計(jì)數(shù)器代表正在執(zhí)行的指令所在位置。單片微機(jī)原理及應(yīng)用》教學(xué)課件匯編程序的常用偽指令ORGaddr16——ASM51程序中匯編程序的常用偽指令(續(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é)課件匯編程序的常用偽指令(續(xù))符號名稱BIT位地址DW程序的順序/分支/循環(huán)三種基本結(jié)構(gòu)

ORG2000HBCD2B:MOVA,R2

;取入口數(shù)據(jù)ANLA,#0F0H;取出十位SWAPA;高4位低4位MOVB,#0AHMULAB;十位乘10MOVR3,A;積暫存進(jìn)R3MOVA,R2;再取入口數(shù)據(jù)ANLA,#0FH;取出個(gè)位ADDA,R3MOVR2,A

;結(jié)果

R2RET;若不是子程序可用END例P.82—1:將R2中BCD碼數(shù)轉(zhuǎn)為二進(jìn)制數(shù)存進(jìn)R2(此子程序在下一例中還要用到)單片微機(jī)原理及應(yīng)用》教學(xué)課件程序的順序/分支/循環(huán)三種基本結(jié)構(gòu)ORG編程要點(diǎn):

兩字節(jié)

BCD碼數(shù)范圍為:0000H—9999H相應(yīng)2進(jìn)制/16進(jìn)制數(shù)為:0000H—270FH

調(diào)用BCD2B子程序?qū)崿F(xiàn)“千位,百位”轉(zhuǎn)為二進(jìn)制,并乘100;

再調(diào)BCD2B子程序?qū)崿F(xiàn)“十位,個(gè)位”轉(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é)課件編程要點(diǎn):例P.82—2:將R5R4中的雙字節(jié)BCD碼數(shù)轉(zhuǎn)為例P.82—2:將R5R4中的兩字節(jié)BCD碼數(shù)轉(zhuǎn)為二進(jìn)制數(shù)存于R5R4中X100千百十個(gè)二進(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é)課件例P.82—2:將R5R4中的兩字節(jié)BCD碼數(shù)轉(zhuǎn)為二進(jìn)制數(shù)ORG2000H

VAREQU30H;定義緩存單元

FUNCEQU31H;書中缺此二句BR1:MOVA,VAR;取出變量“X”JZCOMP;若=0,就賦0

JNBACC.7,POS1;判斷=正?MOVA,#0FFH;(-1=+1取反加1)SJMPCOMP;輸出-1POS1:MOVA,#01H;輸出+1COMP:MOVFUNC,A;賦給函數(shù)“Y”HERE:AJMPHEREENDP.83例3:1(X>0)0(X=0)–1(X<0)Y=程序的順序/分支/循環(huán)三種基本結(jié)構(gòu)單片微機(jī)原理及應(yīng)用》教學(xué)課件ORG2000HP.83例3:1(X>0)任務(wù)一:控制一盞燈點(diǎn)亮任務(wù)二:紅燈周期性亮/滅任務(wù)三:紅外防盜報(bào)警0RG0000HAJMPMAINORG0003H

RLAACALLDELAYRETIMAIN:MOVA,#80HSETBEX0SETBEAWAIT:JBACC.0,JOB1JBACC.1,JOB2JBACC.2,JOB3AJMPWAITJOB1: CLRP1.0;亮紅燈HERE:AJMPHEREJOB2:CPLP1.0;亮/滅ACALLDELAY;延時(shí)1秒AJMPJOB2;重復(fù)JOB3:CLRP1.1;亮綠燈REDO:SETBP1.3

CHECK:JNBP1.3,CHECK

LOOP:…………;報(bào)警! AJMPREDO;再檢測程序的順序/分支/循環(huán)三種基本結(jié)構(gòu)單片微機(jī)原理及應(yīng)用》教學(xué)課件任務(wù)一:控制一盞燈點(diǎn)亮任務(wù)二:紅燈周期性亮ORG1000HDELAY:MOVR6,#200;1TmLOOP1:MOVR7,#248;1TmNOP;1TmLOOP2:DJNZR7,LOOP2;2TmDJNZR6,LOOP1;2TmRET;1Tm例P.85—86:軟件循環(huán)延時(shí)100mS(晶振12MHz)☆1Tm=1uS100mS=100000uS

☆MOVRn#data和NOP是單機(jī)器周期指令☆

DJNZRn,rel是雙機(jī)器周期指令☆200

=0C8H;248=0F8H1+1+248x2=498(498+2)x200程序的順序/分支/循環(huán)三種基本結(jié)構(gòu)單片微機(jī)原理及應(yīng)用》教學(xué)課件ORG1000H例P.85—86:軟件循環(huán)延ORG1000HDL1S:MOVR7,#10DL1:MOVR6,#200DL2:MOVR5,#250DL3:DJNZR5,DL3

DJNZR6,DL2

DJNZR7,DL1RET例:軟件循環(huán)延時(shí)1S(晶振12MHz)☆1Tm=1uS1S=1000000uS

☆MOVRn#data是單機(jī)器周期指令☆

DJNZRn,rel是雙機(jī)器周期指令1+250x21+[(1+250x2)+2)]x2001+[(1+250x2+2)x200+2]x10程序的順序/分支/循環(huán)三種基本結(jié)構(gòu)單片微機(jī)原理及應(yīng)用》教學(xué)課件ORG1000H例:軟件循環(huán)延時(shí)1S(晶振1ORG2000HH2ASC:MOVA,R2

;取待轉(zhuǎn)換的數(shù)據(jù)(入口)

ADDA,#0F6H;判此數(shù)是否≥10?若≥10,則C=1;<10,則C=0MOVA,R2;重取待轉(zhuǎn)換的數(shù)據(jù)

JNCAD30H;小于10就跳去加30HADDA,#07H;≥10就先加7再去加30H

AD30H:ADDA,#30HMOVR2,A;存結(jié)果(出口)RETP.88例1:16進(jìn)制數(shù)(00H—0FH)轉(zhuǎn)ASCII碼子程序算法:凡≥10的十六進(jìn)制數(shù)加37H;凡<10的十六進(jìn)制數(shù)加30H。(參見P.333ASCII碼表)ie.0~9

→30H~39H,A~F

→41H~46H單片微機(jī)原理及應(yīng)用》教學(xué)課件ORG2000HP.88例1:16進(jìn)制數(shù)(0TABL:DW050FH,0E89H,0A695H,1EAAH,0D9BH,7F93H

DW0373H,26D7H,2710H,9E3FH,1A66H,22E3H

DW1174H,16EFH,33E4H,6CA0HP.95例6:根據(jù)16個(gè)雙字節(jié)數(shù)的序號查表找出對應(yīng)數(shù)據(jù)表地址#TABL#TABL+1#TABL+2#TABL+3……#TABL+30#TABL+31數(shù)據(jù)YY0高Y0低Y1高Y1低……Y15高Y15低序號X00H01H……0FH編程思路:以表格首地址(TABL)為基址,以序號(的2倍)為偏移量,查找對應(yīng)的數(shù)據(jù)單片微機(jī)原理及應(yīng)用》教學(xué)課件TABL:DW050FH,0E89H,0A695H,1EORG2000H(先改動P.96程序中的4條語句)STA1:MOVA,R2;取待查數(shù)據(jù)的序號X(入口)

RLA

;每數(shù)占2個(gè)單元,序號要乘2MOVR4,A;R4←序號x2(即偏移量)

MOVDPTR,#TABL;DPTR←表格首地址

MOVCA,@A+DPTR;(A)←查到數(shù)據(jù)高8位XCHA,R4;數(shù)據(jù)高8位存進(jìn)R4(出口);同時(shí)取出偏移量到A

INCDPTR;DPTR指向下一個(gè)單元

MOVCA,@A+DPTR;再查到數(shù)據(jù)低8位MOVR3,A;將數(shù)據(jù)低8位存進(jìn)R3(出口)RETTABL:DW……………;表格數(shù)據(jù)見前頁END單片微機(jī)原理及應(yīng)用》教學(xué)課件ORG2000H(先改動P.96程序中的4OVER!單片微機(jī)原理及應(yīng)用》教學(xué)課件OVER!單片微機(jī)原理及應(yīng)用》教學(xué)課件第二講:指令與編程本講重點(diǎn):

尋址方式;MCS-51指令集;偽指令;匯編語言與簡單程序設(shè)計(jì).單片微機(jī)原理及應(yīng)用》教學(xué)課件第二講:指令與編程本講重點(diǎn):單片微機(jī)原理及應(yīng)用》教學(xué)課件第三章

指令系統(tǒng)及程序設(shè)計(jì)(P.43)51系列單片機(jī)指令集含有111條指令

每條指令在執(zhí)行時(shí)要花去一定的時(shí)間,以機(jī)器周期為單位。按指令執(zhí)行時(shí)間分類:單周期(64條);雙周期(45條);4周期(2條)按指令的功能分類,可分為5大類:數(shù)據(jù)傳送類(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é)課件第三章指令系統(tǒng)及程序設(shè)計(jì)(P.43)51系列單片機(jī)指令集ASM-51指令的格式(P.44)方括符[]表示可選項(xiàng)標(biāo)號代表指令所在地址,1-8個(gè)字母/數(shù)字,“:”結(jié)尾操作碼就是指令功能助記符,指令實(shí)體目的操作數(shù)源操作數(shù)注釋,以“;”開頭[標(biāo)號:]操作碼[目的操作數(shù)][,源操作數(shù)][;注釋]單片微機(jī)原理及應(yīng)用》教學(xué)課件ASM-51指令的格式(P.44)方括符[]表示可選項(xiàng)[標(biāo)51單片機(jī)指令的尋址方式(P.45)寄存器尋址立即尋址寄存器間接尋址直接尋址變址尋址(基址寄存器+變址寄存器間接尋址)相對尋址位尋址尋址方式:指令按地址獲得操作數(shù)的方式七種尋址方式,一條指令可能含多種尋址方式單片微機(jī)原理及應(yīng)用》教學(xué)課件51單片機(jī)指令的尋址方式(P.45)寄存器尋址尋址方式:指令寄存器尋址——(P.45)從寄存器中讀取操作數(shù)或存放操作數(shù)進(jìn)寄存器例:MOVA,B;(A)←(B)

MOV30H,R0

;(30H)←(R0)

MOVA,R1;(A)←(R1)單片微機(jī)原理及應(yīng)用》教學(xué)課件寄存器尋址——(P.45)單片微機(jī)原理及應(yīng)用》教學(xué)課件立即尋址——(P.45)操作數(shù)直接就出現(xiàn)在指令中例:MOVA,#64H;(A)←立即數(shù)64H

ADDA,#05H

;(A)←(A)+立即數(shù)05H注意:符號“#”表明其后跟的是立即數(shù),立即數(shù)——就是數(shù)字量本身。單片微機(jī)原理及應(yīng)用》教學(xué)課件立即尋址——(P.45)單片微機(jī)原理及應(yīng)用》教學(xué)課件寄存器間接尋址——(P.46)寄存器中的內(nèi)容是一個(gè)地址,由該地址單元尋址到所需的操作數(shù)注意:1)“間接”表示某寄存器中的“內(nèi)容”只是一個(gè)“單元地址”,這個(gè)地址單元中存放的數(shù)據(jù)才是要找的“操作數(shù)”。2)符號“@”表示“在…”,其含義與讀音皆同“at”。例:[MOVR1,#30H;(R1)←立即數(shù)30H

]

[MOVR1,#30H;(R1)←立即數(shù)30H

]

MOV@R1,#0FH;(30H)←立即數(shù)0FH

MOVA,@R1;(A)←((30H))=#0FH單片微機(jī)原理及應(yīng)用》教學(xué)課件寄存器間接尋址——(P.46)注意:例:[MOVR1,直接尋址——(P.46)指令中直接給出了操作數(shù)所在單元的地址或名稱例:MOVR1,1FH;(R1)←(1FH)

MOV30H,4AH;(30H)←(4AH)在本單片機(jī)中規(guī)定:訪問特殊功能寄存器SFR只能采用直接尋址方式。例如:MOVA,SP;(A)←(SP)MOVA,81H;(A)←(SP)

MOVP1,#5AH;(P1)←(#5AH)MOV90H,#5AH;(P1)←(#5AH)

MOVB,30H;(B)←(30H)SFR的地址見P.33表相同相同單片微機(jī)原理及應(yīng)用》教學(xué)課件直接尋址——(P.46)在本單片機(jī)中規(guī)定:訪問特殊功能寄存器在本單片機(jī)中訪問特殊功能寄存器SFR只能采用直接尋址方式的原因:SFR分布在80H~0FFH范圍內(nèi),而52系列單片機(jī)有256字節(jié)的片內(nèi)RAM,其中的80H~0FFH的RAM與SFR所占地址重疊。MOVA,90H等效于MOVA,

P1屬直接尋址MOVA,@R0;[事先已知(R0)=#90H]執(zhí)行的操作:A←(90H)屬寄存器間接尋址,隨意寫的指令如:MOVA,85H則是非法的!于是規(guī)定:80H~0FFH范圍內(nèi)的RAM只能用寄存器間接尋址方式,而SFR只能用直接尋址方式。從而解決了地址沖突的問題。例如:單片微機(jī)原理及應(yīng)用》教學(xué)課件在本單片機(jī)中訪問特殊功能寄存器SFR只能采用直接尋址方式的原存儲器配置(片內(nèi)RAM)89C51片內(nèi)RAM

128字節(jié)(00H—7FH)89C52片內(nèi)RAM

256字節(jié)(00H—0FFH)00H20H2FH7FH1FH30H80HFFH52子系列才有的RAM區(qū)普通RAM區(qū)位尋址區(qū)工作寄存器區(qū)SFR分布在80H-FFH其中92個(gè)位可位尋址80HFFH89C51128字節(jié)89C52256字節(jié)只能直接尋址只能寄存器間接尋址單片微機(jī)原理及應(yīng)用》教學(xué)課件存儲器配置(片內(nèi)RAM)89C51片內(nèi)RAM128字節(jié)(0變址尋址——(P.47)也稱為:基址寄存器+變址寄存器間接尋址以16位的地址指針寄存器DPTR或16位的PC寄存器為基址寄存器,以累加器A為變址寄存器,兩者中的“內(nèi)容”形成一個(gè)16位的“地址”,該“地址”所指的存儲單元中的內(nèi)容才是操作數(shù)。P47例:[設(shè):A中已存有#A4H,DPTR中已存有#1234H]

MOVCA,@A+DPTR;(A)←((A)+(DPTR))操作:將A4H+1234H=12D8H單元中的數(shù)放進(jìn)累加器A單片微機(jī)原理及應(yīng)用》教學(xué)課件變址尋址——(P.47)以16位的地址指針寄存器DPTR或相對尋址——(P.47)當(dāng)前PC值加上指令中規(guī)定的偏移量rel,構(gòu)成實(shí)際的操作數(shù)地址例:SJMPrel

操作:跳轉(zhuǎn)到的目的地址

=

當(dāng)前16位PC值+rel注意:1)“當(dāng)前PC值”指程序中下一條指令所在的首地址,是一個(gè)16位數(shù);2)符號“rel”表示“偏移量”,是一個(gè)帶符號的單字節(jié)數(shù),范圍是:-128—+127(80H—7FH),在實(shí)際編程中,“rel”通常用標(biāo)號代替單片微機(jī)原理及應(yīng)用》教學(xué)課件相對尋址——(P.47)注意:在實(shí)際編程中,“rel”通常位尋址——(P.48)指令中直接給出了操作數(shù)所在的位地址。例:CLRP1.0;(P1.0)←0

SETBACC.7;(ACC.7)←1

CPLC

;(C)←NOT(C)注意:1)位地址里的數(shù)據(jù)只可能是一個(gè)0

1

2)有的位地址十分明確,如

P1.0,ACC.7等,

有的位地址則“不太明確”,如:

[MOVA,17H;(A)←(17H),17H是字節(jié)地址]

MOVACC.0,17H;(ACC.0)←(17H),這里ACC.0是位地址所以該指令中的17H是22H單元的第7位單片微機(jī)原理及應(yīng)用》教學(xué)課件位尋址——(P.48)注意:單片微機(jī)原理及應(yīng)用》教學(xué)課件片內(nèi)RAM中有128個(gè)位可按位尋址的位,位地址:00H—7FH分布在:20H—2FH單元;另外,在SFR中還有92個(gè)位可按位尋址00H20H2FH7FH1FH30H80HFFH52子系列才有的RAM區(qū)普通RAM區(qū)位尋址區(qū)工作寄存器區(qū)27H22H21H20H26H24H25H23H28H07060504030201000F0E0D0C0B0A090817161514131211101F1E1D1C1B1A191827262524232221202F2E2D2C2B2A292837363534333231303F3E3D3C3B3A393847464544434241402FH7F7E7D7C7B7A7978位地址總共128個(gè)可按位尋址的位單元地址17D7D6D5D4D3D2D1D0單片微機(jī)原理及應(yīng)用》教學(xué)課件片內(nèi)RAM中有128個(gè)位可按位尋址的位,位地址:00H—7F位尋址——(P.48)指令中直接給出了操作數(shù)所在的位地址。例:CLRP1.0;(P1.0)←0

SETBACC.7;(ACC.7)←1

CPLC

;(C)←NOT(C)注意:1)位地址里的數(shù)據(jù)只可能是一個(gè)0

1

2)有的位地址十分明確,如

P1.0,ACC.7等,

有的位地址則“不太明確”,如:

[MOVA,17H;(A)←(17H),17H是字節(jié)地址]

MOVACC.0,17H;(ACC.0)←(17H),這里ACC.0是位地址所以該指令中的17H是22H單元的第7位單片微機(jī)原理及應(yīng)用》教學(xué)課件位尋址——(P.48)注意:單片微機(jī)原理及應(yīng)用》教學(xué)課件MCS-51指令集功能分五類,共111條指令單片微機(jī)原理及應(yīng)用》教學(xué)課件MCS-51指令集功能分五類,共111條指令單片微機(jī)原理及應(yīng)MCS-51指令集(五大類功能)P.49頁數(shù)據(jù)傳送類指令:(29條)算術(shù)運(yùn)算類指令:(24條)邏輯運(yùn)算及移位類指令:(24條)控制轉(zhuǎn)移類指令:(17條)位操作(布爾操作)類指令:(17條)單片微機(jī)原理及應(yīng)用》教學(xué)課件MCS-51指令集(五大類功能)P.49頁數(shù)據(jù)傳送類指令:內(nèi)部存儲器間傳送:(MOV——16條)外部數(shù)據(jù)存儲器與累加器間傳送:(MOVX——4條)程序存儲器向累加器傳送:(MOVC——2條)數(shù)據(jù)交換:(XCH,XCHD,SWAP——5條)堆棧操作:(PUSH,POP——2條)(一)數(shù)據(jù)傳送類指令(5種/29條)P.49——見P.49的表3-2單片微機(jī)原理及應(yīng)用》教學(xué)課件內(nèi)部存儲器間傳送:(MOV——16條)(一)數(shù)據(jù)傳送類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)部存儲器間傳送指令(16條):

MOV類指令的操作方向總是后面的操作數(shù)指向前面的操作數(shù)!例:MOVA,30H——(A)(30H)

單片微機(jī)原理及應(yīng)用》教學(xué)課件Acc累加器Direct直接尋址@Ri間接尋址Rn寄數(shù)據(jù)傳送類指令(續(xù))P.52外部數(shù)據(jù)存儲器與累加器間傳送(4條):MOVX類指令可在累加器與以@DPTR或@Ri所代表的外部RAM之間進(jìn)行數(shù)據(jù)傳送。例如:

MOVXA,@DPTR——(A)((DPTR))MOVXA,@Ri——(A)

((Ri))MOVX@DPTR,A——((DPTR))(A)MOVX@Ri,A——((Ri))(A)單片微機(jī)原理及應(yīng)用》教學(xué)課件數(shù)據(jù)傳送類指令(續(xù))P.52外部數(shù)據(jù)存儲器與累加器程序存儲器向累加器傳送指令(2條):MOVCA,@A+DPTR

MOVCA,@A+PC

——通常稱為查表指令,尋址方式屬:“基址寄存器

+變址寄存器間接尋址”數(shù)據(jù)傳送類指令(續(xù))P.52@A+DPTR或@A+PC指向程序存儲器中的某單元。擬傳送給累加器ACC的數(shù)據(jù)就是程序中事先寫進(jìn)去的表格數(shù)據(jù)。這些表格數(shù)據(jù)往往用偽指令DB,DW等定義在程序中。單片微機(jī)原理及應(yīng)用》教學(xué)課件程序存儲器向累加器傳送指令(2條):數(shù)據(jù)傳送類指令(續(xù))數(shù)據(jù)傳送類指令(續(xù))數(shù)據(jù)交換指令(5條):——P.53XCHA,direct(字節(jié)互換)XCHA,@R

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論