PIC 單片機(jī)燒寫(xiě)程序時(shí)提示Fuse error 0x2007錯(cuò)誤
該錯(cuò)誤的原因主要是因?yàn)榕渲梦坏腻e(cuò)誤
沒(méi)有詳細(xì)的去研究,大概做個(gè)判斷 一應(yīng)該是編譯器或者編程軟件的錯(cuò)誤,有兩個(gè)位不能讀出來(lái),也可能是置代碼保護(hù)的原因。
當(dāng)把代碼保護(hù)的配置位關(guān)閉后,該錯(cuò)誤消失。
所以目前的解決方法是:在code中關(guān)閉代碼保護(hù)功能。
//********************************************知識(shí)補(bǔ)充***********************************************//
在PIC系列單片機(jī)里,其芯片內(nèi)部大都有設(shè)置一個(gè)特殊的程序存儲(chǔ)單元,地址為2007,由單片機(jī)的用戶自由配置,用來(lái)定義一些單片機(jī)功能電路單元的性能選項(xiàng)。我們把這個(gè)單元叫做器件配置字(Configuration Bits)。這種設(shè)計(jì)給單片機(jī)開(kāi)發(fā)工程師帶來(lái)了很大的靈活性,但是也給初學(xué)者帶來(lái)了一些麻煩。
在編譯器里怎么樣對(duì)配置位編程
PIC單片機(jī)正常運(yùn)行時(shí),是無(wú)法對(duì)配置位進(jìn)行存取的,只能在編程模式下存取。可以通過(guò)對(duì)配置位編程( 讀為”0”) 或不編程( 讀為”1”) 來(lái)選擇不同的器件配置。對(duì)配置位編程后,是否能夠更改其設(shè)置取決于器件的存儲(chǔ)工藝和封裝形式。對(duì)于只讀存儲(chǔ)器(ROM) 器件,這些配置位在ROM 代碼提交時(shí)即被確定,且一旦器件掩膜完成,即無(wú)法更改( 若要更改,則需新的掩膜代碼)。對(duì)一次可編程 (OTP) 器件,一旦這些位被編程 ( 為”0”),就無(wú)法更改了,而FLASH的單片機(jī)在每次編程下載的時(shí)候是可以更改的。
編譯器一般都可以采用菜單方式設(shè)置,在編譯程序時(shí)將設(shè)置字一并完成,燒寫(xiě)芯片同時(shí)完成CONFIG的燒入。用PIC官方編譯工具M(jìn)PLAB IDE7.30設(shè)在編譯器里對(duì)配置位編程 。點(diǎn)擊菜單欄Configure下的Configuration Bits出現(xiàn)的對(duì)話框)。設(shè)置的時(shí)候直接點(diǎn)擊相應(yīng)Setting下面菜單會(huì)出現(xiàn)下拉菜單
然而,這樣設(shè)置后,有的編譯器編譯的HEX文件并不包含CONFIG,因此,在程序代碼中直接包含CONFIG設(shè)置是一種好習(xí)慣(這樣編譯的HEX就會(huì)包含CONFIG設(shè)置)。
下面是在MPLAB IDE7.30匯編語(yǔ)言設(shè)置配置位的情形:
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF &
_MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT 注意:CONFIG前面是2個(gè)下劃線“_”,中間沒(méi)有空格,而且不能在行的第一列位置,至少空一格。項(xiàng)目的定義可以在頭文件中找到(*.inc)。每種芯片具體設(shè)置不完全一樣。
下面是在PICC的C語(yǔ)言編譯器配置位的設(shè)置情形
__CONFIG(INTIO & WDTDIS & MCLRDIS & BORDIS & UNPROTECT & PWRTEN);項(xiàng)目的定義可以在頭文件中可以在安裝PICC文件下的include文件夾找到。要注意,在語(yǔ)句的最后要加上“;”,定義的內(nèi)容還要用括號(hào)括起來(lái)。
上面是CONFIG的一種寫(xiě)法,它的好處就是意義比較明顯,如匯編的WDT_OFF和C語(yǔ)言的WDTDIS都是不使用PIC單片機(jī)看門(mén)狗的意思。
如果你對(duì)如何采用上述方法設(shè)置CONFIG還是覺(jué)得麻煩,還有一個(gè)好方法:在開(kāi)發(fā)工具軟件(比如MPLAB-IDE)的CONFIG設(shè)置菜單里先選擇好項(xiàng)目,確認(rèn)設(shè)置正確。這時(shí)會(huì)有一個(gè)定義字(16進(jìn)制,隨著設(shè)置不同而改變),在圖2的VALUE的下面,復(fù)制后,再粘貼到__CONFIG后,比如:匯編代碼可以這樣寫(xiě)“__CONFIG 3FFFH”,至于C語(yǔ)言可以這樣“__CONFIG (0x3FFF);”。
在編程器下載軟件里設(shè)置
一般的編程器都會(huì)有配置位的選項(xiàng),根據(jù)需要進(jìn)行選擇。
//********************************************知識(shí)補(bǔ)充***********************************************//
由于以上原因,編譯器設(shè)置位可能會(huì)失效,所以在代碼中寫(xiě)配置位是一種好習(xí)慣。由于又想配置代碼保護(hù)功能,
故對(duì)于可批量的程序,可以采用修改hex文件實(shí)現(xiàn)(就不用在code中寫(xiě)配置位,直接編程器中配置好了保存hex后批量寫(xiě)入)。
如果每個(gè)程序都需要修改的話,就不能每一個(gè)每一個(gè)的修改hex了。就需要在code中配置,例如__CONFIG (0x3FFF);
燒寫(xiě)的時(shí)候就僅需要配置一個(gè)代碼保護(hù)就可以了。沒(méi)有以前那么多的配置信息,方便了許多。
評(píng)論