PIC Microcontroller PDF
PIC Microcontroller PDF
com
PIC Microcontrollers
PIC stands for Peripheral Interface Controller coined by Microchip Technology to identify its single-
chip microcontrollers. These devices have been phenomenally successful in 8-bit microcontroller mar-
ket. The main reason is that Microchip Technology has constantly upgraded the device architecture
and added needed peripherals to the microcontroller to ’suit customers’ requirements. The develop-
ment tools such as assembler and simulator are freely available on the internet at www.microchip.com
Low-end Architectures
Microchip PIC microcontrollers are available in various types. When P IC − M icro MCU first
became available from General Instruments in early 1980’s, the microcontroller consisted of a very
simple processor executing 12-bit wide instructions with basic I/O functions. These devices are known
as low-end architectures.
Some of the low-end device past numbers are
12C5XX, 16C5X, and 16C505
Mid-range Architectures
Mid-range Architectures are built by upgrading low-end architecture with more number of peripherals,
more numbers of register and more data memory. Some of the mid-range devices are
16C6X
16C7X, 16F87X
↑Program memory type
C = EPROM
F = Flash
RC = Mask ROM
Popularity of PIC microcontrollers is due to the following factors-
1. Speed: Harvard Architecture, RISC Architecture
1 instruction Cycle = 4 clock cycles.
For 20 MHz clock, most of the instructions are executed in 0.2µs or five instructions per mi-
crosecond.
2. Instruction Set Simplicity:
The instruction set consists of just 35 instructions (as opposed to 111 instructions for 8051)
3. Power on reset
Power-out reset
Watch-dog timer
Oscillator Options
• low-power Crystal
• Mid-range Crystal
• High-range Crystal
• RC Oscillator
4. Programmable timer options on chip ADC
www.Vidyarthiplus.com
www.Vidyarthiplus.com
8 Special
13
purpose
register
Program
CPU
Memory
+
Fetch of n th
Cycle instruction
from address n
Execution of
Fetch of ( n+1) th
Cycle n th instruction instruction
Execution of
Cycle
(n+2) th instruction
.
.
.
www.Vidyarthiplus.com
www.Vidyarthiplus.com
Fetch of n th
Cycle instruction
from address n
.
.
.
www.Vidyarthiplus.com
www.Vidyarthiplus.com
7F
FF
Extra 64
bytes of RAM
in
PIC 16 C63
RAM 16 C65A
(96 bytes) 16 C73A
16 C74A
C0
BF
RAM
20 (32 bytes)
1F A0
Special purpose 9F
Register Special purpose
(32 bytes) Register
00 80 (32 bytes)
Bank 0
Bank 1
128 bytes
128 bytes
RPO bit in the Status register detects the bank. 7 bit of direct address TRPO determines the absolute
address of the register.
Indirect addressing mode
FSR contains the 8-bit address of the data/register.
CPU Registers
W, the working register, is used by many instructions as the source of an operand. It may also serve
as the destination for the result of the instructions execution. It works as the accumulator.
7 0
W working register
7 6 5 4 3 2 1 0
www.Vidyarthiplus.com
www.Vidyarthiplus.com
7 0
FSR
(address 04H,84H)
Indirect data memory address points.
FSR is the pointer used for indirect addressing.
The program is supported by an eight-level stack. When an interrupt occurs, the program counter
is automatically pushed on to the stack. Since PIC microcontrollers programs are normally designed
for handling one interrupt at a time, further
Program counter
Program 13
8
Memory
14
Instruction
Decoder & Data
Control bus
ALU
W → Temporary holding register, often called as an accumulator, cannot be accessed directly. Instead,
contents must be moved to other registers that can be accessed directly.
www.Vidyarthiplus.com
www.Vidyarthiplus.com
Bank Addressing
Bank 0 Bank 1
00 INDF INDF 80
01 TMRO OPTION 81
02 PCL PCL 82
03 STATUS STATUS 83
04 FSR FSR 84
05 PORTA TRISA 85
06 PORTB TRISB 86
07 PORTC TRISC 87
08 PORTD TRISD 88
09 PORTE TRISE 89
0A PCLATH PCLATH 8A
0B INTCON INTCON 8B
0C .
.
1F .
9F
07F 0FF
EX: To set PORT B bit 0 as an output and loaded with a 1, PIC micro MCU code would exe-
cute as:
Port B. Bit = 1
STATUS. RPO = 1
TRIS B. Bit 0 = 0
STATUS. RPO = 0
PIC 16C74A
Program Memory 4k
(EPROM)×14
Data Memory 192
(Bytes)×8
I/O Pins 33
Parallel slave port Yes
A/D channel 8
Serial Comm SPI/I2 C,
USART
Interrupt sources 12
www.Vidyarthiplus.com
www.Vidyarthiplus.com
Memory Organization
The PIC 16C7X family has a 13-bit program counter capable of addressing 8k×14 program memory.
PIC16C74A has 4k×14 program memory. For those devices with less than 8k program memory,
accessing a location above the physically implemented address will cause a wraparound.
Stack level 1
.
.
.
Stack level 8
www.Vidyarthiplus.com
www.Vidyarthiplus.com
10k Ω
6
PORTB PORTA
+5V 1
8
11 V
+5V DD
0.1 µ F
12 VSS
8
PORTC
32 VDD PIC 16C74A
0.1 µ F 5
VSS
31
2 R
PORTD 1 Y
13 0 G
OSC 1
4 MHz Crystal
OSC 2 3
PORTE
14
22 pF 22 pF
PIC 16C74A has five ports. Each port is a bidirectional I/O port. In addition, they have the following
alternative functions.
I/O pins
Port Alternative uses of I/O pins 64A 62A
65A 63A
74A 73A
Port D alternative function is parallel slave port which enables one PIC microcontroller to be connected
to the data bus of another microprocessor. Since three LED’s are connected to three pins of Port D
to be used as normal I/O operation, the special alternative function is ruled out.
www.Vidyarthiplus.com
www.Vidyarthiplus.com
D Q
TRIS
D Q
PORT
Pin write
Pin read
Data bus
www.Vidyarthiplus.com
www.Vidyarthiplus.com
Ten Ms subroutine introduces a delay of 10ms by counting 10,000 instruction cycles. This is achieved
by nested loops. The sequence of instructions executed from calling Ten Ms is listed and correspond-
ing instruction cycles are mentioned against the instructions.
www.Vidyarthiplus.com
www.Vidyarthiplus.com
Total = 10,000
www.Vidyarthiplus.com
www.Vidyarthiplus.com
1 kΩ
"0"
Low output on SCL or SDA I/O pin set to be an output with ”0” written to it.
+5 V
PIC
1 kΩ
Clock bits
(driven by master)
The clock line, SCL, is driven by the PIC chip, which server as bus master. The open drain feature
of every chip’s bus driver can be used by the receiver to hold the clock line low, there by signalling
the transmitter to pause until the clock line is released by the receiver. The open drain feature is also
needed if this PIC will ever become an I2 C slave to another PIC, in which it must relinquish control
of the SCL line.
The previous figure illustrates that the first eight bits on the SDA line are sent by the transmitter
whereas the ninth bit is the acknowledgment bit which is sent by the receiver in response to the byte
sent by the transmitter. For instance, when the PIC sends out a chip address, it is the transmitter,
www.Vidyarthiplus.com
www.Vidyarthiplus.com
while every other chip on the I2 C bus is a receiver. During the acknowledgment bit time, the addressed
chip is the only one that drives the SDA line, pulling it low in response to the masters pulse on SCL,
acknowledging the reception of its chip address.
When the data transfer direction is reversed that is form a peripheral chip to the PIC, which is the
master , the peripheral chip drives the eight daa bits in response to the clock pulse from PIC. In this
case, the acknowledge bit is driven in a special way by the PIC, which is serving as receive but also
as bus master. If the peripheral chip is one that can send the contents of successive internal address
back to the PIC, then PIC completes the reception of each byte and signals a request for the next
byte by pulling SDA line low in acknowledgment. After any number of bytes have been received by
the master from the peripheral, the PIC can signal the peripheral to stop any further transfers by not
pulling the SDA line low in acknowledgment.
SDA line should be stable during high period of the clock (SCL). When the slave peripheral is driving
SDA line , either as transmiter or acknowledge, it initiates the new bit in response to the falling edge
of SCL, after a specified time. It maintains that bit on SDA line until the next falling edge of SCL,
again afte r a specified hold time.
I2 C bus transfers consist of a number of byte transfers framed between a START condition and either
another START condition or a STOP condition. Both SDA and SCL lines are released by all drives
and float high when bus transfers are not taking place. The PIC (I2 C bus controller) initiates a
transfer with a START condition by first pulling SDA low and then pulling SCL as shown in the
figure.
SDA
SDA
SCL
SCL
Similarly, the PIC terminates a multiple byte transfer with the STOP condition. With both SDA and
SCL initially low, it first releases SCL and then SDA. Both then occurrences are easily recognized by
I2 C hardware in each peripheral chip since they both consist of a chage in SDA line which SCL is
high, a condition that never happens in the middle of a byte transfer.
www.Vidyarthiplus.com
www.Vidyarthiplus.com
The following diagrams give the general format to write and read from several peripheral internal
registers.
START R/ W = 0
condition 7-bit address for write Internal address N, Data to be written
of peripheral chip in peripheral into address N
A A A
C C C
S W K K K
Acknowledge by
peripheral
START R/W = 0 R/ N = 0
condition 7-bit address for write Internal address N, 7-bit address for Read
of peripheral chip in peripheral Data read
of peripheral chip
from address N
A A A
C C C
K K
S W RK
N
O
P
A
C
K
No acknowledgment by PIC
sent out as a signal
to terminate further transfers
The 1995 I2 C bus specification includes the timing constraints for older chips designed for a maximum
bit rate of 100kbits/s. It also includes constraints for newer fast-mode 400kbits/s parts.
www.Vidyarthiplus.com
www.Vidyarthiplus.com
I2 C Bus Subroutines:
I2 C bus fast-mode timing constraints.
STOP START
condition condition
SDA
SCL
t STOP-START
t STOP t START
START
Acknowledge bit
condition
SDA
SCL
t t START t START
LOW
t SETUP
SCL
t SETUP t HOLD
t HIGH t LOW
www.Vidyarthiplus.com
www.Vidyarthiplus.com
I2C Subroutines
Freq equ 4
SDA equ 4
SCL equ 3
cblock
.
.
DEVADD ;The I2Cout subroutine transfers out three bytes:
INTADD
DATAOUT
DATAIN
TXBUFF
RXBUFF
.
.
endc
;DEVADD, INTADD, and DATAOUT
www.Vidyarthiplus.com
www.Vidyarthiplus.com
I2C out :
call start
movf DEVADD, W ; Send peripheral address with R/W̄ =0 (write)
Call Tx
movf INTADD, W
Call Tx
movf DATAOUT, W
Call Tx
Call Stop ; Generate Stop condition
return
; The I2C in subroutine transfers out DEVADD (with R/W̄ =0)
; and INTADD, restarts, transfers out DEVADD (with R/W=1)
; and read one byte back into DATAIN.
I2C in:
Call Start ; Generate start condition
movf DEVADD, W ; Send peripheral address R/W̄ =0 (write)
Call Tx
movf INTADD, W ; Send peripheral’s internal address
Call Tx
Call ReStart ; Re START
movf DEVADD ,W ; Send peripheral’s address.
iorlw 0000000.1 B ; with R/W̄ =1 (read)
Call Tx
bsf TXBUFF, 7 ; NOACK the following reading of one byte
Call Rx ; Read byte
movwf DATAIN ; inte DATAIN
Call stop ; Generate stop condition
return
Start:
movlw 00111011 ; Enable I2C Master mode.
movwf SSPCON
bcf PORTC, SDA ; DRIVE SDA low when it is an output
bcf PORTC, SCL ; DRIVE SCL low when it is an output
movlw TRISC ; Set indirect pointer to TRISC
movwf FSR
ReStart:
bsf INDF, SDA ; Make sure SDA is high - I/P mode
www.Vidyarthiplus.com
www.Vidyarthiplus.com
Stop:
bcf INDF, SDA ; Return SDA low
bsf INDF, SCL ; Drive SCL high
delay 0,1,2
bsf INDF, SDA ; and then drive SDA high
return
Tx:
movwf TXBUFF
bsf STATUS, C
Tx 1:
rlf TXBUFF, F ; rotate TXBUFF left, through carry
movf TXBUFF, F ; Set Z bit when all 8 bits have been transformed
btfss STATUS, Z ; until z = 1
Call Bitout ; Send carry bit then clear carry bit
btfss STATUS, Z
goto TX 1
Call Bit In
movlw 00000001 B
End wf RXBUFF, W ; z = 1 if ACK z = 0 if NOACK
return
Rx:
movlw 00000001 B
movwf RXBUFF
Rx 1:
rlf RXBUFF, F
Call Bit In
btfss STATUS, C
www.Vidyarthiplus.com
www.Vidyarthiplus.com
goto Rx 1
rlf TXBUFF, F
Call BitOut
movf RXBUFF, W
return
; The BitOut subroutine transmits, hthen clears, the carry bit
BitOut:
bcf INDF, SDA ; copy carrybit to SDA
btfsc STATUS, c
bcf INDF, SDA
bsf INDF, SCL ; pulse clockline
delay 0,1,2 ; t: HIGH
bcf INDF, SCL
bcf STATUS, c
return
; The bit In subroutine receives one bit into
; bit 0 of RXBUFF
BitIn:
bsf INDF, SDA
bsf INDF, SCL ; Drive clock line high
bcf RXBUFF, 0 ; copy SDA to bit 0 of RXBUFF
btfsc PORTC, SDA
bsf RXBUFF, 0
bcf INDF, SCL ; Drive clock low again
return
Q
D TRIS
P in
Control write
D PORT
Q
Pin write
Pin read
www.Vidyarthiplus.com
www.Vidyarthiplus.com
An output of 2.5 V will appear on the OUT1 pin by sending the following three bytes
The MAX518 chip includes a power-on reset circuit that drives the two outputs to 0V initially. The
two address inputs, AD1 and Ad0, provide an adjustable part of the chip’s I2 C address. With 5 bits
fixed at 01011 and two adjustable bits, it is possible to connect four MAC518 chips to a PIC.
www.Vidyarthiplus.com
www.Vidyarthiplus.com
7-bit address
First byte of 0 1 0 1 1 0 0 0
message string
Write
AD0
Match
AD1
Second byte 0 0 0 0 0 0
0
1: Select OUT 1
0: Select OUT 0
1: Power-down mode
( 4µA, typical)
0: Normal DAC operation
Third byte
B
Analog output voltage =VDD
256
www.Vidyarthiplus.com
www.Vidyarthiplus.com
LM 75 chip also includes a thermal watch dog that can be setup to interrupt PIC on its RBO/INT
edge-triggered interrupt input when the temperature rises above a programmable, TOS . It also in-
cludes programmable hysteresis so that the temperature must dip down below the setpoints TOS
threshold to a lower THY ST threshold before rising againpast the TOS setpoint to generate another
output edge.
www.Vidyarthiplus.com
www.Vidyarthiplus.com
+5V
+5V
VS 8
1k Ω
1k Ω
0.1 µ F
A2 5
1
SDA SDA
2 A1 6
SCL SCL
3 A0 7
RB0 /INT 0.5
GND
4
Temperature Sensor
LM 75
T OS = 80 o C
T HYST = 75 o C
+5V
O.S.
output 0V
www.Vidyarthiplus.com
www.Vidyarthiplus.com
Register Structure
When a ”write” message string is sent, the first byte selects the chip for a write and the second
byte loads the pointer register. The write message string can stop there or it can continue with a
2-byte write of TOS (Over tem shutdown). Once the pointer has been set, any of their register can be
read, reading two bytes for temperature, TOS , or THY ST or reading just 1 byte for the configuration
register.
Pointer P1 P0
Configuration 0 0 0 0 0 0 0
Temp. b8 b7 b6 b3
b5 b4 b2 b1 b0 X X X X X X X
T OS b8 b7 b6 b5 b4 b3 b2 b1 b0 X X X X X X X
T HYST
www.Vidyarthiplus.com
www.Vidyarthiplus.com
chip to a peripheral chip. In this case of the I2 C mode, the peripheral chip must also include an I2 C
interface. In contrast, the SPI mode provides the clock and serial data lines for direct connection to
shift registers, adding an arbitrary number of I/O pins to a PIC chips.
SSPIF Flag
7 6 5 4 2 1 0
PIR1
SSPBUF
Portc three pins RC5, RC4 and RC3 are used for Synchronous Serial Interface. These pins revert
to their normal general purpose I/O pins if neither of the two SSP modes is selected. The SPI port
requires the RC3/SCK pin to be an output that generates the clock signal used by the external shift
registers. This output line characterizes the SPI’s master mode. In slave mode, RC3/SCK works as
the input for the clock.
When a byte of data is written to SSPBUF register, it is shifted out the SDO pip in synchronism
with the emitted pulses on the SCK pin. The MSB of SSPBUF is the first bit to appear on SDO
pin. Simultaneously, the same write to SSPBUF also initiates the 8-bit data reception into SSPBUF
of whatever appears on SDI pin at the time of rising edges of the clock on SCK pin.
www.Vidyarthiplus.com
www.Vidyarthiplus.com
SSPIF
Write to
SSPBUF
SCK
SDI
SSPIF
Write to
SSPBUF
SCK CKP = 0
Timing with
SD0 positive going
7 6 5 4 3 2 1 0
clock pulse
CKP = 0
SDI
A read or write of one of the PIC’s ports, such as PORTD takes one internal clock cycle to execute.
In contrast, a read or write of an expansion port that is implemented with an SPI-connected octal
shift register is slowed down by an order of magnitude by the eight clock pulses as seen before. If
the SSPIF flag in the PIR1 register is cleared before the SPI transmission is initiated, then it will
be automatically set at the completion of the transfer setting of SSSPIF flag indicated that the
transferred data is in place and ready to be used.
www.Vidyarthiplus.com
www.Vidyarthiplus.com
b0 b1 b2 b3 b4 b5 b6 b7 +5V
16
Vcc
Latch clock
10
SPI
Data in 13
RC5 /SD0 D Q D Q D Q D Q D Q D Q D Q D Q
RC4
Serial Clock
RC3 /SCK Gnd
74HC595
RD7
Port configurations
TRISC X X 0 0 0 X X X
87H
Output for SCK
Gen purpose o/p to drive latch
Output for SDO
TRISD
0 X X X X X X X
85H
;
SSPCON
0 0 1 1 0 0 0 0
14H SPI "master" mode with
SCK = osc / 4
CKP = 1 : SCK will idle high
SSPEN = 1 : Enable Synchronous
Serial Port ( SPI )
PIR1
OCH
SSPBUF
13H
www.Vidyarthiplus.com
www.Vidyarthiplus.com
b0 b7 b6 b5 b4 b3 b2 b1
PIC
RD7
Load
SPI Data out Data in
RC4 /SDI
74HC165 Shift register
serial clock
RC3 /SCK
MSB first
RD7
SSPIF
Write to
SSBUF to
initiate transfer
SDI
bit 0 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
SPI reads
input bit here
Read SSPBUF
Timing diagram
www.Vidyarthiplus.com
www.Vidyarthiplus.com
Port configurations
TRISC X 1 1 0 X X
X X
87H
Output for SCK
Input for SDI
General purpose input
(to preempt SD0 o/p)
TRISD
0 X 1 1 0 X X X
88H
SSPCON 0 0 1 0 0 0 0
0
14H
SPI "master" with SCK = ocs /4
CKP = 0 : SK0 will idle low
SSPEN = 1 : enable
Synchronous Serial Port ( SPI )
Analog-to-Digital Converter
Features (16C7X)
• An analog multiplexer
• A track and hold circuit for signal on the selected input channel
• 8-bit conversion
www.Vidyarthiplus.com
www.Vidyarthiplus.com
FF
FE
Digital
FD
output
04
03
02
01
00
0 1 2 3 253 254 255
256 256 256 256 256 256
input/ voltage / VREF
Port A and Port E pins are used for analog inputs/ Reference voltage for ADC.
Port A pins
RA0/AN0 - Can be used as analog input-0
RA1/AN1 - Can be used as analog input-1
RA2/AN2 - Can be used as analog input-2
RA3/AN3/VREF - RA3 can be used as analog input 3 or analog reference voltage
RA4/TOCKI - RA4 can be used as clock input to Timer-0
RA5/SS/AN4 - RA5 can be used as analog input 4 or the slave select for the sync serial port
Port E pins
RE0/RD/AN5 - Can be used as analog input 5
RE1/W R/AN6 - Can be used as analog input 6
RE2/CS/AN7 - Can be used as analog input 7
PIC microcontroller has internal sample and hold circuit. The input signal should be stable across
the capacitor before the conversion is initiated
Sampling
Other analog
switch
input cahnnels
Switch
PIC
resistance
Analog
multiplexer
R SOURCE VHOLD
VSOURCE to ADC
~
C HOLD
≈ 50 pF
www.Vidyarthiplus.com
www.Vidyarthiplus.com
After waiting out the sampling time, a conversion can be initiated. The ADC circuit will open the
sampling switch and carry out the conversion of the input voltage as it was at the moment of opening
of the switch. Upon completion of the conversion, the sampling switch is closed and VHOLD again
tracks VSOU RCE .
The ADCONO register as shown here, controls the operation of A/D module.
7 6 5 4 3 2 1 0
bit 7 - 6
ADCS1 : ADCS 0
00 = Fosc /2
01 = Fosc /8
10 = Fosc /32
11 = FRC (clock derived from an internal RC oscillator)
bit 5 - 3
CHS2: CHS0
000 - channel 0 - AN0
001 - channel 1 - AN1
010 - channel 2 - AN2
011 - channel 3 - AN3
100 - channel 4 - AN4
101 - channel 5 - AN5
110 - channel 6 - AN6
111 - channel 7 - AN7
www.Vidyarthiplus.com
www.Vidyarthiplus.com
bit 1
Unimplemented
ADCON1 Register
bit 7 bit 0
PCFG2 PCFG1 PCFG0
Analog I/P
1: Digital I
0: Digital 0
1 : D/A I
0 : Digital 0
TRISE
0 0 0 0
1: Analog / Digital
input
0:: Digital output
Disable Port E
alternate function
www.Vidyarthiplus.com
www.Vidyarthiplus.com
4. Start conversion
• Set GO/DON E
Example Program
www.Vidyarthiplus.com
www.Vidyarthiplus.com
1. Any write to PCL register load the content of PCL to lower 8 bit of PC and content of PCLATH
to higher 5 bits.
;
mov wf PCL
12 PCH 8 7 PCL 0 Instruction with
PCL as a
PC
destination
5
PCLATH <4 : 0> 8
ALU
PCLATH
0 ≤ k ≤ 2047
Operation:
k → P C < 10 : 0 >
P CLAT H < 4 : 3 >→ P C < 12 : 11 >
Goto is an unconditional branch. The eleven bit immediate value is loaded into PC bits < 10 : 0 >.
The upper bits of PC are loaded from PCLATH < 4 : 3 >.
;;;
;
PCH PCL
12 11 10 9 8 7 0
Goto , Call
PC Instruction
PCLATH
STACK
The PIC16CXX family has an 8 level deep X 13-bit wide hardware stack. The stack space is not
part of either program or data memory and the stack pointer is not readable or writable. The PC
is pushed onto the stack when a CALL instruction is executed or an interrupt causes a branch. The
www.Vidyarthiplus.com
www.Vidyarthiplus.com
stack os POPed in the event of a RETURN, RETLW or a RETIE instruction execution. PCLATH
is not affected by a PUSH or a POP operation. The stack operates on a circular buffer.
Paging:
Following any reset PCL and PCLATH are cleared to 0. For a 4k .... program memory, the address
range is from 0000H to 0FFFH. Hence each call and goto instruction will actually reach the desired
address only if bit 3 of PCLATH is set or cleared correctly. However even for 4k PIC controllers, there
is no need to take care of PCLATH bit 3, if the code size fits into 2k address space. Bit 3 of PCLATH
will come out of reset in the zero state and there will never be a need to change it. Consequently,
every call and goto instruction will go to the correct place.
For large programs, it is helpful to break out blocks of code that are reached by a single call instruction
and that terminates in a single return instruction. Such a block of code can be placed on program
memory’s page 1. Then, before executing the call instruction to reach the block, the following in-
struction can be executed.
bsf PCLATH, 3 ; Switch to program memory’s Page 1.
When it is finally time to exit from the block to return to the mainline program in Page 0, the return
instruction is preceded by the instruction
bcf PCLATH, 3
Page 0 Page 1
Hex address Hex address
000 800
. bcf PCLATH , 3
. return
bsf PCLATH , 3
Call Block 2
.
7FF . FFF
www.Vidyarthiplus.com
www.Vidyarthiplus.com
1. fosc /4
1: Prescaler assigned to
PSA watchdog timer
0: Prescaler assigned to
Timer 0
TMRO 01H
8-bit counter 2-cycle delay f_osc / 4
Interrupt
CPU .
INTCON 1 1
0BH, 8BH
www.Vidyarthiplus.com
www.Vidyarthiplus.com
Prescaler .......
0 0 0 2
0 0 1 4
0 1 0 8
0 1 1 16
1 0 0 32
1 0 1 64
1 1 0 128
1 1 1 256
www.Vidyarthiplus.com
www.Vidyarthiplus.com
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
External clock
Input or Prescaler
output
External clock/
Prescaler output
after sampling
Increment
Timer0 ( Q4 )
Timer 0
Timer-1 Module
The Timer1 module is a 16-bit timer/counter consisting of two 8-bit registers (TMR1H and TMR1L)
which are readable and writable. The TMR1 register pair (TMR1H: TMR1L) increments from 0000H
to FFFFH and rolls over to 0000H. The TMR1 interrupt, if enabled, is generated on overflow which
sets the interrupt flag bit TMR1IF-(PIR< 0 >). This interrupt can be enabled/disabled by set-
ting/clearing TMR1 interrupt enable bit TMR1IE-(PIE < 0 >)
The operating and control modes of Timer 1 is determined by the special purpose register T1CON.
T1CON (10H)
www.Vidyarthiplus.com
www.Vidyarthiplus.com
bit 7 0 bit 0
Timer 1 ON bit
0 = Stops Timer 1
Timer 1 Input clock Prescale
1= Enables Timer 1
select bits
11 = 1:8 Prescale value
10 = 1:4 Prescale value Timer 1 clock source select bit
01 = 1:2 Prescale value 1 = External clock ( RCO /TIOSCO /T1CK1
00 = 1:2 Prescale value 0 = Internal clock ( f_ocs / 4)
With TMR1CS = 1
Oscillator enable control bit
1 = Donot synchrinize
1 = oscillator is enabled
0 = Synchronize
0 = oscillator is shut off
With TMR1CS = 0
This bit is ignored.
TMR1H TMR1L
1
TMR1 ON
on / off
T1SYNC
RCO /T1OSC /T1CK7
1
Prescaler
Synchronize
1,2,4,8
T1OSCEN
Enable 0
oscillator f osc /4
Internal SLEEP input
RC1 / T1OSI / CCP2 T1CKPS1 : T1CKPS0
clock
TMR1CS
• As a timer. (TMR1CS = 0)
In timer mode, Timer 1 increments in every instruction cycle. The Timer 1 clock source is
fosc /4. Since the internal clock is selected, the timer is always synchronized and there is no
further need of synchronization.
• As a counter (TMR1CS = 1)
www.Vidyarthiplus.com
www.Vidyarthiplus.com
In counter mode, external clock input from the pin RCO/T1OSC/T1CKI is selected.
Use of Timer-2
Timer 0: 8-bit timer/counter with 8-bit prescalar
Timer 1: 16-bit timer/counter with prescalar, can be incremented during sleep
via external crystal/clock.
Timer 2: 8-bit timer/counter with 8-bit period register, prescalar, post scalar.
Timer 2 Circuitry
8
equal
compensator
PR2 PR2 : Period Register
8
Set
TMR2IF
Peripheral bits 7 6 5 4 3 2 1 0
Interrupt Register PIR1
0CH
Interrupt
CPU
TMR2IE
GIE PEIE
bits 7 6 5 4 3 2 1 0
INTCON
1 1 PIE 1
0BH / 8BH
8CH
Timer 2 is an 8-bit timer with a prescalar and a port sclar. It can be used on the PWM mode
of CCP modules. The TMR2 register is readable and writable and is cleared on any device reset.
The input clock (fosc /4) has a prescalar option of 1:1, 1:4 or 1:16 selected by bits 0 and 1 of T2CON
register.
The timer 2 module has a 8-bit period register (PR2). timer 2 increments from 00H until it matches
PR2 and then resets to 00H on the next increment cycle. PR2 is a readable and a writable register.
PR2 is initialized to FFH on reset.
The output of TMR2 goes through a 4-bit post scalar (1:1, 1:2 to 1:16) to generate a TMR2 interrupt
by setting TMR2IF flag.
www.Vidyarthiplus.com
www.Vidyarthiplus.com
bits 7 6 5 4 3 2 1 0
T2CON
12H
Prescaler
00 C = 1
01 C = 4
1x C = 16
0 Disable TMR 2
1 Enable TMR 2
Post Scale
0000 A = 1
0001 A = 2
.
.
1110 A = 15
1111 A = 16
CCP overview
The CCP module(s) can operate in one of the three modes: 16-bit capture, 16-bit compare, or upto
1-bit Pulse Width Modulation (PWM).
Capture mode captures the 16-bit value of TMR1 into CCPRxH: CCPRxL register pair. The capture
event can be programmed for either the falling edge, rising edge, fourth rising edge, or the sixteenth
rising edge of the CCPx pair.
Compare mode compares the TMR1H: TMR1L register pair to the CCPRxH: CCPRxL register pair.
When a match occurs an interrupt can be generated, and the output pin CCPx can be forced to given
state (High or Low), TMR1 can be reset (CCP1) or TMR1 reset and start A/D conversion (CCP2).
This depends on the control bits < CCPxM3 : CCPxM0>
PWM mode compares the TMR2 register to a 10 bit duty cycle register (CCPRxH : CCPRxL<5:4>)
as well as an 8-bit period register (PR2). When the TMR2 register= Duty cycle register, the CCPx
pin will be forcred low. When TMR2=PR2, TM2 is cleared to 00H, an interrupt can be generated,
and the CCPx pin, if programmed in the O/P mode, will be forced high.
Compare Mode
Timer 1 is a 16-bit counter which can be used with CCP (Capture/compare/PWM) module to drive
a pin high or low at precisely controlled time, independent of what the CPU is doing at that time.
The pins are Port-C RC1/CCP2 and RC2/CCP1 pins.
Which Timer1 includes a prescalar to divide the internal clock by 1,2,4 or 8, the choice of divide-by-
one gives the finest resolution in setting the time of an output edge.
www.Vidyarthiplus.com
www.Vidyarthiplus.com
Capture/Compare/PWM modules
Each CCP (Capture/compare/PWM) module contains a 16-bit register which can operate as a 16-bit
capture register, as a 16-bit compare register or as a PWM master/slave duty cycle register. Both
CCP1 and CCP2 are identical in operation, with the exception of the operation of the special event
trigger.
The following shows the CCP mode timer resources.
CCP1 Module:
Capture/Compare/PWM Register 1 consists of two 8-bit register: CCPR1L (low byte) and CCPR2H
(high byte). THe CCP1CON register controls the operation of CCP1. All are readable and writable.
CCP2 Module:
Capture/Compare/PWM Register 2 consists of two 8-bit registers: CCPR2L (low byte) and CCPR2H
(high byte). The CCP2CON register controls the operation of CCP2. Al are readable and writable.
bit 7 bit 0
CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1 CCPxM0
TMR1H TMR1L
www.Vidyarthiplus.com
www.Vidyarthiplus.com
Compare Mode
Set flag bit CCP1IF
Special
PIR 1 < 2 >
event trigger
Q S
Output Comparator
Logic match
R
PWM Mode
In Pulse WIdth Modulation (PWM) mode, the CCPx pin produced upto a 10-bit resolution PWM
output. Since CCP1 pin is multiplexed with PORT C data latch, the TRISC < 2 > pin must be
cleared to make CCP1 pin an output.
Simplified PWM Block Diagram
CCP1CON < 5 : 4 >
CCPR1L
CCPR1H (slave)
Comparator
R Q
RC2 / CCP1
TMR2 S
Comparator
Clear Timer
CCP1 pin and
latch D.C.
PR2
PWM Output
www.Vidyarthiplus.com
www.Vidyarthiplus.com
Period
Duty cycle
A PWM output as ashown has a time period. The time for which the output stays high is called duty
cycle.
PWM Period
The PWM period is specified by writing to PR2 register. The PWM period can be calculated using
the following formula:
• TMR2 is cleared
PWM Mode
www.Vidyarthiplus.com
www.Vidyarthiplus.com
TMR 2 Q - counter
8 - bit 2 - bits
f osc
ten bit counter
Prescaler
TMR 2 Q - counter
Upper two bits Lower two bits
8 - bit 2 - bits 2 - bits 2 - bits
into CCPR1H until a match between PR2 and TMR2 occurs. In PWM mode, CCPR1H is a read-only
register.
The CCPR1H register and a 2-bit internal latch are used to double buffer the PWM duty cycle. This
double buffering is essential for glitchless PWM operation. When the CCPR1H and 2-bit latch match
TMR2 concatenated with an internal 2-bit Q clock or 2-bits of prescalar, the CCP1 pin is cleared.
Maximum PWM resolution (bits) for a given PWM frequency can be calculated as
log( fPfosc
NM
)
log2
If the PWM duty cycle is longer than the PWM period, then the CCP1 pin will not be cleared.
www.Vidyarthiplus.com
www.Vidyarthiplus.com
Duty cycle resolution 10-bit counter scale PR2 value Prescalar 1 Prescalar 4 Prescalar 16
10 bit 1024 255 19.53 KHz 4.88 kHz 1.22 kHz
≈ 10 bit 1000 249 20kHz 5kHz 1.25kHz
8 bit 256 63 78.125kHz 19.53kHz 4.88kHz
6 bit 64 15 312.5kHz 78.125kHz 19.53kHz
Interrupt Logic
GIE TOIE
TOIF
INTE
INTF RBO / INT
RBIE
RBIF
PEIE
TMR2IE
TMR2IF
PSPIE
PSPIF
ADIE
ADIF
RCIE
RCIF
TXIE Peripheral
TXIF Interrupts
SSPIE
SSPIF
CCP1IE
CCP1IF
CCP2IE
CCP2IF
TMR1IE
TMR1IF
Four of PORTB’s pins RB7 : RB4 have an interrupt on change feature. Only pins configured on
inputs can cause this interrupt to occur. The input pins (of RB7 : RB4) are compared with the old
values on the last read of Port B. the ”mismatch” outputs of RB7 : RB4 are used together to generate
the RB port change interrupt flag bit RB1F.
www.Vidyarthiplus.com