第3章 微機(jī)系統(tǒng)應(yīng)用程序設(shè)計(jì)_第1頁(yè)
第3章 微機(jī)系統(tǒng)應(yīng)用程序設(shè)計(jì)_第2頁(yè)
第3章 微機(jī)系統(tǒng)應(yīng)用程序設(shè)計(jì)_第3頁(yè)
第3章 微機(jī)系統(tǒng)應(yīng)用程序設(shè)計(jì)_第4頁(yè)
第3章 微機(jī)系統(tǒng)應(yīng)用程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩50頁(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)介

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

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

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

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

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

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

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

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

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

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

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

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

程序塊使用縮進(jìn)方式,函數(shù)和標(biāo)號(hào)使用空格縮進(jìn),程序段混合使用TAB和空格縮進(jìn)??s進(jìn)的目的是使程序結(jié)構(gòu)清晰,便于閱讀和理解。

2.注釋

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

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

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

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

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論