汽車電子技術與單片機第3章_第1頁
汽車電子技術與單片機第3章_第2頁
汽車電子技術與單片機第3章_第3頁
汽車電子技術與單片機第3章_第4頁
汽車電子技術與單片機第3章_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第三章MCS-51單片機系統(tǒng)程序設計第一節(jié)MCS-51指令系統(tǒng)概述第二節(jié)MCS-51單片機指令詳解第三節(jié)MCS-51單片機系統(tǒng)程序設計實例第一節(jié)MCS-51指令系統(tǒng)概述一、概述MCS-51指令系統(tǒng)是一種簡明易掌握、效率較高的指令系統(tǒng)。MCS-51的根本指令共111條,其中單字節(jié)指令49條,雙字節(jié)指令45條,三字節(jié)指令17條。從指令的執(zhí)行時間來看,單機器周期指令64條,雙機器周期指令45條,只有乘、除兩條指令的執(zhí)行時間為4個機器周期。指令的表示方法稱之為指令格式,其內(nèi)容包括指令的長度和指令內(nèi)部信息的安排等。一條指令通常由兩局部組成,即操作碼和操作數(shù)。下一頁返回第一節(jié)MCS-51指令系統(tǒng)概述通常在MCS-51指令系統(tǒng)中,有一字節(jié)、二字節(jié)和三字節(jié)等不同長度的指令。一字節(jié)指令只有一個字節(jié),操作碼和操作數(shù)信息同在其中。二字節(jié)指令包括兩個字節(jié),其中一個字節(jié)為操作碼,第二個字節(jié)是操作數(shù)。三字節(jié)指令中,操作碼占一個字節(jié),操作數(shù)占兩個字節(jié),其中操作數(shù)既可能是數(shù)據(jù),也可能是地址。二、尋址方式MCS-51共有5種尋址方式,現(xiàn)介紹如下:上一頁下一頁返回第一節(jié)MCS-51指令系統(tǒng)概述1.立即尋址操作數(shù)就寫在指令中,和操作碼一起放在程序存儲器中。把“#〞號放在立即數(shù)前面,以表示該尋址方式為立即尋址,如#20H。2.存放器尋址操作數(shù)放在存放中,在指令中直接以存放器的名字來表示操作數(shù)的地址。例如MOVA,R0就屬于存放器尋址,即將RO存放器的內(nèi)容送到累加器A中。3.直接尋址操作數(shù)放在單片機的內(nèi)部RAM某單元中,在指令中直接寫出該單元的地址。如前例的ADDA,70H中的70H。上一頁下一頁返回第一節(jié)MCS-51指令系統(tǒng)概述4.存放器間接尋址存放器間接尋址方式可用于訪問內(nèi)部RAM或外部數(shù)據(jù)存儲器。訪問內(nèi)部RAM或外部數(shù)據(jù)存儲器的低256個字節(jié)時,可采用R0或R1作為間接存放器。這類指令為單字節(jié)指令,其最低位是表示采用R0還是R1作為間接存放器。這種尋址方式的示意圖如圖3-1所示。訪問外部數(shù)據(jù)存儲器的低256字節(jié)時,只要把MOV改為MOVX就行了。訪問外部數(shù)據(jù)存儲器,還可用數(shù)據(jù)指針DPTR作為間址存放器,DPTR是16位存放器,故它可對整個外部數(shù)據(jù)存儲器空間〔64K〕尋址。在執(zhí)行PUSH和POP指令時,也采用存放器間接尋址,這是堆棧指針SP用作間接存放器。上一頁下一頁返回第一節(jié)MCS-51指令系統(tǒng)概述5.基址存放器加變址存放器間接尋址這種尋址方式用于訪問程序存放器的一個單元,該單元的地址是基址存放器〔DPTR或PC〕的內(nèi)容與變地址存放器A的內(nèi)容之和。這種尋址方式對查表訪問特別有用。尋址方式的示意圖如圖3-2所示。三、指令執(zhí)行過程和指令符號意義單片機執(zhí)行程序的過程,實際上就是執(zhí)行我們所編制程序的過程,即執(zhí)行逐條指令的過程。計算機每執(zhí)行一條指令都可分為三個階段進行,即取指令——分析指令——執(zhí)行指令。上一頁下一頁返回第一節(jié)MCS-51指令系統(tǒng)概述取指令的任務是:根據(jù)程序計數(shù)器PC中的值從程序存儲器讀出現(xiàn)行指令,送到指令存放器。分析指令階段的任務是:將指令存放器中的指令操作碼讀出后進行譯碼,分析其指令性質(zhì),如指令要求操作數(shù),那么尋找操作數(shù)地址。計算機執(zhí)行程序的過程實際上就是逐條指令地重復上述操作過程,直至遇到停機指令或循環(huán)等到指令。一般計算機進行工作時,首先要通過外部設備把程序和數(shù)據(jù)通過輸入接口電路和數(shù)據(jù)總線送入到存儲器,然后逐條取出執(zhí)行。但單片機中的程序一般事先都已通過寫入器固化在片內(nèi)或片外程序存儲器中,因而一開機即可執(zhí)行指令。上一頁下一頁返回第一節(jié)MCS-51指令系統(tǒng)概述指令中操作數(shù)的描述符號:Rn——工作存放器R0~R7Ri——間接尋址存放器R0、R1Direct——直接地址,包括內(nèi)部128BRAM單元地址、26個SFR地址。#data——8位常數(shù)#data16——16位常數(shù)addr16——16位目的地址addr11——11位目的地址rel——8位帶符號的偏移地址DPTR——16位外部數(shù)據(jù)指針存放器上一頁下一頁返回第一節(jié)MCS-51指令系統(tǒng)概述bit——可直接位尋址的位A——累加器AB——存放器BC——進、借位標志位,或位累加器@——間接存放器或基址存放器的前綴/——指定位求反〔x〕——x中的內(nèi)容〔〔x〕〕——x中的地址中的內(nèi)容——當前指令存放的地址上一頁返回第二節(jié)MCS-51單片機指令詳解一、數(shù)據(jù)傳輸指令1.累加器相關的數(shù)據(jù)傳輸指令以下指令的功能是把源操作數(shù)的內(nèi)容送入累加器A,源操作數(shù)有存放器尋址、直接尋址、間接尋址和立即尋址等方式。2.內(nèi)部RAM單元之間的數(shù)據(jù)傳輸指令下一頁返回第二節(jié)MCS-51單片機指令詳解內(nèi)部RAM單元之間的數(shù)據(jù)傳輸可以使用直接尋址、存放器尋址以及存放器間接尋址方式。3.外部存儲器數(shù)據(jù)傳輸指令外部RAM傳輸指令通常使用間接尋址的方式,主要可以分為以Ri進行間接尋址和使用16位的DPTR進行的間接尋址。針對外部RAM的操作只能通過累加器A來完成,MCS-51系統(tǒng)中沒有專門的存儲器讀寫指令,實際上這些傳輸指令就是讀寫指令,為了區(qū)分是外部存放器,特別是指令助記符上增加了“X〞代表外部之意。具體的指令如下:上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解采用Ri的指令有:采用DPTR的指令有:上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解4.數(shù)據(jù)交換指令數(shù)據(jù)交換主要是在內(nèi)部RAM單元與累加器A之間進行,有整字節(jié)交換、半字節(jié)交換和累加器上下半字節(jié)交換指令。源操作數(shù)有存放器尋址、直接尋址和存放器間接尋址等方式,例如:上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解5.堆棧指令在MCS-51內(nèi)部RAM中可以設定一個后進先出LIFO的區(qū)域作為一個堆棧。在特殊功能存放器中有一個堆棧指針SP,它指出棧頂?shù)奈恢茫谥噶钕到y(tǒng)中有兩條用于數(shù)據(jù)操作的棧操作指令。首先是入棧指令,這條指令的功能是首先將棧指針SP加1,然后把直接地址指出的內(nèi)容送到棧指針SP指示的內(nèi)部RAM單元中。還有對應的出棧指令,出棧指令是將當前堆棧指針存放器SP所指示的單元的內(nèi)容傳送到該指令指定的直接尋址單元中去,然后SP中的內(nèi)容減1.堆棧操作實際上是通過堆棧指示器SP進行的讀寫操作,是以SP為間址存放器的間接尋址方式。因為SP是唯一的,所以在指令中把通過SP的間接尋址的操作數(shù)項隱含了,只表示出直接尋址的操作數(shù)項。上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解二、算術運算指令1.加法指令在加法指令中,又分位普通加法和帶進位的加法。這組加法指令的功能是把所指出的字節(jié)變量與累加器A的內(nèi)容相加,其結果放在累加器A中。如果位7有進位輸出,那么置“1〞進位標志Cy,否那么對Cy清“0〞,如果位3有進位輸出,置“1〞輔助進位標志Ac,否那么對Ac清“0〞;如果位6有進位輸出而位7沒有進位,或者位7有進位輸出而位6沒有進位,那么置“1〞溢出標志OV,否那么對OV清“0〞。源操作數(shù)有存放器尋址、直接尋址、存放器間接尋址和立即尋址等方式。帶進位的加法,除了與上述的運算相似外,還增加了進位標制Cy參加運算;上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解2.減法指令通常的減法運算都帶有借位,這與帶進位的加法十分類似:上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解3.增1減1指令這些指令可以實現(xiàn)對相應的操作數(shù)的增1和減1操作,這種操作不會影響PSW的狀態(tài),具體指令如下:以上為自增1運算,只需將INC更改為DEC,那么可以實現(xiàn)減1運算,但增1運算中還有INCDPTR,實現(xiàn)DPTR增1,而減1中卻沒有這條指令。上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解4.乘除指令MULABDIVABMUL為乘法指令,其功能是把累加器A和存放器B中的無符號8位整數(shù)相乘,其16位積得低位字節(jié)在累加器A中,高位字節(jié)在B中。如果積大于255,那么置位溢出標志位OV,否那么對OV清“0〞。進位標志位總是清“0〞。DIV為除法指令,該指令的功能是把累加器A中8位無符號整數(shù)除以B中的8位無符號整數(shù),所得的商〔為整數(shù)〕存放在累加器A中,余數(shù)在存放器B中,清“0〞Cy和溢出標志位OV。如果B得內(nèi)容為“0〞〔除數(shù)為“0〞〕,那么結果A,B中的內(nèi)容不定,并置位溢出標志位OV。上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解5.十進制調(diào)整指令DAA這條指令對累加器A由前兩個變量〔壓縮的BCD碼〕相加的結果進行十進制調(diào)整使A中的結果為二進制碼數(shù)。三、邏輯運算指令邏輯運算指令包括與、或、異或、循環(huán)、累加器清零與求反指令。這些指令中的操作數(shù)都是8位,它們在執(zhí)行時,不影響標志位。上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解1.與〔AND〕邏輯運算指令邏輯運算都是按位進行的,邏輯與運算用符號∧表示。以上這幾條指令運算結果存放在A中,下面這兩條指令的運算結果那么存放在直接地址的地址單元中:上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解2.或〔OR〕邏輯運算指令邏輯或運算用符號∨表示。以上幾條指令運算結果存放在A中,下面這兩條指令的運算結果那么存放在直接尋址的地址單元中:上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解3.異或邏輯運算指令邏輯異或運算的規(guī)那么是,兩運算數(shù)相同時為假〔0〕,兩運算數(shù)相異時為真〔1〕,這種運算用符號表示。以上這幾條指令運算結果存放在A中,下面這兩條指令的運算結果那么存放在直接地址的地址單元中:上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解4.累加器清零和求反指令四、控制轉移指令控制轉移指令包括無條件轉移指令、條件轉移指定、比較轉移指令、循環(huán)轉移指令及調(diào)用與返回指令。1.無條件轉移指令這里又分為長轉移、短轉移、絕對轉移和變址尋址轉移4種方式。長轉移指令執(zhí)行時可以把指令的第二和第三字節(jié)分別裝入PC的高位和低位字節(jié)中,無條件地轉向指定地址。轉移的目標地址可以在64K程序存儲器地址空間的任何地方。指令格式如下:上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解對于短轉移指令,在執(zhí)行時在PC加2之后,把指令的有符號的偏移量rel加到PC上,并計算出轉向地址。因此轉向的目標地址可以在這條指令前128字節(jié)到后127字節(jié)之間。指令格式如下:絕對轉移指令是2KB范圍內(nèi)的無條件跳轉指令。AJMP把MCS-51的64K程序存儲器空間劃分為32個區(qū),每個區(qū)為2K字節(jié),轉移目標地址必須與AJMP下一條指令的第一個字節(jié)在同一2KB范圍內(nèi),否那么,將引起混亂,如果AJMP正好落在區(qū)底的兩個單元內(nèi),程序就轉移到下一個區(qū)中去了,這時不會出現(xiàn)問題。上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解執(zhí)行該指令時,先將PC加2,然后把addr11送入PC的低11位,PC高位不變,程序轉移到指定的地方。指令格式如下:變址尋址轉移指令的功能是把累加器中8位元符號數(shù)與數(shù)據(jù)指針DPTR的16位數(shù)相加,結果作為下條指令地址送入PC,不改變累加器和數(shù)據(jù)指針DPTR內(nèi)容,也不影響標志。指令格式如下:上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解2.條件轉移指令條件轉移指令又可以分為判零轉移、數(shù)值比較轉移和減1轉移三種。判零轉移是有條件的相對轉移指令,指令如下:上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解數(shù)值比較轉移指令的功能是比較前面兩個操作數(shù)的大小,如果他們的值不相等那么轉移,在PC加到下一條指令的起始地址后,通過把指令最后一個字節(jié)的有符號的相對偏移量加到PC上,并計算出轉向地址。如果第一操作數(shù)〔無符號數(shù)〕小于第二操作數(shù)〔無符號整數(shù)〕,那么置進位標志位Cy,否那么對Cy清“0〞,不影響任何一個操作數(shù)的內(nèi)容。指令格式如下:上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解這組指令將源操作數(shù)(Rn,direct)減1,結果回送到源操作數(shù)存放器或存儲器中去。如果結果不為0那么轉移。源操作數(shù)有存放器尋址和直接尋址。允許程序員把內(nèi)部RAM單元用作程序循環(huán)計數(shù)器。指令格式如下:DJNZRn,relDJNZdirect,rel3.子程序調(diào)用和返回指令子程序結構是一種重要的程序結構。在一個程序中經(jīng)常遇到反復屢次執(zhí)行程序段的情況,如果重復書寫這個程序段,會使程序變得冗長而雜亂,因而采用了功能較為重復的子程序。上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解調(diào)用和返回構成了子程序調(diào)用的完整過程。為了實現(xiàn)這一過程,必須有子程序調(diào)用指令和返回指令。返回指令那么應該是子程序的最后一條指令。執(zhí)行完這條指令之后,程序返回主程序斷點處繼續(xù)執(zhí)行。上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解還有子程序返回指令RET和RETI,分別放置了在子程序和中斷效勞程序的最后。4、空操作指令這條語句什么也不做,消耗一個機器周期的時間,通常用于程序的延時。上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解五、位操作指令1.數(shù)據(jù)位傳送指令這組指令的功能是把由源操作數(shù)指出的位變量送到目的操作數(shù)指定的單元中去。其中一個操作數(shù)必須為進位標志,另一個可以是任何直接尋址位。不影響其他存放器或標志。指令格式如下:上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解2.修改變量指令這組指令將操作數(shù)指出的位清“0〞、取反、置“1〞,不影響其他標志。上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解3.位變量的邏輯運算實際上位運算全部是邏輯運算,共有與、或、非三種指令。這里僅以與運算為例來說明,或運算符位ORL,非運算已在上文中替代。上一頁下一頁返回第二節(jié)MCS-51單片機指令詳解4.條件轉移類指令與前文介紹的條件轉移指令類似,位運算也可以進行條件轉移。上一頁返回第三節(jié)MCS-51單片機系統(tǒng)程序設計實例一、匯編語言程序的根本結構各種計算機的匯編語言的語法規(guī)那么根本相同,且具有相同的語句格式。先以MCS-51匯編語言作具體說明。MCS-51匯編語言的語句格式表示如下:下一頁返回第三節(jié)MCS-51單片機系統(tǒng)程序設計實例其中,方括號括起來的是可選局部,可有可無,視需要而定。標號是指令的符號的地址,有了標號,程序中的其他語句才能訪問該語句。標號的規(guī)那么:標號由1~8個ASCII字符組成,但頭一個字符必須是字母,其余可以是字母,數(shù)字或其他特定字符。不能使用本匯編語言已定義了符號作為符號,如指令助記符、偽指令助記符以及存放器的符號名稱。標號后必須跟以冒號〔:〕同一標號在一個程序中只能定義一次,不能重復定義。上一頁下一頁返回第三節(jié)MCS-51單片機系統(tǒng)程序設計實例一條語句可以有標號,也可以沒有標號,標號的有無取決于本程序中的其他語句是否需要訪問這條語句操作碼用于規(guī)定語句執(zhí)行的操作內(nèi)容。操作碼是以指令助記符或偽指令助記符表示的,操作碼是匯編指令格式中唯一不能空缺的局部。操作數(shù)用于給指令和操作提示數(shù)據(jù)或地址。注釋不屬于語句的功能局部,它只是對語句的解釋說明。分界符用于把語句格式中的各局部隔開,以便于匯編語言程序區(qū)分,包括空格,冒號,分號或逗號等多種符號,在MCS-51中,冒號〔:〕用于標號之后;空格〔〕用于操作碼和操作數(shù)之間;逗號〔,〕用于操作數(shù)之間;分號〔;〕用于注釋之前。上一頁下一頁返回第三節(jié)MCS-51單片機系統(tǒng)程序設計實例匯編語言程序的結構形式主要分為三種:順序結構,分支結構和循環(huán)結構。順序結構是最簡單的程序結構,在順序結構中既無分支,循環(huán),也不調(diào)用子程序,程序執(zhí)行時一條一條地按順序執(zhí)行指令。分支結構使用條件轉移指令實現(xiàn),即根據(jù)條件對程序的執(zhí)行進行判斷,滿足條件那么進行程序轉移,否那么程序順序執(zhí)行。循環(huán)結構那么在程序的某個區(qū)段進行反復的運行,直到滿足某種條件結束,而有的程序那么完全不能跳出的死循環(huán),將會無休止地運行下去。上一頁下一頁返回第三節(jié)MCS-51單片機系統(tǒng)程序設計實例二、簡單程序設計簡單程序設計指的就是按照順序來執(zhí)行程序,程序中可以包含某種算法。[實例]求解多項式y(tǒng)=2a-b。假設操作數(shù)a放在存放器R3,操作數(shù)b放在存放器R4;結果分別放在存放器R5和R6.上一頁下一頁返回第三節(jié)MCS-51單片機系統(tǒng)程序設計實例上一頁下一頁返回第三節(jié)MCS-51單片機系統(tǒng)程序設計實例三、分支和循環(huán)程序在許多情況下,需要根據(jù)不同的條件轉向不同的處理程序,這種結構的程序稱為分支程序。MCS-51單片機設置的條件轉移指令、比較轉移指令和位轉移指令可以實現(xiàn)程序的分支。圖3-3為分支程序框圖。[實例]設a存放在累加器R2中,b存放在存放器R3中,要求按下式計算y值,并將結果y存于累加器A中。上一頁下一頁返回第三節(jié)MCS-51單片機系統(tǒng)程序設計實例上一頁下一頁返回第三節(jié)MCS-51單片機系統(tǒng)程序設計實例循環(huán)程序是指一段反復執(zhí)行的程序。圖3-4為循環(huán)程序框圖。[實例]將內(nèi)部數(shù)據(jù)存儲器38H~6FH單元的內(nèi)容傳送到外部數(shù)據(jù)存儲器以1000H開始的連續(xù)單元中去。38H~6FH單元向外傳數(shù)據(jù),需傳送56次。將R6作為循環(huán)計數(shù)存放器,有如下的流程圖:上一頁下一頁返回第三節(jié)MCS-51單片機系統(tǒng)程序設計實例四、查表程序查表就是根據(jù)自變量x的值,在表總查找y,使y=f〔x〕。x和y可以使各種類型的數(shù)據(jù)。表的結構也是多種多樣的。表格可以放在程序存儲器中,也可以存放在數(shù)據(jù)存儲器中。在單片機應用系統(tǒng)中,這類程序使用頻繁。利用它能防止進行復雜的運算或轉換過程,故它廣泛應用于顯示、打印字符的轉換以及數(shù)據(jù)補償、計算、轉換等程序中。一般情況下,對自變量x是有變化規(guī)律的數(shù)據(jù),可以根據(jù)這一規(guī)律形成地址,對應的y那么存放于該地址單元中;對x是沒有變化規(guī)律的數(shù)據(jù),在表中存放x及其對應的y值。上一頁下一頁

溫馨提示

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

評論

0/150

提交評論