打印
[PIC®/AVR®/dsPIC®产品]

PIC单片机头文件

[复制链接]
1788|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wf8u8|  楼主 | 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,如何区分它们的功能呢?
沙发
gaoyang9992006| | 2018-9-20 17:24 | 只看该作者
这个不太清楚。好多年没用过PIC了。
也有可能是错了,如果是对的,那么会不会是这些地址不是同一区域的地址。
如果是指的同一个绝对地址,那么会不会这些功能之间是需要同时开启或者同时关闭的,所以用了一个寄存器作为开关?

使用特权

评论回复
板凳
wf8u8|  楼主 | 2018-9-21 16:42 | 只看该作者
gaoyang9992006 发表于 2018-9-20 17:24
这个不太清楚。好多年没用过PIC了。
也有可能是错了,如果是对的,那么会不会是这些地址不是同一区域的地址 ...

谢谢!
这个问题困惑我好久了,希望哪位高手能回答一下,是不是头文件写错了?

使用特权

评论回复
地板
北极风| | 2018-9-22 08:47 | 只看该作者
0x3FFF不是地址,是设置的相应位的数据。0x3FFF相当于该位为"1",编译程序生成配置字时,各个配置位“&”,生成最终的配置字数据。

使用特权

评论回复
5
wf8u8|  楼主 | 2018-9-22 10:56 | 只看该作者
北极风 发表于 2018-9-22 08:47
0x3FFF不是地址,是设置的相应位的数据。0x3FFF相当于该位为"1",编译程序生成配置字时,各个配置位“&”, ...

谢谢

使用特权

评论回复
评论
wf8u8 2018-9-22 11:07 回复TA
茅塞顿开,谢谢 
6
wf8u8|  楼主 | 2018-9-22 11:17 | 只看该作者

感觉改成:#define RC  0B 0000 0000 0000 0001 这种形式,然后各个位相或,更容易让人理解。

使用特权

评论回复
7
xinyipcb| | 2018-10-11 20:13 | 只看该作者
好东西,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

粉丝