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

下載本文檔

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

文檔簡介

1、第三章第三章 MCS-51單片機系統(tǒng)程序設(shè)計單片機系統(tǒng)程序設(shè)計第一節(jié)第一節(jié) MCS-51指令系統(tǒng)概述指令系統(tǒng)概述第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解第三節(jié)第三節(jié) MCS-51單片機系統(tǒng)程序設(shè)計實例單片機系統(tǒng)程序設(shè)計實例第一節(jié)第一節(jié) MCS-51指令系統(tǒng)概述指令系統(tǒng)概述一、概述一、概述MCS-51指令系統(tǒng)是一種簡明易掌握、效率較高的指令系統(tǒng)。指令系統(tǒng)是一種簡明易掌握、效率較高的指令系統(tǒng)。MCS-51的基本指令共的基本指令共111條,其中單字節(jié)指令條,其中單字節(jié)指令49條,雙條,雙字節(jié)指令字節(jié)指令45條,三字節(jié)指令條,三字節(jié)指令17條。從指令的執(zhí)行時間來看,條。從指令的執(zhí)行時間來

2、看,單機器周期指令單機器周期指令64條,雙機器周期指令條,雙機器周期指令45條,只有乘、除條,只有乘、除兩條指令的執(zhí)行時間為兩條指令的執(zhí)行時間為4個機器周期。個機器周期。指令的表示方法稱之為指令格式,其內(nèi)容包括指令的長度和指令的表示方法稱之為指令格式,其內(nèi)容包括指令的長度和指令內(nèi)部信息的安排等。一條指令通常由兩部分組成,即操指令內(nèi)部信息的安排等。一條指令通常由兩部分組成,即操作碼和操作數(shù)。作碼和操作數(shù)。下一頁返回第一節(jié)第一節(jié) MCS-51指令系統(tǒng)概述指令系統(tǒng)概述通常在通常在MCS-51指令系統(tǒng)中,有一字節(jié)、二字節(jié)和三字節(jié)等指令系統(tǒng)中,有一字節(jié)、二字節(jié)和三字節(jié)等不同長度的指令。一字節(jié)指令只有一個

3、字節(jié),操作碼和操作不同長度的指令。一字節(jié)指令只有一個字節(jié),操作碼和操作數(shù)信息同在其中。二字節(jié)指令包括兩個字節(jié),其中一個字節(jié)數(shù)信息同在其中。二字節(jié)指令包括兩個字節(jié),其中一個字節(jié)為操作碼,第二個字節(jié)是操作數(shù)。三字節(jié)指令中,操作碼占為操作碼,第二個字節(jié)是操作數(shù)。三字節(jié)指令中,操作碼占一個字節(jié),操作數(shù)占兩個字節(jié),其中操作數(shù)既可能是數(shù)據(jù),一個字節(jié),操作數(shù)占兩個字節(jié),其中操作數(shù)既可能是數(shù)據(jù),也可能是地址。也可能是地址。二、尋址方式二、尋址方式MCS-51共有共有5種尋址方式,現(xiàn)介紹如下:種尋址方式,現(xiàn)介紹如下:上一頁 下一頁返回第一節(jié)第一節(jié) MCS-51指令系統(tǒng)概述指令系統(tǒng)概述1.立即尋址立即尋址操作數(shù)就

4、寫在指令中,和操作碼一起放在程序存儲器中。把操作數(shù)就寫在指令中,和操作碼一起放在程序存儲器中。把“#”號放在立即數(shù)前面,以表示該尋址方式為立即尋址,如號放在立即數(shù)前面,以表示該尋址方式為立即尋址,如#20H。2.寄存器尋址寄存器尋址操作數(shù)放在寄存中,在指令中直接以寄存器的名字來表示操操作數(shù)放在寄存中,在指令中直接以寄存器的名字來表示操作數(shù)的地址。例如作數(shù)的地址。例如MOV A,R0就屬于寄存器尋址,即將就屬于寄存器尋址,即將RO寄存器的內(nèi)容送到累加器寄存器的內(nèi)容送到累加器A中。中。3.直接尋址直接尋址操作數(shù)放在單片機的內(nèi)部操作數(shù)放在單片機的內(nèi)部RAM某單元中,在指令中直接寫出某單元中,在指令中

5、直接寫出該單元的地址。如前例的該單元的地址。如前例的ADD A,70H中的中的70H。上一頁 下一頁返回第一節(jié)第一節(jié) MCS-51指令系統(tǒng)概述指令系統(tǒng)概述4.寄存器間接尋址寄存器間接尋址寄存器間接尋址方式可用于訪問內(nèi)部寄存器間接尋址方式可用于訪問內(nèi)部RAM或外部數(shù)據(jù)存儲器?;蛲獠繑?shù)據(jù)存儲器。訪問內(nèi)部訪問內(nèi)部RAM或外部數(shù)據(jù)存儲器的低或外部數(shù)據(jù)存儲器的低256個字節(jié)時,可采個字節(jié)時,可采用用R0或或R1作為間接寄存器。這類指令為單字節(jié)指令,其最作為間接寄存器。這類指令為單字節(jié)指令,其最低位是表示采用低位是表示采用R0還是還是R1作為間接寄存器。這種尋址方式作為間接寄存器。這種尋址方式的示意圖如的

6、示意圖如圖圖3-1所示。訪問外部數(shù)據(jù)存儲器的低所示。訪問外部數(shù)據(jù)存儲器的低256字節(jié)字節(jié)時,只要把時,只要把MOV改為改為MOVX就行了。訪問外部數(shù)據(jù)存儲器,就行了。訪問外部數(shù)據(jù)存儲器,還可用數(shù)據(jù)指針還可用數(shù)據(jù)指針DPTR作為間址寄存器,作為間址寄存器,DPTR是是16位寄存位寄存器,故它可對整個外部數(shù)據(jù)存儲器空間(器,故它可對整個外部數(shù)據(jù)存儲器空間(64K)尋址。在執(zhí))尋址。在執(zhí)行行PUSH和和POP指令時,也采用寄存器間接尋址,這是堆棧指令時,也采用寄存器間接尋址,這是堆棧指針指針SP用作間接寄存器。用作間接寄存器。上一頁 下一頁返回第一節(jié)第一節(jié) MCS-51指令系統(tǒng)概述指令系統(tǒng)概述5.基

7、址寄存器加變址寄存器間接尋址基址寄存器加變址寄存器間接尋址這種尋址方式用于訪問程序寄存器的一個單元,該單元的地這種尋址方式用于訪問程序寄存器的一個單元,該單元的地址是基址寄存器(址是基址寄存器(DPTR或或PC)的內(nèi)容與變地址寄存器)的內(nèi)容與變地址寄存器A的的內(nèi)容之和。這種尋址方式對查表訪問特別有用。尋址方式的內(nèi)容之和。這種尋址方式對查表訪問特別有用。尋址方式的示意圖如示意圖如圖圖3-2所示。所示。三、指令執(zhí)行過程和指令符號意義三、指令執(zhí)行過程和指令符號意義單片機執(zhí)行程序的過程,實際上就是執(zhí)行我們所編制程序的單片機執(zhí)行程序的過程,實際上就是執(zhí)行我們所編制程序的過程,即執(zhí)行逐條指令的過程。計算機

8、每執(zhí)行一條指令都可過程,即執(zhí)行逐條指令的過程。計算機每執(zhí)行一條指令都可分為三個階段進行,即取指令分為三個階段進行,即取指令分析指令分析指令執(zhí)行指令。執(zhí)行指令。上一頁 下一頁返回第一節(jié)第一節(jié) MCS-51指令系統(tǒng)概述指令系統(tǒng)概述取指令的任務(wù)是:根據(jù)程序計數(shù)器取指令的任務(wù)是:根據(jù)程序計數(shù)器PC中的值從程序存儲器讀中的值從程序存儲器讀出現(xiàn)行指令,送到指令寄存器。分析指令階段的任務(wù)是:將出現(xiàn)行指令,送到指令寄存器。分析指令階段的任務(wù)是:將指令寄存器中的指令操作碼讀出后進行譯碼,分析其指令性指令寄存器中的指令操作碼讀出后進行譯碼,分析其指令性質(zhì),如指令要求操作數(shù),則尋找操作數(shù)地址。計算機執(zhí)行程質(zhì),如指令

9、要求操作數(shù),則尋找操作數(shù)地址。計算機執(zhí)行程序的過程實際上就是逐條指令地重復(fù)上述操作過程,直至遇序的過程實際上就是逐條指令地重復(fù)上述操作過程,直至遇到停機指令或循環(huán)等到指令。到停機指令或循環(huán)等到指令。一般計算機進行工作時,首先要通過外部設(shè)備把程序和數(shù)據(jù)一般計算機進行工作時,首先要通過外部設(shè)備把程序和數(shù)據(jù)通過輸入接口電路和數(shù)據(jù)總線送入到存儲器,然后逐條取出通過輸入接口電路和數(shù)據(jù)總線送入到存儲器,然后逐條取出執(zhí)行。但單片機中的程序一般事先都已通過寫入器固化在片執(zhí)行。但單片機中的程序一般事先都已通過寫入器固化在片內(nèi)或片外程序存儲器中,因而一開機即可執(zhí)行指令。內(nèi)或片外程序存儲器中,因而一開機即可執(zhí)行指令

10、。上一頁 下一頁返回第一節(jié)第一節(jié) MCS-51指令系統(tǒng)概述指令系統(tǒng)概述指令中操作數(shù)的描述符號:指令中操作數(shù)的描述符號:Rn工作寄存器工作寄存器R0R7Ri間接尋址寄存器間接尋址寄存器R0、R1Direct直接地址,包括內(nèi)部直接地址,包括內(nèi)部128B RAM單元地址、單元地址、26個個SFR地址。地址。#data8位常數(shù)位常數(shù)#data1616位常數(shù)位常數(shù)addr1616位目的地址位目的地址addr1111位目的地址位目的地址rel8位帶符號的偏移地址位帶符號的偏移地址DPTR16位外部數(shù)據(jù)指針寄存器位外部數(shù)據(jù)指針寄存器上一頁 下一頁返回第一節(jié)第一節(jié) MCS-51指令系統(tǒng)概述指令系統(tǒng)概述bit可

11、直接位尋址的位可直接位尋址的位A累加器累加器AB寄存器寄存器BC進、借位標(biāo)志位,或位累加器進、借位標(biāo)志位,或位累加器間接寄存器或基址寄存器的前綴間接寄存器或基址寄存器的前綴/指定位求反指定位求反(x)x中的內(nèi)容中的內(nèi)容(x)x中的地址中的內(nèi)容中的地址中的內(nèi)容 當(dāng)前指令存放的地址當(dāng)前指令存放的地址上一頁 返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解一、數(shù)據(jù)傳輸指令一、數(shù)據(jù)傳輸指令1.累加器相關(guān)的數(shù)據(jù)傳輸指令累加器相關(guān)的數(shù)據(jù)傳輸指令以下指令的功能是把源操作數(shù)的內(nèi)容送入累加器以下指令的功能是把源操作數(shù)的內(nèi)容送入累加器A,源操作,源操作數(shù)有寄存器尋址、直接尋址、間接尋址和立即尋址等方式。

12、數(shù)有寄存器尋址、直接尋址、間接尋址和立即尋址等方式。2.內(nèi)部內(nèi)部RAM單元之間的數(shù)據(jù)傳輸指令單元之間的數(shù)據(jù)傳輸指令下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解內(nèi)部內(nèi)部RAM單元之間的數(shù)據(jù)傳輸可以使用直接尋址、寄存器尋單元之間的數(shù)據(jù)傳輸可以使用直接尋址、寄存器尋址以及寄存器間接尋址方式。址以及寄存器間接尋址方式。3.外部存儲器數(shù)據(jù)傳輸指令外部存儲器數(shù)據(jù)傳輸指令外部外部RAM傳輸指令通常使用間接尋址的方式,主要可以分為傳輸指令通常使用間接尋址的方式,主要可以分為以以Ri進行間接尋址和使用進行間接尋址和使用16位的位的DPTR進行的間接尋址。針進行的間接尋址。針對外部對外部RAM

13、的操作只能通過累加器的操作只能通過累加器A來完成,來完成,MCS-51系統(tǒng)系統(tǒng)中沒有專門的存儲器讀寫指令,實際上這些傳輸指令就是讀中沒有專門的存儲器讀寫指令,實際上這些傳輸指令就是讀寫指令,為了區(qū)分是外部寄存器,特別是指令助記符上增加寫指令,為了區(qū)分是外部寄存器,特別是指令助記符上增加了了“X”代表外部之意。具體的指令如下:代表外部之意。具體的指令如下:上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解采用采用Ri的指令有:的指令有:采用采用DPTR的指令有:的指令有:上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解4.數(shù)據(jù)交換指令數(shù)據(jù)交換指令數(shù)據(jù)

14、交換主要是在內(nèi)部數(shù)據(jù)交換主要是在內(nèi)部RAM單元與累加器單元與累加器A之間進行,有整之間進行,有整字節(jié)交換、半字節(jié)交換和累加器高低半字節(jié)交換指令。源操字節(jié)交換、半字節(jié)交換和累加器高低半字節(jié)交換指令。源操作數(shù)有寄存器尋址、直接尋址和寄存器間接尋址等方式,例作數(shù)有寄存器尋址、直接尋址和寄存器間接尋址等方式,例如:如:上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解5.堆棧指令堆棧指令在在MCS-51內(nèi)部內(nèi)部RAM中可以設(shè)定一個后進先出中可以設(shè)定一個后進先出LIFO的區(qū)域的區(qū)域作為一個堆棧。在特殊功能寄存器中有一個堆棧指針作為一個堆棧。在特殊功能寄存器中有一個堆棧指針SP,它,

15、它指出棧頂?shù)奈恢?,在指令系統(tǒng)中有兩條用于數(shù)據(jù)操作的棧操作指出棧頂?shù)奈恢?,在指令系統(tǒng)中有兩條用于數(shù)據(jù)操作的棧操作指令。首先是入棧指令,這條指令的功能是首先將棧指針指令。首先是入棧指令,這條指令的功能是首先將棧指針SP加加1,然后把直接地址指出的內(nèi)容送到棧指針,然后把直接地址指出的內(nèi)容送到棧指針SP指示的內(nèi)部指示的內(nèi)部RAM單元中。還有對應(yīng)的出棧指令,出棧指令是將當(dāng)前堆棧單元中。還有對應(yīng)的出棧指令,出棧指令是將當(dāng)前堆棧指針寄存器指針寄存器SP所指示的單元的內(nèi)容傳送到該指令指定的直接所指示的單元的內(nèi)容傳送到該指令指定的直接尋址單元中去,然后尋址單元中去,然后SP中的內(nèi)容減中的內(nèi)容減1.堆棧操作實際上

16、是通過堆棧操作實際上是通過堆棧指示器堆棧指示器SP進行的讀寫操作,是以進行的讀寫操作,是以SP為間址寄存器的間接為間址寄存器的間接尋址方式。因為尋址方式。因為SP是唯一的,所以在指令中把通過是唯一的,所以在指令中把通過SP的間接的間接尋址的操作數(shù)項隱含了,只表示出直接尋址的操作數(shù)項。尋址的操作數(shù)項隱含了,只表示出直接尋址的操作數(shù)項。上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解二、算術(shù)運算指令二、算術(shù)運算指令1.加法指令加法指令在加法指令中,又分位普通加法和帶進位的加法。這組加法在加法指令中,又分位普通加法和帶進位的加法。這組加法指令的功能是把所指出的字節(jié)變量與累加器

17、指令的功能是把所指出的字節(jié)變量與累加器A的內(nèi)容相加,的內(nèi)容相加,其結(jié)果放在累加器其結(jié)果放在累加器A中。如果位中。如果位7有進位輸出,則置有進位輸出,則置“1”進進位標(biāo)志位標(biāo)志Cy,否則對,否則對Cy清清“0”,如果位,如果位3有進位輸出,置有進位輸出,置“1”輔助進位標(biāo)志輔助進位標(biāo)志Ac,否則對,否則對Ac清清“0”;如果位;如果位6有進位輸出有進位輸出而位而位7沒有進位,或者位沒有進位,或者位7有進位輸出而位有進位輸出而位6沒有進位,則置沒有進位,則置“1”溢出標(biāo)志溢出標(biāo)志OV,否則對,否則對OV清清“0”。源操作數(shù)有寄存器。源操作數(shù)有寄存器尋址、直接尋址、寄存器間接尋址和立即尋址等方式。尋

18、址、直接尋址、寄存器間接尋址和立即尋址等方式。帶進位的加法,除了與上述的運算相似外,還增加了進位標(biāo)帶進位的加法,除了與上述的運算相似外,還增加了進位標(biāo)制制Cy參加運算;參加運算;上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解2.減法指令減法指令通常的減法運算都帶有借位,這與帶進位的加法十分類似:通常的減法運算都帶有借位,這與帶進位的加法十分類似:上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解3.增增1減減1指令指令這些指令可以實現(xiàn)對相應(yīng)的操作數(shù)的增這些指令可以實現(xiàn)對相應(yīng)的

19、操作數(shù)的增1和減和減1操作,這種操操作,這種操作不會影響作不會影響PSW的狀態(tài),具體指令如下:的狀態(tài),具體指令如下:以上為自增以上為自增1運算,只需將運算,只需將INC更改為更改為DEC,則可以實現(xiàn)減,則可以實現(xiàn)減1運算,但增運算,但增1運算中還有運算中還有INC DPTR,實現(xiàn),實現(xiàn)DPTR增增1,而,而減減1中卻沒有這條指令。中卻沒有這條指令。上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解4.乘除指令乘除指令MUL ABDIV ABMUL為乘法指令,其功能是把累加器為乘法指令,其功能是把累加器A和寄存器和寄存器B中的無符中的無符號號8位整數(shù)相乘,其位整數(shù)相乘,其1

20、6位積得低位字節(jié)在累加器位積得低位字節(jié)在累加器A中,高位中,高位字節(jié)在字節(jié)在B中。如果積大于中。如果積大于255,則置位溢出標(biāo)志位,則置位溢出標(biāo)志位OV,否則,否則對對OV清清“0”。進位標(biāo)志位總是清。進位標(biāo)志位總是清“0”。DIV為除法指令,為除法指令,該指令的功能是把累加器該指令的功能是把累加器A中中8位無符號整數(shù)除以位無符號整數(shù)除以B中的中的8位位無符號整數(shù),所得的商(為整數(shù))存放在累加器無符號整數(shù),所得的商(為整數(shù))存放在累加器A中,余數(shù)中,余數(shù)在寄存器在寄存器B中,清中,清“0”Cy和溢出標(biāo)志位和溢出標(biāo)志位OV。如果。如果B得內(nèi)容得內(nèi)容為為“0”(除數(shù)為(除數(shù)為“0”),則結(jié)果),則

21、結(jié)果A,B中的內(nèi)容不定,并置中的內(nèi)容不定,并置位溢出標(biāo)志位位溢出標(biāo)志位OV。上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解5.十進制調(diào)整指令十進制調(diào)整指令DA A這條指令對累加器這條指令對累加器A由前兩個變量(壓縮的由前兩個變量(壓縮的BCD碼)相加的碼)相加的結(jié)果進行十進制調(diào)整使結(jié)果進行十進制調(diào)整使A中的結(jié)果為二進制碼數(shù)。中的結(jié)果為二進制碼數(shù)。三、邏輯運算指令三、邏輯運算指令邏輯運算指令包括與、或、異或、循環(huán)、累加器清零與求反邏輯運算指令包括與、或、異或、循環(huán)、累加器清零與求反指令。這些指令中的操作數(shù)都是指令。這些指令中的操作數(shù)都是8位,它們在執(zhí)行時,不影位,它們在

22、執(zhí)行時,不影響標(biāo)志位。響標(biāo)志位。上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解1.與(與(AND)邏輯運算指令)邏輯運算指令邏輯運算都是按位進行的,邏輯與運算用符號邏輯運算都是按位進行的,邏輯與運算用符號表示。以上表示。以上這幾條指令運算結(jié)果存放在這幾條指令運算結(jié)果存放在A中,下面這兩條指令的運算結(jié)中,下面這兩條指令的運算結(jié)果則存放在直接地址的地址單元中:果則存放在直接地址的地址單元中:上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解2.或(或(OR)邏輯運算指令)邏輯運算指令邏輯或運算用符號邏輯或運算用符號表示。以上幾條指令運算結(jié)果存放在表示

23、。以上幾條指令運算結(jié)果存放在A中,下面這兩條指令的運算結(jié)果則存放在直接尋址的地址單中,下面這兩條指令的運算結(jié)果則存放在直接尋址的地址單元中元中:上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解3.異或邏輯運算指令異或邏輯運算指令邏輯異或運算的規(guī)則是,兩運算數(shù)相同時為假(邏輯異或運算的規(guī)則是,兩運算數(shù)相同時為假(0),兩運),兩運算數(shù)相異時為真(算數(shù)相異時為真(1),這種運算用符號),這種運算用符號 表示。以上這幾表示。以上這幾條指令運算結(jié)果存放在條指令運算結(jié)果存放在A中,下面這兩條指令的運算結(jié)果則中,下面這兩條指令的運算結(jié)果則存放在直接地址的地址單元中:存放在直接地址的

24、地址單元中:上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解4.累加器清零和求反指令累加器清零和求反指令四、控制轉(zhuǎn)移指令四、控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令包括無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指定、比較轉(zhuǎn)控制轉(zhuǎn)移指令包括無條件轉(zhuǎn)移指令、條件轉(zhuǎn)移指定、比較轉(zhuǎn)移指令、循環(huán)轉(zhuǎn)移指令及調(diào)用與返回指令。移指令、循環(huán)轉(zhuǎn)移指令及調(diào)用與返回指令。1.無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令這里又分為長轉(zhuǎn)移、短轉(zhuǎn)移、絕對轉(zhuǎn)移和變址尋址轉(zhuǎn)移這里又分為長轉(zhuǎn)移、短轉(zhuǎn)移、絕對轉(zhuǎn)移和變址尋址轉(zhuǎn)移4種種方式。長轉(zhuǎn)移指令執(zhí)行時可以把指令的第二和第三字節(jié)分別方式。長轉(zhuǎn)移指令執(zhí)行時可以把指令的第二和第三字節(jié)分別裝入裝入PC的高位和低

25、位字節(jié)中,無條件地轉(zhuǎn)向指定地址。轉(zhuǎn)移的高位和低位字節(jié)中,無條件地轉(zhuǎn)向指定地址。轉(zhuǎn)移的目標(biāo)地址可以在的目標(biāo)地址可以在64K程序存儲器地址空間的任何地方。指程序存儲器地址空間的任何地方。指令格式如下:令格式如下:上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解對于短轉(zhuǎn)移指令,在執(zhí)行時在對于短轉(zhuǎn)移指令,在執(zhí)行時在PC加加2之后,把指令的有符號之后,把指令的有符號的偏移量的偏移量rel加到加到PC上,并計算出轉(zhuǎn)向地址。因此轉(zhuǎn)向的目上,并計算出轉(zhuǎn)向地址。因此轉(zhuǎn)向的目標(biāo)地址可以在這條指令前標(biāo)地址可以在這條指令前128字節(jié)到后字節(jié)到后127字節(jié)之間。指令字節(jié)之間。指令格式如下:格式如

26、下:絕對轉(zhuǎn)移指令是絕對轉(zhuǎn)移指令是2KB范圍內(nèi)的無條件跳轉(zhuǎn)指令。范圍內(nèi)的無條件跳轉(zhuǎn)指令。AJMP把把MCS-51的的64K程序存儲器空間劃分為程序存儲器空間劃分為32個區(qū),每個區(qū)為個區(qū),每個區(qū)為2K字節(jié),轉(zhuǎn)移目標(biāo)地址必須與字節(jié),轉(zhuǎn)移目標(biāo)地址必須與AJMP下一條指令的第一個字下一條指令的第一個字節(jié)在同一節(jié)在同一2KB范圍內(nèi),否則,將引起混亂,如果范圍內(nèi),否則,將引起混亂,如果AJMP正好正好落在區(qū)底的兩個單元內(nèi),程序就轉(zhuǎn)移到下一個區(qū)中去了,這落在區(qū)底的兩個單元內(nèi),程序就轉(zhuǎn)移到下一個區(qū)中去了,這時不會出現(xiàn)問題。時不會出現(xiàn)問題。上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解執(zhí)

27、行該指令時,先將執(zhí)行該指令時,先將PC加加2,然后把,然后把addr11送入送入PC的低的低11位,位,PC高位不變,程序轉(zhuǎn)移到指定的地方。指令格式如高位不變,程序轉(zhuǎn)移到指定的地方。指令格式如下:下:變址尋址轉(zhuǎn)移指令的功能是把累加器中變址尋址轉(zhuǎn)移指令的功能是把累加器中8位元符號數(shù)與數(shù)據(jù)位元符號數(shù)與數(shù)據(jù)指針指針DPTR的的16位數(shù)相加,結(jié)果作為下條指令地址送入位數(shù)相加,結(jié)果作為下條指令地址送入PC,不改變累加器和數(shù)據(jù)指針不改變累加器和數(shù)據(jù)指針DPTR內(nèi)容,也不影響標(biāo)志。指令內(nèi)容,也不影響標(biāo)志。指令格式如下:格式如下:上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解2.條件

28、轉(zhuǎn)移指令條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令又可以分為判零轉(zhuǎn)移、數(shù)值比較轉(zhuǎn)移和減條件轉(zhuǎn)移指令又可以分為判零轉(zhuǎn)移、數(shù)值比較轉(zhuǎn)移和減1轉(zhuǎn)轉(zhuǎn)移三種。判零轉(zhuǎn)移是有條件的相對轉(zhuǎn)移指令,指令如下:移三種。判零轉(zhuǎn)移是有條件的相對轉(zhuǎn)移指令,指令如下:上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解數(shù)值比較轉(zhuǎn)移指令的功能是比較前面兩個操作數(shù)的大小,如數(shù)值比較轉(zhuǎn)移指令的功能是比較前面兩個操作數(shù)的大小,如果他們的值不相等則轉(zhuǎn)移,在果他們的值不相等則轉(zhuǎn)移,在PC加到下一條指令的起始地址加到下一條指令的起始地址后,通過把指令最后一個字節(jié)的有符號的相對偏移量加到后,通過把指令最后一個字節(jié)的有符號的相對偏移量加

29、到PC上,并計算出轉(zhuǎn)向地址。如果第一操作數(shù)(無符號數(shù))小于上,并計算出轉(zhuǎn)向地址。如果第一操作數(shù)(無符號數(shù))小于第二操作數(shù)(無符號整數(shù)),則置進位標(biāo)志位第二操作數(shù)(無符號整數(shù)),則置進位標(biāo)志位Cy,否則對,否則對Cy清清“0”,不影響任何一個操作數(shù)的內(nèi)容。指令格式如下:不影響任何一個操作數(shù)的內(nèi)容。指令格式如下:上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解這組指令將源操作數(shù)這組指令將源操作數(shù)(Rn,direct)減減1,結(jié)果回送到源操作,結(jié)果回送到源操作數(shù)寄存器或存儲器中去。如果結(jié)果不為數(shù)寄存器或存儲器中去。如果結(jié)果不為0則轉(zhuǎn)移。源操作數(shù)則轉(zhuǎn)移。源操作數(shù)有寄存器尋址和直

30、接尋址。允許程序員把內(nèi)部有寄存器尋址和直接尋址。允許程序員把內(nèi)部RAM單元用作單元用作程序循環(huán)計數(shù)器。指令格式如下:程序循環(huán)計數(shù)器。指令格式如下:DJNZ Rn,relDJNZ direct,rel3.子程序調(diào)用和返回指令子程序調(diào)用和返回指令子程序結(jié)構(gòu)是一種重要的程序結(jié)構(gòu)。在一個程序中經(jīng)常遇到子程序結(jié)構(gòu)是一種重要的程序結(jié)構(gòu)。在一個程序中經(jīng)常遇到反復(fù)多次執(zhí)行程序段的情況,如果重復(fù)書寫這個程序段,會反復(fù)多次執(zhí)行程序段的情況,如果重復(fù)書寫這個程序段,會使程序變得冗長而雜亂,因而采用了功能較為重復(fù)的子程序。使程序變得冗長而雜亂,因而采用了功能較為重復(fù)的子程序。上一頁 下一頁返回第二節(jié)第二節(jié) MCS-5

31、1單片機指令詳解單片機指令詳解調(diào)用和返回構(gòu)成了子程序調(diào)用的完整過程。為了實現(xiàn)這一過調(diào)用和返回構(gòu)成了子程序調(diào)用的完整過程。為了實現(xiàn)這一過程,必須有子程序調(diào)用指令和返回指令。返回指令則應(yīng)該是程,必須有子程序調(diào)用指令和返回指令。返回指令則應(yīng)該是子程序的最后一條指令。執(zhí)行完這條指令之后,程序返回主子程序的最后一條指令。執(zhí)行完這條指令之后,程序返回主程序斷點處繼續(xù)執(zhí)行。程序斷點處繼續(xù)執(zhí)行。上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解還有子程序返回指令還有子程序返回指令RET和和RETI,分別放置了在子程序和,分別放置了在子程序和中斷服務(wù)程序的最后。中斷服務(wù)程序的最后。4、空操

32、作指令、空操作指令這條語句什么也不做,消耗一個機器周期的時間,通常用于這條語句什么也不做,消耗一個機器周期的時間,通常用于程序的延時。程序的延時。上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解五、位操作指令五、位操作指令1.數(shù)據(jù)位傳送指令數(shù)據(jù)位傳送指令這組指令的功能是把由源操作數(shù)指出的位變量送到目的操作這組指令的功能是把由源操作數(shù)指出的位變量送到目的操作數(shù)指定的單元中去。其中一個操作數(shù)必須為進位標(biāo)志,另一數(shù)指定的單元中去。其中一個操作數(shù)必須為進位標(biāo)志,另一個可以是任何直接尋址位。不影響其他寄存器或標(biāo)志。指令個可以是任何直接尋址位。不影響其他寄存器或標(biāo)志。指令格式如下:

33、格式如下:上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解2.修改變量指令修改變量指令這組指令將操作數(shù)指出的位清這組指令將操作數(shù)指出的位清“0”、取反、置、取反、置“1”,不影響,不影響其他標(biāo)志。其他標(biāo)志。上一頁 下一頁返回第二節(jié)第二節(jié) MCS-51單片機指令詳解單片機指令詳解3.位變量的邏輯運算位變量的邏輯運算實際上位運算全部是邏輯運算,共有與、或、非三種指令。實際上位運算全部是邏輯運算,共有與、或、非三種指令。這里僅以與運算為例來說明,或運算符位這里僅以與運算為例來說明,或運算符位ORL,非運算已在,非運算已在上文中替代。上文中替代。上一頁 下一頁返回第二節(jié)第二節(jié)

34、MCS-51單片機指令詳解單片機指令詳解4.條件轉(zhuǎn)移類指令條件轉(zhuǎn)移類指令與前文介紹的條件轉(zhuǎn)移指令類似,位運算也可以進行條件轉(zhuǎn)與前文介紹的條件轉(zhuǎn)移指令類似,位運算也可以進行條件轉(zhuǎn)移。移。上一頁返回第三節(jié)第三節(jié) MCS-51單片機系統(tǒng)程序設(shè)單片機系統(tǒng)程序設(shè)計實例計實例一、匯編語言程序的基本結(jié)構(gòu)一、匯編語言程序的基本結(jié)構(gòu)各種計算機的匯編語言的語法規(guī)則基本相同,且具有相同的各種計算機的匯編語言的語法規(guī)則基本相同,且具有相同的語句格式。先以語句格式。先以MCS-51匯編語言作具體說明。匯編語言作具體說明。MCS-51匯匯編語言的語句格式表示如下:編語言的語句格式表示如下:下一頁返回第三節(jié)第三節(jié) MCS-

35、51單片機系統(tǒng)程序設(shè)單片機系統(tǒng)程序設(shè)計實例計實例其中,方括號括起來的是可選部分,可有可無,視需要而定。其中,方括號括起來的是可選部分,可有可無,視需要而定。標(biāo)號是指令的符號的地址,有了標(biāo)號,程序中的其他語句才標(biāo)號是指令的符號的地址,有了標(biāo)號,程序中的其他語句才能訪問該語句。標(biāo)號的規(guī)則:標(biāo)號由能訪問該語句。標(biāo)號的規(guī)則:標(biāo)號由18個個ASCII字符組成,字符組成,但頭一個字符必須是字母,其余可以是字母,數(shù)字或其他特但頭一個字符必須是字母,其余可以是字母,數(shù)字或其他特定字符。不能使用本匯編語言已定義了符號作為符號,如指定字符。不能使用本匯編語言已定義了符號作為符號,如指令助記符、偽指令助記符以及寄存

36、器的符號名稱。標(biāo)號后必令助記符、偽指令助記符以及寄存器的符號名稱。標(biāo)號后必須跟以冒號(:)同一標(biāo)號在一個程序中只能定義一次,不須跟以冒號(:)同一標(biāo)號在一個程序中只能定義一次,不能重復(fù)定義。能重復(fù)定義。上一頁 下一頁返回第三節(jié)第三節(jié) MCS-51單片機系統(tǒng)程序設(shè)單片機系統(tǒng)程序設(shè)計實例計實例一條語句可以有標(biāo)號,也可以沒有標(biāo)號,標(biāo)號的有無取決于一條語句可以有標(biāo)號,也可以沒有標(biāo)號,標(biāo)號的有無取決于本程序中的其他語句是否需要訪問這條語句操作碼用于規(guī)定本程序中的其他語句是否需要訪問這條語句操作碼用于規(guī)定語句執(zhí)行的操作內(nèi)容。操作碼是以指令助記符或偽指令助記語句執(zhí)行的操作內(nèi)容。操作碼是以指令助記符或偽指令助

37、記符表示的,操作碼是匯編指令格式中唯一不能空缺的部分。符表示的,操作碼是匯編指令格式中唯一不能空缺的部分。操作數(shù)用于給指令和操作提示數(shù)據(jù)或地址。注釋不屬于語句操作數(shù)用于給指令和操作提示數(shù)據(jù)或地址。注釋不屬于語句的功能部分,它只是對語句的解釋說明。分界符用于把語句的功能部分,它只是對語句的解釋說明。分界符用于把語句格式中的各部分隔開,以便于匯編語言程序區(qū)分,包括空格,格式中的各部分隔開,以便于匯編語言程序區(qū)分,包括空格,冒號,分號或逗號等多種符號,在冒號,分號或逗號等多種符號,在MCS-51中,冒號(:)中,冒號(:)用于標(biāo)號之后;空格()用于操作碼和操作數(shù)之間;逗號用于標(biāo)號之后;空格()用于操

38、作碼和操作數(shù)之間;逗號(,)用于操作數(shù)之間;分號(;)用于注釋之前。(,)用于操作數(shù)之間;分號(;)用于注釋之前。上一頁 下一頁返回第三節(jié)第三節(jié) MCS-51單片機系統(tǒng)程序設(shè)單片機系統(tǒng)程序設(shè)計實例計實例匯編語言程序的結(jié)構(gòu)形式主要分為三種:順序結(jié)構(gòu),分支結(jié)匯編語言程序的結(jié)構(gòu)形式主要分為三種:順序結(jié)構(gòu),分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)是最簡單的程序結(jié)構(gòu),在順序結(jié)構(gòu)構(gòu)和循環(huán)結(jié)構(gòu)。順序結(jié)構(gòu)是最簡單的程序結(jié)構(gòu),在順序結(jié)構(gòu)中既無分支,循環(huán),也不調(diào)用子程序,程序執(zhí)行時一條一條中既無分支,循環(huán),也不調(diào)用子程序,程序執(zhí)行時一條一條地按順序執(zhí)行指令。分支結(jié)構(gòu)使用條件轉(zhuǎn)移指令實現(xiàn),即根地按順序執(zhí)行指令。分支結(jié)構(gòu)使用條件

39、轉(zhuǎn)移指令實現(xiàn),即根據(jù)條件對程序的執(zhí)行進行判斷,滿足條件則進行程序轉(zhuǎn)移,據(jù)條件對程序的執(zhí)行進行判斷,滿足條件則進行程序轉(zhuǎn)移,否則程序順序執(zhí)行。循環(huán)結(jié)構(gòu)則在程序的某個區(qū)段進行反復(fù)否則程序順序執(zhí)行。循環(huán)結(jié)構(gòu)則在程序的某個區(qū)段進行反復(fù)的運行,直到滿足某種條件結(jié)束,而有的程序則完全不能跳的運行,直到滿足某種條件結(jié)束,而有的程序則完全不能跳出的死循環(huán),將會無休止地運行下去。出的死循環(huán),將會無休止地運行下去。上一頁 下一頁返回第三節(jié)第三節(jié) MCS-51單片機系統(tǒng)程序設(shè)單片機系統(tǒng)程序設(shè)計實例計實例二、簡單程序設(shè)計二、簡單程序設(shè)計簡單程序設(shè)計指的就是按照順序來執(zhí)行程序,程序中可以包簡單程序設(shè)計指的就是按照順序來

40、執(zhí)行程序,程序中可以包含某種算法。含某種算法。實例實例求解多項式求解多項式y(tǒng)=2a-b。假設(shè)操作數(shù)假設(shè)操作數(shù)a放在寄存器放在寄存器R3,操作數(shù),操作數(shù)b放在寄存器放在寄存器R4;結(jié)果;結(jié)果分別放在寄存器分別放在寄存器R5和和R6.上一頁 下一頁返回第三節(jié)第三節(jié) MCS-51單片機系統(tǒng)程序設(shè)單片機系統(tǒng)程序設(shè)計實例計實例上一頁 下一頁返回第三節(jié)第三節(jié) MCS-51單片機系統(tǒng)程序設(shè)單片機系統(tǒng)程序設(shè)計實例計實例三、分支和循環(huán)程序三、分支和循環(huán)程序在許多情況下,需要根據(jù)不同的條件轉(zhuǎn)向不同的處理程序,在許多情況下,需要根據(jù)不同的條件轉(zhuǎn)向不同的處理程序,這種結(jié)構(gòu)的程序稱為分支程序。這種結(jié)構(gòu)的程序稱為分支程序

41、。MCS-51單片機設(shè)置的條件單片機設(shè)置的條件轉(zhuǎn)移指令、比較轉(zhuǎn)移指令和位轉(zhuǎn)移指令可以實現(xiàn)程序的分支。轉(zhuǎn)移指令、比較轉(zhuǎn)移指令和位轉(zhuǎn)移指令可以實現(xiàn)程序的分支。圖圖3-3為分支程序框圖。為分支程序框圖。實例實例設(shè)設(shè)a存放在累加器存放在累加器R2中,中,b存放在寄存器存放在寄存器R3中,要求中,要求按下式計算按下式計算y值,并將結(jié)果值,并將結(jié)果y存于累加器存于累加器A中。中。上一頁 下一頁返回第三節(jié)第三節(jié) MCS-51單片機系統(tǒng)程序設(shè)單片機系統(tǒng)程序設(shè)計實例計實例上一頁 下一頁返回第三節(jié)第三節(jié) MCS-51單片機系統(tǒng)程序設(shè)單片機系統(tǒng)程序設(shè)計實例計實例循環(huán)程序是指一段反復(fù)執(zhí)行的程序。循環(huán)程序是指一段反復(fù)執(zhí)

42、行的程序。圖圖3-4為循環(huán)程序框圖。為循環(huán)程序框圖。實例實例將內(nèi)部數(shù)據(jù)存儲器將內(nèi)部數(shù)據(jù)存儲器38H6FH單元的內(nèi)容傳送到外部單元的內(nèi)容傳送到外部數(shù)據(jù)存儲器以數(shù)據(jù)存儲器以1000H開始的連續(xù)單元中去。開始的連續(xù)單元中去。38H6FH單元向外傳數(shù)據(jù),需傳送單元向外傳數(shù)據(jù),需傳送56次。將次。將R6作為循環(huán)作為循環(huán)計數(shù)寄存器,有如下的流程圖:計數(shù)寄存器,有如下的流程圖:上一頁 下一頁返回第三節(jié)第三節(jié) MCS-51單片機系統(tǒng)程序設(shè)單片機系統(tǒng)程序設(shè)計實例計實例四、查表程序四、查表程序查表就是根據(jù)自變量查表就是根據(jù)自變量x的值,在表總查找的值,在表總查找y,使,使y=f(x)。)。x和和y可以使各種類型的

43、數(shù)據(jù)。表的結(jié)構(gòu)也是多種多樣的。表可以使各種類型的數(shù)據(jù)。表的結(jié)構(gòu)也是多種多樣的。表格可以放在程序存儲器中,也可以存放在數(shù)據(jù)存儲器中。在格可以放在程序存儲器中,也可以存放在數(shù)據(jù)存儲器中。在單片機應(yīng)用系統(tǒng)中,這類程序使用頻繁。利用它能避免進行單片機應(yīng)用系統(tǒng)中,這類程序使用頻繁。利用它能避免進行復(fù)雜的運算或轉(zhuǎn)換過程,故它廣泛應(yīng)用于顯示、打印字符的復(fù)雜的運算或轉(zhuǎn)換過程,故它廣泛應(yīng)用于顯示、打印字符的轉(zhuǎn)換以及數(shù)據(jù)補償、計算、轉(zhuǎn)換等程序中。一般情況下,對轉(zhuǎn)換以及數(shù)據(jù)補償、計算、轉(zhuǎn)換等程序中。一般情況下,對自變量自變量x是有變化規(guī)律的數(shù)據(jù),可以根據(jù)這一規(guī)律形成地址,是有變化規(guī)律的數(shù)據(jù),可以根據(jù)這一規(guī)律形成地址,對應(yīng)的對應(yīng)的y則存放于該地址單元中;對則存放于該地址單元中;對x是沒有變化規(guī)律的數(shù)據(jù),是沒有變化規(guī)律的數(shù)據(jù),在表中存放在表中存放x及其對應(yīng)的及其對應(yīng)的y值。值。上一頁 下一頁返回第三節(jié)第

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論