匯編語(yǔ)言程序設(shè)計(jì)教材_第1頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)教材_第2頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)教材_第3頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)教材_第4頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)教材_第5頁(yè)
已閱讀5頁(yè),還剩32頁(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)介

項(xiàng)目4匯編語(yǔ)言程序設(shè)計(jì) 什么是程序設(shè)計(jì)?程序設(shè)計(jì)=結(jié)構(gòu)+算法。 程序設(shè)計(jì)就像蓋房子,數(shù)據(jù)結(jié)構(gòu)就像磚、瓦,而算法就是設(shè)計(jì)圖紙。你若想蓋房子首先必須有原料(數(shù)據(jù)結(jié)構(gòu)),但是這些原料不能自動(dòng)地蓋起了你想要的房子;你必須按照設(shè)計(jì)圖紙(算法)上的說(shuō)明一磚一瓦地去砌。這樣你才能擁有你想要的房子。程序設(shè)計(jì)也一樣,程序設(shè)計(jì)時(shí)你得按照程序規(guī)定的功能去編寫(xiě),而程序的功能是實(shí)現(xiàn)就是算法的具體體現(xiàn)。所以通俗地說(shuō):你必須按照特定的規(guī)則,把特定的功能語(yǔ)句和基本結(jié)構(gòu)按照特定的順序排列起來(lái),形成一個(gè)有特定功能的程序,這就是:程序設(shè)計(jì)=結(jié)構(gòu)+算法。

一般說(shuō)來(lái),計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言種類很多,不僅有機(jī)器語(yǔ)言和匯編語(yǔ)言,還有很多高級(jí)語(yǔ)言。對(duì)單片機(jī)而言,通常使用匯編語(yǔ)言或C語(yǔ)言進(jìn)行程序設(shè)計(jì),程序較大時(shí)一般采用C語(yǔ)言編寫(xiě),但用匯編語(yǔ)言編寫(xiě)的程序執(zhí)行的效率較高。程序設(shè)計(jì)完成后,然后利用計(jì)算機(jī)或人工方法將匯編語(yǔ)言或C語(yǔ)言程序轉(zhuǎn)化為單片機(jī)可以執(zhí)行的機(jī)器語(yǔ)言。轉(zhuǎn)換前的匯編語(yǔ)言或C語(yǔ)言程序被稱為源程序,轉(zhuǎn)換后的機(jī)器語(yǔ)言程序被稱為目標(biāo)程序,轉(zhuǎn)換過(guò)程也叫匯編過(guò)程,通過(guò)計(jì)算機(jī)或人工轉(zhuǎn)換的方法又被稱為計(jì)算機(jī)匯編或手工匯編。計(jì)算機(jī)匯編要使用專門(mén)的軟件,叫匯編軟件。項(xiàng)目4匯編語(yǔ)言程序設(shè)計(jì)4.1源程序的編制4.1.1程序設(shè)計(jì)步驟在對(duì)單片機(jī)系統(tǒng)進(jìn)行程序設(shè)計(jì)時(shí),必須考慮硬件資源的配置,當(dāng)硬件系統(tǒng)設(shè)計(jì)完成后,可以按照以下步驟進(jìn)行程序設(shè)計(jì)。1.預(yù)完成任務(wù)的分析2.進(jìn)行算法的優(yōu)化3.繪制程序流程圖4.分配資源5.編寫(xiě)源程序6.程序優(yōu)化7.編譯,調(diào)試,修改和最后確定源程序項(xiàng)目4匯編語(yǔ)言程序設(shè)計(jì) 用圖形符號(hào)將總體設(shè)計(jì)思路及程序流向繪制在平面圖上。從而使程序的結(jié)構(gòu)關(guān)系直觀明了,便于檢查和修改,它直觀清晰的體現(xiàn)了程序的設(shè)計(jì)思路,是程序設(shè)計(jì)的依據(jù)。 繪制流程圖時(shí),首先畫(huà)出簡(jiǎn)單的功能流程圖粗框圖,再對(duì)功能流程圖進(jìn)行擴(kuò)充和具體化,即對(duì)存儲(chǔ)器標(biāo)志位等單元做具體的分配和說(shuō)明,把功能圖上的每一個(gè)粗框圖轉(zhuǎn)化為具體的存儲(chǔ)器或地址單元,從而繪制出詳細(xì)的程序流程圖。流線程序執(zhí)行順序流向線表示處理功能端點(diǎn)符號(hào)程序的開(kāi)始和結(jié)束符號(hào)表示判斷功能判斷符號(hào)處理符號(hào)連接符號(hào)用來(lái)實(shí)現(xiàn)流程圖之間的連接程序流程圖的繪制項(xiàng)目4匯編語(yǔ)言程序設(shè)計(jì)4.1.2匯編語(yǔ)言源程序的格式 匯編語(yǔ)言源程序是由若干語(yǔ)句組成的,每一語(yǔ)句可由4個(gè)部分組成:標(biāo)號(hào)、操作碼、操作數(shù)及注釋。每一部分間以不同的分隔符分隔,語(yǔ)句格式如下:

[標(biāo)號(hào)]:操作碼[目的操作數(shù)][源操作數(shù)];[注釋]

其中[]項(xiàng)為可選項(xiàng),視具體的指令選用. 標(biāo)號(hào)是表示該語(yǔ)句所在地址的標(biāo)志符號(hào),使用標(biāo)號(hào)可方便程序中的其他語(yǔ)句訪問(wèn)該語(yǔ)句。標(biāo)號(hào)由字母打頭的1-8個(gè)字母數(shù)字串組成,但指令保留符、寄存器名、位址記憶符、偽指令符等都不能作標(biāo)號(hào)使用。操作碼表示操作的性質(zhì),它是匯編指令中唯一不能缺省的部分。操作數(shù)表示操作的對(duì)象,在一條語(yǔ)句中,操作數(shù)可能是空白或以逗號(hào)分開(kāi)的幾個(gè)。注釋是對(duì)語(yǔ)句或程序段功能的解釋說(shuō)明有助于的閱讀和維護(hù)。項(xiàng)目4匯編語(yǔ)言程序設(shè)計(jì)4.1.3匯編語(yǔ)言源程序的匯編 將匯編語(yǔ)言源程序“翻譯”成機(jī)器語(yǔ)言目標(biāo)程序的過(guò)程稱為匯編,對(duì)單片機(jī)助記符的匯編有兩種方法:人工匯編和機(jī)器匯編。 人工匯編是用人工查表將源程序譯成機(jī)器碼。一般分為兩步進(jìn)行。第一步將源程序中的指令逐條譯成目標(biāo)碼,指令中的標(biāo)號(hào)地址待求。第二步由偽指令求出標(biāo)號(hào)所代表的具體地址,進(jìn)行有關(guān)程序存儲(chǔ)區(qū)的數(shù)據(jù)操作并進(jìn)行偏移量的計(jì)算。 機(jī)器匯編是將源程序輸入計(jì)算機(jī)后,由匯編程序?qū)崿F(xiàn)翻譯工作,產(chǎn)生相應(yīng)的機(jī)器碼。這是一種非常高效和方便的方法。項(xiàng)目4匯編語(yǔ)言程序設(shè)計(jì)4.1.4偽指令 在機(jī)器匯編時(shí),對(duì)匯編過(guò)程進(jìn)行控制和指導(dǎo)的指令稱為偽指令。在匯編過(guò)程中,偽指令供匯編程序識(shí)別和執(zhí)行但不產(chǎn)生可執(zhí)行的目標(biāo)代碼。如規(guī)定匯編生成的目標(biāo)代碼在ROM中的存放區(qū)域,給源程序符號(hào)、標(biāo)號(hào)賦值,指示匯編結(jié)束等。每種匯編程序都有自己的偽指令,標(biāo)準(zhǔn)的MCS-51定義的偽指令常用的有以下7條。1.匯編其始地址偽指令——ORG(Origin)格式:ORG16位地址功能:規(guī)定該指令后的下一段源程序經(jīng)匯編后生成的代碼存放的起始地址。例如:ORG0500HSTART:MOVA,R0……END ORG偽指令總是出現(xiàn)在每段源程序或數(shù)據(jù)塊的開(kāi)始,匯編語(yǔ)言源程序中多處使用ORG指令,可使程序員把子程序、數(shù)據(jù)塊存放在ROM的任何位置。每當(dāng)ORG出現(xiàn)時(shí),下條指令的存放地址由此重新定位,所以O(shè)RG定義地址的順序應(yīng)有小到大,且不能重疊。項(xiàng)目4匯編語(yǔ)言程序設(shè)計(jì)2.匯編結(jié)束偽指令-END(EndofAssembly)指令格式:[標(biāo)號(hào)]:END功能:結(jié)束匯編語(yǔ)言源程序的操作。在源程序中只能有一條END,END后所寫(xiě)的指令,匯編程序不予處理。項(xiàng)目4匯編語(yǔ)言程序設(shè)計(jì)3.符號(hào)賦值偽指令——EQU(EQUate)指令格式:字符名稱EQU數(shù)或匯編符號(hào)功能:將一個(gè)數(shù)或特定的匯編符號(hào)賦給指定的字符名稱。字符名稱為一自定的符號(hào),而不是標(biāo)號(hào),字符名稱后無(wú)“:”。字符名稱可用來(lái)作數(shù)據(jù)地址,立即數(shù),位地址或者是一代碼地址,其值可以是一個(gè)8位數(shù),也可以是16位數(shù)。例如:TESTEQU20HMOVA,TEST 這里字符名稱TEST就代表了內(nèi)部RAM20H地址單元。又例如:A1EQU10HMOVA,A1這里A1代表片內(nèi)RAM的直接地址單元10H。使用EQU偽指令可以把抽象的數(shù)字地址表示成有一定意義的符號(hào),增強(qiáng)程序的可讀性。項(xiàng)目4匯編語(yǔ)言程序設(shè)計(jì)4.定義數(shù)據(jù)字節(jié)偽指令——DB(DefineByte) 格式:[標(biāo)號(hào):]DB<項(xiàng)或項(xiàng)表> 項(xiàng)或項(xiàng)表是指一個(gè)字節(jié),逗號(hào)隔開(kāi)的8位二進(jìn)制的數(shù)或字符串,或撇號(hào)’括起來(lái)的ASCII字符串。 功能:從標(biāo)號(hào)指定的地址單元開(kāi)始,在程序存儲(chǔ)器中存入一組8位二進(jìn)制數(shù),或者將一個(gè)數(shù)據(jù)表格存入程序存儲(chǔ)器。這條偽指令匯編后影響程序存儲(chǔ)器的內(nèi)容。例如:ORG1100HTAB:DB01H,04H,09H,10HDB00001111B,‘1’,‘A’,‘BC’項(xiàng)目4匯編語(yǔ)言程序設(shè)計(jì)5.定義數(shù)據(jù)據(jù)字命令令——DW(DefineWord)格式:[標(biāo)號(hào):]DW<項(xiàng)或項(xiàng)項(xiàng)表>功能:DW的功功能和DB類似似,DW是從標(biāo)標(biāo)號(hào)指定定的地址址開(kāi)始存存放16位而非非8位二二進(jìn)制數(shù)數(shù),存放放時(shí),數(shù)數(shù)據(jù)字的的高8位位在前((低地址址),低低8位在在后(高高地址))。例如:ORG5000HMOVA,#30H………ORG5020HADDTAB:DW1234H,100H,10………;END一條DB和DW語(yǔ)句定義義的數(shù)表其數(shù)數(shù)的個(gè)數(shù)不得得超過(guò)80個(gè)個(gè)。當(dāng)數(shù)據(jù)的的數(shù)目較多時(shí)時(shí),可使用多多個(gè)定義命令令。在MCS-51程序序設(shè)計(jì)應(yīng)用中中,常以DW來(lái)定義地址址。項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)6.預(yù)留存儲(chǔ)儲(chǔ)區(qū)偽指令———DS(DefineStorage)格式:[標(biāo)號(hào)號(hào):]DS<<表達(dá)式>功能:本命令令用于從指定定地址開(kāi)始,,保留DS之之后表達(dá)式的的值所需數(shù)目目的字節(jié)單元元作為存儲(chǔ)區(qū)區(qū)以備后用。。匯編時(shí),對(duì)對(duì)這些單元不不賦值。例如:ORG0100HMOVA,#50H………ADDRTABL:DS05HDB20HEND從標(biāo)號(hào)ADDRTABL代表的地址址開(kāi)始,保留留5個(gè)連續(xù)的的ROM地址址單元,第6個(gè)單元存放放20H。對(duì)MCS-51單片機(jī)來(lái)來(lái)說(shuō),DB,,DW,DS偽指令只能能對(duì)程序存儲(chǔ)儲(chǔ)器使用,而而不能對(duì)數(shù)據(jù)據(jù)存儲(chǔ)器進(jìn)行行初始化。項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)7.位地址賦賦值偽指令———BIT格式:[字符符名稱]BIT<<位地址>>功能:本命令令用于給字符符名稱賦以位位地址。其中<位地址址>可以是絕絕對(duì)地址,也也可以是符號(hào)號(hào)地址(即位位符號(hào)名稱))。例如:AQBITP1.0A2BIT07H這兩條指令分分別把P1.0的位地址址賦給變量AQ,位地址址07H賦給給符號(hào)名A2,在其后的的編程中AQ和A2就可可以作為位地地址使用。項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)4.1.5程程序設(shè)計(jì)技巧巧1.模塊化程程序設(shè)計(jì)方法法單片機(jī)應(yīng)用系系統(tǒng)的程序一一般由包含多多個(gè)模塊的主主程序和各種種子程序組成成。每一程序序模塊都要完完成一個(gè)明確確的任務(wù),實(shí)實(shí)現(xiàn)某個(gè)具體體的功能,如如發(fā)送、接收收、延時(shí)、打打印、顯示等等。采用模塊塊化的程序設(shè)設(shè)計(jì)方法,就就是將這些不不同的具體功功能程序進(jìn)行行獨(dú)立的設(shè)計(jì)計(jì)和分別調(diào)試試,最后將這這些模塊程序序裝配成整體體程序并進(jìn)行行聯(lián)調(diào)。項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)把一個(gè)多功能能的、復(fù)雜的的程序劃分為為若干個(gè)簡(jiǎn)單單的、功能單單一的程序模模塊的程序設(shè)設(shè)計(jì)方法具有有明顯的優(yōu)點(diǎn)點(diǎn):1)單個(gè)模塊塊結(jié)構(gòu)的程序序功能單一,,易于設(shè)計(jì)、、編寫(xiě)、調(diào)試試及修改;2)有利于程程序的優(yōu)化和和分工,從而而可使多個(gè)程程序員同時(shí)進(jìn)進(jìn)行程序的編編寫(xiě)和調(diào)試,,加快軟件研研制進(jìn)度;3)提高了程程序的閱讀性性和可靠性,,使程序的結(jié)結(jié)構(gòu)層次一目目了然,同時(shí)時(shí)4)對(duì)程序的的修改可局部部進(jìn)行,其他他部分可以保保持不變,便便于功能擴(kuò)充充和版本升級(jí)級(jí);5)對(duì)于使用用頻繁的子程程序可以建立立子程序庫(kù),,便于多個(gè)模模塊調(diào)用。項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)模塊的劃分有有很大的靈活活性,但也不不能隨意劃分分。劃分時(shí)應(yīng)應(yīng)遵循下述原原則:1)每個(gè)模塊塊應(yīng)具有獨(dú)立立的功能,能能產(chǎn)生一個(gè)明明確的結(jié)果,,這就是單模模塊的功能高高內(nèi)聚性。2)模塊之間間的控制耦合合應(yīng)盡量簡(jiǎn)單單,數(shù)據(jù)耦合合應(yīng)盡量少,,這就是模塊塊間的低耦合合性。控制耦耦合是指模塊塊進(jìn)入和退出出的條件及方方式,數(shù)據(jù)耦耦合是指模塊塊間的信息交交換(傳遞)方式、交換換量的多少及及交換的頻繁繁程度。3)模塊長(zhǎng)度度適中。模塊塊語(yǔ)句的長(zhǎng)度度通常在20條~100條的范圍較較合適。模塊塊太長(zhǎng)時(shí),分分析和調(diào)試比比較困難,失失去了模塊化化程序結(jié)構(gòu)的的優(yōu)越性;過(guò)過(guò)短則模塊的的連接太復(fù)雜雜,信息交換換太頻繁,因因而也不合適適。項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)2.程序設(shè)計(jì)計(jì)技巧1)盡量采用用循環(huán)結(jié)構(gòu)和和子程序。2)盡量少用用無(wú)條件轉(zhuǎn)移移指令。3)對(duì)于通用用的子程序,,考慮到其通通用性,除了了用于存放子子程序入口參參數(shù)的寄存器器外,子程序序中用到的其其他寄存器的的內(nèi)容應(yīng)壓入入堆棧(返回回前再?gòu)棾?進(jìn)行現(xiàn)場(chǎng)場(chǎng)保護(hù),并要要特別注意堆堆棧操作的壓壓入和彈出的的平衡。一般般不必把標(biāo)志志寄存器壓入入堆棧。4)對(duì)于中斷斷處理子程序序除了要保護(hù)護(hù)程序中用到到的寄存器外外,還應(yīng)保護(hù)護(hù)標(biāo)志寄存器器。5)累加器是是信息傳遞的的樞紐。項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)4.2程序序結(jié)構(gòu)4.2.1順順序程序順序結(jié)構(gòu)是按按照邏輯操作作順序,從某某一條指令開(kāi)開(kāi)始逐條順序序執(zhí)行,直至至某一條指令令為止,無(wú)分分支,也無(wú)循循環(huán)。順序結(jié)結(jié)構(gòu)是所有程程序設(shè)計(jì)中最最基本、最單單純的程序結(jié)結(jié)構(gòu)形式,在在程序設(shè)計(jì)中中使用最多,,因而是一種種最簡(jiǎn)單且應(yīng)應(yīng)用最普遍的的程序結(jié)構(gòu)。。一般實(shí)際應(yīng)應(yīng)用程序遠(yuǎn)比比順序結(jié)構(gòu)復(fù)復(fù)雜得多,但但它是組成復(fù)復(fù)雜程序的基基礎(chǔ)和主干。。項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)【例4.1】】將兩個(gè)半字字節(jié)數(shù)合并成成一個(gè)一字節(jié)節(jié)數(shù)。設(shè)內(nèi)部RAM40H、41H單元中中分別存放著著8位二進(jìn)制制數(shù)。要求取取出兩個(gè)單元元的低半字節(jié)節(jié),合并成一一個(gè)字節(jié)后,,存入42H單元。開(kāi)始(40H)內(nèi)容送A,屏蔽高位A與R1或后送入(42H)交換高低位,送入R1(41H)內(nèi)容送A,屏蔽高位返回圖4-1例1程序流程圖項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)【例4.2】】用順序結(jié)構(gòu)構(gòu)程序編寫(xiě)三三字節(jié)無(wú)符號(hào)號(hào)數(shù)的加法程程序。設(shè)被加數(shù)存放放在:40H(高字字節(jié)),41H(中字節(jié)節(jié)),42H(低字節(jié))加數(shù)存放在:43H(高字節(jié)),44H(中字節(jié)),,45H(低低字節(jié))運(yùn)算結(jié)果仍存存在被加數(shù)單單元中。開(kāi)始取低字節(jié)數(shù)據(jù)返回相加后送回被加數(shù)單元取中字節(jié)數(shù)據(jù)帶進(jìn)位位相加后送回被加數(shù)單元取高字節(jié)數(shù)據(jù)帶進(jìn)位位相加后送回被加數(shù)單元圖4-2例2程序流程圖項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)4.2.2分分支程序通常,單純的的順序結(jié)構(gòu)程程序只能解決決一些簡(jiǎn)單的的算術(shù)、邏輯輯運(yùn)算,或者者簡(jiǎn)單的查表表、傳送操作作等。實(shí)際問(wèn)問(wèn)題一般都是是比較復(fù)雜的的,總是伴隨隨有邏輯判斷斷或條件選擇擇,要求計(jì)算算機(jī)能根據(jù)給給定的條件進(jìn)進(jìn)行判斷,選選擇不同的處處理路徑,從從而表現(xiàn)出某某種智能。根據(jù)程序要求求改變程序執(zhí)執(zhí)行順序,即即程序的流向向有兩個(gè)或兩兩個(gè)以上的出出口,根據(jù)指指定的條件選選擇程序流向向的程序結(jié)構(gòu)構(gòu)我們稱為分分支程序結(jié)構(gòu)構(gòu)。通常根據(jù)分支支程序中出口口的個(gè)數(shù)分為為單分支結(jié)構(gòu)構(gòu)程序(兩個(gè)個(gè)出口)和多多分支結(jié)構(gòu)程程序(三個(gè)或或三個(gè)以上出出口)。在MCS-51指令系統(tǒng)統(tǒng)中,通過(guò)條條件判斷實(shí)現(xiàn)現(xiàn)單分支程序序轉(zhuǎn)移的指令令有JZ、JNZ、CJNE和DJNZ等。此此外,還有以以位狀態(tài)為條條件,進(jìn)行程程序分支的指指令JC、JNC、JB、JNB和和JBC等。。使用這些指指令,可以完完成或?yàn)?、、1,或?yàn)檎?、為?fù),以以及相等、不不相等各種條條件判斷,以以實(shí)現(xiàn)程序有有條件地轉(zhuǎn)移移。項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)1.兩分支程程序設(shè)計(jì)【例4.3】】?jī)蓚€(gè)無(wú)符號(hào)號(hào)數(shù)比較(兩兩分支)。內(nèi)內(nèi)部RAM的的30H單元元和31H單單元各存放了了一個(gè)8位無(wú)無(wú)符號(hào)數(shù),請(qǐng)請(qǐng)比較這兩個(gè)個(gè)數(shù)的大小,,大數(shù)放在32H中。開(kāi)始X-YCy=1?30H→32H31H→32HYN結(jié)束4-3兩數(shù)比較流程圖項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)2.三分支程程序設(shè)計(jì)【例4.4】】?jī)蓚€(gè)無(wú)符號(hào)號(hào)數(shù)比較(三三分支程序))。內(nèi)部RAM的20H單元和30H單元各存存放了一個(gè)8位有符號(hào)數(shù)數(shù),根據(jù)下列列條件編程點(diǎn)點(diǎn)亮相應(yīng)的發(fā)發(fā)光二極管,,電路如圖4-4所示,,。若(20H))=(30H),則P2.0管腳連連接的黃色LED發(fā)光;;若(20H))>(30H),則P2.1管腳連連接的綠色LED發(fā)光;;若(20H))<(30H),則P2.2管腳連連接的紅色LED發(fā)光。。開(kāi)始X=Y?X>Y?黃燈點(diǎn)亮YN結(jié)束NY紅燈點(diǎn)亮綠燈點(diǎn)亮項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)3.散轉(zhuǎn)程序序散轉(zhuǎn)程序是指指經(jīng)過(guò)某個(gè)條條件判斷之后后,程序有多多個(gè)流向(三三個(gè)以上)。。MCS-51單片機(jī)指指令系統(tǒng)中專專門(mén)提供了散散轉(zhuǎn)指令,使使得散轉(zhuǎn)程序序的編制更加加簡(jiǎn)潔?!纠?.5】】在例4.4的電路的基基礎(chǔ)上加兩個(gè)個(gè)開(kāi)關(guān)組成簡(jiǎn)簡(jiǎn)單的信號(hào)燈燈電路,如圖圖4-6所示示,試編程實(shí)實(shí)現(xiàn)以下功能能。K0K100都都按下,,紅黃綠燈全全亮(狀態(tài)1)01K0單獨(dú)按按下,紅燈亮亮(狀態(tài)2))10K1單獨(dú)按按下,綠燈亮亮(狀態(tài)3))11都都未按下下,黃燈亮((狀態(tài)4)項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)開(kāi)始讀P1口引腳狀態(tài)→A轉(zhuǎn)移指令表基地址→DPTR屏蔽無(wú)關(guān)位散轉(zhuǎn)移狀態(tài)1狀態(tài)2狀態(tài)3狀態(tài)4返回返回返回返回項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)4.2.3循循環(huán)程序循環(huán)結(jié)構(gòu)程序序是把需要多多次重復(fù)使用用的程序段,,利用轉(zhuǎn)移指指令反復(fù)轉(zhuǎn)向向該程序段,,從而大大縮縮短程序代碼碼,減少占用用程序空間,,程序結(jié)構(gòu)也也大大優(yōu)化。。循環(huán)程序可可以分為單重循環(huán)和多重循環(huán),其通常有兩兩種編制方法法:一種是先先執(zhí)行后判斷斷,另一種是是先判斷后執(zhí)執(zhí)行。如圖4-8所示。。開(kāi)始初始化循環(huán)處理循環(huán)控制循環(huán)完成?NY循環(huán)結(jié)束結(jié)束開(kāi)始初始化循環(huán)控制循環(huán)完成?NY循環(huán)結(jié)束結(jié)束循環(huán)處理項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)1.單重循環(huán)環(huán)程序設(shè)計(jì)【例4.6】】數(shù)據(jù)極值值查找程序。。設(shè)內(nèi)部RAM從30H單元開(kāi)始始存放有8個(gè)個(gè)數(shù),找出其其中最大的數(shù)數(shù),放到60H單元。解:極值查找找操作的主要要內(nèi)容是進(jìn)行行數(shù)值大小比比較。假定在在比較過(guò)程中中,以A存放放大數(shù),與之之逐個(gè)比較的的另一個(gè)數(shù)放放在50H單單元。采用先先執(zhí)行后判斷斷的結(jié)構(gòu),首首先設(shè)定比較較次數(shù),在比比較結(jié)束后,,把查找到的的最大數(shù)送到到60H單元元。程序流程程圖如圖4-9所示。開(kāi)始數(shù)據(jù)區(qū)首地址→R0讀下一個(gè)數(shù)→50H(50H)→A(A)>(50H)?NYA→(60H)結(jié)束數(shù)據(jù)個(gè)數(shù)→R7讀第一個(gè)數(shù)→AR7-1→R7R7-1=0?NY項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)【例4.7】】將內(nèi)部RAM中30H單元開(kāi)始始的數(shù)據(jù)傳送送到外部RAM1200H開(kāi)始的存存儲(chǔ)空間內(nèi),,直到發(fā)現(xiàn)數(shù)數(shù)據(jù)‘100’停止傳送送。開(kāi)始A=100?取取內(nèi)部RAM數(shù)據(jù)→AYN結(jié)束傳送送數(shù)據(jù)到外部部RAM圖4-10例4.7流程程圖解:由于循環(huán)環(huán)次數(shù)事先不不知道,但是是循環(huán)條件可可以測(cè)試到,,可以采用先先判斷后執(zhí)行行的程序結(jié)構(gòu)構(gòu)。流程圖如如圖4-10所示。開(kāi)始A=100?取內(nèi)部RAM數(shù)據(jù)→AYN結(jié)束傳送數(shù)據(jù)到外部RAM圖4-10例4.7流程圖項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)2.多重循環(huán)環(huán)程序設(shè)計(jì)——定時(shí)程序在循環(huán)內(nèi)套循循環(huán)的程序結(jié)結(jié)構(gòu)稱多重循循環(huán),或稱循循環(huán)嵌套。若若把每重循環(huán)環(huán)的內(nèi)部看作作一個(gè)整體,,則多重循環(huán)環(huán)的結(jié)構(gòu)與單單重循環(huán)的結(jié)結(jié)構(gòu)是一樣的的,也由四部部分組成。多重循環(huán)的執(zhí)執(zhí)行過(guò)程是從從內(nèi)向外逐層層展開(kāi)的。內(nèi)內(nèi)層執(zhí)行完全全部循環(huán)后,,外層則完成成一次循環(huán),,逐次類推。。因此,每執(zhí)執(zhí)行一次外層層循環(huán),內(nèi)層層必須重新設(shè)設(shè)置初值,故故每層均包含含完整的循環(huán)環(huán)程序結(jié)構(gòu)。。層次必須分分明,層次之之間不能有交交叉;否則,,將產(chǎn)生錯(cuò)誤誤。定時(shí)程序是一一種很典型的的多重循環(huán)程程序,其在單單片機(jī)匯編語(yǔ)語(yǔ)言程序設(shè)計(jì)計(jì)中使用非常常廣泛,例如如定時(shí)檢測(cè)、、定時(shí)掃描、、定時(shí)中斷等等。所謂定時(shí)時(shí)就是讓CPU做一些與與主程序功能能無(wú)關(guān)的操作作(例如將一一個(gè)數(shù)字逐次次減1直到為為0)來(lái)空耗耗掉CPU的的時(shí)間來(lái)達(dá)到到延時(shí)的目的的。由于我們們知道CPU執(zhí)行每條指指令的準(zhǔn)確時(shí)時(shí)間,因此執(zhí)執(zhí)行整個(gè)延時(shí)時(shí)程序的時(shí)間間也可以精確確計(jì)算出來(lái)。。也就是說(shuō),,我們可以寫(xiě)寫(xiě)出延時(shí)長(zhǎng)度度任意而且精精度相當(dāng)高的的延時(shí)程序。。項(xiàng)目4匯編編語(yǔ)言程序設(shè)設(shè)計(jì)【例4.8】】設(shè)計(jì)一個(gè)延延時(shí)50ms的程序,設(shè)設(shè)單片機(jī)時(shí)鐘鐘晶振頻率為為fosc=12MHz。解:延延時(shí)程程序一一般采采用循循環(huán)程程序結(jié)結(jié)構(gòu)編編程,,通過(guò)過(guò)確定定循環(huán)環(huán)程序序中的的循環(huán)環(huán)次數(shù)數(shù)和循循環(huán)程程序段段兩個(gè)個(gè)因素素來(lái)確確定延延時(shí)時(shí)時(shí)間。。題目目給定定fosc=12MHz,那那么機(jī)機(jī)器周周期的的計(jì)算算方法法:T機(jī)器器=12T時(shí)鐘鐘=12××(1/12M)=1μs。下面就就是一一個(gè)最最簡(jiǎn)單單的單單循環(huán)環(huán)定時(shí)時(shí)程序序:MOVR7,#TIMELOOP:NOPNOPDJNZR7,LOOPNOP指令令的機(jī)機(jī)器周周期為為1,,用來(lái)來(lái)提高高定時(shí)時(shí)精度度,DJNZ指指令的的機(jī)器器周期期為2,故故一次次循環(huán)環(huán)共4個(gè)機(jī)機(jī)器周周期。。一個(gè)個(gè)機(jī)器器周期期是1μS,則則一次次循環(huán)環(huán)的延延遲時(shí)時(shí)間為為4μμS。。上面面程序序總的的延遲遲時(shí)間間為4×time(μS)。。本程程序的的實(shí)際際延遲遲時(shí)間間取決決于裝裝入寄寄存器器R7的定定時(shí)時(shí)時(shí)間常常數(shù)time。。R7是8位寄寄存器器,故故這個(gè)個(gè)程序序的最最長(zhǎng)定定時(shí)時(shí)時(shí)間為為256××4==1020(μμS)),即即定時(shí)時(shí)范圍圍是4~1024μμS。??梢?jiàn)見(jiàn)單循循環(huán)定定時(shí)程程序的的時(shí)間間延遲遲較小小。項(xiàng)目4匯匯編語(yǔ)語(yǔ)言程程序設(shè)設(shè)計(jì)為了加加長(zhǎng)定定時(shí)時(shí)時(shí)間,,通常常采用用多重重循環(huán)環(huán)方法法。流流程圖圖如圖圖4-11所示示。開(kāi)開(kāi)始外外循環(huán)環(huán)次數(shù)數(shù)TIME1→→R7內(nèi)循循環(huán)次次數(shù)TIME2→R6空空操作作R6-1=0?NYR7-1=0?NY返回回圖4-11多多重循循環(huán)流流程圖圖程序如如下::MOVR7,#TIME1LOOP2:MOVR6,#TIME2LOOP1:NOPDJNZR6,LOOP1DJNZR7,LOOP2RET最大定定時(shí)時(shí)時(shí)間計(jì)計(jì)算公公式為為:(256×2+2+2)×256+1=132097(μS)若定時(shí)時(shí)50ms,采取取合適適的TIME1和TIME2即可,,如TIME1=200和TIME2=123。項(xiàng)目4匯匯編語(yǔ)語(yǔ)言程程序設(shè)設(shè)計(jì)循環(huán)控控制::在重重復(fù)執(zhí)執(zhí)行循循環(huán)體體的過(guò)過(guò)程中中,不不斷修修改和和判別別循環(huán)環(huán)變量量,直直到符符合循循環(huán)結(jié)結(jié)束條條件。。一般般情況況下,,循環(huán)環(huán)控制制有以以下幾幾種方方式::(1))計(jì)數(shù)數(shù)循環(huán)環(huán)———如果果循環(huán)環(huán)次數(shù)數(shù)已知知,用用計(jì)數(shù)數(shù)器計(jì)計(jì)數(shù)來(lái)來(lái)控制制循環(huán)環(huán)次數(shù)數(shù),這這種控控制方方式用用得比比較多多。循循環(huán)次次數(shù)要要在初初始化化部分分予置置,在在控制制部分分修改改,每每循環(huán)環(huán)一次次計(jì)數(shù)數(shù)器內(nèi)內(nèi)容減減1。。(2))條件件控制制循環(huán)環(huán)———在循循環(huán)次次數(shù)未未知的的情況況下,,一般般通過(guò)過(guò)設(shè)立立結(jié)束束條件件來(lái)控控制循循環(huán)的的結(jié)束束。(3))循環(huán)環(huán)結(jié)束束處理理:這這部分分程序序用于于存放放執(zhí)行行循環(huán)環(huán)程序序所得得結(jié)果果以及及恢復(fù)復(fù)各工工作單單元的的初值值等。。項(xiàng)目4匯匯編語(yǔ)語(yǔ)言程程序設(shè)設(shè)計(jì)4.2.4查查表程程序在微型型機(jī)控控制系系統(tǒng)中中,有有些參參數(shù)的的計(jì)算算是非非常復(fù)復(fù)雜的的,用用計(jì)算算法計(jì)計(jì)算不不僅程程序長(zhǎng)長(zhǎng),難難于計(jì)計(jì)算,,而且且需要要耗費(fèi)費(fèi)大量量時(shí)間間。還還有一一些非非線性性參數(shù)數(shù),它它們不不是用用一般般算術(shù)術(shù)運(yùn)算算就可可以計(jì)計(jì)算出出來(lái),,而是是要涉涉及到到指數(shù)數(shù),對(duì)對(duì)數(shù),,三角角函數(shù)數(shù),以以及積積分,,微分分等運(yùn)運(yùn)算。。所有有這些些運(yùn)算算用匯匯編語(yǔ)語(yǔ)言編編程計(jì)計(jì)算都都比較較復(fù)雜雜,有有些甚甚至無(wú)無(wú)法建建立相相應(yīng)的的數(shù)學(xué)學(xué)模型型。為為了解解決這這些問(wèn)問(wèn)題,,可以以采用用查表表法。。所謂謂查查表表法法,,就就是是把把事事先先計(jì)計(jì)算算或或測(cè)測(cè)得得的的數(shù)數(shù)據(jù)據(jù)按按一一定定順順序序編編制制成成表表格格,,查查表表程程序序的的任任務(wù)務(wù)就就是是根根據(jù)據(jù)被被測(cè)測(cè)參參數(shù)數(shù)的的值值或或者者中中間間結(jié)結(jié)果果,,查查出出最最終終所所需需要要的的結(jié)結(jié)果果。。它它具具有有程程序序簡(jiǎn)簡(jiǎn)單單,,執(zhí)執(zhí)行行速速度度快快等等優(yōu)優(yōu)點(diǎn)點(diǎn)。。查表表程程序序在在微微型型機(jī)機(jī)控控制制系系統(tǒng)統(tǒng)中中應(yīng)應(yīng)用用非非常常廣廣泛泛,,例例如如,,在在鍵鍵盤(pán)盤(pán)處處理理程程序序中中,,查查找找按按鍵鍵相相應(yīng)應(yīng)的的命命令令處處理理子子程程序序的的入入口口地地址址;;在在LED顯顯示示程程序序中中,,獲獲得得LED數(shù)數(shù)碼碼管管的的顯顯示示代代碼碼;;在在一一些些快快速速計(jì)計(jì)算算的的場(chǎng)場(chǎng)合合,,根根據(jù)據(jù)自自變變量量的的值值,,從從函函數(shù)數(shù)表表上上查查找找出出相相應(yīng)應(yīng)的的函函數(shù)數(shù)值值以以及及實(shí)實(shí)現(xiàn)現(xiàn)非非線線性性修修正正、、代代碼碼轉(zhuǎn)轉(zhuǎn)換換等等等等。。所所有有這這些些應(yīng)應(yīng)用用,,都都需需采采用用查查表表技技術(shù)術(shù)。。項(xiàng)目4匯匯編語(yǔ)語(yǔ)言程程序設(shè)設(shè)計(jì)【例4.8】查查表計(jì)計(jì)算函函數(shù)y=x!(x=0、、1、、2、、…、、7)的值值xY值Y地址000TABLE00TABLE+1101TABLE+200TABLE+3202TABLE+400TABLE+5306TABLE+600TABLE+7424TABLE+800TABLE+9520TABLE+A01TABLE+B620TABLE+C07TABLE+D740TABLE+E50TA

溫馨提示

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