Professional Documents
Culture Documents
8-bit PIC
Microcontrollers
in C
Martin Bates
Elsevier 2008
Part 1
MICROCONTROLLER
SYSTEMS
Figure 1.1
User input
Program
download
Input
Peripherals
ROM
Read Only
Memory
CPU
Central
Processing
Unit
Output
Peripherals
User
output
RAM
Read & Write
Memory
Figure 1.2
16F877 pin-out
Figure 1.3
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
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
Table 1.1
Bank 0 (000 07F)
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
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
Figure 1.4
Write TRIS bit
Read data
bit
Data
Direction
Latch
Output
Data
Latch
Tri-state
Output
Enable
Output
Current
Driver
Input
Data
Latch
Analogue input
multiplexer
Figure 1.5
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
Figure 1.6
ADC operation
ANx
Analogue
to Digital
Converter
Reference volts, Vf
Vref+
Setup ADC
Read ADC
8-bit or 16-bit
integer result
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
Interrupt
Parallel
Slave
Port
INTERNAL
Data x 8
Table 1.3
Interrupt Source
TIMERS
Timer 0
INT_TIMER0
Timer 1
INT_TIMER1
CCP 1
INT_CCP1
Timer 2
INT_TIMER2
CCP2
INT_CCP2
PORTS
RB0/INT pin
INT_EXT
Port B pins
INT_RB
INT_PSP
Analog Converter
INT_AD
Analog Comparator
INT_COMP
SERIAL
UART Serial Port
INT_RDA
INT_TBE
INT_SSP
INT_SSP
INT_BUSCOL
MEMORY
EEPROM
INT_EEPROM
Figure 1.9
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
Figure 1.10
HOST PC
PIC MCU
TX1 Transmit
RX1 Receive
Ground
Line
Driver
Interface
+/- 12V
RX2
TX2
COM PORT
Ground
Figure 1.11
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
Figure 1.13
SDO/SDI
SCK
SPI Signals
Data bits
Clock
Figure 1.14
+5V
Master
I2C Connections
Slave1
Slave2
etc
SDA
SCL
Figure 1.15
Start
SDA
I2C Signals
Acknowledge
SCL
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
Listing 1.2
:1000000000308A0004280000840183131F30830518
:1000100083161F149F141F159F1107309C00880121
:08002000FF3083128800630029
:02400E00733FFE
:00000001FF
;PIC16F877A
Figure 1.16
Figure 1.17
Figure 1.18
ICSP
Interface
MCU
Vpp/!MCLR
Vdd
Vss
PGD
PGC
1
2
3
4
5
Vdd
Vss
Board +5V Supply
Figure 1.19
Figure 1.20
Figure 1.21
Host PC
MPLAB
development
system
+ C Compiler
USB
ICD2
interface
6-WAY
connector
PIC MCU
Target
System
Figure 1.22