PIC __CONFIG( ) 配置位

发布者:诚信与爱最新更新时间:2020-09-09 来源: eefocus关键字:PIC  配置位  配置字 手机看文章 扫描二维码
随时随地手机看文章

一.配置字 PIC单片机的配置字可以用__CONFIG命令来定义:     #i nclude          __CONFIG(x)   ;其中x是配置字,头文件中定义了相应的配置说明符。

如:__CONFIG(WDTDIS & XT & UNPROTECT);        这将关闭看门狗,设置XT振方式,程序不加密。注意:不同的配置符间用'&'相联,未定义的部分保留未编程状态。详细的情况请参考头文件及PIC数据手册


二.ID 位置  有些PIC单片机在程序空间外还有ID空间,可用下面的方法来定义: #i nclude  __IDLOC(x) ;其中x是ID标示。

如:__IDLOC(15F0);    将ID的四个单元定义为:1, 5, 15, 0. ID的具体位置由所指定的PIC芯片自动设定。


三.EEPROM 数据        有些PIC单片机支持用外部编程器对内部的EEPROM进行编程。 __EEPROM_DATA()可以将用于初始化的数据放入HEX文件中。

如: __EEPROM_DATA(0, 1, 2, 3, 4, 5, 6, 7) 可将0-7八个数放入HEX文件中,在用外部的编程器进行编程时将 这八个数写入PIC单片机中。 __EEPROM_DATA不是用于运行时写入EEPROM数据的,在运行时请用 EEPROM_READ(), EEPROM_WRITE()。

========================================================================

PIC18__config配置位

     PIC18的__CONFIG设置与PIC16的不一样。

PIC16的如:

        __CONFIG(_CP_OFF&_WDT_ON&_BODEN_ON&_PWRTE_ON&_RC_OSC); 是写在一起的。

PIC18 不写在一起,CONFIG1..7是分开写的。如:

      __CONFIG(1,IESODIS&FCMDIS&HS);       __CONFIG(2,BOREN&PWRTEN&WDTDIS&WDTWINDIS&WDTPS32K);       __CONFIG(3,MCLREN);       __CONFIG(4,DEBUGEN&XINSTEN&STVRDIS);       __CONFIG(5,UNPROTECT);

__CONFIG(N,X) 函数原型在PIC18.H文件中(PICC软件安装目录下的include文件夹中)。里面的各项设置在PIC18Fxx22.H中。N代表配置信息;X代表设置变量。如果要实现处理器的一些特殊功能,则需要查找相关的帮助文件,根据帮助文件的提示,在同文件中定义相关的变量。


上面的各项设置意义是:

//各项内容在PIC18FXX22.H文件中定义     //1.振荡器切换OFF&故障保护时钟监视器OFF&高速模式     //2.欠压复位ON&上电延时ON&看门狗OFF&看门狗分频数     //3.mclr用于复位脚     //4.使能后台调试器&使能指令集扩展&堆栈溢出不复位    //5.代码不保护

==========================================================================

笔者在使用picc18进行基于PIC18F452的软件开发时,发现对于18系列的单片机,手动设置配置位非常麻烦,而且容易出错,所以考虑在源程序中设定配置位,这样编译后,无论是用什么烧写工具,都不需要再进行配置位的设定了。       对于HI-TECH C18 , 配置字的设定通过宏 __CONFIG(n,x)来实现. 宏__CONFIG(n,x)的声明在文件pic18.h中,各位元的声明在对应芯片型号的头文件中.18F452的例程如下: //***************************************************************************************     #include  //*************************************************************************************** //*The declaration of __CONFIG(n,x) is in pic18.h                    * //*The __CONFIG(n,x) directive defines configuration data within is in pic18fxx2.h        * //***************************************************************************************     __CONFIG(1,RC) ;     __CONFIG(2,PWRTDIS & WDTPS1 & WDTEN ) ;     __CONFIG(4,STVRDIS) ;      void main(void) { //your code } //************************************************************************* 在pic18.h中,__CONFIG(n,x)的声明如下      #define    __CONFIG(n, x)    asm("tpsect config,class=CONFIG");             asm("global config_word" ___mkstr(n));              asm("config_word" ___mkstr(n)":");              asm("torg ("___mkstr(n)"-1)*2");              asm("tdw "___mkstr(x)) 部分在pic18.h中的声明大体如下,具体请参考对应的头文件。 // Configuration bit values // Config. Register 1 #define OSCSEN        0xDFFF        // enable oscillator system clock #define OSCSDIS        0xFFFF // oscilator types #define RCRA6        0xFFFF        // RC w/OSC2 config as RA6 #define HSPLL        0xFEFF        // HS w/PLL Enabled, Clk Freq = 4xFreq Osc. #define ECRA6        0xFDFF        // EC w/OSC2 config. as RA6 #define ECDB4        0xFCFF        // EC w/OSC2 as divide by 4 clock output #define RC        0xFBFF #define HS        0xFAFF #define XT        0xF9FF          #define LP            0xF8FF
// Config. Register 2 // Brown Out reset #define    BOREN        0xFFFF        // Brown-out reset enable n代表 Config. Register n(代表配置信息), 例如__CONFIG(1,x); 1 代表Config. Register 1, X可为OSCSEN,RC等。 !!!最后还应该注意的是如果在源程序中进行配置位设置,如果使用的软件版本(比如使用picc18的8.20版本和MPLAB6.30)较低,虽然编译不会有问题,但可能会出现配置位设置混乱,推荐使用picc18的8.35版本和MPLAB7.0以上。安装HTSOFT的软件时,也必须保证完全安装,尤其是一定要安装MPLAB_toolsuites工具。

==========================================================================

如下:PIC18F452中PIC18.h     (此时源程序,哪位高人可否解析下?共同学习。)

/* Store a word value to a particular configuration word register eg.  * __CONFIG(4, DEBUGEN & LVPDIS); // write to config word 4  * config mask attributes (such as DEBUGEN) defined in chip-specific  * header file. */ #define __CONFIG(n, x) asm("tpsect config,class=CONFIG");    /**t是制表符,格式需要;psect 是定义class的关键字,意思是将以下的代码放入CONFIG class 中,并命名为config(注意大小写);config为自定义的class名,可以为任何其他名字;CONFIG说明了这个class的起始地址,在连续命令中指定CONFIG的范围delta=2,规定就是这样的。**/    asm("global config_word" ___mkstr(n));     /***__mkstr(x)是一个将数字转换为字符的宏,目的是让编译器把一个数字当作是一个字符串来处理,如果不用__mkstr,你需要写成__CONFIG("0x0F")的形式,使用了__mkstr,直接写成__CONFIG(0x0F)的形式就行了,这一切只是为了用户更友好的使用这些宏,没什么特别的意思

***/


关键字:PIC  配置位  配置字 引用地址:PIC __CONFIG( ) 配置位

上一篇:【c#】PIC单片机的编程烧写功能
下一篇:PIC EEPROM问题

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved