單片微機(jī)原理與應(yīng)用part_03-1課件_第1頁
單片微機(jī)原理與應(yīng)用part_03-1課件_第2頁
單片微機(jī)原理與應(yīng)用part_03-1課件_第3頁
單片微機(jī)原理與應(yīng)用part_03-1課件_第4頁
單片微機(jī)原理與應(yīng)用part_03-1課件_第5頁
已閱讀5頁,還剩90頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、“單片機(jī)原理與應(yīng)用”課程 第 3 章 51系列單片機(jī)的指令系統(tǒng) 和程序設(shè)計(jì)方法2022/7/211第3章:指令系統(tǒng)和程序設(shè)計(jì)方法 3.1 指令系統(tǒng)概述3.2 尋址方式3.3 數(shù)據(jù)傳送類指令3.4 算術(shù)運(yùn)算類指令 3.8 匯編語言程序設(shè)計(jì)3.5 邏輯運(yùn)算類指令3.6 位操作類指令3.7 控制轉(zhuǎn)移類指令2022/7/212【基本知識(shí)點(diǎn)與要求】 理解指令的尋址方式及相應(yīng)的尋址空間。(2) 正確理解51系列單片機(jī)的111條基本指令的含義,熟練掌 握其應(yīng)用方法。(3) 了解機(jī)器語言、匯編語言和高級(jí)語言的特點(diǎn),匯編語言程序設(shè)計(jì)步驟。(4) 掌握匯編語言的基本格式,熟練掌握匯編語言程序設(shè)計(jì)思想和設(shè)計(jì)方法。(

2、5) 理解子程序的特點(diǎn),掌握子程序的設(shè)計(jì)方法和設(shè)計(jì)中應(yīng)注意的問題。 【重點(diǎn)與難點(diǎn)】 重點(diǎn)是指令的尋址方式及相應(yīng)的尋址空間、指令系統(tǒng)、子程序設(shè)計(jì)、匯編語言程序設(shè)計(jì)思想和設(shè)計(jì)方法。難點(diǎn)是寄存器間接尋址、相對(duì)尋址、變址尋址和位尋址,匯編語言程序設(shè)計(jì)思想和設(shè)計(jì)方法。第3章:指令系統(tǒng)和程序設(shè)計(jì)方法 2022/7/2133.1 指令概述3.1.1 51系列單片機(jī)指令分類 指令:計(jì)算機(jī)能夠識(shí)別和執(zhí)行、用于控制各種功能部件完成某一特定動(dòng)作的命令。 指令系統(tǒng):所有指令的集合構(gòu)成了該類計(jì)算機(jī)的指令系統(tǒng)。 這里講的是匯編語言指令,即以英文名稱或者縮寫形式作為助記符(幫助記憶的符號(hào))。5l系列單片機(jī)共有111條指令,

3、可有下列三種分類。 1. 按指令功能可分成如下五類(1)數(shù)據(jù)傳送類指令(29條):內(nèi)部8位數(shù)據(jù)傳送指令15條,內(nèi)部16位數(shù)據(jù)傳送指令1條,外部數(shù)據(jù)傳送指令4條,交換和查表指令9條。2022/7/214 (2)算術(shù)傳送類指令(24條):加法指令(包括BCD碼調(diào)整指令1條)14條,減法指令8條,乘/除法指令各1條。3.1 指令概述 (3)邏輯運(yùn)算類指令(24條):邏輯運(yùn)算指令20條,循環(huán)移位指令4條。 (4)位操作類指令(17條):位傳送指令2條,位置位、位清零和位取反6條,位運(yùn)算指令4條,位轉(zhuǎn)移指令3條,判CY標(biāo)志指令2條。 (5)控制轉(zhuǎn)移類指令(17條):無條件轉(zhuǎn)移指令4條,條件轉(zhuǎn)移指令8條,

4、調(diào)用和返回指令5條。 2. 按指令執(zhí)行所需要的時(shí)間可分為以下三類 (1)單周期指令(64條) (2)雙周期指令(45條) (3)四周期指令(2條)2022/7/2153.1 指令概述3. 按指令所占的字節(jié)數(shù)可分為以下三類 (1)單字節(jié)指令(49條) (2)雙字節(jié)指令(46條) (3)三字節(jié)指令(16條)3.1.2 指令格式 1. 指令格式 標(biāo)號(hào): 操作碼 目的操作數(shù) ,源操作數(shù) ;注釋 (1)匯編語言語句由標(biāo)號(hào)、操作碼、操作數(shù)和注釋4部分組成。其中,標(biāo)號(hào)和注釋部分可以沒有,某些指令也可以沒有操作數(shù)。 (2)標(biāo)號(hào)位于語句的開始,由18個(gè)ASCII字符組成,第一個(gè)字符必須是字母。標(biāo)號(hào)不能使用系統(tǒng)中

5、已經(jīng)定義的助記符、偽指令及其它標(biāo)號(hào)。標(biāo)號(hào)的后面必須加冒號(hào),標(biāo)號(hào)與冒號(hào)之間不能有空格,冒號(hào)與操作碼之間可以有空格。2022/7/2163.1 指令概述(3)操作碼是用英文縮寫的指令功能助記符。它確定了本條指令完成什么樣的操作功能,不能缺少。(4)操作數(shù)在操作碼之后,用空格分開。操作數(shù)是指參加操作的對(duì)象或者對(duì)象存放的地址,可以是數(shù)據(jù),可以是地址,也可以沒有。指令中有多個(gè)操作數(shù)時(shí),操作數(shù)之間用逗號(hào)分開。源操作數(shù),目的操作數(shù)。(5)注釋在語句的最后,以“;”開始,是說明性的文字,與語句的具體功能無關(guān),但是能增加程序的可閱讀性,便于程序的調(diào)試與交流。注釋內(nèi)容不參與程序的匯編。 2. 指令中數(shù)的表示 十進(jìn)

6、制數(shù)以D結(jié)尾或者省略;十六進(jìn)制以H結(jié)尾,如果數(shù)據(jù)以AF開頭,其前必須加數(shù)字0,如0FFH;字符串用“”括起來。2022/7/2173.1.3 指令中常用縮寫符號(hào)的意義3.1 指令概述(1)#data:8位立即數(shù)。(2)#data16:16位立即數(shù)。(3)Rn:工作寄存器R0R7,其中n=07。(4)Ri:工作寄存器,i=0或1。(5):間接地址符號(hào)。Ri,寄存器Ri間接尋址。(6)direct:8位直接地址,可以是特殊功能寄存器SFR的地址或內(nèi)部數(shù)據(jù)存儲(chǔ)器單元地址。(7)addr11:11位目的地址。用于AJMP和ACALL指令,均在2KB地址范圍內(nèi)轉(zhuǎn)移或調(diào)用。(8)addr16:16位目的地

7、址。用于LJMP和LCALL指令,可在64KB地址范圍內(nèi)轉(zhuǎn)移或調(diào)用。2022/7/2183.1 指令概述 (9)rel:有符號(hào)的8位偏移地址,主要用于所有的條件轉(zhuǎn)移指令和SJMP指令。其范圍是相對(duì)于下一條指令的第一字節(jié)地址,再偏移-128+127字節(jié)。(10)bit:位地址。片內(nèi)RAM的可尋址位和專用寄存器的可尋址位。(11)/ : 位操作數(shù)的前綴,表示對(duì)該位操作數(shù)取反,如 /bit。(12):當(dāng)前指令存放的地址。(13)(X):表示由X所指定的某寄存器或某單元中的內(nèi)容。(14)(X):表示由X間接尋址單元中的內(nèi)容。(15)B:通用寄存器,常用于乘法MUL和除法DIV指令。(16)C:進(jìn)位標(biāo)志

8、位或者布爾處理器中的累加器。(17):表示指令的操作結(jié)果是將箭頭右邊的內(nèi)容傳送到左邊。2022/7/2193.2.1 立即尋址 3.2 尋址方式 尋址方式:一條指令的運(yùn)行需要尋找相應(yīng)操作數(shù)或者從操作數(shù)所在地址尋找到本指令有關(guān)的操作數(shù)。 計(jì)算機(jī)指令系統(tǒng)中的操作數(shù)以不同的方式給出,其相應(yīng)的尋址方式也就有多種。注意通常均以源操作數(shù)來介紹尋址方式的。 51系列單片機(jī)的指令系統(tǒng)有立即尋址,直接尋址,寄存器尋址,間接尋址,變址尋址,相對(duì)尋址,位尋址等七種尋址方式。 立即尋址是指令中直接給出操作數(shù)的尋址方式。立即操作數(shù)用前面加有#號(hào)的8位或16位數(shù)來表示。立即數(shù)是指令代碼的一部分,只能作源操作數(shù)。 該尋址方

9、式用于對(duì)特殊功能寄存器和指定的存儲(chǔ)單元賦初值。2022/7/2110 例如:MOV A,#60H ; (A) 60H MOV DPTR,#3400H ;(DPTR) 3400H MOV 30H, #40H ; (30H)單元 40H 上述三條指令執(zhí)行后,累加器A中數(shù)據(jù)為立即數(shù)據(jù)60H,DPTR寄存器中數(shù)據(jù)為3400H,30H單元中數(shù)據(jù)為立即數(shù)40H。3.2.2 直接尋址 直接尋址:指令中直接給出操作數(shù)所在的存儲(chǔ)單元的地址號(hào)的尋址方式??梢允遣僮鲾?shù)所在的字節(jié)地址或位地址,也可以直接使用由符號(hào)名稱所表示的地址,即符號(hào)地址。 例如: MOV A,40H ; (A)(40H) 該指令的功能是把內(nèi)部數(shù)據(jù)

10、存儲(chǔ)器RAM 40H單元的內(nèi)容送到累加器A。指令直接給出了源操作數(shù)的地址40H。3.2 尋址方式2022/7/211151系列單片機(jī)中,直接尋址可訪問三種地址空間為:(1) 特殊功能寄存器SFR:直接尋址是唯一的訪問形式;(2) 內(nèi)部數(shù)據(jù)RAM低128個(gè)字節(jié)單元(地址范圍00H7FH);(3) 221個(gè)位地址空間。3.2 尋址方式3.2.3 寄存器尋址 寄存器尋址:就是操作數(shù)存放于寄存器中(Rn、ACC、B、DPTR、CY)的尋址方式。 例如: MOV A,R7 ;(A)(R7) 其功能是把寄存器R7內(nèi)的操作數(shù)傳送到累加器A中。由于操作數(shù)在R7中,因此在指令中指定了R7,就能從中取得操作數(shù)。2

11、022/7/21123.2 尋址方式3.2.4 寄存器間接尋址 寄存器間接尋址:由指令指出某個(gè)寄存器的內(nèi)容作為操作數(shù)地址的尋址方法,簡(jiǎn)稱寄存器間址。 寄存器間接尋址使用所選定寄存器區(qū)中的R0和R1作為地址指針,來尋址片內(nèi)數(shù)據(jù)存儲(chǔ)器RAM(00FFH)的256個(gè)單元,但它不能訪問特殊功能寄存器SFR。 寄存器間接尋址也適用于訪問外部數(shù)據(jù)存儲(chǔ)器,此時(shí),用R0、 R1或DPTR作為地址指針。 為了區(qū)別于寄存器尋址,在寄存器間接尋址中的寄存器名前用間址符號(hào)“”。 例如: MOV A,R0 ; (A)(R0) MOV A,R0 ; (A)(R0)2022/7/21133.2 尋址方式 第一條指令是寄存器

12、尋址,R0中為操作數(shù),指令碼為E8H;指令執(zhí)行后累加器A中為30H, 第二條指令是寄存器間址,R0中為操作數(shù)地址,不是操作數(shù),指令碼為E6H。指令執(zhí)行后累加器A中為操作數(shù)20H。2022/7/2114 3.2.5 變址尋址 變址尋址: 就是基址寄存器(DPTR和PC)與變址寄存器(A)的內(nèi)容相加,作為操作數(shù)的地址。 實(shí)現(xiàn)對(duì)程序存儲(chǔ)器的訪問。由于程序存儲(chǔ)器通常是只讀的,因此變址尋址只有讀操作而無寫操作,指令助記符采用MOVC。 3.2 尋址方式 5l系列單片機(jī)的變址尋址指令有3條: MOVC A,A+DPTR ;(A)(A)+(DPTR) MOVC A,A+PC ;(A)(A)+(PC) JMP

13、 A+DPTR ;(PC)(A)+(DPTR)2022/7/21153.2 尋址方式 3.2.6 相對(duì)尋址 相對(duì)尋址: 以當(dāng)前程序計(jì)數(shù)器PC的內(nèi)容為基礎(chǔ),加上指令給出的1個(gè)字節(jié)補(bǔ)碼(偏移量)形成新的PC值的尋址方式。 (1)當(dāng)前PC值是指相對(duì)轉(zhuǎn)移指令所在地址(一般稱為源地址)加上轉(zhuǎn)移指令字節(jié)數(shù)。即當(dāng)前PC值= 源地址 + 轉(zhuǎn)移指令字節(jié)數(shù),也就是相對(duì)轉(zhuǎn)移指令的下一條指令所在的地址。 例如: JZ rel 是一條累加器A為零就轉(zhuǎn)移的雙字節(jié)指令。若該指令地址(源地址)為2050H,則執(zhí)行該指令時(shí)的當(dāng)前PC值即為2052H。 2022/7/21163.2 尋址方式 (2)偏移量rel是有符號(hào)的單字節(jié)數(shù)

14、,以補(bǔ)碼表示,其相對(duì)值的范圍是-128+127,負(fù)數(shù)表示從當(dāng)前地址向地址減小的方向轉(zhuǎn)移,正數(shù)表示從當(dāng)前地址向地址增大的方向轉(zhuǎn)移。所以,相對(duì)轉(zhuǎn)移指令滿足條件后,轉(zhuǎn)移的地址(一般稱為目的地址)應(yīng)為:目的地址= 當(dāng)前PC值+rel=源地址+ 轉(zhuǎn)移指令字節(jié)數(shù) + rel 例如: 若指令JZ 08H 和JZ 0F4H 存放在2050H開始的程序存儲(chǔ)器單元。則累加器A為零的條件滿足后,從源地址(2050H)分別轉(zhuǎn)移10個(gè)單元。其相對(duì)尋址示意如圖3-3(a)、(b)所示。這兩條指令均為雙字節(jié)指令,機(jī)器代碼分別為:60H、08H和60H、F4H。 2022/7/2117(a) 指令JZ 08H尋址示意圖; (

15、b) 指令JZ 0F4H尋址示意圖 圖3-3 相對(duì)尋址示意圖3.2 尋址方式2022/7/21183.2 尋址方式 3.2.7 位尋址 位尋址:即指令中直接給出位地址。 51系列單片機(jī)具有位尋址功能,可以對(duì)內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM中的位尋址區(qū)的128位和部分特殊寄存器SFR中的相關(guān)位進(jìn)行尋址,并且位操作指令可對(duì)可尋址的每一位進(jìn)行傳送及邏輯操作?!咀⒁狻课粚ぶ分荒軐?duì)有位地址的單元作位尋址操作。位尋址其實(shí)是一種直接尋址方式,不過其地址是位地址,只能用在位操作指令之中。 例如: SETB PSW.3 ;(PSW.3)1 該指令的功能是將程序狀態(tài)字PSW中的第3位(RS0)置1。2022/7/21193.

16、2 尋址方式 51系列單片機(jī)的位地址有如下4種表示方法: (1)直接使用位地址。 例如 PSW寄存器位5地址為0D5H。(2)位名稱表示方法(位符號(hào)名)。 例如 PSW寄存器位5是F0標(biāo)志位,則可使用F0表示該位。(3)單元地址加位數(shù)的表示方法。 例如 PSW寄存器位5,表示為0D0H.5。(4)專用寄存器符號(hào)加位數(shù)的表示方法。例如 PSW寄存器的 位5,表示為PSW.5。2022/7/21203.2 數(shù)據(jù)傳送類指令 數(shù)據(jù)傳送指令共有29條。51單片機(jī)中的傳送指令約定從右向左傳送數(shù)據(jù),把源操作數(shù)傳送到目的操作數(shù),指令執(zhí)行后,源操作數(shù)不改變,目的操作數(shù)的內(nèi)容修改為源操作數(shù)。交換指令也屬于數(shù)據(jù)傳送

17、指令,是把兩個(gè)地址單元的內(nèi)容相互交換。 作用:數(shù)據(jù)傳送指令主要用于在單片機(jī)片內(nèi)RAM和特殊功能寄存器SFR之間傳送數(shù)據(jù),也可以用于在累加器A和片外存儲(chǔ)單元之間傳送數(shù)據(jù)。 特點(diǎn):數(shù)據(jù)傳送類指令不影響標(biāo)志位(進(jìn)位標(biāo)志CY、半進(jìn)位標(biāo)志AC和溢出標(biāo)志OV),但當(dāng)傳送或交換數(shù)據(jù)后影響累加器A的值時(shí),奇偶標(biāo)志位P的值則按A的值重新設(shè)定。2022/7/2121 內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM區(qū)是數(shù)據(jù)傳送最活躍的區(qū)域,可用的指令數(shù)也最多,共有16條指令,指令操作碼助記符為MOV。 指令格式: MOV 目的操作數(shù),源操作數(shù) 功能:把源操作數(shù)的內(nèi)容傳給目的操作數(shù),而源操作數(shù)的內(nèi)容不變,不影響標(biāo)志位。但當(dāng)執(zhí)行結(jié)果改變累加器A

18、的值時(shí),會(huì)使奇偶標(biāo)志P變化。3.3.1 內(nèi)部RAM數(shù)據(jù)傳送類指令 1. 以累加器為目的操作數(shù)的指令(4條)MOV A,Rn ;(A)(Rn),(n=07)MOV A,direct ;(A)(direct)MOV A,Ri ;(A)(Ri),(i=0、1)MOV A,data ;(A) data 2022/7/2122 這組指令的目的操作數(shù)都是累加器A,源操作數(shù)的尋址方式采用寄存器尋址、直接尋址、寄存器間接尋址和立即尋址。 3.3.1 內(nèi)部RAM數(shù)據(jù)傳送類指令2. 以寄存器Rn為目的操作數(shù)的指令(3條)MOV Rn,A ; (Rn) (A),(n=07) MOV Rn,direct ; (Rn)

19、 (direct),(n=07) MOV Rn,data ; (Rn) data,(n=07) 這組指令都是以工作寄存器為目的操作數(shù),源操作數(shù)的尋址方式采用寄存器尋址、直接尋址和立即尋址。2022/7/21233. 以直接地址為目的操作數(shù)的指令(5條) MOV direct,A ;(direct)(A) MOV direct,Rn ;(direct)(Rn),(n=07) MOV directl,direct2 ;(direct1)(direct2) MOV direct,Ri ;(direct) (Ri),(i=0、1) MOV direct,data ;(direct)data 這組指令的

20、目的操作數(shù)都是直接尋址單元,源操作數(shù)采用寄存器尋址、直接尋址、寄存器間接尋址和立即尋址。3.3.1 內(nèi)部RAM數(shù)據(jù)傳送類指令2022/7/21243.3.1 內(nèi)部RAM數(shù)據(jù)傳送類指令4. 以間接地址為目的操作數(shù)的指令(3條) MOV Ri,A ;(Ri)(A) MOV Ri,direct ;(Ri)(direct) MOV Ri,data ;(Ri)data 這組指令的目的操作數(shù)都是間接尋址單元,源操作數(shù)可采用寄存器尋址、直接尋址和立即尋址方式。5. 十六位數(shù)據(jù)的傳遞指令(1條) MOV DPTR,data16 ;(DPTR)data16 指令功能:將16位立即數(shù)送入DPTR,高8位送入DPH

21、,低8位送入DPL。2022/7/2125 例如: MOV DPH,#35H MOV DPL,#12H就相當(dāng)于執(zhí)行了 MOV DPTR,#3512H。3.3.1 內(nèi)部RAM數(shù)據(jù)傳送類指令圖3-4 內(nèi)部RAM間數(shù)據(jù)傳遞關(guān)系 判斷下列指令正、誤 MOV #30H,A MOV A ,R2MOV R1,R3 MOV R1,R0 MOV R1 ,R2 MOV R1 ,R0小結(jié)與注意點(diǎn) 2022/7/2126【例題3-2】 若(R0)=30H,片內(nèi)RAM(30H)=57H,片內(nèi)RAM(40H)=7FH,試比較: MOV A,R0 和 MOV A,R0 MOV A,#40H 和 MOV A,40H 執(zhí)行后的

22、結(jié)果3.3.1 內(nèi)部數(shù)據(jù)傳送類指令舉例解:它們的執(zhí)行結(jié)果為: MOV A,R0 ;(A)=30H MOV A,R0 ;(A)=57H MOV A,#40H ;(A)=40H MOV A,40H ;(A)=7FH 【例題3-5】 完成將片內(nèi)RAM15H單元的內(nèi)容0A7H送55H單元。解法1:MOV 55H,15H解法2:MOV R6,15H MOV 55H,R6解法3:MOV R1,15H MOV 55H,R1解法4:MOV A,15H MOV 55H,A2022/7/21273.3.1 內(nèi)部數(shù)據(jù)傳送類指令舉例【例題3-6】 編寫把30H和40H單元的內(nèi)容進(jìn)行交換的程序段。 解:分析,30H和4

23、0H單元中都裝有數(shù)據(jù),要想把其中的內(nèi)容相交換必須尋求第三個(gè)存儲(chǔ)單元對(duì)其中的一個(gè)數(shù)進(jìn)行暫存(緩沖),若這個(gè)存儲(chǔ)單元選為累加器A,則相應(yīng)程序如下: MOV A,30H ; (A)(30H) MOV 30H,40H ; (30H)(40H) MOV 40H,A ; (40H)(A)2022/7/2128 51系列單片機(jī)中,與外部存儲(chǔ)器RAM或I/O端口之間進(jìn)行數(shù)據(jù)交換的只可以是累加器A。即所有片外RAM或者I/O端口數(shù)據(jù)傳送必須通過累加器A進(jìn)行。指令助記符為MOVX,其中的X表示外部(External),共計(jì)4條指令。MOVX A, Ri ;(A)(Ri) 讀操作MOVX Ri, A ;(Ri)(A

24、) 寫操作MOVX A,DPTR ;(A)(DPTR)讀MOVX DPTR,A ;(DPTR)(A)寫要點(diǎn)分析:(1)訪問片外RAM,需要知道RAM單元的地址,在后兩條指令中,地址是被直接放在DPTR中,可尋址外部RAM的64KB空間。而前兩條指令,由于Ri(即R0或R1)是8位的寄存器,所以僅限于訪問片外RAM的低256個(gè)單元。3.3.2 訪問外部RAM數(shù)據(jù)傳送指令2022/7/2129【例題3-7】 實(shí)現(xiàn)將外部RAM中0010H單元中的內(nèi)容送入外部RAM中2000H單元中。3.3.2 訪問外部RAM數(shù)據(jù)傳送指令 (2)使用訪問外部RAM數(shù)據(jù)傳送指令時(shí),應(yīng)當(dāng)首先將要讀或?qū)懙牡刂匪腿薉PTR或

25、Ri中,然后再用讀或者寫命令。 (3)也可以由P2與R0或P2與R1組成16位地址指針,尋址外部RAM的64KB空間。解:程序片段如下: MOV P2,00H MOV R0,10H MOVX A,R0 MOV DPTR,2000H MOVX DPTR,A2022/7/2130【例題3-8】 將外部存儲(chǔ)器2000H單元的內(nèi)容送入2100H單元。 解:程序如下: MOV DPTR,#2000H ; (DPTR) 2000H MOVX A,DPTR ; (A) (DPTR) MOV DPTR,#2100H ; (DPTR) 2100H MOVX DPTR,A ; (DPTR) (A) 3.3.2 訪

26、問外部RAM數(shù)據(jù)傳送指令2022/7/2131 這類指令共有2條,均屬于變址尋址指令,因?qū)iT用于從ROM中查找數(shù)據(jù)而又稱為查表指令。指令助記符為:MOVC,其中的C表示代碼(Code)。指令的格式為: MOVC A,A十DPTR ;(A)(A)十(DPTR) 讀操作 MOVC A,A十PC ;(PC)(PC)十1,(A)(A)十(PC)3.3.3 程序存儲(chǔ)器向A傳送數(shù)據(jù)指令 功能: 把累加器A中內(nèi)容(8位無符號(hào)數(shù))加上基址寄存器(PC,DPTR)內(nèi)容,求得程序存儲(chǔ)器某單元地址,再將該單元內(nèi)容送到累加器A中。2022/7/21323.3.3 程序存儲(chǔ)器向A傳送數(shù)據(jù)指令 (1)MOVC A,A+D

27、PTR 該指令的執(zhí)行結(jié)果只與指針DPTR及累加器A的內(nèi)容有關(guān),與該指令存放的地址無關(guān)。因此,表格的大小和位置可以在64KB程序存儲(chǔ)器中任意安排,并且一個(gè)表格可以為各個(gè)程序塊所共用。 (2)MOVC A, A+PC 該指令不改變特殊功能寄存器和PC的狀態(tài),只要根據(jù)A的內(nèi)容就可以取出表格中的常數(shù)。但是表格只能放在該條查表指令后面的256個(gè)單元之內(nèi),表格的大小受到限制,而且表格只能被一段程序所利用。?2022/7/2133【例題3-9】 在片內(nèi)20H單元存有一個(gè)09的BCD碼數(shù),用查表法獲得相應(yīng)的ASCII碼,并將其送入21H單元。(20H)=03H)3.3.3 程序存儲(chǔ)器向A傳送數(shù)據(jù)舉例 ORG

28、1000H ;指明程序在ROM中存放始地址1000HBCD_ASCl: MOV A,20H ;(A)(20H),(A)03H1002H ADD A,3 ;累加器(A)(A)+3,修正偏移量1004H MOVC A,A+PC ; PC當(dāng)前值1005H1005H MOV 21H,A ;(A)+(PC)=06H+1005H=100BH1007H RET ;AROM(100BH),(A)=33H1008H TAB: DB 30H1009H DB 31H100AH DB 32H100BH DB 33H100CH DB 34H100DH DB 35H2022/7/2134 一般在采用PC作基址寄存器時(shí),常

29、數(shù)表與MOVC指令放在一起,稱為近程查表。當(dāng)采用DPTR作基址寄存器時(shí),程序如下TAB可以放在64KB程序存儲(chǔ)器空間的任何地址上,稱為遠(yuǎn)程查表,不用考慮查表指令與表格之間的距離。 ORG 1000BCD_ASC2:MOV A,20H MOV DPTR,TAB ;TAB首址送DPTR MOVC A,A+DPTR ;查表 MOV 21H,A RET TAB: DB 30H,31H,32H,33H,34H,35H, 36H,37H,38H,39H 3.3.3 程序存儲(chǔ)器向A傳送數(shù)據(jù)舉例2022/7/2135數(shù)據(jù)交換指令分為兩種:字節(jié)交換和半字節(jié)交換指令,共5條。1.字節(jié)交換指令(XCH,Exchan

30、ge 3條) XCH A,Rn ;(A)(Rn) XCH A,Ri ;(A)(Ri) XCH A,direct ;(A)(direct)功能: 將累加器A的內(nèi)容與源操作數(shù)(Rn、direct或Ri)所指定單元的內(nèi)容相互交換。3.3.4 數(shù)據(jù)交換指令2. 半字節(jié)交換指令(1條) XCHD A,Ri ;(A)30 (Ri)30功能: 將累加器A中的內(nèi)容的低四位與Ri所指的片內(nèi)RAM單元中的低四位互換,但它們的高四位均不變。2022/7/21363. 累加器A高低半字節(jié)交換指令(1條) SWAP A ; (A)74(A)30 【注意】 數(shù)據(jù)交換主要是在內(nèi)部RAM單元與累加器A之間進(jìn)行,可以保存目的操

31、作數(shù)。例如 將片內(nèi)RAM 60H單元與61H單元的數(shù)據(jù)交換。不能用: XCH 60H,61H應(yīng)該寫成:MOV A,60H XCH A,61H MOV 60H,A3.3.4 數(shù)據(jù)交換指令功能:將累加器A的高4位與低4位內(nèi)容互換,不影響標(biāo)志位。MOV R0,60H MOV A,R0 XCH A, 61HMOV 61H,A ()MOV R0,#60H MOV A,R0 XCH A, 61H MOV 61H,A ( ) 2022/7/2137 片內(nèi)RAM數(shù)據(jù)區(qū)中具有先進(jìn)后出特點(diǎn)的存儲(chǔ)區(qū)域稱為堆棧,主要用于保護(hù)斷點(diǎn)和恢復(fù)現(xiàn)場(chǎng)。堆棧操作有進(jìn)棧和出棧兩種操作,即壓入和彈出數(shù)據(jù)。2條指令PUSH direct

32、 ;(SP)(SP)+1,(SP)(direct)POP direct ;(direct) (SP),(SP)(SP)-13.3.5 堆棧操作指令功能: (1)PUSH稱為進(jìn)棧指令,將指定的直接尋址單元的內(nèi)容壓入堆棧。先將堆棧指針SP的內(nèi)容+1,指向棧頂?shù)囊粋€(gè)單元,然后把指令指定的直接尋址單元內(nèi)容壓入該單元。 (2)POP稱為出棧指令,它是將當(dāng)前堆棧指針SP所指示的單元內(nèi)容彈出到指定的內(nèi)部RAM單元中,然后再將SP減1。2022/7/21383.3.5 堆棧操作指令 【注意】 堆棧操作的特點(diǎn)是“先進(jìn)后出”,在使用時(shí)應(yīng)注意指令順序;進(jìn)棧、出棧指令只能以直接尋址方式來取得操作數(shù),不能用累加器A或工

33、作寄存器Rn作為操作數(shù)。 指令PUSH 40H操作示意圖 指令POP 30H操作示意圖2022/7/2139【例題3-13】 分析以下程序的運(yùn)行結(jié)果 MOV R2,05H MOV A,01H PUSH ACC ;ACC表示累加器A的直接地址 PUSH 02H ;02H表示R2的直接地址 POP ACC POP 02H解: 結(jié)果是(R2)=01H,而(A)=05H。也就是兩者進(jìn)行了數(shù)據(jù)交換。因此,使用堆棧時(shí),入棧的順序和出棧的順序必須相反,才能保證數(shù)據(jù)被送回原位,即恢復(fù)現(xiàn)場(chǎng)。3.3.5 堆棧操作指令2022/7/2140 51系列單片機(jī)的算術(shù)運(yùn)算類指令共有24條,包括加、減、乘、除4種基本算術(shù)運(yùn)

34、算指令,這4種指令能對(duì)8位的無符號(hào)數(shù)進(jìn)行直接運(yùn)算,借助溢出標(biāo)志,可對(duì)有符號(hào)數(shù)進(jìn)行補(bǔ)碼運(yùn)算;借助進(jìn)位標(biāo)志,可實(shí)現(xiàn)多字節(jié)的加、減運(yùn)算,同時(shí)還可對(duì)壓縮的BCD碼進(jìn)行運(yùn)算,其運(yùn)算功能較強(qiáng)。 算術(shù)運(yùn)算指令執(zhí)行結(jié)果將影響標(biāo)志位。但是加1和減1指令不影響進(jìn)位標(biāo)志(CY),輔助進(jìn)位標(biāo)志(AC)、溢出標(biāo)志位(OV)這些標(biāo)志。3.4 算術(shù)運(yùn)算類指令2022/7/214151系列的加法指令分為4類,共14條。 1. 不帶進(jìn)位位的加法指令(ADD,Addition 4條)ADD A,Rn;(A)(A)+(Rn)ADD A,direct ;(A)(A)+(direct)ADD A,Ri ;(A)(A)+(Ri)ADD

35、A,#data;(A)(A)+ #data 功能:將兩個(gè)操作數(shù)相加,結(jié)果再送回累加器中。 說明:對(duì)于無符號(hào)數(shù)相加,若CY置“1”,說明和數(shù)溢出(大于255);對(duì)于有符號(hào)數(shù)相加時(shí),和數(shù)是否溢出(大于+127或小于-128),則可通過溢出標(biāo)志OV來判斷,若OV為“1”,說明和數(shù)溢出。3.4.1 加法指令2022/7/2142【例題3-14】(A)=85H,R0=20H,(20H)=0AFH,執(zhí)行指令:ADD A,R0 后,求PSW各位的值。 解: 10000101 + 10101111 - 1 00110100 結(jié)果:(A)=34H;CY=1;AC=1;OV=1;P=1。 對(duì)于加法,溢出只能發(fā)生在

36、兩個(gè)同符號(hào)數(shù)相加的情況。在進(jìn)行有符號(hào)數(shù)的加法運(yùn)算時(shí),溢出標(biāo)志OV是一個(gè)重要的編程標(biāo)志,利用它可以判斷兩個(gè)有符號(hào)數(shù)相加和數(shù)是否溢出。3.4.1 加法指令2022/7/21432. 帶進(jìn)位加法指令(ADDC,Addition with Carry 4條) ADDC A,Rn ; (A) (A)+(Rn)+(CY) ADDC A,direct ; (A) (A)+(direct)+(CY) ADDC A,Ri ; (A) (A)+(Ri)+(CY) ADDC A,#data ; (A) (A)+ data+(CY) 功能:累加器A中的內(nèi)容加上源操作數(shù)中的內(nèi)容及進(jìn)位位CY,再存入累加器A中。 說明:進(jìn)

37、位位為上一次進(jìn)位標(biāo)志CY的內(nèi)容。指令對(duì)于標(biāo)志位的影響與不帶進(jìn)位加法指令相同。 帶進(jìn)位加法指令A(yù)DDC常用于完成多字節(jié)運(yùn)算3.4.1 加法指令2022/7/2144【例題3-15】 試把存放在R1R2和R3R4中的兩個(gè)16位數(shù)相加,結(jié)果存于R5R6中。 3.4.1 加法指令解:參考程序段如下: MOV A,R2 ;取第一個(gè)數(shù)的低8位ADD A,R4 ;兩數(shù)的低8位相加MOV R6,A ;保存和的低8位MOV A,R1 ;取第一個(gè)數(shù)的高8位ADDC A,R3 ;兩數(shù)的高8位相加,并把低8位相加時(shí) ;的進(jìn)位位加進(jìn)來MOV R5,A ;把相加的高8位存入R5寄存器中SJMP $2022/7/2145

38、3. 增量指令(INC,Increase 5條) INC A ;(A)(A)+1 INC Rn ;(Rn)(Rn)+1 INC direct ;(direct)(direct)+1 INC Ri ;(Ri)(Ri)+1 INC DPTR ;(DPTR)(DPTR)+1 功能:將指令中指出的操作數(shù)的內(nèi)容加1,第一條指令對(duì)P標(biāo)志有影響,其余指令不影響任何標(biāo)志位。3.4.1 加法指令 說明:原來的內(nèi)容為0FFH,加1后將產(chǎn)生溢出,使操作數(shù)的內(nèi)容變成00H,但不影響任何標(biāo)志。最后一條指令是對(duì)16位數(shù)據(jù)指針寄存器DPTR加1操作,指令執(zhí)行時(shí),先對(duì)低8位指針DPL的內(nèi)容加1,當(dāng)產(chǎn)生溢出時(shí)就對(duì)高8位指針DP

39、H加1,不影響任何標(biāo)志。 2022/7/21463.4.1 加法指令4. 十進(jìn)制調(diào)整指令(Decimal Adjust for Addition 1條) DA A 功能: 若(A30)9或AC=1 ,則(A30)(A30)6; 若(A74) 9或Cy=1 ,則(A74) (A74)6。注意:(1)這條指令必須緊跟在ADD或ADDC指令之后,對(duì)加法指令的結(jié)果進(jìn)行調(diào)整,且這里的ADD或ADDC的操作是對(duì)壓縮的BCD碼表示的數(shù)進(jìn)行運(yùn)算。(2)DA指令不影響溢出標(biāo)志。2022/7/2147例如: 兩個(gè)十進(jìn)制數(shù)“65”與“58”相加,結(jié)果應(yīng)為BCD碼“123”,程序如下:MOV A,#65H ADD A

40、,#58H DA A結(jié)果:(A)= 23H (CY)= 13.4.1 加法指令 6 5 0110 0101 5 8 0101 1000 - + 6 6 0110 0110 18 19 10010 0011 1 2 32022/7/21481. 帶借位減法指令(SUBB, Subtract with Borrow 4條) SUBB A ,#data ;(A)(A)dataCy SUBB A ,Rn ;(A)(A)(Rn)Cy SUBB A ,direct ;(A)(A)(direct)Cy SUBB A ,Ri ;(A)(A)(Ri)Cy 51系列單片機(jī)的減法指令分為2類,共8條。 3.4.2

41、減法指令功能:累加器A中的內(nèi)容減去源操作數(shù)中的內(nèi)容及進(jìn)位位Cy,差值存入累加器A中。2. 減1指令(DEC, Decrease 4條) DEC A ;(A)(A)1 DEC Rn ;(Rn)(Rn)1 DEC direct ;(direct)(direct)1 DEC Ri ;(Ri)(Ri)12022/7/2149功能:使指令中源地址所指RAM單元中的內(nèi)容減1。第一條減1指令對(duì)奇偶標(biāo)志位有影響,其余減1指令不影響PSW標(biāo)志位。 【例題3-17】 分析執(zhí)行程序指令SUBB A ,#64H的結(jié)果,設(shè)(A)=49H,(CY)=1。3.4.2 減法指令 解: 分析, 0100 1001(49H) 0

42、110 0100(64H) -) 1 1110 0100 結(jié)果:(A)=E4H,(CY)=1,(P)=0, (AC)=0,(OV)=02022/7/2150 功能:把累加器A和寄存器B中的8位無符號(hào)整數(shù)相乘,乘積為16位,乘積的低8位存于A中,高8位存于B中。指令執(zhí)行后對(duì)PSW的影響如下:(1)若乘積大于255,OV=1;否則OV=0;(2)Cy總是為“0”。(3)P受累加器A中的內(nèi)容影響。乘法指令 (MUL,Multiplication)MULAB ;(B)(A)(A)(B)3.4.3 乘法指令2022/7/21513.4.3 乘法指令 【例題3-20】設(shè)有任意一個(gè)三字節(jié)數(shù)EFL作為被乘數(shù),

43、有一單字節(jié)數(shù)N作為乘數(shù),試編程求其積,并將結(jié)果存在20H23H單元中(由低字節(jié)到高字節(jié)順序存放)。解: E F L ) N LN高(R1) LN低(R0) FN高(R3) FN低 (R2) EN高(R5) EN低(R4) 23H 22H 21H 20H 2022/7/2152 功能:把累加器A中的8位無符號(hào)整數(shù)除以寄存器B中8位無符號(hào)整數(shù),商放在A中,余數(shù)放在B中。指令執(zhí)行對(duì)PSW的影響如下: (1)Cy、OV,清“0” (2)若(B)=0,OV=1。 (3)P隨累加器A 中的內(nèi)容變化。 除法指令(DIV, Division) DIV AB ;(A)(A/B)的商,(B)(A/B)的余數(shù))3.

44、4.4 除法指令2022/7/2153【例題3-21】 試編寫程序,要求:把A中的二進(jìn)制數(shù)轉(zhuǎn)換為3位BCD碼。百位放在20H,十位、個(gè)位放在21H中。3.4.4 除法指令 解:編程要點(diǎn)分析: (1)將要轉(zhuǎn)換的二進(jìn)制數(shù)除以100,商即為百位數(shù),余數(shù)再除以10,商和余數(shù)分別為十位和個(gè)位數(shù)。 (2)通過SWAP、ADD指令組成一個(gè)壓縮的BCD數(shù),其中十位數(shù)放在A7-4,個(gè)位數(shù)放在A3-0。MOV B,#100 ;置除數(shù)為100DIV AB ;除以100MOV 20H,A ;商放入20H MOV A,B ;余數(shù)放AMOV B,#10 ;置除數(shù)為10 DIV AB ;除以10,個(gè)位數(shù)放入 ;B,十位放入

45、ASWAP A ;十位數(shù)放入A74ADD A,B ;組合BCD碼MOV 21H,A ;存十位和個(gè)位數(shù) SJMP $2022/7/2154乘除法指令說明: (1)乘法指令和除法指令需要4個(gè)機(jī)器周期,是指令系統(tǒng)中執(zhí)行時(shí)間最長(zhǎng)的指令。 (2)進(jìn)行8位數(shù)乘除法運(yùn)算時(shí),必須將相應(yīng)的被乘數(shù)和乘數(shù)、被除數(shù)和除數(shù)分別放入累加器A和寄存器B中,才能進(jìn)行計(jì)算。 (3)在51單片機(jī)中,乘法和除法指令僅適用于8位數(shù)乘法和除法運(yùn)算。如果被乘數(shù)、被除數(shù)和除數(shù)中有一個(gè)是16位數(shù)時(shí),不能直接使用這兩條指令。 3.4.4 除法指令2022/7/2155 邏輯操作指令用于對(duì)兩個(gè)操作數(shù)進(jìn)行邏輯乘、邏輯加、邏輯取反和異或等操作。循環(huán)

46、移位指令可以對(duì)累加器A中的數(shù)進(jìn)行循環(huán)移位。 邏輯運(yùn)算指令共24條,包括與、或、異或、清零、求反和左、右移位等邏輯指令。按操作數(shù)也可分為單、雙操作數(shù)兩種。邏輯運(yùn)算指令涉及寄存器A時(shí),影響P,但對(duì)AC、OV及CY沒有影響。3.5 邏輯運(yùn)算類指令2022/7/21563.5.1 累加器A的邏輯運(yùn)算指令 A操作指令共有6條,可以實(shí)現(xiàn)將累加器A中的內(nèi)容進(jìn)行取反,清零,循環(huán)左、右移位、帶Cy循環(huán)左、右移位。1. 累加器清“0”( CLR, Clear 1條) CLR A ; (A)02. 累加器按位取反指令(CPL,Complment 1條) CPL A ;(A) (/A)【注意】 邏輯運(yùn)算是按位進(jìn)行的,

47、累加器的按位取反實(shí)際上是邏輯非運(yùn)算;當(dāng)需要只改變字節(jié)數(shù)據(jù)的某幾位,而其余位不變時(shí),不能使用直接傳送方法,只能通過邏輯運(yùn)算完成。3. 循環(huán)移位指令(4條) 前兩條屬于不帶Cy標(biāo)志位的循環(huán)移位指令,后面兩條指令為帶CY標(biāo)志位的左移和右移。2022/7/21573.5.1 累加器A的邏輯運(yùn)算指令RL A ;RL-Rotate Left,將A的內(nèi)容循環(huán)左移1位RR A ;RR-Rotate Right,循環(huán)右移1位RLC A ;RLC-Rotate Left with Carry,帶Cy循環(huán)左移1位RRC A ;RRC-Rotate Right with Carry帶Cy循環(huán)右移1位 【注意】 執(zhí)行R

48、L指令1次,相當(dāng)于把原內(nèi)容乘以2;執(zhí)行RR指令1次,相當(dāng)于把原內(nèi)容除以2。2022/7/21583.5.1 累加器A的邏輯運(yùn)算指令【例題3-22】 編程實(shí)現(xiàn)16位數(shù)的算術(shù)左移。設(shè)16位數(shù)存放在內(nèi)部RAM 40H、41H 單元,低位在前。算數(shù)左移是指將操作數(shù)整體左移一位,最低位補(bǔ)充0。相當(dāng)于完成對(duì)16位數(shù)的乘2操作。解:需要帶CY的循環(huán)左移,在第一次移位之前CY必須清0。程序如下: CLR C ;CY清0 MOV A,40H ;取操作數(shù)低8位送A RLC A ;低8位左移一位 MOV 40H,A ;送回原單元保存 MOV A ,41H ;指向高8位 RLC A ;高8位左移 MOV 41H,A

49、;送回41H單元保存2022/7/2159 兩個(gè)操作數(shù)的邏輯運(yùn)算指令共有18條,分為邏輯與指令、邏輯或指令和邏輯異或指令。 1. 邏輯“與”操作指令(And on Logical 6條) ANL A,Rn ;(A) (A)(Rn) ANL A,direct ;(A) (A)(direct) ANL A,Ri ;(A) (A)(Ri) ANL A,#data ;(A) (A) data ANL direct,A ;(direct) (direct)(A) ANL direct, #data ;(direct) (direct) data3.5.2 兩個(gè)操作數(shù)的邏輯運(yùn)算指令 功能:將兩個(gè)操作數(shù)的內(nèi)

50、容按位進(jìn)行邏輯與操作,并將結(jié)果送回目的操作數(shù)的單元中。 利用“與”操作可屏蔽一些位或影響標(biāo)志位。例如要將一個(gè)字節(jié)中的高4位清0可用0FH進(jìn)行“與”操作。2022/7/21602. 邏輯“或”操作指令( Or on Logical 6條) ORL A,Rn ;(A) (A)(Rn) ORL A,direct ;(A) (A)(direct) ORL A,Ri ;(A) (A)(Ri) ORL A,#data ;(A) (A)data ORL direct,A ;(direct) (direct)(A) ORL direct,#data ;(direct) (direct) data 3.5.2

51、兩個(gè)操作數(shù)的邏輯運(yùn)算指令功能:將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯或操作,并將結(jié)果送回目的操作數(shù)的單元中。 利用“或”操作可進(jìn)行數(shù)位的組合或置位。例如要把數(shù)字轉(zhuǎn)換成ASCII碼,可用30H進(jìn)行或操作。2022/7/2161 【例題3-23】 在30H與31H單元有兩個(gè)非壓縮BCD碼(高位在30H單元),編程將它們合并到30H單元。解:程序如下:MOV A,30HSWAP A ;(A)74 (30H)30ORL A,31H ;合并為壓縮BCD碼MOV 30H ,A ;回存到30H單元 3. 邏輯異或指令( Exclusive or on Logical 6條) XRL A,Rn ;(A) (A)(Rn

52、) XRL A,direct ;(A) (A) (direct) XRL A,Ri ;(A) (A) (Ri) XRL A,#data ;(A) (A) data XRL direct,A ;(direct) (direct) (A) XRL direct,#data ;(direct) (direct) data3.5.2 兩個(gè)操作數(shù)的邏輯運(yùn)算指令2022/7/2162功能:將兩個(gè)操作數(shù)的內(nèi)容按位進(jìn)行邏輯“異或”操作,并將結(jié)果送回目的操作數(shù)。 【注意】邏輯“異或”指令常用對(duì)某些位進(jìn)行取反操作,其它位保持不變。若某位需要取反則該位與“1”相異或;保留某位則該位與“0”相“異或”。利用“異或”指

53、令對(duì)某單元自身“異或”,可以實(shí)現(xiàn)清零操作?!纠}3-26】 編寫程序完成利用移位指令實(shí)現(xiàn)累加器A的內(nèi)容乘6解: CLR C RLC A ;左移一位,相當(dāng)于乘2 MOV R0,A CLR C RLC A ;再乘2,即乘4 ADD A,R0 ;乘2 + 乘4 = 乘63.5.2 兩個(gè)操作數(shù)的邏輯運(yùn)算指令2022/7/2163【例題3-27】 將累加器A中壓縮BCD碼拆分為兩個(gè)字節(jié),形成非壓縮BCD碼,放入30H和31H單元中。解: MOV 40H,A ;保存A中的內(nèi)容 ANL A,#00001111B ;清高4位,保留低4位 MOV 30H,A MOV A,40H ;取原數(shù)據(jù) ANL A,#111

54、10000B ;保留高4位,清低4位 SWAP A MOV 31H,A 3.5.2 兩個(gè)操作數(shù)的邏輯運(yùn)算指令2022/7/21643.6 位操作類指令 位操作指令又稱為布爾指令。51系列單片機(jī)的硬件結(jié)構(gòu)除了8位CPU外,還有一個(gè)布爾處理機(jī)(也稱位處理機(jī)),可以進(jìn)行位尋址。位操作指令可以分為位傳送指令,位修改及位邏輯操作等等。該類指令一般不影響標(biāo)志位。 尋址內(nèi)部RAM中的范圍為:內(nèi)部20H2FH(00H0FFH)中的128個(gè)可尋址位和SFR中的可尋址位。2022/7/21653.6.1 位變量傳送指令 位變量傳送指令有互逆的2條,可實(shí)現(xiàn)進(jìn)位位C與某直接尋址位bit間內(nèi)容的傳送。 MOV C,bi

55、t ;(CY) (bit) MOV bit,C ;(bit) (CY) 功能:把源操作數(shù)的布爾變量送到目的操作數(shù)指定的位地址單元。其中一個(gè)操作數(shù)必須為進(jìn)位標(biāo)志CY,另一個(gè)操作數(shù)可以是任何可直接尋址位。【例3-28】 編寫程序?qū)?0H.0的內(nèi)容傳送到22H.0。解:程序如下:MOV C,20H.0MOV 22H.0,C也可寫成:MOV C,00H ;(Cy)20H.0MOV 10H,C ;22H.0(CY)注意:00H和10H分別為20H.0和22H.0位地址,非字節(jié)地址。2022/7/21663.6.2 位變量修改指令 位變量修改指令共有6條,分別是對(duì)位進(jìn)行清0、置1和取反指令,不影響其它標(biāo)志

56、。 CLR C ;(CY) 0 CLR bit ;(bit) 0 CPL C ;(CY) (/CY) 3.6.3 位變量邏輯操作指令 位變量邏輯操作指令包括:位變量邏輯“與”和邏輯“或”,共有4條指令。 CPL bit ;(bit) (/bit) SETB C ;(CY) 1 SETB bit ;(bit) 1 ANL C,bit ;(Cy)(Cy)(bit) ANL C,/bit ;(Cy)(Cy)(/bit) ORL C,bit ;(Cy)(Cy)(bit) ORL C,/bit ;(Cy)(Cy)(/bit) 注意:位變量邏輯運(yùn)算中無邏輯異或(XRL)。2022/7/21673.6 位操

57、作類指令舉例【例題3-29】 編寫程序段滿足只在P1.0為1、ACC.7為1和OV為0時(shí),置位P3.1的邏輯控制。(其電路如圖所示)。&P3.11P1.0A.7OV解:程序如下: MOV C,P1.0 ANL C,ACC.7 ANL C,/OV MOV P3.1,C該例說明:通過軟件編程可以實(shí)現(xiàn)硬件電路的邏輯功能,軟件可以代替硬件。2022/7/21683.7 控制轉(zhuǎn)移類指令 轉(zhuǎn)移類指令的共同特點(diǎn)是可以改變程序執(zhí)行的順序,使CPU轉(zhuǎn)移到另一處執(zhí)行程序,或者是繼續(xù)順序地執(zhí)行程序。無論是哪一類指令,執(zhí)行后都將改變程序計(jì)數(shù)器PC的值。 轉(zhuǎn)移類指令分為四類:無條件轉(zhuǎn)移、條件轉(zhuǎn)移、調(diào)用指令及返回指令,共

58、計(jì)有21條指令,另外還有一條NOP指令。除NOP指令執(zhí)行時(shí)間為一個(gè)機(jī)器周期外,其它轉(zhuǎn)移指令的執(zhí)行時(shí)間都是兩個(gè)機(jī)器周期。2022/7/21693.7.1 無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令有4條,執(zhí)行該指令后程序的執(zhí)行必須轉(zhuǎn)移。絕對(duì)轉(zhuǎn)移指令 (Absolute Jump)AJMP addr11 ;(PC) (PC)2,(PC)100 addr11 這是2KB范圍內(nèi)的無條件轉(zhuǎn)移指令,執(zhí)行該指令時(shí),先將PC的內(nèi)容加2,然后將addr11送入PC10PC0,而PC15PC11保持不變。需要注意的是,由于AJMP是雙字節(jié)指令,當(dāng)程序轉(zhuǎn)移時(shí)PC的內(nèi)容加2,因此轉(zhuǎn)移的目標(biāo)地址應(yīng)與AJMP下相鄰指令第一字節(jié)地址在同

59、一雙字節(jié)范圍。本指令不影響標(biāo)志位。其指令代碼格式為: A10 A9 A8 0 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0 2022/7/21703.7.1 無條件轉(zhuǎn)移指令2. 相對(duì)轉(zhuǎn)移指令 (Short Jump) SJMP rel ; (PC) (PC)+2+rel轉(zhuǎn)移范圍為當(dāng)前PC值的128+127范圍內(nèi),共256個(gè)單元。 若偏移量rel取值為FEH(2的補(bǔ)碼),則目標(biāo)地址等于源地址,相當(dāng)于動(dòng)態(tài)停機(jī),程序終止在這條指令上,停機(jī)指令在調(diào)試程序時(shí)很有用。 51系列單片機(jī)沒有專用的停機(jī)指令,若要求動(dòng)態(tài)停機(jī)可用SJMP指令來實(shí)現(xiàn): HERE:SJMP HERE; 動(dòng)態(tài)停機(jī) 或?qū)?/p>

60、成 HERE:SJMP $;“$”表示本指令首字節(jié)所在單元的地址,使用它可省略標(biāo)號(hào)。 2022/7/21713.7.1 無條件轉(zhuǎn)移指令3. 長(zhǎng)轉(zhuǎn)移指令 (Long Jump) LJMP addr16 ;(PC) addr16 執(zhí)行該指令時(shí),將16位目標(biāo)地址addr16裝入PC,程序無條件轉(zhuǎn)向指定的目標(biāo)地址。轉(zhuǎn)移指令的目標(biāo)地址可在64KB程序存儲(chǔ)器地址空間的任何地方,不影響任何標(biāo)志。4. 間接轉(zhuǎn)移指令(散轉(zhuǎn)指令) JMP A+DPTR ;(PC) (A)+(DPTR)功能: 把累加器A的8位無符號(hào)數(shù)與DPTR的16位數(shù)相加,其和作為下一條指令的地址送入PC,不影響標(biāo)志。移,轉(zhuǎn)移地址可以在程序運(yùn)行

溫馨提示

  • 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)論