第3章第4章單片機(jī)原理與控制持技術(shù)第三版_第1頁(yè)
第3章第4章單片機(jī)原理與控制持技術(shù)第三版_第2頁(yè)
第3章第4章單片機(jī)原理與控制持技術(shù)第三版_第3頁(yè)
第3章第4章單片機(jī)原理與控制持技術(shù)第三版_第4頁(yè)
第3章第4章單片機(jī)原理與控制持技術(shù)第三版_第5頁(yè)
已閱讀5頁(yè),還剩71頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章機(jī)械工業(yè)出版社同名教材配套電子教案第3版第3章80C51系列單片機(jī)指令系統(tǒng)3.1指令系統(tǒng)基本概念標(biāo)號(hào):操作碼操作數(shù);注釋

3.1.1

指令基本格式⑴標(biāo)號(hào):指令的符號(hào)地址。①用于一段功能程序的識(shí)別標(biāo)記或控制 轉(zhuǎn)移地址。②指令前的標(biāo)號(hào)代表該指令的地址,是用 符號(hào)表示的地址。一般用英文字母和數(shù)字組成。④標(biāo)號(hào)必須用冒號(hào)“:”與操作碼分隔。⑵操作碼:表示指令的操作功能。①操作碼用助記符表示,它代表了指令 的操作功能。②操作碼是指令的必需部分,是指令的 核心,不可缺少。⑶操作數(shù):參加操作的數(shù)據(jù)或數(shù)據(jù)地址。⑤操作數(shù)與操作碼之間用空格分隔,操作數(shù)與 操作數(shù)之間用逗號(hào)“,”分隔。①操作數(shù)可以是數(shù)據(jù),也可以是數(shù)據(jù)的地址、 數(shù)據(jù)地址的地址或操作數(shù)的其他信息。②操作數(shù)可分為目的操作數(shù)和源操作數(shù)。③操作數(shù)可用二進(jìn)制數(shù)、十進(jìn)制數(shù)或十六進(jìn)制 數(shù)表示。④操作數(shù)的個(gè)數(shù)可以是0~3個(gè)。⑷注釋:指令功能說明。①注釋屬于非必需項(xiàng),是為便于閱讀, 對(duì)指令功能作的說明和注解。②注釋必須以“;”開始。3.1.2

指令系統(tǒng)中的常用符號(hào)⑹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:帶符號(hào)的8位偏移地址。用于轉(zhuǎn)移指令,其范圍是相對(duì)于下一條指令第1字節(jié)地址的-128~+127個(gè)字節(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)容為地址的存儲(chǔ)單元中的數(shù)據(jù)傳送至A中MOVXA,@DPTR;將外RAMDPTR所指存儲(chǔ)單元中的數(shù)據(jù)傳送至A中PUSHPSW;將PSW中數(shù)據(jù)傳送至堆棧指針SP所指的存儲(chǔ)單元中間接尋址是根據(jù)操作數(shù)地址的地址尋找操作數(shù)。間接尋址用間址符“@”作為前綴?!纠竣底冎穼ぶ稭OVCA,@A+DPTR

【例】在變址尋址中,操作數(shù)地址=基址+變址用于讀ROM數(shù)據(jù)操作。;將A的內(nèi)容與DPTR內(nèi)容相加,得到一個(gè)新地址,從該地址ROM中讀取數(shù)據(jù)送入A中。相對(duì)尋址一般用于相對(duì)轉(zhuǎn)移指令,

轉(zhuǎn)移目的地址=當(dāng)前PC值+相對(duì)偏移量rel。;將位地址07H(字節(jié)地址20H中最高位)中的數(shù)據(jù)傳送至進(jìn)位位Cy。⒍相對(duì)尋址⒎位尋址位尋址是對(duì)內(nèi)RAM和特殊功能寄存器中的可尋址位進(jìn)行操作的尋址方式?!纠縈OVC,07H3.2

指令系統(tǒng)①M(fèi)OVA,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條)①M(fèi)OVRn,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條)①M(fèi)OVdirect,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條)①M(fèi)OV@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ù)傳送指令實(shí)現(xiàn):MOVDPH,#12H;DPH=12HMOVDPL,#34H;DPL=34H,DPTR=1234H①M(fèi)OVXA,@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指令傳送。①M(fèi)OVCA,@A+DPTR;(A+DPTR)→A②MOVCA,@A+PC;PC+1→PC,(A+PC)→A綜上所述,三個(gè)不同的存儲(chǔ)空間用三種不同的指令傳送:①PUSHdirect;SP+1→SP,(direct)→(SP)

②POP

direct;(SP)→(direct),SP-1→SP

⒌堆棧操作指令(2條)⑴PUSH為入棧指令例PUSH30H;(30H)=2BH,具體操作是:

先將堆棧指針SP的內(nèi)容(0FH)加1,指向堆棧頂?shù)囊粋€(gè)空單元,此時(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ù)運(yùn)算類指令⒈加法指令⑴不帶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時(shí),會(huì)影響P,但不影響其他標(biāo)志位。

DIVAB

;(A÷B)商→A,余數(shù)→BCy=0,OV=0

⒋BCD碼調(diào)整指令DAA功能:對(duì)加法運(yùn)算結(jié)果進(jìn)行BCD碼調(diào)整。⒌乘除法指令⑴乘法指令(1條)MULAB

;A×B→BA⑵除法指令(1條)三、邏輯運(yùn)算及移位指令①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⒈邏輯“與”運(yùn)算指令(6條)⒉邏輯“或”運(yùn)算指令(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⒊邏輯“異或”運(yùn)算指令(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

①M(fèi)OVC,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⑴位邏輯“與”運(yùn)算指令:①ANLC,bit ;C∧(bit)→C②ANLC,/bit ;C∧(bit)→C⑵位邏輯“或”運(yùn)算指令:①ORLC,bit ;C∨(bit)→C②ORLC,/bit

;C∨(bit)→C⒊位邏輯運(yùn)算指令(4條)⑶相對(duì)轉(zhuǎn)移指令

SJMP

rel;PC+2→PC,PC+rel→PC五、控制轉(zhuǎn)移類指令⒈無條件轉(zhuǎn)移指令(3條)⑴長(zhǎng)轉(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(cuò)。②指令字節(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是因?yàn)樵撝噶顬槿止?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⑴長(zhǎng)調(diào)用指令LCALL指令執(zhí)行步驟:①產(chǎn)生當(dāng)前PC:PC+2→PC,

(PC+2是因?yàn)樵撝噶顬殡p字節(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為單機(jī)周指令,在時(shí)間上占用一個(gè)機(jī)器周期,常用于時(shí)間“微調(diào)”。NOP;PC+1→PC第4章機(jī)械工業(yè)出版社同名教材配套電子教案第3版第4章匯編語(yǔ)言程序設(shè)計(jì)4.1.1匯編

將匯編語(yǔ)言源程序轉(zhuǎn)換為機(jī)器代碼的過程稱為匯編。將由二進(jìn)制碼組成的機(jī)器代碼程序轉(zhuǎn)換為匯編語(yǔ)言源程序的過程稱為反匯編。

4.1匯編語(yǔ)言程序設(shè)計(jì)基本概念

4.1.2偽指令

在匯編時(shí)起控制作用,自身并不產(chǎn)生機(jī)器碼,不屬于指令系統(tǒng),而僅是為匯編服務(wù)的一些指令,稱為偽指令。常用的偽指令有以下幾種:⒈起始偽指令

ORG(Origin)

功能:規(guī)定ORG下面目標(biāo)程序的起始地址。格式:ORG(16位地址)功能:將一個(gè)數(shù)據(jù)或特定的匯編符號(hào)賦予規(guī)定 的字符名稱。⒉結(jié)束偽指令END功能:是匯編語(yǔ)言源程序的結(jié)束標(biāo)志。在END

以后所寫的指令,匯編程序不再處理。格式:END⒊等值偽指令

EQU(Equate)格式:(字符名稱)EQU

(數(shù)據(jù)或匯編符號(hào))⒋數(shù)據(jù)地址賦值偽指令

DATA格式:(字符名稱)DATA

(表達(dá)式)功能:將數(shù)據(jù)地址或代碼地址賦予規(guī)定的 字符名稱。⒌定義字節(jié)偽指令DB(DefineByte)格式:DB(8位二進(jìn)制數(shù)表)功能:從指定的地址單元開始,定義若干 個(gè)8位內(nèi)存單元的數(shù)據(jù)。數(shù)據(jù)與數(shù)據(jù)之間用“,”分割。格式:(字符名稱)BIT

(位地址)⒍定義字偽指令DW(DefineWord)格式:DW

(16位二進(jìn)制數(shù)據(jù)表)功能:從指定的地址單元開始,定義 若干個(gè)16位數(shù)據(jù)。⒎定義位地址偽指令BIT功能:將位地址賦予所規(guī)定的字符名稱。⑷

匯編和調(diào)試4.1.3程序設(shè)計(jì)的基本步驟

編寫程序要求:

不僅要完成規(guī)定的功能任務(wù),而且還應(yīng)該執(zhí)行速度快、占用內(nèi)存少、條理清晰、閱讀方便、便于移植、巧妙而實(shí)用。一般應(yīng)按以下幾個(gè)步驟進(jìn)行:⑴分析問題,確定算法或解題思路⑵畫流程圖⑶編寫源程序

順序程序是指按順序依次執(zhí)行的程序,也稱為簡(jiǎn)單程序或直線程序。順序程序結(jié)構(gòu)雖然比較簡(jiǎn)單,但也能完成一定的功能任務(wù),是構(gòu)成復(fù)雜程序的基礎(chǔ)。4.2匯編語(yǔ)言程序設(shè)計(jì)舉例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)位及符號(hào)位

MOVR3,A

;存高8位

RET ;【例】已知16位二進(jìn)制負(fù)數(shù)存放在R1R0中, 試求其補(bǔ)碼,并將結(jié)果存在R3R2中。解:二進(jìn)制負(fù)數(shù)的求補(bǔ)方法可歸結(jié)為“求反加1”,符號(hào)位不變。利用CPL指令實(shí)現(xiàn)求反;加1時(shí),則應(yīng)低8位先加1,高8位再加上低位的進(jìn)位。注意這里不能用INC指令,因?yàn)镮NC指令不影響標(biāo)志位。程序如下:在許多情況下,需要根據(jù)不同的條件轉(zhuǎn)向不同的處理程序,這種結(jié)構(gòu)的程序稱為分支程序。

80C51指令系統(tǒng)中設(shè)置了條件轉(zhuǎn)移指令、比較轉(zhuǎn)移指令和位轉(zhuǎn)移指令,可以實(shí)現(xiàn)分支程序。4.2.2分支程序①S0單獨(dú)按下,紅燈亮,其余燈滅;②S1單獨(dú)按下,綠燈亮,其余燈滅;③S0、S1均按下,紅綠黃燈全亮;④S0、S1均未按下,黃燈亮,其余燈滅。

【例4-6】已知電路如圖4-4所示,要求實(shí)現(xiàn):KeilC51軟件調(diào)試(見例9-1

)⑴程序編譯鏈接及糾錯(cuò)。直至顯示:0Error(s),0

Warning(s)

⑵進(jìn)入調(diào)試狀態(tài),全速運(yùn)行。⑶打開P1口對(duì)話框,設(shè)置P1.7P1.6(s0、s1)狀態(tài)。⑷觀測(cè)P1.2~P1.0狀態(tài)(0亮1滅),是否符合題目要求。畫出Proteus虛擬仿真電路圖

裝入在Keil調(diào)試時(shí)生成的Hex文件

全速運(yùn)行后,即時(shí)操作帶鎖按鈕S0、S1

信號(hào)燈會(huì)按題目要求隨之變化

圖9-59ProteusISIS虛擬仿真信號(hào)燈電路課堂練習(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)程序一般包括以下幾個(gè)部分: ⑴循環(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存儲(chǔ)單元中,數(shù)據(jù)長(zhǎng)度(個(gè)數(shù))N存在R2中,試編程求和S=X1+X2+‥‥+XN,并將S(雙字節(jié))存放在R3R4中(設(shè)S<65536)。解:程序如下:SXN: MOVR2,#N

;置數(shù)據(jù)長(zhǎng)度(循環(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個(gè)數(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機(jī)周×250=500機(jī)周

RET

;【例4-8】按下列要求編寫延時(shí)子程序:⑴延時(shí)1ms,fosc=6MHz;⑵延時(shí)10ms,fosc=12MHz;⑶延時(shí)1s,fosc=6MHz;解⑴:延時(shí)1ms,fosc=6MHz,一個(gè)機(jī)器周期為2s說明:MOVRn指令為1個(gè)機(jī)器周期;DJNZ指令為2個(gè)機(jī)器周期;RET指令為2個(gè)機(jī)器周期;[(2機(jī)周×250)+1+2]×2s/機(jī)周=1006s≈1msKeilC51軟件調(diào)試編譯(擴(kuò)展名用.asm)鏈接并進(jìn)入調(diào)試狀態(tài)后,全速運(yùn)行。觀察寄存器窗口Sys中:states值為501(機(jī)周),sec值為0.001002(s)

RET(返回)指令需與子程序調(diào)用指令成對(duì)出現(xiàn),單獨(dú)執(zhí)行時(shí)會(huì)出錯(cuò)。因此,Keil調(diào)試時(shí),需去除RET指令,用偽指令END替代,才能得到正確的延時(shí)時(shí)間。但實(shí)際調(diào)用時(shí),仍需加上RET指令,延時(shí)時(shí)間增加2機(jī)周。

注意:DY10ms:MOVR6,#20;置外循環(huán)次數(shù)DLP1:MOV

R7,#250;置內(nèi)循環(huán)次數(shù)DLP2:

DJNZ

R7,DLP2

;2機(jī)周×250=500機(jī)周

DJNZ

R6,DLP1

;500機(jī)周×20=10000機(jī)周

RET

;解⑵:延時(shí)10ms,fosc=12MHz,一個(gè)機(jī)器周期為1s。說明:MOVRn指令為1個(gè)機(jī)器周期;DJNZ指令為2個(gè)機(jī)器周期;RET指令為2個(gè)機(jī)器周期;{[(2機(jī)周×250)+1+2]×20+1+2}×1s/機(jī)周

=10063s≈10msKeilC51軟件調(diào)試結(jié)果(用END替代RET):

states=10061(機(jī)周),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機(jī)周×250=500機(jī)周

DJNZ

R6,DYS1;500機(jī)周×200=100000機(jī)周

DJNZ

R5,DYS0;100000機(jī)周×5=500000機(jī)周

RET

;解⑶:fosc=6MHz,一個(gè)機(jī)器周期為2s。說明:M

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論