新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC 單片機燒寫程序時提示Fuse error 0x2007錯誤

        PIC 單片機燒寫程序時提示Fuse error 0x2007錯誤

        作者: 時間:2016-11-17 來源:網絡 收藏
        今天在PIC 單片機燒寫程序時提示Fuse error 0x2007
        該錯誤的原因主要是因為配置位的錯誤
        沒有詳細的去研究,大概做個判斷 一應該是編譯器或者編程軟件的錯誤,有兩個位不能讀出來,也可能是置代碼保護的原因。
        當把代碼保護的配置位關閉后,該錯誤消失。
        所以目前的解決方法是:在code中關閉代碼保護功能。
        //********************************************知識補充***********************************************//
        在PIC系列單片機里,其芯片內部大都有設置一個特殊的程序存儲單元,地址為2007,由單片機的用戶自由配置,用來定義一些單片機功能電路單元的性能選項。我們把這個單元叫做器件配置字(Configuration Bits)。這種設計給單片機開發工程師帶來了很大的靈活性,但是也給初學者帶來了一些麻煩。
        在編譯器里怎么樣對配置位編程
        PIC單片機正常運行時,是無法對配置位進行存取的,只能在編程模式下存取。可以通過對配置位編程( 讀為”0”) 或不編程( 讀為”1”) 來選擇不同的器件配置。對配置位編程后,是否能夠更改其設置取決于器件的存儲工藝和封裝形式。對于只讀存儲器(ROM) 器件,這些配置位在ROM 代碼提交時即被確定,且一旦器件掩膜完成,即無法更改( 若要更改,則需新的掩膜代碼)。對一次可編程 (OTP) 器件,一旦這些位被編程 ( 為”0”),就無法更改了,而FLASH的單片機在每次編程下載的時候是可以更改的。
        編譯器一般都可以采用菜單方式設置,在編譯程序時將設置字一并完成,燒寫芯片同時完成CONFIG的燒入。用PIC官方編譯工具MPLAB IDE7.30設在編譯器里對配置位編程 。點擊菜單欄Configure下的Configuration Bits出現的對話框)。設置的時候直接點擊相應Setting下面菜單會出現下拉菜單
        然而,這樣設置后,有的編譯器編譯的HEX文件并不包含CONFIG,因此,在程序代碼中直接包含CONFIG設置是一種好習慣(這樣編譯的HEX就會包含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);”。
        在編程器下載軟件里設置
        一般的編程器都會有配置位的選項,根據需要進行選擇。
        //********************************************知識補充***********************************************//
        由于以上原因,編譯器設置位可能會失效,所以在代碼中寫配置位是一種好習慣。由于又想配置代碼保護功能,
        故對于可批量的程序,可以采用修改hex文件實現(就不用在code中寫配置位,直接編程器中配置好了保存hex后批量寫入)。
        如果每個程序都需要修改的話,就不能每一個每一個的修改hex了。就需要在code中配置,例如__CONFIG (0x3FFF);
        燒寫的時候就僅需要配置一個代碼保護就可以了。沒有以前那么多的配置信息,方便了許多。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 锡林郭勒盟| 房产| 峨山| 阜宁县| 锡林郭勒盟| 论坛| 丹棱县| 济源市| 临湘市| 伊春市| 双桥区| 柳河县| 定结县| 抚顺市| 理塘县| 金塔县| 敖汉旗| 林甸县| 明溪县| 昌图县| 东乌珠穆沁旗| 乐安县| 通许县| 安福县| 赣州市| 额尔古纳市| 菏泽市| 左云县| 云龙县| 田东县| 东山县| 扎鲁特旗| 乐都县| 潜江市| 南投市| 汶川县| 德令哈市| 固始县| 织金县| 济南市| 黄陵县|