[PIC单片机] PIC单片机头文件

[复制链接]
500|7
 楼主 | 2018-9-17 19:36 | 显示全部楼层 |阅读模式
PIC单片机头文件中,关于芯片配置字有如下内容:
#define CONFIG_ADDR        0x2007
/*osc configurations*/
#define RC                0x3FFF        // resistor/capacitor
#define HS                0x3FFE        // high speed crystal/resonator
#define XT                0x3FFD        // crystal/resonator
#define LP                0x3FFC        // low power crystal/resonator
/*watchdog*/
#define WDTEN                0x3FFF        // enable watchdog timer
#define WDTDIS                0x3FFB        // disable watchdog timer
/*power up timer*/
#define PWRTEN                0x3FF7        // enable power up timer
#define PWRTDIS                0x3FFF        // disable power up timer
/*brown out reset*/
#define BOREN                0x3FFF        // enable brown out reset
#define BORDIS                0x3FBF        // disable brown out reset
/*Low Voltage Programmable*/
#define LVPEN                0x3FFF        // low voltage programming enabled
#define LVPDIS                0x3F7F        // low voltage programming disabled
/*data code protected*/
#define DP                0x3EFF        // protect data code
// alternately
#define DPROT                0x3EFF        // use DP
#define DUNPROT                0x3FFF        // use UNPROTECT
/* Flash memory write enable/protect */
#define WRTEN                0x3FFF        /* flash memory write enabled */
#define WP1                0x3DFF  /* protect 0000 - 00FF */
#define WP2                0x3BFF  /* protect 0000 - 07FF(76A/77A) / 03FF(73A/74A) */
#define WP3                0x39FF  /* protect 0000 - 1FFF(76A/77A) / 0FFF(73A/74A) */
/*debug option*/
#define DEBUGEN                0x37FF        // debugger enabled
#define DEBUGDIS        0x3FFF        // debugger disabled
/*code protection*/
#define PROTECT                0x1FFF        /* protect program code */
#define UNPROTECT        0x3FFF        /* do not protect the code */

问题:
为什么PIC单片机的配置字中,几个不同的功能,但头文件中,地址却是相同的呢?
比如:RC、WDTEN、BOREN、DUNPROT等都是一个位变量,为什么对应同一个地址0x3FFF呢?
地址都是0x3FFF,如何区分不同的位呢?比如WDTEN=1;BOREN =1;但它们的地址是相同的0x3FFF,如何区分它们的功能呢?
| 2018-9-20 17:24 | 显示全部楼层
这个不太清楚。好多年没用过PIC了。
也有可能是错了,如果是对的,那么会不会是这些地址不是同一区域的地址。
如果是指的同一个绝对地址,那么会不会这些功能之间是需要同时开启或者同时关闭的,所以用了一个寄存器作为开关?
 楼主 | 2018-9-21 16:42 | 显示全部楼层
gaoyang9992006 发表于 2018-9-20 17:24
这个不太清楚。好多年没用过PIC了。
也有可能是错了,如果是对的,那么会不会是这些地址不是同一区域的地址 ...

谢谢!
这个问题困惑我好久了,希望哪位高手能回答一下,是不是头文件写错了?
| 2018-9-22 08:47 | 显示全部楼层
0x3FFF不是地址,是设置的相应位的数据。0x3FFF相当于该位为"1",编译程序生成配置字时,各个配置位“&”,生成最终的配置字数据。
 楼主 | 2018-9-22 10:56 | 显示全部楼层
北极风 发表于 2018-9-22 08:47
0x3FFF不是地址,是设置的相应位的数据。0x3FFF相当于该位为"1",编译程序生成配置字时,各个配置位“&”, ...

谢谢

评论

wf8u8 2018-9-22 11:07 回复TA
茅塞顿开,谢谢 
 楼主 | 2018-9-22 11:17 | 显示全部楼层

感觉改成:#define RC  0B 0000 0000 0000 0001 这种形式,然后各个位相或,更容易让人理解。
| 2018-10-11 20:13 | 显示全部楼层
好东西,
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /8 下一条

快速回复 返回顶部 返回列表