




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
?保護(hù)現(xiàn)場(chǎng)就是一系列指令方式的進(jìn)棧操作;
而恢復(fù)現(xiàn)場(chǎng)則是一系列指令方式的出棧操作。需要保護(hù)多少數(shù)據(jù)由用戶決定。1武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件堆棧的使用有兩種方式:?一種是自動(dòng)方式,即在調(diào)用子程序或中斷時(shí),進(jìn)行
斷點(diǎn)保護(hù),斷點(diǎn)地址自動(dòng)進(jìn)棧。程序返回時(shí),斷點(diǎn)
地址再自動(dòng)彈回PC。這種操作無(wú)需用戶干預(yù)。?另一種是指令方式,使用專用的堆棧操作指令,
執(zhí)行進(jìn)出棧操作,其進(jìn)棧指令為PUSH,出棧指令
為POP。?保護(hù)現(xiàn)場(chǎng)就是一系列指令方式的進(jìn)棧操作;
而恢復(fù)現(xiàn)場(chǎng)POP01HPOPPSWPOPACCPUSHACCPUSHPSWPUSH01H保護(hù)現(xiàn)場(chǎng):恢復(fù)現(xiàn)場(chǎng):…..2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件POP01HPUSHACC保護(hù)現(xiàn)場(chǎng):恢復(fù)現(xiàn)場(chǎng):…
×
×SP→56H02H× × × × ×SP→ ×
×
×
×SP→02H×56H解:SBR:MOVSP,#30H;設(shè)棧底
PUSHA PUSHB MOVA,#0 MOVB,#01 … POP B POPA 武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件3【例14】設(shè)
A=02H,B=56H,執(zhí)行下列指令后,
SP=?,A=?,B=?A02H00H01H56HB02HSP=30H,A=02H,B=56H× 武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件4【例15】MOVSP,
#18H MOVA,
#30H MOVDPTR,
#1000HPUSHA PUSHDPH PUSHDPLPOPDPL POPDPH POPA ;(SP)=18H;(A)=30H;(DPTR)=1000H;(SP)=19H(19H)=30H;(SP)=1AH(1AH)=10H;(SP)=1BH(1BH)=00H;(DPL)=00H、(SP)=1AH;(DPH)=10H、(SP)=19H;(A)=30H、(SP)=18H(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件4【例15武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件5【例16】設(shè)(A)=7BH;(35H)=11H
并且知道(SP)=60HPUSHACC;(61H)#7BHPUSH35H;(62H)(35H)
即:(62H)#11H
POPACC;(A)(62H)
即:(A)#11HPOP5AH;(5AH)(61H)
即:(5AH)#7BH實(shí)際上就是利用堆棧傳遞數(shù)據(jù)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件5【例16【例17】
設(shè)(30H)=X,(40H)=Y,試?yán)枚褩^(qū)域
實(shí)現(xiàn)30H和40H單元中的數(shù)據(jù)交換。解:堆棧區(qū)是片內(nèi)RAM的一個(gè)數(shù)據(jù)區(qū),進(jìn)棧和出棧的數(shù)據(jù)
符合“先進(jìn)后出”的原則。MOVSP,#50H;設(shè)棧底(棧底不存數(shù))PUSH40H;(51H)←(40H)PUSH30H;(52H)←(30H)POP40H;(40H)←(52H)POP30H;(30H)←(51H)6武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件【例17】設(shè)(30H)=X,(40H)=Y,試?yán)枚褩!纠?8】把01H單元內(nèi)容送02H單元,有幾種不同的實(shí)現(xiàn)方法?①M(fèi)OV02H,01H;直接尋址3字節(jié)2周期②MOVA,01H;直接尋址+寄存器尋址
MOV02H,A;4字節(jié)2周期③MOVA,R1;寄存器尋址2字節(jié)2周期
MOVR2,A④MOVR0,#01H;間接尋址
MOV02H,@R0;4字節(jié)3周期⑤PUSH01H;棧操作4字節(jié)4周期
POP02H
第三種方法占存儲(chǔ)空間少,執(zhí)行周期短。7武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件【例18】把01H單元內(nèi)容送02H單元,有幾種不同的實(shí)現(xiàn)方法武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件8片外程序存儲(chǔ)器ROMEPROM特殊功能寄存器SFR片內(nèi)RAM128字節(jié)片外數(shù)據(jù)存儲(chǔ)器RAMMOVCMOVXMOVPUSHPOPXCHXCHD數(shù)據(jù)傳送類指令用法小結(jié)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件8片外特殊武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件93.3.2算術(shù)運(yùn)算類指令加法運(yùn)算:(ADD——4條)帶進(jìn)位加法運(yùn)算:(ADDC——4條)帶借位減法運(yùn)算:(SUBB——4條)加1/減1操作:(INC,DEC——9條)單字節(jié)乘/除法運(yùn)算:(MUL,DIV——2條)十進(jìn)制調(diào)整:(DAA——1條)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件93.3.武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件10加法運(yùn)算:(ADD——4條)帶進(jìn)位加法運(yùn)算:(ADDC——4條)帶借位減法運(yùn)算:(SUBB——4條)所有的加法(ADD)、帶進(jìn)位加法(ADDC)、帶借位減法(SUBB)運(yùn)算都是以A為一個(gè)加數(shù)或被減數(shù),最終結(jié)果也存進(jìn)A。加法(ADD)、帶進(jìn)位加法(ADDC)以及帶借位減法(SUBB)運(yùn)算中,如果產(chǎn)生了進(jìn)位或借位,將自動(dòng)對(duì)PSW中的Cy標(biāo)志位置“1”
。帶進(jìn)位加法(ADDC):(A)(A)+(Cy)+(第二操作數(shù))帶借位減法(SUBB):(A)(A)-(Cy)-(第二操作數(shù))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件10加法運(yùn)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件11加法指令組:(ADD——4條)ADDA,Rn;A←(A)+(Rn)ADDA,direct;A←(A)+(direct)ADDA,@Ri;A←(A)+((Ri))ADDA,#data;A←(A)+data8位2進(jìn)制加法運(yùn)算指令的一個(gè)加數(shù)總是A,另一個(gè)可由不同尋址方法得到,其結(jié)果再送回A。注意對(duì)PSW狀態(tài)字的影響:如果位3有進(jìn)位,AC=1,否則AC=0;如果位7有進(jìn)位,CY=1,否則CY=0;如果位6和位7中,一個(gè)有進(jìn)位而另一個(gè)沒有,則OV=1,溢出,否則OV=0,無(wú)溢出。溢出標(biāo)志的狀態(tài)只有在有符號(hào)數(shù)加法運(yùn)算時(shí)才有意義。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件11加法指武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件12【例19】(A)=0C2H,(R0)=0A9H,執(zhí)行ADDA,R011000010
+101010011←01101011運(yùn)算結(jié)果:(A)=6BH,(AC)=0,(CY)=1,(OV)=1。若0C2H和0A9H是2個(gè)無(wú)符號(hào)數(shù),則運(yùn)算結(jié)果是正確的;反之則是錯(cuò)誤的,因?yàn)閮蓚€(gè)負(fù)數(shù)相加不可能得到正數(shù)的和。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件12【例1武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件13【例20】?jī)蓚€(gè)8位無(wú)符號(hào)數(shù)相加的和仍是8位。
如內(nèi)部RAM中40H和41H單元分別存放兩個(gè)計(jì)數(shù),
相加結(jié)果存放42H單元。MOVR0,#40H;設(shè)置數(shù)據(jù)指針MOVA,@R0;取第一個(gè)加數(shù)INCR0;修改數(shù)據(jù)指針ADDA,@R0;兩數(shù)相加INCR0;修改數(shù)據(jù)指針MOV@R0,A;存結(jié)果武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件13【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件14帶進(jìn)位加法指令組:(ADDC—4條)ADDCA,Rn;A←(A)+(Rn)+(CY)ADDCA,direct;A←(A)+(direct)+(CY)ADDCA,@Ri;A←(A)+((Ri))+(CY)ADDCA,#data;A←(A)+data+(CY)它們對(duì)標(biāo)志位的影響同前。唯一特點(diǎn)就是進(jìn)位標(biāo)志參加運(yùn)算。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件14帶進(jìn)位武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件15【例21】雙字節(jié)無(wú)符號(hào)數(shù)加法(R0R1)+(R2R3)→(R4R5),
R0、R2、R4存放16位數(shù)的高字節(jié),R1、R3、R5存放
低字節(jié)。由于不存在16位數(shù)加法指令,所以只能先加
低8位,后加高8位,而在加高8位時(shí)要連低8位相加時(shí)產(chǎn)生
的進(jìn)位一起相加。假設(shè)其和不超過(guò)16位,其編程如下:帶進(jìn)位加法指令常用于多字節(jié)數(shù)的加法運(yùn)算。MOVA,R1;取被加數(shù)低字節(jié)ADDA,R3;低字節(jié)相加MOVR5,A;保存和低字節(jié)MOVA,R0;取高字節(jié)被加數(shù)ADDCA,R2;兩高字節(jié)之和加低位進(jìn)位MOVR4,A;保存和高字節(jié)(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件15【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件16【例22】設(shè)雙字節(jié)數(shù)X存在片內(nèi)RAM41H、40H單元,Y存在42H、43H單元,編程求Z=X+Y,并存入片內(nèi)RAM單元44H、45H、46H。ADDS:MOVA,40H ADDA,42H MOV44H,A MOVA,41H ADDCA,43H MOV45H,A MOVA,#0 ADDCA,#0 MOV46H,A RET;取被加數(shù)低字節(jié);加上加數(shù)低字節(jié);保存和的低字節(jié);取被加數(shù)高字節(jié);加上加數(shù)高字節(jié);保存和的高字節(jié);求高字節(jié)進(jìn)位
;子程序結(jié)束武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件16【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件17【例23】三字節(jié)無(wú)符號(hào)數(shù)相加,被加數(shù)放在內(nèi)部RAM20H~22H單元(低位在前),加數(shù)放在內(nèi)部RAM2AH~2CH單元(低位在前)。可編程序如下:
MOVR0,#20H;被加數(shù)首地址
MOVR1,#2AH;加數(shù)首地址
MOVR7,#03H;字節(jié)數(shù)
CLRC;清CYLOOP:MOVA,@R0;取被加數(shù)一個(gè)字節(jié)
ADDCA,@R1;與加數(shù)的一個(gè)字節(jié)相加
MOV@R0,A;暫存中間結(jié)果(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件17【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件18MOV@R0,A;暫存中間結(jié)果
INCR0;地址增量
INCR1DJNZR7,LOOP;次數(shù)減1,不為0轉(zhuǎn)移
CLRAADDCA,#00H;處理進(jìn)位
MOV@R0,A;存進(jìn)位相加結(jié)果占據(jù)被加數(shù)單元,但因?yàn)榭赡墚a(chǎn)生進(jìn)位,所以三字節(jié)相加完成后,還要進(jìn)行進(jìn)位位的處理,使之也占據(jù)一個(gè)單元,因此相加和可能在4個(gè)單元中。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件18武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件19帶借位減法指令組:(SUBB—4條)SUBBA,Rn;A←(A)-(Rn)-(CY)SUBBA,direct;A←(A)-(direct)-(CY)SUBBA,@Ri;A←(A)-((Ri))-(CY)SUBBA,#data;A←(A)-data-(CY)只有帶借位的減法運(yùn)算,沒有不帶借位的。對(duì)標(biāo)志位的影響同前。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件19帶借位武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件20【例24】雙字節(jié)無(wú)符號(hào)數(shù)相減(R0R1)-(R2R3)→(R4R5)。
R0、R2、R4存放16位數(shù)的高字節(jié),R1、R3、R5存放低字節(jié),
先減低8位,后減高8位和低位減借位。由于低位開始減時(shí)
沒有借位,所以要先清零。其編程如下:MOVA,R1;取被減數(shù)低字節(jié)CLRC;清借位SUBBA,R3;低字節(jié)相減MOVR5,A;保存差低字節(jié)MOVA,R0;取被減數(shù)高字節(jié)SUBBA,R2;兩高字節(jié)差減低位借位MOVR4,A;保存差高字節(jié)(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件20【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件21加1指令組:(INC,DEC——9條)INC,DEC與用加/減法指令做加1/減1操作不同之處在于INC、DEC不影響標(biāo)志位。加1操作共有5條:INCA;A←(A)+1INCRn;Rn←(Rn)+1INCdirect;direct←(direct)+1INC@Ri;(Ri)←((Ri))+1INCDPTR;DPTR←(DPTR)+1這些操作均不影響程序狀態(tài)字PSW。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件21加1指武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件22【例25】設(shè)(R0)=7EH,(7EH)=FFH,(7FH)=38H,
(DPTR)=10FEH,
分析逐條執(zhí)行下列指令后各單元的內(nèi)容。
INC@R0INCR0INC@R0INCDPTR
INCDPTRINCDPTR;使7EH單元內(nèi)容由FFH變?yōu)?0H;使R0的內(nèi)容由7EH變?yōu)?FH;使7FH單元內(nèi)容由38H變?yōu)?9H;使DPL為FFH,DPH不變;使DPL為00H,DPH為11H;使DPL為01H,DPH不變(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件22【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件23減1指令組(共有4條):DECA;A←(A)-1DECRn;Rn←(Rn)-1DECdirect;direct←(direct)-1DEC@Ri;(Ri)←((Ri))-1這些操作均不影響程序狀態(tài)字PSW。注意:只有數(shù)據(jù)指針DPTR加1操作,沒有DPTR減1操作。
武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件23減1指武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件24單字節(jié)乘/除運(yùn)算:(MUL,DIV——2條)兩個(gè)單字節(jié)數(shù)的乘/除法運(yùn)算只在A與B之間進(jìn)行。MULAB:(A)與(B)相乘,積為16位數(shù),(A)積的低8位;(B)積的高8位DIVAB:(A)除以(B),結(jié)果用2字節(jié)表示,(A)商的整數(shù)部分;(B)余數(shù)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件24單字節(jié)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件25【例26】利用除法指令把累加器A中的8位二進(jìn)制數(shù)轉(zhuǎn)換為3位BCD數(shù),
并以壓縮形式存放在地址M1、M2單元中。解:累加器A中的8位二進(jìn)制數(shù),先對(duì)其除以100(64H),商數(shù)
即為十進(jìn)制的百位數(shù);余數(shù)部分再除以10(0AH),所得商數(shù)
和余數(shù)分別為十進(jìn)制十位數(shù)和個(gè)位數(shù),即得到3位BCD數(shù)。
百位數(shù)放在M1中,十位、個(gè)位數(shù)壓縮BCD數(shù)放在M2中,十位
與個(gè)位數(shù)的壓縮BCD數(shù)的存放是通過(guò)SWAP和ADD指令實(shí)現(xiàn)的。
參考程序如下:(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件25【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件26MOVB,#64H;除數(shù)100送BDIVAB;得百位數(shù)MOVM1,A;百位數(shù)存于M1中MOVA,#0AH;取除數(shù)10XCHA,B;上述余數(shù)與除數(shù)交換DIVAB;得十位數(shù)和個(gè)位數(shù)SWAPA;十位數(shù)存于A的高4位ADDA,B;組成壓縮BCD數(shù)MOVM2,A;十、個(gè)位壓縮BCD數(shù)存M2若上述程序執(zhí)行前:(A)=A8H(168),
則執(zhí)行后:(M1)=(01)BCD,(M2)=(68)BCD。(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件26MOV武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件27【例27】
(A)=50H,(B)=0A0H,
執(zhí)行指令:MULAB結(jié)果:(B)=32H,(A)=00H(即乘積為3200H),
CY=0,OV=1。例如:(A)=0FBH,(B)=12H,
執(zhí)行指令:DIVAB結(jié)果:(A)=0DH,(B)=11H,CY=0,OV=0。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件27【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件28BCD碼是指“用二進(jìn)制表達(dá)的十進(jìn)制數(shù)”。如:
十進(jìn)制數(shù)20可以用二進(jìn)制數(shù)00010100B表示;
也可以用十六進(jìn)制數(shù)14H表示;
還可以用BCD碼00100000B或20H表示。4個(gè)二進(jìn)制位就可以表示一位BCD碼:
0000~1001可表示十進(jìn)制數(shù)(BCD數(shù))0~9;
8個(gè)二進(jìn)制位就可以表示兩位壓縮的BCD碼:00000000~10011001表示00~99。十進(jìn)制調(diào)整:(DAA——1條)
用于兩個(gè)BCD碼之間的相加,這條指令只能跟在ADD或ADDC之后。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件28BCD武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件29若(A)3~09或(AC)=1則(A)3~0(A)3~0+6;
若(A)7~49或(CY)=1則(A)7~4(A)7~4+6;例:兩個(gè)十進(jìn)制數(shù)“65”與“58”相加,根據(jù)常識(shí),顯然其和應(yīng)當(dāng)為“123”。MOVA,#65HADDA,#58H
DAA結(jié)果:(A)=23H
(CY)=1指令“DAA”完成的操作:
65011001015801011000
+13181926601100110(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件29若(A武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件30又如:兩個(gè)十進(jìn)制數(shù)“39”與“58”相加,根據(jù)常識(shí),顯然其和應(yīng)當(dāng)為“97”。MOVA,#39HADDA,#58H
DAA結(jié)果:(A)=97H
(CY)=039001110015801011000
+07239
60110武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件30又如:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件313.3.3邏輯運(yùn)算及移位類指令(5種/24條)邏輯與運(yùn)算:(ANL——6條)邏輯或運(yùn)算:(ORL——6條)邏輯異或運(yùn)算:(XRL——6條)累加器清零/取反:(CLR,CPL——2條)累加器移位操作:(RL,RLC,RR,RRC—4條)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件313.3武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件32邏輯與(ANL),邏輯或(ORL),邏輯異或(XRL):累加器清零/取反操作(CLR,CPL——2條)CLRA——對(duì)累加器清零1
Byte
1
個(gè)TmCPLA——對(duì)累加器按位取非1
Byte1
個(gè)TmTm:機(jī)器周期指令形式ByteTmANL(ORL,XRL)direct,A21ANL(ORL,XRL)direct,#data32ANL(ORL,XRL)A,#data21ANL(ORL,XRL)A,direct21ANL(ORL,XRL)A,@Ri11ANL(ORL,XRL)A,Rn11武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件32邏輯與武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件33【例29】設(shè)Cy=1,(位地址40H)=1,執(zhí)行指令
ANLC,/40H后,
Cy=?,(位地址40H)=?位地址表示法:
位地址40H,位寄存器F0,字節(jié)加位ACC.00思考題:設(shè)累加器A中數(shù)據(jù)為29H,Cy=0,執(zhí)行指令 ORLC,0E3H后,Cy=?1(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件33【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件34例:設(shè)P1為輸入口,P3.0為輸出線,執(zhí)行下列指令:
MOVC,P1.0ANLC,P1.1ANLC,/P1.2MOVP3.0,C所實(shí)現(xiàn)操作的邏輯運(yùn)算式為:
P3.0=(P1.0)∧(P1.1)∧(P1.2)(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件34例:設(shè)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件35邏輯運(yùn)算指令的常見用法邏輯與ANL用于清0或者保留某些位:例:ANLA,#0FH;則(A)=0AH(已知累加器A中已存有數(shù):9AH
)邏輯或ORL用于置1或者保留某些位:例:ORLA,#0FH;則(A)=9FH邏輯異或XRL用于取反或者保留某些位:例:XRLA,#0FH;則(A)=95H(A)10011010#0FH0000111195H10010101(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件35邏輯運(yùn)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件36【例】把累加器A中的低4位數(shù)據(jù)送外部數(shù)據(jù)存儲(chǔ)器的2580H單元中。解:用0FH屏蔽掉高4位,然后傳送,程序設(shè)計(jì)如下:MOVDPTR,#2580HANLA,#0FHMOVX@DPTR,A武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件36【例】武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件37當(dāng)需要只改變字節(jié)數(shù)據(jù)的某幾位,而其余位不變時(shí),不能使用直接傳送方法,只能通過(guò)邏輯運(yùn)算完成。例如:將累加器A的低4位傳送到P1口的低4位,但P1口的高4位需保持不變。對(duì)此可由以下程序段實(shí)現(xiàn):
MOVR0,A;A內(nèi)容暫存R0ANLA,#0FH;屏蔽A的高4位(低4位不變)
ANLP1,#0F0H;屏蔽P1口的低4位(高4位不變)
ORLP1,A;實(shí)現(xiàn)低4位傳送
MOVA,R0;恢復(fù)A的內(nèi)容(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件37當(dāng)需要武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件38思考題1:如何將累加器A中的數(shù)據(jù)高4位清0,低位不變?思考題2:如何將寄存器R2中的數(shù)據(jù)奇數(shù)位取反,偶數(shù)位不變?例
A=01××××××B,×表示隨機(jī)狀態(tài),為1或0,執(zhí)行下述一組指令執(zhí)行后A的值如何?
XRLA,#0C0H
ORLA,#03H
ANLA,#0E7H
解:執(zhí)行上述指令后,A=10×00×11B。(重點(diǎn));將累加器A的內(nèi)容D7、D6取反;將累加器A的內(nèi)容D1、D0置1;將累加器A的內(nèi)容D4、D3清0武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件38思考題武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件39只能對(duì)累加器移位:(RL,RLC,RR,RRC——4條)A.0A.7A.0A.7A.0A.7A.0A.7CYCY
RLARRARLCARRCA注意:執(zhí)行帶進(jìn)位的循環(huán)移位指令之前,必須給CY置位或清零?!h(huán)移位指令組武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件39只能對(duì)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件40例:設(shè)
A=11000101,Cy=0,分別執(zhí)行下列單條指令:(不是順序執(zhí)行)CPLA
RLA
RLCA求:A=?,Cy=?001110100100010110100010101用9位循環(huán)指令實(shí)現(xiàn)多字節(jié)移位
例:編程將寄存器R6R5中的雙字節(jié)數(shù)X左移一位。CLR CMOV A,R5RLC AMOV R5,AMOV A,R6RLC AMOV R6,A0CyR6R5Cy;Cy=0,設(shè)R6=55H,R5=AAH;R6=01010101,R5=10101010,Cy=0;R6=01010101,R5=01010100,Cy=1;R6=10101011,R5=01010100,Cy=0思考題:如何將寄存器R6R5中的雙字節(jié)數(shù)X右移一位。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件40例:設(shè)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件41此類指令改變程序的執(zhí)行順序——改變當(dāng)前PC值無(wú)條件轉(zhuǎn)移:(LJMP,AJMP,SJMP,JMP——4條)條件轉(zhuǎn)移(判斷跳轉(zhuǎn)):(JZ,JNZ,CJNE,DJNZ——8條)子程序調(diào)用及返回:(LCALL,ACALL,RET,RETI——4條)空操作:(NOP——1條)
“耗時(shí)”一個(gè)機(jī)器周期。
donothing!3.3.4控制轉(zhuǎn)移類指令(4種/17條)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件41此類指武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件421.無(wú)條件轉(zhuǎn)移:LJMP,AJMP,SJMP,JMP——4條LJMPaddr16長(zhǎng)跳轉(zhuǎn)指令
——可在64K范圍內(nèi)跳轉(zhuǎn),PC←addr16,3字節(jié)AJMPaddr11絕對(duì)跳轉(zhuǎn)指令
——可在指令所在的2K范圍內(nèi)跳轉(zhuǎn),
PC←(PC)+2,PC10~0←addr11例:2070HAJMP16AH
其11位絕對(duì)轉(zhuǎn)移地址為:00101101010B(16AH)
(PC)=2070H,PC←(PC)+2=2072H
即:0010000001110010B(2072H)
以絕對(duì)轉(zhuǎn)移地址替換PC低11位,得
0010000101101010B(216AH)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件421.無(wú)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件43PC高5位
PC低11位高3位8位
第一字節(jié)
第二字節(jié)操作碼地址域裝入11轉(zhuǎn)移地址
雙字節(jié)直接尋址的無(wú)條件轉(zhuǎn)移指令,指令操作數(shù)域給出11位的跳轉(zhuǎn)地址。它把PC高5位與操作碼的高3位以及指令第二字節(jié)并在一起,構(gòu)成16位的轉(zhuǎn)移址址,如下圖所示,常稱為絕對(duì)轉(zhuǎn)移指令。尋址范圍為該指令地址加2后,向下的2K區(qū)域,其指令碼如下:A10a9a800001a7a6a5a4a3a2a1a0武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件43武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件44
PC高5位(保持不變)
PC低11位A10A9A800
001A7A6A5A4A3A2A1A0操作碼(第一字節(jié))操作數(shù)(第二字節(jié))11位轉(zhuǎn)移地址的形成示意圖程序計(jì)數(shù)器PC絕對(duì)轉(zhuǎn)移指令/短跳轉(zhuǎn)指令A(yù)JMPaddr11;PC+2PC,addr11PC.10~PC.0武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件44P武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件45例如:在程序存儲(chǔ)器0000H單元存放一條指令:LJMP3000H;(PC)←3000H,023000則上電復(fù)位后程序?qū)⑻?000H單元去執(zhí)行用戶程序。(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件45例如:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件46例如:根據(jù)累加器A中命令鍵鍵值,設(shè)計(jì)命令鍵操作程序入口
跳轉(zhuǎn)表:解:
CLRC;清進(jìn)位RLCA;鍵值乘2MOVDPTR,#JPTAB;指向命令鍵跳轉(zhuǎn)表首址JMP@A+DPTR;散轉(zhuǎn)命令鍵入口JPTAB:AJMPCCS0;雙字節(jié)指令A(yù)JMPCCS1AJMPCCS2(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件46例如:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件47SJMPrel相對(duì)尋址短轉(zhuǎn)移指令
——可在當(dāng)前PC-128與+127范圍內(nèi)跳轉(zhuǎn)這是一個(gè)相對(duì)尋址轉(zhuǎn)移指令,rel是有符號(hào)8位補(bǔ)碼
目的地址=(PC)+2+rel其使用過(guò)程有兩種情況:根據(jù)偏移量rel計(jì)算轉(zhuǎn)移目的地址例如:835AHSJMP35H(正數(shù))目的地址=835AH+02H+35H=8391H835AHSJMP0E7H(負(fù)數(shù))目的地址=835AH+02H-19H=8343H武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件47SJM武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件48根據(jù)目的地址計(jì)算偏移量這是編程時(shí)必須解決的問(wèn)題,比較麻煩。假設(shè)SJMP所在地址為源地址,轉(zhuǎn)移地址為目的地址則,向前轉(zhuǎn)移:
rel=目的地址-(源地址+2)=地址差-2
向后轉(zhuǎn)移:
rel=(目的地址-(源地址+2))補(bǔ)
=FFH-(源地址+2-目的地址)+1
=FEH-地址差(地址差=目的地址-源地址)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件48根據(jù)目武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件49注意:
一般匯編程序都有計(jì)算偏移量的功能,用戶在編程時(shí)只需寫轉(zhuǎn)移地址標(biāo)號(hào)就可以了。
為等待中斷或程序結(jié)束,常需要程序“原地踏步”,此時(shí),指令可寫成:
HERE:SJMPHERE或HERE:SJMP$
其中,$代表PC的當(dāng)前值。
(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件49注意:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件50例如:執(zhí)行指令LOOP:SJMPLOOP1如果LOOP的標(biāo)號(hào)值為0100H(即SJMP這條指令的機(jī)器碼存于0100H和0101H兩個(gè)單元中),標(biāo)號(hào)LOOP1值為0123H,即跳轉(zhuǎn)的目標(biāo)地址為0123H,則指令的第二個(gè)字節(jié)(相對(duì)偏移量)應(yīng)為:
rel=0123H-0102H=21H武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件50例如:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件51JMP@A+DPTR變址尋址間接長(zhǎng)跳轉(zhuǎn)指令
——可在以DPTR為基址+A為偏移量之和所指向的64K程序范圍內(nèi)跳轉(zhuǎn)
PC←(A)+(DPTR)
以DPTR為基址,A為變址??蓪?shí)現(xiàn)程序的多分支轉(zhuǎn)移。例如,鍵盤譯碼程序。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件51JMP武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件522.條件轉(zhuǎn)移:JZ,JNZ,CJNE,DJNZ——8條JZrel;若(A)=0,則PC←(PC)+2+rel
若(A)≠0,則PC←(PC)+2JNZrel;若(A)≠0,則PC←(PC)+2+rel
若(A)=0,則PC←(PC)+2——根據(jù)Acc的內(nèi)容是否為0決定是否跳轉(zhuǎn)(1)累加器判0轉(zhuǎn)移指令武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件522.條武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件53(2)數(shù)值比較轉(zhuǎn)移指令
CJNEA,
#data,rel
;累加器內(nèi)容與立即數(shù)不等轉(zhuǎn)移
CJNE
A,
direct,rel
;累加器內(nèi)容與內(nèi)部RAM單元內(nèi)容不等轉(zhuǎn)移
CJNE
Rn,
#data,rel
;寄存器內(nèi)容與立即數(shù)不等轉(zhuǎn)移
CJNE
@Ri,#data,
rel
;內(nèi)部RAM前128單元內(nèi)容與立即數(shù)不等轉(zhuǎn)
——將A(或@Ri,或Rn)與#data(或direct)相比較,其值不相等就跳轉(zhuǎn);相等則不跳轉(zhuǎn),繼續(xù)往下走。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件53(2)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件54【例】設(shè)P1口的P1.0~P1.3為準(zhǔn)備就緒信號(hào)輸入端,當(dāng)該四位為全1時(shí),說(shuō)明各項(xiàng)工作已準(zhǔn)備好,單片機(jī)可順序執(zhí)行,否則,循環(huán)等待。解:MOVA,P1ANLA,#0FHCJNEA,#0FH,WAIT;P1.0~P1.3不為全1時(shí),返回WAIT
MOVA,R2………WAIT:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件54【例】武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件55寄存器減1條件轉(zhuǎn)移指令:DJNZ
Rn,rel;寄存器Rn里的內(nèi)容減1,結(jié)果不等于0就跳轉(zhuǎn);等于0則不跳轉(zhuǎn)繼續(xù)往下走。
即:Rn←(Rn)-1若(Rn)≠0,則PC←(PC)+2+rel
若(Rn)=0,則PC←(PC)+2直接尋址單元減1條件轉(zhuǎn)移指令:DJNZdirect,rel;這是一個(gè)三字節(jié)指令,將direct
里的內(nèi)容減1,結(jié)果不等于0就跳轉(zhuǎn);等于0則不跳轉(zhuǎn)繼續(xù)往下走。即:direct←(direct)-1
若
(direct)≠0,則PC←(PC)+3+rel
若(direct)=0,則PC←(PC)+3(3)減1條件轉(zhuǎn)移指令武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件55寄存器武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件56【例】將8031內(nèi)部RAM的40H~4FH單元置初值#A0H~#AFH。解:MOVR0,#40HMOVR2,#15MOVA,#0A0HLOOP:MOV@R0,AINCR0INCADJNZR2,LOOP………武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件56【例】武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件57
例:用于循環(huán)結(jié)構(gòu)程序。設(shè)要求程序循環(huán)執(zhí)行100次
MOVR2,#100 ;設(shè)循環(huán)計(jì)數(shù)器初值LOOP: … ;多次循環(huán)程序段
DJNZR2,LOOP ;循環(huán)控制 … ;循環(huán)結(jié)束
思考題:當(dāng)循環(huán)計(jì)數(shù)器初值為0,循環(huán)次數(shù)有多少?武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件57 例:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件58例:把2000H開始的外部RAM單元中數(shù)據(jù)送到3000H開始的外部RAM單元中,數(shù)據(jù)個(gè)數(shù)已在內(nèi)部RAM35H單元中。程序如下:
MOVDPTR,#2000H;源數(shù)據(jù)區(qū)首址
PUSHDPL;源首址暫存堆棧
PUSHDPHMOVDPTR,#3000H;目的數(shù)據(jù)區(qū)首址
MOVR2,DPL;目的首址暫存寄存器
MOVR3,DPHLOOP:POPDPH;取回源地址武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件58例:把武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件59POPDPL;MOVXA,@DPTR;取出數(shù)據(jù)
INCDPTR;源地址增量
PUSHDPL;源地址暫存堆棧
PUSHDPHMOVDPL,R2;取回目的地址
MOVDPH,R3MOVX@DPTR,A;數(shù)據(jù)送目的區(qū)
INCDPTR;目的地址增量
MOVR2,DPL;目的地址暫存寄存器武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件59武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件60MOVR3,DPH
DJNZ35H,LOOP;沒完,繼續(xù)循環(huán)
RET;返回主程序可以看出,無(wú)條件轉(zhuǎn)移指令有直接尋址和相對(duì)尋址兩種,而條件轉(zhuǎn)移指令只有相對(duì)尋址一種尋址方式。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件60武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件61子程序是一種重要的程序結(jié)構(gòu)。3.子程序調(diào)用及返回:(LCALL,ACALL,RET,RETI——4條)在一個(gè)程序中經(jīng)常遇到反復(fù)執(zhí)行某程序段的情況,可以把重復(fù)的程序段寫成子程序,通過(guò)主程序調(diào)用它。這樣可以減少編程工作量和縮短程序長(zhǎng)度。調(diào)用和返回構(gòu)成了子程序調(diào)用的完整過(guò)程。為此,必須要有子程序調(diào)用指令和返回指令。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件61子程序武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件62LCALLaddr16子程序長(zhǎng)調(diào)用指令——可在64K范圍內(nèi)調(diào)用子程序ACALLaddr11子程序絕對(duì)調(diào)用指令——可在指令所在的2K范圍內(nèi)調(diào)用子程序RET子程序返回指令——子程序結(jié)束并返回調(diào)用的下一條指令RETI中斷服務(wù)子程序返回指令——中斷結(jié)束/返回被打斷處的下一條指令武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件62LCA武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件63ACALLaddr11;a10a9a810001addr0—7a10a9a810001a7a6a5a4a3a2a1a0武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件63ACA武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件64例如:設(shè)符號(hào)地址“SUBRTN”所對(duì)應(yīng)的程序存儲(chǔ)器 實(shí)際地址為0345H,在(PC)=0123H處執(zhí)行
指令A(yù)CALLSUBRTN執(zhí)行結(jié)果:(PC)+2=0125H,壓入堆棧,
(SP)+1=07H+1=08H單元壓入25H,
(SP)+1=08H+1=09H壓入01H。(SP)=09H,SUBRTN=0345H送PC,(PC)=0345H,
程序轉(zhuǎn)向子程序首地址0345H單元開始執(zhí)行。
這里PC值的高5位內(nèi)容不變,僅把123H變成345H。
斷點(diǎn)在0125H,與起始地址在同一個(gè)2K字節(jié)范圍內(nèi)。(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件64例如:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件65例如:8100HACALL48FH則按前面的方法知被調(diào)用子程序入口地址為848FH由于高5位不變,低11位可變,所以本指令的子程序調(diào)用范圍是8000H~87FFH。例如:(SP)=60H,標(biāo)號(hào)地址START為0100H,標(biāo)號(hào)MIR為8100H,執(zhí)行指令:START:LCALLMIR(3字節(jié)長(zhǎng))結(jié)果:(SP)=62H,(61H)=03H,(62H)=01H,(PC)=8100H因?yàn)椋?PC)=(PC)+3=0103H(SP+1)←(PC)7~0=03H,(SP+1)←01H(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件65例如:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件66位操作類以位為單位進(jìn)行邏輯運(yùn)算及操作。
位變量也稱為布爾變量或開關(guān)變量??煞譃?種:位傳送:(MOV——2條)位清零/置位:(CLR,SETB——4條)位邏輯與/或/非運(yùn)算:(ANL,ORL,CPL——6條)位條件轉(zhuǎn)移:(JC,JNC,JB,JNB,JBC——5條)3.3.5位操作類指令(4種/17條)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件66位操作武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件67位傳送指令(2條):
MOVC,bit——(CY)(bit)
MOVbit,C——(bit)(CY)
注:bit表示位地址兩個(gè)可尋址位之間不能直接傳送,但可以借助CY作中介。
位清零/置位指令(4條):
CLRbit(或C)——(bit或CY)“0”
SETBbit(或C)——(bit或CY)“1”
位邏輯與/或/非指令(6條):
ANLC,bit(或/bit)
ORLC,bit(或/bit)
CPLbit(或C)取反
注:“/bit”表示對(duì)bit位先取反然后再參加運(yùn)算(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件67位傳送武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件68QUVWXZYV(V+W)Q=U?(V+W)?(X+Y)?Z布爾(位)處理示例UBIT20H.0VBIT20H.1WBIT20H.2XBIT20H.3YBIT20H.4ZBIT20H.5QBIT20H.6ORG0000HStart:movC,VorlC,WanlC,UmovF0,CmovC,XorlC,/YanlC,F0anlC,/ZmovQ,Csjmp$END武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件68Q武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件69【例】用軟件實(shí)現(xiàn)下圖所示的P1.0~P1.3間的邏輯運(yùn)算。解:MOVC,P1.1ORLC,P1.2ANLC,P1.0MOVP1.3,CP1.1P1.2P1.0P1.3&武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件69【例】武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件70【例】編程通過(guò)P1.0線連續(xù)輸出256個(gè)高低電平寬度均為5個(gè)機(jī)器周期長(zhǎng)的方波。解:MOVR0,#00HCLRP1.0LOOP:CPLP1.0;1個(gè)機(jī)器周期NOP;1個(gè)機(jī)器周期NOP;1個(gè)機(jī)器周期DJNZR0,LOOP;2個(gè)機(jī)器周期LOOP1:SJMPLOOP1武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件70【例】武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件71位控制轉(zhuǎn)移指令(5條):
JCrel——(Cy)=“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn)
JNCrel——(Cy)“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn)
JBbit,rel——(bit)=“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn)JNBbit,rel
——(bit)“1”就跳轉(zhuǎn);否則不跳轉(zhuǎn)JBC
bit,rel
——(bit)=“1”就先將其清零再跳轉(zhuǎn);否則,不動(dòng)此位也不跳轉(zhuǎn)。1)以C狀態(tài)為條件的轉(zhuǎn)移指令2)以位狀態(tài)為條件的轉(zhuǎn)移指令(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件71位控制武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件72【例】設(shè)片內(nèi)RAM的50H和60H單元中分別存放有兩個(gè)無(wú)符號(hào)數(shù),找出最大者,送70H單元。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件72【例】武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件73解:用比較轉(zhuǎn)移和有進(jìn)位轉(zhuǎn)移指令共同判斷兩數(shù)的
大小,程序設(shè)計(jì)如下:
MOVA,50HCJNEA,60H,LI;比較,不相等轉(zhuǎn)移P.67
MOV70,ASJMPHHLL:JCMM;小于轉(zhuǎn)移P.71
MOV70H,ASJMPHHMM:MOV70H,60HHH:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件73解:用武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件743.3.6I/O口訪問(wèn)指令使用說(shuō)明1.可以對(duì)口進(jìn)行操作的指令MOVPm,AMOVPm,#dataMOVPm,direct80C51有4個(gè)8位的雙向I/O口,對(duì)這些口既可按口尋址,進(jìn)行字節(jié)數(shù)據(jù)操作,也可按口線尋址,進(jìn)行位操作。1)按口尋址的操作指令口輸出指令:MOVA,PmMOVdirect,Pm口輸入指令:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件743.3武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件75MOVC,Pm.n
MOVPm.n,C2)按口線操作的指令口線的輸入/輸出指令SETBPm.n
CLRPm.n
口線的置位清“0”指令A(yù)NLC,Pm.n
ORLC,Pm.n
口線邏輯運(yùn)算指令JBPm.n,relJBCPm.n,rel口線狀態(tài)判跳指令武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件75MOV武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件76由于80C51的4個(gè)I/O口在用于數(shù)據(jù)輸入時(shí),均呈現(xiàn)準(zhǔn)雙向口特性,因此在輸入操作中存在一個(gè)特殊問(wèn)題:2.讀引腳數(shù)據(jù)前先寫“1”當(dāng)把口作為輸入口而進(jìn)行讀操作時(shí),應(yīng)注意區(qū)分讀引腳和讀端口2種情況。如果口線引腳的原狀態(tài)為低電平,則1)封鎖口線,外部輸入無(wú)法進(jìn)入;2)如果外部信號(hào)為高電平,有可能燒壞電路。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件76由于8武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件77因此,要通過(guò)向電路中的鎖存器寫“1”來(lái)關(guān)閉FET。在實(shí)際應(yīng)用中,常用一下小程序段:ORLP1,#03H;將P1.0和P1.3置“1”,準(zhǔn)備輸入信號(hào)MOVA,P1.0;輸入信號(hào)AMOVB,P1.3;輸入信號(hào)B武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件77因此,武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件783.讀端口操作時(shí)的“讀—改—寫”功能這類指令先讀出口的數(shù)據(jù),然后對(duì)數(shù)據(jù)進(jìn)行運(yùn)算或修改,最后再把結(jié)果回送給口。這類指令包括:以口作為目的操作數(shù)的邏輯運(yùn)算:ANL、ORL、XRL對(duì)口線的位操作JBC、CPL、SETB、CLR例:ORLP0,#0FH武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件783.讀ENDEND?保護(hù)現(xiàn)場(chǎng)就是一系列指令方式的進(jìn)棧操作;
而恢復(fù)現(xiàn)場(chǎng)則是一系列指令方式的出棧操作。需要保護(hù)多少數(shù)據(jù)由用戶決定。80武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件堆棧的使用有兩種方式:?一種是自動(dòng)方式,即在調(diào)用子程序或中斷時(shí),進(jìn)行
斷點(diǎn)保護(hù),斷點(diǎn)地址自動(dòng)進(jìn)棧。程序返回時(shí),斷點(diǎn)
地址再自動(dòng)彈回PC。這種操作無(wú)需用戶干預(yù)。?另一種是指令方式,使用專用的堆棧操作指令,
執(zhí)行進(jìn)出棧操作,其進(jìn)棧指令為PUSH,出棧指令
為POP。?保護(hù)現(xiàn)場(chǎng)就是一系列指令方式的進(jìn)棧操作;
而恢復(fù)現(xiàn)場(chǎng)POP01HPOPPSWPOPACCPUSHACCPUSHPSWPUSH01H保護(hù)現(xiàn)場(chǎng):恢復(fù)現(xiàn)場(chǎng):…..81武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件POP01HPUSHACC保護(hù)現(xiàn)場(chǎng):恢復(fù)現(xiàn)場(chǎng):…
×
×SP→56H02H× × × × ×SP→ ×
×
×
×SP→02H×56H解:SBR:MOVSP,#30H;設(shè)棧底
PUSHA PUSHB MOVA,#0 MOVB,#01 … POP B POPA 武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)》教學(xué)課件82【例14】設(shè)
A=02H,B=56H,執(zhí)行下列指令后,
SP=?,A=?,B=?A02H00H01
溫馨提示
- 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ù)覽,若沒有圖紙預(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 三農(nóng)信息化建設(shè)規(guī)劃
- 往來(lái)的商務(wù)文書處理指南
- 分析信息技術(shù)行業(yè)面臨的機(jī)遇和挑戰(zhàn)
- 鋼鐵生產(chǎn)過(guò)程控制作業(yè)指導(dǎo)書
- 智能硬件與物聯(lián)網(wǎng)作業(yè)指導(dǎo)書
- 分析購(gòu)物中心停車導(dǎo)向系統(tǒng)優(yōu)化
- 項(xiàng)目團(tuán)隊(duì)協(xié)作及任務(wù)分配會(huì)議紀(jì)要
- 醫(yī)療器械輕便化設(shè)計(jì)與制造
- 智能家居系統(tǒng)安全指南
- 酒店業(yè)智能化服務(wù)與管理系統(tǒng)開發(fā)與應(yīng)用
- (一模)東北三省三校2025年高三第一次聯(lián)合模擬考試 生物試卷(含答案)
- 金屬熔融崗位培訓(xùn)課件
- 污水處理廠工程設(shè)備安裝施工方案及技術(shù)措施
- 2025年海南??谑兴畡?wù)局招聘事業(yè)單位人員35人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 2025年關(guān)聯(lián)公司資金往來(lái)協(xié)議
- 交警大隊(duì)合同范本
- 2025年江蘇鹽城市交通投資建設(shè)控股集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 事故隱患內(nèi)部舉報(bào)獎(jiǎng)勵(lì)制度
- C型鋼檢驗(yàn)報(bào)告
- 江西省房屋建筑與裝飾工程消耗量定額及統(tǒng)一基價(jià)表
- 衛(wèi)生保潔管理方案及措施
評(píng)論
0/150
提交評(píng)論