天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術熱線: 4007-888-234
設計開發

專注差異化嵌入式產品解決方案 給智能產品定制注入靈魂給予生命

開發工具

提供開發工具、應用測試 完善的開發代碼案例庫分享

技術支持

從全面的產品導入到強大技術支援服務 全程貼心伴隨服務,創造無限潛能!

新聞中心

提供最新的單片機資訊,行業消息以及公司新聞動態

PIC單片機的十六進制文件格式:Hex文件

更新時間: 2019-08-27
閱讀量:7486

Microchip通過在一個Hex文件中包含編程PIC單片機所需的所有信息,在Atmel AVR上取得了相當的成功。這包括代碼、EEPROM數據、用戶字節(用戶ID)以及最重要的配置字。

這使得將項目從開發轉移到生產或工程師之間變得更加容易,因為所需的所有信息都在一個文件中。Atmel現在已經被Microchip接管,他們已經姍姍來遲地添加了一個可以做同樣事情的ELF生產文件格式。下面英銳恩將講解有關PIC單片機Hex文件的問題。


QQ截圖20190815175004.png

一、在源文件中創建配置字節

您需要在C或匯編程序中將配置字節數據添加到源文件中。對于不同的工具和C或匯編程序,語法確實有所不同。Microchip C或匯編程序中的PIC16F示例使用__Config指令,例如

__CONFIG(0x3F72);

匯編程序中的另一個示例是:

__config _CP_OFF&_HS_OSC&_WDT_OFF&_PWRTE_ON&_LVP_OFF&_BODEN_ON

PIC18F通常使用CONFIG指令,例如,

CONFIG WDT = OFF; 禁用看門狗定時器
CONFIG MCLRE = ON;
CONFIG DEBUG = ON時MCLEAR引腳; 啟用調試模式
CONFIG LVP = OFF;

XC8和XC16編譯器使用pragma指令,例如

#pragma config FOSC = HS //振蕩器選擇
#pragma config WDTE = OFF //看門狗定時器使能(禁止WDT)
#pragma config PWRTE = OFF //上電延時定時器使能(PWRT)禁用)
#pragma config MCLRE = ON // MCLR引腳功能選擇
#pragma config CP = OFF //閃存程序存儲器代碼保護
#pragma config CPD = OFF //數據存儲器保護

查看編譯器文檔以獲取更多詳細信息 配置位名稱從PIC單片機到PIC單片機不同,有關配置字節的詳細信息,請參見PIC單片機數據手冊中的“CPU部分的特殊功能”。

二、MPLAB X配置工具

最新的MPLAB X在C文件中以不同方式處理配置字節。使用MPLAB X匯編程序文件時,__ CONFIG和CONFIG指令仍然有效,但C編譯器需要不同的格式。它需要使用#pragma config WDTE = ON語法。

生成所需#pragma指令的最簡單方法是使用內置的配置字節工具。

轉到窗口菜單->PIC內存視圖->配置位。

將打開一個窗口,其中列出了項目中設置的可用配置字節。PIC18F芯片的可用配置字節不同,但方法相同。按照您的需要設置它們,然后單擊“生成源代碼到輸出”按鈕。這會創建您需要剪切并粘貼到主源文件中的代碼,或者放入單獨的C文件并使用#include 主文件中的指令。

MPLAB X中的PIC18F配置字節示例

#include <xc.h>
// #pragma config語句應該在項目文件包含之前。
//使用項目枚舉代替#define進行ON和OFF。
// CONFIG1H
#pragma config OSC = RCIO //振蕩器(外部RC振蕩器,RA6上的端口功能)
#ppma config FCMEN = OFF //故障保護時鐘監視器使能位(禁用故障保護時鐘監視器)
#pragma config IESO = OFF //內部/外部振蕩器切換位(禁用振蕩器切換模式)

MPLAB X中的PIC16F配置字節示例

// #pragma config語句應位于項目文件包含之前。
//使用項目枚舉代替#define進行ON和OFF。
// CONFIG1

#pragma config FOSC = HS //振蕩器選擇位(HS振蕩器:RA6 / OSC2 / CLKOUT和RA7 / OSC1 / CLKIN上的高速晶體/諧振器)
#pragma config WDTE = ON //看門狗定時器使能位( WDT使能)
#pragma config PWRTE = OFF //上電延時定時器使能位(PWRT禁止)
#pragma config MCLRE = ON // RE3 / MCLR引腳功能選擇位(RE3 / MCLR引腳功能為MCLR)
#pragma config CP = OFF //代碼保護位(禁止程序存儲器代碼保護)
#pragma config CPD = OFF //數據代碼保護位(禁止數據存儲器代碼保護)
#pragma config BOREN = OFF //欠壓復位選擇位(BOR禁用)
#pragma config IESO = ON //內部外部切換位(內部/外部切換模式已啟用)
#pragma config FCMEN = ON //故障保護時鐘監視器使能位(啟用故障保護時鐘監視器)
#pragma config LVP =關閉

這些指令將配置字節添加到輸出Hex文件,這將在下面描述。

三、PIC18F單片機的HEX文件格式

Microchip格式的Hex文件是擴展的Intel Hex文件,包含代碼,數據,配置字節和用戶ID。您需要選擇輸出文件類型為INHX32。這是32位尋址,因為配置字節存儲在64KB以上,這是8位Intel Hex格式INHX8的限制。所有PIC程序員都應該能夠應對這種格式,而PIC編譯器應該能夠生成它。

文件中的每一行都有這種格式:

:BBAAAATT [DDDDDDDD] CC

其中,

:是行標記
BB的開始是行
AAAA上的數據字節數是以字節為單位的地址
TT是類型。00表示數據,01表示EOF,02表示線性地址,04表示擴展地址
DD是數據字節,數字取決于BB值
CC是校驗和(2s補碼,字節數+地址+數據)

四、擴展和線性尋址

標準Intel Hex文件只能處理64KB數據(0..FFFFh),擴展尋址通過為每64KB添加擴展地址線來克服此限制,例如:

:020000040001F9 - 64KB標記
:020000040002F9 - 128KB標記
擴展地址 - 04 - 標記意味著移動04 16個位置后給出的值。
行:020000040001F9表示向左移動1 16個位置,給出10000h,十進制為65536或64KB。向左移動2 16個位置可提供20000h或128KB等等。
標記后面的所有數據的地址都添加了標記值。

下一個復雜因素是某些編譯器使用線性地址而不是擴展地址。這以類似的方式工作,但是標記是02而不是04,并且該值僅向左移動4個位置。線性尋址格式的等效64KB標記是

:020000021000EC - 64KB標記

在02標記之后移動值,即1000,剩下四個位置也給出10000或64KB。請注意,校驗和將更改。您可能會看到PIC Hex文件中使用的任一格式。

一些編譯器包括空代碼行(所有FF),但其他編譯器省略這些行以節省空間。

代碼:它位于文件的頂部,可以通過擴展地址行進行 - :020000040000FA,其中04是擴展地址的類型或線性地址02.在這兩種情況下,結果地址值仍然是0x0000所以它實際上沒有任何效果。

EEPROM數據:由擴展地址線 - 0200000400F00A繼續。EEPROM部分是可選的。

配置字節:這些字節存儲在300000h,前面是擴展地址行 - :020000040030CA。正確的格式是8個Fuse字節和6個Lock字節都在同一行,但不同的編譯器和匯編器有不同的顯示這些字節的方法。如果未設置鎖定字節,有時會省略鎖定字節,有時數據會分布在多行上。

標準格式將未使用的位顯示為1(例如,FF表示未使用的字節),但在PIC單片機上,它們讀為0.編程器應將未使用的位屏蔽為0,以便配置字節將正確驗證。

用戶ID:這些是用戶存儲數據的字節,例如代碼版本號。它們存儲在200000h。同樣,它們之前是擴展地址行:020000040020DA。標準格式需要8個字節,但有些編譯器再次省略了未使用的字節。

文件結束:所有Intel Hex文件的End of File標記為:00000001FF

例如,

:100000003C932014BBE0AD7A3EAC4D261FB267A4F2
:100010008121F4C2D641A503B6038C9932A36EBCEC
:10002000D204306AE84404FCE8C7452DE0BE3160E4
:100030005CC6E94D3F4E62765AC237EAD3C2895157
:0200000400F00A
:10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
:020000040030CA
:1000000000270F0F0083F500FFC0FFE0FF400000C5
:020000040020DA
:080000000102030405060708D4
:00000001FF

這顯示4行代碼,1行EEPROM數據:0200000400F00A,8位用戶用戶字節位于:020000040020CA,16位配置字節位于:020000040030CA,最后2位是假人,因為它只有14個配置字節。

五、PIC16F單片機的HEX文件格式

PIC16F文件具有與PIC18F文件類似的格式,但由于PIC16F單片機較小,因此不使用擴展尋址。對于最新的PIC16F1xxx芯片,此部分不正確 - 請參見下面的單獨部分。

代碼:代碼始終位于.hex文件的頂部。布局因編譯器和匯編器的不同而不同,例如每行的數據量,是否包含空行等。請注意,PIC16F單片機使用14位指令,因此代碼存儲為低字節優先的字。因此,未使用的位置顯示為FF3F。但是,尋址是以字節為單位的。

EEPROM數據:如果單片機具有EEPROM,則數據在HEX文件中向上存儲在地址0x4200處。它以字格式存儲,但只有低字節包含數據 - 高字節始終為0并被丟棄。

配置字:大多數PIC16F上只有一個14位配置字,存儲在地址0x400E。它首先存儲為高字節。有些設備最多有3個字。

用戶數據:最多8個字節存儲在0x4000。

文件結束:所有Intel Hex文件的End of File標記為:00000001FF

例如,

:100000005D38A23BB437B11731090A0F1202E92358
:100010007B3E20286F335609A104A12BB00DE92D9A
:100020008D22260D260A931C951D510C6711131065
:10420000FF00FF00FF00FF00FF00FF00FF00FF00B6
:06400E00FF3FFF3FFF3FF2
:08400000FF3FFF3FFF3FFF3FC0
:00000001FF

六、PIC16F1xxx單片機的HEX文件格式

早期的PIC16F微控制器的代碼存儲器不到16KB。EEPROM數據,用戶ID和配置字節也存儲在64KB以下,因此標準的Intel Hex文件很好。

較新的PIC16F1xxx單片機更大,最新的64KB程序空間。為了容納這個更大的閃存,hex文件中的其他數據移動到64KB以上,并且需要擴展或線性尋址才能訪問它 - 有關這些尋址模式的完整描述,請參見PIC18F部分。

1.代碼

它仍然存儲在地址0x0000中,但在開始時可能有一個擴展或線性地址線,例如:020000040000FA。這仍然意味著在0x0000處啟動代碼。由于最大代碼大小為64KB,因此該文件實際上不需要擴展尋址來容納代碼。

2.EEPROM

EEPROM數據從地址0x1E000開始存儲。這意味著它必須在它之前有一個擴展地址標記:020000040001FA或:020000021000EC。這給出了一個0x10000的基地址,并且從E000開始添加了EEPROM數據地址,在文件中給出了0x1E000作為EEPROM地址。

:10E00000FF00FF00FF00FF00FF00FF00FF00FF0018

請注意,8位EEPROM數據填充為00,在PIC單片機編程時將被丟棄。

3.用戶ID用戶ID

有4個14位字,存儲在地址0x10000到0x10003。它們通常存儲在一條線上,但可以分布在不同的線上。

4.配置字節

數從2到5不等,實際上是14位字。它們從地址0x1000E開始,可能出現在一行上,或者每行可能有自己的行。

示例 盡管EEPROM存儲在較高的地址(0x1E000),但它通常出現在用戶ID之前的十六進制文件中,存儲在0x10000,而配置存儲在0x1000E。某些工具也可以將程序代碼存儲在正常的地址順序之外。

:020000040000FA Extended Address 0x0000
:020000000428D2 Code
:040002000034003492
:080008004001003094004001AA
:10001000FF308E0000308E001120FF308E00112046
:100020000A280130A0000130A1000A30A200A00B74
:0C0030001728A10B1728A20B17280800A6 End of Code
:020000040001F9 Extended Address 0x10000
:10E0000061006200630064006500660067006800EC EEPROM
:10E01000FF00FF00FF00FF00FF00FF00FF00FF0008 EEPROM
:080000000100020003000400EE User ID 0x10000
:02000E00DA1FF7 Configuration starting at 0x1000E
:020010003F2986
:020012009F0746
:02001400FC3EB0
:02001600FF3FAA Last configuration
:00000001FF End of File

七、PIC24FJ單片機

使用#pragma和與PIC18F相同的生成工具以完全相同的方式創建組態數據。不同PIC24FJ單片機的配置字節數和名稱數會有所不同。

最新的PIC24FJxxGB4xx和PIC24FJxxGB7微控制器具有單獨的OTP(一次性可編程)存儲器,用于存儲用戶數據。這是永久性的,是一個大小的編程頁面,64或128條指令(192或384字節)。可以使用Window - > PIC Memory Views - > User OTP Memory菜單在MPLAB中創建該部分。

配置字節存儲在閃存的最后一頁,并在復位時加載到配置寄存器,因此閃存的最后一頁可以用hex文件中的擴展地址標記分隔。

在GA4/GB4設備上,OTP內存通常列在最后一頁代碼之前的文件中,即使它位于遠高于設備實際大小的更高地址。

此部分具有擴展地址標記:020000040100F9,大小為192或384字節。

閃存的最后一頁將具有擴展地址,但這將隨設備的大小而變化。對于PIC24FJ64單片機,它將是:020000021000EC它們實際上大于64KB。

联系我们: 青河县| 雅安市| 赫章县| 铜山县| 芜湖市| 上思县| 岱山县| 潍坊市| 宜宾市| 十堰市| 乌拉特前旗| 池州市| 山东| 孟津县| 焉耆| 鹤庆县| 班戈县| 兰坪| 长沙市| 西吉县| 苗栗县| 吴堡县| 石家庄市| 东海县| 铜山县| 信阳市| 大理市| 黔西县| 浏阳市| 安新县| 乌拉特前旗| 隆化县| 昌邑市| 无棣县| 康乐县| 罗山县| 新巴尔虎左旗| 鱼台县| 雷州市| 湾仔区| 保康县|