历史上的今天
返回首页

历史上的今天

今天是:2025年02月16日(星期日)

正在发生

2020年02月16日 | PIC 里面关于CONFIG( ) 配置位

2020-02-16 来源:eefocus

简介:PIC单片机的配置字可以用__CONFIG命令来定义,有些PIC单片机在程序空间外还有ID空间, 有些PIC单片机支持用外部编程器对内部的EEPROM进行编程。
对于HI-TECH C18 , 配置字的设定通过宏 __CONFIG(n,x)来实现.


一.配置字

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 pide 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)的形式就行了,这一切只是为了用户更友好的使用这些宏,没什么特别的意思


***/

推荐阅读

史海拾趣

BOCA公司的发展小趣事

BOCA公司最初是一家小型电子元件制造商,面临着激烈的市场竞争。然而,公司始终坚持研发创新,投入大量资源于新技术的研究。终于,在一次偶然的实验中,BOCA的研发团队成功开发出了一种新型的半导体材料,这种材料在性能上远超当时的行业标准。这一技术突破让BOCA迅速在行业中崭露头角,订单量激增,公司规模迅速扩大。

Econais公司的发展小趣事

随着技术的不断成熟和市场的日益扩大,Econais开始将目光投向全球市场。公司积极参加各类国际展会和研讨会,与全球各地的客户和合作伙伴建立联系。同时,Econais还针对不同地区的市场需求,推出定制化的产品和解决方案。这些努力使得Econais在全球范围内的市场份额逐渐扩大。

Frequency Devices公司的发展小趣事

Frequency Devices公司自成立之初,便以技术创新为核心驱动力。在20世纪90年代初,公司研发团队成功开发出一种新型高频滤波器,该滤波器在信号传输效率和稳定性上实现了重大突破。这一创新不仅解决了当时通信领域的一大技术难题,还迅速获得了市场的广泛认可。随着技术的不断迭代,Frequency Devices公司持续投入研发,推出了更多高性能、低成本的高频电子产品,逐步奠定了其在行业内的领先地位。

Acculin Inc公司的发展小趣事

Acculin Inc最初是一家专注于电子元器件研发的小型企业。随着物联网和智能家居的兴起,公司敏锐地捕捉到了市场的机遇,开始研发一款低功耗、高集成度的传感器芯片。经过数年的努力,Acculin成功推出了这款芯片,并凭借出色的性能获得了市场的认可。随后,公司逐渐扩大了产品线,涵盖了多个电子领域,成为行业内技术创新的领军者。

Analog Power公司的发展小趣事

品质是Analog Power公司的生命线。他们深知只有提供高质量的产品和服务,才能赢得客户的信任和忠诚。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司还注重客户反馈和需求,不断优化产品和服务,以满足客户的期望和需求。

FEI Microwave Inc公司的发展小趣事

FEI Microwave Inc公司自成立以来,始终致力于微波技术的创新与发展。在早期,公司研发团队成功研发出了一款具有突破性的微波收发模块,该模块以其高频率、低噪声和出色的稳定性迅速在市场上崭露头角。随着技术的不断完善,FEI Microwave Inc公司逐渐在微波通信领域建立了自己的技术壁垒,成为业界的佼佼者。

问答坊 | AI 解惑

汽车点烟器输出电压和电流是多少呢?

汽车点烟器输出电压和电流是多少呢? 电脑的光驱有多少的电压和电流呢? 如果把光驱放到车上要接多大的电阻呢? 接什么东西 能把电流降到 1.5A 呢?  光驱的电流是1.5A  如果电流大了,光驱会坏吗? [ 本帖最后由 sunsonglin 于 2009-2-2 ...…

查看全部问答>

冰箱:高端驶入快车道 中国成全球“风向标”

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 然国际金融危机给家电业带来了不小的冲击,但是受益于家电下乡、以旧换新等一系列利好政策,2009年我国的高端冰箱市场出现了快速增长的态势。另外,随着低碳理念的深入人心,企业节能技术不断 ...…

查看全部问答>

ARM Pc寄存器的一个问题

我在看书看到这样一段话: 对于arm指令集来说,PC指向当前指令的下两条指令的地址,由于ARM指令是字对齐的,PC值的第0位和第一位总为0, 这句话全不懂,谁能解释下呢…

查看全部问答>

问一下MSP430f42xx里的SAD( Sigma-Delta A/D)怎么用啊?

本帖最后由 paulhyde 于 2014-9-15 09:44 编辑 Sigma-Delta A/D 原理基本不懂····和逐次比较的有什么不同?还有怎样操作它?  …

查看全部问答>

基于ARM与SD卡的大容量数据存储技术的应用研究

0 引言   在现场测控系统中,RTU(远程测控终端)存储容量、存储数据的转移问题始终是RTU的重要环节。RTU的存储容量一般为几十K~几百K字节,数据转移通常采用不掉电静态RAM、EEPROM存储模块,或采用便携式计算机通过串行口读取RTU数据。 ...…

查看全部问答>

【悬赏求助】launchpad捕获按键按下的时间

最近在学习launchpad,中断方面困难重重。。。我想实现这样一个功能:P1.1设为输入,连接一个按键,然后利用中断判断按键按下的时间,要是短按的话就LED1翻转,长按的话LED2翻转。这样的话,我知道应该用捕获模式获取时间信息对吧,但是实现过程一 ...…

查看全部问答>

MSP430硬件I2C程序

MSP430硬件I2C程序,已测试通过,有兴趣的可探讨探讨…

查看全部问答>

今年刚大一下学期,学的电子信息专业,我应该入手怎样51单片机,本人小白,

刚刚进入大学,不想时间都被浪费,想自学51单片机,不知道怎么下手,     论坛的帖子也下了一些,也看了有一些,大二大三的学长要我先看书,    我到底是应该是先看书,还是边理论边实践,实践的话,应该买个什么样的51单片 ...…

查看全部问答>