开发环境:MPLAB X IDE V3.6
PIC18F66K80源码:
#include <xc.h>
#include "Delay.h"
void main(void) {
PORTC=0X00;
LATC=0X00;
TRISC=0x00;
while(1){
LATC=0X01;
delay();
LATC=0X00;
delay();
}
}
设置代码偏移:3000-3FFF
IDE观察可视化存储器:
汇编代码模式:
十六进制模式:
下面先了解下HEX格式,再去分析hex文件。
HEX 解析格式如下:
example:
:020000040020DA
02 = data len
0000 = addr
04 = record type
0020 = data
DA = checksum
record type:
00 代码数据行
01 结尾标志行
02 段地址定位行(PIC16F87X单片机的.HEX文件中没有用到)
04 扩展线性地址定位行
扩展性线地址理解:
PIC18F66K80编译后的HEX文件
:04000000D4EF1FF02A
:103FA8000001D7EF1FF0000E826E000E8B6E000E20
:103FB800946E010E8B6EE6EC1FF0000E8B6EE6EC35
:103FC8001FF0F7D7000E026E000E016E400E015C66
:103FD8001F0E0258D8B01200000E046E000E036EB9
:103FE800045007E1280E035CD8B003D0034A042A22
:083FF800F7D7014A022AEAD7BB
:020000040020DA
:08000000FFFFFFFFFFFFFFFF00
:020000040030CA
:0E00000011087F7CFF0F81FF0FC00FE00F4043
:00000001FF
下面来分析这个hex文件
# 代码部分地址 3FA8-3FFE
:103FA8000001D7EF1FF0000E826E000E8B6E000E20
:103FB800946E010E8B6EE6EC1FF0000E8B6EE6EC35
:103FC8001FF0F7D7000E026E000E016E400E015C66
:103FD8001F0E0258D8B01200000E046E000E036EB9
:103FE800045007E1280E035CD8B003D0034A042A22
:083FF800F7D7014A022AEAD7BB
#0x200000是用户ID的起始地址
:020000040020DA
:08000000FFFFFFFFFFFFFFFF00
:020000040030CA
# 下面这条指令的地址计算: 30<<16 + 0000 --->30 0000
#扩展线线地址,定位到0x30 0000 地址处(即为配置寄存器地址)
:0E00000011087F7CFF0F81FF0FC00FE00F4043 (配置寄存器的值)
:00000001FF # hex结束标志