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

下載本文檔

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

文檔簡介

汽車單片機(jī)第8講(2010-09-27)10-11第1學(xué)期第5周11.指令系統(tǒng)簡介;2.尋址方式;3.指令系統(tǒng);4.匯編語言程序設(shè)計;5.程序設(shè)計實(shí)例;第3章MCS-51指令系統(tǒng)及匯編語言2復(fù)習(xí)

控制轉(zhuǎn)移指令1、無條件轉(zhuǎn)移指令;LJMP,STMP,AJMP,JMP,功能相同,只是轉(zhuǎn)移范圍不同。2、條件轉(zhuǎn)移指令;JZrel;若(A)=0,轉(zhuǎn)移。JNZrel;若(A)≠0,轉(zhuǎn)移。CJNEA,direct,rel;

DJNZRn,rel

31)位傳送指令;MOVC2)位置位1、復(fù)位0指令;SETB,CLR3)位邏輯指令;ANL,ORL,CPL非4)位條件轉(zhuǎn)移指令;JC,JNC,JB,JNB,JBC復(fù)習(xí)位控制轉(zhuǎn)移類指令43.4匯編語言程序設(shè)計1.偽指令;2.匯編的功能定義;3.匯編程序設(shè)計步驟;5單片機(jī)指令有兩種基本類型:指令語句和偽指令語句(1)指令語句已在前面介紹。每一條指令語句在匯編時都產(chǎn)生一個指令代碼——機(jī)器代碼。(2)偽指令語句

是為匯編服務(wù)的。如指定目標(biāo)程序或數(shù)據(jù)存放的地址、給一些指定的標(biāo)號賦值、表示源程序結(jié)束等指令,并不產(chǎn)生目標(biāo)程序(機(jī)器碼),也不影響程序的執(zhí)行,僅僅產(chǎn)生供匯編用的某些命令,用來對匯編過程進(jìn)行某種控制或操作,這類指令稱為偽指令。

3.4.1偽指令61.定義起始地址偽指令格式:ORGaddr16功能:規(guī)定程序塊或數(shù)據(jù)塊存放的起始地址。addr16表示一個16位的程序存儲器的空間地址,一般為一個確定的地址,也可以是事先定義的標(biāo)號。例如:

ORG 2000HSTART:MOV A,30H…規(guī)定標(biāo)號START代表地址為2000H開始。在一個源程序中,可多次使用ORG指令,來規(guī)定不同的程序段的起始地址。但是,地址必須由小到大排列,地址不能交叉、重疊。ORG2000H┇ORG2500H ┇ ORG3000H

3.4.1偽指令72.定義匯編結(jié)束偽指令格式:END功能:表示匯編結(jié)束.用于終止源程序的匯編工作。在整個源程序中只能有一條END命令,且位于程序的最后。3.標(biāo)號賦值偽指令格式:標(biāo)號EQU[表達(dá)式]功能:將表達(dá)式的值賦給本語句中的標(biāo)號。又稱為等值指令。用于給標(biāo)號賦值。賦值以后,其標(biāo)號值在整個程序有效。例如:TESTEQU2000H

表示標(biāo)號TEST=2000H,在匯編時,凡是遇到標(biāo)號TEST時,均以2000H來代替。

8說明:1)賦值后的字符即可做為地址使用,也可

以做為立即數(shù)使用;2)一經(jīng)使用EQU賦值,整個程序有效;3)所賦值可是8位(字節(jié))或16位(字);4)該偽指令一般放在程序的開始段;例如程序段:

ORG8000H AA EQU10H

;AA=10H ABC EQUAA+10H;ABC=20H MOV A,ABC;A←20HBS: ADDA,#AA;A←(A)+10H

說明:程序中,AA、ABC是字符名稱,BS是標(biāo)號。94.定義字節(jié)偽指令(8位)格式:標(biāo)號: DB[字節(jié)表]功能:從標(biāo)號指定的地址單元開始,在程序存儲器的連續(xù)單元中定義字節(jié)數(shù)據(jù)。10進(jìn)制數(shù)自然轉(zhuǎn)換成16進(jìn)制數(shù),字母按ASCII碼存儲。

ORG2000HDB30H,40H,24,“C”,“B”匯編后: (2000H)=30H

(2001H)=40H

(2002H)=18H(10進(jìn)制數(shù)24) (2003H)=43H(字符“C”的ASCII碼) (2004H)=42H(字符“B”的ASCII碼)105.定義字偽指令(16位)格式:標(biāo)號: DW[字表]功能:從標(biāo)號指定的地址單元開始,在程序存儲器的連續(xù)單元中定義16位的數(shù)據(jù)字。例如:

ORG2000H DW1246H,7BH,10匯編后:(2000H)=12H ;第1個字(2001H)=46H(2002H)=00H ;第2個字(2003H)=7BH(2004H)=00H ;第3個字(2005H)=0AH(2005H)=0AH116.預(yù)留存儲區(qū)偽指令格式:標(biāo)號: DS表達(dá)式功能:從標(biāo)號指定的地址單元開始,定義一個存儲區(qū),以備源程序存儲數(shù)據(jù)使用。存儲區(qū)內(nèi)預(yù)留的存儲單元數(shù)由表達(dá)式的值決定。例如:

ORG 3030HTIMER: DS 10H┇從3030H單元開始保留10個存儲單元,下一條指令從3040H開始匯編。注意:MCS-51系列單片機(jī),DB、DW、DS偽指令只能用于程序存貯器ROM,不能對數(shù)據(jù)存貯器RAM使用。12

格式:<字符名稱>BIT<位地址>功能:把位地址賦給指定的字符名稱。例:

A1BITP1.0A2BIT20H

說明:賦值命令和位定義命令僅為方便編程和閱讀理解程序使用,使用時,字符名稱或位名稱一般取有意義且便于記憶的字母數(shù)字。7.位定義偽指令133.4.2匯編功能定義用匯編語言編寫的源程序匯編程序目標(biāo)程序?qū)⒃闯绦蚍g成目標(biāo)代碼(機(jī)器語言)用戶編寫機(jī)器語言,可執(zhí)行的代碼匯編過程:將源程序翻譯成機(jī)器語言的目標(biāo)代碼,此代碼按照偽指令的安排存入ROM中;執(zhí)行過程:CPU從ROM中逐條讀取目標(biāo)代碼并逐條執(zhí)行;141.分析問題——針對現(xiàn)有條件,明確在程序設(shè)計時應(yīng)該“做什么”2.確定算法——解決“怎樣做”的問題3.繪制程序流程圖——用圖形的方法描繪解決問題的思路4.分配內(nèi)存單元——確定程序和數(shù)據(jù)區(qū)的起始地址5.編寫源程序——用指令的形式將程序流程圖實(shí)現(xiàn)出來6.匯編——用開發(fā)機(jī)或仿真器將源程序轉(zhuǎn)換成機(jī)器碼,便于單片機(jī)識別7.在線仿真調(diào)試——查錯、改錯,對程序進(jìn)行優(yōu)化。3.4.3

匯編語言程序的設(shè)計步驟15MCS-51單片機(jī)的應(yīng)用程序的完成,應(yīng)經(jīng)過三個步驟;(1)在微計算機(jī)上,運(yùn)行編輯程序進(jìn)行源程序的輸入和編輯;(2)對源程序進(jìn)行交叉匯編得到機(jī)器代碼;(3)通過微計算機(jī)的串行口(或并行口)把機(jī)器代碼傳送到用戶樣機(jī)(或在線仿真器)進(jìn)行程序的調(diào)試和運(yùn)行。第(1)步,只需在微計算機(jī)上使用通用的編輯軟件即可完成。第(2)步的交叉匯編所用的匯編程序可在購買單片機(jī)的仿真開發(fā)工具時,由廠商提供。第(3)步驟的實(shí)現(xiàn)要借助于單片機(jī)仿真開發(fā)工具進(jìn)行。16匯編語言編程方法P75經(jīng)驗(yàn)總結(jié)

盡量采用模塊化程序設(shè)計方法;

這種設(shè)計方法是把一個完整的程序分成若干個功能相對獨(dú)立的、較小的程序模塊,對各個程序模塊分別進(jìn)行設(shè)計、編制程序和調(diào)試,最后把各個調(diào)試好的程序模塊裝配起來進(jìn)行聯(lián)調(diào),最終成為一個有實(shí)用價值的程序。盡量采用循環(huán)結(jié)構(gòu)和子程序結(jié)構(gòu);

采用循環(huán)結(jié)構(gòu)和子程序結(jié)構(gòu),可以使程序的總?cè)萘繙p小,提高程序的效率,節(jié)省內(nèi)存。17盡量少用無條件轉(zhuǎn)移指令

少用無條件轉(zhuǎn)移指令,可以保證程序的條理更加清晰,從而減少錯誤發(fā)生。充分利用累加器;

累加器是主程序和子程序之間信息傳遞的橋梁,利用累加器傳遞入口參數(shù)或返回參數(shù)比較方便。一般不要把累加器內(nèi)容壓入堆棧。18對于通用子程序要保護(hù)現(xiàn)場;

由于子程序的通用性,除了保護(hù)子程序入口參數(shù)的寄存器內(nèi)容外,還要對子程序中用到的其它寄存器內(nèi)容一并入棧保護(hù)。

對于中斷處理,還要保護(hù)程序狀態(tài)字

在中斷處理程序中,既要保護(hù)處理程序中用到的寄存器內(nèi)容,還要保護(hù)程序狀態(tài)字PSW。否則,當(dāng)中斷服務(wù)程序執(zhí)行結(jié)束返回主程序時,整個程序的執(zhí)行可能會被打亂。19源程序的編制202122233.5匯編程序設(shè)計實(shí)例24常采用以下幾種基本結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu),再加上廣泛使用的子程序和中斷服務(wù)子程序。

1.順序結(jié)構(gòu)

2.分支結(jié)構(gòu)程序中含有轉(zhuǎn)移指令,無條件分支,有條件分支。有條件分支又分為:單分支結(jié)構(gòu)和多分支結(jié)構(gòu)。

3.循環(huán)結(jié)構(gòu)

4.子程序

5.中斷服務(wù)子程序253.5.1順序程序例

已知X、Y、Z分別為片內(nèi)RAM30H、31H、32H單元的內(nèi)容,設(shè)X>Y,試編程完成下式的算術(shù)運(yùn)算:S=(X-Y)*Z,并將計算結(jié)果S存入片內(nèi)RAM34H(高字節(jié))、35H(低字節(jié))單元中。由于X>Y,所以X-Y>0,不需要借位;(X-Y)*Z的結(jié)果最多占用兩個字節(jié)。實(shí)現(xiàn)該要求的程序流程圖如圖所示。26程序清單如下:

ORG 0030HSTART:MOV A,30H ;(A)←X SUBB A,31H ;(A)←(A)-X MOV B,32H ;(B)←Z MUL AB MOV 34H,B ;(34H)←A*B的高字節(jié)

MOV 35H,A ;(35H)←A*B的低字節(jié)

SJMP $27例

在內(nèi)部RAM單元的30H和31H中各有一無符號數(shù),試比較其大小,大數(shù)存入40H單元,小數(shù)存入41H單元,若相等則存入42H單元。程序流程框圖如圖所示。3.5.2分支程序28程序如下:MOVA,30HCJNEA,31H,K1;比較不相等MOV42H,AAJMP WAITK1:JNC K2;若Cy=0,(30H)>(31H),轉(zhuǎn)K2MOV 41H,AMOV 40H,31HAJMP WAITK2:MOV 40H,AMOV 41H,31HWAIT:AJMP $293.5.3循環(huán)程序①置循環(huán)初值。用來設(shè)置變量、計數(shù)器數(shù)據(jù)指針的初值等,為循環(huán)作準(zhǔn)備。②循環(huán)體。指要求重復(fù)執(zhí)行的程序段,通過它完成對數(shù)據(jù)進(jìn)行實(shí)際處理的任務(wù)。③修改控制變量。一般用一個工作寄存器Rn作為對循環(huán)次數(shù)的計數(shù),每循環(huán)一次計數(shù)器減1,即修改循環(huán)控制變量。④循環(huán)控制部分??刂蒲h(huán)次數(shù),當(dāng)循環(huán)一定的次數(shù)后,滿足循環(huán)結(jié)束條件時,停止循環(huán)。30例2在內(nèi)部RAM30H開始的連續(xù)單元中,存放著20個無符號數(shù),編寫一段程序,使這20個數(shù)按照由大到小的順序依次排列。

MOV R0,#30H MOV R7,#19 ;設(shè)置外循環(huán)計數(shù)器OUTSIDE: MOV R6,00H ;設(shè)置內(nèi)循環(huán)計數(shù)器

PUSH 00H ;0組R0進(jìn)棧

MOV A,@R0 ;取內(nèi)循環(huán)的第一個數(shù)INSIDE: INC R0 ;修改內(nèi)循環(huán)間址指針

MOV B,@R0 CJNE A,B,$+3 ;比較A與@R0的大小

JNC NEXTCH ;大于等于不交換

XCH A,R0 ;小于交換NEXTCH: DJNZ R6,INSIDE ;判內(nèi)循環(huán)是否結(jié)束

POP 00H ;內(nèi)循環(huán)結(jié)束,R0出棧

MOV @R0,A ;存內(nèi)循環(huán)的最大值

INC R0 ;修改外循環(huán)指針

DJNZ R7,OUTSIDE ;判外循環(huán)是否結(jié)束

SJMP $同類例題3-4431升序排,降序排。僅介紹無符號數(shù)據(jù)升序排。冒泡法:相鄰數(shù)互換排序方法,類似水中氣泡上浮。時從前向后進(jìn)

溫馨提示

  • 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

提交評論