一.装备字
#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装备位
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)的方式就行了,这一切仅仅为了用户更友爱的运用这些宏,没什么特别的意思
***/