器件配置字
器件配置字
器件配置字(Device configuration word)簡稱PIC,採用CISC結構的單片機徠數據線和指令線分時復用,(即所謂馮。諾伊曼結構)系列單片機里,其晶元內部大都有設置一個特殊的程序存儲單元,地址為2007,由單片機的用戶自由配置,用來定義一些單片機功能電路單元的性能選項。我們把這個單元叫做器件配置字
在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的燒入。
圖2
徠圖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);”。