Professional Documents
Culture Documents
PIC18CXX2: High-Performance Microcontrollers With 10-Bit A/D
PIC18CXX2: High-Performance Microcontrollers With 10-Bit A/D
PIC18C4X2
Device RAM RE0/RD/AN5 8 33 RB0/INT0
EPROM # Single Word RE1/WR/AN6 9 32 VDD
(bytes) Instructions (bytes) 10 31 VSS
RE2/CS/AN7
VDD 11 30 RD7/PSP7
PIC18C242 16K 8192 512 VSS 12 29 RD6/PSP6
PIC18C252 32K 16384 1536 OSC1/CLKI 13 28 RD5/PSP5
OSC2/CLKO/RA6 14 27 RD4/PSP4
PIC18C442 16K 8192 512 RC0/T1OSO/T1CKI 15 26 RC7/RX/DT
PIC18C452 32K 16384 1536 RC1/T1OSI/CCP2* 16 25 RC6/TX/CK
RC2/CCP1 17 24 RC5/SDO
• Up to 10 MIPs operation:
* - DC - 40 MHz osc./clock input
RC3/SCK/SCL
RD0/PSP0
18
19
23
22
RC4/SDI/SDA
RD3/PSP3
- 4 MHz - 10 MHz osc./clock input with PLL active RD1/PSP1 20 21 RD2/PSP2
• 16-bit wide instructions, 8-bit wide data path * RB3 is the alternate pin for the CCP2 pin multiplexing.
• Priority levels for interrupts NOTE: Pin compatible with 40-pin PIC16C7X devices
• 8 x 8 Single Cycle Hardware Multiplier
* Peripheral Features: Analog Features:
• 10-bit Analog-to-Digital Converter module (A/D)
• High current sink/source 25 mA/25 mA with:
• Three external interrupt pins - Fast sampling rate
• Timer0 module: 8-bit/16-bit timer/counter with - Conversion available during sleep
8-bit programmable prescaler - DNL = ±1 LSb, INL = ±1 LSb
• Timer1 module: 16-bit timer/counter • Programmable Low-Voltage Detection (LVD)
module
• Timer2 module: 8-bit timer/counter with 8-bit
- Supports interrupt on low voltage detection
period register (time-base for PWM)
• Programmable Brown-out Reset (BOR)
• Timer3 module: 16-bit timer/counter
* • Secondary oscillator clock option - Timer1/Timer3 Special Microcontroller Features:
• Two Capture/Compare/PWM (CCP) modules. CCP • Power-on Reset (POR), Power-up Timer (PWRT)
pins that can be configured as: and Oscillator Start-up Timer (OST)
- Capture input: capture is 16-bit, • Watchdog Timer (WDT) with its own on-chip RC
max. resolution 6.25 ns (TCY/16) oscillator for reliable operation
- Compare is 16-bit, max. resolution 100 ns (TCY) • Programmable code-protection
- PWM output: PWM resolution is 1- to 10-bit. • Power saving SLEEP mode
Max. PWM freq. @:8-bit resolution = 156 kHz • Selectable oscillator options including:
10-bit resolution = 39 kHz - 4X Phase Lock Loop (of primary oscillator)
• Master Synchronous Serial Port (MSSP) module. - Secondary Oscillator (32 kHz) clock input
Two modes of operation: • In-Circuit Serial Programming (ICSP™) via two pins
- 3-wire SPI™ (supports all 4 SPI modes) CMOS Technology:
- I2C™ master and slave mode
• Low-power, high-speed EPROM technology
• Addressable USART module:
• Fully static design
- Supports interrupt on Address bit • Wide operating voltage range (2.5V to 5.5V)
• Parallel Slave Port (PSP) module • Industrial and Extended temperature ranges
• Low-power consumption
RA3/AN3/VREF+
RA2/AN2/VREF-
MCLR/VPP
PLCC
RA1/AN1
RA0/AN0
RB7
RB6
RB5
RB4
NC
NC
6
5
4
3
2
1
44
43
42
41
40
RA4/T0CKI 7 39 RB3/CCP2*
RA5/AN4/SS/LVDIN 8 38 RB2/INT2
RE0/RD/AN5 9 37 RB1/INT1
RE1/WR/AN6 10 36 RB0/INT0
RE2/CS/AN7 11 35 VDD
VDD 12 PIC18C4X2 34 VSS
VSS 13 33 RD7/PSP7
OSC1/CLKI 14 32 RD6/PSP6
OSC2/CLKO/RA6 15 31 RD5/PSP5
RC0/T1OSO/T1CKI 16 30 RD4/PSP4
NC 171 29 RC7/RX/DT
19
20
21
22
23
24
25
26
27
28
8
RC1/T1OSI/CCP2*
RC2/CCP1
RC3/SCK/SCL
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
NC
RC1/T1OSI/CCP2*
RC3/SCK/SCL
RC4/SDI/SDA
RC6/TX/CK
RC2/CCP1
RD3/PSP3
RD2/PSP2
RD1/PSP1
RD0/PSP0
RC5/SDO
NC
TQFP
44
43
42
41
40
39
38
37
36
35
34
RC7/RX/DT 1 33 NC
RD4/PSP4 2 32 RC0/T1OSO/T1CKI
RD5/PSP5 3 31 OSC2/CLKO/RA6
RD6/PSP6 4 30 OSC1/CLKI
RD7/PSP7 5 29 VSS
VSS 6
PIC18C4X2 28 VDD
VDD 7 27 RE2/AN7/CS
RB0/INT0 8 26 RE1/AN6/WR
RB1/INT1 9 25 RE0/AN5/RD
RB2/INT2 10 24 RA5/AN4/SS/LVDIN
RB3/CCP2* 11 23 RA4/T0CKI
12
13
14
15
16
17
18
19
20
21
22
NC
NC
RB4
RB5
RB6
RB7
MCLR/VPP
RA0/AN0
RA1/AN1
RA2/AN2/VREF-
RA3/AN3/VREF+
PIC18C4X2
RE0/RD/AN5 8 33 RB0/INT0
RE1/WR/AN6 9 32 VDD
RE2/CS/AN7 10 31 VSS
VDD 11 30 RD7/PSP7
VSS 12 29 RD6/PSP6
OSC1/CLKI 13 28 RD5/PSP5
OSC2/CLKO/RA6 14 27 RD4/PSP4
RC0/T1OSO/T1CKI 15 26 RC7/RX/DT
RC1/T1OSI/CCP2* 16 25 RC6/TX/CK
RC2/CCP1 17 24 RC5/SDO
RC3/SCK/SCL 18 23 RC4/SDI/SDA
RD0/PSP0 19 22 RD3/PSP3
RD1/PSP1 20 21 RD2/PSP2
DIP, SOIC, JW
MCLR/VPP 1 28 RB7
RA0/AN0 2 27 RB6
RA1/AN1 3 26 RB5
RA2/AN2/VREF- 4 25 RB4
RA3/AN3/VREF+ 5 24 RB3/CCP2*
PIC18C2X2
RA4/T0CKI 6 23 RB2/INT2
RA5/AN4/SS/LVDIN 7 22 RB1/INT1
VSS 8 21 RB0/INT0
OSC1/CLKI 9 20 VDD
OSC2/CLKO/RA6 10 19 VSS
RC0/T1OSO/T1CKI 11 18 RC7/RX/DT
RC1/T1OSI/CCP2* 12 17 RC6/TX/CK
RC2/CCP1 13 16 RC5/SDO
RC3/SCK/SCL 14 15 RC4/SDI/SDA
PORTA
Table Pointer <2> Data Latch
21 RA0/AN0
8 8 8 Data RAM RA1/AN1
21 inc/dec logic RA2/AN2/VREF-
RA3/AN3/VREF+
21 Address Latch RA4/T0CKI
20 PCLATU PCLATH (2) RA5/AN4/SS/LVDIN
Address Latch 12
RA6
Program Memory Address<12>
(up to 2M Bytes) PCU PCH PCL
Program Counter 4 12 4
Data Latch BSR FSR0 Bank0, F
16 inc/dec
Decode logic
TABLELATCH
8
ROMLATCH PORTB
RB0/INT0
Instruction RB1/INT1
Register RB2/INT2
RB3/CCP2(1)
8
Instruction RB7:RB4
Decode &
Control PRODH PRODL
OSC2/CLKO
OSC1/CLKI 3
Power-up 8 x 8 Multiply
Timer 8
Master Addressable
CCP1 CCP2 Synchronous USART
Serial Port
Note 1: Optional multiplexing of CCP2 input/output with RB3 is enabled by selection of configuration bit.
2: The high order bits of the Direct Address for the RAM are from the BSR register (except for the MOVFF
instruction).
3: Many of the general purpose I/O pins are multiplexed with one or more peripheral module functions. The
multiplexing combinations are device dependent.
8
ROMLATCH PORTC
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2(1)
Instruction RC2/CCP1
Register RC3/SCK/SCL
RC4/SDI/SDA
8 RC5/SDO
Instruction
Decode & RC6/TX/CK
Control RC7/RX/DT
PRODH PRODL
OSC2/CLKO
OSC1/CLKI 3
8 x 8 Multiply
Power-up
8 PORTD
Timer
T1OSI Timing Oscillator BIT OP WREG
T1OSO Generation Start-up Timer 8
8 8
Power-on RD7/PSP7:RD0/PSP0
Reset 8
4X PLL Watchdog
Timer ALU<8>
Precision Brown-out 8
Voltage Reset PORTE
Reference
RE0/AN5/RD
RE1/AN6/WR
MCLR VDD, VSS
RE2/AN7/CS
Master
Synchronous Addressable
CCP1 CCP2 Parallel Slave Port
USART
Serial Port
Note 1: Optional multiplexing of CCP2 input/output with RB3 is enabled by selection of configuration bit.
2: The high order bits of the Direct Address for the RAM are from the BSR register (except for the MOVFF
instruction).
3: Many of the general purpose I/O pins are multiplexed with one or more peripheral module functions.
The multiplexing combinations are device dependent.
OSC2 Phase
Comparator
FIN Loop
VCO
Crystal Filter
Osc
FOUT SYSCLK
MUX
OSC1 Divide by 4
PIC18CXXX
Main Oscillator
OSC2
Tosc/4
Sleep 4 x PLL
TOSC TSCLK
MUX
OSC1
Timer1 Oscillator
TT1P
T1OSO
T1OSCEN
Enable Clock
T1OSI Oscillator Source
The system clock source switching is performed under Note: The Timer1 oscillator must be enabled to
software control. The system clock switch bit, SCS switch the system clock source. The
(OSCCON<0>) controls the clock switching. When the Timer1 oscillator is enabled by setting the
SCS bit is ’0’, the system clock source comes from the T1OSCEN bit in the Timer1 control register
main oscillator that is selected by the FOSC configura- (T1CON). If the Timer1 oscillator is not
tion bits in Configuration Register1H. When the SCS enabled, then any write to the SCS bit will
bit is set, the system clock source will come from the be ignored (SCS bit forced cleared) and
Timer1 oscillator. The SCS bit is cleared on all forms the main oscillator will continue to be the
of reset. system clock source.
Legend
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
FIGURE 2-8: TIMING DIAGRAM FOR TRANSITION FROM OSC1 TO TIMER1 OSCILLATOR
Q1 Q2 Q3 Q4 Q1 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1
TT1P
T1OSI 1 2 3 4 5 6 7 8
Tscs
OSC1
TOSC
Internal
System TDLY
Clock
SCS
(OSCCON<0>)
Program PC PC + 2 PC + 4
Counter
Note 1: Delay on internal system clock is eight oscillator cycles for synchronization.
The sequence of events that takes place when switch- If the main oscillator is configured for an external crys-
ing from the Timer1 oscillator to the main oscillator will tal (HS, XT, LP), then the transition will take place after
depend on the mode of the main oscillator. In addition an oscillator startup time (TOST) has occurred. A timing
to eight clock cycles of the main oscillator, additional diagram indicating the transition from the Timer1 oscil-
delays may take place. lator to the main oscillator for HS, XT and LP modes is
shown in Figure 2-9.
FIGURE 2-9: TIMING FOR TRANSITION BETWEEN TIMER1 AND OSC1 (HS,XT,LP)
Q3 Q4 Q1 Q1 Q2 Q3 Q4 Q1 Q2 Q3
TT1P
T1OSI
OSC1 1 2 3 4 5 6 7 8
TOST TSCS
OSC2
TOSC
Internal System
Clock
SCS
(OSCCON<0>)
Program Counter PC PC + 2 PC + 6
FIGURE 2-10: TIMING FOR TRANSITION BETWEEN TIMER1 AND OSC1 (HS WITH PLL)
Q4 Q1 TT1P Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
T1OSI
OSC1
TOST
TPLL
OSC2
TOSC TSCS
PLL Clock
1 2 3 4 5 6 7 8
Input
Internal System
Clock
SCS
(OSCCON<0>)
Program Counter PC PC + 2 PC + 4
If the main oscillator is configured in the RC, RCIO, EC ing the transition from the Timer1 oscillator to the main
or ECIO modes, there is no oscillator startup timeout. oscillator for RC, RCIO, EC and ECIO modes is shown
Operation will resume after eight cycles of the main in Figure 2-11.
oscillator have been counted. A timing diagram indicat-
FIGURE 2-11: TIMING FOR TRANSITION BETWEEN TIMER1 AND OSC1 (RC, EC)
Q3 Q4 Q1 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
TT1P
T1OSI TOSC
OSC1 1 2 3 4 5 6 7 8
OSC2
Internal System
Clock
SCS
(OSCCON<0>)
TSCS
Program Counter PC PC + 2 PC + 4
2.8 Power-up Delays With the PLL enabled (HS/PLL oscillator mode), the
time-out sequence following a power-on reset is differ-
Power up delays are controlled by two timers, so that no ent from other oscillator modes. The time-out sequence
external reset circuitry is required for most applications. is as follows: First the PWRT time-out is invoked after a
The delays ensure that the device is kept in RESET POR time delay has expired. Then the Oscillator Start-
until the device power supply and clock are stable. For up Timer (OST) is invoked. However, this is still not a
additional information on RESET operation, see the sufficient amount of time to allow the PLL to lock at high
“Reset” section. frequencies. The PWRT timer is used to provide an
The first timer is the Power-up Timer (PWRT), which additional fixed 2ms (nominal) time-out to allow the PLL
optionally provides a fixed delay of 72 ms (nominal) on ample time to lock to the incoming clock frequency.
power-up only (POR and BOR). The second timer is
the Oscillator Start-up Timer OST, intended to keep the
chip in RESET until the crystal oscillator is stable.
External Reset
MCLR
SLEEP
WDT WDT
Module Time-out
Reset
VDD rise
detect
Power-on Reset
VDD
Brown-out
Reset S
BOREN
OST/PWRT
OST
Chip_Reset
10-bit Ripple counter R Q
OSC1
PWRT
On-chip
RC OSC(1) 10-bit Ripple counter
Enable PWRT
Enable OST(2)
Note 1: This is a separate oscillator from the RC oscillator of the CLKIN pin.
2: See Table 3-1 for time-out situations.
HS with PLL enabled (1) 72 ms + 1024Tosc + 2ms 1024Tosc + 2 ms 72 ms + 1024Tosc + 2ms 1024Tosc + 2 ms
HS, XT, LP 72 ms + 1024Tosc 1024Tosc 72 ms + 1024Tosc 1024Tosc
EC 72 ms — 72 ms —
External RC 72 ms — 72 ms —
Note 1: 2 ms = Nominal time required for the 4x PLL to lock.
2: 72 ms is the nominal power-up timer delay
TABLE 3-2: STATUS BITS, THEIR SIGNIFICANCE AND THE INITIALIZATION CONDITION FOR
RCON REGISTER
Program RCON
Condition Counter Register RI TO PD POR BOR STKFUL STKUNF
Power-on Reset 0000h 00-1 1100 1 1 1 0 0 u u
MCLR Reset during normal 0000h 00-u uuuu u u u u u u u
operation
Software Reset during normal 0000h 0u-0 uuuu 0 u u u u u u
operation
Stack Full Reset during normal 0000h 0u-u uu11 u u u u u u 1
operation
Stack Underflow Reset during 0000h 0u-u uu11 u u u u u 1 u
normal operation
MCLR Reset during SLEEP 0000h 00-u 10uu u 1 0 u u u u
WDT Reset 0000h 0u-u 01uu 1 0 1 u u u u
WDT Wake-up PC + 2 uu-u 00uu u 0 0 u u u u
Brown-out Reset 0000h 0u-1 11u0 1 1 1 1 0 u u
Interrupt wake-up from SLEEP PC + 2(1) uu-u 00uu u 1 0 u u u u
Legend: u = unchanged, x = unknown, — = unimplemented bit read as '0'.
Note 1: When the wake-up is due to an interrupt and the GIEH or GIEL bits are set, the PC is loaded with the
interrupt vector (0x000008h or 0x000018h).
VDD
MCLR
INTERNAL POR
TPWRT
OST TIME-OUT
INTERNAL RESET
FIGURE 3-4: TIME-OUT SEQUENCE ON POWER-UP (MCLR NOT TIED TO VDD): CASE 1
VDD
MCLR
INTERNAL POR
TPWRT
OST TIME-OUT
INTERNAL RESET
FIGURE 3-5: TIME-OUT SEQUENCE ON POWER-UP (MCLR NOT TIED TO VDD): CASE 2
VDD
MCLR
INTERNAL POR
TPWRT
OST TIME-OUT
INTERNAL RESET
MCLR
INTERNAL POR
TPWRT
PWRT TIME-OUT
TOST
OST TIME-OUT
INTERNAL RESET
FIGURE 3-7: TIME-OUT SEQUENCE ON POR W/ PLL ENABLED (MCLR TIED TO VDD)
VDD
MCLR
IINTERNAL POR
TPWRT
PLL TIME-OUT
INTERNAL RESET
High Priority Interrupt Vector 0008h High Priority Interrupt Vector 0008h
Low Priority Interrupt Vector 0018h Low Priority Interrupt Vector 0018h
On-chip
Program Memory
3FFFh
4000h
On-chip
User Memory Space
7FFFh
Read ’0’ 8000h
Read ’0’
1FFFFFh 1FFFFFh
200000h 200000h
Note 1: Bit 7 and Bit 6 can only be cleared in user software or by a POR.
Since the Top-of-Stack (TOS) is readable and writable, These resets are enabled by programming the
the ability to push values onto the stack and pull values STVREN configuration bit. When the STVREN bit is
off the stack without disturbing normal program execu- disabled, a full or underflow condition will set the appro-
tion is a desirable option. To push the current PC value priate STKFUL or STKUNF bit, but not cause a device
onto the stack, a PUSH instruction can be executed. reset. When the STVREN bit is enabled, a full or under-
This will increment the stack pointer and load the cur- flow will set the appropriate STKFUL or STKUNF bit
rent PC value onto the stack. TOSU, TOSH and TOSL and then cause a device reset. The STKFUL or
can then be modified to place a return address on the STKUNF bits are only cleared by the user software or
stack. a POR reset.
The ability to pull the TOS value off of the stack and
replace it with the value that was previously pushed
onto the stack, without disturbing normal execution, is
achieved by using the POP instruction. The POP instruc-
tion discards the current TOS by decrementing the
stack pointer. The previous value pushed onto the
stack then becomes the TOS value.
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
OSC1
Q1
Q2 Internal
phase
Q3 clock
Q4
PC PC PC+2 PC+4
OSC2/CLKOUT
(RC mode)
Fetch INST (PC)
Execute INST (PC-2) Fetch INST (PC+2)
Execute INST (PC) Fetch INST (PC+4)
Execute INST (PC+2)
All instructions are single cycle, except for any program branches. These take two cycles since the fetch
instruction is “flushed” from the pipeline while the new instruction is being fetched and then executed.
4.7 Instructions in Program Memory boundaries, the data contained in the instruction is a
word address. The word address is written to
The program memory is addressed in bytes. Instruc- PC<20:1>, which accesses the desired byte address
tions are stored as two bytes or four bytes in program in program memory. Instruction #2 in Figure 4-5
memory. The least significant byte of an instruction shows how the instruction "GOTO 000006h’ is
word is always stored in a program memory location encoded in the program memory. Program branch
with an even address (LSB = ’0’). Figure 4-5 shows an instructions which encode a relative address offset
example of how instruction words are stored in the pro- operate in the same manner. The offset value stored
gram memory. To maintain alignment with instruction in a branch instruction represents the number of sin-
boundaries, the PC increments in steps of 2 and the gle word instructions that the PC will be offset by.
LSB will always read ’0’. (See Section 4.4) Section 19.0 provides further details of the instruction
The CALL and GOTO instructions have an absolute set.
program memory address embedded into the instruc-
tion. Since instructions are always stored on word
Word Address
LSB = 1 LSB = 0 ↓
Program Memory 000000h
Byte Locations → 000002h
000004h
000006h
Instruction 1: MOVLW 055h 0Fh 55h 000008h
Instruction 2: GOTO 000006h EFh 03h 00000Ah
F0h 00h 00000Ch
Instruction 3: MOVFF 123h, 456h C1h 23h 00000Eh
F4h 56h 000010h
000012h
000014h
CASE 2:
Object code Source Code
0110 0110 0000 0000 TSTFSZ REG1 ; is RAM location 0?
1100 0001 0010 0011 MOVFF REG1, REG2 ; Yes
1111 0100 0101 0110 ; 2nd operand becomes NOP
0010 0100 0000 0000 ADDWF REG3 ; continue code
Look-up tables are implemented two ways. These are: A better method of storing data in program memory
allows 2 bytes of data to be stored in each instruction
• Computed GOTO
location.
• Table Reads
Lookup table data may be stored 2 bytes per program
4.8.1 COMPUTED GOTO word by using table reads and writes. The table pointer
(TBLPTR) specifies the byte address and the table
A computed GOTO is accomplished by adding an offset
latch (TABLAT) contains the data that is read from or
to the program counter (ADDWF PCL).
written to program memory. Data is transferred to/from
A lookup table can be formed with an ADDWF PCL program memory one byte at a time.
instruction and a group of RETLW 0xnn instructions.
A description of the Table Read/Table Write operation
WREG is loaded with an offset into the table before
is shown in Section 5.0.
executing a call to that table. The first instruction of the
called routine is the ADDWF PCL instruction. The next
instruction executed will be one of the RETLW 0xnn
instructions that returns the value 0xnn to the calling
function.
The offset value (value in WREG) specifies the number
of bytes that the program counter should advance.
In this method, only one data byte may be stored in
each instruction location and room on the return
address stack is required.
The data memory is implemented as static RAM. Each The Special Function Registers (SFRs) are registers
register in the data memory has a 12-bit address, used by the CPU and Peripheral Modules for controlling
allowing up to 4096 bytes of data memory. Figure 4-6 the desired operation of the device. These registers are
and Figure 4-7 show the data memory organization for implemented as static RAM. A list of these registers is
the PIC18CXX2 devices. given in Table 4-1 and Table 4-2.
Banking is required to allow more than 256 bytes to be The SFRs can be classified into two sets; those asso-
accessed. The data memory map is divided into as ciated with the “core” function and those related to the
many as 16 banks that contain 256 bytes each. The peripheral functions. Those registers related to the
lower 4 bits of the Bank Select Register (BSR<3:0>) “core” are described in this section, while those related
select which bank will be accessed. The upper 4 bits to the operation of the peripheral features are
for the BSR are not implemented. described in the section of that peripheral feature.
The data memory contains Special Function Registers The SFRs are typically distributed among the peripher-
(SFR) and General Purpose Registers (GPR). The als whose functions they control.
SFRs are used for control and status of the controller The unused SFR locations will be unimplemented and
and peripheral functions, while GPRs are used for data read as '0's. See Table 4-1 for addresses for the SFRs.
storage and scratch pad operations in the user’s appli-
cation. The SFRs start at the last location of Bank 15
(OxFFF) and grow downwards. Any remaining space
beyond the SFRs in the Bank may be implemented as
GPRs. GPRs start at the first location of Bank 0 and
grow upwards. Any read of an unimplemented location
will read as ’0’s.
The entire data memory may be accessed directly or
indirectly. Direct addressing may require the use of the
BSR register. Indirect addressing requires the use of
the File Select Register (FSR). Each FSR holds a 12-
bit address value that can be used to access any loca-
tion in the Data Memory map without banking.
The instruction set and architecture allow operations
across all banks. This may be accomplished by indirect
addressing or by the use of the MOVFF instruction.
The MOVFF instruction is a two word/two cycle instruc-
tion that moves a value from one register to another.
To ensure that commonly used registers (SFRs and
select GPRs) can be accessed in a single cycle regard-
less of the current BSR values, an Access Bank is
implemented. A segment of Bank 0 and a segment of
Bank 15 comprise the Access RAM. Section 4.10 pro-
vides a detailed description of the Access RAM.
Access Bank
00h
Access RAM low 7Fh
= 0010b 80h
Bank 2 Access RAM high FFh
Unused (SFR’s)
= 1110b to Read ’00h’
Bank 14
When a = 0,
the BSR is ignored and the
Access Bank is used.
The first 128 bytes are
General Purpose RAM
(from Bank 0).
The second 128 bytes are
EFFh Special Function Registers
00h F00h (from Bank 15).
= 1111b Unused F7Fh
Bank 15
SFR F80h
FFh FFFh
When a = 1,
the BSR is used to specify
the RAM location that the
instruction uses.
When a = 0,
= 0110b
Bank 6 Unused the BSR is ignored and the
= 1110b to Read ’00h’ Access Bank is used.
Bank 14 The first 128 bytes are
General Purpose RAM
(from Bank 0).
The second 128 bytes are
EFFh Special Function Registers
00h F00h (from Bank 15).
= 1111b Unused F7Fh
Bank 15
SFR F80h
FFh FFFh
When a = 1,
the BSR is used to specify
the RAM location that the
instruction uses.
Value on
Value on
all other
Filename Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR,
resets
BOR
(note 3)
TOSU — — — Top-of-Stack upper Byte (TOS<20:16>) ---0 0000 ---0 0000
TOSH Top-of-Stack High Byte (TOS<15:8>) 0000 0000 0000 0000
TOSL Top-of-Stack Low Byte (TOS<7:0>) 0000 0000 0000 0000
STKPTR STKFUL STKUNF — Return Stack Pointer 00-0 0000 00-0 0000
PCLATU — — — Holding Register for PC<20:16> ---0 0000 ---0 0000
PCLATH Holding Register for PC<15:8> 0000 0000 0000 0000
PCL PC Low Byte (PC<7:0>) 0000 0000 0000 0000
TBLPTRU — — (2)
bit21 Program Memory Table Pointer Upper Byte (TBLPTR<20:16>) ---0 0000 ---0 0000
TBLPTRH Program Memory Table Pointer High Byte (TBLPTR<15:8>) 0000 0000 0000 0000
TBLPTRL Program Memory Table Pointer Low Byte (TBLPTR<7:0>) 0000 0000 0000 0000
TABLAT Program Memory Table Latch 0000 0000 0000 0000
PRODH Product Register High Byte xxxx xxxx uuuu uuuu
PRODL Product Register Low Byte xxxx xxxx uuuu uuuu
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 0000 000u
INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 — TMR0IP — RBIP 1111 -1-1 1111 -1-1
INTCON3 INT2IP INT1IP — INT2IE INT1IE — INT2IF INT1IF 11-0 0-00 11-0 0-00
INDF0 Uses contents of FSR0 to address data memory - value of FSR0 not changed (not a physical register) n/a n/a
POSTINC0 Uses contents of FSR0 to address data memory - value of FSR0 post-incremented (not a physical register) n/a n/a
POSTDEC0 Uses contents of FSR0 to address data memory - value of FSR0 post-decremented (not a physical register) n/a n/a
PREINC0 Uses contents of FSR0 to address data memory - value of FSR0 pre-incremented (not a physical register) n/a n/a
PLUSW0 Uses contents of FSR0 to address data memory - value of FSR0 pre-incremented (not a physical register) - n/a n/a
value of FSR0 offset by value in WREG
FSR0H — — — — Indirect Data Memory Address Pointer 0 High Byte ---- 0000 ---- 0000
FSR0L Indirect Data Memory Address Pointer 0 Low Byte xxxx xxxx uuuu uuuu
WREG Working Register xxxx xxxx uuuu uuuu
INDF1 Uses contents of FSR1 to address data memory - value of FSR1 not changed (not a physical register) n/a n/a
POSTINC1 Uses contents of FSR1 to address data memory - value of FSR1 post-incremented (not a physical register) n/a n/a
POSTDEC1 Uses contents of FSR1 to address data memory - value of FSR1 post-decremented (not a physical register) n/a n/a
PREINC1 Uses contents of FSR1 to address data memory - value of FSR1 pre-incremented (not a physical register) n/a n/a
PLUSW1 Uses contents of FSR1 to address data memory - value of FSR1 pre-incremented (not a physical register) - n/a n/a
value of FSR1 offset by value in WREG
FSR1H — — — — Indirect Data Memory Address Pointer 1 High Byte ---- 0000 ---- 0000
FSR1L Indirect Data Memory Address Pointer 1 Low Byte xxxx xxxx uuuu uuuu
BSR — — — — Bank Select Register ---- 0000 ---- 0000
INDF2 Uses contents of FSR2 to address data memory - value of FSR2 not changed (not a physical register) n/a n/a
POSTINC2 Uses contents of FSR2 to address data memory - value of FSR2 post-incremented (not a physical register) n/a n/a
POSTDEC2 Uses contents of FSR2 to address data memory - value of FSR2 post-decremented (not a physical register) n/a n/a
PREINC2 Uses contents of FSR2 to address data memory - value of FSR2 pre-incremented (not a physical register) n/a n/a
PLUSW2 Uses contents of FSR2 to address data memory - value of FSR2 pre-incremented (not a physical register) - n/a n/a
value of FSR2 offset by value in WREG
FSR2H — — — — Indirect Data Memory Address Pointer 2 High Byte ---- 0000 ---- 0000
FSR2L Indirect Data Memory Address Pointer 2 Low Byte xxxx xxxx uuuu uuuu
STATUS — — — N OV Z DC C ---x xxxx ---u uuuu
TMR0H Timer0 register high byte 0000 0000 0000 0000
TMR0L Timer0 register low byte xxxx xxxx uuuu uuuu
T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 1111 1111 1111 1111
Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition
Note 1: RA6 and associated bits are configured as port pins in RCIO and ECIO oscillator mode only and read ’0’ in all
other oscillator modes.
2: Bit 21 of the TBLPTRU allows access to the device configuration bits.
3: Other (non-power-up) resets include external reset through MCLR and Watchdog Timer Reset.
Value on
Value on
all other
Filename Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR,
resets
BOR
(note 3)
OSCCON — — — — — — — SCS ---- ---0 ---- ---0
LVDCON — — IRVST LVDEN LVDL3 LVDL2 LVDL1 LVDL0 --00 0101 --00 0101
WDTCON — — — — — — — SWDTE ---- ---0 ---- ---0
RCON IPEN LWRT — RI TO PD POR BOR 0q-1 11qq 0q-q qquu
TMR1H Timer1 Register High Byte xxxx xxxx uuuu uuuu
TMR1L Timer1 Register Low Byte xxxx xxxx uuuu uuuu
T1CON RD16 — T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 0-00 0000 u-uu uuuu
TMR2 Timer2 Register 0000 0000 0000 0000
PR2 Timer2 Period Register 1111 1111 1111 1111
T2CON — TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 -000 0000
SSPBUF SSP Receive Buffer/Transmit Register xxxx xxxx uuuu uuuu
SSPADD SSP Address Register in I 2C Slave Mode. SSP Baud Rate Reload Register in I2C Master Mode. 0000 0000 0000 0000
SSPSTAT SMP CKE D/A P S R/W UA BF 0000 0000 0000 0000
SSPCON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 0000 0000
SSPCON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000 0000 0000
ADRESH A/D Result Register High Byte xxxx xxxx uuuu uuuu
ADRESL A/D Result Register Low Byte xxxx xxxx uuuu uuuu
ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE — ADON 0000 00-0 0000 00-0
ADCON1 ADFM ADCS2 — — PCFG3 PCFG2 PCFG1 PCFG0 00-- 0000 00-- 0000
CCPR1H Capture/Compare/PWM Register1 High Byte xxxx xxxx uuuu uuuu
CCPR1L Capture/Compare/PWM Register1 Low Byte xxxx xxxx uuuu uuuu
CCP1CON — — DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 --00 0000
CCPR2H Capture/Compare/PWM Register2 High Byte xxxx xxxx uuuu uuuu
CCPR2L Capture/Compare/PWM Register2 Low Byte xxxx xxxx uuuu uuuu
CCP2CON — — DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 --00 0000
TMR3H Timer3 Register High Byte xxxx xxxx uuuu uuuu
TMR3L Timer3 Register Low Byte xxxx xxxx uuuu uuuu
T3CON RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON 0000 0000 uuuu uuuu
SPBRG USART1 Baud Rate Generator 0000 0000 0000 0000
RCREG USART1 Receive Register 0000 0000 0000 0000
TXREG USART1 Transmit Register 0000 0000 0000 0000
TXSTA CSRC TX9 TXEN SYNC — BRGH TRMT TX9D 0000 -010 0000 -010
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 0000 000x
Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition
Note 1: RA6 and associated bits are configured as port pins in RCIO and ECIO oscillator mode only and read ’0’ in all
other oscillator modes.
2: Bit 21 of the TBLPTRU allows access to the device configuration bits.
3: Other (non-power-up) resets include external reset through MCLR and Watchdog Timer Reset.
Value on
Value on
all other
Filename Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR,
resets
BOR
(note 3)
PORTE Read PORTE pins, Write PORTE Data Latch ---- -000 ---- -000
PORTD Read PORTD pins, Write PORTD Data Latch xxxx xxxx uuuu uuuu
PORTC Read PORTC pins, Write PORTC Data Latch xxxx xxxx uuuu uuuu
PORTB Read PORTB pins, Write PORTB Data Latch xxxx xxxx uuuu uuuu
PORTA — RA6(1) Read PORTA pins, Write PORTA Data Latch (1) -x0x 0000 -u0u 0000
4.10 Access Bank A bit in the instruction word specifies if the operation is
to occur in the bank specified by the BSR register or in
The Access Bank is an architectural enhancement the Access Bank. This bit is denoted by the ’a’ bit (for
which is very useful for C compiler code optimization. access bit).
The techniques used by the C compiler may also be
When forced in the Access Bank (a = ’0’), the last
useful for programs written in assembly.
address in Access RAM Low is followed by the first
This data memory region can be used for: address in Access RAM High. Access RAM High maps
• Intermediate computational values the Special Function registers so that these registers
• Local variables of subroutines can be accessed without any software overhead. This
• Faster context saving/switching of variables is useful for testing status flags and modifying control
• Common variables bits.
• Faster evaluation/control of SFRs (no banking)
The Access Bank is comprised of the upper 128 bytes
in Bank 15 (SFRs) and the lower 128 bytes in Bank 0.
These two sections will be referred to as Access RAM
High and Access RAM Low, respectively. Figure 4-6
and Figure 4-7 indicate the Access RAM areas.
Direct Addressing
BSR<3:0> 7 from opcode(3) 0
Data
Memory(1)
0h
RAM
Instruction
Executed
Opcode Address
FFFh
12
BSR<3:0> 12 12
Instruction
4 8
Fetched
Opcode File FSR
Indirect Addressing
11 FSR register 0
location select
0000h
Data
Memory(1)
0FFFh
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
The Reset Control (RCON) register contains flag bits, Note 1: If the BOREN configuration bit is set, BOR
that allow differentiation between the sources of a is ’1’ on Power-on Reset. If the BOREN
device reset. These flags include the TO, PD, POR, configuration bit is clear, BOR is unknown
BOR and RI bits. This register is readable and writable. on Power-on Reset.
The BOR status bit is a "don't care" and is
not necessarily predictable if the brown-
out circuit is disabled (the BOREN config-
uration bit is clear). BOR must then be set
by the user and checked on subsequent
resets to see if it is clear, indicating a
brown-out has occurred.
2: It is recommended that the POR bit be set
after a Power-on Reset has been
detected, so that subsequent Power-on
Resets may be detected.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
PROGRAM MEMORY
Program Memory
Instruction: TBLRD* (TBLPTR)
PROGRAM MEMORY
Program Memory
Instruction: TBLWT* (TBLPTR)
Several control registers are used in conjunction with The LWRT bit specifies the operation of Table Writes to
the TBLRD and TBLWT instructions. These include the: internal memory when the VPP voltage is applied to the
MCLR pin. When the LWRT bit is set, the controller
• TBLPTR registers
continues to execute user code, but long table writes
• TABLAT register are allowed (for programming internal program mem-
• RCON register ory) from user mode. The LWRT bit can be cleared only
by performing either a POR or MCLR reset.
bit 7 bit 0
Legend:
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
TABLE 5-1: TABLE POINTER OPERATIONS WITH TBLRD AND TBLWT INSTRUCTIONS
Example Operation on Table Pointer
TBLRD* TBLPTR is not modified
TBLWT*
TBLRD*+ TBLPTR is incremented after the read/write
TBLWT*+
TBLRD*- TBLPTR is decremented after the read/write
TBLWT*-
TBLRD+* TBLPTR is incremented before the read/write
TBLWT+*
The long write is what actually programs words of data The sequence of events for programming an internal
into the internal memory. When a TBLWT to the MSB of program memory location should be:
the write block occurs, instruction execution is halted. 1. Enable the interrupt that terminates the long
During this time, programming voltage and the data write. Disable all other interrupts.
stored in internal latches is applied to program memory.
2. Clear the source interrupt flag.
For a long write to occur: 3. If Interrupt Service Routine execution is desired
1. MCLR/VPP pin must be at the programming volt- when the device wakes, enable global inter-
age rupts.
2. LWRT bit must be set 4. Set LWRT bit in the RCON register.
3. TBLWT to the address of the MSB of the write 5. Raise MCLR/VPP pin to the programming volt-
block age, VPP.
If the LWRT bit is clear, a short write will occur and pro- 6. Clear the WDT (if enabled).
gram memory will not be changed. If the TBLWT is not 7. Set the interrupt source to interrupt at the
to the MSB of the write block, then the programming required time.
phase is not initiated. 8. Execute the table write for the lower (even) byte.
Setting the LWRT bit enables long writes when the This will be a short write.
MCLR pin is taken to VPP voltage. Once the LWRT bit 9. Execute the table write for the upper (odd) byte.
is set, it can be cleared only by performing a POR or This will be a long write. The controller will go to
MCLR reset. sleep while programming. The interrupt wakes
To ensure that the memory location has been well pro- the controller.
grammed, a minimum programming time is required. 10. If GIE was set, service the interrupt request.
The long write can be terminated after the program- 11. Lower MCLR/VPP pin to VDD.
ming time has expired by a reset or an interrupt. Having 12. Verify the memory location (table read).
only one interrupt source enabled to terminate the long
write ensures that no unintended interrupts will prema-
turely terminate the long write.
XXXXIF IPE
XXXXIE GIEL/PEIE
XXXXIP
IPE
Additional Peripheral Interrupts
High Priority Interrupt Generation
INT1F
Additional Peripheral Interrupts INT1E
INT1P
INT2F
INT2E
INT2P
bit 7 bit 0
Legend:
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
Note: Interrupt flag bits get set when an interrupt condition occurs, regardless of the state
of its corresponding enable bit or the global enable bit. User software should ensure
the appropriate interrupt flag bits are clear prior to enabling an interrupt. This feature
allows for software polling.
bit 7 bit 0
Legend:
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
Note: Interrupt flag bits get set when an interrupt condition occurs, regardless of the state
of its corresponding enable bit or the global enable bit. User software should ensure
the appropriate interrupt flag bits are clear prior to enabling an interrupt. This feature
allows for software polling.
bit 7 bit 0
Legend:
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
Note: Interrupt flag bits get set when an interrupt condition occurs, regardless of the state
of its corresponding enable bit or the global enable bit. User software should ensure
the appropriate interrupt flag bits are clear prior to enabling an interrupt. This feature
allows for software polling.
The PIR registers contain the individual flag bits for the The PIE registers contain the individual enable bits for
peripheral interrupts. Due to he number of peripheral the peripheral interrupts. Due to the number of periph-
interrupt sources, there are two Peripheral Interrupt eral interrupt sources, there are two Peripheral Inter-
Flag Registers (PIR1, PIR2). rupt Enable Registers (PIE1, PIE2). When IPEN = 0,
the PEIE bit must be set to enable any of these periph-
Note 1: Interrupt flag bits get set when an interrupt
eral interrupts.
condition occurs, regardless of the state of
its corresponding enable bit or the global 7.0.4 IPR REGISTERS
enable bit, GIE (INTCON<7>).
The IPR registers contain the individual priority bits for
Note 2: User software should ensure the appropri-
the peripheral interrupts. Due to on the number of
ate interrupt flag bits are cleared prior to
peripheral interrupt sources, there are two Peripheral
enabling an interrupt, and after servicing
Interrupt Priority Registers (IPR1, IPR2). The operation
that interrupt.
of the priority bits requires that the Interrupt Priority
Enable (IPEN) bit be set.
bit 7 bit 0
Legend:
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
bit 7 bit 0
bit 7 bit 0
PIR1 bit 7 PSPIF: Parallel Slave Port Read/Write Interrupt Flag bit
1 = A read or a write operation has taken place
(must be cleared in software)
0 = No read or write has occurred
bit 6 ADIF: A/D Converter Interrupt Flag bit
1 = An A/D conversion completed
(must be cleared in software)
0 = The A/D conversion is not complete
bit 5 RCIF: USART Receive Interrupt Flag bit
1 = The USART receive buffer, RCREG, is full
(cleared when RCREG is read)
0 = The USART receive buffer is empty
bit 4 TXIF: USART Transmit Interrupt Flag bit
1 = The USART transmit buffer, TXREG, is empty
(cleared when TXREG is written)
0 = The USART transmit buffer is full
bit 3 SSPIF: Master Synchronous Serial Port Interrupt Flag bit
1 = The transmission/reception is complete
(must be cleared in software)
0 = Waiting to transmit/receive
bit 2 CCP1IF: CCP1 Interrupt Flag bit
Capture Mode
1 = A TMR1 register capture occurred
(must be cleared in software)
0 = No TMR1 register capture occurred
Compare Mode
1 = A TMR1 register compare match occurred
(must be cleared in software)
0 = No TMR1 register compare match occurred
PWM Mode
Unused in this mode
bit 1 TMR2IF: TMR2 to PR2 Match Interrupt Flag bit
1 = TMR2 to PR2 match occurred
(must be cleared in software)
0 = No TMR2 to PR2 match occurred
bit 0 TMR1IF: TMR1 Overflow Interrupt Flag bit
1 = TMR1 register overflowed
(must be cleared in software)
0 = TMR1 register did not overflow
Legend:
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
bit 7 bit 0
bit 7 bit 0
PIE1 bit 7 PSPIE: Parallel Slave Port Read/Write Interrupt Enable bit
1 = Enables the PSP read/write interrupt
0 = Disables the PSP read/write interrupt
bit 6 ADIE: A/D Converter Interrupt Enable bit
1 = Enables the A/D interrupt
0 = Disables the A/D interrupt
bit 5 RCIE: USART Receive Interrupt Enable bit
1 = Enables the USART receive interrupt
0 = Disables the USART receive interrupt
bit 4 TXIE: USART Transmit Interrupt Enable bit
1 = Enables the USART transmit interrupt
0 = Disables the USART transmit interrupt
bit 3 SSPIE: Master Synchronous Serial Port Interrupt Enable bit
1 = Enables the MSSP interrupt
0 = Disables the MSSP interrupt
bit 2 CCP1IE: CCP1 Interrupt Enable bit
1 = Enables the CCP1 interrupt
0 = Disables the CCP1 interrupt
bit 1 TMR2IE: TMR2 to PR2 Match Interrupt Enable bit
1 = Enables the TMR2 to PR2 match interrupt
0 = Disables the TMR2 to PR2 match interrupt
bit 0 TMR1IE: TMR1 Overflow Interrupt Enable bit
1 = Enables the TMR1 overflow interrupt
0 = Disables the TMR1 overflow interrupt
Legend:
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
bit 7 bit 0
bit 7 bit 0
IPR1 bit 7 PSPIP: Parallel Slave Port Read/Write Interrupt Priority bit
1 = High priority
0 = Low priority
bit 6 ADIP: A/D Converter Interrupt Priority bit
1 = High priority
0 = Low priority
bit 5 RCIP: USART Receive Interrupt Priority bit
1 = High priority
0 = Low priority
bit 4 TXIP: USART Transmit Interrupt Priority bit
1 = High priority
0 = Low priority
bit 3 SSPIP: Master Synchronous Serial Port Interrupt Priority bit
1 = High priority
0 = Low priority
bit 2 CCP1IP: CCP1 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 1 TMR2IP: TMR2 to PR2 Match Interrupt Priority bit
1 = High priority
0 = Low priority
bit 0 TMR1IP: TMR1 Overflow Interrupt Priority bit
1 = High priority
0 = Low priority
Legend:
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
EN
Data Bus
Q D
RD PORTA
Note 1: I/O pins have protection diodes to VDD and VSS. Note 1: I/O pins have protection diodes to VDD and VSS.
RD LATA
Data
Bus D Q
WR LATA
or CK Q
PORTA N I/O pin(1)
Data Latch
D Q VSS
WR TRISA Schmitt
CK Q
Trigger
input
TRIS Latch
buffer
RD TRISA
Q D
ENEN
RD PORTA
RA5/SS/AN4/LVDIN bit5 TTL Input/output or slave select input for synchronous serial port or analog
input, or low voltage detect input
register reads and writes the latched output value for WR TRISB TTL
CK
PORTB. Input
Buffer ST
Buffer
EXAMPLE 8-2: INITIALIZING PORTB
RD TRISB
CLRF PORTB ; Initialize PORTB by
; clearing output
; data latches RD LATB
Latch
CLRF LATB ; Alternate method
Q D
; to clear output
; data latches
RD PORTB EN Q1
MOVLW 0xCF ; Value used to Set RBIF
; initialize data
; direction
MOVWF TRISB ; Set RB<3:0> as inputs From other Q D
; RB<5:4> as outputs RB7:RB4 pins RD PORTB
; RB<7:6> as inputs EN
Q3
RBx/INTx
Each of the PORTB pins has a weak internal pull-up. A
Note 1: I/O pins have diode protection to VDD and VSS.
single control bit can turn on all the pull-ups. This is per- 2: To enable weak pull-ups, set the appropriate TRIS
formed by clearing bit RBPU (INTCON2<7>). The bit(s) and clear the RBPU bit (INTCON2<7>).
weak pull-up is automatically turned off when the port
pin is configured as an output. The pull-ups are dis-
abled on a Power-on Reset. FIGURE 8-5: BLOCK DIAGRAM OF
Four of PORTB’s pins, RB7:RB4, have an interrupt on RB2:RB0 PINS
change feature. Only pins configured as inputs can VDD
cause this interrupt to occur (i.e. any RB7:RB4 pin con- RBPU(2) weak
P pull-up
figured as an output is excluded from the interrupt on
Data Latch
change comparison). The input pins (of RB7:RB4) are Data Bus
D Q
compared with the old value latched on the last read of
WR Port I/O
PORTB. The “mismatch” outputs of RB7:RB4 are CK pin(1)
OR’ed together to generate the RB Port Change Inter-
TRIS Latch
rupt with flag bit RBIF (INTCON<0>). D Q
TTL
This interrupt can wake the device from SLEEP. The Input
WR TRIS
user, in the interrupt service routine, can clear the inter- CK Buffer
rupt in the following manner:
a) Any read or write of PORTB (except with the
MOVFF instruction). This will end the mismatch RD TRIS
condition. Q D
b) Clear flag bit RBIF.
RD Port EN
A mismatch condition will continue to set flag bit RBIF.
Reading PORTB will end the mismatch condition and
RB0/INT
allow flag bit RBIF to be cleared.
Schmitt Trigger RD Port
The interrupt on change feature is recommended for Buffer
wake-up on key depression operation and operations Note 1: I/O pins have diode protection to VDD and VSS.
where PORTB is only used for the interrupt on change 2: To enable weak pull-ups, set the appropriate TRIS
bit(s) and clear the RBPU bit (OPTION_REG<7>).
feature. Polling of PORTB is not recommended while
using the interrupt on change feature.
CCP Output(3) 1
VDD
P
0
Enable (3)
CCP Output
Data Latch
Data Bus D Q I/O
Pin(1)
WR LATB or
WR PORTB N
CK
TRIS Latch VSS
D
TTL
WR TRISB Input
CK Q Buffer
RD TRISB
RD LATB
Q D
RD PORTB EN
RD PORTB
CCP2 input(3)
Schmitt Trigger
Buffer CCP2MX = 0
RB0/INT0 bit0 TTL/ST(1) Input/output pin or external interrupt input1. Internal software
programmable weak pull-up.
RB1/INT1 bit1 TTL/ST(1) Input/output pin or external interrupt input2. Internal software programma-
ble weak pull-up.
RB2/INT2 bit2 TTL/ST(1) Input/output pin or external interrupt input3. Internal software programma-
ble weak pull-up.
RB3/CCP2 (3) bit3 TTL/ST(4) Input/output pin. Capture2 input/Compare2 output/PWM output when
CCP2MX configuration bit is enabled. Internal software programmable
weak pull-up.
RB4 bit4 TTL Input/output pin (with interrupt on change). Internal software programma-
ble weak pull-up.
RB5 bit5 TTL Input/output pin (with interrupt on change). Internal software programma-
ble weak pull-up.
RB6 bit6 TTL/ST(2) Input/output pin (with interrupt on change). Internal software programma-
ble weak pull-up. Serial programming clock.
RB7 bit7 TTL/ST(2) Input/output pin (with interrupt on change). Internal software programma-
ble weak pull-up. Serial programming data.
Legend: TTL = TTL input, ST = Schmitt Trigger input
Note 1: This buffer is a Schmitt Trigger input when configured as the external interrupt.
2: This buffer is a Schmitt Trigger input when used in serial programming mode.
3: A device configuration bit selects which I/O pin the CCP2 pin is multiplexed on.
4: This buffer is a Schmitt Trigger input when configured as the CCP2 input.
PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx uuuu uuuu
LATB Data Output Register
LATB
GIE/ PEIE/ TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 0000 000u
INTCON
GIEH GIEL
RBPU INTEDG0 INTEDG1 INTEDG2 — TMR0IP — RBIP 1111 -1-1 1111 -1-1
INTCON2
INT2IP INT1IP — INT2IE INT1IE — INT2IF INT1IF 11-0 0-00 11-0 0-00
INTCON3
Legend: x = unknown, u = unchanged. Shaded cells are not used by PORTB.
RD LATC
D Q
WR LATC or
WR PORTC CK Q 0
Peripheral Out
RD TRISC Select
Q D
Q CK ST Buffer
RD PORTC
Peripheral Data In
RC0/T1OSO/T1CKI bit0 ST Input/output port pin or Timer1 oscillator output/Timer1 clock input
RC1/T1OSI/CCP2 bit1 ST Input/output port pin, Timer1 oscillator input, or Capture2 input/
Compare2 output/PWM output when CCP2MX configuration bit is
disabled.
RC3/SCK/SCL bit3 ST RC3 can also be the synchronous serial clock for both SPI and I2C
modes.
RC4/SDI/SDA bit4 ST RC4 can also be the SPI Data In (SPI mode) or data I/O (I2C mode).
RC5/SDO bit5 ST Input/output port pin or Synchronous Serial Port data output
PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 xxxx xxxx uuuu uuuu
LATC LATC Data Output Register xxxx xxxx uuuu uuuu
TRISC PORTC Data Direction Register 1111 1111 1111 1111
Legend: x = unknown, u = unchanged.
EXAMPLE 8-4: INITIALIZING PORTD Note 1: I/O pins have protection diodes to VDD and VSS.
CLRF PORTD ; Initialize PORTD by
; clearing output
; data latches
CLRF LATD ; Alternate method
; to clear output
; data latches
MOVLW 0xCF ; Value used to
; initialize data
; direction
MOVWF TRISD ; Set RD<3:0> as inputs
; RD<5:4> as outputs
; RD<7:6> as inputs
RD0/PSP0 bit0 ST/TTL(1) Input/output port pin or parallel slave port bit0
RD1/PSP1 bit1 ST/TTL(1) Input/output port pin or parallel slave port bit1
RD3/PSP3 bit3 ST/TTL(1) Input/output port pin or parallel slave port bit3
RD5/PSP5 bit5 ST/TTL(1) Input/output port pin or parallel slave port bit5
RD7/PSP7 bit7 ST/TTL(1) Input/output port pin or parallel slave port bit7
Legend: ST = Schmitt Trigger input, TTL = TTL input
Note 1: Input buffers are Schmitt Triggers when in I/O mode and TTL buffer when in Parallel Slave Port Mode.
PORTD RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 xxxx xxxx uuuu uuuu
LATD LATD Data Output Register xxxx xxxx uuuu uuuu
TRISD PORTD Data Direction Register 1111 1111 1111 1111
TRISE IBF OBF IBOV PSPMODE — PORTE Data Direction Bits 0000 -111 0000 -111
Legend: x = unknown, u = unchanged, - = unimplemented read as ’0’. Shaded cells are not used by PORTD.
bit 7 bit 0
Legend:
RE0/RD/AN5 bit0 ST/TTL(1) Input/output port pin or read control input in parallel slave port mode
or analog input:
RD
1 = Not a read operation
0 = Read operation. Reads PORTD register (if chip selected)
RE1/WR/AN6 bit1 ST/TTL(1) Input/output port pin or write control input in parallel slave port mode
or analog input:
WR
1 = Not a write operation
0 = Write operation. Writes PORTD register (if chip selected)
RE2/CS/AN7 bit2 ST/TTL(1) Input/output port pin or chip select control input in parallel slave port
mode or analog input:
CS
1 = Device is not selected
0 = Device is selected
Legend: ST = Schmitt Trigger input, TTL = TTL input
Note 1: Input buffers are Schmitt Triggers when in I/O mode and TTL buffers when in Parallel Slave Port Mode.
TABLE 8-10: SUMMARY OF REGISTERS ASSOCIATED WITH PORTE
Value on Value on all
POR, other
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 BOR resets
PORTE — — — — — RE2 RE1 RE0 ---- -000 ---- -000
LATE — — — — — LATE Data Output Register ---- -xxx ---- -uuu
TRISE IBF OBF IBOV PSPMODE — PORTE Data Direction Bits 0000 -111 0000 -111
ADCON1 ADFM ADCS2 — — PCFG3 PCFG2 PCFG1 PCFG0 --0- -000 --0- -000
Legend: x = unknown, u = unchanged, - = unimplemented read as ’0’. Shaded cells are not used by PORTE.
Chip Select
TTL CS
Write
TTL WR
CS
WR
RD
PORTD<7:0>
IBF
OBF
PSPIF
CS
WR
RD
PORTD<7:0>
IBF
OBF
PSPIF
PORTD Port data latch when written; port pins when read xxxx xxxx uuuu uuuu
LATD LATD Data Output Bits xxxx xxxx uuuu uuuu
TRISD PORTD Data Direction Bits 1111 1111 1111 1111
PORTE — — — — — RE2 RE1 RE0 ---- -000 ---- -000
LATE — — — — — LATE Data Output Bits ---- -xxx ---- -uuu
TRISE IBF OBF IBOV PSPMODE — PORTE Data Direction Bits 0000 -111 0000 -111
INTCON GIE/ PEIE/ TMR0IF INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 0000 000u
GIEH GIEL
PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
IPR1 PSPIP ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 0000 0000 0000 0000
ADCON1 ADFM ADCS2 — — PCFG3 PCFG2 PCFG1 PCFG0 --0- -000 --0- -000
Legend: x = unknown, u = unchanged, - = unimplemented read as ’0’.
Shaded cells are not used by the Parallel Slave Port.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
Data Bus
FOSC/4 0
8
0
Sync with
1 Internal TMR0
clocks
RA4/T0CKI Programmable 1
Pin Prescaler
T0SE (2 Tcy delay)
3 PSA
Set Interrupt
T0PS2, T0PS1, T0PS0 Flag bit TMR0IF
T0CS on overflow
Note: Upon reset, Timer0 is enabled in 8-bit mode with clock input from T0CKI max. prescale.
FOSC/4 0
0
Sync with Set Interrupt
1 Internal TMR0L TMR0
Clocks High Byte Flag bit TMR0IF
T0CKI pin Programmable 1 on overflow
Prescaler 8
T0SE (2 Tcy delay)
3
Read TMR0L
T0PS2, T0PS1, T0PS0
T0CS PSA Write TMR0L
8
8
TMR0H
Data Bus<7:0>
Note: Upon reset, Timer0 is enabled in 8-bit mode with clock input from T0CKI max. prescale.
Timer0 can operate as a timer or as a counter. The prescaler assignment is fully under software con-
trol, (i.e., it can be changed “on-the-fly” during program
Timer mode is selected by clearing the T0CS bit. In
execution).
timer mode, the Timer0 module will increment every
instruction cycle (without prescaler). If the TMR0 regis- 9.3 Timer0 Interrupt
ter is written, the increment is inhibited for the following
two instruction cycles. The user can work around this The TMR0 interrupt is generated when the TMR0 reg-
by writing an adjusted value to the TMR0 register. ister overflows from FFh to 00h in 8-bit mode or FFFFh
Counter mode is selected by setting the T0CS bit. In to 0000h in 16-bit mode. This overflow sets the TMR0IF
counter mode, Timer0 will increment either on every bit. The interrupt can be masked by clearing the
rising or falling edge of pin RA4/T0CKI. The increment- TMR0IE bit. The TMR0IE bit must be cleared in soft-
ing edge is determined by the Timer0 Source Edge ware by the Timer0 module interrupt service routine
Select bit (T0SE). Clearing the T0SE bit selects the ris- before re-enabling this interrupt. The TMR0 interrupt
ing edge. Restrictions on the external clock input are cannot awaken the processor from SLEEP, since the
discussed below. timer is shut off during SLEEP.
When an external clock input is used for Timer0, it must 9.4 16-Bit Mode Timer Reads and Writes
meet certain requirements. The requirements ensure
the external clock can be synchronized with the internal TMR0H is not the high byte of the timer/counter in 16-
phase clock (TOSC). Also, there is a delay in the actual bit mode, but is actually a buffered version of the high
incrementing of Timer0 after synchronization. byte of Timer0 (refer to Figure 9-1). The high byte of
the Timer0 counter/timer is not directly readable nor
9.2 Prescaler writable. TMR0H is updated with the contents of the
high byte of Timer0 during a read of TMR0L. This pro-
An 8-bit counter is available as a prescaler for the vides the ability to read all 16-bits of Timer0 without
Timer0 module. The prescaler is not readable or writ- having to verify that the read of the high and low byte
able. were valid due to a rollover between successive reads
The PSA and T0PS2:T0PS0 bits determine the pres- of the high and low byte.
caler assignment and prescale ratio. A write to the high byte of Timer0 must also take place
Clearing bit PSA will assign the prescaler to the Timer0 through the TMR0H buffer register. Timer0 high byte is
module. When the prescaler is assigned to the Timer0 updated with the contents of TMR0H when a write
module, prescale values of 1:2, 1:4, ..., 1:256 are occurs to TMR0L. This allows all 16 bits of Timer0 to
selectable. be updated at once.
When assigned to the Timer0 module, all instructions
writing to the TMR0 register (e.g. CLRF TMR0,
MOVWF TMR0, BSF TMR0, x....etc.) will clear the
prescaler count.
Note: Writing to TMR0 when the prescaler is
assigned to Timer0 will clear the prescaler
count, but will not change the prescaler
assignment.
TMR0L Timer0 Module’s Low Byte Register xxxx xxxx uuuu uuuu
TMR0H Timer0 Module’s High Byte Register 0000 0000 0000 0000
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 0000 000u
T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 1111 1111 1111 1111
TRISA — — PORTA Data Direction Register --11 1111 --11 1111
Legend: x = unknown, u = unchanged, - = unimplemented locations read as '0'.
Shaded cells are not used by Timer0.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
Note 1: When enable bit T1OSCEN is cleared, the inverter and feedback resistor are turned off. This
eliminates power drain.
TMR1H
8
8
Write TMR1L
Read TMR1L
Synchronized
TMR1IF 8 TMR1 0
Overflow clock input
Timer 1
Interrupt TMR1L
high byte
flag bit 1
TMR1ON
on/off T1SYNC
T1OSC
T13CKI/T1OSO 1
Synchronize
Prescaler
T1OSCEN Fosc/4 1, 2, 4, 8 det
Enable Internal 0
T1OSI Oscillator(1) Clock 2
TMR1CS SLEEP input
T1CKPS1:T1CKPS0
Note 1: When enable bit T1OSCEN is cleared, the inverter and feedback resistor are turned off. This eliminates
power drain.
LP 32 kHz TBD (1) TBD (1) Note: The special event triggers from the CCP1
module will not set interrupt flag bit
Crystal to be Tested: TMR1IF (PIR1<0>).
32.768 kHz Epson C-001R32.768K-A ± 20 Timer1 must be configured for either timer or synchro-
PPM nized counter mode to take advantage of this feature. If
Note 1: Microchip suggests 33 pF as a starting Timer1 is running in asynchronous counter mode, this
point in validating the oscillator circuit. reset operation may not work.
2: Higher capacitance increases the stability In the event that a write to Timer1 coincides with a spe-
of the oscillator, but also increases the cial event trigger from CCP1, the write will take prece-
start-up time. dence.
3: Since each resonator/crystal has its own
In this mode of operation, the CCPR1H:CCPR1L regis-
characteristics, the user should consult the
ters pair effectively becomes the period register for
resonator/crystal manufacturer for appro-
Timer1.
priate values of external components.
4: Capacitor values are for design guidance 10.5 Timer1 16-Bit Read/Write Mode
only.
Timer1 can be configured for 16-bit reads and writes
(see Figure 10-2). When the RD16 control bit
(T1CON<7>) is set, the address for TMR1H is mapped
to a buffer register for the high byte of Timer1. A read
from TMR1L will load the contents of the high byte of
Timer1 into the Timer1 high byte buffer. This provides
the user with the ability to accurately read all 16-bits of
Timer1 without having to determine whether a read of
the high byte followed by a read of the low byte is valid
due to a rollover between reads.
A write to the high byte of Timer1 must also take place
through the TMR1H buffer register. Timer1 high byte is
updated with the contents of TMR1H when a write
occurs to TMR1L. This allows a user to write all 16 bits
to both the high and low bytes of Timer1 at once.
The high byte of Timer1 is not directly readable or writ-
able in this mode. All reads and writes must take place
through the Timer1 high byte buffer register. Writes to
TMR1H do not clear the Timer1 prescaler. The pres-
caler is only cleared on writes to TMR1L.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
Sets flag
TMR2
bit TMR2IF
output (1)
Prescaler Reset
FOSC/4 TMR2
1:1, 1:4, 1:16
2 Postscaler
Comparator
EQ 1:1 to 1:16
T2CKPS1:T2CKPS0
PR2 4
TOUTPS3:TOUTPS0
Note 1: TMR2 register output can be software selected by the SSP Module as a baud clock.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
TMR3H
8
8
Write TMR3L
Read TMR3L
CCP Special Trigger
8 T3CCPx Synchronized
Set TMR3IF flag bit TMR3 0
on overflow Timer3 CLR clock input
High Byte TMR3L
1
To Timer1 Clock Input TMR3ON
on/off T3SYNC
T1OSC
T1OSO/
T13CKI 1
Synchronize
Prescaler
T1OSCEN FOSC/4 1, 2, 4, 8 det
Enable Internal 0
T1OSI Oscillator(1) Clock 2 SLEEP input
T3CKPS1:T3CKPS0
TMR3CS
Note 1: When the T1OSCEN bit is cleared, the inverter and feedback resistor are turned off. This eliminates power drain.
Value on Value on
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, all other
BOR resets
INTCON GIE/ PEIE/ TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 0000 000u
GIEH GIEL
PIR2 — — — — BCLIF LVDIF TMR3IF CCP2IF 0000 0000 0000 0000
PIE2 — — — — BCLIE LVDIE TMR3IE CCP2IE 0000 0000 0000 0000
IPR2 — — — — BCLIP LVDIP TMR3IP CCP2IP 0000 0000 0000 0000
TMR3L Holding register for the Least Significant Byte of the 16-bit TMR3 register xxxx xxxx uuuu uuuu
TMR3H Holding register for the Most Significant Byte of the 16-bit TMR3 register xxxx xxxx uuuu uuuu
T1CON — — T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu
T3CON — T3CKPS2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON -000 0000 -uuu uuuu
Legend: x = unknown, u = unchanged, - = unimplemented read as ’0’. Shaded cells are not used by the Timer1 module.
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
Capture Capture TMR1 or TMR3 time-base. Time base can be different for each CCP.
Capture Compare The compare could be configured for the special event trigger, which clears either TMR1
or TMR3 depending upon which time base is used.
Compare Compare The compare(s) could be configured for the special event trigger, which clears TMR1 or
TMR3 depending upon which time base is used.
PWM PWM The PWMs will have the same frequency and update rate
(TMR2 interrupt).
PWM Capture None
PWM Compare None
In Capture mode, CCPR1H:CCPR1L captures the 16- When the Capture mode is changed, a false capture
bit value of the TMR1 or TMR3 registers when an event interrupt may be generated. The user should keep bit
occurs on pin RC2/CCP1. An event is defined as: CCP1IE (PIE1<2>) clear to avoid false interrupts and
should clear the flag bit CCP1IF following any such
• every falling edge
change in operating mode.
• every rising edge
• every 4th rising edge 13.3.4 CCP PRESCALER
• every 16th rising edge
There are four prescaler settings, specified by bits
An event is selected by control bits CCP1M3:CCP1M0 CCP1M3:CCP1M0. Whenever the CCP module is
(CCP1CON<3:0>). When a capture is made, the inter- turned off or the CCP module is not in capture mode,
rupt request flag bit CCP1IF (PIR1<2>) is set. It must the prescaler counter is cleared. This means that any
be cleared in software. If another capture occurs before reset will clear the prescaler counter.
the value in register CCPR1 is read, the old captured
Switching from one capture prescaler to another may
value will be lost.
generate an interrupt. Also, the prescaler counter will
13.3.1 CCP PIN CONFIGURATION not be cleared, therefore the first capture may be from
a non-zero prescaler. Example 13-1 shows the recom-
In Capture mode, the RC2/CCP1 pin should be config- mended method for switching between capture pres-
ured as an input by setting the TRISC<2> bit. calers. This example also clears the prescaler counter
and will not generate the “false” interrupt.
Note: If the RC2/CCP1 is configured as an out-
put, a write to the port can cause a capture
condition. EXAMPLE 13-1: CHANGING BETWEEN
CAPTURE PRESCALERS
13.3.2 TIMER1/TIMER3 MODE SELECTION CLRF CCP1CON, F ; Turn CCP module off
MOVLW NEW_CAPT_PS ; Load WREG with the
The timers that are to be used with the capture feature ; new prescaler mode
(either Timer1 and/or Timer3) must be running in timer ; value and CCP ON
mode or synchronized counter mode. In asynchronous MOVWF CCP1CON ; Load CCP1CON with
counter mode, the capture operation may not work. ; this value
The timer to be used with each CCP module is selected
in the T3CON register.
TMR3H TMR3L
Set flag bit CCP1IF
T3CCP2 TMR3
Prescaler
Enable
÷ 1, 4, 16
CCP1 Pin CCPR1H CCPR1L
TMR1
and T3CCP2 Enable
edge detect
TMR1H TMR1L
CCP1CON<3:0>
Q’s
TMR1
and
Enable
edge detect
T3CCP2
T3CCP1 TMR1H TMR1L
CCP2CON<3:0>
Q’s
In Compare mode, the 16-bit CCPR1 (CCPR2) register Timer1 and/or Timer3 must be running in Timer mode
value is constantly compared against either the TMR1 or Synchronized Counter mode if the CCP module is
register pair value or the TMR3 register pair value. using the compare feature. In Asynchronous Counter
When a match occurs, the RC2/CCP1 (RC1/CCP2) pin mode, the compare operation may not work.
is:
13.4.3 SOFTWARE INTERRUPT MODE
• driven High
• driven Low When generate software interrupt is chosen, the CCP1
• toggle output (High to Low or Low to High) pin is not affected. Only a CCP interrupt is generated (if
enabled).
• remains Unchanged
The action on the pin is based on the value of control 13.4.4 SPECIAL EVENT TRIGGER
bits CCP1M3:CCP1M0 (CCP2M3:CCP2M0). At the
In this mode, an internal hardware trigger is generated,
same time, interrupt flag bit CCP1IF (CCP2IF) is set.
which may be used to initiate an action.
13.4.1 CCP PIN CONFIGURATION The special event trigger output of CCP1 resets the
TMR1 register pair. This allows the CCPR1 register to
The user must configure the CCPx pin as an output by
effectively be a 16-bit programmable period register for
clearing the appropriate TRISC bit.
Timer1.
Note: Clearing the CCP1CON register will force The special trigger output of CCPx resets either the
the RC2/CCP1 compare output latch to the TMR1 or TMR3 register pair. Additionally, the CCP2
default low level. This is not the data latch. Special Event Trigger will start an A/D conversion if the
A/D module is enabled.
Note: The special event trigger from the CCP2
module will not set the Timer1 or Timer3
interrupt flag bits.
Q S Output
Logic Comparator
RC2/CCP1 R match
Pin
TRISC<2>
Output Enable CCP1CON<3:0> T3CCP2 0 1
Mode Select
Q S Output Comparator
RC1/CCP2 Logic match
R
Pin
TRISC<1> CCPR2H CCPR2L
Output Enable CCP2CON<3:0>
Mode Select
CCPR1L
CCPR1H (Slave)
Comparator R Q
RC2/CCP1
TMR2 (Note 1)
S
Comparator TRISC<2>
Clear Timer,
CCP1 pin and
latch D.C.
PR2
The PWM period is specified by writing to the PR2 reg- The PWM duty cycle is specified by writing to the
ister. The PWM period can be calculated using the fol- CCPR1L register and to the CCP1CON<5:4> bits. Up
lowing formula: to 10-bit resolution is available. The CCPR1L contains
PWM period = (PR2) + 1] • 4 • TOSC • the eight MSbs and the CCP1CON<5:4> contains the
(TMR2 prescale value) two LSbs. This 10-bit value is represented by
CCPR1L:CCP1CON<5:4>. The following equation is
PWM frequency is defined as 1 / [PWM period]. used to calculate the PWM duty cycle in time:
When TMR2 is equal to PR2, the following three events PWM duty cycle = (CCPR1L:CCP1CON<5:4>) •
occur on the next increment cycle: TOSC • (TMR2 prescale value)
• TMR2 is cleared CCPR1L and CCP1CON<5:4> can be written to at any
• The CCP1 pin is set (exception: if PWM duty time, but the duty cycle value is not latched into
cycle = 0%, the CCP1 pin will not be set) CCPR1H until after a match between PR2 and TMR2
• The PWM duty cycle is latched from CCPR1L into occurs (i.e., the period is complete). In PWM mode,
CCPR1H CCPR1H is a read-only register.
Note: The Timer2 postscaler (see Section 10.0) The CCPR1H register and a 2-bit internal latch are
is not used in the determination of the used to double buffer the PWM duty cycle. This double
PWM frequency. The postscaler could be buffering is essential for glitchless PWM operation.
used to have a servo update rate at a dif- When the CCPR1H and 2-bit latch match TMR2 con-
ferent frequency than the PWM output. catenated with an internal 2-bit Q clock or 2 bits of the
TMR2 prescaler, the CCP1 pin is cleared.
Maximum PWM resolution (bits) for a given PWM fre-
quency:
log ---------------
F OSC
F PWM
= ----------------------------- bits
log ( 2 )
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
bit 7 GCEN: General Call Enable bit (In I2C slave mode only)
1 = Enable interrupt when a general call address (0000h) is received in the SSPSR
0 = General call address disabled
bit 6 ACKSTAT: Acknowledge Status bit (In I2C master mode only)
In master transmit mode:
1 = Acknowledge was not received from slave
0 = Acknowledge was received from slave
bit 5 ACKDT: Acknowledge Data bit (In I2C master mode only)
In master receive mode:
Value that will be transmitted when the user initiates an Acknowledge sequence at the end of
a receive.
1 = Not Acknowledge
0 = Acknowledge
bit 4 ACKEN: Acknowledge Sequence Enable bit (In I2C master mode only)
In master receive mode:
1 = Initiate Acknowledge sequence on SDA and SCL pins, and transmit ACKDT data bit.
Automatically cleared by hardware.
0 = Acknowledge sequence idle
bit 3 RCEN: Receive Enable bit (In I2C master mode only)
1 = Enables Receive mode for I2C
0 = Receive idle
bit 2 PEN: Stop Condition Enable bit (In I2C master mode only)
SCK release control
1 = Initiate Stop condition on SDA and SCL pins. Automatically cleared by hardware.
0 = Stop condition idle
bit 1 RSEN: Repeated Start Condition Enabled bit (In I2C master mode only)
1 = Initiate Repeated Start condition on SDA and SCL pins. Automatically cleared by hardware.
0 = Repeated Start condition idle.
bit 0 SEN: Start Condition Enabled bit (In I2C master mode only)
1 = Initiate Start condition on SDA and SCL pins. Automatically cleared by hardware.
0 = Start condition idle
Note: For bits ACKEN, RCEN, PEN, RSEN, SEN: If the I2C module is not in the idle mode,
this bit may not be set (no spooling) and the SSPBUF may not be written (or writes
to the SSPBUF are disabled).
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
SDO SDI
SCK
(CKP = 0
CKE = 0)
SCK
(CKP = 1
CKE = 0)
4 clock
SCK modes
(CKP = 0
CKE = 1)
SCK
(CKP = 1
CKE = 1)
Input
Sample
(SMP = 1)
SSPIF
Next Q4 cycle
SSPSR to after Q2↓
SSPBUF
SS
SCK
(CKP = 0
CKE = 0)
SCK
(CKP = 1
CKE = 0)
Write to
SSPBUF
SDI bit0
(SMP = 0)
bit7 bit7
Input
Sample
(SMP = 0)
SSPIF
Interrupt
Flag
Next Q4 cycle
SSPSR to after Q2↓
SSPBUF
SS
optional
SCK
(CKP = 0
CKE = 0)
SCK
(CKP = 1
CKE = 0)
Write to
SSPBUF
SDI
(SMP = 0) bit7 bit0
Input
Sample
(SMP = 0)
SSPIF
Interrupt
Flag
Next Q4 cycle
SSPSR to after Q2↓
SSPBUF
SS
not optional
SCK
(CKP = 0
CKE = 1)
SCK
(CKP = 1
CKE = 1)
Write to
SSPBUF
SDI
(SMP = 0) bit7 bit0
Input
Sample
(SMP = 0)
SSPIF
Interrupt
Flag
Next Q4 cycle
after Q2↓
SSPSR to
SSPBUF
Value on Value on
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, all other
BOR resets
INTCON GIE/ PEIE/ TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 0000 000u
GIEH GIEL
PIR1 PSPIF (1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
PIE1 PSPIE (1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
IPR1 PSPIP (1) ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 0000 0000 0000 0000
TRISC PORTC Data Direction Register 1111 1111 1111 1111
SSPBUF Synchronous Serial Port Receive Buffer/Transmit Register xxxx xxxx uuuu uuuu
SSPCON WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 0000 0000
TRISA — PORTA Data Direction Register --11 1111 --11 1111
SSPSTAT SMP CKE D/A P S R/W UA BF 0000 0000 0000 0000
Legend: x = unknown, u = unchanged, - = unimplemented read as '0'.
Shaded cells are not used by the MSSP in SPI mode.
Note 1: The PSPIF, PSPIE and PSPIP bits are reserved on the PIC18C2X2 devices. Always maintain these bits clear.
SSPADD reg
14.3.1.1 ADDRESSING
Receiving Address R/W=0 Receiving Data ACK Receiving Data Not ACK
A7 A6 A5 A4 A3 A2 A1 ACK
SDA D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0
SCL S 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 P
SCL 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
S P
Data in SCL held low
sampled while CPU
responds to SSPIF
SSPIF
BF (SSPSTAT<0>)
Cleared in software From SSP interrupt
SSPBUF is written in software service routine
CKP (SSPCON1<4>)
Receive First Byte of Address R/W = 0 Receive Second Byte of Address Receive First Byte of Address R/W=1 Transmitting Data Byte ACK
SDA 1 1 1 1 0 A9 A8 ACK A7 A6 A5 A4 A3 A2 A1 A0 ACK 1 1 1 1 0 A9 A8 ACK D7 D6 D5 D4 D3 D2 D1 D0
SCL 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
S Sr P
Preliminary
SSPIF
(PIR1<3>)
Cleared in software Cleared in software Cleared in software Bus Master
terminates
transfer
BF (SSPSTAT<0>)
DS39026B-page 131
PIC18CXX2
DS39026B-page 132
PIC18CXX2
Bus Master
Clock is held low until terminates
update of SSPADD has transfer
taken place
Receive First Byte of Address Receive Second Byte of Address Receive Data Byte
R/W = 0 R/W = 1
ACK ACK
SDA 1 1 1 1 0 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 D7 D6 D5 D4 D3 D2 D1 D0 ACK
SCL 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
S P
Preliminary
SSPIF
(PIR1<3>)
Cleared in software Cleared in software
BF (SSPSTAT<0>)
SSPBUF is written with Dummy read of SSPBUF Dummy read of SSPBUF Read of SSPBUF
contents of SSPSR to clear BF flag to clear BF flag clears BF flag
UA (SSPSTAT<1>)
The general call address is one of eight addresses In 10-bit mode, the SSPADD is required to be updated
reserved for specific purposes by the I2C protocol. It for the second half of the address to match, and the UA
consists of all 0’s with R/W = 0. bit is set (SSPSTAT<1>). If the general call address is
sampled when the GCEN bit is set, while the slave is
The general call address is recognized when the Gen- configured in 10-bit address mode, then the second
eral Call Enable bit (GCEN) is enabled (SSPCON2<7> half of the address is not necessary, the UA bit will not
set). Following a start-bit detect, 8-bits are shifted into be set, and the slave will begin receiving data after the
the SSPSR and the address is compared against the acknowledge (Figure 14-12).
SSPADD. It is also compared to the general call
address and fixed in hardware.
FIGURE 14-12: SLAVE MODE GENERAL CALL ADDRESS SEQUENCE (7 OR 10-BIT ADDRESS
MODE)
SCL
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
S
SSPIF
BF (SSPSTAT<0>)
Cleared in software
SSPBUF is read
SSPOV (SSPCON1<6>) ’0’
Master mode of operation is supported by interrupt Master Mode is enabled by setting and clearing the
generation on the detection of the START and STOP appropriate SSPM bits in SSPCON1 and by setting the
conditions. The STOP (P) and START (S) bits are SSPEN bit. Once master mode is enabled, the user has
cleared from a reset or when the MSSP module is dis- six options.
abled. Control of the I 2C bus may be taken when the P 1. Assert a start condition on SDA and SCL.
bit is set or the bus is idle with both the S and P bits
2. Assert a Repeated Start condition on SDA and
clear.
SCL.
In master mode, the SCL and SDA lines are manipu- 3. Write to the SSPBUF register initiating transmis-
lated by the MSSP hardware. sion of data/address.
The following events will cause SSP Interrupt Flag bit, 4. Generate a stop Condition on SDA and SCL.
SSPIF, to be set (SSP Interrupt if enabled): 5. Configure the I2C port to receive data.
• START condition 6. Generate an acknowledge condition at the end
• STOP condition of a received byte of data.
• Data transfer byte transmitted/received
• Acknowledge Transmit
• Repeated Start Note: The MSSP Module, when configured in I2C
Master Mode, does not allow queueing of
events. For instance, the user is not
allowed to initiate a start condition and
immediately write the SSPBUF register to
imitate transmission before the START
condition is complete. In this case, the
SSPBUF will not be written to and the
WCOL bit will be set, indicating that a write
to the SSPBUF did not occur.
Internal SSPM3:SSPM0
Data Bus SSPADD<6:0>
Read Write
SSPBUF Baud
Rate
Generator
SDA Shift
clock arbitrate/WCOL detect
SDA in Clock
SSPSR
(hold off clock source)
MSb LSb
Receive Enable
Acknowledge
Generate
SCL
The master device generates all of the serial clock a) The user generates a Start Condition by setting
pulses and the START and STOP conditions. A trans- the START enable bit SEN (SSPCON2<0>).
fer is ended with a STOP condition or with a repeated b) SSPIF is set. The MSSP module will wait the
START condition. Since the repeated START condition required start time before any other operation
is also the beginning of the next serial transfer, the I2C takes place.
bus will not be released. c) The user loads the SSPBUF with the address to
In Master transmitter mode serial data is output through transmit.
SDA, while SCL outputs the serial clock. The first byte d) Address is shifted out the SDA pin until all 8 bits
transmitted contains the slave address of the receiving are transmitted.
device (7 bits) and the Read/Write (R/W) bit. In this e) The MSSP Module shifts in the ACK bit from the
case, the R/W bit will be logic ’0’. Serial data is trans- slave device and writes its value into the
mitted 8 bits at a time. After each byte is transmitted, an SSPCON2 register (SSPCON2<6>).
acknowledge bit is received. START and STOP condi- f) The MSSP module generates an interrupt at the
tions are output to indicate the beginning and the end end of the ninth clock cycle by setting the SSPIF
of a serial transfer. bit.
In Master receive mode, the first byte transmitted con- g) The user loads the SSPBUF with eight bits of
tains the slave address of the transmitting device data.
(7 bits) and the R/W bit. In this case, the R/W bit will be h) DATA is shifted out the SDA pin until all 8 bits are
logic ’1’. Thus, the first byte transmitted is a 7-bit slave transmitted.
address followed by a ’1’ to indicate receive bit. Serial i) The MSSP Module shifts in the ACK bit from the
data is received via SDA, while SCL outputs the serial slave device and writes its value into the
clock. Serial data is received 8 bits at a time. After each SSPCON2 register (SSPCON2<6>).
byte is received, an acknowledge bit is transmitted.
j) The MSSP module generates an interrupt at the
START and STOP conditions indicate the beginning
end of the ninth clock cycle by setting the SSPIF
and end of transmission.
bit.
The baud rate generator used for the SPI mode opera- k) The user generates a STOP condition by setting
tion is now used to set the SCL clock frequency for the STOP enable bit PEN (SSPCON2<2>).
either 100 kHz, 400 kHz or 1 MHz I2C operation. The
l) Interrupt is generated once the stop condition is
baud rate generator reload value is contained in the
complete.
lower 7 bits of the SSPADD register. The baud rate gen-
erator will automatically begin counting on a write to the
SSPBUF. Once the given operation is complete, (i.e.
transmission of the last data bit is followed by ACK), the
internal clock will automatically stop counting and the
SCL pin will remain in its last state.
SSPM3:SSPM0 SSPADD<6:0>
SDA DX DX-1
BRG decrements on
Q2 and Q4 cycles
BRG
03h 02h 01h 00h (hold off) 03h 02h
value
14.3.6 I2C MASTER MODE START CONDITION 14.3.6.1 WCOL STATUS FLAG
TIMING
If the user writes the SSPBUF when an START
To initiate a START condition, the user sets the start sequence is in progress, the WCOL is set and the con-
condition enable bit SEN (SSPCON2<0>). If the SDA tents of the buffer are unchanged (the write doesn’t
and SCL pins are sampled high, the baud rate genera- occur).
tor is re-loaded with the contents of SSPADD<6:0> and
Note: Because queueing of events is not
starts its count. If SCL and SDA are both sampled high
allowed, writing to the lower 5 bits of
when the baud rate generator times out (TBRG), the
SSPCON2 is disabled until the START
SDA pin is driven low. The action of the SDA being
condition is complete.
driven low, while SCL is high, is the START condition,
and causes the S bit (SSPSTAT<3>) to be set. Follow-
ing this, the baud rate generator is reloaded with the
contents of SSPADD<6:0> and resumes its count.
When the baud rate generator times out (TBRG), the
SEN bit (SSPCON2<0>) will be automatically cleared
by hardware, the baud rate generator is suspended
leaving the SDA line held low and the START condition
is complete.
Note: If at the beginning of the START condition,
the SDA and SCL pins are already sam-
pled low, or if during the START condition
the SCL line is sampled low before the SDA
line is driven low, a bus collision occurs, the
Bus Collision Interrupt Flag BCLIF is set,
the START condition is aborted, and the
I2C module is reset into its IDLE state.
SCL
TBRG
S
Set S (SSPSTAT<3>)
Write to SSPCON2
SDA = 1,
occurs here. At completion of start bit,
SDA = 1, SCL = 1
hardware clear RSEN bit
SCL(no change) and set SSPIF
1st Bit
SDA
Falling edge of ninth clock Write to SSPBUF occurs here.
End of Xmit
TBRG
SCL TBRG
Sr = Repeated Start
Transmission of a data byte, a 7-bit address or the other If the user writes the SSPBUF when a transmit is
half of a 10-bit address is accomplished by simply writ- already in progress, (i.e. SSPSR is still shifting out a
ing a value to the SSPBUF register. This action will set data byte), the WCOL is set and the contents of the
the buffer full flag bit, BF, and allow the baud rate gen- buffer are unchanged (the write doesn’t occur).
erator to begin counting and start the next transmis- WCOL must be cleared in software.
sion. Each bit of address/data will be shifted out onto
the SDA pin after the falling edge of SCL is asserted 14.3.8.3 ACKSTAT STATUS FLAG
(see data hold time specification parameter 106). SCL
is held low for one baud rate generator roll over count In transmit mode, the ACKSTAT bit (SSPCON2<6>) is
(TBRG). Data should be valid before SCL is released cleared when the slave has sent an acknowledge
high (see Data setup time specification parameter (ACK = 0), and is set when the slave does not acknowl-
107). When the SCL pin is released high, it is held that edge (ACK = 1). A slave sends an acknowledge when
way for TBRG. The data on the SDA pin must remain it has recognized its address (including a general call)
stable for that duration and some hold time after the or when the slave has properly received its data.
next falling edge of SCL. After the eighth bit is shifted
14.3.9 I2C MASTER MODE RECEPTION
out (the falling edge of the eighth clock), the BF flag is
cleared and the master releases SDA. allowing the Master mode reception is enabled by programming the
slave device being addressed to respond with an ACK receive enable bit, RCEN (SSPCON2<3>).
bit during the ninth bit time, if an address match occurs
or if data was received properly. The status of ACK is Note: The MSSP Module must be in an IDLE
written into the ACKDT bit on the falling edge of the STATE before the RCEN bit is set, or the
ninth clock. If the master receives an acknowledge, the RCEN bit will be disregarded.
acknowledge status bit, ACKSTAT, is cleared. If not, the The baud rate generator begins counting, and on each
bit is set. After the ninth clock, the SSPIF bit is set and rollover, the state of the SCL pin changes (high to low/
the master clock (baud rate generator) is suspended low to high) and data is shifted into the SSPSR. After
until the next data byte is loaded into the SSPBUF, leav- the falling edge of the eighth clock, the receive enable
ing SCL low and SDA unchanged (Figure 14-18). flag is automatically cleared, the contents of the
After the write to the SSPBUF, each bit of address will SSPSR are loaded into the SSPBUF, the BF flag bit is
be shifted out on the falling edge of SCL until all seven set, the SSPIF flag bit is set and the baud rate genera-
address bits and the R/W bit are completed. On the fall- tor is suspended from counting, holding SCL low. The
ing edge of the eighth clock, the master will de-assert MSSP is now in IDLE state, awaiting the next com-
the SDA pin allowing the slave to respond with an mand. When the buffer is read by the CPU, the BF flag
acknowledge. On the falling edge of the ninth clock, the bit is automatically cleared. The user can then send an
master will sample the SDA pin to see if the address acknowledge bit at the end of reception, by setting the
was recognized by a slave. The status of the ACK bit is acknowledge sequence enable bit ACKEN
loaded into the ACKSTAT status bit (SSPCON2<6>). (SSPCON2<4>).
Following the falling edge of the ninth clock transmis-
sion of the address, the SSPIF is set, the BF flag is 14.3.9.1 BF STATUS FLAG
cleared and the baud rate generator is turned off until
In receive operation, the BF bit is set when an address
another write to the SSPBUF takes place, holding SCL
or data byte is loaded into SSPBUF from SSPSR. It is
low and allowing SDA to float.
cleared when the SSPBUF register is read.
14.3.8.1 BF STATUS FLAG
14.3.9.2 SSPOV STATUS FLAG
In transmit mode, the BF bit (SSPSTAT<0>) is set when
In receive operation, the SSPOV bit is set when 8 bits
the CPU writes to SSPBUF and is cleared when all 8
are received into the SSPSR and the BF flag bit is
bits are shifted out.
already set from a previous reception.
SEN = 0
Transmitting Data or Second Half
Transmit Address to Slave R/W = 0 of 10-bit Address ACK
SDA A7 A6 A5 A4 A3 A2 A1 ACK = 0 D7 D6 D5 D4 D3 D2 D1 D0
Preliminary
BF (SSPSTAT<0>)
PEN
R/W
FIGURE 14-18: I 2C MASTER MODE WAVEFORM (TRANSMISSION, 7 OR 10-BIT ADDRESS)
Bus Master
ACK is not sent terminates
transfer
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
SCL S P
Data shifted in on falling edge of CLK Set SSPIF at end
of receive Set SSPIF interrupt
Set SSPIF interrupt at end of acknow-
Set SSPIF interrupt ledge sequence
at end of receive
at end of acknowledge
SSPIF sequence
Set P bit
Cleared in software Cleared in software Cleared in software Cleared in software (SSPSTAT<4>)
SDA = 0, SCL = 1 Cleared in
Preliminary
while CPU software and SSPIF
responds to SSPIF
BF
(SSPSTAT<0>) Last bit is shifted into SSPSR and
contents are unloaded into SSPBUF
SSPOV
ACKEN
DS39026B-page 141
PIC18CXX2
PIC18CXX2
14.3.10 ACKNOWLEDGE SEQUENCE TIMING 14.3.11 STOP CONDITION TIMING
An acknowledge sequence is enabled by setting the A stop bit is asserted on the SDA pin at the end of a
acknowledge sequence enable bit ACKEN receive/transmit by setting the Stop sequence enable
(SSPCON2<4>). When this bit is set, the SCL pin is bit, PEN (SSPCON2<2>). At the end of a receive/trans-
pulled low and the contents of the acknowledge data bit mit the SCL line is held low after the falling edge of the
is presented on the SDA pin. If the user wishes to gen- ninth clock. When the PEN bit is set, the master will
erate an acknowledge, then the ACKDT bit should be assert the SDA line low. When the SDA line is sampled
cleared. If not, the user should set the ACKDT bit low, the baud rate generator is reloaded and counts
before starting an acknowledge sequence. The baud down to 0. When the baud rate generator times out, the
rate generator then counts for one rollover period SCL pin will be brought high, and one TBRG (baud rate
(TBRG) and the SCL pin is de-asserted (pulled high). generator rollover count) later, the SDA pin will be de-
When the SCL pin is sampled high (clock arbitration), asserted. When the SDA pin is sampled high while SCL
the baud rate generator counts for TBRG. The SCL pin is high, the P bit (SSPSTAT<4>) is set. A TBRG later, the
is then pulled low. Following this, the ACKEN bit is auto- PEN bit is cleared and the SSPIF bit is set (Figure 14-
matically cleared, the baud rate generator is turned off 21).
and the MSSP module then goes into IDLE mode
(Figure 14-20). 14.3.11.1 WCOL STATUS FLAG
14.3.10.1 WCOL STATUS FLAG If the user writes the SSPBUF when a STOP sequence
is in progress, then the WCOL bit is set and the con-
If the user writes the SSPBUF when an acknowledge tents of the buffer are unchanged (the write doesn’t
sequence is in progress, then WCOL is set and the occur).
contents of the buffer are unchanged (the write doesn’t
occur).
FIGURE 14-20: ACKNOWLEDGE SEQUENCE WAVEFORM
Acknowledge sequence starts here, ACKEN automatically cleared
Write to SSPCON2
ACKEN = 1, ACKDT = 0
TBRG TBRG
SDA D0 ACK
SCL 8 9
SSPIF
SDA ACK
P
TBRG TBRG TBRG
Clock arbitration occurs when the master, during any While in sleep mode, the I2C module can receive
receive, transmit or repeated start/stop condition, de- addresses or data, and when an address match or
asserts the SCL pin (SCL allowed to float high). When complete byte transfer occurs, wake the processor from
the SCL pin is allowed to float high, the baud rate gen- sleep (if the MSSP interrupt is enabled).
erator (BRG) is suspended from counting until the SCL
pin is actually sampled high. When the SCL pin is sam- 14.3.14 EFFECT OF A RESET
pled high, the baud rate generator is reloaded with the
A reset disables the MSSP module and terminates the
contents of SSPADD<6:0> and begins counting. This
current transfer.
ensures that the SCL high time will always be at least
one BRG rollover count in the event that the clock is
held low by an external device (Figure 14-22).
FIGURE 14-22: CLOCK ARBITRATION TIMING IN MASTER TRANSMIT MODE
BRG overflow,
Release SCL,
If SCL = 1 Load BRG with
SSPADD<6:0>, and start count BRG overflow occurs,
to measure high time interval Release SCL, Slave device holds SCL low.
SCL = 1 BRG starts counting
clock high interval.
SCL
SDA
In multi-master operation, the SDA line must be moni- If a START, Repeated Start, STOP, or Acknowledge
tored, for arbitration, to see if the signal level is the condition was in progress when the bus collision
expected output level. This check is performed in hard- occurred, the condition is aborted, the SDA and SCL
ware, with the result placed in the BCLIF bit. lines are de-asserted, and the respective control bits in
the SSPCON2 register are cleared. When the user ser-
The states where arbitration can be lost are: vices the bus collision interrupt service routine, and if
• Address Transfer the I2C bus is free, the user can resume communication
• Data Transfer by asserting a START condition.
• A Start Condition The Master will continue to monitor the SDA and SCL
• A Repeated Start Condition pins. If a STOP condition occurs, the SSPIF bit will be
• An Acknowledge Condition set.
14.3.16 MULTI -MASTER COMMUNICATION, BUS A write to the SSPBUF will start the transmission of
COLLISION, AND BUS ARBITRATION data at the first data bit, regardless of where the trans-
mitter left off when the bus collision occurred.
Multi-Master mode support is achieved by bus arbitra-
In multi-master mode, the interrupt generation on the
tion. When the master outputs address/data bits onto
detection of start and stop conditions allows the deter-
the SDA pin, arbitration takes place when the master
mination of when the bus is free. Control of the I2C bus
outputs a '1' on SDA by letting SDA float high and
can be taken when the P bit is set in the SSPSTAT reg-
another master asserts a '0'. When the SCL pin floats
ister, or the bus is idle and the S and P bits are cleared.
high, data should be stable. If the expected data on
SDA is a '1' and the data sampled on the SDA pin = '0',
FIGURE 14-23: BUS COLLISION TIMING FOR TRANSMIT AND ACKNOWLEDGE
SDA
BCLIF
SDA
SCL
Set SEN, enable start SEN cleared automatically because of bus collision.
condition if SDA = 1, SCL=1 SSP module reset into idle state.
SEN
SSPIF
SDA = 0, SCL = 1
TBRG TBRG
SDA
FIGURE 14-26: BRG RESET DUE TO SDA ARBITRATION DURING START CONDITION
SDA = 0, SCL = 1
Set S Set SSPIF
Less than TBRG
TBRG
SCL S
SCL pulled low after BRG
Timeout
SEN
Set SEN, enable start
sequence if SDA = 1, SCL = 1
BCLIF ’0’
SSPIF
SDA = 0, SCL = 1 Interrupts cleared
Set SSPIF in software.
SDA
SCL
RSEN
BCLIF
Cleared in software
S '0'
SSPIF '0'
TBRG TBRG
SDA
SCL
S ’0’
SSPIF
PEN
BCLIF
P ’0’
SSPIF ’0’
SDA
Assert SDA SCL goes low before SDA goes high
Set BCLIF
SCL
PEN
BCLIF
P ’0’
SSPIF ’0’
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
TXSTA CSRC TX9 TXEN SYNC — BRGH TRMT TX9D 0000 -010 0000 -010
RCSTA SPEN RX9 SREN CREN — FERR OERR RX9D 0000 -00x 0000 -00x
SPBRG Baud Rate Generator Register 0000 0000 0000 0000
Legend: x = unknown, - = unimplemented read as '0'.
Shaded cells are not used by the BRG.
1.2 NA - - NA - - NA - - NA - -
2.4 NA - - NA - - NA - - NA - -
9.6 NA - - NA - - 9.766 +1.73 255 9.622 +0.23 185
19.2 19.53 +1.73 255 19.23 +0.16 207 19.23 +0.16 129 19.24 +0.23 92
76.8 76.92 +0.16 64 76.92 +0.16 51 75.76 -1.36 32 77.82 +1.32 22
96 96.15 +0.16 51 95.24 -0.79 41 96.15 +0.16 25 94.20 -1.88 18
300 294.1 -1.96 16 307.69 +2.56 12 312.5 +4.17 7 298.3 -0.57 5
500 500 0 9 500 0 7 500 0 4 NA - -
HIGH 5000 - 0 4000 - 0 2500 - 0 1789.8 - 0
LOW 19.53 - 255 15.625 - 255 9.766 - 255 6.991 - 255
BAUD FOSC = 5.0688 MHz 4 MHz SPBRG 3.579545 MHz SPBRG 1 MHz SPBRG 32.768 kHz SPBRG
RATE value value value value
(K) % SPBRG % (decimal) % (decimal) % (decimal) % (decimal)
0.3 NA - - NA - - NA - - NA - - 0.303 +1.14 26
1.2 NA - - NA - - NA - - 1.202 +0.16 207 1.170 -2.48 6
2.4 NA - - NA - - NA - - 2.404 +0.16 103 NA - -
9.6 9.6 0 131 9.615 +0.16 103 9.622 +0.23 92 9.615 +0.16 25 NA - -
19.2 19.2 0 65 19.231 +0.16 51 19.04 -0.83 46 19.24 +0.16 12 NA - -
76.8 79.2 +3.13 15 76.923 +0.16 12 74.57 -2.90 11 83.34 +8.51 2 NA - -
96 97.48 +1.54 12 1000 +4.17 9 99.43 +3.57 8 NA - - NA - -
300 316.8 +5.60 3 NA - - 298.3 -0.57 2 NA - - NA - -
500 NA - - NA - - NA - - NA - - NA - -
HIGH 1267 - 0 100 - 0 894.9 - 0 250 - 0 8.192 - 0
LOW 4.950 - 255 3.906 - 255 3.496 - 255 0.9766 - 255 0.032 - 255
0.3 NA - - NA - - NA - - NA - -
1.2 1.221 +1.73 255 1.202 +0.16 207 1.202 +0.16 129 1.203 +0.23 92
2.4 2.404 +0.16 129 2.404 +0.16 103 2.404 +0.16 64 2.380 -0.83 46
9.6 9.469 -1.36 32 9.615 +0.16 25 9.766 +1.73 15 9.322 -2.90 11
19.2 19.53 +1.73 15 19.23 +0.16 12 19.53 +1.73 7 18.64 -2.90 5
76.8 78.13 +1.73 3 83.33 +8.51 2 78.13 +1.73 1 NA - -
96 104.2 +8.51 2 NA - - NA - - NA - -
300 312.5 +4.17 0 NA - - NA - - NA - -
500 NA - - NA - - NA - - NA - -
HIGH 312.5 - 0 250 - 0 156.3 - 0 111.9 - 0
LOW 1.221 - 255 0.977 - 255 0.6104 - 255 0.437 - 255
BAUD FOSC = 5.0688 MHz 4 MHz SPBRG 3.579545 MHz SPBRG 1 MHz SPBRG 32.768 kHz SPBRG
RATE value value value value
(K) % SPBRG % (decimal) % (decimal) % (decimal) % (decimal)
0.3 0.31 +3.13 255 0.3005 -0.17 207 0.301 +0.23 185 0.300 +0.16 51 0.256 -14.67 1
1.2 1.2 0 65 1.202 +1.67 51 1.190 -0.83 46 1.202 +0.16 12 NA - -
2.4 2.4 0 32 2.404 +1.67 25 2.432 +1.32 22 2.232 -6.99 6 NA - -
9.6 9.9 +3.13 7 NA - - 9.322 -2.90 5 NA - - NA - -
19.2 19.8 +3.13 3 NA - - 18.64 -2.90 2 NA - - NA - -
76.8 79.2 +3.13 0 NA - - NA - - NA - - NA - -
96 NA - - NA - - NA - - NA - - NA - -
300 NA - - NA - - NA - - NA - - NA - -
500 NA - - NA - - NA - - NA - - NA - -
HIGH 79.2 - 0 62.500 - 0 55.93 - 0 15.63 - 0 0.512 - 0
LOW 0.3094 - 255 3.906 - 255 0.2185 - 255 0.0610 - 255 0.0020 - 255
BAUD FOSC = 5.068 SPBRG 4 MHz SPBRG 3.579 MHz SPBRG 1 MHz SPBRG 32.768 kHz SPBRG
RATE value value value value value
(K) % (decimal) % (decimal) % (decimal) % (decimal) % (decimal)
9.6 9.6 0 32 NA - - 9.727 +1.32 22 8.928 -6.99 6 NA - -
19.2 18.645 -2.94 16 1.202 +0.17 207 18.643 -2.90 11 20.833 +8.51 2 NA - -
38.4 39.6 +3.12 7 2.403 +0.13 103 37.286 -2.90 5 31.25 -18.61 1 NA - -
57.6 52.8 -8.33 5 9.615 +0.16 25 55.930 -2.90 3 62.5 +8.51 0 NA - -
115.2 105.6 -8.33 2 19.231 +0.16 12 111.86 -2.90 1 NA - - NA - -
250 NA - - NA - - 223.72 -10.51 0 NA - - NA - -
625 NA - - NA - - NA - - NA - - NA - -
1250 NA - - NA - - NA - - NA - - NA - -
SPBRG
TX9
Baud Rate Generator
TX9D
Write to TXREG
Word 1
BRG output
(shift clock)
RC6/TX/CK (pin)
Start Bit Bit 0 Bit 1 Bit 7/8 Stop Bit
WORD 1
TXIF bit
(Transmit buffer
reg. empty flag)
WORD 1
TRMT bit
Transmit Shift Reg
(Transmit shift
reg. empty flag)
Write to TXREG
Word 1 Word 2
BRG output
(shift clock)
RC6/TX/CK (pin)
Start Bit Bit 0 Bit 1 Bit 7/8 Stop Bit Start Bit Bit 0
TXIF bit
(interrupt reg. flag) WORD 1 WORD 2
SPBRG
÷ 64 MSb RSR Register LSb
or
÷ 16
Baud Rate Generator Stop (8) 7 • • • 1 0 Start
RC7/RX/DT
Pin Buffer Data
and Control Recovery RX9
Interrupt RCIF
Data Bus
RCIE
RCIF
(interrupt flag)
OERR bit
CREN
Note: This timing diagram shows three words appearing on the RX input. The RCREG (receive buffer) is read after the third word,
causing the OERR (overrun) bit to be set.
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
Write to
TXREG reg
Write word1 Write word2
TXIF bit
(Interrupt flag)
’1’ ’1’
TXEN bit
Note: Sync master mode; SPBRG = ’0’. Continuous transmission of two 8-bit words
RC6/TX/CK pin
Write to
TXREG reg
TXIF bit
TRMT bit
TXEN bit
Once synchronous mode is selected, reception is 1. Initialize the SPBRG register for the appropriate
enabled by setting either enable bit SREN (RCSTA<5>) baud rate. (Section 15.1)
or enable bit CREN (RCSTA<4>). Data is sampled on 2. Enable the synchronous master serial port by
the RC7/RX/DT pin on the falling edge of the clock. If setting bits SYNC, SPEN and CSRC.
enable bit SREN is set, only a single word is received. 3. Ensure bits CREN and SREN are clear.
If enable bit CREN is set, the reception is continuous 4. If interrupts are desired, set enable bit RCIE.
until CREN is cleared. If both bits are set, then CREN 5. If 9-bit reception is desired, set bit RX9.
takes precedence.
6. If a single reception is required, set bit SREN.
For continuous reception, set bit CREN.
7. Interrupt flag bit RCIF will be set when reception
is complete and an interrupt will be generated if
the enable bit RCIE was set.
8. Read the RCSTA register to get the ninth bit (if
enabled) and determine if any error occurred
during reception.
9. Read the 8-bit received data by reading the
RCREG register.
10. If any error occurred, clear the error by clearing
bit CREN.
TABLE 15-9: REGISTERS ASSOCIATED WITH SYNCHRONOUS MASTER RECEPTION
Value on Value on all
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR, other
BOR Resets
INTCON GIE/ PEIE/ TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 0000 000u
GIEH GIEL
PIR1 PSPIF(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
IPR1 PSPIP(1) ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 0000 0000 0000 0000
RCSTA SPEN RX9 SREN CREN — FERR OERR RX9D 0000 -00x 0000 -00x
RCREG USART Receive Register 0000 0000 0000 0000
TXSTA CSRC TX9 TXEN SYNC — BRGH TRMT TX9D 0000 -010 0000 -010
SPBRG Baud Rate Generator Register 0000 0000 0000 0000
Legend: x = unknown, — = unimplemented read as '0'.
Shaded cells are not used for Synchronous Master Reception.
Note 1: The PSPIF, PSPIE and PSPIP bits are reserved on the PIC18C2X2 devices. Always maintain these bits clear.
Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
RC7/RX/DT pin bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7
RC6/TX/CK pin
Write to
bit SREN
SREN bit
RCIF bit
(interrupt)
Read
RXREG
Note: Timing diagram demonstrates SYNC master mode with bit SREN = ’1’ and bit BRGH = ’0’.
bit 7:6 ADCS1:ADCS0: A/D Conversion Clock Select bits (shown in bold)
000 = FOSC/2
001 = FOSC/8
010 = FOSC/32
011 = FRC (clock derived from the internal A/D RC oscillator)
100 = FOSC/4
101 = FOSC/16
110 = FOSC/64
111 = FRC (clock derived from the internal A/D RC oscillator)
Note: The ADCS2 bit is located in the ADCON1 register
bit 5:3 CHS2:CHS0: Analog Channel Select bits
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)
Note: The PIC18C2X2 devices do not implement the full 8 A/D channels, the unimple-
mented selections are reserved. Do not select any unimplemented channel.
bit 2 GO/DONE: A/D Conversion Status bit
When ADON = 1
1 = A/D conversion in progress (setting this bit starts the A/D conversion which is automatically
cleared by hardware when the A/D conversion is complete)
0 = A/D conversion not in progress
bit 1 Unimplemented: Read as ’0’
bit 0 ADON: A/D On bit
1 = A/D converter module is powered up
0 = A/D converter module is shut off and consumes no operating current
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
PCFG AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0 VREF+ VREF- C/R
0000 A A A A A A A A VDD VSS 8/0
0001 A A A A VREF+ A A A AN3 VSS 7/1
0010 D D D A A A A A VDD VSS 5/0
0011 D D D A VREF+ A A A AN3 VSS 4/1
0100 D D D D A D A A VDD VSS 3/0
0101 D D D D VREF+ D A A AN3 VSS 2/1
011x D D D D D D D D — — 0/0
1000 A A A A VREF+ VREF- A A AN3 AN2 6/2
1001 D D A A A A A A VDD VSS 6/0
1010 D D A A VREF+ A A A AN3 VSS 5/1
1011 D D A A VREF+ VREF- A A AN3 AN2 4/2
1100 D D D A VREF+ VREF- A A AN3 AN2 3/2
1101 D D D D VREF+ VREF- A A AN3 AN2 2/2
1110 D D D D D D D A VDD VSS 1/0
1111 D D D D VREF+ VREF- D A AN3 AN2 1/2
A = Analog input D = Digital I/O
C/R = # of analog input channels / # of A/D voltage references
Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
- n = Value at POR reset ’1’ = Bit is set ’0’ = Bit is cleared x = Bit is unknown
Note: On any device reset, the port pins that are multiplexed with analog functions (ANx) are
forced to be an analog input.
111
AN7
110
AN6
101
AN5
100
AN4
VAIN
(Input voltage) 011
AN3
010
10-bit AN2
Converter
A/D 001
AN1
PCFG0 000
VDD AN0
VREF+
Reference
voltage
VREF-
VSS
CPIN I leakage
VAIN CHOLD = 120 pF
5 pF VT = 0.6V
± 500 nA
VSS
Conversion Starts
Holding capacitor is disconnected from analog input (typically 100 ns)
Set GO bit
VA
VB
Voltage
Legend:
VA = LVD trip point
VB = Minimum valid device
operating voltage
TA TB
Time
VDD LVDIN
LVD Control
Register
16 to 1 MUX
LVDIF
Legend:
R = Readable bit W = Writable bit
U = Unimplemented bit, read as ‘0’ - n = Value at POR reset
VDD
.
VLVD
LVDIF
Enable LVD
Internally Generated 50 ms
Reference stable
LVDIF cleared in software
CASE 2:
VDD
VLVD
LVDIF
Enable LVD
Internally Generated 50 ms
Reference stable
Legend:
R = Readable bit P = Programmable bit U = Unimplemented bit, read as ‘0’
- n = Value when device is unprogrammed u = Unchanged from programmed state
CP: Code Protection bits (apply when in Code Protected Microcontroller Mode)
1 = Program memory code protection off
0 = All of program memory code protected
Legend:
R = Readable bit P = Programmable bit U = Unimplemented bit, read as ‘0’
- n = Value when device is unprogrammed u = Unchanged from programmed state
Legend:
R = Readable bit P = Programmable bit U = Unimplemented bit, read as ‘0’
- n = Value when device is unprogrammed u = Unchanged from programmed state
Legend:
R = Readable bit P = Programmable bit U = Unimplemented bit, read as ‘0’
- n = Value when device is unprogrammed u = Unchanged from programmed state
Legend:
R = Readable bit P = Programmable bit U = Unimplemented bit, read as ‘0’
- n = Value when device is unprogrammed u = Unchanged from programmed state
Legend:
R = Readable bit P = Programmable bit U = Unimplemented bit, read as ‘0’
- n = Value when device is unprogrammed u = Unchanged from programmed state
Legend:
R = Readable bit W = Writable bit
U = Unimplemented bit, read as ‘0’ - n = Value at POR reset
8 - to - 1 MUX WDTPS2:WDTPS0
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
OSC1
CLKOUT(4) TOST(2)
INT pin
INTF flag
(INTCON<1>) Interrupt Latency(3)
INSTRUCTION FLOW
PC PC PC+2 PC+4 PC+4 PC + 4 0008h 000Ah
Instruction Inst(0008h)
fetched Inst(PC) = SLEEP Inst(PC + 2) Inst(PC + 4) Inst(000Ah)
Most byte-oriented instructions have three operands: The double word instructions execute in two instruction
cycles.
1. The file register (specified by the value of ’f’)
One instruction cycle consists of four oscillator periods.
2. The destination of the result
Thus, for an oscillator frequency of 4 MHz, the normal
(specified by the value of ’d’)
instruction execution time is 1 µs. If a conditional test is
3. The accessed memory true or the program counter is changed as a result of an
(specified by the value of ’a’) instruction, the instruction execution time is 2 µs. Two
'f' represents a file register designator and 'd' repre- word branch instructions (if true) would take 3 µs.
sents a destination designator. The file register desig- Figure 19-1 shows the general formats that the instruc-
nator specifies which file register is to be used by the tions can have.
instruction.
All examples use the following format to represent a
The destination designator specifies where the result of hexadecimal number:
the operation is to be placed. If 'd' is zero, the result is
placed in the WREG register. If 'd' is one, the result is 0xhh
placed in the file register specified in the instruction. where h signifies a hexadecimal digit.
All bit-oriented instructions have three operands: The Instruction Set Summary, shown in Table 19-2,
1. The file register (specified by the value of ’f’) lists the instructions recognized by the Microchip
assembler (MPASM).
2. The bit in the file register
(specified by the value of ’b’) Section 19.1 provides a description of each instruction.
3. The accessed memory
(specified by the value of ’a’)
'b' represents a bit field designator which selects the
number of the bit affected by the operation, while 'f' rep-
resents the number of the file in which the bit is located.
The literal instructions may use some of the following
operands:
• A literal value to be loaded into a file register
(specified by the value of ’k’)
• The desired FSR register to load the literal value
into (specified by the value of ’f’)
• No operand required
(specified by the value of ’—’)
15 12 11 9 8 7 0
OPCODE b (BIT #) a f (FILE #) BSF MYREG, bit, B
Literal operations
15 8 7 0
OPCODE k (literal) MOVLW 0x7F
k = 8-bit immediate value
Control operations
CALL, GOTO and Branch operations
15 8 7 0
OPCODE n<7:0> (literal) GOTO Label
15 12 11 0
1111 n<19:8> (literal)
15 8 7 0
CALL MYFUNC
OPCODE S n<7:0> (literal)
15 12 11 0
n<19:8> (literal)
S = Fast bit
15 11 10 0
OPCODE n<10:0> (literal) BRA MYFUNC
15 8 7 0
OPCODE n<7:0> (literal) BC MYFUNC
CONTROL OPERATIONS
BC n Branch if Carry 1 (2) 1110 0010 nnnn nnnn None
BN n Branch if Negative 1 (2) 1110 0110 nnnn nnnn None
BNC n Branch if Not Carry 1 (2) 1110 0011 nnnn nnnn None
BNN n Branch if Not Negative 1 (2) 1110 0111 nnnn nnnn None
BNOV n Branch if Not Overflow 1 (2) 1110 0101 nnnn nnnn None
BNZ n Branch if Not Zero 2 1110 0001 nnnn nnnn None
BOV n Branch if Overflow 1 (2) 1110 0100 nnnn nnnn None
BRA n Branch Unconditionally 1 (2) 1101 0nnn nnnn nnnn None
BZ n Branch if Zero 1 (2) 1110 0000 nnnn nnnn None
CALL n, s Call subroutine1st word 2 1110 110s kkkk kkkk None
2nd word 1111 kkkk kkkk kkkk
CLRWDT — Clear Watchdog Timer 1 0000 0000 0000 0100 TO, PD
DAW — Decimal Adjust WREG 1 0000 0000 0000 0111 C
GOTO n Go to address1st word 2 1110 1111 kkkk kkkk None
2nd word 1111 kkkk kkkk kkkk
NOP — No Operation 1 0000 0000 0000 0000 None
NOP — No Operation (Note 4) 1 1111 xxxx xxxx xxxx None
POP — Pop top of return stack (TOS) 1 0000 0000 0000 0110 None
PUSH — Push top of return stack (TOS) 1 0000 0000 0000 0101 None
RCALL n Relative Call 2 1101 1nnn nnnn nnnn None
RESET Software device RESET 1 0000 0000 1111 1111 All
RETFIE s Return from interrupt enable 2 0000 0000 0001 000s GIE/GIEH,
PEIE/GIEL
RETLW k Return with literal in WREG 2 0000 1100 kkkk kkkk None
RETURN s Return from Subroutine 2 0000 0000 0001 001s None
SLEEP — Go into standby mode 1 0000 0000 0000 0011 TO, PD
Note 1: When a PORT register is modified as a function of itself (e.g., MOVF PORTB, 1, 0), the value used will be that
value present on the pins themselves. For example, if the data latch is ’1’ for a pin configured as input and is driven
low by an external device, the data will be written back with a ’0’.
2: If this instruction is executed on the TMR0 register (and, where applicable, d = 1), the prescaler will be cleared if
assigned.
3: If Program Counter (PC) is modified or a conditional test is true, the instruction requires two cycles. The second
cycle is executed as a NOP.
4: Some instructions are 2 word instructions. The second word of these instruction will be executed as a NOP, unless
the first word of the instruction retrieves the information embedded in these 16-bits. This ensures that all program
memory locations have a valid instruction.
5: If the table write starts the write cycle to internal memory, the write will continue until terminated.
ADDWFC ADD WREG and Carry bit to f ANDLW AND literal with WREG
Syntax: [ label ] ADDWFC f,d,a Syntax: [ label ] ANDLW k
Operands: 0 ≤ f ≤ 255 Operands: 0 ≤ k ≤ 255
d ∈ [0,1] Operation: (WREG) .AND. k → WREG
a ∈ [0,1]
Status Affected: N,Z
Operation: (WREG) + (f) + (C) → dest
Encoding: 0000 1011 kkkk kkkk
Status Affected: N,OV, C, DC, Z
Description: The contents of WREG are AND’ed
Encoding: 0010 00da ffff ffff
with the 8-bit literal 'k'. The result is
Description: Add WREG, the Carry Flag and data placed in WREG.
memory location ’f’. If ’d’ is 0, the
Words: 1
result is placed in WREG. If ’d’ is 1,
the result is placed in data memory Cycles: 1
location 'f'. If ’a’ is 0, the Access Q Cycle Activity:
Bank will be selected. If ’a’ is 1, the Q1 Q2 Q3 Q4
BSR will not be overridden. Decode Read literal Process Write to
Words: 1 ’k’ Data WREG
Cycles: 1
Example: ANDLW 0x5F
Q Cycle Activity:
Q1 Q2 Q3 Q4 Before Instruction
Decode Read Process Write to WREG = 0xA3
register ’f’ Data destination After Instruction
WREG = 0x03
Example: ADDWFC REG, 0, 1
Before Instruction
Carry bit= 1
REG = 0x02
WREG = 0x4D
After Instruction
Carry bit= 0
REG = 0x02
WREG = 0x50
Encoding: 0001 01da ffff ffff Description: If the Carry bit is ’1’, then the pro-
gram will branch.
Description: The contents of WREG are AND’ed
The 2’s complement number ’2n’ is
with register 'f'. If 'd' is 0, the result added to the PC. Since the PC will
is stored in WREG. If 'd' is 1, the have incremented to fetch the next
result is stored back in register 'f' instruction, the new address will be
(default). If ’a’ is 0, the Access PC+2+2n. This instruction is then
Bank will be selected. If ’a’ is 1, the a two-cycle instruction.
BSR will not be overridden
Words: 1
(default).
Cycles: 1(2)
Words: 1
Q Cycle Activity:
Cycles: 1
If Jump:
Q Cycle Activity: Q1 Q2 Q3 Q4
Q1 Q2 Q3 Q4 Decode Read literal Process Write to PC
Decode Read Process Write to ’n’ Data
register ’f’ Data destination No No No No
operation operation operation operation
Example: ANDWF REG, 0, 0 If No Jump:
Before Instruction Q1 Q2 Q3 Q4
WREG = 0x17 Decode Read literal Process No
REG = 0xC2 ’n’ Data operation
After Instruction
WREG = 0x02 Example: HERE BC 5
REG = 0xC2 Before Instruction
PC = address (HERE)
After Instruction
If Carry = 1;
PC = address (HERE+12)
If Carry = 0;
PC = address (HERE+2)
Cycles: 2 Words: 1
BTFSC Bit Test File, Skip if Clear BTFSS Bit Test File, Skip if Set
Syntax: [ label ] BTFSC f,b,a Syntax: [ label ] BTFSS f,b,a
Operands: 0 ≤ f ≤ 255 Operands: 0 ≤ f ≤ 255
0≤b≤7 0≤b<7
a ∈ [0,1] a ∈ [0,1]
Operation: skip if (f<b>) = 0 Operation: skip if (f<b>) = 1
Status Affected: None Status Affected: None
Encoding: 1011 bbba ffff ffff Encoding: 1010 bbba ffff ffff
Description: If bit 'b' in register ’f' is 0, then the Description: If bit 'b' in register 'f' is 1 then the next
next instruction is skipped. instruction is skipped.
If bit 'b' is 0, then the next instruction If bit 'b' is 1, then the next instruction
fetched during the current instruction fetched during the current instruc-
execution is discarded, and a NOP is tion execution, is discarded and an
executed instead, making this a two- NOP is executed instead, making this
cycle instruction. If ’a’ is 0, the a two-cycle instruction. If ’a’ is 0, the
Access Bank will be selected, over- Access Bank will be selected, over-
riding the BSR value. If ’a’ = 1, then riding the BSR value. If ’a’ = 1, then
the bank will be selected as per the the bank will be selected as per the
BSR value (default). BSR value (default).
Words: 1 Words: 1
Cycles: 1(2) Cycles: 1(2)
Note: 3 cycles if skip and followed Note: 3 cycles if skip and followed
by a 2-word instruction by a 2-word instruction
Q Cycle Activity: Q Cycle Activity:
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
Decode Read Process Data No Decode Read Process Data No
register ’f’ operation register ’f’ operation
If skip: If skip:
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
No No No No No No No No
operation operation operation operation operation operation operation operation
If skip and followed by 2-word instruction: If skip and followed by 2-word instruction:
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
No No No No No No No No
operation operation operation operation operation operation operation operation
No No No No No No No No
operation operation operation operation operation operation operation operation
Description: Clears the contents of the specified Encoding: 0000 0000 0000 0100
register. If ’a’ is 0, the Access Bank Description: CLRWDT instruction resets the
will be selected, overriding the BSR Watchdog Timer. It also resets the
value. If ’a’ = 1, then the bank will postscaler of the WDT. Status bits
be selected as per the BSR value TO and PD are set.
(default). Words: 1
Words: 1 Cycles: 1
Cycles: 1 Q Cycle Activity:
Q Cycle Activity: Q1 Q2 Q3 Q4
Q1 Q2 Q3 Q4 Decode No Process No
Decode Read Process Write operation Data operation
register ’f’ Data register ’f’
Example: CLRWDT
Example: CLRF FLAG_REG,1
Before Instruction
Before Instruction WDT counter = ?
FLAG_REG = 0x5A After Instruction
After Instruction WDT counter = 0x00
FLAG_REG = 0x00 WDT Postscaler = 0
TO = 1
PD = 1
Description: The contents of register ’f’ are com- Status Affected: None
plemented. If ’d’ is 0 the result is Encoding: 0110 001a ffff ffff
stored in WREG. If ’d’ is 1 the result Description: Compares the contents of data
is stored back in register ’f’ memory location 'f' to the contents
(default). If ’a’ is 0, the Access of WREG by performing an
Bank will be selected, overriding unsigned subtraction.
the BSR value. If ’a’ = 1, then the
bank will be selected as per the If 'f' = WREG, then the fetched
BSR value (default). instruction is discarded and an NOP
is executed instead making this a
Words: 1
two-cycle instruction. If ’a’ is 0, the
Cycles: 1 Access Bank will be selected, over-
Q Cycle Activity: riding the BSR value. If ’a’ = 1,
then the bank will be selected as
Q1 Q2 Q3 Q4
per the BSR value (default).
Decode Read Process Write to
register ’f’ Data destination Words: 1
Cycles: 1(2)
Example: COMF REG, 0, 0 Note: 3 cycles if skip and followed
by a 2-word instruction
Before Instruction
REG = 0x13 Q Cycle Activity:
After Instruction Q1 Q2 Q3 Q4
REG = 0x13 Decode Read Process No
WREG = 0xEC register ’f’ Data operation
If skip:
Q1 Q2 Q3 Q4
No No No No
operation operation operation operation
If skip and followed by 2-word instruction:
Q1 Q2 Q3 Q4
No No No No
operation operation operation operation
No No No No
operation operation operation operation
Compare f with WREG, skip if f > Compare f with WREG, skip if f <
CPFSGT CPFSLT
WREG WREG
Syntax: [ label ] CPFSGT f,a Syntax: [ label ] CPFSLT f,a
Operands: 0 ≤ f ≤ 255 Operands: 0 ≤ f ≤ 255
a ∈ [0,1] a ∈ [0,1]
Operation: (f) − (WREG), Operation: (f) – (WREG),
skip if (f) > (WREG) skip if (f) < (WREG)
(unsigned comparison) (unsigned comparison)
Status Affected: None Status Affected: None
Encoding: 0110 010a ffff ffff Encoding: 0110 000a ffff ffff
Description: Compares the contents of data Description: Compares the contents of data
memory location ’f’ to the contents memory location 'f' to the contents
of the WREG by performing an of WREG by performing an
unsigned subtraction. unsigned subtraction.
If the contents of ’f’ are greater than If the contents of 'f' are less than
the contents of , then the fetched the contents of WREG, then the
instruction is discarded and a NOP fetched instruction is discarded and
is executed instead making this a a NOP is executed instead making
two-cycle instruction. If ’a’ is 0, the this a two-cycle instruction. If ’a’ is
Access Bank will be selected, over- 0, the Access Bank will be
riding the BSR value. If ’a’ = 1, selected. If ’a’ is 1 the BSR will not
then the bank will be selected as be overridden (default).
per the BSR value (default). Words: 1
Words: 1 Cycles: 1(2)
Cycles: 1(2) Note: 3 cycles if skip and followed
Note: 3 cycles if skip and followed by a 2-word instruction
by a 2-word instruction Q Cycle Activity:
Q Cycle Activity: Q1 Q2 Q3 Q4
Q1 Q2 Q3 Q4 Decode Read Process No
Decode Read Process No register ’f’ Data operation
register ’f’ Data operation If skip:
If skip: Q1 Q2 Q3 Q4
Q1 Q2 Q3 Q4 No No No No
No No No No operation operation operation operation
operation operation operation operation If skip and followed by 2-word instruction:
If skip and followed by 2-word instruction: Q1 Q2 Q3 Q4
Q1 Q2 Q3 Q4 No No No No
No No No No operation operation operation operation
operation operation operation operation No No No No
No No No No operation operation operation operation
operation operation operation operation
Example: HERE CPFSLT REG, 1
Example: HERE CPFSGT REG, 0 NLESS :
NGREATER : LESS :
GREATER : Before Instruction
Before Instruction PC = Address (HERE)
PC = Address (HERE) W = ?
WREG = ? After Instruction
After Instruction If REG < WREG;
PC = Address (LESS)
If REG > WREG;
If REG ≥ WREG;
PC = Address (GREATER)
PC = Address (NLESS)
If REG ≤ WREG;
PC = Address (NGREATER)
Q1 Q2 Q3 Q4 Before Instruction
Decode Read Process Write CNT = 0x01
Z = 0
register Data WREG
WREG After Instruction
CNT = 0x00
Example1: DAW Z = 1
Before Instruction
WREG = 0xA5
C = 0
DC = 0
After Instruction
WREG = 0x05
C = 1
DC = 0
Example 2:
Before Instruction
WREG = 0xCE
C = 0
DC = 0
After Instruction
WREG = 0x34
C = 1
DC = 0
Words: 2
Cycles: 2 (3)
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read Process No
register ’f’ Data operation
(src)
Decode No No Write
operation operation register ’f’
No dummy (dest)
read
Description: The eight bit literal ’k’ is loaded into Encoding: 0110 111a ffff ffff
Cycles: 1
Example:
Q Cycle Activity:
Q1 Q2 Q3 Q4
None.
Decode Read Process Write
register ’f’ Data register ’f’
POP Pop Top of Return Stack PUSH Push Top of Return Stack
Syntax: [ label ] POP Syntax: [ label ] PUSH
Operands: None Operands: None
Operation: (TOS) → bit bucket Operation: (PC+2) → TOS
Status Affected: None Status Affected: None
Encoding: 0000 0000 0000 0110 Encoding: 0000 0000 0000 0101
Description: The TOS value is pulled off the Description: The PC+2 is pushed onto the top of
return stack and is discarded. The the return stack. The previous TOS
TOS value then becomes the previ- value is pushed down on the stack.
ous value that was pushed onto the This instruction allows to implement
return stack. a software stack by modifying TOS,
This instruction is provided to and then push it onto the return
enable the user to properly manage stack.
the return stack to incorporate a Words: 1
software stack.
Cycles: 1
Words: 1
Q Cycle Activity:
Cycles: 1
Q1 Q2 Q3 Q4
Q Cycle Activity: Decode PUSH PC+2 No No
Q1 Q2 Q3 Q4 onto return operation operation
Decode No POP TOS No stack
operation value operation
Example: PUSH
Example: POP Before Instruction
GOTO NEW TOS = 00345Ah
Before Instruction PC = 000124h
TOS = 0031A2h
Stack (1 level down)= 014332h After Instruction
PC = 000126h
After Instruction TOS = 000126h
Stack (1 level down)= 00345Ah
TOS = 014332h
PC = NEW
Cycles: 2
Example:
Q Cycle Activity:
Q1 Q2 Q3 Q4 CALL TABLE ; WREG contains table
Decode No No pop PC from ; offset value
operation operation stack ; WREG now has
Set GIEH or ; table value
:
GIEL
TABLE
No No No No
ADDWF PCL ; WREG = offset
operation operation operation operation
RETLW k0 ; Begin table
RETLW k1 ;
Example: RETFIE 1 :
:
After Interrupt RETLW kn ; End of table
PC = TOS
W = WS
BSR = BSRS Before Instruction
STATUS = STATUSS
GIE/GIEH, PEIE/GIEL= 1 WREG = 0x07
After Instruction
WREG = value of kn
RLNCF Rotate Left f (no carry) RRCF Rotate Right f through Carry
Syntax: [ label ] RLNCF f,d,a Syntax: [ label ] RRCF f,d,a
Operands: 0 ≤ f ≤ 255 Operands: 0 ≤ f ≤ 255
d ∈ [0,1] d ∈ [0,1]
a ∈ [0,1] a ∈ [0,1]
Operation: (f<n>) → dest<n+1>, Operation: (f<n>) → dest<n-1>,
(f<7>) → dest<0> (f<0>) → C,
Status Affected: N,Z (C) → dest<7>
Description: The contents of register ’f’ are Encoding: 0011 00da ffff ffff
rotated one bit to the left. If ’d’ is 0 Description: The contents of register 'f' are
the result is placed in WREG. If ’d’ rotated one bit to the right through
is 1, the result is stored back in reg- the Carry Flag. If 'd' is 0, the result
ister 'f' (default). If ’a’ is 0, the is placed in WREG. If 'd' is 1, the
Access Bank will be selected, over- result is placed back in register 'f'
riding the BSR value. If ’a’ is 1, (default). If ’a’ is 0, the Access
then the bank will be selected as Bank will be selected, overriding
per the BSR value (default). the BSR value. If ’a’ is 1, then the
register f
bank will be selected as per the
BSR value (default).
Words: 1 C register f
Cycles: 1
Words: 1
Q Cycle Activity:
Q1 Q2 Q3 Q4 Cycles: 1
Decode Read Process Write to Q Cycle Activity:
register ’f’ Data destination Q1 Q2 Q3 Q4
Decode Read Process Write to
Example: RLNCF REG, 1, 0 register ’f’ Data destination
Before Instruction
REG = 1010 1011 Example: RRCF REG, 0, 0
After Instruction Before Instruction
REG = 0101 0111 REG = 1110 0110
C = 0
After Instruction
REG = 1110 0110
WREG = 0111 0011
C = 0
Description: The power-down status bit (PD) is Description: Subtract register 'f' and carry flag
cleared. The time-out status bit (borrow) from WREG (2’s comple-
(TO) is set. Watchdog Timer and ment method). If 'd' is 0, the result
its postscaler are cleared. is stored in WREG. If 'd' is 1, the
The processor is put into SLEEP result is stored in register 'f'
mode with the oscillator stopped. (default) . If ’a’ is 0, the Access
Words: 1 Bank will be selected, overriding
the BSR value. If ’a’ is 1, then the
Cycles: 1
bank will be selected as per the
Q Cycle Activity: BSR value (default).
Q1 Q2 Q3 Q4 Words: 1
Decode No Process Go to
operation Data sleep
Cycles: 1
Q Cycle Activity:
Example: SLEEP Q1 Q2 Q3 Q4
Decode Read Process Write to
Before Instruction
register ’f’ Data destination
TO = ?
PD = ?
After Instruction
TO = 1 †
PD = 0
† If WDT causes wake-up, this bit is cleared
SWAPF Swap f
Syntax: [ label ] SWAPF f,d,a
Operands: 0 ≤ f ≤ 255
d ∈ [0,1]
a ∈ [0,1]
Operation: (f<3:0>) → dest<7:4>,
(f<7:4>) → dest<3:0>
Status Affected: None
Encoding: 0011 10da ffff ffff
Description: The upper and lower nibbles of reg-
ister ’f’ are exchanged. If ’d’ is 0, the
result is placed in WREG. If ’d’ is 1,
the result is placed in register ’f’
(default). If ’a’ is 0, the Access
Bank will be selected, overriding
the BSR value. If ’a’ is 1, then the
bank will be selected as per the
BSR value (default).
Words: 1
Cycles: 1
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read Process Write to
register ’f’ Data destination
Description: If ’f’ = 0, the next instruction, Description: The contents of WREG are
fetched during the current instruc- XOR’ed with the 8-bit literal 'k'.
tion execution, is discarded and a The result is placed in WREG.
NOP is executed making this a two-
cycle instruction. If ’a’ is 0, the Words: 1
Access Bank will be selected, over- Cycles: 1
riding the BSR value. If ’a’ is 1,
Q Cycle Activity:
then the bank will be selected as
per the BSR value (default). Q1 Q2 Q3 Q4
Decode Read Process Write to
Words: 1 literal ’k’ Data WREG
Cycles: 1(2)
Note: 3 cycles if skip and followed Example: XORLW 0xAF
by a 2-word instruction
Before Instruction
Q Cycle Activity:
WREG = 0xB5
Q1 Q2 Q3 Q4
After Instruction
Decode Read Process No
register ’f’ Data operation WREG = 0x1A
If skip:
Q1 Q2 Q3 Q4
No No No No
operation operation operation operation
If skip and followed by 2-word instruction:
Q1 Q2 Q3 Q4
No No No No
operation operation operation operation
No No No No
operation operation operation operation
20.5 MPLAB-SIM Software Simulator ICEPIC is a low-cost in-circuit emulation solution for the
Microchip Technology PIC16C5X, PIC16C6X,
The MPLAB-SIM Software Simulator allows code PIC16C7X, and PIC16CXXX families of 8-bit one-time-
development in a PC host environment by simulating programmable (OTP) microcontrollers. The modular
the PICmicro series microcontrollers on an instruction system can support different subsets of PIC16C5X or
level. On any given instruction, the data areas can be PIC16CXXX products through the use of
examined or modified and stimuli can be applied from interchangeable personality modules or daughter
a file or user-defined key press to any of the pins. The boards. The emulator is capable of emulating without
execution can be performed in single step, execute until target application circuitry being present.
break, or trace mode.
20.9 MPLAB-ICD In-Circuit Debugger
MPLAB-SIM fully supports symbolic debugging using
MPLAB-C17 and MPLAB-C18 and MPASM. The Soft- Microchip’s In-Circuit Debugger, MPLAB-ICD, is a pow-
ware Simulator offers the flexibility to develop and erful, low-cost run-time development tool. This tool is
debug code outside of the laboratory environment mak- based on the flash PIC16F877 and can be used to
ing it an excellent multi-project software development develop for this and other PICmicro microcontrollers
tool. from the PIC16CXXX family. MPLAB-ICD utilizes the
In-Circuit Debugging capability built into the
20.6 MPLAB-ICE High Performance
PIC16F87X. This feature, along with Microchip’s In-Cir-
Universal In-Circuit Emulator with cuit Serial Programming protocol, offers cost-effective
MPLAB IDE in-circuit flash programming and debugging from the
graphical user interface of the MPLAB Integrated
The MPLAB-ICE Universal In-Circuit Emulator is
Development Environment. This enables a designer to
intended to provide the product development engineer
develop and debug source code by watching variables,
with a complete microcontroller design tool set for
single-stepping and setting break points. Running at
PICmicro microcontrollers (MCUs). Software control of
full speed enables testing hardware in real-time. The
MPLAB-ICE is provided by the MPLAB Integrated
MPLAB-ICD is also a programmer for the flash
Development Environment (IDE), which allows editing,
PIC16F87X family.
“make” and download, and source debugging from a
single environment.
24CXX/
25CXX/
HCSXXX
PIC14000
MCP2510
PIC16C5X
PIC16C6X
PIC16C7X
PIC16C8X
PIC17C4X
MCRFXXX
PIC16F62X
PIC16F8XX
PIC16C7XX
PIC16C9XX
PIC17C7XX
PIC18CXX2
PIC12CXXX
PIC16CXXX
TABLE 20-1:
MPLAB Integrated
Development Environment
á
á
á
á
á
á
á
á
á
á
á
á
MPLAB C17 Compiler
á á
á á
MPLAB C18 Compiler
Software Tools
MPASM/MPLINK
á
á
á á
á á
PICMASTER/PICMASTER-CE
á á á
á á á
á á á
á á á
ICEPIC Low-Cost
Emulators
In-Circuit Emulator
á á á á
á á á á
á á á á
á á á á
á á á á
á á á á
á á á á
á á á á
MPLAB-ICD In-Circuit Debugger * *
á
á
á
PICSTARTPlus
Low-Cost Universal Dev. Kit **
á
á
á
á
á
á
á
á
á
á
á
á
á
á
PRO MATE II
Universal Programmer **
á
á
á
á
á
á
á
á
á
á
á
á
á
á
á
á
Programmers Debugger
SIMICE
á
†
Preliminary
PICDEM-1
á á
á
á
á
DEVELOPMENT TOOLS FROM MICROCHIP
† †
PICDEM-2
á
á á
á
PICDEM-3
á
PICDEM-14A
á
PICDEM-17
á
* Contact the Microchip Technology Inc. web site at www.microchip.com for information on how to use the MPLAB-ICD In-Circuit Debugger (DV164001) with PIC16C62, 63, 64, 65, 72, 73, 74, 76, 77
** Contact Microchip Technology Inc. for availability date.
† Development tool is available on select devices.
PIC18CXX2
DS39026B-page 239
PIC18CXX2
NOTES:
† NOTICE: Stresses above those listed under “Absolute Maximum Ratings” may cause permanent damage to the
device. This is a stress rating only and functional operation of the device at those or any other conditions above those
indicated in the operation listings of this specification is not implied. Exposure to maximum rating conditions for
extended periods may affect device reliability.
6.0 V
5.5 V
5.0 V PIC18CXXX
4.5 V
Voltage
4.2V
4.0 V
3.5 V
3.0 V
2.5 V
2.0 V
40 MHz
Frequency
6.0 V
5.5 V
5.0 V
4.5 V PIC18LCXXX
Voltage
4.2V
4.0 V
3.5 V
3.0 V
2.5 V
2.0 V
6 MHz 40 MHz
Frequency
FMAX = (20.0 MHz/V) (VDDAPPMIN - 2.5 V) + 6 MHz
Note: VDDAPPMIN is the minimum voltage of the PICmicro® device in the application
VDD
(LVDIF can be
VLVD cleared in software)
(LVDIF set by hardware)
LVDIF
VDD/2
RL Pin CL
VSS
CL
Pin
RL = 464Ω
VSS CL = 50 pF for all pins except OSC2/CLKOUT
and including D and E outputs as ports
OSC1
1 3 3 4 4
2
CLKOUT
OSC1
10 11
CLKOUT
13 12
14 19 18
16
I/O Pin
(input)
17 15
20, 21
Note: Refer to Figure 21-4 for load conditions.
VDD
MCLR
30
Internal
POR
33
PWRT
Time-out 32
OSC
Time-out
Internal
Reset
Watchdog
Timer
Reset
31
34 34
I/O Pins
BVDD
VDD
35
VBGAP = 1.2V
VIRVST
TABLE 21-7: RESET, WATCHDOG TIMER, OSCILLATOR START-UP TIMER, POWER-UP TIMER
AND BROWN-OUT RESET REQUIREMENTS
Param.
Symbol Characteristic Min Typ Max Units Conditions
No.
30 TmcL MCLR Pulse Width (low) 2 — — µs
31 TWDT Watchdog Timer Time-out Period 7 18 33 ms
(No Prescaler)
32 TOST Oscillation Start-up Timer Period 1024TOSC — 1024TOSC — TOSC = OSC1 period
33 TPWRT Power up Timer Period 28 72 132 ms
34 TIOZ I/O Hi-impedance from MCLR Low — 2 — µs
or Watchdog Timer Reset
35 TBOR Brown-out Reset Pulse Width 200 — — µs VDD ≤ BVDD (See
D005)
36 TIVRST Time for Internal Reference — 20 50 µs
Voltage to become stable
T0CKI
40 41
42
T1OSO/T1CKI
45 46
47 48
TMR0 or
TMR1
CCPx
(Capture Mode)
50 51
52
CCPx
(Compare or PWM Mode)
53 54
RE2/CS
RE0/RD
RE1/WR
65
RD7:RD0
62
64
63
Note: Refer to Figure 21-4 for load conditions.
SS
70
SCK
(CKP = 0)
71 72
78 79
SCK
(CKP = 1)
79 78
80
75, 76
SS
81
SCK
(CKP = 0)
71 72
79
73
SCK
(CKP = 1)
80
78
75, 76
74
SS
70
SCK
(CKP = 0) 83
71 72
78 79
SCK
(CKP = 1)
79 78
80
75, 76 77
74
73
Note: Refer to Figure 21-4 for load conditions.
TABLE 21-13: EXAMPLE SPI MODE REQUIREMENTS (SLAVE MODE TIMING (CKE = 0))
Parm.
Symbol Characteristic Min Max Units Conditions
No.
70 TssL2scH, SS↓ to SCK↓ or SCK↑ input TCY — ns
TssL2scL
71 TscH SCK input high time Continuous 1.25TCY + 30 — ns
71A (slave mode) Single Byte 40 — ns Note 1
72 TscL SCK input low time Continuous 1.25TCY + 30 — ns
72A (slave mode) Single Byte 40 — ns Note 1
73 TdiV2scH, Setup time of SDI data input to SCK edge 100 — ns
TdiV2scL
73A TB2B Last clock edge of Byte1 to the 1st clock edge of Byte2 1.5TCY + 40 — ns Note 2
74 TscH2diL, Hold time of SDI data input to SCK edge 100 — ns
TscL2diL
75 TdoR SDO data output rise time PIC18CXXX — 25 ns
PIC18LCXXX 45 ns
76 TdoF SDO data output fall time — 25 ns
77 TssH2doZ SS↑ to SDO output hi-impedance 10 50 ns
78 TscR SCK output rise time PIC18CXXX — 25 ns
(master mode) PIC18LCXXX 45 ns
79 TscF SCK output fall time (master mode) — 25 ns
80 TscH2doV, SDO data output valid after SCK PIC18CXXX — 50 ns
TscL2doV edge PIC18LCXXX 100 ns
83 TscH2ssH, SS ↑ after SCK edge 1.5TCY + 40 — ns
TscL2ssH
Note 1: Requires the use of Parameter # 73A.
2: Only if Parameter #s 71A and 72A are used.
70
SCK
83
(CKP = 0)
71 72
SCK
(CKP = 1)
80
75, 76 77
SDI
MSb IN BIT6 - - - -1 LSb IN
74
Note: Refer to Figure 21-4 for load conditions.
SCL
91 93
90 92
SDA
START STOP
Condition Condition
91 92
SDA
In
110
109 109
SDA
Out
Note: Refer to Figure 21-4 for load conditions.
SCL
91 93
90 92
SDA
START STOP
Condition Condition
SDA
Out
RC6/TX/CK
pin 121 121
RC7/RX/DT
pin
120
122
Note: Refer to Figure 21-4 for load conditions.
RC6/TX/CK
pin 125
RC7/RX/DT
pin
126
BSF ADCON0, GO
Note 2
131
Q4
130
A/D CLK 132
ADIF TCY
GO DONE
SAMPLING STOPPED
SAMPLE
Note 1: If the A/D clock source is selected as RC, a time of TCY is added before the A/D clock starts.
This allows the SLEEP instruction to be executed.
2: This is a minimal RC delay (typically 100 nS), which also disconnects the holding capacitor from the
analog input.
23.1 Package Marking Information The following sections give the technical details of the
packages.
Not available at time of printing. Will be made available
after definition of QS9000 compliant standard
2
α
n 1
E1 A1
R L
c
β A2 B1
eB B p
2
n 1
E1
A A1
R c L
eB B1
A2
B p
E1
E
p
B
2
n 1
X
α
45 ° L
R2
c
A
A1
R1 φ
β L1 A2
2 α
n 1
E1 A1
A
R L
c
β B1
A2
eB B p
2
n 1
E1 A1
A
R c L
eB B1
A2 B p
D D1
2
1
B
n
X x 45°
α
L A
R2
c
R1 φ A1
β L1 A2
E1
E
# leads = n1
D D1
n12 α
CH2 x 45° CH1 x 45° A3
R1 L
A
A1 35°
B1
c R2
B
β A2
p
E2 D2
Units INCHES* MILLIMETERS
Dimension Limits MIN NOM MAX MIN NOM MAX
Number of Pins n 44 44
Pitch p 0.050 1.27
Overall Pack. Height A 0.165 0.173 0.180 4.19 4.38 4.57
Shoulder Height A1 0.095 0.103 0.110 2.41 2.60 2.79
Standoff A2 0.015 0.023 0.030 0.38 0.57 0.76
Side 1 Chamfer Dim. A3 0.024 0.029 0.034 0.61 0.74 0.86
Corner Chamfer (1) CH1 0.040 0.045 0.050 1.02 1.14 1.27
Corner Chamfer (other) CH2 0.000 0.005 0.010 0.00 0.13 0.25
Overall Pack. Width E1 0.685 0.690 0.695 17.40 17.53 17.65
Overall Pack. Length D1 0.685 0.690 0.695 17.40 17.53 17.65
Molded Pack. Width E‡ 0.650 0.653 0.656 16.51 16.59 16.66
Molded Pack. Length D‡ 0.650 0.653 0.656 16.51 16.59 16.66
Footprint Width E2 0.610 0.620 0.630 15.49 15.75 16.00
Footprint Length D2 0.610 0.620 0.630 15.49 15.75 16.00
Pins along Width n1 11 11
Lead Thickness c 0.008 0.010 0.012 0.20 0.25 0.30
Upper Lead Width B1† 0.026 0.029 0.032 0.66 0.74 0.81
Lower Lead Width B 0.015 0.018 0.021 0.38 0.46 0.53
Upper Lead Length L 0.050 0.058 0.065 1.27 1.46 1.65
Shoulder Inside Radius R1 0.003 0.005 0.010 0.08 0.13 0.25
J-Bend Inside Radius R2 0.015 0.025 0.035 0.38 0.64 0.89
Mold Draft Angle Top α 0 5 10 0 5 10
Mold Draft Angle Bottom β 0 5 10 0 5 10
*
Controlling Parameter.
† Dimension “B1” does not include dam-bar protrusions. Dam-bar protrusions shall not exceed 0.003”
(0.076 mm) per side or 0.006” (0.152 mm) more than dimension “B1.”
‡
Dimensions “D” and “E” do not include mold flash or protrusions. Mold flash or protrusions shall not
exceed 0.010" (0.254 mm) per side or 0.020" (0.508 mm) more than dimensions “D” or “E.”
JEDEC equivalent: MO-047 AC
U
Universal Synchronous Asynchronous Receiver Transmitter.
See USART
USART ............................................................................. 151
Asynchronous Mode ................................................ 157
Master Transmission ....................................... 158
From: Name
Company
Address
City / State / ZIP / Country
Telephone: (_______) _________ - _________ FAX: (______) _________ - _________
Application (optional):
Would you like a reply? Y N
Questions:
2. How does this document meet your hardware and software development needs?
3. Do you find the organization of this data sheet easy to follow? If not, why?
4. What additions to the data sheet do you think would enhance the structure and subject?
5. What deletions from the data sheet could be made without affecting the overall usefulness?
8. How would you improve our software, systems, and silicon products?
Please specify which device, revision of silicon and Data Sheet (include Literature #) you are using.
All rights reserved. © 1999 Microchip Technology Incorporated. Printed in the USA. 11/99 Printed on recycled paper.
Information contained in this publication regarding device applications and the like is intended for suggestion only and may be superseded by updates. No representation or warranty is given and no liability is assumed
by Microchip Technology Incorporated with respect to the accuracy or use of such information, or infringement of patents or other intellectual property rights arising from such use or otherwise. Use of Microchip’s products
as critical components in life support systems is not authorized except with express written approval by Microchip. No licenses are conveyed, implicitly or otherwise, under any intellectual property rights. The Microchip
logo and name are registered trademarks of Microchip Technology Inc. in the U.S.A. and other countries. All rights reserved. All other trademarks mentioned herein are the property of their respective companies.