概要
.HEX文件是MPLAB生成的一種可執行文件的格式,它本身是由ASCII字符組成的,但其包含16進制的可執行代碼的信息,也就是說,這類文件描述在程序存儲器的哪個單元放入什么指令。
.HEX文件的種類
MPLAB可以生成3種不同格式的可執行文件。其中兩種是.HEX文件,它們分別稱為INHX8M格式(Intel Hex Format)和INHX32格式(Intel Hex 32 Format);
另外一種稱為INHX8S格式(Intel Split Hex Format),這種格式會同時生成.HXL和.HXH文件,兩個文件分別存放指令數據的低字節和高字節。
這里只討論兩種.HEX文件。MPLAB內嵌的連接器MPLINK在默認情況下生成INHX32格式的.HEX文件,也可以使用/aINHX8M選項指定生成INHX8M格式的.HEX文件。
我們的燒寫器應該能支持這兩種格式的.HEX文件。
INHX32格式的.HEX文件
一個INHX32格式的.HEX文件是由若干個形式相同的行構成的。
行的種類
對于最多只有8K字程序空間的PIC16F87X單片機而言,相應的.HEX文件只有3種不同的行:線性地址定位行,代碼數據行,結尾標志行。一個.HEX文件的第1行是一個線性地址定位行,后面接著是若干個代碼數據行,最后一行是結尾標志行。
線性地址定位行僅僅對超過32K字代碼的程序有用。實際上,INHX32格式與INHX8M格式的不同之處就在于它能表示超過32K字代碼的程序。線性地址定位行中指定指令存放地址的高16位,而低16位由代碼數據行中的“AAAA”部分指定。“AAAA”表示指令存放地址的2倍,所以最多能表示32K字的指令,而PIC16F87X單片機最多只有8K字程序空間,故不需要用到指令地址的高16位,因此.HEX文件的線性地址定位行指定的指令地址的高16位總為“0000”。
代碼數據行指定一段連續存放的代碼的起始存放地址和代碼值。通常一行中最多有16條語句的代碼。
結尾標志行標志整個文件的結束。
行的格式
一個INHX32格式的.HEX文件的每一行都是下面這種格式:
:BBAAAATTHHHH....HHHHCC
即開始是9個字符組成的前綴“:BBAAAATT”,加上若干個4字符的“HHHH”數據,結尾是2個字符的校驗字“CC”。這里所說的“字符”是指組成文件的ASCII字符,而一個16進制“字節”必須用兩個“字符”表示。
各個部分的意義是:
: 一行的開始符。
BB 數據部分的字節數,即“HHHH”部分的字節數。
AAAA 代碼開始存放的地址的2倍。僅在代碼數據行中有意義,在其余兩種類型的行中這一部分為“0000”。
TT 行的類型。
00 代碼數據行
01 結尾標志行
02 段地址定位行(PIC16F87X單片機的.HEX文件中沒有用到)
04 線性地址定位行
HHHH 在代碼數據行中,表示一條14-bit的指令代碼,其中低字節在前,高字節在后,比如“movlw 0xaa”這條指令對應的代碼是30AA,相應的HHHH表示為AA30;在結尾標志行中,沒有這一部分;在線性地址定位行中,這一部分為指令存放地址的高16位。
CC 校驗字。校驗規則是,本行中前面所有的字節(兩個字符)表示的16進制數相加,再加上CC表示的16進制數,所得的和必須是256的整數倍,即用16進制表示時末尾兩位都為0。
示例
下面是一個簡單的程序的匯編語句及對應的可執行代碼。
地址 代碼 匯編解析 源程序
------- ----- ----------- ---------------------
org 0x0000
000000 2810 GOTO 0x10 goto main
org 0x0004
000004 2818 GOTO 0x18 goto int_serv
org 0x0010
main
000010 1683 BSF 0x3,0x5 bsf STATUS, RP0
000011 1303 BCF 0x3,0x6 bcf STATUS, RP1
000012 0188 CLRF 0x8 clrf TRISD
000013 1283 BCF 0x3,0x5 bcf STATUS, RP0
000014 0188 CLRF 0x8 clrf PORTD
000015 160b BSF 0xb,0x4 bsf INTCON, INTE
000016 178b BSF 0xb,0x7 bsf INTCON, GIE
stop
000017 2817 GOTO 0x17 goto stop
int_serv
000018 30ff MOVLW 0xff movlw 0xff
000019 0088 MOVWF 0x8 movwf PORTD
00001a 0009 RETFIE retfie
END
它對應的INHX32格式的.HEX文件如下:
:020000040000FA (1)
:020000001028C6 (2)
:020008001828B6 (3)
:04000A00003400348A (4)
:10002000831603138801831288010B168B17172878
上一篇:PIC16F1826定時器實現呼吸燈效果主程序
下一篇:PIC18F,ADC多通道采集,定時采集
推薦閱讀
史海拾趣
在國內市場取得一定成功后,ETL開始積極拓展國際市場。公司參加了多個國際電子展會,與全球各地的客戶和合作伙伴建立了廣泛的聯系。同時,ETL還通過與國際知名企業的合作,不斷提升自身的技術水平和產品質量。這些努力使得ETL的產品逐漸走向國際市場,為公司的發展注入了新的動力。
AdTech公司深知人才是企業發展的核心動力。因此,公司一直致力于培養和引進高素質的人才,打造了一支具有豐富經驗和專業技能的團隊。公司通過提供良好的工作環境和福利待遇,吸引了一批優秀的研發、市場和管理人才。同時,公司還注重員工的培訓和成長,為員工的職業發展提供了廣闊的空間。這些措施使得公司的團隊更加穩定和高效,為公司的持續發展提供了有力保障。
AdTech公司一直注重創新,不斷投入研發資源以推出新產品和解決方案。公司通過優化芯片結構設計、提升器件封裝技術等手段,不斷提升QCL的性能和穩定性。此外,公司還積極探索QCL在新能源、環保等領域的應用潛力,開發出了一系列具有創新性和實用性的產品。這些創新成果不僅提升了公司的核心競爭力,也為行業的發展注入了新的活力。
ARBOR公司深知合作的重要性,積極與上下游企業建立緊密的合作關系。公司通過與供應商和客戶建立長期穩定的戰略合作關系,實現了資源共享和優勢互補。這種合作模式不僅降低了公司的運營成本,也提高了產品的競爭力。同時,ARBOR公司還積極參與行業交流活動,推動整個電子產業的健康發展。
隨著環保意識的不斷提高,EOZ Secme積極響應綠色環保的號召。公司在生產過程中采用了多項環保措施,減少了對環境的污染。同時,EOZ Secme還積極參與社會公益事業,通過捐款、贊助等方式回饋社會。這些舉措不僅提升了公司的社會形象,也為其贏得了更多消費者的認可和支持。
在電子行業的初期,BELLING LEE公司以其對新技術的敏銳洞察力和強大的研發能力脫穎而出。公司投入大量資源研發出了一款具有革命性的高效能電子芯片,這一創新產品不僅提高了電子設備的性能,還大大降低了能耗。憑借這一技術突破,BELLING LEE公司迅速在電子市場上獲得了認可,并逐漸建立起自己的市場地位。
節能燈壽命為2500~5000小時,而半導體LED照明燈正常情況下的壽命是5萬-8萬小時,但LED燈的耗電量只有普通白熾燈、霓虹燈的1/10。因此,如果我國的照明全部采用LED燈,則一年節約的電費相當于建造了6座三峽電站。有關部門應該采取強制措施推廣節能產 ...… 查看全部問答∨ |
|
常用標志寄存器含義的理解,這是微型計算機的題目,可我不知道如何回答,我是學軟件的,初次接觸這些硬件的知識,老是很模糊,弄不清楚實際是怎么回事,請各位給點意見,回答一下~謝謝~… 查看全部問答∨ |
|
誰有MSC51單片機視頻教程及課件,最好是北航的!謝謝! 我的QQ號:250193148 它發到我郵箱里或者在線傳給我 謝謝了!… 查看全部問答∨ |
|
秀下我做的調試工具:UsbHub+xlink+USB轉串口/485/Nrf24L01/紅外 秀下我的調試工具UsbHub+xlink+USB轉串口/485/Nrf24L01/紅外 看了小馬哥的多功能調試工具真是羨慕啊,于是也做了個高速USBhub托了個xlink, 用stm32實現 USB轉串口TTL/串口232/串口485(通過跳線來實現)/NRF24L01/紅外,同時支持輸出一路PWM輸出。 ...… 查看全部問答∨ |
|
我下了光盤,按照HELPER2416_V2 開發板LINUX 用戶手冊 的說明按裝上了。fedora開發環境。 沒有什么可注意的地方,有一個地方就是安裝fedora那個選項,直接選中解壓后的F12目錄就行。我不知怎么搞出兩個fedora文件,反正也好用: 我現在的 ...… 查看全部問答∨ |