第4章.語言程序設(shè)計知識new_第1頁
第4章.語言程序設(shè)計知識new_第2頁
第4章.語言程序設(shè)計知識new_第3頁
第4章.語言程序設(shè)計知識new_第4頁
第4章.語言程序設(shè)計知識new_第5頁
已閱讀5頁,還剩59頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第四章匯編語言程序設(shè)計知識

概述1.機器語言2.匯編語言3.高級語言4.1編制程序的步驟、方法和技巧(P89.)§4.1.1編程的步驟一、分析問題二、確定算法三、畫程序流程圖四、編寫程序一、分析問題

對需要解決的問題進行分析,以求對問題由正確的理解。如:解決問題的任務(wù)是什么?工作過程?現(xiàn)有的條件,已知數(shù)據(jù),對運算的精度和速度方面的要求?設(shè)計的硬件結(jié)構(gòu)是否方便編程?二、確定算法算法是如何將實際問題轉(zhuǎn)化成程序模塊來處理。在編程以前,先要對幾種不同的算法進行分析、比較,找出最適宜的算法三、畫程序流程圖程序流程圖是使用各種圖形、符號、有向線段等來說明程序設(shè)計過程的一種直觀的表示。流程圖步驟分得越細致,編寫程序是也越方便。畫流程圖是程序結(jié)構(gòu)設(shè)計是采用的一種重要手段。一個系統(tǒng)軟件有總的流程圖(主程序框圖)和局部的流程圖。流程圖常采用的圖形和符號。開始、結(jié)束----圓角矩形工作任務(wù)----矩形判斷分支----菱形程序流向----程序連接----開始結(jié)束四、編寫程序用89C51匯編語言編寫的源程序行(一條語句)包括4個部分,也叫4個字段:〔標號:〕〔操作碼〕〔操作數(shù)〕;〔注釋〕

每個字段之間要用分隔符分隔,而每個字段內(nèi)部不能使用分隔符??梢杂米鞣指舴姆枺嚎崭瘛啊?、冒號“:”、、逗號“,”、分號“;”等。例:LOOP:MOVA,#00H;立即數(shù)00H→A1.標號標號是用戶定義的符號地址。一條指令的標號是該條指令的符號名字,標號的值是匯編這條指令時指令的地址。標號由以英文字母開始的1~8個字母或數(shù)字組成,以冒號“:”結(jié)尾。標號可以由賦值偽指令賦值,如果沒有賦值,匯編程序把存放該指令目標碼第一字節(jié)的存儲單元的地址賦給該標號,所以,標號又叫指令標號。操作碼,操作數(shù),注釋段等,以在前面學(xué)習(xí)過。流程圖例:如圖所示:P3.2和P3.3上各接有一只按鍵,要求它們分別按下時(P3.2=0或P3.3=0),分別使P1口為0或FFH。試畫出程序流程圖并編寫程序。這是“查詢”法編寫的程序問:P3.2、P3.3引腳的第2功能是什么?P3.2、P3.3引腳的第2功能分別是:外部中斷0方式和外部中斷1方式。故,也可以采用“中斷法”編寫該原程序。思考題:如圖所示,開關(guān)K1和K2未按下時,兩只發(fā)光二極管均不亮。當(dāng)按下K1時,使發(fā)光二極管LED1亮,而發(fā)光二極管LED2不亮;當(dāng)按下K2時,LED2亮而LED1不亮,如果按下K1、K2,則LED1和LED2均亮。試編寫程序?qū)崿F(xiàn)上述功能。4.1.2編程的方法和技巧(P91.)模塊化設(shè)計(按功能分:顯示、打印、輸入、發(fā)送等)實際的應(yīng)用程序一般都由一個主程序和多個子程序構(gòu)成。每一程序模塊都能完成一個明確的任務(wù)。模塊長度通常為20~100條較為合適。2.編程技巧1、盡量采用循環(huán)結(jié)構(gòu)和子程序,以節(jié)省內(nèi)存。2、盡量少用無條件轉(zhuǎn)移指令。以使程序條理更加清楚,減少錯誤。3、對于通用的子程序,考慮到其通用性,除了用于存放子程序入口參數(shù)的寄存器外,子程序中用到的其他寄存器的內(nèi)容應(yīng)壓入堆棧(返回前再彈出),即保護現(xiàn)場。4、在中斷處理程序中,除了要保護處理程序中用到的寄存器外,還要保護標志寄存器。5、用累加器傳遞入口參數(shù)或返回參數(shù)比較方便,在子程序中,一般不必把累加器內(nèi)容壓入堆棧?!?.2匯編語言源程序的編輯和匯編(P106.)§4.2.1源程序編輯§4.2.2源程序的匯編§4.2.3偽指令§4.2.1源程序編輯單片機的程序設(shè)計通常在微型計算機上,借助編輯軟件(如行編輯或屏幕編輯軟件),編寫或修改匯編語言源程序。最終把匯編得到的目標程序(機器碼)傳送到單片機內(nèi)并進行程序調(diào)試和運行。§4.2.2源程序的匯編匯編:將匯編語言源程序轉(zhuǎn)換為機器碼表示的目標程序的過程。對單片機有:

一、手工匯編二、機器匯編三、反匯編一、手工匯編通過手工方式查指令編碼表,逐個把助記符指令“翻譯”成機器碼,然后把得到的機器碼程序鍵入單片機,進行調(diào)試和運行。手工匯編的缺點:

1、偏移量的計算容易出錯

2、程序的修改會引起后面指令地址的變化,轉(zhuǎn)移指令的偏移量也要重新計算。二、機器匯編機器匯編是在計算機上使用交叉匯編程序進行源程序的匯編。匯編工作由機器自動完成,最后得到以機器碼表示的目標程序。三、反匯編將二進制機器語言程序翻譯成匯編語言程序的過程稱反匯編。匯編和反匯編的過程如圖4-10所示源程序(匯編語言)目標碼(機器語言)匯編(匯編程序)反匯編(匯編程序)圖4-10匯編和反匯編過程§4.2匯編語言程序編輯和匯編1.編輯(源程序,以.ASM擴展名存盤);2.匯編(手工或機器匯編);例:地址目標碼源程序ORG1000H1000H747FMOVA,#7FH1002H7944MOVR1,#44HEND4.2.3常用的偽指令(P108)偽指令:不是真正的指令,無對應(yīng)的機器碼,在匯編時不產(chǎn)生目標程序,只是用來對匯編過程進行某種控制。4.2.3常用的偽指令(P108)ORG(Origin)匯編起始命令功能:定位目的程序的起始地址,即匯編后生成目標程序存放的起始地址。

格式:ORG16位地址規(guī)定了START的地址是0100H,又規(guī)定了匯編后的第一條指令碼從0100H開始存放。機器碼:74H64H

END匯編語言程序結(jié)束偽指令。功能:通知匯編程序結(jié)束匯編。在END之后所有的匯編指令均不予以處理。

注:“END”指令一定要放在程序末尾!“ORG”在程序段中可多次使用.機器匯編時的格式

ORG0000H;引導(dǎo)地址AJMPMAIN;跳轉(zhuǎn)到標號為“MAIN”的程序,

;目的是避開5個中斷源所用的空間ORG0030H;程序的第1條指令從0030H單元開始存放MAIN:……;程序…………END未使用中斷源時ORG0000HAJMPMAIN;跳轉(zhuǎn)到標號為“MAIN”的程序

ORG000BH;T0的中斷入口地址

LJMPINSER;跳轉(zhuǎn)到標號為“INSER”的中斷服務(wù)程序ORG0030H;程序的第1條指令從0030H單元開始存放MAIN:……;主程序………………INSER:……;中斷服務(wù)程序……END機器匯編時的格式使用到T0中斷源時4.2.3常用的偽指令(P108)EQU(EQUate)賦值偽指令。

格式:

字符名稱

EQU項(數(shù)值或匯編符號)功能:把“項”賦給“字符名稱”。注意:字符名稱不等于標號(其后沒有冒號);其中的項,可以是數(shù),也可以是匯編符號。EQU賦值過的符號名可以用作數(shù)據(jù)、代碼地址、位地址或一個立即數(shù)??梢允?位的,也可以是16位的。4.2.3常用的偽指令(P108)DATA

數(shù)據(jù)地址賦值命令格式:

字符名稱

DATA表達式DATA命令功能與EQU類似。DATA命令與EQU的差別:4.2.3常用的偽指令(P108)DB(DefineByte)定義字節(jié)命令 格式:DB

字節(jié)常數(shù)或ASCII字符功能:通知匯編程序從當(dāng)前ROM地址開始,保留一個字或字節(jié)串的存儲單元,并存入DB后的數(shù)據(jù)。4.2.3常用的偽指令(P108)DW(Define

Word)定義字命令

格式:DW

16位數(shù)據(jù)項或項表功能:把DW后的16位數(shù)據(jù)項或項表從當(dāng)前地址連續(xù)存放。每項數(shù)值為16位二進制數(shù),高8位先放,低8位后存放。DW用于定義一個地址表。

4.2.3常用的偽指令(P108)DS定義存儲空間命令格式:DS

表達式功能:在匯編時,從指定地址開始保留DS之后表達式的值所規(guī)定的存儲單元以備后用。課堂練習(xí)P87.題354.2.3常用的偽指令(P108)BIT位地址符號指令。格式:字符名稱

BIT

位地址功能:把BIT后的位地址值賦給字符名。其中字符名不是標號,其后沒有冒號,但字符名是必需的。4.1.3匯編語言程序的基本結(jié)構(gòu)(P92.)一、順序程序二、分支程序三、循環(huán)程序4.1.3匯編語言程序的基本結(jié)構(gòu)一、順序程序順序程序是最簡單的程序結(jié)構(gòu),即順序結(jié)構(gòu)。程序按順序一條一條地執(zhí)行指令。一、順序程序?qū)0~R3清0,R4、R5置1,對P1口清0,片內(nèi)RAM中30H、40H單元清0。1).采用立即數(shù)尋址方式若采用寄存器尋址,則可大大減少占用存儲單元。2).采用寄存器尋址方式[P95.例4-3]拆字。將片內(nèi)RAM20H單元的內(nèi)容拆成兩段,每段四位。并將它們分別存入21H與22H單元中。例如,(20H)=35H,拆字后(21H)=05H,(22H)=03H.例1:變量存放在內(nèi)部RAM的20H單元中,其取值范圍:0~5,查表法求其平方值,試編寫程序。解:二、分支程序程序分支是通過條件轉(zhuǎn)移指令實現(xiàn)的,即根據(jù)條件對程序的執(zhí)行進行判斷、滿足條件則進行程序轉(zhuǎn)移,不滿足條件就順序執(zhí)行程序。分支程序又分為單分支和多分支結(jié)構(gòu)。多分支程序是首先把分支程序按序號排列,然后按序號值進行轉(zhuǎn)移。(一般用“散轉(zhuǎn)指令”)二、分支程序在MCS-51指令系統(tǒng)中,通過條件判斷實現(xiàn)單分支程序轉(zhuǎn)移的指令有:JZ、JNZ、CJNE、DJNZ等。此外還有以位狀態(tài)作為條件進行程序分支的指令,如JC、JNC、JB、JNB、JBC等。使用這些指令可以完成0、1、正、負,以及相等、不相等作為各種條件判斷依據(jù)的程序轉(zhuǎn)移。二、分支程序[P97.例4-6]128種分支轉(zhuǎn)移程序。功能:根據(jù)入口條件轉(zhuǎn)移到128個目的地址。入口:(R3)=轉(zhuǎn)移目的地址的序號00H~7FH。出口:轉(zhuǎn)移到相應(yīng)子程序入口。二、分支程序二、分支程序[P99.例4-9]:片內(nèi)RAMONE和TWO兩個單元中存有兩個無符號數(shù),將兩個數(shù)中的小者存入30H單元。三、循環(huán)程序在程序運行時,有時需要連續(xù)重復(fù)執(zhí)行某段程序,可以使用循環(huán)程序。其結(jié)構(gòu)包括四部分:1、置循環(huán)初值2、循環(huán)體(循環(huán)工作部分)3、修改控制變量4、循環(huán)控制部分其組織方式如下圖4-6所示。置初值循環(huán)體循環(huán)修改循環(huán)控制退出循環(huán)未完完(a)置初值循環(huán)體循環(huán)修改循環(huán)控制退出循環(huán)未完完(b)圖4-6循環(huán)組織方式流程圖1、置循環(huán)初值對于循環(huán)程序中所使用的工作單元,在循環(huán)開始時應(yīng)置初值。例如,工作寄存器設(shè)置計數(shù)初值,累加器A清0,以及設(shè)置地址指針、長度等。2、循環(huán)體(循環(huán)工作部分)重復(fù)執(zhí)行的程序段部分,分為循環(huán)工作部分和循環(huán)控制部分。循環(huán)控制部分每循環(huán)一次,檢查結(jié)束條件,當(dāng)滿足條件時,就停止循環(huán),往下繼續(xù)執(zhí)行其他程序3、修改控制變量在循環(huán)程序中,必須給出循環(huán)結(jié)束條件。常見的是計數(shù)循環(huán),當(dāng)循環(huán)了一定的次數(shù)后,就停止循環(huán)。在單片機中,一般用一個工作寄存器Rn作為計數(shù)器,對該計數(shù)器賦初值作為循環(huán)次數(shù)。每循環(huán)一次,計數(shù)器的值減1,即修改循環(huán)控制變量,當(dāng)計數(shù)器的置件為0時,就停止循環(huán)。4、循環(huán)控制部分根據(jù)循環(huán)結(jié)束條件,判斷是否結(jié)束循環(huán)。89C51可采用DJNZ指令來自動修改控制變量并能結(jié)束循環(huán)。XP86.習(xí)題33.閱讀下列程序,說明該程序段的功能。功能:將片內(nèi)RAM中50H~59H單元的內(nèi)容清0。軟件延時程序(P101)

當(dāng)單片機的晶振確定后,每條指令的指令周期就確定了。在指令表中(P307.附錄A)中可查出每條指令的機器周期,故根據(jù)程序執(zhí)行所用的總的機器周期數(shù),就可以較準確地計算程序執(zhí)行完所用的時間。1.采用循環(huán)程序進行軟件延時子程序DELAY:MOVR2,#data;置循環(huán)控制常數(shù)DELAY1:DJNZR2,DELAY1;當(dāng)(R2)≠0時,轉(zhuǎn)向本身

RET根據(jù)R2的不同初值,可實現(xiàn)3~513(#data=1~255)個機器周期的延時。(第1條指令為1周期指令,第2條指令為2周期指令)2.采用雙重循環(huán)的延時子程序TIME:MOVR1,#0FAH;1MCL1:MOVR0,#0FFH;1MCW1:DJNZR0,W1;2MC,內(nèi)循環(huán)255次DJNZR1,L1;2MCNOP;1MCNOP;1MCRET;2MC外循環(huán)次250計算延時時間t:N=1+(1+2X255+2)X250+1+1+2=128255個機器周期。若采用的晶振為fosc=6MHz,T=12/fosc=2微秒,則:t=NXT=128255X2=256510微秒=256.51毫秒。解:晶振頻率為12MHz,則機器周期為1μs。設(shè)R6=X。DELY:MOVR7,#200;1MC,即1μsL1:MOVR6,#X;1MC,即1μsL2:NOP;1MC,即1μsDJNZR6,L2;2MC,即2μsDJNZR7,L1;2MC,即2μsRET;2MC,即2μs內(nèi)循環(huán)例1:

編寫50ms延時子程序。設(shè)晶振頻率為12MHz。外循環(huán)下面分別計算內(nèi)循環(huán)和外循環(huán)的延時時間:1.內(nèi)循環(huá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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論