新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PIC單片機(jī)常用指令介紹與指令功能分類表

PIC單片機(jī)常用指令介紹與指令功能分類表

作者: 時間:2016-09-12 來源:網(wǎng)絡(luò) 收藏

源程序的編寫主要就是用這些基本的指令實現(xiàn)你的控制任務(wù)。但為了增加源程序的可讀性和可維護(hù)性,我們引入了偽指令的概念。偽指令本身不會產(chǎn)生可執(zhí)行的匯編指令,但它們可以幫組“管理”你編寫的程序,其實用性和必要性絕不亞于 35 條正真的匯編指令。我們在此著重介紹最常用的幾種偽指令。

本文引用地址:http://butianyuan.cn/article/201609/303283.htm

最常用的幾種指令介紹

#include 或 include

#include 偽指令的作用是把另外一個文件的內(nèi)容全部包含復(fù)制到本偽指令所在的位置。被包含復(fù)制的文件可以是任何形式的文本文件,當(dāng)然文件中的內(nèi)容和語法結(jié)構(gòu)必須是 MPASM 能夠識別的。最經(jīng)常被“include”的是針對 PIC 內(nèi)部特殊功能寄存器定義的包 含 頭 文 件 , 在MPLAB安 裝 后 它 們 全 部 放 在 路 徑 “ C:Program FilesMPLAB IDEMCHIP_Tools”下,每一個型號的 PIC 都有一個對應(yīng)的預(yù)定義包含頭文件,擴(kuò)展名是“.inc”。除了一些符號預(yù)定義文件,你也可以把現(xiàn)有的其它程序文件作為一個代碼模塊直接“包含”進(jìn)來作為自己程序的一部分。見例 3-01。

#include 把預(yù)定義的 PIC16F877A 寄存器符號包含到此處

#include ”math.asm” 把現(xiàn)有的程序文件包含進(jìn)來作為自己代碼的一部分

例 3-01

請注意被包含文件的引用方式。一種是《》尖括號引用,這種引用意味著讓編譯器去默認(rèn)的路徑下尋找該文件,MPASM默認(rèn)的寄存器預(yù)定義文件存放路徑即為上面提及的MPLAB 安裝后的目錄;另一種是””雙引號引用,這種引用方式的意思是指示編譯器從引號中指定的全程文件路徑下尋找該文件。例 3-01 中”math.asm”沒有指定路徑,即意味著在當(dāng)前項目路徑下尋找 math.asm 文件。如果編譯器找不到被包含的文件,將會有錯誤信息告知。請在你的源程序中盡量用 MPLAB 標(biāo)準(zhǔn)頭文件定義的寄存器符號。一來這些被定義的寄存器符號和芯片數(shù)據(jù)手冊上的描述一一對應(yīng),理解起來即直觀又容易;二來如果用你自己定義符號就缺乏一個大家能一起交流的標(biāo)準(zhǔn)平臺,其他人要解讀你的代碼時將費時費力。故例3-01 中的首行#include 包含引用偽指令可以說是 PIC 單片機(jī)程序編寫時的標(biāo)準(zhǔn)必備。

list

list 偽指令可以設(shè)定程序編譯時的一些信息,例如所選單片機(jī)的型號,編譯時選擇的缺省數(shù)制等。例如:

list p=16f877a, r=DEC 單片機(jī)型號為 PIC16F877A,無特別指明的數(shù)字為十進(jìn)制數(shù)

例 3-02

如果程序開發(fā)時使用項目管理的模式,則所有 list 偽指令可以描述的參數(shù)項都可以在項目的設(shè)定選項中通過對話框的形式設(shè)定并保存。在此只需對 list 偽指令稍作了解即可。

__config

此偽指令的重要作用是把芯片的配置字設(shè)定在源程序中,請參閱 2.5 節(jié)的詳細(xì)說明。建議大家盡量用此偽指令把芯片的配置字寫在程序中。

__idlocs

PIC 單片機(jī)中有一處非常特殊的標(biāo)記單元。它獨立于任何其它存儲器,唯一的作用就是作為一個標(biāo)記。此標(biāo)記值無法用軟件讀到,讀取和寫入的方法只有通過編程器實現(xiàn)。此標(biāo)記值沒有讀保護(hù),你可以利用它存放程序的版本或日期等信息。如果需要,則可以用偽指令 __idloc 在程序中定義具體的值。

__idloc 0x1234

設(shè)定芯片的標(biāo)記值為 0x1234,注意前面有兩個下劃線符

例 3-03

和__config 偽指令定義的配置字一樣,用__idloc 定義的芯片標(biāo)記值在最后也會存放在HEX 文件中,這就要求編程器能夠解析它。

errorlevel

errorlevel 的用途是控制編譯信息的輸出顯示。編譯器在編譯你的源程序時會提供很多信息,有些信息是你必須要處理的,例如錯誤信息(Error),只要有錯誤信息存在,你的程序?qū)⒂肋h(yuǎn)無法完成編譯;有些可能只需要關(guān)注,例如警告信息(Warning);也有一些可能你根本就不感興趣,它們只是一些提示信息(Message)而已。注意出現(xiàn)警告和提示信息時將不會中止編譯器的編譯工作,你的程序?qū)⒈痪幾g并最終產(chǎn)生 HEX 文件。圖 3-14 中顯示了一個程序編譯后的各種信息實例,其中既有錯誤信息,也有警告和提示信息。我們可以用errorlevel 偽指令來控制輸出信息的級別,或刻意關(guān)閉/打開一些提示信息。

編譯信息的輸出顯示級別有三種,分別是 0、1 和 2。級別 0 代表顯示所有信息,包括各種錯誤、警告和提示信息,如圖 3-14 所示;級別 1 代表顯示錯誤和警告信息,忽略提示信息;級別 3 代表只顯示錯誤信息而忽略警告和提示信息。在任何一個大的級別上還可以對某些信息單獨設(shè)定顯示或關(guān)閉。每個信息都有一個識別標(biāo)號,見圖 3-14 中信息項“[]”中的數(shù)字,打開或關(guān)閉某類信息只需在 errorlevel 偽指令中引用信息識別標(biāo)號,并在其前面用“+”或“-”號,即代表打開或關(guān)閉這一類信息,例如:

errorlevel 0, -302, -305 顯示所有信息,但不需要 302 和 305 這兩類提示信息

errorlevel 1, +305 顯示錯誤和警告信息,但同時還要關(guān)注 305 類的提示信息

#define / #undefine 例 3-04

#define 的作用是定義常數(shù)符號,即用一個符號變量替換另一個符號串或變量。被替換的可以是任意字母數(shù)字組成的符號但替換者本身不能是一個純數(shù)字。例如:

#define DELAY_TIME 1000 定義常數(shù)符號,即用 DELAY_TIME 符號代替 1000

#define KEY1 PORTB,7 用 KEY1 符號代替端口 PORTB 的第 7 引腳 例 3-05

用#define 偽指令定義符號后,可使程序中的變量或指令變得更具實際意義,也使程序變得更易維護(hù)。

指令“btfss PORTB,7”和“btfss KEY1”在事先用了例 3-05 中的#define 后編譯的結(jié)果是一樣的,但明顯地后者看起來更容易理解,一看就知道這是在測試編號為KEY1 的一個按鍵。

PIC指令功能分類表

類型 助記符 操作說明 命令說明

傳 送 類 MOVF F,dF→d 將F寄存器的內(nèi)容傳送到F本身(d=1)或W(d=0)(影響狀態(tài)位)Z

MOVWF FW→F 將W寄存器的內(nèi)容傳送到F,W內(nèi)容不變-

MOVLW KK→W 將8位立即數(shù)傳送到W寄存器-

SWAPF F,dF半字節(jié)交換→dF寄存器的高4位和低4位交換位置后,結(jié)果存入F本身(d=1)或W(d=0)中-


上一頁 1 2 下一頁

關(guān)鍵詞: PIC單片機(jī) 單片機(jī)

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉