Programming PIC16F877A Using CCS C Compiler and US



Why Use C for Embedded Programming?



Portable – code can be retargeted to different processors Clarity – C is easier to understand than assembly Compilers produce code that is close to manually-tweaked assembly language in both code size and performance

From .c to .hex

C Compilers for Embedded Systems
CCS C Compiler HI TECH Compiler

The CCS Compiler has an extensive range of inbuilt functions
→ Save time and speed up the learning process

The HI TECH Compiler is based towards those who are following a company policy specifying the ANSI standard with hardware functions sometimes resembling Assembler more than C

Installing CCS C Compiler IDE
Copy CCS C directory to your hard drive Run pcwhupd.exe (in this directory) Copy the following files to installed directory
: PCM.CRG for 16-bit PIC , PCH.CRG, PCB.CRG

Run Patch.exe file Run Pcw.exe file

Installing US-Burn



Copy USB burn driver directory to your harddrive Plug USB cable (connected to the USB port of SaigonTech PIC Board) to computer USB port Turn on the power switch on the PIC board (see the next slides)

Click the Browse button to select the driver folder

…\USB burn driver

Succefull installation announce

Do the steps 2 and 3 for other USB ports.

A Sample C Program: Blinking 8 LEDs

Program Description
Make LED’s on PORTB blink every second

Cable Wiring
Use a 8 pin ribbon cable to connect PIC’s jumpers B0 – B7 to LEDs’ jumpers L0 – L7

Electronic Circuit

Writing Program in PCW C Compiler IDE

Creating a .c File

Creating a .c File
File name: Blink8LEDs Choose the path Click Save

Editing Blink8LEDs.c

Compiling a C Program

Using US-Burn to Load a .hex File to the PIC

Put 16F877A in the USB Programmer socket (pay attention to the PIC direction on the socket, otherwise you will damage the PIC) Plug the USB cable to the PC and to the PIC board Turn on the power switch of PIC Board Run Usburn14.exe

Microcontroller Setting

Run program on the board

Turn off the power switch on the PIC board Put the programmed PIC in the Run socket on the board (pay attention to the PIC direction on the socket, otherwise you will damage the PIC) Turn on the power switch on the PIC board to see the LEDs blink.


Summary of the Development Process


Look at an Alternative of BlinkLEDs.c

Is this listing better than the previous one? Why?

One of the Most Important Skills in Programming

5/6 Programming pins 8 10-bit A/D channels 2 Oscillator Inputs 2 RS-232 inputs 33 I/O ports 2 PWM channels

The PIC16F877A
PIC: Peripheral Interface Controller

Pin Functions
MCLR – to reset the PIC VDD – power supply VSS – ground OSC1, OSC2 – connect to oscillator The pins having the notation R can all be used as digital inputs or outputs The pins that are labeled as AN can be used as analog inputs The pins CCP1 and CCP2 are used for PWM



Delete NOLVP from #fuses and rerun the program. What is the effect of this action? Instead of using the PORTB, use PORTC to rewrite the example
Try to use NOLVP and without it

Why is NOLVP Needed?
In Single Supply Programming or Low – Voltage Programming mode (using single voltage VDD 5V to programming):
The LVP bit will be set Pin B3 will have PGM function → B3 is cleared

To make RB3 become a normal I/O pin, LVP has to be disabled
#fuses NOLVP

Instead of using the PORTB, use PORTA to rewrite the example

More Details on PORTA
In the PIC16 series Port A is the analog port connected to the analog to digital converters
By default this port is configured as analog ⇒ You will not be able to output or input data reliably on Port A until you configure it as a digital port
Can’t work


PIC 16F877A

How to Make RA4 Work Properly
RA4 is made to be an open-drain output ⇒ A pull-up resistor is needed to make it work VDD properly
Pull-up Resistor

Can’t work
Pin RA4 Pin RA4


Open-drain output

PIC 16F877A

PIC 16F877A

Microcontroller. html Programming PIC Microcontrollers in BASIC. mikroElektronika © 1998 – 2004. ooks/picbasicbook/00.htm#preface =357 PICC. An introduction to programming the Microchip PIC in C. Nigel Gardner. Bluebird Electronics 1998