單片機(jī)教程3-MCS-51指令系統(tǒng).ppt
《單片機(jī)教程3-MCS-51指令系統(tǒng).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《單片機(jī)教程3-MCS-51指令系統(tǒng).ppt(64頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
2020 3 28 1 3 1概述 7種尋址方式 111條指令 字節(jié)數(shù) 運(yùn)算速度 單字節(jié)指令 49條雙字節(jié)指令 45條三字節(jié)指令 17條 單周期指令 64條雙周期指令 45條四周期指令 2條 第三章MCS 51指令系統(tǒng) 2020 3 28 2 功能 數(shù)據(jù)傳送類 29條算術(shù)運(yùn)算類 24條邏輯運(yùn)算類 24條控制轉(zhuǎn)移類 17條位操作類 17條 2020 3 28 3 常用符號 Rn 工作寄存器中的寄存器R0 R1 R7之一 Ri 工作寄存器中的寄存器R0或R1 data 8位立即數(shù) data16 16位立即數(shù) direct 片內(nèi)RAM或SFR的地址 8位 間接尋址寄存器 Bit 片內(nèi)RAM或SFR的位地址 addr11 11位目的地址 addr16 16位目的地址 2020 3 28 4 rel 補(bǔ)碼形式的8位地址偏移量 偏移范圍為 128 127 位操作指令中 該位求反后參與操作 不影響該位X 片內(nèi)RAM的直接地址或寄存器 X 相應(yīng)地址單元中的內(nèi)容 箭頭左邊的內(nèi)容送入箭頭右邊的單元內(nèi) 2020 3 28 5 3 2尋址方式 3 2 1立即尋址ImmediateAddressing 操作數(shù)就包含在指令代碼中 在操作碼之后 稱為立即數(shù) 用 表示 MCS 51如 MOVP1 80HMOVR7 0F5HMOVDPTR 1245H 操作數(shù)存在程序存儲(chǔ)器中 2020 3 28 6 3 2 2直接尋址DirectAddressing直接使用數(shù)所在單元的地址找到了操作數(shù) 所以稱這種方法為直接尋址 操作數(shù)在SFR 內(nèi)部RAM 位地址空間 如 MOVA 00HMOVC 60HMOVA 0F0H 2020 3 28 7 3 2 3寄存器尋址RegisterAddressing 對選定的工作寄存器R0 R7 累加器A 通用寄存器B 地址寄存器DPTR中的數(shù)進(jìn)行操作 例 MOVA R0 將R0工作寄存器中的數(shù)據(jù)送到累加器A中去 提一個(gè)問題 我們知道 工作寄存器就是內(nèi)存單元的一部分 如果我們選擇工作寄存器組0 則R0就是RAM的00H單元 那么這樣一來 MOVA 00H和MOVA R0不就沒什么區(qū)別了嗎 2020 3 28 8 的確 這兩條指令執(zhí)行的結(jié)果是完全相同的 都是將00H單元中的內(nèi)容送到A中去 但是執(zhí)行的過程不同 執(zhí)行第一條指令需要2個(gè)機(jī)器周期 而第二條則只需要1個(gè)機(jī)器周期 第一條指令變成最終的目標(biāo)碼要兩個(gè)字節(jié) E5H00H 而第二條則只要一個(gè)字節(jié) E8H 就可以了 2020 3 28 9 3 2 4寄存器間接尋址RegisterIndirectAddressing 把地址放在另外一個(gè)寄存器中 根據(jù)這個(gè)寄存器中的數(shù)值決定該到哪個(gè)單元中取數(shù)據(jù) R0 R1 8位地址 片內(nèi)低128字節(jié)或片外DPTR 16位 片外64KBMCS 51如 MOVA R0MOVXA R0MOVXA DPTR 操作數(shù)在片內(nèi)RAM中 操作數(shù)在片外RAM中 操作數(shù)在片外RAM中 2020 3 28 10 以DPTR或PC為基址寄存器 累加器A為變址寄存器 把兩者內(nèi)容相加 結(jié)果作為操作數(shù)的地址 常用于查表操作 MCS 51MOVCA A DPTR A DPTR AMOVCA A PC PC 1 PC A PC A 3 2 5變址尋址 基址 變址 Base Register plus Index Register IndirectAddressing 操作數(shù)在程序存儲(chǔ)器中 2020 3 28 11 如 MOVCA A DPTR設(shè)DPTR 2000H A E0H 20E0H 47 指令代碼 2020 3 28 12 3 2 6相對尋址 將PC中的當(dāng)前內(nèi)容與指令第二字節(jié)給出的數(shù)相加 結(jié)果作為跳轉(zhuǎn)指令的轉(zhuǎn)移地址 轉(zhuǎn)移目的地址 PC中的當(dāng)前內(nèi)容稱為基地址 本指令后的字節(jié)地址 指令第二字節(jié)給出的數(shù)據(jù)稱為偏移量 1字節(jié)帶符號數(shù) 常用于跳轉(zhuǎn)指令 如 JC23H若C 0 不跳轉(zhuǎn) C 1 跳轉(zhuǎn) RelativeAddressing 改變PC 2020 3 28 13 如 JC23 1025H 23H 1002H 指令代碼 當(dāng)前PC 2020 3 28 14 對片內(nèi)RAM的位尋址區(qū)和某些可位尋址的特殊功能寄存器進(jìn)行位操作時(shí)的尋址方式 如 SETB3DH 將27H 5位置1CLRC Cy位清0 3 2 7位尋址BitAddressing 操作數(shù)在片內(nèi)RAM位地址區(qū)或SFR某些位中 2020 3 28 15 尋址方式涉及的存儲(chǔ)器空間 2020 3 28 16 3 3數(shù)據(jù)傳送類指令 29條 DataTransferInstruction MCS 51助記符 助記符 MOV MOVX MOVCXCH XCHD SWAPPUSH POP源操作數(shù)尋址方式 5種 立即尋址 直接尋址 寄存器尋址 寄存器間接尋址 變址尋址 目的操作數(shù)尋址方式 3種 直接尋址 寄存器尋址 寄存器間接尋址除了目的操作數(shù)為ACC的指令影響奇偶標(biāo)志P外 一般不影響標(biāo)志位 2020 3 28 17 3 3 1十六位數(shù)的傳遞指令 1條 MOVDPTR data168051是一種8位機(jī) 這是唯一的一條16位立即數(shù)傳遞指令 功能 將一個(gè)16位的立即數(shù)送入DPTR中去 其中高8位送入DPH 低8位送入DPL 例 MOVDPTR 1234H執(zhí)行完了之后DPH中的值為12H DPL中的值為34H 如果我們分別向DPH DPL送數(shù) 則結(jié)果也一樣 如下面兩條指令 MOVDPH 35HMOVDPL 12H 則就相當(dāng)于執(zhí)行了MOVDPTR 3512H 2020 3 28 18 3 3 2累加器A與片外RAM之間的數(shù)據(jù)傳遞類指令 4條 MOVXA RiMOVX Ri AMOVXA DPTRMOVX DPTR A說明 1 在51中 與外部存儲(chǔ)器RAM打交道的只可以是A累加器 所有需要送入外部RAM的數(shù)據(jù)必需要通過A送去 而所有要讀入的外部RAM中的數(shù)據(jù)也必需通過A讀入 在此我們可以看出內(nèi)外部RAM的區(qū)別了 內(nèi)部RAM間可以直接進(jìn)行數(shù)據(jù)的傳遞 而外部則不行 比如 要將外部RAM中某一單元 設(shè)為0100H單元的數(shù)據(jù) 送入另一個(gè)單元 設(shè)為0200H單元 也必須先將0100H單元中的內(nèi)容讀入A 然后再送到0200H單元中去 2020 3 28 19 2 要讀或?qū)懲獠康腞AM 當(dāng)然也必須要知道RAM的地址 在后兩條指令中 地址是被直接放在DPTR中的 而前兩條指令 由于Ri 即R0或R1 只是8位的寄存器 所以只提供低8位地址 高8位地址由P2口來提供 3 使用時(shí)應(yīng)先將要讀或?qū)懙牡刂匪腿隓PTR或Ri中 然后再用讀寫命令 例 將外部RAM中100H單元中的內(nèi)容送入外部RAM中200H單元中 MOVDPTR 0100HMOVXA DPTRMOVDPTR 0200HMOVX DPTR A 2020 3 28 20 3 3 3讀程序存儲(chǔ)器指令 2條 MOVCA A DPTRMOVCA A PC本組指令是將ROM中的數(shù)送入A中 本組指令也被稱為查表指令 常用此指令來查一個(gè)已做好在ROM中的表格說明 查找到的結(jié)果被放在A中 因此 本條指令執(zhí)行前后 A中的值不一定相同 例 有一個(gè)數(shù)在R0中 要求用查表的方法確定它的平方值 此數(shù)的取值范圍是0 5 MOVDPTR 100HMOVA R0MOVCA A DPTR ORG0100HDB0 1 4 9 16 25 如果R0中的值為2 則最終地址為100H 2為102H 到102H單元中找到的是4 2020 3 28 21 3 3 4堆棧操作 2條 PUSHdirect SP SP 1 SP direct POPdirect direct SP SP SP 1第一條為壓入指令 就是將direct中的內(nèi)容送入堆棧中 第二條為彈出指令 就是將堆棧中的內(nèi)容送回到direct中 例 MOVSP 5FHMOVA 100MOVB 20PUSHACCPUSHB則執(zhí)行第一條PUSHACC指令是這樣的 將SP中的值加1 即變?yōu)?0H 然后將A中的值送到60H單元中 因此執(zhí)行完本條指令后 內(nèi)存60H單元的值就是100 同樣 執(zhí)行PUSHB時(shí) 是將SP 1 即變?yōu)?1H 然后將B中的值送入到61H單元中 即執(zhí)行完本條指令后 61H單元中的值變?yōu)?0 2020 3 28 22 1 給出每條指令執(zhí)行后的結(jié)果 MOV23H 30HMOV12H 34HMOVR0 23HMOVR7 12HMOVR1 12HMOVA R0MOV34H R1MOV45H 34HMOVDPTR 6712HMOV12H DPHMOVR0 DPLMOVA R0 23H 30H 12H 34H R0 23H R7 34H R1 12H A 30H 34H 34H 45H 34H DPTR 6712H 12H 67H R0 12H A 67H 內(nèi)部RAM 2020 3 28 23 3 4算術(shù)運(yùn)算類指令 24條 ArithmeticOperations 主要對8位無符號數(shù) 也可用于帶符號數(shù)運(yùn)算 包括 加 減 乘 除 加1 減1運(yùn)算指令影響PSW有關(guān)位 2020 3 28 24 3 4 1加法指令 ADDA data A data AADDA direct A direct AADDA Rn A Rn AADDA Ri A Ri A用途 將A中的值與源操作數(shù)所指內(nèi)容相加 最終結(jié)果存在A中 1 不帶進(jìn)位位的加法指令 4條 2020 3 28 25 2 帶進(jìn)位位的加法指令 4條 ADDCA Rn A Rn CY AADDCA direct A direct CY AADDCA Ri A Ri CY AADDCA data A data CY A用途 將A中的值和其后面的值以及進(jìn)位位C中的值相加 最終結(jié)果存在A 常用于多字節(jié)數(shù)運(yùn)算中 說明 由于51單片機(jī)是一種8位機(jī) 所以只能做8位的數(shù)學(xué)運(yùn)算 但8位運(yùn)算的范圍只有0 255 這在實(shí)際工作中是不夠的 因此就要進(jìn)行擴(kuò)展 一般是將2個(gè)8位 兩字節(jié) 的數(shù)學(xué)運(yùn)算合起來 成為一個(gè)16位的運(yùn)算 這樣 可以表達(dá)的數(shù)的范圍就可以達(dá)到0 65535 2020 3 28 26 例 先做67H A0H 107H 而107H顯然超過了0FFH 因此最終保存在A中的是07H 而1則到了PSW中的CY位了 換言之 CY就相當(dāng)于是100H 然后再做10H 30H CY 結(jié)果是41H 所以最終的結(jié)果是4107H 1067H 30A0H 0001000001100111 0011000010100000 0100000100000111 1067H 30A0H 4107H 2020 3 28 27 設(shè) 1067H存在R1R0中 30A0H存在R3R2中 計(jì)算R1R0 R3R2 結(jié)果存在R5R4中 MOVA R0ADDA R2 R0 R2 A和CYMOVR4 AMOVA R1ADDCA R3 R1 R3 CY A和CYMOVR5 A 2020 3 28 28 又例 先做67H 20H 87H 沒有超過0FFH 因此最終保存在A中的是87H 而PSW中的CY 0 然后再做10H 30H CY 結(jié)果是40H 所以最終的結(jié)果是4087H 1067H 3020H 0001000001100111 0011000000100000 0100000010000111 1067H 3020H 4087H 2020 3 28 29 DAA在進(jìn)行BCD碼加法運(yùn)算時(shí) 跟在ADD和ADDC指令之后 用于對累加器A中剛進(jìn)行的兩個(gè)BCD碼的加法的結(jié)果進(jìn)行十進(jìn)制調(diào)整 例 A 00010101BCD 代表十進(jìn)制數(shù)15 ADDA 8 3 十進(jìn)制調(diào)整指令 1條 A 1DH 按二進(jìn)制規(guī)律加 A 23H 按十進(jìn)制規(guī)律加 DAA 2020 3 28 30 調(diào)整要完成的任務(wù)是 1 當(dāng)累加器A中的低4位數(shù)出現(xiàn)了非BCD碼 1010 1111 或低4位產(chǎn)生進(jìn)位 AC 1 則應(yīng)在低4位加6調(diào)整 以產(chǎn)生低4位正確的BCD結(jié)果 2 當(dāng)累加器A中的高4位數(shù)出現(xiàn)了非BCD碼 1010 1111 或高4位產(chǎn)生進(jìn)位 CY 1 則應(yīng)在高4位加6調(diào)整 以產(chǎn)生高4位正確的BCD結(jié)果 十進(jìn)制調(diào)整指令執(zhí)行后 PSW中的CY表示結(jié)果的百位值 2020 3 28 31 例若 A 01010110B 表示的BCD碼為56 R3 01100111B 表示的BCD碼為67 CY 0 執(zhí)行以下指令 ADDA R2DAA由于 A 00100011B 即 且 CY 1 即 結(jié)果為BCD數(shù)123 應(yīng)該注意 DA指令不能對減法進(jìn)行十進(jìn)制調(diào)整 2020 3 28 32 3 4 2減法指令 8條 SUBBA Rn A Rn CY ASUBBA direct A direct CY ASUBBA Ri A Ri CY ASUBBA data A data CY A將A中的值減去源操作數(shù)所指內(nèi)容以及進(jìn)位位C中的值 最終結(jié)果存在A中 如 SUBBA R2設(shè) A C9H R2 55H CY 1 執(zhí)行指令之后 A中的值為73H 1 帶借位的減法指令 4條 2020 3 28 33 說明 沒有不帶借位的減法指令 如果需要做不帶位的減法指令 在做第一次相減時(shí) 只要將CY清零即可 對帶符號數(shù) 要注意OV標(biāo)志 OV 1 出錯(cuò) 2020 3 28 34 3 5邏輯運(yùn)算類指令 24條 主要用于對2個(gè)操作數(shù)按位進(jìn)行邏輯操作 結(jié)果送到A或直接尋址單元 主要操作與 或 異或 移位 取反 清零等 對標(biāo)志位的影響除了目的操作數(shù)為ACC的指令影響奇偶標(biāo)志P外 一般不影響標(biāo)志位 LogicOperations 2020 3 28 35 3 5 1邏輯或指令 6條 ORLA Rn A Rn AORLA direct A direct AORLA Ri A Ri AORLA data A data AORLdirect A direct A direct ORLdirect data direct data direct 例 71H和56H相或 01110001 71H 01010110 56H 01110111即77H 后兩條指令 若直接地址為I O端口 則為 讀 改寫 操作 ORLogicInstruction 2020 3 28 36 3 5 2邏輯與指令 6條 ANLA Rn A Rn AANLA direct A direct AANLA Ri A Ri AANLA data A data AANLdirect A direct A direct ANLdirect data direct data direct 例 71H和56H相與 01110001 71H 01010110 56H 01010000即50H 后兩條指令 若直接地址為I O端口 則為 讀 改寫 操作 ANdLogicInstruction 2020 3 28 37 例 71H和56H相異或 01110001 71H 01010110 56H 3 5 2邏輯異或指令 6條 XRLA Rn A Rn AXRLA direct A direct AXRLA Ri A Ri AXRLA data A data AXRLdirect A direct A direct XRLdirect data direct data direct 00100111即27H 后兩條指令 若直接地址為I O端口 則為 讀 改寫 操作 eXclusive oRLogicInstruction 2020 3 28 38 3 5 3清0與取反指令 2條 取反 CPLA A A例 若A 5CH 執(zhí)行CPLA結(jié)果 A A3H 清0 CLRA 0 A ComPlementLogicOperation 2020 3 28 39 3 5 4循環(huán)移位指令 4條 RLARRARLCARRCA 后兩條指令 影響P標(biāo)志和CY RotateLogicinstruction 2020 3 28 40 例 若A 5CH CY 1 執(zhí)行RLCA后 對RLC RRC指令 在CY 0時(shí)RLC相當(dāng)于乘以2RRC相當(dāng)于除以2 結(jié)果 A B9H CY 0 P 1 2020 3 28 41 3 6控制轉(zhuǎn)移類指令 17條 BranchingInstruction 共有控制程序轉(zhuǎn)移類指令 不包括位操作類的轉(zhuǎn)移指令 此類指令一般不影響PSW 包括以下類型 無條件轉(zhuǎn)移和條件轉(zhuǎn)移相對轉(zhuǎn)移和絕對轉(zhuǎn)移長轉(zhuǎn)移和短轉(zhuǎn)移調(diào)用與返回指令 2020 3 28 42 3 6 1無條件轉(zhuǎn)移類指令 4條 短轉(zhuǎn)移類指令 AJMPaddr11長轉(zhuǎn)移類指令 LJMPaddr16相對轉(zhuǎn)移指令 SJMPrel間接轉(zhuǎn)移指令 JMP A DPTR 1 上面的前三條指令 統(tǒng)統(tǒng)理解成 PC值改變 即跳轉(zhuǎn)到一個(gè)標(biāo)號處 那么他們的區(qū)別何在呢 2020 3 28 43 跳轉(zhuǎn)的范圍不同 短轉(zhuǎn)移類指令 AJMPaddr11長轉(zhuǎn)移類指令 LJMPaddr16相對轉(zhuǎn)移指令 SJMPrel 轉(zhuǎn)移范圍 2KB64KB 128 127 指令構(gòu)成不同 AJMP LJMP后跟的是絕對地址 而SJMP后跟的是相對地址 指令長度不同原則上 所有用SJMP或AJMP的地方都可以用LJMP來替代 2020 3 28 44 間接轉(zhuǎn)移指令 JMP A DPTR 這條指令的用途也是跳轉(zhuǎn) 轉(zhuǎn)到什么地方去呢 這可不能由標(biāo)號簡單地決定了 轉(zhuǎn)移地址由A DPTR形成 并直接送入PC 指令對A DPTR和標(biāo)志位均無影響 本指令可代替眾多的判別跳轉(zhuǎn)指令 又稱為散轉(zhuǎn)指令 多用于多分支程序結(jié)構(gòu)中 2 第四條指令與前三條指令相比有所不同 2020 3 28 45 例 MOVDPTR TAB 將TAB代表的地址送入DPTRJMP A DPTR 跳轉(zhuǎn)TAB AJMPROUT0 跳轉(zhuǎn)ROUT0開始的程序段TAB 2 AJMPROUT1 跳轉(zhuǎn)ROUT1開始的程序段TAB 4 AJMPROUT2 跳轉(zhuǎn)ROUT2開始的程序段TAB 6 AJMPROUT3 跳轉(zhuǎn)ROUT3開始的程序段 ROUT0 ROUT1 ROUT2 ROUT3 執(zhí)行該段程序后 程序?qū)⒏鶕?jù)A中的內(nèi)容轉(zhuǎn)移到不同的程序段去執(zhí)行 散轉(zhuǎn) A 0 轉(zhuǎn)ROUT0A 2 轉(zhuǎn)ROUT1A 4 轉(zhuǎn)ROUT2A 6 轉(zhuǎn)ROUT3 2020 3 28 46 3 6 2條件轉(zhuǎn)移指令 8條 條件轉(zhuǎn)移指令是指在滿足一定條件時(shí)進(jìn)行相對轉(zhuǎn)移 否則程序繼續(xù)執(zhí)行本指令的下一條指令 一 判A內(nèi)容是否為0轉(zhuǎn)移指令 2條 JZrel 如果A 0 則轉(zhuǎn)移 否則順序執(zhí)行 JNZrel 如果A 0 就轉(zhuǎn)移 轉(zhuǎn)移到相對于當(dāng)前PC值的8位移量的地址去 即 新的PC值 當(dāng)前PC 偏移量rel我們在編寫匯編語言源程序時(shí) 可以直接寫成 JZ標(biāo)號 即轉(zhuǎn)移到標(biāo)號處 2020 3 28 47 例 MOVA R0JZL1MOVR1 00HAJMPL2L1 MOVR1 0FFHL2 SJMPL2END在執(zhí)行上面這段程序前 如果R0 0 結(jié)果R1 0FFH 而如果R0 0 則結(jié)果是R1 00H 把上面的那個(gè)例子中的JZ改成JNZ 看看程序執(zhí)行的結(jié)果是什么 如果R0 0 結(jié)果R1 00H 如果R0 0 結(jié)果是R1中的值為0FFH 2020 3 28 48 二 比較不等轉(zhuǎn)移指令 4條 CJNEA data relCJNEA direct relCJNERn data relCJNE Ri data rel此類指令的功能是將兩個(gè)操作數(shù)比較 如果兩者相等 就順序執(zhí)行 如果不相等 就轉(zhuǎn)移 同樣地 使用時(shí) 我們可以將rel理解成標(biāo)號 即 CJNEA data 標(biāo)號CJNEA direct 標(biāo)號CJNERn data 標(biāo)號CJNE Ri data 標(biāo)號 2020 3 28 49 利用這些指令 可以判斷兩數(shù)是否相等 但有時(shí)還想得知兩數(shù)比較之后哪個(gè)大 哪個(gè)小 本條指令也具有這樣的功能 如果兩數(shù)不相等 則CPU還會(huì)用CY 進(jìn)位位 來反映哪個(gè)數(shù)大 哪個(gè)數(shù)小 如果前面的數(shù)大 則CY 0 否則CY 1 因此在程序轉(zhuǎn)移后再次利用CY就可判斷出哪個(gè)數(shù)大 哪個(gè)數(shù)小了 2020 3 28 50 舉例 MOVA R0CJNEA 10H L1MOVR1 0 如R0 10H 則不轉(zhuǎn)移R1 00H AJMPL3L1 JCL2 如CY 1即R010H 則轉(zhuǎn)移AJMPL3L2 MOVR1 0FFHL3 SJMPL3因此最終結(jié)果是 本程序執(zhí)行前 如果R0 10H 則R1 00H 如果R0 10H 則R1 0AAH 如果R0 10H 則R1 0FFH 2020 3 28 51 三 減1不為0轉(zhuǎn)移指令 2條 DJNZRn relDJNZdirect relDJNZ指令的執(zhí)行過程是這樣的 它將第一個(gè)參數(shù)中的值減1 然后看這個(gè)值是否等于0 如果等于0 就往下執(zhí)行 如果不等于0 就轉(zhuǎn)移到第二個(gè)參數(shù)所指定的地方去 例 DJNZ10H LOOP LOOP 2020 3 28 52 例 MOV23H 0AHCLRALOOP ADDA 23HDJNZ23H LOOPSJMP 上述程序段的執(zhí)行過程是 將23H單元中的數(shù)連續(xù)相加 存至A中 每加一次 23H單元中的數(shù)值減1 直至減到0 共加 23H 次 2020 3 28 53 3 6 3調(diào)用與返回指令 4條 一 調(diào)用指令 2條 LCALLaddr16 長調(diào)用指令 3字節(jié) ACALLaddr11 短調(diào)用指令 2字節(jié) 上面兩條指令都是在主程序中調(diào)用子程序 兩者的區(qū)別 對短調(diào)用指令 被調(diào)用子程序入口地址必須與調(diào)用指令的下一條指令的第一字節(jié)在相同的2KB存儲(chǔ)區(qū)之內(nèi) 使用時(shí)可以用 LCALL標(biāo)號 標(biāo)號表示子程序首地址ACALL標(biāo)號來調(diào)用子程序 2020 3 28 54 指令的執(zhí)行過程是 當(dāng)前PC壓棧 子程序首地址送PC 實(shí)現(xiàn)轉(zhuǎn)移 二 返回指令 2條 子程序執(zhí)行完后必須回到主程序 如何返回呢 只要執(zhí)行一條返回指令就可以了 RET 子程序返回指令RETI 中斷子程序返回指令兩者不能互換使用 2020 3 28 55 3 6 4空操作指令 1條 NOP空操作 就是什么事也不干 停一個(gè)周期 一般用作短時(shí)間的延時(shí) RET指令的執(zhí)行過程是 堆棧棧頂內(nèi)容 2字節(jié) 調(diào)用時(shí)保存的當(dāng)前PC值 彈出給PC 實(shí)現(xiàn)返回 RETI指令除了具有RET指令的功能實(shí)現(xiàn)程序返回外 還有對中斷優(yōu)先級狀態(tài)觸發(fā)器的清零 2020 3 28 56 3 7位操作指令 17條 BooleanOperations MCS 51單片機(jī)的硬件結(jié)構(gòu)中 有一個(gè)位處理器 又稱布爾處理器 它有一套位變量處理的指令集 包括位變量傳送 邏輯運(yùn)算 控制程序轉(zhuǎn)移等 在MCS 51中 有一部份RAM和一部份SFR是具有位尋址功能的 位操作區(qū) 內(nèi)部RAM的20H 2FH這16個(gè)字節(jié)單元 即128個(gè)位單元 位地址空間位00 7FH 可以位尋址的特殊功能寄存器 8031中有一 2020 3 28 57 些SFR是可以進(jìn)行位尋址的 這些SFR的特點(diǎn)是其字節(jié)地址均可被8整除 如A累加器 B寄存器 PSW IP 中斷優(yōu)先級控制寄存器 IE 中斷允許控制寄存器 SCON 串行口控制寄存器 TCON 定時(shí)器 計(jì)數(shù)器控制寄存器 P0 P3 I O端口鎖存器 在進(jìn)行位處理時(shí) CY用作 位累加器 2020 3 28 58 以PSW中位4 RS1 為例 直接 位 地址方式 如D4H 點(diǎn)操作符號方式 如PSW 4 D0H 4 位名稱方式 如RS1 用戶定義名方式 如用偽指令bitSUB REGbitRS1定義后 可用SUB REG代替RS1 位地址表達(dá)方式 2020 3 28 59 3 7 1位傳送指令 2條 MOVC bit bit CMOVbit C C bit這組指令的功能是實(shí)現(xiàn)位累加器 CY 和其它位地址之間的數(shù)據(jù)傳遞 例 MOVC P1 0 將P1 0的狀態(tài)送給C MOVP1 0 C 將C中的狀態(tài)送到P1 0 引腳上去 2020 3 28 60 3 7 2位清0和置位 4條 位清0指令CLRC 使CY 0CLRbit 使指令的位地址等于0 例 CLRP1 0 即使P1 0變?yōu)?位置1指令SETBC 使CY 1SETBbit 使指定的位地址等于1 例 SETBP1 0 使P 0變?yōu)? 2020 3 28 61 3 7 3位邏輯運(yùn)算指令 6條 位與指令A(yù)NLC bit Cy與指定位的值相與 結(jié)果送CyANLC bit 先將指定的位地址中的值取出后取反 再和Cy相與 結(jié)果送回Cy 但注意 指定的位地址中的值本身并不發(fā)生變化 例 ANLC P1 0 2020 3 28 62 位取反指令CPLC 使Cy值取反 CPLbit 使指定的位的值取反 例 CPLP1 0 位或指令ORLC bitORLC bit 2020 3 28 63 3 7 4位條件轉(zhuǎn)移指令 5條 判Cy轉(zhuǎn)移指令JCrelJNCrel第一條指令的功能是如果Cy 1就轉(zhuǎn)移 否則就順序執(zhí)行 第二條指令則和第一條指令相反 即如果Cy 0就轉(zhuǎn)移 否則就順序執(zhí)行 同樣理解 JNC標(biāo)號 2020 3 28 64 判位變量轉(zhuǎn)移指令JBbit relJNBbit relJBCbit rel第一條指令 如果指定的 bit 1 則轉(zhuǎn)移 否則順序執(zhí)行 第二條指令功能相反 同樣理解 JBbit 標(biāo)號第三條指令是如果指定的 bit 1 則轉(zhuǎn)移 并把該位清0 否則順序執(zhí)行- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 單片機(jī) 教程 MCS 51 指令系統(tǒng)
鏈接地址:http://m.jqnhouse.com/p-8390236.html