PIC 里面关于 __CONFIG( ) 配置位

摘要:
一.配置字PIC单片机的配置字可以用__CONFIG命令来定义:#include__CONFIG;其中x是配置字,头文件中定义了相应的配置说明符。三.EEPROM数据有些PIC单片机支持用外部编程器对内部的EEPROM进行编程。========================================================================PIC18__config配置位PIC18的__CONFIG设置与PIC16的不一样。PIC16的如:__CONFIG;是写在一起的。PIC18不写在一起,CONFIG1..7是分开写的。

一.配置字
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 <pic18.h>
//***************************************************************************************
//*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 里面关于 __CONFIG( ) 配置位》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇“链”接产业 “数”造智能 ——京东云技术沙龙区块链专场活动在津举行c#生成动态库并加载下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PostgreSQL 10编译安装(CentOS 7)

  版本说明:           Postgres 10.9    CentOS 7.6  1 安装必要软件 # yum groupinstall -y "Development tools" # yum install -y bison flex readline-devel zlib-devel gcc   2 获取Postgres资源并编译...

利用opencv3中的kmeans实现抠图功能

kmeans算法主要用来实现自动聚类,是一种非监督的机器学习算法,使用非常广泛。在opencv3.0中提供了这样一个函数,直接调用就能实现自动聚类,非常方便。 函数原型: C++: double kmeans(InputArray data, int K, InputOutputArray bestLabels, TermCriteria criteria...

部署Qualitis

Qualitis是一个支持多种异构数据源的质量校验、通知、管理服务的数据质量管理平台,用于解决业务系统运行、数据中心建设及数据治理过程中的各种数据质量问题。 Qualitis基于Spring Boot,依赖于Linkis进行数据计算,提供数据质量模型构建,数据质量模型执行,数据质量任务管理,异常数据发现保存以及数据质量报表生成等功能。并提供了金融级数据质量...

UEditor使用浅析

    UEditor富文本编辑器,百度的良心产品之一。     记录下我是怎么用UEditor的     1、引入到项目中,添加对net/bin下Newtonsoft.json的引用     2、实例化,按照demo中的index.html的形式。把ueditor.config.js和ueditor.all.min.js引过来         此时,应该...

Linux 配置gitee

安装好git后, 如何配置连接至gitee ?首先, 需要在官网注册一个gitee账号, 然后进行以下配置步骤: 1. 设置账号 $ git config --global user.name "your name" 2. 设置邮箱 $ git config --global user.email "your email" 3. 生成密钥 $ ssh-...

git管理多个github账号

网上有几个教程,感觉都不完善,自己做个备用。 git管理多个github账户的关键在于config配置和本地使用方式: 1、config的作用为指明每个github账号在本地的别名,内容如下: 如图,个人账号是默认的。工作账号将host命名成了work.github.com 2、本地使用时要将 ssh:git@github.com:teayork/tes...