單片機(jī)-03-尋址及指令_第1頁(yè)
單片機(jī)-03-尋址及指令_第2頁(yè)
單片機(jī)-03-尋址及指令_第3頁(yè)
單片機(jī)-03-尋址及指令_第4頁(yè)
單片機(jī)-03-尋址及指令_第5頁(yè)
已閱讀5頁(yè),還剩109頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

單片機(jī)原理與C51基礎(chǔ)尋址方式指令指令系統(tǒng)程序概念機(jī)器語(yǔ)言、匯編語(yǔ)言、高級(jí)語(yǔ)言-規(guī)定CPU執(zhí)行某類(lèi)操作的命令-全部指令的集合-相關(guān)指令的組合MCS-51指令系統(tǒng)指令類(lèi)型5數(shù)據(jù)傳送、算術(shù)運(yùn)算、控制轉(zhuǎn)移等尋址方式7寄存器尋址、直接尋址等(匯編)助記符42MOV、MOVX、ADD等(匯編)指令條數(shù)111如:MOVA,#data;MOVA,direct(少于機(jī)器碼數(shù))機(jī)器碼種類(lèi)255例:00000100B=INCA指令按功能分類(lèi)數(shù)據(jù)傳送類(lèi)指令29算術(shù)運(yùn)算類(lèi)指令24邏輯運(yùn)算及移位類(lèi)指令24控制轉(zhuǎn)移類(lèi)指令17位操作類(lèi)指令173.1匯編語(yǔ)言指令格式及常用方法指令系統(tǒng)的匯編語(yǔ)言格式指令通常包含操作碼和操作數(shù)兩個(gè)部分操作碼指示計(jì)算機(jī)執(zhí)行何種操作;操作數(shù)指出參加操作的數(shù)據(jù)或數(shù)據(jù)所在地址。3.1.1匯編語(yǔ)言指令格式:[標(biāo)號(hào):]操作助記符[目的操作數(shù)][,源操作數(shù)][;注釋]

標(biāo)號(hào):該指令首地址,以子母開(kāi)始,后可接1~8個(gè)字母或數(shù)字,不能是操作碼或?qū)S梅?hào)操作數(shù):參加操作的數(shù)據(jù)或數(shù)據(jù)所在地址。助記符:匯編程序英文關(guān)鍵字,必須有注釋?zhuān)涸黾涌勺x性例如:

ADD---加法助記符ADDA,RnADDA,@Ri尋址方式不同具體操作數(shù)有8個(gè),所以機(jī)器碼有8個(gè)

具體操作數(shù)有2個(gè),所以機(jī)器碼有2個(gè)

匯編指令助記符機(jī)器碼3.1.2機(jī)器碼的三種格式一、單字節(jié)指令單字節(jié)指令包含操作碼、操作數(shù)的信息。兩種情況:(1)一種是指令的含義和對(duì)象都很明確,用一個(gè)字節(jié)已能完全表示。無(wú)需特指操作對(duì)象。例指令:INCA(將累加器A的內(nèi)容加1)指令編碼:00000100B

(04H,A已知無(wú)需特指)(2)另一種是8位編碼含有操作碼和寄存器編碼。例指令:MOVA,R0

(當(dāng)前工作寄存器R0中的數(shù)據(jù)傳送到累加器A)機(jī)器碼:11101000B(高五位做操作碼,低三位做寄存器編碼)二.雙字節(jié)指令雙字節(jié)指令中,用第一字節(jié)表示操作碼,第二個(gè)字節(jié)表示操作數(shù)(參與的數(shù)據(jù)或數(shù)據(jù)存放的地址)。MCS51指令系統(tǒng)中有45條雙字節(jié)指令。格式:MOVA,#01HMOVA,#02H…MOVA,#0FFH操作數(shù)本身一字節(jié)三.三字節(jié)指令三字節(jié)指令的第一字節(jié)是操作碼,后兩個(gè)字節(jié)是操作數(shù)。三字節(jié)指令的編碼形式有以下四種情況:操作碼操作碼操作碼操作碼立即數(shù)地址立即數(shù)地址立即數(shù)立即數(shù)地址地址例如:MOV20H,#50H編碼為01110101B,00100000B,01010000B。十六進(jìn)制表示為75H,20H,50H。功能是將數(shù)據(jù)“50H”傳送到內(nèi)部數(shù)據(jù)存儲(chǔ)器的20H單元中。這類(lèi)指令中的存儲(chǔ)單元有256個(gè),需用一字節(jié)表示,數(shù)據(jù)也有256個(gè),也需用一字節(jié)表示,因此需要用3個(gè)字節(jié)表示指令的具體功能3.1.3指令中的符號(hào)標(biāo)識(shí)在后續(xù)章節(jié)中用到的符號(hào)標(biāo)識(shí)及含義如下:Rn(n=0~7)----當(dāng)前選中的工作寄存器組中的寄存器R0~R7之一;Ri(i=0,1)---當(dāng)前選中的工作寄存器組中的寄存器R0或R1

(間接尋址寄存器)

@

---------間址寄存器前綴;C---------進(jìn)位標(biāo)志位;$--------本條指令的起始地址#data---8位立即數(shù);#data16--16位立即數(shù);direct---片內(nèi)數(shù)據(jù)存儲(chǔ)器地址及SFR地址(可用符號(hào)名稱(chēng)表示);addr11---11位目的地址(短跳轉(zhuǎn)、調(diào)用);addr16---16位目的地址;rel-----補(bǔ)碼形式表示的8位地址偏移量,值在-128~+127范圍內(nèi);bit------片內(nèi)數(shù)據(jù)存儲(chǔ)器可位尋址單元的位地址、SFR的位地址(可用符號(hào)名稱(chēng));

/

----位操作數(shù)的取反操作前綴;

(×)

---表示×地址單元或寄存器中的內(nèi)容;((×))

---表示×地址單元或寄存器中的內(nèi)容為地址的單元的內(nèi)容;←---將箭頭右邊的內(nèi)容送入箭頭左邊的單元中。

---將箭頭左邊的內(nèi)容送入箭頭右邊的單元中。3.280C51系列單片機(jī)的尋址方式尋址方式:指令執(zhí)行時(shí),得到參與操作的數(shù)據(jù)或者數(shù)據(jù)所在的地址單元的方法。51指令系統(tǒng)有七種尋址方式,即:立即尋址、寄存器尋址、直接尋址、寄存器間接尋址、變址尋址、相對(duì)尋址、位尋址。一條指令執(zhí)行時(shí),對(duì)源操作數(shù)和目的操作數(shù)都要尋址,本章針對(duì)源操作數(shù)對(duì)尋址方式進(jìn)行介紹。3.2.1立即尋址定義:指令編碼中直接給出操作數(shù)(數(shù)據(jù))的尋址方式。尋址空間:立即尋址所對(duì)應(yīng)的尋址空間為程序存儲(chǔ)器。立即數(shù)可以為一個(gè)字節(jié),也可以是兩個(gè)字節(jié),并要用符號(hào)“#”來(lái)標(biāo)識(shí)由于立即數(shù)是一個(gè)常數(shù),所以只能作為源操作數(shù)。例:MOVA,#30H

特殊功能寄存器區(qū)ACC程序存儲(chǔ)器0FFFH30H74H0000HFFH30H80H3.2.2直接尋址定義:在指令中直接給出操作數(shù)的地址(direct),即指令中操作數(shù)部分是存放操作數(shù)的地址。尋址空間:片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū),即地址為00H~7FH的RAM單元和地址80H~0FFH的21個(gè)特殊功能寄存器。對(duì)于特殊功能寄存器一般采用其符號(hào)名稱(chēng)。如MOVA,SBUF例:MOVA,30H

數(shù)據(jù)存儲(chǔ)器ACC程序存儲(chǔ)器0FFFH30HE5H0000HFFH58H80H58H30H00H直接尋址還可用于對(duì)片內(nèi)數(shù)據(jù)區(qū)中可位尋址單元的位,

和可位尋址的特殊功能寄存器的位進(jìn)行尋址。特殊功能寄存器的按位直接尋址:既可用其位名稱(chēng)也可用位地址,一般使用位名稱(chēng)代表其具體地址。如MOVC,EA(EA/AFH)使用直接尋址要注意兩個(gè)問(wèn)題注意區(qū)分操作數(shù)是字節(jié)地址還是位地址

MOVA,30H

MOVC,30H

(進(jìn)位標(biāo)志C只可存1位)注意寄存器尋址與直接尋址的區(qū)別

INCA

A-累加器,匯編地址隱藏

INCACC

ACC-A的符號(hào),E0H,可按位表示

INC0E0H

與上面等價(jià)3.2.3寄存器尋址定義:操作數(shù)放在寄存器(Rn等)中,指令中直接給出該寄存器名稱(chēng)無(wú)外部信息交換,速度快例:MOVA,R0機(jī)器碼E8H=11101000B寄存器:工作寄存器R0-R7;A;B;DPTR注:ACC為直接尋址3.2.4寄存器間接尋址定義:指令中給出寄存器名,以該寄存器中的內(nèi)容為地址,從該地址去取操作數(shù)。尋址空間:片內(nèi)或片外數(shù)據(jù)存儲(chǔ)器。為了和寄存器尋址相區(qū)別,寄存器名前加“@”符號(hào)例:(R0)=60H,(60H)=32H,執(zhí)行MOVA,@R0

數(shù)據(jù)存儲(chǔ)器ACC程序存儲(chǔ)器0FFFHE6H0000HFFH32H80H32H60H60H00HR0片內(nèi)尋址:數(shù)據(jù)傳送采用“MOV”類(lèi)指令,CPU不產(chǎn)生訪(fǎng)問(wèn)外部數(shù)據(jù)存儲(chǔ)器的讀/寫(xiě)信號(hào),間接尋址寄存器采用寄存器R0或R1(堆棧操作時(shí)采用SP);片外尋址:數(shù)據(jù)傳送采用“MOVX”類(lèi)指令,CPU將產(chǎn)生訪(fǎng)問(wèn)外部數(shù)據(jù)存儲(chǔ)器的讀/寫(xiě)信號(hào)。兩種選擇:采用R0和R1作間址寄存器,這時(shí)R0或R1提供低8位地址(外部數(shù)據(jù)存儲(chǔ)器多于256字節(jié)采用頁(yè)面方式訪(fǎng)問(wèn)時(shí),由P2口未使用的I/O引腳提供高位地址);采用DPTR作為間址寄存器,提供16位地址,可訪(fǎng)問(wèn)整個(gè)片外數(shù)據(jù)存儲(chǔ)器的64K空間。例:假設(shè)DPTR內(nèi)容為2000H,

片外數(shù)據(jù)存儲(chǔ)器2000H單元內(nèi)容為30H,片外數(shù)據(jù)存儲(chǔ)器累加器A執(zhí)行

MOVXA,@DPTR結(jié)果A=30H3.2.5變址尋址定義:以一個(gè)基地址加上一個(gè)偏移量形成操作數(shù)地址的尋址方式稱(chēng)為變址尋址?;芳拇嫫鳎簲?shù)據(jù)指針DPTR或程序計(jì)數(shù)器PC,內(nèi)容為基地址偏移量寄存器:累加器A,其內(nèi)容為偏移量實(shí)際操作數(shù)地址:基址寄存器的內(nèi)容與偏移量寄存器的內(nèi)容之和尋址空間:程序存儲(chǔ)器,如讀取數(shù)據(jù)表格例:MOVCA,@A+PC兩條變址尋址指令:

MOVCA,@A+PCA((A)+(PC))

MOVCA,@A+DPTRA((A)+(DPTR))

3.2.6相對(duì)尋址目標(biāo)地址=源地址+本轉(zhuǎn)移指令的字節(jié)數(shù)+rel用于轉(zhuǎn)移類(lèi)指令,以程序計(jì)數(shù)器PC的值(PC取指后下條指令的地址)為基準(zhǔn),加上相對(duì)偏移量rel

形成目標(biāo)地址,使程序轉(zhuǎn)移到目標(biāo)地址繼續(xù)執(zhí)行。偏移量rel為帶符號(hào)八位二進(jìn)制數(shù),補(bǔ)碼,范圍:-128~127例:SJMP08H例3-6、指令SJMP54H存放于ROM的2000H起始單元,運(yùn)行后如何跳轉(zhuǎn)?3.2.7位尋址定義:對(duì)位地址中的內(nèi)容進(jìn)行操作的尋址方式。尋址空間:數(shù)據(jù)存儲(chǔ)器操作數(shù)是8位二進(jìn)制數(shù)中的某一位,例:MOVC,20H

SETB30H

(置1)

CLRR1

(清零)位尋址指令中,操作數(shù)部分是要操作的數(shù)的位地址,因此,位尋址實(shí)質(zhì)上是直接尋址。位地址的表示方法表示方法適用示例位名稱(chēng)特殊功能寄存器CLRRS0位地址通用CLR0D3H字節(jié)地址.位通用CLR0D0H.3特殊功能寄存器名.位可位尋址的特殊功能寄存器CLRPSW.3BIT偽指令給位地址賦名稱(chēng)通用FLAGBIT30HMOVC,F(xiàn)LAG單片機(jī)原理與C51基礎(chǔ)指令系統(tǒng)(數(shù)據(jù)傳送類(lèi))指令系統(tǒng)分類(lèi)111條指令,按照功能分為:數(shù)據(jù)傳送類(lèi)指令算術(shù)運(yùn)算類(lèi)指令邏輯運(yùn)算及移位類(lèi)指令控制轉(zhuǎn)移類(lèi)指令位操作指令3.3數(shù)據(jù)傳送類(lèi)指令最基本,使用最多的指令實(shí)現(xiàn)數(shù)據(jù)傳送、存儲(chǔ)和交換一般不影響PSW的狀態(tài),傳送到A時(shí)影響奇偶標(biāo)志P內(nèi)部RAM傳送訪(fǎng)問(wèn)外部RAM查表-讀取ROM中常數(shù)表數(shù)據(jù)交換指令堆棧操作指令MOVMOVXMOVCXCH/XCHD/SWAPPUSH/POP(1)以累加器A為目的操作數(shù)源操作數(shù)的尋址方式可以是寄存器尋址、直接尋址、寄存器間接尋址、和立即尋址四種MOVA,Rn;(A)←(Rn)MOVA,direct ;(A)←(direct)MOVA,@Ri ;(A)←((Ri))MOVA,#data ;(A)←#data

3.3.1內(nèi)部RAM數(shù)據(jù)傳送指令(MOV)例:已知(A)=30H,(R0)=40H,(40H)=50H:MOVA,R0 ;將R0中的數(shù)據(jù)取出送入A,(A)=40HMOVA,40H;將40H單元數(shù)據(jù)送入A,(A)=50HMOVA,@R0

;把R0內(nèi)容為地址的單元的內(nèi)容送入A,(A)=50H。(2)以寄存器Rn為目的操作數(shù)MOVRn,direct ;Rn←(direct)MOVRn,#data ;Rn←#dataMOVRn,A ;Rn←A

不可用:Rn←((Ri))、Rn←(Rn)例:若片內(nèi)數(shù)據(jù)存儲(chǔ)器50H單元的內(nèi)容(50H)=40H,

執(zhí)行指令

MOVR6,50H

后,(R6)=40H。例3-9、(A)=50H,(R1)=10H,(R2)=20H,

(R3)=30H,(30H)=4FHMOVR1,A ;R1←(A)MOVR2,30H;R2←(30H)MOVR3,#85H ;R3←85H

(R1)=50H,(R2)=4FH,(R3)=85H(3)以直接地址為目的操作數(shù)MOVdirect,A ;direct←(A)MOVdirect,Rn ;direct←(Rn)MOVdirect,direct1 ;direct←(direct1)MOVdirect,@Ri ;direct←((Ri))MOVdirect,#data ;direct←#data

(4)以間接地址@Ri為目的操作數(shù)MOV@Ri,A ;(Ri)←(A)MOV@Ri,direct ;(Ri)←(direct)MOV@Ri,#data

;(Ri)←#data

例3-11、(R1)=60H,(A)=20H,(30H)=22HMOV@R1,A;(R1)←(A)MOV@R1,#26H;(R1)←26HMOV@R1,30H ;(R1)←(30H)(R1)=60H,(60H)=20H;(R1)=60H,(60H)=26H;(R1)=60H,(60H)=22H;(5)以DPTR為目的操作數(shù)MOVDPTR,#data16;DPTR←data16data16的高8位送DPH,低8位送DPL操作碼目的操作數(shù)源操作數(shù)ARndirect@Ri#dataMOVA√√√√Rn√√√direct√√√√√@Ri√√√例:順序執(zhí)行下列指令序列,求每一步結(jié)果。MOVA,#30H MOV4FH,A MOVR0,#20H MOV@R0,4FH MOV21H,20H;A=30H;(4FH)=30H;R0=20H;(20H)=30H;(21H)=30HMOV指令的字節(jié)數(shù)一字節(jié):指令中不含直接地址,又不含8位立即數(shù)二字節(jié):指令中包含一個(gè)直接地址或8位立即數(shù)三字節(jié):指令中包含兩個(gè)上述類(lèi)型的操作數(shù)MOVA,@R0;1字節(jié)MOVA,direct;2字節(jié)MOVdirect,#data;3字節(jié)MOVDPTR,#data16;3字節(jié)3.3.2.訪(fǎng)問(wèn)外部RAM的數(shù)據(jù)傳送指令(MOVX)用于與外部RAM或I/O口進(jìn)行數(shù)據(jù)傳送必須使用寄存器間接尋址法必須通過(guò)累加器A來(lái)傳送注意每條指令的數(shù)據(jù)傳輸方向注意每條指令的16位外部地址的形成方法(1)讀取片外RAM或I/O口指令MOVXA,@DPTR ;A←((DPTR))MOVXA,@Ri ;A←((P2Ri))(2)寫(xiě)片外RAM或I/O口指令MOVX@Ri,A ;(P2Ri)←(A)

MOVX@DPTR,A ;(DPTR)←(A)例:試編寫(xiě)一程序段,實(shí)現(xiàn)將片外RAM的2000H單元中的內(nèi)容傳送到片外RAM的20H單元中。解:MOVDPTR,#2000HMOVXA,@DPTRMOVR0,#20HMOVX@R0,A片外RAM與片外RAM間不能直接傳送,需用累加器A3.3.3.查表指令(MOVC)MOVCA,@A+DPTR;(A)←((A)+(DPTR))MOVCA,@A+PC ;(PC)←(PC)+1,(A)←((A)+(PC))

1兩條指令尋址的存儲(chǔ)空間2兩條指令的查找范圍例3-14、在外部ROM中2000H單元開(kāi)始存放(0-9)的平方值0,1,4,9,…81,要求根據(jù)A中的值(0-9)來(lái)查找對(duì)應(yīng)的平方值,并存入60H中。解1)用DPTR作基址寄存器MOVDPTR,#2000HMOVCA,@A+DPTRMOV60H,A解2)用PC作基址寄存器,在MOVC前用加法調(diào)整ADDA,#dataMOVCA,@A+PCMOV60H,ARET2000H:DB0,1,4,9,16,25,36,…813.3.4.數(shù)據(jù)交換類(lèi)指令XCH A,Rn ;(A)<=>(Rn)XCH A,direct;(A)<=>(direct)XCH A,@Ri ;(A)<=>((Ri))XCHD A,@Ri ;(A0~3)<=>((Ri)0~3)SWAP A ;(A0~3)<=>(A4~7)

交換類(lèi)指令數(shù)據(jù)傳送示意圖片內(nèi)數(shù)據(jù)存儲(chǔ)器片內(nèi)數(shù)據(jù)存儲(chǔ)器3.3.5.堆棧操作類(lèi)指令堆棧定義:在片內(nèi)RAM中開(kāi)辟一個(gè)空間用于數(shù)據(jù)暫存,遵循先進(jìn)后出原則,此區(qū)域叫堆棧。堆棧特點(diǎn):棧底固定,棧頂浮動(dòng),地址指針為SP。堆棧用途:子程序嵌套保存斷點(diǎn),中斷時(shí)保護(hù)斷點(diǎn)和現(xiàn)場(chǎng)。

PUSHdirect

;

SP←(SP)+1,(SP)←(direct)

POPdirect;

direct←((SP)),SP←(SP)–1如:(A)=44H,(30H)=55H62H61H55H60H44H5FH…5EH…SP62H61H55H60H44H5FH…5EH…SPMOVSP,#5FH;

棧頂設(shè)為5FHPUSHACC;

把A中的44H壓到60H中保存PUSH30H;

把30H中的55H壓到61H中保存POP30H;

把61H中的55H彈出到30H中POPACC;

把60H中的44H彈出到A中堆棧區(qū)注意:堆棧區(qū)可在RAM內(nèi)任意設(shè)定,復(fù)位置于07H避免堆棧區(qū)與數(shù)據(jù)存儲(chǔ)區(qū)沖突壓棧時(shí)堆棧指針SP先加1,然后進(jìn)行數(shù)據(jù)傳送彈棧時(shí)先進(jìn)行數(shù)據(jù)傳送,堆棧指針SP之后減1

要注意壓棧和彈棧的順序,并保證堆棧平衡傳送類(lèi)指令與存儲(chǔ)空間關(guān)系片內(nèi)數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送使用MOV、XCH、XCHD、SWAP、PUSH、POP等程序存儲(chǔ)器數(shù)據(jù)傳送或稱(chēng)查表指令使用

MOVC助記符,共兩條指令。片外數(shù)據(jù)存儲(chǔ)器數(shù)據(jù)傳送使用MOVX助記符,共四條指令;單片機(jī)原理與C51基礎(chǔ)指令系統(tǒng)(運(yùn)算類(lèi))3.4.算術(shù)運(yùn)算類(lèi)指令

該類(lèi)指令可以完成加、減、乘、除以及加1、減1和十進(jìn)制調(diào)整等運(yùn)算這類(lèi)指令多數(shù)以A為源操作數(shù)之一,同時(shí)又使A為目的操作數(shù)。3.4.1.加法指令A(yù)DDA,#data ;(A)←(A)+#data

ADDA,Rn ;(A)←(A)+(Rn)ADDA,direct ;(A)←(A)+(direct)ADDA,@Ri ;(A)←(A)+((Ri))影響CY、AC、OV、P位(1)不帶進(jìn)位加法10010100+10001101

100100001 例:無(wú)符號(hào)數(shù)(A)=94H,(30H)=8DH,執(zhí)行指令A(yù)DDA,30H,求和與標(biāo)志位情況 PSW=?11000100=C4H1011A=21H(2)帶進(jìn)位加法指令A(yù)DDCA,Rn ;(A)←(A)+(Rn)+(CY)ADDCA,direct ;(A)←(A)+(direct)+(CY)ADDCA,@Ri ;(A)←(A)+((Ri))+(CY)ADDCA,#data ;(A)←(A)+#data+(CY)用于多字節(jié)數(shù)相加,CY為指令運(yùn)行前值例3-24、兩個(gè)無(wú)符號(hào)16位二進(jìn)制數(shù),分別存于30H、31H單元和40H、41H單元(低8位先存)。寫(xiě)出兩個(gè)16位數(shù)的加法程序,將和存于50H、51H單元(設(shè)和不超過(guò)16位)。MOVA,30HADDA,40HMOV50H,AMOVA,31HADDCA,41HMOV51H,A(3)加1指令I(lǐng)NC A ;(A)←(A)+1(溢出只存余項(xiàng))INC Rn ;(Rn)←(Rn)+1INC direct;(direct)←(direct)+1INC @Ri ;((Ri))←((Ri))+1INC DPTR;(DPTR)←(DPTR)+1(16位)例3-25、已知(A)=20H,(30H)=36H,(R7)=58H,(R0)=50H,(50H)=08H,(DPTR)=2000HINCAINC30HINCR7INC@R0INCDPTR(A)=21H(30H)=37H(R7)=59H(R0)=50H,(50H)=09H(DPTR)=2001H(4).十進(jìn)制調(diào)整指令DAA ;把A中的二進(jìn)制數(shù)調(diào)整為BCD碼調(diào)整要完成的任務(wù):1)當(dāng)A中的低4位數(shù)出現(xiàn)了非BCD碼(1010~1111)或低4位產(chǎn)生進(jìn)位(AC=1),則應(yīng)在低4位加6調(diào)整。2)當(dāng)A中的高4位數(shù)出現(xiàn)了非BCD碼(1010~1111)或高4位產(chǎn)生進(jìn)位(CY=1),則應(yīng)在高4位加6調(diào)整。執(zhí)行本指令后,PSW中的CY表示結(jié)果的百位值。例:設(shè)A的內(nèi)容為BCD碼56,R3內(nèi)容為BCD碼69,要求兩數(shù)按10進(jìn)制相加執(zhí)行指令A(yù)DDA,R3DA A0101011001101001+1011111101100110調(diào)整+001001011←結(jié)果

125--10進(jìn)制(1)帶借位減法指令SUBBA,Rn ;(A)←(A)-(Rn)-(CY)SUBBA,direct ;(A)←(A)-(direct)-(CY)SUBBA,@Ri ;(A)←(A)-((Ri))-(CY)SUBBA,#data ;(A)←(A)-#data-(CY)如用不帶借位減法,先用指令清零CY。3.4.2.減法指令(2)減1指令DEC A ;(A)←(A)-1DEC Rn ;(Rn)←(Rn)-1DEC direct;(direct)←(direct)-1DEC @Ri ;((Ri))←((Ri))-13.4.3乘除法指令乘法

MULAB;(B)15~8(A)7~0←(A)×(B)乘數(shù)、被乘數(shù)分別存于A、B積的低字節(jié)存于A。如果乘積大于0FFH,則高字節(jié)存于B,且置位溢出標(biāo)志(OV),否則溢出標(biāo)志清零。用OV判斷積的字節(jié)個(gè)數(shù)。進(jìn)位標(biāo)志CY總被清零

除法DIVAB;(A)商(B)余數(shù)←(A)/(B)

運(yùn)算前,被除數(shù)、除數(shù)分別存于A、B;運(yùn)算后,商存于A,余數(shù)存于B;進(jìn)位標(biāo)志CY清零;若除數(shù)為零,置位溢出標(biāo)志OV,否則清零OV。

3.5邏輯運(yùn)算及移位類(lèi)指令1.邏輯與指令(ANL)ANLA,Rn ;(A)←(A)(Rn)ANLA,direct ;(A)←(A)(direct)ANLA,@Ri ;(A)←(A)((Ri))ANLA,#data ;(A)←(A)#dataANLdirect,A ;(direct)←(direct)(A)ANLdirect,#data;(direct)←(direct)#data2.邏輯或指令(ORL)ORLA,Rn ;(A)←(A)(Rn)ORLA,direct ;(A)←(A)(direct)ORLA,@Ri ;(A)←(A)((Ri))ORLA,#data ;(A)←(A)#data

ORLdirect,A ;(direct)←(direct)(A)ORLdirect,#data;(direct)←(direct)#data3.邏輯異或指令(XRL)XRLA,Rn ;(A)←(A)⊕(Rn)XRLA,direct;(A)←(A)⊕(direct)XRLA,@Ri ;(A)←(A)⊕((Ri))XRLA,#data;(A)←(A)⊕#dataXRLdirect,A;(direct)←(direct)⊕(A)XRLdirect,#data;(direct)←(direct)⊕#data基本用途例3-34、編程使RAM中30H單元的低2位清零,高2位置1,其余4位取反。ANL30H,#0FCH;11111100ORL30H,#0C0H;11000000XRL30H,#3CH;00111100邏輯與–將某些位清零(該位與0相與)邏輯或–將某些位置一(該位與1相或)邏輯異或–將某些位取反(該位與1作異或)與、或、異或三類(lèi)指令都是按位進(jìn)行邏輯運(yùn)算,不影響CY、AC和OV標(biāo)志位;以A為目的操作數(shù)的指令影響P標(biāo)志位。特點(diǎn)4.累加器清零及取反指令CPLA

;(A)←(/A)CLRA

;(A)←0這兩條指令影響P標(biāo)志位5.移位指令所有移位指令只能對(duì)累加器A內(nèi)容進(jìn)行操作循環(huán)左移(1位)指令RLA

;(An+1)←(An),(A0)←(A7)CyA7A0循環(huán)右移(1位)指令

RRA

;(An)←(An+1),(A7)←(A0)

注:左移一位相當(dāng)于乘2;右移一位相當(dāng)于除2。

帶進(jìn)位位循環(huán)左移指令

RLCA

;(An+1)←(An),(CY)←(A7),(A0)←(CY)

CyA7A0帶進(jìn)位位循環(huán)右移指令

RRCA

;(An)←(An+1),(CY)←(A0),(A7)←(CY)

CyA7A0單片機(jī)原理與C51基礎(chǔ)指令系統(tǒng)(控制、位操作)3.6控制轉(zhuǎn)移類(lèi)指令

控制程序轉(zhuǎn)移到新的PC地址去執(zhí)行可改變程序執(zhí)行的順序,實(shí)現(xiàn)判斷、分支以及循環(huán)??煞譃?類(lèi):

-無(wú)條件轉(zhuǎn)移指令-條件轉(zhuǎn)移指令-調(diào)用子程序及返回指令-空操作指令1.無(wú)條件轉(zhuǎn)移指令

LJMPaddr16;PC←addr16

長(zhǎng)轉(zhuǎn)移,目標(biāo)地址:0000H~FFFFH,64KBSJMPrel ;PC←PC+2+rel-相對(duì)轉(zhuǎn)移(短轉(zhuǎn)移),偏移量為目標(biāo)與下一條指令地址之差。目標(biāo)地址=源地址+2+rel-rel補(bǔ)碼,帶符號(hào),+127~-128-rel(或addr,addr16)可寫(xiě)為目標(biāo)地址標(biāo)號(hào),偏差量由匯編自動(dòng)計(jì)算,如SJMPdest,dest為某指令行標(biāo)號(hào)AJMPaddr11;PC10~0←addr11

-短跳轉(zhuǎn)(絕對(duì)跳轉(zhuǎn)),指令本身雙字節(jié)。給出11位目標(biāo)地址。由操作碼的高3位和一字節(jié)操作數(shù)構(gòu)成

-目的地址的形成:先(PC)=(PC)+2;然后PC15~11不變,PC10~0=addr10~0操作碼操作數(shù)A10A9A800001A7~A0程序存儲(chǔ)器序號(hào)地址范圍序號(hào)地址范圍序號(hào)地址范圍序號(hào)地址范圍10000H~07FFH94000H~47FFH178000H~87FFH25C000H~C7FFH20800H~0FFFH104800H~4FFFH188800H~8FFFH26C800H~CFFFH31000H~17FFH115000H~57FFH199000H~97FFH27D000H~D7FFH41800H~1FFFH125800H~5FFFH209800H~9FFFH28D800H~DFFFH52000H~27FFH136000H~67FFH21A000H~A7FFH29E000H~E7FFH62800H~2FFFH146800H~6FFFH22A800H~AFFFH30E800H~EFFFH73000H~37FFH157000H~77FFH23B000H~B7FFH31F000H~F7FFH83800H~3FFFH167800H~7FFFH24B800H~BFFFH32F800H~FFFFH–64KB分32個(gè)頁(yè)面,每頁(yè)2KB.PC高5位指定頁(yè)面數(shù)-AJMP跳轉(zhuǎn)范圍是下一條指令同頁(yè)面內(nèi)的2KB注意:相對(duì)轉(zhuǎn)移(如SJMP)的范圍,是以指令的下一條指令為中心的前后范圍(-128~+127),這一范圍隨指令位置不同而浮動(dòng);短跳轉(zhuǎn)指令(AJMP)的跳轉(zhuǎn)范圍是其下一條指令所在的某個(gè)固定頁(yè)面內(nèi)。從程序存儲(chǔ)器0000H單元開(kāi)始每2K區(qū)域依次劃分為一個(gè)固定頁(yè)面。偏移量rel都可以寫(xiě)作16位目的地址的標(biāo)號(hào),匯編時(shí)自動(dòng)轉(zhuǎn)換為轉(zhuǎn)移字節(jié)數(shù)。間接轉(zhuǎn)移指令,不影響標(biāo)志位,不更改A和DPTR的內(nèi)容目標(biāo)地址=(A)+(DPTR)

(16位無(wú)符號(hào)數(shù)相加)常用于多分支轉(zhuǎn)移(也稱(chēng)為散轉(zhuǎn)):由DPTR決定散轉(zhuǎn)表首址,A確定具體分支JMP@A+DPTR;PC←A+DPTR例:當(dāng)(A)=0時(shí),執(zhí)行PRG0段程序,(A)=1時(shí),執(zhí)行PRG1段程序,……(A)=n時(shí),執(zhí)行PRGn段程序(n=0,1,2,3……)MOVDPTR,#TABLE

;表首址送DPTR

RLA;A乘2 JMP@A+DPTR;散轉(zhuǎn)TABLE:AJMPPRG0 AJMPPRG1 ┆ AJMPPRGn比較LJMP、AJMP、SJMP、JMP轉(zhuǎn)移的起點(diǎn)和范圍:

LJMPLJMPPC64K

AJMPAJMP2K

SJMPSJMPPC+2-128+127

JMPJMP@A+DPTRPCPC+2DPTR64K實(shí)現(xiàn)按照一定條件決定轉(zhuǎn)移的方向,分三類(lèi):判零轉(zhuǎn)移指令比較轉(zhuǎn)移指令循環(huán)轉(zhuǎn)移指令2.條件轉(zhuǎn)移指令

判零轉(zhuǎn)移指令

JZ rel

;若A=0則轉(zhuǎn)移(PC←PC+2+rel),若A0程序順序執(zhí)行JNZ rel

;若A0則轉(zhuǎn)移(PC←PC+2+rel),若A=0程序順序執(zhí)行例、將外RAM的一個(gè)數(shù)據(jù)塊(首地址為DATA1)傳送到內(nèi)部數(shù)據(jù)RAM(首地址為DATA2),遇到傳送的數(shù)據(jù)為零時(shí)停止傳送,試編程。解:MOVR0,#DATA2MOVDPTR,#DATA1LOOP1:MOVXA,@DPTR

JZLOOP2MOV@R0,AINCR0INCDPTRSJMPLOOP1LOOP2:SJMPLOOP2

DJNZRn,rel

;Rn←Rn–1,若Rn0,則轉(zhuǎn)移(PC←PC+2+rel),若Rn=0,程序順序執(zhí)行DJNZdirect,rel ;(direct)←(direct)-1,

若(direct)0,則轉(zhuǎn)移(PC←PC+3+rel),若(direct)=0,程序順序執(zhí)行循環(huán)轉(zhuǎn)移指令

例:1~100逐個(gè)累加程序:MOV R0,#64HCLR AMOV 30H,AMOV 31H,ALOOP:MOV A,30H

ADD A,R0MOV 30H,AMOVA,31H

ADDC A,#00HMOV 31H,ADJNZ R0,LOOP

SJMP$CJNEA,direct,rel;若A(direct),則轉(zhuǎn)移(PC←PC+3+rel),否則程序順序執(zhí)行

CJNEA,#data,rel;若A#data,則轉(zhuǎn)移(PC←PC+3+rel),

否則程序順序執(zhí)行CJNERn,#data,rel ;若Rn#data,則轉(zhuǎn)移(PC←PC+3+rel),

否則程序順序執(zhí)行CJNE@Ri,#data,rel;若((Ri))#data,則轉(zhuǎn)移(PC←PC+3+rel),否則程序順序執(zhí)行

比較轉(zhuǎn)移指令

比較轉(zhuǎn)移指令特點(diǎn)具有比較和判斷雙重功能,比較的本質(zhì)是做減法運(yùn)算,用第一操作數(shù)內(nèi)容減去第二操作數(shù)內(nèi)容,但差值不回存。轉(zhuǎn)移目的地址=(PC)+3+rel若第一操作數(shù)內(nèi)容小于第二操作數(shù)內(nèi)容,則(C)=1,否則(C)=0。該類(lèi)指令可產(chǎn)生三分支程序:即,相等分支;大于分支;小于分支。

A=B?出口YN

A>B?入口YN123例、設(shè)P1口的P1.0~P1.3為準(zhǔn)備就緒信號(hào)輸入端,當(dāng)該四位為全1時(shí),說(shuō)明各項(xiàng)工作已準(zhǔn)備好,單片機(jī)可順序執(zhí)行,否則,循環(huán)等待。解:WAIT:MOVA,P1ANLA,#0FHCJNEA,#0FH,WAIT;P1.0~P1.3不全為1時(shí),返回WAIT

MOVA,R2………

LCALLaddr16;長(zhǎng)調(diào)用

ACALLaddr11;短調(diào)用

(絕對(duì)調(diào)用)LCALLaddr16;轉(zhuǎn)移范圍64KB,不影響標(biāo)志位。執(zhí)行中自動(dòng)完成如下過(guò)程:PCPC+3SPSP+1(SP)PC7~0,保護(hù)斷點(diǎn)地址低字節(jié);SPSP+1(SP)PC15~8,保存斷點(diǎn)地址高字節(jié);PCaddr16,目的地址送PC,轉(zhuǎn)子程序。

3、調(diào)用及返回指令例、設(shè)SP=07H,PC=2100H,子程序首地址為3456H,執(zhí)行:LCALL3456HMOVA,20H······LCALL34H56HMOV

????執(zhí)行結(jié)果:SP=09H,(09H)=21H,(08H)=03H,

PC=3456H

SP07HSPSP08H09H2100H3456H外ROM內(nèi)RAMPC+3PC2103HPC03H21H轉(zhuǎn)移范圍與(PC)+2在同一個(gè)2KB內(nèi)。不影響任何標(biāo)志位,執(zhí)行中機(jī)器自動(dòng)完成下列過(guò)程:PCPC+2SPSP+1(SP)PC7~0SPSP+1(SP)PC15~8PC10~0addr10~0 ACALLaddr11:返回指令:從子程序返回主程序。RET

;調(diào)用子程序返回,彈棧;

RETI

;中斷子程序返回。

其機(jī)器自動(dòng)操作過(guò)程如下:異同點(diǎn):RET返回地址事先已知,而RETI的返回地址在程序執(zhí)行中產(chǎn)生的,不固定。不影響標(biāo)志位,但PSW不能恢復(fù)到中斷前的狀態(tài)。PC15~8

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論