Essential PIC Microcontroller: Config Bits Setup Guide

In this tutorial, we will explore Configuration Bits on PIC microcontrollersIntroduction to PIC: Exploring the Basics of Microcontroller ArchitectureIntroduction to PIC: Exploring the Basics of Microcontroller ArchitectureExplore the core principles of PIC microcontroller architecture, including Harvard design, RISC processing, and efficient memory organization.-what they are, why they matter, and how to correctly set them in your project. Configuration Bits (often called fuse bits or simply config bits) are special settings that determine how the microcontroller behaves at startup and during its operation. By adjusting these bits, you gain fine-grained control over essential features of your PIC, such as the clock source, watchdog timerLow-Power Strategies: Maximizing PIC Battery LifeLow-Power Strategies: Maximizing PIC Battery LifeDiscover proven low-power strategies for PIC microcontrollers that maximize battery life through smart oscillator use, sleep modes, and efficient coding., and code protection.

Introduction to Configuration Bits🔗

Every PIC microcontrollerIntroduction to PIC: Exploring the Basics of Microcontroller ArchitectureIntroduction to PIC: Exploring the Basics of Microcontroller ArchitectureExplore the core principles of PIC microcontroller architecture, including Harvard design, RISC processing, and efficient memory organization. has a set of Configuration Bits that you can tweak to match your project requirements. These bits exist in a special section of the device’s memory and are loaded during power-up or reset, configuring the PIC before your application code executes.

Key Benefits of Proper Configuration Bits Setup:

Why Configuration Bits Matter🔗

Imagine building a project that needs to run on a low-power internal oscillator but accidentally using a configuration setup that expects an external crystal. The MCU would fail to operate correctly, or not at all. Correctly defining Configuration Bits helps avoid these pitfalls and gives you confidence in how the microcontroller will behave in the field.

Moreover, configuration settings like watchdog timerLow-Power Strategies: Maximizing PIC Battery LifeLow-Power Strategies: Maximizing PIC Battery LifeDiscover proven low-power strategies for PIC microcontrollers that maximize battery life through smart oscillator use, sleep modes, and efficient coding. or brown-out reset can significantly improve the robustness of your product, reducing malfunctions due to system glitches or undervoltage conditions.

Typical Configuration Options🔗

Although each PIC family (PIC12Understanding PIC Family Variants: PIC12, PIC16, PIC18, and BeyondUnderstanding PIC Family Variants: PIC12, PIC16, PIC18, and BeyondExplore PIC microcontroller families: learn how PIC12’s compact design, PIC16’s balanced features, and PIC18’s robust performance for innovative projects., PIC16, PIC18, etc.) has its unique naming and bit structure, you will commonly find a set of fundamental options:

Configuration BitPurposeTypical Settings
Oscillator SelectionChooses the clock source (internal, external crystal, RC oscillator, etc.).HS, XT, RC, INTOSC, EC, etc.
Watchdog Timer (WDT)Resets the MCU if software hangs beyond a specified timeout.WDTEN = ON/OFF
Power-up Timer (PWRT)Delays CPU operation after power-up for stable supply voltage.PWRTEN = ON/OFF
Brown-out Reset (BOR)Resets the MCU if supply voltage drops below a certain threshold.BOREN = OFF/NSLEEP/SBODEN/etc.
Code ProtectionPrevents external reading or writing of the program.CP = ON/OFF, CPD = ON/OFF
Low-Voltage ProgrammingEnables in-circuit programming with low voltage methods.LVP = ON/OFF
Debug ModeEnables hardware debugging via MPLAB or ICD connectors.DEBUG = ON/OFF

Refer to your specific PIC datasheet for the exact naming and possible values for each bit. Some devices consolidate or split these features differently.

Setting Configuration Bits in MPLAB XC8🔗

When using the C language with the MPLAB XC8 compilerGetting Started with MPLAB X and the XC8 CompilerGetting Started with MPLAB X and the XC8 CompilerSet up MPLAB X IDE and XC8 compiler for PIC programming with our comprehensive guide detailing installation, configuration, and debugging techniques., you typically configure these bits in your source code using compiler directives. Here’s a generalized example for a PIC16 device:

// Example for PIC16F877A (adjust for your specific PIC)
/*
  • File: configBits.c
*/ #pragma config FOSC = HS // High-speed oscillator #pragma config WDTE = OFF // Watchdog Timer Enable bit #pragma config PWRTE = ON // Power-up Timer Enable bit #pragma config BOREN = ON // Brown-out Reset Enable bit #pragma config LVP = OFF // Low-Voltage Programming Disabled #pragma config CPD = OFF // Data Code Protection off #pragma config WRT = OFF // Flash Program Memory Write Enable bits off #pragma config CP = OFF // Flash Program Memory Code Protection off #include <xc.h> void main(void) { // Your application code starts here while(1) { // Main loop } }

When you compile and program this code onto the device, the Configuration Bits will be set as specified by the #pragma config statements.

Tip: Always confirm these settings in the “Configuration Bits” view within MPLAB X to ensure they match what you intend.

Setting Configuration Bits in Assembly🔗

For those working with assembly language, Configuration Bits are typically specified near the start or end of the source file using __CONFIG directives (for older syntax) or similar statements for newer versions. The concept remains the same-defining bitfields that match the device-specific definitions.

; Example for PIC16F877A using MPASM
    list    p=16F877A
    include <p16F877A.inc>
    __CONFIG _CP_OFF & _WRT_OFF & _BODEN_ON & _PWRTE_ON & _WDT_OFF & _HS_OSC & _LVP_OFF
    ; Start of program
    org 0x0000
reset_vector:
    goto main
main:
    ; Application code
    goto $
    end

Just like in C, these lines configure the device at program load time.

Common Use Cases and Considerations🔗

1. Low-Power Applications: If you want to optimize battery life, consider using the internal oscillator and brown-out reset for stable operation in lower voltage ranges. Disable the watchdog timerLow-Power Strategies: Maximizing PIC Battery LifeLow-Power Strategies: Maximizing PIC Battery LifeDiscover proven low-power strategies for PIC microcontrollers that maximize battery life through smart oscillator use, sleep modes, and efficient coding. if not needed, or configure it with a longer timeout.

2. High-Speed Applications: For timing-critical projects, configure the HS oscillator mode (if using an external crystal) or use a larger range crystal. Ensure you have the watchdog timerLow-Power Strategies: Maximizing PIC Battery LifeLow-Power Strategies: Maximizing PIC Battery LifeDiscover proven low-power strategies for PIC microcontrollers that maximize battery life through smart oscillator use, sleep modes, and efficient coding. enabled if reliability is crucial.

3. Debugging vs. Production: You might enable DEBUGDebugging and Troubleshooting Techniques with ICD and MPLAB XDebugging and Troubleshooting Techniques with ICD and MPLAB XMaster real-time PIC microcontroller debugging with MPLAB X and ICD tools. Discover breakpoint setup, variable inspection, and performance techniques. = ON during development so that you can use MPLAB’s debuggingDebugging and Troubleshooting Techniques with ICD and MPLAB XDebugging and Troubleshooting Techniques with ICD and MPLAB XMaster real-time PIC microcontroller debugging with MPLAB X and ICD tools. Discover breakpoint setup, variable inspection, and performance techniques. tools. Remember to switch it off for production to free up certain pin functions and possibly tighten code security.

4. Code Protection: If your firmware contains sensitive intellectual property, enable code protection bits. However, keep in mind that once enabled, you might be unable to read your own code back from the chip. Make sure you have a proper backup of your source code.

Verifying Your Configuration Bits🔗

Device Programming Report

Many programming tools, including the MPLAB X IDEGetting Started with MPLAB X and the XC8 CompilerGetting Started with MPLAB X and the XC8 CompilerSet up MPLAB X IDE and XC8 compiler for PIC programming with our comprehensive guide detailing installation, configuration, and debugging techniques., generate a device programming report after loading your firmware. Check the reported configuration settings to verify they match your intended design.

Reading Back Configuration

For added certainty, you can read back the device’s configuration bytes using the Read feature on your programmer (e.g., PICkit, ICD, or third-party tools) to confirm the bits are set as expected.

Summary and Best Practices🔗

By taking the time to set your configuration bits properly, you enable your PIC microcontrollerIntroduction to PIC: Exploring the Basics of Microcontroller ArchitectureIntroduction to PIC: Exploring the Basics of Microcontroller ArchitectureExplore the core principles of PIC microcontroller architecture, including Harvard design, RISC processing, and efficient memory organization. to run correctly at power-up, manage unexpected conditions gracefully, and ensure that your application is secure and reliable.

Author: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

References🔗

  • Microchip - Documentação oficial e guias de referência para PIC Microcontrollers: www.microchip.com
  • Peatman, John B. - 'Design with PIC Microcontrollers': www.pearson.com

Share article