百科名片
在PIC(Peripheral Interface Controller的簡寫,即採用CISC結構的單片機數據線和指令線分時復用,即所謂馮。諾伊曼結構)系列單片機里,其晶片內部大都有設定一個特殊的程式存儲單元,地址為2007,由單片機的用戶自由配置,用來定義一些單片機功能電路單元的性能選項。我們把這個單元叫做器件配置字(Configuration Bits)。
器件配置字的用途
這裡,我們以PIC16F877為例向初學者介紹配置字的用途和使用。
圖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的燒入。
下面是在MPLAB IDE7.30彙編語言設置配置位的情形:
__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);”。