版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章機械工業(yè)出版社同名教材配套電子教案第3版第3章80C51系列單片機指令系統(tǒng)3.1指令系統(tǒng)基本概念標(biāo)號:操作碼操作數(shù);注釋
3.1.1
指令基本格式⑴標(biāo)號:指令的符號地址。①用于一段功能程序的識別標(biāo)記或控制 轉(zhuǎn)移地址。②指令前的標(biāo)號代表該指令的地址,是用 符號表示的地址。一般用英文字母和數(shù)字組成。④標(biāo)號必須用冒號“:”與操作碼分隔。⑵操作碼:表示指令的操作功能。①操作碼用助記符表示,它代表了指令 的操作功能。②操作碼是指令的必需部分,是指令的 核心,不可缺少。⑶操作數(shù):參加操作的數(shù)據(jù)或數(shù)據(jù)地址。⑤操作數(shù)與操作碼之間用空格分隔,操作數(shù)與 操作數(shù)之間用逗號“,”分隔。①操作數(shù)可以是數(shù)據(jù),也可以是數(shù)據(jù)的地址、 數(shù)據(jù)地址的地址或操作數(shù)的其他信息。②操作數(shù)可分為目的操作數(shù)和源操作數(shù)。③操作數(shù)可用二進(jìn)制數(shù)、十進(jìn)制數(shù)或十六進(jìn)制 數(shù)表示。④操作數(shù)的個數(shù)可以是0~3個。⑷注釋:指令功能說明。①注釋屬于非必需項,是為便于閱讀, 對指令功能作的說明和注解。②注釋必須以“;”開始。3.1.2
指令系統(tǒng)中的常用符號⑹bit:位地址。代表片內(nèi)RAM中的可尋址位00H~7FH及SFR中的可尋址位。⑴#:立即數(shù)符。#data:8位立即數(shù);#data16:16位立即數(shù)。⑵direct:8位直接地址代表內(nèi)RAM00H~7FH或SFR的80H~FFH。⑶@:間接尋址符。如@Ri,@DPTR,@A+PC,@A+DPTR。⑷addr11:11位目的地址。
addr16:16位目的地址。⑸rel:帶符號的8位偏移地址。用于轉(zhuǎn)移指令,其范圍是相對于下一條指令第1字節(jié)地址的-128~+127個字節(jié)。3.1.3尋址方式【例】尋址就是尋找操作數(shù)的地址。⒈立即尋址立即尋址是直接給出操作數(shù),操作數(shù)前有立即數(shù)符“#”。MOVA,#30H;將立即數(shù)30H傳送至A中MOVDPTR,#5678H;將立即數(shù)5678H傳送至DPTR⒉直接尋址MOVA,3AH
;將內(nèi)RAM3AH單元中的數(shù)據(jù)傳送至A中MOVA,P0
;將特殊功能寄存器P0口中的數(shù)據(jù)傳送至A中說明:3AH和P0是以direct形式出現(xiàn)的直接地址直接尋址是給出操作數(shù)的直接地址。直接尋址范圍為內(nèi)RAM128B和特殊功能寄存器?!纠竣臣拇嫫鲗ぶ稭OVA,R0;將R0中的數(shù)據(jù)傳送至A中
寄存器尋址的操作數(shù)在規(guī)定的寄存器中。
規(guī)定的寄存器有:①工作寄存器R0~R7
②累加器A
③雙字節(jié)AB
④數(shù)據(jù)指針DPTR
⑤位累加器Cy
這些被尋址寄存器中的內(nèi)容就是操作數(shù)【例】⒋寄存器間接尋址MOVA,@R0
;將以R0中內(nèi)容為地址的存儲單元中的數(shù)據(jù)傳送至A中MOVXA,@DPTR;將外RAMDPTR所指存儲單元中的數(shù)據(jù)傳送至A中PUSHPSW;將PSW中數(shù)據(jù)傳送至堆棧指針SP所指的存儲單元中間接尋址是根據(jù)操作數(shù)地址的地址尋找操作數(shù)。間接尋址用間址符“@”作為前綴?!纠竣底冎穼ぶ稭OVCA,@A+DPTR
【例】在變址尋址中,操作數(shù)地址=基址+變址用于讀ROM數(shù)據(jù)操作。;將A的內(nèi)容與DPTR內(nèi)容相加,得到一個新地址,從該地址ROM中讀取數(shù)據(jù)送入A中。相對尋址一般用于相對轉(zhuǎn)移指令,
轉(zhuǎn)移目的地址=當(dāng)前PC值+相對偏移量rel。;將位地址07H(字節(jié)地址20H中最高位)中的數(shù)據(jù)傳送至進(jìn)位位Cy。⒍相對尋址⒎位尋址位尋址是對內(nèi)RAM和特殊功能寄存器中的可尋址位進(jìn)行操作的尋址方式?!纠縈OVC,07H3.2
指令系統(tǒng)①MOVA,Rn
;Rn→A,n=0~7
②MOVA,@Ri
;(Ri)→A,i=0、1③MOVA,direct;(direct)→A④MOVA,#data;data→A
一、數(shù)據(jù)傳送類指令⒈內(nèi)RAM數(shù)據(jù)傳送指令⑴以累加器A為目的字節(jié)的傳送指令(4條)①MOVRn,A
;A→Rn,n=0~7②MOVRn,direct;(direct)→Rn,n=0~7③MOVRn,#data;data→Rn,n=0~7⑵以工作寄存器Rn為目的字節(jié) 的傳送指令(3條)⑶以直接地址為目的字節(jié)的傳送指令(5條)①MOVdirect,A ;A→(direct)②MOVdirect,Rn
;Rn→(direct),n=0~7③MOVdirect,@Ri
;(Ri)→(direct),i=0、1④MOV
direct1,direct2;(direct2)→(direct1)⑤MOVdirect,#data ;data→(direct)⑷以寄存器間址為目的字節(jié)的傳送指令(3條)①MOV@Ri,A
;A→(Ri),i=0、1②MOV@Ri,direct;(direct)→(Ri),i=0、1③MOV@Ri,#data;data→(Ri),i=0、1⒉16位數(shù)據(jù)傳送指令(唯一)MOV
DPTR,#data16;data16→DPTR【例】MOVDPTR,#1234H;DPTR=1234H該指令也可以用兩條8位數(shù)據(jù)傳送指令實現(xiàn):MOVDPH,#12H;DPH=12HMOVDPL,#34H;DPL=34H,DPTR=1234H①MOVXA,@Ri
;(Ri)→A,i=0、1②MOVXA,@DPTR
;(DPTR)→A③MOVX@Ri,A
;A→(Ri),i=0、1④MOVX@DATR,A
;A→(DATR)⒊外RAM傳送指令(4條)⒋讀ROM指令(2條)內(nèi)RAM(包括特殊功能寄存器):用MOV指令傳送;外RAM:用MOVX指令傳送;ROM:用MOVC指令傳送。①MOVCA,@A+DPTR;(A+DPTR)→A②MOVCA,@A+PC;PC+1→PC,(A+PC)→A綜上所述,三個不同的存儲空間用三種不同的指令傳送:①PUSHdirect;SP+1→SP,(direct)→(SP)
②POP
direct;(SP)→(direct),SP-1→SP
⒌堆棧操作指令(2條)⑴PUSH為入棧指令例PUSH30H;(30H)=2BH,具體操作是:
先將堆棧指針SP的內(nèi)容(0FH)加1,指向堆棧頂?shù)囊粋€空單元,此時SP=10H;②然后將指令指定的直接尋址單元30H中的數(shù)據(jù)(2BH)送到該空單元中。⑵POP為出棧指令例POP
40H;(40H)=4CH,具體操作是:先將SP所指單元0FH(棧頂?shù)刂罚┲械臄?shù)據(jù)(4CH)彈出,送到指定的內(nèi)RAM單元40H,(40H)=4CH;②然后SP-1→SP,SP=0EH,SP仍指向棧頂?shù)刂?。⒍交換指令(5條)
①XCHA,Rn
;A←→Rn,n=0~7
②XCHA,@Ri
;A←→(Ri),i=0、1
③XCHA,direct;A←→(direct)SWAPA;A7~4←→A3~0⑴字節(jié)交換指令⑵半字節(jié)交換指令XCHDA,@Ri;A3~0←→(Ri)3~0
高4位不變。i=0、1⑶累加器高低四位互換①ADDA,Rn;A+Rn→A(n=0~7)
有進(jìn)位,Cy=1;無進(jìn)位,Cy=0②ADDA,@Ri;A+(Ri)→A(i=0、1)
有進(jìn)位,Cy=1;無進(jìn)位,Cy=0③ADDA,direct;A+(direct)→A
有進(jìn)位,Cy=1;無進(jìn)位,Cy=0④ADDA,#data
;A+data→A
有進(jìn)位,Cy=1;無進(jìn)位,Cy=0
二、算術(shù)運算類指令⒈加法指令⑴不帶Cy加法指令(4條)⑵帶Cy加法指令(4條)①ADDC
A,Rn;A+Rn+Cy→A(n=0~7)
有進(jìn)位,Cy=1;無進(jìn)位,Cy=0②
ADDC
A,@Ri;A+(Ri)+Cy→A(i=0、1)
有進(jìn)位,Cy=1;無進(jìn)位,Cy=0③
ADDCA,direct;A+(direct)+Cy→A
有進(jìn)位,Cy=1;無進(jìn)位,Cy=0④
ADDCA,#data;A+data+Cy→A
有進(jìn)位,Cy=1;無進(jìn)位,Cy=0
⒉減法指令(4條)①SUBBA,Rn;A-Rn-Cy→A,(n=0~7),
有借位,Cy=1;無借位,Cy=0
②SUBBA,@Ri
;A-(Ri)-Cy→A,(n=0~1),
有借位,Cy=1;無借位,Cy=0③SUBBA,direct;A-direct-Cy→A,
有借位,Cy=1;無借位,Cy=0④SUBBA,#data;A-data-Cy→A,
有借位,Cy=1;無借位,Cy=0
①INCA ;A+1→A②INCRn
;Rn+1→Rn,n=0~7③INC@Ri ;(Ri)+1→(Ri),i=0、1④INCdirect ;(direct)+1→(direct)⑤INCDPTR ;DPTR+1→DPTR⒊加1減1指令⑴加1指令(5條)⑵減1指令(4條)①DECA
;A-1→A②
DECRn
;Rn-1→Rn,n=0~7③
DEC@Ri ;(Ri)-1→(Ri),i=0、1④
DEC
direct
;(direct)-1→(direct)
加1減1指令涉及A時,會影響P,但不影響其他標(biāo)志位。
DIVAB
;(A÷B)商→A,余數(shù)→BCy=0,OV=0
⒋BCD碼調(diào)整指令DAA功能:對加法運算結(jié)果進(jìn)行BCD碼調(diào)整。⒌乘除法指令⑴乘法指令(1條)MULAB
;A×B→BA⑵除法指令(1條)三、邏輯運算及移位指令①ANL
A,Rn
;A∧Rn→A②ANL
A,@Ri;A∧(Ri)→A③ANLA,#data;A∧data→A④ANLA,direct
;A∧(direct)→A⑤ANLdirect,A;(direct)∧A→direct⑥ANLdirect,#data;(direct)∧data→direct⒈邏輯“與”運算指令(6條)⒉邏輯“或”運算指令(6條)①ORL
A,Rn
;A∨Rn→A②ORL
A,@Ri;A∨(Ri)→A③ORLA,#data;A∨data→A④ORLA,direct
;A∨(direct)→A⑤ORLdirect,A;(direct)∨A→direct⑥ORLdirect,#data;(direct)∨data→direct⒊邏輯“異或”運算指令(6條)①XRL
A,Rn
;A
Rn→A②XRL
A,@Ri;A(Ri)→A③XRLA,#data;A
data→A④XRLA,direct
;A(direct)→A⑤XRLdirect,A;(direct)
A→direct⑥XRLdirect,#data;(direct)
data→direct
①CLRA ;0→A ②CPLA ;A→A⒋清零和取反指令⒌循環(huán)移位指令(4條)①循環(huán)左移:RLA②帶Cy循環(huán)左移:RLCA
③循環(huán)右移:RRA
④帶Cy循環(huán)右移:RRCA
①MOVC,bit;(bit)→Cy
②MOVbit,C;Cy→bit四、位操作類指令⒈位傳送指令(2條)⑵位取反指令:①
CPLC ;C→C②CPLbit ;(bit)→bit⒉位修正指令(6條)⑴位清0指令:①CLRC ;0→C②CLRbit ;0→bit⑶位置1指令:①
SETBC ;1→C②SETBbit ;1→bit⑴位邏輯“與”運算指令:①ANLC,bit ;C∧(bit)→C②ANLC,/bit ;C∧(bit)→C⑵位邏輯“或”運算指令:①ORLC,bit ;C∨(bit)→C②ORLC,/bit
;C∨(bit)→C⒊位邏輯運算指令(4條)⑶相對轉(zhuǎn)移指令
SJMP
rel;PC+2→PC,PC+rel→PC五、控制轉(zhuǎn)移類指令⒈無條件轉(zhuǎn)移指令(3條)⑴長轉(zhuǎn)移指令
LJMP
addr16;addr15~0→PC,
⑵短轉(zhuǎn)移指令
AJMP
addr11
;PC+2→PC, addr10~0→PC10~0, PC15~11不變⑷間接轉(zhuǎn)移指令(散轉(zhuǎn)指令)
JMP@A+DPTR ;A+DPTR→PCLJMP、AJMP、SJMP三條無條件轉(zhuǎn)移指令的區(qū)別:①轉(zhuǎn)移范圍不一樣。
LJMP轉(zhuǎn)移范圍是64KB;
AJMP轉(zhuǎn)移范圍是與當(dāng)前PC值同一2KB;
SJMP轉(zhuǎn)移范圍是當(dāng)前PC-128B~+127B。使用AJMP和SJMP指令應(yīng)注意轉(zhuǎn)移目標(biāo)地址是否在轉(zhuǎn)移范圍內(nèi),若超出范圍,程序?qū)⒊鲥e。②指令字節(jié)不一樣。
LJMP是3字節(jié)指令;
AJMP、SJMP是2字節(jié)指令。⒉條件轉(zhuǎn)移指令(13條)
條件轉(zhuǎn)移指令根據(jù)判斷條件可分為:
⑴判C轉(zhuǎn)移
⑵判bit轉(zhuǎn)移
⑶判A轉(zhuǎn)移
⑷減1非0轉(zhuǎn)移
⑸比較轉(zhuǎn)移指令滿足條件,則轉(zhuǎn)移;不滿足條件,則程序順序執(zhí)行。②
C=0轉(zhuǎn)移指令:
JNCrel
;PC+2→PC,
若Cy=0,則PC+rel→PC,轉(zhuǎn)移
若Cy=1,則程序順序執(zhí)行。⑴判C轉(zhuǎn)移指令(2條)①C=1轉(zhuǎn)移指令:
JCrel
;PC+2→PC,
若Cy=1,則PC+rel→PC,轉(zhuǎn)移若Cy=0,則程序順序執(zhí)行。③(bit)=1轉(zhuǎn)移并清0指令:
JBC
bit,rel
;PC+3→PC,
;若(bit)=1,則PC+rel→PC,轉(zhuǎn)移,且0→(bit)
;若(bit)=0,則程序順序執(zhí)行⑵判bit轉(zhuǎn)移指令(3條)①(bit)=1轉(zhuǎn)移指令:
JB
bit,rel;PC+3→PC,
若(bit)=1,則PC+rel→PC,轉(zhuǎn)移若(bit)=0,則程序順序執(zhí)行②(bit)=0轉(zhuǎn)移指令:
JNB
bit,rel
;PC+3→PC,
若(bit)=0,則PC+rel→PC,轉(zhuǎn)移若(bit)=1,則程序順序執(zhí)行①A=0轉(zhuǎn)移指令:
JZ
rel
;PC+2→PC,
若A=0,則PC+rel→PC,轉(zhuǎn)移若A0,則程序順序執(zhí)行⑶判A轉(zhuǎn)移指令(2條)②A0轉(zhuǎn)移指令:
JNZ
rel
;PC+2→PC,
若A0,則PC+rel→PC,轉(zhuǎn)移若A=0,則程序順序執(zhí)行⑷減1非0轉(zhuǎn)移指令(2條)②DJNZdirect,rel;PC+3→PC,(direct)-1→direct
若(direct)=0,則程序順序執(zhí)行若(direct)0,則PC+rel→PC,轉(zhuǎn)移
①
DJNZRn,rel;PC+2→PC,Rn-1→Rn, 若Rn=0,則程序順序執(zhí)行 若Rn0,則PC+rel→PC,轉(zhuǎn)移⑸比較轉(zhuǎn)移指令(4條)①CJNEA,direct,rel;PC+3→PC,;若A=(direct),則程序順序執(zhí)行
;若A≠(direct),則PC+rel→PC,轉(zhuǎn)移
;且若A≥(direct),Cy=0;若A<(direct),Cy=1
②
CJNE
A,#data,rel;PC+3→PC,;若A=data,則程序順序執(zhí)行
;若A≠data,則PC+rel→PC,轉(zhuǎn)移
;且若A≥data,Cy=0;若A<data,Cy=1
③
CJNE
Rn,#data,rel;PC+3→PC,;若Rn=data,則程序順序執(zhí)行
;若Rn≠data,則PC+rel→PC,轉(zhuǎn)移
;且若Rn≥data,Cy=0;若Rn<data,Cy=1④
CJNE
@Ri,#data,rel;PC+3→PC,;若(Ri)=data,則程序順序執(zhí)行
;若(Ri)≠data,則PC+rel→PC,轉(zhuǎn)移
;且若(Ri)≥data,Cy=0;若(Ri)<data,Cy=1①產(chǎn)生當(dāng)前PC:PC+3→PC, (PC+3是因為該指令為三字節(jié)指令)②斷口地址低8位保存到堆棧中: SP+1→SP,(PC)0~7→(SP)③斷口地址高8位保存到堆棧中: SP+1→SP,(PC)8~15→(SP)
④形成轉(zhuǎn)移目標(biāo)地址:addr16→PC⒊調(diào)用和返回指令LCALLaddr16 ;PC+3→PC,SP+1→SP,(PC)0~7→(SP)
;SP+1→SP,(PC)8~15→(SP);addr16→PC⑴長調(diào)用指令LCALL指令執(zhí)行步驟:①產(chǎn)生當(dāng)前PC:PC+2→PC,
(PC+2是因為該指令為雙字節(jié)指令)②斷口地址低8位保存到堆棧中: SP+1→SP,(PC)0~7→(SP)③斷口地址高8位保存到堆棧中: SP+1→SP,(PC)8~15→(SP)④形成轉(zhuǎn)移目標(biāo)地址:addr11→PC0~10,PC11~15不變⑵短調(diào)用指令A(yù)CALLaddr11;PC+2→PC,SP+1→SP,(PC)0~7→(SP)
;SP+1→SP,(PC)8~15→(SP)
;addr0~10→PC0~10,PC11~15不變
ACALL指令執(zhí)行步驟:①(SP)→PC8~15,SP-1→SP;②(SP)→PC0~7,SP-1→SP。⑶返回指令:返回指令有子程序返回和中斷返回兩種:①RET
;子程序返回②RETI;中斷返回返回指令執(zhí)行步驟:⒋空操作指令(1條)
NOP為單機周指令,在時間上占用一個機器周期,常用于時間“微調(diào)”。NOP;PC+1→PC第4章機械工業(yè)出版社同名教材配套電子教案第3版第4章匯編語言程序設(shè)計4.1.1匯編
將匯編語言源程序轉(zhuǎn)換為機器代碼的過程稱為匯編。將由二進(jìn)制碼組成的機器代碼程序轉(zhuǎn)換為匯編語言源程序的過程稱為反匯編。
4.1匯編語言程序設(shè)計基本概念
4.1.2偽指令
在匯編時起控制作用,自身并不產(chǎn)生機器碼,不屬于指令系統(tǒng),而僅是為匯編服務(wù)的一些指令,稱為偽指令。常用的偽指令有以下幾種:⒈起始偽指令
ORG(Origin)
功能:規(guī)定ORG下面目標(biāo)程序的起始地址。格式:ORG(16位地址)功能:將一個數(shù)據(jù)或特定的匯編符號賦予規(guī)定 的字符名稱。⒉結(jié)束偽指令END功能:是匯編語言源程序的結(jié)束標(biāo)志。在END
以后所寫的指令,匯編程序不再處理。格式:END⒊等值偽指令
EQU(Equate)格式:(字符名稱)EQU
(數(shù)據(jù)或匯編符號)⒋數(shù)據(jù)地址賦值偽指令
DATA格式:(字符名稱)DATA
(表達(dá)式)功能:將數(shù)據(jù)地址或代碼地址賦予規(guī)定的 字符名稱。⒌定義字節(jié)偽指令DB(DefineByte)格式:DB(8位二進(jìn)制數(shù)表)功能:從指定的地址單元開始,定義若干 個8位內(nèi)存單元的數(shù)據(jù)。數(shù)據(jù)與數(shù)據(jù)之間用“,”分割。格式:(字符名稱)BIT
(位地址)⒍定義字偽指令DW(DefineWord)格式:DW
(16位二進(jìn)制數(shù)據(jù)表)功能:從指定的地址單元開始,定義 若干個16位數(shù)據(jù)。⒎定義位地址偽指令BIT功能:將位地址賦予所規(guī)定的字符名稱。⑷
匯編和調(diào)試4.1.3程序設(shè)計的基本步驟
編寫程序要求:
不僅要完成規(guī)定的功能任務(wù),而且還應(yīng)該執(zhí)行速度快、占用內(nèi)存少、條理清晰、閱讀方便、便于移植、巧妙而實用。一般應(yīng)按以下幾個步驟進(jìn)行:⑴分析問題,確定算法或解題思路⑵畫流程圖⑶編寫源程序
順序程序是指按順序依次執(zhí)行的程序,也稱為簡單程序或直線程序。順序程序結(jié)構(gòu)雖然比較簡單,但也能完成一定的功能任務(wù),是構(gòu)成復(fù)雜程序的基礎(chǔ)。4.2匯編語言程序設(shè)計舉例4.2.1順序程序CONT:MOV A,R0 ;讀低8位
CPL A ;取反
ADD A,#1 ;加1 MOV R2,A ;存低8位
MOV A,R1 ;讀高8位
CPL A ;取反
ADDC A,#80H ;加進(jìn)位及符號位
MOVR3,A
;存高8位
RET ;【例】已知16位二進(jìn)制負(fù)數(shù)存放在R1R0中, 試求其補碼,并將結(jié)果存在R3R2中。解:二進(jìn)制負(fù)數(shù)的求補方法可歸結(jié)為“求反加1”,符號位不變。利用CPL指令實現(xiàn)求反;加1時,則應(yīng)低8位先加1,高8位再加上低位的進(jìn)位。注意這里不能用INC指令,因為INC指令不影響標(biāo)志位。程序如下:在許多情況下,需要根據(jù)不同的條件轉(zhuǎn)向不同的處理程序,這種結(jié)構(gòu)的程序稱為分支程序。
80C51指令系統(tǒng)中設(shè)置了條件轉(zhuǎn)移指令、比較轉(zhuǎn)移指令和位轉(zhuǎn)移指令,可以實現(xiàn)分支程序。4.2.2分支程序①S0單獨按下,紅燈亮,其余燈滅;②S1單獨按下,綠燈亮,其余燈滅;③S0、S1均按下,紅綠黃燈全亮;④S0、S1均未按下,黃燈亮,其余燈滅。
【例4-6】已知電路如圖4-4所示,要求實現(xiàn):KeilC51軟件調(diào)試(見例9-1
)⑴程序編譯鏈接及糾錯。直至顯示:0Error(s),0
Warning(s)
⑵進(jìn)入調(diào)試狀態(tài),全速運行。⑶打開P1口對話框,設(shè)置P1.7P1.6(s0、s1)狀態(tài)。⑷觀測P1.2~P1.0狀態(tài)(0亮1滅),是否符合題目要求。畫出Proteus虛擬仿真電路圖
裝入在Keil調(diào)試時生成的Hex文件
全速運行后,即時操作帶鎖按鈕S0、S1
信號燈會按題目要求隨之變化
圖9-59ProteusISIS虛擬仿真信號燈電路課堂練習(xí)題:
電路及燈亮滅要求同上例,其中第2、3兩條指令
JB
P1.7和JB
P1.6按下列要求修改,試重新編程,并進(jìn)行Keil軟件調(diào)試、Proteus虛擬仿真,看能否達(dá)到題目要求。
⑴JB
P1.7,…
JNBP1.6,…⑵JNBP1.7,…
JB
P1.6,…
⑶JNBP1.7,…
JNBP1.6,…
循環(huán)程序一般包括以下幾個部分: ⑴循環(huán)初值; ⑵循環(huán)體; ⑶循環(huán)修改; ⑷循環(huán)控制; 其結(jié)構(gòu)可以有兩種組織形式,如圖4-6所示。4.2.3循環(huán)程序
【例4-7】設(shè)Xi均為單字節(jié)數(shù),并按順序存放在以50H為首地址的內(nèi)RAM存儲單元中,數(shù)據(jù)長度(個數(shù))N存在R2中,試編程求和S=X1+X2+‥‥+XN,并將S(雙字節(jié))存放在R3R4中(設(shè)S<65536)。解:程序如下:SXN: MOVR2,#N
;置數(shù)據(jù)長度(循環(huán)次數(shù))
MOVR3,#00H;和單元(高8位)清0
MOVR4,#00H;和單元(低8位)清0
MOVR0,#50H;求和數(shù)據(jù)區(qū)首址LOOP:MOVA,R4
;讀前次低8位和
ADDA,@R0
;低8位累加
MOVR4,A
;存低8位和
CLRA
;
ADDC
A,R3
;高8位加進(jìn)位
MOVR3,A
;存高8位和
INCR0
;指向下一數(shù)據(jù)
DJNZ
R2,LOOP;判N個數(shù)據(jù)累加完否?
RET
;退出循環(huán)循環(huán)體置循環(huán)初值循環(huán)修改循環(huán)控制退出循環(huán)
DY1ms:MOVR7,#250;置循環(huán)次數(shù)
DLOP:DJNZ
R7,DLOP;2機周×250=500機周
RET
;【例4-8】按下列要求編寫延時子程序:⑴延時1ms,fosc=6MHz;⑵延時10ms,fosc=12MHz;⑶延時1s,fosc=6MHz;解⑴:延時1ms,fosc=6MHz,一個機器周期為2s說明:MOVRn指令為1個機器周期;DJNZ指令為2個機器周期;RET指令為2個機器周期;[(2機周×250)+1+2]×2s/機周=1006s≈1msKeilC51軟件調(diào)試編譯(擴展名用.asm)鏈接并進(jìn)入調(diào)試狀態(tài)后,全速運行。觀察寄存器窗口Sys中:states值為501(機周),sec值為0.001002(s)
RET(返回)指令需與子程序調(diào)用指令成對出現(xiàn),單獨執(zhí)行時會出錯。因此,Keil調(diào)試時,需去除RET指令,用偽指令END替代,才能得到正確的延時時間。但實際調(diào)用時,仍需加上RET指令,延時時間增加2機周。
注意:DY10ms:MOVR6,#20;置外循環(huán)次數(shù)DLP1:MOV
R7,#250;置內(nèi)循環(huán)次數(shù)DLP2:
DJNZ
R7,DLP2
;2機周×250=500機周
DJNZ
R6,DLP1
;500機周×20=10000機周
RET
;解⑵:延時10ms,fosc=12MHz,一個機器周期為1s。說明:MOVRn指令為1個機器周期;DJNZ指令為2個機器周期;RET指令為2個機器周期;{[(2機周×250)+1+2]×20+1+2}×1s/機周
=10063s≈10msKeilC51軟件調(diào)試結(jié)果(用END替代RET):
states=10061(機周),sec=0.010061(s)。
DY1S:MOV
R5,#5;置外循環(huán)次數(shù)DYS0:MOV
R6,#200;置中循環(huán)次數(shù)DYS1:MOV
R7,#250;置內(nèi)循環(huán)次數(shù)DYS2:DJNZ
R7,DYS2;2機周×250=500機周
DJNZ
R6,DYS1;500機周×200=100000機周
DJNZ
R5,DYS0;100000機周×5=500000機周
RET
;解⑶:fosc=6MHz,一個機器周期為2s。說明:M
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年四川省南充市公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 2024年廣東省佛山市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2022年四川省廣元市公開招聘警務(wù)輔助人員輔警筆試自考題2卷含答案
- 2024年云南省大理自治州公開招聘警務(wù)輔助人員輔警筆試自考題1卷含答案
- 集體三等功事跡報告
- 學(xué)校圣誕節(jié)晚會的主持開場白!中文英文對照版
- 《創(chuàng)建框架網(wǎng)》課件
- 《膈疝放射診斷》課件
- 2025年生命探測儀項目申請報告模板
- 2025年特種粉末及粉末冶金制品項目規(guī)劃申請報告模范
- 浙江省杭州市余杭區(qū)2023-2024學(xué)年五年級上學(xué)期1月期末道德與法治試題
- 山東省濟南市歷城區(qū)2023-2024學(xué)年四年級上學(xué)期期末數(shù)學(xué)試卷
- 工程管理培訓(xùn)教案
- agv無人運輸車維修保養(yǎng)合同
- 2023-2024學(xué)年二年級數(shù)學(xué)上冊期末樂考非紙筆測試題(一)蘇教版
- 學(xué)生信息技術(shù)應(yīng)用實踐
- Android移動應(yīng)用開發(fā)基礎(chǔ)教程-教案
- 2024年江蘇省學(xué)業(yè)水平合格性考試語文全真模擬卷
- 2023年總裝電氣工程師年度總結(jié)及下一年計劃
- 城市園林綠化養(yǎng)護管理標(biāo)準(zhǔn)規(guī)范
- 腳手架工程安全管理風(fēng)險辨識及防范措施
評論
0/150
提交評論