MPLAB程序中如何设置配置字

2023-05-16


基于MPLAB X IDE配置位设置讲解



在不同的芯片中其配置字不尽相同,但是管家最常用到的有如下几部分:
1,芯片的振荡模式,有内外之分,还有三个速度的选择
2,片内看门狗的启用,配置字中有专门控制控制片看门狗的开口或关闭,不能用软件控制
3,上电复位延时定时器PWRT的启用。
4,低电压检测复位BOR模块的启用
5,代码保护控制,一旦启用代码保护功能,就可以防止程序被非法读出,注意的是,对于EPROM型的窗口片,一旦用户代码保护打开,就不能被关闭,所以调试是一定不能打开代码保护。对Flash型芯片,对芯片实施完全擦除后,包括代码保护等其他配置位信息还可恢复而能再次改写
6针对不同的芯片还有低压编程等控制。Mplab中有一个configuration bit的控制窗口可设置配置字

简单点:

Oscillator选择HS;

XINST = OFF // Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))

Internal/External Oscillator Switchover bit 选择disable;

Watchdog Timer选择disable;(看门狗在调试模式下无效,只有在烧写程序时才能将看门狗打开。)

其余选项均选择disable。

PIC 里面关于 __CONFIG( ) 配置位

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

***/


Microchip 几种编译器 在代码中 对CONFIG 位的配置   

Microchip 几种编译器 在代码中 对CONFIG 位的配置
 

;************************************************************************************

;*CONFIG Setting for PIC16/18              *

;*This text is mainly on the method for the setting of configuration bits with both assembler&C. *

;************************************************************************************

--------------  MPASM for PIC16Fxxx   ----------------------------------------------------

;*******************************************************************************************

;*1.To set CONFIG with assembler                    *

;*With the source code written in assembler the configuration bits can been set by micro __CONFIG  *

;*The micro __CONFIG  is after with the include file.                 *

;*******************************************************************************************

;*******************************************************************************************

;*Example 1,  CONFIG set for 16F877A                   *

;*******************************************************************************************

 list p=16f877A ; list directive to define processor

 #include <p16f877A.inc> ; processor specific variable definitions

;************************************************************************

;*Configuration bits              *

;*The __CONFIG directive defines configuration data within the .ASM file.  *

;* The labels following the directive are defined in the P16F877A.INC file.  *

;*The PIC16F877A Data Sheet explains the functions of the configuration bits. *

;************************************************************************

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _RC_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF

; variable definitions

;your code

;;

END ;end of program

;**********************************************************************************

-------------------   MPASM for PIC18Fxxxx   -----------------------------------

;**************************************************************************************

;*Example 2, CONFIG set for 18F452. As the configuration bits is more complex than 16F877,     *

;*it maps to more bytes in program memory instead of  one word.          *

;**************************************************************************************

 LIST P=18F452   ;directive to define processor

 #include <P18F452.INC> ;processor specific variable definitions

;****************************************************************************

;*Configuration bits               *

;*The __CONFIG directive defines configuration data within the .ASM file.   *

;* The labels following the directive are defined in the P18F452.INC file.   *

; *The PIC18FXX2 Data Sheet explains the functions of the configuration bits.  *

;*****************************************************************************

 __CONFIG _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H

 __CONFIG _CONFIG2L, _BOR_OFF_2L & _PWRT_OFF_2L

 __CONFIG _CONFIG2H, _WDT_OFF_2H

 __CONFIG _CONFIG3H, _CCP2MX_OFF_3H

 __CONFIG _CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L & _DEBUG_OFF_4L

 __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L

 __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H

 __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L

 __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H

 __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L

 __CONFIG _CONFIG7H, _EBTRB_OFF_7H

;******************************************************************************

;Variable definitions

;your code

;;

 END; end of program

;******************************************************************************

-------------------------  Hi-Tech PICC  (16Fxxxx) -------------------------------------

;******************************************************** 

;*2.To set CONFIG with C language       *

;********************************************************

;************************************************************************************

;*a. Here is a example for  HI-TECH PICC             *

;************************************************************************************

//**************************************************************************************

#include <pic.h>

#include <pic168xa.h>

//***************************************************************************************

//*The declaration of __CONFIG() is in pic.h     *

//*The __CONFIG(x) directive defines configuration data within is in pic168xa.h  *

//***************************************************************************************

__CONFIG(XT&WDTDIS&PWRTEN&BORDIS&LVPDIS&DUNPROT&DEBUGDIS&UNPROTECT);

void main(void)

{

//your code

}

//***************************************************************************************

//****************************************************************************

//*In pic.h the definition of __CONFIG(x) is as follows:       *

/*#define __CONFIG(x) asm("\tpsect config,class=CONFIG,delta=2");\  *

   asm("\tdw "___mkstr(x))         */

//* pic168xa.h defines all the configuation bit values      *

//*#define CONFIG_ADDR 0x2007 

--------------------- Hi-Tech PICC18   ------------------------------------------------

****************************************************************************************

//*b.In HI-TECH C18 , use macro __CONFIG(n,x)

//***************************************************************************************

 #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

}

//*************************************************************************

//************************************************************************

//*In pic18.h the definition of __CONFIG(n,x) is as follows     * 

//*#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))          *

//* pic18fxx2.h defines the configuration bit values,         *

//************************************************************************

--------------------    MPLAB C18   ----------------------------------------

;*******************************************************************************

;*3.For MPLAB C18 V2.40 or higher, use #pragma config directive           *

;*for example                     * 

//******************************************************************************

 #include <p18f452.h>

//*******************************************************************************

//*Configuration settings may be specified with multiple #pragma config directives.       *

//*MPLAB C18 verifies that the configuration settings specified are valid for the processor*

//*for which it is compiling                                                              *   

//*The labels following the directive "pragma config" are defined in the P18F452.h file.    *

//*******************************************************************************

 #pragma config OSC=HS

 #pragma config  PWRT=ON

 #pragma config  BOR=OFF, BORV=42

 #pragma config  WDT=OFF

 #pragma config   CCP2MUX=ON

 #pragma config   STVR=OFF, LVP=OFF, DEBUG=OFF

 #pragma config   CPD=OFF

 

void main(void)

{

//your code

}

//********************************************************************************


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MPLAB程序中如何设置配置字 的相关文章

随机推荐

  • 【数学建模笔记】【第七讲】多元线性回归分析(二):虚拟变量的设置以及交互项的解释,以及基于Stata的普通回归与标准化回归分析实例

    温馨提示 xff1a 本文共有9683字 xff0c 阅读并理解全文需要半小时左右 一 回归系数的解释 书接上文 xff0c 上文谈到内生性的解决之后 xff0c 我们对回归问题的探究还没有完 比如下面这个问题 xff1a 我们说线性回归他
  • 【番外】Stata软件安装教程

    将下载后的资源解压缩之后双击安装软件 xff1a 点击 下一步 点击 下一步 这里选择第二个 SE 这个选项 xff0c 然后点击 下一步 此处尽量不要修改安装路径 xff0c 尽量使用默认安装路径 然后一直点 下一步 即可 安装完成之后点
  • 【蓝桥杯】【嵌入式组别】第十二节:USART串口通讯

    USART串口通讯 USART xff1a 通用同步异步收发器串口发送程序设计 xff1a 如何连续打印helloworld能不能发送中文 xff1f 串口发送printf重定向 串口接收程序设计 xff1a 串口接收固定长度数据 xff1
  • 【蓝桥杯】【嵌入式组别】第十四节:PWM输出编程

    PWM输出编程 PWM输出原理单路PWM信号输出双路PWM信号输出 目的 xff1a 在特定管脚上产生频率和占空比可调的方波信号 比赛我们主要掌握PA6和PA7就可以了 PWM输出原理 CNT 定时器中的计数器 xff0c 配置成1us增加
  • 【蓝桥杯】【省赛真题】

    关于第十一届第一场蓝桥杯中如何判断串口数据的问题的代码如下 xff1a span class token comment USART span u8 rx buf span class token punctuation span span
  • 【2023年第十三届MathorCup高校数学建模挑战赛】思路总结分析

    写在前面的话 我们选择A题 xff0c 分析A题题目可以得知属于一种组合优化模型 xff0c 类似于旅行商问题 xff0c 0 1背包问题等等 该类问题通常采用遗传算法 xff0c 粒子群算法 xff0c 模拟退火算法等算法进行求解 由于本
  • 【博弈论】【第一章】博弈论导论

    博弈论导论 例题 选择数字 例题 巴什博弈 例题 射手博弈博弈论的基本概念 xff1a 参与人战略行动信息支付函数 例题 分100元 课程概述 xff1a 例题 选择数字 两个参与人A和B xff0c 轮流选择 3 4 5 6 7 8 9
  • C++中的const_interator

    当我们做出如下定义时 vector lt ID gt ids vector lt ID gt const iterator iter 并进行了下面的操作 xff0c 则是正确的 for iter 61 ids begin iter 61 i
  • JAVA基本数据类型的字节与位数以及String类型的最大长度

    目录 基本数据类型的字节与位数如下 xff1a String类型的最大长度 基本数据类型的字节与位数如下 xff1a 变量名称 字节 位数byte 1 8short 2 16int 4 32long 8 64float 4 32double
  • arduino、Ms5611与1602实现气压温度高度显示

    项目场景 xff1a arduino Ms5611与1602实现气压温度高度显示 因为项目需求 xff0c 需要测试Ms5611的精度 xff0c 于是利用arduino和LED1602 xff0c 将Ms5611采集的数据采集并实时显示出
  • UART协议详解

    UART简介 通用异步收发传输器 xff08 Universal Asynchronous Receiver Transmitter xff0c 通常称作UART UART通信在工作中相当常见 xff0c 项目中需要生成uart信号 xff
  • vector的capacity新增长方式(dev c++实测)

    vector的capacity 调用返回vector中最大能够存储的元素个数 xff0c 也即在下一次需要扩充容量之前能容纳的元素个数 reserve会使容器在必要的时候增长 xff0c 以便容纳制指定数目的元素 include lt io
  • Android DNS Resolver

    DNS 解析器 xff08 DNS Resolver xff09 DNS 解析器模块可保护用户免受 DNS 拦截和配置更新攻击 xff0c 并改进了 DNS 解析的网络性能 此模块包含用于实现 DNS 桩解析器的代码 xff0c 该解析器可
  • Python量化相关

    量化实例 xff1a 可转债轮动策略 LOF 封基 ETF动量策略 小市值策略 Python xff1a Python 基础教程 菜鸟教程Python 3 教程 菜鸟教程Windows搭建python开发环境 xff0c python入门到
  • Visual Basic相关

    vb教程
  • 三极管和运放构成的几种恒流源电路分析

    如何利用三极管和运放设计一个150mA的恒流源 xff0c 求电路图 xff0c 验证过的 xff01 xff01 xff01 三极管和运放构成的几种恒流源电路分析 还不是太理解 这几种电路都可以在负载电阻RL上获得恒流输出 第一种由于RL
  • AI相关资料整理

    scikit learn中文社区
  • Android开发知识备忘

    Android Studio 上jar包 xff0c aar包 xff0c aidl xff0c aidl打成aar包的正确使用Android AIDL bindService后不能调用onServiceConnected方法 xff08
  • 【C++】struct和class的区别

    在C 43 43 中我们可以看到struct和class的区别并不是很大 xff0c 两者之间有很大的相似性 那么为什么还要保留struct 这是因为C 43 43 是向下兼容的 xff0c 因此C 43 43 中保留了很多C的东西 一 首
  • MPLAB程序中如何设置配置字

    基于MPLAB X IDE配置位设置讲解 在不同的芯片中其配置字不尽相同 xff0c 但是管家最常用到的有如下几部分 xff1a 1 芯片的振荡模式 xff0c 有内外之分 xff0c 还有三个速度的选择 2 xff0c 片内看门狗的启用