




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
微機原理與單片微機系統(tǒng)及應(yīng)用教材:《微機原理與單片微機系統(tǒng)及應(yīng)用》機械工業(yè)出版社,2019.10.謝維成,楊加國西華大學第7章51單片機匯編程序設(shè)計基本內(nèi)容:51系列單片機匯編指令格式及標識;51單片機的尋址方式;51單片機的指令系統(tǒng);51單片機匯編程序常用偽指令及常見匯編程序設(shè)計。學習要點:51單片機的尋址方式;51單片機的指令系統(tǒng);代碼轉(zhuǎn)換程序、分支程序和延時程序。7.151系列單片機匯編指令格式及標識7.1.1指令格式基本格式如下:[標號:]操作碼助記符[目的操作數(shù)][,源操作數(shù)][;注釋](1) 操作碼助記符表明指令的功能;(2) 操作數(shù)用于給指令的操作提供數(shù)據(jù)、數(shù)據(jù)的地址或指令的地址;(2) 操作數(shù)用于給指令的操作提供數(shù)據(jù)、數(shù)據(jù)的地址或指令的地址;(4) 注釋是對該指令的解釋,前面需帶分號。7.1.2指令中用到的標識符(1) Ri和Rn:表示當前工作寄存器區(qū)中的工作寄存器,i取0或1,表示R0或R1。n取0~7,表示R0~R7。(2) #data:表示包含在指令中的8位立即數(shù)。(3) #data16:表示包含在指令中的16位立即數(shù)。(4) rel:以補碼形式表示的8位相對偏移量,范圍為-128~127,主要用在相對尋址的指令中。(5) addr16和addr11:分別表示16位直接地址和11位直接地址。(6) direct:表示直接尋址的地址。(7) bit:表示可按位尋址的直接位地址。(8) (X):表示X單元中的內(nèi)容。(9) /和→符號:“/”表示對該位操作數(shù)取反,但不影響該位的原值。7.251單片機指令的尋址方式
51單片機的尋址方式按操作數(shù)的類型:數(shù)的尋址和指令尋址。數(shù)的尋址:常數(shù)尋址(立即尋址)、寄存器數(shù)尋址(寄存器尋址)、存儲器數(shù)尋址(直接尋址方式、寄存器間接尋址方式、變址尋址方式)和位數(shù)據(jù)尋址(位尋址)。指令的尋址根據(jù)目的地址的提供方式:絕對尋址和相對尋址。7.2.1常數(shù)尋址(立即尋址)
操作數(shù)是常數(shù),使用時直接出現(xiàn)在指令;以“#”符號作前綴。通常用于給寄存器或存儲器單元賦初值。例如:MOVA,#20H功能:把立即數(shù)20H送給累加器A,其中源操作數(shù)20H就是立即數(shù)。7.2.2寄存器數(shù)尋址(寄存器尋址)
操作數(shù)在寄存器中;指令中直接提供寄存器的名稱;寄存器只能是R0~R7八個通用寄存器和部分特殊功能寄存器(如累加器A、寄存器B、數(shù)據(jù)指針寄存器DPTR等)。例如:MOVA,R0功能:把R0寄存器中的數(shù)送給累加器A。7.2.3存儲器數(shù)尋址--1.直接尋址數(shù)據(jù)存放在存儲器單元中
指令中直接提供存儲器單元的地址。訪問對象:片內(nèi)數(shù)據(jù)存儲器和特殊功能寄存器。例如:MOVA,20H功能:把片內(nèi)數(shù)據(jù)存儲器20H單元的內(nèi)容送給累加器A。注意:特殊功能寄存器名稱是單元的符號地址。MOVA,P0《====》MOVA,80H7.2.3存儲器數(shù)尋址--2.寄存器間接尋址
數(shù)據(jù)存放在存儲器單元中;存儲器單元的地址存放在寄存器中;指令中提供存放地址的寄存器,形式:“@寄存器名”。
訪問對象:片內(nèi)數(shù)據(jù)存儲器和片外數(shù)據(jù)存儲器中的數(shù)據(jù)。片內(nèi)數(shù)據(jù)存儲器用R0和R1間接訪問;片外數(shù)據(jù)存儲器用R0、R1和DPTR間接訪問。例如:MOVA,@R1功能:將以工作寄存器R1中的內(nèi)容為地址的片內(nèi)RAM單元的數(shù)據(jù)傳送到累加器A中去。
若R1中的內(nèi)容為80H,片內(nèi)RAM80H地址單元的內(nèi)容為20H,則執(zhí)行該指令后,累加器A的內(nèi)容為20H。7.2.3存儲器數(shù)尋址--3.變址尋址
數(shù)據(jù)存放在存儲器單元中;
操作數(shù)的地址由基址寄存器中存放的地址加上變址寄存器中存放的地址得到。
訪問對象:程序存儲器。
指令中提供存放地址的基址寄存器和變址寄存器,形式:“@變址寄存器+基址寄存器名”。例如:MOVCA,@A+DPTR功能:將數(shù)據(jù)指針寄存器DPTR的內(nèi)容和累加器A中的內(nèi)容相加作為程序存儲器的地址,從對應(yīng)的單元中取出內(nèi)容送到累加器A中。執(zhí)行前數(shù)據(jù)指針寄存器DPTR的值為2000H,累加器A的值為05H,程序存儲器2005H單元的內(nèi)容為30H,則指令執(zhí)行后,累加器A中的內(nèi)容為30H。7.2.4位數(shù)據(jù)尋址(位尋址)位地址的提供方式有以下幾種。(1) 直接位地址(00H~0FFH)。例如,20H。(2) 字節(jié)地址帶位號。例如,20H.3表示20H單元的3位。(3) 特殊功能寄存器名帶位號。例如,P0.1表示P0口的1位。(4) 位符號地址。例如,TR0是定時/計數(shù)器T0的啟動位。7.2.5指令尋址----1.絕對尋址1.絕對尋址
在指令的操作數(shù)中直接提供目的位置的地址或地址的一部分。2.相對尋址以當前程序計數(shù)器PC值加上指令中給出的偏移量rel得到目的位置的地址。注意以下兩點:(1)當前PC值是指轉(zhuǎn)移指令執(zhí)行時的PC值,它等于轉(zhuǎn)移指令的地址加上轉(zhuǎn)移指令的字節(jié)數(shù)。(2)偏移量rel是8位有符號數(shù),以補碼表示,它的取值范圍為-128~+127。當為負值時向前轉(zhuǎn)移,當為正數(shù)時向后轉(zhuǎn)移。目的地址=當前PC+rel=轉(zhuǎn)移指令的地址+轉(zhuǎn)移指令的字節(jié)數(shù)+rel7.351單片機的指令系統(tǒng)
51系列單片機指令系統(tǒng)共有111條指令,42種指令助記符,其中有49條單字節(jié)指令,45條雙字節(jié)指令和17條三字節(jié)指令;有64條為單機器周期指令,45條為雙機器周期指令,只有乘、除法兩條指令為四機器周期指令。
按功能分成五大類:數(shù)據(jù)傳送類指令、算術(shù)運算類指令、邏輯操作類指令、控制轉(zhuǎn)移類指令和位操作類指令。7.3.1數(shù)據(jù)傳送類指令
數(shù)據(jù)傳送指令有29條,用到的助記符有:MOV、MOVX、MOVC、XCH、XCHD、PUSH、POP和SWAP。分三組:普通數(shù)據(jù)傳送指令、數(shù)據(jù)交換指令、堆棧操作指令。1.普通數(shù)據(jù)傳送指令普通傳送指令以助記符MOV為基礎(chǔ),分成片內(nèi)數(shù)據(jù)存儲器傳送指令MOV、片外數(shù)據(jù)存儲器傳送指令MOVX和程序存儲器傳送指令MOVC。1) 片內(nèi)數(shù)據(jù)存儲器傳送指令MOV指令格式:MOV目的操作數(shù),源操作數(shù)
注意:
不允許在一條指令中同時出現(xiàn)工作寄存器,無論它是寄存器尋址還是寄存器間接尋址。2) 片外數(shù)據(jù)存儲器傳送指令MOVXMOVX指令共有四條: MOVXA,@DPTR ;A←(DPTR) MOVX@DPTR,A ;(DPTR)←A MOVXA,@Ri ;A←(Ri) MOVX@Ri,A ;(Ri)←A3) 程序存儲器傳送指令MOVCMOVC指令只有兩條: MOVCA,@A+DPTR ;A←(A+DPTR) MOVCA,@A+PC ;A←(A+PC)【例7-1】寫出完成下列功能的程序段。(1)將R0的內(nèi)容送R6中。程序為:
MOVA,R0
MOVR6,A(2)將片內(nèi)RAM30H單元的內(nèi)容送片外60H單元中。程序為: MOVA,30H
MOVR0,#60H
MOVX@R0,A(3)將片外RAM1000H單元的內(nèi)容送片內(nèi)20H單元中。程序為: MOVDPTR,#1000H
MOVXA,@DPTR
MOV20H,A(4)將ROM2000H單元的內(nèi)容送片內(nèi)RAM的30H單元中。程序為: MOVA,#0
MOVDPTR,#2000H
MOVCA,@A+DPTR
MOV30H,A2.數(shù)據(jù)交換指令有5條: XCHA,Rn ;A<=>Rn
XCHA,direct ;A<=>(direct)
XCHA,@Ri ;A<=>(Ri)
XCHDA,@Ri ;A0~3<=>(Ri)0~3
SWAPA ;A0~3<=>A4~73.堆棧操作指令有兩條:
PUSHdirect ;SP←SP+1,(SP)←(direct)
POPdirect ;(direct)←(SP),SP←SP-17.3.2算術(shù)運算類指令指令有24條,包含加法指令、減法指令、乘法指令、除法指令和BCD調(diào)整指令。指令助記符有:ADD、ADDC、INC、SUBB、DEC、MULL、DIV和DA。1.加法指令加法指令有一般的加法指令A(yù)DD、帶進位的加法指令A(yù)DDC和加1指令I(lǐng)NC。1) 一般的加法指令A(yù)DD一般的加法指令有四條:ADDA,Rn ;A←A+RnADDA,direct ;A←A+(direct)ADDA,@Ri ;A←A+(Ri)ADDA,#data ;A←A+#data加法運算過程中會影響CY、AC、OV和P標志位。對于進位標志CY,當相加時最高位向前還有進位則置1,否則清0。對于溢出標志OV,當相加的兩個操作數(shù)最高位相同,而結(jié)果的最高位又與它們不同,則溢出標志OV置1,否則清0。對于輔助進位標志AC,當相加時低四位向高四位有進位則置1,否則清0。對于奇偶標志P,當運算結(jié)果累加器A中內(nèi)容“1”的個數(shù)為奇數(shù)置1,否則清0。2)帶進位加法指令A(yù)DDC有四條:ADDCA,Rn ;A←A+Rn+CADDCA,direct ;A←A+(direct)+CADDCA,@Ri ;A←A+(Ri)+CADDCA,#data ;A←A+#data+C3)加1指令I(lǐng)NC加1指令有5條:INCA ;A←A+1INCRn ;Rn←Rn+1INCdirect ;(direct)←(direct)+1INC@Ri ;(Ri)←(Ri)+1INCDPTR ;DPTR←DPTR+1常用ADD和ADDC配合使用來實現(xiàn)多字節(jié)加法運算?!纠?-3】試把兩個分別存放在R1R2和R3R4中的兩字節(jié)數(shù)相加,結(jié)果存于R5R6中。處理時,低字節(jié)R2和R4用ADD指令相加,結(jié)果存放于R6中,高字節(jié)R1和R3用ADDC指令相加,結(jié)果存放于R5中,程序如下:
MOVA,R2
ADDA,R4
MOVR6,A
MOVA,R1
ADDCA,R3
MOVR5,A2.減法指令1) 帶借位減法指令SUBB帶借位減法指令有四條:SUBBA,Rn ;A←A-Rn-CSUBBA,direct ;A←A-(direct)-CSUBBA,@Ri ;A←A-(Ri)-CSUBBA,#data ;A←A-#data-C減法指令也影響CY、AC、OV和P標志。借位標志CY:累加器A中小于大于第二個操作數(shù)的內(nèi)容CY置1,否則清0。溢出標志OV:當正數(shù)減負數(shù)結(jié)果為負數(shù)或負數(shù)減正數(shù)結(jié)果為正數(shù),結(jié)果超出范圍,溢出OV置1;否則清0。輔助借位標志AC:如果相減時低四位向高四位有借位則置1,否則清0。奇偶標志P:結(jié)果累加器A中內(nèi)容1的個數(shù)為奇數(shù)置1,否則清0。沒有一般的減法指令,只能通過帶借位的減法來實現(xiàn),只須做帶借位的減法前借位標志CY先清0。2)減1指令DEC減1指令有四條:DECA ;A←A-1DECRn ;Rn←Rn-1DECdirect
;direct←(direct)-1DEC@Ri ;(Ri)←(Ri)-1除了DECA要影響P標志位外,對其他標志位也都沒有影響。3)乘法指令MUL在51單片機中,乘法指令只有一條:MULAB
;(BA)←A×B影響CY和OV標志,CY復(fù)位。當積大于255時(即B中不為0),OV為1;否則,OV為0。4) 除法指令DIV在51單片機中,除法指令也只有一條:
DIVAB;A÷B,A←商,B←余數(shù)影響CY和OV標志,一般情況下CY和OV都清0,只有當B寄存器中的除數(shù)為0時,CY和OV才被置1。5) 十進制調(diào)整指令在51單片機中,十進制調(diào)整指令只有一條:
DAA用在ADD或ADDC指令的后面,用來對兩個二位壓縮的BCD碼數(shù)通過用ADD或ADDC指令相加后存于累加器A中的結(jié)果進行調(diào)整,使之得到正確的十進制結(jié)果。調(diào)整過程為:(1)若累加器A的低四位為十六進制的A~F或輔助進位標志AC為1,則累加器A中的內(nèi)容做加06H調(diào)整。(2)若累加器A的高四位為十六進制的A~F或進位標志CY為1,則累加器A中的內(nèi)容做加60H調(diào)整。【例7-4】在R3中有十進制數(shù)67,在R2中有十進制數(shù)85,用十進制運算,運算的結(jié)果放于R5中。程序為:
MOVA,R3
ADDA,R2
DAA
MOVR5,A67的BCD:01100111B(67H),85的BCD:10000101B(85H)
加法得到的結(jié)果為11101100B(ECH),調(diào)整后結(jié)果為000101010010(152)。7.3.3邏輯操作類指令
邏輯操作指令有24條,包括邏輯與指令、或指令、異或指令、清零和求反以及循環(huán)移位指令。指令助詞符號有ANL、ORL、XRL、CLR、CPL、RL、RR、RLC和RRC。1.邏輯與指令A(yù)NL格式如下:
ANLA,Rn ;A←ARn
ANLA,direct ;A←A(direct)
ANLA,@Ri ;A←A(Ri)
ANLA,#data ;A←Adata
ANLdirect,A ;(direct)←(direct)A
ANLdirect,#data ;(direct)←(direct)data2.邏輯或指令ORL格式如下:ORLA,Rn ;A←ARnORLA,direct ;A←A(direct)ORLA,@Ri ;A←A(Ri)ORLA,#data ;A←AdataORLdirect,A ;(direct)←(direct)AORLdirect,#data ;(direct)←(direct)data3.邏輯異或指令XRL格式如下:XRLA,Rn ;A←ARnXRLA,direct ;A←A(direct)XRLA,@Ri ;A←A(Ri)XRLA,#data ;A←AdataXRLdirect,A ;(direct)←(direct)AXRLdirect,#data ;(direct)←(direct)data邏輯與用于實現(xiàn)對指定位清0;邏輯或用于實現(xiàn)對指定位置1;邏輯異或用于實現(xiàn)指定位取反;【例7-5】寫出完成下列功能的指令段。(1)對累加器A中的1、3、5位清0,其余位不變。
ANLA,#11010101B(2)對累加器A中的2、4、6位置1,其余位不變。
ORLA,#01010100B(3)對累加器A中的0、1位取反,其余位不變。
XRLA,#00000011B4.清零和求反指令(1) 清零指令:CLRA ;A←0(2) 求反指令:CPLA ;A←5.循環(huán)移位指令1)累加器A循環(huán)左移RL:RL A2)累加器A循環(huán)右移RR:RRA3)帶進位的循環(huán)左移RLC:RLCA4)帶進位的循環(huán)右移RRC:RRC A7.3.4控制轉(zhuǎn)移類指令共有17條,包括無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、子程序調(diào)用及返回指令。指令助詞符有LJMP、AJMP、SJMP、JMP、JZ、JNZ、CJNE、DJNZ、LCALL、ACALL、RET和RETI。1.無條件轉(zhuǎn)移指令1) 長轉(zhuǎn)移指令LJMP指令格式:LJMPaddr16 ;PC←addr16該指令不影響標志位,使用方便。缺點是:執(zhí)行時間長,字節(jié)數(shù)多。2) 絕對轉(zhuǎn)移指令A(yù)JMP指令格式:
AJMPaddr11 ;PC10~0←addr11由于11位地址addr11的范圍是00000000000~11111111111,即2KB范圍,而目的地址的高5位不變,所以程序轉(zhuǎn)移的位置只能是和當前PC位置(AJMP指令地址加2)在同一2KB范圍內(nèi)。3) 相對轉(zhuǎn)移指令SJMP指令格式:
SJMPrel ;PC←PC+2+rel轉(zhuǎn)移的目的地址=SJMP指令所在地址+2+rel對于無條件轉(zhuǎn)移指令,要注意以下兩點:(1)在單片機匯編程序設(shè)計中,通常用到一條SJMP指令: SJMP$該指令的功能是在自己本身上循環(huán),進入等待狀態(tài)。匯編源程序中通常用它為最后一條指令,使程序不再向后執(zhí)行,避免執(zhí)行后面的內(nèi)容而出錯。(2)用匯編語言編程時,無論長轉(zhuǎn)移、絕對轉(zhuǎn)移還是相對轉(zhuǎn)移,指令的操作數(shù)一般不直接帶地址,而帶目的位置的標號,匯編時自動轉(zhuǎn)換成相應(yīng)的地址。這時一定要注意所用的指令和轉(zhuǎn)移位置。4) 間接轉(zhuǎn)移指令JMP指令格式:
JMP@A+DPTR ;PC←A+DPTR它是51單片機中唯一一條間接轉(zhuǎn)移指令,轉(zhuǎn)移的目的地址是由數(shù)據(jù)指針寄存器DPTR的內(nèi)容與累加器A中的內(nèi)容相加得到。在51單片機匯編程序中,這條指令通常和一個無條件轉(zhuǎn)移指令表一起實現(xiàn)多分支轉(zhuǎn)移程序,因而又稱為多分支轉(zhuǎn)移指令2.條件轉(zhuǎn)移指令
條件轉(zhuǎn)移指令有三種:累加器A判零條件轉(zhuǎn)移指令、比較轉(zhuǎn)移指令、減1不為零轉(zhuǎn)移指令。1) 累加器A判零條件轉(zhuǎn)移指令判0指令JZ:JZrel ;若A=0,則PC←PC+2+rel,否則,PC←PC+2判非0指令JNZ:JNZrel ;若A0,則PC←PC+2+rel,否則,PC←PC+22) 比較轉(zhuǎn)移指令CJNE比較轉(zhuǎn)移指令用于對兩個數(shù)作比較,并根據(jù)比較情況進行轉(zhuǎn)移,比較轉(zhuǎn)移指令有四條:CJNEA,#data,rel ;若A=data,則PC←PC+3,不轉(zhuǎn)移,繼續(xù)執(zhí)行
若A>data,則C=0,PC←PC+3+rel,轉(zhuǎn)移
若A<data,則C=1,PC←PC+3+rel,轉(zhuǎn)移CJNERn,#data,rel ;若(Rn)=data,則PC←PC+3,不轉(zhuǎn)移,繼續(xù)執(zhí)行
若(Rn)>data,則C=0,PC←PC+3+rel,轉(zhuǎn)移
若(Rn)<data,則C=1,PC←PC+3+rel,轉(zhuǎn)移CJNE@Ri,#data,rel ;若(Ri)=data,則PC←PC+3,不轉(zhuǎn)移,繼續(xù)執(zhí)行
若(Ri)>data,則C=0,PC←PC+3+rel,轉(zhuǎn)移
若(Ri)<data,則C=1,PC←PC+3+rel,轉(zhuǎn)移CJNEA,direct,rel ;若A=(direct),則PC←PC+3,不轉(zhuǎn)移,繼續(xù)執(zhí)行
若A>(direct),則C=0,PC←PC+3+rel,轉(zhuǎn)移
若A<(direct),則C=1,PC←PC+3+rel,轉(zhuǎn)移3) 減1不為零轉(zhuǎn)移指令DJNZ這種指令是先減1后判斷,若不為零則轉(zhuǎn)移。指令有兩條:DJNZRn,rel ;先將Rn中的內(nèi)容減1,再判斷Rn中的內(nèi)容是否等于零,
若不為零,
則轉(zhuǎn)移DJNZdirect,rel ;先將(direct)中的內(nèi)容減1,再判斷(direct)中的內(nèi)容是否
等于零,若不為零,則轉(zhuǎn)移在51單片機中,通常用條件轉(zhuǎn)移指令實現(xiàn)分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的程序。3.子程序調(diào)用及返回指令子程序調(diào)用及返回指令有四條:兩條子程序調(diào)用指令,兩條返回指令。1) 長調(diào)用指令LCALL指令格式:LCALLaddr16 ;PC←PC+3 ;SP←SP+1 ;(SP)←PC7~0 ;SP←SP+1 ;(SP)←PC15~8 ;PC←addr16,轉(zhuǎn)移到子程序去執(zhí)行2) 絕對調(diào)用指令A(yù)CALL指令格式: ACALLaddr11 ;PC←PC+2 ;SP←SP+1 ;(SP)←PC7~0 ;SP←SP+1 ;(SP)←PC15~8 ;PC10~0←addr11,轉(zhuǎn)移到子程序去執(zhí)行3) 子程序返回指令RET指令格式: RET ;PC←PC+1 ;PC15~8←(SP) ;SP←SP-1 ;PC7~0←(SP) ;SP←SP–1;返回執(zhí)行調(diào)用指令的下一條指令4) 中斷返回指令RETI指令格式: RETI ;PC←PC+1 ;PC15~8←(SP) ;SP←SP-1 ;PC7~0←(SP) ;SP←SP–1;返回執(zhí)行中斷斷點位置的下一條指令RETI在執(zhí)行后,轉(zhuǎn)移之前將先清除中斷的優(yōu)先級觸發(fā)器。7.3.5位操作類指令1.位傳送指令位傳送指令有兩條,用于實現(xiàn)位運算器C與一般位之間的相互傳送。
MOVC,bit ;C←(bit)
MOVbit,C ;(bit)←C指令在使用時必須有位運算器C參與,不能直接實現(xiàn)兩位之間的傳送。2.位邏輯操作指令
位邏輯操作指令包括位清0、置1、取反、位與和位或,總共10位指令。1)位清0CLRC ;C←0CLRbit ;(bit)←02) 位置1SETBC ;C←1SETBbit ;(bit)←13) 位取反CPLC ;C←CPLbit ;(bit)←(bit)4) 位與ANLC,bit ;C←C∧(bit)ANLC,/bit ;C←C∧(/bit)5) 位或ORLC,bit ;C←C∨(bit)ORLC,/bit ;C←C∨(/bit)利用位邏輯運算指令可以實現(xiàn)各種各樣的邏輯功能。【例7-6】利用位邏輯運算指令編程實現(xiàn)圖7-10所示硬件邏輯電路的功能。程序:MOVC,P1.0
ANLC,P1.1
CPLC
ORLC,/P1.2
MOVF0,C
MOVC,P1.3
ORLC,P1.4
ANLC,F0
CPLC
MOVP1.5,C
SJMP$3.位轉(zhuǎn)移指令位轉(zhuǎn)移指令有以C為條件的位轉(zhuǎn)移指令和以bit為條件的位轉(zhuǎn)移指令,共5條。1) 以C為條件的位轉(zhuǎn)移指令JCrel ;若C=1,則轉(zhuǎn)移,PC←PC+2+rel;否則程序繼續(xù)執(zhí)行JNCrel ;若C=0,則轉(zhuǎn)移,PC←PC+2+rel;否則程序繼續(xù)執(zhí)行2) 以bit為條件的位轉(zhuǎn)移指令JBbit,rel ;若(bit)=1,則轉(zhuǎn)移,PC←PC+3+rel;否則程序繼續(xù)執(zhí)行JNBbit,rel ;若(bit)=0,則轉(zhuǎn)移,PC←PC+3+rel;否則程序繼續(xù)執(zhí)行JBCbit,rel ;若(bit)=1,則轉(zhuǎn)移,PC←PC+3+rel,且(bit)←0
;否則程序繼續(xù)執(zhí)行4.空操作指令 NOP ;PC←PC+1不做任何操作(即空操作),僅將程序計數(shù)器PC的內(nèi)容加1,使CPU指向下一條指令繼續(xù)執(zhí)行程序。它要占用一個機器周期,常用來產(chǎn)生時間延遲,構(gòu)造延時程序。7.451單片機匯編程序常用偽指令7.4.151單片機匯編程序設(shè)計過程(1)明確課題的具體內(nèi)容,對程序功能、運算精度、執(zhí)行速度等方面的要求及硬件條件。(2)把復(fù)雜問題分解為若干個模塊,確定各模塊的處理方法,畫出程序流程圖(簡單問題可以不畫)。對復(fù)雜問題可分別畫出分模塊流程圖和總的流程圖。(3)存儲器資源分配,如各程序段的存放地址、數(shù)據(jù)區(qū)地址、工作單元分配等。(4)編制程序,根據(jù)程序流程圖精心選擇合適的指令和尋址方式來編制源程序。(5)對程序進行匯編、調(diào)試和修改。將編制好的源程序進行匯編,檢查修改程序中的錯誤,執(zhí)行目標程序,對程序運行結(jié)果進行分析,直至正確為止。7.4.251單片機匯編程序常用偽指令1.ORG偽指令格式:ORG地址(十六進制表示)用于指明程序或數(shù)據(jù)從程序存儲空間的什么位置開始存放。ORG偽指令后的地址是程序或數(shù)據(jù)的起始地址?!纠?-7】ORG0100HMOVR0,#10HMOVR1,#20H2.DB偽指令格式:[標號:]DB項或項表定義字節(jié)數(shù)據(jù),可以定義一個字節(jié),也可定義多個字節(jié)。定義多個字節(jié)時,兩兩之間用逗號間隔。定義的多個字節(jié)在存儲器中是連續(xù)存放的??梢允且话愠?shù),也可以為字符,還可以是字符串。字符和字符串以引號括起來,【例7-8】ORG3000H
TAB1:DB12H,34H
DB'5','A','abc'3.DW偽指令格式:[標號:]DW項或項表定義字數(shù)據(jù)。項或項表所定義的一個字在存儲器中占兩個字節(jié)。高字節(jié)在前,低字節(jié)在后存放,即高字節(jié)存放在低地址單元,低字節(jié)存放在高地址單元?!纠?-9】ORG3000HTAB2:DW1234H,5678H4.DS偽指令格式:[標號:]DS數(shù)值表達式用于在存儲器中保留一定數(shù)量的字節(jié)單元。【例7-10】
ORG3000HTAB1:DB12H,34H
DS4H DB'5'5.EQU偽指令格式:符號EQU項功能是將指令中項的值賦予EQU前面的符號。項可以是常數(shù)、地址標號或表達式?!纠?-11】 TAB1EQU1000HTAB2EQU2000H6.DATA偽指令格式:符號DATA直接字節(jié)地址用于給片內(nèi)RAM字節(jié)單元地址賦予DATA前面的符號,符號以字母開頭。同一單元地址可以賦予多個符號。【例7-12】RESULTDATA60H
MOVRESULT,A7.BIT偽指令格式:符號BIT位地址用于給位地址賦予符號,經(jīng)賦值后可用該符號代替bit后面的位地址。【例7-13】 PLGBITF0A1BITP1.08.END偽指令格式:END該指令放于程序的最后位置,用于指明匯編語言源程序的結(jié)束位置。7.551單片機匯編程序設(shè)計7.5.1數(shù)據(jù)傳送程序【例7-14】把片內(nèi)RAM的40H~4FH的16個字節(jié)的內(nèi)容傳送到片外RAM的2000H單元位置處。分析:數(shù)據(jù)傳送通過數(shù)據(jù)傳送指令實現(xiàn),片內(nèi)數(shù)據(jù)存儲器與片外數(shù)據(jù)存儲器數(shù)據(jù)傳送要通過累加器A過渡。每個字節(jié)的傳送方法相同,可用循環(huán)程序?qū)崿F(xiàn),片內(nèi)RAM和片外RAM分別用寄存器作指針指向,每傳送一次指針向后移一個單元,循環(huán)16次即可實現(xiàn)。具體處理過程如下:在循環(huán)體外,用R0指向片內(nèi)RAM的40H單元,用DPTR指向片外RAM的2000H單元,用R2作循環(huán)變量,初值為16。在循環(huán)體中把R0指向的片內(nèi)RAM單元內(nèi)容傳送到DPTR指向的片外RAM單元,改變R0、DPTR指針指向下一個單元。用DJNZ指令控制循環(huán)16次即可。
ORG0000H
LJMPMAIN
ORG0100HMAIN:MOVR0,#40H
MOVDPTR,#2000H
MOVR2,#16LOOP:MOVA,@R0 ;@R0@DPTR
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR2,LOOP
SJMP$
END7.5.2運算程序1.多字節(jié)無符號數(shù)加法【例7-15】設(shè)從片內(nèi)RAM30H單元和40H單元有兩個16字節(jié)數(shù),把它們相加,將結(jié)果放于30H單元開始的位置處(設(shè)結(jié)果不溢出)。處理過程如下:在循環(huán)體外,用R0做指針指向片內(nèi)RAM30H單元,用R1做指針指向片內(nèi)RAM40H單元,用R2為循環(huán)變量,初值為16;在循環(huán)體中用ADDC指令把R0指針指向的單元與R1指針指向的單元相加,加得的結(jié)果放回R0指向的單元,改變R0、R1指針指向下一個單元;用DJNZ指令控制循環(huán)16次,在第一次循環(huán)前應(yīng)先將CY清零。
ORG0000H
LJMPMAIN
ORG0100HMAIN:MOVR0,#30H
MOVR1,#40H
MOVR2,#16
CLRCLOOP:MOVA,@R0
ADDCA,@R1
MOV@R0,A
INCR0
INCR1
DJNZR2,LOOP
SJMP$
END2.兩字節(jié)無符號數(shù)乘法【例7-16】設(shè)被乘數(shù)的高字節(jié)放在R7中,低字節(jié)放在R6中;乘數(shù)的高字節(jié)放在R5中,低字節(jié)放在R4中。乘得的積有4個字節(jié),按由低字節(jié)到高字節(jié)的次序存于片內(nèi)RAM中以ADDR為首地址的區(qū)域中。
用R3寄存器來累加C2部分
用R2寄存器來累加C3部分用R1寄存器來累加C4部分另外用R0作指針來依次存放C1、C2、C3、C4到存儲器。7.5.3代碼轉(zhuǎn)換程序代碼轉(zhuǎn)換,如果要轉(zhuǎn)換的內(nèi)容與代碼之間有規(guī)律,則可利用它們的規(guī)律用運算方式實現(xiàn)轉(zhuǎn)換;如果沒有規(guī)律,可以通過用查表方式實現(xiàn)轉(zhuǎn)換。【例7-17】一位十六進制數(shù)轉(zhuǎn)換成ASC1I碼,設(shè)十六進制數(shù)放于R2中,要求轉(zhuǎn)換的結(jié)果放回R2中。分析:一位十六進制數(shù)有十六個符號0~9、A、B、C、D、E、F。其中,0~9的ASCII碼為30H~39H,A~F的ASCII碼為41H~46H。轉(zhuǎn)換時,只要判斷十六進制數(shù)是在0~9之間還是在A~F之間,如在0~9之間,加30H,如在A~F之間,加37H,就可得到ASCII碼。
ORG0200H
MOVA,R2
CLRC
SUBBA,#0AH;減去0AH,
MOVA,R2
JCADD30 ;如在0~9之間,直接加30H
ADDA,#07H;如在A~F之間,先加07H,再加30HADD30:ADDA,#30H
MOVR2,A
RET【例7-18】一位十六進制數(shù)轉(zhuǎn)換成8段式數(shù)碼管顯示碼,設(shè)十六進制數(shù)放于R2中,要求轉(zhuǎn)換的結(jié)果放回R2中。分析:一位十六進制數(shù)0~9、A、B、C、D、E、F的8段式數(shù)碼管的共陰極顯示碼為3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、67H、77H、7CH、39H、5EH、79H、71H。由于數(shù)與顯示碼沒有規(guī)律,所以不能通過運算得到,只能通過查表方式得到。首先用數(shù)據(jù)定義偽指令DB建一張由十六進制數(shù)0~9、A、B、C、D、E、F的8段式數(shù)碼管的共陰極顯示碼組成的表。查表時先找到表首,然后用這一位十六進制數(shù)作位移量就可以找到相應(yīng)的顯示碼。1)用MOVCA,@A+DPTR構(gòu)造的查表程序:
ORG0200HCONVERT:MOVDPTR,#TAB ;DPTR指向表首地址
MOVA,R2 ;轉(zhuǎn)換的數(shù)放于A
MOVCA,@A+DPTR ;查表指令轉(zhuǎn)換
MOVR2,A
RETTAB: DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB7FH,67H,77H,7CH,39H,5EH,79H,71H;顯示碼表2)用“MOVCA,@A+PC”構(gòu)造的查表程序:
ORG0200HCONVERT:MOVA,R2 ;轉(zhuǎn)換的數(shù)放于A ADDA,#02H ;加查表指令相對于表首的位移量 MOVCA,@A+PC;查表指令轉(zhuǎn)換 MOVR2,A RETTAB: DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB7FH,67H,77H,7CH,39H,5EH,79H,71H;顯示碼表7.5.4分支程序1.一般分支程序一般分支程序通常用條件轉(zhuǎn)移指令實現(xiàn)。【例7-19】從片外RAM的1000H單元開始放了200個英文符號,要求統(tǒng)計它們當中字符“A”的個數(shù),放于R7中。處理過程:用R2做循環(huán)變量,最開始置初值為200,用DJNZ指令對R2減1轉(zhuǎn)移進行循環(huán)控制。在循環(huán)體外,給R7清0,給片外RAM指針DPTR置初值1000H;在循環(huán)體中用DPTR指針依次取出片內(nèi)RAM中的數(shù)據(jù),用CJNE指令判斷,如為“A”(41H),則R7中的內(nèi)容加1。循環(huán)完后R7中的數(shù)字就是字符“A”的個數(shù)。
ORG0000H LJMPMAIN ORG0100HMAIN: MOVR2,#200 MOVDPTR,#1000H MOVR7,#0LOOP: MOVXA,@DPTR CJNEA,#41H,NEXT INCR7NEXT: INCDPTR DJNZR2,LOOP SJMP$ END2.多分支程序多分支轉(zhuǎn)移程序通過JMP@A+DPTR指令實現(xiàn)。過程如下:先要構(gòu)造一個無條件轉(zhuǎn)移指令
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025河南鄭州市新密市國開投資集團有限公司招聘管理人員和專業(yè)技術(shù)人員9人模擬試卷附答案詳解(完整版)
- 2025貴州丹寨縣人民檢察院招聘聘用制檢察輔助人員模擬試卷附答案詳解(突破訓練)
- 2025廣東深圳市優(yōu)才人力資源有限公司招聘編外聘用人員1人(派遣至深圳市龍崗區(qū)機關(guān)事務(wù)管理局)考前自測高頻考點模擬試題及答案詳解參考
- 2025年甘肅省煙草專賣局(公司)招聘相關(guān)事宜模擬試卷及參考答案詳解一套
- 2025福建福州市水路運輸事業(yè)發(fā)展中心招聘編外人員1人模擬試卷完整答案詳解
- 2025廣東深圳大學人文學院李立教授團隊博士后招聘1人考前自測高頻考點模擬試題及參考答案詳解1套
- 2025南華大學附屬南華醫(yī)院招聘62人(湖南)模擬試卷完整答案詳解
- 2025年濟寧嘉祥縣事業(yè)單位公開招聘工作人員(教育類)(68人)考前自測高頻考點模擬試題及答案詳解(全優(yōu))
- 2025年中國環(huán)保涂料添加劑行業(yè)市場分析及投資價值評估前景預(yù)測報告
- 2025湖南邵陽工業(yè)職業(yè)技術(shù)學院公開選調(diào)工作人員3人模擬試卷及1套完整答案詳解
- 工業(yè)微生物育種學課件
- 火災(zāi)原因認定規(guī)則 XF1301-2016
- 中藥人參課件
- 電教設(shè)備采購?fù)稑朔桨福夹g(shù)方案)
- 場地無償使用的協(xié)議書
- 《術(shù)后鎮(zhèn)痛》課件
- 中國銀行汕頭分行與廣發(fā)銀行韶關(guān)分行、第三人珠海經(jīng)濟特區(qū)安然實業(yè)集團公司代位權(quán)糾紛案
- 新華字典第12版電子版
- 健康教育學-健康傳播
- 常見“肩痛”診斷、鑒別診斷與治療
- 冷水灘事業(yè)編招聘2022年考試《公共基礎(chǔ)知識》真題及答案解析【完整word版】
評論
0/150
提交評論