Transcript Document

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
Input
Peripherals
User
input
Program
download
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
Working (W)
Register
File Select
Register
Arithmetic & Logic
Unit
Status bits
Status (Flag)
Register
Opcode
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
A
B
C
D
E
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
8
<= 512
33 x 12
bits
<= 2
=8
8
<= 2 KB
12 / 14 bits
<= 5
<= 64
8
<= 14 KB
35 x 14
bits
<= 5
18FXXXX
<=
100
8
<= 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
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
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
7
6
SPI Signals
5
4
3
2
1
0
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
I2C Signals
Figure 1.15
Start
SDA
Acknowledge
Address / Data bits
7
6
5
4
3
2
1
0
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
2-1-07
V1.0
*/
#include "16F877A.h"
// MCU select
void main()
{
output_D(255);
}
// 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