First Technology Transfer

Standard and Advanced Technical Training, Consultancy and Mentoring

M103 - A Comprehensive Introduction to Embedded C Programming of Microchip 8 bit devices using the XC8 Compiler

Duration: 5 Days

Intended Audience

This course is aimed at engineers with an understanding of microelectronics and programming who intend to create projects using the 'C' language, but who are new to the Microchip 8 bit processor architectures and/or MPLABX and the XC8 'C' compiler. Some prior knowledge of programming is assumed, together with familiarity with code development using an IDE. This is a very intensive course and its contents can be tailored to the requirements and experience of the attendees.


This hands-on course aims to provide engineers with an understanding of the 8 bit PIC microcontrollers and experience of using the MPLABX IDE and the XC8 compiler to create and debug 'C' programs. It aims to provide students with

  • An understanding the architecture and features of the Microchip 8 bit microcontrollers.
  • Hands-on experience of using MPLABX and XC8 to create and debug 'C' programs on Microchip 8 bit PIC microcontrollers.
  • Experience in making driving on-chip peripherals by using existing libraries, or implementing custom libraries.
The course includes many practical workshop exercises which are interleaved with the relevant presentation material for maximum impact and variety. These exercises are carried out using MPLABX and the XC8 C compiler running on a Windows PC, an ICD3 programmer/debugger and a target development board containing a target PIC16 / PIC18 microcontroller on which programs created during the exercises can be observed to be running in real-time. As well as using the XC8 compiler and MPLABX the course introduces Microsoft Visual Studio / Eclipse CDT for developing and testing ANSI C code that does not involve interaction with the processor hardware. The course also cover details of the implementation of fixed tables of data in program memory

Course Outline

  • Overview of Development Tools
    • Microchip development software: MPLABX and associated tools
    • XC8 'C' compiler
    • Microchip In-Circuit Debugger (ICD3) hardware
    • Overview of available development boards
  • The PIC10, PIC12, PIC16 and PIC18 Architectures
    • Harvard versus Von Neumann architecture
    • Organisation of data memory
    • On-chip peripherals
    • In-Circuit Serial Programming (ICSP)
    • Differences between the PIC10,PIC12 , PIC16 and PIC18 processor architectures and instruction sets.
  • The XC8 Compiler
    • Key features and ANSI C extensions to support the 8 bit processor architectures
    • XC8 data types, storage classes and type qualifiers
    • Programming style - use of templates and comments
    • Debugging at 'C' source level using MPLABX and ICD3
    • Inclusion of external source code modules to add functionality to the project
    • Interrupt service routines - how to create interrupt handlers using XC8
  • Developing and testing pure (portable) ANSI C code on the PC
    • Overview of Microsoft Visual Studio and Eclipse CDT as C IDEs
    • Advantages of testing and developing portable code on a PC.
  • Foundations of C programming
    • Basic C data types - characters, integers and floating point numbers.
    • C arithmetic and logical operators
    • Functions and function prototypes and header files
    • if - else and switch statements
    • Arrays and pointers
    • Iteration using for loops, while loops and do - while loops
    • Data structures in C
    • Function pointers
    • Pointers to data structures
    • Data structures containing function pointers
    • Unions and enums
    • Bit level operators and bit level data structures
  • Processor specific C - Manipulating Memory Mapped Microcontroller Registers from within C code
    • How memory mapped registers are associated with variables and data structures
    • Understanding the processor specific C header files
    • Implementing interrupt handler code in C
    • Implementing a custom peripheral library
    • Overview of Microchip supplied peripheral libraries
  • Embedded applications and examples
    • Flashing LEDs and detecting button presses
    • Software vs. timer interrupt driven delays
    • Using ADC to acquire analog sensor data
    • Basic serial communications using RS232
    • Implementing a simple user interface using buttons and a LCD
    • Acquiring data from a simple I2C / SPI sensor
    • Implementing a basic timer interrupt driven scheduler