第3章 微機系統(tǒng)應用程序設計_第1頁
第3章 微機系統(tǒng)應用程序設計_第2頁
第3章 微機系統(tǒng)應用程序設計_第3頁
第3章 微機系統(tǒng)應用程序設計_第4頁
第3章 微機系統(tǒng)應用程序設計_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章微機系統(tǒng)應用程序設計微機系統(tǒng)的應用程序設計,可以采用匯編語言完成,也可以采用C語言實現(xiàn)。由于匯編語言是面向機器的語言,對單片機的硬件資源操作直接方便、概念清晰,盡管對編程人員的硬件知識要求較高,但對于學習和掌握單片機的硬件結構極為有利。所以,本章首先對匯編語言進行介紹。當系統(tǒng)的規(guī)模較大時,設計人員便趨于采用C語言進行程序設計,這是由于C語言具有良好的可讀性、可移植性和基本的硬件操作能力。所以本章還介紹了單片機高級語言C51的語法、數(shù)據結構、語句函數(shù)的分類以及簡單的C51程序設計。第3章微機系統(tǒng)應用程序設計3.1匯編語言程序設計

3.1.1匯編語言語句格式及偽指令以助記符書寫的指令系統(tǒng),就是計算機的匯編語言。每一條指令就是匯編語言的一條語句。1.匯編語言的特點匯編語言有如下特點:①助記符指令和機器指令一一對應。所以用匯編語言編寫的程序效率高,占用存儲空間小,運行速度快,而且能反映計算機的實際運行情況。因此匯編語言能編寫出最優(yōu)化的程序。②匯編語言編程比高級語言困難。因為匯編語言是面向計算機的,程序設計人員必須對計算機硬件有相當深入的了解,才能使用匯編語言編寫程序。③匯編語言能直接和存儲及接口電路打交道,也能申請中斷。因此匯編語言程序能直接管理和控制硬件設備。④匯編語言缺乏通用性,程序不易移值。各種計算機都有自己的匯編語言,不同計算機的匯編語言之間不能通用。但是掌握了一種計算機的匯編語言,卻有助于學習其它計算機的匯編語言。第3章微機系統(tǒng)應用程序設計2.匯編語言的語句格式各種匯編語言的語法規(guī)則是基本相同的,且具有相同的語句格式,現(xiàn)結合MCS-51匯編語言作具體說明。MCS-51匯編語言的語句格式表示如下:[<標號>]:<操作碼>[<操作數(shù)>];[<注釋>]即一條匯編語句是由標號、操作碼、操作數(shù)和注釋四個部分所組成。其中方括號括起來的是可選擇部分,可有可無,視需要而定。第3章微機系統(tǒng)應用程序設計3.偽指令用匯編語言編寫的程序通常需經過機器匯編變成機器碼才能被執(zhí)行。為了對源程序匯編,在源程序中應有向匯編程序發(fā)出的指示信息,告訴它應該如何完成匯編工作。這一任務是通過偽指令來實現(xiàn)的。偽指令是程序員發(fā)給匯編程序的命令,也稱匯編命令或匯編程序控制指令。只有在匯編前的源程序中才有偽指令。匯編得到目標程序后,偽指令已無存在的必要,所以偽指令沒有相應的機器代碼,在目標程序中見不到與偽指令相對應的機器碼。第3章微機系統(tǒng)應用程序設計下面介紹MCS-51匯編語言程序中常用的偽指令。(1)ORG(OriGin)匯編起始地址命令(2)END(ENDofassembly)匯編終止命令(3)EQU(EQUate)賦命令(4)DB(DefineByte)定義數(shù)據字節(jié)命令(5)DW(DefineWord)定義數(shù)據字命令(6)DS(DefineStonage)定義存儲區(qū)命令(7)位定義命令第3章微機系統(tǒng)應用程序設計3.1.2匯編語言程序設計步驟微型機應用離不開應用程序的設計,設計程序可以使用高級語言也可以使用匯編語言或機器語言。高級語言是一種面向過程(或問題)的、獨立于計算機的通用語言。用它來編程,編程的速度快而且編程者不必熟悉具體機器的硬件結構及指令系統(tǒng)等;但程序執(zhí)行的速度慢且占據存儲空間較大。從上章指令系統(tǒng)介紹可知,用匯編語言編程時,編程者可以直接操作到機器內部的寄存器及存儲單元,能把處理過程刻畫得非常具體。因而通過優(yōu)化編制出高效率的程序,既可節(jié)省存儲空間又可提高程序執(zhí)行的速度。在空間和時間上都充分發(fā)揮了微型機的潛力。因此,在實時控制的場合下通常采用匯編語言進行程序設計。微型機的監(jiān)控程序多采用匯編語言編寫。對于單片機應用系統(tǒng),通常都用匯編語言編寫程序。用匯編語言編制程序的過程,稱為匯編語言程序設計。第3章微機系統(tǒng)應用程序設計1.建立數(shù)學模型2.選擇適當?shù)乃惴?.程序結構的設計4.編制匯編語言程序5.匯編語言程序的調試第3章微機系統(tǒng)應用程序設計3.1.3程序設計結構用匯編語言進行程序設計的過程和用高級語言進行程序設計相類似。對于比較復雜的問題,首先要掌握解決它的方法和步驟——算法,有了合適的算法常常可以起到事半功倍的效果;其次,就是用操作框、帶箭頭流程線、框內外必要的文字說明所組成的流程圖來描述算法;最后是根據流程圖用程序設計語言來編制程序。程序的基本算法結構有3種:順序結構、分支(選擇)結構和循環(huán)結構。順序結構如圖3-1所示,虛框內A框和B框分別代表不同的操作,而且是A、B順序執(zhí)行。第3章微機系統(tǒng)應用程序設計第3章微機系統(tǒng)應用程序設計分支結構如圖3-2所示,它又稱為選擇結構。該結構中包含一個判斷框,根據給定條件P是否成立而選擇執(zhí)行A框操作或B框操作。條件P可以是累加器是否為零、兩數(shù)是否相等,以及測試狀態(tài)標志或位狀態(tài)等等。這里需指出的是:無論條件P是否成立,只能執(zhí)行A框或者B框,不可能既執(zhí)行A框又執(zhí)行B框。無論走哪一條路徑執(zhí)行,都經過b點脫離本分支結構。A或B兩個框中可以有一個是空的,即不進行任何操作。第3章微機系統(tǒng)應用程序設計第3章微機系統(tǒng)應用程序設計下面將介紹基本結構匯編語言程序設計的一些實例。1.順序結構程序設計順序結構是最簡單的一種基本結構。如果某一個需要解決的問題可以分解成若干個簡單的操作步驟,并且可以由這些操作按一定的順序構成一種解決問題的算法,則可用簡單的順序結構進行程序設計。例1:單字節(jié)壓縮BCD碼轉換成二進制碼子程序。解:設兩個BCD碼d1d0表示的兩位十進制數(shù)壓縮存于R2,其中R2高4位存十位,低4位存?zhèn)€位,要把其轉換成純二進制碼的算法為:(d1d0)BCD=d1×10+d0。實現(xiàn)該算法所編制的參考子程序如下:第3章微機系統(tǒng)應用程序設計入口:待轉換的BCD碼存于R2。出口:轉換結果(8位無符號二進制整數(shù))仍存R2。BCD2B:ORG 2000H MOV A,R2 ;A(A)←(d1d0)BCD ANL A,#0F0H ;取高位BCD碼d1 SWAP A ;(A)=0d1H MOV B,#0AH ;(B)←10 MUL AB ;d1×10 MOV R3,A ;R3暫存乘積結構

MOV A,R2 ;A(A)←(d1d0)BCD ANL A,#0FH ;取低位BCD碼d0 ADD A,R3 ;d1×10+d0 MOV R2,A ;保存轉換后果

RET ;子程序返回第3章微機系統(tǒng)應用程序設計2.分支(選擇)結構程序設計順序結構程序設計是最基本的程序設計技術。在實際程序設計中,有很多情況往往還需要程序按照給定的條件進行分支。這時就必須對某一個變量所處的狀態(tài)進行判斷,根據判斷結果來決定程序的流向。這就是分支(選擇)結構程序設計。在編寫分支程序時,關鍵是如何判斷分支的條件。在MCS—51單片機指令系統(tǒng)中,有JZ(JNZ)、CJNE、JC(JNC)及JB(JNB)等豐富的控制轉移指令,它們是分支結構程序設計的基本,可以完成各種各樣的條件判斷、分支。第3章微機系統(tǒng)應用程序設計例2:設變量X存放在VAR單元中,函數(shù)Y存在FUNC單元。編寫按照下式要求給Y賦值的程序。

1 X>0 Y= 0 X=0 -1 X<0解:由于X為有符號數(shù),因此可以根據它的符號位來決定其正負。判別符號位是0還是1,可利用JB或JNB指令;而判別X是否為0,則可直接用累加器判零指令JZ。完成本例題任務的程序流程框圖是由順序結構加分支結構組成的,并且在分支結構中又嵌套了另一個分支結構,從而形成了三分支而歸一的流程,如圖3-4所示。第3章微機系統(tǒng)應用程序設計第3章微機系統(tǒng)應用程序設計程序清單:BR1: ORG 2000H MOV A,VAR ;取出X送A JZ COMP ;若X=0則轉移到COMP JNB ACC.7,POSI ;若X>0則轉移到POSI MOV A,#0FFH ;若X<0則A=-1 SJMP COMP ;轉分支結構出口POSI: MOV A,#01H ;X>0時A=1COMP: MOV FUNC,A ;存函數(shù)Y值HERE: AJMP HERE ;結束程序第3章微機系統(tǒng)應用程序設計3.循環(huán)結構程序設計在解決實際問題時,往往會遇到同樣的一組需要重復多次的情況,這時應采用循環(huán)結構,以簡化程序、縮短程序的長度及節(jié)省存儲空間。例如,要做1到100的加法,沒有必要寫100條加法指令,而只需寫一條加法指令,使其執(zhí)行100次,每次執(zhí)行時操作數(shù)亦作相應的變化,同樣能完成原來規(guī)定的操作。循環(huán)結構在圖3-3中表示有兩種形式,可依據題目的具體要求來選用當型或直到型循環(huán)結構。循環(huán)結構程序也有單重循環(huán)和多重循環(huán)的形式。循環(huán)程序一般由3部分組成:第3章微機系統(tǒng)應用程序設計(1)置循環(huán)初值:即設置循環(huán)開始時的狀態(tài)。如使工作單元清零,置循環(huán)次數(shù)等等。(2)循環(huán)體:即要求重復執(zhí)行的部分。這部分程序應該特別注意,應盡量簡化指令,因為它要重復執(zhí)行許多次。(3)循環(huán)控制部分:它包括循環(huán)參數(shù)修改和依據循環(huán)結束條件判斷循環(huán)是否結束兩部分。如循環(huán)次數(shù)減1,判循環(huán)次數(shù)是否為0,若為0則停止循環(huán)等等。當然,判斷循環(huán)結束的條件,可以是設置循環(huán)次數(shù)計數(shù)器,也可以是其它條件,如依據某位狀態(tài)結束循環(huán)等。例3:從BLOCK單元開始有一個無符號數(shù)數(shù)據塊,其長度存于LEN單元,試求出數(shù)據塊中最大的數(shù)并存入MAX單元。第3章微機系統(tǒng)應用程序設計第3章微機系統(tǒng)應用程序設計程序清單:LOOP: ORG 2000H MOV R0,#BLOCK ;數(shù)據塊首址R0 MOV R1,LEN ;數(shù)據塊長度送R1 MOV MAX,#00H ;存最大數(shù)單元清零LOOP1:MOV A,MAX ;(A)←(MAX)

CLR C ;清C SUBB A,@R0 ;(MAX)—((R0))

JNC NEXT ;若(MAX)>((R0)),則轉移

MOV MAX,@R0 ;若(MAX)<((R0)),則(MAX)←((R0))NEXT: INC R0 ;修改地址指針

DJNZ R1,LOOP1 ;若(R1)≠0則循環(huán)搜索

RET第3章微機系統(tǒng)應用程序設計例4:設計100ms延時程序。解:計算機執(zhí)行一條指令需要一定的時間,由一些指令組成一段程序,并反復循環(huán)執(zhí)行,利用計算機執(zhí)行程序所用的時間來實現(xiàn)延時,這種程序稱為延時程序。如當系統(tǒng)使用12MHz晶振時,一個機器周期為1,執(zhí)行一條雙字節(jié)雙周期DJNZ指令的時間為2,因此,執(zhí)行該指令50000次,就可以達到延時100ms的目的。對于50000次循環(huán)可采用外循環(huán)、內循環(huán)嵌套的多重循環(huán)結構。本例題的程序流程如圖3-6所示。程序清單:START:ORG 1000H MOV R6,#0C8H ;外循環(huán)200次LOOP1:MOV R7,#0F8H ;內循環(huán)248次

NOP ;時間補償LOOP1:DJNZ R7,LOOP2 ;延時2×248=496 DJNZ R6,LOOP1 ;延時500×200=100ms RET第3章微機系統(tǒng)應用程序設計以上程序執(zhí)行MOVRn,#data指令的時間為1,DJNZ指令2,NOP指令1,所以,內循環(huán)延遲時間:1+1+2×248=498,外循環(huán)延遲時間:1+(內環(huán)延時+2)×200=100.001ms。對于需要更長時間的延時,可采用更多重的嵌套循環(huán)來實現(xiàn),這種軟件延時方法不需要增加硬件,且變化靈活,故常被采用。它的缺點是延時過程中CPU被占用,而且系統(tǒng)中的中斷服務會影響定時的精度,所以不宜設計太長的延時程序。以上分別論述了3種基本結構程序設計的方法。在解決復雜的實際問題時,往往存在著相互的嵌套,無論程序如何復雜,都能分解成3種基本結構的組合,所以只要掌握了3種基本結構的設計方法,任何復雜的程序都可以順利編制成功。第3章微機系統(tǒng)應用程序設計4.子程序結構程序設計在一個程序中,將反復出現(xiàn)的程序段編制成一個個獨立的程序段,存放在內存中,這些完成某一特定任務可被重復調用的獨立程序段被稱為子程序。在前面所舉的例子中,已有一些程序段是以帶有RET指令的子程序形式出現(xiàn)的。在匯編語言編程時,恰當?shù)厥褂米映绦颍墒拐麄€程序的結構清楚,閱讀和理解方便,而且還可以減少源程序和目標程序的長度,不必多次重復書寫和翻譯同樣的指令。在匯編語言源程序中使用子程序,需要強調注意兩個問題,即子程序中參數(shù)傳遞和現(xiàn)場保護的問題。在調用高級語言子程序時參數(shù)的傳遞是很方便的,通過調用語句的實參數(shù)以及子程序中的虛參數(shù)之間的對應,很容易完成參數(shù)的往返傳遞。但在調用匯編語言子程序時則會遇到一個參數(shù)如何傳遞的問題。如用指令(ACALL、LCALL)調用匯編語言子程序時并不附帶任何參數(shù),參數(shù)的互相傳遞要靠編程者自己安排。其實質就是如何安排數(shù)據的存放以及工作單元的選擇問題。參數(shù)傳遞的方法很多,同一個問題可以采用不同的方法傳遞參數(shù),相應的程序也會略有差別。一般在匯編語言中采用的參數(shù)傳遞方法有以下3種。第3章微機系統(tǒng)應用程序設計(1)用累加器或工作寄存器來傳遞參數(shù)。即在調用子程序之前把數(shù)據送入寄存器R0~R7或者累加器A。調用返回運算結果仍由寄存器或累加器送回。這種方法的優(yōu)點是編程簡單,也易讀懂;缺點是工作寄存器容量有限,不能傳遞太多的參數(shù)。(2)用指針寄存器傳遞參數(shù)。由于數(shù)據一般都存放在存儲器中,故可用指針來指示數(shù)據的位置,這樣可大大節(jié)省傳遞數(shù)據的工作量,并可實現(xiàn)可變長度傳遞。若參數(shù)存放在內部RAM中,通常可用R0或R1作指針寄存器;若參數(shù)存放在外部RAM或程序存儲器中,可用DPTR作指針。當進行可變長度傳遞時,可用一個寄存器來指出數(shù)據長度,也可使用結束標記指出其長度。第3章微機系統(tǒng)應用程序設計(3)用堆棧來傳遞參數(shù)。在調用子程序前,主程序可用PUSH指令把參數(shù)壓入堆棧中,進入子程序后,再將壓入堆棧的參數(shù)彈出到指定的工作寄存或者其它內存單元。子程序運行結束前,也可把結果送入堆棧中。子程序返回主程序后,再由主程序用POP指令得到結果參數(shù)。但要注意,調用子程序時,斷點處的地址也要壓入堆棧,占用兩個單元,故在彈出參數(shù)時,注意不要把斷點地址送出去。另外在返回主程序時,要把堆棧指針向斷點地址,以便能正確地返回。在進入匯編語言子程序,特別是進入中斷服務子程序時,還應注意的另一個問題是現(xiàn)場保護問題,即對于那些不需要進行傳遞的參數(shù),包括內存單元內容、工作寄存器的內容以及各標志的狀態(tài)等,都不應因調用子程序而改變。這就需要將要保護的參數(shù),在進入子程序時壓入堆棧,即保護起來,而空出這些數(shù)據所占用的工作單元,供子程序使用。在返回調用程序之前,則將壓入堆棧的數(shù)據彈出到原有的工作單元,恢復其原來的狀態(tài),使調用程序可以繼續(xù)往下執(zhí)行。這種現(xiàn)場保護的措施在中斷時尤為必要,更加不能忽視。第3章微機系統(tǒng)應用程序設計由于堆棧操作是“先入后出”,因此,先壓入堆棧的參數(shù)應后彈出,才能保證恢復原來的狀態(tài)。例如:SUBROU: PUSH A PUSH PSW PUSH DPL PUSH DPH … POP DPH POP DPL POP PSW POP A第3章微機系統(tǒng)應用程序設計3.1.4匯編語言開發(fā)環(huán)境及匯編過程1.匯編語言開發(fā)環(huán)境單片機應用系統(tǒng)不具備自開發(fā)功能。匯編語言程序的開發(fā)必須借助一定的開發(fā)工具,因此,匯編語言程序設計、調試過程及難易程序與開發(fā)環(huán)境密切相關。(1)滿足最低要求的匯編語言程序開發(fā)環(huán)境在滿足匯編語言程序開發(fā)最低要求時,開發(fā)裝置的配置應具有以下基本功能:①硬件系統(tǒng)能實現(xiàn)程序指令及相關數(shù)據輸入(如目的程序指令碼、數(shù)據表格、常數(shù)等)。實現(xiàn)程序調試的單步、連續(xù)、設斷點運行。能修改程序指令及查詢程序運行狀態(tài)。②有仿真頭,實現(xiàn)用戶應用系統(tǒng)的仿真調試及用戶環(huán)境運行。③具有EPROM的程序固化功能。④具有反匯編及匯編程序文本打印功能。⑤能對輸入的匯編語言程序指令實現(xiàn)保存、轉儲。這樣,就可將已調好的程序段,或鍵入而未調試完的程序指令保存起來,不需要再次鍵入。⑥與以上功能相配合的操作軟件。第3章微機系統(tǒng)應用程序設計(2)較完善的匯編語言程序開發(fā)環(huán)境目前,一個較完善的匯編語言程序開發(fā)環(huán)境除以上基本要求外,應該是:①有匯編語言編譯環(huán)境。用匯編語言編輯應用程序,能顯示編輯錯誤,并能自動生成目的程序指令碼。②具有通用系統(tǒng)微機的外設,如屏幕編輯、磁盤存儲、文本打印。③有豐富的子程序庫及功能很強的操作軟件。要構成這樣的開發(fā)環(huán)境,除了一些專門研制的開發(fā)系統(tǒng)外,大多采取在通用系統(tǒng)微機上配備交叉匯編,組合軟件構成匯編程序的編譯環(huán)境,然后半自動生成的目的程序通過通信接口送到開發(fā)裝置上去進行調試運行。系統(tǒng)機所有的外設資源可以滿足程序的磁盤存儲、文本打印等。第3章微機系統(tǒng)應用程序設計(3)模擬的開發(fā)手段最理想的開發(fā)是具有通用系統(tǒng)微機配置水平的專用開發(fā)系統(tǒng)。這些系統(tǒng)一般都是單片機生產廠家推出的開發(fā)系統(tǒng),它具有最完善的匯編語言程序開發(fā)環(huán)境及軟件包,但售價昂貴,一般用戶無法配置。用戶可按下述方法構成一個較為理想的開發(fā)環(huán)境。①在通用系統(tǒng)微機上實現(xiàn)應用程序的模擬開發(fā)在通用系統(tǒng)微機上利用模擬調試軟件實現(xiàn)單片機結構功能模擬、指令模擬、實現(xiàn)程序的模擬運行調試。這樣,在通用系統(tǒng)微機中可以完成程序編制、糾錯、運行調試的一個完整過程。在微機中配置有方便的EPROM讀/寫裝置時可以完成一個應用程序完整的開發(fā)過程。目前國內已推出在微機上使用的模擬開發(fā)軟件。這種開發(fā)環(huán)境在已有通用微機配置的用戶單位,只要配置模擬開發(fā)軟件即可。目前廣泛使用的開發(fā)軟件μVision3IDE是Keilsoftware公司的產品,它集項目管理、編譯工具、代碼編寫工具、代碼調試以及完全仿真于一體,適合個人開發(fā)或人數(shù)少、對開發(fā)過程的管理還不成熟的開發(fā)團體。第3章微機系統(tǒng)應用程序設計②用戶應用系統(tǒng)運行調試模擬開發(fā)環(huán)境不是實時仿真,不能完全模擬用戶的應用系統(tǒng)環(huán)境。一般還需要少量的應用系統(tǒng)運行調試工作。因為在模擬調試時已完成了主要的調試工作。將經過模擬調試好的應用程序固化到EPROM芯片上,然后放在應用系統(tǒng)中試運行,如果不能執(zhí)行,則返回修改,直到成功。這種調試方法無法了解應用系統(tǒng)的運行狀態(tài),修改程序帶有一定的盲目性。但是不需要硬件開發(fā)裝置,成本最低。一般的方法是除了在通用機上配置模擬軟件外,還配備有滿足實時仿真要求的開發(fā)模板或開發(fā)裝置,它與通用機可以實現(xiàn)通信。通用機將模擬調試過的應用程序輸入開發(fā)裝置,開發(fā)裝置通過仿真頭與應用系統(tǒng)相連。這樣,應用程序可以在應用系統(tǒng)的真實環(huán)境下運行,以檢查應用程序,彌補模擬調試不足。第3章微機系統(tǒng)應用程序設計2.匯編語言源程序的匯編。匯編語言源程序必須轉換為機器碼表示的目標程序,計算機才能執(zhí)行。把這種轉換過程稱這為匯編。對單片機來說,有手工匯編和機器匯編兩種匯編方法。(1)手工匯編所謂手工匯編,即把程序用助記符指令寫出后,再以手工方式查指令編碼表,逐個把助記符指令“翻譯”成機器碼,然后再把機器碼的程序鍵入單片機,進行調試和運行。由于手工匯編方法麻煩、工作量大、還容易出錯,這種方法現(xiàn)在幾乎不再應用。(2)機器匯編所謂機器匯編,就是在計算機上通過匯編程序進行源程序的匯編。匯編工作由機器自動完成,直到最后得到機器碼的目標程序。在微型機上使用匯編語言都是采用機器匯編。然而在單片機上,由于軟硬件資源的限制無法直接進行機器匯編。為此,只好借助于微型計算機,以交叉匯編的方法實現(xiàn)。使用一種計算機的匯編程序去匯編另一種計算機的匯編語言源程序,即為另一種計算機產生目標程序,這種匯編方式稱之為交叉匯編。單片機的源程序通常就是通過這種交叉匯編方法而生成目標程序的。鑒于現(xiàn)在PC機的使用非常廣泛,所以通常這種交叉匯編都是在PC機上進行的。匯編完成后,再由PC機把生成的目標程序通過串行傳送加載到單片機上。交叉匯編的整個過程可用圖3-7來說明。第3章微機系統(tǒng)應用程序設計第3章微機系統(tǒng)應用程序設計3.1.5匯編語言設計規(guī)范

軟件設計更多地是一種工程,而不是一種個人藝術。如果不統(tǒng)一編程規(guī)范,最終寫出的程序,其可讀性將較差,這不僅給代碼的理解帶來障礙,增加維護階段的工作量,同時不規(guī)范的代碼隱含錯誤的可能性也比較大。分析表明,編碼階段產生的錯誤當中,語法錯誤大概占20%左右,而由于未嚴格檢查軟件邏輯導致的錯誤、函數(shù)(模塊)之間接口錯誤及由于代碼可理解度低導致優(yōu)化維護階段對代碼的錯誤修改引起的錯誤則占了一半以上??梢?,提高軟件質量必須降低編碼階段的錯誤率。為了有效降低編碼階段的錯誤,需要制定詳細的軟件編程規(guī)范。第3章微機系統(tǒng)應用程序設計1.排版

程序塊使用縮進方式,函數(shù)和標號使用空格縮進,程序段混合使用TAB和空格縮進??s進的目的是使程序結構清晰,便于閱讀和理解。

2.注釋

注釋的原則是有助于對程序的閱讀理解,注釋不宜太多也不能太少,太少不利于代碼理解,太多則會對閱讀產生干擾,因此只在必要的地方才加注釋,而且注釋要準確、易懂、盡可能簡潔。注釋量一般控制在30%到50%之間。程序在必要的地方必須有注釋,注釋要準確、易懂、簡潔。

3.命名第3章微機系統(tǒng)應用程序設計4.可維護性5.程序正確性、效率6.接口7.代碼可測性8.代碼編譯

第3章微機系統(tǒng)應用程序設計3.1.6程序設計舉例1.代碼轉換程序設計下面的例子完成十六進制數(shù)與ASCII碼之間的相互轉換,BCD碼與ASCII碼之間轉換的基本程序設計方法與之類似。例5:十六進制數(shù)到ASCII碼的轉換子程序設計。例6:ASCII碼到十六進制數(shù)的轉換子程序設計。2.運算子程序設計例7:雙字節(jié)無符號數(shù)乘法子程序設計。例8:雙字節(jié)無符號數(shù)除法子程序設計。3.查表程序設計例9:設有一巡檢報警裝置,需要對16路值進行比較,當每一路輸入值超過該路的報警值時,實現(xiàn)報警。要求編制一個查表子程序,依據路數(shù)xi,查表得yi的報警值。第3章微機系統(tǒng)應用程序設計4.散轉(多分支)程序設計例10:按R2的內容轉向4個分支處理程序。4個分支處理程序總長度小于256個字節(jié)。解:入口:(R2)=入口條件(0,1,2,3)。例11:設計可多達128路分支出口的轉移程序。第3章微機系統(tǒng)應用程序設計3.2C語言程序設計

單片機應用系統(tǒng)的程序設計,可以采用匯編語言完成,也可以采用C語言實現(xiàn)。匯編語言對單片機內部資源的操作直接、簡潔、代碼緊湊。但是當系統(tǒng)的規(guī)模較大時,設計人員更趨于采用C語言進行程序設計。這是由于C語言具有良好的可讀性、可移植性和基本的硬件操作能力。3.2.1C51語言概述1.C51程序開發(fā)過程(1)采用C51的優(yōu)點采用C51進行單片機應用程序設計,編譯器能自動完成量的存儲單元的分配,編程者可以專注于應用程序的邏輯思想;對常用功能模塊和算法編制相應的函數(shù),可以方便地進行算法和應用程序的移植。因此,用C51進行程序設計可以大大提高實際工程的開發(fā)效率。目前,C51的代碼長度做到了匯編程序水平的1.2~1.5倍。當代碼長度超過4KB以上時,C51比匯編語言更具有明顯的優(yōu)勢。我們還可以借助仿真器,對應用程序的關鍵代碼進行優(yōu)化,以減少代碼長度,提高運行速度。由于單片機生產工藝的改善,單片機的運行速度和內部存儲器容量有了較大的提高,這些都為C51語言的使用創(chuàng)造了有利的條件。第3章微機系統(tǒng)應用程序設計(2)C51程序開發(fā)過程首先要編寫C51源程序,可以采用μVison集成開發(fā)環(huán)境的源程序編輯功能完成(為了避免μVison編輯器的兼容性問題,可以采用其他文本編輯軟件,如UltraEdit完成源程序的編輯);然后建立工程文件,加入C51源程序;這時就可以利用μVison集成的編譯器和連接器生成目標文件(﹒EXE);進而進行軟件或硬件仿真調試;最后利用編程器將調試無誤的代碼寫到單片機的程序存儲器中。2.C51程序結構C51程序由一個或多個函數(shù)構成,其中至少應包含一個主函數(shù)main。程序從主函數(shù)開始執(zhí)行,調用其他函數(shù)后又返回主函數(shù),被調用函數(shù)如果位于主調函數(shù)前面,可以直接調用,否則應先說明調用。被調用函數(shù)可以是用戶自編的函數(shù),或是C51編譯提供的庫函數(shù)。第3章微機系統(tǒng)應用程序設計3.2.2C51關鍵字和標識符關鍵字是一類具有固定名稱和特定含義的特殊標識符,有時又稱為保留字。在編寫C語言源程序時一般不允許將關鍵字另作它用,換句話說,就是對于標識符的命名不要與關鍵字相同。與其他計算機語言相比,C語言的關鍵字是比較少的,ANSIC標準一共規(guī)定了32個關鍵字,表3-2按用途列出了ANSIC標準的關鍵字。第3章微機系統(tǒng)應用程序設計3.2.3C51語言的數(shù)據類型1.C51的數(shù)據類型編寫程序的目的是對數(shù)據進行操作,并得到所期望的結果。數(shù)據是操作的對象,實際問題中存在著不同的數(shù)據類型。數(shù)據類型決定其取值范圍、占用存儲器的大小及可參與哪種運算。程序中使用到的數(shù)據要存放在存儲單元中,在匯編語言中用DB或DW偽指令對存入數(shù)據的存儲單進行定義;在C51語言中,編譯系統(tǒng)要根據定義的數(shù)據類型來預留存儲單元,這就是定義數(shù)據類型的意義第3章微機系統(tǒng)應用程序設計2.C51數(shù)據的存儲器類型C51是面向8051單片機的程序語言,應用程序中使用的任何數(shù)據(變量和常量)必須以一定的存儲器類型定位于單片機的相應的存儲區(qū)域中。3.80C51硬件結構的C51定義C51是對標準C語言(ANSIC)進行了擴展,從而具有對80C51單片機硬件結構的支持與操作能力。第3章微機系統(tǒng)應用程序設計3.2.4常量、變量和指針1.常量和變量C51語言的數(shù)據可以分為常量和變量,常量的值在程序執(zhí)行過程中不能發(fā)生變化,變量值在程序執(zhí)行過程中可以改變。(1)常量常量是在程序執(zhí)行過程中不能改變的值。按照數(shù)據類型,常量可以分為整型常量、字符型常量等。使用預定義對常量進行定義,使用一個標識符代替一個常量,如例3-6。例3-6:常量定義。#defineCONST10/*在以后的程序中CONST可以使用為常量,數(shù)據為10*/說明:為了區(qū)別變量,常量一般使用大寫,而且常量一旦預定義之后就不能再修改。(2)變量變量是在程序執(zhí)行過程中可以發(fā)生改變的值,變量有3個相關參數(shù),即變量名、變量值和變量地址。第3章微機系統(tǒng)應用程序設計2.指針指針為變量的訪問提供了一種特殊的方式。如果有一個變量a,則可以利用&a表示變量a的地址。這時可以執(zhí)行語句:p=&a;該語句把a的地址賦給了指針變量p,這時可以說“p指向了變量a”。變量的指針就是該變量的地址。為了獲得指針所指向對象的內容,可以利用指針運算符“*”來實現(xiàn),如:*p表示變量a的內容。應該注意的是,指針變量中只能存放指針型數(shù)據(即地址),不要將一個非指針型的數(shù)據賦給個指針變量。第3章微機系統(tǒng)應用程序設計(2)基本存儲量的指針基于存儲器的指針在定義時就指定了所指向對象的存儲類型。此類可以高效訪問對象,類型由C51源代碼中存儲器類型決定,且在編譯時確定。由于不必為指針選擇存儲器,指針的長度可以為1個字節(jié)(idata*,data*,pdata*)或2個字節(jié)(eode*,xdata*)。第3章微機系統(tǒng)應用程序設計3.2.5C51的基本運算1.C51的算術和賦值運算算術運算和賦值運算是C51語言的基本運算操作之一,下面詳細介紹算術和賦值運算。(1)算術運算符和算術表達式(2)賦值運算符和賦值表達式賦值運算符包括普通賦值運算符和復合賦值運算符兩種,普通的賦值運算符使用“=”,復合賦值運算符是在普通賦值運算符之前加上其他運算符所構成的賦值符。使用賦值運算符連接的變量和表達式構成賦值表達式.2.邏輯運算C51語言有3種邏輯運算符。①邏輯與:&&。②邏輯或:‖。③邏輯非:!。使用邏輯運算符將表達式或變量連接起來的表達式稱為邏輯表達式,邏輯運算內部運算次序是先邏輯非后邏輯與和邏輯或,相同等級時從左到右,邏輯表達式的值為“真”或“假”,在C51系統(tǒng)中使用“0”代表“假”,使用“非0”代表邏輯“真”,但是邏輯運算表達式結果只能使用“1”來表示“真”.第3章微機系統(tǒng)應用程序設計3.關系運算C51語言有6種關系運算,如下所示。①小于:<。②大于:>。③小于等于:≤。④大于等于:≥。⑤如果等于:==。⑥如果不等于:!=。使用關系運算符連接的表達式或變量稱為關系表達式,關系運算符中前兩種優(yōu)先級別高于后兩種,同等優(yōu)先級下遵守從左到右的順序,關系運算式的運算結果是邏輯真“1”或者是邏輯假“0”.第3章微機系統(tǒng)應用程序設計4.位操作MCS-51系列單片機有位尋址空間,支持位變量操作,恰當?shù)奈徊僮鲿蟠筇岣邌纹瑱C程序的運行速度,還能極大地方便用戶編程,位操作包括位邏輯運算和移位運算兩種類型。(1)位邏輯運算位邏輯運算包括位與、位或、位異或位取反。①位與:關鍵字“&”,如果兩位都為“1”,則結果為“1”,否則為“0”。②位或:關鍵字“∣”,如果兩位其中有一個為“1”,則結果為“1”,否則為“0”。③位異或:關鍵字“^”,如果兩位相等則為“1”,否則為“0”。④位取反:關鍵字“~”,如果該位為“1”,則取反后為“0”,如果該位為“0”,則該位取反后為“1”。第3章微機系統(tǒng)應用程序設計5.自增減運算、復合運算、逗號運算6.運算符的優(yōu)先級第3章微機系統(tǒng)應用程序設計3.2.6函數(shù)與普通的C語言程序類似,C51程序是由若干模塊化的函數(shù)構成。函數(shù)是C51程序的基本模塊,常說的子程序就是由函數(shù)來實現(xiàn)的。用戶可以根據需要定義

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論