Panel Cookies
PIC Microcontroller Programming
5 months ago | Blogs | by: ELECTRONOOBS


PIC Microcontroller Programming: A Comprehensive Guide

Introduction

Microcontrollers are the brains of countless electronic devices, and the PIC (Programmable Intelligent Computer) microcontroller family is one of the most popular choices for both hobbyists and professionals. Developed by Microchip Technology, PIC microcontrollers are known for their versatility, ease of use, and robustness. This article will provide a comprehensive guide to PIC microcontroller programming, covering everything from the basics to more advanced topics.


What is a PIC Microcontroller?

A PIC microcontroller is a small, self-contained computer on a single integrated circuit. It includes a processor core, memory (both RAM and ROM), and input/output (I/O) peripherals. PIC microcontrollers are designed to be embedded in other devices to control specific functions. They are used in a wide range of applications, from simple consumer electronics to complex industrial systems.

Key Features of PIC Microcontrollers

•Low Power Consumption: Ideal for battery-operated devices.

•Wide Range of Memory Sizes: Options from a few KB to several MB.

•Multiple I/O Options: Support for various communication protocols like SPI, I2C, and UART.

•Programmable in Multiple Languages: Primarily programmed in Assembly and C, but other languages are also supported.

Getting Started with PIC Programming

Hardware Requirements

To start programming a PIC microcontroller, you will need the following hardware:

•PIC Microcontroller: Choose a model based on your project requirements.

•Programmer: A device to transfer your code from the computer to the microcontroller. Examples include the PICkit 3 and MPLAB ICD 3.

•Development Board: Optional but recommended for beginners. It provides a convenient platform to experiment with the microcontroller.

•Power Supply: Typically 5V for most PIC microcontrollers.

•Breadboard and Jumper Wires: For connecting components.

Software Requirements

•MPLAB X IDE: The official integrated development environment (IDE) for PIC microcontrollers. It supports code writing, debugging, and programming.

•Compiler: The MPLAB XC8, XC16, or XC32 compiler, depending on the PIC model.

•Drivers: Ensure your computer has the necessary drivers for the programmer.

Writing Your First PIC Program

Setting Up MPLAB X IDE

1.Download and Install MPLAB X IDE: Available for free from the Microchip website.

2.Create a New Project: Select the appropriate PIC microcontroller model.

3.Configure the Project: Set the compiler, programmer, and other settings.

Writing a Simple Program

Here’s a basic example to blink an LED using a PIC microcontroller. This example assumes you are using a PIC16F877A microcontroller.

cCopy

#include <xc.h>

// Configuration bits#pragma config FOSC = HS    // Oscillator Selection bits (HS oscillator)#pragma config WDTE = OFF   // Watchdog Timer Enable bit (WDT disabled)#pragma config PWRTE = OFF  // Power-up Timer Enable bit (PWRT disabled)#pragma config BOREN = ON   // Brown-out Reset Enable bit (BOR enabled)#pragma config LVP = OFF    // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)#pragma config CPD = OFF    // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)#pragma config WRT = OFF    // Flash Program Memory Write Enable bits (Write protection off)#pragma config CP = OFF     // Code Protection bit (Code protection off)

#define _XTAL_FREQ 20000000 // Define the oscillator frequency

void main() {

    TRISB0 = 0; // Set RB0 as output

    while(1) {

        RB0 = 1; // Turn on the LED

        __delay_ms(500); // Delay for 500ms

        RB0 = 0; // Turn off the LED

        __delay_ms(500); // Delay for 500ms

    }}

 

Explanation of the Code

•Configuration Bits: These are used to configure the microcontroller’s hardware settings.

•TRIS Register: This register is used to set the direction of the I/O pins. TRISB0 = 0 sets RB0 as an output.

•RB0: This is the pin connected to the LED.

•__delay_ms(): This function provides a delay in milliseconds.

Compiling and Programming

1.Compile the Code: Click the “Make” button in MPLAB X IDE.

2.Program the Microcontroller: Connect the programmer to the microcontroller and click the “Program” button.

Advanced PIC Programming Topics

Interrupts

Interrupts allow the microcontroller to respond to events asynchronously. For example, you can use an interrupt to handle button presses without constantly polling the button state.

cCopy

#include <xc.h>

#pragma config FOSC = HS#pragma config WDTE = OFF#pragma config PWRTE = OFF#pragma config BOREN = ON#pragma config LVP = OFF#pragma config CPD = OFF#pragma config WRT = OFF#pragma config CP = OFF

#define _XTAL_FREQ 20000000

void interrupt ISR(void) {

    if (RBIF) { // Check if RB interrupt occurred

        RBIF = 0; // Clear the interrupt flag

        RB0 = ~RB0; // Toggle the LED

    }}

void main() {

    TRISB0 = 0; // Set RB0 as output

    TRISB = 0xFF; // Set all RB pins as input

    RBIE = 1; // Enable RB interrupt

    GIE = 1; // Enable global interrupts

    while(1) {

        // Main loop does nothing

    }}

 

Timers

Timers are essential for tasks that require precise timing, such as generating PWM signals or measuring time intervals.

cCopy

#include <xc.h>

#pragma config FOSC = HS#pragma config WDTE = OFF#pragma config PWRTE = OFF#pragma config BOREN = ON#pragma config LVP = OFF#pragma config CPD = OFF#pragma config WRT = OFF#pragma config CP = OFF

#define _XTAL_FREQ 20000000

void Timer0_Init() {

    T0CS = 0; // Select internal clock

    PSA = 0; // Assign prescaler to Timer0

    PS0 = 1; // Prescaler value

    PS1 = 1;

    PS2 = 1;

    T0IE = 1; // Enable Timer0 interrupt

    GIE = 1; // Enable global interrupts

    T0IF = 0; // Clear Timer0 interrupt flag

    TMR0 = 0; // Clear Timer0 register

    T0ON = 1; // Start Timer0}

void interrupt ISR(void) {

    if (T0IF) { // Check if Timer0 interrupt occurred

        T0IF = 0; // Clear the interrupt flag

        RB0 = ~RB0; // Toggle the LED

    }}

void main() {

    TRISB0 = 0; // Set RB0 as output

    Timer0_Init(); // Initialize Timer0

    while(1) {

        // Main loop does nothing

    }}

 

Serial Communication

Serial communication is used to send and receive data between the microcontroller and other devices. Common protocols include UART, SPI, and I2C.

UART Example

cCopy

#include <xc.h>

#pragma config FOSC = HS#pragma config WDTE = OFF#pragma config PWRTE = OFF#pragma config BOREN = ON#pragma config LVP = OFF#pragma config CPD = OFF#pragma config WRT = OFF#pragma config CP = OFF

#define _XTAL_FREQ 20000000

void UART_Init() {

    SPBRG = 256 - (_XTAL_FREQ / (16 * 9600)); // Baud rate calculation

    TXSTA = 0x20; // Enable transmitter

    RCSTA = 0x90; // Enable receiver and continuous receive}

void UART_Write(unsigned char data) {

    while (!TXIF); // Wait for transmitter to be ready

    TXREG = data; // Send data}

unsigned char UART_Read() {

    while (!RCIF); // Wait for data to be received

    return RCREG; // Return received data}

void main() {

    UART_Init(); // Initialize UART

    while(1) {

        UART_Write('A'); // Send 'A'

        __delay_ms(1000); // Delay for 1 second

    }}

 

Debugging PIC Programs

Debugging is an essential part of the development process. MPLAB X IDE provides powerful debugging tools, including breakpoints, watch windows, and single-step execution.

Common Debugging Techniques

•Breakpoints: Pause the program at specific lines of code.

•Watch Windows: Monitor the values of variables and registers.

•Single-Step Execution: Execute the program one instruction at a time.

Conclusion

PIC microcontrollers are versatile and powerful devices that can be used in a wide range of applications. With the right hardware and software tools, you can start programming PIC microcontrollers and creating your own projects. Whether you are a beginner or an experienced developer, the PIC microcontroller family offers something for everyone. Happy coding!

Related Articles

Types of Microcontroller Boards and Their Uses





5 months ago | Blogs | by: ELECTRONOOBS











Last tutorials

ESP32 WiFi Walkie Talkie with ESP-NOW and I2S Microphone
3D Printed Headphones with PLANAR PCB
FOC control with Arduino + magnetic encoder feedback
Laser Power Meter DIY PCB
All about Arduino PWM frequencies

ADVERTISERS



Affiliate Disclosure

ADVERTISERS

ELECFREAKS shop







Curso Arduino Online nivel Intermedio