版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第三章80C51單片機(jī)指令系統(tǒng)
本講教學(xué)內(nèi)容:控制轉(zhuǎn)移類指令第三章80C51單片機(jī)指令系統(tǒng)
本講教學(xué)內(nèi)容:控制轉(zhuǎn)移1控制轉(zhuǎn)移類指令
程序的順序執(zhí)行是由PC自動加1來實現(xiàn)的,但在應(yīng)用系統(tǒng)中,往往會遇到一些情況,需要強(qiáng)迫改變程序執(zhí)行順序,比如調(diào)用子程序,比如根據(jù)檢測值與設(shè)定值的比較結(jié)果要求程序轉(zhuǎn)移到不同的分支入口等。要改變程序的執(zhí)行順序進(jìn)行分支轉(zhuǎn)向,應(yīng)通過強(qiáng)迫修正PC值得方法來實現(xiàn),這就是控制轉(zhuǎn)移類指令的基本功能。80C5設(shè)有豐富的控制轉(zhuǎn)移指令,可分為無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、循環(huán)轉(zhuǎn)移指令、子程序調(diào)用和返回指令及空操作指令等。采用助記符有:AJMP、LJMP、SJMP、JZ、JNZ、CJNE、DJNZ、ACALL、LCALL、RET、RETI、NOP等13種。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);控制轉(zhuǎn)移類指令程序的順序執(zhí)行是由PC自動加12
條件轉(zhuǎn)移指令僅僅在滿足指令中規(guī)定的條件(如累加器內(nèi)容是否為零,兩個操作數(shù)是否相等)時才執(zhí)行無條件轉(zhuǎn)移,否則程序順序執(zhí)行。 6條指令可分為累加器判零轉(zhuǎn)移指令、數(shù)值比較轉(zhuǎn)移指令和減1條件轉(zhuǎn)移指令。條件轉(zhuǎn)移指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);條件轉(zhuǎn)移指令僅僅在滿足指令中規(guī)定的條件(如累3⒈累加器判零轉(zhuǎn)移指令 JZ rel ;若(A)=0,則(PC)=(PC+2)+rel ;若(A)≠0,則(PC)=(PC)+2 JNZ rel ;若(A)≠0,則(PC)=(PC+2)+rel ;若(A)=0,則(PC)=(PC)+2
滿足各自條件時,程序轉(zhuǎn)向指定的目標(biāo)地址執(zhí)行(相當(dāng)于執(zhí)行SJMPrel)。當(dāng)不滿足各自條件時,程序順序往下執(zhí)行。偏移量rel是用補(bǔ)碼形式表示的帶符號的8位數(shù),因此.程序轉(zhuǎn)移的目標(biāo)地址為指令前128B或指令后127B。這些指令執(zhí)行后不影響任何操作數(shù)和標(biāo)志位。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒈累加器判零轉(zhuǎn)移指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);4⒉數(shù)值比較轉(zhuǎn)移指令
CJNEA,direct,relCJNEA,#data,relCJNERn,#data,rel CJNE@Ri,#data,rel其指令格式為:CJNE(操作數(shù)1),(操作數(shù)2),rel 數(shù)值比較轉(zhuǎn)移指令是三字節(jié)指令,是80C51單片微機(jī)指令系統(tǒng)中僅有的四條三個操作數(shù)的指令,在程序設(shè)計中非常有用。同時具有比較轉(zhuǎn)移和數(shù)值大小比較的功能。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒉數(shù)值比較轉(zhuǎn)移指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);5
這組指令的功能是對指定的兩操作數(shù)進(jìn)行比較,即(操作數(shù)1)-(操作數(shù)2),但比較結(jié)果均不改變兩個操作數(shù)的值,僅影響標(biāo)志位CY。
若不等,程序轉(zhuǎn)移到(PC)十3加上第三字節(jié)帶符號的8位偏移量(rel)所指向的目標(biāo)地址;若(操作數(shù)1)>(操作數(shù)2),清進(jìn)位標(biāo)志(CY)。 若(操作數(shù)1)<(操作數(shù)2),則置位進(jìn)位標(biāo)志(CY)。值相等,程序繼續(xù)執(zhí)行。
程序轉(zhuǎn)移的范圍是從(PC)+3為起始的+127~一128B的單元地址。
比如CJNERn,#data,rel指令
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng); 這組指令的功能是對指定的兩操作數(shù)進(jìn)行比較,即(操作數(shù)1)-6例:溫度控制程序
某溫度控制系統(tǒng),A中存溫度采樣值Ta,(20H)=溫度下限值T20,(30H)=溫度上限值T30。若Ta>T30,程序轉(zhuǎn)降溫JW,若Ta<T20,程序轉(zhuǎn)升溫SW,若T30≥Ta≥T20程序轉(zhuǎn)FH返回主程序。
CJNEA,30H,LOOP AJMPFH ;等于T30,轉(zhuǎn)FHLOOP:JNCJW ;大于T30,降溫 CJNEA,20H,LOOP1 AJMPFH ;等于T20,轉(zhuǎn)FHLOOP1:JCSW ;小于T20,升溫 FH:------ ;保溫 JW:------;降溫
SW:------;升溫磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:溫度控制程序磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);7
DJNZ Rn,rel DJNZ direct,rel
指令功能是:每執(zhí)行一次本指令,先將指定的Rn或direct的內(nèi)容減1,再判別其內(nèi)容是否為0。若不為0,轉(zhuǎn)向目標(biāo)地址,繼續(xù)執(zhí)行循環(huán)程序;若為0,則結(jié)束循環(huán)程序段,程序往下執(zhí)行。
減1條件轉(zhuǎn)移指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);
DJNZ Rn,rel減1條件轉(zhuǎn)移指令磨礪當(dāng)如百煉之金8例:某應(yīng)用系統(tǒng)外擴(kuò)了8K字節(jié)RAM,要求把內(nèi)部RAM的20H~2FH單元內(nèi)容發(fā)送到外部RAM的800H~80FH單元中。
執(zhí)行指令:MOV DPTR,#800HMOV R0,#20HMOVR7,#10HAGAIN:MOVA,@R0MOVX@DPTR,AINCR0INCDPTRDJNZR7,AGAIN
?:請將以上循環(huán)控制改用CJNE指令來實現(xiàn)?:請將以上循環(huán)控制改用JZ指令來實現(xiàn)
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:某應(yīng)用系統(tǒng)外擴(kuò)了8K字節(jié)RAM,要求把內(nèi)部RAM的20H9請看KeilC下演示實例,程序段如下:ORG0000HLJMPMAINORG0030HMAIN:MOVA,#01HJZLable1DECAJZLable2NOPLable1:NOPLable2:MOVB,#0FFHEND磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);請看KeilC下演示實例,程序段如下:磨礪當(dāng)如百煉之金,急10
指令SJMPrel AJMPaddr11 LJMPaddrl6 JMP@A+DPTR 這類指令的功能是程序無條件地轉(zhuǎn)移到各自指定的目標(biāo)地址去執(zhí)行,不同的指令形成的目標(biāo)地址不同。
無條件轉(zhuǎn)移指令
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);
指令無條件轉(zhuǎn)移指令 磨礪當(dāng)如百煉之111.長轉(zhuǎn)移指令
LJMP addr16
該指令提供16位地址,目標(biāo)地址由指令第二字節(jié)(高8位地址)和第三字節(jié)(低8位地址)組成。因此,程序轉(zhuǎn)向的目標(biāo)地址可以包含程序存儲器的整個64KB空間。例:設(shè)(PC)=0123H,標(biāo)號ADR所指單元地址為3456H。 執(zhí)行指令∶LJMPADR 執(zhí)行結(jié)果為(PC)=3456H
程序轉(zhuǎn)向3456H單元執(zhí)行。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);1.長轉(zhuǎn)移指令
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);12⒉絕對轉(zhuǎn)移指令
AJMP addr11
該指令提供11位地址,目標(biāo)地址由指令提供的11位地址去取代當(dāng)前PC的低11位,形成新的PC值,即為本絕對轉(zhuǎn)移地址。因此,程序的目標(biāo)地址必須包含AJMP指令后第一條指令的第一個字節(jié)(即當(dāng)前PC地址)在內(nèi)的2KB范圍內(nèi)(即高5位地址必須相同)。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒉絕對轉(zhuǎn)移指令 該指令提供11位地址,目標(biāo)地址由指令提供的13例:設(shè)(PC)=0456H,標(biāo)號ADR所指的單元為0123H。執(zhí)行指令∶AJMPADR 執(zhí)行結(jié)果程序轉(zhuǎn)向為(PC)=0123H。例:0000H2111AJMP0111H ;轉(zhuǎn)移有效07FEH8110AJMP0C10H;當(dāng)前PC值為0800H ;轉(zhuǎn)移有效0100HAJMP0B11H ;轉(zhuǎn)移無效磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:設(shè)(PC)=0456H,標(biāo)號ADR所指的單元為0123H143.短轉(zhuǎn)移指令:
SJMPrel其目標(biāo)地址是由當(dāng)前PC(程序計數(shù)器)值和指令的第二字節(jié)提供的8位帶符號的相對地址相加而成的。指令可轉(zhuǎn)向指令前128B或指令后127B。rel為8位帶符號數(shù)。 (PC)=(PC)+2 +rel磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);3.短轉(zhuǎn)移指令:
其目標(biāo)地址是由當(dāng)前PC(程序計數(shù)器)值15例:2100H 80
FEHERE:SJMPHERErel:2100H-2102H=FFFEH。高8位是FFH,表示負(fù)跳,偏移量為FEH(-2)。這是一條原地踏步指令??捎米鞒绦蚪Y(jié)束或中斷等待。
當(dāng)相對地址為FEH(-02)時,SJMP指令實現(xiàn)原地轉(zhuǎn)圈的運(yùn)行狀態(tài)。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:2100H 80FEHERE:SJMP16⒋間接轉(zhuǎn)移指令 JMP @A+DPTR
其目標(biāo)地址是將累加器A中的8位無符號數(shù)與數(shù)據(jù)指針DPTR的內(nèi)容相加而得(在程序運(yùn)行時動態(tài)決定)。相加運(yùn)算不影響累加器A和數(shù)據(jù)指針DPTR的原內(nèi)容。若相加的結(jié)果大于64KB,則從程序存儲器的零地址往下延續(xù)。當(dāng)DPTR的值固定,而給A賦以不同的值,即可實現(xiàn)程序的多分支轉(zhuǎn)移。如實現(xiàn)鍵盤譯碼散轉(zhuǎn)功能。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒋間接轉(zhuǎn)移指令 磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);17例:設(shè)(A)=5,(DPTR)=4567H。 執(zhí)行指令為JMP@A+DPTR 執(zhí)行結(jié)果為: (PC)=(A)+(DPTR)=05H+4567H=456CH
程序轉(zhuǎn)向456CH單元執(zhí)行。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:設(shè)(A)=5,(DPTR)=4567H。磨礪當(dāng)如百煉之金18⒈絕對調(diào)用指令
ACALL addr11無條件地調(diào)用首址為addr11處的子程序。操作不影響標(biāo)志位。斷點地址自動壓棧:把PC加2以獲得下一條指令的地址(當(dāng)前PC),將這16位的地址壓進(jìn)堆棧(先PCL,后PCH),同時棧指針加2。然后將指令提供的11位目標(biāo)地址,送入PC10~PC0,而PC15~PC11的值不變,程序轉(zhuǎn)向子程序的首地址開始執(zhí)行。目標(biāo)地址由指令第一字節(jié)的高三位和指令第二字節(jié)所組成;所調(diào)用的子程序的首地址必須與ACALL后面指令的第一個字節(jié)在同一個2KB區(qū)域內(nèi)。
3.5.4子程序調(diào)用指令子程序調(diào)用與返回指令組磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒈絕對調(diào)用指令無條件地調(diào)用首址為addr11處的子程序。操19例:設(shè)(SP)=60H,(PC)=0123H,子程序SUBRTN的首地址為0456H。執(zhí)行指令為ACALLSUBRTN
執(zhí)行結(jié)果為(PC)+2=0123H+2=0125H→(PC),將(PC)=0125H壓入堆棧:25H壓入(SP)+1=61H,01H壓入(SP)十l=62H,此時(SP)=62H。
addr11PC10–0, PC=0456H磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:設(shè)(SP)=60H,(PC)=0123H,子程序SUBR20⒉長調(diào)用指令
LCALL addr16無條件地調(diào)用首址為addr16處的子程序。操作不影響標(biāo)志位。
斷點地址自動壓棧:把PC加3以獲得下一條指令的地址,將這16位的地址壓進(jìn)堆棧(先PCL,后PCH),同時棧指針加2。將指令第2和第3字節(jié)所提供的16位目標(biāo)地址,送PC15~PC0,程序轉(zhuǎn)向子程序的首地址開始執(zhí)行。所調(diào)用的子程序的首地址可以在64KB范圍內(nèi)。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒉長調(diào)用指令
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);21例:設(shè)(SP)=60H,(PC)=0123H,子程序SUBRTN的首地址為3456H。 執(zhí)行指令為LCALLSUBRTN
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:設(shè)(SP)=60H,(PC)=0123H,子程序SUBR22例:設(shè)(SP)=62H,RAM中的(62H)=0lH,(61H)=26H。子程序SUBRTN的首地址為3456H。執(zhí)行指令:LCALLSUBRTN執(zhí)行結(jié)果:(PC)+3=0123H+3=0126H→(PC)。將(PC)壓入堆棧:26H壓入(SP)+l=61H中,01H壓入(SP)+1=62H中,此時(SP)=62H。(PC)=3456H,執(zhí)行子程序。3.5.5返回指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:設(shè)(SP)=62H,RAM中的(62H)=0lH,(6123思考:AJMPLJMP與ACALLLCALL的區(qū)別?
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);思考:AJMPLJMP與ACALLLCALL的區(qū)24
3.子程序返回指令 RET 執(zhí)行時表示結(jié)束子程序,返回調(diào)用指令A(yù)CALL或LCALL的下一條指令(即斷點地址),繼續(xù)往下執(zhí)行。 執(zhí)行時將棧頂?shù)臄帱c地址送入PC(先PCH,后PCL),并把棧指針減2。
3.5.5返回指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);
3.子程序返回指令3.5.5返回指令磨礪當(dāng)如百煉之金,254.中斷返回指令
RETI它除了執(zhí)行從中斷服務(wù)程序返回中斷時保護(hù)的斷點處繼續(xù)執(zhí)行程序(類似RET功能)外,并清除內(nèi)部相應(yīng)的中斷狀態(tài)寄存器。 因此,中斷服務(wù)程序必須以RETI為結(jié)束指令。CPU執(zhí)行RETI指令后至少再執(zhí)行一條指令,才能響應(yīng)新的中斷請求。利用這一特點,可用來實現(xiàn)單片微機(jī)的單步操作。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);4.中斷返回指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);26 例:設(shè)(SP)=62H,中斷時斷點是0123H,RAM中的(62H)=0lH,(61H)=23H。 執(zhí)行指令RETI結(jié)果為:(SP)=60H,PC=0123H
程序回到斷點0123H處繼續(xù)執(zhí)行。清除內(nèi)部相應(yīng)的中斷狀態(tài)寄存器。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng); 例:設(shè)(SP)=62H,中斷時斷點是0123H,R27例:從P1.7引腳輸出5個方波MOVR2,#11 ;5個方波,10個狀態(tài)LOP:CPLP1.7 ;P1.7狀態(tài)變反LCALLDelayDJNZR2,LOPHERE:SJMPHEREDelay:MOVR5,#255LOOP2:MOVR4,#255LOOP1:NOPNOPDJNZR4,LOOP1DJNZR5,LOOP2RET磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:從P1.7引腳輸出5個方波磨礪當(dāng)如百煉之金,急就者,非28第三章80C51單片機(jī)指令系統(tǒng)
本講教學(xué)內(nèi)容:位操作指令第三章80C51單片機(jī)指令系統(tǒng)
本講教學(xué)內(nèi)容:29布爾(位)操作類指令80C51內(nèi)部有一個布爾(位)處理器,具有較強(qiáng)的布爾變量處理能力。布爾處理器實際上是一位的微處理機(jī),它以進(jìn)位標(biāo)志CY作為位累加器,以內(nèi)部RAM的20H至2FH單元及部分特殊功能寄存器為位存儲器,以P0、P1、P2、P3為位I/O。對位地址空間具有豐富的位操作指令,包括布爾傳送指令、布爾狀態(tài)控制指令、位邏輯操作指令及位條件轉(zhuǎn)移指令。助記符有MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB、JBC等11種。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);布爾(位)操作類指令80C51內(nèi)部有一個布爾30
布爾操作類指令中位地址可用以下多種方式表示,這些方式均能為80C51的匯編程序所識別:直接用位地址0~255或0~FFH表示;采用字節(jié)地址的位數(shù)方式表示,兩者之間用“.”隔開,如: 20H.0;1FH.7等采用字節(jié)寄存器名加位數(shù)表示,兩者之間用“.”隔開,如: P1.5;PSW.5等;采用位寄存器的定義名稱表示,如:F0。如:位地址D5H、F0、D0.5、PSW.5等表示的是同一位。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng); 布爾操作類指令中位地址可用以下多種方式表示,這些方式均能為31
MOVC,bit ;(C)←(bit)MOVbit,C ;(bit)←(C)
功能:將源操作數(shù)(位地址或布爾累加器)送到目的操作數(shù)(布爾累加器或位地址)中去。
布爾傳送指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng); MOVC,bit ;(C)←(32 例:設(shè)(C)=1,執(zhí)行指令:MOVP1.3,C,執(zhí)行結(jié)果為P1.3口線輸出“l(fā)”。
例:設(shè)P1口的內(nèi)容為00111010B,執(zhí)行指令:MOVC,P1.3,執(zhí)行結(jié)果為(C)=1。
3.6.1布爾傳送指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng); 例:設(shè)(C)=1,3.6.1布爾傳送指令磨礪當(dāng)如百煉之金33
1.位清除(CLR)指令
CLRC ;(C)←0CLRbit ;(bit)←0
功能:將C或指定位(bit)清0。
例:設(shè)P1口的內(nèi)容為11111010B,執(zhí)行指令為CLRP1.0后,(P1)=11111010B。2.位置1(SETB)指令SETB C ;(C)←lSETB bit ;(bit)←1
功能:將C或指定位(bit)置1。
布爾狀態(tài)控制指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);
1.位清除(CLR)指令布爾狀態(tài)控制指令磨礪當(dāng)如百煉34 例:設(shè)(C)=0,P3口的內(nèi)容為11111010
B。執(zhí)行指令為SETBP3.0SETBC執(zhí)行結(jié)果為(C)=1,P3.0=1,即P3=11111011B。3.位取反(CPL)指令
CPLC ;(C)←(/C)CPLbit ;(bit)←(/bit)
功能:將C或指定位(bit)取反。例:設(shè)(C)=0,P1口的內(nèi)容為00111010B。執(zhí)行指令為CPL P1.0 CPL C執(zhí)行結(jié)果為(C)=1,P1.0=l,即P0=00111011B。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng); 例:設(shè)(C)=0,P3口的內(nèi)容為111110135
1.位邏輯“與”(ANL)操作指令
ANLC,bit ;(C)←(C)·(bit) ANLC,/bit ;(C)←(C)·(bit)功能:將指定位(bit)的內(nèi)容或指定位內(nèi)容取反后(原內(nèi)容不變)與C的內(nèi)容進(jìn)行邏輯與運(yùn)算,結(jié)果仍存于C中。例:設(shè)(C)=l,P1口的內(nèi)容為11111011B,(ACC.7)=0。 執(zhí)行指令為ANLC,P1.0 ;(C)=1 ANLC,ACC.7 ;(C)=0
執(zhí)行結(jié)果為(C)=0。
布爾(位)邏輯操作指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);
1.位邏輯“與”(ANL)操作指令布爾(位)邏輯操作指令36
1.位邏輯“與”(ANL)操作指令
ANLC,bit ;(C)←(C)·(bit) ANLC,/bit ;(C)←(C)·(bit)功能:將指定位(bit)的內(nèi)容或指定位內(nèi)容取反后(原內(nèi)容不變)與C的內(nèi)容進(jìn)行邏輯與運(yùn)算,結(jié)果仍存于C中。例:設(shè)(C)=l,P1口的內(nèi)容為11111011B,(ACC.7)=0。 執(zhí)行指令為ANLC,P1.0 ;(C)=1 ANLC,ACC.7 ;(C)=0
執(zhí)行結(jié)果為(C)=0。
布爾(位)邏輯操作指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);
1.位邏輯“與”(ANL)操作指令布爾(位)邏輯操作指令372.位邏輯“或”(ORL)操作指令
ORL C,bit ;(C)←C)十(bit) ORL C,/bit ;(C)←(C)十(bit)
功能:將指定位(bit)的內(nèi)容或指定位內(nèi)容取反后(原內(nèi)容不變)與C的內(nèi)容進(jìn)行邏輯或運(yùn)算。結(jié)果仍存于C中。例:設(shè)(C)=1,P1口的內(nèi)容為11111011B,(ACC.7)=0。執(zhí)行的指令為ORLC,P1.0 ;(C)=1 ORLC,ACC7 ;(C)=1執(zhí)行結(jié)果為(C)=1。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);2.位邏輯“或”(ORL)操作指令 磨礪當(dāng)如百煉之金,急就38
l、布爾累加器條件轉(zhuǎn)移指令
JC relJNC rel
功能:對布爾累加器C進(jìn)行檢測,當(dāng)C=1或C=0時,程序轉(zhuǎn)向當(dāng)前PC值(轉(zhuǎn)移指令地址+2)與第二字節(jié)中帶符號的相對地址(rel)之和的目標(biāo)地址,否則程序往下順序執(zhí)行。因此轉(zhuǎn)移的范圍是-128~+127B。
布爾(位)條件轉(zhuǎn)移指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);
l、布爾累加器條件轉(zhuǎn)移指令布爾(位)條件轉(zhuǎn)移指令磨礪當(dāng)如百39例:設(shè)(C)=0執(zhí)行指令: JCLABEL1 ;(C)=0,則程序順序往下執(zhí) ;行 CPLC ;(C)=1,程序轉(zhuǎn)LABEL2 JCLABEL2;以后,進(jìn)位位取反變?yōu)閘,程序轉(zhuǎn)向LABEL2單元執(zhí)行。
例:設(shè)(C)=1。執(zhí)行指令:JNC LABEL1 CLRC JNCLABEL2 ;以后,進(jìn)位位清為0,程序轉(zhuǎn)向LABEL2單元執(zhí)行。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:設(shè)(C)=0磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);402.位測試條件轉(zhuǎn)移指令
JB bit,rel JNB bit,rel功能:檢測指定位,當(dāng)位變量分別為1或0時,程序轉(zhuǎn)向當(dāng)前PC值(轉(zhuǎn)移指令地址+2)與第二字節(jié)中帶符號的相對地址(rel)之和的目標(biāo)地址,否則程序往下順序執(zhí)行。因此轉(zhuǎn)移的范圍是–128~127B。操作不影響標(biāo)志位。例:設(shè)累加器A中的內(nèi)容為FEH(11111110B)。執(zhí)行指令為JBACC.0,LABEL1;ACC.0=0,程序順序往下執(zhí)行JBACC.1,LABEL2;ACC.1=1,轉(zhuǎn)LABEL2單元執(zhí)行磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);2.位測試條件轉(zhuǎn)移指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);41例:設(shè)累加器A中的內(nèi)容為FEH(11111110B)執(zhí)行指令:JNB ACC.l,LABEL1
;ACC.1=1,程序順序往下執(zhí)行 JNB ACC.0,LABEL2
;ACC.0=0,程序轉(zhuǎn)向LABEL2 ;單元執(zhí)行。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:設(shè)累加器A中的內(nèi)容為FEH(1111111423.位測試條件轉(zhuǎn)移并清0指令
JBCrel功能:檢測指定位,當(dāng)位變量為1時,則將該位清0,且程序轉(zhuǎn)向當(dāng)前PC值(轉(zhuǎn)移指令地址+2)與第二字節(jié)中帶符號的相對地址(rel)之和的目標(biāo)地址,否則程序往下順序執(zhí)行。因此轉(zhuǎn)移的范圍是–128~127B。 操作不影響標(biāo)志位。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);3.位測試條件轉(zhuǎn)移并清0指令磨礪當(dāng)如百煉之金,急就者,非43例:設(shè)累加器A中的內(nèi)容為7FH(01111111B)。執(zhí)行指令∶ JBC ACC.7,LABEL1 ;ACC.7=0JBC ACC.6,LABEL2 ;ACC.6=1,程序轉(zhuǎn)向 ;LABEL2單元執(zhí)行, ;并將ACC.6位清為0。執(zhí)行結(jié)果∶(A)=3FH(00111111B)。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);44例11:散轉(zhuǎn)程序設(shè)計,根據(jù)A中的數(shù)值實現(xiàn)程序散轉(zhuǎn) MOV R1,A;(A)×3 RL A ADD A,R1 MOVDPTR,#TABLE;散轉(zhuǎn)表首地址送DPTR JMP @A+DPTRTABLE:LJMPPM0 ;轉(zhuǎn)程序PM0TABLE+3:LJMPPM1 ;轉(zhuǎn)程序PM1 ------PM0:-----PM1:-----;LJMP是一個三字節(jié)指令,因此轉(zhuǎn)移指令入口;地址相隔3個字節(jié),A中內(nèi)容需是3的倍數(shù)。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例11:散轉(zhuǎn)程序設(shè)計,根據(jù)A中的數(shù)值實現(xiàn)程序散轉(zhuǎn) 45END磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);END磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);46第三章80C51單片機(jī)指令系統(tǒng)
本講教學(xué)內(nèi)容:控制轉(zhuǎn)移類指令第三章80C51單片機(jī)指令系統(tǒng)
本講教學(xué)內(nèi)容:控制轉(zhuǎn)移47控制轉(zhuǎn)移類指令
程序的順序執(zhí)行是由PC自動加1來實現(xiàn)的,但在應(yīng)用系統(tǒng)中,往往會遇到一些情況,需要強(qiáng)迫改變程序執(zhí)行順序,比如調(diào)用子程序,比如根據(jù)檢測值與設(shè)定值的比較結(jié)果要求程序轉(zhuǎn)移到不同的分支入口等。要改變程序的執(zhí)行順序進(jìn)行分支轉(zhuǎn)向,應(yīng)通過強(qiáng)迫修正PC值得方法來實現(xiàn),這就是控制轉(zhuǎn)移類指令的基本功能。80C5設(shè)有豐富的控制轉(zhuǎn)移指令,可分為無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、循環(huán)轉(zhuǎn)移指令、子程序調(diào)用和返回指令及空操作指令等。采用助記符有:AJMP、LJMP、SJMP、JZ、JNZ、CJNE、DJNZ、ACALL、LCALL、RET、RETI、NOP等13種。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);控制轉(zhuǎn)移類指令程序的順序執(zhí)行是由PC自動加148
條件轉(zhuǎn)移指令僅僅在滿足指令中規(guī)定的條件(如累加器內(nèi)容是否為零,兩個操作數(shù)是否相等)時才執(zhí)行無條件轉(zhuǎn)移,否則程序順序執(zhí)行。 6條指令可分為累加器判零轉(zhuǎn)移指令、數(shù)值比較轉(zhuǎn)移指令和減1條件轉(zhuǎn)移指令。條件轉(zhuǎn)移指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);條件轉(zhuǎn)移指令僅僅在滿足指令中規(guī)定的條件(如累49⒈累加器判零轉(zhuǎn)移指令 JZ rel ;若(A)=0,則(PC)=(PC+2)+rel ;若(A)≠0,則(PC)=(PC)+2 JNZ rel ;若(A)≠0,則(PC)=(PC+2)+rel ;若(A)=0,則(PC)=(PC)+2
滿足各自條件時,程序轉(zhuǎn)向指定的目標(biāo)地址執(zhí)行(相當(dāng)于執(zhí)行SJMPrel)。當(dāng)不滿足各自條件時,程序順序往下執(zhí)行。偏移量rel是用補(bǔ)碼形式表示的帶符號的8位數(shù),因此.程序轉(zhuǎn)移的目標(biāo)地址為指令前128B或指令后127B。這些指令執(zhí)行后不影響任何操作數(shù)和標(biāo)志位。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒈累加器判零轉(zhuǎn)移指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);50⒉數(shù)值比較轉(zhuǎn)移指令
CJNEA,direct,relCJNEA,#data,relCJNERn,#data,rel CJNE@Ri,#data,rel其指令格式為:CJNE(操作數(shù)1),(操作數(shù)2),rel 數(shù)值比較轉(zhuǎn)移指令是三字節(jié)指令,是80C51單片微機(jī)指令系統(tǒng)中僅有的四條三個操作數(shù)的指令,在程序設(shè)計中非常有用。同時具有比較轉(zhuǎn)移和數(shù)值大小比較的功能。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒉數(shù)值比較轉(zhuǎn)移指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);51
這組指令的功能是對指定的兩操作數(shù)進(jìn)行比較,即(操作數(shù)1)-(操作數(shù)2),但比較結(jié)果均不改變兩個操作數(shù)的值,僅影響標(biāo)志位CY。
若不等,程序轉(zhuǎn)移到(PC)十3加上第三字節(jié)帶符號的8位偏移量(rel)所指向的目標(biāo)地址;若(操作數(shù)1)>(操作數(shù)2),清進(jìn)位標(biāo)志(CY)。 若(操作數(shù)1)<(操作數(shù)2),則置位進(jìn)位標(biāo)志(CY)。值相等,程序繼續(xù)執(zhí)行。
程序轉(zhuǎn)移的范圍是從(PC)+3為起始的+127~一128B的單元地址。
比如CJNERn,#data,rel指令
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng); 這組指令的功能是對指定的兩操作數(shù)進(jìn)行比較,即(操作數(shù)1)-52例:溫度控制程序
某溫度控制系統(tǒng),A中存溫度采樣值Ta,(20H)=溫度下限值T20,(30H)=溫度上限值T30。若Ta>T30,程序轉(zhuǎn)降溫JW,若Ta<T20,程序轉(zhuǎn)升溫SW,若T30≥Ta≥T20程序轉(zhuǎn)FH返回主程序。
CJNEA,30H,LOOP AJMPFH ;等于T30,轉(zhuǎn)FHLOOP:JNCJW ;大于T30,降溫 CJNEA,20H,LOOP1 AJMPFH ;等于T20,轉(zhuǎn)FHLOOP1:JCSW ;小于T20,升溫 FH:------ ;保溫 JW:------;降溫
SW:------;升溫磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:溫度控制程序磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);53
DJNZ Rn,rel DJNZ direct,rel
指令功能是:每執(zhí)行一次本指令,先將指定的Rn或direct的內(nèi)容減1,再判別其內(nèi)容是否為0。若不為0,轉(zhuǎn)向目標(biāo)地址,繼續(xù)執(zhí)行循環(huán)程序;若為0,則結(jié)束循環(huán)程序段,程序往下執(zhí)行。
減1條件轉(zhuǎn)移指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);
DJNZ Rn,rel減1條件轉(zhuǎn)移指令磨礪當(dāng)如百煉之金54例:某應(yīng)用系統(tǒng)外擴(kuò)了8K字節(jié)RAM,要求把內(nèi)部RAM的20H~2FH單元內(nèi)容發(fā)送到外部RAM的800H~80FH單元中。
執(zhí)行指令:MOV DPTR,#800HMOV R0,#20HMOVR7,#10HAGAIN:MOVA,@R0MOVX@DPTR,AINCR0INCDPTRDJNZR7,AGAIN
?:請將以上循環(huán)控制改用CJNE指令來實現(xiàn)?:請將以上循環(huán)控制改用JZ指令來實現(xiàn)
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:某應(yīng)用系統(tǒng)外擴(kuò)了8K字節(jié)RAM,要求把內(nèi)部RAM的20H55請看KeilC下演示實例,程序段如下:ORG0000HLJMPMAINORG0030HMAIN:MOVA,#01HJZLable1DECAJZLable2NOPLable1:NOPLable2:MOVB,#0FFHEND磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);請看KeilC下演示實例,程序段如下:磨礪當(dāng)如百煉之金,急56
指令SJMPrel AJMPaddr11 LJMPaddrl6 JMP@A+DPTR 這類指令的功能是程序無條件地轉(zhuǎn)移到各自指定的目標(biāo)地址去執(zhí)行,不同的指令形成的目標(biāo)地址不同。
無條件轉(zhuǎn)移指令
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);
指令無條件轉(zhuǎn)移指令 磨礪當(dāng)如百煉之571.長轉(zhuǎn)移指令
LJMP addr16
該指令提供16位地址,目標(biāo)地址由指令第二字節(jié)(高8位地址)和第三字節(jié)(低8位地址)組成。因此,程序轉(zhuǎn)向的目標(biāo)地址可以包含程序存儲器的整個64KB空間。例:設(shè)(PC)=0123H,標(biāo)號ADR所指單元地址為3456H。 執(zhí)行指令∶LJMPADR 執(zhí)行結(jié)果為(PC)=3456H
程序轉(zhuǎn)向3456H單元執(zhí)行。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);1.長轉(zhuǎn)移指令
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);58⒉絕對轉(zhuǎn)移指令
AJMP addr11
該指令提供11位地址,目標(biāo)地址由指令提供的11位地址去取代當(dāng)前PC的低11位,形成新的PC值,即為本絕對轉(zhuǎn)移地址。因此,程序的目標(biāo)地址必須包含AJMP指令后第一條指令的第一個字節(jié)(即當(dāng)前PC地址)在內(nèi)的2KB范圍內(nèi)(即高5位地址必須相同)。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒉絕對轉(zhuǎn)移指令 該指令提供11位地址,目標(biāo)地址由指令提供的59例:設(shè)(PC)=0456H,標(biāo)號ADR所指的單元為0123H。執(zhí)行指令∶AJMPADR 執(zhí)行結(jié)果程序轉(zhuǎn)向為(PC)=0123H。例:0000H2111AJMP0111H ;轉(zhuǎn)移有效07FEH8110AJMP0C10H;當(dāng)前PC值為0800H ;轉(zhuǎn)移有效0100HAJMP0B11H ;轉(zhuǎn)移無效磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:設(shè)(PC)=0456H,標(biāo)號ADR所指的單元為0123H603.短轉(zhuǎn)移指令:
SJMPrel其目標(biāo)地址是由當(dāng)前PC(程序計數(shù)器)值和指令的第二字節(jié)提供的8位帶符號的相對地址相加而成的。指令可轉(zhuǎn)向指令前128B或指令后127B。rel為8位帶符號數(shù)。 (PC)=(PC)+2 +rel磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);3.短轉(zhuǎn)移指令:
其目標(biāo)地址是由當(dāng)前PC(程序計數(shù)器)值61例:2100H 80
FEHERE:SJMPHERErel:2100H-2102H=FFFEH。高8位是FFH,表示負(fù)跳,偏移量為FEH(-2)。這是一條原地踏步指令。可用作程序結(jié)束或中斷等待。
當(dāng)相對地址為FEH(-02)時,SJMP指令實現(xiàn)原地轉(zhuǎn)圈的運(yùn)行狀態(tài)。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:2100H 80FEHERE:SJMP62⒋間接轉(zhuǎn)移指令 JMP @A+DPTR
其目標(biāo)地址是將累加器A中的8位無符號數(shù)與數(shù)據(jù)指針DPTR的內(nèi)容相加而得(在程序運(yùn)行時動態(tài)決定)。相加運(yùn)算不影響累加器A和數(shù)據(jù)指針DPTR的原內(nèi)容。若相加的結(jié)果大于64KB,則從程序存儲器的零地址往下延續(xù)。當(dāng)DPTR的值固定,而給A賦以不同的值,即可實現(xiàn)程序的多分支轉(zhuǎn)移。如實現(xiàn)鍵盤譯碼散轉(zhuǎn)功能。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒋間接轉(zhuǎn)移指令 磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);63例:設(shè)(A)=5,(DPTR)=4567H。 執(zhí)行指令為JMP@A+DPTR 執(zhí)行結(jié)果為: (PC)=(A)+(DPTR)=05H+4567H=456CH
程序轉(zhuǎn)向456CH單元執(zhí)行。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:設(shè)(A)=5,(DPTR)=4567H。磨礪當(dāng)如百煉之金64⒈絕對調(diào)用指令
ACALL addr11無條件地調(diào)用首址為addr11處的子程序。操作不影響標(biāo)志位。斷點地址自動壓棧:把PC加2以獲得下一條指令的地址(當(dāng)前PC),將這16位的地址壓進(jìn)堆棧(先PCL,后PCH),同時棧指針加2。然后將指令提供的11位目標(biāo)地址,送入PC10~PC0,而PC15~PC11的值不變,程序轉(zhuǎn)向子程序的首地址開始執(zhí)行。目標(biāo)地址由指令第一字節(jié)的高三位和指令第二字節(jié)所組成;所調(diào)用的子程序的首地址必須與ACALL后面指令的第一個字節(jié)在同一個2KB區(qū)域內(nèi)。
3.5.4子程序調(diào)用指令子程序調(diào)用與返回指令組磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒈絕對調(diào)用指令無條件地調(diào)用首址為addr11處的子程序。操65例:設(shè)(SP)=60H,(PC)=0123H,子程序SUBRTN的首地址為0456H。執(zhí)行指令為ACALLSUBRTN
執(zhí)行結(jié)果為(PC)+2=0123H+2=0125H→(PC),將(PC)=0125H壓入堆棧:25H壓入(SP)+1=61H,01H壓入(SP)十l=62H,此時(SP)=62H。
addr11PC10–0, PC=0456H磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:設(shè)(SP)=60H,(PC)=0123H,子程序SUBR66⒉長調(diào)用指令
LCALL addr16無條件地調(diào)用首址為addr16處的子程序。操作不影響標(biāo)志位。
斷點地址自動壓棧:把PC加3以獲得下一條指令的地址,將這16位的地址壓進(jìn)堆棧(先PCL,后PCH),同時棧指針加2。將指令第2和第3字節(jié)所提供的16位目標(biāo)地址,送PC15~PC0,程序轉(zhuǎn)向子程序的首地址開始執(zhí)行。所調(diào)用的子程序的首地址可以在64KB范圍內(nèi)。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒉長調(diào)用指令
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);67例:設(shè)(SP)=60H,(PC)=0123H,子程序SUBRTN的首地址為3456H。 執(zhí)行指令為LCALLSUBRTN
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:設(shè)(SP)=60H,(PC)=0123H,子程序SUBR68例:設(shè)(SP)=62H,RAM中的(62H)=0lH,(61H)=26H。子程序SUBRTN的首地址為3456H。執(zhí)行指令:LCALLSUBRTN執(zhí)行結(jié)果:(PC)+3=0123H+3=0126H→(PC)。將(PC)壓入堆棧:26H壓入(SP)+l=61H中,01H壓入(SP)+1=62H中,此時(SP)=62H。(PC)=3456H,執(zhí)行子程序。3.5.5返回指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:設(shè)(SP)=62H,RAM中的(62H)=0lH,(6169思考:AJMPLJMP與ACALLLCALL的區(qū)別?
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);思考:AJMPLJMP與ACALLLCALL的區(qū)70
3.子程序返回指令 RET 執(zhí)行時表示結(jié)束子程序,返回調(diào)用指令A(yù)CALL或LCALL的下一條指令(即斷點地址),繼續(xù)往下執(zhí)行。 執(zhí)行時將棧頂?shù)臄帱c地址送入PC(先PCH,后PCL),并把棧指針減2。
3.5.5返回指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);
3.子程序返回指令3.5.5返回指令磨礪當(dāng)如百煉之金,714.中斷返回指令
RETI它除了執(zhí)行從中斷服務(wù)程序返回中斷時保護(hù)的斷點處繼續(xù)執(zhí)行程序(類似RET功能)外,并清除內(nèi)部相應(yīng)的中斷狀態(tài)寄存器。 因此,中斷服務(wù)程序必須以RETI為結(jié)束指令。CPU執(zhí)行RETI指令后至少再執(zhí)行一條指令,才能響應(yīng)新的中斷請求。利用這一特點,可用來實現(xiàn)單片微機(jī)的單步操作。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);4.中斷返回指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);72 例:設(shè)(SP)=62H,中斷時斷點是0123H,RAM中的(62H)=0lH,(61H)=23H。 執(zhí)行指令RETI結(jié)果為:(SP)=60H,PC=0123H
程序回到斷點0123H處繼續(xù)執(zhí)行。清除內(nèi)部相應(yīng)的中斷狀態(tài)寄存器。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng); 例:設(shè)(SP)=62H,中斷時斷點是0123H,R73例:從P1.7引腳輸出5個方波MOVR2,#11 ;5個方波,10個狀態(tài)LOP:CPLP1.7 ;P1.7狀態(tài)變反LCALLDelayDJNZR2,LOPHERE:SJMPHEREDelay:MOVR5,#255LOOP2:MOVR4,#255LOOP1:NOPNOPDJNZR4,LOOP1DJNZR5,LOOP2RET磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:從P1.7引腳輸出5個方波磨礪當(dāng)如百煉之金,急就者,非74第三章80C51單片機(jī)指令系統(tǒng)
本講教學(xué)內(nèi)容:位操作指令第三章80C51單片機(jī)指令系統(tǒng)
本講教學(xué)內(nèi)容:75布爾(位)操作類指令80C51內(nèi)部有一個布爾(位)處理器,具有較強(qiáng)的布爾變量處理能力。布爾處理器實際上是一位的微處理機(jī),它以進(jìn)位標(biāo)志CY作為位累加器,以內(nèi)部RAM的20H至2FH單元及部分特殊功能寄存器為位存儲器,以P0、P1、P2、P3為位I/O。對位地址空間具有豐富的位操作指令,包括布爾傳送指令、布爾狀態(tài)控制指令、位邏輯操作指令及位條件轉(zhuǎn)移指令。助記符有MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB、JBC等11種。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);布爾(位)操作類指令80C51內(nèi)部有一個布爾76
布爾操作類指令中位地址可用以下多種方式表示,這些方式均能為80C51的匯編程序所識別:直接用位地址0~255或0~FFH表示;采用字節(jié)地址的位數(shù)方式表示,兩者之間用“.”隔開,如: 20H.0;1FH.7等采用字節(jié)寄存器名加位數(shù)表示,兩者之間用“.”隔開,如: P1.5;PSW.5等;采用位寄存器的定義名稱表示,如:F0。如:位地址D5H、F0、D0.5、PSW.5等表示的是同一位。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng); 布爾操作類指令中位地址可用以下多種方式表示,這些方式均能為77
MOVC,bit ;(C)←(bit)MOVbit,C ;(bit)←(C)
功能:將源操作數(shù)(位地址或布爾累加器)送到目的操作數(shù)(布爾累加器或位地址)中去。
布爾傳送指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng); MOVC,bit ;(C)←(78 例:設(shè)(C)=1,執(zhí)行指令:MOVP1.3,C,執(zhí)行結(jié)果為P1.3口線輸出“l(fā)”。
例:設(shè)P1口的內(nèi)容為00111010B,執(zhí)行指令:MOVC,P1.3,執(zhí)行結(jié)果為(C)=1。
3.6.1布爾傳送指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng); 例:設(shè)(C)=1,3.6.1布爾傳送指令磨礪當(dāng)如百煉之金79
1.位清除(CLR)指令
CLRC ;(C)←0CLRbit ;(bit)←0
功能:將C或指定位(bit)清0。
例:設(shè)P1口的內(nèi)容為11111010B,執(zhí)行指令為CLRP1.0后,(P1)=11111010B。2.位置1(SETB)指令SETB C ;(C)←lSETB bit ;(bit)←1
功能:將C或指定位(bit)置1。
布爾狀態(tài)控制指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);
1.位清除(CLR)指令布爾狀態(tài)控制指令磨礪當(dāng)如百煉80 例:設(shè)(C)=0,P3口的內(nèi)容為11111010
B。執(zhí)行指令為SETBP3.0SETBC執(zhí)行結(jié)果為(C)=1,P3.0=1,即P3=11111011B。3.位取反(CPL)指令
CPLC ;(C)←(/C)CPLbit ;(bit)←(/bit)
功能:將C或指定位(bit)取反。例:設(shè)(C)=0,P1口的內(nèi)容為00111010B。執(zhí)行指令為CPL P1.0 CPL C執(zhí)行結(jié)果為(C)=1,P1.0=l,即P0=00111011B。
磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng); 例:設(shè)(C)=0,P3口的內(nèi)容為111110181
1.位邏輯“與”(ANL)操作指令
ANLC,bit ;(C)←(C)·(bit) ANLC,/bit ;(C)←(C)·(bit)功能:將指定位(bit)的內(nèi)容或指定位內(nèi)容取反后(原內(nèi)容不變)與C的內(nèi)容進(jìn)行邏輯與運(yùn)算,結(jié)果仍存于C中。例:設(shè)(C)=l,P1口的內(nèi)容為11111011B,(ACC.7)=0。 執(zhí)行指令為ANLC,P1.0 ;(C)=1 ANLC,ACC.7 ;(C)=0
執(zhí)行結(jié)果為(C)=0。
布爾(位)邏輯操作指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);
1.位邏輯“與”(ANL)操作指令布爾(位)邏輯操作指令82
1.位邏輯“與”(ANL)操作指令
ANLC,bit ;(C)←(C)·(bit) ANLC,/bit ;(C)←(C)·(bit)功能:將指定位(bit)的內(nèi)容或指定位內(nèi)容取反后(原內(nèi)容不變)與C的內(nèi)容進(jìn)行邏輯與運(yùn)算,結(jié)果仍存于C中。例:設(shè)(C)=l,P1口的內(nèi)容為11111011B,(ACC.7)=0。 執(zhí)行指令為ANLC,P1.0 ;(C)=1 ANLC,ACC.7 ;(C)=0
執(zhí)行結(jié)果為(C)=0。
布爾(位)邏輯操作指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);
1.位邏輯“與”(ANL)操作指令布爾(位)邏輯操作指令832.位邏輯“或”(ORL)操作指令
ORL C,bit ;(C)←C)十(bit) ORL C,/bit ;(C)←(C)十(bit)
功能:將指定位(bit)的內(nèi)容或指定位內(nèi)容取反后(原內(nèi)容不變)與C的內(nèi)容進(jìn)行邏輯或運(yùn)算。結(jié)果仍存于C中。例:設(shè)(C)=1,P1口的內(nèi)容為11111011B,(ACC.7)=0。執(zhí)行的指令為OR
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 初中語文文言文復(fù)習(xí)課件
- 贛南衛(wèi)生健康職業(yè)學(xué)院《cinema4d》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛東學(xué)院《物流學(xué)基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2022年三月公務(wù)員考試公共基礎(chǔ)知識沖刺測試題
- 七年級生物上冊第三單元生物圈中的綠色植物第二章被子植物的一生第一節(jié)種子的萌發(fā)教案新版新人教版
- 《雨后教學(xué)》課件
- 三年級數(shù)學(xué)上冊一動物趣聞-克千克噸的認(rèn)識噸的認(rèn)識說課稿青島版六三制
- 2024-2025學(xué)年北京市豐臺區(qū)高三語文上學(xué)期期末試卷及答案解析
- 銀行網(wǎng)點數(shù)據(jù)分析-培訓(xùn)課程
- 境外公共安全課件
- 關(guān)于安全教育的主題班會課件
- 財務(wù)用發(fā)票分割單原始憑證 發(fā)票分割單范本
- 醫(yī)院精神科護(hù)理培訓(xùn):出走行為的防范與護(hù)理
- 《建筑基坑工程監(jiān)測技術(shù)標(biāo)準(zhǔn)》(50497-2019)
- 【環(huán)評文件】蚌埠市康城醫(yī)療廢物集中處置有限公司25噸日微波消毒處置醫(yī)療廢物項目
- 人教版初中物理八年級上冊全冊期末復(fù)習(xí)知識點
- 2023年法考鐘秀勇講民法講義電子版
- GB 4806.11-2023食品安全國家標(biāo)準(zhǔn)食品接觸用橡膠材料及制品
- 循環(huán)冷卻水處理和“趨零”排放新技術(shù)
- 高考寫作指導(dǎo):《登泰山記》《我與地壇》材料
- 人工造林項目投標(biāo)方案
評論
0/150
提交評論