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
Elements of a digital controller
User input
Input Peripherals
CPU Central Processing Unit
Output Peripherals
User output
Program download
ROM Read Only Memory
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
Flash ROM Program Memory 8192 x 14 bits 0000 1FFF
PIC 16F877 MCU Block diagram
Program Counter (13 bits) Address Stack 13 bits x8 levels
Instructions
RAM File Registers 368 X 8 bits 000-1FF
Instruction Register
File Address Program address
Working (W) Register Arithmetic & Logic Unit File Select Register
Literal Status bits Opcode
Status (Flag) Register
Data Bus (8 bits) EEPROM 256 bytes Ports, Timers ADC, Serial I/O
Instruction Decode & CPU control
MCU control lines
Timing control Clock Reset Port A B C D E
Shows the main parts of the chip in simplified form
Table 1.1
Bank 0 (000 07F) Address 000h 001h 002h Register Indirect Timer0 PC Low
PIC16F877 simplified file register map
Bank 1 (080 0FF) Address 080h 081h 082h Register Indirect Option PC Low Bank 2 (100-180) Address 100h 101h 102h Register Indirect Timer0 PC Low Bank 3(180-1FF) Address 180h 181h 182h Register Indirect Option PC Low
003h
004h 005h 006h 007h 008h 009h 00Ah 00Bh 00Ch to 01Fh 020h to 06Fh 070h to 07Fh
Status Reg
File Select Port A data Port B data Port C data Port D data Port E data PC High Interrupt Control 20 Peripheral Control Registers 80 General Purpose Registers 16 Common Access GPRs
083h
084h 085h 086h 087h 088h 089h 08Ah 08Bh 08Ch to 09Fh 0A0h to 0EFh 0F0h to 0FFh
Status Reg
File Select PortA direction PortB direction PortC direction PortD direction PortE direction PC High Interrupt Control 20 Peripheral Control Registers 80 General Purpose Registers Accesses 70h 7Fh
103h
104h 105h 106h 107h 108h 109h 10Ah 10Bh 10Ch to 10Fh 110h to 16Fh 170h to 17Fh
Status Reg
File Select Port B data PC High Interrupt Control 4 Peripheral Control Registers 96 General Purpose Registers Accesses 70h 7Fh
183h
184h 185h 186h 187h 188h 189h 18Ah 18Bh 18Ch to 18Fh 190h to 1EFh 1F0h to 1FFh
Status Reg
File Select PortB direction PC High Interrupt Control 4 Peripheral Control Registers 96 General Purpose Registers Accesses 70h 7Fh
Table 1.2
Data word (bits)
PIC microcontroller types
Program memory (bytes) Typical Instruction Set
MCU
Pins
Speed MIPS
Comment
10FXXX
=6
<= 512
33 x 12 bits
<= 2
Low pin count, small form factor, cheap No EEPROM, none low power, assembler program
12FXXX
=8
<= 2 KB
12 / 14 bits
<= 5
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
16FXXX
<= 64
<= 14 KB
35 x 14 bits
<= 5
18FXXXX
<= 100
<= 128 KB
75 x 16 bits
<= 16
High range, CAN, USB J series 3V supply, C program
24FXXXX
<= 100
16
<= 128 KB
76 x 24 bits
= 16
Power range, 3V supply, no EEPROM, data RAM < 8 KB, C program
Figure 1.4
I/O pin operation
Write TRIS bit
Data Direction Latch
Tri-state Output Enable Output Current Driver
CPU Data Bus Write data bit
Output Data Latch
Read data bit
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 Capture register
Instruction Clock External Pulse
Clock Source Select
Prescaler (clock divide)
Binary Counter
Post-scaler (output divide)
Timer Overflow/ Timeout (Interrupt) Flag
Compare register
Match flag
A binary counter is used as a timer when driven from the clock
Figure 1.6
ADC operation
Input volts 0-Vf
ANx Analogue to Digital Converter
Setup ADC Read ADC 8-bit or 16-bit integer result
Reference volts, Vf
Vref+
The ADC converts an analog input into a binary code
Figure 1.7
Comparator operation
Vc+ Compartor status bit Vc+ > Vc-
Vc-
The comparator simply sets a bit if one input is higher than the other
Figure 1.8
Parallel Slave Port operation
Chip select Read Write
Interrupt
Parallel Slave Port
EXTERNAL Data x 8
INTERNAL Data x 8
The PSP allows an external data bus to be connected to the MCU
Table 1.3
Interrupt Source Timer 0 Timer 1 CCP 1 Timer 2 CCP2 RB0/INT pin Port B pins Parallel Slave Port Analog Converter Analog Comparator UART Serial Port UART Serial Port SPI Serial Port I2C Serial Port I2C Serial Port EEPROM
Interrupts sources in the PIC 16F877
Interrupt trigger event TIMERS Timer 0 register overflow Timer 1 register overflow Timer 1 capture or compare detected Timer 2 register overflow Timer 2 capture or compare detected PORTS Change on single pin RB0 Change on any of four pins RB4 RB7 Data received at PSP (write input active) A/D conversion completed Voltage compare true SERIAL Received data available Transmit data buffer empty Data transfer completed (read or write) Interface activity detected Bus collision detected MEMORY Non-volatile data memory write complete INT_EEPROM INT_RDA INT_TBE INT_SSP INT_SSP INT_BUSCOL INT_EXT INT_RB INT_PSP INT_AD INT_COMP INT_TIMER0 INT_TIMER1 INT_CCP1 INT_TIMER2 INT_CCP2 CCS C Interrupt label
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
RX2 +/- 12V
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 Idle Start Bit Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Stop Bit
Time
The data bits are timed from the falling edge of the start bit
Figure 1.12
Master Serial Data Out, SDO Serial Data In, SDI Serial Clock, SCK
SPI Connections
Slave 1 SDO SDI SCK !SS Slave Select Outputs SS1 SS2 SS3
Slave 2 SDO SDI SCK !SS
SPI uses hardware slave selection and separate clock
Figure 1.13
SPI Signals
SDO/SDI
Data bits
SCK
Clock
Each data bit is transferred on the falling edge of the clock
Figure 1.14
I2C Connections
+5V
Master
Slave1
Slave2
etc
SDA SCL
Slave selection uses addresses issued by the Master
Figure 1.15
Start SDA
7 6
I2C Signals
Acknowledge
2 1 0
Address / Data bits
5 4 3
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
/* OUTBYTE.C */ #include "16F877A.h" void main() { output_D(255); } MPB 2-1-07
A simple C program
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
MCU
Vpp/!MCLR Vdd Vss PGD PGC
ICSP Interface
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
ICD2 program and debug system
Host PC MPLAB development system + C Compiler
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