器件配置字

器件配置字

10 10 01

百科名片

在PIC(Peripheral Interface Controller的簡寫,即採用CISC結構的單片機數據線和指令線分時復用,即所謂馮。諾伊曼結構)系列單片機里,其晶片內部大都有設定一個特殊的程式存儲單元,地址為2007,由單片機的用戶自由配置,用來定義一些單片機功能電路單元的性能選項。我們把這個單元叫做器件配置字(Configuration Bits)。

器件配置字的用途

這裡,我們以PIC16F877為例向初學者介紹配置字的用途和使用。

圖1圖1
圖1就是PIC16F877配置字的暫存器的情形。對配置字的各位的解釋如下:
CP1-CP0: 代碼保護位,說明如下:
11 = 代碼保護關;
10 = 參見器件數據手冊;
01 = 參見器件數據手冊;
00 = 所有存儲器均受代碼保護。
註:有些器件使用較多或較少的位數來配置代碼保護。目前就一些只使用一位(CP0) 的器件,保護位的說明如下:
1 = 代碼保護關;
0 = 代碼保護開。
DP: 數據EEPROM 存儲器的代碼保護位,說明如下:
1 = 代碼保護關;
0 = 數據EEPROM 存儲器受代碼保護。
註:對於具有數據EEPROM 存儲器的ROM 程式存儲器器件,使用該位。
BODEN: 欠壓復位(BOR) 使能位,說明如下:
1 = BOR 使能;
0 = BOR 禁止。
PWRTE:上電定時器(PWRT) 使能位,說明如下:
1 = PWRT 禁止;
0 = PWRT 使能。
注1:無論PWRTE 位的值為何,使能欠壓復位即自動使能了上電定時器(PWRT)。請確保使能欠壓復位時,也使能了上電定時器。
注2: 在一些早期的PICmicro® 單片機中,該位的極性被保留。
MCLRE:MCLR 引腳功能選擇位,說明如下:
1 = 引腳功能為MCLR;
0 = 引腳功能為數字I/O,MCLR 在內部連線到VDD 上。
WDTE: 看門狗定時器(WDT) 使能位,說明如下:
1 = WDT 使能;
0 = WDT 禁止。
FOSC1-FOSC0: 振盪器選擇位,說明如下:
11 = RC 振盪器
10 = HS 振盪器;
01 = XT 振盪器;
00 = LP 振盪器。
注意:所有的晶片出廠的時候都是把配置位置1的。

在編譯器里怎么樣對配置位編程

PIC單片機正常運行時,是無法對配置位進行存取的,只能在編程模式下存取。可以通過對配置位編程( 讀為”0”) 或不編程( 讀為”1”) 來選擇不同的器件配置。對配置位編程後,是否能夠更改其設定取決於器件的存儲工藝和封裝形式。對於唯讀存儲器(ROM) 器件,這些配置位在ROM 代碼提交時即被確定,且一旦器件掩膜完成,即無法更改( 若要更改,則需新的掩膜代碼)。對一次可程式(OTP) 器件,一旦這些位被編程( 為”0”),就無法更改了,而FLASH的單片機在每次編程下載的時候是可以更改的。
編譯器一般都可以採用選單方式設定,在編譯程式時將設定字一併完成,燒寫晶片同時完成CONFIG的燒入。

圖2圖2
圖2就是PIC官方編譯工具MPLAB IDE7.30設定配置位的情況(點擊選單欄Configure下的Configuration Bits出現的對話框)。設定的時候直接點擊相應Setting下面選單會出現下拉選單的如圖3所示。然而,這樣設定後,有的編譯器編譯的HEX檔案並不包含CONFIG,因此,在程式代碼中直接包含CONFIG設定是一種好習慣(這樣編譯的HEX就會包含CONFIG設定)。
下面是在MPLAB IDE7.30彙編語言設
圖3圖3
置配置位的情形:
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_OFF & _WDT_OFF& _PWRTE_ON & _INTRC_OSC_NOCLKOUT
注意:CONFIG前面是2個下劃線“_”,中間沒有空格,而且不能在行的第一列位置,至少空一格。項目的定義可以在頭檔案中找到(*.inc)。每種晶片具體設定不完全一樣。
下面是在PICC的C語言編譯器配置位的設定情形
__CONFIG(INTIO& WDTDIS & MCLRDIS & BORDIS & UNPROTECT & PWRTEN);項目的定義可以在頭檔案中可以在安裝PICC檔案下的include資料夾找到。要注意,在語句的最後要加上“;”,定義的內容還要用括弧括起來。
上面是CONFIG的一種寫法,它的好處就是意義比較明顯,如彙編的WDT_OFF和C語言的WDTDIS都是不使用PIC單片機看門狗的意思。
如果你對如何採用上述方法設定CONFIG還是覺得麻煩,還有一個好方法:在開發工具軟體(比如MPLAB-IDE)的CONFIG設定選單里先選擇好項目,確認設定正確。這時會有一個定義字(16進制,隨著設定不同而改變),在圖2的VALUE的下面,複製後,再貼上到__CONFIG後,比如:彙編代碼可以這樣寫“__CONFIG 3FFFH”,至於C語言可以這樣“__CONFIG (0x3FFF);”。

相關詞條

熱門詞條

聯絡我們