What Is Inside Hex File ?( PIC microcontroller Hex file):
Every new line begins with a colon. Then the numbers and letters that follow are hexadecimal codes that are control characters, address locations or data bytes. Each line in the file has this format:
BB contains the number of data bytes on line.
aaAA is address in memory where the bytes will be stored. This number is actually doubled which I’ll cover in a bit. Also the lower byte is first aa followed by the upper byte AA.
TT is the data type.
00 - means program data.
01 - means End of File (EOF).
04 -means extended address. It indicates the data value is the upper 16 bits of the address.
DD is actual data bytes which contain the machine code that your program created. There can be numerous bytes in one line. The BB value indicates how many bytes are included in the line.
CC is calculated checksum value for error monitoring. It’s a 2s-complement calculation of: BB + AAAA + TT + DD.
So let’s look at the first line.
02 indicates the number of bytes on the line. In this case there are two bytes.
0000 is the memory address to place the bytes but its value was multiplied by 2. So normally we would divide the address by 2 but in this case 0000 / 2 = 0000. So the address is 0000.
04 means this is the extended address. So the data contains the upper 16 bits of the address. Any lower bit addresses that follow this line will use these upper bits until a new 04 line changes the upper bits.
0000 this is the upper 16 bits of the address indicated by the 04 data type.
FA is the 2’s compliment of the sum of the bytes: 02 + 00 + 00 + 04 + 00 + 00.
Note: 2’s compliment is just the binary value, inverted and then 1 added. Then the result converted to .hex format.
02 + 00+ 00 + 04 + 00 + 00 = 06 = 00000110 binary
00000110 inverted = 11111001
11111001 + 1 = 11111010 = FA hexadecimal
So this first line just says the upper address for all future bytes will have an upper (extended) address of 0000 and it will start at memory address 00000000 in the Microchip PIC.
The next line breaks down this way:
02 indicates two data bytes.
0000 is the address again.
00 is the data type so the data bytes are program data.
0528 are the two data bytes. But these are reversed since the lower byte is first so this is really 2805 hex.
D1 is the 2’s compliment checksum.
So at address 00000000 (extended and lower word combined) the program data byte 2805 is stored. But what does that byte mean?
For this we have to consult the PIC16F886 data sheet (Figure 3). In the data sheet is the Assembly code instruction set. And for each instruction, the table 15-2 below, shows a 14 bit opcode. This is the binary machine code for the instruction.
So converting 2805 to binary we get 0010100000000101. Since the PIC16F886 uses a 14 bit opcode we can ignore the first two bits which are zeros. This leaves us with 10100000000101. If we then scan the opcode list we will find that code matches the GOTO instruction 10 1kkk kkkk kkkk. The kkk.. portion represents the address to goto. In this case the value after the 101 for goto leaves a value of 00000000101 or hex value 05.
So this would indicate that this line in the .hex file represents a GOTO 0x05 command line.
Hi, My Name is DK. I am a embedded system designer and embedded programmer. I am a certified holder of Diploma in Embedded system designing. We have a team of professinal programmers, developers work together and implement innovative concepts.