8、80C51控制轉(zhuǎn)移類指令及位操作指令-101101課件_第1頁
8、80C51控制轉(zhuǎn)移類指令及位操作指令-101101課件_第2頁
8、80C51控制轉(zhuǎn)移類指令及位操作指令-101101課件_第3頁
8、80C51控制轉(zhuǎn)移類指令及位操作指令-101101課件_第4頁
8、80C51控制轉(zhuǎn)移類指令及位操作指令-101101課件_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(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自動(dòng)加1來實(shí)現(xiàn)的,但在應(yīng)用系統(tǒng)中,往往會(huì)遇到一些情況,需要強(qiáng)迫改變程序執(zhí)行順序,比如調(diào)用子程序,比如根據(jù)檢測值與設(shè)定值的比較結(jié)果要求程序轉(zhuǎn)移到不同的分支入口等。要改變程序的執(zhí)行順序進(jìn)行分支轉(zhuǎn)向,應(yīng)通過強(qiáng)迫修正PC值得方法來實(shí)現(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自動(dòng)加12

條件轉(zhuǎn)移指令僅僅在滿足指令中規(guī)定的條件(如累加器內(nèi)容是否為零,兩個(gè)操作數(shù)是否相等)時(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

滿足各自條件時(shí),程序轉(zhuǎn)向指定的目標(biāo)地址執(zhí)行(相當(dāng)于執(zhí)行SJMPrel)。當(dāng)不滿足各自條件時(shí),程序順序往下執(zhí)行。偏移量rel是用補(bǔ)碼形式表示的帶符號(hào)的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)中僅有的四條三個(gè)操作數(shù)的指令,在程序設(shè)計(jì)中非常有用。同時(shí)具有比較轉(zhuǎn)移和數(shù)值大小比較的功能。

磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒉數(shù)值比較轉(zhuǎn)移指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);5

這組指令的功能是對(duì)指定的兩操作數(shù)進(jìn)行比較,即(操作數(shù)1)-(操作數(shù)2),但比較結(jié)果均不改變兩個(gè)操作數(shù)的值,僅影響標(biāo)志位CY。

若不等,程序轉(zhuǎn)移到(PC)十3加上第三字節(jié)帶符號(hào)的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); 這組指令的功能是對(duì)指定的兩操作數(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

?:請(qǐng)將以上循環(huán)控制改用CJNE指令來實(shí)現(xiàn)?:請(qǐng)將以上循環(huán)控制改用JZ指令來實(shí)現(xiàn)

磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:某應(yīng)用系統(tǒng)外擴(kuò)了8K字節(jié)RAM,要求把內(nèi)部RAM的20H9請(qǐng)看KeilC下演示實(shí)例,程序段如下:ORG0000HLJMPMAINORG0030HMAIN:MOVA,#01HJZLable1DECAJZLable2NOPLable1:NOPLable2:MOVB,#0FFHEND磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);請(qǐng)看KeilC下演示實(shí)例,程序段如下:磨礪當(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)地址可以包含程序存儲(chǔ)器的整個(gè)64KB空間。例:設(shè)(PC)=0123H,標(biāo)號(hà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⒉絕對(duì)轉(zhuǎn)移指令

AJMP addr11

該指令提供11位地址,目標(biāo)地址由指令提供的11位地址去取代當(dāng)前PC的低11位,形成新的PC值,即為本絕對(duì)轉(zhuǎn)移地址。因此,程序的目標(biāo)地址必須包含AJMP指令后第一條指令的第一個(gè)字節(jié)(即當(dāng)前PC地址)在內(nèi)的2KB范圍內(nèi)(即高5位地址必須相同)。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒉絕對(duì)轉(zhuǎn)移指令 該指令提供11位地址,目標(biāo)地址由指令提供的13例:設(shè)(PC)=0456H,標(biāo)號(hào)ADR所指的單元為0123H。執(zhí)行指令∶AJMPADR 執(zhí)行結(jié)果程序轉(zhuǎn)向?yàn)椋≒C)=0123H。例:0000H2111AJMP0111H ;轉(zhuǎn)移有效07FEH8110AJMP0C10H;當(dāng)前PC值為0800H ;轉(zhuǎn)移有效0100HAJMP0B11H ;轉(zhuǎn)移無效磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:設(shè)(PC)=0456H,標(biāo)號(hào)ADR所指的單元為0123H143.短轉(zhuǎn)移指令:

SJMPrel其目標(biāo)地址是由當(dāng)前PC(程序計(jì)數(shù)器)值和指令的第二字節(jié)提供的8位帶符號(hào)的相對(duì)地址相加而成的。指令可轉(zhuǎn)向指令前128B或指令后127B。rel為8位帶符號(hào)數(shù)。 (PC)=(PC)+2 +rel磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);3.短轉(zhuǎn)移指令:

其目標(biāo)地址是由當(dāng)前PC(程序計(jì)數(shù)器)值15例:2100H 80

FEHERE:SJMPHERErel:2100H-2102H=FFFEH。高8位是FFH,表示負(fù)跳,偏移量為FEH(-2)。這是一條原地踏步指令??捎米鞒绦蚪Y(jié)束或中斷等待。

當(dāng)相對(duì)地址為FEH(-02)時(shí),SJMP指令實(shí)現(xiàn)原地轉(zhuǎn)圈的運(yùn)行狀態(tài)。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:2100H 80FEHERE:SJMP16⒋間接轉(zhuǎn)移指令 JMP @A+DPTR

其目標(biāo)地址是將累加器A中的8位無符號(hào)數(shù)與數(shù)據(jù)指針DPTR的內(nèi)容相加而得(在程序運(yùn)行時(shí)動(dòng)態(tài)決定)。相加運(yùn)算不影響累加器A和數(shù)據(jù)指針DPTR的原內(nèi)容。若相加的結(jié)果大于64KB,則從程序存儲(chǔ)器的零地址往下延續(xù)。當(dāng)DPTR的值固定,而給A賦以不同的值,即可實(shí)現(xiàn)程序的多分支轉(zhuǎn)移。如實(shí)現(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⒈絕對(duì)調(diào)用指令

ACALL addr11無條件地調(diào)用首址為addr11處的子程序。操作不影響標(biāo)志位。斷點(diǎn)地址自動(dòng)壓棧:把PC加2以獲得下一條指令的地址(當(dāng)前PC),將這16位的地址壓進(jìn)堆棧(先PCL,后PCH),同時(shí)棧指針加2。然后將指令提供的11位目標(biāo)地址,送入PC10~PC0,而PC15~PC11的值不變,程序轉(zhuǎn)向子程序的首地址開始執(zhí)行。目標(biāo)地址由指令第一字節(jié)的高三位和指令第二字節(jié)所組成;所調(diào)用的子程序的首地址必須與ACALL后面指令的第一個(gè)字節(jié)在同一個(gè)2KB區(qū)域內(nèi)。

3.5.4子程序調(diào)用指令子程序調(diào)用與返回指令組磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒈絕對(duì)調(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,此時(shí)(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)志位。

斷點(diǎn)地址自動(dòng)壓棧:把PC加3以獲得下一條指令的地址,將這16位的地址壓進(jìn)堆棧(先PCL,后PCH),同時(shí)棧指針加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中,此時(shí)(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í)行時(shí)表示結(jié)束子程序,返回調(diào)用指令A(yù)CALL或LCALL的下一條指令(即斷點(diǎn)地址),繼續(xù)往下執(zhí)行。 執(zhí)行時(shí)將棧頂?shù)臄帱c(diǎn)地址送入PC(先PCH,后PCL),并把棧指針減2。

3.5.5返回指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);

3.子程序返回指令3.5.5返回指令磨礪當(dāng)如百煉之金,254.中斷返回指令

RETI它除了執(zhí)行從中斷服務(wù)程序返回中斷時(shí)保護(hù)的斷點(diǎn)處繼續(xù)執(zhí)行程序(類似RET功能)外,并清除內(nèi)部相應(yīng)的中斷狀態(tài)寄存器。 因此,中斷服務(wù)程序必須以RETI為結(jié)束指令。CPU執(zhí)行RETI指令后至少再執(zhí)行一條指令,才能響應(yīng)新的中斷請(qǐng)求。利用這一特點(diǎn),可用來實(shí)現(xiàn)單片微機(jī)的單步操作。

磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);4.中斷返回指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);26 例:設(shè)(SP)=62H,中斷時(shí)斷點(diǎn)是0123H,RAM中的(62H)=0lH,(61H)=23H。 執(zhí)行指令RETI結(jié)果為:(SP)=60H,PC=0123H

程序回到斷點(diǎn)0123H處繼續(xù)執(zhí)行。清除內(nèi)部相應(yīng)的中斷狀態(tài)寄存器。

磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng); 例:設(shè)(SP)=62H,中斷時(shí)斷點(diǎn)是0123H,R27例:從P1.7引腳輸出5個(gè)方波MOVR2,#11 ;5個(gè)方波,10個(gè)狀態(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個(gè)方波磨礪當(dāng)如百煉之金,急就者,非28第三章80C51單片機(jī)指令系統(tǒng)

本講教學(xué)內(nèi)容:位操作指令第三章80C51單片機(jī)指令系統(tǒng)

本講教學(xué)內(nèi)容:29布爾(位)操作類指令80C51內(nèi)部有一個(gè)布爾(位)處理器,具有較強(qiáng)的布爾變量處理能力。布爾處理器實(shí)際上是一位的微處理機(jī),它以進(jìn)位標(biāo)志CY作為位累加器,以內(nèi)部RAM的20H至2FH單元及部分特殊功能寄存器為位存儲(chǔ)器,以P0、P1、P2、P3為位I/O。對(duì)位地址空間具有豐富的位操作指令,包括布爾傳送指令、布爾狀態(tài)控制指令、位邏輯操作指令及位條件轉(zhuǎn)移指令。助記符有MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB、JBC等11種。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);布爾(位)操作類指令80C51內(nèi)部有一個(gè)布爾30

布爾操作類指令中位地址可用以下多種方式表示,這些方式均能為80C51的匯編程序所識(shí)別:直接用位地址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

功能:對(duì)布爾累加器C進(jìn)行檢測,當(dāng)C=1或C=0時(shí),程序轉(zhuǎn)向當(dāng)前PC值(轉(zhuǎn)移指令地址+2)與第二字節(jié)中帶符號(hào)的相對(duì)地址(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時(shí),程序轉(zhuǎn)向當(dāng)前PC值(轉(zhuǎn)移指令地址+2)與第二字節(jié)中帶符號(hào)的相對(duì)地址(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時(shí),則將該位清0,且程序轉(zhuǎn)向當(dāng)前PC值(轉(zhuǎn)移指令地址+2)與第二字節(jié)中帶符號(hào)的相對(duì)地址(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ì),根據(jù)A中的數(shù)值實(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是一個(gè)三字節(jié)指令,因此轉(zhuǎn)移指令入口;地址相隔3個(gè)字節(jié),A中內(nèi)容需是3的倍數(shù)。

磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例11:散轉(zhuǎn)程序設(shè)計(jì),根據(jù)A中的數(shù)值實(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自動(dòng)加1來實(shí)現(xiàn)的,但在應(yīng)用系統(tǒng)中,往往會(huì)遇到一些情況,需要強(qiáng)迫改變程序執(zhí)行順序,比如調(diào)用子程序,比如根據(jù)檢測值與設(shè)定值的比較結(jié)果要求程序轉(zhuǎn)移到不同的分支入口等。要改變程序的執(zhí)行順序進(jìn)行分支轉(zhuǎn)向,應(yīng)通過強(qiáng)迫修正PC值得方法來實(shí)現(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自動(dòng)加148

條件轉(zhuǎn)移指令僅僅在滿足指令中規(guī)定的條件(如累加器內(nèi)容是否為零,兩個(gè)操作數(shù)是否相等)時(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

滿足各自條件時(shí),程序轉(zhuǎn)向指定的目標(biāo)地址執(zhí)行(相當(dāng)于執(zhí)行SJMPrel)。當(dāng)不滿足各自條件時(shí),程序順序往下執(zhí)行。偏移量rel是用補(bǔ)碼形式表示的帶符號(hào)的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)中僅有的四條三個(gè)操作數(shù)的指令,在程序設(shè)計(jì)中非常有用。同時(shí)具有比較轉(zhuǎn)移和數(shù)值大小比較的功能。

磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒉數(shù)值比較轉(zhuǎn)移指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);51

這組指令的功能是對(duì)指定的兩操作數(shù)進(jìn)行比較,即(操作數(shù)1)-(操作數(shù)2),但比較結(jié)果均不改變兩個(gè)操作數(shù)的值,僅影響標(biāo)志位CY。

若不等,程序轉(zhuǎn)移到(PC)十3加上第三字節(jié)帶符號(hào)的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); 這組指令的功能是對(duì)指定的兩操作數(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

?:請(qǐng)將以上循環(huán)控制改用CJNE指令來實(shí)現(xiàn)?:請(qǐng)將以上循環(huán)控制改用JZ指令來實(shí)現(xiàn)

磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:某應(yīng)用系統(tǒng)外擴(kuò)了8K字節(jié)RAM,要求把內(nèi)部RAM的20H55請(qǐng)看KeilC下演示實(shí)例,程序段如下:ORG0000HLJMPMAINORG0030HMAIN:MOVA,#01HJZLable1DECAJZLable2NOPLable1:NOPLable2:MOVB,#0FFHEND磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);請(qǐng)看KeilC下演示實(shí)例,程序段如下:磨礪當(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)地址可以包含程序存儲(chǔ)器的整個(gè)64KB空間。例:設(shè)(PC)=0123H,標(biāo)號(hà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⒉絕對(duì)轉(zhuǎn)移指令

AJMP addr11

該指令提供11位地址,目標(biāo)地址由指令提供的11位地址去取代當(dāng)前PC的低11位,形成新的PC值,即為本絕對(duì)轉(zhuǎn)移地址。因此,程序的目標(biāo)地址必須包含AJMP指令后第一條指令的第一個(gè)字節(jié)(即當(dāng)前PC地址)在內(nèi)的2KB范圍內(nèi)(即高5位地址必須相同)。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒉絕對(duì)轉(zhuǎn)移指令 該指令提供11位地址,目標(biāo)地址由指令提供的59例:設(shè)(PC)=0456H,標(biāo)號(hào)ADR所指的單元為0123H。執(zhí)行指令∶AJMPADR 執(zhí)行結(jié)果程序轉(zhuǎn)向?yàn)椋≒C)=0123H。例:0000H2111AJMP0111H ;轉(zhuǎn)移有效07FEH8110AJMP0C10H;當(dāng)前PC值為0800H ;轉(zhuǎn)移有效0100HAJMP0B11H ;轉(zhuǎn)移無效磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:設(shè)(PC)=0456H,標(biāo)號(hào)ADR所指的單元為0123H603.短轉(zhuǎn)移指令:

SJMPrel其目標(biāo)地址是由當(dāng)前PC(程序計(jì)數(shù)器)值和指令的第二字節(jié)提供的8位帶符號(hào)的相對(duì)地址相加而成的。指令可轉(zhuǎn)向指令前128B或指令后127B。rel為8位帶符號(hào)數(shù)。 (PC)=(PC)+2 +rel磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);3.短轉(zhuǎn)移指令:

其目標(biāo)地址是由當(dāng)前PC(程序計(jì)數(shù)器)值61例:2100H 80

FEHERE:SJMPHERErel:2100H-2102H=FFFEH。高8位是FFH,表示負(fù)跳,偏移量為FEH(-2)。這是一條原地踏步指令??捎米鞒绦蚪Y(jié)束或中斷等待。

當(dāng)相對(duì)地址為FEH(-02)時(shí),SJMP指令實(shí)現(xiàn)原地轉(zhuǎn)圈的運(yùn)行狀態(tài)。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);例:2100H 80FEHERE:SJMP62⒋間接轉(zhuǎn)移指令 JMP @A+DPTR

其目標(biāo)地址是將累加器A中的8位無符號(hào)數(shù)與數(shù)據(jù)指針DPTR的內(nèi)容相加而得(在程序運(yùn)行時(shí)動(dòng)態(tài)決定)。相加運(yùn)算不影響累加器A和數(shù)據(jù)指針DPTR的原內(nèi)容。若相加的結(jié)果大于64KB,則從程序存儲(chǔ)器的零地址往下延續(xù)。當(dāng)DPTR的值固定,而給A賦以不同的值,即可實(shí)現(xiàn)程序的多分支轉(zhuǎn)移。如實(shí)現(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⒈絕對(duì)調(diào)用指令

ACALL addr11無條件地調(diào)用首址為addr11處的子程序。操作不影響標(biāo)志位。斷點(diǎn)地址自動(dòng)壓棧:把PC加2以獲得下一條指令的地址(當(dāng)前PC),將這16位的地址壓進(jìn)堆棧(先PCL,后PCH),同時(shí)棧指針加2。然后將指令提供的11位目標(biāo)地址,送入PC10~PC0,而PC15~PC11的值不變,程序轉(zhuǎn)向子程序的首地址開始執(zhí)行。目標(biāo)地址由指令第一字節(jié)的高三位和指令第二字節(jié)所組成;所調(diào)用的子程序的首地址必須與ACALL后面指令的第一個(gè)字節(jié)在同一個(gè)2KB區(qū)域內(nèi)。

3.5.4子程序調(diào)用指令子程序調(diào)用與返回指令組磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);⒈絕對(duì)調(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,此時(shí)(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)志位。

斷點(diǎn)地址自動(dòng)壓棧:把PC加3以獲得下一條指令的地址,將這16位的地址壓進(jìn)堆棧(先PCL,后PCH),同時(shí)棧指針加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中,此時(shí)(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í)行時(shí)表示結(jié)束子程序,返回調(diào)用指令A(yù)CALL或LCALL的下一條指令(即斷點(diǎn)地址),繼續(xù)往下執(zhí)行。 執(zhí)行時(shí)將棧頂?shù)臄帱c(diǎn)地址送入PC(先PCH,后PCL),并把棧指針減2。

3.5.5返回指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);

3.子程序返回指令3.5.5返回指令磨礪當(dāng)如百煉之金,714.中斷返回指令

RETI它除了執(zhí)行從中斷服務(wù)程序返回中斷時(shí)保護(hù)的斷點(diǎn)處繼續(xù)執(zhí)行程序(類似RET功能)外,并清除內(nèi)部相應(yīng)的中斷狀態(tài)寄存器。 因此,中斷服務(wù)程序必須以RETI為結(jié)束指令。CPU執(zhí)行RETI指令后至少再執(zhí)行一條指令,才能響應(yīng)新的中斷請(qǐng)求。利用這一特點(diǎn),可用來實(shí)現(xiàn)單片微機(jī)的單步操作。

磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);4.中斷返回指令磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);72 例:設(shè)(SP)=62H,中斷時(shí)斷點(diǎn)是0123H,RAM中的(62H)=0lH,(61H)=23H。 執(zhí)行指令RETI結(jié)果為:(SP)=60H,PC=0123H

程序回到斷點(diǎn)0123H處繼續(xù)執(zhí)行。清除內(nèi)部相應(yīng)的中斷狀態(tài)寄存器。

磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng); 例:設(shè)(SP)=62H,中斷時(shí)斷點(diǎn)是0123H,R73例:從P1.7引腳輸出5個(gè)方波MOVR2,#11 ;5個(gè)方波,10個(gè)狀態(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個(gè)方波磨礪當(dāng)如百煉之金,急就者,非74第三章80C51單片機(jī)指令系統(tǒng)

本講教學(xué)內(nèi)容:位操作指令第三章80C51單片機(jī)指令系統(tǒng)

本講教學(xué)內(nèi)容:75布爾(位)操作類指令80C51內(nèi)部有一個(gè)布爾(位)處理器,具有較強(qiáng)的布爾變量處理能力。布爾處理器實(shí)際上是一位的微處理機(jī),它以進(jìn)位標(biāo)志CY作為位累加器,以內(nèi)部RAM的20H至2FH單元及部分特殊功能寄存器為位存儲(chǔ)器,以P0、P1、P2、P3為位I/O。對(duì)位地址空間具有豐富的位操作指令,包括布爾傳送指令、布爾狀態(tài)控制指令、位邏輯操作指令及位條件轉(zhuǎn)移指令。助記符有MOV、CLR、CPL、SETB、ANL、ORL、JC、JNC、JB、JNB、JBC等11種。磨礪當(dāng)如百煉之金,急就者,非邃養(yǎng);布爾(位)操作類指令80C51內(nèi)部有一個(gè)布爾76

布爾操作類指令中位地址可用以下多種方式表示,這些方式均能為80C51的匯編程序所識(shí)別:直接用位地址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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論