历史上的今天
返回首页

历史上的今天

今天是:2025年01月15日(星期三)

正在发生

2020年01月15日 | PIC单片机的配置字用CONFIG命令的定义

2020-01-15 来源:elecfans

一.配置字

#i nclude

__CONFIG(x) ;其中x是配置字,头文件中定义了相应的配置说明符。


PIC单片机的配置字用CONFIG命令的定义

如:

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

***/

推荐阅读

史海拾趣

Electro-Films Inc Semi-Films Div公司的发展小趣事

随着市场的扩大和竞争的加剧,Semi-Films Division 意识到品质是品牌的核心。因此,公司加大了对产品质量控制的投入,引入了先进的生产设备和检测手段,确保每一批产品都符合客户的要求。同时,公司还建立了完善的质量管理体系,对生产过程进行全程监控,确保产品质量的稳定性和可靠性。这些努力使得 Semi-Films 的产品在市场上赢得了良好的口碑。

Facon公司的发展小趣事

在2010年代初,随着科技的飞速发展,电子行业正迎来新一轮的创新浪潮。这时,一群充满激情和梦想的工程师在硅谷创立了Facon公司,他们怀揣着改变世界的愿景,立志在电子行业中留下自己的印记。初始阶段,Facon主要专注于研发高性能的半导体芯片,为智能手机、平板电脑等电子产品提供强大的计算能力。通过不懈努力和持续创新,Facon逐渐在市场中树立了良好的口碑。

Hitachi Metals公司的发展小趣事

自1956年成立以来,Hitachi Metals便逐步在电子材料领域建立了坚实的基础。公司早期便专注于研发和生产用于电子设备的核心部件,如磁性材料。随着电子行业的蓬勃发展,日立金属迅速抓住了市场机遇,推出了高性能的Nd-Fe-B系列烧结磁石和高性能铁氧体烧结磁石,这些材料广泛应用于计算机、半导体集成电路器件及平板显示屏等高科技产品中。凭借其卓越的产品质量和稳定的市场供应,Hitachi Metals在电子材料市场上赢得了广泛的认可。

Data Translation Inc公司的发展小趣事

Data Translation Inc公司成立于1973年,初期专注于数据采集和处理技术的研发。在成立初期,公司就凭借对技术的深刻理解和敏锐的市场洞察力,成功开发了一系列具有创新性的数据采集和处理产品。这些产品不仅满足了当时工业界对高精度、高速度数据采集的需求,还引领了整个行业的发展方向。随着技术的不断进步和市场需求的不断变化,Data Translation不断推出新产品,逐渐确立了其在数据采集和处理领域的领先地位。

Glow-Lite Corp公司的发展小趣事

Data Translation在追求企业发展的同时,也积极履行社会责任和推动可持续发展。公司关注环境保护和员工福利等方面的问题,通过采用环保材料、节能减排等措施降低生产过程中的环境污染和能源消耗;通过提高员工福利待遇、加强员工培训等方式提升员工的工作满意度和忠诚度。这些举措不仅为公司赢得了良好的社会声誉和形象,也为公司的长期发展奠定了坚实的基础。

请注意,以上故事仅为概述框架,并未详细展开每个故事的具体情节和细节。在实际编写时,你可以根据Data Translation Inc公司的具体发展历程和业务特点进行进一步的补充和完善。

长运通(CYT)公司的发展小趣事

深圳市长运通光电技术有限公司(简称长运通或CYT)成立于2003年11月,总部设在深圳这座充满创新活力的城市。公司从最初只有几名员工的初创团队,逐步发展成为在电源管理IC和LED光源领域具有影响力的企业。长运通在初创阶段就明确了自身的市场定位,致力于为客户提供高品质的电源解决方案和LED照明产品。通过不断努力,公司逐渐在市场上建立了良好的口碑。

问答坊 | AI 解惑

用于单相电机调速的单片PWM控制技术

摘要:针对单相电机的变频调速控制需要,提出了一种利用单片机实现的PWM算法,该算法适用于 电机的恒V/f比控制,算法简单,便于单片机实现。理论分析和实验表明该方法是 可行的。…

查看全部问答>

嵌入式系统软件的层次结构

嵌入式系统软件的层次结构 具有操作系统的嵌入式软件层次:                      驱动层程序                &nbs ...…

查看全部问答>

wince运行后时屏幕上字体闪烁厉害,请问有解决办法吗?

wince运行后时屏幕上字体横向上闪烁厉害,并且纵向上有抖动,是不是2440非工业级别抗干扰能力差的原因?…

查看全部问答>

18b20初始化问题

void delay(unsigned int x)  //1.5us左右   {        while(x)       {          x--;       }   }& ...…

查看全部问答>

机顶盒开发

我现在做WEB ,但找了份做机顶盒的,工资比目前少比较多,想请教各位: 就前景和目前工资对比,我该如何选择,我不喜欢做WEB,没去这家公司应该也会转其他应用软件方面的公司 大家多多帮忙 谢谢~~~…

查看全部问答>

LED发光二极管的结构组成

replyreload += \',\' + 688057;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

小哥我遇到的打死也想不到的问题

小哥我所在的公司一个生产车间的控制系统用的是莫迪康984-785E系列的PLC,从96年投运至今已经快十五年了,最近出现了一个奇怪的故障,某台设备启动后靠PLC就停不下来了,只能将这台设备切换至就地控制,才能用就地停止按钮停下来。一开始怀疑是PLC ...…

查看全部问答>

让Verilog仿真状态机时可以显示状态名

Situation: 我们平时使用Verilog进行状态机编码时,通常使用parameter对状态名进行定义,这样写Case语句的时候就不会对这一串10摸不着头脑。可是通常这样做的话,在Modelsim里看到的还是一串10,使排错非常困难,特别是在用OneHot编码的时候,就 ...…

查看全部问答>

六大主流技术标准规格认证徽标详解

关键字: 技术标准  技术标准化  认证   伴随着科技的不断进步发展,更多新颖的技术与随之而来的标准规范相应而生。之前我们已经专文谈论过技术标准化(Technology Standardization)的重要性,技术标准化不仅在产 ...…

查看全部问答>

看了飞思卡尔的新的规则不想做的有没有啊。。

本帖最后由 paulhyde 于 2014-9-15 03:42 编辑       看了新的飞思卡尔的智能车的比赛的规则,有木有压力啊,电磁的孩子伤不起。。。。。  …

查看全部问答>