PIC10F202在PIC-AS下的OSCCAL复位向量配置与调试问题
问题1:模拟器提示0x1FF无代码段的解决
PIC10F202的复位向量固定为0x1FF,模拟器启动时会优先执行该地址的指令,若该地址未被标记为代码段或无有效指令,就会触发报错。
无需硬编码OSCCAL值,只需在代码中给复位向量段分配合法地址并添加占位指令,即可让模拟器正常识别:
radix dec processor 10F202 CONFIG WDTE = OFF CONFIG CP = OFF CONFIG MCLRE = OFF #include "xc.inc" ; 复位向量段:指定绝对地址0x1FF PSECT resetVector, class=CODE, delta=2, abs org 0x1FF resetVector: MOVLW 0x00 ; 用0占位,不硬编码校准值,烧写时不影响原厂数据 ; 主程序段:指定绝对地址0x0000 PSECT main, class=CODE, abs org 0x0000 main: MOVLW 1 GOTO main END
编译后模拟器可正常启动,调试时可手动修改OSCCAL寄存器的值模拟校准效果。
问题2:烧写hex是否会覆盖出厂OSCCAL值
PIC10F202的0x1FF是出厂校准OSCCAL的专属存储地址,编程器的处理逻辑如下:
- 若hex文件中未包含0x1FF地址的数据(即你没手动写入值),编程器会保留芯片原厂校准值;
- 若hex文件中包含0x1FF的自定义值(比如你硬编码的0x14),编程器会按hex内容烧写,覆盖原厂值。
另外,MPLAB IPE等编程工具提供「Preserve Calibration Bits」选项,勾选后无论hex是否包含该地址数据,都会保留原厂校准值,烧写时建议开启此选项。
问题3:替代链接器标志指定段地址的方法
有两种更高效的方式:
直接在汇编代码中用
org伪指令
如问题1中的代码示例,配合PSECT的abs属性,直接在代码里指定段的绝对地址,完全不需要链接器标志,修改地址时直接改代码即可。使用自定义链接脚本
创建后缀为.lkr的链接脚本,预先定义各代码段的地址范围,例如:CODEPAGE NAME=vectors START=0x1FF END=0x1FF PROTECTED CODEPAGE NAME=page0 START=0x0000 END=0x01FE在MPLAB-X项目设置中指定该链接脚本路径,后续
resetVector段会自动映射到vectors页,main段映射到page0,无需每次调整链接器参数,适合长期维护的项目。
内容的提问来源于stack exchange,提问作者nipil
相关产品推荐
相关产品推荐

