學(xué)習(xí)單片機(jī)小小幫助_第1頁(yè)
學(xué)習(xí)單片機(jī)小小幫助_第2頁(yè)
學(xué)習(xí)單片機(jī)小小幫助_第3頁(yè)
學(xué)習(xí)單片機(jī)小小幫助_第4頁(yè)
學(xué)習(xí)單片機(jī)小小幫助_第5頁(yè)
已閱讀5頁(yè),還剩85頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

學(xué)習(xí)單片機(jī)小小幫助第一頁(yè),共九十頁(yè),編輯于2023年,星期五指令和助記符

指令本身是一組二進(jìn)制數(shù)代碼,為了便于記憶,將這些代碼用具有一定含義的指令助記符來(lái)表示,助記符一般采用英文單詞的縮寫。例:

指令代碼助記符功能

740AMOVA,#0AH將十六進(jìn)制數(shù)0AH放入累加器A中第二頁(yè),共九十頁(yè),編輯于2023年,星期五指令的字節(jié)數(shù)一條指令由操作碼和操作數(shù)組成。操作碼指明執(zhí)行什么操作,例如數(shù)的傳送、加法、減法等。操作數(shù)則表示這條指令所完成的操作對(duì)象,即是對(duì)誰(shuí)進(jìn)行操作。操作數(shù)可以是一個(gè)數(shù),或者是一個(gè)數(shù)所在的內(nèi)存地址。指令由指令字節(jié)組成,不同的指令,指令的字節(jié)數(shù)不相同。有單字節(jié)指令、雙字節(jié)指令和三字節(jié)指令。第三頁(yè),共九十頁(yè),編輯于2023年,星期五尋址方式

1寄存器尋址 2直接尋址3立即尋址4寄存器間接尋址5變址尋址 6相對(duì)尋址 7位尋址第四頁(yè),共九十頁(yè),編輯于2023年,星期五寄存器尋址以通用寄存器的內(nèi)容為操作數(shù)的尋址方式。通用寄存器為A、B、DPTR以及R0~R7

。

例:

CLR A;A←0INC DPTR ;DPTR←DPTR+1ADD R5,#20H ;R5←#20H+R5第五頁(yè),共九十頁(yè),編輯于2023年,星期五直接尋址指令中直接給出操作數(shù)地址的尋址方式,能進(jìn)行直接尋址的存儲(chǔ)空間有SFR寄存器和內(nèi)部數(shù)據(jù)RAM。

例:

MOV PSW,#20H;PSW←#20HMOV A,30H ;A←(30H)第六頁(yè),共九十頁(yè),編輯于2023年,星期五立即尋址

指令中直接給出操作數(shù)的尋址方式。立即操作數(shù)用前面加有#號(hào)的8位或16位數(shù)來(lái)表示。

例:

MOV A,#60H ;A←#60HMOV DPTR,#3400H ;DPTR←#3400HMOV 30H,#40H ;30H單元←#40H

第七頁(yè),共九十頁(yè),編輯于2023年,星期五寄存器間接尋址以寄存器中內(nèi)容為地址,以該地址中內(nèi)容為操作數(shù)的尋址方式。間接尋址的存儲(chǔ)器空間包括內(nèi)部數(shù)據(jù)RAM和外部數(shù)據(jù)RAM。能用于寄存器間接尋址的寄存器有R0,R1和DPTR。在寄存器名稱前面加一個(gè)符號(hào)@來(lái)表示寄存器間接尋址。例:

MOVA,@R0;A←((R0))MOVX@DPTR,A;外部RAM(DPTR)←A第八頁(yè),共九十頁(yè),編輯于2023年,星期五片內(nèi)RAM30HR034HA30H34H

MOVA,@R0操作示意圖第九頁(yè),共九十頁(yè),編輯于2023年,星期五片外RAM2000HDPTR30HA2000H30HMOVX@DPTR,A操作示意圖第十頁(yè),共九十頁(yè),編輯于2023年,星期五5變址尋址變址尋址是以某個(gè)寄存器的內(nèi)容為基本地址,然后在這個(gè)基址上加以地址的偏移量,才是真正的操作數(shù)地址。

例:

MOVCA,@A+DPTR;A←(A+DPTR)

MOVCA,@A+PC;A←(A+PC)

第十一頁(yè),共九十頁(yè),編輯于2023年,星期五MOVCA,@A+DPTR

操作示意圖程序存儲(chǔ)器02F1HDPTRA0302H1EH11HA執(zhí)行前1EHA執(zhí)行后+第十二頁(yè),共九十頁(yè),編輯于2023年,星期五相對(duì)尋址 以當(dāng)前程序計(jì)數(shù)器PC的內(nèi)容為基礎(chǔ),加上指令給出的一字節(jié)補(bǔ)碼數(shù)(偏移量)形成新的PC值的尋址方式。相對(duì)尋址用于修改PC值,主要用于實(shí)現(xiàn)程序的分支轉(zhuǎn)移。例:

SJMP08H;PC←PC+2+08H

第十三頁(yè),共九十頁(yè),編輯于2023年,星期五SJMP08H

操作示意圖程序存儲(chǔ)器SJMP200AH08H2000H+208H執(zhí)行前PC2000H執(zhí)行后PC第十四頁(yè),共九十頁(yè),編輯于2023年,星期五7位尋址位尋址只能對(duì)有位地址的單元作位尋址操作。位尋址其實(shí)是一種直接尋址方式,不過(guò)其地址是位地址。例:

SETB10H;將10H位置1MOV32H,C;32H←進(jìn)位位CCLRPSW.4;將RS1位清0第十五頁(yè),共九十頁(yè),編輯于2023年,星期五指令分類說(shuō)明 1數(shù)據(jù)傳送類指令2算術(shù)運(yùn)算類指令3邏輯運(yùn)算與循環(huán)類指令4程序轉(zhuǎn)移類指令5子程序調(diào)用及返回指令6位操作指令第十六頁(yè),共九十頁(yè),編輯于2023年,星期五數(shù)據(jù)傳送類指令助記符說(shuō)明

MOV、MOVX、MOVC傳送操作

XCH、XCHD、SWAP交換操作

PUSH、POP堆棧操作源操作數(shù)尋址方式:立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址。目的操作數(shù)尋址方式:直接尋址、寄存器尋址、寄存器間接尋址除了目的操作數(shù)為ACC的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。第十七頁(yè),共九十頁(yè),編輯于2023年,星期五直接地址direct累加器A直接地址direct間接地址@Ri寄存器Rn立即數(shù)#data寄存器DPTR8051單片機(jī)片內(nèi)數(shù)據(jù)傳送圖第十八頁(yè),共九十頁(yè),編輯于2023年,星期五

1以累加器為目的操作數(shù)的指令(4條)

MOVA,Rn

MOVA,direct

MOVA,@Ri

MOVA,#data

這組指令功能將源操作數(shù)指定內(nèi)容送到A中。

2以寄存器Rn為目的操作數(shù)的指令

(3條)

MOVRn,A

MOVRn,direct

MOVRn,#data

這組指令功能是把源操作數(shù)指定的內(nèi)容送入當(dāng)前工作寄存器,源操作數(shù)不變。第十九頁(yè),共九十頁(yè),編輯于2023年,星期五

3以直接地址為目的操作數(shù)的指令(5條)

MOVdirect,A MOVdirect,Rn MOVdirect1,direct2 MOVdirect,@Ri MOVdirect,#data

這組指令功能是把源操作數(shù)指定的內(nèi)容送入由直接地址指出的片內(nèi)存儲(chǔ)單元。例:

MOV20H,A MOV20H,R1 MOV20H,30H MOV20H,@R1 MOV0A0H,#34H MOVP2,#34H第二十頁(yè),共九十頁(yè),編輯于2023年,星期五4以間接地址為目的操作數(shù)的指令(3條)

MOV@Ri,A

MOV@Ri,direct

MOV@Ri,#data

功能:把源操作數(shù)指定的內(nèi)容送入以R0或R1中內(nèi)容為地址的片內(nèi)存儲(chǔ)單元。例:

MOV@R0,A MOV@R1,20H MOV@R0,#34H第二十一頁(yè),共九十頁(yè),編輯于2023年,星期五5十六位數(shù)的傳遞指令(1條)

MOVDPTR,#data168051是8位機(jī),這是唯一的一條16位立即數(shù)傳遞指令。功能:將一個(gè)16位的立即數(shù)送入DPTR中去。其中高8位送入DPH,低8位送入DPL。例:MOVDPTR,#1234H執(zhí)行完了之后DPH中的值為12H,DPL中的值為34H。如果我們分別向DPH,DPL送數(shù),則結(jié)果也一樣。如下面兩條指令:MOVDPH,#35H

MOVDPL,#12H。相當(dāng)于執(zhí)行了MOVDPTR,#3512H。第二十二頁(yè),共九十頁(yè),編輯于2023年,星期五6累加器A與片外RAM之間的數(shù)據(jù)傳遞類指令(4條)

MOVXA,@Ri MOVX@Ri,A MOVXA,@DPTR MOVX@DPTR,A說(shuō)明:

1.在8051中,與外部RAM存儲(chǔ)器打交道的只可以是累加器A。所有需要送入外部RAM的數(shù)據(jù)必需要通過(guò)A送去,而所有要讀入的外部RAM中的數(shù)據(jù)也必需通過(guò)A讀入。在此我們可以看出內(nèi)外部RAM的區(qū)別了,內(nèi)部RAM間可以直接進(jìn)行數(shù)據(jù)的傳遞,而外部則不行。比如,要將外部RAM中某一單元(設(shè)為0100H單元的數(shù)據(jù))送入另一個(gè)單元(設(shè)為0200H單元),也必須先將0100H單元中的內(nèi)容讀入A,然后再送到0200H單元中去。第二十三頁(yè),共九十頁(yè),編輯于2023年,星期五

2.要讀或?qū)懲獠縍AM,必須要知道RAM的地址,采用DPTR時(shí),地址被直接放在DPTR中的。采用Ri(R0或R1)時(shí),由于Ri只是8位的寄存器,所以只提供低8位地址。高8位地址由P2口來(lái)提供。

3.使用時(shí)應(yīng)先將要讀或?qū)懙牡刂匪腿隓PTR或Ri中,然后再用讀寫命令。例:將外部RAM中100H單元中的內(nèi)容送入外部RAM中200H單元中。

MOVDPTR,#0100H MOVXA,@DPTR MOVDPTR,#0200H MOVX@DPTR,A第二十四頁(yè),共九十頁(yè),編輯于2023年,星期五7讀程序存儲(chǔ)器指令(2條)

MOVCA,@A+DPTRMOVCA,@A+PC

本組指令是將ROM中的數(shù)送入A中。本組指令也被稱為查表指令,常用此指令來(lái)查一個(gè)已做好在ROM中的表格說(shuō)明:查找到的結(jié)果被放在A中,因此,本條指令執(zhí)行前后,A

中的值不一定相同。例:有一個(gè)數(shù)在R0中,要求用查表的方法確定它的平方值(此數(shù)的取值范圍是0-5)

MOVDPTR,#100H MOVA,R0 MOVCA,@A+DPTR

…… ORG0100H DB0,1,4,9,16,25第二十五頁(yè),共九十頁(yè),編輯于2023年,星期五

8堆棧操作(2條)

PUSHdirect

POPdirect

第一條為壓入指令,將direct中的內(nèi)容送入堆棧中,第二條為彈出指令,將堆棧中的內(nèi)容送回到direct中。例:

MOVSP,#10H MOV40H,#50H PUSH40H POP30H

執(zhí)行第一條PUSH40H指令是這樣的:將SP中的值加1,變?yōu)?1H,然后將40H中的值送到11H單元中,因此執(zhí)行完本條指令后,內(nèi)存11H單元的值是50H,同樣,執(zhí)行POP30H時(shí),是將11H中的值送入到30H單元中,即執(zhí)行完本條指令后,30H單元中的值變?yōu)?0H。第二十六頁(yè),共九十頁(yè),編輯于2023年,星期五

9交換指令(5條)

XCHA,Rn XCHA,direct XCHA,@Ri XCHDA,@Ri SWAPA

例:已知A中的內(nèi)容為34H MOVR6,#29H XCHA,R6 SWAPA XCHA,R6XCHDA,@R0第二十七頁(yè),共九十頁(yè),編輯于2023年,星期五算術(shù)運(yùn)算類指令主要用于8位無(wú)符號(hào)數(shù)運(yùn)算;也可用于帶符號(hào)數(shù)運(yùn)算。包括:加、減、乘、除、加1、減1運(yùn)算指令,指令操作將影響PSW中有關(guān)狀態(tài)位。第二十八頁(yè),共九十頁(yè),編輯于2023年,星期五

1

加法指令

ADDA,#data ADDA,direct ADDA,Rn ADDA,@Ri

用途:將A中的值與源操作數(shù)所指內(nèi)容相加,最終結(jié)果存在A中。(1)不帶進(jìn)位位的加法指令(4條)第二十九頁(yè),共九十頁(yè),編輯于2023年,星期五例1:ADDA,#47H ADDA,34H ADDA,R7 ADDA,@R0例2:MOVA,#0AEH;-82 ADDA,#81H;-127則執(zhí)行完本條指令后,A中的值為2FHPSW中狀態(tài)位C=1,AC=0,OV=1,P=1對(duì)無(wú)符號(hào)數(shù):結(jié)果為12FH;對(duì)帶符號(hào)數(shù):OV=1,有錯(cuò)。第三十頁(yè),共九十頁(yè),編輯于2023年,星期五(2)帶進(jìn)位位的加法指令(4條)

ADDCA,Rn

;A+Rn+CY→A

ADDCA,direct

;A+(direct)+CY→A

ADDCA,@Ri

;A+(Ri)+CY→A

ADDCA,#data

;A+data+CY→A用途:將A中的值和其后面的值以及進(jìn)位位C中的值相加,最終結(jié)果存在A,常用于多字節(jié)數(shù)運(yùn)算中。第三十一頁(yè),共九十頁(yè),編輯于2023年,星期五例:先做67H+A0H=107H,而107H顯然超過(guò)了0FFH,因此最終保存在A中的是07H,而1則到了PSW中的CY位了。換言之,CY就相當(dāng)于是100H。然后再做10H+30H+CY,結(jié)果是41H,所以最終的結(jié)果是4107H。1067H+30A0H0001000001100111001100001010000001000001000001111067H30A0H4107H第三十二頁(yè),共九十頁(yè),編輯于2023年,星期五又例:先做67H+20H=87H,沒(méi)有超過(guò)0FFH,因此最終保存在A中的是87H,而PSW中的CY=0。然后再做10H+30H+CY,結(jié)果是40H,所以最終的結(jié)果是4087H。1067H+3020H0001000001100111001100000010000001000000100001111067H3020H4087H第三十三頁(yè),共九十頁(yè),編輯于2023年,星期五(3)加1指令(5條)INCA

;A+1→A,影響P標(biāo)志INCRn

;Rn+1→RnINCdirect

;(direct)+1→(direct)INC@Ri

;(Rn)+1→(Rn)INCDPTR

;DPTR+1→DPTR功能很簡(jiǎn)單,就是將后面目標(biāo)中的值加1。例:A=12H,R0=33H,(21H)=32H,

(34H)=22H,DPTR=1234H。連續(xù)執(zhí)行下面的指令:

INCAINCR0INC21HINC@R0INCDPTR;A=13H;R0=34H;(21H)=33H;(34H)=23H;DPTR=1235H第三十四頁(yè),共九十頁(yè),編輯于2023年,星期五DAA在進(jìn)行BCD碼加法運(yùn)算時(shí),跟在ADD和ADDC指令之后,用來(lái)對(duì)BCD碼加法運(yùn)算結(jié)果進(jìn)行自動(dòng)修正。例:A=00010101(代表十進(jìn)制數(shù)15)

ADDA,#8(4)十進(jìn)制調(diào)整指令(1條);A=1DH,按二進(jìn)制規(guī)律加;A=23H,按十進(jìn)制規(guī)律加DAA第三十五頁(yè),共九十頁(yè),編輯于2023年,星期五2減法指令(8條)SUBBA,Rn

;A-Rn-CY→ASUBBA,direct;A-(direct)-CY→ASUBBA,@Ri

;A-(Ri)-CY→ASUBBA,#data ;A-data-CY→A將A中的值減去源操作數(shù)所指內(nèi)容以及進(jìn)位位C中的值,最終結(jié)果存在A中。說(shuō)明:沒(méi)有不帶借位的減法指令,如果需要做不帶位的減法指令(在做第一次相減時(shí)),只要將CY清零即可。(1)帶借位的減法指令(4條)第三十六頁(yè),共九十頁(yè),編輯于2023年,星期五(2)減1指令(4條)DECA

;A-1→A,DECRn

;Rn-1→RnDECdirect

;(direct)-1→(direct)DEC@Ri

;(Rn)-1→(Rn)

與加1指令類似。第三十七頁(yè),共九十頁(yè),編輯于2023年,星期五

3乘法指令(1條)MULAB

;A×B→BA此指令的功能是將A和B中的兩個(gè)8位無(wú)符號(hào)數(shù)相乘,結(jié)果將為16無(wú)符號(hào)數(shù)。其中高8位放在B中,低8位放在A中。在乘積大于FFH時(shí),0V置1,否則OV為0;而CY總是0。例:A=4EH,B=5DH,執(zhí)行MULAB指令后,乘積是1C56H,所以在B中放的是1CH,而A中放的則是56H。第三十八頁(yè),共九十頁(yè),編輯于2023年,星期五

4除法指令(1條)DIVAB

;A÷B的商→A,余數(shù)→B此指令的功能是將A中的8位無(wú)符號(hào)數(shù)除B中的8位無(wú)符號(hào)數(shù),商放在A中,余數(shù)放在B中。如果在做除法前B中的值是00H,也就是除數(shù)為0,那么0V=1。例:A=11H,B=04H,執(zhí)行DIVAB指令后,結(jié)果為:A=04H,B=1。第三十九頁(yè),共九十頁(yè),編輯于2023年,星期五邏輯運(yùn)算與循環(huán)類指令主要用于對(duì)2個(gè)操作數(shù)按位進(jìn)行邏輯操作,結(jié)果送到A或直接尋址單元。

主要操作與、或、異或、移位、取反、清零等。

對(duì)標(biāo)志位的影響除了目的操作數(shù)為ACC的指令影響奇偶標(biāo)志P外,一般不影響標(biāo)志位。第四十頁(yè),共九十頁(yè),編輯于2023年,星期五1邏輯或指令(6條)ORLA,Rn

;A∨Rn→AORLA,direct ;A∨(direct)→AORLA,@Ri

;A∨(Ri)→AORLA,#data;A∨data→AORLdirect,A

;(direct)∨A→(direct)ORLdirect,#data

;(direct)∨data→(direct)影響P標(biāo)志例:71H和56H相或:

01110001(71H) ∨)01010110(56H)

01110111即77H后兩條指令,若直接地址為I/O端口,則為“讀-改寫”操作。第四十一頁(yè),共九十頁(yè),編輯于2023年,星期五2邏輯與指令(6條)ANLA,Rn

;A∧Rn→AANLA,direct

;A∧(direct)→AANLA,@Ri

;A∧(Ri)→AANLA,#data

;A∧data→AANLdirect,A

;(direct)∧A→(direct)ANLdirect,#data

;(direct)∧data→(direct)影響P標(biāo)志例:71H和56H相與:

01110001(71H) ∧)01010110(56H)01010000即50H后兩條指令,若直接地址為I/O端口,則為“讀-改寫”操作。第四十二頁(yè),共九十頁(yè),編輯于2023年,星期五例:71H和56H相異或:

01110001(71H) ⊕)01010110(56H)

3邏輯異或指令(6條)XRLA,Rn

;A⊕Rn→AXRLA,direct

;A⊕(direct)→AXRLA,@Ri

;A⊕(Ri)→AXRLA,#data

;A⊕data→AXRLdirect,A

;(direct)⊕A→(direct)XRLdirect,#data

;(direct)⊕data→(direct)影響P標(biāo)志00100111即27H后兩條指令,若直接地址為I/O端口,則為“讀-改寫”操作。第四十三頁(yè),共九十頁(yè),編輯于2023年,星期五

4取反與清0指令(2條)取反:CPLA;/A→A例:若A=5CH,執(zhí)行CPLA

結(jié)果:A=A3H清0:CLRA

;0→A第四十四頁(yè),共九十頁(yè),編輯于2023年,星期五5循環(huán)移位指令(4條)RLA

RRARLCARRCAA.7 A.0A.7 A.0A.7 A.0CYCYA.7 A.0后兩條指令,影響P和CY標(biāo)志。第四十五頁(yè),共九十頁(yè),編輯于2023年,星期五例:若A=5CH,CY=1,執(zhí)行RLCA后,對(duì)RLC、RRC指令,在CY=0時(shí)

RLC相當(dāng)于乘以2 RRC相當(dāng)于除以2結(jié)果:A=B9H,CY=0,P=1010111001101110010第四十六頁(yè),共九十頁(yè),編輯于2023年,星期五綜合舉例:ANLA,#0FH ;屏蔽A的高4位SWAPAANLP1,#0FH ;清P1口高4位ORLP1,A;P1口高4位輸出A的低4位;把累加器A中的低4位狀態(tài),通過(guò)P1口的高4位輸出,P1口的低4位狀態(tài)不變。第四十七頁(yè),共九十頁(yè),編輯于2023年,星期五程序轉(zhuǎn)移類指令此類指令一般不影響PSW。包括以下類型:無(wú)條件轉(zhuǎn)移和條件轉(zhuǎn)移相對(duì)轉(zhuǎn)移和絕對(duì)轉(zhuǎn)移長(zhǎng)轉(zhuǎn)移和短轉(zhuǎn)移調(diào)用與返回指令第四十八頁(yè),共九十頁(yè),編輯于2023年,星期五

無(wú)條件轉(zhuǎn)移類指令(4條)短轉(zhuǎn)移類指令:AJMPaddr11

長(zhǎng)轉(zhuǎn)移類指令:LJMPaddr16

相對(duì)轉(zhuǎn)移指令:SJMPrel

間接轉(zhuǎn)移指令:JMP@A+DPTR(1)上面的前三條指令,統(tǒng)統(tǒng)理解成:PC值改變,即跳轉(zhuǎn)到一個(gè)標(biāo)號(hào)處。那么他們的區(qū)別何在呢?第四十九頁(yè),共九十頁(yè),編輯于2023年,星期五跳轉(zhuǎn)的范圍不同。短轉(zhuǎn)移類指令:AJMPaddr11

長(zhǎng)轉(zhuǎn)移類指令:LJMPaddr16

相對(duì)轉(zhuǎn)移指令:SJMPrel轉(zhuǎn)移范圍:2KB64KB-128~+127指令構(gòu)成不同。

AJMP、LJMP后跟的是絕對(duì)地址,而SJMP后跟的是相對(duì)地址。

指令長(zhǎng)度不同原則上,所有用SJMP或AJMP的地方都可以用

LJMP來(lái)替代。第五十頁(yè),共九十頁(yè),編輯于2023年,星期五散轉(zhuǎn)指令:JMP@A+DPTR這條指令的用途也是跳轉(zhuǎn),轉(zhuǎn)到什么地方去呢?這可不能由標(biāo)號(hào)簡(jiǎn)單地決定了。轉(zhuǎn)移地址由A+DPTR形成,并直接送入PC。指令對(duì)A、DPTR和標(biāo)志位均無(wú)影響。本指令可代替眾多的判別跳轉(zhuǎn)指令,又稱為散轉(zhuǎn)指令,多用于多分支程序結(jié)構(gòu)中。(2)第四條指令與前三條指令相比有所不同第五十一頁(yè),共九十頁(yè),編輯于2023年,星期五

條件轉(zhuǎn)移指令(8條)條件轉(zhuǎn)移指令是指在滿足一定條件時(shí)進(jìn)行相對(duì)轉(zhuǎn)移,否則程序繼續(xù)執(zhí)行本指令的下一條指令。一、判A內(nèi)容是否為0轉(zhuǎn)移指令(2條)

JZrel

;如果A=0,則轉(zhuǎn)移,否則順序執(zhí)行。

JNZrel

;如果A≠0,就轉(zhuǎn)移。轉(zhuǎn)移到相對(duì)于當(dāng)前PC值的8位移量的地址去。即:新的PC值=當(dāng)前PC+偏移量rel在編寫匯編語(yǔ)言源程序時(shí),可以直接寫成:

JZ標(biāo)號(hào) ;即轉(zhuǎn)移到標(biāo)號(hào)處。第五十二頁(yè),共九十頁(yè),編輯于2023年,星期五二、比較不等轉(zhuǎn)移指令(4條)CJNEA,#data,relCJNEA,direct,relCJNERn,#data,relCJNE@Ri,#data,rel此類指令的功能是將兩個(gè)操作數(shù)比較,如果兩者相等,就順序執(zhí)行,如果不相等,就轉(zhuǎn)移。同樣地,使用時(shí),可以將rel理解成標(biāo)號(hào),即:

CJNEA,#data,標(biāo)號(hào)

CJNEA,direct,標(biāo)號(hào)

CJNERn,#data,標(biāo)號(hào)

CJNE@Ri,#data,標(biāo)號(hào)第五十三頁(yè),共九十頁(yè),編輯于2023年,星期五利用這些指令,可以判斷兩數(shù)是否相等。但有時(shí)還想得知兩數(shù)比較之后哪個(gè)大,哪個(gè)小,本條指令也具有這樣的功能:如果兩數(shù)不相等,則CPU還會(huì)用CY(進(jìn)位位)來(lái)反映哪個(gè)數(shù)大,哪個(gè)數(shù)小。如果前面的數(shù)大,則CY=0,否則CY=1。因此在程序轉(zhuǎn)移后再次利用CY就可判斷出哪個(gè)數(shù)大,哪個(gè)數(shù)小了。第五十四頁(yè),共九十頁(yè),編輯于2023年,星期五三、減1不為0轉(zhuǎn)移指令(2條)DJNZRn,relDJNZdirect,relDJNZ指令的執(zhí)行過(guò)程是這樣的:它將第一個(gè)參數(shù)中的值減1,然后看這個(gè)值是否等于0,如果等于0,就往下執(zhí)行,如果不等于0,就轉(zhuǎn)移到第二個(gè)參數(shù)所指定的地方去。例:

LOOP:DJNZ10H,LOOP

第五十五頁(yè),共九十頁(yè),編輯于2023年,星期五例:

MOV23H,#0AHCLRALOOP:ADDA,23HDJNZ23H,LOOPSJMP$上述程序段的執(zhí)行過(guò)程是:將23H單元中的數(shù)連續(xù)相加,存至A中,每加一次,23H單元中的數(shù)值減1,直至減到0,共加(23H)次。第五十六頁(yè),共九十頁(yè),編輯于2023年,星期五

子程序調(diào)用與返回指令一、調(diào)用指令(2條)

LCALLaddr16

;長(zhǎng)調(diào)用指令(3字節(jié))

ACALLaddr11

;短調(diào)用指令(2字節(jié))上面兩條指令都是在主程序中調(diào)用子程序,兩者的區(qū)別:對(duì)短調(diào)用指令,被調(diào)用子程序入口地址必須與調(diào)用指令下一條指令的第一字節(jié)在相同的2KB存儲(chǔ)區(qū)之內(nèi)。使用時(shí)可以用標(biāo)號(hào)表示子程序首地址第五十七頁(yè),共九十頁(yè),編輯于2023年,星期五二、返回指令

(2條)子程序執(zhí)行完后必須回到主程序,如何返回呢?只要執(zhí)行一條返回指令就可以了。RET

;子程序返回指令RETI

;中斷子程序返回指令兩者不能互換使用。第五十八頁(yè),共九十頁(yè),編輯于2023年,星期五空操作指令(1條)

NOP空操作,就是什么事也不干,停一個(gè)周期,一般用作短時(shí)間的延時(shí)。第五十九頁(yè),共九十頁(yè),編輯于2023年,星期五位操作指令8051單片機(jī)的硬件結(jié)構(gòu)中,有一個(gè)位處理器(又稱布爾處理器),它有一套位變量處理的指令集,包括位變量傳送、邏輯運(yùn)算、控制程序轉(zhuǎn)移等。在8051中,有一部份RAM和一部份SFR是具有位尋址功能的。位操作區(qū):內(nèi)部RAM的20H-2FH這16個(gè)字節(jié)單元,即128個(gè)位單元(位地址空間位00~7FH);可以位尋址的特殊功能寄存器。第六十頁(yè),共九十頁(yè),編輯于2023年,星期五以PSW中位4(RS1)為例。直接(位)地址方式:如D4H;點(diǎn)操作符號(hào)方式:如PSW.4,D0H.4;位名稱方式:如RS1;用戶定義名方式:如用偽指令bit SUB.REGbitRS1定義后,可用SUB.REG代替RS1。位地址表達(dá)方式第六十一頁(yè),共九十頁(yè),編輯于2023年,星期五

位傳送指令(2條)

MOVC,bit ;bit→CMOVbit,C

;C→bit這組指令的功能是實(shí)現(xiàn)位累加器(CY)和其它位地址之間的數(shù)據(jù)傳遞。例:MOVC,P1.0 ;將P1.0的狀態(tài)送給C。

MOVP1.0,C;將C中的狀態(tài)送到P1.0

;引腳上去。第六十二頁(yè),共九十頁(yè),編輯于2023年,星期五位清0和置位(4條)

位清0指令

CLRC

;使CY=0CLRbit

;使指令的位地址等于0。

例:CLRP1.0;即使P1.0變?yōu)?

位置1指令

SETBC

;使CY=1SETBbit

;使指定的位地址等于1。

例:SETBP1.0;使P.0變?yōu)?第六十三頁(yè),共九十頁(yè),編輯于2023年,星期五位邏輯運(yùn)算指令

(6條)

位與指令A(yù)NLC,bit

;Cy與指定位的值相與,結(jié)果送CyANLC,/bit

;先將指定的位地址中的值取出后取反,再和Cy相與,結(jié)果送回Cy。但注意:指定的位地址中的值本身并不發(fā)生變化。例:ANLC,/P1.0第六十四頁(yè),共九十頁(yè),編輯于2023年,星期五位取反指令CPLC

;使Cy值取反。CPLbit

;使指定的位的值取反。例:CPLP1.0位或指令

ORLC,bitORLC,/bit第六十五頁(yè),共九十頁(yè),編輯于2023年,星期五位條件轉(zhuǎn)移指令(5條)

判Cy轉(zhuǎn)移指令

JCrel JNCrel

第一條指令的功能是如果Cy=1就轉(zhuǎn)移,否則就順序執(zhí)行。第二條指令則和第一條指令相反,即如果Cy=0就轉(zhuǎn)移,否則就順序執(zhí)行。第六十六頁(yè),共九十頁(yè),編輯于2023年,星期五判位變量轉(zhuǎn)移指令

JBbit,relJNBbit,relJBCbit,rel第一條指令:如果指定的(bit)=1,則轉(zhuǎn)移,否則順序執(zhí)行,第二條指令功能相反。第三條指令是如果指定的(bit)=1,則轉(zhuǎn)移,并把該位清0,否則順序執(zhí)行。第六十七頁(yè),共九十頁(yè),編輯于2023年,星期五

匯編語(yǔ)言程序設(shè)計(jì)第六十八頁(yè),共九十頁(yè),編輯于2023年,星期五匯編語(yǔ)言格式與偽指令匯編語(yǔ)言源程序由以下兩種指令構(gòu)成匯編語(yǔ)句(指令語(yǔ)句)偽指令(指示性語(yǔ)句)匯編語(yǔ)句的格式:

標(biāo)號(hào):

操作碼

操作數(shù) ;注釋3.

偽指令:控制匯編用的特殊指令,這些指令不屬于指令系統(tǒng),不產(chǎn)生機(jī)器代碼。

第六十九頁(yè),共九十頁(yè),編輯于2023年,星期五常用的偽指令

ORG定位目的程序的起始地址。格式: ORG表達(dá)式表達(dá)式必須為16位地址值。如:ORG0000H

END匯編語(yǔ)言程序結(jié)束偽指令。一定放在程序末尾!第七十頁(yè),共九十頁(yè),編輯于2023年,星期五常用的偽指令

EQU賦值偽指令。

格式:字符名稱EQU數(shù)值或匯編符號(hào)

例: AA EQU 30H K1 EQU 40H MOVA,AA ;(30H)→A MOVA,K1 ;(40H)→A第七十一頁(yè),共九十頁(yè),編輯于2023年,星期五常用的偽指令DB

從指定單元開始定義(存儲(chǔ))若干個(gè)字節(jié)的數(shù)據(jù)或ASCII碼字符,常用于定義數(shù)據(jù)常數(shù)表。 格式:DB

字節(jié)常數(shù)或ASCII字符例: ORG 1000H DB 34H,0DEH,’A’,’B’ DB 0AH,0BH,20第七十二頁(yè),共九十頁(yè),編輯于2023年,星期五常用的偽指令DW

從指定單元開始定義(存儲(chǔ))若干個(gè)字的數(shù)據(jù)或ASCII碼字符。格式:DW 字常數(shù)或ASCII字符

例: ORG2000H DW 1234H,’B’ DW 0AH,20第七十三頁(yè),共九十頁(yè),編輯于2023年,星期五常用的偽指令

BIT

位地址符號(hào)指令。把位地址賦于規(guī)定的字符名稱。 格式:字符名稱 BIT 位地址例: ABC BIT P1.1 QQ BIT P3.2第七十四頁(yè),共九十頁(yè),編輯于2023年,星期五匯編語(yǔ)言程序設(shè)計(jì)應(yīng)用在進(jìn)行應(yīng)用匯編程序設(shè)計(jì)時(shí),首先要確定算法,算法的優(yōu)劣很大程度上決定了程序的效率,另外還要盡可能畫出程序框圖,以便于分析程序流程。第七十五頁(yè),共九十頁(yè),編輯于2023年,星期五定點(diǎn)數(shù)運(yùn)算子程序定點(diǎn)數(shù):小數(shù)點(diǎn)固定的數(shù)。可以把小數(shù)點(diǎn)固定在數(shù)值的最高位之前,對(duì)于有符號(hào)的數(shù),小數(shù)點(diǎn)應(yīng)在符號(hào)位與最高數(shù)值位之間,即:

符號(hào)位·數(shù)值部分也可以把小數(shù)點(diǎn)固定在最低數(shù)值位后面,即:

符號(hào)位數(shù)值部分·第七十六頁(yè),共九十頁(yè),編輯于2023年,星期五定點(diǎn)數(shù)表示方式(1)原碼表示法

符號(hào)位為0表示正數(shù),符號(hào)位為1表示負(fù)數(shù)如:二進(jìn)制數(shù)00110100表示十進(jìn)制數(shù)+52二進(jìn)制數(shù)10110100表示十進(jìn)制數(shù)-52(2)補(bǔ)碼表示法正數(shù)的補(bǔ)碼表示與原碼相同,即最高位為0,其余位為數(shù)值位。負(fù)數(shù)用補(bǔ)碼表示時(shí),最高位為1,數(shù)值位要按位取反后再在最低位加1,才是該負(fù)數(shù)的數(shù)值。

例如:十進(jìn)制數(shù)+51的二進(jìn)制補(bǔ)碼為00110011十進(jìn)制數(shù)-51的二進(jìn)制補(bǔ)碼為11001101

第七十七頁(yè),共九十頁(yè),編輯于2023年,星期五例:雙字節(jié)數(shù)取補(bǔ)子程序。

將(R4R5)中的雙字節(jié)數(shù)取補(bǔ),結(jié)果送R4R5。

CMPT:MOVA,R5 CPLA ADDA,#1 MOVR5,A MOVA,R4 CPLA ADDCA,#0 MOVR4,A RET第七十八頁(yè),共九十頁(yè),編輯于2023年,星期五例:雙字節(jié)原碼數(shù)左移一位子程序。

將(R2R3)左移一位,結(jié)果送R2R3,不改變符號(hào)位,不考慮溢出。

DRL1: MOVA,R3 CLRC RLCA MOVR3,A MOVA,R2 RLCA MOVACC.7,C;恢復(fù)符號(hào)位

MOVR2,A RET第七十九頁(yè),共九十頁(yè),編輯于2023年,星期五例:雙字節(jié)原碼右移一位子程序。

將(R2R3)右移一位,結(jié)果送R2R3,不改變符號(hào)位。

DRR1: MOVA,R2 MOVC,ACC.7;保護(hù)符號(hào)位

CLRACC.7;移入0 RRCA MOVR2,A MOVA,R3 RRCA MOVR3,A RET第八十頁(yè),共九十頁(yè),編輯于2023年,星期五例:雙字節(jié)補(bǔ)碼右移一位子程序。將(R2R3)右移一位,結(jié)果送R2R3,不改變符號(hào)位。

CRR1: MOVA,R2 MOVC,ACC.7;保護(hù)符號(hào)位

RRCA;移入符號(hào)位

MOVR2,A MOVA,R3 RRCA MOVR3,A RET第八十一頁(yè),共九十頁(yè),編輯于2023年,星期五例:雙字節(jié)無(wú)符號(hào)數(shù)加法子程序。

將(R2R3)和(R6R7)兩個(gè)無(wú)符號(hào)數(shù)相加,結(jié)果送R4R5。

NADD:MOVA,R3 ADDA,R7 MOVR5,AMOVA,R2ADDCA,R6MOVR4,ARET第八十二頁(yè),共九十頁(yè),編輯于2023年,星期五例:雙字節(jié)無(wú)符號(hào)數(shù)減法子程序。

將(R2R3)和(R6R7)兩個(gè)雙字節(jié)數(shù)相減,結(jié)果送R4R5。

NSUB1: MOVA,R3 CLRC SUBBA,R7 MOVR5,A MOVA,R2 SUBBA,R6 MOVR4,A RET第八十三頁(yè),共九十頁(yè),編輯于2023年,星期五例:雙字節(jié)原碼加減運(yùn)算子程序。

(R2R3)和(R6R7)為兩個(gè)原碼表示的數(shù),最高位為符號(hào)位,求(R2R3)±(R6R7)結(jié)果送R4R5。程序中DADD為原碼加法子程序入口,DSUB為原碼減法子程序入口。出口時(shí)CY=1發(fā)生溢出,CY=0為正常。

DSUB: MOVA,R6;減法入口

CPLACC.7;取反符號(hào)位

MOVR6,ADADD: MOVA,R2;加法入口

MOVC,ACC.7 MOVF0,C;保存被加數(shù)符號(hào)位

XRLA,R6 MOVC,ACC.7;C=1,異號(hào),C=0,同號(hào)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論