- PIC單片機(jī)常用模塊與綜合系統(tǒng)設(shè)計(jì)實(shí)例精講
- 夏彬彬 任明全 屈金學(xué)編著
- 2222字
- 2019-01-01 14:12:25
3.3 偽操作指令
偽操作指令是一類特殊指令,它不是真正的單片機(jī)系統(tǒng)指令,沒有機(jī)器碼與偽指令對(duì)應(yīng)。它存在于源程序中,但目標(biāo)程序中并沒有這些偽指令的代碼,偽指令也因此而得名。偽指令是為了方便程序設(shè)計(jì)人員編程而設(shè)計(jì)的,在源程序中的作用是為完成匯編程序而做的各種準(zhǔn)備工作,告訴匯編器如何完成匯編過程和一些規(guī)定的操作,控制匯編器的輸入輸出和數(shù)據(jù)定位等。它僅在匯編過程中起作用,一旦匯編結(jié)束,偽指令的使命也即隨之完成。
偽指令語(yǔ)句主要由3部分組成,其一般格式為:
符號(hào)名 偽指令助記符 操作數(shù)
其中,符號(hào)名通常是代表專用寄存器名、通用寄存器變量、常數(shù)名、標(biāo)志位或控制位名、復(fù)位矢量或中斷矢量的一個(gè)字符串,其在書寫時(shí)需要頂格,其后每部分之間用一個(gè)或一個(gè)以上的空格隔開,另外還需注意的是,一條語(yǔ)句只能占用一行,而不能分行。
在匯編程序MPASM中,有下列4類偽指令:
(1)數(shù)據(jù)偽指令:主要用于程序寄存器的定位和定義數(shù)據(jù)的名稱等。
(2)列表偽指令:用于控制列表文件的指定標(biāo)題、換頁(yè)等。
(3)控制偽指令:即條件匯編,用于控制匯編的路徑。
(4)宏匯編指令:用于控制宏定義體中的運(yùn)行和數(shù)據(jù)定位。
下面將對(duì)這幾類偽指令分別予以介紹。
1.數(shù)據(jù)偽指令
(1)DATA定義程序存儲(chǔ)器的值
格式:〔<標(biāo)號(hào)>〕DATA<操作數(shù)>,[<操作數(shù)>…] 例: DATA 3, 4+AB
(2)DEFINE定義字符串變量
格式:#DEFINE.<變量名>[<字符串>]
說(shuō)明:用于定義文本替換的標(biāo)號(hào),用一定的變量名字替換源代碼中的字符串,以使程序更加簡(jiǎn)潔,并且易于修改。
例:#DEFINE COUNT 07H;將程序中所有出現(xiàn)的用于定義循環(huán)次數(shù)的 07H都用COUNT代替。
(3)UNDEFINE取消己定義的字符串變量
格式:#UNDEFINE<變量名>
說(shuō)明:用于取消以前定義過的文本替換標(biāo)號(hào)。
(4)SET對(duì)標(biāo)號(hào)賦值
格式:<標(biāo)號(hào)>SET<表達(dá)式>
說(shuō)明:用SET可對(duì)標(biāo)號(hào)任意重新賦值,這與后面的CONSTANT偽指令不同。
例:WIDTH SET9 HEIGHT SET 12H WIDTH SET HEIGHT+8
(5)EQU對(duì)寄存器f和標(biāo)號(hào)賦值
格式:<標(biāo)號(hào)>EQU<表達(dá)式>
說(shuō)明:為標(biāo)號(hào)或寄存器賦值,標(biāo)號(hào)一旦由EQU賦值,該值就不能再重新定義。
例:COUNT EQU 21H
(6)RES保留某段程序存儲(chǔ)區(qū)
格式:RES<單元個(gè)數(shù)>
說(shuō)明:保留10個(gè)空白字節(jié)。
例:RES 10
(7)INCLUDE包含其他外部源文件
格式:INCLUDE“文件名” INCLUDE<文件名>
說(shuō)明:用于把指定文件讀入源程序中作為源程序代碼的一部分,直到檢測(cè)到文件結(jié)束符時(shí)為止,再恢復(fù)到原源程序中的代碼處。此偽指令可允許嵌套使用,最多可嵌套6層。文件名必須用雙引號(hào)或尖括號(hào)給出。
例:INCLUDE“c∶\PIC\sysdefs.inc” INCLUDE<math.h>
(8)RADIX進(jìn)制定義指令
格式:RADIX<進(jìn)制表達(dá)式>
說(shuō)明:用于設(shè)置常數(shù)數(shù)制的基數(shù),有效的為十六進(jìn)制、十進(jìn)制、八進(jìn)制,默認(rèn)為十六進(jìn)制。
例:RADIX DEC;十進(jìn)制 RADIX HEX;十六進(jìn)制 RADIX OCT;八進(jìn)制
(9)CONSTANT定義符號(hào)常數(shù)
格式:CONSTANT<標(biāo)號(hào)>[=<表達(dá)式>,<標(biāo)號(hào)>[=<表達(dá)式>]…]
說(shuō)明:用于對(duì)表達(dá)式中的常量符號(hào)進(jìn)行定義,常量符號(hào)一旦被定義,在程序中就將被重新設(shè)置。這與偽指令VARIABLE不同,后者的值能在程序中修改。
例:VARIABLE MINVOLTAGE=12 CONSTANT MAXVOLTAGE=24 … VARIABLE MINVOLTAGE=5 CONSTANT DIFFVOLTAGE=MAXVOLTAGE—MINVOLTAGE
2.列表偽指令
(1)LIST列表選擇指令
格式:LIST<選擇項(xiàng)>,…,<選擇項(xiàng)>
說(shuō)明:用來(lái)設(shè)置各種匯編參數(shù)以控制匯編過程或?qū)α斜砦募M(jìn)行格式化。需注意的是,此偽指令的所有參數(shù)只能在一行內(nèi)完成,參數(shù)的數(shù)值都用十進(jìn)制數(shù)設(shè)置。
LIST列表選擇偽指令可以選用的部分參數(shù)如表3-2所示。
表3-2 LIST選項(xiàng)表

例:LISTF=1NHX8M,R=DEC,P=16F877
(2)PAGE分頁(yè)命令
格式:PAGE
說(shuō)明:在列表文件中產(chǎn)生分頁(yè)效果,即下面的文件輸出將從新頁(yè)面開始。
(3)TITLE程序標(biāo)頭命令
格式:TITLE‘程序標(biāo)頭’
說(shuō)明:用于指定在列表文件中作為每一頁(yè)開頭第一行的程序標(biāo)題,標(biāo)頭最長(zhǎng)不超過60個(gè)字符。
例:TITLE‘This is for PIC16F877 demo’
3.控制偽指令
(1)ORG存放單元起始地址
格式:<標(biāo)號(hào)>ORG<地址表達(dá)式>
說(shuō)明:ORG用于指定該偽指令后面的源程序存放的起始地址,也就是匯編后的目標(biāo)機(jī)器碼存放的首地址。若ORG后面不帶地址參數(shù),則默認(rèn)為零。若ORG帶標(biāo)號(hào),則地址參數(shù)也賦值給該標(biāo)號(hào)。在一個(gè)源程序中,可以根據(jù)需要多次使用ORG偽指令來(lái)定位。
例:ORG 00H GOTO MAIN … ORG 01H DISPLAY MOVLW 05H
(2)END結(jié)束偽指令
格式:END
說(shuō)明:指令末的偽指令END是通知匯編程序MPASM結(jié)束對(duì)源程序(.ASM)的匯編,即使后面還有語(yǔ)句,也不再予以匯編。在一個(gè)源程序中必須有END偽指令,而且只能有一個(gè)END,放在整個(gè)程序的最后。
(3)IF條件匯編命令
格式:IF<條件表達(dá)式> <源程序行> <ELSE> <源程序行> ENDIF
說(shuō)明:如果條件表達(dá)式為真,則匯編器將編譯IF和ELSE之間的語(yǔ)句,反之編譯ELSE和ENDIF之間的語(yǔ)句。ELSE可以默認(rèn)。
例: IF COUNT=20 MOVLW 6 WOVWF DISP ELSE MOVLW 7 MOVWF DISP ENDIF
(4)WHILE條件循環(huán)命令
格式:WHILE<條件表達(dá)式> … ENDW
說(shuō)明:當(dāng)條件表達(dá)式滿足條件時(shí),即對(duì)WHILE與ENDW之間的源程序進(jìn)行匯編,反之跳過。該循環(huán)最多允許有100行語(yǔ)句,最大循環(huán)次數(shù)為256次。
例:VARIABLE i WHILE i<count MOVLW i i=i+1 ENDW
4.MACRO宏定義
格式:<標(biāo)號(hào)>MACRO[<參數(shù)1>,…,<參數(shù)N>] (宏體) ENDM
說(shuō)明:宏指令可以對(duì)一個(gè)指令序列進(jìn)行定義,定義后的宏指令可以在源程序中調(diào)用。通過宏調(diào)用,可以把被定義后的宏指令序列源程序代碼插入到主程序中,另外,宏定義還可以嵌套使用。從表面上看,宏與程序類似,但宏定義只能使程序看起來(lái)更簡(jiǎn)潔一些,從而避免一些程序段在源程序中,此時(shí)它本身并不節(jié)省內(nèi)存空間。當(dāng)匯編器編譯后,主程序每使用一次宏,程序存儲(chǔ)器就要開銷相應(yīng)大小的空間,而子程序則不需要,這也是宏與子程序的最大區(qū)別。宏的使用分為宏定義和宏調(diào)用兩個(gè)部分,舉例如下:
例:① 宏定義: DISP MACRO X, Y, Z MOVLW 10H MOVWF X Y BSF FLAG:7 GOTO Y Z ENDM ② 宏調(diào)用: DISP DATE,LOOP,(CALL DISPLAY)
說(shuō)明:DATA,LOOP,(CALL DISPLAY)分別相當(dāng)于宏定義中的參數(shù)X,Y,Z。
③ 匯編后的源代碼: MOVLW 10H MOVWF DATE LOOP BSF FLAG.7 GOTO LOOP CALL DISPLAY
- 用Proteus可視化設(shè)計(jì)玩轉(zhuǎn)Arduino
- 輕松學(xué)會(huì)單片機(jī)
- FPGA嵌入式項(xiàng)目開發(fā)三位一體實(shí)戰(zhàn)精講
- 單片機(jī)應(yīng)用項(xiàng)目化教程
- 現(xiàn)代嵌入式系統(tǒng)開發(fā)專案實(shí)務(wù)
- 單片機(jī)應(yīng)用技術(shù)
- 嵌入式產(chǎn)品分析與設(shè)計(jì)
- 嵌入式系統(tǒng)Linux內(nèi)核開發(fā)實(shí)戰(zhàn)指南(ARM平臺(tái))
- 51單片機(jī)C語(yǔ)言編程一學(xué)就會(huì)
- 嵌入式Linux軟硬件開發(fā)詳解:基于S5PV210處理器
- C51單片機(jī)項(xiàng)目設(shè)計(jì)實(shí)踐教程(第2版)
- 51單片機(jī)應(yīng)用開發(fā)案例手冊(cè)
- ARM嵌入式處理器及應(yīng)用
- 基于Proteus的51系列單片機(jī)設(shè)計(jì)與仿真(第4版)
- 51單片機(jī)應(yīng)用基礎(chǔ)(C51版)