版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)第第4 4章章 匯編語言程序設(shè)計(jì)及仿真調(diào)試匯編語言程序設(shè)計(jì)及仿真調(diào)試2/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)4.1 4.1 指令系統(tǒng)指令系統(tǒng) 高級(jí)語言編程簡單高級(jí)語言編程簡單, ,執(zhí)行效率低執(zhí)行效率低, ,常用在計(jì)算和管理的場(chǎng)合。常用在計(jì)算和管理的場(chǎng)合。 匯編語言助記符語言編程繁瑣,執(zhí)行效率高,宜用于需要結(jié)構(gòu)緊湊、反匯編語言助記符語言編程繁瑣,執(zhí)行效率高,宜用于需要結(jié)構(gòu)緊湊、反應(yīng)快速的實(shí)時(shí)控制場(chǎng)合。應(yīng)快速的實(shí)時(shí)控制場(chǎng)合。 助記符一般是由操作碼和操作數(shù)兩部分組成的。操作碼反映了指令的功能,助記符一般是由操作碼和操作數(shù)兩部分組成的。操作碼反映了指令的功能,操
2、作數(shù)代表了指令的操作對(duì)象。操作數(shù)代表了指令的操作對(duì)象。 例如,例如,ADD A,#6AHADD A,#6AH;AA+#6AH;AA+#6AH 其中其中ADDADD是操作碼符號(hào)。是操作碼符號(hào)。A A和和6AH6AH是操作數(shù)。前者反映了該指令的功能是做加是操作數(shù)。前者反映了該指令的功能是做加法,后者則表示相加的對(duì)象是法,后者則表示相加的對(duì)象是A A累加器中的內(nèi)容和立即數(shù)累加器中的內(nèi)容和立即數(shù)6AH6AH。 由助記符構(gòu)成的編程語言一般稱為匯編語言。由助記符構(gòu)成的編程語言一般稱為匯編語言。 目前大多數(shù)單片機(jī)的編譯系統(tǒng)都支持目前大多數(shù)單片機(jī)的編譯系統(tǒng)都支持C C語言編程,并可以對(duì)編譯的代碼進(jìn)行語言編程,
3、并可以對(duì)編譯的代碼進(jìn)行優(yōu)化。使用優(yōu)化。使用C C語言編程,具有編寫簡單、直觀易讀、通用性好等特點(diǎn),特別是控語言編程,具有編寫簡單、直觀易讀、通用性好等特點(diǎn),特別是控制任務(wù)比較復(fù)雜或者具有大量運(yùn)算的系統(tǒng)中,制任務(wù)比較復(fù)雜或者具有大量運(yùn)算的系統(tǒng)中,C C語言更顯示出了超越匯編語言的語言更顯示出了超越匯編語言的優(yōu)勢(shì)。然而,匯編語言是理解和掌握單片機(jī)原理及應(yīng)用的基礎(chǔ),并且,在控制系優(yōu)勢(shì)。然而,匯編語言是理解和掌握單片機(jī)原理及應(yīng)用的基礎(chǔ),并且,在控制系統(tǒng)不太復(fù)雜、實(shí)時(shí)性要求較高的控制系統(tǒng)中,較多的用戶還是使用匯編語言進(jìn)行統(tǒng)不太復(fù)雜、實(shí)時(shí)性要求較高的控制系統(tǒng)中,較多的用戶還是使用匯編語言進(jìn)行程序設(shè)計(jì)。程序
4、設(shè)計(jì)。 1 1、概述、概述 4.1.1 4.1.1 助記符語言助記符語言 3/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)2 2、操作碼、操作碼 操作碼是指令功能的英文縮寫。操作碼是指令功能的英文縮寫。 操作碼操作碼含義含義1. 1. 傳送類:傳送類: MOV MOV MOVX MOVX MOVC MOVC傳送字節(jié)變量數(shù)據(jù)存儲(chǔ)器、傳送字節(jié)變量數(shù)據(jù)存儲(chǔ)器、I/OI/O口)口)外部送數(shù)到外部送數(shù)到A A程序存儲(chǔ)器送數(shù)到程序存儲(chǔ)器送數(shù)到A A2. 2. 數(shù)據(jù)操作類:數(shù)據(jù)操作類: ADD ADD SUBB SUBB MUL MUL DIV DIV加加帶借位減帶借位減乘乘除除3. 3. 程序控制類:程序控制類:
5、 AJMP AJMPSJMPSJMP、LJMPLJMP) JZ JZ、JCJC、JBJBJNZJNZ、JNCJNC、JNBJNB) ACALL ACALLLCALLLCALL) RET RET CJNE CJNE絕對(duì)轉(zhuǎn)移短轉(zhuǎn)移、長轉(zhuǎn)移)絕對(duì)轉(zhuǎn)移短轉(zhuǎn)移、長轉(zhuǎn)移)有條件轉(zhuǎn)移有條件轉(zhuǎn)移絕對(duì)調(diào)用長調(diào)用)絕對(duì)調(diào)用長調(diào)用)子程序返回子程序返回第一操作數(shù)與第二操作數(shù)比較不等則轉(zhuǎn)移第一操作數(shù)與第二操作數(shù)比較不等則轉(zhuǎn)移4. 4. 邏輯操作類:邏輯操作類: ANL ANL ORL ORL XRL XRL與與或或異或異或4/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)3 3、操作數(shù)、操作數(shù) 操作數(shù)是一條指令操作的對(duì)象。不同
6、功能的指令,操作對(duì)操作數(shù)是一條指令操作的對(duì)象。不同功能的指令,操作對(duì)象形式不同。象形式不同。 操作數(shù)可以是數(shù)據(jù),也可以是地址。操作數(shù)可以是數(shù)據(jù),也可以是地址。 操作數(shù)是指令中給出的數(shù)據(jù)時(shí),被稱為立即數(shù)。它有操作數(shù)是指令中給出的數(shù)據(jù)時(shí),被稱為立即數(shù)。它有8 8位位和和1616位二進(jìn)制數(shù)兩種。在助記符的數(shù)字前加以位二進(jìn)制數(shù)兩種。在助記符的數(shù)字前加以“#”“#”來標(biāo)記來標(biāo)記其是立即數(shù),常用符號(hào)其是立即數(shù),常用符號(hào)“#data“#data表示。表示。 操作數(shù)也可以是存放數(shù)據(jù)的地址,這些地址可以是:操作數(shù)也可以是存放數(shù)據(jù)的地址,這些地址可以是:1.1.所選定寄存器工作區(qū)內(nèi)的所選定寄存器工作區(qū)內(nèi)的R7R7
7、R0R0,A A、B B、C C位)、位)、ABAB雙字節(jié)),雙字節(jié)),DPTRDPTR雙字節(jié)等可編址的寄存器。雙字節(jié)等可編址的寄存器。2.2. 內(nèi)部數(shù)據(jù)存儲(chǔ)器中低內(nèi)部數(shù)據(jù)存儲(chǔ)器中低128128字節(jié),專用寄存器字節(jié),專用寄存器SFRSFR,可,可尋址的位。尋址的位。3.3. 外部數(shù)據(jù)存儲(chǔ)器空間。外部數(shù)據(jù)存儲(chǔ)器空間。4.4. 程序存儲(chǔ)器空間。程序存儲(chǔ)器空間。 注意注意 :編寫程序時(shí),操作數(shù)的最高位大于:編寫程序時(shí),操作數(shù)的最高位大于9 9時(shí),在操時(shí),在操作數(shù)的最高位前要加寫作數(shù)的最高位前要加寫0 0。否則,編譯會(huì)提示出錯(cuò)。例如:。否則,編譯會(huì)提示出錯(cuò)。例如:MOV A,#0F8HMOV A,#0
8、F8H是正確的,而是正確的,而MOV A,#F8HMOV A,#F8H是不正確的。是不正確的。5/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)4.1.2 4.1.2 指令格式及分類指令格式及分類 用助記符來描述機(jī)器指令的語言稱為符號(hào)語言或匯編語言,匯編語言是用助記符來描述機(jī)器指令的語言稱為符號(hào)語言或匯編語言,匯編語言是一種面向機(jī)器的程序設(shè)計(jì)語言。其規(guī)定的格式如下:一種面向機(jī)器的程序設(shè)計(jì)語言。其規(guī)定的格式如下: 標(biāo)號(hào)標(biāo)號(hào):操作碼助記符操作碼助記符 第一操作數(shù)第一操作數(shù),第二操作數(shù)第二操作數(shù) , ,第三操作數(shù)第三操作數(shù) ; ;注釋注釋 標(biāo)號(hào)是表示該指令所在的符號(hào)地址,一般是由字母開頭的字符串組成。例如:標(biāo)
9、號(hào)是表示該指令所在的符號(hào)地址,一般是由字母開頭的字符串組成。例如: ABC Q3 PAT D678 ABC Q3 PAT D678 均為標(biāo)號(hào)的允許格式均為標(biāo)號(hào)的允許格式 5AC -PTR +A 5AC -PTR +A等等 均為標(biāo)號(hào)不允許的格式均為標(biāo)號(hào)不允許的格式 操作碼助記符表示了指令的功能。操作碼助記符表示了指令的功能。 第一操作數(shù)、第二操作數(shù)都表示操作的對(duì)象,這些是指令的核心部分。第一操作數(shù)、第二操作數(shù)都表示操作的對(duì)象,這些是指令的核心部分。指令操作碼部分是必不可少的。操作數(shù)段有的指令可以沒有,或者只有一個(gè)指令操作碼部分是必不可少的。操作數(shù)段有的指令可以沒有,或者只有一個(gè)操作數(shù),例如:操作
10、數(shù),例如: RETI RETI; ;中斷返回,無操作數(shù)中斷返回,無操作數(shù) CPL A CPL A; ;累加器逐位取反,只有一個(gè)操作數(shù)。累加器逐位取反,只有一個(gè)操作數(shù)。 注釋字段是為方便用戶閱讀程序所加注的說明。注釋字段是為方便用戶閱讀程序所加注的說明。1 1、匯編語言、匯編語言 6/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)2 2、指令代碼的存儲(chǔ)格式、指令代碼的存儲(chǔ)格式 指令代碼是指令的二進(jìn)制表示方法,是指令在存儲(chǔ)器中存放的形式。匯指令代碼是指令的二進(jìn)制表示方法,是指令在存儲(chǔ)器中存放的形式。匯編語言只有經(jīng)編語言只有經(jīng)“編輯編輯/ /匯編程序翻譯成機(jī)器語言,才能被執(zhí)行。匯編程序翻譯成機(jī)器語言,才能被執(zhí)
11、行。STC12C5A60S2STC12C5A60S2單片機(jī)指令系統(tǒng)中的指令字長有單字節(jié)、雙字節(jié)、三字節(jié)三種。單片機(jī)指令系統(tǒng)中的指令字長有單字節(jié)、雙字節(jié)、三字節(jié)三種。指令字節(jié)數(shù)越多,所占用內(nèi)存單元越多。但是指令執(zhí)行時(shí)間長短并不和所占指令字節(jié)數(shù)越多,所占用內(nèi)存單元越多。但是指令執(zhí)行時(shí)間長短并不和所占用字節(jié)數(shù)的多少成比例。例如乘法為單字節(jié)指令,但是所需的指令執(zhí)行時(shí)間用字節(jié)數(shù)的多少成比例。例如乘法為單字節(jié)指令,但是所需的指令執(zhí)行時(shí)間卻最長。卻最長。 單字節(jié)指令:操作碼單字節(jié)指令:操作碼 例:例:RETRET;機(jī)器代碼:;機(jī)器代碼:22H22H 雙字節(jié)指令:操雙字節(jié)指令:操 作作 碼操碼操 作作 數(shù)數(shù)
12、例:例:MOV A,#0FHMOV A,#0FH;機(jī)器代碼:;機(jī)器代碼:74 0F H74 0F H 三字節(jié)指令:操作碼第一操作數(shù)第二操作數(shù)三字節(jié)指令:操作碼第一操作數(shù)第二操作數(shù) 例:例:MOV 74H,#0BHMOV 74H,#0BH; 機(jī)器代碼:機(jī)器代碼:75 74 0BH75 74 0BH7/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)3 3、指令中的符號(hào)約定、指令中的符號(hào)約定 符號(hào)符號(hào)含義含義A A累加器累加器ACCACCB B寄存器寄存器B BC C進(jìn)借位標(biāo)志位,在位操作指令中作為累加器使用進(jìn)借位標(biāo)志位,在位操作指令中作為累加器使用directdirect直接地址直接地址bitbit位地址,
13、內(nèi)部位地址,內(nèi)部RAMRAM中的可尋址位和中的可尋址位和SFRSFR中的尋址位中的尋址位#data#data8 8位常數(shù)位常數(shù)8 8位立即數(shù))位立即數(shù))#data16#data161616位常數(shù)位常數(shù)1616位立即數(shù))位立即數(shù))間接尋址間接尋址relrel8 8位帶符號(hào)偏移量。位帶符號(hào)偏移量。RnRn當(dāng)前工作區(qū)當(dāng)前工作區(qū)0 03 3區(qū)的工作寄存器區(qū)的工作寄存器n=0,1,7n=0,1,7)RiRi可作地址寄存器的工作寄存器可作地址寄存器的工作寄存器R0R0和和R1R1i=0,1i=0,1)(X X)X X寄存器內(nèi)容寄存器內(nèi)容(X X)由由X X寄存器尋址的存儲(chǔ)單元的內(nèi)容寄存器尋址的存儲(chǔ)單元的內(nèi)
14、容表示數(shù)據(jù)的傳送方向表示數(shù)據(jù)的傳送方向/ /表示位操作數(shù)取反表示位操作數(shù)取反表示邏輯與操作表示邏輯與操作表示邏輯或操作表示邏輯或操作表示邏輯異或操作表示邏輯異或操作8/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)4.1.3 4.1.3 尋址方式尋址方式 指令中的源操作數(shù)是立即數(shù),叫做立即尋址。立即數(shù)的類型可以是:指令中的源操作數(shù)是立即數(shù),叫做立即尋址。立即數(shù)的類型可以是:二進(jìn)制二進(jìn)制(B)(B)、十進(jìn)制、十六進(jìn)制、十進(jìn)制、十六進(jìn)制(H)(H)、整數(shù)、序數(shù)或者字符。立即數(shù)的字長、整數(shù)、序數(shù)或者字符。立即數(shù)的字長可以是可以是8 8位或位或1616位。位。例如:例如: MOV A,#61H MOV A,#6
15、1H這條指令是把這條指令是把61H61H這個(gè)數(shù)據(jù)送入到累加器這個(gè)數(shù)據(jù)送入到累加器A A中。中。例如:例如: MOV DPTR,#2050H MOV DPTR,#2050H這條指令是把這條指令是把2050H2050H這個(gè)數(shù)據(jù)送入到數(shù)據(jù)指針這個(gè)數(shù)據(jù)送入到數(shù)據(jù)指針DPTRDPTR中。中。1 1立即尋址立即尋址 操作數(shù)是指令的重要組成部分,它指定了參與運(yùn)算的數(shù)或數(shù)所在操作數(shù)是指令的重要組成部分,它指定了參與運(yùn)算的數(shù)或數(shù)所在單元地址,而如何得到這個(gè)地址就稱為尋址方式。一般來說,尋址方單元地址,而如何得到這個(gè)地址就稱為尋址方式。一般來說,尋址方式越多,計(jì)算機(jī)功能越強(qiáng),靈活性越大。所以尋址方式對(duì)機(jī)器的性能式
16、越多,計(jì)算機(jī)功能越強(qiáng),靈活性越大。所以尋址方式對(duì)機(jī)器的性能有重大影響。有重大影響。STC12C5A60S2STC12C5A60S2單片機(jī)共有單片機(jī)共有7 7種尋址方式,描述如下:種尋址方式,描述如下:0111010001100001PC操作碼立即數(shù)ACC中0E0H61H9/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)2 2直接尋址直接尋址 直接尋址就是在指令中包含了操作數(shù)的地址,該地址直接給出了參加直接尋址就是在指令中包含了操作數(shù)的地址,該地址直接給出了參加運(yùn)算或傳送的單元或位。它可訪問三種地址空間:運(yùn)算或傳送的單元或位。它可訪問三種地址空間: (1 1) 特殊功能寄存器特殊功能寄存器SFRSFR:直
17、接尋址是唯一的訪問形式:直接尋址是唯一的訪問形式 (2 2) 內(nèi)部數(shù)據(jù)內(nèi)部數(shù)據(jù)RAMRAM中的中的00H00H7FH7FH的的128128個(gè)字節(jié)單元個(gè)字節(jié)單元 (3 3) 位地址空間位地址空間 例如:例如:MOV A,60H ;MOV A,60H ;把把60H60H單元內(nèi)容送入累加器單元內(nèi)容送入累加器A A中。中。 1110010101100000操作碼直接地址ACC 0E0HPC60H程序存儲(chǔ)器RAM89H89H10/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)3 3寄存器尋址寄存器尋址 指定某一可尋址的寄存器的內(nèi)容為操作數(shù),對(duì)寄存器指定某一可尋址的寄存器的內(nèi)容為操作數(shù),對(duì)寄存器ACCACC,B B
18、,DPTRDPTR和和CYCY進(jìn)位標(biāo)志,也是布爾處理機(jī)的累加器),其尋址時(shí)具體的寄存器已隱含在進(jìn)位標(biāo)志,也是布爾處理機(jī)的累加器),其尋址時(shí)具體的寄存器已隱含在其操作碼中。而對(duì)選定的其操作碼中。而對(duì)選定的8 8個(gè)工作寄存器個(gè)工作寄存器R7R7R0R0,則用指令操作碼的低,則用指令操作碼的低3 3位指位指明所用的寄存器。在應(yīng)用中,可以先通過明所用的寄存器。在應(yīng)用中,可以先通過PSWPSW中的中的RS1RS1、RS0RS0兩位來選擇寄存器兩位來選擇寄存器組,再用操作碼中低組,再用操作碼中低3 3位來確定是組內(nèi)哪一個(gè)寄存器,達(dá)到尋址的目的。位來確定是組內(nèi)哪一個(gè)寄存器,達(dá)到尋址的目的。 例如:例如:IN
19、C R5INC R5; ;把寄存器把寄存器R3R3的內(nèi)容加的內(nèi)容加1 1后再送回后再送回R5R500001101110000RS1RS0PSWALU內(nèi)部RAMPC D5D6D711/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)4 4寄存器間接尋址寄存器間接尋址 指令指定某一寄存器的內(nèi)容作為操作數(shù)地址。指令指定某一寄存器的內(nèi)容作為操作數(shù)地址。 STC12C5A60S2 STC12C5A60S2單片機(jī)中可用來間接尋址的寄存器有:選定工作寄存器區(qū)的單片機(jī)中可用來間接尋址的寄存器有:選定工作寄存器區(qū)的R0R0、R1R1,1616位的數(shù)據(jù)指針位的數(shù)據(jù)指針DPTRDPTR,使用時(shí)前面加表示間接尋址。,使用時(shí)前面加
20、表示間接尋址。 例如:例如:MOV A ,R0 ;MOV A ,R0 ;將將R0R0中的內(nèi)容所表示的地址單元中的內(nèi)容送給中的內(nèi)容所表示的地址單元中的內(nèi)容送給A A MOVX DPTP ,A MOVX DPTP ,A1110011 00D5D6D700110111RS1 RS00110000000110111內(nèi)部RAM000021形成8位地址34PSW A 12/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)5 5變址尋址變址尋址 由指令指定的偏移量寄存器和變址寄存器由指令指定的偏移量寄存器和變址寄存器DPTRDPTR或或PCPC相加所得結(jié)果作為操相加所得結(jié)果作為操作數(shù)地址。作數(shù)地址。 例如:例如:MOV
21、C A ,A+PCMOVC A ,A+PC 其中其中A A作為偏移量寄存器,作為偏移量寄存器,PCPC作為變址寄存器,作為變址寄存器,A A中內(nèi)容為無符號(hào)數(shù)和中內(nèi)容為無符號(hào)數(shù)和PCPC相加,從而得到其真正的操作數(shù)地址。相加,從而得到其真正的操作數(shù)地址。13/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)6 6相對(duì)尋址相對(duì)尋址 把指令中給定的地址偏移量與本指令所在單元地址即程序計(jì)數(shù)器把指令中給定的地址偏移量與本指令所在單元地址即程序計(jì)數(shù)器PCPC中中的內(nèi)容相加,即得到真正的程序轉(zhuǎn)移地址。與變址方式不同。該偏移量有的內(nèi)容相加,即得到真正的程序轉(zhuǎn)移地址。與變址方式不同。該偏移量有正、負(fù)號(hào),在該機(jī)器指令中必須以
22、補(bǔ)碼形式給出,所轉(zhuǎn)移的范圍為相對(duì)于當(dāng)正、負(fù)號(hào),在該機(jī)器指令中必須以補(bǔ)碼形式給出,所轉(zhuǎn)移的范圍為相對(duì)于當(dāng)前前PCPC值的值的-128-128+127+127之間。之間。 例如:例如:JC 80HJC 80H 若若C=0C=0,則,則PCPC值不變,若進(jìn)位值不變,若進(jìn)位C=1C=1,則以現(xiàn)行的,則以現(xiàn)行的PCPC為基地址加上為基地址加上80H80H得到轉(zhuǎn)得到轉(zhuǎn)向地址。向地址。 1005H0100000010000000PC+11006HPC+2ALU1007H PC操作碼偏移量1007H-80H=0F87H0F87HPC1007H14/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)7 7位尋址位尋址 支持位
23、單元存取操作是支持位單元存取操作是STC12C5A60S2STC12C5A60S2單片機(jī)的一個(gè)主要特點(diǎn)。位操單片機(jī)的一個(gè)主要特點(diǎn)。位操作指令能對(duì)位地址空間的每一位都可進(jìn)行運(yùn)算和傳送操作。作指令能對(duì)位地址空間的每一位都可進(jìn)行運(yùn)算和傳送操作。例如:例如:MOV C,P1.0MOV C,P1.0; ;將將P1.0P1.0的狀態(tài)傳送到的狀態(tài)傳送到C C SETB 20.6H SETB 20.6H ; ;將將20H20H單元的第單元的第6 6位置為位置為1 1 MOV A,50H MOV A,50H;50H;50H是字節(jié)地址是字節(jié)地址 MOV C,50H MOV C,50H ;50H;50H是位地址是位
24、地址 MOV 60H,50H MOV 60H,50H;50H;50H是字節(jié)地址是字節(jié)地址15/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)4.1.4 4.1.4 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 數(shù)據(jù)傳送類指令是使用頻率最高的一類指令。數(shù)據(jù)傳送類指令是使用頻率最高的一類指令。主要用來給主要用來給STC12C5A60S2STC12C5A60S2單片機(jī)的內(nèi)部和外部資源單片機(jī)的內(nèi)部和外部資源賦值,進(jìn)行堆棧的存取操作等。數(shù)據(jù)傳送類指令執(zhí)賦值,進(jìn)行堆棧的存取操作等。數(shù)據(jù)傳送類指令執(zhí)行前后,對(duì)程序狀態(tài)字行前后,對(duì)程序狀態(tài)字PSWPSW不產(chǎn)生影響。按其操作方不產(chǎn)生影響。按其操作方式,又可把它們分為三種:式,又可把它們分
25、為三種: 數(shù)據(jù)傳送數(shù)據(jù)傳送 數(shù)據(jù)交換數(shù)據(jù)交換 棧操作棧操作 16/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)1 1、數(shù)據(jù)傳送指令、數(shù)據(jù)傳送指令 格式:格式:MOV MOV , 功能:把第二操作數(shù)指定的字節(jié)變量傳送功能:把第二操作數(shù)指定的字節(jié)變量傳送到由第一操作數(shù)指定的單元中,不影響源字節(jié),到由第一操作數(shù)指定的單元中,不影響源字節(jié),不影響任何別的寄存器或標(biāo)志。這是最靈活的不影響任何別的寄存器或標(biāo)志。這是最靈活的操作,允許操作,允許1515種源和目的尋址方式組合。種源和目的尋址方式組合。(1 1MOVMOV指令指令17/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)1 1立即數(shù)送累加器立即數(shù)送累加器A A和內(nèi)部數(shù)
26、據(jù)存儲(chǔ)器和內(nèi)部數(shù)據(jù)存儲(chǔ)器RnRn,內(nèi)部,內(nèi)部RAMRAM,SFRSFR)。共有)。共有4 4條指令:條指令:MOV A, #data MOV A, #data ; ;(A A) #data #dataMOV direct,#data MOV direct,#data ; ;(directdirect) #data #dataMOV Ri, #data MOV Ri, #data ; ;(RiRi) #data #dataMOV Rn, #data MOV Rn, #data ; ;(RnRn) #data #data 符號(hào)表示間接尋址,(符號(hào)表示間接尋址,(RiRi)表示把立即數(shù)送到由)表示把
27、立即數(shù)送到由RiRi寄存器的寄存器的內(nèi)容所指出的那個(gè)內(nèi)容所指出的那個(gè)RAMRAM單元中去。單元中去。RiRi中中i=0i=0或或i=1i=1。例例1 1 MOV MOV R0,#56HR0,#56H MOV MOV R1,#59HR1,#59H 假設(shè)假設(shè)R0R0的內(nèi)容為的內(nèi)容為20H20H,則執(zhí)行上述第一條指令后,立即數(shù),則執(zhí)行上述第一條指令后,立即數(shù)56H56H將送將送入內(nèi)部數(shù)據(jù)入內(nèi)部數(shù)據(jù)RAMRAM字節(jié)地址為字節(jié)地址為20H20H的單元中。的單元中。例例2 2 MOV MOVR0,#79HR0,#79H; ;將立即數(shù)將立即數(shù)79H79H送到送到R0R0中中 MOV MOVR1,#15HR1
28、,#15H; ;將立即數(shù)將立即數(shù)15H15H送到送到R1R1中中例例3 3 利用直接尋址可把立即數(shù)送入內(nèi)部數(shù)據(jù)利用直接尋址可把立即數(shù)送入內(nèi)部數(shù)據(jù)RAMRAM任意單元或任意單元或SFRSFR中任一中任一特殊功能寄存器,如例特殊功能寄存器,如例1 1用間接尋址給內(nèi)部用間接尋址給內(nèi)部RAM 20HRAM 20H單元送立即數(shù)單元送立即數(shù)56H56H,需兩條指令:需兩條指令: MOV MOVR0,#20HR0,#20H MOV MOVR0,#56HR0,#56H 用直接尋址只用一條指令:用直接尋址只用一條指令: MOV MOV20H,#56H20H,#56H 而指令而指令MOVMOVP1,#80HP1,
29、#80H 則可把立即數(shù)則可把立即數(shù)80H80H直接送入直接送入P1P1字節(jié)地址為字節(jié)地址為90H90H口中??谥?。18/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù) 2 2內(nèi)部數(shù)據(jù)存儲(chǔ)器內(nèi)部數(shù)據(jù)存儲(chǔ)器RnRn,內(nèi)部,內(nèi)部RAMRAM,SFRSFR與累加器與累加器A A傳送數(shù)據(jù)傳送數(shù)據(jù)共有共有6 6條指令:條指令: MOV A, direct MOV A, direct; ;(A A) (directdirect) MOV A, Ri MOV A, Ri ; ;(A A) (RiRi) MOV A, Rn MOV A, Rn ; ;(A A) (RnRn) MOV direct, A MOV direc
30、t, A ; ;(directdirect) (A A) MOV Ri, A MOV Ri, A ; ;(RiRi) (A A) MOV Rn, A MOV Rn, A ; ;(RnRn)(A A) 間接尋址間接尋址RiRi是以是以RiRi的內(nèi)容作為地址,由于的內(nèi)容作為地址,由于RiRi為八位寄存器,尋址為八位寄存器,尋址范圍為范圍為0 0255255。但由于特殊功能寄存器。但由于特殊功能寄存器SFRSFR只能被直接尋址,而對(duì)于只能被直接尋址,而對(duì)于普通的普通的80518051單片機(jī)來說,在單片機(jī)來說,在SFRSFR地址范圍地址范圍128128255255中很多單元又中很多單元又無定義,若對(duì)之
31、讀寫,將得不到確定的值,寫入的數(shù)也將丟失。所以無定義,若對(duì)之讀寫,將得不到確定的值,寫入的數(shù)也將丟失。所以對(duì)內(nèi)部數(shù)據(jù)存儲(chǔ)器來說間接尋址的真正作用范圍實(shí)際上只有對(duì)內(nèi)部數(shù)據(jù)存儲(chǔ)器來說間接尋址的真正作用范圍實(shí)際上只有0 0127127個(gè)個(gè)單元的內(nèi)部數(shù)據(jù)單元的內(nèi)部數(shù)據(jù)RAMRAM地址。地址。 例例 4 4 指 令 序 列 :指 令 序 列 : M O V R 1 , # 8 2 H M O V R 1 , # 8 2 H M O V A , R 1 M O V A , R 1 上述指令對(duì)于普通上述指令對(duì)于普通80518051單片機(jī)是不正確的,因?yàn)閱纹瑱C(jī)是不正確的,因?yàn)?2H82H是特殊功能是特殊功能寄
32、存器寄存器DPLDPL的地址值,對(duì)特殊功能寄存器來說,這種間接尋址方式無的地址值,對(duì)特殊功能寄存器來說,這種間接尋址方式無效。但是,對(duì)于效。但是,對(duì)于STC12C5410ADSTC12C5410AD單片機(jī)而言則是正確的,其功能是將內(nèi)單片機(jī)而言則是正確的,其功能是將內(nèi)部部RAMRAM的的82H82H單元中的內(nèi)容送到單元中的內(nèi)容送到A A中。并且,對(duì)于中。并且,對(duì)于80528052的內(nèi)部的內(nèi)部80H80HFFHFFH的的 R A MR A M 單 元 , 只 能 使 用 這 種 間 接 尋 址 方 式 進(jìn) 行 訪 問 。單 元 , 只 能 使 用 這 種 間 接 尋 址 方 式 進(jìn) 行 訪 問 。
33、 所以欲從所以欲從DPLDPL取數(shù)到累加器取數(shù)到累加器A A,可用直接尋址方式:,可用直接尋址方式:MOV A, MOV A, 82H82H19/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)3 3內(nèi)部數(shù)據(jù)存儲(chǔ)器中內(nèi)部數(shù)據(jù)存儲(chǔ)器中RnRn、SFRSFR和內(nèi)部數(shù)據(jù)和內(nèi)部數(shù)據(jù)RAMRAM之間的數(shù)據(jù)傳送之間的數(shù)據(jù)傳送, ,共有共有5 5條條指令:指令: MOV direct, direct MOV direct, direct ; ;(directdirect目)目) (directdirect源)源) MOV direct MOV direct, Ri Ri ; ;(directdirect)(RiRi)
34、MOV direct, Rn MOV direct, Rn ; ;(directdirect)(RnRn) MOV Ri, direct MOV Ri, direct ; ;(RiRi)(directdirect) MOV Rn, direct MOV Rn, direct ; ;(RnRn)(directdirect) 該該5 5條指令共有三種尋址方式:直接尋址,寄存器尋址,寄存器間條指令共有三種尋址方式:直接尋址,寄存器尋址,寄存器間接尋址。接尋址。對(duì)于直接尋址方式,可訪問內(nèi)部對(duì)于直接尋址方式,可訪問內(nèi)部RAM 00HRAM 00H7FH7FH地址空間的單元和所有地址空間的單元和所有特殊功
35、能寄存器,對(duì)特殊功能寄存器,對(duì)80H80HFFHFFH地址單元需要使用寄存器簡介尋址方式地址單元需要使用寄存器簡介尋址方式進(jìn)行訪問。進(jìn)行訪問。 例例5 5 指令指令 MOV P3, P1 MOV P3, P1 可把可把P1P1口的內(nèi)容直接送到口的內(nèi)容直接送到P3P3口輸出,而不必經(jīng)過累加器口輸出,而不必經(jīng)過累加器A“A“中轉(zhuǎn)中轉(zhuǎn)”。 例例6 6 若設(shè)若設(shè)PSWPSW中標(biāo)志位中標(biāo)志位RS1RS1、RS0RS0為為“11”“11”,則選中第三組工作寄,則選中第三組工作寄存器區(qū),在存器區(qū),在 這種情況下:這種情況下: MOV direct, R0 MOV direct, R0 與與 MOV dire
36、ct, 18H MOV direct, 18H兩指令是等價(jià)的。兩指令是等價(jià)的。 例例7 7 用立即尋址指令可直接給內(nèi)部用立即尋址指令可直接給內(nèi)部RAMRAM中中20H20H、25H25H和和P1P1口上置數(shù):口上置數(shù): MOV 20H, #25H MOV 20H, #25H MOV 25H, #10H MOV 25H, #10H MOV P1 , #0CAH MOV P1 , #0CAH執(zhí)行后使執(zhí)行后使20H20H)=25H=25H,(,(25H25H)=10H=10H,(,(P1P1)=0CAH=0CAH。20/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù) 4 4目標(biāo)地址傳送目標(biāo)地址傳送, ,只有一
37、條指令:只有一條指令: MOV DPTR ,#data16 MOV DPTR ,#data16 功能:把功能:把1616位常數(shù)裝入數(shù)據(jù)指針。位常數(shù)裝入數(shù)據(jù)指針。 例例8 8 指令指令 MOV DPTR ,#2019H MOV DPTR ,#2019H 表示把表示把1616位常數(shù)裝入數(shù)據(jù)指針。其中位常數(shù)裝入數(shù)據(jù)指針。其中DPH=20HDPH=20H,DPL=03HDPL=03H。21/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)(2 2外部數(shù)據(jù)存儲(chǔ)器與累加器外部數(shù)據(jù)存儲(chǔ)器與累加器A A傳送指令傳送指令MOVXMOVX MOVX MOVX指令主要用于累加器指令主要用于累加器A A和外部擴(kuò)充的和外部擴(kuò)充的R
38、AMRAM或擴(kuò)展或擴(kuò)展I/OI/O口進(jìn)行數(shù)據(jù)傳口進(jìn)行數(shù)據(jù)傳送。這種傳送只有一種尋址方式,就是寄存器間接尋址。有兩種寄存器間送。這種傳送只有一種尋址方式,就是寄存器間接尋址。有兩種寄存器間接尋址:接尋址: 1 1用用R1R1或或R0R0進(jìn)行寄存器間接尋址。在傳統(tǒng)的進(jìn)行寄存器間接尋址。在傳統(tǒng)的80518051單片機(jī)中,這單片機(jī)中,這種方式能訪問外部數(shù)據(jù)存儲(chǔ)器或擴(kuò)展種方式能訪問外部數(shù)據(jù)存儲(chǔ)器或擴(kuò)展I/OI/O口口256256個(gè)字節(jié)中的一個(gè)字節(jié)。個(gè)字節(jié)中的一個(gè)字節(jié)。若要訪問更大的空間,需使用若要訪問更大的空間,需使用P2P2口輸出高口輸出高8 8位地址。需先給位地址。需先給P2P2和和RiRi賦值,賦
39、值,然后執(zhí)行然后執(zhí)行MOVXMOVX指令。指令。 2 2用用1616位的數(shù)據(jù)存儲(chǔ)器地址指針位的數(shù)據(jù)存儲(chǔ)器地址指針DPTRDPTR進(jìn)行寄存器間接尋址。進(jìn)行寄存器間接尋址。 指令格式:指令格式:MOVX MOVX , MOVX A, DPTR MOVX A, DPTR ; ;(A A)(DPTRDPTR) MOVX A, Ri MOVX A, Ri ; ;(A A)(RiRi) MOVX DPTR,A MOVX DPTR,A ; ;(DPTRDPTR)(A A) MOVX Ri, A MOVX Ri, A ; ;(RiRi)(A A)在實(shí)際應(yīng)用中,一般使用在實(shí)際應(yīng)用中,一般使用DPTRDPTR寄存
40、器間接尋址方式訪問外部數(shù)據(jù)存儲(chǔ)器。寄存器間接尋址方式訪問外部數(shù)據(jù)存儲(chǔ)器。 例例 若外部數(shù)據(jù)存儲(chǔ)器單元中:(若外部數(shù)據(jù)存儲(chǔ)器單元中:(3007H3007H)= =(60H60H),(),(3008H3008H)= =(2FH2FH)則執(zhí)行:則執(zhí)行: MOV DPTR ,#3007H MOV DPTR ,#3007H MOVX A, DPTR MOVX A, DPTR使累加器使累加器A A)=60H=60H22/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)(3 3程序存儲(chǔ)器向累加器程序存儲(chǔ)器向累加器A A傳送指令傳送指令MOVCMOVC 對(duì)于程序存儲(chǔ)器,對(duì)于程序存儲(chǔ)器,STC12C5A60S2STC12C
41、5A60S2單片機(jī)提供了兩條極其有用的查表指單片機(jī)提供了兩條極其有用的查表指令。這兩條指令采用變址尋址,以令。這兩條指令采用變址尋址,以PCPC或或DPTRDPTR為基址寄存器,以累加器為基址寄存器,以累加器A A為為變址寄存器,基址寄存器與變址寄存器內(nèi)容相加即得到程序存儲(chǔ)器某單元變址寄存器,基址寄存器與變址寄存器內(nèi)容相加即得到程序存儲(chǔ)器某單元的地址值,的地址值,MOVCMOVC指令則把該存貯單元的內(nèi)容傳送到累加器指令則把該存貯單元的內(nèi)容傳送到累加器A A中。中。 指令格式:指令格式:MOVC A ,A+PCMOVC A ,A+PC ; PC ; PC(PCPC)+1 +1 (A A)(A A
42、)+ +(PCPC) MOVC A ,A+DPTR ; MOVC A ,A+DPTR ; (A A)(A A)+ +(DPTRDPTR) 功能:把累加器功能:把累加器A A中內(nèi)容與基址寄存器中內(nèi)容與基址寄存器PCPC、DPTRDPTR內(nèi)容相加,求得內(nèi)容相加,求得程序存儲(chǔ)器某單元地址,再把該地址單元內(nèi)容送累加器程序存儲(chǔ)器某單元地址,再把該地址單元內(nèi)容送累加器A A。指令執(zhí)行后不。指令執(zhí)行后不改變基址寄存器內(nèi)容,由于執(zhí)行改變基址寄存器內(nèi)容,由于執(zhí)行1616位加法,從低位加法,從低8 8位產(chǎn)生的進(jìn)位將傳送到位產(chǎn)生的進(jìn)位將傳送到高位去,不影響任何標(biāo)志。這兩條指令主要用于查表,即完成從程序存儲(chǔ)高位去,不
43、影響任何標(biāo)志。這兩條指令主要用于查表,即完成從程序存儲(chǔ)器讀取數(shù)據(jù)的功能。但由于兩條指令使用的基址寄存器不同,因此使用范器讀取數(shù)據(jù)的功能。但由于兩條指令使用的基址寄存器不同,因此使用范圍也不同。圍也不同。23/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù) MOVC A ,A+PC MOVC A ,A+PC 以以PCPC作為基址寄存器,在作為基址寄存器,在CPUCPU取完指令操作碼時(shí)取完指令操作碼時(shí)PCPC會(huì)自動(dòng)加會(huì)自動(dòng)加1 1,指向下一條指令的第一字節(jié)地址,所以這時(shí)作為基址寄存器的指向下一條指令的第一字節(jié)地址,所以這時(shí)作為基址寄存器的PCPC已已不是原值,而是不是原值,而是PC+1PC+1值。因?yàn)槔奂悠?/p>
44、中的內(nèi)容為值。因?yàn)槔奂悠髦械膬?nèi)容為8 8位無符號(hào)整數(shù),位無符號(hào)整數(shù),這就使得本指令查表范圍只能在以這就使得本指令查表范圍只能在以PCPC當(dāng)前值開始后的當(dāng)前值開始后的256256個(gè)字節(jié)范個(gè)字節(jié)范圍內(nèi)圍內(nèi), , 偏移量的計(jì)算公式如下:偏移量的計(jì)算公式如下: 偏移量:偏移量: DIS = DIS = 表首地址表首地址 (該指令所在地址(該指令所在地址+1+1) 例例1 1 若要根據(jù)累加器若要根據(jù)累加器A A的內(nèi)容找出由偽指令的內(nèi)容找出由偽指令DBDB所定義的四個(gè)值所定義的四個(gè)值中的一個(gè)??捎孟铝谐绦颍褐械囊粋€(gè)。可用下列程序:ppqqppqq: ADD A ,#01HADD A ,#01Hppqq+2
45、ppqq+2: MOVC A ,A+PCMOVC A ,A+PCppqq+3ppqq+3: RETRETppqq+4ppqq+4:STARSTAR: DB 66H DB 66H DB 77HDB 77H DB 88HDB 88H DB 99HDB 99H24/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù) MOVC A ,A+DPTR MOVC A ,A+DPTR 指令基址寄存器為數(shù)據(jù)指針指令基址寄存器為數(shù)據(jù)指針DPTRDPTR,表格常數(shù)可設(shè)置在,表格常數(shù)可設(shè)置在64K64K程序存儲(chǔ)器的程序存儲(chǔ)器的任何地址空間,而不必像任何地址空間,而不必像MOVC A ,A+PCMOVC A ,A+PC指令只設(shè)在指令
46、只設(shè)在PCPC值以下的值以下的256256個(gè)單元個(gè)單元中。其缺點(diǎn)是若中。其缺點(diǎn)是若DPTRDPTR已有它用,在賦表首地址之前必須保護(hù)現(xiàn)場(chǎng),執(zhí)行完已有它用,在賦表首地址之前必須保護(hù)現(xiàn)場(chǎng),執(zhí)行完查表后再予以恢復(fù)。查表后再予以恢復(fù)。例例2 2 試編制根據(jù)累加器試編制根據(jù)累加器A A中的數(shù)中的數(shù)0 09 9之間查其平方表的子程序。之間查其平方表的子程序。 COUNT COUNT: PUSH DPH PUSH DPH ; ;保護(hù)保護(hù)DPTRDPTR內(nèi)容內(nèi)容 PUSH DPL PUSH DPL ; ; MOV DPTR ,#TABLE MOV DPTR ,#TABLE; ;賦表首址賦表首址DPTRDPTR
47、 MOVC A ,A+DPTR MOVC A ,A+DPTR ; ;據(jù)據(jù)A A中內(nèi)容查表中內(nèi)容查表 POP DPL POP DPL ; ;恢復(fù)恢復(fù)DPTRDPTR原內(nèi)容原內(nèi)容 POP DPH POP DPH RET RET ; ;返回主程序返回主程序 TABLE TABLE: DB 00 DB 00 DB 01 DB 01 DB 04 DB 04 DB 09 DB 09 DB 16 DB 16 DB 25 DB 25 DB 36 DB 36 DB 49 DB 49 DB 64 DB 64 DB 81 DB 8125/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)2 2、數(shù)據(jù)交換指令、數(shù)據(jù)交換指令 (1
48、1字節(jié)交換指令字節(jié)交換指令 XCH A,direct XCH A,direct ; ;(A A) (directdirect) XCH A,Ri XCH A,Ri ; ;(A A) (RiRi) XCH A,Rn XCH A,Rn ; ;(A A) (RnRn) 上述指令把累加器上述指令把累加器A A中內(nèi)容與第二操作數(shù)所指定的工作寄存器,中內(nèi)容與第二操作數(shù)所指定的工作寄存器,間接尋址和直接尋址的某單元內(nèi)容互相交換。間接尋址和直接尋址的某單元內(nèi)容互相交換。例例 設(shè)設(shè)R0R0)=20H=20H,(,(A A)=3FH=3FH,(,(20H20H)=75H=75H,執(zhí)行指令,執(zhí)行指令 XCH A,R
49、0 XCH A,R0 將使將使A A)=75H=75H,(,(20H20H)=3FH=3FH,實(shí)現(xiàn)了累加器,實(shí)現(xiàn)了累加器A A和內(nèi)部和內(nèi)部RAM RAM 20H20H單元內(nèi)容的互換。單元內(nèi)容的互換。 26/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù) (2 2半字節(jié)交換指令半字節(jié)交換指令 XCHD A,Ri XCHD A,Ri ; ;(A30A30)(RiRi3030) 該指令把累加器該指令把累加器A A的低的低4 4位和寄存器間接尋址的內(nèi)部位和寄存器間接尋址的內(nèi)部RAMRAM單元的低單元的低4 4位交換,高位交換,高4 4位內(nèi)容不變,不影響標(biāo)志位。位內(nèi)容不變,不影響標(biāo)志位。 例例 設(shè)設(shè)R1R1的內(nèi)容
50、為的內(nèi)容為30H30H,A A的內(nèi)容為的內(nèi)容為67H67H,內(nèi)部,內(nèi)部RAMRAM中中30H30H的內(nèi)容為的內(nèi)容為84H84H,執(zhí)行指令,執(zhí)行指令 XCHD A,R1 XCHD A,R1 結(jié)果:(結(jié)果:(A A)=64H=64H,(,(30H30H)=87H=87H27/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)3 3、棧操作指令、棧操作指令 PUSH direct PUSH direct; ;(SPSP)(SPSP)+1+1(SPSP)(directdirect) POP direct POP direct; ;(directdirect)(SPSP)()(SPSP)(SPSP)- 1- 1 堆棧
51、中的數(shù)據(jù)是以堆棧中的數(shù)據(jù)是以“后進(jìn)先出的結(jié)構(gòu)方式處理的,這種后進(jìn)先出的結(jié)構(gòu)方式處理的,這種“后進(jìn)先出后進(jìn)先出的特點(diǎn)是由堆棧指針的特點(diǎn)是由堆棧指針SPSP來控制的,來控制的,SPSP用來自動(dòng)跟蹤棧頂?shù)刂?。由于單片機(jī)堆用來自動(dòng)跟蹤棧頂?shù)刂?。由于單片機(jī)堆棧編址采用向上生成方式,即棧底占用較低地址,棧頂占用較高地址,所以棧編址采用向上生成方式,即棧底占用較低地址,棧頂占用較高地址,所以其過程為:其過程為: 入棧操作:先入棧操作:先SPSP)+1+1(SPSP),指向棧頂?shù)纳弦粋€(gè)空單元,后把直接),指向棧頂?shù)纳弦粋€(gè)空單元,后把直接尋址單元的內(nèi)容壓入尋址單元的內(nèi)容壓入SPSP所指的單元中。所指的單元中。
52、出棧操作:先彈出棧頂內(nèi)容到直接尋址單元,后出棧操作:先彈出棧頂內(nèi)容到直接尋址單元,后SPSP)- 1- 1(SPSP),形),形成新的堆棧指針。成新的堆棧指針。例例 PUSH ACC ; PUSH ACC ;保護(hù)累加器保護(hù)累加器ACCACC中內(nèi)容中內(nèi)容 PUSH PSW PUSH PSW ; ;保護(hù)標(biāo)志寄存器內(nèi)容保護(hù)標(biāo)志寄存器內(nèi)容 ; ; 執(zhí)行服務(wù)程序執(zhí)行服務(wù)程序 POP PSW POP PSW ; ;恢復(fù)標(biāo)志寄存器內(nèi)容恢復(fù)標(biāo)志寄存器內(nèi)容 POP ACC ; POP ACC ;恢復(fù)累加器恢復(fù)累加器ACCACC中內(nèi)容中內(nèi)容 該程序執(zhí)行后,累加器該程序執(zhí)行后,累加器ACCACC和和PSWPSW寄存
53、器中的內(nèi)容可得到正確的恢復(fù)。寄存器中的內(nèi)容可得到正確的恢復(fù)。 若為:若為: PUSH ACC PUSH ACC PUSH PSW PUSH PSW POP ACC POP ACC POP PSW POP PSW 則執(zhí)行后,將使得則執(zhí)行后,將使得ACCACC和和PSWPSW中的內(nèi)容互換。中的內(nèi)容互換。28/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)在數(shù)據(jù)傳送類操作中應(yīng)注意以下幾點(diǎn):在數(shù)據(jù)傳送類操作中應(yīng)注意以下幾點(diǎn): 1 1除了用除了用POPPOP或或MOVMOV指令將數(shù)據(jù)傳送到指令將數(shù)據(jù)傳送到PSWPSW外,傳送操作一般不影響外,傳送操作一般不影響標(biāo)志位。標(biāo)志位。 2 2執(zhí)行傳送類指令時(shí),把源地址單元
54、的內(nèi)容送到目的地址單元后,執(zhí)行傳送類指令時(shí),把源地址單元的內(nèi)容送到目的地址單元后,源地址單元中的內(nèi)容不變。源地址單元中的內(nèi)容不變。 3 3對(duì)特殊功能寄存器對(duì)特殊功能寄存器SFRSFR的操作必須使用直接尋址,也就是說,直的操作必須使用直接尋址,也就是說,直接尋址是訪問接尋址是訪問SFRSFR的唯一方式。的唯一方式。 4. 4.對(duì)于單片機(jī)內(nèi)部對(duì)于單片機(jī)內(nèi)部RAMRAM的的80H80HFFHFFH單元只能使用單元只能使用RiRi間接尋址方式訪間接尋址方式訪問問 5 5將累加器將累加器ACCACC壓入堆?;驈棾龆褩r(shí),應(yīng)使用壓入堆?;驈棾龆褩r(shí),應(yīng)使用PUSH ACCPUSH ACC和和POP POP
55、 ACCACC指令,不能使用指令,不能使用PUSH APUSH A和和POP APOP A指令。否則,程序編譯會(huì)出錯(cuò)。指令。否則,程序編譯會(huì)出錯(cuò)。29/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)4.1.5 4.1.5 邏輯操作類指令邏輯操作類指令 邏輯操作類指令共有邏輯操作類指令共有2424條,包括與、或、去除、求反、左右移條,包括與、或、去除、求反、左右移位等邏輯操作。按操作數(shù)可劃分為單操作數(shù)和雙操作數(shù)兩種。位等邏輯操作。按操作數(shù)可劃分為單操作數(shù)和雙操作數(shù)兩種。 單操作數(shù)是專門對(duì)累加器單操作數(shù)是專門對(duì)累加器A A進(jìn)行的邏輯操作,這些操作主要是:進(jìn)行的邏輯操作,這些操作主要是:清清0 0、求反、左右
56、移位等,操作結(jié)果保存在累加器、求反、左右移位等,操作結(jié)果保存在累加器A A中。中。 雙操作數(shù)主要是累加器雙操作數(shù)主要是累加器A A和第二操作數(shù)之間執(zhí)行邏輯與、或和異和第二操作數(shù)之間執(zhí)行邏輯與、或和異或操作,第二操作數(shù)可以是立即數(shù),也可以是內(nèi)部數(shù)據(jù)存儲(chǔ)器的或操作,第二操作數(shù)可以是立即數(shù),也可以是內(nèi)部數(shù)據(jù)存儲(chǔ)器的RnRn、內(nèi)部數(shù)據(jù)內(nèi)部數(shù)據(jù)RAMRAM單元或者單元或者SFRSFR。其對(duì)應(yīng)的尋址方式是:寄存器、寄存器間。其對(duì)應(yīng)的尋址方式是:寄存器、寄存器間接、直接尋址。邏輯操作的結(jié)果保存在接、直接尋址。邏輯操作的結(jié)果保存在A A中。也可將直接尋址單元作中。也可將直接尋址單元作為第一操作數(shù),和立即數(shù),累
57、加器為第一操作數(shù),和立即數(shù),累加器A A執(zhí)行邏輯與、或和異或操作,結(jié)執(zhí)行邏輯與、或和異或操作,結(jié)果存在直接尋址單元中。果存在直接尋址單元中。30/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)左移左移帶進(jìn)位左移帶進(jìn)位左移單操作數(shù)單操作數(shù)CyD0D7CyD0D7CyD0D7CyD0D7D0D7D4 D3低4位高4位交換RnRiaddressdata#(A A)/A/Adata#AANLANLORLORL,XRLXRL) A, A,ANLANLORLORL,XRLXRLdirect,direct,異或異或或或(A A)AXAX(A A)AVXAVX(A A)AXAX其中,其中,X X代表第二操作數(shù)代表第二操
58、作數(shù)directdirectYdirectdirectYdirectdirect VYdirectdirect VYdirectdirectYdirectdirectY其中,其中,Y Y代表代表A A或者或者#data#data與與雙操作數(shù)雙操作數(shù)SWAP ASWAP A4 4位環(huán)移位環(huán)移RRC ARRC A帶進(jìn)位右移帶進(jìn)位右移RR ARR A右移右移RLC ARLC ARL ARL ACPL ACPL A取反取反(A A)00CLR ACLR A清零清零執(zhí)行結(jié)果執(zhí)行結(jié)果指令形式指令形式功能功能31/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)1 1、對(duì)累加器、對(duì)累加器A A進(jìn)行的邏輯操作進(jìn)行的邏輯操
59、作 (1 1累加器累加器A A清清0 0指令:指令: CLR A ; CLR A ;(A A)00功能:把功能:把00H00H送入累加器送入累加器A A中中(2 2累加器累加器A A求反求反指令:指令: CPL A; CPL A;(A A)()()功能:把累加器內(nèi)容求反后送入累加器功能:把累加器內(nèi)容求反后送入累加器A A中。中。例例 設(shè)累加器原來內(nèi)容為設(shè)累加器原來內(nèi)容為07H07H,則執(zhí)行,則執(zhí)行CLR A CLR A 后將變成后將變成00H00H,再執(zhí)行,再執(zhí)行CPL ACPL A后將變?yōu)楹髮⒆優(yōu)?FFH0FFH。32/80增強(qiáng)型8051單片機(jī)實(shí)用開發(fā)技術(shù)(3 3累加器累加器A A左右移位左
60、右移位 RL A RL A; ;累加器左循環(huán)移位累加器左循環(huán)移位 RLC A RLC A; ;累加器通過累加器通過C C左循環(huán)移位左循環(huán)移位 RR A RR A; ;累加器右循環(huán)移位累加器右循環(huán)移位 RRC A RRC A; ;累加器通過累加器通過C C右循環(huán)移位右循環(huán)移位 SWAP A SWAP A; ;交換累加器兩個(gè)半字節(jié)交換累加器兩個(gè)半字節(jié)(4(4位循環(huán)移位位循環(huán)移位) ) 左移一位相當(dāng)于乘左移一位相當(dāng)于乘2 2。例例 MOV A ,#01H MOV A ,#01H;01H;01H送累加器送累加器A A RL A RL A ;02H;02H送送A A RL A RL A ;04H;04H
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新能源汽車動(dòng)力系統(tǒng)研發(fā)合同4篇
- 2024版合同續(xù)約細(xì)化合同版B版
- 2025年度出境游定制游合同3篇
- 2025年度醫(yī)療機(jī)構(gòu)檢驗(yàn)科外包服務(wù)承包合同4篇
- 2024蔬菜產(chǎn)業(yè)園區(qū)建設(shè)與農(nóng)產(chǎn)品銷售合作意向協(xié)議書3篇
- 2024版物聯(lián)網(wǎng)技術(shù)研發(fā)與推廣合同
- 2024版政府機(jī)關(guān)臨時(shí)工作人員勞動(dòng)協(xié)議樣本一
- 2025年度安置房維修基金管理合同3篇
- 2025年度現(xiàn)代農(nóng)業(yè)土地承包與經(jīng)營權(quán)轉(zhuǎn)讓合同范本4篇
- 2025年度電影劇本創(chuàng)作與主演演員簽約服務(wù)協(xié)議6篇
- 表B. 0 .11工程款支付報(bào)審表
- 警務(wù)航空無人機(jī)考試題庫及答案
- 空氣自動(dòng)站儀器運(yùn)營維護(hù)項(xiàng)目操作說明以及簡單故障處理
- 新生兒窒息復(fù)蘇正壓通氣課件
- 2022年12月Python-一級(jí)等級(jí)考試真題(附答案-解析)
- 法律顧問投標(biāo)書
- 班主任培訓(xùn)簡報(bào)4篇(一)
- 成都市數(shù)學(xué)八年級(jí)上冊(cè)期末試卷含答案
- T-CHSA 020-2023 上頜骨缺損手術(shù)功能修復(fù)重建的專家共識(shí)
- 危重癥患者轉(zhuǎn)運(yùn)指南-課件
- Hypermesh lsdyna轉(zhuǎn)動(dòng)副連接課件完整版
評(píng)論
0/150
提交評(píng)論