You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:替代链接器标志指定段地址的方法

有两种更高效的方式:

  1. 直接在汇编代码中用org伪指令
    如问题1中的代码示例,配合PSECT的abs属性,直接在代码里指定段的绝对地址,完全不需要链接器标志,修改地址时直接改代码即可。

  2. 使用自定义链接脚本
    创建后缀为.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 02:23:16