51單片機(jī)的指令系統(tǒng)課件_第1頁
51單片機(jī)的指令系統(tǒng)課件_第2頁
51單片機(jī)的指令系統(tǒng)課件_第3頁
51單片機(jī)的指令系統(tǒng)課件_第4頁
51單片機(jī)的指令系統(tǒng)課件_第5頁
已閱讀5頁,還剩26頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第2章51單片機(jī)的指令系統(tǒng)

學(xué)習(xí)和使用單片機(jī)的一個(gè)重要環(huán)節(jié)就是理解和熟練掌握它的指令系統(tǒng)。單片機(jī)的指令系統(tǒng)是生產(chǎn)廠商定義的,對于不同內(nèi)核的單片機(jī),其指令系統(tǒng)也是不同的。本章將詳細(xì)介紹51單片機(jī)指令系統(tǒng)的尋址方式及各類指令的格式和功能。

2.1初識單片機(jī)的匯編指令2.251單片機(jī)指令的尋址方式2.380C51指令集2.451單片機(jī)匯編語言程序設(shè)計(jì)示例習(xí)題

2.1初識單片機(jī)的匯編指令2.1.1案例介紹及知識要點(diǎn)2.1.2程序示例2.1.3知識總結(jié)——指令格式2.1.4知識總結(jié)——指令類型2.1.5知識總結(jié)——常用符號說明2.1.1案例介紹及知識要點(diǎn)將內(nèi)部RAM中20H單元和30H單元的無符號數(shù)相加,結(jié)果存入R0(高位)和R1(低位)中。了解單片機(jī)的指令格式。了解單片機(jī)的指令類型。熟悉指令中常用的符號。2.1.2程序示例2.1.3知識總結(jié)——指令格式指令的表示方法就是指令格式。51單片機(jī)指令主要由操作碼助記符字段和操作數(shù)字段組成。指令格式如下:

[標(biāo)號:]操作碼助記符[操作數(shù)1,][操作數(shù)2,][操作數(shù)3,][;注釋]指令格式中各項(xiàng)的含義說明如下。[]:括號中的內(nèi)容是可選的,其包含的內(nèi)容因指令的不同可有可無。標(biāo)號:根據(jù)編程需要給指令設(shè)定的符號地址,可有可無;通常在子程序入口或轉(zhuǎn)移指令的目標(biāo)地址處才賦予標(biāo)號。標(biāo)號由1~8個(gè)字符組成,第一個(gè)字符必須是英文字母,不能是數(shù)字或其他符號,標(biāo)號后必須有冒號。操作碼助記符:是指令的核心部分,由2~5個(gè)英文字母組成,如JB、MOV、CJNE或LCALL等。用于指示執(zhí)行何種操作,如加、減、乘、除和傳送等。操作數(shù):表示指令操作的對象,可以是一個(gè)具體的數(shù)據(jù),也可以是參加運(yùn)算的數(shù)據(jù)所在的地址。操作數(shù)一般有以下幾種形式。沒有操作數(shù):操作數(shù)隱含在操作碼中,如RET指令。只有一個(gè)操作數(shù):如INCA指令。有兩個(gè)操作數(shù):如MOVA,30H指令,操作數(shù)之間以逗號相隔。有3個(gè)操作數(shù):如CJNEA,#00H,LOOP指令。注釋:對指令的解釋說明,用以提高程序的可讀性,注釋前必須加分號,注釋換行時(shí)行前也要加分號。2.1.4知識總結(jié)——指令類型80C51匯編語言有42種操作碼助記符(見附錄A),用來描述33種操作功能。一種操作碼可以使用一種以上的數(shù)據(jù)類型。由于助記符規(guī)定了其訪問的存儲器空間,所以一種功能可能有幾個(gè)助記符,如MOV、MOVX、MOVC。功能助記符與尋址方式組合可得到111條指令。按機(jī)器指令所占字節(jié)數(shù)分類,共有單字節(jié)指令(49條)、雙字節(jié)指令(45條)和三字節(jié)指令(17條)。按指令執(zhí)行時(shí)間分類,共有單周期指令(64條)、雙周期指令(45條)和四周期指令(兩條,乘/除)。按功能分類,80C51指令系統(tǒng)可分為:數(shù)據(jù)傳送指令(29條)、算術(shù)運(yùn)算指令(24條)、邏輯運(yùn)算指令(24條)、位操作指令(17條)、控制轉(zhuǎn)移指令(17條)。2.1.5知識總結(jié)——常用符號說明2.251單片機(jī)指令的尋址方式在指令系統(tǒng)中,操作數(shù)是指令的重要組成部分,它指定了參加運(yùn)算的數(shù)據(jù)或數(shù)據(jù)所在的地址單元。尋找源操作數(shù)地址的方式稱為尋址方式。一條指令采用什么樣的尋址方式是由指令的功能決定的。尋址方式越多,指令功能就越強(qiáng),靈活性就越大。只有透徹地理解尋址方式,才能正確應(yīng)用指令。2.2.1案例介紹及知識要點(diǎn)2.2.2程序示例2.2.3知識總結(jié)——直接尋址2.2.4知識總結(jié)——立即尋址2.2.5知識總結(jié)——寄存器尋址2.2.6知識總結(jié)——寄存器間接尋址2.2.7知識總結(jié)——變址尋址2.2.8知識總結(jié)——位尋址2.2.9知識總結(jié)——相對尋址2.2.1案例介紹及知識要點(diǎn)編寫多字節(jié)無符號數(shù)加法程序。設(shè)有兩個(gè)多字節(jié)無符號數(shù)分別存放在內(nèi)部RAM的DAT1和DAT2開始的區(qū)域中(低字節(jié)先存),字節(jié)個(gè)數(shù)存放在R2中,求它們的和,并將結(jié)果存放在DAT1開始的區(qū)域中。掌握單片機(jī)指令中幾種常用的尋址方式。明確各尋址方式的尋址范圍。

2.2.2程序示例51單片機(jī)指令操作數(shù)的尋址方式主要有7種方式,分別為直接尋址、立即尋址、寄存器尋址、寄存器間接尋址、變址、尋址、位尋址、相對等址,其中,上述程序中涉及立即尋址、寄存器尋址、寄存器間接尋址、位尋址和相對尋址5種尋址方式。下面將詳細(xì)介紹這7種尋址方式。

2.2.3知識總結(jié)——直接尋址直接尋址方式是指指令中含有操作數(shù)的地址,該地址指出了參與運(yùn)算或傳送的數(shù)據(jù)所在的字節(jié)單元或位地址。(1) 低128B單元在指令中直接以單元地址形式給出。(2) 特殊功能寄存器除可以用單元地址形式給出外,還可以用寄存器符號形式給出。注意:直接尋址方式是訪問特殊功能寄存器的唯一方法。2.2.4知識總結(jié)——立即尋址立即尋址方式是指操作數(shù)在指令字節(jié)中給出,即操作數(shù)以指令字節(jié)的形式存放于程序存儲器中,為了與直接尋址指令中的直接地址相區(qū)別,需要在操作數(shù)前面加前綴標(biāo)志“#”。例如,執(zhí)行指令:

MOV A,#30H MOV DPTR,#8000H第1條指令表示將立即數(shù)30H送入累加器A中。第2條指令表示把16位立即數(shù)送入數(shù)據(jù)指針DPTR中,其中高8位送DPH,低8位送DPL。2.2.5知識總結(jié)——寄存器尋址寄存器尋址方式是指由指令指出某一個(gè)寄存器的內(nèi)容作為操作數(shù)的尋址方式。寄存器尋址一般用于訪問選定的通用寄存器R0~R7。如果寄存器尋址方式使用了另一個(gè)操作數(shù),那么該操作數(shù)必須是累加器A。寄存器尋址指令都是單字節(jié)指令(一條指令在程序存儲器中占一個(gè)字節(jié)地址)。寄存器尋址的尋址范圍如下。(1) 當(dāng)前通用寄存器組。(2) 部分特殊功能寄存器。例如,累加器A、寄存器B和數(shù)據(jù)指針DPTR。2.2.6知識總結(jié)——寄存器間接尋址寄存器間接尋址是指由指令指出某一個(gè)寄存器的內(nèi)容作為操作數(shù)地址的尋址方式。寄存器的內(nèi)容不是操作數(shù),而是操作數(shù)所在的存儲器地址,操作數(shù)是通過寄存器間接得到的。寄存器間接尋址需要以寄存器符號的形式表示,為了區(qū)別寄存器尋址和寄存器間接尋址,在寄存器間接尋址方式中,應(yīng)在寄存器的名稱前面加前綴標(biāo)志“@”。訪問內(nèi)部RAM或外部數(shù)據(jù)存儲器的低256個(gè)字節(jié)時(shí),只能采用R0或R1作為間接尋址寄存器。寄存器間接尋址的尋址范圍如下。(1) 片內(nèi)RAM低128B單元:這里只能用R0和R1作為間接尋址寄存器。(2) 片外RAM64KB:使用DPTR作為間接尋址寄存器。(3) 片外RAM低256B單元:可以使用DPTR、R0和R1作為間接尋址寄存器。(4) 堆棧區(qū):以堆棧指針SP作為間接尋址寄存器。2.2.7知識總結(jié)——變址尋址變址尋址方式用于訪問程序存儲器中的數(shù)據(jù)表格,以程序計(jì)數(shù)器PC或數(shù)據(jù)指針DPTR作為基址寄存器,以累加器作為變址寄存器?;芳拇嫫骱妥冎芳拇嫫鞯膬?nèi)容相加形成16位地址,該地址即作為操作數(shù)的地址。2.2.8知識總結(jié)——位尋址80C51單片機(jī)有位處理功能,可以對數(shù)據(jù)位進(jìn)行操作,因此就有了相應(yīng)的位尋址方式。位尋址指令中可以直接使用位地址。 位尋址的尋址范圍如下。(1) 片內(nèi)RAM中的位尋址區(qū)。(2) 可位尋址的特殊功能寄存器。2.2.9知識總結(jié)——相對尋址相對尋址用于訪問程序存儲器,只出現(xiàn)在轉(zhuǎn)移指令中。以PC的當(dāng)前值加上指令中給出的相對偏移量(rel)形成轉(zhuǎn)移地址。其中,rel是一個(gè)帶符號的8位二進(jìn)制數(shù),以補(bǔ)碼形式置于操作碼之后存放。程序的轉(zhuǎn)移范圍以PC當(dāng)前值為中心,介于-128~+127之間。2.380C51指令集根據(jù)指令功能的不同,51單片機(jī)指令通常分為數(shù)據(jù)傳送類、算術(shù)運(yùn)算、邏輯運(yùn)算類、控制轉(zhuǎn)移類和位操作類這5大類指令。熟練掌握數(shù)據(jù)傳送類指令、控制轉(zhuǎn)移類及位操作的應(yīng)用。了解邏輯運(yùn)算類和算術(shù)運(yùn)算類指令,熟記其標(biāo)志符。2.3.1數(shù)據(jù)傳送類指令2.3.2算術(shù)運(yùn)算指令2.3.3邏輯運(yùn)算及移位類指令2.3.4控制轉(zhuǎn)移類指令2.3.5位操作類指令2.3.1數(shù)據(jù)傳送類指令51指令系統(tǒng)中,數(shù)據(jù)傳送類指令共有29條。這類指令將源操作數(shù)傳送到指定的目的地址,傳送后源操作數(shù)保持不變。數(shù)據(jù)傳送類指令可以在累加器A、R0~R7工作寄存器與片內(nèi)數(shù)據(jù)存儲器、片外數(shù)據(jù)存儲器和程序存儲器之間進(jìn)行數(shù)據(jù)傳送。數(shù)據(jù)傳送類指令一般不影響標(biāo)志位,只有堆棧操作可以直接修改程序狀態(tài)字PSW。數(shù)據(jù)傳送類指令匯編語句的格式為:

MOV ﹤目的操作數(shù)﹥,﹤源操作數(shù)﹥1.內(nèi)部數(shù)據(jù)的傳送指令1) 以累加器A為目的操作數(shù)的指令2) 以寄存器Rn為目的操作數(shù)的指令3) 以直接地址為目的操作數(shù)的指令4) 以寄存器間接地址為目的操作數(shù)的指令5) 16位數(shù)據(jù)傳送指令6) 堆棧操作指令PUSH、POP7) 字節(jié)交換指令8) 半字節(jié)交換指令2.累加器A與片外RAM或I/O接口的數(shù)據(jù)傳送指令3.查表指令注意:由于80C51單片機(jī)堆棧操作指令中的操作數(shù)只能使用直接尋址方式,不能使用寄存器尋址方式,所以將累加器壓入堆棧時(shí),累加器(ACC)不能簡寫A。堆棧操作時(shí)指令PUSH和POP要成對出現(xiàn),且遵循后進(jìn)先出(LIFO)和先進(jìn)后出(FILO)的原則。2.3.2算術(shù)運(yùn)算指令C51的算術(shù)運(yùn)算指令有加、減、乘、除法指令,以及增量和減量指令。大多數(shù)指令都要以累加器A來存放一個(gè)源操作數(shù),另一個(gè)源操作數(shù)可以存放于任何一個(gè)工作寄存器Rn或片內(nèi)RAM單元中,也可以是指令碼中的一個(gè)立即數(shù)。1.加法指令1)H不帶進(jìn)位的加法指令2)帶進(jìn)位的加法指令3)加1指令4)十進(jìn)制調(diào)整指令2.減法指令3.乘法指令4.除法指令2.3.3邏輯運(yùn)算及移位類指令邏輯運(yùn)算指令可以完成數(shù)字邏輯的與、或、異或、清0和取反操作。移位類指令是對累加器A的循環(huán)移位操作,包括左、右方向,以及帶與不帶進(jìn)位標(biāo)志位的方式,此類指令共有24條。1.邏輯與指令A(yù)NL2.邏輯或指令ORL3.邏輯異或指令XRL4.清零和求反指令5.循環(huán)移位指令2.3.4控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令通常用于實(shí)現(xiàn)循環(huán)結(jié)構(gòu)和分支結(jié)構(gòu),共有17條,包括無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指令、子程序調(diào)用及返回指令。1.無條件轉(zhuǎn)移指令1)絕對轉(zhuǎn)移指令2)相對轉(zhuǎn)移指令3)間接轉(zhuǎn)移指令2.條件轉(zhuǎn)移指令1)判0或判1條件轉(zhuǎn)移指令2)比較轉(zhuǎn)移指令3)減1不為0轉(zhuǎn)移指令3.子程序調(diào)用與返回指令1)長調(diào)用指令2)絕對調(diào)用指令3)子程序返回指令4)中斷返回指令4.空操作指令2.3.5位操作類指令51單片機(jī)的一個(gè)顯著有特點(diǎn)就是具有位操作功能。相應(yīng)的位操作指令共有17條,主要分為4類,即位傳送指令、位狀態(tài)控制指令、位邏輯運(yùn)算指令和位條件轉(zhuǎn)移指令。進(jìn)行位操作時(shí),以進(jìn)位標(biāo)志位CY作為位累加器。位地址可用以下方式表示。直接用位地址表示方式,如20H、D4H。采用字節(jié)地址加位的方式表示,兩者之間用“.”隔開,如20H.0。采用寄存器名稱加位的方式,如ACC.0、PSW.7、88H.7。位名稱方式,如EA、TR0。1.位傳送指令2.位狀態(tài)控制指令1) 位清02) 位置13.位邏輯運(yùn)算指令1) 位邏輯“與”2) 位邏輯“或”3) 位取反4.位條件轉(zhuǎn)移指令1) 判CY轉(zhuǎn)移2) 判bit轉(zhuǎn)移2.451單片機(jī)匯編語言程序設(shè)計(jì)示例匯編語言程序共有3種基本結(jié)構(gòu)形式,即順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。本節(jié)將從應(yīng)用的角度出發(fā),介紹這3種程序結(jié)構(gòu)及各種常用程序的設(shè)計(jì)方法,并列舉一些具有代表性的匯編語言源程序,作為參考。了解匯編語言程序設(shè)計(jì)的設(shè)計(jì)步驟。掌握匯編語言中常用偽指令的寫法及功能。理解匯編語言常見的程序結(jié)構(gòu)。掌握子程序的調(diào)用方法。熟悉常用程序的編寫方法。2.4.1設(shè)計(jì)步驟2.4.2偽指令2.4.3順序程序設(shè)計(jì)2.4.4分支程序設(shè)計(jì)2.4.5循環(huán)程序設(shè)計(jì)2.4.6子程序設(shè)計(jì)2.4.1設(shè)計(jì)步驟1.分析問題,確定算法2.根據(jù)算法,畫出程序流程圖3.分配內(nèi)存工作區(qū)及有關(guān)端口地址4.編寫程序5.上機(jī)調(diào)試2.4.2偽指令在用80C51單片機(jī)設(shè)計(jì)應(yīng)用系統(tǒng)時(shí),可通過匯編指令來編寫程序。用匯編語言編寫的程序稱為匯編語言源程序。偽指令是放在匯編語言源程序中用于指示匯編程序如何對源程序進(jìn)行匯編的指令,它不同于指令系統(tǒng)中的指令,指令系統(tǒng)中的指令在匯編程序匯編時(shí)能產(chǎn)生相應(yīng)的指令代碼,而偽指令在匯編程序匯編時(shí)不會產(chǎn)生代碼,只是對匯編過程進(jìn)行相應(yīng)的控制和說明。偽指令通常在匯編語言源程序中用于定義數(shù)據(jù)、分配存儲空間,以及控制程序的輸入輸出等。80C51相對于一般的微型計(jì)算機(jī)匯編語言源程序來說結(jié)構(gòu)簡單,偽指令數(shù)目少。常用的偽指令只有幾條,如下。1.ORG定位偽指令2.匯編結(jié)束偽指令END3.賦值偽指令EQU4.?dāng)?shù)據(jù)地址賦值偽指令DATA5.字節(jié)數(shù)據(jù)定義偽指令DB6.字?jǐn)?shù)據(jù)定義偽指令DW7.位地址符號定義偽指令BIT2.4.3順序程序設(shè)計(jì)順序結(jié)構(gòu)程序是一種最簡單、最基本的程序,無分支,按照程序編寫的順序依次執(zhí)行。一般用來處理比較簡單的算術(shù)或邏輯問題,主要用數(shù)據(jù)傳送類指令和數(shù)據(jù)運(yùn)算類指令來實(shí)現(xiàn)。2.4.4分支程序設(shè)計(jì)在很多實(shí)際問題中,都需要根據(jù)不同的情況進(jìn)行不同的處理,這就用到了分支程序結(jié)構(gòu)。所謂分支結(jié)構(gòu)就是利用條件轉(zhuǎn)移指令,使程序執(zhí)行某一指令后,根據(jù)所給的條件是否滿足來改變程序執(zhí)行的順序。分支程序的結(jié)構(gòu)有兩種:雙分支結(jié)構(gòu)和多分支結(jié)構(gòu)(散轉(zhuǎn)分支結(jié)構(gòu)),如圖2-3所示。2.4.5循環(huán)程序設(shè)計(jì)循環(huán)程序是最常用的程序結(jié)構(gòu)形式。在單片機(jī)的程序設(shè)計(jì)中,有時(shí)會遇到一段程序要重復(fù)執(zhí)行多次的情況,此時(shí)就要用到循環(huán)結(jié)構(gòu)程序,這有助于縮短程序,同時(shí)也節(jié)省了程序的存儲空間,提高程序的質(zhì)量。循環(huán)結(jié)構(gòu)程序一般由4部分組成。(1) 初始化部分。主要用來設(shè)置循環(huán)的初始值,包括預(yù)置數(shù)、計(jì)數(shù)器和數(shù)據(jù)指針的初值。(2) 循環(huán)處理部分。此部分是循環(huán)程序的主題部分,也稱為循環(huán)體,是重復(fù)執(zhí)行的程序段,通過它可以完成程序處理的任務(wù)。(3) 循環(huán)修改。每循環(huán)一次,就要修改循環(huán)次數(shù)、數(shù)據(jù)及地址指針等。(4) 循環(huán)控制部分。根據(jù)循環(huán)結(jié)束條件,判斷是否應(yīng)該結(jié)束循環(huán)。循環(huán)程序設(shè)計(jì)的一個(gè)主要問題是循環(huán)次數(shù)的控制,一般有兩種控制方式,其結(jié)構(gòu)框圖如圖2-5所示。2.4.6子程序設(shè)計(jì)子程序是具有某種功能的獨(dú)立程序段,從結(jié)構(gòu)上看,它與一般程序沒有多大區(qū)別,唯一的區(qū)別是在子程序的末尾有一條子程序返回指令(RET),其功能是當(dāng)子程序執(zhí)行完后能自動地返回到主程序中去。在編寫和調(diào)用子程序時(shí)要注意以下幾點(diǎn)。(1) 要給每個(gè)子程序賦一個(gè)名字,作為子程序入口的符號。(2) 明確入口條件和出口條件。入口條件表明子程序需要哪些參數(shù),放在哪個(gè)寄存器和哪個(gè)存儲單元;出口條件則表明子程序處理的結(jié)果是如何存放的。只有正確理解并運(yùn)用這兩個(gè)條件,才能完成子程序和主程序間數(shù)據(jù)的正確傳遞。(3) 保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場。若在調(diào)

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論