指令系統(tǒng)與C語言程序設計_第1頁
指令系統(tǒng)與C語言程序設計_第2頁
指令系統(tǒng)與C語言程序設計_第3頁
指令系統(tǒng)與C語言程序設計_第4頁
指令系統(tǒng)與C語言程序設計_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第3章 MCS-51單片機的指令系統(tǒng) 與C語言程序設計一般格式為:一般格式為: 標號:操作碼標號:操作碼 目的操作數(shù)目的操作數(shù) , 源操作數(shù)源操作數(shù) ; 注釋注釋 在兩個操作數(shù)的指令中,通常在兩個操作數(shù)的指令中,通常目的操作數(shù)寫在左邊,源操作數(shù)寫在目的操作數(shù)寫在左邊,源操作數(shù)寫在右邊。右邊。 3.1.1 MCS-513.1.1 MCS-51單片機指令格式單片機指令格式 標號是程序員根據(jù)編程需要給指令設定的符號地址,可有可無。標號是程序員根據(jù)編程需要給指令設定的符號地址,可有可無。標號由標號由1 18 8個字符組成,第一個字符必須是英文字母,不能是數(shù)字個字符組成,第一個字符必須是英文字母,不能是

2、數(shù)字或其他符號,標號后必須用冒號?;蚱渌?,標號后必須用冒號。操作碼是指令的核心部分,用于指示機器執(zhí)行何種操作操作碼是指令的核心部分,用于指示機器執(zhí)行何種操作 操作數(shù)是表示指令操作的對象,操作數(shù)可以是一個具體的數(shù)據(jù),操作數(shù)是表示指令操作的對象,操作數(shù)可以是一個具體的數(shù)據(jù),也可以是參加運算的數(shù)據(jù)所在的地址。也可以是參加運算的數(shù)據(jù)所在的地址。 注釋是對指令的解釋說明,用以提高程序的可讀性,注釋前必須注釋是對指令的解釋說明,用以提高程序的可讀性,注釋前必須加分號。加分號。 3.1 3.1 概述概述 3.1.2 3.1.2 指令的字節(jié)指令的字節(jié)3.1.3 MCS-513.1.3 MCS-51單片機的

3、助記符語言單片機的助記符語言 指令的助記符用英文單詞或縮寫字母來表征指令功能,以便于人們識別、指令的助記符用英文單詞或縮寫字母來表征指令功能,以便于人們識別、讀讀/ /寫、記憶和交流,常用于程序設計。寫、記憶和交流,常用于程序設計。 MCS-51MCS-51指令系統(tǒng)中,操作碼采用了指令系統(tǒng)中,操作碼采用了4242種助記符。種助記符。 3.1.4 3.1.4 常用符號說明常用符號說明3.2 3.2 尋址方式尋址方式 尋址方式是指尋找操作數(shù)或指令的地址的方式。 MCS-51的尋址方式有的尋址方式有七七種。即:立即尋址、直接尋種。即:立即尋址、直接尋址、寄存器尋址、寄存器間接尋址、變址尋址、位對尋址

4、、寄存器尋址、寄存器間接尋址、變址尋址、位對尋址和相對尋址。址和相對尋址。 若不特別聲明,我們后面提到的尋址方式均指源操作數(shù)若不特別聲明,我們后面提到的尋址方式均指源操作數(shù)的尋址方式。的尋址方式。 指令中直接給出操作數(shù)指令中直接給出操作數(shù)的尋址方式稱為立即尋址。立的尋址方式稱為立即尋址。立即數(shù)可以為一個字節(jié),也可以是兩個字節(jié),并要用符號即數(shù)可以為一個字節(jié),也可以是兩個字節(jié),并要用符號“”來標識。由于立即數(shù)是一個常數(shù),所以只能作為源來標識。由于立即數(shù)是一個常數(shù),所以只能作為源操作數(shù)。操作數(shù)。 立即尋址所對應的尋址空間為:立即尋址所對應的尋址空間為:ROM 3.2.1 3.2.1 立即尋址立即尋址

5、如:如: MOV AMOV A,#30H #30H ;A30HA30H MOV DPTR MOV DPTR,#1638H #1638H ;DPH16HDPH16H,DPL38HDPL38H3.2.2 3.2.2 直接尋址直接尋址 指令操作碼之后的字節(jié)存放的是指令操作碼之后的字節(jié)存放的是操作數(shù)的地址操作數(shù)的地址,操,操作數(shù)本身存放在該地址指示的存儲單元中的尋址方式稱作數(shù)本身存放在該地址指示的存儲單元中的尋址方式稱為為直接尋址直接尋址。 直接尋址中的直接尋址中的SFRSFR經(jīng)常采用符號形式表示。經(jīng)常采用符號形式表示。尋址空間為:片內尋址空間為:片內RAMRAM低低128128字節(jié)、字節(jié)、SFRSF

6、R。3.2.3 3.2.3 寄存器尋址寄存器尋址 操作數(shù)存放在寄存器中,指令中直接給出該操作數(shù)存放在寄存器中,指令中直接給出該寄存器名稱寄存器名稱的尋址方式。可以獲得較高的傳送和運算速度。的尋址方式??梢垣@得較高的傳送和運算速度。 寄存器可以是:寄存器可以是:R0R0R7R7、A A、B B、DPTRDPTR。例:例: MOV AMOV A,R1R1;AR1AR1 寄存器中的內容為地址,從該地址去取操作數(shù)寄存器中的內容為地址,從該地址去取操作數(shù)的尋址方的尋址方式稱為寄存器間接尋址式稱為寄存器間接尋址 。 尋址的存儲空間為片內尋址的存儲空間為片內RAMRAM或片外或片外RAMRAM。片內片內RA

7、MRAM的數(shù)據(jù)傳送采用的數(shù)據(jù)傳送采用“MOV”MOV”類指令,間接尋址寄存器類指令,間接尋址寄存器采用寄存器采用寄存器R0R0或或R1R1(堆棧操作時采用(堆棧操作時采用SPSP)。)。 片外片外RAMRAM的數(shù)據(jù)傳送采用的數(shù)據(jù)傳送采用“MOVX”MOVX”類指令,這時間接尋類指令,這時間接尋址寄存器有兩種選擇:一是采用址寄存器有兩種選擇:一是采用R0R0和和R1R1作間址寄存器,這作間址寄存器,這時時R0R0或或R1R1提供低提供低8 8位地址(外部位地址(外部RAMRAM多于多于256256字節(jié)采用頁面字節(jié)采用頁面方式訪問時,可由方式訪問時,可由P2P2口未使用的口未使用的I/OI/O引腳

8、提供高位地址);引腳提供高位地址);二是采用二是采用DPTRDPTR作為間址寄存器。作為間址寄存器。 3.2.4 3.2.4 寄存器間接尋址寄存器間接尋址例:例: MOV R0MOV R0,#30H #30H ;R030HR030H MOV A MOV A,R0 R0 ;A(R0) A(R0) 即即AA(30H30H)寄存器間接尋址對應的空間為:寄存器間接尋址對應的空間為:片內片內RAMRAM(采用(采用R0R0,R1R1或或SPSP)片外片外RAMRAM(采用(采用R0R0,R1R1或或DPTRDPTR) 3.2.5 3.2.5 變址尋址變址尋址 以一個基地址加上一個偏移量地址形成操作數(shù)地址

9、以一個基地址加上一個偏移量地址形成操作數(shù)地址的尋址方式稱為變址尋址。在這種尋址方式中,以數(shù)據(jù)指的尋址方式稱為變址尋址。在這種尋址方式中,以數(shù)據(jù)指針針DPTRDPTR或程序計數(shù)器或程序計數(shù)器PCPC作為基址寄存器,累加器作為基址寄存器,累加器A A作為偏作為偏移量寄存器,基址寄存器的內容與偏移量寄存器的內容之移量寄存器,基址寄存器的內容與偏移量寄存器的內容之和作為操作數(shù)地址。和作為操作數(shù)地址。 變址尋址所對應的尋址空間為:變址尋址所對應的尋址空間為:ROMROM例如:例如:MOVC AMOVC A,A+DPTR A+DPTR 對位地址中的內容進行操作對位地址中的內容進行操作的尋址方式稱為位尋址。

10、采的尋址方式稱為位尋址。采用位尋址指令的操作數(shù)是用位尋址指令的操作數(shù)是8 8位二進制數(shù)中的某一位。指令位二進制數(shù)中的某一位。指令中給出的是位地址。位尋址方式實質屬于位的直接尋址。中給出的是位地址。位尋址方式實質屬于位的直接尋址。 尋址空間為:片內尋址空間為:片內RAMRAM的的20H20H2FH2FH單元中的單元中的128128可尋址位;可尋址位;SFRSFR的可尋址位。的可尋址位。 習慣上,特殊功能寄存器的尋址位常用符號位地址表示。習慣上,特殊功能寄存器的尋址位常用符號位地址表示。 例如:例如:CLR ACC.7 CLR ACC.7 MOV C MOV C,7FH7FH3.2.6 3.2.6

11、 位尋址位尋址 相對尋址相對尋址是以程序計數(shù)器是以程序計數(shù)器PCPC的當前值的當前值(指讀出該(指讀出該2 2字字節(jié)或節(jié)或3 3字節(jié)的跳轉指令后,字節(jié)的跳轉指令后,PCPC指向的下條指令的地址)指向的下條指令的地址)為基為基準,加上指令中給出的相對偏移量準,加上指令中給出的相對偏移量 relrel 形成目標地址形成目標地址的尋的尋址方式址方式 。 relrel 是一個帶符號的是一個帶符號的8 8位二進制數(shù),取值范圍是位二進制數(shù),取值范圍是128128127127,以補碼形式置于操作碼之后存放。,以補碼形式置于操作碼之后存放。如:如:JC relJC rel ; relrel75H75H3.2.

12、7 3.2.7 相對尋址相對尋址3.3.1 3.3.1 內部數(shù)據(jù)傳送指令內部數(shù)據(jù)傳送指令3.3 3.3 數(shù)據(jù)傳送與交換指令數(shù)據(jù)傳送與交換指令 數(shù)據(jù)傳送是進行數(shù)據(jù)處理的最基本的操作,這類指令一般不影響標志寄存器PSW的狀態(tài)。一、立即尋址型傳送指令(一、立即尋址型傳送指令(5 5條)條)3.3.1 3.3.1 內部數(shù)據(jù)傳送指令內部數(shù)據(jù)傳送指令二、直接尋址型傳送指令(二、直接尋址型傳送指令(5 5條)條)3.3.1 3.3.1 內部數(shù)據(jù)傳送指令內部數(shù)據(jù)傳送指令三、寄存器尋址型傳送指令(三、寄存器尋址型傳送指令(3 3條)條)四、寄存器間接尋址型傳送指令(四、寄存器間接尋址型傳送指令(3 3條)條)3

13、.3.2 3.3.2 外部外部RAMRAM數(shù)據(jù)傳送指令(數(shù)據(jù)傳送指令(4 4條)條)3.3.3 3.3.3 查表指令(查表指令(2 2條)條)3.3.4 3.3.4 堆棧操作指令(堆棧操作指令(2 2條)條)堆棧是在內部堆棧是在內部RAMRAM中按中按“后進先出后進先出”的規(guī)則組織的一片存儲區(qū)。此的規(guī)則組織的一片存儲區(qū)。此區(qū)的一端固定,稱為棧底;另一端是活動的,稱為棧頂。棧頂?shù)奈恢脜^(qū)的一端固定,稱為棧底;另一端是活動的,稱為棧頂。棧頂?shù)奈恢茫ǖ刂罚┯蓷V羔槪ǖ刂罚┯蓷V羔楽PSP指示(即指示(即SPSP的內容是棧頂?shù)牡刂罚┑膬热菔菞m數(shù)牡刂罚?.3.5 3.3.5 數(shù)據(jù)交換指令(數(shù)據(jù)交換指令(

14、5 5條)條)例例1 1:若(:若(R0R0)=80H=80H,(,(A A)=20H=20H。執(zhí)行指令。執(zhí)行指令 XCH AXCH A,R0 R0 后,(后,(A A)=80H=80H,(,(R0R0)=20H=20H。 例例2 2:若(:若(R0R0)30H30H,(,(30H30H)67H67H,(,(A A)20H20H。執(zhí)。執(zhí)行指令行指令 XCHD AXCHD A,R0 R0 指令后,(指令后,(A A)27H27H,(,(30H30H)60H60H。 若(若(A A)30H30H,執(zhí)行指令,執(zhí)行指令SWAP ASWAP A后,(后,(A A)03H03H。3.4.1 3.4.1 加

15、減法指令加減法指令一、加法指令(一、加法指令(8 8條)條) 算術運算指令可以完成加、減、乘、除及加算術運算指令可以完成加、減、乘、除及加1和減和減1等運算。等運算。這類指令多數(shù)以這類指令多數(shù)以A為源操作數(shù)之一,同時又使為源操作數(shù)之一,同時又使A為目的操作數(shù)。為目的操作數(shù)。 3.4 3.4 算術運算指令算術運算指令CYCY:和的:和的D7D7位有進位時,(位有進位時,(CYCY)=1=1;否則,(;否則,(CYCY)=0=0。ACAC:和的:和的D3D3位有進位時,(位有進位時,(ACAC)=1=1;否則,(;否則,(ACAC)=0=0。OVOV:和的:和的D7D7、D6D6位只有一個有進位時

16、,(位只有一個有進位時,(OVOV)=1=1;溢出表示運算的結果超;溢出表示運算的結果超出了數(shù)值所允許的范圍。出了數(shù)值所允許的范圍。如:兩個正數(shù)相加結果為負數(shù)或兩個負數(shù)相加結如:兩個正數(shù)相加結果為負數(shù)或兩個負數(shù)相加結果為正數(shù)時屬于錯誤結果,此時(果為正數(shù)時屬于錯誤結果,此時(OVOV)=1=1。P P:累加器:累加器ACCACC中中“1”1”的個數(shù)為奇數(shù)時,(的個數(shù)為奇數(shù)時,(P P)=1=1;為偶數(shù)時,(;為偶數(shù)時,(P P)=0=0。 3.4.1 3.4.1 加減法指令加減法指令二、減法指令(二、減法指令(4 4條)條)CYCY:差的位:差的位7 7需借位時,(需借位時,(CYCY)=1=

17、1;否則,(;否則,(CYCY)=0=0。ACAC:差的位:差的位3 3需借位時,(需借位時,(ACAC)=1=1;否則,(;否則,(ACAC)=0=0。OVOV:若位:若位6 6有借位而位有借位而位7 7無借位或位無借位或位7 7有借位而位有借位而位6 6無借位時,無借位時,(OVOV)=1=1。如要用此組指令完成不帶借位減法,只需先清如要用此組指令完成不帶借位減法,只需先清CyCy為為 0 0。3.4.1 3.4.1 加減法指令加減法指令三、加三、加1 1減減1 1指令(指令(9 9條)條)這些指令僅這些指令僅 INC AINC A和和DEC ADEC A影響影響P P標志。其余指令都不標

18、志。其余指令都不影響標志位的狀態(tài)。影響標志位的狀態(tài)。 指令的功能是對累加器指令的功能是對累加器A A中剛進行的兩個中剛進行的兩個BCDBCD碼的加法碼的加法的結果進行十進制調整。的結果進行十進制調整。 兩個壓縮的兩個壓縮的BCDBCD碼按二進制相加后,必須經(jīng)過調整方碼按二進制相加后,必須經(jīng)過調整方能得到正確的壓縮能得到正確的壓縮BCDBCD碼的和。碼的和。DA ADA A四、十進制加法調整指令(四、十進制加法調整指令(1 1條)條)3.4.2 3.4.2 乘法和除法指令乘法和除法指令 MUL AB MUL AB ;累加器;累加器A A與與B B寄存器相乘寄存器相乘 該指令的功能是將累加器該指令

19、的功能是將累加器A A與寄存器與寄存器B B中的無符號中的無符號8 8位二位二進制數(shù)相乘進制數(shù)相乘 ,乘積的低,乘積的低8 8位留在累加器位留在累加器A A中,高中,高8 8位存放在位存放在寄存器寄存器B B中。中。當乘積大于當乘積大于FFHFFH時,溢出標志位(時,溢出標志位(OVOV)=1=1。而標志。而標志CyCy總總是被清是被清0 0。 DIV AB DIV AB ;累加器;累加器A A除以寄存器除以寄存器B B 該指令的功能是將累加器該指令的功能是將累加器A A中的無符號中的無符號8 8位二進制數(shù)位二進制數(shù)除以寄存器除以寄存器B B中的無符號中的無符號8 8位二進制數(shù)位二進制數(shù) ,商

20、的整數(shù)部分商的整數(shù)部分存放在累加器存放在累加器A A中,余數(shù)部分存放在寄存器中,余數(shù)部分存放在寄存器B B中。中。當除數(shù)為當除數(shù)為0 0時,則結果的時,則結果的A A和和B B的內容不定,且溢出標的內容不定,且溢出標志位(志位(OVOV)=1=1。而標志。而標志CyCy總是被清總是被清0 0。3.5.1 3.5.1 邏輯運算指令邏輯運算指令一、邏輯與運算指令(一、邏輯與運算指令(6 6條)條) 邏輯運算指令邏輯運算指令可以完成與、或、異或、清可以完成與、或、異或、清0 0和取反操作,和取反操作,當以累加器當以累加器A A為目的操作數(shù)時,對為目的操作數(shù)時,對P P標志有影響;標志有影響;例例1

21、1: 若(若(A A)=C3H=C3H,(,(R0R0)=AAH=AAH,執(zhí)行指令,執(zhí)行指令 ANL AANL A,R0 R0 之后,之后,(A A)=82H=82H。3.5 3.5 邏輯運算及移位指令邏輯運算及移位指令3.5.1 3.5.1 邏輯運算指令邏輯運算指令二、邏輯或運算指令(二、邏輯或運算指令(6 6條)條)例例2 2:若(:若(A A)=C3H=C3H,(,(R0R0)=55H=55H,執(zhí)行指令,執(zhí)行指令ORL AORL A,R0 R0 之后,(之后,(A A)=D7H=D7H。3.5.1 3.5.1 邏輯運算指令邏輯運算指令三、邏輯異或運算指令(三、邏輯異或運算指令(6 6條)

22、條)例例3 3: 若(若(A A)=C3H=C3H,(,(R0R0)=AAH=AAH,執(zhí)行指令,執(zhí)行指令 XRL AXRL A,R0 R0 之后,(之后,(A A)=69H=69H。3.5.1 3.5.1 邏輯運算指令邏輯運算指令四、累加器四、累加器A A清清0 0和取反指令(和取反指令(2 2條)條)3.5.2 3.5.2 移位指令移位指令3.6.1 3.6.1 無條件轉移指令(無條件轉移指令(4 4條)條)3.6 3.6 控制轉移指令控制轉移指令 通常情況下,程序的執(zhí)行是順序進行的,但也可以根據(jù)需要改變程序的執(zhí)行順序,這種情況稱作程序轉移??刂瞥绦虻霓D移要利用轉移指令。轉移指令有無條件轉移

23、、條件轉移及子程序調用與返回等。 LJMP addr16 LJMP addr16 ;PC addr16 PC addr16 第一字節(jié)為操作碼,該指令執(zhí)行時,將指令的第二、第一字節(jié)為操作碼,該指令執(zhí)行時,將指令的第二、三字節(jié)地址碼分別裝入指令計數(shù)器三字節(jié)地址碼分別裝入指令計數(shù)器PCPC的高的高8 8位和低位和低8 8位中,位中,程序無條件地轉移到指定的目標地址去執(zhí)行。程序無條件地轉移到指定的目標地址去執(zhí)行。 LJMPLJMP提供的是提供的是1616位地址,因此程序可以轉向位地址,因此程序可以轉向64KB64KB的的程序存儲器地址空間的任何單元。程序存儲器地址空間的任何單元。一、長轉移指令一、長轉

24、移指令3.6.1 3.6.1 無條件轉移指令(無條件轉移指令(4 4條)條) AJMP addr11 AJMP addr11 ;PC PC (PCPC)+ 2+ 2, PC10PC100 addr11 0 addr11 該指令執(zhí)行時,先將該指令執(zhí)行時,先將PCPC的內容加的內容加2 2(這是(這是PCPC指向的是指向的是AJMPAJMP的下一條指令),然后把指令中的下一條指令),然后把指令中1111位地址碼傳送到位地址碼傳送到PC10PC100 0,而,而PC15PC151111保持原內容不變。保持原內容不變。二、絕對轉移指令二、絕對轉移指令3.6.1 3.6.1 無條件轉移指令(無條件轉移指

25、令(4 4條)條) SJMP relSJMP rel ;PC PC (PCPC)+ 2+ 2,PC PC (PCPC)+ rel+ rel 第一字節(jié)為操作碼,第二字節(jié)為相對偏移量第一字節(jié)為操作碼,第二字節(jié)為相對偏移量 relrel,relrel 是一個帶符號的偏移字節(jié)數(shù)(是一個帶符號的偏移字節(jié)數(shù)(2 2的補碼),取值范圍為的補碼),取值范圍為 127 127 128128(00H00H7FH7FH對應表示對應表示0 0 127127,80H80HFFHFFH對應表示對應表示1281281 1)。負數(shù)表示反向轉移,正數(shù)表示正向)。負數(shù)表示反向轉移,正數(shù)表示正向轉移。轉移。 relrel 可以是一

26、個轉移目標地址的標號,由匯編程序在匯可以是一個轉移目標地址的標號,由匯編程序在匯編過程中自動計算偏移地址,并填入指令代碼中。編過程中自動計算偏移地址,并填入指令代碼中。三、短轉移指令三、短轉移指令3.6.1 3.6.1 無條件轉移指令(無條件轉移指令(4 4條)條)JMP A+DPTR JMP A+DPTR ;PC PC (PCPC)+ 1+ 1,PC PC (A A)+ +(DPTRDPTR) 該指令具有散轉功能,可以代替許多判別跳轉指令。其轉移地址由該指令具有散轉功能,可以代替許多判別跳轉指令。其轉移地址由數(shù)據(jù)指針數(shù)據(jù)指針DPTRDPTR的的1616位數(shù)和累加器位數(shù)和累加器A A的的8 8

27、位數(shù)進行無符號數(shù)相加形成,并位數(shù)進行無符號數(shù)相加形成,并直接裝入直接裝入PCPC。例:例: 有一段程序如下:有一段程序如下: MOV DPTRMOV DPTR,#TABLE#TABLE JMP A+DPTR JMP A+DPTR TABLE TABLE:AJMP ROUT0AJMP ROUT0 AJMP ROUT1 AJMP ROUT1 AJMP ROUT2 AJMP ROUT2 AJMP ROUT3 AJMP ROUT3當(當(A A)=00H=00H時,程序將轉到時,程序將轉到 ROUT0ROUT0處執(zhí)行;當(處執(zhí)行;當(A A)=02H=02H時,程序時,程序將轉到將轉到 ROUT1RO

28、UT1處執(zhí)行;其余類推。處執(zhí)行;其余類推。 四、變址尋址轉移指令四、變址尋址轉移指令3.6.1 3.6.1 無條件轉移指令(無條件轉移指令(4 4條)條)一、累加器一、累加器A A判零轉移指令判零轉移指令3.6.2 3.6.2 條件轉移指令(條件轉移指令(8 8條)條) 指令的功能是對累加器指令的功能是對累加器A A的內容為的內容為 0 0 和不為和不為 0 0 進行檢進行檢測并轉移。當不滿足各自的條件時,程序繼續(xù)往下執(zhí)行。測并轉移。當不滿足各自的條件時,程序繼續(xù)往下執(zhí)行。當各自的條件滿足時,程序轉向指定的目標地址。目標地當各自的條件滿足時,程序轉向指定的目標地址。目標地址的計算與址的計算與S

29、JMPSJMP指令情況相同。指令執(zhí)行時對標志位無影指令情況相同。指令執(zhí)行時對標志位無影響。響。二、比較條件轉移指令二、比較條件轉移指令3.6.2 3.6.2 條件轉移指令(條件轉移指令(8 8條)條) 這組指令的功能是對指定的目的字節(jié)和源字節(jié)進行比較,若它們的這組指令的功能是對指定的目的字節(jié)和源字節(jié)進行比較,若它們的值不相等則轉移,轉移的目標地址為當前的值不相等則轉移,轉移的目標地址為當前的PCPC值加值加3 3后,再加指令的第三后,再加指令的第三字節(jié)偏移量字節(jié)偏移量relrel;若目的字節(jié)的內容大于源字節(jié)的內容,則進位標志清;若目的字節(jié)的內容大于源字節(jié)的內容,則進位標志清0 0;若目的字節(jié)的

30、內容小于源字節(jié)的內容,則進位標志置若目的字節(jié)的內容小于源字節(jié)的內容,則進位標志置1 1;若目的字節(jié)的內;若目的字節(jié)的內容等于源字節(jié)的內容,程序將繼續(xù)往下執(zhí)行。容等于源字節(jié)的內容,程序將繼續(xù)往下執(zhí)行。三、減三、減1 1非零轉移指令非零轉移指令3.6.2 3.6.2 條件轉移指令(條件轉移指令(8 8條)條) 這組指令每執(zhí)行一次,便將目的操作數(shù)的循環(huán)控制單這組指令每執(zhí)行一次,便將目的操作數(shù)的循環(huán)控制單元的內容減元的內容減1 1,并判其是否為,并判其是否為 0 0。若不為。若不為0 0,則轉移到目標,則轉移到目標地址繼續(xù)循環(huán);若為地址繼續(xù)循環(huán);若為0 0,則結束循環(huán),程序往下執(zhí)行。,則結束循環(huán),程序

31、往下執(zhí)行。一、調用指令一、調用指令3.6.3 3.6.3 子程序調用和返回指令(子程序調用和返回指令(4 4條)條)ACALLACALL指令執(zhí)行時,被調用的子程序的首址必須設在包含當前指令(即調指令執(zhí)行時,被調用的子程序的首址必須設在包含當前指令(即調用指令的下一條指令)的第一個字節(jié)在內的用指令的下一條指令)的第一個字節(jié)在內的2K2K字節(jié)范圍內的程序存儲器中。字節(jié)范圍內的程序存儲器中。LCALLLCALL指令執(zhí)行時,被調用的子程序的首址可以設在指令執(zhí)行時,被調用的子程序的首址可以設在64K64K字節(jié)范圍內的程字節(jié)范圍內的程序存儲器空間的任何位置。序存儲器空間的任何位置。二、返回指令二、返回指令

32、3.6.3 3.6.3 子程序調用和返回指令(子程序調用和返回指令(4 4條)條)RET指令的功能是從堆棧中彈出由調用指令壓入堆棧保護的斷點地址,指令的功能是從堆棧中彈出由調用指令壓入堆棧保護的斷點地址,并送入指令計數(shù)器并送入指令計數(shù)器PC,從而結束子程序的執(zhí)行。程序返回到斷點處繼,從而結束子程序的執(zhí)行。程序返回到斷點處繼續(xù)執(zhí)行。續(xù)執(zhí)行。RETI指令是專用于中斷服務程序返回的指令,除正確返回中斷斷點處指令是專用于中斷服務程序返回的指令,除正確返回中斷斷點處執(zhí)行主程序以外,并有清除內部相應的中斷狀態(tài)寄存器(以保證正確執(zhí)行主程序以外,并有清除內部相應的中斷狀態(tài)寄存器(以保證正確的中斷邏輯)的功能。

33、的中斷邏輯)的功能。 NOP NOP ;PC PC (PCPC)+ 1 + 1 這條指令不產(chǎn)生任何控制操作,只是將程序計數(shù)器這條指令不產(chǎn)生任何控制操作,只是將程序計數(shù)器PCPC的內容加的內容加1 1。該指令在執(zhí)行時間上要消耗。該指令在執(zhí)行時間上要消耗1 1個機器周期,個機器周期,在存儲空間上可以占用一個字節(jié)。因此,常用來實現(xiàn)較在存儲空間上可以占用一個字節(jié)。因此,常用來實現(xiàn)較短時間的延時。短時間的延時。三、空操作指令三、空操作指令3.6.3 3.6.3 子程序調用和返回指令(子程序調用和返回指令(4 4條)條)一、位傳送指令(一、位傳送指令(2 2條)條)3.7 3.7 位操作指令位操作指令在位

34、操作指令中,位累加器要用字符在位操作指令中,位累加器要用字符“C”C”表示(注:在位表示(注:在位操作指令中操作指令中CYCY與具體的直接位地址與具體的直接位地址D7HD7H對應)。對應)。 例:例: 若(若(CYCY)=1=1,(,(P3P3)=1100 0101B=1100 0101B,(,(P1P1)=0011 0101B=0011 0101B。執(zhí)行以下指令:執(zhí)行以下指令: MOV P1.3MOV P1.3,C C MOV C MOV C,P3.3P3.3 MOV P1.2 MOV P1.2,C C 結果為:(結果為:(CYCY)=0=0,P3P3的內容未變,的內容未變,P1P1的內容變

35、為的內容變?yōu)?0011 1001B0011 1001B。二、位置二、位置“1”1”和位清和位清0 0指令(指令(4 4條)條)三、位運算指令(三、位運算指令(6 6條)條)四、位控制轉移指令(四、位控制轉移指令(5 5條)條) 這兩條指令的功能是對進位標志位這兩條指令的功能是對進位標志位CyCy進行檢測,當(進行檢測,當(CyCy)=1=1(第一條(第一條指令)或(指令)或(CyCy)=0=0(第二條指令),程序轉向(第二條指令),程序轉向PCPC當前值與當前值與relrel之和的目標之和的目標地址去執(zhí)行,否則程序將順序執(zhí)行。地址去執(zhí)行,否則程序將順序執(zhí)行。 這三條指令的功能是對指定位這三條指

36、令的功能是對指定位bitbit進行檢測,當(進行檢測,當(bitbit)=1=1(第一和第(第一和第三條指令)或(三條指令)或(bitbit)=0=0(第二條指令),程序轉向(第二條指令),程序轉向PCPC當前值與當前值與relrel之和的之和的目標地址去執(zhí)行,否則程序將順序執(zhí)行。對于第三條指令,當條件滿足時目標地址去執(zhí)行,否則程序將順序執(zhí)行。對于第三條指令,當條件滿足時(指定位為(指定位為1 1),還具有將該指定位清),還具有將該指定位清0 0的功能。的功能。3.8 3.8 偽指令偽指令 偽指令不是可執(zhí)行指令,因此無機器代碼 3.9 單片機編程語言介紹單片機編程語言介紹對于對于5151系列單

37、片機,現(xiàn)在有系列單片機,現(xiàn)在有4 4種語言支持,即匯編、種語言支持,即匯編、PL/MPL/M、C C和和BasicBasic。Basic通常附在PC上,是初學編程的第一種語言,用于要求編程簡單而對編程效率和運行速度要求不高的場合。8052單片機片內就固化了Basic語言解釋器。C語言是一種源于編寫語言是一種源于編寫UNIX操作系統(tǒng)的語言,它是一種結構化語言,可操作系統(tǒng)的語言,它是一種結構化語言,可產(chǎn)生壓縮代碼。產(chǎn)生壓縮代碼。C語言程序設計是單片機開發(fā)、應用的重要趨勢之一。語言程序設計是單片機開發(fā)、應用的重要趨勢之一。 C51程序的基本單位是函數(shù)。函數(shù)由函數(shù)說明和函數(shù)體兩部分組成。一個C源程序至

38、少包含一個主函數(shù),也可以是一個主函數(shù)和若干其他函數(shù)。主函數(shù)是程序的入口;主函數(shù)中的所有語句執(zhí)行完畢,則程序結束。 3.10 單片機單片機C語言程序設計語言程序設計 C51程序的一般格式如下:程序的一般格式如下:類型類型 函數(shù)名函數(shù)名(參數(shù)表參數(shù)表)參數(shù)說明參數(shù)說明; 數(shù)據(jù)說明部分數(shù)據(jù)說明部分; 執(zhí)行語句部分執(zhí)行語句部分;C51中函數(shù)分為兩大類:中函數(shù)分為兩大類:(1)(1)庫函數(shù)庫函數(shù)(2)(2)用戶定義函數(shù)。用戶定義函數(shù)。 庫函數(shù)是庫函數(shù)是C51在庫文件中已定義的函數(shù),其函數(shù)說明在相關在庫文件中已定義的函數(shù),其函數(shù)說明在相關的頭文件中。用戶函數(shù)是用戶自己定義、自己調用的一類函數(shù)。的頭文件中。

39、用戶函數(shù)是用戶自己定義、自己調用的一類函數(shù)。 3.10.1 3.10.1 數(shù)據(jù)類型數(shù)據(jù)類型sfr 定義定義8位的特殊功能寄存器位的特殊功能寄存器sfr16 定義定義16位的特殊功能寄存器,如位的特殊功能寄存器,如DPTR, 也可以用來定也可以用來定義連續(xù)的兩個特殊功能寄存器。義連續(xù)的兩個特殊功能寄存器。sbit 定義特殊功能寄存器中的可位尋址的位。定義特殊功能寄存器中的可位尋址的位。 對于常用的特殊功能寄存器,對于常用的特殊功能寄存器,C語言提供了相應的頭文件語言提供了相應的頭文件(*.h)()(reg51.h)可以通過修改頭文件添加新的特殊功能寄存器。)可以通過修改頭文件添加新的特殊功能寄存

40、器。3.10.2 3.10.2 特殊功能寄存器(特殊功能寄存器(sfrsfr)1.特殊功能寄存器(特殊功能寄存器(SFR)的)的C51定義定義 特殊功能寄存器只能用直接尋址方式訪問,編譯器提供了與標準語言不特殊功能寄存器只能用直接尋址方式訪問,編譯器提供了與標準語言不兼容的關鍵字兼容的關鍵字”sfr”來定義。來定義。 格式:格式:sfr 特殊功能寄存器名特殊功能寄存器名=特殊功能寄存器的地址常數(shù)特殊功能寄存器的地址常數(shù)例如:例如: sfr SCON=0 x88; sfr TMOD=0 x89;2.特殊位(特殊位(sbit)的)的C51定義定義 特殊位(特殊位(sbit)是指特殊功能寄存器()是

41、指特殊功能寄存器(sfr)中可按位訪問的位,)中可按位訪問的位,用關鍵字用關鍵字sbit定義。可用定義。可用3種方式定義:種方式定義: 例如:例如: sfr PSW=0 x0d; sbit OV=PSW2; sbit OV=0 x0d2; sbit OV=0 xd2;3.位變量(位變量(bit)的)的C51定義定義 格式:格式: bit 位變量名位變量名 例如:例如: bit var;4. I/O口的口的C51定義定義(1)片內)片內I/O口的定義口的定義使用使用 sfr 關鍵字關鍵字 例如:例如: sfr P1=0 x90; P1=0 x01; /寫寫P1口口 var=P1; /讀讀P1口口

42、,讀引腳讀引腳(2)片外擴展)片外擴展I/O口的定義口的定義當作片外數(shù)據(jù)存儲單元看待,使用當作片外數(shù)據(jù)存儲單元看待,使用#define語句定義語句定義例如:例如:#include #define PORTA XBYTE0 xffc;PORTA=0 x01; /在在PORTA 地址地址0 xffc上送出上送出0 x01Var=PORTA; /讀讀PORTA 地址地址0 xffc的數(shù)據(jù)的數(shù)據(jù)3.10.3 3.10.3 存儲類型存儲類型可以指定變量的存儲區(qū),主要有以下幾個存儲區(qū):可以指定變量的存儲區(qū),主要有以下幾個存儲區(qū):3.10.3 3.10.3 存儲類型存儲類型1. DATA段段 (1)速度快,

43、空間有限()速度快,空間有限(128B 00H-7FH) (2)包含了堆棧、寄存器組()包含了堆棧、寄存器組(R0-R7) (3)一般在此區(qū)間定義使用頻繁的變量)一般在此區(qū)間定義使用頻繁的變量。3.10.3 3.10.3 存儲類型存儲類型2. BDATA段段 此區(qū)域中的變量可位尋址,(低此區(qū)域中的變量可位尋址,(低128字節(jié)中的字節(jié)中的128個可尋址位,個可尋址位,20H-2FH,16字節(jié))字節(jié))注意:此區(qū)域不能定義注意:此區(qū)域不能定義float double類型的變類型的變量量 三個函數(shù),完成同樣三個函數(shù),完成同樣的功能,但是效率不同。的功能,但是效率不同。錯誤,應該使用對應的位變量錯誤,應

44、該使用對應的位變量3.10.3 3.10.3 存儲類型存儲類型3. IDATA段段用寄存器間接尋址的內部用寄存器間接尋址的內部RAM區(qū),(高區(qū),(高128字節(jié),字節(jié),80H-FFH,與,與SFR區(qū)地址相同,只能使用間接尋址)區(qū)地址相同,只能使用間接尋址)3.10.3 3.10.3 存儲類型存儲類型4. PDATA與與XDATA段段PDATA區(qū):外部區(qū):外部RAM,256字節(jié),字節(jié),8位地址位地址XDATA區(qū):外部區(qū):外部RAM,64K字節(jié),字節(jié),18位地址位地址都使用都使用MOVX指令,但是間址寄存器不同(指令,但是間址寄存器不同(R0,R1,DPTR)3.10.3 3.10.3 存儲類型存儲

45、類型5.CODE段段 代碼段,一般不能在程序運行中改寫,用于存放常數(shù),表格等,代碼段,一般不能在程序運行中改寫,用于存放常數(shù),表格等,必須在編譯時初始化。必須在編譯時初始化。MOVC指令訪問。指令訪問。3.10.4 3.10.4 指針指針1.通用指針通用指針 不指明是指向什么存儲位置的指針,就是通用指針,指針本身占不指明是指向什么存儲位置的指針,就是通用指針,指針本身占用用3個字節(jié),第一字節(jié)表明所指向的存儲區(qū),其它兩個字節(jié)表明個字節(jié),第一字節(jié)表明所指向的存儲區(qū),其它兩個字節(jié)表明16位位的偏移量。若指向的偏移量。若指向DATA、IDATA、PDATA則只需要則只需要8位偏移量。位偏移量。例如:例如: long *state: 指向指向long型整數(shù)的指針,指針本身依據(jù)存儲模式型整數(shù)的指針,指針本身依據(jù)存儲模式不同放在不同的不同放在不同的RAM區(qū),而指向的區(qū),而指向的long型整數(shù)的存儲位置在編譯時型整數(shù)的存儲位置在編譯時也是未知的。也是未知的。 Char * xdata ptr:指向指向char型整數(shù)的指針,指針本身放在型整數(shù)的指針,指針本身放在XDATA區(qū),而指向的區(qū),而指向的char型整數(shù)的存儲位置在編

溫馨提示

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

評論

0/150

提交評論