版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
?保護(hù)現(xiàn)場就是一系列指令方式的進(jìn)棧操作;
而恢復(fù)現(xiàn)場則是一系列指令方式的出棧操作。需要保護(hù)多少數(shù)據(jù)由用戶決定。1武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件堆棧的使用有兩種方式:?一種是自動方式,即在調(diào)用子程序或中斷時,進(jìn)行
斷點(diǎn)保護(hù),斷點(diǎn)地址自動進(jìn)棧。程序返回時,斷點(diǎn)
地址再自動彈回PC。這種操作無需用戶干預(yù)。?另一種是指令方式,使用專用的堆棧操作指令,
執(zhí)行進(jìn)出棧操作,其進(jìn)棧指令為PUSH,出棧指令
為POP。?保護(hù)現(xiàn)場就是一系列指令方式的進(jìn)棧操作;
而恢復(fù)現(xiàn)場POP01HPOPPSWPOPACCPUSHACCPUSHPSWPUSH01H保護(hù)現(xiàn)場:恢復(fù)現(xiàn)場:…..2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件POP01HPUSHACC保護(hù)現(xiàn)場:恢復(fù)現(xiàn)場:…
×
×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è)計》教學(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è)計》教學(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è)計》教學(xué)課件4【例15武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件5【例16【例17】
設(shè)(30H)=X,(40H)=Y,試?yán)枚褩^(qū)域
實(shí)現(xiàn)30H和40H單元中的數(shù)據(jù)交換。解:堆棧區(qū)是片內(nèi)RAM的一個數(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è)計》教學(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
第三種方法占存儲空間少,執(zhí)行周期短。7武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件【例18】把01H單元內(nèi)容送02H單元,有幾種不同的實(shí)現(xiàn)方法武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件8片外程序存儲器ROMEPROM特殊功能寄存器SFR片內(nèi)RAM128字節(jié)片外數(shù)據(jù)存儲器RAMMOVCMOVXMOVPUSHPOPXCHXCHD數(shù)據(jù)傳送類指令用法小結(jié)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件8片外特殊武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件93.3.武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件10加法運(yùn)算:(ADD——4條)帶進(jìn)位加法運(yùn)算:(ADDC——4條)帶借位減法運(yùn)算:(SUBB——4條)所有的加法(ADD)、帶進(jìn)位加法(ADDC)、帶借位減法(SUBB)運(yùn)算都是以A為一個加數(shù)或被減數(shù),最終結(jié)果也存進(jìn)A。加法(ADD)、帶進(jìn)位加法(ADDC)以及帶借位減法(SUBB)運(yùn)算中,如果產(chǎn)生了進(jìn)位或借位,將自動對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è)計》教學(xué)課件10加法運(yùn)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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)算指令的一個加數(shù)總是A,另一個可由不同尋址方法得到,其結(jié)果再送回A。注意對PSW狀態(tài)字的影響:如果位3有進(jìn)位,AC=1,否則AC=0;如果位7有進(jìn)位,CY=1,否則CY=0;如果位6和位7中,一個有進(jìn)位而另一個沒有,則OV=1,溢出,否則OV=0,無溢出。溢出標(biāo)志的狀態(tài)只有在有符號數(shù)加法運(yùn)算時才有意義。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件11加法指武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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個無符號數(shù),則運(yùn)算結(jié)果是正確的;反之則是錯誤的,因為兩個負(fù)數(shù)相加不可能得到正數(shù)的和。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件12【例1武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件13【例20】兩個8位無符號數(shù)相加的和仍是8位。
如內(nèi)部RAM中40H和41H單元分別存放兩個計數(shù),
相加結(jié)果存放42H單元。MOVR0,#40H;設(shè)置數(shù)據(jù)指針MOVA,@R0;取第一個加數(shù)INCR0;修改數(shù)據(jù)指針ADDA,@R0;兩數(shù)相加INCR0;修改數(shù)據(jù)指針MOV@R0,A;存結(jié)果武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件13【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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)它們對標(biāo)志位的影響同前。唯一特點(diǎn)就是進(jìn)位標(biāo)志參加運(yùn)算。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件14帶進(jìn)位武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件15【例21】雙字節(jié)無符號數(shù)加法(R0R1)+(R2R3)→(R4R5),
R0、R2、R4存放16位數(shù)的高字節(jié),R1、R3、R5存放
低字節(jié)。由于不存在16位數(shù)加法指令,所以只能先加
低8位,后加高8位,而在加高8位時要連低8位相加時產(chǎn)生
的進(jìn)位一起相加。假設(shè)其和不超過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è)計》教學(xué)課件15【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件16【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件17【例23】三字節(jié)無符號數(shù)相加,被加數(shù)放在內(nèi)部RAM20H~22H單元(低位在前),加數(shù)放在內(nèi)部RAM2AH~2CH單元(低位在前)??删幊绦蛉缦拢?/p>
MOVR0,#20H;被加數(shù)首地址
MOVR1,#2AH;加數(shù)首地址
MOVR7,#03H;字節(jié)數(shù)
CLRC;清CYLOOP:MOVA,@R0;取被加數(shù)一個字節(jié)
ADDCA,@R1;與加數(shù)的一個字節(jié)相加
MOV@R0,A;暫存中間結(jié)果(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件17【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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ù)單元,但因為可能產(chǎn)生進(jìn)位,所以三字節(jié)相加完成后,還要進(jìn)行進(jìn)位位的處理,使之也占據(jù)一個單元,因此相加和可能在4個單元中。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件18武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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)算,沒有不帶借位的。對標(biāo)志位的影響同前。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件19帶借位武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件20【例24】雙字節(jié)無符號數(shù)相減(R0R1)-(R2R3)→(R4R5)。
R0、R2、R4存放16位數(shù)的高字節(jié),R1、R3、R5存放低字節(jié),
先減低8位,后減高8位和低位減借位。由于低位開始減時
沒有借位,所以要先清零。其編程如下: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è)計》教學(xué)課件20【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件21加1指武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件22【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件23減1指武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件24單字節(jié)乘/除運(yùn)算:(MUL,DIV——2條)兩個單字節(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è)計》教學(xué)課件24單字節(jié)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件25【例26】利用除法指令把累加器A中的8位二進(jìn)制數(shù)轉(zhuǎn)換為3位BCD數(shù),
并以壓縮形式存放在地址M1、M2單元中。解:累加器A中的8位二進(jìn)制數(shù),先對其除以100(64H),商數(shù)
即為十進(jìn)制的百位數(shù);余數(shù)部分再除以10(0AH),所得商數(shù)
和余數(shù)分別為十進(jìn)制十位數(shù)和個位數(shù),即得到3位BCD數(shù)。
百位數(shù)放在M1中,十位、個位數(shù)壓縮BCD數(shù)放在M2中,十位
與個位數(shù)的壓縮BCD數(shù)的存放是通過SWAP和ADD指令實(shí)現(xiàn)的。
參考程序如下:(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件25【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件26MOVB,#64H;除數(shù)100送BDIVAB;得百位數(shù)MOVM1,A;百位數(shù)存于M1中MOVA,#0AH;取除數(shù)10XCHA,B;上述余數(shù)與除數(shù)交換DIVAB;得十位數(shù)和個位數(shù)SWAPA;十位數(shù)存于A的高4位ADDA,B;組成壓縮BCD數(shù)MOVM2,A;十、個位壓縮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è)計》教學(xué)課件26MOV武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件27【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件28BCD碼是指“用二進(jìn)制表達(dá)的十進(jìn)制數(shù)”。如:
十進(jìn)制數(shù)20可以用二進(jìn)制數(shù)00010100B表示;
也可以用十六進(jìn)制數(shù)14H表示;
還可以用BCD碼00100000B或20H表示。4個二進(jìn)制位就可以表示一位BCD碼:
0000~1001可表示十進(jìn)制數(shù)(BCD數(shù))0~9;
8個二進(jìn)制位就可以表示兩位壓縮的BCD碼:00000000~10011001表示00~99。十進(jìn)制調(diào)整:(DAA——1條)
用于兩個BCD碼之間的相加,這條指令只能跟在ADD或ADDC之后。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件28BCD武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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;例:兩個十進(jìn)制數(shù)“65”與“58”相加,根據(jù)常識,顯然其和應(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è)計》教學(xué)課件29若(A武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件30又如:兩個十進(jìn)制數(shù)“39”與“58”相加,根據(jù)常識,顯然其和應(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è)計》教學(xué)課件30又如:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件313.3武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件32邏輯與(ANL),邏輯或(ORL),邏輯異或(XRL):累加器清零/取反操作(CLR,CPL——2條)CLRA——對累加器清零1
Byte
1
個TmCPLA——對累加器按位取非1
Byte1
個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è)計》教學(xué)課件32邏輯與武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件33【例2武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件34例:設(shè)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件35邏輯運(yùn)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件36【例】把累加器A中的低4位數(shù)據(jù)送外部數(shù)據(jù)存儲器的2580H單元中。解:用0FH屏蔽掉高4位,然后傳送,程序設(shè)計如下:MOVDPTR,#2580HANLA,#0FHMOVX@DPTR,A武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件36【例】武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件37當(dāng)需要只改變字節(jié)數(shù)據(jù)的某幾位,而其余位不變時,不能使用直接傳送方法,只能通過邏輯運(yùn)算完成。例如:將累加器A的低4位傳送到P1口的低4位,但P1口的高4位需保持不變。對此可由以下程序段實(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è)計》教學(xué)課件37當(dāng)需要武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件38思考題武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件39只能對累加器移位:(RL,RLC,RR,RRC——4條)A.0A.7A.0A.7A.0A.7A.0A.7CYCY
RLARRARLCARRCA注意:執(zhí)行帶進(jìn)位的循環(huán)移位指令之前,必須給CY置位或清零。——循環(huán)移位指令組武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件39只能對武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件40例:設(shè)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件41此類指令改變程序的執(zhí)行順序——改變當(dāng)前PC值無條件轉(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條)
“耗時”一個機(jī)器周期。
donothing!3.3.4控制轉(zhuǎn)移類指令(4種/17條)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件41此類指武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件421.無條件轉(zhuǎn)移:LJMP,AJMP,SJMP,JMP——4條LJMPaddr16長跳轉(zhuǎn)指令
——可在64K范圍內(nèi)跳轉(zhuǎn),PC←addr16,3字節(jié)AJMPaddr11絕對跳轉(zhuǎn)指令
——可在指令所在的2K范圍內(nèi)跳轉(zhuǎn),
PC←(PC)+2,PC10~0←addr11例:2070HAJMP16AH
其11位絕對轉(zhuǎn)移地址為:00101101010B(16AH)
(PC)=2070H,PC←(PC)+2=2072H
即:0010000001110010B(2072H)
以絕對轉(zhuǎn)移地址替換PC低11位,得
0010000101101010B(216AH)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件421.無武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件43PC高5位
PC低11位高3位8位
第一字節(jié)
第二字節(jié)操作碼地址域裝入11轉(zhuǎn)移地址
雙字節(jié)直接尋址的無條件轉(zhuǎn)移指令,指令操作數(shù)域給出11位的跳轉(zhuǎn)地址。它把PC高5位與操作碼的高3位以及指令第二字節(jié)并在一起,構(gòu)成16位的轉(zhuǎn)移址址,如下圖所示,常稱為絕對轉(zhuǎn)移指令。尋址范圍為該指令地址加2后,向下的2K區(qū)域,其指令碼如下:A10a9a800001a7a6a5a4a3a2a1a0武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件43武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件44
PC高5位(保持不變)
PC低11位A10A9A800
001A7A6A5A4A3A2A1A0操作碼(第一字節(jié))操作數(shù)(第二字節(jié))11位轉(zhuǎn)移地址的形成示意圖程序計數(shù)器PC絕對轉(zhuǎn)移指令/短跳轉(zhuǎn)指令A(yù)JMPaddr11;PC+2PC,addr11PC.10~PC.0武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件44P武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件45例如:在程序存儲器0000H單元存放一條指令:LJMP3000H;(PC)←3000H,023000則上電復(fù)位后程序?qū)⑻?000H單元去執(zhí)行用戶程序。(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件45例如:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件46例如:根據(jù)累加器A中命令鍵鍵值,設(shè)計命令鍵操作程序入口
跳轉(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è)計》教學(xué)課件46例如:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件47SJMPrel相對尋址短轉(zhuǎn)移指令
——可在當(dāng)前PC-128與+127范圍內(nèi)跳轉(zhuǎn)這是一個相對尋址轉(zhuǎn)移指令,rel是有符號8位補(bǔ)碼
目的地址=(PC)+2+rel其使用過程有兩種情況:根據(jù)偏移量rel計算轉(zhuǎn)移目的地址例如:835AHSJMP35H(正數(shù))目的地址=835AH+02H+35H=8391H835AHSJMP0E7H(負(fù)數(shù))目的地址=835AH+02H-19H=8343H武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件47SJM武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件48根據(jù)目的地址計算偏移量這是編程時必須解決的問題,比較麻煩。假設(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è)計》教學(xué)課件48根據(jù)目武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件49注意:
一般匯編程序都有計算偏移量的功能,用戶在編程時只需寫轉(zhuǎn)移地址標(biāo)號就可以了。
為等待中斷或程序結(jié)束,常需要程序“原地踏步”,此時,指令可寫成:
HERE:SJMPHERE或HERE:SJMP$
其中,$代表PC的當(dāng)前值。
(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件49注意:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件50例如:執(zhí)行指令LOOP:SJMPLOOP1如果LOOP的標(biāo)號值為0100H(即SJMP這條指令的機(jī)器碼存于0100H和0101H兩個單元中),標(biāo)號LOOP1值為0123H,即跳轉(zhuǎn)的目標(biāo)地址為0123H,則指令的第二個字節(jié)(相對偏移量)應(yīng)為:
rel=0123H-0102H=21H武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件50例如:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件51JMP@A+DPTR變址尋址間接長跳轉(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è)計》教學(xué)課件51JMP武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件522.條武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件53(2)武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件54【例】設(shè)P1口的P1.0~P1.3為準(zhǔn)備就緒信號輸入端,當(dāng)該四位為全1時,說明各項工作已準(zhǔn)備好,單片機(jī)可順序執(zhí)行,否則,循環(huán)等待。解:MOVA,P1ANLA,#0FHCJNEA,#0FH,WAIT;P1.0~P1.3不為全1時,返回WAIT
MOVA,R2………WAIT:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件54【例】武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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;這是一個三字節(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è)計》教學(xué)課件55寄存器武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件56【例】武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件57
例:用于循環(huán)結(jié)構(gòu)程序。設(shè)要求程序循環(huán)執(zhí)行100次
MOVR2,#100 ;設(shè)循環(huán)計數(shù)器初值LOOP: … ;多次循環(huán)程序段
DJNZR2,LOOP ;循環(huán)控制 … ;循環(huán)結(jié)束
思考題:當(dāng)循環(huán)計數(shù)器初值為0,循環(huán)次數(shù)有多少?武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件57 例:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件58例:把2000H開始的外部RAM單元中數(shù)據(jù)送到3000H開始的外部RAM單元中,數(shù)據(jù)個數(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è)計》教學(xué)課件58例:把武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件59武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件60MOVR3,DPH
DJNZ35H,LOOP;沒完,繼續(xù)循環(huán)
RET;返回主程序可以看出,無條件轉(zhuǎn)移指令有直接尋址和相對尋址兩種,而條件轉(zhuǎn)移指令只有相對尋址一種尋址方式。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件60武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件61子程序是一種重要的程序結(jié)構(gòu)。3.子程序調(diào)用及返回:(LCALL,ACALL,RET,RETI——4條)在一個程序中經(jīng)常遇到反復(fù)執(zhí)行某程序段的情況,可以把重復(fù)的程序段寫成子程序,通過主程序調(diào)用它。這樣可以減少編程工作量和縮短程序長度。調(diào)用和返回構(gòu)成了子程序調(diào)用的完整過程。為此,必須要有子程序調(diào)用指令和返回指令。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件61子程序武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件62LCALLaddr16子程序長調(diào)用指令——可在64K范圍內(nèi)調(diào)用子程序ACALLaddr11子程序絕對調(diào)用指令——可在指令所在的2K范圍內(nèi)調(diào)用子程序RET子程序返回指令——子程序結(jié)束并返回調(diào)用的下一條指令RETI中斷服務(wù)子程序返回指令——中斷結(jié)束/返回被打斷處的下一條指令武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件62LCA武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件63ACALLaddr11;a10a9a810001addr0—7a10a9a810001a7a6a5a4a3a2a1a0武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件63ACA武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件64例如:設(shè)符號地址“SUBRTN”所對應(yīng)的程序存儲器 實(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,與起始地址在同一個2K字節(jié)范圍內(nèi)。(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件64例如:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件65例如:8100HACALL48FH則按前面的方法知被調(diào)用子程序入口地址為848FH由于高5位不變,低11位可變,所以本指令的子程序調(diào)用范圍是8000H~87FFH。例如:(SP)=60H,標(biāo)號地址START為0100H,標(biāo)號MIR為8100H,執(zhí)行指令:START:LCALLMIR(3字節(jié)長)結(jié)果:(SP)=62H,(61H)=03H,(62H)=01H,(PC)=8100H因為:(PC)=(PC)+3=0103H(SP+1)←(PC)7~0=03H,(SP+1)←01H(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件65例如:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件66位操作類以位為單位進(jìn)行邏輯運(yùn)算及操作。
位變量也稱為布爾變量或開關(guān)變量。可分為4種:位傳送:(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è)計》教學(xué)課件66位操作武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件67位傳送指令(2條):
MOVC,bit——(CY)(bit)
MOVbit,C——(bit)(CY)
注:bit表示位地址兩個可尋址位之間不能直接傳送,但可以借助CY作中介。
位清零/置位指令(4條):
CLRbit(或C)——(bit或CY)“0”
SETBbit(或C)——(bit或CY)“1”
位邏輯與/或/非指令(6條):
ANLC,bit(或/bit)
ORLC,bit(或/bit)
CPLbit(或C)取反
注:“/bit”表示對bit位先取反然后再參加運(yùn)算(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件67位傳送武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件68Q武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件69【例】武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件70【例】編程通過P1.0線連續(xù)輸出256個高低電平寬度均為5個機(jī)器周期長的方波。解:MOVR0,#00HCLRP1.0LOOP:CPLP1.0;1個機(jī)器周期NOP;1個機(jī)器周期NOP;1個機(jī)器周期DJNZR0,LOOP;2個機(jī)器周期LOOP1:SJMPLOOP1武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件70【例】武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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);否則,不動此位也不跳轉(zhuǎn)。1)以C狀態(tài)為條件的轉(zhuǎn)移指令2)以位狀態(tài)為條件的轉(zhuǎn)移指令(重點(diǎn))武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件71位控制武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件72【例】設(shè)片內(nèi)RAM的50H和60H單元中分別存放有兩個無符號數(shù),找出最大者,送70H單元。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件72【例】武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件73解:用比較轉(zhuǎn)移和有進(jìn)位轉(zhuǎn)移指令共同判斷兩數(shù)的
大小,程序設(shè)計如下:
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è)計》教學(xué)課件73解:用武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件743.3.6I/O口訪問指令使用說明1.可以對口進(jìn)行操作的指令MOVPm,AMOVPm,#dataMOVPm,direct80C51有4個8位的雙向I/O口,對這些口既可按口尋址,進(jìn)行字節(jié)數(shù)據(jù)操作,也可按口線尋址,進(jìn)行位操作。1)按口尋址的操作指令口輸出指令:MOVA,PmMOVdirect,Pm口輸入指令:武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件743.3武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(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è)計》教學(xué)課件75MOV武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件76由于80C51的4個I/O口在用于數(shù)據(jù)輸入時,均呈現(xiàn)準(zhǔn)雙向口特性,因此在輸入操作中存在一個特殊問題:2.讀引腳數(shù)據(jù)前先寫“1”當(dāng)把口作為輸入口而進(jìn)行讀操作時,應(yīng)注意區(qū)分讀引腳和讀端口2種情況。如果口線引腳的原狀態(tài)為低電平,則1)封鎖口線,外部輸入無法進(jìn)入;2)如果外部信號為高電平,有可能燒壞電路。武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件76由于8武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件77因此,要通過向電路中的鎖存器寫“1”來關(guān)閉FET。在實(shí)際應(yīng)用中,常用一下小程序段:ORLP1,#03H;將P1.0和P1.3置“1”,準(zhǔn)備輸入信號MOVA,P1.0;輸入信號AMOVB,P1.3;輸入信號B武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件77因此,武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件783.讀端口操作時的“讀—改—寫”功能這類指令先讀出口的數(shù)據(jù),然后對數(shù)據(jù)進(jìn)行運(yùn)算或修改,最后再把結(jié)果回送給口。這類指令包括:以口作為目的操作數(shù)的邏輯運(yùn)算:ANL、ORL、XRL對口線的位操作JBC、CPL、SETB、CLR例:ORLP0,#0FH武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件783.讀ENDEND?保護(hù)現(xiàn)場就是一系列指令方式的進(jìn)棧操作;
而恢復(fù)現(xiàn)場則是一系列指令方式的出棧操作。需要保護(hù)多少數(shù)據(jù)由用戶決定。80武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件堆棧的使用有兩種方式:?一種是自動方式,即在調(diào)用子程序或中斷時,進(jìn)行
斷點(diǎn)保護(hù),斷點(diǎn)地址自動進(jìn)棧。程序返回時,斷點(diǎn)
地址再自動彈回PC。這種操作無需用戶干預(yù)。?另一種是指令方式,使用專用的堆棧操作指令,
執(zhí)行進(jìn)出棧操作,其進(jìn)棧指令為PUSH,出棧指令
為POP。?保護(hù)現(xiàn)場就是一系列指令方式的進(jìn)棧操作;
而恢復(fù)現(xiàn)場POP01HPOPPSWPOPACCPUSHACCPUSHPSWPUSH01H保護(hù)現(xiàn)場:恢復(fù)現(xiàn)場:…..81武漢理工大學(xué)機(jī)電學(xué)院《單片機(jī)應(yīng)用系統(tǒng)設(shè)計》教學(xué)課件POP01HPUSHACC保護(hù)現(xiàn)場:恢復(fù)現(xiàn)場:…
×
×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è)計》教學(xué)課件82【例14】設(shè)
A=02H,B=56H,執(zhí)行下列指令后,
SP=?,A=?,B=?A02H00H01
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年個人房產(chǎn)抵押權(quán)抵押權(quán)轉(zhuǎn)讓合同3篇
- 2025年度個人貸款擔(dān)保轉(zhuǎn)讓合同4篇
- 2025版住宅室內(nèi)精裝修與裝飾工程施工合同5篇
- 人類的起源和發(fā)展課件2
- 出租車行業(yè)環(huán)保措施考核試卷
- 團(tuán)隊建設(shè)力量培養(yǎng)項目計劃書考核試卷
- 印刷業(yè)科技創(chuàng)新與成果轉(zhuǎn)化考核試卷
- 二零二五年度藝術(shù)品交易居間代理合同樣本3篇
- 2025年創(chuàng)業(yè)創(chuàng)新貸款協(xié)議
- 2025年合作知名作者的高需求小說電子書協(xié)議
- 廣東省佛山市2025屆高三高中教學(xué)質(zhì)量檢測 (一)化學(xué)試題(含答案)
- 人教版【初中數(shù)學(xué)】知識點(diǎn)總結(jié)-全面+九年級上冊數(shù)學(xué)全冊教案
- 2024-2025學(xué)年人教版七年級英語上冊各單元重點(diǎn)句子
- 2024年九年級語文中考名著閱讀《儒林外史》考前練附答案
- 抖音麗人行業(yè)短視頻直播項目運(yùn)營策劃方案
- 2024年江蘇揚(yáng)州市邗城文化旅游發(fā)展有限公司招聘筆試參考題庫含答案解析
- 小學(xué)六年級數(shù)學(xué)100道題解分?jǐn)?shù)方程
- 社區(qū)獲得性肺炎護(hù)理查房內(nèi)科
- 淺談提高中學(xué)生歷史學(xué)習(xí)興趣的策略
- 項目管理實(shí)施規(guī)劃-無錫萬象城
- 浙大一院之江院區(qū)就診指南
評論
0/150
提交評論