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

下載本文檔

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

文檔簡介

1、80C51控制轉(zhuǎn)移類指令及位操作指令 第三章第三章 80C51單片機(jī)指令系統(tǒng)單片機(jī)指令系統(tǒng) 本講教學(xué)內(nèi)容:本講教學(xué)內(nèi)容: 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令 80C51控制轉(zhuǎn)移類指令及位操作指令 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令 程序的順序執(zhí)行是由程序的順序執(zhí)行是由PC自動加自動加1來實(shí)現(xiàn)的,但在來實(shí)現(xiàn)的,但在 應(yīng)用系統(tǒng)中,往往會遇到一些情況,需要強(qiáng)迫改變程應(yīng)用系統(tǒng)中,往往會遇到一些情況,需要強(qiáng)迫改變程 序執(zhí)行順序,比如調(diào)用子程序,比如根據(jù)檢測值與設(shè)序執(zhí)行順序,比如調(diào)用子程序,比如根據(jù)檢測值與設(shè) 定值的比較結(jié)果要求程序轉(zhuǎn)移到不同的分支入口等。定值的比較結(jié)果要求程序轉(zhuǎn)移到不同的分支入口等。 要改變程序的執(zhí)

2、行順序進(jìn)行分支轉(zhuǎn)向,應(yīng)通過強(qiáng)迫修要改變程序的執(zhí)行順序進(jìn)行分支轉(zhuǎn)向,應(yīng)通過強(qiáng)迫修 正正PC值得方法來實(shí)現(xiàn),這就是控制轉(zhuǎn)移類指令的基本值得方法來實(shí)現(xiàn),這就是控制轉(zhuǎn)移類指令的基本 功能。功能。 80C5設(shè)有豐富的控制轉(zhuǎn)移指令,可分為無條件轉(zhuǎn)設(shè)有豐富的控制轉(zhuǎn)移指令,可分為無條件轉(zhuǎn) 移指令、條件轉(zhuǎn)移指令、循環(huán)轉(zhuǎn)移指令、子程序調(diào)用移指令、條件轉(zhuǎn)移指令、循環(huán)轉(zhuǎn)移指令、子程序調(diào)用 和返回指令及空操作指令等。和返回指令及空操作指令等。 采用助記符有:采用助記符有:AJMP、LJMP、SJMP、JZ、 JNZ、CJNE、DJNZ、ACALL、LCALL、RET、 RETI、NOP等等1313種。種。 80C51控

3、制轉(zhuǎn)移類指令及位操作指令 條件轉(zhuǎn)移指令僅僅在滿足指令中規(guī)定的條件條件轉(zhuǎn)移指令僅僅在滿足指令中規(guī)定的條件(如累如累 加器內(nèi)容是否為零,兩個操作數(shù)是否相等加器內(nèi)容是否為零,兩個操作數(shù)是否相等) 時才執(zhí)行無時才執(zhí)行無 條件轉(zhuǎn)移,否則程序順序執(zhí)行。條件轉(zhuǎn)移,否則程序順序執(zhí)行。 6條指令可分為累加器判零轉(zhuǎn)移指令、數(shù)值比較條指令可分為累加器判零轉(zhuǎn)移指令、數(shù)值比較 轉(zhuǎn)移指令和減轉(zhuǎn)移指令和減1條件轉(zhuǎn)移指令。條件轉(zhuǎn)移指令。 條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令 80C51控制轉(zhuǎn)移類指令及位操作指令 累加器判零轉(zhuǎn)移指令累加器判零轉(zhuǎn)移指令 JZrel;若;若(A)=0,則,則(PC)=(PC+2)+rel ;若;若(A)0,則

4、,則(PC)=(PC)+2 JNZ rel;若;若(A)0,則,則(PC)= (PC+2)+rel ;若;若(A)=0,則,則(PC)=(PC)+2 滿足各自條件時,程序轉(zhuǎn)向指定的目標(biāo)地址執(zhí)行滿足各自條件時,程序轉(zhuǎn)向指定的目標(biāo)地址執(zhí)行(相當(dāng)于執(zhí)相當(dāng)于執(zhí) 行行SJMP rel) 。當(dāng)不滿足各自條件時,程序順序往下執(zhí)行。當(dāng)不滿足各自條件時,程序順序往下執(zhí)行。 偏移量偏移量rel是用補(bǔ)碼形式表示的帶符號的是用補(bǔ)碼形式表示的帶符號的8 位數(shù),因此程序位數(shù),因此程序 轉(zhuǎn)移的目標(biāo)地址為指令前轉(zhuǎn)移的目標(biāo)地址為指令前128 B或指令后或指令后 127 B。 這些指令執(zhí)行后不影響任何操作數(shù)和標(biāo)志位。這些指令執(zhí)行

5、后不影響任何操作數(shù)和標(biāo)志位。 80C51控制轉(zhuǎn)移類指令及位操作指令 數(shù)值比較轉(zhuǎn)移指令數(shù)值比較轉(zhuǎn)移指令 CJNE A,direct,rel CJNE A,data,rel CJNE Rn, data,rel CJNE Ri,data,rel 其指令格式為:其指令格式為: CJNE(操作數(shù)(操作數(shù)1),(操作數(shù)),(操作數(shù)2),),rel 數(shù)值比較轉(zhuǎn)移指令是三字節(jié)指令,是數(shù)值比較轉(zhuǎn)移指令是三字節(jié)指令,是80C51單片微機(jī)單片微機(jī) 指令系統(tǒng)中僅有的四條三個操作數(shù)的指令,在程序設(shè)計中非指令系統(tǒng)中僅有的四條三個操作數(shù)的指令,在程序設(shè)計中非 常有用。同時具有比較轉(zhuǎn)移和數(shù)值大小比較的功能。常有用。同時具有比

6、較轉(zhuǎn)移和數(shù)值大小比較的功能。 80C51控制轉(zhuǎn)移類指令及位操作指令 這組指令的功能是對指定的兩操作數(shù)進(jìn)行比較,即這組指令的功能是對指定的兩操作數(shù)進(jìn)行比較,即 (操作數(shù)操作數(shù)1)(操作數(shù)操作數(shù)2) ,但比較結(jié)果均不改變兩個操作數(shù),但比較結(jié)果均不改變兩個操作數(shù) 的值,僅影響標(biāo)志位的值,僅影響標(biāo)志位CY。 若不等,程序轉(zhuǎn)移到若不等,程序轉(zhuǎn)移到(PC)十十3加上第三字節(jié)帶符號加上第三字節(jié)帶符號 的的8 位偏移量(位偏移量(rel)所指向的目標(biāo)地址;)所指向的目標(biāo)地址; 若若(操作數(shù)操作數(shù)1) (操作數(shù)操作數(shù)2),清進(jìn)位標(biāo)志(,清進(jìn)位標(biāo)志(CY)。)。 若若(操作數(shù)操作數(shù)1) (操作數(shù)操作數(shù)2),則置位

7、進(jìn)位標(biāo)志(,則置位進(jìn)位標(biāo)志(CY)。)。 值相等,程序繼續(xù)執(zhí)行。值相等,程序繼續(xù)執(zhí)行。 程序轉(zhuǎn)移的范圍是從(程序轉(zhuǎn)移的范圍是從(PC)3為起始的為起始的127一一128B 的單元地址。的單元地址。 比如比如 CJNE Rn,#data,rel指令指令 80C51控制轉(zhuǎn)移類指令及位操作指令 例:溫度控制程序例:溫度控制程序 某溫度控制系統(tǒng),某溫度控制系統(tǒng),A中存溫度采樣值中存溫度采樣值Ta,(20H)=溫度下限溫度下限 值值T20,(30H)=溫度上限值溫度上限值T30。若。若TaT30,程序轉(zhuǎn)降溫,程序轉(zhuǎn)降溫JW, 若若TaT20,程序轉(zhuǎn)升溫,程序轉(zhuǎn)升溫SW,若,若T30TaT20程序轉(zhuǎn)程序轉(zhuǎn)

8、FH返回主程返回主程 序。序。 CJNE A,30H , LOOP AJMP FH ;等于;等于T30,轉(zhuǎn),轉(zhuǎn)FH LOOP: JNC JW ;大于;大于T30,降溫,降溫 CJNE A,20 H,LOOP1 AJMP FH ;等于;等于T20,轉(zhuǎn),轉(zhuǎn)FH LOOP1:JC SW ;小于;小于T20,升溫,升溫 FH:- ;保溫;保溫 JW:- ; 降溫降溫 SW:- ; 升溫升溫 80C51控制轉(zhuǎn)移類指令及位操作指令 DJNZ Rn,rel DJNZ direct,rel 指令功能是:每執(zhí)行一次本指令,先將指定的指令功能是:每執(zhí)行一次本指令,先將指定的Rn或或 direct的內(nèi)容減的內(nèi)容減1

9、,再判別其內(nèi)容是否為,再判別其內(nèi)容是否為0。若不為。若不為0, 轉(zhuǎn)向目標(biāo)地址,繼續(xù)執(zhí)行循環(huán)程序;若為轉(zhuǎn)向目標(biāo)地址,繼續(xù)執(zhí)行循環(huán)程序;若為0,則結(jié)束,則結(jié)束 循環(huán)程序段,程序往下執(zhí)行。循環(huán)程序段,程序往下執(zhí)行。 減減1 1條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令 80C51控制轉(zhuǎn)移類指令及位操作指令 例:某應(yīng)用系統(tǒng)外擴(kuò)了例:某應(yīng)用系統(tǒng)外擴(kuò)了8K字節(jié)字節(jié)RAM,要求把內(nèi)部,要求把內(nèi)部 RAM的的20H2FH單元內(nèi)容發(fā)送到外部單元內(nèi)容發(fā)送到外部RAM的的 800H80FH單元中。單元中。 執(zhí)行指令:執(zhí)行指令: MOV DPTR,#800H MOV R0,#20H MOV R7,#10H AGAIN:MOV A,R0

10、 MOVX DPTR,A INC R0 INC DPTR DJNZ R7,AGAIN ?:?:請將以上循環(huán)控制改用請將以上循環(huán)控制改用CJNE指令來實(shí)現(xiàn)指令來實(shí)現(xiàn) ?:?:請將以上循環(huán)控制改用請將以上循環(huán)控制改用JZ指令來實(shí)現(xiàn)指令來實(shí)現(xiàn) 80C51控制轉(zhuǎn)移類指令及位操作指令 請看請看Keil C下演示實(shí)例,程序段如下:下演示實(shí)例,程序段如下: ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A,#01H JZ Lable1 DEC A JZ Lable2 NOP Lable1: NOP Lable2: MOV B,#0FFH END 80C51控制轉(zhuǎn)移類指令及位

11、操作指令 指令指令 SJMP rel AJMP addr11 LJMP addrl6 JMP ADPTR 這類指令的功能是程序無條件地轉(zhuǎn)移到各自指定這類指令的功能是程序無條件地轉(zhuǎn)移到各自指定 的目標(biāo)地址去執(zhí)行,不同的指令形成的目標(biāo)地址不同。的目標(biāo)地址去執(zhí)行,不同的指令形成的目標(biāo)地址不同。 無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令 80C51控制轉(zhuǎn)移類指令及位操作指令 1. 長轉(zhuǎn)移指令長轉(zhuǎn)移指令 LJMP addr16 該指令提供該指令提供16位地址,目標(biāo)地址由指令第二字位地址,目標(biāo)地址由指令第二字 節(jié)節(jié)(高高8位地址位地址)和第三字節(jié)和第三字節(jié)(低低8位地址位地址)組成。因此,程組成。因此,程 序轉(zhuǎn)向的目

12、標(biāo)地址可以包含程序存儲器的整個序轉(zhuǎn)向的目標(biāo)地址可以包含程序存儲器的整個64 KB 空間。空間。 例:設(shè)(例:設(shè)(PC)0123H,標(biāo)號,標(biāo)號ADR所指單元地址為所指單元地址為 3456H。 執(zhí)行指令執(zhí)行指令 LJMP ADR 執(zhí)行結(jié)果為(執(zhí)行結(jié)果為(PC)3456H 程序轉(zhuǎn)向程序轉(zhuǎn)向3456H單元執(zhí)行。單元執(zhí)行。 80C51控制轉(zhuǎn)移類指令及位操作指令 絕對轉(zhuǎn)移指令絕對轉(zhuǎn)移指令 AJMP addr11 該指令提供該指令提供11位地址,目標(biāo)地址由指令提供的位地址,目標(biāo)地址由指令提供的 11位地址去取代當(dāng)前位地址去取代當(dāng)前PC的低的低11位,形成新的位,形成新的PC值,值, 即為本絕對轉(zhuǎn)移地址。因此

13、,程序的目標(biāo)地址必須包即為本絕對轉(zhuǎn)移地址。因此,程序的目標(biāo)地址必須包 含含AJMP指令后第一條指令的第一個字節(jié)指令后第一條指令的第一個字節(jié)(即當(dāng)前即當(dāng)前PC 地址地址)在內(nèi)的在內(nèi)的2 KB范圍內(nèi)范圍內(nèi)(即高即高5位地址必須相同位地址必須相同)。 80C51控制轉(zhuǎn)移類指令及位操作指令 例:設(shè)(例:設(shè)(PC)0456H,標(biāo)號,標(biāo)號ADR所指的單元為所指的單元為0123H。 執(zhí)行指令執(zhí)行指令 AJMP ADR 執(zhí)行結(jié)果程序轉(zhuǎn)向?yàn)椋▓?zhí)行結(jié)果程序轉(zhuǎn)向?yàn)椋≒C)0123H。 例:例: 0000H 21 11 AJMP 0111H;轉(zhuǎn)移有效;轉(zhuǎn)移有效 07FEH 81 10 AJMP 0C10H ;當(dāng)前;當(dāng)

14、前PC值為值為0800H ;轉(zhuǎn)移有效;轉(zhuǎn)移有效 0100H AJMP 0B11H ;轉(zhuǎn)移無效;轉(zhuǎn)移無效 80C51控制轉(zhuǎn)移類指令及位操作指令 3短轉(zhuǎn)移指令短轉(zhuǎn)移指令: SJMP rel 其目標(biāo)地址是由當(dāng)前其目標(biāo)地址是由當(dāng)前PC(程序計數(shù)器)值和指令的第(程序計數(shù)器)值和指令的第 二字節(jié)提供的二字節(jié)提供的8位帶符號的相對地址相加而成的。指令位帶符號的相對地址相加而成的。指令 可轉(zhuǎn)向指令前可轉(zhuǎn)向指令前128 B或指令后或指令后127 B。rel為為8位帶符號數(shù)。位帶符號數(shù)。 (PC)=(PC) +2+rel 80C51控制轉(zhuǎn)移類指令及位操作指令 例:例:2100H 80 FE HERE:SJMP

15、HERE rel: :2100H2102H=FFFEH。高。高8 8位是位是FFH, ,表示表示 負(fù)跳負(fù)跳, ,偏移量為偏移量為FEH (2)。這是一條原地踏步指令。這是一條原地踏步指令。 可用作程序結(jié)束或中斷等待??捎米鞒绦蚪Y(jié)束或中斷等待。 當(dāng)相對地址為當(dāng)相對地址為FEH (-02) FEH (-02) 時,時,SJMPSJMP指令實(shí)現(xiàn)原地轉(zhuǎn)圈指令實(shí)現(xiàn)原地轉(zhuǎn)圈 的運(yùn)行狀態(tài)。的運(yùn)行狀態(tài)。 80C51控制轉(zhuǎn)移類指令及位操作指令 間接轉(zhuǎn)移指令間接轉(zhuǎn)移指令 JMPA+DPTR 其目標(biāo)地址是將累加器其目標(biāo)地址是將累加器A中的中的8位無符號數(shù)與位無符號數(shù)與 數(shù)據(jù)指針數(shù)據(jù)指針DPTR的內(nèi)容相加而得的內(nèi)容相

16、加而得(在程序運(yùn)行時動態(tài)決在程序運(yùn)行時動態(tài)決 定定)。相加運(yùn)算不影響累加器。相加運(yùn)算不影響累加器A和數(shù)據(jù)指針和數(shù)據(jù)指針DPTR的原的原 內(nèi)容。若相加的結(jié)果大于內(nèi)容。若相加的結(jié)果大于64 KB,則從程序存儲器的,則從程序存儲器的 零地址往下延續(xù)。當(dāng)零地址往下延續(xù)。當(dāng)DPTR的值固定,而給的值固定,而給A賦以不賦以不 同的值,即可實(shí)現(xiàn)程序的多分支轉(zhuǎn)移。如實(shí)現(xiàn)鍵盤譯同的值,即可實(shí)現(xiàn)程序的多分支轉(zhuǎn)移。如實(shí)現(xiàn)鍵盤譯 碼散轉(zhuǎn)功能。碼散轉(zhuǎn)功能。 80C51控制轉(zhuǎn)移類指令及位操作指令 例:設(shè)(例:設(shè)(A)5,(,(DPTR)4567H。 執(zhí)行指令為執(zhí)行指令為 JMP ADPTR 執(zhí)行結(jié)果為執(zhí)行結(jié)果為: (PC

17、)(A)(DPTR)05H 4567H456CH 程序轉(zhuǎn)向程序轉(zhuǎn)向456CH單元執(zhí)行。單元執(zhí)行。 80C51控制轉(zhuǎn)移類指令及位操作指令 絕對調(diào)用指令絕對調(diào)用指令 ACALLaddr11 無條件地調(diào)用首址為無條件地調(diào)用首址為addr11處的子程序。操作不影響處的子程序。操作不影響 標(biāo)志位標(biāo)志位。 斷點(diǎn)地址自動壓棧:把斷點(diǎn)地址自動壓棧:把PC加加2以獲得下一條指令的地以獲得下一條指令的地 址址(當(dāng)前當(dāng)前PC),將這將這16位的地址壓進(jìn)堆棧位的地址壓進(jìn)堆棧(先先PCL,后,后 PCH),同時棧指針加同時棧指針加2。然后將指令提供的。然后將指令提供的 11位目標(biāo)地位目標(biāo)地 址,送入址,送入PC10PC

18、0,而,而 PC15PC11的值不變,程的值不變,程 序轉(zhuǎn)向子程序的首地址開始執(zhí)行。目標(biāo)地址由指令第序轉(zhuǎn)向子程序的首地址開始執(zhí)行。目標(biāo)地址由指令第 一字節(jié)的高三位和指令第二字節(jié)所組成;一字節(jié)的高三位和指令第二字節(jié)所組成; 所調(diào)用的子程序的首地址必須與所調(diào)用的子程序的首地址必須與ACALL后面指令的后面指令的 第一個字節(jié)在同一個第一個字節(jié)在同一個2 KB區(qū)域內(nèi)。區(qū)域內(nèi)。 子程序調(diào)用與返回指令組子程序調(diào)用與返回指令組 80C51控制轉(zhuǎn)移類指令及位操作指令 例:設(shè)(例:設(shè)(SP)60H,(,(PC)0123H,子程序,子程序 SUBRTN的首地址為的首地址為0456H。 執(zhí)行指令為執(zhí)行指令為ACAL

19、L SUBRTN 執(zhí)行結(jié)果為(執(zhí)行結(jié)果為(PC)20123H20125H(PC),), 將(將(PC)=0125H壓入堆棧:壓入堆棧:25H壓入(壓入(SP)161H, 01H壓入(壓入(SP)十)十l62H,此時(,此時(SP)62H。 addr11 PC100 , PC=0456H 80C51控制轉(zhuǎn)移類指令及位操作指令 長調(diào)用指令長調(diào)用指令 LCALLaddr16 無條件地調(diào)用首址為無條件地調(diào)用首址為addr16處的子程序。操作不影響標(biāo)志處的子程序。操作不影響標(biāo)志 位。位。 斷點(diǎn)地址自動壓棧:把斷點(diǎn)地址自動壓棧:把 PC加加 3以獲得下一條指令的地址,以獲得下一條指令的地址, 將這將這16

20、位的地址壓進(jìn)堆棧(先位的地址壓進(jìn)堆棧(先PCL,后,后PCH),同時棧指針),同時棧指針 加加2。 將指令第將指令第2和第和第3字節(jié)所提供的字節(jié)所提供的16位目標(biāo)地址,送位目標(biāo)地址,送PC15 PC0,程序轉(zhuǎn)向子程序的首地址開始執(zhí)行。,程序轉(zhuǎn)向子程序的首地址開始執(zhí)行。 所調(diào)用的子程序的首地址可以在所調(diào)用的子程序的首地址可以在64 KB范圍內(nèi)。范圍內(nèi)。 80C51控制轉(zhuǎn)移類指令及位操作指令 例:設(shè)(例:設(shè)(SP)60H,(,(PC)0123H,子程序,子程序 SUBRTN的首地址為的首地址為3456H。 執(zhí)行指令為執(zhí)行指令為 LCALL SUBRTN 80C51控制轉(zhuǎn)移類指令及位操作指令 例:設(shè)

21、例:設(shè)(SP)62H,RAM中的中的(62H)0lH,(61H)26H。 子程序子程序SUBRTN的首地址為的首地址為3456H。 執(zhí)行指令:執(zhí)行指令:LCALL SUBRTN 執(zhí)行結(jié)果:(執(zhí)行結(jié)果:(PC)30123H30126H(PC)。)。 將(將(PC)壓入堆棧:)壓入堆棧:26H壓入(壓入(SP)l61H中,中,01H壓壓 入(入(SP)1=62H中,此時(中,此時(SP)62H。 (PC)=3456H, 執(zhí)行子程序。執(zhí)行子程序。 80C51控制轉(zhuǎn)移類指令及位操作指令 思考:思考:AJMP LJMP 與與 ACALL LCALL的區(qū)別?的區(qū)別? 80C51控制轉(zhuǎn)移類指令及位操作指令

22、3.子程序返回指令子程序返回指令 RET 執(zhí)行時表示結(jié)束子程序,返回調(diào)用指令執(zhí)行時表示結(jié)束子程序,返回調(diào)用指令A(yù)CALL 或或LCALL的下一條指令的下一條指令(即斷點(diǎn)地址即斷點(diǎn)地址),繼續(xù)往下執(zhí)行。,繼續(xù)往下執(zhí)行。 執(zhí)行時將棧頂?shù)臄帱c(diǎn)地址送入執(zhí)行時將棧頂?shù)臄帱c(diǎn)地址送入PC(先先PCH,后,后 PCL),并把棧指針減,并把棧指針減2。 80C51控制轉(zhuǎn)移類指令及位操作指令 4. 中斷返回指令中斷返回指令 RETI 它除了執(zhí)行從中斷服務(wù)程序返回中斷時保護(hù)的斷它除了執(zhí)行從中斷服務(wù)程序返回中斷時保護(hù)的斷 點(diǎn)處繼續(xù)執(zhí)行程序點(diǎn)處繼續(xù)執(zhí)行程序 (類似類似RET功能功能)外,并清除內(nèi)部相外,并清除內(nèi)部相 應(yīng)

23、的中斷狀態(tài)寄存器。應(yīng)的中斷狀態(tài)寄存器。 因此,中斷服務(wù)程序必須以因此,中斷服務(wù)程序必須以RETI為結(jié)束指令。為結(jié)束指令。 CPU執(zhí)行執(zhí)行RETI指令后至少再執(zhí)行一條指令,才指令后至少再執(zhí)行一條指令,才 能響應(yīng)新的中斷請求。利用這一特點(diǎn),可用來實(shí)現(xiàn)單能響應(yīng)新的中斷請求。利用這一特點(diǎn),可用來實(shí)現(xiàn)單 片微機(jī)的單步操作。片微機(jī)的單步操作。 80C51控制轉(zhuǎn)移類指令及位操作指令 例:設(shè)(例:設(shè)(SP)62H,中斷時斷點(diǎn)是,中斷時斷點(diǎn)是0123H, RAM中的(中的(62H)0lH,(,(61H)23H。 執(zhí)行指令執(zhí)行指令RETI結(jié)果為:(結(jié)果為:(SP)60H,PC 0123H 程序回到斷點(diǎn)程序回到斷點(diǎn)

24、0123H處繼續(xù)執(zhí)行。清除內(nèi)部相處繼續(xù)執(zhí)行。清除內(nèi)部相 應(yīng)的中斷狀態(tài)寄存器。應(yīng)的中斷狀態(tài)寄存器。 80C51控制轉(zhuǎn)移類指令及位操作指令 例:從P1.7引腳輸出5個方波 MOVR2,#11;5個方波,10個狀態(tài) LOP: CPLP1.7;P1.7狀態(tài)變反 LCALLDelay DJNZR2,LOP HERE:SJMPHERE Delay: MOVR5,#255 LOOP2: MOVR4,#255 LOOP1: NOP NOP DJNZR4,LOOP1 DJNZR5,LOOP2 RET 80C51控制轉(zhuǎn)移類指令及位操作指令 第三章第三章 80C51單片機(jī)指令系統(tǒng)單片機(jī)指令系統(tǒng) 本講教學(xué)內(nèi)容:本講教

25、學(xué)內(nèi)容: 位操作指令位操作指令 80C51控制轉(zhuǎn)移類指令及位操作指令 布爾(位)操作類指令布爾(位)操作類指令 80C51內(nèi)部有一個布爾(位)處理器,具有較強(qiáng)內(nèi)部有一個布爾(位)處理器,具有較強(qiáng) 的布爾變量處理能力。的布爾變量處理能力。 布爾處理器實(shí)際上是一位的微處理機(jī),它以進(jìn)位布爾處理器實(shí)際上是一位的微處理機(jī),它以進(jìn)位 標(biāo)志標(biāo)志CY作為位累加器,以內(nèi)部作為位累加器,以內(nèi)部RAM的的20H至至2FH單單 元及部分特殊功能寄存器為位存儲器,以元及部分特殊功能寄存器為位存儲器,以P0、P1、P2、 P3為位為位I/O。對位地址空間具有豐富的位操作指令,。對位地址空間具有豐富的位操作指令, 包括布爾

26、傳送指令、布爾狀態(tài)控制指令、位邏輯操作包括布爾傳送指令、布爾狀態(tài)控制指令、位邏輯操作 指令及位條件轉(zhuǎn)移指令。助記符有指令及位條件轉(zhuǎn)移指令。助記符有MOV、CLR、 CPL、SETB、ANL、ORL、JC、JNC、JB、 JNB、JBC等等11種。種。 80C51控制轉(zhuǎn)移類指令及位操作指令 布爾操作類指令中位地址可用以下多種方式表示,這布爾操作類指令中位地址可用以下多種方式表示,這 些方式均能為些方式均能為80C51的匯編程序所識別:的匯編程序所識別: 直接用位地址直接用位地址0255或或0FFH表示;表示; 采用字節(jié)地址的位數(shù)方式表示,兩者之間用采用字節(jié)地址的位數(shù)方式表示,兩者之間用“”隔開,

27、隔開, 如:如:20H0; 1FH7等等 采用字節(jié)寄存器名加位數(shù)表示,兩者之間用采用字節(jié)寄存器名加位數(shù)表示,兩者之間用“”隔開,隔開, 如:如:P15;PSW5等;等; 采用位寄存器的定義名稱表示,如:采用位寄存器的定義名稱表示,如:F0。 如如: 位地址位地址D5H、F0、D0. 5、PSW.5等表示的是同一位。等表示的是同一位。 80C51控制轉(zhuǎn)移類指令及位操作指令 MOV C,bit ;(;(C)(bit) MOV bit,C ;(;(bit)(C) 功能:將源操作數(shù)(位地址或布爾累加器)送到目功能:將源操作數(shù)(位地址或布爾累加器)送到目 的操作數(shù)(布爾累加器或位地址)中去。的操作數(shù)(布

28、爾累加器或位地址)中去。 布爾傳送指令布爾傳送指令 80C51控制轉(zhuǎn)移類指令及位操作指令 例:設(shè)(例:設(shè)(C)=1, 執(zhí)行指令執(zhí)行指令: MOV P13,C, 執(zhí)行結(jié)果為執(zhí)行結(jié)果為 P13口線輸出口線輸出“l(fā)”。 例:設(shè)例:設(shè)P1口的內(nèi)容為口的內(nèi)容為00111010B, 執(zhí)行指令執(zhí)行指令: : MOV C,P13, 執(zhí)行結(jié)果為(執(zhí)行結(jié)果為(C)1。 80C51控制轉(zhuǎn)移類指令及位操作指令 1 位清除(位清除(CLR)指令)指令 CLR C ;(;(C)0 CLR bit ;(;(bit)0 功能:將功能:將C或指定位(或指定位(bit)清)清0。 例:設(shè)例:設(shè)P1口的內(nèi)容為口的內(nèi)容為1 1 1

29、1 1 0 1 0 B,執(zhí)行指令為,執(zhí)行指令為CLR P10后,后,(P1)=1 1 1 1 1 0 1 0 B 。 2 位置位置1(SETB) 指令指令 SETB C ;(;(C)l SETB bit ;(;(bit)1 功能:將功能:將C或指定位(或指定位(bit)置)置1。 布爾狀態(tài)控制指令布爾狀態(tài)控制指令 80C51控制轉(zhuǎn)移類指令及位操作指令 例:設(shè)(例:設(shè)(C)0,P3口的內(nèi)容為口的內(nèi)容為1 1 1 1 1 0 1 0 B。 執(zhí)行指令為執(zhí)行指令為SETB P30 SETB C 執(zhí)行結(jié)果為(執(zhí)行結(jié)果為(C)1,P301,即,即P31 1 1 1 1 0 1 1 B。 3 位取反(位取反

30、(CPL)指令)指令 CPL C ;(;(C)(C) CPL bit ;(;(bit)(bit) 功能:將功能:將 C或指定位(或指定位(bit)取反。)取反。 例:設(shè)(例:設(shè)(C)0,P1口的內(nèi)容為口的內(nèi)容為0 0 1 1 1 0 1 0 B。 執(zhí)行指令為執(zhí)行指令為CPL P1.0 CPL C 執(zhí)行結(jié)果為(執(zhí)行結(jié)果為(C)=1,P1.0=l,即,即P00 0 1 1 1 0 1 1 B。 80C51控制轉(zhuǎn)移類指令及位操作指令 1位邏輯位邏輯“與與”(ANL)操作指令)操作指令 ANL C,bit ;(;(C)(C)(bit) ANL C,bit ;(;(C)(C)(bit) 功能:將指定位(

31、功能:將指定位(bit)的內(nèi)容或指定位內(nèi)容取反后(原內(nèi))的內(nèi)容或指定位內(nèi)容取反后(原內(nèi) 容不變?nèi)莶蛔?與與C的內(nèi)容進(jìn)行邏輯與運(yùn)算,結(jié)果仍存于的內(nèi)容進(jìn)行邏輯與運(yùn)算,結(jié)果仍存于C中。中。 例:設(shè)例:設(shè)(C)= l,P1口的內(nèi)容為口的內(nèi)容為1 1 1 1 1 0 1 1 B,(ACC7)0。 執(zhí)行指令為執(zhí)行指令為 ANL C,P1.0 ;(;(C)1 ANL C,ACC. 7 ;(;(C)0 執(zhí)行結(jié)果為(執(zhí)行結(jié)果為(C)0。 布爾布爾( (位位) )邏輯操作邏輯操作指令指令 80C51控制轉(zhuǎn)移類指令及位操作指令 1位邏輯位邏輯“與與”(ANL)操作指令)操作指令 ANL C,bit ;(;(C)(C

32、)(bit) ANL C,bit ;(;(C)(C)(bit) 功能:將指定位(功能:將指定位(bit)的內(nèi)容或指定位內(nèi)容取反后(原內(nèi))的內(nèi)容或指定位內(nèi)容取反后(原內(nèi) 容不變?nèi)莶蛔?與與C的內(nèi)容進(jìn)行邏輯與運(yùn)算,結(jié)果仍存于的內(nèi)容進(jìn)行邏輯與運(yùn)算,結(jié)果仍存于C中。中。 例:設(shè)例:設(shè)(C)= l,P1口的內(nèi)容為口的內(nèi)容為1 1 1 1 1 0 1 1 B,(ACC7)0。 執(zhí)行指令為執(zhí)行指令為 ANL C,P1.0 ;(;(C)1 ANL C,ACC. 7 ;(;(C)0 執(zhí)行結(jié)果為(執(zhí)行結(jié)果為(C)0。 布爾布爾( (位位) )邏輯操作邏輯操作指令指令 80C51控制轉(zhuǎn)移類指令及位操作指令 2位邏輯

33、位邏輯“或或”(ORL)操作指令)操作指令 ORL C,bit ;(;(C)C)十()十(bit) ORL C,/bit ;(;(C)(C)十()十(bit) 功能:將指定位(功能:將指定位(bit)的內(nèi)容或指定位內(nèi)容取反后)的內(nèi)容或指定位內(nèi)容取反后 (原內(nèi)容不變)與(原內(nèi)容不變)與C的內(nèi)容進(jìn)行邏輯或運(yùn)算。結(jié)果仍存于的內(nèi)容進(jìn)行邏輯或運(yùn)算。結(jié)果仍存于 C中。中。 例:設(shè)例:設(shè)(C)1,P1 口的內(nèi)容為口的內(nèi)容為1 1 1 1 1 0 1 1B,(ACC7)0。 執(zhí)行的指令為執(zhí)行的指令為ORL C,P1.0 ;(;(C)=1 ORL C,ACC 7 ;(;(C)=1 執(zhí)行結(jié)果為(執(zhí)行結(jié)果為(C)1

34、。 80C51控制轉(zhuǎn)移類指令及位操作指令 l、布爾累加器條件轉(zhuǎn)移指令、布爾累加器條件轉(zhuǎn)移指令 JC rel JNCrel 功能:對布爾累加器功能:對布爾累加器C進(jìn)行檢測,當(dāng)進(jìn)行檢測,當(dāng)C1或或C0時,時, 程序轉(zhuǎn)向程序轉(zhuǎn)向 當(dāng)前當(dāng)前PC值值 (轉(zhuǎn)移指令地址轉(zhuǎn)移指令地址+2)與第二字節(jié)中與第二字節(jié)中 帶符號的相對地址(帶符號的相對地址(rel)之和的目標(biāo)地址,否則程序)之和的目標(biāo)地址,否則程序 往下順序執(zhí)行。因此轉(zhuǎn)移的范圍是往下順序執(zhí)行。因此轉(zhuǎn)移的范圍是128+127 B。 布爾(位)條件轉(zhuǎn)移指令布爾(位)條件轉(zhuǎn)移指令 80C51控制轉(zhuǎn)移類指令及位操作指令 例:設(shè)(例:設(shè)(C)0 執(zhí)行指令:執(zhí)行

35、指令: JC LABEL1 ;(C)=0,則程序順序往下執(zhí),則程序順序往下執(zhí) ;行;行 CPL C ;(C)=1,程序轉(zhuǎn),程序轉(zhuǎn)LABEL2 JC LABEL2 ;以后,進(jìn)位位取反變?yōu)?;以后,進(jìn)位位取反變?yōu)閘,程序轉(zhuǎn)向,程序轉(zhuǎn)向LABEL2單元執(zhí)行。單元執(zhí)行。 例:設(shè)(例:設(shè)(C)1。 執(zhí)行指令:執(zhí)行指令: JNCLABEL1 CLR C JNC LABEL2 ;以后,進(jìn)位位清為;以后,進(jìn)位位清為0,程序轉(zhuǎn)向,程序轉(zhuǎn)向LABEL2單元執(zhí)行。單元執(zhí)行。 80C51控制轉(zhuǎn)移類指令及位操作指令 2位測試條件轉(zhuǎn)移指令位測試條件轉(zhuǎn)移指令 JB bit,rel JNB bit,rel 功能:檢測指定位,當(dāng)位變量分別為功能:檢測指定位,當(dāng)位變量分別為1或或 0時,程序轉(zhuǎn)向當(dāng)前時,程序轉(zhuǎn)向當(dāng)前PC 值值(轉(zhuǎn)移指令地址轉(zhuǎn)移指令地址+2)與第二字節(jié)中帶符號的相對地址(與第二字節(jié)中帶符號的相對地址(

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論