幻燈片 世界大學(xué)城_第1頁(yè)
幻燈片 世界大學(xué)城_第2頁(yè)
幻燈片 世界大學(xué)城_第3頁(yè)
幻燈片 世界大學(xué)城_第4頁(yè)
幻燈片 世界大學(xué)城_第5頁(yè)
已閱讀5頁(yè),還剩59頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第3章 MCS-51單片機(jī)的指令系統(tǒng)主要內(nèi)容: MCS-51單片機(jī)的尋址方式、指令系統(tǒng)、基本程序結(jié)構(gòu)及匯編語(yǔ)言的開(kāi)發(fā)和調(diào)試。重點(diǎn)在于尋址方式、各種指令的應(yīng)用、程序設(shè)計(jì)的規(guī)范、程序設(shè)計(jì)的思想及典型程序的理解和掌握。難點(diǎn)在于控制轉(zhuǎn)移、位操作指令的理解及各種指令的靈活應(yīng)用,以及程序設(shè)計(jì)的基本方法和針對(duì)具體的硬件設(shè)計(jì)出最合理的軟件。3.1 3.1 概述概述指令系統(tǒng):一臺(tái)計(jì)算機(jī)所能識(shí)別、執(zhí)行的指令的集合就是它的指 令系統(tǒng)。機(jī)器語(yǔ)言:指令系統(tǒng)是一套控制計(jì)算機(jī)執(zhí)行操作的二進(jìn)制編碼, 稱為機(jī)器語(yǔ)言。機(jī)器語(yǔ)言指令是計(jì)算機(jī)惟一能識(shí)別和 執(zhí)行的指令。 匯編語(yǔ)言:指令系統(tǒng)是利用指令助記符來(lái)描述的,稱為匯編語(yǔ) 言。 計(jì)

2、算機(jī)的指令系統(tǒng)一般都是利用匯編語(yǔ)言描述的,是由計(jì) 算機(jī)硬件設(shè)計(jì)所決定的。指令系統(tǒng)沒(méi)有通用性。 單片機(jī)一般是空機(jī),未含任何系統(tǒng)軟件。因此在第一次使用前,必須對(duì)其進(jìn)行編程。一、指令的分類 MCS-51指令系統(tǒng)有111條指令,可按下列幾種方式分類: 1.按指令字節(jié)數(shù)分類 單字節(jié)指令(49條)、雙字節(jié)指令(46條)和三字節(jié)指令(16條)。 2.按指令執(zhí)行時(shí)間分類 單機(jī)器周期指令(64條)、雙機(jī)器周期指令(45條)和四機(jī)器周期指令(2條)。 3.按功能分類 數(shù)據(jù)傳送指令(29條)、算術(shù)操作指令(24條)、邏輯操作指令(24條)、控制轉(zhuǎn)移指令(17條)和位操作指令(17條)。 二、MCS-51匯編語(yǔ)言指令

3、格式指令格式:指令的表示方式稱為指令格式,它規(guī)定了指令的長(zhǎng)度和內(nèi)部信息的安排。完整的指令格式如下: 標(biāo)號(hào)標(biāo)號(hào): : 操作碼操作碼 操作數(shù)操作數(shù) , ,操作數(shù)操作數(shù) ; ;注釋注釋 其中: 項(xiàng)是可選項(xiàng)。標(biāo)號(hào):指本條指令起始地址的符號(hào),也稱為指令的符號(hào)地址。代表該條指令在程序編譯時(shí)的具體地址。操作碼:又稱助記符,它是由對(duì)應(yīng)的英文縮寫(xiě)構(gòu)成的,是指令語(yǔ)句的關(guān)鍵。它規(guī)定了指令具體的操作功能,描述指令的操作性質(zhì),是一條指令中不可缺少的內(nèi)容。操作數(shù):它既可以是一個(gè)具體的數(shù)據(jù),也可以是存放數(shù)據(jù)的地址。注釋:注釋也是指令語(yǔ)句的可選項(xiàng),它是為增加程序的可讀性而設(shè)置的,是針對(duì)某指令而添加的說(shuō)明性文字,不產(chǎn)生可執(zhí)行的

4、目標(biāo)代碼。三、指令中的常用符號(hào) Rn(n=07):表示當(dāng)前工作寄存器R0R7中的任一個(gè)寄存器。 Ri(i=0或1):表示通用寄存器組中用于間接尋址的兩個(gè)寄存器R0, R1。 #data:表示8位直接參與操作的立即數(shù)。 #data16:表示16位直接參與操作的立即數(shù)。 direct:表示片內(nèi)RAM的8位單元地址。 addr11:表示11位目的地址,主要用于ACALL和AJMP指令中。 addr16:表示16位目的地址,主要用于LCALL和LJMP指令中。 rel:用補(bǔ)碼形式表示的8位二進(jìn)制地址偏移量,取值范圍為128+127,主要用于相對(duì)轉(zhuǎn)移指令,以形成轉(zhuǎn)移的目的地址。 DPTR:數(shù)據(jù)指針,用于

5、寄存器間接尋址方式和變址尋址方式。 bit:表示片內(nèi)RAM的位尋址區(qū),或者是可以位尋址的SFR的位地址。 A(或ACC)、 B :表示累加器、 B寄存器。 C:表示PSW中的進(jìn)位標(biāo)志位Cy。 :在間接尋址方式中,表示間接尋址寄存器指針的前綴標(biāo)志。 $:表示當(dāng)前的指令地址。 /:在位操作指令中,表示對(duì)該位先求反后再參與操作。 (X):表示由X所指定的某寄存器或某單元中的內(nèi)容。 (X):表示由X間接尋址單元中的內(nèi)容。 :表示指令的操作結(jié)果是將箭頭右邊的內(nèi)容傳送到左邊。 :表示指令的操作結(jié)果是將箭頭左邊的內(nèi)容傳送到右邊。 、 、 :表示邏輯或、與、異或。3.2 MCS-51單片機(jī)的尋址方式 尋址方式

6、尋址方式:在計(jì)算機(jī)中,說(shuō)明操作數(shù)所在地址的方法稱為指令的尋址方式。 計(jì)算機(jī)執(zhí)行程序?qū)嶋H上是在不斷尋找操作數(shù)并進(jìn)行操作的過(guò)程。 每種計(jì)算機(jī)在設(shè)計(jì)時(shí)已決定了它具有哪些尋址方式,尋址方式越多,計(jì)算機(jī)的靈活性越強(qiáng),指令系統(tǒng)也就越復(fù)雜。 MCS-51單片機(jī)的指令系統(tǒng)提供了7種尋址方式,分別為立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、相對(duì)尋址和位尋址。一條指令可能含多種尋址方式。一、立即尋址定義:定義:將參與操作的數(shù)據(jù)直接寫(xiě)在指令中,這種尋址方式稱為立即尋址。 特點(diǎn):特點(diǎn):指令中直接含有所需的操作數(shù)。該操作數(shù)可以是8位的,也可以是16位的,常常處在指令的第二字節(jié)和第三字節(jié)的位置上。立即數(shù)通

7、常使用#data或#data16表示,在立即數(shù)前面加“#”標(biāo)志,用以和直接尋址中的直接地址(direct或bit)相區(qū)別。E0H00HFFH83H82HF8HE0H00HFFH12H87H83H82H如:MOV A , # F8H MOV DPTR , #1287H或 MOV DPH , #12H MOV DPL , #87H執(zhí)行前執(zhí)行前RAM:執(zhí)行后執(zhí)行后RAM:二、直接尋址 定義:定義:將操作數(shù)的地址直接存放在指令中,這種尋址方式稱為直接尋址。特點(diǎn):特點(diǎn):指令中含有操作數(shù)的地址。該地址指出了參與操作的數(shù)據(jù)所在的字節(jié)單元地址或位地址。計(jì)算機(jī)執(zhí)行它們時(shí)便可根據(jù)直接地址找到所需要的操作數(shù)。尋址范

8、圍:尋址范圍:ROM、片內(nèi)RAM區(qū)、和位地址空間。E0H00HFFH55HF0H36H55HE0H00HFFH55H55HF0H36H如:MOV A , 36H MOV B , 36H執(zhí)行前執(zhí)行前RAM:執(zhí)行后執(zhí)行后RAM:三、寄存器尋址定義:定義:操作數(shù)存放在MCS-51內(nèi)部的某個(gè)工作寄存器Rn(R0R7)或部分專用寄存器中,這種尋址方式稱為寄存器尋址。特點(diǎn):特點(diǎn):由指令指出某一個(gè)寄存器的內(nèi)容作為操作數(shù)。存放操作數(shù)的寄存器在指令代碼中不占據(jù)單獨(dú)的一個(gè)字節(jié),而是嵌入(隱含)到操作碼字節(jié)中。尋址范圍:尋址范圍:四組通用寄存器Rn(R0R7)、部分專用寄存器( A, B, DPTR )。如:MOV

9、 A , R0 ;將寄存器R0的內(nèi)容傳送到寄存器A中,(R0)(A) MOV R4 , A ;將寄存器A的內(nèi)容傳送到寄存器R4中,(A)(R4) MOV R1 , R4 ;( () )是錯(cuò)誤的,Rn與Rn之間不能傳送數(shù)據(jù)四、寄存器間接尋址定義:定義:指令給出的寄存器中存放的是操作數(shù)據(jù)的單元地址。這種尋址方式稱為寄存器間接尋址,簡(jiǎn)稱為寄存器間址。特點(diǎn):指令給出的寄存器中存放的是操作數(shù)地址。寄存器間接尋址是一種二次尋找操作數(shù)地址的尋址方式,寄存器前邊必須加前綴符號(hào)“”。不能用于尋址特殊功能寄存器SFR。 尋址范圍:內(nèi)部RAM低128B(只能使用R0或R1作間址寄存器)、外部RAM(只能使用DPTR

10、作間址寄存器)。對(duì)于外部低256單元RAM的訪問(wèn),除可以使用DPTR外,還可以使用R0或R1作間址寄存器。如:MOV R0, #46H MOV A, R0 INC R0 MOV A, R066H00HFFH66H46H99H47H70H70HFFH66H66H99H70H70HFFH五、 變址尋址 定義:定義:操作數(shù)存放在變址寄存器(累加器A)和基址寄存器(DPTR或PC)相加形成的16位地址單元中。這種尋址方式稱為基址加變址寄存器間接尋址,簡(jiǎn)稱為變址尋址。特點(diǎn):指令操作碼中隱含作為基址寄存器用的DPTR(或PC )和作為變址用的累加器A。在執(zhí)行變址尋址指令時(shí),MCS-51單片機(jī)先把基地址(

11、DPTR或PC 的內(nèi)容)和地址偏移量(A的內(nèi)容)相加,以形成操作數(shù)地址,再由操作數(shù)地址找到操作數(shù),并完成相應(yīng)的操作。變址尋址方式是單字節(jié)指令。 尋址范圍:只能對(duì)程序存儲(chǔ)器ROM進(jìn)行尋址,主要用于查表性質(zhì)的訪問(wèn)。 注意:累加器A中存放的操作數(shù)地址相對(duì)基地址的偏移量的范圍為00HFFH(無(wú)符號(hào)數(shù))。MCS-51單片機(jī)共有以下三條變址尋址指令: MOVC A, A+PC ;(A)(A)+(PC)+1 MOVC A, A+DPTR ;(A)(A)+(DPTR) JMP A+DPTR ;(PC)(A)+(DPTR)六、 相對(duì)尋址定義:定義:將程序計(jì)數(shù)器PC的當(dāng)前值(取出本條指令后的PC值)與指令第二個(gè)字

12、節(jié)給出的偏移量(rel)相加,形成新的轉(zhuǎn)移目標(biāo)地址。稱為相對(duì)尋址方式。特點(diǎn):特點(diǎn):相對(duì)尋址方式是為實(shí)現(xiàn)程序的相對(duì)轉(zhuǎn)移而設(shè)計(jì)的,為相對(duì)轉(zhuǎn)移指令所使用,其指令碼中含有相對(duì)地址偏移量,能生成浮動(dòng)代碼。如:如: SJMP rel ; (PC)(PC) + 2 + rel相對(duì)轉(zhuǎn)移指令的目的地址指令地址指令字節(jié)數(shù)偏移量尋址范圍:尋址范圍:只能對(duì)程序存儲(chǔ)器ROM進(jìn)行尋址。相對(duì)地址偏移量(rel)是一個(gè)帶符號(hào)的8位二進(jìn)制補(bǔ)碼,其取值范圍為128127(以PC為中間的256個(gè)字節(jié)范圍)。七、位尋址定義:定義:指令中給出的操作數(shù)是一個(gè)可單獨(dú)尋址的位地址,這種尋址方式稱為位尋址方式。特點(diǎn):特點(diǎn):位尋址是直接尋址方式

13、的一種,其特點(diǎn)是對(duì)8位二進(jìn)制數(shù)中的某一位的地址進(jìn)行操作。尋址范圍:尋址范圍:片內(nèi)RAM低128B中位尋址區(qū)、部分SFR(其中有83位可以位尋址)。可位尋址的位地址的表示形式如下:可位尋址的位地址的表示形式如下:(1)直接使用位地址形式。如: MOV 00H, C ;(00H)(Cy) 其中:其中:00H是片內(nèi)RAM中20H地址單元的第0位。(2 2)字節(jié)地址加位序號(hào)的形式。如:)字節(jié)地址加位序號(hào)的形式。如: MOV 20H.0, C ; MOV 20H.0, C ; (20H.020H.0)(CyCy) 其中:其中:20H.020H.0是片內(nèi)是片內(nèi)RAMRAM中中20H20H地址單元的第地址單

14、元的第0 0位。位。(3)位的符號(hào)地址(位名稱)的形式。對(duì)于部分特殊功能寄存器,其各位均有一個(gè)特定的名字,所以可以用它們的位名稱來(lái)訪問(wèn)該位。如: ANL C, P ; (C) (C)(P) 其中:P是PSW的第0位,C是PSW的第7位。 (4)字節(jié)符號(hào)地址(字節(jié)名稱)加位序號(hào)的形式。對(duì)于部分特殊功能寄存器(如狀態(tài)標(biāo)志寄存器PSW),還可以用其字節(jié)名稱加位序號(hào)形式來(lái)訪問(wèn)某一位。如: CPL PSW.6 ; (AC) ( ) 其中: PSW.6表示該位是PSW的第6位。例題1 指出下列指令的尋址方式 MOV A,R1 ;(A)(R1) 寄存器尋址 ADD A,#05H ;(A)(A)+立即數(shù) 05

15、H 立即尋址 MOV A,R1 ; (A) (R1) 寄存器間接尋址 MOV 30H,4AH ;( 30H )(4AH) 直接尋址 MOVC A,A+DPTR ;(A)(A)+(DPTR) 變址尋址 SJMP LP ; (PC)(PC)+ 2 + 偏移量 相對(duì)尋址 MOV 65H, C ;(65H)(Cy) 位尋址AC3.3 數(shù)據(jù)傳送與交換指令CPU在進(jìn)行算術(shù)和邏輯操作時(shí),絕大多數(shù)指令都有操作數(shù),所以數(shù)據(jù)傳送是一種最基本、最主要的操作。 數(shù)據(jù)傳送指令共28條,可分為內(nèi)部RAM數(shù)據(jù)傳送、外部RAM數(shù)據(jù)傳送、程序存儲(chǔ)器數(shù)據(jù)傳送、數(shù)據(jù)交換和堆棧操作等五類。 尋址范圍:尋址范圍:累加器A、片內(nèi)RAM、

16、SFR、片外RAM。 功能:功能:(目的地址)(源地址)。 可表示為可表示為: : 源地址單元的內(nèi)容不變。 對(duì)標(biāo)志位的影響:對(duì)標(biāo)志位的影響:除以累加器A為目的操作數(shù)的數(shù)據(jù)傳送指令對(duì)P標(biāo)志位有影響外,其余均不影響標(biāo)志位。一、內(nèi)部RAM數(shù)據(jù)傳送指令格式:格式: MOV , 其中:其中: 表示目的操作數(shù), 表示源操作數(shù)。范圍:范圍:源、目的操作數(shù)均在片內(nèi)RAM、SFR中。指令形式:指令形式:按目的操作數(shù)可將內(nèi)部數(shù)據(jù)傳送指令分為以下幾類。(1)以累加器A為目的操作數(shù)(4條) MOV A , 其中:其中: 包括Rn、Ri、direct、#data。(各個(gè)符號(hào)的意義見(jiàn)2.1.3節(jié)指令中的常用符號(hào) ,以下同

17、) 只影響PSW中的P標(biāo)志位,不影響其他標(biāo)志位。 (2)以工作寄存器Rn為目的操作數(shù)(3條) MOV Rn , 其中:其中: 包括A、direct、#data 。(3)以直接地址單元為目的操作數(shù)(5條) MOV direct , 其中:其中: 包括A、Rn、Ri、direct 、#data。(4)以間址寄存器Ri為目的操作數(shù)(3條) MOV Ri , 其中:其中: 包括A、direct 、#data。(5)16位數(shù)據(jù)傳送指令(1條) MOV DPTR , #data16注:注:(2)、(3)、(4)、(5)均不影響標(biāo)志位。 內(nèi)部數(shù)據(jù)傳送指令的傳送關(guān)系如右圖所示。二、外部RAM數(shù)據(jù)傳送指令(4條

18、) CPU與外部數(shù)據(jù)存儲(chǔ)器之間進(jìn)行數(shù)據(jù)傳送時(shí),必須使用外部傳送指令,只能通過(guò)累加器A,采用寄存器間接尋址(用R0, R1和DPTR三個(gè)間接尋址的寄存器)方式完成。 指令格式:指令格式: MOVX A , MOVX , A 其中:其中: 、 包括DPTR、Ri。Ri(R0, R1)只能訪問(wèn)片外RAM的低256個(gè)單元;DPTR可以訪問(wèn)片外RAM的全部64KB的空間。 對(duì)標(biāo)志位的影響:對(duì)標(biāo)志位的影響: MOVX A , 指令只影響PSW中的P標(biāo)志位,不影響其他標(biāo)志位; MOVX , A指令不影響標(biāo)志位。53H89H32H99H48H56H00HFFH0000H00FFH0100HFFFFH89H53

19、H99H2000H3FE0H片內(nèi)RAM片外RAM00A8H如: MOV R0, #F9H MOV A, #00H MOVX R0, A MOV R0, #F9H MOV A, #00H MOVX R0, A MOV DPTR,#2000H MOV A, 48H MOVX DPTR, A MOV DPTR, #3FE0H MOV A, 56H MOVX DPTR, A00F9H00H 例題例題11 編制程序?qū)⑵瑑?nèi)RAM的30H4FH單元中的內(nèi)容傳送至片外RAM的2000H開(kāi)始的單元中。解:解:每次傳送數(shù)據(jù)的的過(guò)程相同,可以用循環(huán)程序?qū)崿F(xiàn)。 30H4FH共32個(gè)單元,循環(huán)次數(shù)應(yīng)為32次(保存在R2

20、中),為了方便每次傳送數(shù)據(jù)時(shí)地址的修改,送片內(nèi)RAM數(shù)據(jù)區(qū)首地址送R0,片外RAM數(shù)據(jù)區(qū)首地址送DPTR。程序流程圖如右圖所示。程序如下:程序如下: ORG 1000HSTART: MOV R0, #30H MOV DPTR, #2000H MOV R2, #20H ; 設(shè)置循環(huán)次數(shù) LOOP: MOV A, R0 ; 將片內(nèi)RAM數(shù)據(jù)區(qū)內(nèi)容送A MOVX DPTR, A ; 將A的內(nèi)容送片外RAM數(shù)據(jù)區(qū)INC R0 ; 源地址遞增 INC DPTR ; 目的地址遞增 DJNZ R2, LOOP ; 若R2的不為0,則 轉(zhuǎn)到LOOP處繼續(xù)循環(huán);否則循環(huán)結(jié)束SJMP $ END 三、程序存儲(chǔ)器(

21、ROM)數(shù)據(jù)傳送指令(查表指令)(2條) 程序存儲(chǔ)器的數(shù)據(jù)傳送是單向的,并且只能讀到累加器A 中。這類指令專門(mén)用于查表,又稱為查表指令。 指令格式:指令格式: MOVC A , A+DPTP ;(A)(A)+(DPTR) MOVC A , A+PC ;(PC)(PC)+1 (A)(A)+(PC) 兩條指令的異同:兩條指令的異同:其功能完全相同,但使用中存在著差異。 (1)查表的位置要求不同 采用DPTR作為基地址寄存器,表可以放在64KB程序存 儲(chǔ)器空間的任何地址,使用方便,故稱為遠(yuǎn)程查表。 采用PC作為基地址寄存器,具體的表在程序存儲(chǔ)器中 只能在查表指令后的256B的地址空間中,使用有限制,

22、故稱 為近程查表。(2)偏移量的計(jì)算方法不同 采用DPTR作為基地址寄存器,查表地址為(A)+(DPTR)。采用PC作為基地址寄存器,查表地址為(A)+(PC)+1。因此偏移量的計(jì)算方法不同。 采用DPTR作為基地址寄存器,A為欲查數(shù)值距離表首地址的值;采用PC作為基地址寄存器, A的值必須預(yù)先設(shè)置為: A的值=表首地址當(dāng)前指令的PC值10H1H4H9H16H25H程序區(qū)域0000H1F0HFFFH如:MOV A, #3H MOV DPTR, #TAB MOVC A,A+DPTR TAB: DB 0, 1, 4, 9, 16, 25 如:MOV A, MOVC A,A+PC TAB: DB 0

23、, 1, 4, 9, 16, 25 四、堆棧操作指令(2條) 指令格式: PUSH direct ; SP(SP)+1 , (SP)(direct) POP derect ;(direct)(SP) , SP(SP)1特點(diǎn):堆棧操作指令是一種特殊的數(shù)據(jù)傳送指令,是根據(jù)棧指針SP中的棧頂?shù)刂愤M(jìn)行數(shù)據(jù)操作。堆棧操作指令的實(shí)質(zhì)是以棧指針SP為間址寄存器的間址尋址方式。堆棧區(qū)應(yīng)避開(kāi)使用的工作寄存器區(qū)和其他需要使用的數(shù)據(jù)區(qū),系統(tǒng)復(fù)位后,SP的初始值為07H。為了避免重疊,一般初始化時(shí)要重新設(shè)置SP。功能:實(shí)現(xiàn)RAM單元數(shù)據(jù)送入棧頂或由棧頂取出數(shù)據(jù)送至RAM單元。適用場(chǎng)合:用于執(zhí)行中斷、子程序調(diào)用、參數(shù)傳

24、遞等程序的斷點(diǎn)保護(hù)和現(xiàn)場(chǎng)保護(hù)。書(shū)寫(xiě)方式:堆棧操作指令是直接尋址指令,直接地址不能是寄存器名,因此應(yīng)注意指令的書(shū)寫(xiě)格式。例如: PUSH ACC(不能寫(xiě)成PUSH A) POP 00H (不能寫(xiě)成POP R0)00H3FH40H7FH53H28H39H54H50H87H45HEFH01H07HABH28H執(zhí)行前片內(nèi)RAM51H52H如:MOV SP, #50HPUSH ACCPUSH39HPUSH01HPUSH07HPOP07HPOP01HPOP39HPOPACC00H3FH40H7FH53H28H39H54H50H87H45HEFH01H07HABH28H執(zhí)行前片內(nèi)RAM51H52H28HE0

25、H28H68H68H87HABH40H五、數(shù)據(jù)交換指令(五、數(shù)據(jù)交換指令(5 5條)條) 數(shù)據(jù)傳輸時(shí),若需要保存目的操作數(shù),則經(jīng)常采用數(shù)據(jù)交換指令。(1)半字節(jié)數(shù)據(jù)交換指令(2條) 指令格式:指令格式:SWAP A ;(A)30(A)74 XCHD A , Ri ;(A)30((Ri))30 如:SWAP A MOV R1, 36H XCHD A, R1F7HE0H00HFFH87H36H執(zhí)行后執(zhí)行后RAM:7FHE0H00HFFH89H36H執(zhí)行前執(zhí)行前RAM:F9H(2)字節(jié)交換指令(3條) 指令格式:指令格式:XCH A , 其中:其中: 包括Rn、 Ri、direct。00H6FH70

26、HFFH96HE0H執(zhí)行后片內(nèi)RAM28H39H54H80H87H45HEFH如:MOV R1, #28HMOV R7, #ABHMOV A, #DDHXCH A, 39H XCH A, R7 XCH A, R101H07HABH28HDDH00H6FH70HFFH96HE0H28H39H54H80H87H45HEFH01H07HABH28HDDH執(zhí)行前片內(nèi)RAM 例題例題22利用查表指令將內(nèi)部RAM中20H單元的壓縮BCD碼拆開(kāi),轉(zhuǎn)換成相應(yīng)的ASCII碼,存入21H、22H中,高位存在22H。解:解: BCD碼的09對(duì)應(yīng)的ASCII碼為30H39H,將30H39H按大小順序排列放入表TABL

27、E中,先將BCD碼拆分,將拆分后的BCD碼送入A,表首址送入DPTR ,然后領(lǐng)用查表指令MOVC A,A+DPTR,查表即得結(jié)果,然后存入21H、22H中。程序如下:程序如下: ORG 1000H START:MOV DPTR,#TABLEMOVA,20HANLA,#0FHMOVCA,A+DPTRMOV21H,AMOVA,20HANLA,#0F0HSWAPAMOVCA,A+DPTRMOV22H,ASJMP TABLE:DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H END3.4 算術(shù)運(yùn)算指令 算術(shù)運(yùn)算指令的兩個(gè)參與運(yùn)算的操作數(shù),一個(gè)存放在累加器A中(

28、此操作數(shù)也為目的操作數(shù));一個(gè)存放在R0R7或Ri(片內(nèi)RAM)中,或是#data(立即數(shù))。 算術(shù)運(yùn)算指令可以分為加法指令、帶進(jìn)位的加法指令、帶借位的減法指令、十進(jìn)制調(diào)整指令、加1指令、減1指令、乘除指令。1. 加法指令(4條) 指令格式: ADD A , ; (A)(A)+ 其中: 包括Rn、Ri、direct、#data。 對(duì)標(biāo)志位的影響:ADD對(duì)PSW中的所有標(biāo)志位均產(chǎn)生影響2. 帶進(jìn)位的加法指令(4條) 指令格式:ADDC A , ;(A)(A)+ + (Cy) 其中: 包括Rn、Ri、direct、#data。 對(duì)標(biāo)志位的影響:ADDC對(duì)PSW中的所有標(biāo)志位均產(chǎn)生影響。3. 3.

29、帶借位的減法指令(帶借位的減法指令(4 4條)條) 指令格式: SUBB A , ; (A)(A) (Cy) 其中: 包括Rn、Ri、direct、#data。 對(duì)標(biāo)志位的影響:SUBB對(duì)PSW中的所有標(biāo)志位均產(chǎn)生影響。 注意:注意:MCS-51指令系統(tǒng)中沒(méi)有不帶借位的減法指令,欲實(shí)現(xiàn)不帶借位的減法計(jì)算,應(yīng)預(yù)先置Cy=0(利用CLR C指令),然后利用帶借位的減法指令SUBB實(shí)現(xiàn)計(jì)算。4. 4. 十進(jìn)制調(diào)整指令(十進(jìn)制調(diào)整指令(1 1條)條) 功能:跟在加法指令A(yù)DD或ADDC后面,對(duì)運(yùn)算結(jié)果的十進(jìn)制數(shù)進(jìn)行BCD碼修正,使它調(diào)整為壓縮的BCD碼數(shù),以完成十進(jìn)制加法運(yùn)算功能。 特點(diǎn):十進(jìn)制調(diào)整指

30、令也稱為BCD碼修正指令,這是一條專用指令。兩個(gè)壓縮的BCD碼按二進(jìn)制數(shù)相加后必須經(jīng)本指令調(diào)整才能得到壓縮的BCD碼的和。源操作數(shù)只能在累加器A中,結(jié)果存入A中。 指令格式:DA A 注意:十進(jìn)制調(diào)整指令不能對(duì)減法指令進(jìn)行修正。BCD碼減法必須采用BCD補(bǔ)碼運(yùn)算法則,變減法為補(bǔ)碼加法(被減數(shù)+減數(shù)的補(bǔ)碼,減數(shù)的補(bǔ)碼=9AH減數(shù))。然后對(duì)其進(jìn)行十進(jìn)制調(diào)整來(lái)實(shí)現(xiàn)。 5. 5. 加加1 1指令(指令(5 5條)條) 功能:加1指令又稱為增量指令,其功能是使操作數(shù)所指定的單元的內(nèi)容加1 。 指令格式:INC ; + 1 其中: 即是源操作數(shù)又是目的操作數(shù)(即只有一個(gè)操作數(shù)),包括 A、Rn、direc

31、t、Ri、 DPTR 。 對(duì)標(biāo)志位的影響:除對(duì)累加器A操作影響P標(biāo)志位外,其他操作均不影響PSW的各標(biāo)志位。 6. 6. 減減1 1指令(指令(4 4條)條) 功能:減1指令又稱為減量指令,其功能是使操作數(shù)所指定的單元的內(nèi)容減1 。 指令格式:DEC ; 1 其中: 即是源操作數(shù)又是目的操作數(shù)(即只有一個(gè)操作數(shù)),包括操作數(shù)),包括 A、Rn、direct、Ri。對(duì)標(biāo)志位的影響:同加1指令。7. 7. 乘除指令(乘除指令(2 2條)條) 功能:實(shí)現(xiàn)乘法或除法操作。 特點(diǎn):乘除指令在MCS-51指令系統(tǒng)中執(zhí)行時(shí)間最長(zhǎng),均為四周期指令。 指令格式: MUL AB ;(B)(A)(A)(B) DIV

32、 AB ;(A)(A)/(B)(B) 對(duì)標(biāo)志位的影響:乘除指令影響PSW中的Cy, OV, P標(biāo)志位。其中,Cy位總是被清0的,P是由累加器A中1的個(gè)數(shù)的奇偶性決定的。乘法運(yùn)算中,若乘積大于FFH,則OV標(biāo)志位置1,否則清0。除法運(yùn)算中,若除數(shù)為0,則OV標(biāo)志位置1,否則清0。 例題例題33 將片內(nèi)RAM 30H單元中的兩位壓縮BCD碼轉(zhuǎn)換成二進(jìn)制數(shù)送到片內(nèi)RAM 40H單元中。 解:解:兩位壓縮BCD碼轉(zhuǎn)換成二進(jìn)制數(shù)的算法為:(a1a 0)BCD=10a1a0 程序流程圖如右圖所示。程序如下:程序如下: ORG 1000HSTART: MOV A, 30H ; 取兩位BCD壓縮碼a1a0送A

33、ANL A, #0F0H ; 取高4位BCD碼a1SWAP A ; 高4位與低4位換位MOV B, #0AH ; 將二進(jìn)制數(shù)10送入BMUL AB ; 將10a1送入A中MOV R0, A ; 結(jié)果送入R0中保存MOV A, 30H ; 再取兩位BCD壓縮碼a1a0送AANL A, #0FH ; 取低4位BCD碼a0ADD A, R0 ; 求和10a1+ a0MOV 40H, A ; 結(jié)果送入40H保存SJMP $ ; 程序執(zhí)行完,“原地踏步” END 例題例題55 已知片內(nèi)RAM 30H3FH單元中存放了16個(gè)二進(jìn)制無(wú)符號(hào)數(shù),編制程序求它們的累加和,并將其和數(shù)存放在R4, R5中。解:解:每

34、次求和的過(guò)程相同,可以用循環(huán)程序?qū)崿F(xiàn)。16個(gè)二進(jìn)制無(wú)符號(hào)數(shù)求和,循環(huán)程序的循環(huán)次數(shù)應(yīng)為16次(存放在R2中),它們的和放在R4, R5中(R4存高8位,R5存低8位)。程序流程圖如右圖所示。程序如下:程序如下: ORG 1000HSTART: MOV R0, #30H MOV R2, #10H ; 設(shè)置循環(huán)次數(shù)(16) MOV R4, #00H ; 和高位單元R4清0 MOV R5, #00H ; 和低位單元R5清0LOOP: MOV A, R5 ; 和低8位的內(nèi)容送A ADD A, R0; 將R0與R5的內(nèi)容相加并產(chǎn)生進(jìn)位Cy MOV R5, A; 低8位的結(jié)果送R5 CLR A; A清0

35、ADDC A, R4; 將R4的內(nèi)容和Cy相加 MOV R4, A; 高8位的結(jié)果送R4 INC R0; 地址遞增(加1) DJNZ R2, LOOP ;若循環(huán)次數(shù)減1不為0,則轉(zhuǎn)到 LOOP處循環(huán);否則,循環(huán)結(jié)束 SJMP $ END3.5 3.5 邏輯運(yùn)算和移位指令邏輯運(yùn)算和移位指令 對(duì)標(biāo)志位的影響:邏輯運(yùn)算和移位指令中除了兩條帶進(jìn)位的循環(huán)移位指令外,其余均不影響PSW中的各標(biāo)志位。但當(dāng)目的操作數(shù)是累加器A時(shí),影響PSW中的奇偶校驗(yàn)位P。 常用的邏輯運(yùn)算和移位類指令有:邏輯與、邏輯或、邏輯異或、循環(huán)移位、清0、求反(非)等24條指令,它們的操作數(shù)都是8位的。邏輯運(yùn)算都是按位進(jìn)行的,除用于邏

36、輯運(yùn)算外,還可用于模擬各種數(shù)字邏輯電路的功能,進(jìn)行邏輯電路的設(shè)計(jì)。1邏輯與運(yùn)算指令(6條) 功能:實(shí)現(xiàn)兩個(gè)操作數(shù)的邏輯與。 指令格式:ANL A , 其中: 包括Rn、Ri、direct、#data。 ANL direst , 其中: 包括A、#data。 適用場(chǎng)合:實(shí)現(xiàn)邏輯與,主要用于操作數(shù)的某些位不變(這些位與“1”),某些位置0(這些位與“0”)。2 2邏輯或運(yùn)算指令(邏輯或運(yùn)算指令(6 6條)條) 功能:實(shí)現(xiàn)兩個(gè)操作數(shù)的邏輯或。 指令格式:ORL A , 其中: 包括Rn、Ri、direct、#data。 ORL direst , 其中: 包括A、#data。 適用場(chǎng)合:實(shí)現(xiàn)邏輯或,主

37、要用于操作數(shù)的某些位不變(這些位或“0”),某些位置1(這些位或“1”)。3 3邏輯異或運(yùn)算指令(邏輯異或運(yùn)算指令(6 6條)條) 功能:實(shí)現(xiàn)兩個(gè)操作數(shù)的邏輯異或。 指令格式:XRL A , 其中: 包括Rn、Ri、direct、#data。 XRL direst , 其中: 包括A、#data。 適用場(chǎng)合:實(shí)現(xiàn)邏輯異或,主要用于操作數(shù)的某些位不變(這些位異或“0”),某些位取反(這些位異或“1”)。4 4循環(huán)移位指令(循環(huán)移位指令(4 4條)條) MCS-51單片機(jī)的循環(huán)移位指令共有不帶進(jìn)位的循環(huán)左、右移位(操作碼為RL, RR)和帶進(jìn)位的循環(huán)左、右移位(操作碼為RLC, RRC)指令4條。

38、 特點(diǎn):特點(diǎn):只能對(duì)累加器A進(jìn)行循環(huán)移位。 指令格式:指令格式: 操作碼 A功能:功能:累加器A中的數(shù)據(jù)逐位左移一位相當(dāng)于原內(nèi)容乘2,而逐位右移一位相當(dāng)于原內(nèi)容除以2。循環(huán)移位指令示意圖如右圖所示。 A7 A6 A5 A4 A3 A2 A1 A0CY循環(huán)右移A7 A6 A5 A4 A3 A2 A1 A0循環(huán)左移5 5累加器清累加器清0 0與取反指令(與取反指令(2 2條)條) 指令格式:CLR A ;(A)00H CPL A ;(A)( ) 特點(diǎn):可以節(jié)省存儲(chǔ)空間,提高程序執(zhí)行效率。 對(duì)標(biāo)志位的影響:CLR A指令只影響PSW的P標(biāo)志位,CPL A指令不影響PSW各標(biāo)志位。A例題2 利用MCS

39、-51單片機(jī)實(shí)現(xiàn)P1口上的發(fā)光二極管閃爍, P2口上的發(fā)光二極管右移, P0口上的發(fā)光二極管左移。MCS-51P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.73.6 控制轉(zhuǎn)移指令 功能:改變程序計(jì)數(shù)器PC中的內(nèi)容,控制程序執(zhí)行的流向,實(shí)現(xiàn)程序分支轉(zhuǎn)向。 為了控制程序的執(zhí)行方向,MCS-51單片機(jī)提供了17條控制轉(zhuǎn)移指令。 對(duì)標(biāo)志位的影響:除了CJNE影響PSW的進(jìn)位標(biāo)志位Cy外,其余均不影響PSW的各標(biāo)志位。 1無(wú)條件轉(zhuǎn)移指令(4條) 定義:不規(guī)定條件

40、的程序轉(zhuǎn)移稱為無(wú)條件轉(zhuǎn)移指令。 指令格式: 長(zhǎng)轉(zhuǎn)移指令: LJMP addr16 ;(PC)addr150 絕對(duì)轉(zhuǎn)移指令: :AJMP addr11 ;(PC)(PC)+2,PC 100addr11相對(duì)(短)轉(zhuǎn)移指令:SJMP rel ;(PC)(PC)+2+rel間接(散)轉(zhuǎn)移指令: :JMP A+DPTR ;(PC)(DPTR)+(A)注意: (1)使用轉(zhuǎn)移指令時(shí),指令中的地址或偏移量均可采用標(biāo)號(hào),只有在執(zhí)行前才被匯編成實(shí)際的二進(jìn)制地址。 (2)指令的轉(zhuǎn)移范圍: 在執(zhí)行當(dāng)前轉(zhuǎn)移指令后的PC值的基礎(chǔ)上: 長(zhǎng)轉(zhuǎn)移指令LJMP: 64KB 絕對(duì)轉(zhuǎn)移指令A(yù)JMP :2KB 相對(duì)(短)轉(zhuǎn)移指令SJM

41、P : 128+127(用補(bǔ)碼表示) 間接(散)轉(zhuǎn)移指令JMP: 64KB (3)相對(duì)(短)轉(zhuǎn)移指令SJMP rel 中地址偏移量的計(jì)算:rel = 轉(zhuǎn)移目標(biāo)地址轉(zhuǎn)移指令地址(當(dāng)前PC值) 2 (4)原地踏步(暫停當(dāng)前的程序,并不是真的停機(jī))的實(shí)現(xiàn): SJMP $ 或 HERE: SJMP HERE (5)間接(散)轉(zhuǎn)移指令:JMP A+DPTR 常用于實(shí)現(xiàn)程序的分支轉(zhuǎn)移(散轉(zhuǎn))。 DPTR為轉(zhuǎn)移目的的起始地址,A為轉(zhuǎn)移目的的偏移量。 LOOP1:2條件轉(zhuǎn)移指令(2條) 功能:功能:在規(guī)定的條件滿足時(shí)進(jìn)行程序轉(zhuǎn)移,否則程序往下順序執(zhí)行。MCS-51單片機(jī)中,條件轉(zhuǎn)移指令實(shí)質(zhì)上是累加器A判零指令

42、。LJMP LOOP1程序區(qū)域1程序區(qū)域程序區(qū)域0LOOP1:AJMP LOOP1程序區(qū)域1程序區(qū)域程序區(qū)域0LOOP1:SJMP LOOP1程序區(qū)域1程序區(qū)域程序區(qū)域0 指令格式: JZ rel ; 若(A)=0,則轉(zhuǎn)移 (PC) (PC)+2+rel 若(A)0,則順序執(zhí)行(PC) (PC) +2 JNZ rel ; 若(A)0 ,則轉(zhuǎn)移 (PC) (PC)+2+rel 若(A) =0 ,則順序執(zhí)行(PC) (PC) +2 指令的轉(zhuǎn)移范圍: rel的取值范圍是在執(zhí)行當(dāng)前轉(zhuǎn)移指令后的PC值基礎(chǔ)上的128+127(用補(bǔ)碼表示)。 可以采用符號(hào)地址表示。偏移量偏移量relrel的計(jì)算方法:的計(jì)算

43、方法: rel = 轉(zhuǎn)移目標(biāo)地址轉(zhuǎn)移指令地址(當(dāng)前PC值) 23比較轉(zhuǎn)移指令(4條) 指令格式:CJNE 目的操作數(shù),源操作數(shù),rel 當(dāng)目的操作數(shù)為A時(shí),源操作數(shù)為#data、direct。 當(dāng)目的操作數(shù)為Rn、Ri時(shí),源操作數(shù)為#data; 即:即:CJNE A, direct, rel CJNE A, #data, rel CJNE Rn, #data, rel CJNE Ri, #data, rel功能: 把兩個(gè)操作數(shù)進(jìn)行比較,以比較的結(jié)果作為條件來(lái)控制程序的轉(zhuǎn)移 。 若(目的操作數(shù))=(源操作數(shù)),則程序繼續(xù)執(zhí)行,(PC)(PC) +3 若(目的操作數(shù))(源操作數(shù)),則程序轉(zhuǎn)移,(P

44、C)(PC) + rel +3,Cy0 若(目的操作數(shù))(源操作數(shù)),則程序轉(zhuǎn)移,(PC)(PC) + rel +3,Cy1 功能:比較兩個(gè)操作數(shù)的大小。 對(duì)標(biāo)志位影響:影響Cy標(biāo)志位,不影響其他標(biāo)志位。 指令的轉(zhuǎn)移范圍:rel的取值范圍是在執(zhí)行當(dāng)前轉(zhuǎn)移指令后的PC值基礎(chǔ)上的128+127(用補(bǔ)碼表示)。 可以采用符號(hào)地址表示。 注意:比較轉(zhuǎn)移指令的比較是通過(guò)兩操作數(shù)的減法實(shí)現(xiàn)的,影響Cy標(biāo)志位,不保存最后的差值,兩個(gè)操作數(shù)的內(nèi)容不變。4循環(huán)(減1條件)轉(zhuǎn)移指令(2條) 功能:功能:具有減1判非0則轉(zhuǎn)移的功能。主要用于控制程序循環(huán),實(shí)現(xiàn)按循環(huán)次數(shù)控制循環(huán)的目的。 特點(diǎn):特點(diǎn):循環(huán)轉(zhuǎn)移指令是一組

45、把減1與條件轉(zhuǎn)移兩種功能結(jié)合在一起的指令。 指令格式:DJNZ , rel ; 1 若 0,則轉(zhuǎn)移 (PC) (PC)+2+rel 若 0,則不轉(zhuǎn)移 (PC) (PC) +2 注意:條件轉(zhuǎn)移指令均為相對(duì)轉(zhuǎn)移指令,因此指令的轉(zhuǎn)移范圍十分有限。若要實(shí)現(xiàn)64KB范圍內(nèi)的轉(zhuǎn)移,則可以借助于一條長(zhǎng)轉(zhuǎn)移指令的過(guò)渡來(lái)實(shí)現(xiàn)。5子程序調(diào)用與返回指令(4條) 定義:具有完整功能的程序段定義為子程序,供主程序調(diào)用。 功能: 供主程序在需要時(shí)調(diào)用。子程序可以在程序中反復(fù)多次使用,以簡(jiǎn)化源程序的書(shū)寫(xiě)。 特點(diǎn):子程序可以嵌套,有利于模塊化程序設(shè)計(jì)。主程序與子程序之間的調(diào)用關(guān)系如下左圖所示,兩級(jí)子程序嵌套的示意圖如下右圖所

46、示。 為了實(shí)現(xiàn)主程序?qū)ψ映绦虻囊淮瓮暾{(diào)用,必須有子程序調(diào)用指令和子程序返回指令。子程序調(diào)用指令在主程序中使用,而子程序返回指令則是子程序的最后一條指令。調(diào)用與返回指令是成對(duì)使用的。子程序調(diào)用指令的功能: 必須具有自動(dòng)把程序計(jì)數(shù)器PC中的斷點(diǎn)地址保護(hù)到堆棧中,且將子程序入口地址自動(dòng)送入程序計(jì)數(shù)器PC中的功能。子程序返回指令的功能: 必須具有自動(dòng)把堆棧中的斷點(diǎn)地址恢復(fù)到程序計(jì)數(shù)器PC中的功能。注意: 子程序調(diào)用時(shí)應(yīng)注意入口參數(shù)設(shè)置,子程序返回時(shí)應(yīng)注意出口參數(shù)的傳遞。指令格式:(1)絕對(duì)短調(diào)用指令 ACALL addr11 ; (PC) (PC) +2, (SP) (SP) +1,(SP)(PC)

47、70 (SP) (SP) +1, (SP) (PC) 158, (PC) 100addr11 其中: addr11為11位地址,實(shí)際編程時(shí)可以用符號(hào)地址。并且只能在2KB范圍以內(nèi)調(diào)用子程序 。(2)絕對(duì)長(zhǎng)調(diào)用指令 LCALL addr16 ; (PC) (PC) +3, (SP) (SP) +1,(SP)(PC)70 (SP) (SP) +1, (SP) (PC) 158, (PC) 150addr16 其中: addr16為16位地址,實(shí)際編程時(shí)可以用符號(hào)地址??梢栽?4KB范圍以內(nèi)調(diào)用子程序 。(3)子程序返回指令 RET ; (PC) 158(SP), (SP) (SP) 1, (PC)

48、 70 (SP) , (SP) (SP) 1(4)中斷返回指令 RETI ; (PC) 158(SP), (SP) (SP) 1, (PC) 70 (SP) , (SP) (SP) 1注:注:中斷服務(wù)程序是一種特殊的子程序,它是在計(jì)算機(jī)響應(yīng)中斷時(shí),由硬件完成調(diào)用而進(jìn)入相應(yīng)的中斷服務(wù)程序。RETI指令與RET指令相仿,區(qū)別在于RET是從子程序返回,RETI 是從中斷服務(wù)程序返回。無(wú)論是RET還是RETI都是子程序執(zhí)行的最后一條指令。 6空操作指令NOP (1條)指令格式: NOP ; (PC) (PC) +1 功能:功能:不執(zhí)行任何操作,消耗了一個(gè)機(jī)器周期,常用于軟件延時(shí)或在程序可靠性設(shè)計(jì)中用來(lái)

49、穩(wěn)定程序。特點(diǎn):特點(diǎn):NOP占據(jù)一個(gè)單元的存儲(chǔ)空間,除了使PC的內(nèi)容加1外,CPU不產(chǎn)生任何操作結(jié)果,只是消耗了一個(gè)機(jī)器周期。例題3 數(shù)據(jù)極值查找程序。內(nèi)容RAM30H單元開(kāi)始存放了10個(gè)數(shù),找出其中最大的數(shù),并放到50H單元中。開(kāi)始數(shù)據(jù)首地址 R0數(shù)據(jù)塊長(zhǎng)度 R2第一個(gè)數(shù)送MAX讀下一個(gè)數(shù)送R0數(shù)據(jù)首地址 R0CJNE A,MAX,CHKDJNZ R2,LOOP1結(jié)束NNYYORG0100HMAXDATA50HMOVR0, #30HMOVR2, #10MOVMAX, R0DECR2LOOP1: INCR0MOVA, R0CJNEA, MAX, CHKCHK:JCLOOP2MOVMAX, AL

50、OOP2: DJNZR2, LOOP1SJMP$ENDDELAY: MOV R7, #200 ;設(shè)置外循環(huán)次數(shù)(此條指令需要1個(gè)機(jī)器周期)DLY1: MOV R6, #123 ; 設(shè)置內(nèi)循環(huán)次數(shù)DLY2: DJNZ R6, DLY2 ;(R6)1=0,則順序執(zhí)行,否則轉(zhuǎn)回 DLY2繼續(xù)循環(huán),延時(shí)時(shí)間為2s123=246sNOP ; 延時(shí)時(shí)間為1sDJNZ R7,DLY1 ;(R7)1=0,則順序執(zhí)行,否則轉(zhuǎn)回DLY1繼續(xù)循 環(huán),延時(shí)時(shí)間為(246211)20021=50.003msRET ; 子程序結(jié)束3.7 位操作指令 位操作(布爾變量操作):操作數(shù)不是字節(jié),而是字節(jié)中的某個(gè)位。每位的取值只

51、能取0或1。 指令的尋址范圍:片內(nèi)RAM位尋址區(qū)20H2FH, SFR中的11個(gè)可位尋址特殊寄存器中的83個(gè)可尋址位。 特點(diǎn):以進(jìn)位標(biāo)志Cy作為位累加器,可以實(shí)現(xiàn)布爾變量的傳送、運(yùn)算和控制轉(zhuǎn)移等功能。 指令中的位地址的表達(dá)方式:直接地址方式(如0AFH)、特殊功能寄存器名.位序號(hào)(如PSW.3)、字節(jié)地址.位序號(hào)(如0D0H.0)、位名稱方式(如F0)和用戶定義名稱等幾種方式。 功能:位邏輯操作指令用于位邏輯操作,還可用于對(duì)組合邏輯電路的模擬。采用位操作指令進(jìn)行組合邏輯電路的設(shè)計(jì)比采用字節(jié)型邏輯指令節(jié)約存儲(chǔ)空間,運(yùn)算操作十分方便。 3.位狀態(tài)(置位、清0)控制指令(4條) 指令格式:CLR ;

52、 0 SETB ; 1 其中:其中:包括Cy、 bit。4.位條件(控制)轉(zhuǎn)移指令(5條) 特點(diǎn):以位的狀態(tài)作為實(shí)現(xiàn)程序轉(zhuǎn)移的判斷條件。 指令格式: (1)以進(jìn)位標(biāo)志位Cy內(nèi)容為條件的轉(zhuǎn)移指令 JC rel ; 若(Cy)=1,則轉(zhuǎn)移(PC)(PC)+2+rel , 否則順序執(zhí)行 JNC rel ; 若(Cy)=0,則轉(zhuǎn)移(PC)(PC)+2+rel , 否則順序執(zhí)行 (2)以位地址bit內(nèi)容為條件的轉(zhuǎn)移指令指令格式:JB bit, rel ;若(bit)=1,則轉(zhuǎn)移(PC)(PC)+3+rel,否則順序執(zhí)行 JNB bit,rel ;若(bit)=0,則轉(zhuǎn)移(PC)(PC)+3+rel,否則

53、順序執(zhí)行 JBC bit, rel ;若(bit)=1,則轉(zhuǎn)移(PC)(PC)+3+rel,且(bit )0,否則順序執(zhí)行 例題4 設(shè)補(bǔ)碼數(shù)x存放在30H單元之中,函數(shù)值y按下式進(jìn)行賦值。MAIN:MOVA, 30HJZLOOP1JNBACC.7, LOOP2ADDA, #5MOV30H, ALOOP2: SJMP$LOOP1: MOV30H, #10HSJMP$3.8 綜合例題 例題例題77 設(shè)MCS-51單片機(jī)內(nèi)部RAM起始地址為30H的數(shù)據(jù)塊中共存有64個(gè)無(wú)符號(hào)數(shù),編制程序使它們按從小到大的順序排列。解:設(shè)64個(gè)無(wú)符號(hào)數(shù)在數(shù)據(jù)塊中的順序?yàn)椋篹64, e63, e2, e1,使他們從小到大

54、順序排列的方法很多,現(xiàn)以冒泡法為例進(jìn)行介紹。 冒泡法又稱兩兩比較法。它先使e64和e63比較,若e64e63,則兩個(gè)存儲(chǔ)單元中的內(nèi)容交換,否則就不交換。然后使e63和e62比較,按同樣的原則決定是否交換。一直比較下去,最后完成e2和e1的比較及交換,經(jīng)過(guò)N1=63次比較(常用內(nèi)循環(huán)63次來(lái)實(shí)現(xiàn))后,e1的位置上必然得到數(shù)組中的最大值,猶如一個(gè)氣泡從水低冒出來(lái)一樣。 實(shí)際編程時(shí),可通過(guò)設(shè)置“交換標(biāo)志”用來(lái)控制是否再需要冒泡,若剛剛進(jìn)行完的冒泡中發(fā)生過(guò)數(shù)據(jù)交換(即排序尚未完成),應(yīng)繼續(xù)進(jìn)行冒泡;若進(jìn)行完的冒泡中未發(fā)生過(guò)數(shù)據(jù)交換(即排序已經(jīng)完成),冒泡應(yīng)該停止。例如:對(duì)于一個(gè)已經(jīng)排好序的數(shù)組:1, 2, 3, 63, 64,排序程序只要進(jìn)行一次循環(huán)便可根據(jù)“交換標(biāo)志”的狀態(tài)而結(jié)束排序程序的再執(zhí)行,這自然可以減少631=62次的冒泡時(shí)間。 冒泡法程序流程圖如下頁(yè)圖所示。 程序如下: ORG 100

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論