第4章單片機 語言程序設(shè)計_第1頁
第4章單片機 語言程序設(shè)計_第2頁
第4章單片機 語言程序設(shè)計_第3頁
第4章單片機 語言程序設(shè)計_第4頁
第4章單片機 語言程序設(shè)計_第5頁
已閱讀5頁,還剩40頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1內(nèi)容概要內(nèi)容概要匯編語言:匯編語言:直接控制單片機硬件直接控制單片機硬件的的編程語言編程語言。因此,要求程序設(shè)計者要因此,要求程序設(shè)計者要 “軟、硬結(jié)合軟、硬結(jié)合” 。本章介紹匯編語言程序設(shè)計的本章介紹匯編語言程序設(shè)計的基本知識基本知識, ,以及一些以及一些基本的基本的程序設(shè)計程序設(shè)計。4.1 匯編語言程序設(shè)計概述匯編語言程序設(shè)計概述程序是指令的有序集合。程序是指令的有序集合。單片機運行就是執(zhí)行指令序列的過程。單片機運行就是執(zhí)行指令序列的過程。編寫這一指令序列的過程稱為編寫這一指令序列的過程稱為程序設(shè)計。程序設(shè)計。4.1.1 4.1.1 單片機編程語言單片機編程語言常用的編程語言是常用的編程

2、語言是匯編語言匯編語言和和高級語言高級語言。1 1匯編語言匯編語言匯編語言:匯編語言:用助記符表示的指令。用助記符表示的指令。匯編語言源程序:匯編語言源程序:用匯編語言編寫的程序。用匯編語言編寫的程序?!皡R編匯編”:匯編語言源程序需匯編語言源程序需轉(zhuǎn)換(翻譯)轉(zhuǎn)換(翻譯)成為二進制代成為二進制代碼表示的機器語言程序,才能識別和執(zhí)行。碼表示的機器語言程序,才能識別和執(zhí)行。經(jīng)匯編軟件經(jīng)匯編軟件“匯編匯編”得到的以二進制形式表示的機器語言得到的以二進制形式表示的機器語言稱為稱為目標(biāo)程序目標(biāo)程序。2優(yōu)點:優(yōu)點:用匯編語言編寫程序效率高,占用存儲空間小,運行用匯編語言編寫程序效率高,占用存儲空間小,運行

3、速度快,能編寫出最優(yōu)化的程序,速度快,能編寫出最優(yōu)化的程序,缺點:缺點:可讀性差,離不開具體的硬件,是面向可讀性差,離不開具體的硬件,是面向“硬件硬件”的語的語言通用性差。言通用性差。2 2高級語言高級語言不受具體不受具體“硬件硬件”的限制,的限制,優(yōu)點:優(yōu)點:通用性強,直觀、易懂、通用性強,直觀、易懂、易學(xué),可讀性好。易學(xué),可讀性好。目前多數(shù)的目前多數(shù)的51單片機用戶單片機用戶使用使用C語言(語言(C51)來進行程序設(shè)來進行程序設(shè)計,已公認為高級語言中高效簡潔而又貼近計,已公認為高級語言中高效簡潔而又貼近51單片機硬件的編單片機硬件的編程語言。程語言。將將C語言向單片機上移植,始于語言向單片

4、機上移植,始于20世紀世紀80年代的中后期。年代的中后期。344.1.2 4.1.2 匯編語言語句和格式匯編語言語句和格式兩種基本語句:指令語句和偽指令語句。兩種基本語句:指令語句和偽指令語句。(1 1)指令語句)指令語句每一指令語句在匯編時都產(chǎn)生一個指令代碼(機器代碼),每一指令語句在匯編時都產(chǎn)生一個指令代碼(機器代碼),執(zhí)行該指令代碼對應(yīng)著機器的一種操作。執(zhí)行該指令代碼對應(yīng)著機器的一種操作。(2 2)偽指令語句)偽指令語句是控制匯編(翻譯)過程的是控制匯編(翻譯)過程的控制命令控制命令。沒有沒有對應(yīng)的對應(yīng)的機器代碼機器代碼。匯編語言語句是符合典型的匯編語言的匯編語言語句是符合典型的匯編語言

5、的四分段四分段格式格式:標(biāo)號:標(biāo)號:操作碼操作碼操作數(shù)操作數(shù);注釋注釋雙操作數(shù)雙操作數(shù)之間用之間用逗號逗號相隔;相隔;任何語句都必須有操作碼字段任何語句都必須有操作碼字段,其余各段為任選項。,其余各段為任選項。5標(biāo)號字段標(biāo)號字段(LABLE)操作碼字段操作碼字段(OPCODE)操作數(shù)字段操作數(shù)字段(OPRAND)注釋字段注釋字段(COMMENT)【例例4-1】下面是一段程序的下面是一段程序的四分段四分段書寫格式。書寫格式。標(biāo)號字段標(biāo)號字段 操作碼字段操作碼字段 操作數(shù)字段操作數(shù)字段 注釋字段注釋字段START:MOVA,#00H ;0A MOVR1,#10 ;10R1MOVR2,#000000

6、11B ;03HR2LOOP: ADDA,R2 ;(A)+(R2)ADJNZR1,LOOP ;R1減減1不為零,則跳不為零,則跳LOOP處處NOPHERE:SJMPHERE61 1標(biāo)號字段標(biāo)號字段語句所在地址的標(biāo)志符號,才能被訪問。如標(biāo)號語句所在地址的標(biāo)志符號,才能被訪問。如標(biāo)號“STARTSTART”和和“LOOPLOOP”等。有關(guān)標(biāo)號規(guī)定如下:等。有關(guān)標(biāo)號規(guī)定如下:(1 1)標(biāo)號后必須跟冒號標(biāo)號后必須跟冒號“:”。(2 2)由由1 18 8個個ASCIIASCII碼字符組成碼字符組成, ,第一個字符必須是字母第一個字符必須是字母. .(3 3)同標(biāo)號在一個程序中只定義一次,不能重復(fù)定義。同

7、標(biāo)號在一個程序中只定義一次,不能重復(fù)定義。(4 4)不能將)不能將指令助記符、偽指令以及寄存器的符號名稱指令助記符、偽指令以及寄存器的符號名稱等作為標(biāo)號。等作為標(biāo)號。(5 5)若某條語句將若某條語句將被本程序其他語句訪問,則可用被本程序其他語句訪問,則可用標(biāo)號標(biāo)號,否則不需標(biāo)號。,否則不需標(biāo)號。782 2操作碼字段操作碼字段 必不可少。必不可少。3 3操作數(shù)字段操作數(shù)字段指令的操作數(shù)或操作數(shù)地址。指令的操作數(shù)或操作數(shù)地址。通常有通常有1 1個、個、2 2個、個、3 3個或沒有。個或沒有。如果是多操作數(shù),則操作數(shù)之間要以如果是多操作數(shù),則操作數(shù)之間要以逗號逗號隔開。隔開。9操作數(shù)操作數(shù)n若多個操

8、作數(shù),之間用逗號分開。若多個操作數(shù),之間用逗號分開。n操作數(shù)包括的內(nèi)容有:操作數(shù)包括的內(nèi)容有: (1)工作寄存器工作寄存器:由:由PSW.3和和PSW.4規(guī)定的當(dāng)前工作寄存規(guī)定的當(dāng)前工作寄存器區(qū)中的器區(qū)中的R0R7。 (2)特殊功能寄存器特殊功能寄存器:21個個SFR的名字。的名字。 (3)標(biāo)號名:賦值標(biāo)號標(biāo)號名:賦值標(biāo)號由匯編指令由匯編指令EQU等賦值的標(biāo)號等賦值的標(biāo)號;指令標(biāo)號;指令標(biāo)號指令標(biāo)號指示的指令的第一字節(jié)地址是該標(biāo)指令標(biāo)號指示的指令的第一字節(jié)地址是該標(biāo)號的值。號的值。 (4)常數(shù)常數(shù):可用二進制(:可用二進制(B)、十進制、十六進制()、十進制、十六進制(H),若常數(shù)以字符開頭,

9、前面加,若常數(shù)以字符開頭,前面加0。 (5)$:用來表示程序計數(shù)器的當(dāng)前值。:用來表示程序計數(shù)器的當(dāng)前值。 (6)表達式表達式:匯編時,計算出表達式的值填入目標(biāo)碼。:匯編時,計算出表達式的值填入目標(biāo)碼。4 4注釋字段注釋字段用于解釋指令或程序的含義,對可讀性非常有用。用于解釋指令或程序的含義,對可讀性非常有用。使用時使用時須以分號開頭須以分號開頭,長度不限,一行寫不下,長度不限,一行寫不下可換行可換行書寫,但注意也要以分號開頭。書寫,但注意也要以分號開頭。 匯編時,遇到匯編時,遇到“;” ” 就停止就停止“翻譯翻譯”。因此,注釋字段。因此,注釋字段不會產(chǎn)生機器代碼。不會產(chǎn)生機器代碼。104.1

10、.3 4.1.3 偽指令偽指令ORG 匯編起始命令 格式:格式:ORG 16位地址位地址 功能:規(guī)定該偽指令后面程序的匯編地址,即匯編后生成目功能:規(guī)定該偽指令后面程序的匯編地址,即匯編后生成目標(biāo)程序存放的起始地址。例如:標(biāo)程序存放的起始地址。例如: ORG 2000HSTART:MOV A,#64H 規(guī)定了規(guī)定了START的地址是的地址是2000H,又規(guī)定了匯編后的第一條指令,又規(guī)定了匯編后的第一條指令碼從碼從2000H開始存放。開始存放。地址必須由小到大排列,且不能交叉地址必須由小到大排列,且不能交叉.偽指令不是真正的指令,偽指令不是真正的指令,無對應(yīng)無對應(yīng)的機器碼,在的機器碼,在匯編時不

11、產(chǎn)生目匯編時不產(chǎn)生目標(biāo)程序標(biāo)程序,只是用來對匯編過程進行某種控制。,只是用來對匯編過程進行某種控制。ORG2000HORG2500HORG3000H這種順序是正確的。若按下面順序的排列則是錯誤的,因為地址出現(xiàn)了交叉。ORG2500HORG2000HORG3000H1213END 匯編結(jié)束指令n格式:格式:ENDn功能:通知匯編程序功能:通知匯編程序結(jié)束匯編結(jié)束匯編。在。在END之之后所有的匯編指令均不予以處理。后所有的匯編指令均不予以處理。DB(Define Byte)定義數(shù)據(jù)字節(jié)命令)定義數(shù)據(jù)字節(jié)命令用于從指定的地址開始,在程序存儲器連續(xù)單元中定義用于從指定的地址開始,在程序存儲器連續(xù)單元中

12、定義字節(jié)數(shù)據(jù)。例如:字節(jié)數(shù)據(jù)。例如:ORG 2000HDB30H,40H,24,C,B匯編后匯編后(2000H)=30H(2001H)=40H(2002H)=18H(十進制數(shù)十進制數(shù)24)(2003H)=43H(字符字符“C”的的ASCII碼碼)(2004H)=42H(字符字符“B”的的ASCII碼碼)1415編程的步驟編程的步驟n一、分析問題一、分析問題n二、確定算法二、確定算法n三、畫程序流程圖三、畫程序流程圖n四、編寫程序四、編寫程序16一、分析問題一、分析問題n對需要解決的問題進行分析,以求對問對需要解決的問題進行分析,以求對問題有正確的理解。如題有正確的理解。如:解決問題的解決問題的

13、任務(wù)任務(wù)是什么?是什么?工作工作過程過程?現(xiàn)有的條件,現(xiàn)有的條件,已知已知數(shù)據(jù),對運算的數(shù)據(jù),對運算的精度精度和和速速度度方面的要求?方面的要求?設(shè)計的硬件結(jié)構(gòu)設(shè)計的硬件結(jié)構(gòu)是否是否方便編程?方便編程?17二、確定算法二、確定算法n算法算法是如何將實際問題轉(zhuǎn)化成程序模塊來是如何將實際問題轉(zhuǎn)化成程序模塊來處理。處理。n在編程以前,先要對幾種不同的算法進行在編程以前,先要對幾種不同的算法進行分析、比較,找出最適宜的算法分析、比較,找出最適宜的算法18三、畫程序流程圖三、畫程序流程圖n程序流程圖是使用各種程序流程圖是使用各種圖形圖形、符號符號、有向線段有向線段等來說等來說明程序設(shè)計過程的一種直觀的表

14、示。明程序設(shè)計過程的一種直觀的表示。n流程圖步驟分得越細致,編寫程序是也越方便。流程圖步驟分得越細致,編寫程序是也越方便。n畫流程圖畫流程圖是程序結(jié)構(gòu)設(shè)計采用的一種重要手段。是程序結(jié)構(gòu)設(shè)計采用的一種重要手段。n一個系統(tǒng)軟件有一個系統(tǒng)軟件有總的流程圖總的流程圖(主程序框圖)和(主程序框圖)和局部的局部的流程圖。流程圖。n流程圖常采用的圖形和符號。流程圖常采用的圖形和符號。橢圓框橢圓框或桶形框或桶形框:表示程序的開始或結(jié)束。:表示程序的開始或結(jié)束。矩形框矩形框:表示要進行的工作。:表示要進行的工作。菱形框菱形框:表示要判斷的事情,菱形框內(nèi):表示要判斷的事情,菱形框內(nèi)的表達式表示要判斷的內(nèi)容。的表達

15、式表示要判斷的內(nèi)容。圓圈圓圈:表示連接點:表示連接點指向線指向線:表示程序的流向:表示程序的流向20編程的方法和技巧編程的方法和技巧一、模塊化的程序設(shè)計方法一、模塊化的程序設(shè)計方法二、編程技巧二、編程技巧21一、模塊化的程序設(shè)計方法一、模塊化的程序設(shè)計方法1、程序功能模塊化的、程序功能模塊化的優(yōu)點優(yōu)點n單個模塊結(jié)構(gòu)的程序功能單個模塊結(jié)構(gòu)的程序功能單一單一,易于編寫、,易于編寫、調(diào)試和修改。調(diào)試和修改。n便于便于分工分工,從而可使多個程序員同時進行程,從而可使多個程序員同時進行程序的編寫和調(diào)試工作,序的編寫和調(diào)試工作,加快加快軟件研制進度。軟件研制進度。n程序程序可讀性好可讀性好,便于功能擴充和

16、版本升級。,便于功能擴充和版本升級。n對程序的修改可對程序的修改可局部進行局部進行,其它部分可以保,其它部分可以保持不變。持不變。n對于使用頻繁的子程序可以建立對于使用頻繁的子程序可以建立子程序庫子程序庫,便于多個模塊調(diào)用。便于多個模塊調(diào)用。222、劃分模塊的原則、劃分模塊的原則n每個模塊應(yīng)具有每個模塊應(yīng)具有獨立的功能獨立的功能,能產(chǎn)生一個明確,能產(chǎn)生一個明確的結(jié)果,即單模塊的功能高內(nèi)聚性。的結(jié)果,即單模塊的功能高內(nèi)聚性。n模塊之間的模塊之間的控制耦合應(yīng)盡量簡單控制耦合應(yīng)盡量簡單,數(shù)據(jù)耦合應(yīng)數(shù)據(jù)耦合應(yīng)盡量少盡量少,即模塊間的,即模塊間的低耦合性低耦合性。控制耦合是指??刂岂詈鲜侵改K進入和退出

17、的條件及方式,數(shù)據(jù)耦合是指模塊進入和退出的條件及方式,數(shù)據(jù)耦合是指模塊間的信息交換方式、交換量的多少及交換模塊間的信息交換方式、交換量的多少及交換頻繁程度。頻繁程度。n模塊長度適中模塊長度適中。20條條100條的范圍較合適。條的范圍較合適。23二、編程技巧二、編程技巧1、盡量采用、盡量采用循環(huán)結(jié)構(gòu)循環(huán)結(jié)構(gòu)和和子程序子程序。2、盡量、盡量少用無條件轉(zhuǎn)移少用無條件轉(zhuǎn)移指令。指令。3、對于通用的子程序,考慮到其通用性,除了用于存、對于通用的子程序,考慮到其通用性,除了用于存放子程序入口參數(shù)的寄存器外,子程序中用到的放子程序入口參數(shù)的寄存器外,子程序中用到的其其他寄存器的內(nèi)容應(yīng)壓入堆棧他寄存器的內(nèi)容應(yīng)

18、壓入堆棧(返回前再彈出),即(返回前再彈出),即保護現(xiàn)場保護現(xiàn)場。4、在中斷處理程序中,除了要、在中斷處理程序中,除了要保護保護處理程序中用到的處理程序中用到的寄存器寄存器外,還要外,還要保護標(biāo)志寄存器保護標(biāo)志寄存器。5、用累加器傳遞、用累加器傳遞入口參數(shù)入口參數(shù)或或返回參數(shù)返回參數(shù)比較方便,在子比較方便,在子程序中,一般程序中,一般不必把累加器內(nèi)容壓入堆棧不必把累加器內(nèi)容壓入堆棧。分為無條件轉(zhuǎn)移分為無條件轉(zhuǎn)移和和有條件轉(zhuǎn)移有條件轉(zhuǎn)移。只討論有條件分支轉(zhuǎn)移程序,又分為只討論有條件分支轉(zhuǎn)移程序,又分為單分支單分支選擇結(jié)構(gòu)選擇結(jié)構(gòu)和和多分多分支支選擇結(jié)構(gòu)選擇結(jié)構(gòu)。1單分支選擇結(jié)構(gòu)單分支選擇結(jié)構(gòu) 兩

19、者選一兩者選一。一般根據(jù)運算結(jié)果的狀態(tài)標(biāo)志,用。一般根據(jù)運算結(jié)果的狀態(tài)標(biāo)志,用條件判跳指令條件判跳指令來選擇并轉(zhuǎn)移。來選擇并轉(zhuǎn)移。244.3.6 分支轉(zhuǎn)移程序設(shè)計分支轉(zhuǎn)移程序設(shè)計25圖4-4 單分支選擇結(jié)構(gòu)1 圖4-5 單分支選擇結(jié)構(gòu)2【例例4-9】 求單字節(jié)有符號數(shù)的二進制補碼求單字節(jié)有符號數(shù)的二進制補碼正數(shù)補碼正數(shù)補碼是其本身,是其本身,負數(shù)補碼負數(shù)補碼是其是其反碼加反碼加1。因此,應(yīng)首。因此,應(yīng)首先判被轉(zhuǎn)換數(shù)的符號,負數(shù)進行轉(zhuǎn)換,正數(shù)本身即為補碼。先判被轉(zhuǎn)換數(shù)的符號,負數(shù)進行轉(zhuǎn)換,正數(shù)本身即為補碼。設(shè)二進制數(shù)放在A中,其補碼放回到A中 2627參考程序如下:CMPT: JNB Acc.7

20、,RETURN;(A)0,不需轉(zhuǎn)換 MOV C,Acc.7;符號位保存 CPL A;(A)求反,加1 ADD A,#1 MOV Acc.7,C;符號位存在A的最高位RETURN:RET2多分支選擇結(jié)構(gòu)多分支選擇結(jié)構(gòu)當(dāng)程序的判別部分有兩個以上兩個以上的出口出口時,為多分支選擇結(jié)構(gòu)。有兩種形式。28 圖圖4-64-6 多分支選擇結(jié)構(gòu)1 1 圖圖4-74-7 多分支選擇結(jié)構(gòu)2指令系統(tǒng)提供了非常有用的指令系統(tǒng)提供了非常有用的兩種多分支選擇指令兩種多分支選擇指令:間接轉(zhuǎn)移指令間接轉(zhuǎn)移指令 JMP A+DPTR比較轉(zhuǎn)移指令比較轉(zhuǎn)移指令 CJNE A,direct,rel CJNE A,#data,rel

21、CJNE Rn,#data,rel CJNE Ri,#data,rel間接轉(zhuǎn)移指令間接轉(zhuǎn)移指令“JMP A+DPTR”由數(shù)據(jù)指針由數(shù)據(jù)指針DPTR決定多決定多分支轉(zhuǎn)移分支轉(zhuǎn)移程序的程序的首地址首地址,由,由A的內(nèi)容選擇對應(yīng)分支的內(nèi)容選擇對應(yīng)分支。CJNE能對兩個欲比較的單元內(nèi)容進行比較,當(dāng)能對兩個欲比較的單元內(nèi)容進行比較,當(dāng)不相等不相等時,程序?qū)崿F(xiàn)相對轉(zhuǎn)移;若時,程序?qū)崿F(xiàn)相對轉(zhuǎn)移;若兩者相等兩者相等,則順序往下執(zhí)行。,則順序往下執(zhí)行。29簡單的分支轉(zhuǎn)移程序的設(shè)計,常采用逐次比較法逐次比較法,就是把所有不同的情況一個一個地進行比較,發(fā)現(xiàn)符合就轉(zhuǎn)向?qū)?yīng)的處理程序。缺點是程序太長,有n種可能的情況,

22、就需有n個判斷和轉(zhuǎn)移?!纠?-10】 求符號函數(shù)的值。符號函數(shù)定義如下:X存放在40H單元,Y存放在41H單元。30Y=1X 0X 0X = 00-1程序如下:程序如下: SIGNFUC:MOV A,40HCJNE A,#00H,NZEARAJMP NEGT NZEAR: JB Acc.7, POSIMOV A,#01HAJMPNEGT POSI: MOVA,#FFH MOV41H, AEND31NEGT:實際中,經(jīng)常遇到圖4-7的分支轉(zhuǎn)移程序設(shè)計,典型例子典型例子就是當(dāng)單片機系統(tǒng)中的鍵盤按下時,就會得到一個鍵值,根據(jù)不同的鍵值,跳向不同的鍵處理程序入口。此時,可用直接轉(zhuǎn)移指令(LJMP或AJ

23、MP指令)組成一個轉(zhuǎn)移表,然后把該單元的內(nèi)容讀入累加器A,轉(zhuǎn)移表首地址放入DPTR中,再利用間接轉(zhuǎn)移指令實現(xiàn)分支轉(zhuǎn)移?!纠?-11】 根據(jù)寄存器R2的內(nèi)容,轉(zhuǎn)向各個處理程序PRGX(X=0n)。(R2)=0,轉(zhuǎn)PRG0(R2)=1,轉(zhuǎn)PRG1 (R2)=n,轉(zhuǎn)PRGn32程序如下:JMP6:MOVDPTR,#TAB5 ;轉(zhuǎn)移表首地址送DPTRMOV A,R2;分支轉(zhuǎn)移參量送AMOV B,#03H;乘數(shù)3送BMUL AB ;分支轉(zhuǎn)移參量乘3MOV R6, A;乘積的低8位暫存R6MOV A,B ;乘積的高8位送AADD A ,DPH ;乘積的高8位加到DPH中MOV DPH, A MOV A,

24、 R6JMP A+DPTR;多分支轉(zhuǎn)移選擇 33TAB5: LJMP PRG0 ;多分支轉(zhuǎn)移表LJMP PRG1 LJMP PRGnR2乘3是由于長跳轉(zhuǎn)指令LJMP要占3個單元。4.3.7 循環(huán)程序設(shè)計循環(huán)程序設(shè)計程序中含有可以反復(fù)執(zhí)行的程序段,稱循環(huán)體循環(huán)體。例如,求100個數(shù)的累加和,那么可用一條加法指令使其循環(huán)執(zhí)行100次。因此可縮短程序長度縮短程序長度和程序所占的內(nèi)占的內(nèi)存單元數(shù)量更少存單元數(shù)量更少,使程序結(jié)構(gòu)緊湊程序結(jié)構(gòu)緊湊。341循環(huán)程序的結(jié)構(gòu)循環(huán)程序的結(jié)構(gòu)主要由以下四部分組成。(1)循環(huán)初始化)循環(huán)初始化完成循環(huán)前的準(zhǔn)備工作。循環(huán)控制計數(shù)初值、地址指針的起始地址的設(shè)置、為變量預(yù)置

25、初值等。(2)循環(huán)處理)循環(huán)處理反復(fù)循環(huán)執(zhí)行的部分,故又稱循環(huán)體。(3)循環(huán)控制)循環(huán)控制不斷修改循環(huán)控制變量,符合結(jié)束條件,就結(jié)束循環(huán)程序的執(zhí)行。循環(huán)結(jié)束控制方法分為循環(huán)計數(shù)控制法和條件控制法。35(4)循環(huán)結(jié)束)循環(huán)結(jié)束這部分是對循環(huán)程序執(zhí)行的結(jié)果進行分析、處理和存放。2循環(huán)結(jié)構(gòu)的控制循環(huán)結(jié)構(gòu)的控制分為循環(huán)計數(shù)控制結(jié)構(gòu)循環(huán)計數(shù)控制結(jié)構(gòu)和條件控制結(jié)構(gòu)條件控制結(jié)構(gòu)。3637圖4-8 計數(shù)循環(huán)控制結(jié)構(gòu) 圖4-9 條件控制結(jié)構(gòu)(1)計數(shù)循環(huán)控制結(jié)構(gòu))計數(shù)循環(huán)控制結(jié)構(gòu)依據(jù)計數(shù)器的值來決定循環(huán)次數(shù),一般為減1計數(shù)器,計數(shù)器減到“0”時,結(jié)束循環(huán)。計數(shù)器初值在初始化設(shè)定。DJNZ Rn,rel;以工作寄

26、存器作控制計數(shù)器DJNZ direct,rel;以直接尋址單元作控制計數(shù)器38公式要改寫為用程序?qū)崿F(xiàn)的形式,用下式表示39圖圖4-104-10 求數(shù)據(jù)和的程序框圖求數(shù)據(jù)和的程序框圖1niiyx例如例如,計算n個數(shù)據(jù)的和,計算公式為圖圖4-104-10 求數(shù)據(jù)和的程序框圖求數(shù)據(jù)和的程序框圖【例例4-12】 求n個單字節(jié)無符號數(shù)xi的和,xi放在片內(nèi)部RAM 50H開始的單元中,n放在R2中,結(jié)果(雙字節(jié))放在R3R4中。40ADD1:MOVR2,#n ;加法次數(shù)n送R2MOV R3,#0 ;R3存放和的高8位,初始值為0MOV R4,#0 ;R4存放和的低8位,初始值為0 MOV R0,#50H MOV A,R4 ADD A,R0 MOV R4,A CLR A ADDC A,R3 MOV R3,A INC R0 DJNZ R2,LOOP ;判加法循環(huán)次數(shù)是否已到?ENDLOOP:計數(shù)控制計數(shù)控制只有在循環(huán)次數(shù)已知循環(huán)次數(shù)已知的情況下才適用。當(dāng)循環(huán)循環(huán)次數(shù)未知次數(shù)未知,不能用循環(huán)次數(shù)來控制,往往需要某種條件需要某種條件來判斷是否應(yīng)該終止循環(huán)。41(2)條件控制結(jié)構(gòu))條件控制結(jié)構(gòu)結(jié)構(gòu)見圖4-9。循環(huán)控制中,設(shè)置一個條件,判是否滿足該條件,如滿足,則循環(huán)結(jié)束。如不滿足該條件則循環(huán)繼續(xù)。MOVR4,#0

溫馨提示

  • 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論