You are on page 1of 30

Programming

8-bit PIC
Microcontrollers
in C
Martin Bates
Elsevier 2008

This presentation contains illustrations from the book


Programming 8-bit PIC Microcontrollers in C
Part 1 Microcontroller Systems
describes in detail the internal architecture and interfaces
available in the PIC 16F887A, a typical PIC chip, as well as
outlining the main features of the development system
Part 2 C Programming Essentials
provides simple example programs for the microcontroller
which show the basic principles of C programming,
and interfacing to basic I/O devices
Part 3 C Peripheral Interfaces
provides example programs for operating PIC chips with a
full range of peripherals, using timers and interrupts

Part 1

MICROCONTROLLER
SYSTEMS

Figure 1.1

User input

Program
download

Input
Peripherals

ROM
Read Only
Memory

Elements of a digital controller

CPU
Central
Processing
Unit

Output
Peripherals

User
output

RAM
Read & Write
Memory

The microcontroller contains all these elements in one chip

Figure 1.2

16F877 pin-out

The microcontroller pins have multiple functions

Figure 1.3

PIC 16F877 MCU Block diagram


Flash
ROM
Program
Memory
8192
x 14 bits

Program Counter
(13 bits)
Address
Stack
13 bits
x8
levels

0000 1FFF
Instructions

RAM
File
Registers
368
X 8 bits
000-1FF

Instruction Register

File Address
Program address

Literal
Status bits
Opcode

Working (W)
Register

File Select
Register

Arithmetic & Logic


Unit
Status (Flag)
Register

Instruction
Decode &
CPU control

Data Bus
(8 bits)
EEPROM
256 bytes

MCU
control
lines

Ports, Timers
ADC, Serial I/O

Timing control
Clock

Reset
Port

Shows the main parts of the chip in simplified form

Table 1.1
Bank 0 (000 07F)

PIC16F877 simplified file register map


Bank 1 (080 0FF)

Bank 2 (100-180)

Bank 3(180-1FF)

Address

Register

Address

Register

Address

Register

Address

Register

000h

Indirect

080h

Indirect

100h

Indirect

180h

Indirect

001h

Timer0

081h

Option

101h

Timer0

181h

Option

002h

PC Low

082h

PC Low

102h

PC Low

182h

PC Low

003h

Status Reg

083h

Status Reg

103h

Status Reg

183h

Status Reg

004h

File Select

084h

File Select

104h

File Select

184h

File Select

005h

Port A data

085h

PortA direction

105h

185h

006h

Port B data

086h

PortB direction

106h

Port B data

186h

PortB direction

007h

Port C data

087h

PortC direction

107h

187h

008h

Port D data

088h

PortD direction

108h

188h

009h

Port E data

089h

PortE direction

109h

189h

00Ah

PC High

08Ah

PC High

10Ah

PC High

18Ah

PC High

00Bh

Interrupt Control

08Bh

Interrupt Control

10Bh

Interrupt Control

18Bh

Interrupt Control

00Ch
to
01Fh

20 Peripheral
Control
Registers

08Ch
to
09Fh

20 Peripheral
Control
Registers

020h
to
06Fh
070h
to
07Fh

80 General
Purpose
Registers
16 Common
Access GPRs

0A0h
to
0EFh
0F0h
to
0FFh

80 General
Purpose
Registers
Accesses
70h 7Fh

10Ch
to
10Fh
110h
to
16Fh

4 Peripheral
Control
Registers
96 General
Purpose
Registers

18Ch
to
18Fh
190h
to
1EFh

4 Peripheral
Control
Registers
96 General
Purpose
Registers

170h
to
17Fh

Accesses
70h 7Fh

1F0h
to
1FFh

Accesses
70h 7Fh

Table 1.2

PIC microcontroller types


Data
word
(bits)

Program
memory
(bytes)

Typical
Instruction
Set

Speed
MIPS

=6

<= 512

33 x 12
bits

<= 2

=8

<= 2 KB

12 / 14 bits

<= 5

<= 64

<= 14 KB

35 x 14
bits

<= 5

18FXXXX

<=
100

<= 128
KB

75 x 16
bits

<= 16

24FXXXX

<=
100

16

<= 128
KB

MCU

10FXXX

12FXXX

16FXXX

Pins

76 x 24
bits

= 16

Comment

Low pin count, small form factor,


cheap
No EEPROM, none low power,
assembler program
Low pin count, small form factor,
cheap
EEPROM, 10-bit ADC, some low
power, assembler
Mid-range, UART, I2C, SPI
many low power, C or assembler
program
High range, CAN, USB
J series 3V supply, C program
Power range, 3V supply, no
EEPROM,
data RAM < 8 KB, C program

Figure 1.4
Write TRIS bit

CPU Data Bus


Write data bit

Read data
bit

I/O pin operation

Data
Direction
Latch

Output
Data
Latch

Tri-state
Output
Enable
Output
Current
Driver

Input
Data
Latch

Analogue input
multiplexer

The pin can be set for input or output data transfer

Figure 1.5

General Timer Operation


Capture
signal

Instruction
Clock
External Pulse

Clock
Source
Select

Prescaler
(clock
divide)

Capture
register

Binary Counter

Compare
register

Post-scaler
(output
divide)

Timer
Overflow/
Timeout
(Interrupt)
Flag

Match flag

A binary counter is used as a timer when driven from the clock

Figure 1.6

Input volts 0-Vf

ADC operation

ANx
Analogue
to Digital
Converter

Reference volts, Vf

Vref+

Setup ADC
Read ADC
8-bit or 16-bit
integer result

The ADC converts an analog input into a binary code

Figure 1.7

Comparator operation

Vc+

Vc-

Compartor
status bit
Vc+ > Vc-

The comparator simply sets a bit if one input is higher than the other

Figure 1.8

Chip select
Read
Write

EXTERNAL
Data x 8

Parallel Slave Port operation

Interrupt
Parallel
Slave
Port
INTERNAL
Data x 8

The PSP allows an external data bus to be connected to the MCU

Table 1.3
Interrupt Source

Interrupts sources in the PIC 16F877


Interrupt trigger event

CCS C Interrupt label

TIMERS
Timer 0

Timer 0 register overflow

INT_TIMER0

Timer 1

Timer 1 register overflow

INT_TIMER1

CCP 1

Timer 1 capture or compare detected

INT_CCP1

Timer 2

Timer 2 register overflow

INT_TIMER2

CCP2

Timer 2 capture or compare detected

INT_CCP2

PORTS
RB0/INT pin

Change on single pin RB0

INT_EXT

Port B pins

Change on any of four pins RB4 RB7

INT_RB

Parallel Slave Port

Data received at PSP (write input active)

INT_PSP

Analog Converter

A/D conversion completed

INT_AD

Analog Comparator

Voltage compare true

INT_COMP

SERIAL
UART Serial Port

Received data available

INT_RDA

UART Serial Port

Transmit data buffer empty

INT_TBE

SPI Serial Port

Data transfer completed (read or write)

INT_SSP

I2C Serial Port

Interface activity detected

INT_SSP

I2C Serial Port

Bus collision detected

INT_BUSCOL

MEMORY
EEPROM

Non-volatile data memory write complete

INT_EEPROM

Figure 1.9

Timer Interrupt Process


Program Execution

1
Start counter
statement

2
Run
Counter
until
overflow

Program Execution
3
Timeout
Interrupt
4
Jump to
ISR
7
Continue
5
Time-out
Process
(Interrupt
Service
Routine)

6
Return
from
Interrupt

Time-out forces the program to be suspended and the ISR executed

Figure 1.10

USART RS232 Signal

HOST PC
PIC MCU
TX1 Transmit
RX1 Receive
Ground

Line
Driver
Interface

+/- 12V

RX2
TX2
COM PORT
Ground

Line drivers convert the signal to a bipolar, higher voltage

Figure 1.11

Typical USART RS232 signal

Bit period
1
0

Time
Idle

Start
Bit

Bit
0

Bit
1

Bit
2

Bit
3

Bit
4

Bit
5

Bit
6

Bit
7

Stop
Bit

The data bits are timed from the falling edge of the start bit

Figure 1.12

SPI Connections

Master
Serial Data Out, SDO
Serial Data In, SDI
Serial Clock, SCK
Slave 1

Slave Select
Outputs

Slave 2

SDO
SDI
SCK

SDO
SDI
SCK

!SS

!SS

SS1
SS2
SS3

SPI uses hardware slave selection and separate clock

Figure 1.13

SDO/SDI

SCK

SPI Signals

Data bits

Clock

Each data bit is transferred on the falling edge of the clock

Figure 1.14
+5V

Master

I2C Connections
Slave1

Slave2

etc

SDA
SCL

Slave selection uses addresses issued by the Master

Figure 1.15
Start
SDA

I2C Signals
Acknowledge

Address / Data bits


7

SCL

Data is strobed in using the master clock, and reception


is acknowledged by the slave by taking the data line low

Listing 1.1

A simple C program

/*
OUTBYTE.C

MPB

*/

#include "16F877A.h"

void main()
{
output_D(255);
}

2-1-07

V1.0
// MCU select
// Main block
// Switch on outputs

This minimal program outputs a binary code to Port D

Listing 1.2

Program hex file

:1000000000308A0004280000840183131F30830518
:1000100083161F149F141F159F1107309C00880121
:08002000FF3083128800630029
:02400E00733FFE
:00000001FF
;PIC16F877A

The machine code is downloaded as a binary file to the chip

Figure 1.16

Screenshot of MPLAB Project

The C program is compiled and tested in simulation mode

Figure 1.17

PICkit2 demo system hardware

Basic hardware for downloading the program to a test board

Figure 1.18

ICSP target board connections


Application Board
Reset
10k

ICSP
Interface

MCU
Vpp/!MCLR
Vdd
Vss
PGD
PGC

1
2
3
4
5
Vdd
Vss
Board +5V Supply

Connections to the target chip for programming

Figure 1.19

PICkit2 programmer dialogue

On-screen window for program downloading to target chip

Figure 1.20

Microchip ICD2 module

ICD2 provides in-circuit debugging

Figure 1.21
Host PC
MPLAB
development
system
+ C Compiler

ICD2 program and debug system

USB

ICD2
interface

6-WAY
connector

PIC MCU
Target
System

Block diagram of the ICD2 programming and in-circuit debugging system

Figure 1.22

ICD debugging windows

User interface for in-circuit programming & debugging

You might also like