0% found this document useful (0 votes)
313 views842 pages

A

datasheet de PIC

Uploaded by

Rey Tiburon
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
313 views842 pages

A

datasheet de PIC

Uploaded by

Rey Tiburon
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 842

PIC18(L)F25/26K83

28-Pin, Low-Power, High-Performance Microcontrollers


with CAN Technology
Description
The PIC18(L)FXXK83 is a full-featured CAN product family that can be used in automotive and industrial applications.
The multitude of communication peripherals found on the product family, such as CAN, SPI, two I2Cs, two UARTs, LIN,
DMX, and DALI can handle a wide range of wired and wireless (using external modules) communication protocols for
intelligent applications. This family includes a 12-bit ADC with Computation (ADC2) extensions for automated signal
analysis to reduce the complexity of the application. This, combined with the Core Independent Peripherals integration
capabilities, enables functions for motor control, power supply, sensor, signal and user interface applications.

Core Features Memory


• C Compiler Optimized RISC Architecture • Up to 64 KB Flash Program Memory
• Operating Speed: • Up to 4 KB Data SRAM Memory
- Up to 64 MHz clock operation • Up to 1 KB Data EEPROM
- 62.5 ns minimum instruction cycle • Memory Access Partition (MAP):
• Two Direct Memory Access (DMA) Controllers: - Configurable boot and app region sizes with
- Data transfers to SFR/GPR spaces from individual write-protections
either Program Flash Memory, Data • Programmable Code Protection
EEPROM or SFR/GPR spaces • Device Information Area (DIA) stores:
- User-programmable source and destination - Unique IDs and Device IDs
sizes - Temp Sensor factory-calibrated data
- Hardware and software-triggered data - Fixed Voltage Reference calibrated data
transfers • Device Configuration Information (DCI) stores:
• System Bus Arbiter with User-Configurable - Erase row size
Priorities for Scanner and DMA1/DMA2 with - Number of write latches per row
respect to the main line and interrupt execution
- Number of user rows
• Vectored Interrupt Capability:
- Data EEPROM memory size
- Selectable high/low priority
- Pin count
- Fixed interrupt latency
- Programmable vector table base address
Operating Characteristics
• 31-Level Deep Hardware Stack
• Low-Current Power-on Reset (POR) • Operating Voltage Range:
• Configurable Power-up Timer (PWRT) - 1.8V to 3.6V (PIC18LF25/26K83)
• Brown-Out Reset (BOR) - 2.3V to 5.5V (PIC18F25/26K83)
• Low-Power BOR (LPBOR) Option • Temperature Range:
• Windowed Watchdog Timer (WWDT): - Industrial: -40°C to 85°C
- Variable prescaler selection - Extended: -40°C to 125°C
- Variable window size selection
- Configurable in hardware or software Power-Saving Functionality
• DOZE mode: Ability to run CPU core slower than
the system clock
• IDLE mode: Ability to halt CPU core while internal
peripherals continue operating
• SLEEP mode: Lowest power consumption
• Peripheral Module Disable (PMD):
- Ability to disable unused peripherals to
minimize power consumption

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 1


PIC18(L)F25/26K83
eXtreme Low-Power (XLP) Features • One SPI module:
- Configurable length bytes
• Sleep mode: 60 nA @ 1.8V, typical
- Configurable length data packets
• Windowed Watchdog Timer: 720 nA @ 1.8V,
- Receive-without-transmit option
typical
- Transmit-without-receive option
• Secondary Oscillator: 580 nA @ 32 kHz
- Transfer byte counter
• Operating Current:
- Separate Transmit and Receive Buffers with
- 4 uA @ 32 kHz, 1.8V, typical
2-byte FIFO and DMA capabilities
- 45 uA/MHz @ 1.8V, typical
• CAN module:
- Conforms to CAN 2.0B Active Specification
Digital Peripherals - Three operating modes: Legacy (compatible
• Three 8-Bit Timers (TMR2/4/6) with Hardware with existing PIC18CXX8/FXX8 CAN modules),
Limit Timer (HLT): Enhanced mode, and FIFO mode.
- Hardware monitoring and Fault detection - Message bit rates up to 1 Mbps
• Four 16-Bit Timers (TMR0/1/3/5) - DeviceNet data byte filter support
• Four Configurable Logic Cell (CLC): - Six programmable receive/transmit buffers
- Integrated combinational and sequential logic - Three dedicated transmit buffers
• Three Complementary Waveform Generators - Two dedicated receive buffers
(CWGs): - 16 Full, 29-bit acceptance filters with dynamic
- Rising and falling edge dead-band control association
- Full-bridge, half-bridge, 1-channel drive - Three full, 29-bit acceptance masks
- Multiple signal sources - Automatic remote frame handling
- Programmable dead band - Advanced error management features.
- Fault-shutdown input • Two I2C modules, SMBus, PMBus™ compatible:
• Four Capture/Compare/PWM (CCP) modules - Dedicated Address, Transmit and Receive
• Four 10-bit Pulse-Width Modulators (PWMs) buffers
• Numerically Controlled Oscillator (NCO): - Bus Collision Detection with arbitration
- Generates true linear frequency control - Bus time-out detection and handling
- High resolution using 20-bit accumulator and - Multi-Master mode
20-bit increment values - Separate Transmit and Receive Buffers with
• DSM: Data Signal Modulator: 2-byte FIFO and DMA capabilities
- Multiplex two carrier clocks, with glitch pre- - I2C, SMBus 2.0 and SMBus 3.0, and 1.8V
vention feature input level selections
- Multiple sources for each carrier • Device I/O Port Features:
• Programmable CRC with Memory Scan: - 25 I/O pins (PIC18(L)F25K83)
- Reliable data/program memory monitoring for - One input-only pin
fail-safe operation (e.g., Class B) - Individually programmable I/O direction,
- Calculate CRC over any portion of program open-drain, slew rate, weak pull-up control
memory - Interrupt-on-change
• Two UART Modules: - Three External Interrupt Pins
- Modules are Asynchronous, RS-232, RS-485 • Peripheral Pin Select (PPS):
compatibility. - Enables pin mapping of digital I/O
- One of the UART modules supports LIN • Two Signal Measurement Timer (SMT):
Master and Slave, DMX mode, DALI Gear - 24-bit timer/counter with prescaler
and Device protocols
- Automatic and user-timed BREAK period
generation
- DMA Compatible
- Automatic checksums
- Programmable 1, 1.5, and two Stop bits
- Wake-up on BREAK reception

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 2


PIC18(L)F25/26K83
Analog Peripherals Flexible Oscillator Structure
• Analog-to-Digital Converter with Computation • High-Precision Internal Oscillator:
(ADC2): - Selectable frequency range up to 64 MHz
- 12-bit with up to 24 external channels - ±1% at calibration (nominal)
- Automated post-processing • Low-Power Internal 32 kHz Oscillator
- Automated math functions on input signals: (LFINTOSC)
averaging, filter calculations, oversampling • External 32 kHz Crystal Oscillator (SOCS)
and threshold comparison • External Oscillator Block with:
- Operates in Sleep - x4 PLL with external sources
- Integrated charge pump for improved low- - Three crystal/resonator modes up to 20 MHz
voltage operation - Three external clock modes up to 20 MHz
• Hardware Capacitive Voltage Divider (CVD): • Fail-Safe Clock Monitor
- Automates touch sampling and reduces soft- • Oscillator Start-up Timer (OST):
ware size and CPU usage when touch or - Ensures stability of crystal oscillator sources
proximity sensing is required
- Adjustable sample and hold capacitor array
- Two guard ring output drives
• Temperature Sensor:
- Internal connection to ADC
- Can be calibrated for improved accuracy
• Two Comparators:
- Low-Power/High-Speed mode
- Fixed Voltage Reference at noninverting
input(s)
- Comparator outputs externally accessible
• 5-Bit Digital-to-Analog Converter (DAC):
- 5-bit resolution, rail-to-rail
- Positive Reference Selection
- Unbuffered I/O pin output
- Internal connections to ADCs and
comparators
• Voltage Reference:
- Fixed Voltage Reference with 1.024V, 2.048V
and 4.096V output levels

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 3


PIC18(L)F25/26K83

TABLE 1: PIC18(L)FXXK83 FAMILY TYPES

Window Watchdog Timer (WWDT)

Signal Measurement Timer (SMT)

Direct Memory Access (DMA)


Program Flash Memory (KB)

8-bit/ (with HLT)/16-bit Timer

Peripheral Module Disable


Memory Access Partition

Peripheral Pin Select


UART with Protocols
Vectored Interrupts
Data SRAM (bytes)

Zero-Cross Detect
Data EEPROM (B)
Data Sheet Index

CCP/10-bit PWM
12-bit ADC2 (ch)

Comparator
5-bit DAC

Debug(1)
I/O Pins

I2C/SPI
CWG

NCO

CAN
CLC
Device

PIC18(L)F25K83 (A) 32 1024 2048 25 24 1 2 3/3 Y Y 4/4 1 1 4 Y 2 Y Y Y 2 1/1 Y Y I


PIC18(L)F26K83 (A) 64 1024 4096 25 24 1 2 3/3 Y Y 4/4 1 1 4 Y 2 Y Y Y 2 1/1 Y Y I
Note 1: I - Debugging integrated on chip.
Data Sheet Index:
A:DS40001943 PIC18(L)F25/26K83 Data Sheet, 28-Pin

Note: For other small form-factor package availability and marking information, visit
http://www.microchip.com/packaging or contact your local sales office.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 4


PIC18(L)F25/26K83

TABLE 2: PACKAGES
Device SPDIP SOIC SSOP UQFN QFN
PIC18(L)F25K83     
PIC18(L)F26K83     
Note 1: Pin details are subject to change.

Pin Diagrams

28-pin SPDIP, SOIC, SSOP

VPP/MCLR/RE3 1 28 RB7/ICSPDAT
RA0 2 27 RB6/ICSPCLK
RA1 3 26 RB5
RA2 4 25 RB4
RA3 5 24 RB3

PIC18(L)F25K83
RA4 6 23 RB2
RA5 7 22 RB1
VSS 8 21 RB0
RA7 9 20 VDD
RA6 10 19 VSS
RC0 11 18 RC7
RC1 12 17 RC6
RC2 13 16 RC5
RC3 14 15 RC4

Note: See Table 3 for location of all peripheral functions.

28-pin QFN (6x6x0.9mm), UQFN (4x4x0.5mm)


RE3/MCLR/VPP

RB6/ICSPCLK
RB7/ICSPDAT
RA0

RB5
RB4
RA1

28 27 26 25 24 23 22
RA2 1 21 RB3
RA3 2 20 RB2
RA4 3 19 RB1
RA5 4 PIC18(L)F26K83 18 RB0
VSS 5 17 VDD
RA7 6 16 VSS
RA6 7 15 RC7
8 9 10 11 12 13 14
RC5
RC0

RC6
RC2
RC3
RC4
RC1

Note 1: See Table 3 for location of all peripheral functions.


2: It is recommended that the exposed bottom pad be connected to VSS, however it must not be the
only VSS connection to the device.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 5


Pin Allocation Tables
 2017 Microchip Technology Inc.

TABLE 3: 28-Pin SPDIP/SOIC/SSOP 28-PIN ALLOCATION TABLE (PIC18(L)F25/26K83)

Clock Reference (CLKR)

Interrupt-on Change
Voltage Reference

Zero Cross Detect

CCP and PWM


28-Pin (U)QFN

Comparators

Timers/SMT

ECAN
UART

Basic
CWG

NCO
DSM
ADC

DAC

CLC
SPI
I2 C
I/O

RA0 2 27 ANA0 — — C1IN0- — — — — — — — — CLCIN0(1) — — — IOCA0 —


C2IN0-
RA1 3 28 ANA1 — — C1IN1- — — — — — — — — CLCIN1(1) — — — IOCA1 —
C2IN1-
RA2 4 1 ANA2 VREF- DAC1OUT1 C1IN0+ — — — — — — — — — — — — IOCA2 —
C2IN0+
RA3 5 2 ANA3 VREF+ — C1IN1+ — — — — MD1CARL(1) — — — — — — — IOCA3 —
RA4 6 3 ANA4 — — — — — — — MD1CARH(1) T0CKI(1) — — — — — — IOCA4 —
RA5 7 4 ANA5 — — — — — SS1(1,3) — MD1SRC(1) — — — — — — — IOCA5 —
RA6 10 7 ANA6 — — — — — — — — — — — — — — — IOCA6 OSC2
Preliminary

CLKOUT
RA7 9 6 ANA7 — — — — — — — — — — — — — — — IOCA7 OSC1
CLKIN
RB0 21 18 ANB0 — — C2IN1+ ZCD — — — — — CCP4(1) CWG1(1) — — — — IOCB0 —
INT0(1)
RB1 22 19 ANB1 — — C1IN3- — SCL2(1,3,4) — — — — — CWG2(1) — — — — IOCB1 —
C2IN3- INT1(1)
RB2 23 20 ANB2 — — — — SDA2(1,3,4) — — — — — CWG3(1) — — — — IOCB2 —

PIC18(L)F25/26K83
INT2(1)
RB3 24 21 ANB3 — — C1IN2- — — — — — — — — — — — CANRX( IOCB3 —
C2IN2- 1)

RB4 25 22 ANB4 — — — — — — — — T5G(1) — — CLCIN2(1) — — — IOCB4 —


ADACT(1) SMT2WIN(1)
RB5 26 23 ANB5 — — — — — — — — T1G(1) CCP3(1) — CLCIN3(1) — — — IOCB5 —
SMT2SIG(1)
RB6 27 24 ANB6 — — — — — — CTS2(1) — — — — — — — — IOCB6 ICSPCLK
RB7 28 25 ANB7 — DAC1OUT2 — — — — RX2(1) — T6IN(1) — — — — — — IOCB7 ICSPDAT
RC0 11 8 ANC0 — — — — — — — — T1CKI(1) — — — — — — IOCC0 SOSCO
T3CKI(1)
T3G(1)
SMT1WIN(1)
DS40001943A-page 6

RC1 12 9 ANC1 — — — — — — — — SMT1SIG(1) CCP2(1) — — — — — IOCC1 SOSCI


RC2 13 10 ANC2 — — — — — — — — T5CKI(1) CCP1(1) — — — — — IOCC2 —
RC3 14 11 ANC3 — — — — SCL1(1) SCK1(1,3) — — T2IN(1) — — — — — — IOCC3 —
Note 1: This is a PPS remappable input signal. The input function may be moved from the default location shown to one of several other PORTx pins.
2: All output signals shown in this row are PPS remappable.
3: This is a bidirectional signal. For normal module operation, the firmware should map this signal to the same pin in both the PPS input and PPS output registers.
4: These pins can be configured for I2C and SMBTM 3.0/2.0 logic levels; the SCLx/SDAx signals may be assigned to any of the RB1/RB2/RC3/RC4 pins. PPS assignments to the other pins (e.g., RA5) will operate, but input logic levels
will be standard TTL/ST as selected by the INLVL register, instead of the I2C specific or SMBUS input buffer thresholds.
TABLE 3: 28-PIN ALLOCATION TABLE (PIC18(L)F25/26K83) (CONTINUED)
 2017 Microchip Technology Inc.

28-Pin SPDIP/SOIC/SSOP

Clock Reference (CLKR)

Interrupt-on Change
Voltage Reference

Zero Cross Detect

CCP and PWM


28-Pin (U)QFN

Comparators

Timers/SMT

ECAN
UART

Basic
CWG

NCO
DSM
ADC

DAC

CLC
SPI
I2C
I/O

RC4 15 12 ANC4 — — — — SDA1(1) SDI1(1) — — — — — — — — — IOCC4 —


RC5 16 13 ANC5 — — — — — — — — T4IN(1) — — — — — — IOCC5 —
RC6 17 14 ANC6 — — — — — — CTS1(1) — — — — — — — — IOCC6 —
RC7 18 15 ANC7 — — — — — — RX1(1) — — — — — — — — IOCC7 —
RE3 1 26 — — — — — — — — — — — — — — — — IOCE3 MCLR
VPP
VDD 20 17 — — — — — — — — — — — — — — — — — —
VSS 8, 5, — — — — — — — — — — — — — — — — — —
19 16
OUT(2) — — ADGRDA — — C1OUT — SDA1 SS1 DTR1 DSM TMR0 CCP1 CWG1A CLC1OUT NCO CLKR CANTX — —
ADGRDB C2OUT SCL1 SCK1 RTS1 CCP2 CWG1B CLC2OUT
SDA2 SDO1 TX1 CCP3 CWG1C CLC3OUT
Preliminary

SCL2 DTR2 CCP4 CWG1D CLC4OUT


RTS2 PWM5OUT CWG2A
TX2 PWM6OUT CWG2B
PWM7OUT CWG2C
PWM8OUT CWG2D
CWG3A
CWG3B
CWG3C
CWG3D

PIC18(L)F25/26K83
Note 1: This is a PPS remappable input signal. The input function may be moved from the default location shown to one of several other PORTx pins.
2: All output signals shown in this row are PPS remappable.
3: This is a bidirectional signal. For normal module operation, the firmware should map this signal to the same pin in both the PPS input and PPS output registers.
4: These pins can be configured for I2C and SMBTM 3.0/2.0 logic levels; the SCLx/SDAx signals may be assigned to any of the RB1/RB2/RC3/RC4 pins. PPS assignments to the other pins (e.g., RA5) will operate, but input logic levels
will be standard TTL/ST as selected by the INLVL register, instead of the I2C specific or SMBUS input buffer thresholds.
DS40001943A-page 7
PIC18(L)F25/26K83
Table of Contents
1.0 Device Overview ........................................................................................................................................................................ 10
2.0 Guidelines for Getting Started with PIC18(L)F25/26K83 Microcontrollers ................................................................................. 13
3.0 PIC18 CPU................................................................................................................................................................................. 16
4.0 Memory Organization ................................................................................................................................................................. 23
5.0 Device Configuration .................................................................................................................................................................. 55
6.0 Resets ........................................................................................................................................................................................ 71
7.0 Oscillator Module (with Fail-Safe Clock Monitor) ....................................................................................................................... 82
8.0 Reference Clock Output Module .............................................................................................................................................. 101
9.0 Interrupt Controller ................................................................................................................................................................... 105
10.0 Power-Saving Operation Modes .............................................................................................................................................. 161
11.0 Windowed Watchdog Timer (WWDT) ...................................................................................................................................... 168
12.0 8x8 Hardware Multiplier............................................................................................................................................................ 177
13.0 Nonvolatile Memory (NVM) Control.......................................................................................................................................... 179
14.0 Cyclic Redundancy Check (CRC) Module with Memory Scanner............................................................................................ 203
15.0 Direct Memory Access (DMA) .................................................................................................................................................. 218
16.0 I/O Ports ................................................................................................................................................................................... 249
17.0 Peripheral Pin Select (PPS) Module ........................................................................................................................................ 262
18.0 Interrupt-on-Change ................................................................................................................................................................. 270
19.0 Peripheral Module Disable (PMD)............................................................................................................................................ 274
20.0 Timer0 Module ......................................................................................................................................................................... 283
21.0 Timer1/3/5 Module with Gate Control....................................................................................................................................... 289
22.0 Timer2/4/6 Module ................................................................................................................................................................... 304
23.0 Capture/Compare/PWM Module .............................................................................................................................................. 326
24.0 Pulse-Width Modulation (PWM) ............................................................................................................................................... 340
25.0 Signal Measurement Timer (SMTX)......................................................................................................................................... 347
26.0 Complementary Waveform Generator (CWG) Module ............................................................................................................ 391
27.0 Configurable Logic Cell (CLC).................................................................................................................................................. 419
28.0 Numerically Controlled Oscillator (NCO) Module ..................................................................................................................... 434
29.0 Zero-Cross Detection (ZCD) Module........................................................................................................................................ 444
30.0 Data Signal Modulator (DSM) Module...................................................................................................................................... 449
31.0 Universal Asynchronous Receiver Transmitter (UART) With Protocol Support ....................................................................... 460
32.0 Serial Peripheral Interface (SPI) Module.................................................................................................................................. 497
33.0 I2C Module ............................................................................................................................................................................... 529
34.0 CAN Module ............................................................................................................................................................................. 581
35.0 Fixed Voltage Reference (FVR) .............................................................................................................................................. 647
36.0 Temperature Indicator Module ................................................................................................................................................. 649
37.0 Analog-to-Digital Converter with Computation (ADC2) Module ............................................................................................... 652
38.0 5-Bit Digital-to-Analog Converter (DAC) Module...................................................................................................................... 690
39.0 Comparator Module ................................................................................................................................................................. 694
40.0 High/Low-Voltage Detect (HLVD)............................................................................................................................................. 703
41.0 In-Circuit Serial Programming™ (ICSP™) ............................................................................................................................... 711
42.0 Instruction Set Summary .......................................................................................................................................................... 713
43.0 Register Summary.................................................................................................................................................................... 767
44.0 Development Support............................................................................................................................................................... 788
45.0 Electrical Specifications............................................................................................................................................................ 792
46.0 DC and AC Characteristics Graphs and Tables....................................................................................................................... 821
47.0 Packaging Information.............................................................................................................................................................. 822

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 8


PIC18(L)F25/26K83

TO OUR VALUED CUSTOMERS


It is our intention to provide our valued customers with the best documentation possible to ensure successful use of your Microchip
products. To this end, we will continue to improve our publications to better suit your needs. Our publications will be refined and
enhanced as new volumes and updates are introduced.
If you have any questions or comments regarding this publication, please contact the Marketing Communications Department via
E-mail at docerrors@microchip.com. We welcome your feedback.

Most Current Data Sheet


To obtain the most up-to-date version of this data sheet, please register at our Worldwide Website at:
http://www.microchip.com
You can determine the version of a data sheet by examining its literature number found on the bottom outside corner of any page.
The last character of the literature number is the version number, (e.g., DS30000000A is version A of document DS30000000).

Errata
An errata sheet, describing minor operational differences from the data sheet and recommended workarounds, may exist for current
devices. As device/documentation issues become known to us, we will publish an errata sheet. The errata will specify the revision
of silicon and revision of document to which it applies.
To determine if an errata sheet exists for a particular device, please check with one of the following:
• Microchip’s Worldwide Website; http://www.microchip.com
• Your local Microchip sales office (see last page)
When contacting a sales office, please specify which device, revision of silicon and data sheet (include literature number) you are
using.

Customer Notification System


Register on our website at www.microchip.com to receive the most current information on all of our products.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 9


PIC18(L)F25/26K83
1.0 DEVICE OVERVIEW • Serial Peripheral Interface: The Serial Periph-
eral Interface (SPI) module is a synchronous
This document contains device specific information for serial data communication bus that operates in
the following devices: Full-Duplex mode. Devices communicate in a
• PIC18F25K83 • PIC18LF25K83 master/slave environment where the master
device initiates the communication. A slave
• PIC18F26K83 • PIC18LF26K83 device is controlled through a Chip Select known
This family offers the advantages of all PIC18 as Slave Select. Example slave devices include
microcontrollers – namely, high computational serial EEPROMs, shift registers, display drivers,
performance at an economical price – with the addition A/D converters, or another PIC.
of high-endurance Program Flash Memory, Universal • I2C Module: The I2C module provides a synchro-
Asynchronous Receiver Transmitter (UART), Serial nous interface between the microcontroller and
Peripheral Interface (SPI), Inter-integrated Circuit other I2C-compatible devices using the two-wire
(I2C), Direct Memory Access (DMA), Configurable I2C serial bus. Devices communicate in a mas-
Logic Cells (CLC), Signal Measurement Timer (SMT), ter/slave environment. The I2C bus specifies two
Numerically Controlled Oscillator (NCO), and signal connections – Serial Clock (SCL) and
Analog-to-Digital Converter with Computation (ADC2). Serial Data (SDA). Both the SCL and SDA con-
nections are bidirectional open-drain lines, each
1.1 New Features requiring pull-up resistors to the supply voltage.
• 12-bit A/D Converter with Computation: This
• Direct Memory Access Controller: The Direct
module incorporates programmable acquisition
Memory Access (DMA) Controller is designed to
time, allowing for a channel to be selected and a
service data transfers between different memory
conversion to be initiated without waiting for a
regions directly without intervention from the
sampling period and thus, reduce code overhead.
CPU. By eliminating the need for CPU-intensive
It has a new module called ADC2 with
management of handling interrupts intended for
computation features, which provides a digital
data transfers, the CPU now can spend more time
filter and threshold interrupt functions.
on other tasks.
• Vectored Interrupt Controller: The Vectored 1.2 Details on Individual Family
Interrupt Controller module reduces the numerous Members
peripheral interrupt request signals to a single
interrupt request signal to the CPU. It assembles Devices in the PIC18(L)F25/26K83 family are available
all of the interrupt request signals and resolves in 28-pin packages. The block diagram for this device
the interrupts based on both a fixed natural order is shown in Figure 3-1.
priority and a user-assigned priority, thereby The similarities and differences among the devices are
eliminating scanning of interrupt sources. listed in the PIC18(L)F25/26K83 Family Types Table
• Universal Asynchronous Receiver (page 4). The pinouts for all devices are listed in
Transmitter: The Universal Asynchronous Table 3.
Receiver Transmitter (UART) module is a serial
I/O communications peripheral. It contains all the
clock generators, shift registers and data buffers
necessary to perform an input or output serial
data transfer, independent of device program
execution. The UART, also known as a Serial
Communications Interface (SCI), can be
configured as a full-duplex asynchronous system
or one of several automated protocols.
Full-Duplex mode is useful for communications
with peripheral systems, with DMA/DALI/LIN
support.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 10


PIC18(L)F25/26K83

TABLE 1-1: DEVICE FEATURES


Features PIC18(L)F25K83 PIC18(L)F26K83
Program Memory (Bytes) 32768 65536
Program Memory (Instructions) 16384 32768
Data Memory (Bytes) 2048 4096
Data EEPROM Memory (Bytes) 1024 1024
28-pin SPDIP 28-pin SPDIP
28-pin SOIC 28-pin SOIC
Packages 28-pin SSOP 28-pin SSOP
28-pin QFN 28-pin QFN
28-pin UQFN 28-pin UQFN
I/O Ports A,B,C,E(1) A,B,C,E(1)
2
12-Bit Analog-to-Digital Conversion Module (ADC ) with 5 internal 5 internal
Computation Accelerator 24 external 24 external
Capture/Compare/PWM Modules (CCP) 4
10-Bit Pulse-Width Modulator (PWM) 4
Timers (16-/8-bit) 4/3
Serial Communications 2 UARTs with DMX/DALI/LIN, 2 I2C, 1 SPI
Complementary Waveform Generator (CWG) 3
Zero-Cross Detect (ZCD) 1
Data Signal Modulator (DSM) 1
Signal Measurement Timer (SMT) 2
5-bit Digital to Analog Converter (DAC) 1
Numerically Controlled Oscillator (NCO) 1
Comparator Module 2
Direct Memory Access (DMA) 2
Configurable Logic Cell (CLC) 4
Control Area Network (CAN) Yes
Peripheral Module Disable (PMD) Yes
16-bit CRC with Scanner Yes
Programmable High/Low-Voltage Detect (HLVD) Yes
POR, Programmable BOR,
RESET Instruction,
Stack Overflow,
Resets (and Delays)
Stack Underflow
(PWRT, OST),
MCLR, WDT, MEMV
81 Instructions;
Instruction Set
87 with Extended Instruction Set enabled
Maximum Operating Frequency 64 MHz

Note 1: PORTE contains the single RE3 input-only pin.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 11


PIC18(L)F25/26K83
1.3 Register and Bit naming 1.3.2.3 Bit Fields
conventions Bit fields are two or more adjacent bits in the same
register. For example, the four Least Significant bits of
1.3.1 REGISTER NAMES the T0CON0 register contain the output prescaler
When there are multiple instances of the same select bits. The short name for this field is OUTPS and
peripheral in a device, the peripheral control registers the long name is T0OUTPS. Bit field access is only
will be depicted as the concatenation of a peripheral possible in C programs. The following example
identifier, peripheral instance, and control identifier. demonstrates a C program instruction for setting the
The control registers section will show just one Timer0 output prescaler to the 1:6 Postscaler:
instance of all the register names with an ‘x’ in the place T0CON0bits.OUTPS = 0x5;
of the peripheral instance number. This naming
Individual bits in a bit field can also be accessed with
convention may also be applied to peripherals when
long and short bit names. Each bit is the field name
there is only one instance of that peripheral in the
appended with the number of the bit position within the
device to maintain compatibility with other devices in
field. For example, the Most Significant mode bit has
the family that contain more than one.
the short bit name OUTPS3. The following two exam-
1.3.2 BIT NAMES ples demonstrate assembly program sequences for
setting the Timer0 output prescaler to 1:6 Postscaler:
There are two variants for bit names:
Example 1:
• Short name: Bit function abbreviation
MOVLW ~(1<<OUTPS3 | 1<<OUTPS1)
• Long name: Peripheral abbreviation + short name ANDWF T0CON0,F
MOVLW 1<<OUTPS2 | 1<<OUTPS0
1.3.2.1 Short Bit Names IORWF T0CON0,F
Short bit names are an abbreviation for the bit function. Example 2:
For example, some peripherals are enabled with the
BCF T0CON0,OUTPS3
EN bit. The bit names shown in the registers are the BSF T0CON0,OUTPS2
short name variant. BCF T0CON0,OUTPS1
Short bit names are useful when accessing bits in C BSF T0CON0,OUTPS0
programs. The general format for accessing bits by the
short name is RegisterNamebits.ShortName. For 1.3.3 REGISTER AND BIT NAMING
example, the enable bit, EN, in the T0CON0 register EXCEPTIONS
can be set in C programs with the instruction
T0CON0bits.EN = 1. 1.3.3.1 Status, Interrupt, and Mirror Bits
Short names are generally not useful in assembly Status, interrupt enables, interrupt flags, and mirror bits
programs because the same name may be used by are contained in registers that span more than one
different peripherals in different bit positions. When this peripheral. In these cases, the bit name shown is
occurs, during the include file generation, all instances unique so there is no prefix or short name variant.
of that short bit name are appended with an underscore
plus the name of the register in which the bit resides to
avoid naming contentions.

1.3.2.2 Long Bit Names


Long bit names are constructed by adding a peripheral
abbreviation prefix to the short name. The prefix is
unique to the peripheral thereby making every long bit
name unique. The long bit name for the Timer0 enable
bit is the Timer0 prefix, T0, appended with the enable
bit short name, EN, resulting in the unique bit name
T0EN.
Long bit names are useful in both C and assembly pro-
grams. For example, in C the T0CON0 enable bit can
be set with the T0EN = 1 instruction. In assembly, this
bit can be set with the BSF T0CON0,T0EN instruction.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 12


PIC18(L)F25/26K83
2.0 GUIDELINES FOR GETTING 2.2 Power Supply Pins
STARTED WITH PIC18(L)F25/
2.2.1 DECOUPLING CAPACITORS
26K83 MICROCONTROLLERS
The use of decoupling capacitors on every pair of
power supply pins (VDD and VSS) is required.
2.1 Basic Connection Requirements
Consider the following criteria when using decoupling
Getting started with the PIC18(L)F25/26K83 family of capacitors:
8-bit microcontrollers requires attention to a minimal
• Value and type of capacitor: A 0.1 F (100 nF),
set of device pin connections before proceeding with
10-20V capacitor is recommended. The capacitor
development.
should be a low-ESR device, with a resonance
The following pins must always be connected: frequency in the range of 200 MHz and higher.
• All VDD and VSS pins (see Section 2.2 “Power Ceramic capacitors are recommended.
Supply Pins”) • Placement on the printed circuit board: The
• MCLR pin (see Section 2.3 “Master Clear (MCLR) decoupling capacitors should be placed as close
Pin”) to the pins as possible. It is recommended to
place the capacitors on the same side of the
These pins must also be connected if they are being
board as the device. If space is constricted, the
used in the end application:
capacitor can be placed on another layer on the
• ICSPCLK/ICSPDAT pins used for In-Circuit Serial PCB using a via; however, ensure that the trace
Programming™ (ICSP™) and debugging purposes length from the pin to the capacitor is no greater
(see Section 2.4 “ICSP™ Pins”) than 0.25 inch (6 mm).
• OSCI and OSCO pins when an external oscillator • Handling high-frequency noise: If the board is
source is used (see Section 2.5 “External experiencing high-frequency noise (upward of
Oscillator Pins”) tens of MHz), add a second ceramic type capaci-
Additionally, the following pins may be required: tor in parallel to the above described decoupling
capacitor. The value of the second capacitor can
• VREF+/VREF- pins are used when external voltage be in the range of 0.01 F to 0.001 F. Place this
reference for analog modules is implemented second capacitor next to each primary decoupling
The minimum mandatory connections are shown in capacitor. In high-speed circuit designs, consider
Figure 2-1. implementing a decade pair of capacitances as
close to the power and ground pins as possible
FIGURE 2-1: RECOMMENDED (e.g., 0.1 F in parallel with 0.001 F).
MINIMUM CONNECTIONS • Maximizing performance: On the board layout
Rev. 10-000249A
from the power supply circuit, run the power and
return traces to the decoupling capacitors first,
9/1/2015

VDD C2
and then to the device pins. This ensures that the
R1
decoupling capacitors are first in the power chain.
VDD

Equally important is to keep the trace length


Vss

R2
MCLR
between the capacitor and the power pins to a
C1
minimum, thereby reducing PCB trace
inductance.
PIC18(L)Fxxxxx
Vss 2.2.2 TANK CAPACITORS
On boards with power traces running longer than
six inches in length, it is suggested to use a tank capac-
Key (all values are recommendations): itor for integrated circuits, including microcontrollers, to
C1 and C2 : 0.1 PF, 20V ceramic supply a local power source. The value of the tank
R1: 10 kΩ
capacitor should be determined based on the trace
R2: 100Ω to 470Ω
resistance that connects the power supply source to
the device, and the maximum current drawn by the
device in the application. In other words, select the tank
capacitor so that it meets the acceptable voltage sag at
the device. Typical values range from 4.7 F to 47 F.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 13


PIC18(L)F25/26K83
2.3 Master Clear (MCLR) Pin 2.4 ICSP™ Pins
The MCLR pin provides two specific device The ICSPCLK and ICSPDAT pins are used for In-Cir-
functions: Device Reset, and Device Programming cuit Serial Programming™ (ICSP™) and debugging
and Debugging. If programming and debugging are purposes. It is recommended to keep the trace length
not required in the end application, a direct between the ICSP connector and the ICSP pins on the
connection to VDD may be all that is required. The device as short as possible. If the ICSP connector is
addition of other components, to help increase the expected to experience an ESD event, a series resistor
application’s resistance to spurious Resets from is recommended, with the value in the range of a few
voltage sags, may be beneficial. A typical tens of ohms, not to exceed 100Ω.
configuration is shown in Figure 2-1. Other circuit Pull-up resistors, series diodes and capacitors on the
designs may be implemented, depending on the ICSPCLK and ICSPDAT pins are not recommended as
application requirements. they will interfere with the programmer/debugger com-
During programming and debugging, the resistance munications to the device. If such discrete components
and capacitance that can be added to the pin must are an application requirement, they should be
be considered. Device programmers and debuggers removed from the circuit during programming and
drive the MCLR pin. Consequently, specific voltage debugging. Alternatively, refer to the AC/DC character-
levels (VIH and VIL) and fast signal transitions must istics and timing requirements information in the
not be adversely affected. Therefore, specific values respective device Flash programming specification for
of R1 and C1 will need to be adjusted based on the information on capacitive loading limits, and pin input
application and PCB requirements. For example, it is voltage high (VIH) and input low (VIL) requirements.
recommended that the capacitor, C1, be isolated For device emulation, ensure that the “Communication
from the MCLR pin during programming and Channel Select” (i.e., ICSPCLK/ICSPDAT pins),
debugging operations by using a jumper (Figure 2-2). programmed into the device, matches the physical
The jumper is replaced for normal run-time connections for the ICSP to the Microchip debugger/
operations. emulator tool.
Any components associated with the MCLR pin For more information on available Microchip
should be placed within 0.25 inch (6 mm) of the pin. development tools connection requirements, refer to
Section 44.0 “Development Support”.
FIGURE 2-2: EXAMPLE OF MCLR PIN
CONNECTIONS
VDD

R1
R2
MCLR
PIC18(L)F25/26K83
JP
C1

Note 1: R1  10 k is recommended. A suggested


starting value is 10 k. Ensure that the
MCLR pin VIH and VIL specifications are met.
2: R2  470 will limit any current flowing into
MCLR from the external capacitor, C1, in the
event of MCLR pin breakdown, due to
Electrostatic Discharge (ESD) or Electrical
Overstress (EOS). Ensure that the MCLR pin
VIH and VIL specifications are met.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 14


PIC18(L)F25/26K83
2.5 External Oscillator Pins 2.6 Unused I/Os
Many microcontrollers have options for at least two Unused I/O pins should be configured as outputs and
oscillators: a high-frequency primary oscillator and a driven to a logic low state. Alternatively, connect a 1 kΩ
low-frequency secondary oscillator (refer to Section to 10 kΩ resistor to VSS on unused pins and drive the
7.0 “Oscillator Module (with Fail-Safe Clock output to logic low.
Monitor)” for details).
The oscillator circuit should be placed on the same FIGURE 2-3: SUGGESTED
side of the board as the device. Place the oscillator PLACEMENT OF THE
circuit close to the respective oscillator pins with no OSCILLATOR CIRCUIT
more than 0.5 inch (12 mm) between the circuit
Single-Sided and In-Line Layouts:
components and the pins. The load capacitors should
be placed next to the oscillator itself, on the same side Copper Pour Primary Oscillator
of the board. (tied to ground) Crystal

Use a grounded copper pour around the oscillator cir- DEVICE PINS
cuit to isolate it from surrounding circuits. The
grounded copper pour should be routed directly to the
MCU ground. Do not run any signal traces or power
Primary OSC1
traces inside the ground pour. Also, if using a two-sided Oscillator
board, avoid any traces on the other side of the board C1 ` OSC2
where the crystal is placed.
C2 GND
Layout suggestions are shown in Figure 2-3. In-line `
packages may be handled with a single-sided layout
SOSCO
that completely encompasses the oscillator pins. With
fine-pitch packages, it is not always possible to com- SOSCI
Secondary Oscillator
pletely surround the pins and components. A suitable (SOSC)
solution is to tie the broken guard sections to a mirrored Crystal `
ground layer. In all cases, the guard trace(s) must be
returned to ground.
SOSC: C1 SOSC: C2
In planning the application’s routing and I/O assign-
ments, ensure that adjacent port pins, and other
signals in close proximity to the oscillator, are benign
(i.e., free of high frequencies, short rise and fall times, Fine-Pitch (Dual-Sided) Layouts:
and other similar noise). Top Layer Copper Pour
(tied to ground)
For additional information and design guidance on
oscillator circuits, refer to these Microchip Application
Notes, available at the corporate website Bottom Layer
Copper Pour
(www.microchip.com): (tied to ground)
• AN826, “Crystal Oscillator Basics and Crystal
Selection for rfPIC™ and PICmicro® Devices” OSCO

• AN849, “Basic PICmicro® Oscillator Design”


C2
• AN943, “Practical PICmicro® Oscillator Analysis
Oscillator
and Design” GND Crystal
• AN949, “Making Your Oscillator Work”
C1

OSCI

DEVICE PINS

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 15


PIC18(L)F25/26K83
3.0 PIC18 CPU
This family of devices contains a PIC18 8-bit CPU core
based on the modified Harvard architecture. The PIC18
CPU supports:
• System Arbitration which decides memory access
allocation depending on user priorities
• Vectored Interrupt capability with automatic two
level deep context saving
• 31-level deep hardware stack with overflow and
underflow reset capabilities
• Support Direct, Indirect, and Relative Addressing
modes
• 8x8 Hardware Multiplier

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 16


PIC18(L)F25/26K83
FIGURE 3-1: PIC18(L)F25/26K83 FAMILY BLOCK DIAGRAM

Data Bus<8>
Table Pointer<21>

8 8 Data Latch
inc/dec logic
Data Memory
21 PCLATU PCLATH
20 Address Latch Ports
PCU PCH PCL
Program Counter 12
Data Address<12>
31-Level Stack
Address Latch 6 14 4
BSR FSR0 Access
Program Memory STKPTR Bank
(8/16/32/64 Kbytes) FSR1
FSR2 12 Peripherals
Data Latch

inc/dec
8 logic
Table Latch

ROM Latch Address


Instruction Bus <16> Decode
Data
IR EEPROM

8
Instruction State machine
Decode and control signals
Control
PRODH PRODL

8x8 Multiply
3 8

BITOP W
8 8 8

OSC1(2) Internal
Oscillator Power-up
Timer 8 8
Block
OSC2(2) Oscillator ALU<8>
LFINTOSC Start-up Timer
SOSCI Oscillator Power-on 8
Reset
64 MHz
SOSCO Oscillator WWT
Precision
Single-Supply Brown-out Band Gap
MCLR(1) Reset
Programming Reference
In-Circuit Fail-Safe
Debugger Clock Monitor

Note 1: RE3 is only available when MCLR functionality is disabled.


2: OSC1/CLKIN and OSC2/CLKOUT are only available in select oscillator modes and when these pins are not being used as digital I/O.
Refer to Section 7.0 “Oscillator Module (with Fail-Safe Clock Monitor)” for additional information.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 17


PIC18(L)F25/26K83
3.1 System Arbitration
The System Arbiter resolves memory access between
the System Level Selections (i.e., Main, Interrupt Ser-
vice Routine) and Peripheral Selection (i.e., DMA and
Scanner) based on user-assigned priorities. Each of
the system level and peripheral selections has its own
priority selection registers. Memory access priority is
resolved using the number written to the corresponding
Priority registers, 0 being the highest priority and 4 the
lowest. The default priorities are listed in Table 3-1.
In case the user wants to change priorities, ensure
each Priority register is written with a unique value from
0 to 4.

TABLE 3-1: DEFAULT PRIORITIES


Priority register
Selection
Reset value
System Level ISR 0
MAIN 1
Peripheral DMA1 2
DMA2 3
SCANNER 4

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 18


PIC18(L)F25/26K83
3.1.1 PRIORITY LOCK 3.2 Memory Access Scheme
The System arbiter grants memory access to the The user can assign priorities to both system level and
peripheral selections (DMAx, Scanner) when the peripheral selections based on which the system
PRLOCKED bit (PRLOCK Register) is set. arbiter grants memory access. Let us consider the
Priority selections are locked by setting the following priority scenarios between ISR, MAIN, and
PRLOCKED bit of the PRLOCK register. Setting and Peripherals.
clearing this bit requires a special sequence as an extra
precaution against inadvertent changes. Examples of
setting and clearing the PRLOCKED bit are shown in Note: It is always required that the ISR priority
Example 3-1 and Example 3-2. be higher than Main priority.

EXAMPLE 3-1: PRIORITY LOCK 3.2.1 ISR PRIORITY > MAIN PRIORITY >
SEQUENCE PERIPHERAL PRIORITY
; Disable interrupts When the Peripheral Priority (DMAx, Scanner) is lower
BCF INTCON0,GIE than ISR and MAIN Priority, and the peripheral
requires:
; Bank to PRLOCK register 1. Access to the Program Flash Memory, then the
BANKSEL PRLOCK peripheral waits for an instruction cycle in which
MOVLW 55h the CPU does not need to access the PFM
(such as a branch instruction) and uses that
; Required sequence, next 4 cycle to do its own Program Flash Memory
instructions access, unless a PFM Read/Write operation is
MOVWF PRLOCK in progress.
MOVLW AAh
2. Access to the SFR/GPR, then the peripheral
MOVWF PRLOCK
waits for an instruction cycle in which the CPU
; Set PRLOCKED bit to grant memory
does not need to access the SFR/GPR (such as
access to peripherals
MOVLW, CALL, NOP) and uses that cycle to do its
BSF PRLOCK,0
own SFR/GPR access.
; Enable Interrupts 3. Access to the Data EEPROM, then the
BSF INTCON0,GIE peripheral has access to Data EEPROM unless
a Data EEPROM Read/Write operation is being
performed.
EXAMPLE 3-2: PRIORITY UNLOCK This results in the lowest throughput for the peripheral
SEQUENCE to access the memory, and does so without any impact
; Disable interrupts on execution times.
BCF INTCON0,GIE
3.2.2 PERIPHERAL PRIORITY > ISR
; Bank to PRLOCK register PRIORITY > MAIN PRIORITY
BANKSEL PRLOCK
When the Peripheral Priority (DMAx, Scanner) is higher
MOVLW 55h
than ISR and MAIN Priority, the CPU operation is
stalled when the peripheral requests memory.
; Required sequence, next 4
instructions The CPU is held in its current state until the peripheral
MOVWF PRLOCK completes its operation. Since the peripheral requests
MOVLW AAh access to the bus, the peripheral cannot be disabled
MOVWF PRLOCK until it completes its operation.
; Clear PRLOCKED bit to allow changing This results in the highest throughput for the peripheral
priority settings to access the memory, but has the cost of stalling other
BCF PRLOCK,0 execution while it occurs.

; Enable Interrupts
BSF INTCON0,GIE

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 19


PIC18(L)F25/26K83
3.2.3 ISR PRIORITY > PERIPHERAL 3.2.4 PERIPHERAL 1 PRIORITY > ISR
PRIORITY > MAIN PRIORITY PRIORITY > MAIN PRIORITY >
In this case, interrupt routines and peripheral operation PERIPHERAL 2 PRIORITY
(DMAx, Scanner) will stall the CPU. Interrupt will In this case, the Peripheral 1 will stall the execution of
preempt peripheral operation. This results in lowest the CPU. However, Peripheral 2 can access the
interrupt latency and highest throughput for the memory in cycles unused by Peripheral 1.
peripheral to access the memory.
The operation of the System Arbiter is controlled
through the following registers:

REGISTER 3-1: ISRPR: INTERRUPT SERVICE ROUTINE PRIORITY REGISTER


U-0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — — ISRPR<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
1 = bit is set 0 = bit is cleared HS = Hardware set

bit 7-3 Unimplemented: Read as ‘0’


bit 2-0 ISRPR<2:0>: Interrupt Service Routine Priority Selection bits

REGISTER 3-2: MAINPR: MAIN ROUTINE PRIORITY REGISTER


U-0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-1/1
— — — — — MAINPR<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
1 = bit is set 0 = bit is cleared HS = Hardware set

bit 7-3 Unimplemented: Read as ‘0’


bit 2-0 MAINPR<2:0>: Main Routine Priority Selection bits

REGISTER 3-3: DMA1PR: DMA1 PRIORITY REGISTER


U-0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-1/1 R/W-0/0
— — — — — DMA1PR<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
1 = bit is set 0 = bit is cleared HS = Hardware set

bit 7-3 Unimplemented: Read as ‘0’


bit 2-0 DMA1PR<2:0>: DMA1 Priority Selection bits

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 20


PIC18(L)F25/26K83
REGISTER 3-4: DMA2PR: DMA2 PRIORITY REGISTER
U-0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-1/1 R/W-1/1
— — — — — DMA2PR<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
1 = bit is set 0 = bit is cleared HS = Hardware set

bit 7-3 Unimplemented: Read as ‘0’


bit 2-0 DMA2PR<2:0>: DMA2 Priority Selection bits

REGISTER 3-5: SCANPR: SCANNER PRIORITY REGISTER


U-0 U-0 U-0 U-0 U-0 R/W-1/1 R/W-0/0 R/W-0/0
— — — — — SCANPR<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
1 = bit is set 0 = bit is cleared HS = Hardware set

bit 7-3 Unimplemented: Read as ‘0’


bit 2-0 SCANPR<2:0>: Scanner Priority Selection bits

REGISTER 3-6: PRLOCK: PRIORITY LOCK REGISTER


U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0/0
— — — — — — — PRLOCKED
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
1 = bit is set 0 = bit is cleared HS = Hardware set

bit 7-1 Unimplemented: Read as ‘0’


bit 0 PRLOCKED: PR Register Lock bit(1, 2)
0 = Priority Registers can be modified by write operations; Peripherals do not have access to the
memory
1 = Priority Registers are locked and cannot be written; Peripherals do not have access to the
memory
Note 1: The PRLOCKED bit can only be set or cleared after the unlock sequence.
2: If PR1WAY = 1, the PRLOCKED bit cannot be cleared after it has been set. A system Reset will clear the
bit and allow one more set.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 21


PIC18(L)F25/26K83

TABLE 3-2: SUMMARY OF REGISTERS ASSOCIATED WITH CPU


Register on
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
page

ISRPR — — — — — ISRPR2 ISRPR1 ISRPR0 20


MAINPR — — — — — MAINPR2 MAINPR1 MAINPR0 20
DMA1PR — — — — — DMA1PR2 DMA1PR1 DMA1PR0 20
DMA2PR — — — — — DMA2PR2 DMA2PR1 DMA2PR0 21
SCANPR — — — — — SCANPR2 SCANPR1 SCANPR0 21
PRLOCK — — — — — — — PRLOCKED 21
Legend: — = Unimplemented location, read as ‘0’.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 22


PIC18(L)F25/26K83
4.0 MEMORY ORGANIZATION 4.2 Memory Access Partition (MAP)
There are three types of memory in PIC18 enhanced Program Flash Memory is partitioned into:
microcontroller devices: • Application Block
• Program Flash Memory • Boot Block, and
• Data RAM • Storage Area Flash (SAF) Block
• Data EEPROM
4.2.1 APPLICATION BLOCK
The Program Memory Flash and data RAM share the
same bus, while data EEPROM uses a separate bus. Application Block is where the user’s program resides
This allows for concurrent access of the memory by default. Default settings of the Configuration bits
spaces. (BBEN = 1 and SAFEN = 1) assign all memory in the
Additional detailed information on the operation of the Program Flash Memory area to the Application Block.
Program Flash Memory and Data EEPROM Memory is The WRTAPP Configuration bit is used to protect the
provided in Section 13.0 “Nonvolatile Memory Application Block.
(NVM) Control”.
4.2.2 BOOT BLOCK
4.1 Program Flash Memory Boot Block is an area in program memory that is ideal
Organization for storing bootloader code. Code placed in this area
PIC18 microcontrollers implement a 21-bit Program can be executed by the CPU. The Boot Block can be
Counter, which is capable of addressing a 2 Mbyte write-protected, independent of the main Application
program memory space. Accessing any Block. The Boot Block is enabled by the BBEN bit and
unimplemented memory will return all ‘0’s (a NOP size is based on the value of the BBSIZE bits of
instruction). Configuration word (Register 5-7), see Table 5-1 for
These devices contains the following: Boot Block sizes.
The WRTB Configuration bit is used to write-protect
• PIC18(L)F25K83: 32 Kbytes of Flash memory, up
to 16,384 single-word instructions the Boot Block.
• PIC18(L)F26K83: 64 Kbytes of Flash memory, up 4.2.3 STORAGE AREA FLASH
to 32,768 single-word instructions
Storage Area Flash (SAF) is the area in program
The Reset vector for the device is at address 000000h.
memory that can be used as data storage. SAF is
PIC18(L)F25/26K83 devices feature a vectored inter-
rupt controller with a dedicated interrupt vector table in enabled by the SAFEN bit of the Configuration word in
the program memory, see Section 9.0 “Interrupt Con- Register 5-7. If enabled, the code placed in this area
troller”. cannot be executed by the CPU. The SAF block is
placed at the end of memory and spans 256 bytes.
Note: For memory information on this family of The WRTSAF Configuration bit is used to write-protect
devices, see Table 4-1 and Table 4-3. the Storage Area Flash.

Note: If write-protected locations are written


from NVMCON registers, memory is not
changed and the WRERR bit defined in
Register 13-1 is set.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 23


PIC18(L)F25/26K83
TABLE 4-1: PROGRAM AND DATA EEPROM MEMORY MAP

PIC18(L)F25K83 PIC18(L)F26K83
PC<21:0> PC<21:0>

Note 1 Stack (31 levels) Stack (31 levels) Note 1

00 0000h Reset Vector Reset Vector 00 0000h


••• ••• ••• •••
00 0008h Interrupt Vector High(2) Interrupt Vector High(2) 00 0008h
••• ••• ••• •••
00 0018h Interrupt Vector Low(2) Interrupt Vector Low(2) 00 0018h
00 001Ah 00 001Ah
• Program Flash Memory (16 KW)(3) •
00 7FFFh 00 7FFFh
Program Flash Memory (32 KW)(3)
00 8000h 00 8000h
• •
00 FFFFh 00 FFFFh
01 0000h Not present(4)
01 0000h
Not present(4)
1F FFFFh 1F FFFFh
20 0000h 20 0000h
••• User IDs (8 Words)(5) •••
20 000Fh 20 000Fh
20 0010h 20 0010h
••• Reserved •••
2F FFFFh 2F FFFFh
30 0000h 30 0000h
••• Configuration Words (5 Words)(5) •••
30 0009h 30 0009h
30 000Ah 30 000Ah
••• Reserved •••
30 FFFFh 30 FFFFh
31 0000h 31 0000h
••• •••
31 00FFh Data EEPROM (1024 Bytes) 31 00FFh

31 0100h 31 0100h
••• •••
31 03FFh 31 03FFh
31 0400h 31 0400h
••• Reserved •••
3E FFFFh 3E FFFFh
3F 0000h 3F 0000h
••• Device Information Area(5),(7) •••
3F 003Fh 3F 003Fh
3F0040h 3F0040h
••• Reserved •••
3F FEFFh 3F FEFFh
3F FF00h 3F FF00h
••• Device Configuration Information (5 Words)(5),(6),(7) •••
3F FF09h 3F FF09h
3F FF0Ah 3F FF0Ah
••• Reserved •••
3F FFFBh 3F FFFBh
3F FFFCh 3F FFFCh
••• Revision ID (1 Word)(5),(6),(7) •••
3F FFFDh 3F FFFDh
3F FFFEh 3F FFFEh
••• Device ID (1 Word)(5),(6),(7) •••
3F FFFFh 3F FFFFh

Note 1: The stack is a separate SRAM panel, apart from all user memory panels.
2: 00 0008h location is used as the reset default for the IVTBASE register, the vector table can be relocated in the memory by programming the
IVTBASE register.
3: Storage Area Flash is implemented as the last 128 Words of User Flash, if present.
4: The addresses do not roll over. The region is read as ‘0’.
5: Not code-protected.
6: Hard-coded in silicon.
7: This region cannot be written by the user and it is not affected by a Bulk Erase.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 24


PIC18(L)F25/26K83

TABLE 4-2: PROGRAM FLASH MEMORY PARTITION


Partition(3)
Region Address BBEN = 1 BBEN = 1 BBEN = 0 BBEN = 0
SAFEN = 1 SAFEN = 0 SAFEN = 1 SAFEN = 0
00 0000h
• • • BOOT BOOT
Last Boot Block Memory BLOCK BLOCK
Address
APPLICATION
Last Boot Block Memory BLOCK
Address(1) + 1
Program APPLICATION
• • • APPLICATION
Flash BLOCK
Last Program Memory BLOCK
Memory
Address(2) - 100h APPLICATION
Last Program Memory BLOCK
Address(2) - FEh(4) STORAGE STORAGE
• • • AREA AREA
Last Program Memory FLASH FLASH
Address(2)
Note 1: Last Boot Block Memory Address is based on BBSIZE<2:0>, see Table 5-1.
2: For Last Program Memory Address, see Table 5-1.
3: Refer to Register 5-7: Configuration Word 4L for BBEN and SAFEN definitions.
4: Storage Area Flash is implemented as the last 128 Words of User Flash, if present.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 25


PIC18(L)F25/26K83
4.2.4 PROGRAM COUNTER 4.2.5 RETURN ADDRESS STACK
The Program Counter (PC) specifies the address of the The return address stack allows any combination of up
instruction to fetch for execution. The PC is 21-bit wide to 31 program calls and interrupts to occur. The PC is
and is contained in three separate 8-bit registers. The pushed onto the stack when a CALL or RCALL
low byte, known as the PCL register, is both readable instruction is executed or an interrupt is acknowledged.
and writable. The high byte, or PCH register, contains The PC value is pulled off the stack on a RETURN,
the PC<15:8> bits; it is not directly readable or writable. RETLW or a RETFIE instruction. PCLATU and PCLATH
Updates to the PCH register are performed through the are not affected by any of the RETURN or CALL
PCLATH register. The upper byte is called PCU. This instructions.
register contains the PC<20:16> bits; it is also not The stack operates as a 31-word by 21-bit RAM and a
directly readable or writable. Updates to the PCU 5-bit Stack Pointer. The stack space is not part of either
register are performed through the PCLATU register. program or data space. The Stack Pointer is readable
The contents of PCLATH and PCLATU are transferred and writable and the address on the top of the stack is
to the Program Counter by any operation that writes readable and writable through the Top-of-Stack (TOS)
PCL. Similarly, the upper two bytes of the Program Special File Registers. Data can also be pushed to, or
Counter are transferred to PCLATH and PCLATU by popped from the stack, using these registers.
any operation that reads PCL. This is useful for com- A CALL, CALLW or RCALL instruction causes a push
puted offsets to the PC (see Section onto the stack; the Stack Pointer is first incremented
4.3.2.1 “Computed GOTO”). and the location pointed to by the Stack Pointer is
The PC addresses bytes in the program memory. To written with the contents of the PC (already pointing to
prevent the PC from becoming misaligned with word the instruction following the CALL). A RETURN type
instructions, the Least Significant bit of PCL is fixed to instruction causes a pop from the stack; the contents of
a value of ‘0’. The PC increments by two to address the location pointed to by the STKPTR are transferred
sequential instructions in the program memory. to the PC and then the Stack Pointer is decremented.
The CALL, RCALL, GOTO and program branch The Stack Pointer is initialized to ‘00000’ after all
instructions write to the Program Counter directly. For Resets. There is no RAM associated with the location
these instructions, the contents of PCLATH and corresponding to a Stack Pointer value of ‘00000’; this
PCLATU are not transferred to the Program Counter. is only a Reset value. Status bits in the PCON0 register
indicate if the stack has overflowed or underflowed.

4.2.5.1 Top-of-Stack Access


Only the top of the return address stack (TOS) is readable
and writable. A set of three registers, TOSU:TOSH:TOSL,
holds the contents of the stack location pointed to by the
STKPTR register (Figure 4-1). This allows users to
implement a software stack, if necessary. After a CALL,
RCALL or interrupt, the software can read the pushed
value by reading the TOSU:TOSH:TOSL registers. These
values can be placed on a user-defined software stack. At
return time, the software can return these values to
TOSU:TOSH:TOSL and do a return.
The user must disable the Global Interrupt Enable (GIE)
bits while accessing the stack to prevent inadvertent
stack corruption.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 26


PIC18(L)F25/26K83
FIGURE 4-1: RETURN ADDRESS STACK AND ASSOCIATED REGISTERS
Return Address Stack <20:0>

11111
11110
Top-of-Stack Registers 11101 Stack Pointer

TOSU TOSH TOSL STKPTR<4:0>


00h 1Ah 34h 00010
00011
Top-of-Stack 001A34h 00010
000D58h 00001
00000

4.2.5.2 Return Stack Pointer (STKPTR) If STVREN is set (default) and the stack has been
popped enough times to unload the stack, the next pop
The STKPTR register (Register 4-4) contains the Stack
will return a value of zero to the PC, it will set the
Pointer value. The STKOVF (Stack Overflow) Status bit
STKUNF bit and a Reset will be generated. This
and the STKUNF (Stack Underflow) Status bit can be
condition can be generated by the RETURN, RETLW and
accessed using the PCON0 register. The value of the
RETFIE instructions.
Stack Pointer can be 0 through 31. On Reset, the Stack
Pointer value will be zero. The user may read and write When STVREN = 0, STKUNF will be set but no Reset
the Stack Pointer value. This feature can be used by a will occur.
Real-Time Operating System (RTOS) for stack mainte-
nance. After the PC is pushed onto the stack 32 times
(without popping any values off the stack), the Note: Returning a value of zero to the PC on an
STKOVF bit is set. The STKOVF bit is cleared by soft- underflow has the effect of vectoring the
ware or by a POR. The action that takes place when the program to the Reset vector, where the
stack becomes full depends on the state of the stack conditions can be verified and
STVREN (Stack Overflow Reset Enable) Configuration appropriate actions can be taken. This is
bit. (Refer to Section 5.1 “Configuration Words” for not the same as a Reset, as the contents
a description of the device Configuration bits.) of the SFRs are not affected.

If STVREN is set (default), a Reset will be generated 4.2.5.3 PUSH and POP Instructions
and a Stack Overflow will be indicated by the STKOVF
bit when the 32nd push is initiated. This includes CALL Since the Top-of-Stack is readable and writable, the
and CALLW instructions, as well as stacking the return ability to push values onto the stack and pull values off
address during an interrupt response. The STKOVF bit the stack without disturbing normal program execution
will remain set and the Stack Pointer will be set to zero. is a desirable feature. The PIC18 instruction set
includes two instructions, PUSH and POP, that permit
If STVREN is cleared, the STKOVF bit will be set on the the TOS to be manipulated under software control.
32nd push and the Stack Pointer will remain at 31 but TOSU, TOSH and TOSL can be modified to place data
no Reset will occur. Any additional pushes will or a return address on the stack.
overwrite the 31st push but the STKPTR will remain at
31. The PUSH instruction places the current PC value onto
the stack. This increments the Stack Pointer and loads
Setting STKOVF = 1 in software will change the bit, but the current PC value onto the stack.
will not generate a Reset.
The POP instruction discards the current TOS by
The STKUNF bit is set when a stack pop returns a decrementing the Stack Pointer. The previous value
value of zero. The STKUNF bit is cleared by software pushed onto the stack then becomes the TOS value.
or by POR. The action that takes place when the stack
becomes full depends on the state of the STVREN
(Stack Overflow Reset Enable) Configuration bit.
(Refer to Section 5.1 “Configuration Words” for a
description of the device Configuration bits).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 27


PIC18(L)F25/26K83
4.3 Register Definitions: Stack Pointer
REGISTER 4-1: TOSU: TOP-OF-STACK UPPER BYTE
U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
— — — TOS<20:16>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented C = Clearable only bit
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 TOS<20:16>: Top-of-Stack Location bits

REGISTER 4-2: TOSH: TOP-OF-STACK HIGH BYTE


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
TOS<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented C = Clearable only bit
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 TOS<15:8>: Top-of-Stack Location bits

REGISTER 4-3: TOSL: TOP-OF-STACK LOW BYTE


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
TOS<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented C = Clearable only bit
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 TOS<7:0>: Top-of-Stack Location bits

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 28


PIC18(L)F25/26K83

REGISTER 4-4: STKPTR: STACK POINTER REGISTER


U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
— — — STKPTR<4:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented C = Clearable only bit
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 STKPTR<4:0>: Stack Pointer Location bits

4.3.1 FAST REGISTER STACK


There are three levels of fast stack registers available -
one for CALL type instructions and two for interrupts. A
fast register stack is provided for the Status, WREG
and BSR registers, to provide a “fast return” option for
interrupts. It is loaded with the current value of the cor-
responding register when the processor vectors for an
interrupt. All interrupt sources will push values into the
stack registers. The values in the registers are then
loaded back into their associated registers if the
RETFIE, FAST instruction is used to return from the
interrupt. Refer to Section 4.5.6 “Call Shadow Regis-
ter” for interrupt call shadow registers.
Example 4-1 shows a source code example that uses
the fast register stack during a subroutine call and
return.

EXAMPLE 4-1: FAST REGISTER STACK


CODE EXAMPLE
CALL SUB1, FAST ;STATUS, WREG, BSR
;SAVED IN FAST REGISTER
;STACK

SUB1 

RETURN, FAST ;RESTORE VALUES SAVED
;IN FAST REGISTER STACK

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 29


PIC18(L)F25/26K83
4.3.2 LOOK-UP TABLES IN PROGRAM
MEMORY
There may be programming situations that require the
creation of data structures, or look-up tables, in
program memory. For PIC18 devices, look-up tables
can be implemented in two ways:
• Computed GOTO
• Table Reads

4.3.2.1 Computed GOTO


A computed GOTO is accomplished by adding an offset
to the Program Counter. An example is shown in
Example 4-2.
A look-up table can be formed with an ADDWF PCL
instruction and a group of RETLW nn instructions. The
W register is loaded with an offset into the table before
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 nn
instructions that returns the value ‘nn’ to the calling
function.
The offset value (in WREG) specifies the number of
bytes that the Program Counter should advance and
should be multiples of two (LSb = 0).
In this method, only one data byte may be stored in
each instruction location and room on the return
address stack is required.

EXAMPLE 4-2: COMPUTED GOTO USING


AN OFFSET VALUE
MOVF OFFSET, W
CALL TABLE
ORG nn00h
TABLE ADDWF PCL
RETLW nnh
RETLW nnh
RETLW nnh
.
.
.

4.3.2.2 Table Reads and Table Writes


A better method of storing data in program memory
allows two bytes of data to be stored in each instruction
location.
Look-up table data may be stored two bytes per
program word by using table reads and writes. The
Table Pointer (TBLPTR) register specifies the byte
address and the Table Latch (TABLAT) register
contains the data that is read from or written to program
memory.
Table read and table write operations are discussed
further in Section 13.1.1 “Table Reads and Table
Writes”.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 30


PIC18(L)F25/26K83
4.4 PIC18 Instruction Cycle 4.4.2 INSTRUCTION FLOW/PIPELINING
An “Instruction Cycle” consists of four Q cycles: Q1
4.4.1 CLOCKING SCHEME through Q4. The instruction fetch and execute are
The microcontroller clock input, whether from an pipelined in such a manner that a fetch takes one
internal or external source, is internally divided by four instruction cycle, while the decode and execute take
to generate four quadrature clocks (Q1, Q2, Q3 and another instruction cycle. However, due to the
Q4). Internally, the Program Counter is incremented on pipelining, each instruction effectively executes in one
every Q1; the instruction is fetched from the program cycle. If an instruction causes the Program Counter to
memory and latched into the instruction register during change (e.g., GOTO), then two cycles are required to
Q4. The instruction is decoded and executed during the complete the instruction (Example 4-3).
following Q1 through Q4. The clocks and instruction A fetch cycle begins with the Program Counter (PC)
execution flow are shown in Figure 4-2. incrementing in Q1.
In the execution cycle, the fetched instruction is latched
into the Instruction Register (IR) in cycle Q1. This
instruction is then decoded and executed during the
Q2, Q3 and Q4 cycles. Data memory is read during Q2
(operand read) and written during Q4 (destination
write).

FIGURE 4-2: CLOCK/INSTRUCTION CYCLE

Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
OSC1
Q1
Q2 Internal
Q3 Phase
Clock
Q4
PC PC PC + 2 PC + 4
OSC2/CLKOUT
(RC mode)
Execute INST (PC – 2)
Fetch INST (PC) Execute INST (PC)
Fetch INST (PC + 2) Execute INST (PC + 2)
Fetch INST (PC + 4)

EXAMPLE 4-3: INSTRUCTION PIPELINE FLOW

TCY0 TCY1 TCY2 TCY3 TCY4 TCY5


1. MOVLW 55h Fetch 1 Execute 1
2. MOVWF PORTB Fetch 2 Execute 2
3. BRA SUB_1 Fetch 3 Execute 3
4. BSF PORTA, BIT3 (Forced NOP) Fetch 4 Flush (NOP)
5. Instruction @ address SUB_1 Fetch SUB_1 Execute SUB_1

Note: There are some instructions that take multiple cycles to execute. Refer to Section 42.0 “Instruction Set
Summary” for details.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 31


PIC18(L)F25/26K83
4.4.3 INSTRUCTIONS IN PROGRAM 4.4.4 MULTI-WORD INSTRUCTIONS
MEMORY The standard PIC18 instruction set has four two-word
The program memory is addressed in bytes. instructions: CALL, MOVFF, GOTO and LFSR and two
Instructions are stored as either two bytes or four bytes three-word instructions: MOVFFL and MOVSFL. In all
in program memory. The Least Significant Byte of an cases, the second and the third word of the instruction
instruction word is always stored in a program memory always has ‘1111’ as its four Most Significant bits; the
location with an even address (LSb = 0). To maintain other 12 bits are literal data, usually a data memory
alignment with instruction boundaries, the PC address.
increments in steps of two and the LSb will always read The use of ‘1111’ in the four MSbs of an instruction
‘0’ (see Section 4.2.4 “Program Counter”). specifies a special form of NOP. If the instruction is
Figure 4-3 shows an example of how instruction words executed in proper sequence – immediately after the
are stored in the program memory. first word – the data in the second word is accessed
and used by the instruction sequence. If the first word
The CALL and GOTO instructions have the absolute
is skipped for some reason and the second or third
program memory address embedded into the
word is executed by itself, a NOP is executed instead.
instruction. Since instructions are always stored on word
This is necessary for cases when the multi-word
boundaries, the data contained in the instruction is a
instruction is preceded by a conditional instruction that
word address. The word address is written to PC<20:1>,
changes the PC. Example 4-4 shows how this works.
which accesses the desired byte address in program
memory. Instruction #2 in Figure 4-3 shows how the
instruction GOTO 0006h is encoded in the program
memory. Program branch instructions, which encode a
relative address offset, operate in the same manner. The
offset value stored in a branch instruction represents the
number of single-word instructions that the PC will be
offset by. Section 42.0 “Instruction Set Summary”
provides further details of the instruction set.

FIGURE 4-3: INSTRUCTIONS IN PROGRAM MEMORY


Word Address
LSB = 1 LSB = 0 
Program Memory 000000h
Byte Locations  000002h
000004h
000006h
Instruction 1: MOVLW 055h 0Fh 55h 000008h
Instruction 2: GOTO 0006h EFh 03h 00000Ah
F0h 00h 00000Ch
Instruction 3: MOVFF 123h, 456h C1h 23h 00000Eh
F4h 56h 000010h
Instruction 4: MOVFFL 123h, 456h 00h 60h 000012h
F4h 8Ch 000014h
F4h 56h 000016h
000018h
00001Ah

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 32


PIC18(L)F25/26K83
EXAMPLE 4-4: TWO-WORD INSTRUCTIONS
CASE 1:
Object Code Source Code
0110 0110 0000 0000 TSTFSZ REG1 ; is RAM location 0?
1100 0001 0010 0011 MOVFF REG1, REG2 ; Yes, skip this word
1111 0100 0101 0110 ; Execute this word as a NOP
0010 0100 0000 0000 ADDWF REG3 ; continue code
CASE 2:
Object Code Source Code
0110 0110 0000 0000 TSTFSZ REG1 ; is RAM location 0?
1100 0001 0010 0011 MOVFF REG1, REG2 ; No, execute this word
1111 0100 0101 0110 ; 2nd word of instruction
0010 0100 0000 0000 ADDWF REG3 ; continue code

EXAMPLE 4-5: THREE-WORD INSTRUCTIONS


CASE 1:
Object Code Source Code
0110 0110 0000 0000 TSTFSZ REG1 ; is RAM location 0?
0000 0000 0110 0000 MOVFFL REG1, REG2 ; Yes, skip this word
1111 0100 1000 1100 ; Execute this word as a NOP
1111 0100 0101 0110 ; Execute this word as a NOP
0010 0100 0000 0000 ADDWF REG3 ; continue code
CASE 2:
Object Code Source Code
0110 0110 0000 0000 TSTFSZ REG1 ; is RAM location 0?
0000 0000 0110 0000 MOVFFL REG1, REG2 ; No, execute this word
1111 0100 1000 1100 ; 2nd word of instruction
1111 0100 0101 0110 ; 3rd word of instruction
0010 0100 0000 0000 ADDWF REG3 ; continue code

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 33


PIC18(L)F25/26K83
4.5 Data Memory Organization 4.5.1 BANK SELECT REGISTER (BSR)
Data memory in PIC18(L)F25/26K83 devices is Large areas of data memory require an efficient
implemented as static RAM. Each register in the data addressing scheme to make rapid access to any
memory has a 14-bit address, allowing up to 16384 address possible. Ideally, this means that an entire
bytes of data memory. The memory space is divided address does not need to be provided for each read or
into 64 banks that contain 256 bytes each. Figure 4-5 write operation. For PIC18 devices, this is accom-
shows the data memory organization for the plished with a RAM banking scheme. This divides the
PIC18(L)F25/26K83 devices in this data sheet. memory space into 64 contiguous banks of 256 bytes.
Depending on the instruction, each location can be
The data memory contains Special Function Registers addressed directly by its full 14-bit address, or an 8-bit
(SFRs) and General Purpose Registers (GPRs). The low-order address and a 6-bit Bank Select Register.
SFRs are used for control and status of the controller
and peripheral functions, while GPRs are used for data This SFR holds the six Most Significant bits of a loca-
storage and scratchpad operations in the user’s tion address; the instruction itself includes the
application. Any read of an unimplemented location will eight Least Significant bits. Only the six lower bits of the
read as ‘0’s. BSR are implemented (BSR<5:0>). The upper two bits
are unused; they will always read ‘0’ and cannot be
The instruction set and architecture allow operations written to. The BSR can be loaded directly by using the
across all banks. The entire data memory may be MOVLB instruction.
accessed by Direct, Indirect or Indexed Addressing
modes. Addressing modes are discussed later in this The value of the BSR indicates the bank in data
subsection. memory; the eight bits in the instruction show the
location in the bank and can be thought of as an offset
To ensure that commonly used registers (select SFRs from the bank’s lower boundary. The relationship
and GPRs) can be accessed in a single cycle, PIC18 between the BSR’s value and the bank division in data
devices implement an Access Bank. This is a 256-byte memory is shown in Figure 4-5.
memory space that provides fast access to some SFRs
and the lower portion of GPR Bank 0 without using the Since up to 64 registers may share the same low-order
Bank Select Register (BSR). Section 4.5.4 “Access address, the user must always be careful to ensure that
Bank” provides a detailed description of the Access the proper bank is selected before performing a data
RAM. read or write. For example, writing what should be
program data to an 8-bit address of F9h while the BSR
is 3Fh will end up corrupting the Program Counter.
While any bank can be selected, only those banks that
are actually implemented can be read or written to.
Writes to unimplemented banks are ignored, while
reads from unimplemented banks will return ‘0’s. Even
so, the STATUS register will still be affected as if the
operation was successful. The data memory maps in
Figure 4-5 indicate which banks are implemented.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 34


PIC18(L)F25/26K83
FIGURE 4-4: DATA MEMORY MAP FOR PIC18(L)F25/26K83 DEVICES

Bank BSR<5:0> addr<7:0> Address


PIC18(L)F25K83 PIC18(L)F26K83
addr<13:0>
00h Access RAM Access RAM 0000h
005Fh
Bank 0 00 0000
GPR GPR 0060h
FFh 00FFh
00h 0100h
Bank 1 00 0001
FFh

00h
Bank 2 00 0010 GPR GPR •
FFh

00h
Bank 3 00 0011
FFh 03FFh
00h 0400h
00 0100
Banks • •
— GPR GPR
4 to 7 • •
00 0111
FFh 07FFh
00h 0800h
00 1000 Virtual Bank
Banks • •
— GPR
8 to 15 • •
00 1111
FFh 0FFFh 00h
Access RAM
00h 1000h 5Fh
01 0000 60h
Banks • • SFR
— FFh
16 to 31 • Unimplemented •
01 1111
FFh 1FFFh
00h Unimplemented 2000
10 0000 • •
Banks
— • •
32 to 53
11 0111 • •
FFh 37FF
00h 3600h
Bank 54 d54 • CAN Test CAN Test •
FFh 36FFh
00h 3700h
Bank 55 d55 • CAN SFR CAN SFR •
FFh 37FFh
00h 3800h
11 1000
Banks • •
— SFR SFR
56 to 62 • •
11 1110
FFh 3EFFh
00h 3F00h
3F5Fh
Bank 63 11 1111 SFR SFR
3F60h
FFh 3FFFh

Note 1: Depends on the number of SFRs. Refer subsequent SFR tables.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 35


FIGURE 4-5: USE OF THE BANK SELECT REGISTER (DIRECT ADDRESSING)
 2017 Microchip Technology Inc.

BSR(1)
Data Memory From Opcode(2)
7 0 0000h 00h 7 0
0 0 0 0 0 0 1 0 Bank 0 1 1 1 1 1 1 1 1
FFh
0100h 00h
Bank 1
Bank Select(2) 0200h FFh
00h
Bank 2
0300h FFh
00h

Bank 3
through
Bank 61

FFh
3E00h
Preliminary

00h
Bank 62
3F00h FFh
00h
Bank 63
3FFFh FFh

Note 1: The Access RAM bit of the instruction can be used to force an override of the selected bank (BSR<5:0>) to the registers of the Access Bank.

PIC18(L)F25/26K83
DS40001943A-page 36
PIC18(L)F25/26K83
4.5.2 GENERAL PURPOSE REGISTER 4.5.4 ACCESS BANK
FILE To streamline access for the most commonly used data
General Purpose RAM is available starting Bank 0 of memory locations, the data memory is configured with
data memory. GPRs are not initialized by a Power-on an Access Bank, which allows users to access a
Reset and are unchanged on all other Resets. mapped block of memory without specifying a BSR.
The Access Bank consists of the first 96 bytes of
4.5.3 SPECIAL FUNCTION REGISTERS memory (00h-5Fh) in Bank 0 and the last 160 bytes of
The Special Function Registers (SFRs) are registers memory (60h-FFh) in Bank 63. The lower half is known
used by the CPU and peripheral modules for controlling as the “Access RAM” and is composed of GPRs. This
the desired operation of the device. These registers are upper half is also where some of the SFRs of the device
implemented as static RAM. SFRs start at the top of are mapped. These two areas are mapped
data memory (3FFFh) and extend downward to occupy contiguously in the Access Bank and can be addressed
Bank 56 through 63 (3800h to 3FFFh). A list of these linearly by an 8-bit address (Figure 4-5).
registers is given in Table 4-3 to Table 4-10. A bitwise The Access Bank is used by core PIC18 instructions
summary of these registers can be found in that include the Access RAM bit (the ‘a’ parameter in
Section 43.0 “Register Summary”. the instruction). When ‘a’ is equal to ‘1’, the instruction
uses the BSR and the 8-bit address included in the
opcode for the data memory address. When ‘a’ is ‘0’,
however, the instruction uses the Access Bank address
map; the current value of the BSR is ignored.
Using this “forced” addressing allows the instruction to
operate on a data address in a single cycle, without
updating the BSR first. For 8-bit addresses of 60h and
above, this means that users can evaluate and operate
on SFRs more efficiently. The Access RAM below 60h
is a good place for data values that the user might need
to access rapidly, such as immediate computational
results or common program variables. Access RAM
also allows for faster and more code efficient and
switching of variables.
The mapping of the Access Bank is slightly different
when the extended instruction set is enabled (XINST
Configuration bit = 1). This is discussed in more detail
in Section 4.8.3 “Mapping the Access Bank in
Indexed Literal Offset Mode”.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 37


TABLE 4-3: SPECIAL FUNCTION REGISTER MAP FOR PIC18(L)F25/26K83 DEVICES BANK 63
 2017 Microchip Technology Inc.

3FFFh TOSU 3FDFh INDF2 3FBFh — 3F9Fh T4PR 3F7Fh CCP1CAP 3F5Fh CCPTMRS1 3F3Fh NCO1CLK 3F1Fh SMT1CON1
3FFEh TOSH 3FDEh POSTINC2 3FBEh — 3F9Eh T4TMR 3F7Eh CCP1CON 3F5Eh CCPTMRS0 3F3Eh NCO1CON 3F1Eh SMT1CON0
3FFDh TOSL 3FDDh POSTDEC2 3FBDh — 3F9Dh T5CLK 3F7Dh CCPR1H 3F5Dh — 3F3Dh NCO1INCU 3F1Dh SMT1PRU
3FFCh STKPTR 3FDCh PRECIN2 3FBCh LATC 3F9Ch T5GATE 3F7Ch CCPR1L 3F5Ch — 3F3Ch NCO1INCH 3F1Ch SMT1PRH
3FFBh PCLATU 3FDBh PLUSW2 3FBBh LATB 3F9Bh T5GCON 3F7Bh CCP2CAP 3F5Bh — 3F3Bh NCO1INCL 3F1Bh SMT1PRL
3FFAh PCLATH 3FDAh FSR2H 3FBAh LATA 3F9Ah T5CON 3F7Ah CCP2CON 3F5Ah CWG1STR 3F3Ah NCO1ACCU 3F1Ah SMT1CPWU
3FF9h PCL 3FD9h FSR2L 3FB9h T0CON1 3F99h TMR5H 3F79h CCPR2H 3F59h CWG1AS1 3F39h NCO1ACCH 3F19h SMT1CPWH
3FF8h TBLPRTU 3FD8h STATUS 3FB8h T0CON0 3F98h TMR5L 3F78h CCPR2L 3F58h CWG1AS0 3F38h NCO1ACCL 3F18h SMT1CPWL
3FF7h TBLPTRH 3FD7h IVTBASEU 3FB7h TMR0H 3F97h T6RST 3F77h CCP3CAP 3F57h CWG1CON1 3F37h — 3F17h SMT1CPRU
3FF6h TBLPTRL 3FD6h IVTBASEH 3FB6h TMR0L 3F96h T6CLK 3F76h CCP3CON 3F56h CWG1CON0 3F36h — 3F16h SMT1CPRH
3FF5h TABLAT 3FD5h IVTBASEL 3FB5h T1CLK 3F95h T6HLT 3F75h CCPR3H 3F55h CWG1DBF 3F35h — 3F15h SMT1CPRL
3FF4h PRODH 3FD4h IVTLOCK 3FB4h T1GATE 3F94h T6CON 3F74h CCPR3L 3F54h CWG1DBR 3F34h — 3F14h SMT1TMRU
3FF3h PRODL 3FD3h INTCON1 3FB3h T1GCON 3F93h T6PR 3F73h CCP4CAP 3F53h CWG1ISM 3F33h — 3F13h SMT1TMRH
3FF2h — 3FD2h INTCON0 3FB2h T1CON 3F92h T6TMR 3F72h CCP4CON 3F52h CWG1CLK 3F32h — 3F12h SMT1TMRL
3FF1h PCON1 3FD1h — 3FB1h TMR1H 3F91h ECANCON 3F71h CCPR4H 3F51h CWG2STR 3F31h — 3F11h SMT2WIN
3FF0h PCON0 3FD0h — 3FB0h TMR1L 3F90h COMSTAT 3F70h CCPR4L 3F50h CWG2AS1 3F30h — 3F10h SMT2SIG
3FEFh INDF0 3FCFh — 3FAFh T2RST 3F8Fh CANCON 3F6Fh — 3F4Fh CWG2AS0 3F2Fh — 3F0Fh SMT2CLK
3FEEh POSTINC0 3FCEh PORTE 3FAEh T2CLK 3F8Eh CANSTAT 3F6Eh PWM5CON 3F4Eh CWG2CON1 3F2Eh — 3F0Eh SMT2STAT
3FEDh POSTDEC0 3FCDh — 3FADh T2HLT 3F8Dh RXB0D7 3F6Dh PWM5DCH 3F4Dh CWG2CON0 3F2Dh — 3F0Dh SMT2CON1
3FECh PRECIN0 3FCCh PORTC 3FACh T2CON 3F8Ch RXB0D6 3F6Ch PWM5DCL 3F4Ch CWG2DBF 3F2Ch — 3F0Ch SMT2CON0
Preliminary

3FEBh PLUSW0 3FCBh PORTB 3FABh T2PR 3F8Bh RXB0D5 3F6Bh — 3F4Bh CWG2DBR 3F2Bh — 3F0Bh SMT2PRU
3FEAh FSR0H 3FCAh PORTA 3FAAh T2TMR 3F8Ah RXB0D4 3F6Ah PWM6CON 3F4Ah CWG2ISM 3F2Ah — 3F0Ah SMT2PRH
3FE9h FSR0L 3FC9h — 3FA9h T3CLK 3F89h RXB0D3 3F69h PWM6DCH 3F49h CWG2CLK 3F29h — 3F09h SMT2PRL
3FE8h WREG 3FC8h — 3FA8h T3GATE 3F88h RXB0D2 3F68h PWM6DCL 3F48h CWG3STR 3F28h — 3F08h SMT2CPWU
3FE7h INDF1 3FC7h — 3FA7h T3GCON 3F87h RXB0D1 3F67h — 3F47h CWG3AS1 3F27h — 3F07h SMT2CPWH
3FE6h POSTINC1 3FC6h — 3FA6h T3CON 3F86h RXB0D0 3F66h PWM7CON 3F46h CWG3AS0 3F26h — 3F06h SMT2CPWL
3FE5h POSTDEC1 3FC5h — 3FA5h TMR3H 3F85h RXB0DLC 3F65h PWM7DCH 3F45h CWG3CON1 3F25h — 3F05h SMT2CPRU

PIC18(L)F25/26K83
3FE4h PRECIN1 3FC4h TRISC 3FA4h TMR3L 3F84h RXB0EIDL 3F64h PWM7DCL 3F44h CWG3CON0 3F24h — 3F04h SMT2CPRH
3FE3h PLUSW1 3FC3h TRISB 3FA3h T4RST 3F83h RXB0EIDH 3F63h — 3F43h CWG3DBF 3F23h SMT1WIN 3F03h SMT2CPRL
3FE2h FSR1H 3FC2h TRISA 3FA2h T4CLK 3F82h RXB0SIDL 3F62h PWM8CON 3F42h CWG3DBR 3F22h SMT1SIG 3F02h SMT2TMRU
3FE1h FSR1L 3FC1h — 3FA1h T4HLT 3F81h RXB0SIDH 3F61h PWM8DCH 3F41h CWG3ISM 3F21h SMT1CLK 3F01h SMT2TMRH
3FE0h BSR 3FC0h — 3FA0h T4CON 3F80h RXB0CON 3F60h PWM8DCL 3F40h CWG3CLK 3F20h SMT1STAT 3F00h SMT2TMRL
Legend: Unimplemented data memory locations and registers, read as ‘0’.
DS40001943A-page 38
TABLE 4-4: SPECIAL FUNCTION REGISTER MAP FOR PIC18(L)F25/26K83 DEVICES BANK 62
 2017 Microchip Technology Inc.

3EFFh ADCLK 3EDFh ADLTHH 3EBFh CM1PCH 3E9Fh — 3E7Fh — 3E5Fh — 3E3Fh — 3E1Fh —
3EFEh ADACT 3EDEh ADLTHL 3EBEh CM1NCH 3E9Eh DAC1CON0 3E7Eh — 3E5Eh — 3E3Eh — 3E1Eh —
3EFDh ADREF 3EDDh — 3EBDh CM1CON1 3E9Dh — 3E7Dh — 3E5Dh — 3E3Dh — 3E1Dh —
3EFCh ADSTAT 3EDCh — 3EBCh CM1CON0 3E9Ch DAC1CON1 3E7Ch — 3E5Ch — 3E3Ch — 3E1Ch —
3EFBh ADCON3 3EDBh — 3EBBh CM2PCH 3E9Bh — 3E7Bh — 3E5Bh — 3E3Bh — 3E1Bh —
3EFAh ADCON2 3EDAh — 3EBAh CM2NCH 3E9Ah — 3E7Ah — 3E5Ah — 3E3Ah — 3E1Ah —
3EF9h ADCON1 3ED9h — 3EB9h CM2CON1 3E99h — 3E79h — 3E59h — 3E39h — 3E19h —
3EF8h ADCON0 3ED8h — 3EB8h CM2CON0 3E98h — 3E78h — 3E58h — 3E38h — 3E18h —
3EF7h ADPREH 3ED7h ADCP 3EB7h — 3E97h — 3E77h — 3E57h — 3E37h — 3E17h —
3EF6h ADPREL 3ED6h — 3EB6h — 3E96h — 3E76h — 3E56h — 3E36h — 3E16h —
3EF5h ADCAP 3ED5h — 3EB5h — 3E95h — 3E75h — 3E55h — 3E35h — 3E15h —
3EF4h ADACQH 3ED4h — 3EB4h — 3E94h — 3E74h — 3E54h — 3E34h — 3E14h —
3EF3h ADACQL 3ED3h — 3EB3h — 3E93h — 3E73h — 3E53h — 3E33h — 3E13h —
2EF2h — 3ED2h — 3EB2h — 3E92h — 3E72h — 3E52h — 3E32h — 3E12h —
3EF1h ADPCH 3ED1h — 3EB1h — 3E91h — 3E71h — 3E51h — 3E31h — 3E11h —
3EF0h ADRESH 3ED0h — 3EB0h — 3E90h — 3E70h — 3E50h — 3E30h — 3E10h —
3EEFh ADRESL 3ECFh — 3EAFh — 3E8Fh — 3E6Fh — 3E4Fh — 3E2Fh — 3E0Fh —
3EEEh ADPREVH 3ECEh — 3EAEh — 3E8Eh — 3E6Eh — 3E4Eh — 3E2Eh — 3E0Eh —
Preliminary

3EEDh ADPREVL 3ECDh — 3EADh — 3E8Dh — 3E6Dh — 3E4Dh — 3E2Dh — 3E0Dh —


3EECh ADRPT 3ECCh — 3EACh — 3E8Ch — 3E6Ch — 3E4Ch — 3E2Ch — 3E0Ch —
3EEBh ADCNT 3ECBh — 3EABh — 3E8Bh — 3E6Bh — 3E4Bh — 3E2Bh — 3E0Bh —
3EEAh ADACCU 3ECAh HLVDCON1 3EAAh — 3E8Ah — 3E6Ah — 3E4Ah — 3E2Ah — 3E0Ah —
3EE9h ADACCH 3EC9h HLVDCON0 3EA9h — 3E89h — 3E69h — 3E49h — 3E29h — 3E09h —
3EE8h ADACCL 3EC8h — 3EA8h — 3E88h — 3E68h — 3E48h — 3E28h — 3E08h —
3EE7h ADFLTRH 3EC7h — 3EA7h — 3E87h — 3E67h — 3E47h — 3E27h — 3E07h —

PIC18(L)F25/26K83
3EE6h ADFLTRL 3EC6h — 3EA6h — 3E86h — 3E66h — 3E46h — 3E26h — 3E06h —
3EE5h ADSTPTH 3EC5h — 3EA5h — 3E85h — 3E65h — 3E45h — 3E25h — 3E05h —
3EE4h ADSTPTL 3EC4h — 3EA4h — 3E84h — 3E64h — 3E44h — 3E24h — 3E04h —
3EE3h ADERRH 3EC3h ZCDCON 3EA3h — 3E83h — 3E63h — 3E43h — 3E23h — 3E03h —
3EE2h ADERRL 3EC2h — 3EA2h — 3E82h — 3E62h — 3E42h — 3E22h — 3E02h —
3EE1h ADUTHH 3EC1h FVRCON 3EA1h — 3E81h — 3E61h — 3E41h — 3E21h — 3E01h —
3EE0h ADUTHL 3EC0h CMOUT 3EA0h — 3E80h — 3E60h — 3E40h — 3E20h — 3E00h —
Legend: Unimplemented data memory locations and registers, read as ‘0’.
DS40001943A-page 39
TABLE 4-5: SPECIAL FUNCTION REGISTER MAP FOR PIC18(L)F25/26K83 DEVICES BANK 61
 2017 Microchip Technology Inc.

3DFFh — 3DDFh U2FIFO 3DBFh — 3D9Fh — 3D7Fh — 3D5Fh I2C2CON2 3D3Fh — 3D1Fh —
3DFEh — 3DDEh U2BRGH 3DBEh — 3D9Eh — 3D7Eh — 3D5Eh I2C2CON1 3D3Eh — 3D1Eh —
3DFDh — 3DDDh U2BRGL 3DBDh — 3D9Dh — 3D7Dh — 3D5Dh I2C2CON0 3D3Dh — 3D1Dh —
3DFCh — 3DDCh U2CON2 3DBCh — 3D9Ch — 3D7Ch I2C1BTO 3D5Ch I2C2ADR3 3D3Ch — 3D1Ch SPI1CLK
3DFBh — 3DDBh U2CON1 3DBBh — 3D9Bh — 3D7Bh I2C1CLK 3D5Bh I2C2ADR2 3D3Bh — 3D1Bh SPI1INTE
3DFAh U1ERRIE 3DDAh U2CON0 3DBAh — 3D9Ah — 3D7Ah I2C1PIE 3D5Ah I2C2ADR1 3D3Ah — 3D1Ah SPI1INTF
3DF9h U1ERRIR 3DD9h U2P3H 3DB9h — 3D99h — 3D79h I2C1PIR 3D59h I2C2ADR0 3D39h — 3D19h SPI1BAUD
3DF8h U1UIR 3DD8h U2P3L 3DB8h — 3D98h — 3D78h I2C1STAT1 3D58h I2C2ADB1 3D38h — 3D18h SPI1TWIDTH
3DF7h U1FIFO 3DD7h U2P2H 3DB7h — 3D97h — 3D77h I2C1STAT0 3D57h I2C2ADB0 3D37h — 3D17h SPI1STATUS
3DF6h U1BRGH 3DD6h U2P2L 3DB6h — 3D96h — 3D76h I2C1ERR 3D56h I2C2CNT 3D36h — 3D16h SPI1CON2
3DF5h U1BRGL 3DD5h U2P1H 3DB5h — 3D95h — 3D75h I2C1CON2 3D55h I2C2TXB 3D35h — 3D15h SPI1CON1
3DF4h U1CON2 3DD4h U2P1L 3DB4h — 3D94h — 3D74h I2C1CON1 3D54h I2C2RXB 3D34h — 3D14h SPI1CON0
3DF3h U1CON1 3DD3h U2TXCHK 3DB3h — 3D93h — 3D73h I2C1CON0 3D53h — 3D33h — 3D13h SPI1TCNTH
3DF2h U1CON0 3DD2h U2TXB 3DB2h — 3D92h — 3D72h I2C1ADR3 3D52h — 3D32h — 3D12h SPI1TCNTL
3DF1h U1P3H 3DD1h U2RXCHK 3DB1h — 3D91h — 3D71h I2C1ADR2 3D51h — 3D31h — 3D11h SPI1TXB
3DF0h U1P3L 3DD0h U2RXB 3DB0h — 3D90h — 3D70h I2C1ADR1 3D50h — 3D30h — 3D10h SPI1RXB
3DEFh U1P2H 3DCFh — 3DAFh — 3D8Fh — 3D6Fh I2C1ADR0 3D4Fh — 3D2Fh — 3D0Fh —
3DEEh U1P2L 3DCEh — 3DAEh — 3D8Eh — 3D6Eh I2C1ADB1 3D4Eh — 3D2Eh — 3D0Eh —
3DEDh U1P1H 3DCDh — 3DADh — 3D8Dh — 3D6Dh I2C1ADB0 3D4Dh — 3D2Dh — 3D0Dh —
3DECh U1P1L 3DCCh — 3DACh — 3D8Ch — 3D6Ch I2C1CNT 3D4Ch — 3D2Ch — 3D0Ch —
Preliminary

3DEBh U1TXCHK 3DCBh — 3DABh — 3D8Bh — 3D6Bh I2C1TXB 3D4Bh — 3D2Bh — 3D0Bh —
3DEAh U1TXB 3DCAh — 3DAAh — 3D8Ah — 3D6Ah I2C1RXB 3D4Ah — 3D2Ah — 3D0Ah —
3DE9h U1RXCHK 3DC9h — 3DA9h — 3D89h — 3D69h — 3D49h — 3D29h — 3D09h —
3DE8h U1RXB 3DC8h — 3DA8h — 3D88h — 3D68h — 3D48h — 3D28h — 3D08h —
3DE7h — 3DC7h — 3DA7h — 3D87h — 3D67h — 3D47h — 3D27h — 3D07h —
3DE6h — 3DC6h — 3DA6h — 3D86h — 3D66h I2C2BTO 3D46h — 3D26h — 3D06h —
3DE5h — 3DC5h — 3DA5h — 3D85h — 3D65h I2C2CLK 3D45h — 3D25h — 3D05h —

PIC18(L)F25/26K83
3DE4h — 3DC4h — 3DA4h — 3D84h — 3D64h I2C2PIE 3D44h — 3D24h — 3D04h —
3DE3h — 3DC3h — 3DA3h — 3D83h — 3D63h I2C2PIR 3D43h — 3D23h — 3D03h —
3DE2h U2ERRIE 3DC2h — 3DA2h — 3D82h — 3D62h I2C2STAT1 3D42h — 3D22h — 3D02h —
3DE1h U2ERRIR 3DC1h — 3DA1h — 3D81h — 3D61h I2C2STAT0 3D41h — 3D21h — 3D01h —
3DE0h U2UIR 3DC0h — 3DA0h — 3D80h — 3D60h I2C2ERR 3D40h — 3D20h — 3D00h —
Legend: Unimplemented data memory locations and registers, read as ‘0’.
DS40001943A-page 40
TABLE 4-6: SPECIAL FUNCTION REGISTER MAP FOR PIC18(L)F25/26K83 DEVICES BANK 60
 2017 Microchip Technology Inc.

3CFFh — 3CDFh — 3CBFh — 3C9Fh — 3C7Fh — 3C5Fh CLC4GLS3 3C3Fh — 3C1Fh —


3CFEh MD1CARH 3CDEh — 3CBEh — 3C9Eh — 3C7Eh CLCDATA0 3C5Eh CLC4GLS2 3C3Eh — 3C1Eh —
3CFDh MD1CARL 3CDDh — 3CBDh — 3C9Dh — 3C7Dh CLC1GLS3 3C5Dh CLC4GLS1 3C3Dh — 3C1Dh —
3CFCh MD1SRC 3CDCh — 3CBCh — 3C9Ch — 3C7Ch CLC1GLS2 3C5Ch CLC4GLS0 3C3Ch — 3C1Ch —
3CFBh MD1CON1 3CDBh — 3CBBh — 3C9Bh — 3C7Bh CLC1GLS1 3C5Bh CLC4SEL3 3C3Bh — 3C1Bh —
3CFAh MD1CON0 3CDAh — 3CBAh — 3C9Ah — 3C7Ah CLC1GLS0 3C5Ah CLC4SEL2 3C3Ah — 3C1Ah —
3CF9h — 3CD9h — 3CB9h — 3C99h — 3C79h CLC1SEL3 3C59h CLC4SEL1 3C39h — 3C19h —
3CF8h — 3CD8h — 3CB8h — 3C98h — 3C78h CLC1SEL2 3C58h CLC4SEL0 3C38h — 3C18h —
3CF7h — 3CD7h — 3CB7h — 3C97h — 3C77h CLC1SEL1 3C57h CLC4POL 3C37h — 3C17h —
3CF6h — 3CD6h — 3CB6h — 3C96h — 3C76h CLC1SEL0 3C56h CLC4CON 3C36h — 3C16h —
3CF5h — 3CD5h — 3CB5h — 3C95h — 3C75h CLC1POL 3C55h — 3C35h — 3C15h —
3CF4h — 3CD4h — 3CB4h — 3C94h — 3C74h CLC1CON 3C54h — 3C34h — 3C14h —
3CF3h — 3CD3h — 3CB3h — 3C93h — 3C73h CLC2GLS3 3C53h — 3C33h — 3C13h —
3CF2h — 3CD2h — 3CB2h — 3C92h — 3C72h CLC2GLS2 3C52h — 3C32h — 3C12h —
3CF1h — 3CD1h — 3CB1h — 3C91h — 3C71h CLC2GLS1 3C51h — 3C31h — 3C11h —
3CF0h — 3CD0h — 3CB0h — 3C90h — 3C70h CLC2GLS0 3C50h — 3C30h — 3C10h —
3CEFh — 3CCFh — 3CAFh — 3C8Fh — 3C6Fh CLC2SEL3 3C4Fh — 3C2Fh — 3C0Fh —
3CEEh — 3CCEh — 3CAEh — 3C8Eh — 3C6Eh CLC2SEL2 3C4Eh — 3C2Eh — 3C0Eh —
3CEDh — 3CCDh — 3CADh — 3C8Dh — 3C6Dh CLC2SEL1 3C4Dh — 3C2Dh — 3C0Dh —
3CECh — 3CCCh — 3CACh — 3C8Ch — 3C6Ch CLC2SEL0 3C4Ch — 3C2Ch — 3C0Ch —
Preliminary

3CEBh — 3CCBh — 3CABh — 3C8Bh — 3C6Bh CLC2POL 3C4Bh — 3C2Bh — 3C0Bh —


3CEAh — 3CCAh — 3CAAh — 3C8Ah — 3C6Ah CLC2CON 3C4Ah — 3C2Ah — 3C0Ah —
3CE9h — 3CC9h — 3CA9h — 3C89h — 3C69h CLC3GLS3 3C49h — 3C29h — 3C09h —
3CE8h — 3CC8h — 3CA8h — 3C88h — 3C68h CLC3GLS2 3C48h — 3C28h — 3C08h —
3CE7h — 3CC7h — 3CA7h — 3C87h — 3C67h CLC3GLS1 3C47h — 3C27h — 3C07h —
3CE6h CLKRCLK 3CC6h — 3CA6h — 3C86h — 3C66h CLC3GLS0 3C46h — 3C26h — 3C06h —
3CE5h CLKRCON 3CC5h — 3CA5h — 3C85h — 3C65h CLC3SEL3 3C45h — 3C25h — 3C05h —

PIC18(L)F25/26K83
3CE4h — 3CC4h — 3CA4h — 3C84h — 3C64h CLC3SEL2 3C44h — 3C24h — 3C04h —
3CE3h — 3CC3h — 3CA3h — 3C83h — 3C63h CLC3SEL1 3C43h — 3C23h — 3C03h —
3CE2h — 3CC2h — 3CA2h — 3C82h — 3C62h CLC3SEL0 3C42h — 3C22h — 3C02h —
3CE1h — 3CC1h — 3CA1h — 3C81h — 3C61h CLC3POL 3C41h — 3C21h — 3C01h —
3CE0h — 3CC0h — 3CA0h — 3C80h — 3C60h CLC3CON 3C40h — 3C20h — 3C00h —
Legend: Unimplemented data memory locations and registers, read as ‘0’.
DS40001943A-page 41
TABLE 4-7: SPECIAL FUNCTION REGISTER MAP FOR PIC18(L)F25/26K83 DEVICES BANK 59
 2017 Microchip Technology Inc.

3BFFh DMA1SIRQ 3BDFh DMA2SIRQ 3BBFh — 3B9Fh — 3B7Fh — 3B5Fh — 3B3Fh — 3B1Fh —
3BFEh DMA1AIRQ 3BDEh DMA2AIRQ 3BBEh — 3B9Eh — 3B7Eh — 3B5Eh — 3B3Eh — 3B1Eh —
3BFDh DMA1CON1 3BDDh DMA2CON1 3BBDh — 3B9Dh — 3B7Dh — 3B5Dh — 3B3Dh — 3B1Dh —
3BFCh DMA1CON0 3BDCh DMA2CON0 3BBCh — 3B9Ch — 3B7Ch — 3B5Ch — 3B3Ch — 3B1Ch —
3BFBh DMA1SSAU 3BDBh DMA2SSAU 3BBBh — 3B9Bh — 3B7Bh — 3B5Bh — 3B3Bh — 3B1Bh —
3BFAh DMA1SSAH 3BDAh DMA2SSAH 3BBAh — 3B9Ah — 3B7Ah — 3B5Ah — 3B3Ah — 3B1Ah —
3BF9h DMA1SSAL 3BD9h DMA2SSAL 3BB9h — 3B99h — 3B79h — 3B59h — 3B39h — 3B19h —
3BF8h DMA1SSZH 3BD8h DMA2SSZH 3BB8h — 3B98h — 3B78h — 3B58h — 3B38h — 3B18h —
3BF7h DMA1SSZL 3BD7h DMA2SSZL 3BB7h — 3B97h — 3B77h — 3B57h — 3B37h — 3B17h —
3BF6h DMA1SPTRU 3BD6h DMA2SPTRU 3BB6h — 3B96h — 3B76h — 3B56h — 3B36h — 3B16h —
3BF5h DMA1SPTRH 3BD5h DMA2SPTRH 3BB5h — 3B95h — 3B75h — 3B55h — 3B35h — 3B15h —
3BF4h DMA1SPTRL 3BD4h DMA2SPTRL 3BB4h — 3B94h — 3B74h — 3B54h — 3B34h — 3B14h —
3BF3h DMA1SCNTH 3BD3h DMA2SCNTH 3BB3h — 3B93h — 3B73h — 3B53h — 3B33h — 3B13h —
3BF2h DMA1SCNTL 3BD2h DMA2SCNTL 3BB2h — 3B92h — 3B72h — 3B52h — 3B32h — 3B12h —
3BF1h DMA1DSAH 3BD1h DMA2DSAH 3BB1h — 3B91h — 3B71h — 3B51h — 3B31h — 3B11h —
3BF0h DMA1DSAL 3BD0h DMA2DSAL 3BB0h — 3B90h — 3B70h — 3B50h — 3B30h — 3B10h —
3BEFh DMA1DSZH 3BCFh DMA2DSZH 3BAFh — 3B8Fh — 3B6Fh — 3B4Fh — 3B2Fh — 3B0Fh —
3BEEh DMA1DSZL 3BCEh DMA2DSZL 3BAEh — 3B8Eh — 3B6Eh — 3B4Eh — 3B2Eh — 3B0Eh —
3BEDh DMA1DPTRH 3BCDh DMA2DPTRH 3BADh — 3B8Dh — 3B6Dh — 3B4Dh — 3B2Dh — 3B0Dh —
3BECh DMA1DPTRL 3BCCh DMA2DPTRL 3BACh — 3B8Ch — 3B6Ch — 3B4Ch — 3B2Ch — 3B0Ch —
Preliminary

3BEBh DMA1DCNTH 3BCBh DMA2DCNTH 3BABh — 3B8Bh — 3B6Bh — 3B4Bh — 3B2Bh — 3B0Bh —
3BEAh DMA1DCNTL 3BCAh DMA2DCNTL 3BAAh — 3B8Ah — 3B6Ah — 3B4Ah — 3B2Ah — 3B0Ah —
3BE9h DMA1BUF 3BC9h DMA2BUF 3BA9h — 3B89h — 3B69h — 3B49h — 3B29h — 3B09h —
3BE8h — 3BC8h — 3BA8h — 3B88h — 3B68h — 3B48h — 3B28h — 3B08h —
3BE7h — 3BC7h — 3BA7h — 3B87h — 3B67h — 3B47h — 3B27h — 3B07h —
3BE6h — 3BC6h — 3BA6h — 3B86h — 3B66h — 3B46h — 3B26h — 3B06h —
3BE5h — 3BC5h — 3BA5h — 3B85h — 3B65h — 3B45h — 3B25h — 3B05h —

PIC18(L)F25/26K83
3BE4h — 3BC4h — 3BA4h — 3B84h — 3B64h — 3B44h — 3B24h — 3B04h —
3BE3h — 3BC3h — 3BA3h — 3B83h — 3B63h — 3B43h — 3B23h — 3B03h —
3BE2h — 3BC2h — 3BA2h — 3B82h — 3B62h — 3B42h — 3B22h — 3B02h —
3BE1h — 3BC1h — 3BA1h — 3B81h — 3B61h — 3B41h — 3B21h — 3B01h —
3BE0h — 3BC0h — 3BA0h — 3B80h — 3B60h — 3B40h — 3B20h — 3B00h —
Legend: Unimplemented data memory locations and registers, read as ‘0’.
DS40001943A-page 42
TABLE 4-8: SPECIAL FUNCTION REGISTER MAP FOR PIC18(L)F25/26K83 DEVICES BANK 58
 2017 Microchip Technology Inc.

3AFFh — 3ADFh ADACTPPS 3ABFh PPSLOCK 3A9Fh — 3A7Fh — 3A5Fh — 3A3Fh — 3A1Fh —
3AFEh — 3ADEh CLCIN3PPS 3ABEh — 3A9Eh — 3A7Eh — 3A5Eh — 3A3Eh — 3A1Eh —
3AFDh — 3ADDh CLCIN2PPS 3ABDh — 3A9Dh — 3A7Dh — 3A5Dh — 3A3Dh — 3A1Dh —
3AFCh — 3ADCh CLCIN1PPS 3ABCh — 3A9Ch — 3A7Ch — 3A5Ch — 3A3Ch — 3A1Ch —
3AFBh — 3ADBh CLCIN0PPS 3ABBh — 3A9Bh — 3A7Bh — 3A5Bh RB2I2C 3A3Bh — 3A1Bh —
3AFAh — 3ADAh MD1SRCPPS 3ABAh — 3A9Ah — 3A7Ah — 3A5Ah RB1I2C 3A3Ah — 3A1Ah —
3AF9h — 3AD9h MD1CARHPPS 3AB9h — 3A99h — 3A79h — 3A59h — 3A39h — 3A19h —
3AF8h — 3AD8h MD1CARLPPS 3AB8h — 3A98h — 3A78h — 3A58h — 3A38h — 3A18h —
3AF7h — 3AD7h CWG3INPPS 3AB7h — 3A97h — 3A77h — 3A57h IOCBF 3A37h — 3A17h RC7PPS
3AF6h — 3AD6h CWG2INPPS 3AB6h — 3A96h — 3A76h — 3A56h IOCBN 3A36h — 3A16h RC6PPS
3AF5h — 3AD5h CWG1INPPS 3AB5h — 3A95h — 3A75h — 3A55h IOCBP 3A35h — 3A15h RC5PPS
3AF4h — 3AD4h SMT2SIGPPS 3AB4h — 3A94h — 3A74h — 3A54h INLVLB 3A34h — 3A14h RC4PPS
3AF3h — 3AD3h SMT2WINPPS 3AB3h — 3A93h — 3A73h — 3A53h SLRCONB 3A33h — 3A13h RC3PPS
3AF2h — 3AD2h SMT1SIGPPS 3AB2h — 3A92h — 3A72h — 3A52h ODCONB 3A32h — 3A12h RC2PPS
3AF1h — 3AD1h SMT1WINPPS 3AB1h — 3A91h — 3A71h — 3A51h WPUB 3A31h — 3A11h RC1PPS
3AF0h — 3AD0h CCP4PPS 3AB0h — 3A90h — 3A70h — 3A50h ANSELB 3A30h — 3A10h RC0PPS
3AEFh — 3ACFh CCP3PPS 3AAFh — 3A8Fh — 3A6Fh — 3A4Fh — 3A2Fh — 3A0Fh RB7PPS
3AEEh — 3ACEh CCP2PPS 3AAEh — 3A8Eh — 3A6Eh — 3A4Eh — 3A2Eh — 3A0Eh RB6PPS
3AEDh CANRXPPS 3ACDh CCP1PPS 3AADh — 3A8Dh — 3A6Dh — 3A4Dh — 3A2Dh — 3A0Dh RB5PPS
3AECh — 3ACCh T6INPPS 3AACh — 3A8Ch — 3A6Ch — 3A4Ch — 3A2Ch — 3A0Ch RB4PPS
Preliminary

3AEBh U2CTSPPS 3ACBh T4INPPS 3AABh — 3A8Bh — 3A6Bh RC4I2C 3A4Bh — 3A2Bh — 3A0Bh RB3PPS
3AEAh U2RXPPS 3ACAh T2INPPS 3AAAh — 3A8Ah — 3A6Ah RC3I2C 3A4Ah — 3A2Ah — 3A0Ah RB2PPS
3AE9h — 3AC9h T5GPPS 3AA9h — 3A89h — 3A69h — 3A49h — 3A29h — 3A09h RB1PPS
3AE8h U1CTSPPS 3AC8h T5CKIPPS 3AA8h — 3A88h — 3A68h — 3A48h — 3A28h — 3A08h RB0PPS
3AE7h U1RXPPS 3AC7h T3GPPS 3AA7h — 3A87h IOCEF 3A67h IOCCF 3A47h IOCAF 3A27h — 3A07h RA7PPS
3AE6h I2C2SDAPPS 3AC6h T3CKIPPS 3AA6h — 3A86h IOCEN 3A66h IOCCN 3A46h IOCAN 3A26h — 3A06h RA6PPS
3AE5h I2C2SCLPPS 3AC5h T1GPPS 3AA5h — 3A85h IOCEP 3A65h IOCCP 3A45h IOCAP 3A25h — 3A05h RA5PPS

PIC18(L)F25/26K83
3AE4h I2C1SDAPPS 3AC4h T1CKIPPS 3AA4h — 3A84h INLVLE 3A64h INLVLC 3A44h INLVLA 3A24h — 3A04h RA4PPS
3AE3h I2C1SCLPPS 3AC3h T0CKIPPS 3AA3h — 3A83h — 3A63h SLRCONC 3A43h SLRCONA 3A23h — 3A03h RA3PPS
3AE2h SPI1SSPPS 3AC2h INT2PPS 3AA2h — 3A82h — 3A62h ODCONC 3A42h ODCONA 3A22h — 3A02h RA2PPS
3AE1h SPI1SDIPPS 3AC1h INT1PPS 3AA1h — 3A81h WPUE 3A61h WPUC 3A41h WPUA 3A21h — 3A01h RA1PPS
3AE0h SPI1SCKPPS 3AC0h INT0PPS 3AA0h — 3A80h — 3A60h ANSELC 3A40h ANSELA 3A20h — 3A00h RA0PPS

Legend: Unimplemented data memory locations and registers, read as ‘0’.


DS40001943A-page 43
TABLE 4-9: SPECIAL FUNCTION REGISTER MAP FOR PIC18(L)F25/26K83 DEVICES BANK 57
 2017 Microchip Technology Inc.

39FFh — 39DFh OSCFRQ 39BFh — 399Fh — 397Fh — 395Fh WDTU 393Fh — 391Fh —
39FEh — 39DEh OSCTUNE 39BEh — 399Eh — 397Eh — 395Eh WDTH 393Eh — 391Eh —
39FDh — 39DDh OSCEN 39BDh — 399Dh — 397Dh SCANTRIG 395Dh WDTL 393Dh — 391Dh —
39FCh — 39DCh OSCSTAT 39BCh — 399Ch — 397Ch SCANCON0 395Ch WDTCON1 393Ch — 391Ch —
39FBh — 39DBh OSCCON3 39BBh — 399Bh — 397Bh SCANHADRU 395Bh WDTCON0 393Bh — 391Bh —
39FAh — 39DAh OSCCON2 39BAh — 399Ah — 397Ah SCANHADRH 395Ah — 393Ah — 391Ah —
39F9h — 39D9h OSCCON1 39B9h — 3999h PIE9 3979h SCANHADRL 3959h — 3939h — 3919h —
39F8h — 39D8h CPUDOZE 39B8h — 3998h PIE8 3978h SCANLADRU 3958h — 3938h — 3918h —
39F7h SCANPR 39D7h — 39B7h — 3997h PIE7 3977h SCANLADRH 3957h — 3937h — 3917h —
39F6h — 39D6h — 39B6h — 3996h PIE6 3976h SCANLADRL 3956h — 3936h — 3916h —
39F5h — 39D5h — 39B5h — 3995h PIE5 3975h — 3955h — 3935h — 3915h —
39F4h DMA2PR 39D4h — 39B4h — 3994h PIE4 3974h — 3954h — 3934h — 3914h —
39F3h DMA1PR 39D3h — 39B3h — 3993h PIE3 3973h — 3953h — 3933h — 3913h —
39F2h MAINPR 39D2h — 39B2h — 3992h PIE2 3972h — 3952h — 3932h — 3912h —
39F1h ISRPR 39D1h VREGCON(1) 39B1h — 3991h PIE1 3971h — 3951h — 3931h — 3911h —
39F0h — 39D0h BORCON 39B0h — 3990h PIE0 3970h — 3950h — 3930h — 3910h —
39EFh PRLOCK 39CFh — 39AFh — 398Fh — 396Fh — 394Fh — 392Fh — 390Fh —
39EEh — 39CEh — 39AEh — 398Eh — 396Eh — 394Eh — 392Eh — 390Eh —
39EDh — 39CDh — 39ADh — 398Dh — 396Dh — 394Dh — 392Dh — 390Dh —
Preliminary

39ECh — 39CCh — 39ACh — 398Ch — 396Ch — 394Ch — 392Ch — 390Ch —


39EBh — 39CBh — 39ABh — 398Bh — 396Bh — 394Bh — 392Bh — 390Bh —
39EAh — 39CAh — 39AAh — 398Ah — 396Ah — 394Ah — 392Ah — 390Ah —
39E9h — 39C9h — 39A9h PIR9 3989h IPR9 3969h CRCCON1 3949h — 3929h — 3909h —
39E8h — 39C8h — 39A8h PIR8 3988h IPR8 3968h CRCCON0 3948h — 3928h — 3908h —
39E7h — 39C7h PMD7 39A7h PIR7 3987h IPR7 3967h CRCXORH 3947h — 3927h — 3907h —
39E6h NVMCON2 39C6h PMD6 39A6h PIR6 3986h IPR6 3966h CRCXORL 3946h — 3926h — 3906h —
39E5h NVMCON1 39C5h PMD5 39A5h PIR5 3985h IPR5 3965h CRCSHIFTH 3945h — 3925h — 3905h —

PIC18(L)F25/26K83
39E4h — 39C4h PMD4 39A4h PIR4 3984h IPR4 3964h CRCSHIFTL 3944h — 3924h — 3904h —
39E3h NVMDAT 39C3h PMD3 39A3h PIR3 3983h IPR3 3963h CRCACCH 3943h — 3923h — 3903h —
39E2h — 39C2h PMD2 39A2h PIR2 3982h IPR2 3962h CRCACCL 3942h — 3922h — 3902h —
39E1h — 39C1h PMD1 39A1h PIR1 3981h IPR1 3961h CRCDATH 3941h — 3921h — 3901h —
39E0h NVMADRL 39C0h PMD0 39A0h PIR0 3980h IPR0 3960h CRCDATL 3940h — 3920h — 3900h —

Legend: Unimplemented data memory locations and registers, read as ‘0’.


Note 1: Unimplemented in LF devices.
DS40001943A-page 44
TABLE 4-10: SPECIAL FUNCTION REGISTER MAP FOR PIC18(L)F25/26K83 DEVICES BANK 56
 2017 Microchip Technology Inc.

38FFh — 38DFh — 38BFh — 389Fh IVTADU 387Fh — 385Fh — 383Fh — 381Fh —


38FEh — 38DEh — 38BEh — 389Eh IVTADH 387Eh — 385Eh — 383Eh — 381Eh —
38FDh — 38DDh — 38BDh — 389Dh IVTADL 387Dh — 385Dh — 383Dh — 381Dh —
38FCh — 38DCh — 38BCh — 389Ch — 387Ch — 385Ch — 383Ch — 381Ch —
38FBh — 38DBh — 38BBh — 389Bh — 387Bh — 385Bh — 383Bh — 381Bh —
38FAh — 38DAh — 38BAh — 389Ah — 387Ah — 385Ah — 383Ah — 381Ah —
38F9h — 38D9h — 38B9h — 3899h — 3879h — 3859h — 3839h — 3819h —
38F8h — 38D8h — 38B8h — 3898h — 3878h — 3858h — 3838h — 3818h —
38F7h — 38D7h — 38B7h — 3897h — 3877h — 3857h — 3837h — 3817h —
38F6h — 38D6h — 38B6h — 3896h — 3876h — 3856h — 3836h — 3816h —
38F5h — 38D5h — 38B5h — 3895h — 3875h — 3855h — 3835h — 3815h —
38F4h — 38D4h — 38B4h — 3894h — 3874h — 3854h — 3834h — 3814h —
38F3h — 38D3h — 38B3h — 3893h — 3873h — 3853h — 3833h — 3813h —
38F2h — 38D2h — 38B2h — 3892h — 3872h — 3852h — 3832h — 3812h —
38F1h — 38D1h — 38B1h — 3891h — 3871h — 3851h — 3831h — 3811h —
38F0h — 38D0h — 38B0h — 3890h PRODH_SHAD 3870h — 3850h — 3830h — 3810h —
38EFh — 38CFh — 38AFh — 388Fh PRODL_SHAD 386Fh — 384Fh — 382Fh — 380Fh —
38EEh — 38CEh — 38AEh — 388Eh FSR2H_SHAD 386Eh — 384Eh — 382Eh — 380Eh —
38EDh — 38CDh — 38ADh — 388Dh FSR2L_SHAD 386Dh — 384Dh — 382Dh — 380Dh —
38ECh — 38CCh — 38ACh — 388Ch FSR1H_SHAD 386Ch — 384Ch — 382Ch — 380Ch —
Preliminary

38EBh — 38CBh — 38ABh — 388Bh FSR1L_SHAD 386Bh — 384Bh — 382Bh — 380Bh —


38EAh — 38CAh — 38AAh — 388Ah FSR0H_SHAD 386Ah — 384Ah — 382Ah — 380Ah —
38E9h — 38C9h — 38A9h — 3889h FSR0L_SHAD 3869h — 3849h — 3829h — 3809h —
38E8h — 38C8h — 38A8h — 3888h PCLATU_SHAD 3868h — 3848h — 3828h — 3808h —
38E7h — 38C7h — 38A7h — 3887h PCLATH_SHAD 3867h — 3847h — 3827h — 3807h —
38E6h — 38C6h — 38A6h — 3886h BSR_SHAD 3866h — 3846h — 3826h — 3806h —
38E5h — 38C5h — 38A5h — 3885h WREG_SHAD 3865h — 3845h — 3825h — 3805h —

PIC18(L)F25/26K83
38E4h — 38C4h — 38A4h — 3884h STATUS_SHAD 3864h — 3844h — 3824h — 3804h —
38E3h — 38C3h — 38A3h — 3883h SHADCON 3863h — 3843h — 3823h — 3803h —
38E2h — 38C2h — 38A2h — 3882h BSR_CSHAD 3862h — 3842h — 3822h — 3802h —
38E1h — 38C1h — 38A1h — 3881h WREG_CSHAD 3861h — 3841h — 3821h — 3801h —
38E0h — 38C0h — 38A0h — 3880h STATUS_CSHAD 3860h — 3840h — 3820h — 3800h —

Legend: Unimplemented data memory locations and registers, read as ‘0’.


DS40001943A-page 45
TABLE 4-11: SPECIAL FUNCTION REGISTER MAP FOR PIC18(L)F25/26K83 DEVICES BANK 55
 2017 Microchip Technology Inc.

37FFh CANCON_RO0 37DFh CANCON_RO2 37BFh RXM1EIDL 379Fh CANCON_RO4 377Fh CANCON_RO6 375Fh CANCON_RO8 373Fh TXBIE 371Fh RXF11EIDL
37FEh CANSTAT_RO0 37DEh CANSTAT_RO2 37BEh RXM1EIDH 379Eh CANSTAT_RO4 377Eh CANSTAT_RO6 375Eh CANSTAT_RO8 373Eh BIE0 371Eh RXF11EIDH
37FDh RXB1D7 37DDh TXB1D7 37BDh RXM1SIDL 379Dh B5D7 377Dh B3D7 375Dh B1D7 373Dh BSEL0 371Dh RXF11SIDL
37FCh RXB1D6 37DCh TXB1D6 37BCh RXM1SIDH 379Ch B5D6 377Ch B3D6 375Ch B1D6 373Ch MSEL3 371Ch RXF11SIDH
37FBh RXB1D5 37DBh TXB1D5 37BBh RXM0EIDL 379Bh B5D5 377Bh B3D5 375Bh B1D5 373Bh MSEL2 371Bh RXF10EIDL
37FAh RXB1D4 37DAh TXB1D4 37BAh RXM0EIDH 379Ah B5D4 377Ah B3D4 375Ah B1D4 373Ah MSEL1 371Ah RXF10EIDH
37F9h RXB1D3 37D9h TXB1D3 37B9h RXM0SIDL 3799h B5D3 3779h B3D3 3759h B1D3 3739h MSEL0 3719h RXF10SIDL
37F8h RXB1D2 37D8h TXB1D2 37B8h RXM0SIDH 3798h B5D2 3778h B3D2 3758h B1D2 3738h RXFBCON7 3718h RXF10SIDH
37F7h RXB1D1 37D7h TXB1D1 37B7h RXF5EIDL 3797h B5D1 3777h B3D1 3757h B1D1 3737h RXFBCON6 3717h RXF9EIDL
37F6h RXB1D0 37D6h TXB1D0 37B6h RXF5EIDH 3796h B5D0 3776h B3D0 3756h B1D0 3736h RXFBCON5 3716h RXF9EIDH
37F5h RXB1DLC 37D5h TXB1DLC 37B5h RXF5SIDL 3795h B5DLC 3775h B3DLC 3755h B1DLC 3735h RXFBCON4 3715h RXF9SIDL
37F4h RXB1EIDL 37D4h TXB1EIDL 37B4h RXF5SIDH 3794h B5EIDL 3774h B3EIDL 3754h B1EIDL 3734h RXFBCON3 3714h RXF9SIDH
37F3h RXB1EIDH 37D3h TXB1EIDH 37B3h RXF4EIDL 3793h B5EIDH 3773h B3EIDH 3753h B1EIDH 3733h RXFBCON2 3713h RXF8EIDL
37F2h RXB1SIDL 37D2h TXB1SIDL 37B2h RXF4EIDH 3792h B5SIDL 3772h B3SIDL 3752h B1SIDL 3732h RXFBCON1 3712h RXF8EIDH
37F1h RXB1SIDH 37D1h TXB1SIDH 37B1h RXF4SIDL 3791h B5SIDH 3771h B3SIDH 3751h B1SIDH 3731h RXFBCON0 3711h RXF8SIDL
37F0h RXB1CON 37D0h TXB1CON 37B0h RXF4SIDH 3790h B5CON 3770h B3CON 3750h B1CON 3730h SDFLC 3710h RXF8SIDH
37EFh CANCON_RO1 37CFh CANCON_RO3 37AFh RXF3EIDL 378Fh CANCON_RO5 376Fh CANCON_RO7 374Fh CANCON_RO9 372Fh RXF15EIDL 370Fh RXF7EIDL
37EEh CANSTAT_RO1 37CEh CANSTAT_RO3 37AEh RXF3EIDH 378Eh CANSTAT_RO5 376Eh CANSTAT_RO7 374Eh CANSTAT_RO9 372Eh RXF15EIDH 370Eh RXF7EIDH
37EDh TXB0D7 37CDh TXB2D7 37ADh RXF3SIDL 378Dh B4D7 376Dh B2D7 374Dh B0D7 372Dh RXF15SIDL 370Dh RXF7SIDL
37ECh TXB0D6 37CCh TXB2D6 37ACh RXF3SIDH 378Ch B4D6 376Ch B2D6 374Ch B0D6 372Ch RXF15SIDH 370Ch RXF7SIDH
Preliminary

37EBh TXB0D5 37CBh TXB2D5 37ABh RXF2EIDL 378Bh B4D5 376Bh B2D5 374Bh B0D5 372Bh RXF14EIDL 370Bh RXF6EIDL
37EAh TXB0D4 37CAh TXB2D4 37AAh RXF2EIDH 378Ah B4D4 376Ah B2D4 374Ah B0D4 372Ah RXF14EIDH 370Ah RXF6EIDH
37E9h TXB0D3 37C9h TXB2D3 37A9h RXF2SIDL 3789h B4D3 3769h B2D3 3749h B0D3 3729h RXF14SIDL 3709h RXF6SIDL
37E8h TXB0D2 37C8h TXB2D2 37A8h RXF2SIDH 3788h B4D2 3768h B2D2 3748h B0D2 3728h RXF14SIDH 3708h RXF6SIDH
37E7h TXB0D1 37C7h TXB2D1 37A7h RXF1EIDL 3787h B4D1 3767h B2D1 3747h B0D1 3727h RXF13EIDL 3707h RXFCON1
37E6h TXB0D0 37C6h TXB2D0 37A6h RXF1EIDH 3786h B4D0 3766h B2D0 3746h B0D0 3726h RXF13EIDH 3706h RXFCON0
37E5h TXB0DLC 37C5h TXB2DLC 37A5h RXF1SIDL 3785h B4DLC 3765h B2DLC 3745h B0DLC 3725h RXF13SIDL 3705h BRGCON3

PIC18(L)F25/26K83
37E4h TXB0EIDL 37C4h TXB2EIDL 37A4h RXF1SIDH 3784h B4EIDL 3764h B2EIDL 3744h B0EIDL 3724h RXF13SIDH 3704h BRGCON2
37E3h TXB0EIDH 37C3h TXB2EIDH 37A3h RXF0EIDL 3783h B4EIDH 3763h B2EIDH 3743h B0EIDH 3723h RXF12EIDL 3703h BRGCON1
37E2h TXB0SIDL 37C2h TXB2SIDL 37A2h RXF0EIDH 3782h B4SIDL 3762h B2SIDL 3742h B0SIDL 3722h RXF12EIDH 3702h TXERRCNT
37E1h TXB0SIDH 37C1h TXB2SIDH 37A1h RXF0SIDL 3781h B4SIDH 3761h B2SIDH 3741h B0SIDH 3721h RXF12SIDL 3701h RXERRCNT
37E0h TXB0CON 37C0h TXB2CON 37A0h RXF0SIDH 3780h B4CON 3760h B2CON 3740h B0CON 3720h RXF12SIDH 3700h CIOCON
Legend: Unimplemented data memory locations and registers, read as ‘0’.
DS40001943A-page 46
PIC18(L)F25/26K83
4.5.5 STATUS REGISTER
The STATUS register, shown in Register 4-2, contains
the arithmetic status of the ALU. As with any other SFR,
it can be the operand for any instruction.
If the STATUS register is the destination for an
instruction that affects the Z, DC, C, OV or N bits, the
results of the instruction are not written; instead, the
STATUS register is updated according to the
instruction performed. Therefore, the result of an
instruction with the STATUS register as its destination
may be different than intended. As an example, CLRF
STATUS will set the Z bit and leave the remaining
Status bits unchanged (‘0uuu u1uu’).
It is recommended that only BCF, BSF, SWAPF, MOVFF,
MOVWF and MOVFFL instructions are used to alter the
STATUS register, because these instructions do not
affect the Z, C, DC, OV or N bits in the STATUS
register.
For other instructions that do not affect Status bits, see
the instruction set summaries in Section
42.2 “Extended Instruction Set” and Table 42-3.
Note: The C and DC bits operate as the borrow
and digit borrow bits, respectively, in
subtraction.

4.5.6 CALL SHADOW REGISTER


When CALL, CALLW, RCALL instructions are used, the
WREG, BSR and STATUS are automatically saved in
hardware and can be accessed using the WREG_C-
SHAD, BSR_CSHAD and STATUS_CSHAD registers.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 47


PIC18(L)F25/26K83
4.6 Register Definitions: Status Registers
REGISTER 4-2: STATUS: STATUS REGISTER
U-0 R-1/q R-1/q R/W-0/u R/W-0/u R/W-0/u R/W-0/u R/W-0/u

— TO PD N OV Z DC C
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 Unimplemented: Read as ‘0’


bit 6 TO: Time-Out bit
1 = Set at power-up or by execution of CLRWDT or SLEEP instruction
0 = A WDT time-out occurred
bit 5 PD: Power-Down bit
1 = Set at power-up or by execution of CLRWDT instruction
0 = Set by execution of the SLEEP instruction
bit 4 N: Negative bit used for signed arithmetic (2’s complement); indicates if the result is negative,
(ALU MSb = 1).
1 = The result is negative
0 = The result is positive
bit 3 OV: Overflow bit used for signed arithmetic (2’s complement); indicates an overflow of the 7-bit
magnitude, which causes the sign bit (bit 7) to change state.
1 = Overflow occurred for current signed arithmetic operation
0 = No overflow occurred
bit 2 Z: Zero bit
1 = The result of an arithmetic or logic operation is zero
0 = The result of an arithmetic or logic operation is not zero
bit 1 DC: Digit Carry/Borrow bit (ADDWF, ADDLW, SUBLW, SUBWF instructions)(1)
1 = A carry-out from the 4th low-order bit of the result occurred
0 = No carry-out from the 4th low-order bit of the result
bit 0 C: Carry/Borrow bit (ADDWF, ADDLW, SUBLW, SUBWF instructions)(1,2)
1 = A carry-out from the Most Significant bit of the result occurred
0 = No carry-out from the Most Significant bit of the result occurred
Note 1: For Borrow, the polarity is reversed. A subtraction is executed by adding the two’s complement of the
second operand.
2: For Rotate (RRF, RLF) instructions, this bit is loaded with either the high or low-order bit of the Source
register.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 48


PIC18(L)F25/26K83
4.7 Data Addressing Modes 4.7.1 INHERENT AND LITERAL
ADDRESSING
Note: The execution of some instructions in the
core PIC18 instruction set are changed Many PIC18 control instructions do not need any
when the PIC18 extended instruction set is argument at all; they either perform an operation that
enabled. See Section 4.8 “Data Memory globally affects the device or they operate implicitly on
and the Extended Instruction Set” for one register. This addressing mode is known as
more information. Inherent Addressing. Examples include SLEEP, RESET
and DAW.
While the program memory can be addressed in only Other instructions work in a similar way but require an
one way – through the Program Counter – information additional explicit argument in the opcode. This is
in the data memory space can be addressed in several known as Literal Addressing mode because they
ways. For most instructions, the addressing mode is require some literal value as an argument. Examples
fixed. Other instructions may use up to three modes, include ADDLW and MOVLW, which respectively, add or
depending on which operands are used and whether or move a literal value to the W register. Other examples
not the extended instruction set is enabled. include CALL and GOTO, which include a 20-bit
The addressing modes are: program memory address.
• Inherent
• Literal
• Direct
• Indirect
An additional addressing mode, Indexed Literal Offset,
is available when the extended instruction set is
enabled (XINST Configuration bit = 1). Its operation is
discussed in detail in Section 4.8.1 “Indexed
Addressing with Literal Offset”.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 49


PIC18(L)F25/26K83
4.7.2 DIRECT ADDRESSING EXAMPLE 4-6: HOW TO CLEAR RAM
Direct addressing specifies all or part of the source (BANK 1) USING
and/or destination address of the operation within the INDIRECT ADDRESSING
opcode itself. The options are specified by the LFSR FSR0, 100h ;
arguments accompanying the instruction. NEXT CLRF POSTINC0 ; Clear INDF
; register then
In the core PIC18 instruction set, bit-oriented and byte- ; inc pointer
oriented instructions use some version of direct BTFSS FSR0H, 1 ; All done with
addressing by default. All of these instructions include ; Bank1?
some 8-bit literal address as their Least Significant BRA NEXT ; NO, clear next
Byte. This address specifies either a register address in CONTINUE ; YES, continue
one of the banks of data RAM (Section 4.5.2 “General
Purpose Register File”) or a location in the Access 4.7.3.1 FSR Registers and the INDF
Bank (Section 4.5.4 “Access Bank”) as the data Operand
source for the instruction.
At the core of indirect addressing are three sets of
The Access RAM bit ‘a’ determines how the address is registers: FSR0, FSR1 and FSR2. Each represents a
interpreted. When ‘a’ is ‘1’, the contents of the BSR pair of 8-bit registers, FSRnH and FSRnL. Each FSR
(Section 4.5.1 “Bank Select Register (BSR)”) are pair holds a 14-bit value, therefore, the two upper bits
used with the address to determine the complete 14-bit of the FSRnH register are not used. The 14-bit FSR
address of the register. When ‘a’ is ‘0’, the address is value can address the entire range of the data memory
interpreted as being a register in the Access Bank. in a linear fashion. The FSR register pairs, then, serve
Addressing that uses the Access RAM is sometimes as pointers to data memory locations.
also known as Direct Forced Addressing mode.
Indirect addressing is accomplished with a set of
A few instructions, such as MOVFFL, include the entire Indirect File Operands, INDF0 through INDF2. These
14-bit address (either source or destination) in their can be thought of as “virtual” registers; they are
opcodes. In these cases, the BSR is ignored entirely. mapped in the SFR space but are not physically
The destination of the operation’s results is determined implemented. Reading or writing to a particular INDF
by the destination bit ‘d’. When ‘d’ is ‘1’, the results are register actually accesses the data addressed by its
stored back in the source register, overwriting its origi- corresponding FSR register pair. A read from INDF1,
nal contents. When ‘d’ is ‘0’, the results are stored in for example, reads the data at the address indicated by
the W register. Instructions without the ‘d’ argument FSR1H:FSR1L. Instructions that use the INDF
have a destination that is implicit in the instruction; their registers as operands actually use the contents of their
destination is either the target register being operated corresponding FSR as a pointer to the instruction’s
on or the W register. target. The INDF operand is just a convenient way of
using the pointer.
4.7.3 INDIRECT ADDRESSING Because indirect addressing uses a full 14-bit address,
Indirect addressing allows the user to access a location data RAM banking is not necessary. Thus, the current
in data memory without giving a fixed address in the contents of the BSR and the Access RAM bit have no
instruction. This is done by using File Select Registers effect on determining the target address.
(FSRs) as pointers to the locations which are to be read
or written. Since the FSRs are themselves located in
RAM as Special File Registers, they can also be
directly manipulated under program control. This
makes FSRs very useful in implementing data struc-
tures, such as tables and arrays in data memory.
The registers for indirect addressing are also
implemented with Indirect File Operands (INDFs) that
permit automatic manipulation of the pointer value with
auto-incrementing, auto-decrementing or offsetting
with another value. This allows for efficient code, using
loops, such as the example of clearing an entire RAM
bank in Example 4-6.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 50


PIC18(L)F25/26K83
4.7.3.2 FSR Registers, POSTINC, In this context, accessing an INDF register uses the
POSTDEC, PREINC and PLUSW value in the associated FSR register without changing
it. Similarly, accessing a PLUSW register gives the
In addition to the INDF operand, each FSR register pair
FSR value an offset by that in the W register; however,
also has four additional indirect operands. Like INDF,
neither W nor the FSR is actually changed in the
these are “virtual” registers which cannot be directly
operation. Accessing the other virtual registers
read or written. Accessing these registers actually
changes the value of the FSR register.
accesses the location to which the associated FSR
register pair points, and also performs a specific action
on the FSR value. They are:
• POSTDEC: accesses the location to which the
FSR points, then automatically decrements the
FSR by 1 afterwards
• POSTINC: accesses the location to which the
FSR points, then automatically increments the
FSR by 1 afterwards
• PREINC: automatically increments the FSR by 1,
then uses the location to which the FSR points in
the operation
• PLUSW: adds the signed value of the W register
(range of -127 to 128) to that of the FSR and uses
the location to which the result points in the
operation.

FIGURE 4-6: INDIRECT ADDRESSING


0000h
Using an instruction with one of the ADDWF, INDF1, 1 Bank 0
indirect addressing registers as the 0100h
operand.... Bank 1
0200h
Bank 2
0300h
...uses the 14-bit address stored in FSR1H:FSR1L
the FSR pair associated with that
7 0 7 0
register.... Bank 3
x x 1 1 1 1 1 0 1 1 0 0 1 1 0 0 through
Bank 61

...to determine the data memory


location to be used in that operation.
In this case, the FSR1 pair contains 3E00h
3ECCh. This means the contents of Bank 62
location 3ECCh will be added to that 3F00h
of the W register and stored back in Bank 63
3ECCh. 3FFFh
Data Memory

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 51


PIC18(L)F25/26K83
Operations on the FSRs with POSTDEC, POSTINC 4.8.1 INDEXED ADDRESSING WITH
and PREINC affect the entire register pair; that is, roll- LITERAL OFFSET
overs of the FSRnL register from FFh to 00h carry over
Enabling the PIC18 extended instruction set changes
to the FSRnH register. On the other hand, results of
the behavior of indirect addressing using the FSR2
these operations do not change the value of any flags
register pair within Access RAM. Under the proper
in the STATUS register (e.g., Z, N, OV, etc.).
conditions, instructions that use the Access Bank – that
The PLUSW register can be used to implement a form is, most bit-oriented and byte-oriented instructions –
of indexed addressing in the data memory space. By can invoke a form of indexed addressing using an
manipulating the value in the W register, users can offset specified in the instruction. This special
reach addresses that are fixed offsets from pointer addressing mode is known as Indexed Addressing with
addresses. In some applications, this can be used to Literal Offset, or Indexed Literal Offset mode.
implement some powerful program control structure,
When using the extended instruction set, this
such as software stacks, inside of data memory.
addressing mode requires the following:
4.7.3.3 Operations by FSRs on FSRs • The use of the Access Bank is forced (‘a’ = 0) and
Indirect addressing operations that target other FSRs • The file address argument is less than or equal to
or virtual registers represent special cases. For 5Fh.
example, using an FSR to point to one of the virtual Under these conditions, the file address of the
registers will not result in successful operations. As a instruction is not interpreted as the lower byte of an
specific case, assume that FSR0H:FSR0L contains address (used with the BSR in direct addressing), or as
3FE7h, the address of INDF1. Attempts to read the an 8-bit address in the Access Bank. Instead, the value
value of the INDF1 using INDF0 as an operand will is interpreted as an offset value to an Address Pointer,
return 00h. Attempts to write to INDF1 using INDF0 as specified by FSR2. The offset and the contents of
the operand will result in a NOP. FSR2 are added to obtain the target address of the
On the other hand, using the virtual registers to write to operation.
an FSR pair may not occur as planned. In these cases,
the value will be written to the FSR pair but without any 4.8.2 INSTRUCTIONS AFFECTED BY
incrementing or decrementing. Thus, writing to either INDEXED LITERAL OFFSET MODE
the INDF2 or POSTDEC2 register will write the same Any of the core PIC18 instructions that can use direct
value to the FSR2H:FSR2L. addressing are potentially affected by the Indexed
Since the FSRs are physical registers mapped in the Literal Offset Addressing mode. This includes all
SFR space, they can be manipulated through all direct byte-oriented and bit-oriented instructions, or almost
operations. Users should proceed cautiously when one-half of the standard PIC18 instruction set.
working on these registers, particularly if their code Instructions that only use Inherent or Literal Addressing
uses indirect addressing. modes are unaffected.
Similarly, operations by indirect addressing are generally Additionally, byte-oriented and bit-oriented instructions
permitted on all other SFRs. Users should exercise the are not affected if they do not use the Access Bank
appropriate caution that they do not inadvertently change (Access RAM bit is ‘1’), or include a file address of 60h
settings that might affect the operation of the device. or above. Instructions meeting these criteria will
continue to execute as before. A comparison of the
4.8 Data Memory and the Extended different possible addressing modes when the
extended instruction set is enabled is shown in
Instruction Set Figure 4-7.
Enabling the PIC18 extended instruction set (XINST Those who desire to use byte-oriented or bit-oriented
Configuration bit = 1) significantly changes certain instructions in the Indexed Literal Offset mode should
aspects of data memory and its addressing. Specifi- note the changes to assembler syntax for this mode.
cally, the use of the Access Bank for many of the core This is described in more detail in Section
PIC18 instructions is different; this is due to the intro- 42.2.1 “Extended Instruction Syntax”.
duction of a new addressing mode for the data memory
space.
What does not change is just as important. The size of
the data memory space is unchanged, as well as its
linear addressing. The SFR map remains the same.
Core PIC18 instructions can still operate in both Direct
and Indirect Addressing mode; inherent and literal
instructions do not change at all. Indirect addressing
with FSR0 and FSR1 also remain unchanged.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 52


PIC18(L)F25/26K83
FIGURE 4-7: COMPARING ADDRESSING OPTIONS FOR BIT-ORIENTED AND
BYTE-ORIENTED INSTRUCTIONS (EXTENDED INSTRUCTION SET ENABLED)

EXAMPLE INSTRUCTION: ADDWF, f, d, a (Opcode: 0010 01da ffff ffff)

0000h
When ‘a’ = 0 and f  60h:
0060h
The instruction executes in
Direct Forced mode. ‘f’ is inter- Bank 0

preted as a location in the 0100h


Access RAM between 060h 00h
Bank 1
and 0FFh. This is the same as through 60h
locations 3F60h to 3FFFh Bank 62
Valid range
(Bank 63) of data memory. for ‘f’
Locations below 60h are not FFh
3F00h Access RAM
available in this Addressing
Bank 63
mode.
3F60h
SFRs
3FFFh
Data Memory

When ‘a’ = 0 and f5Fh: 0000h


The instruction executes in
Indexed Literal Offset mode. ‘f’ 0060h
Bank 0
is interpreted as an offset to the
0100h
address value in FSR2. The 001001da ffffffff
two are added together to Bank 1
obtain the address of the target through
Bank 62
register for the instruction. The
address can be anywhere in FSR2H FSR2L
the data memory space.
3F00h
Note that in this mode, the Bank 63
correct syntax is now: 3F60h
ADDWF [k], d SFRs
where ‘k’ is the same as ‘f’. 3FFFh
Data Memory

BSR
When ‘a’ = 1 (all values of f): 0000h 00000000

The instruction executes in


0060h
Direct mode (also known as
Bank 0
Direct Long mode). ‘f’ is inter- 0100h
preted as a location in one of
the 63 banks of the data Bank 1 001001da ffffffff
memory space. The bank is through
Bank 62
designated by the Bank Select
Register (BSR). The address
can be in any implemented 3F00h
bank in the data memory Bank 63
space. 3F60h
SFRs
3FFFh
Data Memory

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 53


PIC18(L)F25/26K83
4.8.3 MAPPING THE ACCESS BANK IN 4.9 PIC18 Instruction Execution and
INDEXED LITERAL OFFSET MODE the Extended Instruction Set
The use of Indexed Literal Offset Addressing mode Enabling the extended instruction set adds eight
effectively changes how the first 96 locations of Access additional commands to the existing PIC18 instruction
RAM (00h to 5Fh) are mapped. Rather than containing set. These instructions are executed as described in
just the contents of the bottom section of Bank 0, this Section 42.2 “Extended Instruction Set”.
mode maps the contents from a user defined “window”
that can be located anywhere in the data memory
space. The value of FSR2 establishes the lower bound-
ary of the addresses mapped into the window, while the
upper boundary is defined by FSR2 plus 95 (5Fh).
Addresses in the Access RAM above 5Fh are mapped
as previously described (see Section 4.5.4 “Access
Bank”). An example of Access Bank remapping in this
addressing mode is shown in Figure 4-8.
Remapping of the Access Bank applies only to
operations using the Indexed Literal Offset mode.
Operations that use the BSR (Access RAM bit is ‘1’) will
continue to use direct addressing as before.

FIGURE 4-8: REMAPPING THE ACCESS BANK WITH INDEXED LITERAL OFFSET
ADDRESSING
Example Situation:
ADDWF f, d, a 0000h
FSR2H:FSR2L = 120h
Bank 0
Locations in the region
from the FSR2 pointer 0100h
(0120h) to the pointer plus Bank 1
0120h
05Fh (017Fh) are mapped Window
017Fh 00h
to the bottom of the
Bank 1
Access RAM (000h-05Fh). 0200h Bank 1 “Window”
Special File Registers at 5Fh
60h
3F60h through 3FFFh are
mapped to 60h through Bank 2
FFh, as usual. SFRs
through
Bank 0 addresses below Bank 62
5Fh can still be addressed FFh
by using the BSR. Access Bank
3F00h
Bank 63
3F60h
SFRs
3FFFh
Data Memory

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 54


PIC18(L)F25/26K83
5.0 DEVICE CONFIGURATION
Device configuration consists of the Configuration
Words, User ID, Device ID, Rev ID, Device Information
Area (DIA), (see Section 5.7 “Device Information
Area”), and the Device Configuration Information
(DCI) regions, (see Section 5.8 “Device Configura-
tion Information”).

5.1 Configuration Words


There are six Configuration Word bits that allow the
user to setup the device with several choices of
oscillators, Resets and memory protection options.
These are implemented as Configuration Word 1
through Configuration Word 6 at 300000h through
300008h.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 55


PIC18(L)F25/26K83
5.2 Register Definitions: Configuration Words

REGISTER 5-1: CONFIGURATION WORD 1L (30 0000h)


U-1 R/W-1 R/W-1 R/W-1 U-1 R/W-1 R/W-1 R/W-1
— RSTOSC<2:0> — FEXTOSC<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘1’
-n = Value for blank device ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 Unimplemented: Read as ‘1’


bit 6-4 RSTOSC<2:0>: Power-up Default Value for COSC bits
111 = EXTOSC operating per FEXTOSC<2:0> bits
110 = HFINTOSC with HFFRQ = 4 MHz and CDIV = 4:1
101 = LFINTOSC
100 = SOSC
011 = Reserved
010 = EXTOSC with 4x PLL, with EXTOSC operating per FEXTOSC<2:0> bits
001 = Reserved
000 = HFINTOSC with HFFRQ = 64 MHz and CDIV = 1:1; resets COSC/NOSC to 3’b110
bit 3 Unimplemented: Read as ‘1’
bit 2-0 FEXTOSC<2:0>: FEXTOSC External Oscillator Mode Selection bits
111 = EC (External Clock) above 8 MHz; PFM set to high power
110 = EC (External Clock) for 500 kHz to 8 MHz; PFM set to medium power
101 = EC (External Clock) below 500 kHz; PFM set to low power
100 = Oscillator is not enabled
011 = Reserved (do not use)
010 = HS (crystal oscillator) above 8 MHz; PFM set to high power
001 = XT (crystal oscillator) above 500 kHz, below 8 MHz; PFM set to medium power
000 = LP (crystal oscillator) optimized for 32.768 kHz; PFM set to low power

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 56


PIC18(L)F25/26K83

REGISTER 5-2: CONFIGURATION WORD 1H (30 0001h)


U-1 U-1 R/W-1 U-1 R/W-1 U-1 R/W-1 R/W-1
— — FCMEN — CSWEN — PR1WAY CLKOUTEN
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘1’
-n = Value for blank device ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-6 Unimplemented: Read as ‘1’


bit 5 FCMEN: Fail-Safe Clock Monitor Enable bit
1 = FSCM timer is enabled
0 = FSCM timer is disabled
bit 4 Unimplemented: Read as ‘1’
bit 3 CSWEN: Clock Switch Enable bit
1 = Writing to NOSC and NDIV is allowed
0 = The NOSC and NDIV bits cannot be changed by user software
bit 2 Unimplemented: Read as ‘1’
bit 1 PR1WAY: PRLOCKED One-Way Set Enable bit
1 = PRLOCKED bit can be cleared and set only once; Priority registers remain locked after one
clear/set cycle
0 = PRLOCKED bit can be set and cleared repeatedly (subject to the unlock sequence)
bit 0 CLKOUTEN: Clock Out Enable bit
If FEXTOSC<2:0> = EC (high, mid or low) or Not Enabled:
1 = CLKOUT function is disabled; I/O or oscillator function on OSC2
0 = CLKOUT function is enabled; FOSC/4 clock appears at OSC2
Otherwise:
This bit is ignored.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 57


PIC18(L)F25/26K83

REGISTER 5-3: CONFIGURATION WORD 2L (30 0002h)


R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
BOREN<1:0> LPBOREN IVT1WAY MVECEN PWRTS<1:0> MCLRE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘1’
-n = Value for blank device ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-6 BOREN<1:0>: Brown-out Reset Enable bits


When enabled, Brown-out Reset Voltage (VBOR) is set by the BORV bit.
11 = Brown-out Reset is enabled, SBOREN bit is ignored
10 = Brown-out Reset is enabled while running, disabled in Sleep; SBOREN is ignored
01 = Brown-out Reset is enabled according to SBOREN
00 = Brown-out Reset is disabled
bit 5 LPBOREN: Low-Power BOR Enable bit
1 = Low-Power BOR is disabled
0 = Low-Power BOR is enabled
bit 4 IVT1WAY: IVTLOCK bit One-Way Set Enable bit
1 = IVTLOCKED bit can be cleared and set only once; IVT registers remain locked after one clear/set
cycle
0 = IVTLOCK ED bit can be set and cleared repeatedly (subject to the unlock sequence)
bit 3 MVECEN: Multi-vector Enable bit
1 = Multi-vector enabled; Vector table used for interrupts
0 = Legacy interrupt behavior
bit 2-1 PWRTS<1:0>: Power-up Timer Selection bits
11 = PWRT is disabled
10 = PWRT set at 64 ms
01 = PWRT set at 16 ms
00 = PWRT set at 1 ms
bit 0 MCLRE: Master Clear (MCLR) Enable bit
If LVP = 1:
RE3 pin function is MCLR
If LVP = 0:
1 = MCLR pin is MCLR
0 = MCLR pin function is a port defined function

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 58


PIC18(L)F25/26K83

REGISTER 5-4: CONFIGURATION WORD 2H (30 0003h)


R/W-1 U-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
XINST — DEBUG STVREN PPS1WAY ZCD BORV<1:0>(1)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘1’
-n = Value for blank device ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 XINST: Extended Instruction Set Enable bit


1 = Extended instruction set and Indexed Addressing mode are disabled (Legacy mode)
0 = Extended instruction set and Indexed Addressing mode are enabled
bit 6 Unimplemented: Read as ‘1’
bit 5 DEBUG: Debugger Enable bit
1 = Background debugger is disabled
0 = Background debugger is enabled
bit 4 STVREN: Stack Overflow/Underflow Reset Enable bit
1 = Stack Overflow or Underflow will cause a Reset
0 = Stack Overflow or Underflow will not cause a Reset
bit 3 PPS1WAY: PPSLOCKED One-Way Set Enable bit
1 = PPSLOCKED bit can be cleared and set only once; PPS registers remain locked after one clear/set
cycle
0 = PPSLOCKED bit can be set and cleared repeatedly (subject to the unlock sequence)
bit 2 ZCD: Zero-Cross Detect Enable bit
1 = ZCD is disabled; ZCD can be enabled by setting the bit SEN of the ZCDCON register
0 = ZCD is always enabled
bit 1-0 BORV<1:0>: Brown-out Reset Voltage Selection bits(1)
PIC18F25/26K83 Devices:
11 = Brown-out Reset Voltage (VBOR) is set to 2.45V
10 = Brown-out Reset Voltage (VBOR) is set to 2.45V
01 = Brown-out Reset Voltage (VBOR) is set to 2.7V
00 = Brown-out Reset Voltage (VBOR) is set to 2.85V
PIC18LF25/26K83 Device:
11 = Brown-out Reset Voltage (VBOR) is set to 1.90V
10 = Brown-out Reset Voltage (VBOR) is set to 2.45V
01 = Brown-out Reset Voltage (VBOR) is set to 2.7V
00 = Brown-out Reset Voltage (VBOR) is set to 2.85V

Note 1: The higher voltage setting is recommended for operation at or above 16 MHz.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 59


PIC18(L)F25/26K83

REGISTER 5-5: CONFIGURATION WORD 3L (30 0004h)


U-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
— WDTE<1:0> WDTCPS<4:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘1’
-n = Value for blank device ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 Unimplemented: Read as ‘1’


bit 6-5 WDTE<1:0>: WDT Operating Mode bits
00 = WDT is disabled, SWDTEN is ignored
01 = WDT is enabled/disabled by the SWDTEN bit in WDTCON0
10 = WDT is enabled while Sleep = 0, suspended when Sleep = 1; SWDTEN is ignored
11 = WDT is enabled regardless of Sleep; SWDTEN is ignored
bit 4-0 WDTCPS<4:0>: WDT Period Select bits

WDTPS at POR
Software Control
WDTCPS<4:0> Typical Time-out
Value Divider Ratio of WDTPS?
(FIN = 31 kHz)
00000 00000 1:32 25 1 ms
00001 00001 1:64 26 2 ms
00010 00010 1:128 27 4 ms
8
00011 00011 1:256 2 8 ms
00100 00100 1:512 29 16 ms
00101 00101 1:1024 210 32 ms
00110 00110 1:2048 211 64 ms
00111 00111 1:4096 212 128 ms
01000 01000 1:8192 213 256 ms
14
01001 01001 1:16384 2 512 ms No
01010 01010 1:32768 215 1s
01011 01011 1:65536 216 2s
01100 01100 1:131072 217 4s
01101 01101 1:262144 218 8s
01110 01110 1:524299 219 16s
20
01111 01111 1:1048576 2 32s
10000 10000 1:2097152 221 64s
10001 10001 1:4194304 222 128s
10010 10010 1:8388608 223 256s
10011 10011
... ... 1:32 25 1 ms No
11110 11110
11111 01011 1:65536 216 2s Yes

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 60


PIC18(L)F25/26K83

REGISTER 5-6: CONFIGURATION WORD 3H (30 0005h)


U-1 U-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
— — WDTCCS<2:0> WDTCWS<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘1’
-n = Value for blank device ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-6 Unimplemented: Read as ‘1’


bit 5-3 WDTCCS<2:0>: WDT Input Clock Selector bits
If WDTE<1:0> Fuses = 2’b00:
These bits are ignored.
Otherwise:
000 = WDT reference clock is the 31.0 kHz LFINTOSC
001 = WDT reference clock is the 31.25 kHz MFINTOSC
010 = WDT reference clock is SOSC
011 = Reserved (default to LFINTOSC)


110 = Reserved (default to LFINTOSC)
111 = Software control
bit 2-0 WDTCWS<2:0>: WDT Window Select bits

Window at POR Software Keyed


WDTCWS<2:0> Window Delay Window Opening Control of Access
Value Window Required?
Percent of Time Percent of Time
000 000 87.5 12.5
001 001 75 25
010 010 62.5 37.5
011 011 50 50 No Yes
100 100 37.5 62.5
101 101 25 75
110 111 n/a 100
111 111 n/a 100 Yes No

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 61


PIC18(L)F25/26K83

REGISTER 5-7: CONFIGURATION WORD 4L (30 0006h)


R/W-1 U-1 U-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
WRTAPP (1) — — SAFEN (1) BBEN (1) BBSIZE<2:0> (2)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘1’
-n = Value for blank device ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 WRTAPP: Application Block Write Protection bit(1)


1 = Application Block is NOT write-protected
0 = Application Block is write-protected
bit 6-5 Unimplemented: Read as ‘1’
bit 4 SAFEN: Storage Area Flash Enable bit(1)
1 = SAF is disabled
0 = SAF is enabled
bit 3 BBEN: Boot Block Enable bit(1)
1 = Boot Block disabled
0 = Boot Block enabled
bit 2-0 BBSIZE<2:0>: Boot Block Size Selection bits(2)
Refer to Table 5-1.

Note 1: Bits are implemented as sticky bits. Once protection is enabled through ICSP™ or a self-write, it can only be
reset through a Bulk Erase.
2: BBSIZE<2:0> bits can only be changed when BBEN = 1. Once BBEN = 0, BBSIZE<2:0> can only be
changed through a Bulk Erase.

TABLE 5-1: BOOT BLOCK SIZE BITS


Boot Block Size Device Size(1)
BBEN BBSIZE[2:0] END_ADDRESS_BOOT
(words) 16k 32k
1 xxx 0 — X X
0 111 512 00 03FFh X X
0 110 1024 00 07FFh X X
0 101 2048 00 0FFFh X X
0 100 4096 00 1FFFh X X
0 011 8192 00 3FFFh X X
0 010 16384 00 7FFFh — X
0 001 32768 00 FFFFh Note 2
0 000 32768 00 FFFFh — —
Note 1: For each device, the quoted device size specification is listed in Table 4-1.
2: The maximum Boot Block size is half the user program memory size. All selections higher than the maximum size default
to maximum Boot Block size of half PFM. For example, all settings of BBSIZE = 000 through BBSIZE = 010, default to a
Boot Block size of 16 kW on a 32 kW device.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 62


PIC18(L)F25/26K83

REGISTER 5-8: CONFIGURATION WORD 4H (30 0007h)


U-1 U-1 R/W-1 U-1 R/W-1 R/W-1 R/W-1 R/W-1

— — LVP(2) — WRTSAF (1,3) WRTD (1,4) WRTC (1) WRTB(1,5)


bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘1’
-n = Value for blank device ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-6 Unimplemented: Read as ‘1’


bit 5 LVP: Low-Voltage Programming Enable bit(2)
1 = Low-voltage programming enabled. MCLR/VPP pin function is MCLR. MCLRE (Register 5-3) is
ignored.
0 = HV on MCLR/VPP must be used for programming.
bit 4 Unimplemented: Read as ‘1’
bit 3 WRTSAF: Storage Area Flash (SAF) Write Protection bit(1,3)
1 = SAF is NOT write-protected
0 = SAF is write-protected
bit 2 WRTD: Data EEPROM Write Protection bit(1,4)
1 = Data EEPROM NOT write-protected
0 = Data EEPROM write-protected
bit 1 WRTC: Configuration Register Write Protection bit(1)
1 = Configuration Register NOT write-protected
0 = Configuration Register write-protected
bit 0 WRTB: Boot Block Write Protection bit(1,5)
1 = Boot Block NOT write-protected
0 = Boot Block write-protected
Note 1: Bits are implemented as sticky bits. Once protection is enabled through ICSP or a self write, it can only be
reset through a Bulk Brase.
2: The LVP bit cannot be written (to zero) while operating from the LVP programming interface. The purpose
of this rule is to prevent the user from dropping out of LVP mode while programming from LVP mode, or
accidentally eliminating LVP mode from the configuration state.
3: Unimplemented if SAF is not present and only applicable if SAFEN = 0.
4: Unimplemented if data EEPROM is not present.
5: Only applicable if BBEN = 0.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 63


PIC18(L)F25/26K83

REGISTER 5-9: CONFIGURATION WORD 5L (30 0008h)


U-1 U-1 U-1 U-1 U-1 U-1 U-1 R/W-1
— — — — — — — CP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘1’
-n = Value for blank device ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-1 Unimplemented: Read as ‘1’


bit 0 CP: User Program Flash Memory and Data EEPROM Code Protection bit
1 = User Program Flash Memory and Data EEPROM code protection is disabled
0 = User Program Flash Memory and Data EEPROM code protection is enabled

REGISTER 5-10: CONFIGURATION WORD 5H (30 0009h)


U-1 U-1 U-1 U-1 U-1 U-1 U-1 U-1
— — — — — — — —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘1’
-n = Value for blank device ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 Unimplemented: Read as ‘1’

TABLE 5-2: SUMMARY OF CONFIGURATION WORDS


Default/
Address Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Unprogrammed
Value

30 0000h CONFIG1L — RSTOSC<2:0> — FEXTOSC<2:0> 1111 1111

30 0001h CONFIG1H — — FCMEN — CSWEN — PR1WAY CLKOUTEN 1111 1111

30 0002h CONFIG2L BOREN<1:0> LPBOREN IVT1WAY MVECEN PWRTS<1:0> MCLRE 1111 1111

30 0003h CONFIG2H XINST — DEBUG STVREN PPS1WAY ZCD BORV<1:0> 1111 1111

30 0004h CONFIG3L — WDTE<1:0> WDTCPS<4:0> 1111 1111

30 0005h CONFIG3H — — WDTCCS<2:0> WDTCWS<2:0> 1111 1111

30 0006h CONFIG4L WRTAPP — — SAFEN BBEN BBSIZE<2:0> 1111 1111

30 0007h CONFIG4H — — LVP — WRTSAF WRTD WRTC WRTB 1111 1111

30 0008h CONFIG5L — — — — — — — CP 1111 1111

30 0009h CONFIG5H — — — — — — — — 1111 1111

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 64


PIC18(L)F25/26K83
5.3 Code Protection
Code protection allows the device to be protected from
external access. Program memory protection and data
memory are controlled through the CP Configuration
bit. Internal access to the program memory is
unaffected by code protection setting.
The entire program memory space and Data
EEPROM is protected from external reads and writes
by the CP bit in Configuration Words. When CP = 0,
external reads and writes of memory are inhibited and
a read will return all ‘0’s. The CPU can continue to
read program memory and data EEPROM, regardless
of the protection bit settings. Self-writing the program
memory or Data EEPROM is dependent upon the
write protection settings.

5.4 User ID
Eight words in the memory space (200000h-200000Fh)
are designated as ID locations where the user can
store checksum or other code identification numbers.
These locations are readable and writable during
normal execution. See Section 13.2 “Device
Information Area, Device Configuration Area, User
ID, Device ID and Configuration Word Access” for
more information on accessing these memory
locations. For more information on checksum
calculation, see the “PIC18(L)F25/26K83 Memory
Programming Specification” (DS40000000).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 65


PIC18(L)F25/26K83
5.5 Device ID and Revision ID
The 16-bit device ID word is located at 3F FFFEh and
the 16-bit revision ID is located at 3F FFFCh. These
locations are read-only and cannot be erased or
modified.
Development tools, such as device programmers and
debuggers, may be used to read the Device ID,
Revision ID and Configuration Words. Refer to 13.0
“Nonvolatile Memory (NVM) Control” for more
information on accessing these locations.

5.6 Register Definitions: Device ID and Revision ID

REGISTER 5-11: DEVICE ID: DEVICE ID REGISTER


R R R R R R R R
DEV<15:8>
bit 15 bit 8

R R R R R R R R
DEV<7:0>
bit 7 bit 0

Legend:
R = Readable bit ‘1’ = Bit is set 0’ = Bit is cleared x = Bit is unknown

bit 15-0 DEV<15:0>: Device ID bits

Device Device ID
PIC18F25K83 6EE0h
PIC18F26K83 6EC0h
PIC18LF25K83 6F20h
PIC18LF26K83 6F00h

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 66


PIC18(L)F25/26K83

REGISTER 5-12: REVISION ID: REVISION ID REGISTER


R R R R R R R R
1 0 1 0 MJRREV<5:2>
bit 15 bit 8

R R R R R R R R
MJRREV<1:0> MNRREV<5:0>
bit 7 bit 0

Legend:
R = Readable bit ‘1’ = Bit is set 0’ = Bit is cleared x = Bit is unknown

bit 15-12 Read as ‘1010’


These bits are fixed with value ‘1010’ for all devices in this family.
bit 11-6 MJRREV<5:0>: Major Revision ID bits
These bits are used to identify a major revision. A major revision is indicated by revision (A0, B0, C0,
etc.)
Revision A = 0b00 0000
bit 5-0 MNRREV<5:0>: Minor Revision ID bits
These bits are used to identify a minor revision.
Revision A0 = 0b00 0000

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 67


PIC18(L)F25/26K83
5.7 Device Information Area
The Device Information Area (DIA) is a dedicated
region in the program memory space. The DIA contains
the calibration data for the internal temperature
indicator module, stores the Microchip Unique Identifier
words and the Fixed Voltage Reference voltage
readings measured in mV.
The complete DIA table is shown in Table 5-3: Device
Information Area, followed by a description of each
region and its functionality. The data is mapped from
3F0000h to 3F003Fh in the PIC18(L)F25/26K83 family.
These locations are read-only and cannot be erased or
modified by the user. The data is programmed into the
device during manufacturing.

TABLE 5-3: DEVICE INFORMATION AREA


Address Range Name of Region Standard Device Information
MUI0
MUI1
MUI2
3F0000h-3F000Bh Microchip Unique Identifier (6 Words)
MUI3
MUI4
MUI5
MUI6
3F000Ch-3F000Fh Unassigned (2 Words)
MUI7
EUI0
EUI1
EUI2
EUI3
EUI4
3F0010h-3F0023h Optional External Unique Identifier (10 Words)
EUI5
EUI6
EUI7
EUI8
EUI9
3F0024h-3F0025h TSLR1 Unassigned (1 Word)
3F0026h-3F0027h TSLR2 Temperature Indicator ADC reading at @ 90°C (low range setting)
3F0028h-3F0029h TSLR3 Unassigned (1 word)
3F002Ah-3F002Bh TSHR1 Unassigned (1 Word)
3F002Ch-3F002Dh TSHR2 Temperature Indicator ADC reading at @ 90°C (high range setting)
3F002Eh-3F002Fh TSHR3 Unassigned (1 Word)
3F0030h-3F0031h FVRA1X ADC FVR1 Output voltage for 1x setting (in mV)
3F0032h-3F0033h FVRA2X ADC FVR1 Output Voltage for 2x setting (in mV)
3F0034h-3F0035h FVRA4X ADC FVR1 Output Voltage for 4x setting (in mV)
3F0036h-3F0037h FVRC1X Comparator FVR2 output voltage for 1x setting (in mV)
3F0038h-3F0039h FVRC2X Comparator FVR2 output voltage for 2x setting (in mV)
3F003Ah-3F003Bh FVRC4X Comparator FVR2 output voltage for 4x setting (in mV)
3F003Ch-3F003Fh Unassigned (2 Words)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 68


PIC18(L)F25/26K83
5.7.1 MICROCHIP UNIQUE IDENTIFIER 5.7.3 ANALOG-TO-DIGITAL
(MUI) CONVERSION DATA OF THE
The PIC18(L)F25/26K83 devices are individually TEMPERATURE SENSOR
encoded during final manufacturing with a Microchip The purpose of the Temperature Sensor module is to
Unique Identifier, or MUI. The MUI cannot be user- provide a temperature-dependent voltage that can be
erased. This feature allows for manufacturing measured by an analog module, see Section
traceability of Microchip Technology devices in 36.0 “Temperature Indicator Module”.
applications where this is a required. It may also be
The DIA table contains the internal ADC measurement
used by the application manufacturer for a number of
values of the Temperature sensor for Low and High
functions that require unverified unique identification,
range at fixed points of reference. The values are
such as:
measured during test and are unique to each device.
• Tracking the device The measurement data is stored in the DIA memory
• Unique serial number region as hexadecimal numbers corresponding to the
ADC conversion result. The calibration data can be
The MUI consists of six program words. When read
used to plot the approximate sensor output voltage,
together, these fields form a unique identifier. The MUI
VTSENSE vs. Temperature curve without having to
is stored in nine read-only locations, located between
make calibration measurements in the application. For
3F0000h to 3F000Fh in the DIA space. Table 5-3 lists
more information on the operation of the Temperature
the addresses of the identifier words.
Sensor, refer to Section 36.0 “Temperature Indicator
Note: For applications that require verified Module”.
unique identification, contact your • TSLR1-TSLR3: Address 3F0024h to 3F0029h
Microchip Technology sales office to store the measurements for the low-range setting
create a Serialized Quick Turn of the Temperature Sensor at VDD = 3V.
ProgrammingSM option. • TSHR1-TSHR3: Address 3F002Ah to 3F002Fh
store the measurements for the High Range set-
5.7.2 EXTERNAL UNIQUE IDENTIFIER ting of the Temperature Sensor at VDD = 3V.
(EUI) • The stored measurements are made by the
The EUI data is stored at locations 3F0010h to device ADC using the internal VREF = 2.048V.
3F0023h in the Program Memory region. This region is
an optional space for placing application specific
information. The data is coded per customer
requirements during manufacturing.

Note: Data is stored in this address range on


receiving a request from the customer.
The customer may contact the local sales
representative, or Field Applications
Engineer, and provide them the unique
identifier information that is supposed to
be stored in this region.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 69


PIC18(L)F25/26K83
5.7.4 FIXED VOLTAGE REFERENCE 5.8 Device Configuration Information
DATA
The Device Configuration Information (DCI) is a
The DIA stores measured FVR voltages for this device dedicated region in the program memory space
in mV for the different buffer settings of 1x, 2x or 4x at mapped from 3FFF00h to 3FFF09h. The data stored in
Program Memory locations 3F0030h to 3F003Bh. For these locations is read-only and cannot be erased.
more information on the FVR, refer to Section 35.0
Refer to Table 5-4: Device Configuration Information
“Fixed Voltage Reference (FVR)”.
for PIC18(L)F25/26K83 for the complete DCI table
• FVRA1X stores the value of ADC FVR1 Output address and description. The DCI holds information
voltage for 1x setting (in mV) about the device which is useful for programming and
• FVRA2X stores the value of ADC FVR1 Output bootloader applications.
Voltage for 2x setting (in mV)
The erase size is the minimum erasable unit in the
• FVRA4X stores the value of ADC FVR1 Output
PFM, expressed as rows. The total device Flash
Voltage for 4x setting (in mV)
memory capacity is (Row Size * Number of rows)
• FVRC1X stores the value of Comparator FVR2
output voltage for 2x setting (in mV)
• FVRC2X stores the value of Comparator FVR2
output voltage for 2x setting (in mV)
• FVRC4X stores the value of Comparator FVR2
output voltage for 4x setting (in mV)
TABLE 5-4: DEVICE CONFIGURATION INFORMATION FOR PIC18(L)F25/26K83
VALUE
ADDRESS Name DESCRIPTION UNITS
PIC18(L)F25K83 PIC18(L)F26K83
3F FF00h-3F FF01h ERSIZ Erase Row Size 64 64 Words
3F FF02h-3F FF03h WLSIZ Number of write latches per row 128 128 Bytes
3F FF04h-3F FF05h URSIZ Number of User Rows 256 512 Rows
3F FF06h-3F FF07h EESIZ Data EEPROM memory size 1024 1024 Bytes
3F FF08h-3F FF09h PCNT Pin Count 28 28 Pins

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 70


PIC18(L)F25/26K83
6.0 RESETS To allow VDD to stabilize, an optional Power-up Timer
can be enabled to extend the Reset time after a BOR
There are multiple ways to reset this device: or POR event.
• Power-on Reset (POR) A simplified block diagram of the On-Chip Reset Circuit
• Brown-out Reset (BOR) is shown in Figure 6-1.
• Low-Power Brown-Out Reset (LPBOR)
• MCLR Reset
• WDT Reset
• RESET instruction
• Stack Overflow
• Stack Underflow
• Programming mode exit
• Memory Execution Violation Reset (MEMV)

FIGURE 6-1: SIMPLIFIED BLOCK DIAGRAM OF ON-CHIP RESET CIRCUIT


Rev. 10-000006G
4/6/2017

ICSP™ Programming Mode Exit


RESET Instruction
Memory Violation

Stack Underflow
Stack Overflow

VPP /MCLR MCLRE

WWDT Time-out/
Window violation Device
Reset

Power-on
Reset
VDD

Brown-out
Reset Power-up
Timer

LFINTOSC
2
LPBOR
PWRTS<1:0>
Reset

 2017 Microchip Technology Inc. Preliminary DS40000000A-page 71


PIC18(L)F25/26K83
FIGURE 6-2: LPBOR, BOR, POR RELATIONSHIP

BOR
BOR Event

REARM POR
Event To PCON0
indicator bit
POR
LPBOR
POR Event
LPBOR Event

Reset
logic

 2017 Microchip Technology Inc. Preliminary DS40000000A-page 72


PIC18(L)F25/26K83
6.1 Power-on Reset (POR) 6.2.3 BOR CONTROLLED BY SOFTWARE
The POR circuit holds the device in Reset until VDD has When the BOREN bits of Configuration Words are
reached an acceptable level for minimum operation. programmed to ‘01’, the BOR is controlled by the
Slow rising VDD, fast operating speeds or analog SBOREN bit of the BORCON register. The device start-
performance may require greater than minimum VDD. up is not delayed by the BOR ready condition or the
The PWRT, BOR or MCLR features can be used to VDD level.
extend the start-up period until all device operation BOR protection begins as soon as the BOR circuit is
conditions have been met. ready. The status of the BOR circuit is reflected in the
BORRDY bit of the BORCON register.
6.2 Brown-out Reset (BOR) BOR protection is unchanged by Sleep.
The BOR circuit holds the device in Reset when VDD
6.2.4 BOR AND BULK ERASE
reaches a selectable minimum level. Between the
POR and BOR, complete voltage range coverage for BOR is forced ON during PFM Bulk Erase operations
execution protection can be implemented. to make sure that a safe erase voltage is maintained for
a successful erase cycle.
The Brown-out Reset module has four operating
modes controlled by the BOREN<1:0> bits in During Bulk Erase, the BOR is enabled at 2.45V for F
Configuration Words. The four operating modes are: and LF devices, even if it is configured to some other
value. If VDD falls, the erase cycle will be aborted, but
• BOR is always on
the device will not be reset.
• BOR is off when in Sleep
• BOR is controlled by software
• BOR is always off
Refer to Table 6-1 for more information.
The Brown-out Reset voltage level is selectable by
configuring the BORV<1:0> bits in Configuration
Words.
A VDD noise rejection filter prevents the BOR from
triggering on small events. If VDD falls below VBOR for
a duration greater than parameter TBORDC, the device
will reset. See Table 45-11 for more information.

6.2.1 BOR IS ALWAYS ON


When the BOREN bits of Configuration Words are
programmed to ‘11’, the BOR is always on. The device
start-up will be delayed until the BOR is ready and VDD
is higher than the BOR threshold.
BOR protection is active during Sleep. The BOR does
not delay wake-up from Sleep.

6.2.2 BOR IS OFF IN SLEEP


When the BOREN bits of Configuration Words are
programmed to ‘10’, the BOR is on, except in Sleep.
The device start-up will be delayed until the BOR is
ready and VDD is higher than the BOR threshold.
BOR protection is not active during Sleep. The device
wake-up will be delayed until the BOR is ready.

 2017 Microchip Technology Inc. Preliminary DS40000000A-page 73


PIC18(L)F25/26K83

TABLE 6-1: BOR OPERATING MODES


Instruction Execution upon:
BOREN<1:0> SBOREN Device Mode BOR Mode
Release of POR Wake-up from Sleep
Wait for release of BOR
11 X X Active Begins immediately
(BORRDY = 1)
Wait for release of BOR
Awake Active N/A
(BORRDY = 1)
10 X
Wait for release of BOR
Sleep Hibernate N/A
(BORRDY = 1)
1 X Active Wait for release of BOR
01 Begins immediately
0 X Hibernate (BORRDY = 1)
00 X X Disabled Begins immediately

FIGURE 6-3: BROWN-OUT SITUATIONS

VDD
VBOR

Internal
Reset TPWRT(1)

VDD
VBOR

Internal < TPWRT


Reset TPWRT(1)

VDD
VBOR

Internal
Reset TPWRT(1)

Note 1: TPWRT delay depends on PWRTS<1:0> Configuration bits.

 2017 Microchip Technology Inc. Preliminary DS40000000A-page 74


PIC18(L)F25/26K83
6.3 Register Definitions: BOR Control
REGISTER 6-1: BORCON: BROWN-OUT RESET CONTROL REGISTER
R/W-1/u U-0 U-0 U-0 U-0 U-0 U-0 R-q/u
SBOREN — — — — — — BORRDY
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 SBOREN: Software Brown-out Reset Enable bit


If BOREN  01:
SBOREN is read/write, but has no effect on the BOR.
If BOREN = 01:
1 = BOR Enabled
0 = BOR Disabled
bit 6-1 Unimplemented: Read as ‘0’
bit 0 BORRDY: Brown-out Reset Circuit Ready Status bit
1 = The Brown-out Reset Circuit is active and armed
0 = The Brown-out Reset Circuit is disabled or is warming up

 2017 Microchip Technology Inc. Preliminary DS40000000A-page 75


PIC18(L)F25/26K83
6.4 Low-Power Brown-out Reset 6.6 Windowed Watchdog Timer
(LPBOR) (WWDT) Reset
The Low-Power Brown-out Reset (LPBOR) provides The Windowed Watchdog Timer generates a Reset if
an additional BOR circuit for low power operation. the firmware does not issue a CLRWDT instruction
Refer to Figure 6-2 to see how the BOR interacts with within the time-out period or window set. The TO and
other modules. PD bits in the STATUS register and the RWDT bit in the
The LPBOR is used to monitor the external VDD pin. PCON0 register are changed to indicate a WWDT
When too low of a voltage is detected, the device is Reset. The WDTWV bit in the PCON0 register indicates
held in Reset. if the WDT Reset has occurred due to a time out or a
window violation. See Section 11.0 “Windowed
6.4.1 ENABLING LPBOR Watchdog Timer (WWDT)” for more information.
The LPBOR is controlled by the LPBOREN bit of
Configuration Word 2L. When the device is erased, the
6.7 RESET Instruction
LPBOR module defaults to disabled. A RESET instruction will cause a device Reset. The RI
bit in the PCON0 register will be set to ‘0’. See Table 6-
6.4.1.1 LPBOR Module Output 3 for default conditions after a RESET instruction has
The output of the LPBOR module is a signal indicating occurred.
whether or not a Reset is to be asserted. This signal is
OR’d together with the Reset signal of the BOR 6.8 Stack Overflow/Underflow Reset
module to provide the generic BOR signal, which goes
to the PCON0 register and to the power control block. The device can reset when the Stack Overflows or
Underflows. The STKOVF or STKUNF bits of the
PCON0 register indicate the Reset condition. These
6.5 MCLR
Resets are enabled by setting the STVREN bit in
The MCLR is an optional external input that can reset Configuration Words. See Section 4.2.5 “Return
the device. The MCLR function is controlled by the Address Stack” for more information.
MCLRE bit of Configuration Words and the LVP bit of
Configuration Words (Table 6-2). The RMCLR bit in the 6.9 Programming Mode Exit
PCON0 register will be set to ‘0’ if a MCLR Reset has
occurred. Upon exit of Programming mode, the device will
behave as if a POR has just occurred.

TABLE 6-2: MCLR CONFIGURATION 6.10 Power-up Timer (PWRT)


MCLRE LVP MCLR
The Power-up Timer provides a selected time-out
x 1 Enabled duration on POR or Brown-out Reset.
1 0 Enabled The device is held in Reset as long as PWRT is active.
0 0 Disabled The PWRT delay allows additional time for the VDD to
rise to an acceptable level. The Power-up Timer is
6.5.1 MCLR ENABLED selected by setting the PWRTS<1:0> Configuration
bits, appropriately.
When MCLR is enabled and the pin is held low, the
device is held in Reset. The MCLR pin is connected to The Power-up Timer starts after the release of the POR
VDD through an internal weak pull-up. and BOR/LPBOR if enabled, as shown in Figure 6-1.
The device has a noise filter in the MCLR Reset path.
The filter will detect and ignore small pulses.
Note: An internal Reset event (RESET
instruction, BOR, WWDT, POR stack),
does not drive the MCLR pin low.

6.5.2 MCLR DISABLED


When MCLR is disabled, the MCLR pin becomes input-
only and pin functions such as internal weak pull-ups
are under software control. See Section 16.2 “I/O
Priorities” for more information.

 2017 Microchip Technology Inc. Preliminary DS40000000A-page 76


PIC18(L)F25/26K83
6.11 Start-up Sequence The total time out will vary based on oscillator
configuration and Power-up Timer configuration. See
Upon the release of a POR or BOR, the following must Section 7.0 “Oscillator Module (with Fail-Safe
occur before the device will begin executing: Clock Monitor)” for more information.
1. Power-up Timer runs to completion (if enabled). The Power-up Timer and oscillator start-up timer run
2. Oscillator start-up timer runs to completion (if independently of MCLR Reset. If MCLR is kept low
required for selected oscillator source). long enough, the Power-up Timer and oscillator Start-
3. MCLR must be released (if enabled). up Timer will expire. Upon bringing MCLR high, the
device will begin execution after 10 FOSC cycles (see
Figure 6-4). This is useful for testing purposes or to
synchronize more than one device operating in parallel.

FIGURE 6-4: RESET START-UP SEQUENCE

VDD

Internal POR

TPWRT
Power-up Timer

MCLR

TMCLR
Internal RESET

Oscillator Modes
External Crystal
TOST
Oscillator Start-up Timer

Oscillator

FOSC

Internal Oscillator

Oscillator

FOSC

External Clock (EC)

CLKIN

FOSC

 2017 Microchip Technology Inc. Preliminary DS40000000A-page 77


PIC18(L)F25/26K83
6.11.1 MEMORY EXECUTION VIOLATION
If the CPU executes outside the valid execution area, a
memory execution violation Reset occurs.
The invalid execution areas are:
1. Addresses outside implemented program mem-
ory (see Table 5-1).
2. Storage Area Flash (SAF) inside program
memory, if it is enabled.
When a memory execution violation is generated, flag
MEMV is cleared in PCON1 (Register 6-3) to signal the
cause of Reset. It needs to be set in the user code after
a memory execution violation Reset has occurred to
detect further violation Resets.

6.12 Determining the Cause of a Reset


Upon any Reset, multiple bits in the STATUS and
PCON0 registers are updated to indicate the cause of
the Reset. Table 6-3 shows the Reset conditions of
these registers.

TABLE 6-3: RESET CONDITION FOR SPECIAL REGISTERS


Program STATUS PCON0 PCON1
Condition
Counter Register(1,2) Register Register
Power-on Reset 0 -110 0000 0011 110x ---- --1-
Brown-out Reset 0 -110 0000 0011 11u0 ---- --1-

MCLR Reset during normal operation 0 -uuu uuuu uuuu 0uuu ---- --u-
MCLR Reset during Sleep 0 -10u uuuu uuuu 0uuu ---- --u-
WDT Time-out Reset 0 -0uu uuuu uuu0 uuuu ---- --u-
WWDT Window Violation Reset 0 -uuu uuuu uu0u uuuu ---- --u-

RESET Instruction Executed 0 -uuu uuuu uuuu u0uu ---- --u-


Stack Overflow Reset (STVREN = 1) 0 -uuu uuuu 1uuu uuuu ---- --u-
Stack Underflow Reset (STVREN = 1) 0 -uuu uuuu u1uu uuuu ---- --u-
Memory Violation Reset 0 -uuu uuuu uuuu uuuu ---- --0-
Legend: u = unchanged, x = unknown, — = unimplemented bit, reads as ‘0’.
Note 1: If a Status bit is not implemented, that bit will be read as ‘0’.
2: Status bits Z, C, DC are reset by POR/BOR, but not defined by the Resets module (Register 4-2).

 2017 Microchip Technology Inc. Preliminary DS40000000A-page 78


PIC18(L)F25/26K83
6.13 Power Control (PCON0/PCON1) The PCON0/1 register bits are shown in Register 6-2
Register and Register 6-3. Hardware will change the
corresponding register bit during the Reset process; if
The Power Control (PCON0/PCON1) register contains the Reset was not caused by the condition, the bit
flag bits to differentiate between a: remains unchanged (Table 6-3).
• Brown-out Reset (BOR) Software should reset the bit to the inactive state after
• Power-on Reset (POR) restart (hardware will not reset the bit). Software may
• Reset Instruction Reset (RI) also set any PCON0 bit to the active state, so that user
code may be tested, but no Reset action will be
• MCLR Reset (RMCLR)
generated.
• Watchdog Timer Reset (RWDT)
• Watchdog Window Violation (WDTWV)
• Stack Underflow Reset (STKUNF)
• Stack Overflow Reset (STKOVF)
• Memory Violation Reset (MEMV)

 2017 Microchip Technology Inc. Preliminary DS40000000A-page 79


PIC18(L)F25/26K83
6.14 Register Definitions: Power Control

REGISTER 6-2: PCON0: POWER CONTROL REGISTER 0


R/W/HS-0/q R/W/HS-0/q R/W/HC-1/q R/W/HC-1/q R/W/HC-1/q R/W/HC-1/q R/W/HC-0/u R/W/HC-q/u

STKOVF STKUNF WDTWV RWDT RMCLR RI POR BOR


bit 7 bit 0

Legend:
HC = Bit is cleared by hardware HS = Bit is set by hardware
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -m/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 STKOVF: Stack Overflow Flag bit


1 = A Stack Overflow occurred (more CALLs than fit on the stack)
0 = A Stack Overflow has not occurred or set to ‘0’ by firmware
bit 6 STKUNF: Stack Underflow Flag bit
1 = A Stack Underflow occurred (more RETURNs than CALLs)
0 = A Stack Underflow has not occurred or set to ‘0’ by firmware
bit 5 WDTWV: Watchdog Window Violation bit
1 = A WDT window violation has not occurred or set to ‘1’ by firmware
0 = A CLRWDT instruction was issued when the WDT Reset window was closed (set to ‘0’ in hardware
when a WDT window violation Reset occurs)
bit 4 RWDT: WDT Reset Flag bit
1 = A WDT overflow/time-out Reset has not occurred or set to ‘1’ by firmware
0 = A WDT overflow/time-out Reset has occurred (set to ‘0’ in hardware when a WDT Reset occurs)
bit 3 RMCLR: MCLR Reset Flag bit
1 = A MCLR Reset has not occurred or set to ‘1’ by firmware
0 = A MCLR Reset has occurred (set to ‘0’ in hardware when a MCLR Reset occurs)
bit 2 RI: RESET Instruction Flag bit
1 = A RESET instruction has not been executed or set to ‘1’ by firmware
0 = A RESET instruction has been executed (set to ‘0’ in hardware upon executing a RESET
instruction)
bit 1 POR: Power-on Reset Status bit
1 = No Power-on Reset occurred or set to ‘1’ by firmware
0 = A Power-on Reset occurred (set to ‘0’ in hardware when a Power-on Reset occurs)
bit 0 BOR: Brown-out Reset Status bit
1 = No Brown-out Reset occurred or set to ‘1’ by firmware
0 = A Brown-out Reset occurred (set to ‘0’ in hardware when a Brown-out Reset occurs)

 2017 Microchip Technology Inc. Preliminary DS40000000A-page 80


PIC18(L)F25/26K83

REGISTER 6-3: PCON1: POWER CONTROL REGISTER 1


U-0 U-0 U-0 U-0 U-0 U-0 R/W/HC-1/u U-0

— — — — — — MEMV —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -m/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7-2 Unimplemented: Read as ‘0’


bit 1 MEMV: Memory Violation Flag bit
1 = No memory violation Reset occurred or set to ‘1’ by firmware
0 = A memory violation Reset occurred (set to ‘0’ in hardware when a memory violation occurs)
bit 0 Unimplemented: Read as ‘0’

TABLE 6-4: SUMMARY OF REGISTERS ASSOCIATED WITH RESETS


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page
BORCON SBOREN — — — — — — BORRDY 75
PCON0 STKOVF STKUNF WDTWV RWDT RMCLR RI POR BOR 80
PCON1 — — — — — — MEMV — 81
Legend: — = unimplemented location, read as ‘0’. Shaded cells are not used by Resets.

 2017 Microchip Technology Inc. Preliminary DS40000000A-page 81


PIC18(L)F25/26K83
7.0 OSCILLATOR MODULE (WITH The external oscillator module can be configured in one
of the following clock modes, by setting the
FAIL-SAFE CLOCK MONITOR)
FEXTOSC<2:0> Configuration bits:

7.1 Overview 1. ECL – External Clock Low-Power mode


(below 100 kHz)
The oscillator module has multiple clock sources and 2. ECM – External Clock Medium Power mode
selection features that allow it to be used in a wide (100 kHz to 8 MHz)
range of applications while maximizing performance 3. ECH – External Clock High-Power mode
and minimizing power consumption. Figure 7-1 (above 8 MHz)
illustrates a block diagram of the oscillator module.
4. LP – 32 kHz Low-Power Crystal mode.
Clock sources can be supplied from external oscillators, 5. XT – Medium Gain Crystal or Ceramic Resonator
quartz-crystal resonators and ceramic resonators. In Oscillator mode (between 100 kHz and 8 MHz)
addition, the system clock source can be supplied from
6. HS – High Gain Crystal or Ceramic Resonator
one of two internal oscillators and PLL circuits, with a
mode (above 4 MHz)
choice of speeds selectable via software. Additional
clock features include: The ECH, ECM, and ECL Clock modes rely on an
external logic level signal as the device clock source.
• Selectable system clock source between external
The LP, XT, and HS Clock modes require an external
or internal sources via software.
crystal or resonator to be connected to the device.
• Fail-Safe Clock Monitor (FSCM) designed to Each mode is optimized for a different frequency range.
detect a failure of the external clock source (LP, The internal oscillator block produces low and high-
XT, HS, ECH, ECM, ECL) and switch frequency clock sources, designated LFINTOSC and
automatically to the internal oscillator. HFINTOSC. (see Internal Oscillator Block, Figure 7-1).
• Oscillator Start-up Timer (OST) ensures stability Multiple device clock frequencies may be derived from
of crystal oscillator sources. these clock sources.
The RSTOSC bits of Configuration Word 1 (Register 5-
1) determine the type of oscillator that will be used
when the device runs after Reset, including when it is
first powered up.
If an external clock source is selected, the FEXTOSC
bits of Configuration Word 1 must be used in
conjunction with the RSTOSC bits to select the
External Clock mode.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 82


FIGURE 7-1: SIMPLIFIED PIC® MCU CLOCK SOURCE BLOCK DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000208D
5/10/2016

CLKIN/OSC1

External
Oscillator
(EXTOSC)

CLKOUT/OSC2
CDIV<4:0>
4x PLL
COSC<2:0>
SOSCIN/SOSCI

Secondary 512
Oscillator 1001
256
(SOSC) 111 1000
128 Sleep
SOSCO 010 0111 System Clock
64
100 0110

Post Divider
LFINTOSC
Preliminary

32
101 0101
31 kHz 16
110 0100 SYSCMD Peripheral Clock
Oscillator
8
Reserved 011 0011
4
Reserved 001 0010 Sleep
2
HFINTOSC Reserved 000 0001 Idle

PIC18(L)F25/26K83
1
0000
FRQ<3:0>
1,2,4,8,12,16,32,48,64
MHz
Oscillator
LFINTOSC is used to
FSCM
monitor system clock

MFINTOSC
To Peripherals
31.25 kHz and 500 kHz To Peripherals
DS40001943A-page 83

Oscillator To Peripherals
To Peripherals
PIC18(L)F25/26K83
7.2 Clock Source Types EC mode has three power modes to select from through
Configuration Words:
Clock sources can be classified as external or internal.
• ECH – High power, above 8 MHz
External clock sources rely on external circuitry for the
• ECM – Medium power, 100 kHz-8 MHz
clock source to function. Examples are: oscillator
modules (ECH, ECM, ECL mode), quartz crystal • ECL – Low power, below 100 MHz
resonators or ceramic resonators (LP, XT and HS The Oscillator Start-up Timer (OST) is disabled when
modes). EC mode is selected. Therefore, there is no delay in
Internal clock sources are contained within the operation after a Power-on Reset (POR) or wake-up
oscillator module. The internal oscillator block has two from Sleep. Because the PIC® MCU design is fully
internal oscillators that are used to generate internal static, stopping the external clock input will have the
system clock sources. The High-Frequency Internal effect of halting the device while leaving all data intact.
Oscillator (HFINTOSC) can produce 1, 2, 4, 8, 12, 16, Upon restarting the external clock, the device will
32, 48 and 64 MHz clock. The frequency can be resume operation as if no time had elapsed.
controlled through the OSCFRQ register (Register 7-
5). The Low-Frequency Internal Oscillator (LFINTOSC) FIGURE 7-2: EXTERNAL CLOCK (EC)
generates a fixed 31 kHz frequency. MODE OPERATION
A 4x PLL is provided that can be used with an external
clock. When used with the EXTOSC the 4x PLL has Clock from OSC1/CLKIN
input frequency limitations. See Section 7.2.1.4 “4x Ext. System
PLL” for more details. PIC® MCU

The system clock can be selected between external or OSC2/CLKOUT


internal clock sources via the NOSC bits in the FOSC/4 or I/O(1)
OSCCON1 register. See Section 7.3 “Clock
Switching” for additional information. The system Note 1: Output depends upon CLKOUTEN bit of the
clock can be made available on the OSC2/CLKOUT pin Configuration Words (CONFIG1H).
for any of the modes that do not use the OSC2 pin. The
clock out functionality is governed by the CLKOUTEN
bit in the CONFIG1H register (Register 5-2). If enabled, 7.2.1.2 LP, XT, HS Modes
the clock out signal is always at a frequency of FOSC/4. The LP, XT and HS modes support the use of quartz
crystal resonators or ceramic resonators connected to
7.2.1 EXTERNAL CLOCK SOURCES OSC1 and OSC2 (Figure 7-3). The three modes select
An external clock source can be used as the device a low, medium or high gain setting of the internal
system clock by performing one of the following inverter-amplifier to support various resonator types
actions: and speed.
• Program the RSTOSC<2:0> and FEXTOSC<2:0> LP Oscillator mode selects the lowest gain setting of the
bits in the Configuration Words to select an internal inverter-amplifier. LP mode current consumption
external clock source that will be used as the is the least of the three modes. This mode is designed to
default system clock upon a device Reset. drive only 32.768 kHz tuning-fork type crystals (watch
• Write the NOSC<2:0> and NDIV<3:0> bits in the crystals).
OSCCON1 register to switch the system clock XT Oscillator mode selects the intermediate gain
source. setting of the internal inverter-amplifier. XT mode
See Section 7.3 “Clock Switching” for more current consumption is the medium of the three modes.
information. This mode is best suited to drive resonators with a
medium drive level specification (above 100 kHz -
7.2.1.1 EC Mode 8 MHz).

The External Clock (EC) mode allows an externally HS Oscillator mode selects the highest gain setting of the
generated logic level signal to be the system clock internal inverter-amplifier. HS mode current consumption
source. When operating in this mode, an external clock is the highest of the three modes. This mode is best
source is connected to the OSC1 input. OSC2/ suited for resonators that require a high drive setting
CLKOUT is available for general purpose I/O or (above 8 MHz).
CLKOUT. Figure 7-2 shows the pin connections for EC Figure 7-3 and Figure 7-4 show typical circuits for
mode. quartz crystal and ceramic resonators, respectively.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 84


PIC18(L)F25/26K83
FIGURE 7-3: QUARTZ CRYSTAL 7.2.1.3 Oscillator Start-up Timer (OST)
OPERATION (LP, XT OR If the oscillator module is configured for LP, XT or HS
HS MODE) modes, the Oscillator Start-up Timer (OST) counts
1024 oscillations from OSC1. This occurs following a
PIC® MCU Power-on Reset (POR), or a wake-up from Sleep. The
OST ensures that the oscillator circuit, using a quartz
OSC1/CLKIN crystal resonator or ceramic resonator, has started and
C1
is providing a stable system clock to the oscillator
To Internal
Logic module.
Quartz
RF(2) Sleep 7.2.1.4 4x PLL
Crystal
The oscillator module contains a 4x PLL that can be
used with the external clock sources to provide a
OSC2/CLKOUT
C2 RS(1) system clock source. The input frequency for the PLL
must fall within specifications. See the PLL Clock
Note 1: A series resistor (RS) may be required for Timing Specifications in Table 45-9.
quartz crystals with low drive level.
The PLL can be enabled for use by one of two
2: The value of RF varies with the Oscillator mode methods:
selected (typically between 2 M to 10 M.
1. Program the RSTOSC bits in the Configuration
Word 1 to 010 (enable EXTOSC with 4x PLL).
FIGURE 7-4: CERAMIC RESONATOR 2. Write the NOSC bits in the OSCCON1 register
OPERATION to 010 (enable EXTOSC with 4x PLL).
(XT OR HS MODE)

PIC® MCU

OSC1/CLKIN

C1 To Internal
Logic

RP(3) RF(2) Sleep

C2 Ceramic RS(1) OSC2/CLKOUT


Resonator

Note 1: A series resistor (RS) may be required for


ceramic resonators with low drive level.
2: The value of RF varies with the Oscillator mode
selected (typically between 2 M to 10 M.
3: An additional parallel feedback resistor (RP)
may be required for proper ceramic resonator
operation.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 85


PIC18(L)F25/26K83
7.2.1.5 Secondary Oscillator
Note 1: Quartz crystal characteristics vary
The secondary oscillator is a separate oscillator block according to type, package and
that can be used as an alternate system clock source. manufacturer. The user should consult the
The secondary oscillator is optimized for 32.768 kHz, manufacturer data sheets for specifications
and can be used with an external crystal oscillator con- and recommended application.
nected to the SOSCI and SOSCO device pins, or an
2: Always verify oscillator performance over
external clock source connected to the SOSCIN pin.
the VDD and temperature range that is
The secondary oscillator can be selected during run-
expected for the application.
time using clock switching. Refer to Section
7.3 “Clock Switching” for more information. 3: For oscillator design assistance, reference
the following Microchip Application Notes:
Two power modes are available for the secondary
oscillator. These modes are selected with the • AN826, “Crystal Oscillator Basics and
SOSCPWR (OSCCON3<6>). Clearing this bit selects Crystal Selection for PIC® and PIC®
the lower Crystal Gain mode which provides lowest Devices” (DS00826)
microcontroller power consumption. Setting this bit • AN849, “Basic PIC® Oscillator Design”
enables a higher Gain mode to support faster crystal (DS00849)
start-up or crystals with higher ESR. • AN943, “Practical PIC® Oscillator
Analysis and Design” (DS00943)
FIGURE 7-5: QUARTZ CRYSTAL • AN949, “Making Your Oscillator Work”
OPERATION (DS00949)
(SECONDARY • TB097, “Interfacing a Micro Crystal
OSCILLATOR) MS1V-T1K 32.768 kHz Tuning Fork
Crystal to a PIC16F690/SS” (DS91097)
• AN1288, “Design Practices for Low-
PIC® MCU
Power External Oscillators” (DS01288)
SOSCI

C1 To Internal
Logic
32.768 kHz
Quartz
Crystal

C2 SOSCO

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 86


PIC18(L)F25/26K83
7.2.2 INTERNAL CLOCK SOURCES 7.2.2.1 HFINTOSC
The device may be configured to use the internal The High-Frequency Internal Oscillator (HFINTOSC) is
oscillator block as the system clock by performing one a precision digitally-controlled internal clock source
of the following actions: that produces a stable clock up to 64 MHz. The
• Program the RSTOSC<2:0> bits in Configuration HFINTOSC can be enabled through one of the
Words to select the INTOSC clock source, which following methods:
will be used as the default system clock upon a • Programming the RSTOSC<2:0> bits in
device Reset. Configuration Word 1 to ‘110’ (FOSC = 1 MHz) or
• Write the NOSC<2:0> bits in the OSCCON1 ‘000’ (FOSC = 64 MHz) to set the oscillator upon
register to switch the system clock source to the device Power-up or Reset.
internal oscillator during run-time. See Section • Write to the NOSC<2:0> bits of the OSCCON1
7.3 “Clock Switching” for more information. register during run-time. See Section 7.3 “Clock
In INTOSC mode, OSC1/CLKIN is available for general Switching” for more information.
purpose I/O, provided that FEXTOSC is configured to The HFINTOSC frequency can be selected by setting
‘oscillator is not enabled’. OSC2/CLKOUT is available the FRQ<3:0> bits of the OSCFRQ register.
for general purpose I/O or CLKOUT. The NDIV<3:0> bits of the OSCCON1 register allow for
The function of the OSC2/CLKOUT pin is determined division of the HFINTOSC output from a range between
by the CLKOUTEN bit in Configuration Words. 1:1 and 1:512.
The internal oscillator block has two independent
7.2.2.2 MFINTOSC
oscillators that can produce two internal system clock
sources. The module provides two (500 kHz and 31.25 kHz)
constant clock outputs. These clocks are digital
1. The HFINTOSC (High-Frequency Internal
divisors of the HFINTOSC clock. Dynamic divider logic
Oscillator) is factory-calibrated and operates
is used to provide constant MFINTOSC clock rates for
from 1 to 64 MHz. The frequency of HFINTOSC
all settings of HFINTOSC.
can be selected through the OSCFRQ
Frequency Selection register, and fine-tuning The MFINTOSC cannot be used to drive the system
can be done via the OSCTUNE register. but it is used to clock certain modules such as the
2. The LFINTOSC (Low-Frequency Internal Timers and WWDT.
Oscillator) is factory-calibrated and operates at
31 kHz.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 87


PIC18(L)F25/26K83
7.2.2.3 Internal Oscillator Frequency
Adjustment
The internal oscillator is factory-calibrated. This
internal oscillator can be adjusted in software by writing
to the OSCTUNE register (Register 7-3).
The default value of the OSCTUNE register is 00h. The
value is a 6-bit two’s complement number. A value of
1Fh will provide an adjustment to the maximum
frequency. A value of 20h will provide an adjustment to
the minimum frequency.
When the OSCTUNE register is modified, the oscillator
frequency will begin shifting to the new frequency. Code
execution continues during this shift. There is no
indication that the shift has occurred.
OSCTUNE does not affect the LFINTOSC frequency.
Operation of features that depend on the LFINTOSC
clock source frequency, such as the Power-up Timer
(PWRT), WWDT, Fail-Safe Clock Monitor (FSCM) and
peripherals, are not affected by the change in frequency.

7.2.2.4 LFINTOSC
The Low-Frequency Internal Oscillator (LFINTOSC) is
a factory-calibrated 31 kHz internal clock source.
The LFINTOSC is the frequency for the Power-up Timer
(PWRT), Windowed Watchdog Timer (WWDT) and Fail-
Safe Clock Monitor (FSCM).
The LFINTOSC is enabled through one of the following
methods:
• Programming the RSTOSC<2:0> bits of
Configuration Word 1 to enable LFINTOSC.
• Write to the NOSC<2:0> bits of the OSCCON1
register during run-time. See Section 7.3, Clock
Switching for more information.

7.2.2.5 ADCRC
The ADCRC is an oscillator dedicated to the ADC2
module. The ADCRC oscillator can be manually
enabled using the ADOEN bit of the OSCEN register.
The ADCRC runs at a fixed frequency of 600 kHz.
ADCRC is automatically enabled if it is selected as the
clock source for the ADC2 module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 88


PIC18(L)F25/26K83
7.2.2.6 Oscillator Status and Manual Enable When the new oscillator is ready, the New Oscillator
Ready (NOSCR) bit of OSCCON3 and the Clock
The Ready status of each oscillator (including the
Switch Interrupt Flag (CSWIF) bit of the respective PIR
ADCRC oscillator) is displayed in OSCSTAT
register are set. If Clock Switch Interrupts are enabled
(Register 7-4). The oscillators (but not the PLL) may be
(CSWIE = 1), an interrupt will be generated at that time.
explicitly enabled through OSCEN (Register 7-7).
The Oscillator Ready (ORDY) bit of OSCCON3 can
7.2.2.7 HFOR and MFOR Bits also be polled to determine when the oscillator is ready
in lieu of an interrupt.
The HFOR and MFOR bits indicate that the HFINTOSC
and MFINTOSC is ready. These clocks are always
valid for use at all times, but only accurate after they are Note: The CSWIF interrupt will not wake the
ready. system from Sleep.
When a new value is loaded into the OSCFRQ register, If the Clock Switch Hold (CSWHOLD) bit of OSCCON3
the HFOR and MFOR bits will clear, and set again is clear, the oscillator switch will occur when the New
when the oscillator is ready. During pending OSCFRQ Oscillator is Ready bit (NOSCR) is set, and the
changes the MFINTOSC clock will stall at a high or a interrupt (if enabled) will be serviced at the new
low state, until the HFINTOSC resumes operation. oscillator setting.
If CSWHOLD is set, the oscillator switch is suspended,
7.3 Clock Switching while execution continues using the current (old) clock
source. When the NOSCR bit is set, software should:
The system clock source can be switched between
external and internal clock sources via software using • Set CSWHOLD = 0 so the switch can complete,
the New Oscillator Source (NOSC) bits of the or
OSCCON1 register. The following clock sources can be • Copy COSC into NOSC to abandon the switch.
selected using the following: If DOZE is in effect, the switch occurs on the next clock
• External oscillator cycle, whether or not the CPU is operating during that
• Internal Oscillator Block (INTOSC) cycle.
Changing the clock post-divider without changing the
clock source (i.e., changing FOSC from 1 MHz to
Note: The Clock Switch Enable bit in 2 MHz) is handled in the same manner as a clock
Configuration Word 1 can be used to source change, as described previously. The clock
enable or disable the clock switching source will already be active, so the switch is relatively
capability. When cleared, the NOSC and quick. CSWHOLD must be clear (CSWHOLD = 0) for
NDIV bits cannot be changed by user the switch to complete.
software. When set, writing to NOSC and
The current COSC and CDIV are indicated in the
NDIV is allowed and would switch the
OSCCON2 register up to the moment when the switch
clock frequency.
actually occurs, at which time OSCCON2 is updated
and ORDY is set. NOSCR is cleared by hardware to
7.3.1 NEW OSCILLATOR SOURCE
indicate that the switch is complete.
(NOSC) AND NEW DIVIDER
SELECTION REQUEST (NDIV) BITS
The New Oscillator Source (NOSC) and New Divider
Selection Request (NDIV) bits of the OSCCON1
register select the system clock source and frequency
that are used for the CPU and peripherals.
When new values of NOSC and NDIV are written to
OSCCON1, the current oscillator selection will
continue to operate while waiting for the new clock
source to indicate that it is stable and ready. In some
cases, the newly requested source may already be in
use, and is ready immediately. In the case of a divider-
only change, the new and old sources are the same, so
the old source will be ready immediately. The device
may enter Sleep while waiting for the switch as
described in Section 7.3.2 “Clock Switch and
Sleep”.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 89


PIC18(L)F25/26K83
7.3.2 CLOCK SWITCH AND SLEEP
If OSCCON1 is written with a new value and the device
is put to Sleep before the switch completes, the switch
will not take place and the device will enter Sleep
mode.
When the device wakes from Sleep and the
CSWHOLD bit is clear, the device will wake with the
‘new’ clock active, and the Clock Switch Interrupt flag
bit (CSWIF) will be set.
When the device wakes from Sleep and the
CSWHOLD bit is set, the device will wake with the ‘old’
clock active and the new clock will be requested again.

FIGURE 7-6: CLOCK SWITCH (CSWHOLD = 0)


OSCCON1
WRITTEN

OSC #1 OSC #2

ORDY

NOTE 2
NOSCR

NOTE 1
CSWIF

USER
CSWHOLD CLEAR

Note 1: CSWIF is asserted coincident with NOSCR; interrupt is serviced at OSC#2 speed.
2: The assertion of NOSCR is hidden from the user because it appears only for the duration of the switch.

FIGURE 7-7: CLOCK SWITCH (CSWHOLD = 1)


OSCCON1
WRITTEN

OSC #1 OSC #2

ORDY

NOSCR

NOTE 1
CSWIF

USER
CSWHOLD CLEAR

Note 1: CSWIF is asserted coincident with NOSCR, and may be cleared before or after clearing CSWHOLD = 0.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 90


PIC18(L)F25/26K83
FIGURE 7-8: CLOCK SWITCH ABANDONED
OSCCON1 OSCCON1
WRITTEN WRITTEN

OSC #1

ORDY
NOTE 2

NOSCR

NOTE 1
CSWIF

CSWHOLD

Note 1: CSWIF may be cleared before or after rewriting OSCCON1; CSWIF is not automatically cleared.
2: ORDY = 0 if OSCCON1 does not match OSCCON2; a new switch will begin.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 91


PIC18(L)F25/26K83
7.4 Fail-Safe Clock Monitor 7.4.3 FAIL-SAFE CONDITION CLEARING
The Fail-Safe Clock Monitor (FSCM) allows the device The Fail-Safe condition is cleared after a Reset,
to continue operating should the external oscillator fail. executing a SLEEP instruction or changing the NOSC
The FSCM is enabled by setting the FCMEN bit in the and NDIV bits of the OSCCON1 register. When
Configuration Words. The FSCM is applicable to all switching to the external oscillator or PLL, the OST is
external Oscillator modes (LP, XT, HS, ECL/M/H and restarted. While the OST is running, the device
Secondary Oscillator). continues to operate from the INTOSC selected in
OSCCON1. When the OST times out, the Fail-Safe
condition is cleared after successfully switching to the
FIGURE 7-9: FSCM BLOCK DIAGRAM
external clock source. The OSCFIF bit should be
Clock Monitor cleared prior to switching to the external clock source.
Latch If the Fail-Safe condition still exists, the OSCFIF flag
External will again become set by hardware.
S Q
Clock

LFINTOSC
÷ 64 R Q
Oscillator

31 kHz 488 Hz
(~32 s) (~2 ms)

Sample Clock Clock


Failure
Detected

7.4.1 FAIL-SAFE DETECTION


The FSCM module detects a failed oscillator by
comparing the external oscillator to the FSCM sample
clock. The sample clock is generated by dividing the
LFINTOSC by 64. See Figure 7-9. Inside the fail
detector block is a latch. The external clock sets the
latch on each falling edge of the external clock. The
sample clock clears the latch on each rising edge of the
sample clock. A failure is detected when an entire half-
cycle of the sample clock elapses before the external
clock goes low.

7.4.2 FAIL-SAFE OPERATION


When the external clock fails, the FSCM overwrites the
COSC bits to select HFINTOSC (3'b110). The
frequency of HFINTOSC would be determined by the
previous state of the FRQ bits and the NDIV/CDIV bits.
The bit flag OSFIF of the respective PIR register is set.
Setting this flag will generate an interrupt if the OSFIE
bit of the respective PIR register is also set. The device
firmware can then take steps to mitigate the problems
that may arise from a failed clock. The system clock will
continue to be sourced from the internal clock source
until the device firmware successfully restarts the
external oscillator and switches back to external
operation, by writing to the NOSC and NDIV bits of the
OSCCON1 register.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 92


PIC18(L)F25/26K83
7.4.4 RESET OR WAKE-UP FROM SLEEP
The FSCM is designed to detect an oscillator failure
after the Oscillator Start-up Timer (OST) has expired.
The OST is used after waking up from Sleep and after
any type of Reset. The OST is not used with the EC
Clock modes so that the FSCM will be active as soon
as the Reset or wake-up has completed.

FIGURE 7-10: FSCM TIMING DIAGRAM

Sample Clock

System Oscillator
Clock Failure
Output

Clock Monitor Output


(Q)
Failure
Detected
OSCFIF

Test Test Test

Note: The system clock is normally at a much higher frequency than the sample clock. The relative frequencies in
this example have been chosen for clarity.

TABLE 7-1: NOSC/COSC AND NDIV/CDIV BIT SETTINGS


NOSC<2:0> NDIV<3:0>
Clock Source Clock Divider
COSC<2:0> CDIV<3:0>
111 EXTOSC(1) 1111-1010 Reserved
110 HFINTOSC(2) 1001 512
101 LFINTOSC 1000 256
100 SOSC 0111 128
011 Reserved 0110 64
010 EXTOSC + 4x PLL(3) 0101 32
001 Reserved 0100 16
000 Reserved 0011 8
0010 4
0001 2
0000 1

Note 1: EXTOSC configured by the FEXTOSC bits of Configuration Word 1 (Register 5-1).
2: HFINTOSC frequency is set with the FRQ bits of the OSCFRQ register (Register 7-5).
3: EXTOSC must meet the PLL specifications (Table 45-9).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 93


PIC18(L)F25/26K83
7.5 Register Definitions: Oscillator Control
REGISTER 7-1: OSCCON1: OSCILLATOR CONTROL REGISTER 1
U-0 R/W-f/f R/W-f/f R/W-f/f R/W-q/q R/W-q/q R/W-q/q R/W-q/q
— NOSC<2:0> NDIV<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared f = determined by Configuration bit setting
q = Reset value is determined by hardware

bit 7 Unimplemented: Read as ‘0’


bit 6-4 NOSC<2:0>: New Oscillator Source Request bits(1,2,3)
The setting requests a source oscillator and PLL combination per Table 7-1.
POR value = RSTOSC (Register 5-1).
bit 3-0 NDIV<3:0>: New Divider Selection Request bits(2,3)
The setting determines the new postscaler division ratio per Table 7-1.

Note 1: The default value (f/f) is determined by the RSTOSC Configuration bits. See Table 7-2 below.
2: If NOSC is written with a reserved value (Table 7-1), the operation is ignored and neither NOSC nor NDIV is
written.
3: When CSWEN = 0, this register is read-only and cannot be changed from the POR value.

TABLE 7-2: DEFAULT OSCILLATOR SETTINGS


SFR Reset Values
RSTOSC Initial FOSC Frequency
NOSC/COSC CDIV OSCFRQ
111 111 1:1 EXTOSC per FEXTOSC
110 110 4:1 FOSC = 1 MHz (4 MHz/4)
4 MHz
101 101 1:1 LFINTOSC
100 100 1:1 SOSC
011 Reserved
010 010 1:1 4 MHz EXTOSC + 4xPLL(1)
001 Reserved
000 110 1:1 64 MHz FOSC = 64 MHZ
Note 1: EXTOSC must meet the PLL specifications (Table 45-9).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 94


PIC18(L)F25/26K83

REGISTER 7-2: OSCCON2: OSCILLATOR CONTROL REGISTER 2


U-0 R-f/f R-f/f R-f/f R-f/f R-f/f R-f/f R-f/f
— COSC<2:0> CDIV<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 Unimplemented: Read as ‘0’


bit 6-4 COSC<2:0>: Current Oscillator Source Select bits (read-only)(1)
Indicates the current source oscillator and PLL combination per Table 7-1.
bit 3-0 CDIV<3:0>: Current Divider Select bits (read-only)(1)
Indicates the current postscaler division ratio per Table 7-1.

Note 1: The POR value is the value present when user code execution begins.

REGISTER 7-3: OSCCON3: OSCILLATOR CONTROL REGISTER 3


R/W/HC-0/0 R/W-0/0 U-0 R-0/0 R-0/0 U-0 U-0 U-0
CSWHOLD SOSCPWR — ORDY NOSCR — — —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HC = Bit is cleared by hardware

bit 7 CSWHOLD: Clock Switch Hold bit


1 = Clock switch will hold (with interrupt) when the oscillator selected by NOSC is ready
0 = Clock switch may proceed when the oscillator selected by NOSC is ready; NOSCR
becomes ‘1’, the switch will occur
bit 6 SOSCPWR: Secondary Oscillator Power Mode Select bit
1 = Secondary oscillator operating in High-Power mode
0 = Secondary oscillator operating in Low-Power mode
bit 5 Unimplemented: Read as ‘0’
bit 4 ORDY: Oscillator Ready bit (read-only)
1 = OSCCON1 = OSCCON2; the current system clock is the clock specified by NOSC
0 = A clock switch is in progress
bit 3 NOSCR: New Oscillator is Ready bit (read-only)(1)
1 = A clock switch is in progress and the oscillator selected by NOSC indicates a “ready” condition
0 = A clock switch is not in progress, or the NOSC-selected oscillator is not yet ready
bit 2-0 Unimplemented: Read as ‘0’

Note 1: If CSWHOLD = 0, the user may not see this bit set because, when the oscillator becomes ready there
may be a delay of one instruction clock before this bit is set. The clock switch occurs in the next instruction
cycle and this bit is cleared.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 95


PIC18(L)F25/26K83

REGISTER 7-4: OSCSTAT: OSCILLATOR STATUS REGISTER 1


R-q/q R-q/q R-q/q R-q/q R-q/q R-q/q U-0 R-q/q
EXTOR HFOR MFOR LFOR SOR ADOR — PLLR
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Reset value is determined by hardware

bit 7 EXTOR: EXTOSC (external) Oscillator Ready bit


1 = The oscillator is ready to be used
0 = The oscillator is not enabled, or is not yet ready to be used
bit 6 HFOR: HFINTOSC Oscillator Ready bit
1 = The oscillator is ready to be used
0 = The oscillator is not enabled, or is not yet ready to be used
bit 5 MFOR: MFINTOSC Oscillator Ready bit
1 = The oscillator is ready to be used
0 = The oscillator is not enabled, or is not yet ready to be used
bit 4 LFOR: LFINTOSC Oscillator Ready bit
1 = The oscillator is ready to be used
0 = The oscillator is not enabled, or is not yet ready to be used
bit 3 SOR: Secondary (Timer1) Oscillator Ready bit
1 = The oscillator is ready to be used
0 = The oscillator is not enabled, or is not yet ready to be used
bit 2 ADOR: ADC Oscillator Ready bit
1 = The oscillator is ready to be used
0 = The oscillator is not enabled, or is not yet ready to be used
bit 1 Unimplemented: Read as ‘0’
bit 0 PLLR: PLL is Ready bit
1 = The PLL is ready to be used
0 = The PLL is not enabled, the required input source is not ready, or the PLL is not locked.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 96


PIC18(L)F25/26K83
REGISTER 7-5: OSCFRQ: HFINTOSC FREQUENCY SELECTION REGISTER
U-0 U-0 U-0 U-0 R/W-q/q R/W-q/q R/W-q/q R/W-q/q
— — — — FRQ<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Reset value is determined by hardware

bit 7-4 Unimplemented: Read as ‘0’


bit 3-0 FRQ<3:0>: HFINTOSC Frequency Selection bits(1)

FRQ<3:0> Nominal Freq (MHz)


1001
1010
1111
1110 Reserved
1101
1100
1011
1000 64
0111 48
0110 32
0101 16
0100 12
0011 8
0010 4
0001 2
0000 1

Note 1: Refer to Table 7-2 for more information.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 97


PIC18(L)F25/26K83
REGISTER 7-6: OSCTUNE: HFINTOSC TUNING REGISTER
U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — TUN<5:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 Unimplemented: Read as ‘0’


bit 5-0 TUN<5:0>: HFINTOSC Frequency Tuning bits
01 1111 = Maximum frequency



00 0000 = Center frequency. Oscillator module is running at the calibrated frequency
(default value).



10 0000 = Minimum frequency

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 98


PIC18(L)F25/26K83

REGISTER 7-7: OSCEN: OSCILLATOR MANUAL ENABLE REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 U-0 U-0
EXTOEN HFOEN MFOEN LFOEN SOSCEN ADOEN — —

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 EXTOEN: External Oscillator Manual Request Enable bit


1 = EXTOSC is explicitly enabled, operating as specified by FEXTOSC
0 = EXTOSC could be enabled by requesting peripheral
bit 6 HFOEN: HFINTOSC Oscillator Manual Request Enable bit
1 = HFINTOSC is explicitly enabled, operating as specified by OSCFRQ (Register 7-5)
0 = HFINTOSC could be enabled by requesting peripheral
bit 5 MFOEN: MFINTOSC (500 kHz/31.25 kHz) Oscillator Manual Request Enable bit (Derived from
HFINTOSC)
1 = MFINTOSC is explicitly enabled
0 = MFINTOSC could be enabled by requesting peripheral
bit 4 LFOEN: LFINTOSC (31 kHz) Oscillator Manual Request Enable bit
1 = LFINTOSC is explicitly enabled
0 = LFINTOSC could be enabled by requesting peripheral
bit 3 SOSCEN: Secondary Oscillator Manual Request Enable bit
1 = Secondary Oscillator is explicitly enabled, operating as specified by SOSCPWR
0 = Secondary Oscillator could be enabled by requesting peripheral
bit 2 ADOEN: ADC Oscillator Manual Request Enable bit
1 = ADC oscillator is explicitly enabled
0 = ADC oscillator could be enabled by requesting peripheral
bit 1-0 Unimplemented: Read as ‘0’

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 99


PIC18(L)F25/26K83
TABLE 7-3: SUMMARY OF REGISTERS ASSOCIATED WITH CLOCK SOURCES
Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page
OSCCON1 — NOSC<2:0> NDIV<3:0> 94
OSCCON2 — COSC<2:0> CDIV<3:0> 95
OSCCON3 CSWHOLD SOSCPWR — ORDY NOSCR — — — 95
OSCSTAT EXTOR HFOR MFOR LFOR SOR ADOR — PLLR 96
OSCTUNE — — TUN<5:0> 98
OSCFRQ — — — — FRQ<3:0> 97
OSCEN EXTOEN HFOEN MFOEN LFOEN SOSCEN ADOEN — — 99
Legend: — = unimplemented location, read as ‘0’. Shaded cells are not used by clock sources.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 100


PIC18(L)F25/26K83
8.0 REFERENCE CLOCK OUTPUT
MODULE
The reference clock output module provides the ability
to send a clock signal to the clock reference output pin
(CLKR). The reference clock output can also be used
as a signal for other peripherals, such as the Data
Signal Modulator (DSM), Memory Scanner and Timer
module.
The reference clock output module has the following
features:
• Selectable clock source using the CLKRCLK
register
• Programmable clock divider
• Selectable duty cycle

FIGURE 8-1: CLOCK REFERENCE BLOCK DIAGRAM


Rev. 10-000261B
5/11/2016

CLKRDIV<2:0>
CLKREN Counter Reset
128
111

Reference Clock Divider


See 64 CLKRDC<1:0>
110
CLKRCLK 32
Register 101
16 CLKR
100
8 Duty Cycle PPS
011
4
010
2
001 To Peripherals

CLKREN 000
CLKRCLK<3:0>

FIGURE 8-2: CLOCK REFERENCE TIMING

Rev. 10-000264B
5/25/2016

P1 P2

CLKRCLK

CLKREN

CLKR Output
CLKRDIV<2:0> = 001
CLKRDC<1:0> = 10
Duty Cycle
(50%)

CLKR Output CLKRCLK/2


CLKRDIV<2:0> = 001
CLKRDC<1:0> = 01
Duty Cycle
(25%)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 101


PIC18(L)F25/26K83
8.1 Clock Source 8.3 Selectable Duty Cycle
The input to the reference clock output can be selected The DC<1:0> bits of the CLKRCON register can be
using the CLKRCLK register. used to modify the duty cycle of the output clock. A duty
cycle of 25%, 50%, or 75% can be selected for all clock
8.1.1 CLOCK SYNCHRONIZATION rates, with the exception of the undivided base FOSC
Once the reference clock enable (EN) is set, the mod- value.
ule is ensured to be glitch-free at start-up. The duty cycle can be changed while the module is
When the reference clock output is disabled, the output enabled; however, in order to prevent glitches on the
signal will be disabled immediately. output, the DC<1:0> bits should only be changed when
the module is disabled (EN = 0).
Clock dividers and clock duty cycles can be changed
while the module is enabled, but glitches may occur on
the output. To avoid possible glitches, clock dividers Note: The DC1 bit is reset to ‘1’. This makes the
and clock duty cycles should be changed only when the default duty cycle 50% and not 0%.
CLKREN is clear.
8.4 Operation in Sleep Mode
8.2 Programmable Clock Divider
The reference clock output module clock is based on
The module takes the clock input and divides it based the system clock. When the device goes to Sleep, the
on the value of the DIV<2:0> bits of the CLKRCON module outputs will remain in their current state. This
register (Register 8-1). will have a direct effect on peripherals using the
The following configurations can be made based on the reference clock output as an input signal. No change
DIV<2:0> bits: should occur in the module from entering or exiting
from Sleep.
• Base FOSC value
• FOSC divided by 2
• FOSC divided by 4
• FOSC divided by 8
• FOSC divided by 16
• FOSC divided by 32
• FOSC divided by 64
• FOSC divided by 128
The clock divider values can be changed while the
module is enabled; however, in order to prevent
glitches on the output, the DIV<2:0> bits should only be
changed when the module is disabled (EN = 0).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 102


PIC18(L)F25/26K83
8.5 Register Definitions: Reference Clock
Long bit name prefixes for the Reference Clock periph-
erals are shown below. Refer to Section 1.3.2.2 “Long
Bit Names” for more information.

Peripheral Bit Name Prefix


CLKR CLKR

REGISTER 8-1: CLKRCON: REFERENCE CLOCK CONTROL REGISTER


R/W-0/0 U-0 U-0 R/W-1/1 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
EN — — DC<1:0> DIV<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 EN: Reference Clock Module Enable bit


1 = Reference clock module enabled
0 = Reference clock module is disabled
bit 6-5 Unimplemented: Read as ‘0’
bit 4-3 DC<1:0>: Reference Clock Duty Cycle bits(1)
11 = Clock outputs duty cycle of 75%
10 = Clock outputs duty cycle of 50%
01 = Clock outputs duty cycle of 25%
00 = Clock outputs duty cycle of 0%
bit 2-0 DIV<2:0>: Reference Clock Divider bits
111 = Base clock value divided by 128
110 = Base clock value divided by 64
101 = Base clock value divided by 32
100 = Base clock value divided by 16
011 = Base clock value divided by 8
010 = Base clock value divided by 4
001 = Base clock value divided by 2
000 = Base clock value

Note 1: Bits are valid for reference clock divider values of two or larger, the base clock cannot be further divided.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 103


PIC18(L)F25/26K83

REGISTER 8-2: CLKRCLK: CLOCK REFERENCE CLOCK SELECTION MUX


U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — CLK<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-4 Unimplemented: Read as ‘0’


bit 3-0 CLK<3:0>: CLKR Clock Selection bits
1111 = Reserved



1011 = Reserved
1010 = CLC4 Output
1001 = CLC3 Output
1000 = CLC2 Output
0111 = CLC1 Output
0110 = NCO1 Output
0101 = SOSC
0100 = MFINTOSC (31.25 kHz)
0011 = MFINTOSC (500 kHz)
0010 = LFINTOSC (31 kHz)
0001 = HFINTOSC
0000 = FOSC

TABLE 8-1: SUMMARY OF REGISTERS ASSOCIATED WITH CLOCK REFERENCE OUTPUT


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page
CLKRCON EN — — DC<1:0> DIV<2:0> 103
CLKRCLK — — — — — CLK<2:0> 104
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used by the CLKR module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 104


PIC18(L)F25/26K83
9.0 INTERRUPT CONTROLLER There are two other Configuration bits that control the
way the interrupt controller can be configured.
The vectored interrupt controller module reduces the
• CONFIG2L<3>, MVECEN bit
numerous peripheral interrupt request signals to a
single interrupt request signal to the CPU. This module • CONFIG2L<4>, IVT1WAY bit
includes the following major features: The MVECEN bit in CONFIG2L determines whether
• Interrupt Vector Table (IVT) with a unique vector the Vector table is used to determine the interrupt
for each interrupt source priorities.
• Fixed and ensured interrupt latency • When the IVT1WAY determines the number of
• Programmable base address for Interrupt Vector times the IVTLOCKED bit can be cleared and set
Table (IVT) with lock after a device Reset. See Section
9.2.3 “Interrupt Vector Table (IVT) address cal-
• Two user-selectable priority levels – High priority
culation” for details.
and Low priority
• Two levels of context saving
• Interrupt state Status bits to indicate the current
execution status of the CPU
The interrupt controller module assembles all of the
interrupt request signals and resolves the interrupts
based on both a fixed natural order priority (i.e., deter-
mined by the Interrupt Vector Table), and a user-
assigned priority (i.e., determined by the IPRx regis-
ters), thereby eliminating scanning of interrupt sources.

9.1 Interrupt Control and Status


Registers
The devices in this family implement the following
registers for the interrupt controller:
• INTCON0, INTCON1 Control Registers
• PIRx – Peripheral Interrupt Status Registers
• PIEx – Peripheral Interrupt Enable Registers
• IPRx – Peripheral Interrupt Priority Registers
• IVTBASE<20:0> Address Registers
• IVTLOCK Register
Global interrupt control functions and external
interrupts are controlled from the INTCON0 register.
The INTCON1 register contains the status flags for the
Interrupt controller.
The PIRx registers contain all of the interrupt request
flags. Each source of interrupt has a Status bit, which is
set by the respective peripherals or an external signal
and is cleared via software.
The PIEx registers contain all of the interrupt enable
bits. These control bits are used to individually enable
interrupts from the peripherals or external signals.
The IPRx registers are used to set the Interrupt Priority
Level for each source of interrupt. Each user interrupt
source can be assigned to either a high or low priority.
The IVTBASE register is user programmable and is
used to determine the start address of the Interrupt
Vector Table and the IVTLOCK register is used to
prevent any unintended writes to the IVTBASE register.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 105


PIC18(L)F25/26K83
9.2 Interrupt Vector Table (IVT) 9.2.2 INTERRUPT VECTOR TABLE
CONTENTS
The interrupt controller supports an Interrupt Vector
Table (IVT) that contains the vector address location for MVECEN = 0
each interrupt request source. When MVECEN = 0, the address location pointed by
The Interrupt Vector Table (IVT) resides in program the IVTBASE registers has a GOTO instruction for a
memory, starting at address location determined by the high priority interrupt. Similarly, the corresponding low
IVTBASE registers; refer to Registers 9-33 through 9- priority vector location also has a GOTO instruction,
35 for details. The IVT contains 68 vectors, one for which is executed in case of a low priority interrupt.
each source of interrupt. Each interrupt vector location MVECEN = 1
contains the starting address of the associated
When MVECEN = 1, the value in the vector table of
Interrupt Service Routine (ISR).
each interrupt, points to the address location of the first
The MVECEN bit in Configuration Word 2L controls the instruction of the interrupt service routine.
availability of the vector table.
ISR Location = Interrupt Vector Table entry << 2.
9.2.1 INTERRUPT VECTOR TABLE BASE
9.2.3 INTERRUPT VECTOR TABLE (IVT)
ADDRESS (IVTBASE)
ADDRESS CALCULATION
The start address of the vector table is user
MVECEN = 0
programmable through the IVTBASE registers. The
user must ensure the start address is such that it can When the MVECEN bit in Configuration Word 2L
encompass the entire vector table inside the program (Register 5-3) is cleared, the address pointed by
memory. IVTBASE registers is used as the high priority interrupt
vector address. The low priority interrupt vector
Each vector address is a 16-bit word (or two address
address is offset eight instruction words from the
locations on PIC18 devices). So for n interrupt sources,
address in IVTBASE registers.
there are 2n address locations necessary to hold the
table starting from IVTBASE as the first location. So the For PIC18 devices the IVTBASE registers default to
staring address of IVTBASE should be chosen such 00 0008h, the high priority interrupt vector address will
that the address range form IVTBASE to (IVTBASE be 00 0008h and the low priority interrupt vector
+2n-1) can be encompassed inside the program flash address will be 00 0018h.
memory. MVECEN = 1
For example, the K42 devices have the highest vector Each interrupt has a unique vector number associated
number: 81. So IVTBASE should be chosen such that with it as defined in Table 9-2. This vector number is
(IVTBASE + 0xA1) is less than the last memory loca- used for calculating the location of the interrupt vector
tion in program flash memory. for a particular interrupt source.
A programmable vector table base address is useful in Interrupt Vector Address = IVTBASE + (2*Vector
situations to switch between different sets of vector Number).
tables, depending on the application. It can also be
used when the application program needs to update This calculated Interrupt Vector Address value is stored
the existing vector table (vector address values). in the IVTAD<20:0> registers when an interrupt is
received (Registers 9-36 through 9-38).
Note: It is required that the user assign an even
User-assigned software priority assigned using the
address to the IVTBASE register for
IPRx registers does not affect address calculation and
correct operation.
is only used to resolve concurrent interrupts.

If for any reason the address of the ISR could not be


fetched from the vector table, it will cause the system
to reset and clear the memory execution violation flag
(MEMV bit) in PCON1 register (Register 6-3). This
occurs due to any one of the following:
• The entry for the interrupt in the vector table lies
outside the executable PFM area (SAF area is
non-executable when SAFEN = 1).
• ISR pointed by the vector table lies outside the
executable PFM area (SAF area is non-execut-
able when SAFEN = 1).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 106


PIC18(L)F25/26K83

TABLE 9-1: IVT ADDRESS CALCULATION SUMMARY


Interrupt Priority
IVT Address Calculation INTCON0 Register, IPEN bit

0 1
High Priority
Multi-Vector Enable IVTBASE
0 IVTBASE
CONFIG 2L register Low Priority
MVECEN bit IVTBASE + 8 words
1 IVTBASE + 2*(Vector Number)

9.2.4 ACCESS CONTROL FOR IVTBASE The user must follow the sequence shown in
REGISTERS Example 9-2 to set the IVTLOCKED bit.
The Interrupt controller has an IVTLOCKED bit which
can be set to avoid inadvertent changes to the IVT- EXAMPLE 9-2: IVT LOCK SEQUENCE
BASE registers contents. Setting and clearing this bit ; Disable Interrupts:
requires a special sequence as an extra precaution BCF INTCON0, GIE;
; Bank to IVTLOCK register
against inadvertent changes.
BANKSEL IVTLOCK;
To allow writes to IVTBASE registers, the interrupts MOVLW 55h;
must be disabled (GIEH = 0) and the IVTLOCKED bit
must be cleared. The user must follow the sequence ; Required sequence, next 4 instructions
shown in Example 9-1 to clear the IVTLOCKED bit. MOVWF IVTLOCK;
MOVLW AAh;
MOVWF IVTLOCK;
EXAMPLE 9-1: IVT UNLOCK SEQUENCE
; Disable Interrupts: ; Set IVTLOCKED bit to enable writes
BCF INTCON0, GIE; BSF IVTLOCK, IVTLOCKED;
; Bank to IVTLOCK register
BANKSEL IVTLOCK; ; Enable Interrupts
MOVLW 55h; BSF INTCON0, GIE;

; Required sequence, next 4 instructions


MOVWF IVTLOCK; When the IVT1WAY Configuration bit is set, the
MOVLW AAh; IVTLOCKED bit can be cleared and set only once after
MOVWF IVTLOCK; a device Reset. The unlock operation in Example 9-1
will have no effect after the lock sequence in
; Clear IVTLOCKED bit to enable writes Example 9-2 is used to set the IVTLOCK. Unlocking is
BCF IVTLOCK, IVTLOCKED; inhibited until a system Reset occurs.

; Enable Interrupts
BSF INTCON0, GIE;

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 107


PIC18(L)F25/26K83
9.3 Interrupt Priority
Note 1: When a high priority interrupt preempts a
The final priority level for any pending source of interrupt
concurrent low priority interrupt, the GIEL
is determined first by the user-assigned priority of that
bit may be cleared in the high priority
source in the IPRx register, then by the natural order
Interrupt Service Routine. If the GIEL bit
priority within the IVT. The sections below detail the
is cleared, the low priority interrupt will
operation of Interrupt priorities.
NOT be serviced even if it was originally
9.3.1 USER (SOFTWARE) PRIORITY requested. The corresponding interrupt
flag needs to be cleared in user code.
User-assigned interrupt priority is enabled by setting
the IPEN bit in the INTCON0 register (Register 9-1). 2: When a high priority interrupt is
Each peripheral interrupt source can be assigned a requested while a low priority Interrupt
high or low priority level by the user. The user- Service Routine is executing, the GIEL bit
assignable interrupt priority control bits for each may be cleared in the high priority Inter-
interrupt are located in the IPRx registers (Registers 9- rupt Service Routine. The pending low
23 through 9-32). priority interrupt will resume even if the
GIEL bit is cleared.
The interrupts are serviced based on predefined
interrupt priority scheme defined below.
1. Interrupts set by the user as high-priority
interrupt have higher precedence of execution.
High-priority interrupts will override a low-priority
request when:
a) A low priority interrupt has been requested or its
request is already pending.
b) A low- and high-priority interrupt are triggered
concurrently, i.e., on the same instruction cycle(1).
c) A low-priority interrupt was requested and the
corresponding Interrupt Service Routine is
currently executing. In this case, the lower
priority interrupt routine will complete executing
after the high-priority interrupt has been
serviced(2).
2. Interrupts set by the user as a low priority have
the lower priority of execution and are
preempted by any high-priority interrupt.
3. Interrupts defined with the same software priority
cannot preempt or interrupt each other.
Concurrent pending interrupts with the same user
priority are resolved using the natural order priority.
(when MVECEN = ON) or in the order the interrupt
flag bits are polled in the ISR (when MVECEN =
OFF).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 108


PIC18(L)F25/26K83
9.3.2 NATURAL ORDER (HARDWARE) The natural order priority scheme has vector interrupt 0
PRIORITY as the highest priority and vector interrupt 81 as the
lowest priority.
When more than one interrupt with the same user
specified priority level are requested, the priority For example, when two concurrently occurring interrupt
conflict is resolved by using a method called “Natural sources that are both designated high priority using the
Order Priority”. Natural order priority is a fixed priority IPRx register will be resolved using the natural order
scheme that is based on the Interrupt Vector Table. priority (i.e., the interrupt with a lower corresponding
Table 9-2 shows the natural order priority and the vector number will preempt the interrupt with the higher
interrupt vector number assigned for each source. vector number).
The ability for the user to assign every interrupt source
TABLE 9-2: INTERRUPT VECTOR to high or low priority levels means that the user
PRIORITY TABLE program can give an interrupt with a low natural order
Vector Interrupt Vector Interrupt
priority a higher overall priority level.
Number Source Number Source
0 Software Interrupt 42 TXB0IF 9.4 Interrupt Operation
1 HLVD 43 TXB1IF
All pending interrupts are indicated by the flag bit being
2 OSF 44 TXB2IF/TXBnIF
equal to a ‘1’ in the PIRx register. All pending interrupts
3 CSW 45 ERRIF
are resolved using the priority scheme explained in
4 NVM 46 WAKIF
Section 9.3 “Interrupt Priority”.
5 SCAN 47 IRXIF
6 CRC 48 C2 Once the interrupt source to be serviced is resolved,
7 IOC 49 SMT2 the program execution vectors to the resolved interrupt
8 INT0 50 SMT2PRA vector addresses, as explained in Section
9 ZCD 51 SMT2PWA 9.2 “Interrupt Vector Table (IVT)”. The vector number
10 AD 52 DMA2SCNT is also stored in the WREG register. Most of the flag bits
11 ADT 53 DMA2DCNT are required to be cleared by the application software,
12 C1 54 DMA2OR but in some cases, device hardware clears the interrupt
13 SMT1 55 DMA2A automatically. Some flag bits are read-only in the PIRx
14 SMT1PRA 56 I2C2RX registers, these flags are a summary of the source
15 SMT1PWA 57 I2C2TX interrupts and the corresponding interrupt flags of the
16 DMA1SCNT 58 I2C2 source must be cleared.
17 DMA1DCNT 59 I2C2E A valid interrupt can be either a high or low priority
18 DMA1OR 60 U2RX interrupt when in main routine or a high priority interrupt
19 DMA1A 61 U2TX when in low priority Interrupt Service Routine.
20 SPI1RX 62 U2E Depending on order of interrupt requests received and
21 SPI1TX 63 U2 their relative timing, the CPU will be in the state of
22 SPI1 64 TMR3 execution indicated by the STAT bits of the INTCON1
23 I2C1RX 65 TMR3G register (Register 9-2).
24 I2C1TX 66 TMR4
25 I2C1 67 CCP2
The State machine shown in Figure 9-1 and the
26 I2C1E 68 CWG2
subsequent sections detail the execution of interrupts
27 U1RX 69 CLC2
when received in different orders.
28 U1TX 70 INT2
29 U1E 71 TMR5
Note: The state of GIEH/L is not changed by the
30 U1 72 TMR5G
hardware when servicing an interrupt. The
31 TMR0 73 TMR6
internal state machine is used to keep
32 TMR1 74 CCP3
track of execution states. These bits can
33 TMR1G 75 CWG3
be manipulated in the user code resulting
34 TMR2 76 CLC3
in transferring execution to the main
35 CCP1 77 CCP4
routine and ignoring existing interrupts.
36 NCO 78 CLC4
37 CWG1 79 —
38 CLC1 80 —
39 INT1 81 —
40 RXB0IF/FIFOIF
41 RXB1IF/RXBnIF

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 109


FIGURE 9-1: VECTORED INTERRUPTS STATE TRANSITION DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000265A
7/6/2016

MAIN
INTSTAT = 00

High Interrupt addressed,


High Interrupt Low Interrupt pending Low Interrupt
HIGH LOW
Preliminary

requested INTSTAT = 10 INTSTAT = 01 requested


Low Interrupt addressed,
High Interrupt pending

High Interrupt addressed,


High Interrupt requested,
Low Interrupt pending

Low Interrupt pending

PIC18(L)F25/26K83
HIGH High Interrupt
INTSTAT = 11 requested
DS40001943A-page 110
9.4.1 SERVING A HIGH OR LOW PRIORITY INTERRUPT
 2017 Microchip Technology Inc.

WHEN MAIN ROUTINE CODE IS EXECUTING


When a high or low priority interrupt is requested when the main routine code
is executing, the main routine execution is halted and the ISR is addressed, see
Figure 9-2. Upon a return from the ISR (by executing the RETFIE instruction),
the main routine resumes execution.

FIGURE 9-2: INTERRUPT EXECUTION: HIGH/LOW PRIORITY INTERRUPT WHEN EXECUTING MAIN ROUTINE

Rev. 10-000267A
9/12/2016
Preliminary

ISR Code Executing

RETFIE Executed

Main Code Main Code Executing Main Code Execution Halted Main Code Executing

PIC18(L)F25/26K83
Interrupt

Interrupt Interrupt
received cleared
DS40001943A-page 111
9.4.2 SERVING A HIGH PRIORITY INTERRUPT WHILE A LOW
 2017 Microchip Technology Inc.

PRIORITY INTERRUPT PENDING


A high priority interrupt request will always take precedence over any interrupt
of a lower priority. The high priority interrupt is acknowledged first, then the low-
priority interrupt is acknowledged. Upon a return from the high priority ISR (by
executing the RETFIE instruction), the low priority interrupt is serviced, see
Figure 9-3.
If any other high priority interrupts are pending and enabled, then they are
serviced before servicing the pending low priority interrupt. If no other high
priority interrupt requests are active, the low priority interrupt is serviced.

FIGURE 9-3: INTERRUPT EXECUTION: HIGH PRIORITY INTERRUPT WITH A LOW PRIORITY INTERRUPT PENDING

Rev. 10-000267C
9/12/2016
Preliminary

High ISR High ISR


RETFIE Executed

Low ISR Low ISR

PIC18(L)F25/26K83
RETFIE Executed

Main Code Main routine Main Code Execution Halted Main routine

High Priority
Interrupt
High Interrupt High Interrupt
received cleared
Low Priority
Interrupt
Low Interrupt Low Interrupt
DS40001943A-page 112

received cleared
9.4.3 PREEMPTING LOW PRIORITY INTERRUPTS
 2017 Microchip Technology Inc.

Low-priority interrupts can be preempted by high priority interrupts. While in the


Note 1: The high priority interrupt flag must be
low priority ISR, if a high-priority interrupt arrives, the high priority interrupt
cleared to avoid recursive interrupts.
request is generated and the low priority ISR is suspended, while the high pri-
ority ISR is executed, see Figure 9-4. 2: If a low-priority ISR was already serviced
halfway before moving on to a high
After the high priority ISR is complete and if any other high priority interrupt
priority ISR, then the low priority ISR is
requests are not active, the execution returns to the preempted low priority ISR.
completely serviced even if user code
clears GIEL.

FIGURE 9-4: INTERRUPT EXECUTION: HIGH PRIORITY INTERRUPT PREEMPTING LOW PRIORITY INTERRUPTS

Rev. 10-000267B
9/12/2016
Preliminary

High ISR High ISR


Low Interrupt pending, RETFIE Executed
High Interrupt received
Low ISR Low ISR Low ISR Execution Halted Low ISR
RETFIE Executed

PIC18(L)F25/26K83
Main Code Main routine Main Code Execution Halted Main routine

High Priority
Interrupt
High Interrupt High Interrupt
received cleared
Low Priority
Interrupt
Low Interrupt Low Interrupt
received cleared
DS40001943A-page 113
9.4.4 SIMULTANEOUS LOW AND HIGH PRIORITY
 2017 Microchip Technology Inc.

INTERRUPTS
When both high and low interrupts are active in the same instruction cycle (i.e.,
simultaneous interrupt events), both the high and the low priority requests are
generated. The high priority ISR is serviced first before servicing the low priority
interrupt see Figure 9-5.

FIGURE 9-5: INTERRUPT EXECUTION: SIMULTANEOUS LOW AND HIGH PRIORITY INTERRUPTS

Rev. 10-000267D
9/12/2016

High ISR High ISR


RETFIE Executed
Preliminary

Low ISR Low ISR


RETFIE Executed

Main Code Main routine Main Code Execution Halted Main routine

High Priority

PIC18(L)F25/26K83
Interrupt
High Interrupt High Interrupt
received cleared
Low Priority
Interrupt
Low Interrupt Low Interrupt
received cleared
DS40001943A-page 114
PIC18(L)F25/26K83
9.5 Context Saving
The Interrupt controller supports a two-level deep
context saving (Main routine context and Low ISR
context). Refer to state machine shown in Figure 9-6
for details.
The Program Counter (PC) is saved on the dedicated
device PC stack. CPU registers saved include STATUS,
WREG, BSR, FSR0/1/2, PRODL/H and PCLATH/U.
After WREG has been saved to the context registers,
the resolved vector number of the interrupt source to be
serviced is copied into WREG. Context save and
restore operation is completed by the interrupt
controller based on current state of the interrupts and
the order in which they were sent to the CPU.
Context save/restore works the same way in both
states of MVECEN. When IPEN = 0, there is only one
level interrupt active. Hence, only the main context is
saved when an interrupt is received.

9.5.1 ACCESSING SHADOW REGISTERS


The Interrupt controller automatically saves the context
information in the shadow registers available in Bank
56. Both the saved context values (i.e., main routine
and low ISR) can be accessed using the same set of
shadow registers. By clearing the SHADLO bit in the
SHADCON register (Register 9-40), the CPU register
values saved for main routine context can accessed,
and by setting the SHADLO bit of the CPU register,
values saved for low ISR context can accessed. Low
ISR context is automatically restored to the CPU
registers upon exiting the high ISR. Similarly, the main
context is automatically restored to the CPU registers
upon exiting the low ISR.
The Shadow registers in Bank 56 are readable and
writable, so if the user desires to modify the context
then the corresponding shadow register should be
modified and the value will be restored when exiting the
ISR. Depending on the user’s application, other
registers may also need to be saved.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 115


FIGURE 9-6: CONTEXT SAVE STATE MACHINE DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000266A
7/6/2016

MAIN
INTSTAT = 00

No Context Save/Restore
No Context No Context
Preliminary

HIGH LOW
Save/Restore INTSTAT = 10 INTSTAT = 01 Save/Restore
No Context Save/Restore

Restore Low context


Save Low context

PIC18(L)F25/26K83
HIGH No Context
INTSTAT = 11 Save/Restore
DS40001943A-page 116
PIC18(L)F25/26K83
9.6 Returning from Interrupt Service
Routine (ISR)
The “Return from Interrupt” instruction (RETFIE) is
used to mark the end of an ISR.
When RETFIE 1 instruction is executed, the PC is
loaded with the saved PC value from the top of the PC
stack. Saved context is also restored with the execution
of this instruction. Thus, execution returns to the previ-
ous state of operation that existed before the interrupt
occurred.
When RETFIE 0 instruction is executed, the saved
context is not restored back to the registers.

9.7 Interrupt Latency


By assigning each interrupt with a vector address/num-
ber (MVECEN = 1), scanning of all interrupts is not nec-
essary to determine the source of the interrupt.
When MVECEN = 1, Vectored interrupt controller
requires three clock cycles to vector to the ISR from
main routine, thereby removing dependency of
interrupt timing on compiled code.
There is a fixed latency of three instruction cycles
between the completion of the instruction active when
the interrupt occurred and the first instruction of the Inter-
rupt Service Routine. Figure 9-7, Figure 9-8 and
Figure 9-9 illustrates the sequence of events when a
peripheral interrupt is asserted when the last executed
instruction is one-cycle, two-cycle and three-cycle
respectively, when MVECEN = 1.
After the Interrupt Flag Status bit is set, the current
instruction completes executing. In the first latency
cycle, the contents of the PC, STATUS, WREG, BSR,
FSR0/1/2, PRODL/H and PCLATH/U registers are
context saved and the IVTBASE+ Vector number is
calculated. In the second latency cycle, the PC is
loaded with the calculated vector table address for the
interrupt source and the starting address of the ISR is
fetched. In the third latency cycle, the PC is loaded with
the ISR address. All the latency cycles are executed as
a FNOP instruction.
When MVECEN = 0, Vectored interrupt controller
requires two clock cycles to vector to the ISR from main
routine. There is a latency of two instruction cycles plus
the software latency between the completion of the
instruction active when the interrupt occurred and the
first instruction of the Interrupt Service Routine.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 117


FIGURE 9-7: INTERRUPT TIMING DIAGRAM – ONE CYCLE INSTRUCTION
 2017 Microchip Technology Inc.

Rev. 10-000269A
9/12/2016

1 2 3 4 5 6 7 8 9 10

System
Clock
Program
X X+2 X+2 0x82 0x218 0x21A 0x21C X+2 X+4 X+6
Counter
Instruction
Inst @ X(1) FNOP FNOP FNOP Inst @ 0x218 Inst @ 0x21A FNOP Inst @ X+2 Inst @ X+4
Register
BCF RETFIE

Interrupt

Routine MAIN FNOP ISR FNOP MAIN


Preliminary

IVTBASE 0x80

Vector
1
Number
Program Memory
0x86
0x82

PIC18(L)F25/26K83
Interrupt Location = Interrupt vector table entry << 2
= 0x86 << 2 = 0x218

Note 1: Instruction @ X is a one-cycle Instruction


DS40001943A-page 118
FIGURE 9-8: INTERRUPT TIMING DIAGRAM – TWO WORD INSTRUCTION
 2017 Microchip Technology Inc.

Rev. 10-000269B
9/12/2016

1 2 3 4 5 6 7 8 9 10 11

System
Clock
Program
Y Y+2 Y+2 Y+2 0x82 0x218 0x21A 0x21C Y+2 Y+4 Y+6
Counter
Instruction
Inst @ Y(1) Inst @ Y(1) FNOP FNOP FNOP Inst @ 0x218 Inst @ 0x21A FNOP Inst @ Y+2 Inst @ Y+4
Register
BCF RETFIE

Interrupt

Routine MAIN FNOP ISR FNOP MAIN


Preliminary

IVTBASE 0x80

Vector
1
Number
Program Memory
0x86
0x82

PIC18(L)F25/26K83
Interrupt Location = Interrupt vector table entry << 2
= 0x86 << 2 = 0x218

Note 1: Instruction @ Y is a two-cycle instruction.


DS40001943A-page 119
FIGURE 9-9: INTERRUPT TIMING DIAGRAM – THREE CYCLE INSTRUCTION
 2017 Microchip Technology Inc.

Rev. 10-000269C
9/12/2016

1 2 3 4 5 6 7 8 9 10 11 12

System
Clock
Program
Z Z+2 Z+2 Z+2 Z+2 0x82 0x218 0x21A 0x21C Z+2 Z+4 Z+6
Counter
Instruction Inst @ Inst @
Inst @ Z(1) Inst @ Z(1) Inst @ Z(1) FNOP FNOP FNOP FNOP Inst @ Z+2 Inst @ Z+4
Register 0x218 0x21A
BCF RETFIE

Interrupt

Routine MAIN FNOP ISR FNOP MAIN


Preliminary

IVTBASE 0x80

Vector
1
Number
Program Memory
0x86
0x82

PIC18(L)F25/26K83
Interrupt Location = Interrupt vector table entry << 2
= 0x86 << 2 = 0x218

Note 1: Instruction @ Z is a three-cycle instruction.


DS40001943A-page 120
9.7.1 ABORTING INTERRUPTS
 2017 Microchip Technology Inc.

If the last instruction before the interrupt controller vectors to the ISR from main
routine clears the GIE, PIE or PIR bit associated with the interrupt, the controller
executes one force NOP cycle before it returns to the main routine.
Figure 9-10 illustrates the sequence of events when a peripheral interrupt is
asserted and then cleared on the last executed instruction cycle.
If the GIE, PIE or PIR bit associated with the interrupt is cleared prior to
vectoring to the ISR, then the controller continues executing the main routine.

FIGURE 9-10: INTERRUPT TIMING DIAGRAM - ABORTING INTERRUPTS

Rev. 10-000269D
7/6/2016

1 2 3 4 5

Instruction
Clock
Preliminary

Program
X X+2 X+2 X+4 X+6
Counter
Instruction
Inst @ X(1) FNOP Inst @ X+2 Inst @ X+4
Register

Interrupt

PIC18(L)F25/26K83
Routine MAIN FNOP MAIN

Note 1: Inst @ X clears the interrupt flag, Example BCF INTCON0, GIE.
DS40001943A-page 121
PIC18(L)F25/26K83
9.8 Interrupt Setup Procedure 9.10 Wake-up from Sleep
1. When using interrupt priority levels, set the IPEN The interrupt controller provides a wake-up request to
bit in INTCON0 register and then select the the CPU whenever an interrupt event occurs, if the
user-assigned priority level for the interrupt interrupt event is enabled. This occurs regardless of
source by writing the control bits in the appropri- whether the part is in Run, Idle/Doze or Sleep modes.
ate IPRx Control register. The status of the GIEH/GIEL bits has no effect on the
Note: At a device Reset, the IPRx registers are wake-up request. The wake-up request will be asyn-
initialized, such that all user interrupt chronous to all clocks.
sources are assigned to high priority.
9.11 Interrupt Compatibility
2. Clear the Interrupt Flag Status bit associated
with the peripheral in the associated PIRx Status When the MVECEN bit in Configuration Word 2L is
register. cleared (Register 5-3), the Interrupt Vector Table
3. Enable the interrupt source by setting the inter- feature is disabled and interrupts are compatible with
rupt enable control bit associated with the previous high performance 8-bit PIC18 microcontroller
source in the appropriate PIEx Control register. devices. In this mode, the Interrupt Vector Table priority
4. If the vector table is used (MVECEN = 1), then has no effect.
setup the start address for the Interrupt Vector When the IPEN bit is also cleared, the interrupt priority
Table using the IVTBASE register. See Section feature is disabled and interrupts are compatible with
9.2.2 “Interrupt Vector Table Contents”. PIC®16 microcontroller mid-range devices. All
5. Once the IVTBASE is written to, set the Interrupt interrupts branch to address 0008h since the interrupt
enable bits in INTCON0 register. priority is disabled.
6. An example of setting up interrupts and ISRs
using assembly and C can be found in
Examples 9-3 and 9-4.

9.9 External Interrupt Pins


The PIC18(L)F26/27/45/46/47/55/56/57K42 devices
have three external interrupt sources which can be
assigned to any pin on different ports based on the PPS
settings. Refer Section 17.0 “Peripheral Pin Select
(PPS) Module” for possible rerouting options. The
external interrupt sources are edge-triggered. If the
corresponding INTxEDG bit in the INTCON0 register is
set (= 1), the interrupt is triggered by a rising edge. If
the bit is clear, the trigger is on the falling edge.
When a valid edge appears on the INTx pin, the
corresponding flag bit, INTxF in the PIRx registers, is
set. This interrupt can be disabled by clearing the
corresponding enable bit, INTxE. Flag bit, INTxF, must
be cleared by software in the Interrupt Service Routine
before re-enabling the interrupt.
All external interrupts (INT0, INT1 and INT2) can wake-
up the processor from Idle or Sleep modes if bit INTxE
was set prior to going into those modes. If the Global
Interrupt Enable bit, GIE/GIEH, is set, the processor
will branch to the interrupt vector following wake-up.
Interrupt priority is determined by the value contained
in the interrupt priority bits, INT0IP, INT1IP and INT2IP
of the IPRx registers.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 122


PIC18(L)F25/26K83
EXAMPLE 9-3: SETTING UP VECTORED INTERRUPTS USING MPASM
ISR_TMR0: CODE 0x8C0 ; ISR code at 0x08C0 in PFM
BANKSEL PIR0 ; Select bank for PIR0
BCF PIR3, TMR0IF ; Clear TMR0IF
BTG LATC, 0, ACCESS ; Code to execute in ISR
RETFIE 1 ; Return from ISR

InterruptInit:
BANKSEL INTCON0 ; Select bank for INTCON0
BSF INTCON0, GIEH ; Enable high priority interrupts
BSF INTCON0, GIEL ; Enable low priority interrupts
BSF INTCON0, IPEN_INTCON0 ; Enable interrupt priority

BANKSEL PIE0 ; Select bank for PIE0


BSF PIE3, TMR0IE ; Enable TMR0 interrupt
BSF PIE4, TMR1IE ; Enable TMR1 interrupt

BCF IPR3, TMR0IP ; Make TMR0 interrupt low priority


RETURN 1

VectorTableInit:
; Set IVTBASE (optional - default is 0x000008)
MOVLW 0x00 ; This is optional
MOVWF IVTBASEU, ACCESS ; If not included, then the
MOVLW 0x40 ; hardware default value of
MOVWF IVTBASEH, ACCESS ; 0x0008 will be taken.
MOVLW 0x08
MOVWF IVTBASEL, ACCESS

; TMR0 vector at IVTBASE + 2*(TMR0 vector number i.e. 31) = 0x4046


MOVLW 0x00 ; Load TBLPTR with the
MOVWF TBLPTRU, ACCESS ; PFM memory location to be
MOVLW 0x40 ; written to.
MOVWF TBLPTRH, ACCESS
MOVLW 0x46
MOVWF TBLPTRL, ACCESS

; Write the contents of TMR0 vector location


; ISR_TMR0_ADDRESS >> 2 = 0x08C0 >> 2 = 0x0230
MOVLW 0x30 ; Low byte first
MOVWF TABLAT, ACCESS
TBLWT*+ ; Write to temp table latch

MOVLW 0x02 ; High byte next


MOVWF TABLAT, ACCESS
TBLWT*+ ; Write to temp table latch

; Write to PFM now using NVMCON


BANKSEL NVMCON1 ; Select bank for NVMCON1
MOVLW 0x84 ; Setting to write to PFM
MOVWF NVMCON1

MOVLW 0x55 ; Required unlock sequence


MOVWF NVMCON2
MOVLW 0xAA
MOVWF NVMCON2
BSF NVMCON1, WR ; Start writing to PFM

BTFSC NVMCON1, WR ; Wait for write to complete


GOTO $-2

RETURN 1

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 123


PIC18(L)F25/26K83
EXAMPLE 9-4: SETTING UP VECTORED INTERRUPTS USING XC8

// NOTE 1: If IVTBASE is changed from its default value of 0x000008, then the
// "base(...)" argument must be provided in the ISR. Otherwise the vector
// table will be placed at 0x0008 by default regardless of the IVTBASE value.

// NOTE 2: When MVECEN=0 and IPEN=1, a separate argument as "high_priority"


// or "low_priority" can be used to distinguish between the two ISRs.
// If the argument is not provided, the ISR is considered high priority
// by default.

// NOTE 3: Multiple interrupts can be handled by the same ISR if they are
// specified in the "irq(...)" argument. Ex: irq(IRQ_TMR0, IRQ_CCP1)

void __interrupt(irq(IRQ_TMR0), base(0x4008)) TMR0_ISR(void)


{
PIR3bits.TMR0IF = 0; // Clear the interrupt flag
LATCbits.LC0 ^= 1; // ISR code goes here
}

void __interrupt(irq(default), base(0x4008)) DEFAULT_ISR(void)


{
// Unhandled interrupts go here
}

void INTERRUPT_Initialize (void)


{
INTCON0bits.GIEH = 1; // Enable high priority interrupts
INTCON0bits.GIEL = 1; // Enable low priority interrupts
INTCON0bits.IPEN = 1; // Enable interrupt priority

PIE3bits.TMR0IE = 1; // Enable TMR0 interrupt


PIE4bits.TMR1IE = 1; // Enable TMR1 interrupt

IPR3bits.TMR0IP = 0; // Make TMR0 interrupt low priority

// Change IVTBASE if required


IVTBASEU = 0x00; // Optional
IVTBASEH = 0x40; // Default is 0x0008
IVTBASEL = 0x08;
}

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 124


PIC18(L)F25/26K83
9.12 Register Definitions: Interrupt Control
REGISTER 9-1: INTCON0: INTERRUPT CONTROL REGISTER 0
R/W-0/0 R/W-0/0 R/W-0/0 U-0 U-0 R/W-1/1 R/W-1/1 R/W-1/1
GIE/GIEH GIEL IPEN — — INT2EDG INT1EDG INT0EDG
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 GIE/GIEH: Global Interrupt Enable bits


If IPEN = 0:
GIE:
1 = Enables all unmasked interrupts
0 = Disables all interrupts
If IPEN = 1:
GIEH:
1 = Enables all unmasked high priority interrupts: bit also needs to be set for enabling low priority
interrupts
0 = Disables all interrupts
bit 6 GIEL: Global Low Priority Interrupt Enable bit
If IPEN = 0:
Reserved, read as ‘0’
If IPEN = 1:
GIEL:
1 = Enables all unmasked low priority interrupts, GIEH also needs to be set for low priority interrupts
0 = Disables all low priority
bit 5 IPEN: Interrupt Priority Enable bit
1 = Enable priority levels on interrupts
0 = Disable priority levels on interrupts; all interrupts are treated as high priority interrupts
bit 4-3 Unimplemented: Read as ‘0’
bit 2 INT2EDG: External Interrupt 2 Edge Select bit
1 = Interrupt on rising edge of INT2 pin
0 = Interrupt on falling edge of INT2 pin
bit 1 INT1EDG: External Interrupt 1 Edge Select bit
1 = Interrupt on rising edge of INT1 pin
0 = Interrupt on falling edge of INT1 pin
bit 0 INT0EDG: External Interrupt 0 Edge Select bit
1 = Interrupt on rising edge of INT0 pin
0 = Interrupt on falling edge of INT0 pin

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 125


PIC18(L)F25/26K83

REGISTER 9-2: INTCON1: INTERRUPT CONTROL REGISTER 1


R-0/0 R-0/0 U-0 U-0 U-0 U-0 U-0 U-0
STAT<1:0> — — — — — —

bit 7 bit 0

Legend:
HC = Bit is cleared by hardware
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7-6 STAT<1:0>: Interrupt State Status bits


11 = High priority ISR executing, high priority interrupt was received while a low priority ISR was
executing
10 = High priority ISR executing, high priority interrupt was received in main routine
01 = Low priority ISR executing, low priority interrupt was received in main routine
00 = Main routine executing
bit 5-0 Unimplemented: Read as ‘0’

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 126


PIC18(L)F25/26K83

REGISTER 9-3: PIR0: PERIPHERAL INTERRUPT REQUEST REGISTER 0


R-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0
IOCIF(2) CRCIF SCANIF NVMIF CSWIF(3) OSFIF HLVDIF SWIF
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Bit is set in hardware

bit 7 IOCIF: Interrupt-on-Change Interrupt Flag bit(2)


1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 6 CRCIF: CRC Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 5 SCANIF: Memory Scanner Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 4 NVMIF: NVM Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 3 CSWIF: Clock Switch Interrupt Flag bit(3)
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 2 OSFIF: Oscillator Fail Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 1 HLVDIF: HLVD Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 0 SWIF: Software Interrupt Flag bit
1 = Software Interrupt Flag Enable
0 = Software Interrupt Flag Disable

Note 1: 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.
2: IOCIF is a read-only bit. To clear the interrupt condition, all bits in the IOCxF registers must be cleared.
3: The CSWIF interrupt will not wake the system from Sleep. The system will sleep until another interrupt
causes the wake-up.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 127


PIC18(L)F25/26K83

REGISTER 9-4: PIR1: PERIPHERAL INTERRUPT REQUEST REGISTER 1


R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0
SMT1PWAIF SMT1PRAIF SMT1IF C1IF ADTIF ADIF ZCDIF INT0IF(2)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Bit is set in hardware

bit 7 SMT1PWAIF: SMT1 Pulse-Width Acquisition Interrupt Flag bit


1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 6 SMT1PRAIF: SMT1 Period Acquisition Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 5 SMT1IF: SMT1 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 4 C1IF: CMP1 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 3 ADTIF: ADC Threshold Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 2 ADIF: ADC Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 1 ZCDIF: ZCD Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 0 INT0IF: External Interrupt 0 Interrupt Flag bit(2)
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred

Note 1: 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.
2: The external interrupt GPIO pin is selected by the INTxPPS register.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 128


PIC18(L)F25/26K83

REGISTER 9-5: PIR2: PERIPHERAL INTERRUPT REGISTER 2(1)


R-0/0 R-0/0 R-0/0 R-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0
I2C1RXIF(2) SPI1IF(3) SPI1TXIF(4) SPI1RXIF(4) DMA1AIF DMA1ORIF DMA1DCNTIF DMA1SCNTIF
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set

bit 7 I2C1RXIF: I2C1 Receive Interrupt Flag bit(2)


1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 6 SPI1IF: SPI1 Interrupt Flag bit(3)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 5 SPI1TXIF: SPI1 Transmit Interrupt Flag bit(4)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 4 SPI1RXIF: SPI1 Receive Interrupt Flag bit(4)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 3 DMA1AIF: DMA1 Abort Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 2 DMA1ORIF: DMA1 Overrun Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 1 DMA1DCNTIF: DMA1 Destination Count Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 0 DMA1SCNTIF: DMA1 Source Count Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred

Note 1: 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.
2: I2CxTXIF and I2CxRXIF are read-only bits. To clear the interrupt condition, the CLRBF bit in I2CxSTAT1
register must be set.
3: SPIxIF is a read-only bit. To clear the interrupt condition, all bits in the SPIxINTF register must be cleared.
4: SPIxTXIF and SPIxRXIF are read-only bits and cannot be set/cleared by the software.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 129


PIC18(L)F25/26K83

REGISTER 9-6: PIR3: PERIPHERAL INTERRUPT REGISTER 3(1)


R/W/HS-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0
TMR0IF U1IF(2) U1EIF(3) U1TXIF(4) U1RXIF(4) I2C1EIF(5) I2C1IF(6) I2C1TXIF(7)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Bit is set in hardware

bit 7 TMR0IF: TMR0 Interrupt Flag bit


1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 6 U1IF: UART1 Interrupt Flag bit(2)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 5 U1EIF: UART1 Framing Error Interrupt Flag bit(3)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 4 U1TXIF: UART1 Transmit Interrupt Flag bit(4)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 3 U1RXIF: UART1 Receive Interrupt Flag bit(4)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 2 I2C1EIF: I2C1 Error Interrupt Flag bit(5)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 1 I2C1IF: I2C1 Interrupt Flag bit(6)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 0 I2C1TXIF: I2C1 Transmit Interrupt Flag bit(7)
1 = Interrupt has occurred
0 = Interrupt event has not occurred

Note 1: 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.
2: UxIF is a read-only bit. To clear the interrupt condition, all bits in the UxUIR register must be cleared.
3: UxEIF is a read-only bit. To clear the interrupt condition, all bits in the UxERRIR register must be cleared.
4: UxTXIF and UxRXIF are read-only bits and cannot be set/cleared by the software.
5: I2CxEIF is a read-only bit. To clear the interrupt condition, all bits in the I2CxERR register must be cleared.
6: I2CxIF is a read-only bit. To clear the interrupt condition, all bits in the I2CxPIR register must be cleared.
7: I2CxTXIF and I2CxRXIF are read-only bits. To clear the interrupt condition, the CLRBF bit in I2CxSTAT1
register must be set.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 130


PIC18(L)F25/26K83

REGISTER 9-7: PIR4: PERIPHERAL INTERRUPT REGISTER 4(1)


R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0
INT1IF(2) CLC1IF CWG1IF NCO1IF CCP1IF TMR2IF TMR1GIF TMR1IF
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Bit is set in hardware

bit 7 INT1IF: External Interrupt 1 Interrupt Flag bit(2)


1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 6 CLC1IF: CLC1 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 5 CWG1IF: CWG1 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 4 NCO1IF: NCO1 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 3 CCP1IF: CCP1 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 2 TMR2IF: TMR2 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 1 TMR1GIF: TMR1 Gate Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 0 TMR1IF: TMR1 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
Note 1: 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.
2: The external interrupt GPIO pin is selected by the INTxPPS register.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 131


PIC18(L)F25/26K83

REGISTER 9-8: PIR5: PERIPHERAL INTERRUPT REGISTER 5(1)


R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0
IRXIF WAKIF ERRIF TXB2IF/TXBnIF TXB1IF TXB0IF RXB1IF/RXBnIF RXB0IF/FIFOFIF
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Bit is set in hardware

bit 7 IRXIF: CAN Invalid Message Received Interrupt Flag bit


1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 6 WAKIF: CAN Bus Wake-Up Activity Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 5 ERRIF: CAN Error Interrupt Flag bit (Multiple sources in the COMSTAT register)
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 4 TXB2IF/TXBnIF: CAN Transmit Buffer 2/Transmit Buffer n Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 3 TXB1IF: CAN Transmit Buffer 1 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 2 TXB0IF: CAN Transmit Buffer 0 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 1 RXB1IF/RXBnIF: CAN Receive Buffer 1/ Receive Buffer n Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 0 RXB0IF/FIFOFIF: CAN Receive Buffer 0/FIFO Full 1 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred

Note 1: 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.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 132


PIC18(L)F25/26K83

REGISTER 9-9: PIR6: PERIPHERAL INTERRUPT REGISTER 6(1)


R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0
DMA2AIF DMA2ORIF DMA2DCNTIF DMA2SCNTIF SMT2PWAIF SMT2PRAIF SMT2IF C2IF
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Bit is set in hardware

bit 7 DMA2AIF: DMA2 Abort Interrupt Flag bit


1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 6 DMA2ORIF: DMA2 Overrun Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 5 DMA2DCNTIF: DMA2 Destination Count Interrupt Flag bit
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 4 DMA2SCNTIF: DMA2 Source Count Interrupt Flag bit
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 3 SMT2PWAIF: SMT2 Pulse-Width Acquisition Interrupt Flag bit
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 2 SMT2PRAIF: SMT2 Period Acquisition Interrupt Flag bit
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 1 SMT2IF: SMT2 Interrupt Flag bit
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 0 C2IF: C2 Interrupt Flag bit
1 = Interrupt has occurred
0 = Interrupt event has not occurred

Note 1: 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 inter-
rupt.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 133


PIC18(L)F25/26K83

REGISTER 9-10: PIR7: PERIPHERAL INTERRUPT REGISTER 7(1)


R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0
U2IF(2) U2EIF(3) U2TXIF(4) U2RXIF(4) I2C2EIF(5) I2C2IF(6) I2C2TXIF(7) I2C2RXIF(7)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Bit is set in hardware

bit 7 U2IF: UART2 Interrupt Flag bit(2)


1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 6 U2EIF: UART2 Framing Error Interrupt Flag bit(3)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 5 U2TXIF: UART2 Transmit Interrupt Flag bit(4)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 4 U2RXIF: UART2 Receive Interrupt Flag bit(4)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 3 I2C2EIF: I2C2 Error Interrupt Flag bit(5)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 2 I2C2IF: I2C2 Interrupt Flag bit(6)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 1 I2C2TXIF: I2C2 Transmit Interrupt Flag bit(7)
1 = Interrupt has occurred
0 = Interrupt event has not occurred
bit 0 I2C2RXIF: I2C2 Receive Interrupt Flag bit(7)
1 = Interrupt has occurred
0 = Interrupt event has not occurred

Note 1: 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.
2: UxIF is a read-only bit. To clear the interrupt condition, all bits in the UxUIR register must be cleared.
3: UxEIF is a read-only bit. To clear the interrupt condition, all bits in the UxERRIR register must be cleared.
4: UxTXIF and UxRXIF are read-only bits and cannot be set/cleared by the software.
5: I2CxEIF is a read-only bit. To clear the interrupt condition, all bits in the I2CxERR register must be cleared.
6: I2CxIF is a read-only bit. To clear the interrupt condition, all bits in the I2CxPIR register must be cleared.
7: I2CxTXIF and I2CxRXIF are read-only bits. To clear the interrupt condition, the CLRBF bit in I2CxSTAT1
register must be set.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 134


PIC18(L)F25/26K83

REGISTER 9-11: PIR8: PERIPHERAL INTERRUPT REGISTER 8(1)


R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0
TMR5IF INT2IF(2) CLC2IF CWG2IF CCP2IF TMR4IF TMR3GIF TMR3IF
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Bit is set in hardware

bit 7 TMR5IF: TMR5 Interrupt Flag bit


1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 6 INT2IF: External Interrupt 2 Interrupt Flag bit(2)
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 5 CLC2IF: CLC2 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 4 CWG2IF: CWG2 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 3 CCP2IF: CCP2 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 2 TMR4IF: TMR4 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 1 TMR3GIF: TMR3G Gate Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 0 TMR3IF: TMR3 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred

Note 1: 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.
2: The external interrupt GPIO pin is selected by the INTxPPS register.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 135


PIC18(L)F25/26K83

REGISTER 9-12: PIR9: PERIPHERAL INTERRUPT REGISTER 9(1)


U-0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0
— CLC4IF CCP4IF CLC3IF CWG3IF CCP3IF TMR6IF TMR5GIF
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 Unimplemented: Read as ‘0’


bit 6 CLC4IF: CLC4 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 5 CCP4IF: CCP4 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 4 CLC3IF: CLC3 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 3 CWG3IF: CWG3 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 2 CCP3IF: CCP3 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 1 TMR6IF: TMR6 Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
bit 0 TMR5GIF: TMR5 Gate Interrupt Flag bit
1 = Interrupt has occurred (must be cleared by software)
0 = Interrupt event has not occurred
Note 1: 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.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 136


PIC18(L)F25/26K83

REGISTER 9-13: PIE0: PERIPHERAL INTERRUPT ENABLE REGISTER 0


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
IOCIE CRCIE SCANIE NVMIE CSWIE OSFIE HLVDIE SWIE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 IOCIE: Interrupt-on-Change Enable bit


1 = Enabled
0 = Disabled
bit 6 CRCIE: CRC Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 5 SCANIE: Memory Scanner Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 4 NVMIE: NVM Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 3 CSWIE: Clock Switch Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 2 OSFIE: Oscillator Fail Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 1 HLVDIE: HLVD Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 0 SWIE: Software Interrupt Enable bit
1 = Enabled
0 = Disabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 137


PIC18(L)F25/26K83

REGISTER 9-14: PIE1: PERIPHERAL INTERRUPT ENABLE REGISTER 1


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
SMT1PWAIE SMT1PRAIE SMT1IE C1IE ADTIE ADIE ZCDIE INT0IE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 SMT1PWAIE: SMT1 Pulse Width Acquisition Interrupt Enable bit


1 = Enabled
0 = Disabled
bit 6 SMT1PRAIE: SMT1 Period Acquisition Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 5 SMT1IE: SMT1 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 4 C1IE: C1 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 3 ADTIE: ADC Threshold Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 2 ADIE: ADC Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 1 ZCDIE: ZCD Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 0 INT0IE: External Interrupt 0 Enable bit
1 = Enabled
0 = Disabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 138


PIC18(L)F25/26K83

REGISTER 9-15: PIE2: PERIPHERAL INTERRUPT ENABLE REGISTER 2


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
I2C1RXIE SPI1IE SPI1TXIE SPI1RXIE DMA1AIE DMA1ORIE DMA1DCNTIE DMA1SCNTIE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 I2C1RXIE: I2C1 Receive Interrupt Enable bit


1 = Enabled
0 = Disabled
bit 6 SPI1IE: SPI1 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 5 SPI1TXIE: SPI1 Transmit Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 4 SPI1RXIE: SPI1 Receive Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 3 DMA1AIE: DMA1 Abort Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 2 DMA1ORIE: DMA1 Overrun Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 1 DMA1DCNTIE: DMA1 Destination Count Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 0 DMA1SCNTIE: DMA1 Source Count Interrupt Enable bit
1 = Enabled
0 = Disabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 139


PIC18(L)F25/26K83

REGISTER 9-16: PIE3: PERIPHERAL INTERRUPT ENABLE REGISTER 3


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
TMR0IE U1IE U1EIE U1TXIE U1RXIE I2C1EIE I2C1IE I2C1TXIE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 TMR0IE: TMR0 Interrupt Enable bit


1 = Enabled
0 = Disabled
bit 6 U1IE: UART1 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 5 U1EIE: UART1 Framing Error Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 4 U1TXIE: UART1 Transmit Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 3 U1RXIE: UART1 Receive Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 2 I2C1EIE: I2C1 Error Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 1 I2C1IE: I2C1 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 0 I2C1TXIE: I2C1 Transmit Interrupt Enable bit
1 = Enabled
0 = Disabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 140


PIC18(L)F25/26K83

REGISTER 9-17: PIE4: PERIPHERAL INTERRUPT ENABLE REGISTER 4


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
INT1IE CLC1IE CWG1IE NCO1IE CCP1IE TMR2IE TMR1GIE TMR1IE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 INT1IE: External Interrupt 1 Interrupt Enable bit


1 = Enabled
0 = Disabled
bit 6 CLC1IE: CLC1 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 5 CWG1IE: CWG1 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 4 NCO1IE: NCO1 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 3 CCP1IE: CCP1 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 2 TMR2IE: TMR2 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 1 TMR1GIE: TMR1 Gate Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 0 TMR1IE: TMR1 Interrupt Enable bit
1 = Enabled
0 = Disabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 141


PIC18(L)F25/26K83

REGISTER 9-18: PIE5: PERIPHERAL INTERRUPT ENABLE REGISTER 5


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
IRXIE WAKIE ERRIE TXB2IE/TXBnIE TXB1IE TXB0IE RXB1IE/RXBnIE RXB0IE/FIFOFIE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 IRXIE: CAN Invalid Message Received Interrupt Enable bit


1 = Enabled
0 = Disabled
bit 6 WAKIE: CAN Bus Wake-up Activity Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 5 ERRIE: CAN Error Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 4 TXB2IE/TXBnIE: CAN Transmit Buffer 2/Transmit Buffer n Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 3 TXB1IE: CAN Transmit Buffer 1 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 2 TXB0IE: CAN Transmit Buffer 0 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 1 RXB1IE/RXBnIE: CAN Receive Buffer 1/ Receive Buffer n Interrupt Flag Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 0 RXB0IE/FIFOFIE: CAN Receive Buffer 0/FIFO Full Interrupt Enable bit
1 = Enabled
0 = Disabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 142


PIC18(L)F25/26K83

REGISTER 9-19: PIE6: PERIPHERAL INTERRUPT ENABLE REGISTER 6


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
DMA2AIE DMA2ORIE DMA2DCNTIE DMA2SCNTIE SMT2PWAIE SMT2PRAIE SMT2IE C2IE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 DMA2AIE: DMA Abort Interrupt Enable bit


1 = Enabled
0 = Disabled
bit 6 DMA2ORIE: DMA2 Overrun Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 5 DMA2DCNTIE: DMA2 Destination Count Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 4 DMA2SCNTIE: DMA2 Source Count Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 3 SMT2PWAIE: SMT2 Pulse-Width Acquisition Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 2 SMT2PRAIE: SMT2 Period Acquisition Receive Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 1 SMT2IE: SMT2 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 0 C2IE: C2 Interrupt Enable bit
1 = Enabled
0 = Disabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 143


PIC18(L)F25/26K83

REGISTER 9-20: PIE7: PERIPHERAL INTERRUPT ENABLE REGISTER 7


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
U2IE U2EIE U2TXIE U2RXIE I2C2EIE I2C2IE I2C2TXIE I2C2RXIE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 U2IE: UART2 Interrupt Enable bit


1 = Enabled
0 = Disabled
bit 6 U2EIE: UART2 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 5 U2TXIE: UART2 Transmit Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 4 U2RXIE: UART2 Receive Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 3 I2C2EIE: I2C2 Error Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 2 I2C2IE: I2C2 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 1 I2C2TXIE: I2C2 Transmit Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 0 I2C2RXIE: I2C2 Receive Interrupt Enable bit
1 = Enabled
0 = Disabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 144


PIC18(L)F25/26K83

REGISTER 9-21: PIE8: PERIPHERAL INTERRUPT ENABLE REGISTER 8


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
TMR5IE INT2IE CLC2IE CWG2IE CCP2IE TMR4IE TMR3GIE TMR3IE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 TMR5IE: TMR5 Interrupt Enable bit


1 = Enabled
0 = Disabled
bit 6 INT2IE: External Interrupt 2 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 5 CLC2IE: CLC2 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 4 CWG2IE: CWG2 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 3 CCP2IE: CCP2 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 2 TMR4IE: TMR4 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 1 TMR3GIE: TMR3 Gate Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 0 TMR3IE: TMR3 Interrupt Enable bit
1 = Enabled
0 = Disabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 145


PIC18(L)F25/26K83

REGISTER 9-22: PIE9: PERIPHERAL INTERRUPT ENABLE REGISTER 9


U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— CLC4IE CCP4IE CLC3IE CWG3IE CCP3IE TMR6IE TMR5GIE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 Unimplemented: Read as ‘0’


bit 6 CLC4IE: CLC4 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 5 CCP4IE: CCP4 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 4 CLC3IE: CLC3 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 3 CWG3IE: CWG3 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 2 CCP3IE: CCP3 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 1 TMR6IE: TMR6 Interrupt Enable bit
1 = Enabled
0 = Disabled
bit 0 TMR5GIE: TMR5 Interrupt Enable bit
1 = Enabled
0 = Disabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 146


PIC18(L)F25/26K83

REGISTER 9-23: IPR0: PERIPHERAL INTERRUPT PRIORITY REGISTER 0


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
IOCIP CRCIP SCANIP NVMIP CSWIP OSFIP HLVDIP SWIP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 IOCIP: Interrupt-on-Change Priority bit


1 = High priority
0 = Low priority
bit 6 CRCIP: CRC Interrupt Priority bit
1 = High priority
0 = Low priority
bit 5 SCANIP: Memory Scanner Interrupt Priority bit
1 = High priority
0 = Low priority
bit 4 NVMIP: NVM Interrupt Priority bit
1 = High priority
0 = Low priority
bit 3 CSWIP: Clock Switch Interrupt Priority bit
1 = High priority
0 = Low priority
bit 2 OSFIP: Oscillator Fail Interrupt Priority bit
1 = High priority
0 = Low priority
bit 1 HLVDIP: HLVD Interrupt Priority bit
1 = High priority
0 = Low priority
bit 0 SWIP: Software Interrupt Priority bit
1 = High priority
0 = Low priority

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 147


PIC18(L)F25/26K83

REGISTER 9-24: IPR1: PERIPHERAL INTERRUPT PRIORITY REGISTER 1


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
SMT1PWAIP SMT1PRAIP SMT1IP C1IP ADTIP ADIP ZCDIP INT0IP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 SMT1PWAIP: SMT1 Pulse Width Acquisition Interrupt Priority bit


1 = High priority
0 = Low priority
bit 6 SMT1PRAIP: SMT1 Period Acquisition Interrupt Priority bit
1 = High priority
0 = Low priority
bit 5 SMT1IP: SMT1 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 4 C1IP: C1 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 3 ADTIP: ADC Threshold Interrupt Priority bit
1 = High priority
0 = Low priority
bit 2 ADIP: ADC Interrupt Priority bit
1 = High priority
0 = Low priority
bit 1 ZCDIP: ZCD Interrupt Priority bit
1 = High priority
0 = Low priority
bit 0 INT0IP: External Interrupt 0 Interrupt Priority bit
1 = High priority
0 = Low priority

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 148


PIC18(L)F25/26K83

REGISTER 9-25: IPR2: PERIPHERAL INTERRUPT PRIORITY REGISTER 2


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
I2C1RXIP SPI1IP SPI1TXIP SPI1RXIP DMA1AIP DMA1ORIP DMA1DCNTIP DMA1SCNTIP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 I2C1RXIP: I2C1 Receive Interrupt Priority bit


1 = High priority
0 = Low priority
bit 6 SPI1IP: SPI1 Transmit Interrupt Priority bit
1 = High priority
0 = Low priority
bit 5 SPI1TXIP: I2C1 Transmit Interrupt Priority bit
1 = High priority
0 = Low priority
bit 4 SPI1RXIP: SPI1 Receive Interrupt Priority bit
1 = High priority
0 = Low priority
bit 3 DMA1AIP: DMA1 Abort Transmit Interrupt Priority bit
1 = High priority
0 = Low priority
bit 2 DMA1ORIP: DMA1 Overrun Interrupt Priority bit
1 = High priority
0 = Low priority
bit 1 DMA1DCNTIP: DMA1 Destination Count Interrupt Priority bit
1 = High priority
0 = Low priority
bit 0 DMA1SCNTIP: DMA1 Source Count Interrupt Priority bit
1 = High priority
0 = Low priority

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 149


PIC18(L)F25/26K83

REGISTER 9-26: IPR3: PERIPHERAL INTERRUPT PRIORITY REGISTER 3


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
TMR0IP U1IP U1EIP U1TXIP U1RXIP I2C1EIP I2C1IP I2C1TXIP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 TMR0IP: TMR0 Interrupt Priority bit


1 = High priority
0 = Low priority
bit 6 U1IP: UART1 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 5 U1EIP: UART1 Framing Error Interrupt Priority bit
1 = High priority
0 = Low priority
bit 4 U1TXIP: UART1 Transmit Interrupt Priority bit
1 = High priority
0 = Low priority
bit 3 U1RXIP: UART1 Receive Interrupt Priority bit
1 = High priority
0 = Low priority
bit 2 I2C1EIP: I2C1 Error Interrupt Priority bit
1 = High priority
0 = Low priority
bit 1 I2C1IP: I2C1 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 0 I2C1TXIP: I2C1 Transmit Interrupt Priority bit
1 = High priority
0 = Low priority

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 150


PIC18(L)F25/26K83

REGISTER 9-27: IPR4: PERIPHERAL INTERRUPT PRIORITY REGISTER 4


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
INT1IP CLC1IP CWG1IP NCO1IP CCP1IP TMR2IP TMR1GIP TMR1IP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 INT1IP: External Interrupt 1 Interrupt Priority bit


1 = High priority
0 = Low priority
bit 6 CLC1IP: CLC1 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 5 CWG1IP: CWG1 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 4 NCO1IP: NCO1 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 3 CCP1IP: CCP1 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 2 TMR2IP: TMR2 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 1 TMR1GIP: TMR1 Gate Interrupt Priority bit
1 = High priority
0 = Low priority
bit 0 TMR1IP: TMR1 Interrupt Priority bit
1 = High priority
0 = Low priority

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 151


PIC18(L)F25/26K83

REGISTER 9-28: IPR5: PERIPHERAL INTERRUPT PRIORITY REGISTER 5


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
IRXIP WAKIP ERRIP TXB2IP/TXBnIP TXB1IP TXB0IP RXB1IP/RXBnIP RXB0IP/FIFOFIP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 IRXIP: CAN Invalid Message Received Interrupt Priority bit


1 = High priority
0 = Low priority
bit 6 WAKIP: CAN Bus Wake-Up Activity Interrupt Priority bit
1 = High priority
0 = Low priority
bit 5 ERRIP: CAN Error Interrupt Priority bit (Multiple Sources in the COMSTAT Register)
1 = High priority
0 = Low priority
bit 4 TXB2IP/TXBnIP: CAN Transmit Buffer 2/Transmit Buffer n Interrupt Priority bit
1 = High priority
0 = Low priority
bit 3 TXB1IP: CAN Transmit Buffer 1 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 2 TXB0IP: CAN Transmit Buffer 0 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 1 RXB1IP/RXBnIP: CAN Receive Buffer 1/Receive Buffer n Interrupt Priority bit
1 = High priority
0 = Low priority
bit 0 RXB0IP/FIFOFIP: CAN Receive Buffer 0/FIFO Full Interrupt Priority bit
1 = High priority
0 = Low priority

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 152


PIC18(L)F25/26K83

REGISTER 9-29: IPR6: PERIPHERAL INTERRUPT PRIORITY REGISTER 6


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
DMA2AIP DMA2ORIP DMA2DCNTIP DMA2SCNTIP SMT2PWAIP SMT2PRAIP SMT2IP C2IP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 DMA2AIP: DMA2 Abort Interrupt Priority bit


1 = High priority
0 = Low priority
bit 6 DMA2ORIP: DMA2 Overrun Interrupt Priority bit
1 = High priority
0 = Low priority
bit 5 DMA2DCNTIP: DMA2 Destination Count Interrupt Priority bit
1 = High priority
0 = Low priority
bit 4 DMA2SCNTIP: DMA2 Source Count Interrupt Priority bit
1 = High priority
0 = Low priority
bit 3 SMT2PWAIP: SMT2 Pulse-Width Acquisition Interrupt Priority bit
1 = High priority
0 = Low priority
bit 2 SMT2PRAIP: SMT2 Period Acquisition Interrupt Priority bit
1 = High priority
0 = Low priority
bit 1 SMT2IP: SMT2 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 0 C2IP: C2 Interrupt Priority bit
1 = High priority
0 = Low priority

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 153


PIC18(L)F25/26K83

REGISTER 9-30: IPR7: PERIPHERAL INTERRUPT PRIORITY REGISTER 7


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
U2IP U2EIP U2TXIP U2RXIP I2C2EIP I2C2IP I2C2TXIP I2C2RXIP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 U2IP: UART2 Interrupt Priority bit


1 = High priority
0 = Low priority
bit 6 U2EIP: UART2 Framing Error Interrupt Priority bit
1 = High priority
0 = Low priority
bit 5 U2TXIP: UART2 Transmit Interrupt Priority bit
1 = High priority
0 = Low priority
bit 4 U2RXIP: UART2 Receive Interrupt Priority bit
1 = High priority
0 = Low priority
bit 3 I2C2EIP: I2C2 Error Interrupt Priority bit
1 = High priority
0 = Low priority
bit 2 I2C2IP: I2C2 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 1 I2C2TXIP: I2C2 Transmit Interrupt Priority bit
1 = High priority
0 = Low priority
bit 0 I2C2RXIP: TMR4 Interrupt Priority bit
1 = High priority
0 = Low priority

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 154


PIC18(L)F25/26K83

REGISTER 9-31: IPR8: PERIPHERAL INTERRUPT PRIORITY REGISTER 8


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
TMR5IP INT2IP CLC2IP CWG2IP CCP2IP TMR4IP TMR3GIP TMR3IP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 TMR5IP: TMR5 Interrupt Priority bit


1 = High priority
0 = Low priority
bit 6 INT2IP: External Interrupt 2 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 5 CLC2IP: CLC2 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 4 CWG2IP: CWG2 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 3 CCP2IP: CCP2 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 2 TMR4IP: TMR4 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 1 TMR3GIP: TMR3 Gate Interrupt Priority bit
1 = High priority
0 = Low priority
bit 0 TMR3IP: TMR3 Interrupt Priority bit
1 = High priority
0 = Low priority

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 155


PIC18(L)F25/26K83

REGISTER 9-32: IPR9: PERIPHERAL INTERRUPT PRIORITY REGISTER 9


U-0 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
— CLC4IP CCP4IP CLC3IP CWG3IP CCP3IP TMR6IP TMR5GIP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 Unimplemented: Read as ‘0’


bit 6 CLC4IP: CLC4 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 5 CCP4IP: CCP4 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 4 CLC3IP: CLC3 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 3 CWG3IP: CWG3 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 2 CCP3IP: CCP3 Interrupt Priority bit
1 = High priority
0 = Low priority
bit 1 TMR6IP: TMR6IP Interrupt Priority bit
1 = High priority
0 = Low priority
bit 0 TMR5GIP: TMR5 Interrupt Priority bit
1 = High priority
0 = Low priority

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 156


PIC18(L)F25/26K83

REGISTER 9-33: IVTBASEU: INTERRUPT VECTOR TABLE BASE ADDRESS UPPER REGISTER
U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — BASE<20:16>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 BASE<20:16>: Interrupt Vector Table Base Address bits

REGISTER 9-34: IVTBASEH: INTERRUPT VECTOR TABLE BASE ADDRESS HIGH REGISTER
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
BASE<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 BASE<15:8>: Interrupt Vector Table Base Address bits

REGISTER 9-35: IVTBASEL: INTERRUPT VECTOR TABLE BASE ADDRESS LOW REGISTER
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-1/1 R/W-0/0 R/W-0/0 R/W-0/0
BASE<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 BASE<7:0>: Interrupt Vector Table Base Address bits

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 157


PIC18(L)F25/26K83

REGISTER 9-36: IVTADU: INTERRUPT VECTOR TABLE ADDRESS UPPER REGISTER


U-0 U-0 U-0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0
— — — AD<20:16>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 AD<20:16>: Interrupt Vector Table Address bits

REGISTER 9-37: IVTADH: INTERRUPT VECTOR TABLE ADDRESS HIGH REGISTER


R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0
AD<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 AD<15:8>: Interrupt Vector Table Address bits

REGISTER 9-38: IVTADL: INTERRUPT VECTOR TABLE ADDRESS LOW REGISTER


R-0/0 R-0/0 R-0/0 R-0/0 R-1/1 R-0/0 R-0/0 R-0/0
AD<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 AD<7:0>: Interrupt Vector Table Address bits

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 158


PIC18(L)F25/26K83

REGISTER 9-39: IVTLOCK: INTERRUPT VECTOR TABLE LOCK REGISTER


U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0/0
— — — — — — — IVTLOCKED(1,2)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-1 Unimplemented: Read as ‘0’


bit 0 IVTLOCKED: IVT Registers Lock bits(1,2)
1 = IVTBASE Registers are locked and cannot be written
0 = IVTBASE Registers can be modified by write operations

Note 1: The IVTLOCK bit can only be set or cleared after the unlock sequence in Example 9-1.
2: If IVT1WAY = 1, the IVTLOCK bit cannot be cleared after it has been set. See Register 5-3.

REGISTER 9-40: SHADCON: SHADOW CONTROL REGISTER


U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0/0
— — — — — — — SHADLO
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-1 Unimplemented: Read as ‘0’


bit 0 SHADLO: Interrupt Shadow Register Access Switch bit
0 = Access Main Context for Interrupt Shadow Registers
1 = Access Low-Priority Interrupt Context for Interrupt Shadow Registers

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 159


PIC18(L)F25/26K83

TABLE 9-3: SUMMARY OF REGISTERS ASSOCIATED WITH INTERRUPTS


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page
— —
INTCON0 GIE/GIEH GIEL IPEN INT2EDG INT1EDG INT0EDG 125
— — — — — — 126
INTCON1 STAT<1:0>
PIE0 IOCIE CRCIE SCANIE NVMIE CSWIE OSFIE HLVDIE SWIE 137
PIE1 SMT1PWAIE SMT1PRAIE SMT1IE C1IE ADTIE ADIE ZCDIE INT0IE 138
PIE2 I2C1RXIE SPI1IE SPI1TXIE SPI1RXIE DMA1AIE DMA1ORIE DMA1DCNTIE DMA1SCNTIE 139
PIE3 TMR0IE U1IE U1EIE U1TXIE U1RXIE I2C1EIE I2C1IE I2C1TXIE 140
PIE4 INT1IE CLC1IE CWG1IE NCO1IE CCP1IE TMR2IE TMR1GIE TMR1IFE 141
PIE5 IRXIE WAKIE ERRIE TXB2IE/TXBnIE TXB1IE TXB0IE RXB1IE/RXBnIE RXB0IE/FIFOFIE 142
PIE6 DMA2AIE DMA2ORIE DMA2DCNTIE DMA2SCNTIE SMT2PWAIE SMT2PRAIE SMT2IE C2IE 143
PIE7 U2IE U2EIE U2TXIE U2RXIE I2C2EIE I2C2IE I2C2TXIE I2C2RXIE 144
PIE8 TMR5IE INT2IE CLC2IE CWG2IE CCP2IE TMR4IE TMR3GIE TMR3IE 145
PIE9 — CLC4IE CCP4IE CLC3IE CWG3IE CCP3IE TMR6IE TMR5IE 146
PIR0 IOCIF CRCIF SCANIF NVMIF CSWIF OSFIF HLVDIF SWIF 127
PIR1 SMT1PWAIF SMT1PRAIF SMT1IF C1IF ADTIF ADIF ZCDIF INT0IF 128
PIR2 I2C1RXIF SPI1IF SPI1TXIF SPI1RXIF DMA1AIF DMA1ORIF DMA1DCNTIF DMA1SCNTIF 129
PIR3 TMR0IF U1IF U1EIF U1TXIF U1RXIF I2C1EIF I2C1IF I2C1TXIF 130
PIR4 INT1IF CLC1IF CWG1IF NCO1IF CCP1IF TMR2IF TMR1GIF TMR1IF 131
PIR5 IRXIF WAKIF ERRIF TXB2IF/TXBnIF TXB1IF TXB0IF RXB1IF/RXBnIF RXB0IF/FIFOFIF 132
PIR6 DMA2AIF DMA2ORIF DMA2DCNTIF DMA2SCNTIF SMT2PWAIF SMT2PRAIF SMT2IF C2IF 133
PIR7 U2IF U2EIF U2TXIF U2RXIF I2C2EIF I2C2IF I2C2TXIF I2C2RXIF 134
PIR8 TMR5IF INT2IF CLC2IF CWG2IF CCP2IF TMR4IF TMR3GIF TMR3IF 135
PIR9 — CLC4IF CCP4IF CLC3IF CWG3IF CCP3IF TMR6IF TMR5IF 136
IPR0 IOCIP CRCIP SCANIP NVMIP CSWIP OSFIP HLVDIP SWIP 147
IPR1 SMT1PWAIP SMT1PRAIP SMT1IP C1IP ADTIP ADIP ZCDIP INT0IP 148
IPR2 I2C1RIP SPI1IP SPI1TIP SPI1RIP DMA1AIP DMA1ORIP DMA1DCNTIP DMA1SCNTIP 149
IPR3 TMR0IP U1IP U1EIP U1TXIP U1RXIP I2C1EIP I2C1IP I2C1TXIP 150
IPR4 INT1IP CLC1IP CWG1IP NCO1IP CCP1IP TMR2IP TMR1GIP TMR1IP 151
IPR5 IRXIP WAKIP ERRIP TXB2IP/TXBnIP TXB1IP TXB0IP RXB1IP/RXBnIP RXB0IP/FIFOFIP 152
IPR6 DMA2AIP DMA2ORIP DMA2DCNTIP DMA2SCNTIP SMT2PWAIP SMT2PRAIP SMT2IP C2IP 153
IPR7 U2IP U2EIP U2TXIP U2RXIP I2C2EIP I2C2IP I2C2TXIP I2C2RXIP 154
IPR8 TMR5IP INT2IP CLC2IP CWG2IP CCP2IP TMR4IP TMR3GIP TMR3IP 155
IPR9 — CLC4IP CCP4IP CLC3IP CWG3IP CCP3IP TMR6IP TMR5IP 156

IVTBASEU — — BASE<20:16> 157
IVTBASEH BASE<15:8> 157
IVTBASEL BASE<7:0> 157
IVTADU — — — AD<20:16> 158
IVTADH AD<15:8> 158
IVTADL AD<7:0> 158
IVTLOCK — — — — — — — IVTLOCKED 159
Legend: — = unimplemented locations, read as ‘0’. Shaded bits are not used for interrupts.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 160


PIC18(L)F25/26K83
10.0 POWER-SAVING OPERATION ratio is 1:4. The CPU and memory execute for one
instruction cycle and then lay idle for three instruction
MODES
cycles. During the unused cycles, the peripherals
The purpose of the Power-Down modes is to reduce continue to operate at the system clock speed.
power consumption. There are three Power-Down
modes: 10.1.1 DOZE OPERATION
• Doze mode The Doze operation is illustrated in Figure 10-1. For
• Sleep mode this example:
• Idle mode • Doze enable (DOZEN) bit set (DOZEN = 1)
• DOZE<2:0> = 001 (1:4) ratio
10.1 Doze Mode • Recover-on-Interrupt (ROI) bit set (ROI = 1)
As with normal operation, the PFM fetches for the next
Doze mode allows for power saving by reducing CPU
instruction cycle. The Q-clocks to the peripherals
operation and program memory (PFM) access, without
continue throughout.
affecting peripheral operation. Doze mode differs from
Sleep mode because the bandgap and system
oscillators continue to operate, while only the CPU and
PFM are affected. The reduced execution saves power
by eliminating unnecessary operations within the CPU
and memory.
When the Doze Enable (DOZEN) bit is set
(DOZEN = 1), the CPU executes only one instruction
cycle out of every N cycles as defined by the
DOZE<2:0> bits of the CPUDOZE register. For
example, if DOZE<2:0> = 001, the instruction cycle

FIGURE 10-1: DOZE MODE OPERATION EXAMPLE (DOZE<2:0> = 001, 1:4)

FOSC

CPU Clocks 1 2 3 4 DOZE = 3’b001 (1:4) 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4

Program Counter Interrupt


PC-2 PC PC+2 ISR ISR+2
Vectoring

CPU Operation
Exec Exec Exec FNOP FNOP FNOP Exec Exec
(Note 1)
(Note 2)
Interrupt
Here
(ROI = ‘1’)
Note 1: Multicycle instructions are executed to completion before fetching the interrupt vector.
2: If the prefetched instruction clears the interrupt enable or GIEx, ISR vectoring will not occur, but DOZEN is
cleared and the CPU will resume execution at full speed.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 161


PIC18(L)F25/26K83
10.1.2 INTERRUPTS DURING DOZE 10.2 Sleep Mode
If an interrupt occurs and the Recover-On-Interrupt bit Sleep mode is entered by executing the SLEEP
is clear (ROI = 0) at the time of the interrupt, the instruction, while the Idle Enable (IDLEN) bit of the
Interrupt Service Routine (ISR) continues to execute at CPUDOZE register is clear (IDLEN = 0).
the rate selected by DOZE<2:0>. Interrupt latency is
extended by the DOZE<2:0> ratio. Upon entering Sleep mode, the following conditions
exist:
If an interrupt occurs and the ROI bit is set (ROI = 1) at
the time of the interrupt, the DOZEN bit is cleared and 1. WDT will be cleared but keeps running if
the CPU executes at full speed. The prefetched instruc- enabled for operation during Sleep
tion is executed and then the interrupt vector sequence 2. The PD bit of the STATUS register is cleared
is executed. In Figure 10-1, the interrupt occurs during (Register 4-2)
the 2nd instruction cycle of the Doze period, and imme- 3. The TO bit of the STATUS register is set
diately brings the CPU out of Doze. If the Doze-On-Exit (Register 4-2)
(DOE) bit is set (DOE = 1) when the RETFIE operation 4. The CPU clock is disabled
is executed, DOZEN is set, and the CPU executes at 5. LFINTOSC, SOSC, HFINTOSC and ADCRC
the reduced rate based on the DOZE<2:0> ratio. are unaffected and peripherals using them may
continue operation in Sleep.
EXAMPLE 10-1: DOZE SOFTWARE 6. I/O ports maintain the status they had before
EXAMPLE Sleep was executed (driving high, low, or high-
impedance)
//Mainline operation
7. Resets other than WDT are not affected by
bool somethingToDo = FALSE:
void main()
Sleep mode
{ Refer to individual chapters for more details on
initializeSystem(); peripheral operation during Sleep.
// DOZE = 64:1 (for example)
// ROI = 1; To minimize current consumption, the following
GIE = 1; // enable interrupts conditions should be considered:
while (1) - I/O pins should not be floating
{
- External circuitry sinking current from I/O pins
// If ADC completed, process data
- Internal circuitry sourcing current from I/O
if (somethingToDo)
{
pins
doSomething(); - Current draw from pins with internal weak
DOZEN = 1; // resume low-power pull-ups
} - Modules using any oscillator
} I/O pins that are high-impedance inputs should be
}
pulled to VDD or VSS externally to avoid switching
// Data interrupt handler
currents caused by floating inputs.
void interrupt() Examples of internal circuitry that might be sourcing
{ current include modules such as the DAC and FVR
// DOZEN = 0 because ROI = 1 modules. See Section 38.0 “5-Bit Digital-to-Analog
if (ADIF) Converter (DAC) Module” and Section 35.0 “Fixed
{
Voltage Reference (FVR)” for more information on
somethingToDo = TRUE;
DOE = 0; // make main() go fast
these modules.
ADIF = 0;
}
// else check other interrupts...
if (TMR0IF)
{
timerTick++;
DOE = 1; // make main() go slow
TMR0IF = 0;
}
}

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 162


PIC18(L)F25/26K83
10.2.1 WAKE-UP FROM SLEEP 10.2.2 WAKE-UP USING INTERRUPTS
The device can wake up from Sleep through one of the When any interrupt source, with the exception of the
following events: clock switch interrupt, has both its interrupt enable bit
1. External Reset input on MCLR pin, if enabled and interrupt flag bit set, one of the following will occur:
2. BOR Reset, if enabled • If the interrupt occurs before the execution of a
3. Low-Power Brown-Out Reset (LPBOR), if SLEEP instruction
enabled - SLEEP instruction will execute as a NOP
4. POR Reset - WDT and WDT prescaler will not be cleared
5. Windowed Watchdog Timer, if enabled - TO bit of the STATUS register will not be set
6. All interrupt sources except clock switch - PD bit of the STATUS register will not be
interrupt can wake up the part. cleared
The first five events will cause a device Reset. The last • If the interrupt occurs during or after the
one event is considered a continuation of program execution of a SLEEP instruction
execution. To determine whether a device Reset or - SLEEP instruction will be completely
wake-up event occurred, refer to Section 6.13 “Power executed
Control (PCON0/PCON1) Register”. - Device will immediately wake-up from Sleep
When the SLEEP instruction is being executed, the next - WDT and WDT prescaler will be cleared
instruction (PC + 2) is prefetched. For the device to - TO bit of the STATUS register will be set
wake-up through an interrupt event, the corresponding - PD bit of the STATUS register will be cleared
Interrupt Enable bit must be enabled. Wake-up will
Even if the flag bits were checked before executing a
occur regardless of the state of the GIE bit. If the GIE
SLEEP instruction, it may be possible for flag bits to
bit is disabled, the device continues execution at the
become set before the SLEEP instruction completes. To
instruction after the SLEEP instruction. If the GIE bit is
determine whether a SLEEP instruction executed, test
enabled, the device executes the instruction after the
the PD bit. If the PD bit is set, the SLEEP instruction
SLEEP instruction, the device will then call the Interrupt
was executed as a NOP.
Service Routine. In cases where the execution of the
instruction following SLEEP is not desirable, the user
should have a NOP after the SLEEP instruction.
The WDT is cleared when the device wakes-up from
Sleep, regardless of the source of wake-up.
Upon a wake from a Sleep event, the core will wait for
a combination of three conditions before beginning
execution. The conditions are:
• PFM Ready
• COSC-Selected Oscillator Ready
• BOR Ready (unless BOR is disabled)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 163


PIC18(L)F25/26K83
FIGURE 10-2: WAKE-UP FROM SLEEP THROUGH INTERRUPT

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
CLKIN(1)
CLKOUT(2) TOST(3)

Interrupt flag Interrupt Latency (4)

GIE bit
(INTCON reg.) Processor in
Sleep

Instruction Flow
PC PC PC + 1 PC + 2 PC + 2 PC + 2 0004h 0005h
Instruction Inst(PC + 1) Inst(PC + 2) Inst(0004h) Inst(0005h)
Fetched Inst(PC) = Sleep
Instruction Sleep Inst(PC + 1) Forced NOP Forced NOP
Executed Inst(PC - 1) Inst(0004h)

Note 1: External clock. High, Medium, Low mode assumed.


2: CLKOUT is shown here for timing reference.
3: TOST = 1024 TOSC. This delay does not apply to EC and INTOSC Oscillator modes.
4: GIE = 1 assumed. In this case after wake-up, the processor calls the ISR at 0004h. If GIE = 0, execution will continue in-line.

10.2.3 LOW-POWER SLEEP MODE 10.2.3.1 Sleep Current vs. Wake-up Time
The PIC18F25/26K83 device family contains an In the default operating mode, the LDO and reference
internal Low Dropout (LDO) voltage regulator, which circuitry remain in the normal configuration while in
allows the device I/O pins to operate at voltages up to Sleep. The device is able to exit Sleep mode quickly
5.5V while the internal device logic operates at a lower since all circuits remain active. In Low-Power Sleep
voltage. The LDO and its associated reference circuitry mode, when waking-up from Sleep, an extra delay time
must remain active when the device is in Sleep mode. is required for these circuits to return to the normal
The PIC18F25/26K83 devices allows the user to configuration and stabilize.
optimize the operating current in Sleep, depending on The Low-Power Sleep mode is beneficial for
the application requirements. applications that stay in Sleep mode for long periods of
time. The Normal mode is beneficial for applications
Low-Power Sleep mode can be selected by setting the
that need to wake from Sleep quickly and frequently.
VREGPM bit of the VREGCON register.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 164


PIC18(L)F25/26K83
10.2.3.2 Peripheral Usage in Sleep 10.2.4.1 Idle and Interrupts
Some peripherals that can operate in Sleep mode will IDLE mode ends when an interrupt occurs (even if GIE
not operate properly with the Low-Power Sleep mode = 0), but IDLEN is not changed. The device can re-
selected. The Low-Power Sleep mode is intended for enter IDLE by executing the SLEEP instruction.
use with these peripherals: If Recover-On-Interrupt is enabled (ROI = 1), the
• Brown-out Reset (BOR) interrupt that brings the device out of Idle also restores
• Windowed Watchdog Timer (WWDT) full-speed CPU execution when doze is also enabled.
• External interrupt pin/Interrupt-On-Change pins
• Peripherals that run off external secondary clock 10.2.4.2 Idle and WWDT
source When in Idle, the WWDT Reset is blocked and will
It is the responsibility of the end user to determine what instead wake the device. The WWDT wake-up is not an
is acceptable for their application when setting the interrupt, therefore ROI does not apply.
VREGPM settings in order to ensure operation in
Sleep.
Note: The WDT can bring the device out of Idle,
in the same way it brings the device out of
Note: The PIC18LF25/26K83 devices do not Sleep. The DOZEN bit is not affected.
have a configurable Low-Power Sleep
mode. PIC18LF25/26K83 devices are 10.3 Peripheral Operation in Power
unregulated and are always in the lowest
Saving Modes
power state when in Sleep, with no wake-
up time penalty. These devices have a All selected clock sources and the peripherals running
lower maximum VDD and I/O voltage than off them are active in both IDLE and DOZE mode. Only
the PIC18F25/26K83 devices. See Sec- in Sleep mode, both the FOSC and FOSC/4 clocks are
tion 45.0 “Electrical Specifications” for unavailable. All the other clock sources are active, if
more information. enabled manually or through peripheral clock selection
before the part enters Sleep.
10.2.4 IDLE MODE
When IDLEN is set (IDLEN = 1), the SLEEP instruction
will put the device into Idle mode. In Idle mode, the
CPU and memory operations are halted, but the
peripheral clocks continue to run. This mode is similar
to Doze mode, except that in IDLE both the CPU and
PFM are shut off.

Note: If CLKOUTEN is enabled (CLKOUTEN = 0,


Configuration Word 1H), the output will con-
tinue operating while in Idle.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 165


PIC18(L)F25/26K83
10.4 Register Definitions: Voltage Regulator Control

REGISTER 10-1: VREGCON: VOLTAGE REGULATOR CONTROL REGISTER(1)


U-0 U-0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-1/1
— — — — — — VREGPM Reserved
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-2 Unimplemented: Read as ‘0’


bit 1 VREGPM: Voltage Regulator Power Mode Selection bit
1 = Low-Power Sleep mode enabled in Sleep(2)
Draws lowest current in Sleep, slower wake-up
0 = Normal Power mode enabled in Sleep(2)
Draws higher current in Sleep, faster wake-up
bit 0 Reserved: Read as ‘1’. Maintain this bit set.

Note 1: Not present in LF parts.


2: See Section 45.0 “Electrical Specifications”.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 166


PIC18(L)F25/26K83
REGISTER 10-2: CPUDOZE: DOZE AND IDLE REGISTER
R/W-0/u R/W/HC/HS-0/0 R/W-0/0 R/W-0/0 U-0 R/W-0/0 R/W-0/0 R/W-0/0
IDLEN DOZEN ROI DOE — DOZE<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other
Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HC = Bit is cleared by hardware

bit 7 IDLEN: Idle Enable bit


1 = A SLEEP instruction inhibits the CPU clock, but not the peripheral clock(s)
0 = A SLEEP instruction places the device into full Sleep mode
bit 6 DOZEN: Doze Enable bit(1,2)
1 = The CPU executes instruction cycles according to DOZE setting
0 = The CPU executes all instruction cycles (fastest, highest power operation)
bit 5 ROI: Recover-On-Interrupt bit
1 = Entering the Interrupt Service Routine (ISR) makes DOZEN = 0 bit, bringing the CPU to full-speed
operation
0 = Interrupt entry does not change DOZEN
bit 4 DOE: Doze-On-Exit bit
1 = Executing RETFIE makes DOZEN = 1, bringing the CPU to reduced speed operation
0 = RETFIE does not change DOZEN
bit 3 Unimplemented: Read as ‘0’
bit 2-0 DOZE<2:0>: Ratio of CPU Instruction Cycles to Peripheral Instruction Cycles
111 =1:256
110 =1:128
101 =1:64
100 =1:32
011 =1:16
010 =1:8
001 =1:4
000 =1:2

Note 1: When ROI = 1 or DOE = 1, DOZEN is changed by hardware interrupt entry and/or exit.
2: Entering ICD overrides DOZEN, returning the CPU to full execution speed; this bit is not affected.

TABLE 10-1: SUMMARY OF REGISTERS ASSOCIATED WITH POWER-DOWN MODE


Register on
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Page

VREGCON(1) — — — — — — VREGPM Reserved 166


CPUDOZE IDLEN DOZEN ROI DOE — DOZE<2:0> 167
Legend: — = unimplemented location, read as ‘0’. Shaded cells are not used in Power-Down mode.
Note 1: Not present in LF parts.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 167


PIC18(L)F25/26K83
11.0 WINDOWED WATCHDOG
TIMER (WWDT)
The Watchdog Timer (WDT) is a system timer that
generates a Reset if the firmware does not issue a
CLRWDT instruction within the time-out period. The
Watchdog Timer is typically used to recover the system
from unexpected events. The Windowed Watchdog
Timer (WWDT) differs in that CLRWDT instructions are
only accepted when they are performed within a
specific window during the time-out period.
The WWDT has the following features:
• Selectable clock source
• Multiple operating modes
- WWDT is always On
- WWDT is off when in Sleep
- WWDT is controlled by software
- WWDT is always Off
• Configurable time-out period is from 1 ms to 256s
(nominal)
• Configurable window size from 12.5% to 100% of
the time-out period
• Multiple Reset conditions

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 168


PIC18(L)F25/26K83
FIGURE 11-1: WINDOWED WATCHDOG TIMER BLOCK DIAGRAM
Rev. 10-000162D
1/27/2017

WWDT
Armed
WDT
Window
Violation
Window Closed
Window
Comparator
CLRWDT Sizes

WINDOW

RESET

Reserved 111
Reserved 110
Reserved 101
R
Reserved 100 18-bit Prescale
Reserved 011 Counter
E
SOSC 010
MFINTOSC 31.25 kHz 001
LFINTOSC 000

CS

PS

R
5-bit Overflow
WDT Time-out
WDT Counter Latch

WDTE<1:0> = 01
SEN

WDTE<1:0> = 11

WDTE<1:0> = 10
Sleep

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 169


PIC18(L)F25/26K83
11.1 Independent Clock Source 11.3 Time-out Period
The WWDT can derive its time base from either the If the WDTCPS<4:0> Configuration bits default to
31 kHz LFINTOSC or 31.25 kHz MFINTOSC internal 0b11111, then the PS bits of the WDTCON0 register
oscillators, depending on the value of WDTE<1:0> set the time-out period from 1 ms to 256 seconds
Configuration bits. (nominal). If any value other than the default value is
If WDTE = 0b1x, then the clock source will be enabled assigned to WDTCPS<4:0> Configuration bits, then
depending on the WDTCCS<2:0> Configuration bits. the timer period will be based on the WDTCPS<4:0>
bits in the CONFIG3L register. After a Reset, the
If WDTE = 0b01, the SEN bit should be set by software default time-out period is 2s.
to enable WWDT, and the clock source is enabled by
the CS bits in the WDTCON1 register.
11.4 Watchdog Window
Time intervals in this chapter are based on a minimum
nominal interval of 1 ms. See Section 45.0 “Electrical The Windowed Watchdog Timer has an optional
Specifications” for LFINTOSC and MFINTOSC Windowed mode that is controlled by the
tolerances. WDTCWS<2:0> Configuration bits and WINDOW<2:0>
bits of the WDTCON1 register. In the Windowed mode,
the CLRWDT instruction must occur within the allowed
11.2 WWDT Operating Modes
window of the WDT period. Any CLRWDT instruction that
The Windowed Watchdog Timer module has four occurs outside of this window will trigger a window
operating modes controlled by the WDTE<1:0> bits in violation and will cause a WWDT Reset, similar to a
Configuration Words. See Table 11-1. WWDT time out. See Figure 11-2 for an example.
The window size is controlled by the WINDOW<2:0>
11.2.1 WWDT IS ALWAYS ON Configuration bits, or the WINDOW<2:0> bits of
When the WDTE bits of Configuration Words are set to WDTCON1, if WDTCWS<2:0> = 111.
‘11’, the WWDT is always on. The five Most Significant bits of the WDTTMR register
WWDT protection is active during Sleep. are used to determine whether the window is open, as
defined by the WINDOW<2:0> bits of the WDTCON1
11.2.2 WWDT IS OFF IN SLEEP register.
When the WDTE bits of Configuration Words are set to In the event of a window violation, a Reset will be
‘10’, the WWDT is on, except in Sleep. generated and the WDTWV bit of the PCON0 register
WWDT protection is not active during Sleep. will be cleared. This bit is set by a POR or can be set in
firmware.
11.2.3 WWDT CONTROLLED BY
SOFTWARE 11.5 Clearing the WWDT
When the WDTE bits of Configuration Words are set to The WWDT is cleared when any of the following
‘01’, the WWDT is controlled by the SEN bit of the conditions occur:
WDTCON0 register.
• Any Reset
WWDT protection is unchanged by Sleep. See • Valid CLRWDT instruction is executed
Table 11-1 for more details.
• Device enters Sleep
• Exit Sleep by Interrupt
TABLE 11-1: WWDT OPERATING MODES • WWDT is disabled
Device WWDT • Oscillator Start-up Timer (OST) is running
WDTE<1:0> SEN
Mode Mode • Any write to the WDTCON0 or WDTCON1
11 X X Active registers
Awake Active 11.5.1 CLRWDT CONSIDERATIONS
10 X
Sleep Disabled (WINDOWED MODE)
1 X Active When in Windowed mode, the WWDT must be armed
01
0 X Disabled before a CLRWDT instruction will clear the timer. This is
00 X X Disabled performed by reading the WDTCON0 register.
Executing a CLRWDT instruction without performing
such an arming action will trigger a window violation
regardless of whether the window is open or not.
See Table 11-2 for more information.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 170


PIC18(L)F25/26K83
11.6 Operation During Sleep
When the device enters Sleep, the WWDT is cleared.
If the WWDT is enabled during Sleep, the WWDT
resumes counting. When the device exits Sleep, the
WWDT is cleared again.
The WWDT remains clear until the Oscillator Start-up
Timer (OST) completes, if enabled. See Section
7.2.1.3 “Oscillator Start-up Timer (OST)” for more
information on the OST.
When a WWDT time-out occurs while the device is in
Sleep, no Reset is generated. Instead, the device
wakes up and resumes operation. The TO and PD bits
in the STATUS register are changed to indicate the
event. The RWDT bit in the PCON0 register can also be
used. See Section 4.0 “Memory Organization” for
more information.

TABLE 11-2: WWDT CLEARING CONDITIONS


Conditions WWDT
WDTE<1:0> = 00
WDTE<1:0> = 01 and SEN = 0
WDTE<1:0> = 10 and enter Sleep
Cleared
CLRWDT Command
Oscillator Fail Detected
Exit Sleep + System Clock = SOSC, EXTRC, INTOSC, EXTCLK
Exit Sleep + System Clock = XT, HS, LP Cleared until the end of OST
Change INTOSC divider (IRCF bits) Unaffected

FIGURE 11-2: WINDOW PERIOD AND DELAY

Rev. 10-000 163A


11/8/201 3

CLRWDT Instruction
(or other WDT reset)
Window Period

Window Closed Window Open

Window Delay Time-out Event


(window violation can occur)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 171


PIC18(L)F25/26K83
11.7 Register Definitions: Windowed Watchdog Timer Control

REGISTER 11-1: WDTCON0: WATCHDOG TIMER CONTROL REGISTER 0


U-0 U-0 R/W(3)-q/q(2) R/W(3)-q/q(2) R/W(3)-q/q(2) R/W(3)-q/q(2) R/W(3)-q/q(2) R/W-0/0
— —
PS<4:0> SEN
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7-6 Unimplemented: Read as ‘0’


bit 5-1 PS<4:0>: Watchdog Timer Prescale Select bits(1)
Bit Value = Prescale Rate
11111 = Reserved. Results in minimum interval (1:32)



10011 = Reserved. Results in minimum interval (1:32)

10010 = 1:8388608 (223) (Interval 256s nominal)


10001 = 1:4194304 (222) (Interval 128s nominal)
10000 = 1:2097152 (221) (Interval 64s nominal)
01111 = 1:1048576 (220) (Interval 32s nominal)
01110 = 1:524288 (219) (Interval 16s nominal)
01101 = 1:262144 (218) (Interval 8s nominal)
01100 = 1:131072 (217) (Interval 4s nominal)
01011 = 1:65536 (Interval 2s nominal) (Reset value)
01010 = 1:32768 (Interval 1s nominal)
01001 = 1:16384 (Interval 512 ms nominal)
01000 = 1:8192 (Interval 256 ms nominal)
00111 = 1:4096 (Interval 128 ms nominal)
00110 = 1:2048 (Interval 64 ms nominal)
00101 = 1:1024 (Interval 32 ms nominal)
00100 = 1:512 (Interval 16 ms nominal)
00011 = 1:256 (Interval 8 ms nominal)
00010 = 1:128 (Interval 4 ms nominal)
00001 = 1:64 (Interval 2 ms nominal)
00000 = 1:32 (Interval 1 ms nominal)
bit 0 SEN: Software Enable/Disable for Watchdog Timer bit
If WDTE<1:0> = 1x:
This bit is ignored.
If WDTE<1:0> = 01:
1 = WDT is turned on
0 = WDT is turned off
If WDTE<1:0> = 00:
This bit is ignored.

Note 1: Times are approximate. WDT time is based on 31 kHz LFINTOSC.


2: When WDTCPS <4:0> in CONFIG3L = 11111, the Reset value of PS<4:0> is 01011. Otherwise, the Reset value of
PS<4:0> is equal to WDTCPS<4:0> in CONFIG3L.
3: When WDTCPS <4:0> in CONFIG3L ≠ 11111, these bits are read-only.
4: When the WWDT is configured to run using the SOSC as a clock source and the device is allowed to undergo a Reset,
as triggered by a WDT time-out, the SOSC would also undergo a Reset. That means the SOSC will execute its start-up
sequence which requires 1024 SOSC clock counts before it is made available for peripherals to use. So for example, if
the WDT is set for a 1 ms time-out and the device is allowed to undergo a WDT Reset, then the actual WDT Reset
period will be: WDT_PERIOD = (1/(SOSC_FREQUENCY) * 1024) + 1 ms.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 172


PIC18(L)F25/26K83

REGISTER 11-2: WDTCON1: WATCHDOG TIMER CONTROL REGISTER 1


U-0 R/W -q/q(1) R/W(3)-q/q(1) R/W(3)-q/q(1)
(3)
U-0 R/W(4)-q/q(2) R/W(4)-q/q(2) R/W(4)-q/q(2)
— —
CS<2:0> WINDOW<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 Unimplemented: Read as ‘0’


bit 6-4 CS<2:0>: Watchdog Timer Clock Select bits
111 = Reserved



011 = Reserved
010 = SOSC
001 = MFINTOSC 31.25 kHz
000 = LFINTOSC 31 kHz
bit 3 Unimplemented: Read as ‘0’
bit 2-0 WINDOW<2:0>: Watchdog Timer Window Select bits

WINDOW<2:0> Window delay Window opening


Percent of time Percent of time
111 N/A 100
110 12.5 87.5
101 25 75
100 37.5 62.5
011 50 50
010 62.5 37.5
001 75 25
000 87.5 12.5

Note 1: If WDTCCS <2:0> in CONFIG3H = 111, the Reset value of CS<2:0> is 000.
2: The Reset value of WINDOW<2:0> is determined by the value of WDTCWS<2:0> in the CONFIG3H
register.
3: If WDTCCS<2:0> in CONFIG3H ≠ 111, these bits are read-only.
4: If WDTCWS<2:0> in CONFIG3H ≠ 111, these bits are read-only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 173


PIC18(L)F25/26K83

REGISTER 11-3: WDTPSL: WWDT PRESCALE SELECT LOW BYTE REGISTER (READ-ONLY)
R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0
PSCNT<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 PSCNT<7:0>: Prescale Select Low Byte bits(1)

Note 1: The 18-bit WDT prescale value, PSCNT<17:0> includes the WDTPSL, WDTPSH and the lower bits of the
WDTTMR registers. PSCNT<17:0> is intended for debug operations and should not be read during
normal operation.

REGISTER 11-4: WDTPSH: WWDT PRESCALE SELECT HIGH BYTE REGISTER (READ-ONLY)
R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0
PSCNT<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 PSCNT<15:8>: Prescale Select High Byte bits(1)

Note 1: The 18-bit WDT prescale value, PSCNT<17:0> includes the WDTPSL, WDTPSH and the lower bits of the
WDTTMR registers. PSCNT<17:0> is intended for debug operations and should not be read during
normal operation.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 174


PIC18(L)F25/26K83

REGISTER 11-5: WDTTMR: WDT TIMER REGISTER (READ-ONLY)


R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0
WDTTMR<4:0> STATE PSCNT<17:16>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-3 WDTTMR<4:0>: Watchdog Window Value bits

WDT Window State


WINDOW Open Percent
Closed Open
111 N/A 00000-11111 100
110 00000-00011 00100-11111 87.5
101 00000-00111 01000-11111 75
100 00000-01011 01100-11111 62.5
011 00000-01111 10000-11111 50
010 00000-10011 10100-11111 37.5
001 00000-10111 11000-11111 25
000 00000-11011 11100-11111 12.5

bit 2 STATE: WDT Armed Status bit


1 = WDT is armed
0 = WDT is not armed
bit 1-0 PSCNT<17:16>: Prescale Select Upper Byte bits(1)

Note 1: The 18-bit WDT prescale value, PSCNT<17:0> includes the WDTPSL, WDTPSH and the lower bits of the
WDTTMR registers. PSCNT<17:0> is intended for debug operations and should not be read during
normal operation.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 175


PIC18(L)F25/26K83

TABLE 11-3: SUMMARY OF REGISTERS ASSOCIATED WITH WINDOWED WATCHDOG TIMER


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page

WDTCON0 — — PS<4:0> SEN 172


WDTCON1 — CS<2:0> — WINDOW<2:0> 173
WDTPSL PSCNT<7:0> 174
WDTPSH PSCNT<15:8> 174
WDTTMR WDTTMR<4:0> STATE PSCNT<17:16> 175
Legend: x = unknown, u = unchanged, – = unimplemented locations read as ‘0’. Shaded cells are not used by
Windowed Watchdog Timer.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 176


PIC18(L)F25/26K83
12.0 8x8 HARDWARE MULTIPLIER EXAMPLE 12-1: 8x8 UNSIGNED MULTIPLY
ROUTINE
12.1 Introduction MOVF ARG1, W ;
MULWF ARG2 ; ARG1 * ARG2 ->
All PIC18 devices include an 8x8 hardware multiplier ; PRODH:PRODL
as part of the ALU. The multiplier performs an unsigned
operation and yields a 16-bit result that is stored in the
product register pair, PRODH:PRODL. The multiplier’s EXAMPLE 12-2: 8x8 SIGNED MULTIPLY
operation does not affect any flags in the STATUS ROUTINE
register.
MOVF ARG1, W
Making multiplication a hardware operation allows it to MULWF ARG2 ; ARG1 * ARG2 ->
be completed in a single instruction cycle. This has the ; PRODH:PRODL
advantages of higher computational throughput and BTFSC ARG2, SB ; Test Sign Bit
reduced code size for multiplication algorithms and SUBWF PRODH, F ; PRODH = PRODH
allows the PIC18 devices to be used in many applica- ; - ARG1
tions previously reserved for digital signal processors. MOVF ARG2, W
BTFSC ARG1, SB ; Test Sign Bit
A comparison of various hardware and software
SUBWF PRODH, F ; PRODH = PRODH
multiply operations, along with the savings in memory ; - ARG2
and execution time, is shown in Table 12-1.

12.2 Operation
Example 12-1 shows the instruction sequence for an
8x8 unsigned multiplication. Only one instruction is
required when one of the arguments is already loaded in
the WREG register.
Example 12-2 shows the sequence to do an 8x8 signed
multiplication. To account for the sign bits of the
arguments, each argument’s Most Significant bit (MSb)
is tested and the appropriate subtractions are done.

TABLE 12-1: PERFORMANCE COMPARISON FOR VARIOUS MULTIPLY OPERATIONS


Program Time
Cycles
Routine Multiply Method Memory
(Max) @ 64 MHz @ 40 MHz @ 10 MHz @ 4 MHz
(Words)
Without hardware multiply 13 69 4.3 s 6.9 s 27.6 s 69 s
8x8 unsigned
Hardware multiply 1 1 62.5 ns 100 ns 400 ns 1 s
Without hardware multiply 33 91 5.7 s 9.1 s 36.4 s 91 s
8x8 signed
Hardware multiply 6 6 375 ns 600 ns 2.4 s 6 s
Without hardware multiply 21 242 15.1 s 24.2 s 96.8 s 242 s
16x16 unsigned
Hardware multiply 28 28 1.8 s 2.8 s 11.2 s 28 s
Without hardware multiply 52 254 15.9 s 25.4 s 102.6 s 254 s
16x16 signed
Hardware multiply 35 40 2.5 s 4.0 s 16.0 s 40 s

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 177


PIC18(L)F25/26K83
Example 12-3 shows the sequence to do a 16 x 16 EXAMPLE 12-4: 16 x 16 SIGNED
unsigned multiplication. Equation 12-1 shows the MULTIPLY ROUTINE
algorithm that is used. The 32-bit result is stored in four MOVF ARG1L, W
registers (RES<3:0>). MULWF ARG2L ; ARG1L * ARG2L ->
; PRODH:PRODL
MOVFF PRODH, RES1 ;
EQUATION 12-1: 16 x 16 UNSIGNED MOVFF PRODL, RES0 ;
MULTIPLICATION ;
MOVF ARG1H, W
ALGORITHM MULWF ARG2H ; ARG1H * ARG2H ->
; PRODH:PRODL
RES3:RES0 = ARG1H:ARG1L  ARG2H:ARG2L MOVFF PRODH, RES3 ;
= (ARG1H  ARG2H  216) + MOVFF PRODL, RES2 ;
(ARG1H  ARG2L  28) + ;
(ARG1L  ARG2H  28) + MOVF ARG1L, W
MULWF ARG2H ; ARG1L * ARG2H ->
(ARG1L  ARG2L) ; PRODH:PRODL
MOVF PRODL, W ;
ADDWF RES1, F ; Add cross
EXAMPLE 12-3: 16 x 16 UNSIGNED MOVF PRODH, W ; products
MULTIPLY ROUTINE ADDWFC
CLRF
RES2, F
WREG
;
;
MOVF ARG1L, W ADDWFC RES3, F ;
MULWF ARG2L ; ARG1L * ARG2L-> ;
; PRODH:PRODL MOVF ARG1H, W ;
MOVFF PRODH, RES1 ; MULWF ARG2L ; ARG1H * ARG2L ->
MOVFF PRODL, RES0 ; ; PRODH:PRODL
; MOVF PRODL, W ;
MOVF ARG1H, W ADDWF RES1, F ; Add cross
MULWF ARG2H ; ARG1H * ARG2H-> MOVF PRODH, W ; products
; PRODH:PRODL ADDWFC RES2, F ;
MOVFF PRODH, RES3 ; CLRF WREG ;
MOVFF PRODL, RES2 ; ADDWFC RES3, F ;
; ;
MOVF ARG1L, W BTFSS ARG2H, 7 ; ARG2H:ARG2L neg?
MULWF ARG2H ; ARG1L * ARG2H-> BRA SIGN_ARG1 ; no, check ARG1
; PRODH:PRODL MOVF ARG1L, W ;
MOVF PRODL, W ; SUBWF RES2 ;
ADDWF RES1, F ; Add cross MOVF ARG1H, W ;
MOVF PRODH, W ; products SUBWFB RES3
ADDWFC RES2, F ; ;
CLRF WREG ; SIGN_ARG1
ADDWFC RES3, F ; BTFSS ARG1H, 7 ; ARG1H:ARG1L neg?
; BRA CONT_CODE ; no, done
MOVF ARG1H, W ; MOVF ARG2L, W ;
MULWF ARG2L ; ARG1H * ARG2L-> SUBWF RES2 ;
; PRODH:PRODL MOVF ARG2H, W ;
MOVF PRODL, W ; SUBWFB RES3
ADDWF RES1, F ; Add cross ;
MOVF PRODH, W ; products CONT_CODE
ADDWFC RES2, F ; :
CLRF WREG ;
ADDWFC RES3, F ;

Example 12-4 shows the sequence to do a 16 x 16


signed multiply. Equation 12-2 shows the algorithm
used. The 32-bit result is stored in four registers
(RES<3:0>). To account for the sign bits of the argu-
ments, the MSb for each argument pair is tested and
the appropriate subtractions are done.

EQUATION 12-2: 16 x 16 SIGNED


MULTIPLICATION
ALGORITHM
RES3:RES0 = ARG1H:ARG1L  ARG2H:ARG2L
= (ARG1H  ARG2H  216) +
(ARG1H  ARG2L  28) +
(ARG1L  ARG2H  28) +
(ARG1L  ARG2L) +
(-1  ARG2H<7>  ARG1H:ARG1L  216) +
(-1  ARG1H<7>  ARG2H:ARG2L  216)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 178


PIC18(L)F25/26K83
13.0 NONVOLATILE MEMORY NVM can be protected in two ways, by either code
protection or write protection. Code protection (CP and
(NVM) CONTROL CPD bits in Configuration Word 5L) disables access,
Nonvolatile Memory (NVM) is separated into two types: reading and writing to both PFM and Data EEPROM
Program Flash Memory (PFM) and Data EEPROM Memory via external device programmers. Code
Memory. protection does not affect the self-write and erase
functionality. Code protection can only be reset by a
PFM, Data EEPROM, User IDs and Configuration bits
device programmer performing a Bulk Erase to the
can all be accessed using the REG<1:0> bits of the
device, clearing all nonvolatile memory, Configuration
NVMCON1 register.
bits and User IDs.
The write time is controlled by an on-chip timer. The
Write protection prohibits self-write and erase to a
write/erase voltages are generated by an on-chip
portion or all of the PFM, as defined by the WRT bits of
charge pump rated to operate over the operating
Configuration Word 4H. Write protection does not affect
voltage range of the device.
a device programmer’s ability to read, write or erase
the device.

TABLE 13-1: NVM ORGANIZATION AND ACCESS INFORMATION


PC<20:0> Execution User Access
ICSP™ Addr<21:0>
Memory CPU
TBLPTR<21:0> REG TABLAT NVMDAT
NVMADDR<9:0> Execution

00 0000h
Program Flash Memory Read/
••• Read 10 —(3)
(PFM) Write(1)
01 FFFFh
20 0000h
Read/
User IDs(2) ••• No Access x1 —(3)
Write
20 000Fh
20 0010h
Reserved No Access —(3)
2F FFFFh
30 0000h
Read/
Configuration ••• No Access x1 —(3)
Write(1)
30 0009h
30 000Ah
Reserved No Access —(3)
30 FFFFh
31 0000h
User Data Memory Read/
••• No Access 00 —(3)
(Data EEPROM) Write(1)
31 03FFh
31 0400h
Reserved No Access —(3)
3E FFFFh
3F 0000h
Device Information Area
••• No Access x1 Read —(3)
(DIA)
3F 003Fh
3F 0040h
Reserved No Access —(3)
3F FF09h
3F FF00h
Device Configuration Information
••• No Access x1 Read —(3)
(DCI)
3F FF09h
3F FF0Ah
Reserved No Access —(3)
3F FFFBh
3F FFFCh
Revision ID/
••• No Access x1 Read —(3)
Device ID
3F FFFFh

Note 1: Subject to Memory Write Protection settings.


2: User IDs are eight words ONLY. There is no code protection, table read protection or write protection implemented for this
region.
3: Reads as ‘0’, writes clear the WR bit and WRERR bit is set.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 179


PIC18(L)F25/26K83
13.1 Program Flash Memory rows. A row is the minimum size that can be erased by
user software. Refer to Table 5-4 for the row sizes for
The Program Flash Memory is readable, writable and the these devices.
erasable during normal operation over the entire VDD
range. After a row has been erased, all or a portion of this row
can be programmed. Data to be written into the
A read from program memory is executed one byte at program memory row is written to 8-bit wide data write
a time. A write to program memory or program memory latches by means of 6 address lines. These latches are
erase is executed on blocks of n bytes at a time. Refer not directly accessible, but may be loaded via
to Table 5-4 for write and erase block sizes. A Bulk sequential writes to the TABLAT register.
Erase operation cannot be issued from user code.
Writing or erasing program memory will cease
instruction fetches until the operation is complete. The Note: To modify only a portion of a previously
program memory cannot be accessed during the write programmed row, then the contents of the
or erase, therefore, code cannot execute. An internal entire row must be read and saved in
programming timer terminates program memory writes RAM prior to the erase. Then, the new
and erases. data and retained data can be written into
the write latches to reprogram the row of
A value written to program memory does not need to be PFM. However, any unprogrammed
a valid instruction. Executing a program memory locations can be written without first
location that forms an invalid instruction results in a erasing the row. In this case, it is not
NOP. necessary to save and rewrite the other
It is important to understand the PFM memory structure previously programmed locations
for erase and programming operations. Program
memory word size is 16 bits wide. PFM is arranged in

TABLE 13-2: FLASH MEMORY ORGANIZATION BY DEVICE


Row Erase Size Write Latches Program Flash
Device Data Memory (Bytes)
(Words) (Bytes) Memory (Words)
PIC18(L)F25K83 64 128 16384 1024
PIC18(L)F26K83 64 128 32768 1024

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 180


PIC18(L)F25/26K83
13.1.1 TABLE READS AND TABLE WRITES The table write operation stores one byte of data from
the TABLAT register into a write block holding register.
In order to read and write program memory, there are
The procedure to write the contents of the holding
two operations that allow the processor to move bytes
registers into program memory is detailed in Section
between the program memory space and the data RAM:
13.1.6 “Writing to Program Flash Memory”.
• Table Read (TBLRD) Figure 13-2 shows the operation of a table write with
• Table Write (TBLWT) program memory and data RAM.
The program memory space is 16 bits wide, while the Table operations work with byte entities. Tables
data RAM space is eight bits wide. Table reads and containing data, rather than program instructions, are
table writes move data between these two memory not required to be word aligned. Therefore, a table can
spaces through an 8-bit register (TABLAT). start and end at any byte address. If a table write is being
The table read operation retrieves one byte of data used to write executable code into program memory,
directly from program memory and places it into the program instructions will need to be word aligned.
TABLAT register. Figure 13-1 shows the operation of a
table read.

FIGURE 13-1: TABLE READ OPERATION


Instruction: TBLRD*

Program Memory
Table Pointer(1)
Table Latch (8-bit)
TBLPTRU TBLPTRH TBLPTRL
TABLAT

Program Memory
(TBLPTR)

Note 1: Table Pointer register points to a byte in program memory.

FIGURE 13-2: TABLE WRITE OPERATION


Instruction: TBLWT*

Program Memory Holding Registers

Table Pointer(1) Table Latch (8-bit)


TBLPTRU TBLPTRH TBLPTRL TABLAT

Program Memory
(TBLPTR<MSBs>)

Note 1: During table writes the Table Pointer does not point directly to program memory. The LSBs of TBLPRTL
actually point to an address within the write block holding registers. The MSBs of the Table Pointer deter-
mine where the write block will eventually be written. The process for writing the holding registers to the
program memory array is discussed in Section 13.1.6 “Writing to Program Flash Memory”.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 181


PIC18(L)F25/26K83
13.1.2 CONTROL REGISTERS 13.1.2.3 TBLPTR – Table Pointer Register
Several control registers are used in conjunction with The Table Pointer (TBLPTR) register addresses a byte
the TBLRD and TBLWT instructions. These include the within the program memory. The TBLPTR is comprised
following registers: of three SFR registers: Table Pointer Upper Byte, Table
• NVMCON1 register Pointer High Byte and Table Pointer Low Byte
(TBLPTRU:TBLPTRH:TBLPTRL). These three
• NVMCON2 register
registers join to form a 22-bit wide pointer. The low-
• TABLAT register order 21 bits allow the device to address up to 2 Mbytes
• TBLPTR registers of program memory space. The 22nd bit allows access
to the Device ID, the User ID and the Configuration bits.
13.1.2.1 NVMCON1 and NVMCON2
The Table Pointer register, TBLPTR, is used by the
Registers
TBLRD and TBLWT instructions. These instructions can
The NVMCON1 register (Register 13-1) is the control update the TBLPTR in one of four ways based on the
register for memory accesses. The NVMCON2 register table operation. These operations on the TBLPTR
is not a physical register; it is used exclusively in the affect only the low-order 21 bits.
memory write and erase sequences. Reading
NVMCON2 will read all ‘0’s. 13.1.2.4 Table Pointer Boundaries
The REG<1:0> control bits determine if the access will TBLPTR is used in reads, writes and erases of the
be to Data EEPROM Memory locations. PFM locations Program Flash Memory.
or User IDs, Configuration bits, Rev ID and Device ID. When a TBLRD is executed, all 22 bits of the TBLPTR
When REG<1:0> = 00, any subsequent operations will determine which byte is read from program memory
operate on the Data EEPROM Memory. When directly into the TABLAT register.
REG<1:0> = 10, any subsequent operations will
operate on the program memory. When REG<1:0> = When a TBLWT is executed the byte in the TABLAT
x1, any subsequent operations will operate on the register is written, not to memory but, to a holding
Configuration bits, User IDs, Rev ID and Device ID. register in preparation for a program memory write. The
holding registers constitute a write block which varies
The FREE bit allows the program memory erase depending on the device (see Table 13-3).The 3, 4, or
operation. When the FREE bit is set, an erase 5 LSbs of the TBLPTRL register determine which
operation is initiated on the next WR command. When specific address within the holding register block is
FREE is clear, only writes are enabled. This bit is written to. The MSBs of the Table Pointer have no effect
applicable only to the PFM and not to data EEPROM. during TBLWT operations.
When set, the WREN bit will allow a program/erase When a program memory write is executed the entire
operation. The WREN bit is cleared on power-up. holding register block is written to the memory at the
The WRERR bit is set by hardware when the WR bit is address determined by the MSbs of the TBLPTR. The
set and is cleared when the internal programming timer 3, 4, or 5 LSBs are ignored during memory writes. For
expires and the write operation is successfully more detail, see Section 13.1.6 “Writing to Program
complete. Flash Memory”.

The WR control bit initiates erase/write cycle operation Figure 13-3 describes the relevant boundaries of
when the REG<1:0> bits point to the Data EEPROM TBLPTR based on Program Flash Memory operations.
Memory location, and it initiates a write operation when
the REG<1:0> bits point to the PFM location. The WR
bit cannot be cleared by firmware; it can only be set by
firmware. Then the WR bit is cleared by hardware at
the completion of the write operation.

The NVMIF Interrupt Flag bit is set when the write is


complete. The NVMIF flag stays set until cleared by
firmware.

13.1.2.2 TABLAT – Table Latch Register


The Table Latch (TABLAT) is an 8-bit register mapped
into the SFR space. The Table Latch register is used to
hold 8-bit data during data transfers between program
memory and data RAM.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 182


PIC18(L)F25/26K83

TABLE 13-3: 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+*

FIGURE 13-3: TABLE POINTER BOUNDARIES BASED ON OPERATION

21 TBLPTRU 16 15 TBLPTRH 8 7 TBLPTRL 0

TABLE ERASE/WRITE TABLE WRITE


TBLPTR<21:n+1>(1) TBLPTR<n:0>(1)

TABLE READ – TBLPTR<21:0>

Note 1: Refer to Table 5-4 for the row size values.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 183


PIC18(L)F25/26K83
13.1.3 READING THE PROGRAM FLASH The CPU operation is suspended during the read, and
MEMORY it resumes immediately after. From the user point of
view, TABLAT is valid in the next instruction cycle.
The TBLRD instruction retrieves data from program
memory and places it into data RAM. Table reads from The internal program memory is typically organized by
program memory are performed one byte at a time. words. The Least Significant bit of the address selects
between the high and low bytes of the word.
TBLPTR points to a byte address in program space.
Executing TBLRD places the byte pointed to into Figure 13-4 shows the interface between the internal
TABLAT. In addition, TBLPTR can be modified program memory and the TABLAT.
automatically for the next table read operation.

FIGURE 13-4: READS FROM PROGRAM FLASH MEMORY

Program Memory

(Even Byte Address) (Odd Byte Address)

TBLPTR = xxxxx1 TBLPTR = xxxxx0

Instruction Register TABLAT


FETCH TBLRD
(IR) Read Register

EXAMPLE 13-1: READING A PROGRAM FLASH MEMORY WORD


BCF NVMCON1, REG0 ; point to Program Flash Memory
BSF NVMCON1, REG1 ; access Program Flash Memory
MOVLW CODE_ADDR_UPPER ; Load TBLPTR with the base
MOVWF TBLPTRU ; address of the word
MOVLW CODE_ADDR_HIGH
MOVWF TBLPTRH
MOVLW CODE_ADDR_LOW
MOVWF TBLPTRL
READ_WORD
TBLRD*+ ; read into TABLAT and increment
MOVF TABLAT, W ; get data
MOVWF WORD_EVEN
TBLRD*+ ; read into TABLAT and increment
MOVFW TABLAT, W ; get data
MOVF WORD_ODD

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 184


PIC18(L)F25/26K83
FIGURE 13-5: PROGRAM FLASH
MEMORY READ
FLOWCHART
Rev. 10-000046B
8/7/2015

Start
Read Operation

Select PFM
(NVMREG<1:0> = 0x10)

Select Word Address


(TBLPTR registers)

Initiate Read operation


(TBLRD)

Data read now in


TABLAT

End
Read Operation

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 185


PIC18(L)F25/26K83
13.1.4 NVM UNLOCK SEQUENCE FIGURE 13-6: NVM UNLOCK
The unlock sequence is a mechanism that protects the SEQUENCE FLOWCHART
NVM from unintended self-write programming or
erasing. The sequence must be executed and
Start Unlock Sequence
completed without interruption to successfully
complete any of the following operations:
• PFM Row Erase
• Write of PFM write latches to PFM memory
• Write of PFM write latches to User IDs
Write 55h to NVMCON2
• Write to Data EEPROM Memory
• Write to Configuration Words
The unlock sequence consists of the following steps
and must be completed in order:
• Write 55h to NVMCON2 Write AAh to NVMCON2
• Write AAh to NMVCON2
• Set the WR bit of NVMCON1
Once the WR bit is set, the processor will stall internal
operations until the operation is complete and then Initiate Write or Erase Operation
resume with the next instruction. (WR = 1)
Since the unlock sequence must not be interrupted,
global interrupts should be disabled prior to the unlock
sequence and re-enabled after the unlock sequence is
completed.
End Unlock Operation

EXAMPLE 13-2: NVM UNLOCK SEQUENCE


BCF INTCON0,GIE ; Recommended so sequence is not interrupted
BANKSEL NVMCON1
BSF NVMCON1,WREN ; Enable write/erase
MOVLW 55h ; Load 55h

MOVWF NVMCON2 ; Step 1: Load 55h into NVMCON2


MOVLW AAh ; Step 2: Load W with AAh
MOVWF NVMCON2 ; Step 3: Load AAh into NVMCON2
BSF INTCON1,WR ; Step 4: Set WR bit to begin write/erase

BSF INTCON0,GIE ; Re-enable interrupts

Note 1: Sequence begins when NVMCON2 is written; steps 1-4 must occur in the cycle-accurate order
shown. If the timing of the steps 1 to 4 is corrupted by an interrupt or a debugger Halt, the action
will not take place.
2: Opcodes shown are illustrative; any instruction that has the indicated effect may be used.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 186


PIC18(L)F25/26K83
13.1.5 ERASING PROGRAM FLASH 13.1.5.1 Program Flash Memory Erase
MEMORY Sequence
The minimum erase block is 64 words (refer to Table 5- The sequence of events for erasing a block of internal
4). Only through the use of an external programmer, or program memory is:
through ICSP™ control, can larger blocks of program 1. REG bits of the NVMCON1 register point to
memory be bulk erased. Word erase in the program PFM
memory array is not supported.
2. Set the FREE and WREN bits of the NVMCON1
For example, when initiating an erase sequence from a register
microcontroller with erase row size of 64 words, a block 3. Perform the unlock sequence as described in
of 64 words (128 bytes) of program memory is erased. Section 13.1.4 “NVM Unlock Sequence”
The Most Significant 16 bits of the TBLPTR<21:6>
point to the block being erased. The TBLPTR<5:0> bits If the PFM address is write-protected, the WR bit will be
are ignored. cleared and the erase operation will not take place,
WRERR is signaled in this scenario.
The NVMCON1 register commands the erase
operation. The REG<1:0> bits must be set to point to The operation erases the memory row indicated by
the Program Flash Memory. The WREN bit must be set masking the LSBs of the current TBLPTR.
to enable write operations. The FREE bit is set to select While erasing PFM, CPU operation is suspended and
an erase operation. it resumes when the operation is complete. Upon
The NVM unlock sequence described in Section completion the WR bit is cleared in hardware, the
13.1.4 “NVM Unlock Sequence” should be used to NVMIF is set and an interrupt will occur if the NVMIE bit
guard against accidental writes. This is sometimes is also set.
referred to as a long write. Write latch data is not affected by erase operations and
A long write is necessary for erasing program memory. WREN will remain unchanged.
Instruction execution is halted during the long write
cycle. The long write is terminated by the internal
Note 1: If a write or erase operation is terminated
programming timer.
by an unexpected event, WRERR bit will
be set which the user can check to decide
whether a rewrite of the location(s) is
needed.
2: WRERR is set if WR is written to ‘1’ while
TBLPTR points to a write-protected
address.
3: WRERR is set if WR is written to ‘1’ while
TBLPTR points to an invalid address
location (Table 13-1).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 187


PIC18(L)F25/26K83
EXAMPLE 13-3: ERASING A PROGRAM FLASH MEMORY BLOCK
; This sample row erase routine assumes the following:
; 1. A valid address within the erase row is loaded in variables TBLPTR register

CLRF NVMCON1 ; Setup PFM Access


MOVLW CODE_ADDR_UPPER ; load TBLPTR with the base
MOVWF TBLPTRU ; address of the memory block
MOVLW CODE_ADDR_HIGH
MOVWF TBLPTRH
MOVLW CODE_ADDR_LOW
MOVWF TBLPTRL
ERASE_BLOCK
BCF NVMCON1, REG0 ; point to Program Flash Memory
BSF NVMCON1, REG1 ; access Program Flash Memory
BSF NVMCON1, WREN ; enable write to memory
BSF NVMCON1, FREE ; enable block Erase operation
BCF INTCON0, GIE ; disable interrupts
MOVLW 55h
Required MOVWF NVMCON2 ; write 55h
Sequence MOVLW AAh
MOVWF NVMCON2 ; write AAh
BSF NVMCON1, WR ; start erase (CPU stalls)
BSF INTCON0, GIE ; re-enable interrupts

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 188


PIC18(L)F25/26K83
FIGURE 13-7: PFM ROW ERASE 13.1.6 WRITING TO PROGRAM FLASH
FLOWCHART MEMORY
The programming write block size is described in
Start Erase Operation Table 5-4. Word or byte programming is not supported.
Table writes are used internally to load the holding
registers needed to program the memory. There are
Select Memory: only as many holding registers as there are bytes in a
PFM (NVMREGS<1:0> = 10) write block. Refer to Table 5-4 for write latch size.
Since the table latch (TABLAT) is only a single byte, the
TBLWT instruction needs to be executed multiple times
Load Table Pointer register with for each programming operation. The write protection
address of the block being erased state is ignored for this operation. All of the table write
operations will essentially be short writes because only
the holding registers are written. NVMIF is not affected
Select Erase Operation while writing to the holding registers.
(FREE = 1)
After all the holding registers have been written, the
programming operation of that block of memory is
started by configuring the NVMCON1 register for a
Enable Write/Erase Operation
(WREN = 1)
program memory write and performing the long write
sequence.
If the PFM address in the TBLPTR is write-protected or
Disable Interrupts if TBLPTR points to an invalid location, the WR bit is
(GIE = 0) cleared without any effect and the WREER is signaled.
The long write is necessary for programming the
Unlock Sequence
program memory. CPU operation is suspended during
a long write cycle and resumes when the operation is
(Figure 13-6)
complete. The long write operation completes in one
instruction cycle. When complete, WR is cleared in
hardware and NVMIF is set and an interrupt will occur if
CPU stalls while Erase operation
completes (2 ms typical) NVMIE is also set. The latched data is reset to all ‘1s’.
WREN is not changed.
The internal programming timer controls the write time.
Enable Interrupts The write/erase voltages are generated by an on-chip
(GIE = 1) charge pump, rated to operate over the voltage range of
the device.

Disable Write/Erase Operation


Note: The default value of the holding registers on
(WREN = 0) device Resets and after write operations is
FFh. A write of FFh to a holding register
does not modify that byte. This means that
individual bytes of program memory may
End Erase Operation
be modified, provided that the change does
not attempt to change any bit from a ‘0’ to a
‘1’. When modifying individual bytes, it is
not necessary to load all holding registers
before executing a long write operation.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 189


PIC18(L)F25/26K83
FIGURE 13-8: TABLE WRITES TO PROGRAM FLASH MEMORY

TABLAT
Write Register

8 8 8 8

TBLPTR = xxxx00 TBLPTR = xxxx01 TBLPTR = xxxx02 TBLPTR = xxxxYY(1)

Holding Register Holding Register Holding Register Holding Register

Program Memory

Note 1: Refer to Table 5-4 for number of holding registers (e.g., YY = 3F for 64 holding registers).

13.1.6.1 Program Flash Memory Write


Sequence
The sequence of events for programming an internal
program memory location should be:
1. Read appropriate number of bytes into RAM.
Refer to Table 13-2 for Write latch size.
2. Update data values in RAM as necessary.
3. Load Table Pointer register with address being
erased.
4. Execute the block erase procedure.
5. Load Table Pointer register with address of first
byte being written.
6. Write the n-byte block into the holding registers
with auto-increment. Refer to Table 13-2 for
Write latch size.
7. Set REG<1:0> bits to point to program memory.
8. Clear FREE bit and set WREN bit in NVMCON1
register.
9. Disable interrupts.
10. Execute the unlock sequence (see Section
13.1.4 “NVM Unlock Sequence”).
11. WR bit is set in NVMCON1 register.
12. The CPU will stall for the duration of the write
(about 2 ms using internal timer).
13. Re-enable interrupts.
14. Verify the memory (table read).
This procedure will require about 6 ms to update each
write block of memory. An example of the required code
is given in Example 13-4.
Note: Before setting the WR bit, the Table
Pointer address needs to be within the
intended address range of the bytes in the
holding registers.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 190


PIC18(L)F25/26K83
EXAMPLE 13-4: WRITING TO PROGRAM FLASH MEMORY
MOVLW D'64’ ; number of bytes in erase block
MOVWF COUNTER
MOVLW BUFFER_ADDR_HIGH ; point to buffer
MOVWF FSR0H
MOVLW BUFFER_ADDR_LOW
MOVWF FSR0L
MOVLW CODE_ADDR_UPPER ; Load TBLPTR with the base
MOVWF TBLPTRU ; address of the memory block
MOVLW CODE_ADDR_HIGH
MOVWF TBLPTRH
MOVLW CODE_ADDR_LOW
MOVWF TBLPTRL
READ_BLOCK
TBLRD*+ ; read into TABLAT, and inc
MOVF TABLAT, W ; get data
MOVWF POSTINC0 ; store data
DECFSZ COUNTER ; done?
BRA READ_BLOCK ; repeat
MODIFY_WORD
MOVLW BUFFER_ADDR_HIGH ; point to buffer
MOVWF FSR0H
MOVLW BUFFER_ADDR_LOW
MOVWF FSR0L
MOVLW NEW_DATA_LOW ; update buffer word
MOVWF POSTINC0
MOVLW NEW_DATA_HIGH
MOVWF INDF0
ERASE_BLOCK
MOVLW CODE_ADDR_UPPER ; load TBLPTR with the base
MOVWF TBLPTRU ; address of the memory block
MOVLW CODE_ADDR_HIGH
MOVWF TBLPTRH
MOVLW CODE_ADDR_LOW
MOVWF TBLPTRL
BCF NVMCON1, REG0 ; point to Program Flash Memory
BSF NVMCON1, REG1 ; point to Program Flash Memory
BSF NVMCON1, WREN ; enable write to memory
BSF NVMCON1, FREE ; enable Erase operation
BCF INTCON0, GIE ; disable interrupts
MOVLW 55h
Required MOVWF NVMCON2 ; write 55h
Sequence MOVLW AAh
MOVWF NVMCON2 ; write 0AAh
BSF NVMCON1, WR ; start erase (CPU stall)
BSF INTCON0, GIE ; re-enable interrupts
TBLRD*- ; dummy read decrement
MOVLW BUFFER_ADDR_HIGH ; point to buffer
MOVWF FSR0H
MOVLW BUFFER_ADDR_LOW
MOVWF FSR0L
WRITE_BUFFER_BACK
MOVLW BlockSize ; number of bytes in holding register
MOVWF COUNTER
MOVLW D’64’/BlockSize ; number of write blocks in 64 bytes
MOVWF COUNTER2

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 191


PIC18(L)F25/26K83
EXAMPLE 13-4: WRITING TO PROGRAM FLASH MEMORY (CONTINUED)
WRITE_BYTE_TO_HREGS
MOVF POSTINC0, W ; get low byte of buffer data
MOVWF TABLAT ; present data to table latch
TBLWT+* ; write data, perform a short write
; to internal TBLWT holding register.
DECFSZ COUNTER ; loop until holding registers are full
BRA WRITE_WORD_TO_HREGS
PROGRAM_MEMORY
BCF NVMCON1, REG0 ; point to Program Flash Memory
BSF NVMCON1, REG1 ; point to Program Flash Memory
BSF NVMCON1, WREN ; enable write to memory
BCF NVMCON1, FREE ; enable write to memory
BCF INTCON0, GIE ; disable interrupts
MOVLW 55h
Required MOVWF NVMCON2 ; write 55h
Sequence MOVLW 0AAh
MOVWF NVMCON2 ; write 0AAh
BSF NVMCON1, WR ; start program (CPU stall)
DCFSZ COUNTER2 ; repeat for remaining write blocks
BRA WRITE_BYTE_TO_HREGS
BSF INTCON0, GIE ; re-enable interrupts
BCF NVMCON1, WREN ; disable write to memory

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 192


PIC18(L)F25/26K83
FIGURE 13-9: PROGRAM FLASH MEMORY (PFM) WRITE FLOWCHART

Rev. 10-000049B
12/4/2015

Start
Write Operation

Determine number of
words to be written into Load the value to write
PFM. The number of TABLAT
words cannot exceed the
number of words per row
(word_cnt)

Update the word counter


Write Latches to PFM
(word_cnt--)

Select access to PFM


locations using
NVMREG<1:0> bits
Disable Interrupts
(GIE = 0)
Last word to Yes
write ?
Select Row Address
TBLPTR
No
Unlock Sequence(1)

Disable Interrupts
Select Write Operation (GIE = 0)
(FREE = 0)
CPU stalls while Write
operation completes
(2 ms typical)
Load Write Latches Only Unlock Sequence(1)

Enable Write/Erase
Operation (WREN = 1) No delay when writing to Re-enable Interrupts
PFM Latches (GIE = 1)

Disable Write/Erase
Operation (WREN = 0)

Re-enable Interrupts
(GIE = 1)

End
Write Operation

Increment Address
TBLPTR++

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 193


PIC18(L)F25/26K83
13.1.6.2 Write Verify 13.1.6.3 Unexpected Termination of Write
Depending on the application, good programming Operation
practice may dictate that the value written to the If a write is terminated by an unplanned event, such as
memory should be verified against the original value. loss of power or an unexpected Reset, the memory
This should be used in applications where excessive location just programmed should be verified and
writes can stress bits near the specification limit. Since reprogrammed if needed. If the write operation is
program memory is stored as a full page, the stored interrupted by a MCLR Reset or a WDT Time-out Reset
program memory contents are compared with the during normal operation, the WRERR bit will be set
intended data stored in RAM after the last write is which the user can check to decide whether a rewrite
complete. of the location(s) is needed.

FIGURE 13-10: PROGRAM FLASH 13.1.6.4 Protection Against Spurious Writes


MEMORY VERIFY A write sequence is valid only when both the following
FLOWCHART conditions are met, this prevents spurious writes which
Rev. 10-000051B might lead to data corruption.
12/4/2015

1. The WR bit is gated through the WREN bit. It is


suggested to have the WREN bit cleared at all
times except during memory writes. This
Start prevents memory writes if the WR bit gets set
Verify Operation
accidentally.
2. The NVM unlock sequence must be performed
each time before a write operation.
This routine assumes that the last
row of data written was from an
image saved on RAM. This image
13.2 Device Information Area, Device
will be used to verify the data Configuration Area, User ID,
currently stored in PFM
Device ID and Configuration Word
Access
When REG<1:0> = 0x01 or 0x11 in the NVMCON1
register, the Device Information Area, the Device
Configuration Area, the User ID’s, Device ID/
Read Operation(1) Revision ID and Configuration Words can be
accessed. Different access may exist for reads and
writes (see Table 13-1).

13.2.1 Reading Access


NVMDAT = No The user can read from these blocks by setting the
RAM image ?
REG bits to 0x01 or 0x11. The user needs to load the
address into the TBLPTR registers. Executing a
Yes
Fail
TBLRD after that moves the byte pointed to the
Verify Operation TABLAT register. The CPU operation is suspended
during the read and resumes after. When read access
is initiated on an address outside the parameters listed
No Last word ?
in Table 13-1, the TABLAT register is cleared, reading
back ‘0’s.

Yes 13.2.2 Writing Access


The WREN bit in NVMCON1 must be set to enable
writes. This prevents accidental writes to the CONFIG
End words due to errant (unexpected) code execution. The
Verify Operation WREN bit should be kept clear at all times, except
when updating the CONFIG words. The WREN bit is
not cleared by hardware. The WR bit will be inhibited
from being set unless the WREN bit is set.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 194


PIC18(L)F25/26K83
The user needs to load the TBLPTR and TABLAT reg-
ister with the address and data byte respectively before
executing the Write command. An unlock sequence
needs to be followed for writing to the USER IDs/
DEVICE IDs/CONFIG words (Section 13.1.4, NVM
Unlock Sequence). If WRTC = 0 or if TBLPTR points
an invalid address location (see Table 13-1), WR bit is
cleared without any effect and WRERR is set.
A single CONFIG word byte is written at once and the
operation includes an implicit erase cycle for that byte
(it is not necessary to set FREE). CPU execution is
stalled and at the completion of the write cycle, the WR
bit is cleared in hardware and the NVM Interrupt Flag
bit (NVMIF) is set. The new CONFIG value takes effect
when the CPU resumes operation.

TABLE 13-4: DIA, DCI, USER ID, DEV/REV ID AND CONFIGURATION WORD ACCESS
(REG<1:0> = X1)
Address Function Read Access Write Access
20 0000h-20 000Fh User IDs Yes Yes
30 0000h-30 0009h Configuration Words Yes Yes
3F 0000h-3F 003Fh DIA Yes No
3F FF00h-3F FF09h DCI Yes No
3F FFFCh-3F FFFFh Revision ID/Device ID Yes No

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 195


PIC18(L)F25/26K83
13.3 Data EEPROM Memory 13.3.2 NVMCON1 AND NVMCON2
REGISTERS
The data EEPROM is a nonvolatile memory array,
separate from the data RAM and program memory, Access to the data EEPROM is controlled by two
which is used for long-term storage of program data. It registers: NVMCON1 and NVMCON2. These are the
is not directly mapped in either the register file or same registers which control access to the program
program memory space but is indirectly addressed memory and are used in a similar manner for the data
through the Special Function Registers (SFRs). The EEPROM.
EEPROM is readable and writable during normal The NVMCON1 register (Register 13-1) is the control
operation over the entire VDD range. register for data and program memory access. Control
Four SFRs are used to read and write to the data bits REG<1:0> determine if the access will be to
EEPROM as well as the program memory. They are: program, Data EEPROM Memory or the User IDs,
Configuration bits, Revision ID and Device ID.
• NVMCON1
• NVMCON2 The WREN bit, when set, will allow a write operation.
On power-up, the WREN bit is clear.
• NVMDAT
• NVMADRL The WRERR bit is set by hardware when the WR bit is
set and cleared when the internal programming timer
• NVMADRH
expires and the write operation is complete.
The data EEPROM allows byte read and write. When
interfacing to the data memory block, NVMDAT holds The WR control bit initiates write operations. The bit
the 8-bit data for read/write and the can be set but not cleared by software. It is cleared only
NVMADRH:NVMADRL register pair holds the address by hardware at the completion of the write operation.
of the EEPROM location being accessed. The NVMIF Interrupt Flag bit of the PIR0 register is set
The EEPROM data memory is rated for high erase/write when the write is complete. It must be cleared by
cycle endurance. A byte write automatically erases the software.
location and writes the new data (erase-before-write).
The write time is controlled by an internal programming Control bits, RD and WR, start read and erase/write
timer; it will vary with voltage and temperature as well as operations, respectively. These bits are set by firmware
from chip-to-chip. Refer to the Data EEPROM Memory and cleared by hardware at the completion of the
parameters in Section 45.0 “Electrical operation.
Specifications” for limits. The RD bit cannot be set when accessing program
memory (REG<1:0> = 0x10). Program memory is read
13.3.1 NVMADRL AND NVMADRH using table read instructions. See Section
REGISTERS 13.1.1 “Table Reads and Table Writes” regarding
The NVMADRH:NVMADRL registers are used to table reads.
address the data EEPROM for read and write
operations.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 196


PIC18(L)F25/26K83
13.3.3 READING THE DATA EEPROM 13.3.4 WRITING TO THE DATA EEPROM
MEMORY MEMORY
To read a data memory location, the user must write the To write an EEPROM data location, the address must
address to the NVMADRL and NVMADRH register first be written to the NVMADRL and NVMADRH
pair, clear REG<1:0> control bit in NVMCON1 register register pair and the data written to the NVMDAT
to access Data EEPROM locations and then set control register. The sequence in Example 13-6 must be
bit, RD. The data is available on the very next followed to initiate the write cycle.
instruction cycle; therefore, the NVMDAT register can The write will not begin if NVM Unlock sequence,
be read by the next instruction. NVMDAT will hold this described in Section 13.1.4 “NVM Unlock
value until another read operation, or until it is written to Sequence”, is not exactly followed for each byte. It is
by the user (during a write operation). strongly recommended that interrupts be disabled
The basic process is shown in Example 13-5. during this code segment.
Additionally, the WREN bit in NVMCON1 must be set to
FIGURE 13-11: DATA EEPROM READ enable writes. This mechanism prevents accidental
FLOWCHART writes to data EEPROM due to unexpected code
execution (i.e., runaway programs). The WREN bit
should be kept clear at all times, except when updating
Start Read Operation the EEPROM. The WREN bit is not cleared by
hardware.

Select EEPROM Memory (REG)


After a write sequence has been initiated, NVMCON1,
NVMADRL, NVMADRH and NVMDAT cannot be
modified. The WR bit will be inhibited from being set
unless the WREN bit is set. Both WR and WREN
Select Word Address
(NVMADRH:NVMADRL)
cannot be set with the same instruction.
After a write sequence has been initiated, clearing the
WREN bit will not affect this write cycle. A single Data
Initiate Read Operation EEPROM word is written and the operation includes an
(RD = 1) implicit erase cycle for that word (it is not necessary to
set FREE). CPU execution continues in parallel and at
the completion of the write cycle, the WR bit is cleared
Data read now in in hardware and the NVM Interrupt Flag bit (NVMIF) is
NVMDAT set. The user can either enable this interrupt or poll this
bit. NVMIF must be cleared by software.

End Read Operation

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 197


PIC18(L)F25/26K83
13.3.5 WRITE VERIFY
Depending on the application, good programming
practice may dictate that the value written to the
memory should be verified against the original value.
This should be used in applications where excessive
writes can stress bits near the specification limit.

EXAMPLE 13-5: DATA EEPROM READ


; Data Memory Address to read
CLRF NVMCON1 ; Setup Data EEPROM Access
MOVF EE_ADDRL, W ;
MOVWF NVMADRL ; Setup Address
BSF NVMCON1, RD ; Issue EE Read
MOVF NVMDAT, W ; W = EE_DATA

EXAMPLE 13-6: DATA EEPROM WRITE


; Data Memory Address to write
CLRF NVMCON1 ; Setup Data EEPROM Access
MOVF EE_ADDRL, W ;
MOVWF NVMADRL ; Setup Address
; Data Memory Value to write
MOVF EE_DATA, W ;
MOVWF NVMDAT ;
; Enable writes
BSF NVMCON1, WREN ;
; Disable interrupts
BCF INTCON0, GIE ;
; Required unlock sequence
MOVLW 55h ;
MOVWF NVMCON2 ;
MOVLW AAh ;
MOVWF NVMCON2 ;
; Set WR bit to begin write
BSF NVMCON1, WR ;
; Enable INT
BSF INTCON0, GIE ;
; Wait for interrupt, write done
SLEEP ;
; Disable writes
BCF NVMCON1, WREN ;

13.3.6 OPERATION DURING CODE- 13.3.7 PROTECTION AGAINST SPURIOUS


PROTECT WRITE
Data EEPROM Memory has its own code-protect bits in There are conditions when the user may not want to
Configuration Words. External read and write write to the Data EEPROM Memory. To protect against
operations are disabled if code protection is enabled. spurious EEPROM writes, various mechanisms have
If the Data EEPROM is write-protected or if NVMADR been implemented. On power-up, the WREN bit is
points an invalid address location, the WR bit is cleared cleared. In addition, writes to the EEPROM are blocked
without any effect. WRERR is signaled in this scenario. during the Power-up Timer period (TPWRT).
The unlock sequence and the WREN bit together help
prevent an accidental write during brown-out, power
glitch or software malfunction.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 198


PIC18(L)F25/26K83
13.3.8 ERASING THE DATA EEPROM
MEMORY
Data EEPROM Memory can be erased by writing 0xFF
to all locations in the Data EEPROM Memory that
needs to be erased.

EXAMPLE 13-7: DATA EEPROM REFRESH ROUTINE


CLRF NVMADRL ; Start at address 0
BCF NVMCON1, CFGS ; Set for memory
BCF NVMCON1, EEPGD ; Set for Data EEPROM
BCF INTCON0, GIE ; Disable interrupts
BSF NVMCON1, WREN ; Enable writes
Loop ; Loop to refresh array
BSF NVMCON1, RD ; Read current address
MOVLW 55h ;
MOVWF NVMCON2 ; Write 55h
MOVLW 0AAh ;
MOVWF NVMCOM2 ; Write 0AAh
BSF NVMCON1, WR ; Set WR bit to begin write
BTFSC NVMCON1, WR ; Wait for write to complete
BRA $-2
INCFSZ NVMADRL, F ; Increment address
BRA LOOP ; Not zero, do it again

BCF NVMCON1, WREN ; Disable writes


BSF INTCON0, GIE ; Enable interrupts

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 199


PIC18(L)F25/26K83
13.4 Register Definitions: Nonvolatile Memory
REGISTER 13-1: NVMCON1: NONVOLATILE MEMORY CONTROL 1 REGISTER
R/W-0/0 R/W-0/0 U-0 R/S/HC-0/0 R/W/HS-x/q R/W-0/0 R/S/HC-0/0 R/S/HC-0/0
REG<1:0> — FREE WRERR WREN WR RD
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit HC = Bit is cleared by hardware
x = Bit is unknown -n = Value at POR S = Bit can be set by software, but not cleared
‘0’ = Bit is cleared ‘1’ = Bit is set U = Unimplemented bit, read as ‘0’

bit 7-6 REG<1:0>: NVM Region Selection bit


10 =Access PFM Locations
x1 = Access User IDs, Configuration Bits, DIA, DCI, Rev ID and Device ID
00 = Access Data EEPROM Memory Locations
bit 5 Unimplemented: Read as ‘0’
bit 4 FREE: Program Flash Memory Erase Enable bit(1)
1 = Performs an erase operation on the next WR command
0 = The next WR command performs a write operation
bit 3 WRERR: Write-Reset Error Flag bit(2,3,4)
1 = A write operation was interrupted by a Reset (hardware set),
or WR was written to 1’b1 when an invalid address is accessed (Table 4-1, Table 13-1)
or WR was written to 1’b1 when REG<1:0> and address do not point to the same region
or WR was written to 1’b1 when a write-protected address is accessed (Table 4-2).
0 = All write operations have completed normally
bit 2 WREN: Program/Erase Enable bit
1 = Allows program/erase and refresh cycles
0 = Inhibits programming/erasing and user refresh of NVM
bit 1 WR: Write Control bit(5,6,7)
When REG points to a Data EEPROM Memory location:
1 = Initiates an erase/program cycle at the corresponding Data EEPROM Memory location
When REG points to a PFM location:
1 = Initiates the PFM write operation with data from the holding registers
0 = NVM program/erase operation is complete and inactive
bit 0 RD: Read Control bit(8)
1 = Initiates a read at address pointed by REG and NVMADR, and loads data into NVMDAT
0 = NVM read operation is complete and inactive

Note 1: This can only be used with PFM.


2: This bit is set when WR = 1 and clears when the internal programming timer expires or the write is
completed successfully.
3: Bit must be cleared by the user; hardware will not clear this bit.
4: Bit may be written to ‘1’ by the user in order to implement test sequences.
5: This bit can only be set by following the unlock sequence of Section 13.1.4 “NVM Unlock Sequence”.
6: Operations are self-timed and the WR bit is cleared by hardware when complete.
7: Once a write operation is initiated, setting this bit to zero will have no effect.
8: The bit can only be set in software. The bit is cleared by hardware when the operation is complete.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 200


PIC18(L)F25/26K83

REGISTER 13-2: NVMCON2: NONVOLATILE MEMORY CONTROL 2 REGISTER


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
NVMCON2<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
x = Bit is unknown ‘0’ = Bit is cleared ‘1’ = Bit is set
-n = Value at POR

bit 7-0 NVMCON2<7:0>:


Refer to Section 13.1.4 “NVM Unlock Sequence”.

Note 1: This register always reads zeros, regardless of data written.

Register 13-3: NVMADRL: Data EEPROM Memory Address Low


R/W-x/0 R/W-x/0 R/W-x/0 R/W-x/0 R/W-x/0 R/W-x/0 R/W-x/0 R/W-x/0
ADR<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
x = Bit is unknown ‘0’ = Bit is cleared ‘1’ = Bit is set
-n = Value at POR

bit 7-0 ADR<7:0>: EEPROM Read Address bits

REGISTER 13-4: NVMADRH: DATA EEPROM MEMORY ADDRESS HIGH


U-0 U-0 U-0 U-0 U-0 U-0 R/W-x/u R/W-x/u
— — — — — — ADR<9:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
x = Bit is unknown ‘0’ = Bit is cleared ‘1’ = Bit is set
-n = Value at POR

bit 7-2 Unimplemented: Read as ‘0’


bit 1-0 ADR<9:8>: EEPROM Read Address bits

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 201


PIC18(L)F25/26K83

REGISTER 13-5: NVMDAT: DATA EEPROM MEMORY DATA


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
DAT<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
x = Bit is unknown ‘0’ = Bit is cleared ‘1’ = Bit is set
-n = Value at POR

bit 7-0 DAT<7:0>: The value of the data memory word returned from NVMADR after a Read command, or
the data written by a Write command.

TABLE 13-5: SUMMARY OF REGISTERS ASSOCIATED WITH NONVOLATILE MEMORY


CONTROL
Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page
NVMCON1 REG<1:0> — FREE WRERR WREN WR RD 200
NVMCON2 Unlock Pattern 201
NVMADRL NVMADR<7:0> 201
NVMADRH — — — — — — NVMADR<9:8> 201
NVMDAT NVMDAT<7:0> 202
Legend: — = unimplemented, read as ‘0’. Shaded bits are not used during EEPROM access.
*Page provides register information.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 202


PIC18(L)F25/26K83
14.0 CYCLIC REDUNDANCY CHECK
(CRC) MODULE WITH MEMORY
SCANNER
The Cyclic Redundancy Check (CRC) module provides
a software-configurable hardware-implemented CRC
checksum generator. This module includes the following
features:
• Any standard CRC up to 16 bits can be used
• Configurable Polynomial
• Any seed value up to 16 bits can be used
• Standard and reversed bit order available
• Augmented zeros can be added automatically or
by the user
• Memory scanner for fast CRC calculations on
program/Data EEPROM memory user data
• Software loadable data registers for
communication CRC’s

14.1 CRC Module Overview


The CRC module provides a means for calculating a
check value of program/Data EEPROM memory. The
CRC module is coupled with a memory scanner for
faster CRC calculations. The memory scanner can
automatically provide data to the CRC module. The
CRC module can also be operated by directly writing
data to SFRs, without using a scanner.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 203


PIC18(L)F25/26K83
14.2 CRC Functional Overview
The CRC module can be used to detect bit errors in the
program memory using the built-in memory scanner or
through user input RAM memory. The CRC module can
accept up to a 16-bit polynomial with up to a 16-bit seed
value. A CRC calculated check value (or checksum)
will then be generated into the CRCACC<15:0>
registers for user storage. The CRC module uses an
XOR shift register implementation to perform the
polynomial division required for the CRC calculation.

EXAMPLE 14-1: CRC EXAMPLE


Rev. 10-000206A
1/8/2014

CRC-16-ANSI
x16 + x15 + x2 + 1 (17 bits)
Standard 16-bit representation = 0x8005
CRCXORH = 0b10000000
CRCXORL = 0b0000010- (1)

Data Sequence:
0x55, 0x66, 0x77, 0x88
DLEN = 0b0111
PLEN = 0b1111

Data entered into the CRC:


SHIFTM = 0:
01010101 01100110 01110111 10001000
SHIFTM = 1:
10101010 01100110 11101110 00010001

Check Value (ACCM = 1):


SHIFTM = 0: 0x32D6
CRCACCH = 0b00110010
CRCACCL = 0b11010110
SHIFTM = 1: 0x6BA2
CRCACCH = 0b01101011
CRCACCL = 0b10100010

Note 1: Bit 0 is unimplemented. The LSb of any


CRC polynomial is always ‘1’ and will always
be treated as a ‘1’ by the CRC for calculating
the CRC check value. This bit will be read in
software as a ‘0’.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 204


PIC18(L)F25/26K83
14.3 CRC Polynomial Implementation The X16 and X0 = 1 terms are the MSb and LSb
controlled by hardware. The X15 and X2 terms are
Any polynomial can be used. The polynomial and specified by setting the corresponding
accumulator sizes are determined by the PLEN<3:0> CRCXOR<15:0> bits with the value of ‘0x8004’. The
bits. For an n-bit accumulator, PLEN = n-1 and the actual value is ‘0x8005’ because the hardware sets
corresponding polynomial is n+1 bits. Therefore the the LSb to 1. However, the LSb of the CRCXORL
accumulator can be any size up to 16 bits with a register is unimplemented and always reads as ‘0’.
corresponding polynomial up to 17 bits. The MSb and Refer to Example 14-1.
LSb of the polynomial are always ‘1’ which is forced by
hardware. All polynomial bits between the MSb and
LSb are specified by the CRCXOR registers. For
example, when using CRC-16-ANSI, the polynomial is
defined as X16+X15+X2+1.

EXAMPLE 14-2: CRC LFSR EXAMPLE

Rev. 10-000207A
Linear Feedback Shift Register for CRC-16-ANSI 5/27/2014

x16 + x15 + x2 + 1
Data in
Augmentation Mode ON

b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0

Data in
Augmentation Mode OFF

b15 b14 b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0

14.4 CRC Data Sources 14.4.1 CRC FROM USER DATA


Data can be input to the CRC module in two ways: To use the CRC module on data input from the user, the
user must write the data to the CRCDAT registers. The
- User data using the CRCDAT registers data from the CRCDAT registers will be latched into the
(CRCDATH and CRCDATL) shift registers on any write to the CRCDATL register.
- Program memory using the Program Memory
Scanner 14.4.2 CRC FROM FLASH
To set the number of bits of data, up to 16 bits, the To use the CRC module on data located in Program
DLEN bits of CRCCON1 must be set accordingly. Only memory, the user can initialize the Program Memory
data bits in CRCDAT registers up to DLEN will be used, Scanner as defined in Section 14.8, Scanner Module
other data bits in CRCDAT registers will be ignored. Overview.
Data is moved into the CRCSHIFT as an intermediate
to calculate the check value located in the CRCACC
registers.
The SHIFTM bit is used to determine the bit order of the
data being shifted into the accumulator. If SHIFTM is
not set, the data will be shifted in MSb first (Big Endian).
The value of DLEN will determine the MSb. If SHIFTM
bit is set, the data will be shifted into the accumulator in
reversed order, LSb first (Little Endian).
The CRC module can be seeded with an initial value by
setting the CRCACC<15:0> registers to the
appropriate value before beginning the CRC.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 205


PIC18(L)F25/26K83
14.5 CRC Check Value 14.7 Configuring the CRC
The CRC check value will be located in the CRCACC The following steps illustrate how to properly configure
registers after the CRC calculation has finished. The the CRC.
check value will depend on two mode settings of the 1. Determine if the automatic program memory
CRCCON0 register: ACCM and SHIFTM. When the scan will be used with the scanner or manual
ACCM bit is set, the CRC module augments the data calculation through the SFR interface and
with a number of zeros equal to the length of the perform the actions specified in Section
polynomial to align the final check value. When the 14.4 “CRC Data Sources”, depending on
ACCM bit is not set, the CRC will stop at the end of the which decision was made.
data. A number of zeros equal to the length of the
2. If desired, seed a starting CRC value into the
polynomial can then be entered into CRCDAT to find
CRCACCH/L registers.
the same check value as augmented mode.
Alternatively the expected check value can be entered 3. Program the CRCXORH/L registers with the
at this point to make the final result equal ‘0’. desired generator polynomial.
4. Program the DLEN<3:0> bits of the CRCCON1
When the CRC check value is computed with the
register with the length of the data word - 1 (refer
SHIFTM bit set, selecting LSb first, and the ACCM bit
to Example 14-1). This determines how many
is also set then the final value in the CRCACC registers
times the shifter will shift into the accumulator for
will be reversed such that the LSb will be in the MSb
each data word.
position and vice versa. This is the expected check
value in bit reversed form. If you are creating a check 5. Program the PLEN<3:0> bits of the CRCCON1
value to be appended to a data stream then a bit register with the length of the polynomial -2
reversal must be performed on the final value to (refer to Example 14-1).
achieve the correct checksum. You can use the CRC to 6. Determine whether shifting in trailing zeros is
do this reversal by the following method: desired and set the ACCM bit of the CRCCON0
register appropriately.
• Save the CRCACC value in user RAM space
• Clear the CRCACC registers 7. Likewise, determine whether the MSb or LSb
• Clear the CRCXOR registers should be shifted first and write the SHIFTM bit
• Write the saved CRCACC value to the CRCDAT of the CRCCON0 register appropriately.
input. 8. Write the GO bit of the CRCCON0 register to
begin the shifting process.
The properly oriented check value will be in the
CRCACC registers as the result. 9a. If manual SFR entry is used, monitor the FULL bit
of the CRCCON0 register. When FULL = 0,
another word of data can be written to the
14.6 CRC Interrupt
CRCDATH/L registers, keeping in mind that
The CRC will generate an interrupt when the BUSY bit CRCDATH should be written first if the data has
transitions from 1 to 0. The CRCIF Interrupt Flag is set more than eight bits, as the shifter will begin upon
every time the BUSY bit transitions, regardless of the CRCDATL register being written.
whether or not the CRC interrupt is enabled. The 9b. If the scanner is used, the scanner will
CRCIF bit can only be cleared in software. automatically load words into the CRCDATH/L
registers as needed, as long as the GO bit is set.
10a.If manual entry is used, monitor the CRCIF (and
BUSY bit to determine when the completed
CRC calculation can be read from CRCACCH/L
registers.
10b.If using the memory scanner, monitor the
SCANIF (or the GO bit) for the scanner to finish
pushing information into the CRCDAT registers.
After the scanner is completed, monitor the
BUSY bit to determine that the CRC has been
completed and the check value can be read
from the CRCACC registers. If both the interrupt
flags are set and the BUSY and GO bits are
cleared, the completed CRC calculation can be
read from the CRCACCH/L registers.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 206


PIC18(L)F25/26K83
14.8 Scanner Module Overview 14.11 Scanning Modes
The Scanner allows segments of the Program Flash The interaction of the scanner with the system
Memory or Data EEPROM, to be read out (scanned) to operation is controlled by the priority selection in the
the CRC Peripheral. The Scanner module interacts System Arbiter (see Section 3.2 “Memory Access
with the CRC module and supplies it data one word at Scheme”). Additionally, BURSTMD and TRIGEN also
a time. Data is fetched from the address range defined determine the operation of the Scanner.
by SCANLADR registers up to the SCANHADR
registers. 14.11.1 TRIGEN = 0, BURSTMD = 0
The Scanner begins operation when the SGO bit is set In this case, the memory access request is granted to
(SCANCON0 Register) and ends when either SGO is the scanner if no other higher priority source is
cleared by the user or when SCANLADR increments requesting access.
past SCANHADR. The SGO bit is also cleared by All sources with lower priority than the scanner will get
clearing the EN bit (CRCCON0 register). the memory access cycles that are not utilized by the
scanner.
14.9 Configuring the Scanner
14.11.2 TRIGEN = 1, BURSTMD = 0
The scanner module may be used in conjunction with
the CRC module to perform a CRC calculation over a In this case, the memory access request is generated
range of program memory or Data EEPROM when the CRC module is ready to accept.
addresses. In order to set up the scanner to work with The memory access request is granted to the scanner
the CRC, perform the following steps: if no other higher priority source is requesting access.
1. Set up the CRC module (See Section 14.7 All sources with lower priority than the scanner will get
“Configuring the CRC”) and enable the the memory access cycles that are not utilized by the
Scanner module by setting the EN bit in the scanner.
SCANCON0 register. The memory access request is granted to the scanner
2. Choose which memory region the Scanner if no other higher priority source is requesting access.
module should operate on and set the MREG bit All sources with lower priority than the scanner will get
of the SCANCON0 register appropriately.
the memory access cycles that are not utilized by the
3. If trigger is used for scanner operation, set the scanner.
TRIGEN bit of the SCANCON0 register and
select the trigger source using SCANTRIG 14.11.3 TRIGEN = x, BURSTMD = 1
register. Select the trigger source using
In this case, the memory access is always requested
SCANTRIG register and then set the TRIGEN
by the scanner.
bit of the SCANCON0 register. See Table 14-1
for Scanner Operation. The memory access request is granted to the scanner
4. If Burst mode of operation is desired, set the if no other higher priority source is requesting access.
BURSTMD bit (SCANCON0 register). See The memory access cycles will not be granted to lower
Table 14-1 for Scanner Operation. priority sources than the scanner until it completes
operation i.e., SGO = 0 (SCANCON0 register)
5. Set the SCANLADRL/H/U and SCANHADRL/H/
U registers with the beginning and ending
locations in memory that are to be scanned.
Note: If TRIGEN = 1 and BURSTMD = 1, the
6. Select the priority level for the Scanner module user should ensure that the trigger source
(See Section 3.1 “System Arbitration”) and is active for the Scanner operation to
lock the priorities (See Section 3.1.1 “Priority complete.
Lock”).
7. Both CRCEN and CRCGO bits must be enabled
to use the scanner. Setting the SGO bit will start
the scanner operation.

14.10 Scanner Interrupt


The scanner will trigger an interrupt when the
SCANLADR increments past SCANHADR. The
SCANIF bit can only be cleared in software.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 207


PIC18(L)F25/26K83
14.12 Register Definitions: CRC and Scanner Control
Long bit name prefixes for the CRC and Scanner periph-
erals are shown below. Refer to Section 1.3.2.2 “Long
Bit Names” for more information.

Peripheral Bit Name Prefix


CRC CRC

REGISTER 14-1: CRCCON0: CRC CONTROL REGISTER 0


R/W-0/0 R/W-0/0 R-0 R/W-0/0 U-0 U-0 R/W-0/0 R-0
EN GO BUSY ACCM — — SHIFTM FULL
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 EN: CRC Enable bit


1 = CRC module is enabled
0 = CRC is disabled
bit 6 GO: CRC Go bit
1 = Start CRC serial shifter
0 = CRC serial shifter turned off
bit 5 BUSY: CRC Busy bit
1 = Shifting in progress or pending
0 = All valid bits in shifter have been shifted into accumulator
bit 4 ACCM: Accumulator Mode bit
1 = Data is concatenated with zeros
0 = Data is not concatenated with zeros
bit 3-2 Unimplemented: Read as ‘0’
bit 1 SHIFTM: Shift Mode bit
1 = Shift right (LSb)
0 = Shift left (MSb)
bit 0 FULL: Data Path Full Indicator bit
1 = CRCDATH/L registers are full
0 = CRCDATH/L registers have shifted their data into the shifter

REGISTER 14-2: CRCCON1: CRC CONTROL REGISTER 1


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
DLEN<3:0> PLEN<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-4 DLEN<3:0>: Data Length bits


Denotes the length of the data word -1 (See Example 14-1)
bit 3-0 PLEN<3:0>: Polynomial Length bits
Denotes the length of the polynomial -1 (See Example 14-1)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 208


PIC18(L)F25/26K83

REGISTER 14-3: CRCDATH: CRC DATA HIGH BYTE REGISTER


R/W-xx R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x
DATA<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 DATA<15:8>: CRC Input/Output Data bits

REGISTER 14-4: CRCDATL: CRC DATA LOW BYTE REGISTER


R/W-xx R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x
DATA<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 DATA<7:0>: CRC Input/Output Data bits


Writing to this register fills the shifter.

REGISTER 14-5: CRCACCH: CRC ACCUMULATOR HIGH BYTE REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
ACC<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 ACC<15:8>: CRC Accumulator Register bits

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 209


PIC18(L)F25/26K83

REGISTER 14-6: CRCACCL: CRC ACCUMULATOR LOW BYTE REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
ACC<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 ACC<7:0>: CRC Accumulator Register bits

REGISTER 14-7: CRCSHIFTH: CRC SHIFT HIGH BYTE REGISTER


R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
SHIFT<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 SHIFT<15:8>: CRC Shifter Register bits


Reading from this register reads the CRC Shifter.

REGISTER 14-8: CRCSHIFTL: CRC SHIFT LOW BYTE REGISTER


R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
SHIFT<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 SHIFT<7:0>: CRC Shifter Register bits


Reading from this register reads the CRC Shifter.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 210


PIC18(L)F25/26K83

REGISTER 14-9: CRCXORH: CRC XOR HIGH BYTE REGISTER


R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x
X<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 X<15:8>: XOR of Polynomial Term Xn Enable bits

REGISTER 14-10: CRCXORL: CRC XOR LOW BYTE REGISTER


R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x U-1
X<7:1> —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-1 X<7:1>: XOR of Polynomial Term Xn Enable bits


bit 0 Unimplemented: Read as ‘1’

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 211


PIC18(L)F25/26K83

REGISTER 14-11: SCANCON0: SCANNER ACCESS CONTROL REGISTER 0


R/W-0/0 R/W-0/0 R/W/HC-0/0 U-0 U-0 R/W-0/0 R/W-0/0 R-0/0
EN TRIGEN SGO — — MREG BURSTMD BUSY
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HC = Bit is cleared by hardware

bit 7 EN: Scanner Enable bit(1)


1 = Scanner is enabled
0 = Scanner is disabled
bit 6 TRIGEN: Scanner Trigger Enable bit(2)
1 = Scanner trigger is enabled
0 = Scanner trigger is disabled
Refer Table 14-1.
bit 5 SGO: Scanner GO bit(3, 4)
1 = When the CRC is ready, the Memory region set by the MREG bit will be accessed and data is passed
to the CRC peripheral.
0 = Scanner operations will not occur
bit 4-3 Unimplemented: Read as ‘0’
bit 2 MREG: Scanner Memory Region Select bit(2)
1 = Scanner address points to Data EEPROM
0 = Scanner address points to Program Flash Memory
bit 1 BURSTMD: Scanner Burst Mode bit
1 = Memory access request to the CPU Arbiter is always true
0 = Memory access request to the CPU Arbiter is dependent on the CRC request and Trigger
Refer Table 14-1.
bit 0 BUSY: Scanner Busy Indicator bit
1 = Scanner cycle is in process
0 = Scanner cycle is compete (or never started)

Note 1: Setting EN = 1 (SCANCON0 register) does not affect any other register content.
2: Scanner trigger selection can be set using the SCANTRIG register.
3: This bit can be cleared in software. It is cleared in hardware when LADR>HADR (and a data cycle is not
occurring) or when CRCGO = 0 (CRCCON0 register).
4: CRCEN and CRCGO bits (CRCCON0 register) must be set before setting the SGO bit.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 212


PIC18(L)F25/26K83

TABLE 14-1: SCANNER OPERATING MODES(1)


TRIGEN BURSTMD Scanner Operation
0 0 Memory access is requested when the CRC module is ready to accept data; the
request is granted if no other higher priority source request is pending.
1 0 Memory access is requested when the CRC module is ready to accept data and trigger
selection is true; the request is granted if no other higher priority source request is
pending.
x 1 Memory access is always requested, the request is granted if no other higher priority
source request is pending.
Note 1: See Section 3.1 “System Arbitration” for Priority selection and Section 3.2 “Memory Access
Scheme” for Memory Access Scheme.

REGISTER 14-12: SCANLADRU: SCAN LOW ADDRESS UPPER BYTE REGISTER


U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — LADR<21:16>(1,2)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 Unimplemented: Read as ‘0’


bit 5-0 LADR<21:16>: Scan Start/Current Address bits(1,2)
Upper bits of the current address to be fetched from, value increments on each fetch of memory.

Note 1: Registers SCANLADRU/H/L form a 22-bit value, but are not guarded for atomic or asynchronous access;
registers should only be read or written while SGO = 0 (SCANCON0 register).
2: While SGO = 1 (SCANCON0 register), writing to this register is ignored.

REGISTER 14-13: SCANLADRH: SCAN LOW ADDRESS HIGH BYTE REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
(1, 2)
LADR<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 LADR<15:8>: Scan Start/Current Address bits(1, 2)


Most Significant bits of the current address to be fetched from, value increments on each fetch of
memory.
Note 1: Registers SCANLADRU/H/L form a 22-bit value, but are not guarded for atomic or asynchronous access;
registers should only be read or written while SGO = 0 (SCANCON0 register).
2: While SGO = 1 (SCANCON0 register), writing to this register is ignored.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 213


PIC18(L)F25/26K83

REGISTER 14-14: SCANLADRL: SCAN LOW ADDRESS LOW BYTE REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
LADR<7:0>(1, 2)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 LADR<7:0>: Scan Start/Current Address bits(1, 2)


Least Significant bits of the current address to be fetched from, value increments on each fetch of
memory
Note 1: Registers SCANLADRU/H/L form a 22-bit value, but are not guarded for atomic or asynchronous access;
registers should only be read or written while SGO = 0 (SCANCON0 register).
2: While SGO = 1 (SCANCON0 register), writing to this register is ignored.

REGISTER 14-15: SCANHADRU: SCAN HIGH ADDRESS UPPER BYTE REGISTER


U-0 U-0 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
— — HADR<21:16>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 Unimplemented: Read as ‘0’


bit 5-0 HADR<21:16>: Scan End Address bits(1, 2)
Upper bits of the address at the end of the designated scan

Note 1: Registers SCANHADRU/H/L form a 22-bit value but are not guarded for atomic or asynchronous access;
registers should only be read or written while SGO = 0 (SCANCON0 register).
2: While SGO = 1 (SCANCON0 register), writing to this register is ignored.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 214


PIC18(L)F25/26K83

REGISTER 14-16: SCANHADRH: SCAN HIGH ADDRESS HIGH BYTE REGISTER


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
HADR<15:8>(1, 2)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 HADR<15:8>: Scan End Address bits(1, 2)


Most Significant bits of the address at the end of the designated scan
Note 1: Registers SCANHADRU/H/L form a 22-bit value, but are not guarded for atomic or asynchronous access;
registers should only be read or written while SGO = 0 (SCANCON0 register).
2: While SGO = 1 (SCANCON0 register), writing to this register is ignored.

REGISTER 14-17: SCANHADRL: SCAN HIGH ADDRESS LOW BYTE REGISTER


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
(1, 2)
HADR<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 HADR<7:0>: Scan End Address bits(1, 2)


Least Significant bits of the address at the end of the designated scan

Note 1: Registers SCANHADRU/H/L form a 22-bit value, but are not guarded for atomic or asynchronous access; registers
should only be read or written while SGO = 0 (SCANCON0 register).
2: While SGO = 1 (SCANCON0 register), writing to this register is ignored.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 215


PIC18(L)F25/26K83

REGISTER 14-18: SCANTRIG: SCAN TRIGGER SELECTION REGISTER


U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — TSEL<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-4 Unimplemented: Read as ‘0’


bit 3-0 TSEL<3:0>: Scanner Data Trigger Input Selection bits
1111 = Reserved


1010 = Reserved
1001 = SMT1_output
1000 = TMR6_postscaled
0111 = TMR5_output
0110 = TMR4_postscaled
0101 = TMR3_output
0100 = TMR2_postscaled
0011 = TMR1_output
0010 = TMR0_output
0001 = CLKREF_output
0000 = LFINTOSC

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 216


PIC18(L)F25/26K83

TABLE 14-2: SUMMARY OF REGISTERS ASSOCIATED WITH CRC


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page
CRCACCH ACC<15:8> 209
CRCACCL ACC<7:0> 210
CRCCON0 EN GO BUSY ACCM — — SHIFTM FULL 208
CRCCON1 DLEN<3:0> PLEN<3:0> 208
CRCDATH DATA<15:8> 209
CRCDATL DATA<7:0> 209
CRCSHIFTH SHIFT<15:8> 210
CRCSHIFTL SHIFT<7:0> 210
CRCXORH X<15:8> 211
CRCXORL X<7:1> — 211
SCANCON0 EN TRIGEN SGO — — MREG BURSTMD BUSY 212
SCANHADRU — — HADR<21:16> 214
SCANHADRH HADR<15:8> 215
SCANHADRL HADR<7:0> 215
SCANLADRU — — LADR<21:16> 213
SCANLADRH LADR<15:8> 213
SCANLADRL LADR<7:0> 214
SCANTRIG — — — — TSEL<3:0> 216
Legend: — = unimplemented location, read as ‘0’. Shaded cells are not used for the CRC module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 217


PIC18(L)F25/26K83
15.0 DIRECT MEMORY ACCESS 15.2 DMA Registers
(DMA) The operation of the DMA module has the following
registers:
15.1 Introduction • Control registers (DMAxCON0, DMAxCON1)
The Direct Memory Access (DMA) module is designed • Data buffer register (DMAxBUF)
to service data transfers between different memory • Source Start Address Register (DMAxSSAU:H:L)
regions directly without intervention from the CPU. By • Source Pointer Register (DMAxSPTRU:H:L)
eliminating the need for CPU-intensive management of
• Source Message Size Register (DMAxSSZH:L)
handling interrupts intended for data transfers, the CPU
now can spend more time on other tasks. • Source Count Register (DMAxSCNTH:L)
• Destination Start Address Register
PIC18(L)F25/26K83 family has two DMA modules
(DMAxDSAH:L)
which can be independently programmed to transfer
data between different memory locations, move differ- • Destination Pointer Register (DMAxDPTRH:L)
ent data sizes, and use a wide range of hardware trig- • Destination Message Size Register
gers to initiate transfers. The two DMA registers can (DMAxDSZH:L)
even be programmed to work together, in order to carry • Destination Count Register (DMAxDCNTH:L)
out more complex data transfers without CPU over- • Start Interrupt Request Source Register
head. (DMAxSIRQ)
Key features of the DMA module include: • Abort Interrupt Request Source Register
• Support access to the following memory regions: (DMAxAIRQ)
- GPR and SFR space (R/W) These registers are detailed in Section 15.13 “Regis-
- Program Flash Memory (R only) ter definitions: DMA”.
- Data EEPROM Memory (R only)
• Programmable priority between the DMA and
CPU Operations. Refer to Section 3.1 “System
Arbitration” for details.
• Programmable Source and Destination address
modes
- Fixed address
- Post-increment address
- Post-decrement address
• Programmable Source and Destination sizes
• Source and destination pointer register,
dynamically updated and reloadable
• Source and destination count register,
dynamically updated and reloadable
• Programmable auto-stop based on Source or
Destination counter
• Software triggered transfers
• Multiple user selectable sources for hardware
triggered transfers
• Multiple user selectable sources for aborting DMA
transfers

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 218


PIC18(L)F25/26K83
15.3 DMA Organization
The DMA module on the K42 family of devices is
designed to move data by using the existing Instruction
Bus<16> and Data Bus<8> without the need for any
dual-porting of memory or peripheral systems
(Figure 15-1). The DMA accesses the required bus
when it has been granted to by the System Arbiter.

FIGURE 15-1: DMA FUNCTIONAL BLOCK DIAGRAM


Rev. 10-000 274A
11/11/201 6

Configure DMA
Module

EN = 1

DMA Source/
Destination Pointers/
Counters are loaded

SIRQEN = 1 & N
Trigger?

DGO = 1

N
Bubble?

Y
DMAxBUF = &DMAxSPTR
Source Read
XIP = 1

N
Bubble?

Y
&DMAxDPTR = DMABUF
Destination Write
XIP = 0

Y Reload
DMAxSCNTIF
DMAxSCNT = 0 DMAxSCNT & DGO = 0
=1
DMAxSPTR

N
Update Y
DMAxSSA, SIRQEN = 0 SSTP = 1
DMAxSCNT

Y Reload
DMAxDCNTIF
DMAxDCNT = 0 DMAxDCNT & DGO = 0
=1
DMAxDPTR

N
Y
Update AIRQEN = 0 DSTP = 1
DMAxDSA,
DMAxDCNT
N

N
DGO = 0

End Process

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 219


PIC18(L)F25/26K83
Depending on the priority of the DMA with respect to
CPU execution (Refer to Section 3.2 “Memory TABLE 15-1: DMA MEMORY ACCESS
Access Scheme” for more information), the DMA
Controller can move data through two methods: Read Source Write Destination

• Stalling the CPU execution until it has completed Program Flash Memory GPR
its transfers (DMA has higher priority over the Program Flash Memory SFR
CPU in this mode of operation) Data EE GPR
• Utilizing unused CPU cycles for DMA transfers
(CPU has higher priority over the DMA in this Data EE SFR
mode of operation). Unused CPU cycles are GPR GPR
referred to as bubbles which are instruction cycles SFR GPR
available for use by the DMA to perform read and
GPR SFR
write operations. In this way, the effective
bandwidth for handling data is increased; at the SFR SFR
same time, DMA operations can proceed without Even though the DMA module has access to all
causing a processor stall. memory and peripherals that are also available to the
CPU, it is recommended that the DMA does not access
15.4 DMA Interface any register that is part of the System arbitration. The
DMA, as a system arbitration client should not be read
The DMA module transfers data from the source to the or written by itself or by another DMA instantiation.
destination one byte at a time, this smallest data move-
ment is called a DMA data transaction. A DMA Mes- The following sections discuss the various control
sage refers to one or more DMA data transactions. interfaces required for DMA data transfers.
Each DMA data transaction consists of two separate 15.4.1 DMA ADDRESSING
actions:
The start addresses for the source read and destination
• Reading the Source Address Memory and storing write operations are set using the DMAxSSA <21:0>
the value in the DMA Buffer register and DMAxDSA <15:0> registers, respectively.
• Writing the contents of the DMA Buffer register to
When the DMA Message transfers are in progress, the
the Destination Address Memory
DMAxSPTR <21:0> and DMAxDPTR <15:0> registers
Note: DMA data movement is a two-cycle contain the current address pointers for each source
operation. read and destination write operation, these registers
are modified after each transaction based on the
The XIP bit (DMAxCON0 register) is a Status bit to
Address mode selection bits.
indicate whether or not the data in the DMAxBUF
register has been written to the destination address. If The SMODE and DMODE bits in the DMAxCON1
the bit is set then data is waiting to be written to the control register determine the address modes of
destination. If clear it means that either data has been operation by controlling how the DMAxSPTR <21:0>
written to the destination or that no source read has and DMAxDPTR <15:0> bits are updated after every
occurred. DMA data transaction combination (Figure 15-2).
The DMA has read access to PFM, Data EEPROM, Each address can be separately configured to:
and SFR/GPR space, and write access to SFR/GPR • Remain unchanged
space. Based on these memory access capabilities, • Increment by 1
the DMA can support the following memory • Decrement by 1
transactions:

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 220


PIC18(L)F25/26K83
FIGURE 15-2: DMA POINTERS BLOCK DIAGRAM
Rev. 10-000272A
8/8/2016

DMAxSSA[21:0] DMAxDSA[15:0]

DMAxSPTR[21:0] DMAxSPTR[15:0]

+1 +1
0 0
-1 -1

SMODE<1:0> DMODE<1:0>

The DMA can initiate data transfers from the PFM, Data A message is started by setting the DGO bit of the
EEPROM or SFR/GPR Space. The SMR<1:0> bits in DMAxCON0 register and terminates when the smaller
the DMAxCON1 register are used to select the type of of the two counters reaches zero.
memory being pointed to by the Source Address When either counter reaches zero the DGO bit is
Pointer. The SMR<1.0> bits are required because the cleared and the counter and pointer registers are
PFM and SFR/GPR spaces have overlapping immediately reloaded with the corresponding size and
addresses that do not allow the specified address to address data. If the other counter did not reach zero
uniquely define the memory location to be accessed. then the next message will continue with the count and
Note 1: For proper memory read access to occur, address corresponding to that register.
the combination of address and space When the source and destination size registers are not
selection must be valid. equal then the ratio of the largest to the smallest size
2: The destination does not have space determines how many messages are in the DMA
selection bits because it can only write to process. For example, when the destination size is 6
the SFR/GPR space. and the source size is 2 then each message will consist
of two transactions and the complete DMA process will
15.4.2 DMA MESSAGE SIZE/COUNTERS consist of three messages. When the larger size is not
an even integer of the smaller size then the last
A transaction is the transfer of one byte. A message message in the process will terminate early when the
consists of one or more transactions. A complete DMA larger count reaches zero. In that case, the larger
process consists of one or more messages. The size counter will reset and the smaller counter will have a
registers determine how many transactions are in a remainder skewing any subsequent messages by that
message. The DMAxSSZ registers determine the amount.
source size and DMAxDSZ registers determine the
destination size. Note: Reading the DMAxSCNT or DMAxDCNT
registers will never return zero. When
When a DMA transfer is initiated, the size registers are
either register is decremented from ‘1’ it is
copied to corresponding counter registers that control
immediately reloaded from the
the duration of the message. The DMAxSCNT registers
corresponding size register.
count the source transactions and the DMAxDCNT
registers count the destination transactions. Both are
simultaneously decremented by one after each
transaction.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 221


PIC18(L)F25/26K83
FIGURE 15-3: DMA COUNTERS BLOCK DIAGRAM
Rev. 10-000273A
8/8/2016

DMAxSSIZ[11:0] DMAxDSIZ[11:0]

DMAxSCNT[11:0] DMAxDCNT[11:0]

1 1

Table 15-2 has a few examples of configuring DMA


Message sizes.

TABLE 15-2: EXAMPLE MESSAGE SIZE TABLE


Operation Example SCNT DCNT Comments
Read from single SFR N equals the number of bytes desired in the
U1RXB 1 N
location to RAM destination buffer. N >= 1.
Write to single SFR location N equals the number of bytes desired in the
U1TXB N 1
from RAM source buffer. N >= 1.
N equals the number of ADC results to be
ADRES[H:L] 2 2*N
stored in memory. N>= 1
Read from multiple SFR N equals the number of TMR1 Acquisition
TMR1[H:L] 2 2*N
location results to be stored in memory. N>= 1
N equals the number of Capture Pulse Width
SMT1CPR[U:H:L] 3 3*N
measurements to be stored in memory. N>= 1
N equals the number of PWM duty cycle val-
PWMDC[H:L] 2*N 2
Write to Multiple SFR regis- ues to be loaded from a memory table. N>= 1
ters Using the DMA to transfer a complete ADC
All ADC registers N*31 31
context from RAM to the ADC registers.N>= 1

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 222


PIC18(L)F25/26K83
15.5 DMA Message Transfers
Once the Enable bit is set to start DMA message
transfers, the Source/Destination pointer and counter
registers are initialized to the conditions shown in
Table 15-3.
TABLE 15-3: DMA INITIAL CONDITIONS
Register Value loaded
DMAxSPTR<21:0> DMAxSSA<21:0>
DMAxSCNT<11:0> DMAxSSZ<11:0>
DMAxDPTR<15:0> DMAxDSA<15:0>
DMAxDCNT<11:0> DMAxDSZ<11:0>
During the DMA Operation after each transaction,
Table 15-4 and Table 15-5 indicate how the Source/
Destination pointer and counter registers are modified

TABLE 15-4: DMA SOURCE POINTER/COUNTER DURING OPERATION


Register Modified Source Counter/Pointer Value
DMAxSCNT<11:0> != 1 DMAxSCNT = DMAxSCNT -1
SMODE = 00: DMAxSPTR = DMAxSPTR
SMODE = 01: DMAxSPTR = DMAxSPTR + 1
SMODE = 10: DMAxSPTR = DMAxSPTR - 1
DMAxSCNT<11:0> == 1 DMAxSCNT = DMAxSSZ
DMAxSPTR = DMAxSSA

TABLE 15-5: DMA DESTINATION POINTER/COUNTER DURING OPERATION


Register Modified Destination Counter/Pointer Value
DMAxDCNT<11:0>!= 1 DMAxDCNT = DMAxDCNT -1
DMODE = 00: DMAxDPTR = DMAxDPTR
DMODE = 01: DMAxDPTR = DMAxDPTR + 1
DMODE = 10: DMAxDPTR = DMAxDPTR - 1
DMAxDCNT<11:0> == 1 DMAxDCNT = DMAxDSZ
DMAxDPTR = DMAxDSA
The following sections discuss how to initiate and 15.5.1.1 User Software Control
terminate DMA transfers.
Software starts or stops DMA transaction by setting/
clearing the DGO bit. The DGO bit is also used to
15.5.1 STARTING DMA MESSAGE
indicate whether a DMA hardware trigger has been
TRANSFERS
received and a message is in progress.
The DMA can initiate data transactions by either of the
following two conditions: Note 1: Software start can only occur if the EN bit
(DMAxCON1) is set.
1. User software control
2: If the CPU writes to the DGO bit while it is
2. Hardware trigger, SIRQ
already set, there is no effect on the
system, the DMA will continue to operate
normally.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 223


PIC18(L)F25/26K83
15.5.1.2 Hardware Trigger, SIRQ 15.5.2.3 Source Count Reload
A Hardware trigger is an interrupt request from another A DMA message is considered to be complete when
module sent to the DMA with the purpose of starting a the Source count register is decremented from 1 and
DMA message. The DMA start trigger source is user then reloaded (i.e., once the last byte from either the
selectable using the DMAxSIRQ register. source read or destination write has occurred). When
The SIRQEN bit (DMAxCON0 register) is used to the SSTP bit is set (DMAxCON1 register) and the
enable sampling of external interrupt triggers by which source count register is reloaded then further message
a DMA transfer can be started. When set the DMA will transfer is stopped.
sample the selected Interrupt source and when
15.5.2.4 Destination Count Reload
cleared, the DMA will ignore the selected Interrupt
source. Clearing SIRQEN does not stop a DMA A DMA message is considered to be complete when
transaction currently progress, it only stops more the Destination count register is decremented from 1
hardware request signals from being received. and then reloaded (i.e., once the last byte from either
the source read or destination write has occurred).
15.5.2 STOPPING DMA MESSAGE When the DSTP bit is set (DMAxCON1) and the
TRANSFERS destination count register is reloaded then further
message transfer is stopped.
The DMA controller can stop data transactions by
either of the following two conditions: Note: Reading the DMAxSCNT or DMAxDCNT
1. Clearing the DGO bit registers will never return zero. When
either register is decremented from ‘1’ it is
2. Hardware trigger, AIRQ
immediately reloaded from the
3. Source Count reload corresponding size register.
4. Destination Count reload
5. Clearing the Enable bit 15.5.2.5 Clearing the Enable bit
If the User clears the EN bit, the message will be
15.5.2.1 User Software Control
stopped and the DMA will return to its default
If the user clears the DGO bit, the message will be configuration. This is also referred to as a hard-stop as
stopped and the DMA will remain in the current the DMA cannot resume operation from where it was
configuration. stopped.
For example, if the user clears the DGO bit after source Note: After the DMA message transfer is
data has been read but before it is written to the stopped, it requires an extra instruction
destination, then the data in DMAxBUF will not reach its cycle before the Stop condition takes
destination. effect. Thus, after the Stop condition has
This is also referred to as a soft-stop as the operation occurred, a Source read or a Destination
can resume if desired by setting DGO bit again. write can occur depending on the Source
or Destination Bus availability.
15.5.2.2 Hardware Trigger, AIRQ
The AIRQEN bit (DMAxCON0 register) is used to 15.5.3 DISABLE DMA MESSAGES
enable sampling of external interrupt triggers by which TRANSFERS UPON COMPLETION
a DMA transaction can be aborted. Once the DMA message is complete it may be
Once an Abort interrupt request has been received, the desirable to disable the trigger source to prevent
DMA will perform a soft-stop by clearing the DGO bit as overrun or under run of data. This can be done by either
well as clearing the SIRQEN bit so overruns do not of the following methods:
occur. The AIRQEN bit is also cleared to prevent 1. Clearing the SIRQEN bit
additional abort signals from triggering false aborts.
2. Setting the SSTP bit
If desired, the DGO bit can be set again and the DMA 3. Setting the DSTP bit
will resume operation from where it left off after the soft-
stop had occurred as none of the DMA state
information is changed in the event of an abort.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 224


PIC18(L)F25/26K83
15.5.3.1 Clearing the SIRQEN bit 15.7 Types of Data Transfers
Clearing the SIRQEN bit (DMAxCON1 register) stops Based on the memory access capabilities of the DMA
the sampling of external start interrupt triggers hence (See Table 15-1), the following sections discuss the
preventing further DMA Message transfers. different types of data movement between the Source
An example would be a communications peripheral and Destination Memory regions.
with a level-triggered interrupt. The peripheral will • N: 1
continue to request data (because its buffer is empty)
even though there is no more data to be moved. This type of transfer is common when sending
Disabling the SIRQEN bit prevents the DMA from predefined data packets (such as strings) through a
processing these requests single interface point (such as communications
modules transmit registers).
15.5.3.2 Source/Destination Stop • N: N
The SSTP and DSTP bits (DMAxCON0 register) This type of transfer is useful for moving information out
determine whether or not to disable the hardware of the Program Flash or Data EEPROM to SRAM for
triggers (SIRQEN = 0) once a DMA message has manipulation by the CPU or other peripherals.
completed.
• 1: N
When the SSTP bit is set and the DMAxSCNT = 0, then
This type of transfer is common when bridging two
the SIRQEN bit will be cleared. Similarly, when the
different modules data streams together
DSTP bit is set and the DMAxDCNT = 0, the SIRQEN
(communications bridge).
bit will be cleared.
• 1: N
Note: The SSTP and DSTP bits are
independent functions and do not depend This type of transfer is useful for moving information
on each other. It is possible for a message from a single data source into a memory buffer
to be stopped by either counter at (communications receive registers).
message end or both counters at
message end. 15.8 DMA Interrupts
Each DMA has its own set of four interrupt flags, used
15.6 Types of Hardware Triggers to indicate a range of conditions during data transfers.
The interrupt flag bits can be accessed using the corre-
The DMA has two different trigger inputs namely the
sponding PIR registers (Refer to the Interrupt Section).
Source trigger and the abort trigger. Each of these trig-
ger sources is user configurable using the DMAxSIRQ 15.8.1 DMA SOURCE COUNT INTERRUPT
and DMAxAIRQ registers.
The DMAxSCNTIF source count interrupt flag is set
Based on the source selected for each trigger, there every time the DMAxSCNT<11:0> reaches zero and is
are two types of requests that can be sent to the DMA. reloaded to its starting value.
• Edge triggers
• Level triggers 15.8.2 DMA DESTINATION COUNT
INTERRUPT
15.6.1 EDGE TRIGGER REQUESTS The DMAxDCNTIF destination count interrupt flag is
An Edge request occurs only once when a given set every time the DMAxDCNT<11:0> reaches zero
module interrupt requirements are true. and is reloaded to its starting value.
The DMA Source Count zero and Destination Count
15.6.2 LEVEL TRIGGER REQUESTS zero interrupts are used in conjunction to determine
A level request is asserted as long as the condition that when to signal the CPU when the DMA Messages are
causes the interrupt is true. completed.

15.8.3 ABORT INTERRUPT


The DMAxAIF abort interrupt flag is used to signal that
the DMA has halted activity due to an abort signal from
one of the abort sources. This is used to indicate that
the transaction has been halted for some reason.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 225


PIC18(L)F25/26K83
15.8.4 OVERRUN INTERRUPT 15.9 DMA Setup and Operation
When the DMA receives a trigger to start a new The following steps illustrate how to configure the DMA
message before the current message is completed, for data transfer:
then the DMAxORIF Overrun interrupt flag is set.
1. Program the appropriate Source and
This condition indicates that the DMA is being Destination addresses for the transaction into
requested before its current transaction is finished. the DMAxSSA and DMAxDSA registers
This implies that the active DMA may not be able to
2. Select the source memory region that is being
keep up with the demands from the peripheral module
addressed by DMAxSSA register, using the
being serviced, which may result in data loss.
SMR<1:0> bits.
The DMAxORIF flag being set does not cause the 3. Program the SMODE and DMODE bits to select
current DMA transfer to terminate. the addressing mode.
The Overrun interrupt is only available for trigger 4. Program the Source size DMAxSSZ and
sources that are edge based and not available for Destination size DMAxDSZ registers with the
sources that are level-based. Therefore a level-based number of bytes to be transferred. It is
interrupt source does not trigger a DMA overrun error recommended for proper operation that the size
due to the potential latency issues in the system. registers be a multiple of each other.
An example of an interrupt that could use the overrun 5. If the user desires to disable data transfers once
interrupt would be a timer overflow (or period match) the message has completed, then the SSTP and
interrupt. This event only happens every time the timer DSTP bits in DMAxCON0 register need to be
rolls over and is not dependent on any other system set.(see Section 15.5.3.2 “Source/Destina-
conditions. tion Stop”).
An example of an interrupt that does not allow the 6. If using hardware triggers for data transfer,
overrun interrupt would be the UARTTX buffer. The setup the hardware trigger interrupt sources for
UART will continue to assert the interrupt until the DMA the starting and aborting DMA transfers
is able to process the MSG. Due to latency issues, the (DMAxSIRQ and DMAxAIRQ), and set the
DMA may not be able to service an empty buffer corresponding interrupt request enable bits
immediately, but the UART continues to assert its (SIRQEN and AIRQEN).
transmit interrupt until it is serviced. If overrun was 7. Select the priority level for the DMA (see
allowed in this case, the overrun would occur almost Section 3.1 “System Arbitration”) and lock
immediately as the module samples the interrupt the priorities (see Section 3.1.1 “Priority
sources every instruction cycle. Lock”)
8. Enable the DMA (DMAxCON1bits. EN = 1)
9. If using software control for data transfer, set the
DGO bit, else this bit will be set by the hardware
trigger.
Once the DMA is set up, the following flow chart
describes the sequence of operation when the DMA
uses hardware triggers and utilizes the unused CPU
cycles (bubble) for DMA transfers.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 226


PIC18(L)F25/26K83
FIGURE 15-4: DMA OPERATION WITH HARDWARE TRIGGER
Rev. 10-000274A
8/8/2016

Configure DMA
Module

EN = 1

Load DMA Source/


Destination Pointers
& Counters

SIRQEN = 1 & N
Trigger?

DGO = 1

Bubble?

DMAxBUF = &DMAxSPTR
Source Read
XIP = 1

N
Bubble?

Y
&DMAxDPTR = DMABUF
Destination Write
XIP = 0

Y Reload
DMAxSCNTIF
DMAxSCNT = 0 DMAxSCNT & DGO = 0
=1
DMAxSPTR

N
Update Y
DMAxSSA, SIRQEN = 0 SSTP = 1
DMAxSCNT

Y Reload
DMAxDCNTIF
DMAxDCNT = 0 DMAxDCNT & DGO = 0
=1
DMAxDPTR

Y
Update AIRQEN = 0 DSTP = 1
DMAxDSA,
DMAxDCNT
N

N
DGO = 0

End Process

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 227


PIC18(L)F25/26K83
The following sections describe with visual reference
the sequence of events for different configurations of
the DMA module

15.9.1 SOURCE STOP


When the Source Stop bit is set (SSTP = 1) and the
DMAxSCNT register reloads, the DMA clears the
SIRQEN bit to stop receiving new start interrupt
request signals and sets the DMAxSCNTIF flag.

FIGURE 15-5: GPR-GPR TRANSACTIONS WITH HARDWARE TRIGGERS, SSTP = 1


Rev. 10-000275A
8/9/2016

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Instruction
Clock

EN

SIRQEN

Source Hardware
Trigger

DGO

DMAxSPTR 0x100 0x101 0x102 0x103 0x100

DMAxDPTR 0x200 0x201 0x201 0x201 0x200

DMAxSCNT 4 3 2 1 4

DMAxDCNT 2 1 2 1 2

DMA STATE IDLE SR(1) DW(2) SR(1) DW(2) IDLE SR(1) DW(2) SR(1) DW(2) IDLE

DMAxSCNTIF

DMAxDCNTIF

DMAxSSA 0x100 DMAxDSA 0x200

DMAxSSZ 0x4 DMAxDSZ 0x2

Note 1: SR – Source Read


2: DW – Destination Write

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 228


PIC18(L)F25/26K83
15.9.2 DESTINATION STOP
When the Destination Stop bit is set (DSTP = 1) and the
DMAxDCNT register reloads, the DMA clears the
SIRQEN bit to stop receiving new start interrupt
request signals and sets the DMAxDCNTIF flag.

FIGURE 15-6: GPR-GPR TRANSACTIONS WITH HARDWARE TRIGGERS, DSTP = 1


Rev. 10-000275B
8/9/2016

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Instruction
Clock

EN

SIRQEN

Source Hardware
Trigger

DGO

DMAxSPTR 0x100 0x101 0x100 0x101 0x100

DMAxDPTR 0x200 0x201 0x202 0x203 0x200

DMAxSCNT 2 1 2 1 2

DMAxDCNT 4 3 2 1 4

(1) (2) (1) (2) (1) (2) (1) (2)


DMA STATE IDLE SR DW SR DW IDLE SR DW SR DW IDLE

DMAxSCNTIF

DMAxDCNTIF

DMAxSSA 0x100 DMAxDSA 0x200

DMAxSSZ 0x2 DMAxDSZ 0x4

Note 1: SR – Source Read


2: DW – Destination Write

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 229


PIC18(L)F25/26K83
15.9.3 CONTINUOUS TRANSFER
When the Source or the Destination Stop bit is cleared
(SSTP, DSTP = 0), the transactions continue unless
cleared by the user. The DMAxSCNTIF and
DMAxDCNTIF flags are set whenever the respective
counter registers are reloaded.

FIGURE 15-7: GPR-GPR TRANSACTIONS WITH HARDWARE TRIGGERS, SSTP, DSTP = 0


Rev. 10-000275D
9/15/2016

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

Instruction
Clock

EN

SIRQEN
Source
Hardware
Trigger
DGO

DMAxSPTR 0x100 0x101 0x100 0x101 0x100 0x101 0x100 0x101 0x100

DMAxDPTR 0x200 0x201 0x202 0x203 0x200 0x201 0x202 0x203 0x202

DMAxSCNT 2 1 2 1 2 1 2 1 2

DMAxDCNT 4 3 2 1 4 3 2 1 2
DMA (1) (2)
IDLE SR DW SR(1) DW(2) IDLE SR(1) DW(2) SR(1) DW(2) IDLE SR(1) DW(2) SR(1) DW(2) IDLE SR(1) DW(2) SR(1) DW(2) IDLE
STATE

DMAxSCNTIF

DMAxDCNTIF

DMAxSSA 0x100 DMAxDSA 0x200

DMAxSSZ 0x2 DMAxDSZ 0x4

Note 1: SR – Source Read


2: DW – Destination Write

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 230


PIC18(L)F25/26K83
15.9.4 TRANSFER FROM SFR TO GPR Hardware trigger, the Source address can be set to
point to the ADC Result registers at 3EEF, the
The following visual reference describes the sequence
Destination address can be set to point to any GPR
of events when copying ADC results to a GPR location.
location of our choice (Example 0x100).
The ADC Interrupt Flag can be chosen as the Source

FIGURE 15-8: SFR SPACE TO GPR SPACE TRANSFER


Rev. 10-000275C
8/12/2016

1 2 3 4 5 6 7 8 N N+1 N+2 N+3 N+4 N+5 N+6 N+7 N+x

Instruction
Clock

EN

SIRQEN

Source Hardware
Trigger

DGO

DMAxSPTR 0x3EEF 0x3EF0 0x3EEF 0x3EF0 0x3EEF

DMAxDPTR 0x100 0x101 0x102 0x103 0x103

DMAxSCNT 2 1 2 1 2

DMAxDCNT 10 9 8 7 6

(1) (2) (1) (2) (1) (2) (1) (2)


DMA STATE IDLE SR DW SR DW IDLE SR DW SR DW IDLE

DMAxSCNTIF

DMAxDCNTIF

DMAxSSA 0x3EEF DMAxDSA 0x100

DMAxSSZ 0x2 DMAxDSZ 0xA

SMODE 0x1 DMODE 0x1

Note 1: SR – Source Read


2: DW – Destination Write

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 231


PIC18(L)F25/26K83
15.9.5 OVERRUN INTERRUPT
The Overrun Interrupt flag is set if the DMA receives a
trigger to start a new message before the current mes-
sage is completed.

FIGURE 15-9: OVERRUN INTERRUPT


Rev. 10-000275E
8/11/2016

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Instruction
Clock

EN

SIRQEN

Source Hardware
Trigger

DGO

DMAxSPTR 0x100 0x101 0x100 0x101 0x100

DMAxDPTR 0x200 0x201 0x202 0x203 0x200

DMAxSCNT 2 1 2 1 2

DMAxDCNT 4 3 2 1 4

DMA STATE IDLE SR(1) DW(2) SR(1) DW(2) IDLE SR(1) DW(2) SR(1) DW(2) IDLE

DMAxSCNTIF

DMAxDCNTIF

DMAxORIF

DMAxCON1bits.SMA = 01

DMAxSSA 0x100 DMAxDSA 0x200

DMAxSSZ 0x2 DMAxDSZ 0x20

Note 1: SR – Source Read


2: DW – Destination Write

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 232


PIC18(L)F25/26K83
15.9.6 ABORT TRIGGER, MESSAGE
COMPLETE
The AIRQEN needs to be set in order for the DMA to
sample Abort Interrupt sources. When an abort
interrupt is received the SIRQEN bit is cleared and the
AIRQEN bit is cleared to avoid receiving further abort
triggers.

FIGURE 15-10: ABORT AT THE END OF MESSAGE


Rev. 10-000275F
8/12/2016
1 2 3 4 5 6 7 8 N N+1 N+2 N+3 N+4 N+5 N+6 N+7 N+8

Instruction
Clock

EN

SIRQEN

AIRQEN
Source Hardware
Trigger
Abort Hardware
Trigger

DGO

DMAxSPTR 0x3EEF 0x3EF0 0x3EEF 0x3EF0 0x3EEF

DMAxDPTR 0x100 0x101 0x109 0x10A 0x100

DMAxSCNT 2 1 2 1 2

DMAxDCNT 10 9 2 1 10

DMA STATE IDLE SR(1) DW(2) SR(1) DW(2) IDLE SR(1) DW(2) SR(1) DW(2) IDLE

DMAxSCNTIF

DMAxDCNTIF

DMAxAIF
DMAxSSA 0x3EEF DMAxDSA 0x100

DMAxSSZ 0x2 DMAxDSZ 0xA

Note 1: SR – Source Read


2: DW – Destination Write

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 233


PIC18(L)F25/26K83
15.9.7 ABORT TRIGGER, MESSAGE IN The SIREQEN bit is cleared to prevent any overrun and
PROGRESS the AIRQEN bit is cleared to prevent any false aborts.
When an abort interrupt request is received in the When the DGO bit is set again the DMA will resume
between a DMA transaction, the DMA will perform a operation from where it left off after the soft-stop.
soft-stop by clearing the DGO (i.e., if the DMA was
reading the source register, it will complete the read
operation and then clear the DGO bit)

FIGURE 15-11: ABORT DURING MESSAGE TRANSFER

Rev. 10-000275G
8/12/2016
1 2 3 4 5 6 7 8 9 10 10 11 12

Instruction
Clock

EN

SIRQEN

AIRQEN
Source Hardware
Trigger
Abort Hardware
Trigger
DGO

DMAxSPTR 0x3EEF 0x3EF0 0x3EEF

DMAxDPTR 0x100 0x101 0x102

DMAxSCNT 2 1 2

DMAxDCNT 10 9 8

DMA STATE IDLE SR(1) IDLE DW(2) SR(1) DW(2) IDLE

DMAxCONbits.XIP

DMAxAIF

DMAxSSA 0x3EEF DMAxDSA 0x100

DMAxSSZ 0x2 DMAxDSZ 0xA

Note 1: SR – Source Read


2: DW – Destination Write

The following table contains some of the cases in which


the DMA module can be configured to.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 234


TABLE 15-6: EXAMPLE DMA USE CASE TABLE
 2017 Microchip Technology Inc.

Source Module Source Register(s) Destination Module Destination Register(s) DCHxSIRQ Comment
Signal Measurement SMTxCPW[U:H:L] GPR GPR[x,y,z] SMTxPWAIF Store Captured Pulse-width
Timer values
(SMT) SMTxCPR[U:H:L] SMTxPRAIF Store Captured Period values
GPR/SFR/Program MEMORY[x,y] TMR0 TMR0[H:L] TMR0IF Use as a Timer0 reload for
Flash/Data EEPROM custom 16-bit value
GPR/SFR/Program MEMORY[x] TMR0 PR0 ANY Update TMR0 frequency
Flash/Data EEPROM based on a specific trigger
GPR/SFR/Program MEMORY[x,y] TMR1 TMR1[H:L] TMR1IF Use as a Timer1 reload for
Flash/Data EEPROM custom 16-bit value
TMR1 TMR1[H:L] GPR GPR[x,y] TMR1GIF Use TMR1 Gate interrupt flag
to read data out of TMR1
register
GPR/SFR/Program MEMORY[x] TMR2 PR2 TMR2IF
Flash/Data EEPROM
GPR/SFR/Program MEMORY[x,y,z] TMR2 PR2 ANY Frequency generator with 50%
Preliminary

Flash/Data EEPROM CCP or PWM CCPR[H:L] or duty cycle look up table


PWMDC[H:L]
CCP CCPR[H:L] GPR GPR[x,y] CCPxIF Move data from CCP 16b
Capture
GPR/SFR/Program MEMORY[x,y] CCP CCPR[H:L] ANY Load Compare value or PWM
Flash/Data EEPROM values into the CCP

PIC18(L)F25/26K83
GPR/SFR/Program MEMORY [x,y,z,u,v,w] CCPx CCPxR[H:L] ANY Update multiple PWM values
Flash/Data EEPROM CCPy CCPyR[H:L] at the same time
CCPz CCPzR[H:L] (e.g., 3-phase motor control)
GPR/SFR/Program MEMORY[x,y,z] NCO NCOxINC[U:H:L] ANY Frequency Generator look-up
Flash/Data EEPROM table
GPR/SFR/Program MEMORY[x] DAC DACxCON0 ANY Update DAC values
Flash/Data EEPROM
GPR/SFR/Program MEMORY[x] OSCTUNE OSCTUNE ANY Automated Frequency
Flash/Data EEPROM dithering
DS40001943A-page 235
PIC18(L)F25/26K83
15.10 Reset 15.12 DMA Register Interfaces
The DMA registers are set to the default state on any The DMA can transfer data to any GPR or SFR
Reset. The registers are also reset to the default state location. For better user accessibility some of the more
when the enable bit is cleared (DMA1CON1bits.EN=0). commonly used SFR spaces have their Mirror registers
placed in Bank 64 (0x4000-0x40FF), these Mirror
15.11 Power Saving Mode Operation registers can be only accessed through the DMA
Source and Destination Address registers.
The DMA utilizes system clocks and it is treated as a
peripheral when it comes to power-saving operations.
Like other peripherals, the DMA also uses Peripheral
Module Disable bits to further tailor its operation in low-
power states.

15.11.1 SLEEP MODE


When the device enters Sleep mode, the system clock
to the module is shut down, therefore no DMA
operation is supported in Sleep. Once the system clock
is disabled, the requisite read and write clocks are also
disabled without which the DMA cannot perform any of
its tasks.
Any transfers that may be in progress are resumed on
exiting from Sleep mode. Register contents are not
affected by the device entering or leaving Sleep mode.
It is recommended that DMA transactions be allowed to
finish before entering Sleep mode.

15.11.2 IDLE MODE


In IDLE mode, all of the system clocks (including the
read and write clocks) are still operating but the CPU is
not using them to save power.
Therefore, every instruction cycle is available to the
system arbiter and if the bubble is granted to the DMA,
it may be utilized to move data.

15.11.3 DOZE MODE


Similar to the Idle mode, the CPU does not utilize all of
the available instruction cycles slots that are available
to it in order to save power. It only executes instructions
based on its settings from the Doze settings.
Therefore, every instruction not used by the CPU is
available for system arbitration and may be utilized by
the DMA if granted by the arbiter.

15.11.4 PERIPHERAL MODULE DISABLE


The Peripheral Module Disable (PMD) registers
provide a method to disable DMA by gating all clock
sources supplied to it. The respective DMAxMD bit
needs to be set in order to disable the DMA.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 236


PIC18(L)F25/26K83
EXAMPLE 15-1: SETUP DMA1 TO MOVE DATA FROM PROGRAM FLASH MEMORY TO UART1
TRANSMIT BUFFER USING HARDWARE TRIGGERS
//This code example illustrates using DMA1 to transfer
//10 bytes of data from 0x1000 in PFM to U1TXB 0x3DEA

void main() {
//System Initialize
initializeSystem();

//Setup UART1
initializeUART1();

//Setup DMA1
//DMA1CON1 - DPTR remains, Source Memory Region PFM, SPTR increments, SSTP
DMA1CON1 = 0x0B;

//Source registers
//Source size
DMA1SSZH = 0x00;
DMA1SSZL = 0x0A;

//Source start address, 0x1000


DMA1SSAU = 0x00;
DMA1SSAH = 0x10;
DMA1SSAL = 0x00;

//Destination registers
//Destination size
DMA1DSZH = 0x00;
DMA1DSZL = 0x01;

//Destination start address, 0x3DEA


DMA1DSAH = 0x3D;
DMA1DSAL = 0xEA;

//Start trigger source U1TX


DMA1SIRQ = 0x1C;

//Enable & Start DMA transfer


DMA1CON0 = 0xC0;

while (1) {
doSomething();
}
}

15.13 Register definitions: DMA


Long bit name prefixes for the DMA peripherals are
shown in Table 15-7. Refer to Section 1.3 “Register
and Bit naming conventions” for more information.

TABLE 15-7: REGISTER AND BIT NAMING


Peripheral Bit Name Prefix
DMA 1 DMA1
DMA 2 DMA2

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 237


PIC18(L)F25/26K83
REGISTER 15-1: DMAxCON0: DMAx CONTROL REGISTER 0
R/W-0/0 R/W/HC-0/0 R/W/HS/HC-0/0 U-0 U-0 R/W/HC-0/0 U-0 R/HS/HC-0/0
EN SIRQEN DGO — — AIRQEN — XIP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR 0 = bit is cleared x = bit is unknown
and BOR/Value at all u = bit is unchanged
other Resets

bit 7 EN: DMA Module Enable bit


1 = Enables module
0 = Disables module
bit 6 SIRQEN: Start of Transfer Interrupt Request Enable bits
1 = Hardware triggers are allowed to start DMA transfers
0 = Hardware triggers are not allowed to start DMA transfers
bit 5 DGO: DMA transaction bit
1 = DMA transaction is in progress
0 = DMA transaction is not in progress
bit 4-3 Unimplemented: Read as ‘0’
bit 2 AIRQEN: Abort of Transfer Interrupt Request Enable bits
1 = Hardware triggers are allowed to abort DMA transfers
0 = Hardware triggers are not allowed to abort DMA transfers
bit 1 Unimplemented: Read as ‘0’
bit 0 XIP: Transfer in Progress Status bit
1 = The DMAxBUF register currently holds contents from a read operation and has not transferred data
to the destination.
0 = The DMAxBUF register is empty or has successfully transferred data to the destination address

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 238


PIC18(L)F25/26K83
REGISTER 15-2: DMAxCON1: DMAx CONTROL REGISTER1
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
DMODE<1:0> DSTP SMR<1:0> SMODE<1:0> SSTP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets

bit 7-6 DMODE<1:0>: Destination Address Mode Selection bits


11 = Reserved, Do not use
10 = DMAxDPTR<15:0> is decremented after each transfer completion
01 = DMAxDPTR<15:0> is incremented after each transfer completion
00 = DMAxDPTR<15:0> remains unchanged after each transfer completion
bit 5 DSTP: Destination Counter Reload Stop bit
1 = SIRQEN bit is cleared when Destination Counter reloads
0 = SIRQEN bit is not cleared when Destination Counter reloads
bit 4-3 SMR[1:0]: Source Memory Region Select bits
1x = DMAxSSA<21:0> points to Data EEPROM
01 = DMAxSSA<21:0> points to Program Flash Memory
00 = DMAxSSA<21:0> points to SFR/GPR Data Space
bit 2-1 SMODE[1:0]: Source Address Mode Selection bits
11 = Reserved, Do not use
10 = DMAxSPTR<21:0> is decremented after each transfer completion
01 = DMAxSPTR<21:0> is incremented after each transfer completion
00 = DMAxSPTR<21:0> remains unchanged after each transfer completion
bit 0 SSTP: Source Counter Reload Stop bit
1 = SIRQEN bit is cleared when Source Counter reloads
0 = SIRQEN bit is not cleared when Source Counter reloads

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 239


PIC18(L)F25/26K83
REGISTER 15-3: DMAxBUF: DMAx DATA BUFFER REGISTER
R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
BUF7 BUF6 BUF5 BUF4 BUF3 BUF2 BUF1 BUF0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR 1 = bit is set 0 = bit is cleared x = bit is unknown
and BOR/Value at all u = bit is unchanged
other Resets

bit 7-0 BUF<7:0>: DMA Internal Data Buffer bits


DMABUF<7:0>
These bits reflect the content of the internal data buffer the DMA peripheral uses to hold the data being
moved from the source to destination.

REGISTER 15-4: DMAxSSAL: DMAx SOURCE START ADDRESS LOW REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
SSA<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR 1 = bit is set 0 = bit is cleared x = bit is unknown
and BOR/Value at all u = bit is unchanged
other Resets

bit 7-0 SSA<7:0>: Source Start Address bits

REGISTER 15-5: DMAxSSAH: DMAx SOURCE START ADDRESS HIGH REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
SSA<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 7-0 SSA<15:8>: Source Start Address bits

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 240


PIC18(L)F25/26K83
REGISTER 15-6: DMAxSSAU: DMAx SOURCE START ADDRESS UPPER REGISTER
U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — SSA<21:16>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR 1 = bit is set 0 = bit is cleared x = bit is unknown
and BOR/Value at all u = bit is unchanged
other Resets

bit 7-0 SSA<21:16>: Source Start Address bits

REGISTER 15-7: DMAxSPTRL: DMAx SOURCE POINTER LOW REGISTER


R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
SPTR<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 15-0 SPTR<7:0>: Current Source Address Pointer

REGISTER 15-8: DMAxSPTRH: DMAx SOURCE POINTER HIGH REGISTER


R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
SPTR<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 5-0 SPTR<15:8>: Current Source Address Pointer

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 241


PIC18(L)F25/26K83
REGISTER 15-9: DMAxSPTRU: DMAx SOURCE POINTER UPPER REGISTER
U-0 U-0 R-0 R-0 R-0 R-0 R-0 R-0
— — SPTR<21:16>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 7-6 Unimplemented: Read as ‘0’


bit 5-0 SPTR<21:16>: Current Source Address Pointer

REGISTER 15-10: DMAxSSZL: DMAx SOURCE SIZE LOW REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
SSZ<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 7-0 SSZ<7:0>: Source Message Size bits

REGISTER 15-11: DMAxSSZH: DMAx SOURCE SIZE HIGH REGISTER


U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — SSZ<11:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 7-4 Unimplemented: Read as ‘0’


bit 3-0 SSZ<11:8>: Source Message Size bits

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 242


PIC18(L)F25/26K83
REGISTER 15-12: DMAxSCNTL: DMAx SOURCE COUNT LOW REGISTER
R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
SCNT<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 7-0 SCNT<7:0>: Current Source Byte Count

REGISTER 15-13: DMAxSCNTH: DMAx SOURCE COUNT HIGH REGISTER


U-0 U-0 U-0 U-0 R-0 R-0 R-0 R-0
— — — — SCNT<11:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR 1 = bit is set 0 = bit is cleared x = bit is unknown
and BOR/Value at all u = bit is unchanged
other Resets

bit 7-4 Unimplemented: Read as ‘0’


bit 3-0 SCNT<11:8>: Current Source Byte Count

REGISTER 15-14: DMAxDSAL: DMAx DESTINATION START ADDRESS LOW REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
DSA<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 7-0 DSA<7:0>: Destination Start Address bits

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 243


PIC18(L)F25/26K83
REGISTER 15-15: DMAxDSAH: DMAx DESTINATION START ADDRESS HIGH REGISTER
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
DSA<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 7-0 DSA<15:8>: Destination Start Address bits

REGISTER 15-16: DMAxDPTRL: DMAx DESTINATION POINTER LOW REGISTER


R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
DPTR<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 7-0 DPTR<7:0>: Current Destination Address Pointer

REGISTER 15-17: DMAxDPTRH: DMAx DESTINATION POINTER HIGH REGISTER


R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
DPTR<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 7-0 DPTR<15:8>: Current Destination Address Pointer

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 244


PIC18(L)F25/26K83
REGISTER 15-18: DMAxDSZL: DMAx DESTINATION SIZE LOW REGISTER
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
DSZ<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 7-0 DSZ<7:0>: Destination Message Size bits

REGISTER 15-19: DMAxDSZH: DMAx DESTINATION SIZE HIGH REGISTER


U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — DSZ<11:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 7-4 Unimplemented: Read as ‘0’


bit 3-0 DSZ<11:8>: Destination Message Size bits

REGISTER 15-20: DMAxDCNTL: DMAx DESTINATION COUNT LOW REGISTER


R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
DCNT<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 7-0 DCNT<7:0>: Current Destination Byte Count

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 245


PIC18(L)F25/26K83
REGISTER 15-21: DMAxDCNTH: DMAx DESTINATION COUNT HIGH REGISTER
U-0 U-0 U-0 U-0 R-0 R-0 R-0 R-0
— — — — DCNT<11:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR and 1 = bit is set 0 = bit is cleared x = bit is unknown
BOR/Value at all other u = bit is unchanged
Resets

bit 7-4 Unimplemented: Read as ‘0’


bit 3-0 DCNT<11:8>: Current Destination Byte Count

REGISTER 15-22: DMAxSIRQ: DMAx START INTERRUPT REQUEST SOURCE SELECTION


REGISTER
U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— SIRQ<6:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR 1 = bit is set 0 = bit is cleared x = bit is unknown
and BOR/Value at all u = bit is unchanged
other Resets

bit 7 Unimplemented: Read as ‘0’


bit 6-0 SIRQ<6:0>: DMAx Start Interrupt Request Source Selection bits
Please refer to Table 15-2 for more information.

REGISTER 15-23: DMAxAIRQ: DMAx ABORT INTERRUPT REQUEST SOURCE SELECTION


REGISTER
U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— AIRQ<6:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n/n = Value at POR 1 = bit is set 0 = bit is cleared x = bit is unknown
and BOR/Value at all u = bit is unchanged
other Resets

bit 7 Unimplemented: Read as ‘0’


bit 6-0 AIRQ<6:0>: DMAx Interrupt Request Source Selection bits
Please refer to Table 15-2 for more information.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 246


PIC18(L)F25/26K83
TABLE 15-2: DMAxSIRQ AND DMAxAIRQ INTERRUPT SOURCES
DMAxSIRQ Trigger Level DMAxSIRQ Trigger Level
DMAxAIRQ Source Triggered DMAxAIRQ Source Triggered
0 Reserved 42 DMA2SCNT No
1 LVD No 43 DMA2DCNT No
2 OSF No 44 DMA2OR No
3 CSW No 45 DMA2A No
4 NVM No 46 I2C2RX Yes
5 SCAN No 47 I2C2TX Yes
6 CRC No 48 I2C2 Yes
7 IOC Yes 49 I2C2E Yes
8 INT0 No 50 U2RX Yes
9 ZCD No 51 U2TX Yes
10 AD No 52 U2E Yes
11 ADT No 53 U2 No
12 CMP1 No 54 TMR3 No
13 SMT1 No 55 TMR3G No
14 SMT1PRA No 56 TMR4 No
15 SMT1PWA No 57 CCP2 No
16 DMA1SCNT No 58 Reserved
17 DMA1DCNT No 59 CWG2 No
18 DMA1OR No 60 CLC2 No
19 DMA1A No 61 INT2 No
20 SPI1RX Yes 62 Reserved
21 SPI1TX Yes 63 Reserved
22 SPI1 Yes 64 Reserved
23 I2C1RX Yes 65 Reserved
24 I2C1TX Yes 66 Reserved
25 I2C1 Yes 67 Reserved
26 I2C1E Yes 68 Reserved
27 U1RX Yes 69 Reserved
28 U1TX Yes 70 TMR5 No
29 U1E Yes 71 TMR5G No
30 U1 No 72 TMR6 No
31 TMR0 No 73 CCP3 No
32 TMR1 No 74 CWG3 No
33 TMR1G No 75 CLC3 No
34 TMR2 No 76 Reserved
35 CCP1 No 77 Reserved
36 Reserved 78 Reserved
37 NCO No 79 Reserved
38 CWG1 No 80 CCP4 No
39 CLC1 No 81 CLC4 No
40 INT1 No 82 Reserved
41 CMP2 No –
127
Note 1: All trigger sources that are not Level-triggered are Edge-triggered.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 247


PIC18(L)F25/26K83

TABLE 15-3: SUMMARY OF REGISTERS ASSOCIATED WITH DMA


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page
DMAxCON0 EN SIRQEN DGO — — AIRQEN — XIP 238
DMAxCON1 DMODE<1:0> DSTP SMR<1:0> SMODE<1:0> SSTP 239
DMAxBUF DBUF7 DBUF6 DBUF5 DBUF4 DBUF3 DBUF2 DBUF1 DBUF0 240
DMAxSSAL SSA<7:0> 240
DMAxSSAH SSA<15:8> 240
DMAxSSAU — — SSA<21:16> 241
DMAxSPTRL SPTR<7:0> 241
DMAxSPTRH SPTR<15:8> 241
DMAxSPTRU — — SPTR<21:16> 242
DMAxSSZL SSZ<7:0> 242
DMAxSSZH — — — — SSZ<11:8> 242
DMAxSCNTL SCNT<7:0> 243
DMAxSCNTH — — — — SCNT<11:8> 243
DMAxDSAL DSA<7:0> 243
DMAxDSAH DSA<15:8> 244
DMAxDPTRL DPTR<7:0> 244
DMAxDPTRH DPTR<15:8> 244
DMAxDSZL DSZ<7:0> 245
DMAxDSZH — — — — DSZ<11:8> 245
DMAxDCNTL DCNT<7:0> 245
DMAxDCNTH — — — — DCNT<11:8> 246
DMAxSIRQ — SIRQ<6:0> 246
DMAxAIRQ — AIRQ<6:0> 246
Legend: — = unimplemented location, read as ‘0’. Shaded cells are not used by DMA.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 248


PIC18(L)F25/26K83
16.0 I/O PORTS Disabling the input buffer prevents analog signal levels
on the pin between a logic high and low from causing
The PIC18(L)F25/26K83 devices have four I/O ports, excessive current in the logic input circuitry. A
allocated as shown in Table 16-1. simplified model of a generic I/O port, without the
interfaces to other peripherals, is shown in Figure 16.1.
TABLE 16-1: PORT ALLOCATION TABLE
FOR PIC18(L)F25/26K83 16.1 GENERIC I/O PORT OPERATION
DEVICES

PORTB

PORTC
PORTA

PORTE
Device
Read LATx
TRISx

PIC18(L)F25K83     (1)
D Q
PIC18(L)F26K83    (1) Write LATx
Write PORTx
Note 1: Pin RE3 only. CK VDD

Each port has ten registers to control the operation. Data Register
These registers are:
Data Bus
• PORTx registers (reads the levels on the pins of I/O pin
the device) Read PORTx
• LATx registers (output latch) To digital peripherals
• TRISx registers (data direction) VSS
ANSELx
• ANSELx registers (analog select) To analog peripherals

• WPUx registers (weak pull-up)


• INLVLx (input level control)
16.2 I/O Priorities
• SLRCONx registers (slew rate control)
• ODCONx registers (open-drain control) Each pin defaults to the PORT data latch after Reset.
Other functions are selected with the peripheral pin
Outside of registers to control bits of all the ports, the select logic. See Section 17.0 “Peripheral Pin Select
two following registers are also present: (PPS) Module” for more information.
• RxyI2C (I2C pad control) Analog input functions, such as ADC and comparator
Most port pins share functions with device peripherals, inputs, are not shown in the peripheral pin select lists.
both analog and digital. In general, when a peripheral These inputs are active when the I/O pin is set for
is enabled on a port pin, that pin cannot be used as a Analog mode using the ANSELx register. Digital output
general purpose output; however, the pin can still be functions may continue to control the pin when it is in
read. Analog mode.
The Data Latch (LATx registers) is useful for Analog outputs, when enabled, take priority over digital
read-modify-write operations on the value that the I/O outputs and force the digital output driver into a
pins are driving. high-impedance state.
A write operation to the LATx register has the same The pin function priorities are as follows:
effect as a write to the corresponding PORTx register. 1. Configuration bits
A read of the LATx register reads of the values held in 2. Analog outputs (disable the input buffers)
the I/O PORT latches, while a read of the PORTx 3. Analog inputs
register reads the actual I/O pin value.
4. Port inputs and outputs from PPS
Ports that support analog inputs have an associated
ANSELx register. When an ANSELx bit is set, the 16.3 PORTx Registers
digital input buffer associated with that bit is disabled.
In this section the generic names such as PORTx,
LATx, TRISx, etc. can be associated with PORTA,
PORTB, and PORTC ports. The functionality of
PORTE is different compared to other ports and is
explained in a separate section.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 249


PIC18(L)F25/26K83
16.3.1 DATA REGISTER 16.3.3 ANALOG CONTROL
PORTx is an 8-bit wide, bidirectional port. The The ANSELx register (Register 16-4) is used to
corresponding data direction register is TRISx configure the Input mode of an I/O pin to analog.
(Register 16-2). Setting a TRISx bit (‘1’) will make the Setting the appropriate ANSELx bit high will cause all
corresponding PORTA pin an input (i.e., disable the digital reads on the pin to be read as ‘0’ and allow
output driver). Clearing a TRISx bit (‘0’) will make the analog functions on the pin to operate correctly.
corresponding PORTx pin an output (i.e., it enables The state of the ANSELx bits has no effect on digital
output driver and puts the contents of the output latch output functions. A pin with TRIS clear and ANSEL set
on the selected pin). Example 16-1 shows how to will still operate as a digital output, but the Input mode
initialize PORTx. will be analog. This can cause unexpected behavior
Reading the PORTx register (Register 16-1) reads the when executing read-modify-write instructions on the
status of the pins, whereas writing to it will write to the affected port.
PORT latch. All write operations are read-modify-write
Note: The ANSELx bits default to the Analog
operations. Therefore, a write to a port implies that the
mode after Reset. To use any pins as
port pins are read, this value is modified and then
digital general purpose or peripheral
written to the PORT data latch (LATx).
inputs, the corresponding ANSEL bits
The PORT data latch LATx (Register 16-3) holds the must be initialized to ‘0’ by user software.
output port data and contains the latest value of a LATx
or PORTx write. 16.3.4 OPEN-DRAIN CONTROL
EXAMPLE 16-1: INITIALIZING PORTA The ODCONx register (Register 16-6) controls the
; This code example illustrates
open-drain feature of the port. Open-drain operation is
; initializing the PORTA register. The independently selected for each pin. When an
; other ports are initialized in the same ODCONx bit is set, the corresponding port output
; manner. becomes an open-drain driver capable of sinking
current only. When an ODCONx bit is cleared, the
BANKSEL PORTA ; corresponding port output pin is the standard push-pull
CLRF PORTA ;Init PORTA drive capable of sourcing and sinking current.
BANKSEL LATA ;Data Latch
CLRF LATA ;
BANKSEL ANSELA ; Note: It is necessary to set open-drain control
CLRF ANSELA ;digital I/O when using the pin for I2C.
BANKSEL TRISA ;
MOVLW B'11111000' ;Set RA<7:3> as inputs
MOVWF TRISA ;and set RA<2:0> as
16.3.5 SLEW RATE CONTROL
;outputs The SLRCONx register (Register 16-7) controls the
slew rate option for each port pin. Slew rate for each
port pin can be controlled independently. When an
16.3.2 DIRECTION CONTROL
SLRCONx bit is set, the corresponding port pin drive is
The TRISx register (Register 16-2) controls the PORTx slew rate limited. When an SLRCONx bit is cleared,
pin output drivers, even when they are being used as The corresponding port pin drive slews at the maximum
analog inputs. The user should ensure the bits in the rate possible.
TRISx register are maintained set when using them as
analog inputs. I/O pins configured as analog inputs
always read ‘0’.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 250


PIC18(L)F25/26K83
16.3.6 INPUT THRESHOLD CONTROL 16.4 PORTE Registers
The INLVLx register (Register 16-8) controls the input
voltage threshold for each of the available PORTx input 16.4.1 MASTER CLEAR INPUT (MCLR)
pins. A selection between the Schmitt Trigger CMOS or For PIC18(L)F2xK83 devices, PORTE is only available
the TTL compatible thresholds is available. The input when Master Clear functionality is disabled (MCLRE =
threshold is important in determining the value of a read 0). In this case, PORTE is a single bit, input-only port
of the PORTx register and also the level at which an comprised of RE3 only. The pin operates as previously
interrupt-on-change occurs, if that feature is enabled. described. RE3 in PORTE register is a read-only bit
See Table 45-4 for more information on threshold and will read ‘1’ when MCLRE = 1 (i.e., Master Clear
levels. enabled).
Note: Changing the input threshold selection 16.4.2 RE3 WEAK PULL-UP
should be performed while all peripheral
modules are disabled. Changing the The port RE3 pin has an individually controlled weak
threshold level during the time a module is internal pull-up. When set, the WPUE3 bit enables the
active may inadvertently generate a RE3 pin pull-up. When the RE3 port pin is configured
transition associated with an input pin, as MCLR, (CONFIG2L, MCLRE = 1 and CONFIG4H,
regardless of the actual voltage level on LVP = 0), or configured for Low-Voltage Programming,
that pin.
(MCLRE = x and LVP = 1), the pull-up is always
16.3.7 WEAK PULL-UP CONTROL enabled and the WPUE3 bit has no effect.
The WPUx register (Register 16-5) controls the 16.4.3 INTERRUPT-ON-CHANGE
individual weak pull-ups for each port pin.
The interrupt-on-change feature is available only on the
16.3.8 EDGE SELECTABLE RE3 pin of PORTE for all devices. If MCLRE = 1 or
INTERRUPT-ON-CHANGE LVP = 1, RE3 port functionality is disabled and
interrupt-on-change on RE3 is not available. For further
An interrupt can be generated by detecting a signal at details refer to Section 18.0 “Interrupt-on-Change”.
the port pin that has either a rising edge or a falling
edge. Any individual pin can be configured to generate
an interrupt. The interrupt-on-change module is pres-
ent on all the pins of Ports B, C, E and on pin RG5. For
further details about the IOC module refer to Section
18.0 “Interrupt-on-Change”.

16.3.9 I2C PAD CONTROL


For the PIC18(L)F25/26K83 devices, the I2C specific
pads are available on RB1, RB2, RC3, RC4, RD0(1)
and RD1(1) pins. The I2C characteristics of each of
these pins is controlled by the RxyI2C registers (see
Register 16-9). These characteristics include enabling
I2C specific slew rate (over standard GPIO slew rate),
selecting internal pull-ups for I2C pins, and selecting
appropriate input threshold as per SMBus
specifications.

Note 1: RD0 and RD1 I2C pads are not available


in PIC18(L)F25K83 parts.
2: Any peripheral using the I2C pins read
the I2C ST inputs when enabled via
RxyI2C.
.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 251


PIC18(L)F25/26K83
16.5 Register Definitions: Port Control
REGISTER 16-1: PORTx: PORTx REGISTER(1)
R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
Rx7 Rx6 Rx5 Rx4 Rx3 Rx2 Rx1 Rx0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
-n/n = Value at POR and BOR/Value at all other Resets

bit 7-0 Rx<7:0>: Rx7:Rx0 Port I/O Value bits


1 = Port pin is  VIH
0 = Port pin is  VIL

Note 1: Writes to PORTx are actually written to the corresponding LATx register.
Reads from PORTx register return actual I/O pin values.

TABLE 16-2: PORT REGISTERS


Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
PORTA RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0
PORTB RB7(1) RB6(1) RB5 RB4 RB3 RB2 RB1 RB0
PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0
PORTE — — — — RE3(2) — — —
Note 1: Bits RB6 and RB7 read ‘1’ while in Debug mode.
2: Bit PORTE3 is read-only, and will read ‘1’ when MCLRE = 1 (Master Clear enabled).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 252


PIC18(L)F25/26K83

REGISTER 16-2: TRISx: TRI-STATE CONTROL REGISTER


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
TRISx7 TRISx6 TRISx5 TRISx4 TRISx3 TRISx2 TRISx1 TRISx0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
-n/n = Value at POR and BOR/Value at all other Resets

bit 7-0 TRISx<7:0>: TRISx Port I/O Tri-state Control bits


1 = Port output driver is disabled
0 = Port output driver is enabled

TABLE 16-3: TRIS REGISTERS


Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
TRISA TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0
TRISB TRISB7(1) TRISB6(1) TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0
Note 1: Bits RB6 and RB7 read ‘1’ while in Debug mode.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 253


PIC18(L)F25/26K83

REGISTER 16-3: LATx: LATx REGISTER(1)


R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
LATx7 LATx6 LATx5 LATx4 LATx3 LATx2 LATx1 LATx0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
-n/n = Value at POR and BOR/Value at all other Resets

bit 7-0 LATx<7:0>: Rx7:Rx0 Output Latch Value bits

Note 1: Writes to LATx are equivalent with writes to the corresponding PORTx register. Reads from LATx register
return register values, not I/O pin values.

TABLE 16-4: LAT REGISTERS


Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
LATA LATA7 LATA6 LATA5 LATA4 LATA3 LATA2 LATA1 LATA0
LATB LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0
LATC LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 254


PIC18(L)F25/26K83

REGISTER 16-4: ANSELx: ANALOG SELECT REGISTER


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
ANSELx7 ANSELx6 ANSELx5 ANSELx4 ANSELx3 ANSELx2 ANSELx1 ANSELx0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
-n/n = Value at POR and BOR/Value at all other Resets

bit 7-0 ANSELx<7:0>: Analog Select on Pins Rx<7:0>


1 = Digital Input buffers are disabled.
0 = ST and TTL input devices are enabled

TABLE 16-5: ANALOG SELECT PORT REGISTERS


Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
ANSELA ANSELA7 ANSELA6 ANSELA5 ANSELA4 ANSELA3 ANSELA2 ANSELA1 ANSELA0
ANSELB ANSELB7 ANSELB6 ANSELB5 ANSELB4 ANSELB3 ANSELB2 ANSELB1 ANSELB0
ANSELC ANSELC7 ANSELC6 ANSELC5 ANSELC4 ANSELC3 ANSELC2 ANSELC1 ANSELC0

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 255


PIC18(L)F25/26K83

REGISTER 16-5: WPUx: WEAK PULL-UP REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
WPUx7 WPUx6 WPUx5 WPUx4 WPUx3 WPUx2 WPUx1 WPUx0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
-n/n = Value at POR and BOR/Value at all other Resets

bit 7-0 WPUx<7:0>: Weak Pull-up PORTx Control bits


1 = Weak Pull-up enabled
0 = Weak Pull-up disabled

TABLE 16-6: WEAK PULL-UP PORT REGISTERS


Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
WPUA WPUA7 WPUA6 WPUA5 WPUA4 WPUA3 WPUA2 WPUA1 WPUA0
WPUB WPUB7 WPUB6 WPUB5 WPUB4 WPUB3 WPUB2 WPUB1 WPUB0
WPUC WPUC7 WPUC6 WPUC5 WPUC4 WPUC3 WPUC2 WPUC1 WPUC0
WPUE — — — — WPUE3(1) — — —
Note 1: If MCLRE = 1, the weak pull-up in RE3 is always enabled; bit WPUE3 is not affected.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 256


PIC18(L)F25/26K83

REGISTER 16-6: ODCONx: OPEN-DRAIN CONTROL REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
ODCx7 ODCx6 ODCx5 ODCx4 ODCx3 ODCx2 ODCx1 ODCx0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
-n/n = Value at POR and BOR/Value at all other Resets

bit 7-0 ODCx<7:0>: Open-Drain Configuration on Pins Rx<7:0>


1 = Output drives only low-going signals (sink current only)
0 = Output drives both high-going and low-going signals (source and sink current)

TABLE 16-7: OPEN-DRAIN CONTROL REGISTERS


Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
ODCONA ODCA7 ODCA6 ODCA5 ODCA4 ODCA3 ODCA2 ODCA1 ODCA0
ODCONB ODCB7 ODCB6 ODCB5 ODCB4 ODCB3 ODCB2 ODCB1 ODCB0
ODCONC ODCC7 ODCC6 ODCC5 ODCC4 ODCC3 ODCC2 ODCC1 ODCC0

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 257


PIC18(L)F25/26K83

REGISTER 16-7: SLRCONx: SLEW RATE CONTROL REGISTER


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
SLRx7 SLRx6 SLRx5 SLRx4 SLRx3 SLRx2 SLRx1 SLRx0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
-n/n = Value at POR and BOR/Value at all other Resets

bit 7-0 SLRx<7:0>: Slew Rate Control on Pins Rx<7:0>, respectively


1 = Port pin slew rate is limited
0 = Port pin slews at maximum rate

TABLE 16-8: SLEW RATE CONTROL REGISTERS


Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
SLRCONA SLRA7 SLRA6 SLRA5 SLRA4 SLRA3 SLRA2 SLRA1 SLRA0
SLRCONB SLRB7 SLRB6 SLRB5 SLRB4 SLRB3 SLRB2 SLRB1 SLRB0
SLRCONC SLRC7 SLRC6 SLRC5 SLRC4 SLRC3 SLRC2 SLRC1 SLRC0

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 258


PIC18(L)F25/26K83

REGISTER 16-8: INLVLx: INPUT LEVEL CONTROL REGISTER


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
INLVLx7 INLVLx6 INLVLx5 INLVLx4 INLVLx3 INLVLx2 INLVLx1 INLVLx0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown
-n/n = Value at POR and BOR/Value at all other Resets

bit 7-0 INLVLx<7:0>: Input Level Select on Pins Rx<7:0>, respectively


1 = ST input used for port reads and interrupt-on-change
0 = TTL input used for port reads and interrupt-on-change

TABLE 16-9: INPUT LEVEL PORT REGISTERS


Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
INLVLA INLVLA7 INLVLA6 INLVLA5 INLVLA4 INLVLA3 INLVLA2 INLVLA1 INLVLA0
INLVLB INLVLB7 INLVLB6 INLVLB5 INLVLB4 INLVLB3 INLVLB2(1) INLVLB1(1) INLVLB0
INLVLC INLVLC7 INLVLC6 INLVLC5 INLVLC4(1) INLVLC3(1) INLVLC2 INLVLC1 INLVLC0
INLVLE — — — — INLVLE3 — — —
Note 1: Any peripheral using the I2C pins read the I2C ST inputs when enabled via RxyI2C.
2: Unimplemented in PIC18(L)F25K83.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 259


PIC18(L)F25/26K83

REGISTER 16-9: RxyI2C: I2C PAD Rxy CONTROL REGISTER


U-0 R/W-0/0 R/W-0/0 R/W-0/0 U-0 U-0 R/W-0/0 R/W-0/0
— SLEW PU<1:0> — — TH<1:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set

bit 7 Unimplemented: Read as ‘0’


bit 6 SLEW: I2C Specific Slew Rate Limiting is Enabled
1 = I2C specific slew rate limiting is enabled. Standard pad slew limiting is disabled. The SLRxy bit
is ignored.
0 = Standard GPIO Slew Rate; enabled/disabled via SLRxy bit.
bit 5-4 PU<1:0>: I2C Pull-up Selection bits
11 = Reserved
10 = 10x current of standard weak pull-up
01 = 2x current of standard weak pull-up
00 = Standard GPIO weak pull-up, enabled via WPUxy bit
bit 3-2 Unimplemented: Read as ‘0’
bit 1-0 TH<1:0>: I2C Input Threshold Selection bits
11 = SMBus 3.0 (1.35 V) input threshold
10 = SMBus 2.0 (2.1 V) input threshold
01 = I2C specific input thresholds
00 = Standard GPIO Input pull-up, enabled via INLVLxy registers

TABLE 16-10: I2C PAD CONTROL REGISTERS


Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
RB1I2C — SLEW PU<1:0> — — TH<1:0>
RB2I2C — SLEW PU<1:0> — — TH<1:0>
RC3I2C — SLEW PU<1:0> — — TH<1:0>
RC4I2C — SLEW PU<1:0> — — TH<1:0>

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 260


PIC18(L)F25/26K83

TABLE 16-11: SUMMARY OF REGISTERS ASSOCIATED WITH I/O


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page
PORTA RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0 252
PORTB RB7(1) RB6(1) RB5 RB4 RB3 RB2 RB1 RB0 252
PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 252
PORTE — — — — RE3(2) — — — 252
TRISA TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 253
TRISB TRISB7(3) TRISB6(3) TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 253
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 253
LATA LATA7 LATA6 LATA5 LATA4 LATA3 LATA2 LATA1 LATA0 254
LATB LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0 254
LATC LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0 254
ANSELA ANSELA7 ANSELA6 ANSELA5 ANSELA4 ANSELA3 ANSELA2 ANSELA1 ANSELA0 255
ANSELB ANSELB7 ANSELB6 ANSELB5 ANSELB4 ANSELB3 ANSELB2 ANSELB1 ANSELB0 255
ANSELC ANSELC7 ANSELC6 ANSELC5 ANSELC4 ANSELC3 ANSELC2 ANSELC1 ANSELC0 255
WPUA WPUA7 WPUA6 WPUA5 WPUA4 WPUA3 WPUA2 WPUA1 WPUA0 256
WPUB WPUB7 WPUB6 WPUB5 WPUB4 WPUB3 WPUB2 WPUB1 WPUB0 256
WPUC WPUC7 WPUC6 WPUC5 WPUC4 WPUC3 WPUC2 WPUC1 WPUC0 256
WPUE — — — — WPUE3(4) — — — 256
ODCONA ODCA7 ODCA6 ODCA5 ODCA4 ODCA3 ODCA2 ODCA1 ODCA0 257
ODCONB ODCB7 ODCB6 ODCB5 ODCB4 ODCB3 ODCB2 ODCB1 ODCB0 257
ODCONC ODCC7 ODCC6 ODCC5 ODCC4 ODCC3 ODCC2 ODCC1 ODCC0 257
SLRCONA SLRA7 SLRA6 SLRA5 SLRA4 SLRA3 SLRA2 SLRA1 SLRA0 258
SLRCONB SLRB7 SLRB6 SLRB5 SLRB4 SLRB3 SLRB2 SLRB1 SLRB0 258
SLRCONC SLRC7 SLRC6 SLRC5 SLRC4 SLRC3 SLRC2 SLRC1 SLRC0 258
INLVLA INLVLA7 INLVLA6 INLVLA5 INLVLA4 INLVLA3 INLVLA2 INLVLA1 INLVLA0 259
INLVLB INLVLB7 INLVLB6 INLVLB5 INLVLB4 INLVLB3 INLVLB2(5) INLVLB1(5) INLVLB0 259
INLVLC INLVLC7 INLVLC6 INLVLC5 INLVLC4(5) INLVLC3(5) INLVLC2 INLVLC1 INLVLC0 259
INLVLE — — — — INLVLE3 — — — 259
RB1I2C — SLEW PU<1:0> — — TH<1:0> 260
RB2I2C — SLEW PU<1:0> — — TH<1:0> 260
RC3I2C — SLEW PU<1:0> — — TH<1:0> 260
RC4I2C — SLEW PU<1:0> — — TH<1:0> 260
Legend: — = unimplemented location, read as ‘0’. Shaded cells are not used by I/O Ports.
Note 1: Bits RB6 and RB7 read ‘1’ while in Debug mode.
2: Bit PORTE3 is read-only, and will read ‘1’ when MCLRE = 1 (Master Clear enabled).
3: Bits RB6 and RB7 read ‘1’ while in Debug mode.
4: If MCLRE = 1, the weak pull-up in RE3 is always enabled; bit WPUE3 is not affected.
5: Any peripheral using the I2C pins read the I2C ST inputs when enabled via RxyI2C.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 261


PIC18(L)F25/26K83
17.0 PERIPHERAL PIN SELECT Multiple peripherals can operate from the same source
simultaneously. Port reads always return the pin level
(PPS) MODULE
regardless of peripheral PPS selection. If a pin also has
The Peripheral Pin Select (PPS) module connects analog functions associated, the ANSEL bit for that pin
peripheral inputs and outputs to the device I/O pins. Only must be cleared to enable the digital input buffer.
digital signals are included in the selections. All analog Although every peripheral has its own PPS input selec-
inputs and outputs remain fixed to their assigned pins. tion register, the selections are identical for every
Input and output selections are independent as shown in peripheral as shown in Register 17-1.
the simplified block diagram Figure 17-1.
Note: The notation “xxx” in the register name is
The peripheral input is selected with the peripheral a place holder for the peripheral identifier.
xxxPPS register (Register 17-1), and the peripheral For example, INT0PPS.
output is selected with the PORT RxyPPS register
(Register 17-2). For example, to select PORTC<7> as
the UART1 RX input, set U1RXPPS to 0b1 0111, and 17.2 PPS Outputs
to select PORTC<6> as the UART1 TX output set Each I/O pin has a PPS register with which the pin
RC6PPS to 0b01 0011. output source is selected. With few exceptions, the port
TRIS control associated with that pin retains control
17.1 PPS Inputs over the pin output driver. Peripherals that control the
pin output driver as part of the peripheral operation will
Each peripheral has a PPS register with which the
override the TRIS control as needed. These
inputs to the peripheral are selected. Inputs include the
peripherals include:
device pins.
• UART
Although every pin has its own PPS peripheral
selection register, the selections are identical for every
pin as shown in Register 17-2.
Note: The notation “Rxy” is a place holder for the
pin identifier. For example, RA0PPS.

FIGURE 17-1: SIMPLIFIED PPS BLOCK DIAGRAM

Rev. 10-000262D
3/27/2017

RxyPPS

abcPPS
Rxy
Rxy
Peripheral abc

RxyPPS

Rxy

Peripheral xyz
RxyPPS
Rxy

xyzPPS
Rxy

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 262


PIC18(L)F25/26K83
17.3 Bidirectional Pins EXAMPLE 17-2: PPS UNLOCK SEQUENCE
; Disable interrupts:
PPS selections for peripherals with bidirectional BCF INTCON0,GIE
signals on a single pin must be made so that the PPS
input and PPS output select the same pin. Peripherals ; Bank to PPSLOCK register
that have bidirectional signals include: BANKSEL PPSLOCK
• I2C MOVLB PPSLOCK
MOVLW 55h

Note: Refer to Table 17-1 for pins that are I2C ; Required sequence, next 4 instructions
MOVWF PPSLOCK
compatible. Clock and data signals can be
MOVLW AAh
routed to any pin, however pins without MOVWF PPSLOCK
I2C compatibility will operate at standard
TTL/ST logic levels as selected by the ; Clear PPSLOCKED bit to enable writes
INVLV register. ; Only a BCF instruction will work
BCF PPSLOCK,0
17.4 PPS Lock ; Enable Interrupts
The PPS includes a mode in which all input and output BSF INTCON0,GIE
selections can be locked to prevent inadvertent
changes. PPS selections are locked by setting the 17.5 PPS One-way Lock
PPSLOCKED bit of the PPSLOCK register. Setting and
clearing this bit requires a special sequence as an extra When this bit is set, the PPSLOCKED bit can only be
precaution against inadvertent changes. Examples of cleared and set one time after a device Reset. This
setting and clearing the PPSLOCKED bit are shown in allows for clearing the PPSLOCKED bit so that the
Example 17-1. input and output selections can be made during initial-
ization. When the PPSLOCKED bit is set after all selec-
EXAMPLE 17-1: PPS LOCK SEQUENCE tions have been made, it will remain set and cannot be
; Disable interrupts: cleared until after the next device Reset event.
BCF INTCON0,GIE
17.6 Operation During Sleep
; Bank to PPSLOCK register
BANKSEL PPSLOCK PPS input and output selections are unaffected by
MOVLB PPSLOCK Sleep.
MOVLW 55h
17.7 Effects of a Reset
; Required sequence, next 4 instructions
MOVWF PPSLOCK A device Power-on-Reset (POR) clears all PPS input
MOVLW AAh and output selections to their default values. All other
MOVWF PPSLOCK Resets leave the selections unchanged. Default input
selections are shown in pin allocation Table 3. The PPS
; Set PPSLOCKED bit to disable writes
one-way lock is also removed.
; Only a BSF instruction will work
BSF PPSLOCK,0

; Enable Interrupts
BSF INTCON0,GIE

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 263


PIC18(L)F25/26K83
17.8 Register Definitions: PPS Input Selection
REGISTER 17-1: xxxPPS: PERIPHERAL xxx INPUT SELECTION
U-0 U-0 R/W-m/u(1) R/W-m/u(1) R/W-m/u(1) R/W-m/u(1) R/W-m/u(1) R/W-m/u(1)
— — xxxPPS<5:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit -n/n = Value at POR and BOR/Value at all other Resets
u = Bit is unchanged x = Bit is unknown q = value depends on peripheral
‘1’ = Bit is set U = Unimplemented bit, m = value depends on default location for that input
‘0’ = Bit is cleared read as ‘0’

bit 7-6 Unimplemented: Read as ‘0’


bit 5-3 xxxPPS<5:3>: Peripheral xxx Input PORTx Pin Selection bits
See Table 17-1 for the list of available ports and default pin locations.
101 = Reserved
100 = Reserved
011 = Reserved
010 = PORTC
001 = PORTB
000 = PORTA
bit 2-0 xxxPPS<2:0>: Peripheral xxx Input PORTx Pin Selection bits
111 = Peripheral input is from PORTx Pin 7 (Rx7)
110 = Peripheral input is from PORTx Pin 6 (Rx6)
101 = Peripheral input is from PORTx Pin 5 (Rx5)
100 = Peripheral input is from PORTx Pin 4 (Rx4)
011 = Peripheral input is from PORTx Pin 3 (Rx3)
010 = Peripheral input is from PORTx Pin 2 (Rx2)
001 = Peripheral input is from PORTx Pin 1 (Rx1)
000 = Peripheral input is from PORTx Pin 0 (Rx0)

Note 1: The Reset value ‘m’ of this register is determined by device default locations for that input.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 264


PIC18(L)F25/26K83

TABLE 17-1: PPS INPUT REGISTER DETAILS


Default Pin Input Available from Selected
Register Reset PORTx
Peripheral PPS Input Register Selection at
Value at POR
POR PIC18(L)F2xK83
Interrupt 0 INT0PPS RB0 0b0 1000 A B —
Interrupt 1 INT1PPS RB1 0b0 1001 A B —
Interrupt 2 INT2PPS RB2 0b0 1010 A B —
Timer0 Clock T0CKIPPS RA4 0b0 0100 A B —
Timer1 Clock T1CKIPPS RC0 0b1 0000 A — C
Timer1 Gate T1GPPS RB5 0b0 1101 — B C
Timer3 Clock T3CKIPPS RC0 0b1 0000 — B C
Timer3 Gate T3GPPS RC0 0b1 0000 A — C
Timer5 Clock T5CKIPPS RC2 0b1 0010 A — C
Timer5 Gate T5GPPS RB4 0b0 1100 — B C
Timer2 Clock T2INPPS RC3 0b1 0011 A — C
Timer4 Clock T4INPPS RC5 0b1 0101 — B C
Timer6 Clock T6INPPS RB7 0b0 1111 — B C
CCP1 CCP1PPS RC2 0b1 0010 — B C
CCP2 CCP2PPS RC1 0b1 0001 — B C
CCP3 CCP3PPS RB5 0b0 1101 — B C
CCP4 CCP4PPS RB0 0b0 1000 — B C
SMT1 Window SMT1WINPPS RC0 0b1 0000 — B C
SMT1 Signal SMT1SIGPPS RB4 0b0 1100 — B C
SMT2 Window SMT2WINPPS RB5 0b0 1101 — B C
SMT2 Signal SMT2SIGPPS RC1 0b1 0001 — B C
CWG1 CWG1PPS RB0 0b0 1000 — B C
CWG2 CWG2PPS RB1 0b0 1001 — B C
CWG3 CWG3PPS RB2 0b0 1010 — B C
DSM1 Carrier Low MD1CARLPPS RA3 0b0 0011 A — C
DSM1 Carrier High MD1CARHPPS RA4 0b0 0100 A — C
DSM1 Source MD1SRCPPS RA5 0b0 0101 A — C
CLCx Input 1 CLCIN0PPS RA0 0b0 0000 A — C
CLCx Input 2 CLCIN1PPS RA1 0b0 0001 A — C
CLCx Input 3 CLCIN2PPS RB6 0b0 1110 — B C
CLCx Input 4 CLCIN3PPS RB7 0b0 1111 — B C
ADC Conversion Trigger ADACTPPS RB4 0b0 1100 — B C
SPI1 Clock SPI1SCKPPS RC3 0b1 0011 — B C
SPI1 Data SPI1SDIPPS RC4 0b1 0100 — B C
SPI1 Slave Select SPI1SSPPS RA5 0b0 0101 A — C
I2C1 Clock I2C1SCLPPS RC3 0b1 0011 — B C
I2C1 Data I2C1SDAPPS RC4 0b1 0100 — B C
I2C2 Clock I2C2SCLPPS RB1 0b0 1001 — B C
I2C2 Data I2C2SDAPPS RB2 0b0 1010 — B C
UART1 Receive U1RXPPS RC7 0b1 0111 — B C
UART1 Clear To Send U1CTSPPS RC6 0b1 0110 — B C
UART2 Receive U2RXPPS RB7 0b0 1111 — B C
UART2 Clear To Send U2CTSPPS RB6 0b0 1110 — B C
CAN Receive CANRXPPS RB3 0b0 1011 — B C

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 265


PIC18(L)F25/26K83

REGISTER 17-2: RxyPPS: PIN Rxy OUTPUT SOURCE SELECTION REGISTER


U-0 U-0 R/W-0/u R/W-0/u R/W-0/u R/W-0/u R/W-0/u R/W-0/u
— — RxyPPS<5:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 Unimplemented: Read as ‘0’


bit 5-0 RxyPPS<5:0>: Pin Rxy Output Source Selection bits
See Table 17-2 for the list of available ports.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 266


PIC18(L)F25/26K83
TABLE 17-2: PPS OUTPUT REGISTER
TABLE 17-2: PPS OUTPUT REGISTER DETAILS
DETAILS Pin Rxy Device Configuration
RxyPPS<5:0> Output
Pin Rxy Device Configuration Source PIC18(L)F2xK83
RxyPPS<5:0> Output
Source PIC18(L)F2xK83 0b00 0101 CWG1A — B C
0b11 1111 - 0b00 0100 CLC4OUT — B C
Reserved
0b11 0101 0b00 0011 CLC3OUT — B C
0b11 0100 CANTX1 — B C 0b00 0010 CLC2OUT A — C
0b11 0011 CANTX0 — B C 0b00 0001 CLC1OUT A — C
0b11 0010 ADGRDB A — C 0b00 0000 LATxy A B C
0b11 0001 ADGRDA A — C
0b11 0000 CWG3D A — C
0b10 1111 CWG3C A — C
0b10 1110 CWG3B A — C
0b10 1101 CWG3A — B C
0b10 1100 CWG2D — B C
0b10 1011 CWG2C — B C
0b10 1010 CWG2B — B C
0b10 1001 CWG2A — B C
0b10 1000 DSM1 A — C
0b10 0111 CLKR — B C
0b10 0110 NCO1 A — C
0b10 0101 TMR0 — B C
0b10 0100 I2C2 (SDA) — B C
0b10 0011 I2C2 (SCL) — B C
0b10 0010 I2C1 (SDA) — B C
0b10 0001 I2C1 (SCL) — B C
0b10 0000 SPI1 (SS) A — C
0b01 1111 SPI1 (SDO) — B C
0b01 1110 SPI1 (SCK) — B C
0b01 1101 C2OUT A — C
0b01 1100 C1OUT A — C
0b01 1011 -
Reserved
0b01 1001
0b01 1000 UART2 (RTS) — B C
0b01 0111 UART2 (TXDE) — B C
0b01 0110 UART2 (TX) — B C
0b01 0101 UART1 (RTS) — B C
0b01 0100 UART1 (TXDE) — B C
0b01 0011 UART1 (TX) — B C
0b01 0010 -
Reserved
0b01 0001
0b01 0000 PWM8 A — C
0b00 1111 PWM7 A — C
0b00 1110 PWM6 A — C
0b00 1101 PWM5 A — C
0b00 1100 CCP4 — B C
0b00 1011 CCP3 — B C
0b00 1010 CCP2 — B C
0b00 1001 CCP1 — B C
0b00 1000 CWG1D — B C
0b00 0111 CWG1C — B C
0b00 0110 CWG1B — B C

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 267


PIC18(L)F25/26K83

REGISTER 17-3: PPSLOCK: PPS LOCK REGISTER


U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0/0
— — — — — — — PPSLOCKED
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-1 Unimplemented: Read as ‘0’


bit 0 PPSLOCKED: PPS Locked bit
1 = PPS is locked.
0 = PPS is not locked. PPS selections can be changed.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 268


PIC18(L)F25/26K83

TABLE 17-3: SUMMARY OF REGISTERS ASSOCIATED WITH THE PPS MODULE


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

PPSLOCK — — — — — — — PPSLOCKED 268


INT0PPS — — — INT0PPS<4:0> 264
INT1PPS — — — INT1PPS<4:0> 264
INT2PPS — — — INT2PPS<4:0> 264
T0CKIPPS — — — T0CKIPPS<4:0> 264
T1CKIPPS — — — T1CKIPPS<4:0> 264
T1GPPS — — — T1GPPS<4:0> 264
T3CKIPPS — — — T3CKIPPS<4:0> 264
T3GPPS — — — T3GPPS<4:0> 264
T5CKIPPS — — — T5CKIPPS<4:0> 264
T5GPPS — — — T5GPPS<4:0> 264
T2INPPS — — — T2INPPS<4:0> 264
T4INPPS — — — T4INPPS<4:0> 264
T6INPPS — — — T6INPPS<4:0> 264
CCP1PPS — — — CCP1PPS<4:0> 264
CCP2PPS — — — CCP2PPS<4:0> 264
CCP3PPS — — — CCP3PPS<4:0> 264
CCP4PPS — — — CCP4PPS<4:0> 264
SMT1WINPPS — — — SMT1WINPPS<4:0> 264
SMT1SIGPPS — — — SMT1SIGPPS<4:0> 264
SMT2WINPPS — — — SMT2WINPPS<4:0> 264
SMT2SIGPPS — — — SMT2SIGPPS<4:0> 264
CWG1PPS — — — CWG1PPS<4:0> 264
CWG2PPS — — — CWG2PPS<4:0> 264
CWG3PPS — — — CWG3PPS<4:0> 264
MD1CARLPPS — — — MDCARLPPS<4:0> 264
MD1CARHPPS — — — MDCARHPPS<4:0> 264
MD1SRCPPS — — — MDSRCPPS<4:0> 264
CLCIN0PPS — — — CLCIN0PPS<4:0> 264
CLCIN1PPS — — — CLCIN1PPS<4:0> 264
CLCIN2PPS — — — CLCIN2PPS<4:0> 264
CLCIN3PPS — — — CLCIN3PPS<4:0> 264
ADACTPPS — — — ADACTPPS<4:0> 264
SPI1SCKPPS — — — SPI1SCKPPS<4:0> 264
SPI1SDIPPS — — — SPI1SDIPPS<4:0> 264
SPI1SSPPS — — — SPI1SSPPS<4:0> 264
I2C1SCLPPS — — — I2C1SCLPPS<4:0> 264
I2C1SDAPPS — — — I2C1SDAPPS<4:0> 264
I2C2SCLPPS — — — I2C2SCLPPS<4:0> 264
I2C2SDAPPS — — — I2C2SDAPPS<4:0> 264
U1RXPPS — — — U1RXPPS<4:0> 264
U1CTSPPS — — — U1CTSPPS<4:0> 264
U2RXPPS — — — U2RXPPS<4:0> 264
U2CTSPPS — — — U2CTPPS<4:0> 264
RxyPPS — — — RxyPPS<4:0> 264
CANRXPPS — — — CANRXPPS<4:0> 264
Legend: — = unimplemented, read as ‘0’. Shaded cells are unused by the PPS module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 269


PIC18(L)F25/26K83
18.0 INTERRUPT-ON-CHANGE 18.3 Interrupt Flags
PORTA, PORTB, PORTC and pin RE3 of PORTE can The IOCAFx, IOCBFx, IOCCFx and IOCEF3 bits located
be configured to operate as Interrupt-on-Change (IOC) in the IOCAF, IOCBF, IOCCF and IOCEF registers
pins on PIC18(L)F25/26K83 family devices. An interrupt respectively, are status flags that correspond to the
can be generated by detecting a signal that has either a interrupt-on-change pins of the associated port. If an
rising edge or a falling edge. Any individual port pin, or expected edge is detected on an appropriately enabled
combination of port pins, can be configured to generate pin, then the status flag for that pin will be set, and an
an interrupt. The interrupt-on-change module has the interrupt will be generated if the IOCIE bit is set. The
following features: IOCIF bit of the PIR0 register reflects the status of all
IOCAFx, IOCBFx, IOCCFx and IOCEF3 bits.
• Interrupt-on-Change enable (Master Switch)
• Individual pin configuration
18.4 Clearing Interrupt Flags
• Rising and falling edge detection
• Individual pin interrupt flags The individual status flags, (IOCAFx, IOCBFx, IOCCFx
and IOCEF3 bits), can be cleared by resetting them to
Figure 18-1 is a block diagram of the IOC module.
zero. If another edge is detected during this clearing
operation, the associated status flag will be set at the
18.1 Enabling the Module end of the sequence, regardless of the value actually
To allow individual port pins to generate an interrupt, the being written.
IOCIE bit of the PIE0 register must be set. If the IOCIE In order to ensure that no detected edge is lost while
bit is disabled, the edge detection on the pin will still clearing flags, only AND operations masking out known
occur, but an interrupt will not be generated. changed bits should be performed. The following
sequence is an example of what should be performed.
18.2 Individual Pin Configuration
EXAMPLE 18-1: CLEARING INTERRUPT
For each port pin, a rising edge detector and a falling
FLAGS
edge detector are present. To enable a pin to detect a
(PORTA EXAMPLE)
rising edge, the associated bit of the IOCxP register is
set. To enable a pin to detect a falling edge, the MOVLW 0xff
associated bit of the IOCxN register is set. XORWF IOCAF, W
ANDWF IOCAF, F
A pin can be configured to detect rising and falling
edges simultaneously by setting both associated bits of
the IOCxP and IOCxN registers, respectively. 18.5 Operation in Sleep
The interrupt-on-change interrupt sequence will wake
the device from Sleep mode, if the IOCIE bit is set.
If an edge is detected while in Sleep mode, the IOCxF
register will be updated prior to the first instruction
executed out of Sleep.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 270


PIC18(L)F25/26K83
FIGURE 18-1: INTERRUPT-ON-CHANGE BLOCK DIAGRAM (PORTA EXAMPLE)
Rev. 10-000037D
10/3/2016

IOCANx D Q

R Q4Q1
edge
detect

RAx

to data bus
data bus = S
IOCAPx D Q D Q IOCAFx
0 or 1

R
write IOCAFx
IOCIE
Q2
IOC interrupt
to CPU core
from all other
IOCnFx individual
pin detectors

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 271


PIC18(L)F25/26K83
18.6 Register Definitions: Interrupt-on-Change Control

REGISTER 18-1: IOCxP: INTERRUPT-ON-CHANGE POSITIVE EDGE REGISTER EXAMPLE


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
IOCxP7 IOCxP6 IOCxP5 IOCxP4 IOCxP3 IOCxP2 IOCxP1 IOCxP0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 IOCxP<7:0>: Interrupt-on-Change Positive Edge Enable bits


1 = Interrupt-on-Change enabled on the IOCx pin for a positive-going edge. Associated Status bit and interrupt flag
will be set upon detecting an edge.
0 = Interrupt-on-Change disabled for the associated pin.

REGISTER 18-2: IOCxN: INTERRUPT-ON-CHANGE NEGATIVE EDGE REGISTER EXAMPLE


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
IOCxN7 IOCxN6 IOCxN5 IOCxN4 IOCxN3 IOCxN2 IOCxN1 IOCxN0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 IOCxN<7:0>: Interrupt-on-Change Negative Edge Enable bits


1 = Interrupt-on-Change enabled on the IOCx pin for a negative-going edge. Associated Status bit and interrupt
flag will be set upon detecting an edge.
0 = Interrupt-on-Change disabled for the associated pin

REGISTER 18-3: IOCxF: INTERRUPT-ON-CHANGE FLAG REGISTER EXAMPLE


R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0
IOCxF7 IOCxF6 IOCxF5 IOCxF4 IOCxF3 IOCxF2 IOCxF1 IOCxF0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS - Bit is set in hardware

bit 7-0 IOCxF<7:0>: Interrupt-on-Change Flag bits


1 = A enabled change was detected on the associated pin. Set when IOCP[n] = 1 and a positive edge was detected
on the IOCn pin, or when IOCN[n] = 1 and a negative edge was detected on the IOCn pin
0 = No change was detected, or the user cleared the detected change

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 272


PIC18(L)F25/26K83

TABLE 18-1: IOC REGISTERS


Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
IOCAP IOCAP7 IOCAP6 IOCAP5 IOCAP4 IOCAP3 IOCAP2 IOCAP1 IOCAP0
IOCAN IOCAN7 IOCAN6 IOCAN5 IOCAN4 IOCAN3 IOCAN2 IOCAN1 IOCAN0
IOCAF IOCAF7 IOCAF6 IOCAF5 IOCAF4 IOCAF3 IOCAF2 IOCAF1 IOCAF0
IOCBP IOCBP7 IOCBP6 IOCBP5 IOCBP4 IOCBP3 IOCBP2 IOCBP1 IOCBP0
IOCBN IOCBN7 IOCBN6 IOCBN5 IOCBN4 IOCBN3 IOCBN2 IOCBN1 IOCBN0
IOCBF IOCBF7 IOCBF6 IOCBF5 IOCBF4 IOCBF3 IOCBF2 IOCBF1 IOCBF0
IOCCP IOCCP7 IOCCP6 IOCCP5 IOCCP4 IOCCP3 IOCCP2 IOCCP1 IOCCP0
IOCCN IOCCN7 IOCCN6 IOCCN5 IOCCN4 IOCCN3 IOCCN2 IOCCN1 IOCCN0
IOCCF IOCCF7 IOCCF6 IOCCF5 IOCCF4 IOCCF3 IOCCF2 IOCCF1 IOCCF0
IOCEP — — — — IOCEP3 (1) — — —
IOCEN — — — — IOCEN3(1) — — —
IOCEF — — — — IOCEF3(1) — — —
Note 1: If MCLRE = 1 or LVP = 1, RE3 port functionality is disabled and IOC on RE3 is not available.

TABLE 18-2: SUMMARY OF REGISTERS ASSOCIATED WITH INTERRUPT-ON-CHANGE


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page
IOCxF IOCxF7 IOCxF6 IOCxF5 IOCxF4 IOCxF3 IOCxF2 IOCxF1 IOCxF0 272
IOCxN IOCxN7 IOCxN6 IOCxN5 IOCxN4 IOCxN3 IOCxN2 IOCxN1 IOCxN0 272
IOCxP IOCxP7 IOCxP6 IOCxP5 IOCxP4 IOCxP3 IOCxP2 IOCxP1 IOCxP0 272
Legend: — = unimplemented location, read as ‘0’. Shaded cells are not used by interrupt-on-change.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 273


PIC18(L)F25/26K83
19.0 PERIPHERAL MODULE 19.3 Effects of a Reset
DISABLE (PMD) Following any Reset, each control bit is set to ‘0’,
Sleep, Idle and Doze modes allow users to enabling all modules.
substantially reduce power consumption by slowing or
stopping the CPU clock. Even so, peripheral modules 19.4 System Clock Disable
still remain clocked, and thus, consume some amount
Setting SYSCMD (PMD0, Register 19-1) disables the
of power. There may be cases where the application
system clock (FOSC) distribution network to the
needs what these modes do not provide: the ability to
peripherals. Not all peripherals make use of SYSCLK,
allocate limited power resources to the CPU while
so not all peripherals are affected. Refer to the specific
eliminating power consumption from the peripherals.
peripheral description to see if it will be affected by this
The PIC18(L)F25/26K83 family addresses this bit.
requirement by allowing peripheral modules to be
selectively enabled or disabled, placing them into the
lowest possible power mode.
All modules are ON by default following any Reset.

19.1 Disabling a Module


Disabling a module has the following effects:
• All clock and control inputs to the module are
suspended; there are no logic transitions, and the
module will not function.
• The module is held in Reset.
• Any SFR becomes “unimplemented”
- Writing is disabled
- Reading returns 00h
• I/O functionality is prioritized as per Section 16.2,
I/O Priorities
• All associated Input Selection registers are also
disabled

19.2 Enabling a Module


When the PMD register bit is cleared, the module is
re-enabled and will be in its Reset state (Power-on
Reset). SFR data will reflect the POR Reset values.
Depending on the module, it may take up to one full
instruction cycle for the module to become active.
There should be no interaction with the module
(e.g., writing to registers) for at least one instruction
after it has been re-enabled.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 274


PIC18(L)F25/26K83
19.5 Register Definitions: Peripheral Module Disable

REGISTER 19-1: PMD0: PMD CONTROL REGISTER 0


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
SYSCMD FVRMD HLVDMD CRCMD SCANMD NVMMD CLKRMD IOCMD
7 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 SYSCMD: Disable Peripheral System Clock Network bit(1)


See description in Section 19.4 “System Clock Disable”.
1 = System clock network disabled (FOSC)
0 = System clock network enabled
bit 6 FVRMD: Disable Fixed Voltage Reference bit
1 = FVR module disabled
0 = FVR module enabled
bit 5 HLVDMD: Disable Low-Voltage Detect bit
1 = HLVD module disabled
0 = HLVD module enabled
bit 4 CRCMD: Disable CRC Engine bit
1 = CRC module disabled
0 = CRC module enabled
bit 3 SCANMD: Disable NVM Memory Scanner bit(2)
1 = NVM Memory Scan module disabled
0 = NVM Memory Scan module enabled
bit 2 NVMMD: NVM Module Disable bit(3)
1 = All Memory reading and writing is disabled; NVMCON registers cannot be written
0 = NVM module enabled
bit 1 CLKRMD: Disable Clock Reference bit
1 = CLKR module disabled
0 = CLKR module enabled
bit 0 IOCMD: Disable Interrupt-on-Change bit, All Ports
1 = IOC module(s) disabled
0 = IOC module(s) enabled

Note 1: Clearing the SYSCMD bit disables the system clock (FOSC) to peripherals, however peripherals clocked
by FOSC/4 are not affected.
2: Subject to SCANE bit in CONFIG4H.
3: When enabling NVM, a delay of up to 1 µs may be required before accessing data.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 275


PIC18(L)F25/26K83

REGISTER 19-2: PMD1: PMD CONTROL REGISTER 1


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
NCO1MD TMR6MD TMR5MD TMR4MD TMR3MD TMR2MD TMR1MD TMR0MD
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 NCO1MD: Disable NCO1 Module bit


1 = NCO1 module disabled
0 = NCO1 module enabled
bit 6 TMR6MD: Disable Timer TMR6 bit
1 = TMR6 module disabled
0 = TMR6 module enabled
bit 5 TMR5MD: Disable Timer TMR5 bit
1 = TMR5 module disabled
0 = TMR5 module enabled
bit 4 TMR4MD: Disable Timer TMR4 bit
1 = TMR4 module disabled
0 = TMR4 module enabled
bit 3 TMR3MD: Disable Timer TMR3 bit
1 = TMR3 module disabled
0 = TMR3 module enabled
bit 2 TMR2MD: Disable Timer TMR2 bit
1 = TMR2 module disabled
0 = TMR2 module enabled
bit 1 TMR1MD: Disable Timer TMR1 bit
1 = TMR1 module disabled
0 = TMR1 module enabled
bit 0 TMR0MD: Disable Timer TMR0 bit
1 = TMR0 module disabled
0 = TMR0 module enabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 276


PIC18(L)F25/26K83

REGISTER 19-3: PMD2: PMD CONTROL REGISTER 2


U-0 R/W-0/0 R/W-0/0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0
— DACMD ADCMD — — CMP2MD CMP1MD ZCDMD(1)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 Unimplemented: Read as ‘0’


bit 6 DACMD: Disable DAC bit
1 = DAC module disabled
0 = DAC module enabled
bit 5 ADCMD: Disable ADCC bit
1 = ADCC module disabled
0 = ADCC module enabled
bit 4-3 Unimplemented: Read as ‘0’
bit 2 CMP2MD: Disable Comparator CMP2 bit
1 = CMP2 module disabled
0 = CMP2 module enabled
bit 1 CMP1MD: Disable Comparator CMP1 bit
1 = CMP1 module disabled
0 = CMP1 module enabled
bit 0 ZCDMD: Disable Zero-Cross Detect module bit(1)
1 = ZCD module disabled
0 = ZCD module enabled

Note 1: Subject to ZCD bit in CONFIG2H.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 277


PIC18(L)F25/26K83

REGISTER 19-4: PMD3: PMD CONTROL REGISTER 3


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
PWM8MD PWM7MD PWM6MD PWM5MD CCP4MD CCP3MD CCP2MD CCP1MD
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 PWM8MD: Disable Pulse-Width Modulator PWM8 bit


1 = PWM8 module disabled
0 = PWM8 module enabled
bit 6 PWM7MD: Disable Pulse-Width Modulator PWM7 bit
1 = PWM7 module disabled
0 = PWM7 module enabled
bit 5 PWM6MD: Disable Pulse-Width Modulator PWM6 bit
1 = PWM6 module disabled
0 = PWM6 module enabled
bit 4 PWM5MD: Disable Pulse-Width Modulator PWM5 bit
1 = PWM5 module disabled
0 = PWM5 module enabled
bit 3 CCP4MD: Disable Capture/Compare/PWM CCP4 bit
1 = CCP4 module disabled
0 = CCP4 module enabled
bit 2 CCP3MD: Disable Capture/Compare/PWM CCP3 bit
1 = CCP3 module disabled
0 = CCP3 module enabled
bit 1 CCP2MD: Disable Capture/Compare/PWM CCP2 bit
1 = CCP2 module disabled
0 = CCP2 module enabled
bit 0 CCP1MD: Disable Capture/Compare/PWM CCP1 bit
1 = CCP1 module disabled
0 = CCP1 module enabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 278


PIC18(L)F25/26K83

REGISTER 19-5: PMD4: PMD CONTROL REGISTER 4


R/W-0/0 R/W-0/0 R/W-0/0 U-0 U-0 U-0 U-0 U-0
CWG3MD CWG2MD CWG1MD — — — — —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 CWG3MD: Disable CWG3 Module bit


1 = CWG3 module disabled
0 = CWG3 module enabled
bit 6 CWG2MD: Disable CWG2 Module bit
1 = CWG2 module disabled
0 = CWG2 module enabled
bit 5 CWG1MD: Disable CWG1 Module bit
1 = CWG1 module disabled
0 = CWG1 module enabled
bit 4-0 Unimplemented: Read as ‘0’

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 279


PIC18(L)F25/26K83

REGISTER 19-6: PMD5: PMD CONTROL REGISTER 5


U-0 U-0 R/W-0/0 R/W-0/0 U-0 R/W-0/0 R/W-0/0 R/W-0/0
— — U2MD U1MD — SPI1MD I2C2MD I2C1MD
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7-6 Unimplemented: Read as ‘0’


bit 5 U2MD: Disable UART2 bit
1 = UART2 module disabled
0 = UART2 module enabled
bit 4 U1MD: Disable UART1 bit
1 = UART1 module disabled
0 = UART1 module enabled
bit 3 Unimplemented: Read as ‘0’
bit 2 SPI1MD: Disable SPI1 Module bit
1 = SPI1 module disabled
0 = SPI1 module enabled
bit 1 I2C2MD: Disable I2C2 Module bit
1 = I2C2 module disabled
0 = I2C2 module enabled
bit 0 I2C1MD: Disable I2C1 Module bit
1 = I2C1 module disabled
0 = I2C1 module enabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 280


PIC18(L)F25/26K83

REGISTER 19-7: PMD6: PMD CONTROL REGISTER 6


U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— SMT2MD SMT1MD CLC4MD CLC3MD CLC2MD CLC1MD DSMMD
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 Unimplemented: Read as ‘0’


bit 6 SMT2MD: Disable SMT2 Module bit
1 = SMT2 module disabled
0 = SMT2 module enabled
bit 5 SMT1MD: Disable SMT1 Module bit
1 = SMT1 module disabled
0 = SMT1 module enabled
bit 4 CLC1MD: Disable CLC4 Module bit
1 = CLC4 module disabled
0 = CLC4 module enabled
bit 3 CLC3MD: Disable CLC3 Module bit
1 = CLC3 module disabled
0 = CLC3 module enabled
bit 2 CLC2MD: Disable CLC2 Module bit
1 = CLC2 module disabled
0 = CLC2 module enabled
bit 1 CLC1MD: Disable CLC1 Module bit
1 = CLC1 module disabled
0 = CLC1 module enabled
bit 0 DSMMD: Disable Data Signal Modulator bit
1 = DSM module disabled
0 = DSM module enabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 281


PIC18(L)F25/26K83

REGISTER 19-8: PMD7: PMD CONTROL REGISTER 7


R/W-0/0 U-0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0
CANMD — — — — — DMA2MD DMA1MD
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 CANMD: Disable CAN Module bit


1 = CAN module disabled
0 = CAN module enabled
bit 6-2 Unimplemented: Read as ‘0’
bit 1 DMA2MD: Disable DMA2 Module bit
1 = DMA2 module disabled
0 = DMA2 module enabled
bit 0 DMA1MD: Disable DMA1 Module bit
1 = DMA1 module disabled
0 = DMA1 module enabled

TABLE 19-1: SUMMARY OF REGISTERS ASSOCIATED WITH PERIPHERAL MODULE DISABLE


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page
PMD0 SYSCMD FVRMD HLVDMD CRCMD SCANMD NVMMD CLKRMD IOCMD 275
PMD1 NCO1MD TMR6MD TMR5MD TMR4MD TMR3MD TMR2MD TMR1MD TMR0MD 276
PMD2 — DACMD ADCMD — — CMP2MD CMP1MD ZCDMD 277
PMD3 PWM8MD PWM7MD PWM6MD PWM5MD CCP4MD CCP3MD CCP2MD CCP1MD 278
PMD4 CWG3MD CWG2MD CWG1MD — — — — — 279
PMD5 — — U2MD U1MD — SPI1MD I2C2MD I2C1MD 280
PMD6 — SMT2MD SMT1MD CLC4MD CLC3MD CLC2MD CLC1MD DSMMD 280
PMD7 CANMD — — — — — DMA2MD DMA1MD 282
Legend: — = unimplemented location, read as ‘0’. Shaded cells are not used by peripheral module disable.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 282


PIC18(L)F25/26K83
20.0 TIMER0 MODULE
Timer0 module is an 8/16-bit timer/counter with the
following features:
• 16-bit timer/counter
• 8-bit timer/counter with programmable period
• Synchronous or asynchronous operation
• Selectable clock sources
• Programmable prescaler
• Programmable postscaler
• Operation during Sleep mode
• Interrupt on match or overflow
• Output on I/O pin (via PPS) or to other peripherals

FIGURE 20-1: BLOCK DIAGRAM OF TIMER0


Rev. 10-000017F
11/11/2016

CLC1 111
SOSC 110 T0_match
Peripherals
MFINTOSC 101 CKPS<3:0>
LFINTOSC 100 TMR0 OUTPS<3:0> T0IF
Prescaler 1
HFINTOSC 011 IN OUT Postscaler T0_out
SYNC 0
FOSC/4 010
PPS 001 FOSC/4 MD16 TMR0
ASYNC D Q PPS
000
T0CKIPPS CK Q RxyPPS

CS<2:0>

8-bit TMR0 (MD16 = 0) 16-bit TMR0 (MD16 = 1)

Clear IN TMR0 High OUT


IN TMR0L R TMR0L
Byte

8
Read TMR0L
COMPARATOR OUT
Write TMR0L
T0_match 8
8 TMR0H
TMR0 High
Byte
Latch 8
Enable
TMR0H
8
Internal Data Bus

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 283


PIC18(L)F25/26K83
20.1 Timer0 Operation Both the prescaler and postscaler counters are cleared
on the following events:
Timer0 can operate as either an 8-bit timer/counter or
• A write to the TMR0L register
a 16-bit timer/counter. The mode is selected with the
• A write to either the T0CON0 or T0CON1
MD16 bit of the T0CON register.
registers
20.1.1 16-BIT MODE • Any device Reset – Power-on Reset (POR),
MCLR Reset, Watchdog Timer Reset (WDTR) or
The register pair TMR0H:TMR0L increments on the • Brown-out Reset (BOR)
rising edge of the clock source. A 15-bit prescaler on
the clock input gives several prescale options (see 20.1.3 COUNTER MODE
prescaler control bits, CKPS<3:0> in the T0CON1
In Counter mode, the prescaler is normally disabled by
register).
setting the CKPS bits of the T0CON1 register to ‘0000’.
20.1.1.1 Timer0 Reads and Writes in 16-Bit Each rising edge of the clock input (or the output of the
prescaler if the prescaler is used) increments the
Mode
counter by ‘1’.
In 16-bit mode, in order to avoid rollover between
reading high and low registers, the TMR0H register is 20.1.4 TIMER MODE
a buffered copy of the actual high byte of Timer0, which
In Timer mode, the Timer0 module will increment every
is neither directly readable, nor writable (see Figure 20-
instruction cycle as long as there is a valid clock signal
1). TMR0H is updated with the contents of the high byte
and the CKPS bits of the T0CON1 register
of Timer0 during a read of TMR0L. This provides the
(Register 20-2) are set to ‘0000’. When a prescaler is
ability to read all 16 bits of Timer0 without having to
added, the timer will increment at the rate based on the
verify that the read of the high and low byte was valid,
prescaler value.
due to a rollover between successive reads of the high
and low byte. 20.1.5 ASYNCHRONOUS MODE
Similarly, a write to the high byte of Timer0 must also When the ASYNC bit of the T0CON1 register is set
take place through the TMR0H Buffer register. The high (ASYNC = ‘1’), the counter increments with each rising
byte is updated with the contents of TMR0H when a edge of the input source (or output of the prescaler, if
write occurs to TMR0L. This allows all 16 bits of Timer0 used). Asynchronous mode allows the counter to
to be updated at once. continue operation during Sleep mode provided that
the clock also continues to operate during Sleep.
20.1.2 8-BIT MODE
In 8-bit mode, the value of TMR0L is compared to that 20.1.6 SYNCHRONOUS MODE
of the Period buffer, a copy of TMR0H, on each clock When the ASYNC bit of the T0CON1 register is clear
cycle. When the two values match, the following events (ASYNC = ‘0’), the counter clock is synchronized to the
happen: system clock (FOSC/4). When operating in
• TMR0_out goes high for one prescaled clock Synchronous mode, the counter clock frequency
period cannot exceed FOSC/4.
• TMR0L is reset
• The contents of TMR0H are copied to the period 20.2 Clock Source Selection
buffer
The CS<2:0> bits of the T0CON1 register are used to
In 8-bit mode, the TMR0L and TMR0H registers are
select the clock source for Timer0. Register 20-2
both directly readable and writable. The TMR0L
displays the clock source selections.
register is cleared on any device Reset, while the
TMR0H register initializes at FFh.
20.2.1 INTERNAL CLOCK SOURCE
When the internal clock source is selected, Timer0
operates as a timer and will increment on multiples of
the clock source, as determined by the Timer0
prescaler.

20.2.2 EXTERNAL CLOCK SOURCE


When an external clock source is selected, Timer0 can
operate as either a timer or a counter. Timer0 will
increment on multiples of the rising edge of the external
clock source, as determined by the Timer0 prescaler.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 284


PIC18(L)F25/26K83
20.3 Programmable Prescaler 20.7 Timer0 Output
A software programmable prescaler is available for The Timer0 output can be routed to any I/O pin via the
exclusive use with Timer0. There are 16 prescaler RxyPPS output selection register (see Section
options for Timer0 ranging in powers of two from 1:1 to 17.0 “Peripheral Pin Select (PPS) Module” for addi-
1:32768. The prescaler values are selected using the tional information). The Timer0 output can also be used
CKPS<3:0> bits of the T0CON1 register. by other peripherals, such as the auto-conversion trig-
The prescaler is not directly readable or writable. ger of the Analog-to-Digital Converter. Finally, the
Clearing the prescaler register can be done by writing Timer0 output can be monitored through software via
to the TMR0L register or to the T0CON0/T0CON1 the Timer0 output bit (OUT) of the T0CON0 register
register or by any Reset. (Register 20-1).
TMR0_out will be a pulse of one postscaled clock
20.4 Programmable Postscaler period when a match occurs between TMR0L and PR0
(Period register for TMR0) in 8-bit mode, or when
A software programmable postscaler (output divider) is TMR0 rolls over in 16-bit mode. The Timer0 output is a
available for exclusive use with Timer0. There are 16 50% duty cycle that toggles on each TMR0_out rising
postscaler options for Timer0 ranging from 1:1 to 1:16. clock edge.
The postscaler values are selected using the OUTPS
bits of the T0CON0 register.
The postscaler is not directly readable or writable.
Clearing the postscaler register can be done by writing
to the TMR0L register or to the T0CON0/T0CON1
register or by any Reset.

20.5 Operation During Sleep


When operating synchronously, Timer0 will halt. When
operating asynchronously, Timer0 will continue to
increment and wake the device from Sleep (if Timer0
interrupts are enabled) provided that the input clock
source is active.

20.6 Timer0 Interrupts


The Timer0 interrupt flag bit (TMR0IF) is set when
either of the following conditions occur:
• 8-bit TMR0L matches the TMR0H value
• 16-bit TMR0 rolls over from ‘FFFFh’
When the postscaler bits (OUTPS) are set to 1:1 oper-
ation (no division), the T0IF flag bit will be set with every
TMR0 match or rollover. In general, the TMR0IF flag bit
will be set every OUTPS +1 matches or rollovers.
If Timer0 interrupts are enabled (TMR0IE bit of the
PIE3 register = ‘1’), the CPU will be interrupted and the
device may wake from Sleep (see Section
20.2 “Clock Source Selection” for more details).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 285


PIC18(L)F25/26K83
20.8 Register Definitions: Timer0 Control

REGISTER 20-1: T0CON0: TIMER0 CONTROL REGISTER 0


R/W-0/0 U-0 R-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
EN — OUT MD16 OUTPS<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 EN: TMR0 Enable bit


1 = The module is enabled and operating
0 = The module is disabled and in the lowest power mode
bit 6 Unimplemented: Read as ‘0’
bit 5 OUT: TMR0 Output bit (read-only)
TMR0 output bit
bit 4 MD16: TMR0 Operating as 16-Bit Timer Select bit
1 = TMR0 is a 16-bit timer
0 = TMR0 is an 8-bit timer
bit 3-0 OUTPS<3:0>: TMR0 Output Postscaler (Divider) Select bits
1111 = 1:16 Postscaler
1110 = 1:15 Postscaler
1101 = 1:14 Postscaler
1100 = 1:13 Postscaler
1011 = 1:12 Postscaler
1010 = 1:11 Postscaler
1001 = 1:10 Postscaler
1000 = 1:9 Postscaler
0111 = 1:8 Postscaler
0110 = 1:7 Postscaler
0101 = 1:6 Postscaler
0100 = 1:5 Postscaler
0011 = 1:4 Postscaler
0010 = 1:3 Postscaler
0001 = 1:2 Postscaler
0000 = 1:1 Postscaler

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 286


PIC18(L)F25/26K83
REGISTER 20-2: T0CON1: TIMER0 CONTROL REGISTER 1
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
CS<2:0> ASYNC CKPS<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-5 CS<2:0>:Timer0 Clock Source Select bits


111 = CLC1
110 = SOSC
101 = MFINTOSC (500 kHz)
100 = LFINTOSC
011 = HFINTOSC
010 = FOSC/4
001 = Pin selected by T0CKIPPS (Inverted)
000 = Pin selected by T0CKIPPS (Non-inverted)
bit 4 ASYNC: TMR0 Input Asynchronization Enable bit
1 = The input to the TMR0 counter is not synchronized to system clocks
0 = The input to the TMR0 counter is synchronized to FOSC/4
bit 3-0 CKPS<3:0>: Prescaler Rate Select bit
1111 = 1:32768
1110 = 1:16384
1101 = 1:8192
1100 = 1:4096
1011 = 1:2048
1010 = 1:1024
1001 = 1:512
1000 = 1:256
0111 = 1:128
0110 = 1:64
0101 = 1:32
0100 = 1:16
0011 = 1:8
0010 = 1:4
0001 = 1:2
0000 = 1:1

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 287


PIC18(L)F25/26K83

REGISTER 20-3: TMR0L: TIMER0 COUNT REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
TMR0L<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 TMR0L<7:0>: TMR0 Counter bits <7:0>

REGISTER 20-4: TMR0H: TIMER0 PERIOD REGISTER


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
TMR0H<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 When MD16 = 0


PR0<7:0>:TMR0 Period Register Bits <7:0>
When MD16 = 1
TMR0H<15:8>: TMR0 Counter bits <15:8>

TABLE 20-1: SUMMARY OF REGISTERS ASSOCIATED WITH TIMER0


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page
T0CON0 EN — OUT MD16 OUTPS<3:0> 286
T0CON1 CS<2:0> ASYNC CKPS<3:0> 287
TMR0L TMR0L<7:0> 288
TMR0H TMR0H<15:8> 288
Legend: — = unimplemented location, read as ‘0’. Shaded cells are not used by Timer0.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 288


PIC18(L)F25/26K83
21.0 TIMER1/3/5 MODULE WITH Asynchronous mode only)
GATE CONTROL • 16-Bit Read/Write Operation
• Time base for the Capture/Compare function with
Timer1/3/5 module is a 16-bit timer/counter with the the CCP modules
following features:
• Special Event Trigger (with CCP)
• 16-bit timer/counter register pair (TMRxH:TMRxL) • Selectable Gate Source Polarity
• Programmable internal or external clock source • Gate Toggle mode
• 2-bit prescaler • Gate Single-pulse mode
• Dedicated Secondary 32 kHz oscillator circuit • Gate Value Status
• Optionally synchronized comparator out • Gate Event Interrupt
• Multiple Timer1/3/5 gate (count enable) sources
Figure 21-1 is a block diagram of the Timer1/3/5
• Interrupt-on-overflow module.
• Wake-up on overflow (external clock,

FIGURE 21-1: TIMER1/3/5 BLOCK DIAGRAM


Rev. 10-000018L
GSS<4:0> 9/12/2016

5
TxGPPS
GSPM
PPS 00000

1
0 Single Pulse D Q GVAL
NOTE (5) 0
11111
1 Acq. Control
Q1
D Q

GPOL GGO/DONE
CK Q
ON Interrupt
set bit
R
GTM det TMRxGIF

GE
set flag bit
TMRxIF
ON
EN
(2) To Comparators (6)
TMRx
Tx_overflow Synchronized Clock Input
TMRxH TMRxL Q D 0
1
TxCLK
SYNC

CS<4:0>
5
TxCKIPPS
(1)
PPS 00000

Prescaler
Synchronize(3)
1,2,4,8
Note (4) det
11111
2
Fosc/2
CKPS<1:0> Internal Sleep
Clock Input

Note 1: ST Buffer is high speed type when using TxCKIPPS

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 289


PIC18(L)F25/26K83
21.1 Timer1/3/5 Operation The following asynchronous sources may be used at
the Timer1/3/5 gate:
The Timer1/3/5 module is a 16-bit incrementing
counter which is accessed through the TMRxH:TMRxL • Asynchronous event on the TxGPPS pin
register pair. Writes to TMRxH or TMRxL directly • TMR0OUT
update the counter. • TMR1/3/5OUT (excluding the TMR for which it is
When used with an internal clock source, the module is being used)
a timer and increments on every instruction cycle. • TMR 2/4/6OUT (post-scaled)
When used with an external clock source, the module • CMP1/2OUT
can be used as either a timer or counter and incre- • SMT1_match
ments on every selected edge of the external source. • NCO1OUT
Timer1/3/5 is enabled by configuring the ON and GE • PWM3/4 OUT
bits in the TxCON and TxGCON registers, respectively. • CCP1/2/3/4 OUT
Table 21-1 displays the Timer1/3/5 enable selections. • CLC1/2/3/4 OUT
• ZCDOUT
TABLE 21-1: TIMER1/3/5 ENABLE
SELECTIONS Note: In Counter mode, a falling edge must be
Timer1/3/5 registered by the counter prior to the first
ON GE incrementing rising edge after any one or
Operation
more of the following conditions:
1 1 Count Enabled
• Timer1/3/5 enabled after POR
1 0 Always On
• Write to TMRxH or TMRxL
0 1 Off
• Timer1/3/5 is disabled
0 0 Off • Timer1/3/5 is disabled (TMRxON = 0)
when TxCKI is high then Timer1/3/5
21.2 Clock Source Selection is enabled (TMRxON = 1) when
TxCKI is low.
The CS<4:0> bits of the TMRxCLK register
(Register 21-3) are used to select the clock source for
21.2.2 EXTERNAL CLOCK SOURCE
Timer1/3/5. The five TMRxCLK bits allow the selection
of several possible synchronous and asynchronous When the external clock source is selected, the Timer1/
clock sources. Register 21-3 displays the clock source 3/5 module may work as a timer or a counter.
selections. When enabled to count, Timer1/3/5 is incremented on
the rising edge of the external clock input of the
21.2.1 INTERNAL CLOCK SOURCE TxCKIPPS pin. This external clock source can be
When the internal clock source is selected the synchronized to the microcontroller system clock or it
TMRxH:TMRxL register pair will increment on multiples can run asynchronously.
of FOSC as determined by the Timer1/3/5 prescaler. When used as a timer with a clock oscillator, an
When the FOSC internal clock source is selected, the external 32.768 kHz crystal can be used in conjunction
Timer1/3/5 register value will increment by four counts with the dedicated secondary internal oscillator circuit.
every instruction clock cycle. Due to this condition, a
2 LSB error in resolution will occur when reading the
Timer1/3/5 value. To utilize the full resolution of Timer1/
3/5, an asynchronous input signal must be used to gate
the Timer1/3/5 clock input.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 290


PIC18(L)F25/26K83
21.3 Timer1/3/5 Prescaler 21.4.1 READING AND WRITING TIMER1/3/
5 IN ASYNCHRONOUS COUNTER
Timer1/3/5 has four prescaler options allowing 1, 2, 4 or
MODE
8 divisions of the clock input. The CKPS bits of the
TxCON register control the prescale counter. The Reading TMRxH or TMRxL while the timer is running
prescale counter is not directly readable or writable; from an external asynchronous clock will ensure a valid
however, the prescaler counter is cleared upon a write to read (taken care of in hardware). However, the user
TMRxH or TMRxL. should keep in mind that reading the 16-bit timer in two
8-bit values itself, poses certain problems, since the
21.4 Timer1/3/5 Operation in timer may overflow between the reads. For writes, it is
recommended that the user simply stop the timer and
Asynchronous Counter Mode
write the desired values. A write contention may occur
If control bit SYNC of the TxCON register is set, the by writing to the timer registers, while the register is
external clock input is not synchronized. The timer incrementing. This may produce an unpredictable
increments asynchronously to the internal phase value in the TMRxH:TMRxL register pair.
clocks. If external clock source is selected then the
timer will continue to run during Sleep and can 21.5 Timer1/3/5 16-Bit Read/Write Mode
generate an interrupt on overflow, which will wake up
the processor. However, special precautions in Timer1/3/5 can be configured to read and write all 16
software are needed to read/write the timer (see bits of data, to and from, the 8-bit TMRxL and TMRxH
Section 21.4.1 “Reading and Writing Timer1/3/5 in registers, simultaneously. The 16-bit read and write
Asynchronous Counter Mode”). operations are enabled by setting the RD16 bit of the
TxCON register.
Note: When switching from synchronous to
To accomplish this function, the TMRxH register value
asynchronous operation, it is possible to
is mapped to a buffer register called the TMRxH buffer
skip an increment. When switching from
register. While in 16-Bit mode, the TMRxH register is
asynchronous to synchronous operation,
not directly readable or writable and all read and write
it is possible to produce an additional
operations take place through the use of this TMRxH
increment.
buffer register.
When a read from the TMRxL register is requested, the
value of the TMRxH register is simultaneously loaded
into the TMRxH buffer register. When a read from the
TMRxH register is requested, the value is provided
from the TMRxH buffer register instead. This provides
the user with the ability to accurately read all 16 bits of
the Timer1/3/5 value from a single instance in time.
Reference the block diagram in Figure 21-2 for more
details.
In contrast, when not in 16-Bit mode, the user must
read each register separately and determine if the
values have become invalid due to a rollover that may
have occurred between the read operations.
When a write request of the TMRxL register is
requested, the TMRxH buffer register is simultaneously
updated with the contents of the TMRxH register. The
value of TMRxH must be preloaded into the TMRxH
buffer register prior to the write request for the TMRxL
register. This provides the user with the ability to write
all 16 bits to the TMRxL:TMRxH register pair at the
same time.
Any requests to write to the TMRxH directly does not
clear the Timer1/3/5 prescaler value. The prescaler
value is only cleared through write requests to the
TMRxL register.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 291


PIC18(L)F25/26K83
FIGURE 21-2: TIMER1/3/5 16-BIT READ/
WRITE MODE BLOCK
DIAGRAM
From
Timer1
Circuitry
TMR1 Set
TMR1L High Byte TMR1IF
on Overflow
8

Read TMR1L
Write TMR1L
8
8
TMR1H

8
8
Internal Data Bus

Block Diagram of Timer1 Example of TIMER1/3/5

21.6 Timer1/3/5 Gate


Timer1/3/5 can be configured to count freely or the
count can be enabled and disabled using Timer1/3/5
gate circuitry. This is also referred to as Timer1/3/5 gate
enable.
Timer1/3/5 gate can also be driven by multiple
selectable sources.

21.6.1 TIMER1/3/5 GATE ENABLE


The Timer1/3/5 Gate Enable mode is enabled by
setting the TMRxGE bit of the TxGCON register. The
polarity of the Timer1/3/5 Gate Enable mode is
configured using the TxGPOL bit of the TxGCON
register.
When Timer1/3/5 Gate Enable mode is enabled,
Timer1/3/5 will increment on the rising edge of the
Timer1/3/5 clock source. When Timer1/3/5 Gate signal
is inactive, the timer will not increment and hold the
current count. See Figure 21-4 for timing details.

TABLE 21-2: TIMER1/3/5 GATE ENABLE


SELECTIONS
Timer1/3/5
TMRxCLK TxGPOL TxG
Operation
 1 1 Counts
 1 0 Holds Count
 0 1 Holds Count
 0 0 Counts

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 292


PIC18(L)F25/26K83
21.6.2 TIMER1/3/5 GATE SOURCE 21.6.4 TIMER1/3/5 GATE SINGLE-PULSE
SELECTION MODE
The gate source for Timer1/3/5 can be selected using When Timer1/3/5 Gate Single-Pulse mode is enabled,
the GSS<4:0> bits of the TMRxGATE register it is possible to capture a single-pulse gate event.
(Register 21-4). The polarity selection for the gate Timer1/3/5 Gate Single-Pulse mode is first enabled by
source is controlled by the TxGPOL bit of the TxGCON setting the GSPM bit in the TxGCON register. Next, the
register (Register 21-2). GGO/DONE bit in the TxGCON register must be set.
Any of the above mentioned signals can be used to The Timer1/3/5 will be fully enabled on the next
trigger the gate. The output of the CMPx can be incrementing edge of the gate signal. On the next
synchronized to the Timer1/3/5 clock or left trailing edge of the pulse, the GGO/DONE bit will
asynchronous. For more information see Section automatically be cleared. No other gate events will be
39.3.1 “Comparator Output Synchronization”. allowed to increment Timer1/3/5 until the GGO/DONE
bit is once again set in software.
21.6.3 TIMER1/3/5 GATE TOGGLE MODE Clearing the TxGSPM bit of the TxGCON register will
When Timer1/3/5 Gate Toggle mode is enabled, it is also clear the GGO/DONE bit. See Figure 21-6 for
possible to measure the duration between every rising timing details.
and falling edge of the gate signal. Enabling the Toggle mode and the Single-Pulse mode
The Timer1/3/5 gate source is routed through a flip-flop simultaneously will permit both sections to work
that changes state on every incrementing edge of the together. This allows the period on the Timer1/3/5 gate
signal. See Figure 21-5 for timing details. source to be measured. See Figure 21-7 for timing
details.
Timer1/3/5 Gate Toggle mode is enabled by setting the
GTM bit of the TxGCON register. When the GTM bit is 21.6.5 TIMER1/3/5 GATE VALUE STATUS
cleared, the flip-flop is cleared and held clear. This is
necessary in order to control which edge is measured. When Timer1/3/5 Gate Value Status is utilized, it is
possible to read the most current level of the gate
Note: Enabling Toggle mode at the same time signal. The value is stored in the GVAL bit in the
as changing the gate polarity may result in TxGCON register. The GVAL bit is valid even when the
indeterminate operation. Timer1/3/5 gate is not enabled (GE bit is cleared).

21.6.6 TIMER1/3/5 GATE EVENT


INTERRUPT
When Timer1/3/5 Gate Event Interrupt is enabled, it is
possible to generate an interrupt upon the completion
of a gate event. When the falling edge of GVAL occurs,
the TMRxGIF flag bit in the respective PIR register will
be set. If the TMRxGIE bit in the respective PIE register
is set, then an interrupt will be recognized.
The TMRxGIF flag bit operates even when the Timer1/
3/5 gate is not enabled (GE bit is cleared).
For more information on selecting high or low priority
status for the Timer1/3/5 Gate Event Interrupt see
Section 9.0 “Interrupt Controller”.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 293


PIC18(L)F25/26K83
21.7 Timer1/3/5 Interrupt 21.9 CCP Capture/Compare Time Base
The Timer1/3/5 register pair (TMRxH:TMRxL) The CCP modules use the TMRxH:TMRxL register pair
increments to FFFFh and rolls over to 0000h. When as the time base when operating in Capture or
Timer1/3/5 rolls over, the Timer1/3/5 interrupt flag bit of Compare mode.
the respective PIR register is set. To enable the In Capture mode, the value in the TMRxH:TMRxL
interrupt-on-rollover, you must set these bits: register pair is copied into the CCPRxH:CCPRxL
• ON bit of the TxCON register register pair on a configured event.
• TMRxIE bits of the respective PIE register In Compare mode, an event is triggered when the value
• GIE/GIEH bit of the INTCON0 register in the CCPRxH:CCPRxL register pair matches the
The interrupt is cleared by clearing the TMRxIF bit in value in the TMRxH:TMRxL register pair. This event
the Interrupt Service Routine. can be a Special Event Trigger.

For more information on selecting high or low priority For more information, see Section 23.0 “Capture/
status for the Timer1/3/5 Overflow Interrupt, see Compare/PWM Module”.
Section 9.0 “Interrupt Controller”.
21.10 CCP Special Event Trigger
Note: The TMRxH:TMRxL register pair and the
TMRxIF bit should be cleared before When any of the CCP’s are configured to trigger a
enabling interrupts. special event, the trigger will clear the TMRxH:TMRxL
register pair. This special event does not cause a
Timer1/3/5 interrupt. The CCP module may still be
21.8 Timer1/3/5 Operation During Sleep
configured to generate a CCP interrupt.
Timer1/3/5 can only operate during Sleep when set up In this mode of operation, the CCPRxH:CCPRxL
in Asynchronous Counter mode. In this mode, an register pair becomes the period register for Timer1/3/
external crystal or clock source can be used to 5.
increment the counter. To set up the timer to wake the
device: Timer1/3/5 should be synchronized and FOSC/4 should
be selected as the clock source in order to utilize the
• ON bit of the TxCON register must be set Special Event Trigger. Asynchronous operation of
• TMRxIE bit of the respective PIE register must be Timer1/3/5 can cause a Special Event Trigger to be
set missed.
• SYNC bit of the TxCON register must be set In the event that a write to TMRxH or TMRxL coincides
• Configure the TMRxCLK register for using with a Special Event Trigger from the CCP, the write will
secondary oscillator as the clock source take precedence.
• Enable the SOSCEN bit of the OSCEN register
(Register 7-7)
The device will wake-up on an overflow and execute
the next instruction. If the GIE/GIEH bit of the
INTCON0 register is set, the device will call the
Interrupt Service Routine.
The secondary oscillator will continue to operate in
Sleep regardless of the SYNC bit setting.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 294


PIC18(L)F25/26K83
FIGURE 21-3: TIMER1/3/5 INCREMENTING EDGE

TxCKI = 1
when TxTMR
Enabled

TxCKI = 0
when TxTMR
Enabled

Note 1: Arrows indicate counter increments.


2: In Counter mode, a falling edge must be registered by the counter prior to the first incrementing rising edge of the clock.

FIGURE 21-4: TIMER1/3/5 GATE ENABLE MODE

TMRxGE

TxGPOL

TxG_IN

TxCKI

TxGVAL

Timer1/3/5 N N+1 N+2 N+3 N+4

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 295


PIC18(L)F25/26K83
FIGURE 21-5: TIMER1/3/5 GATE TOGGLE MODE

TMRxGE

TxGPOL

TxGTM

TxTxG_IN

TxCKI

TxGVAL

TIMER1/3/5 N N+1 N+2 N+3 N+4 N+5 N+6 N+7 N+8

FIGURE 21-6: TIMER1/3/5 GATE SINGLE-PULSE MODE

TMRxGE

TxGPOL

TxGSPM
Cleared by hardware on
TxGGO/ Set by software falling edge of TxGVAL
DONE
Counting enabled on
rising edge of TxG
TxG_IN

TxCKI

TxGVAL

TIMER1/3/5 N N+1 N+2

Cleared by
TMRxGIF Cleared by software Set by hardware on software
falling edge of TxGVAL

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 296


PIC18(L)F25/26K83
FIGURE 21-7: TIMER1/3/5 GATE SINGLE-PULSE AND TOGGLE COMBINED MODE

TMRxGE

TxGPOL

TxGSPM

TxGTM

Cleared by hardware on
TxGGO/ Set by software falling edge of TxGVAL
DONE Counting enabled on
rising edge of TxG
TxG_IN

TxCKI

TxGVAL

TIMER1/3/5 N N+1 N+2 N+3 N+4

Set by hardware on Cleared by


TMRxGIF Cleared by software falling edge of TxGVAL software

21.11 Peripheral Module Disable


When a peripheral module is not used or inactive, the
module can be disabled by setting the Module Disable
bit in the PMD registers. This will reduce power
consumption to an absolute minimum. Setting the PMD
bits holds the module in Reset and disconnects the
module’s clock source. The Module Disable bits for
Timer1 (TMR1MD), Timer3 (TMR3MD) and Timer5
(TMR5MD) are in the respective PMD registers. See
Section 19.0 “Peripheral Module Disable (PMD)” for
more information.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 297


PIC18(L)F25/26K83
21.12 Register Definitions: Timer1/3/5
Long bit name prefixes for the Timer1/3/5 are shown
below. Refer to Section 1.3.2.2 “Long Bit Names” for
more information.

Peripheral Bit Name Prefix


Timer1 T1
Timer3 T3
Timer5 T5

REGISTER 21-1: TXCON: TIMERx CONTROL REGISTER


U-0 U-0 R/W-0/u R/W-0/u U-0 R/W-0/u R/W-0/0 R/W-0/u
— — CKPS<1:0> — SYNC RD16 ON
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared u = unchanged

bit 7-6 Unimplemented: Read as ‘0’


bit 5-4 CKPS<1:0>: Timerx Input Clock Prescale Select bits
11 = 1:8 Prescale value
10 = 1:4 Prescale value
01 = 1:2 Prescale value
00 = 1:1 Prescale value
bit 3 Unimplemented: Read as ‘0’
bit 2 SYNC: Timerx External Clock Input Synchronization Control bit
TMRxCLK = FOSC/4 or FOSC:
This bit is ignored. Timer1 uses the incoming clock as is.
Else:
1 = Do not synchronize external clock input
0 = Synchronize external clock input with system clock
bit 1 RD16: 16-Bit Read/Write Mode Enable bit
1 = Enables register read/write of Timerx in one 16-bit operation
0 = Enables register read/write of Timerx in two 8-bit operation
bit 0 ON: Timerx On bit
1 = Enables Timerx
0 = Disables Timerx

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 298


PIC18(L)F25/26K83

REGISTER 21-2: TxGCON: TIMERx GATE CONTROL REGISTER


R/W-0/u R/W-0/u R/W-0/u R/W-0/u R/W-0/u R-x U-0 U-0
GE GPOL GTM GSPM GGO/DONE GVAL — —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 GE: Timerx Gate Enable bit


If TMRxON = 1:
1 = Timerx counting is controlled by the Timerx gate function
0 = Timerx is always counting
If TMRxON = 0:
This bit is ignored
bit 6 GPOL: Timerx Gate Polarity bit
1 = Timerx gate is active-high (Timerx counts when gate is high)
0 = Timerx gate is active-low (Timerx counts when gate is low)
bit 5 GTM: Timerx Gate Toggle Mode bit
1 = Timerx Gate Toggle mode is enabled
0 = Timerx Gate Toggle mode is disabled and Toggle flip-flop is cleared
Timerx Gate Flip Flop Toggles on every rising edge
bit 4 GSPM: Timerx Gate Single Pulse Mode bit
1 = Timerx Gate Single Pulse mode is enabled and is controlling Timerx gate)
0 = Timerx Gate Single Pulse mode is disabled
bit 3 GGO/DONE: Timerx Gate Single Pulse Acquisition Status bit
1 = Timerx Gate Single Pulse Acquisition is ready, waiting for an edge
0 = Timerx Gate Single Pulse Acquisition has completed or has not been started.
This bit is automatically cleared when TxGSPM is cleared.
bit 2 GVAL: Timerx Gate Current State bit
Indicates the current state of the Timerx gate that could be provided to TMRxH:TMRxL
Unaffected by Timerx Gate Enable (TMRxGE)
bit 1-0 Unimplemented: Read as ‘0’

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 299


PIC18(L)F25/26K83

REGISTER 21-3: TxCLK: TIMERx CLOCK REGISTER


U-0 U-0 U-0 R/W-0/u R/W-0/u R/W-0/u R/W-0/u R/W-0/u
— — — CS<4:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared u = unchanged

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 CS<4:0>: Timerx Clock Source Selection bits

Timer1 Timer3 Timer5


CS
Clock Source Clock Source Clock Source
11111-10001 Reserved Reserved Reserved
10000 CLC4 CLC4 CLC4
01111 CLC3 CLC3 CLC3
01110 CLC2 CLC2 CLC2
01101 CLC1 CLC1 CLC1
01100 TMR5 overflow TMR5 overflow Reserved
01011 TMR3 overflow Reserved TMR3 overflow
01010 Reserved TMR1 overflow TMR1 overflow
01001 TMR0 overflow TMR0 overflow TMR0 overflow
01000 CLKREF CLKREF CLKREF
00111 SOSC SOSC SOSC
00110 MFINTOSC (32 kHz) MFINTOSC (32 kHz) MFINTOSC (32 kHz)
00101 MFINTOSC (500 kHz) MFINTOSC (500 kHz) MFINTOSC (500 kHz)
00100 LFINTOSC LFINTOSC LFINTOSC
00011 HFINTOSC HFINTOSC HFINTOSC
00010 Fosc Fosc Fosc
00001 Fosc/4 Fosc/4 Fosc/4
00000 T1CKIPPS T3CKIPPS T5CKIPPS

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 300


PIC18(L)F25/26K83

REGISTER 21-4: TxGATE: TIMERx GATE ISM REGISTER


U-0 U-0 U-0 R/W-0/u R/W-0/u R/W-0/u R/W-0/u R/W-0/u
— — — GSS<4:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared u = unchanged

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 GSS<4:0>: Timerx Gate Source Selection bits

Timer1 Timer3 Timer5


GSS
Gate Source Gate Source Gate Source
11111-11011 Reserved Reserved Reserved
11010 CLC4_out CLC4_out CLC4_out
11001 CLC3_out CLC3_out CLC3_out
11000 CLC2_out CLC2_out CLC2_out
10111 CLC1_out CLC1_out CLC1_out
10110 ZCDOUT ZCDOUT ZCDOUT
10101 CMP2OUT CMP2OUT CMP2OUT
10100 CMP1OUT CMP1OUT CMP1OUT
10011 NCO1OUT NCO1OUT NCO1OUT
10010-10001 Reserved Reserved Reserved
10000 PWM8OUT PWM8OUT PWM8OUT
01111 PWM7OUT PWM7OUT PWM7OUT
01110 PWM6OUT PWM6OUT PWM6OUT
01101 PWM5OUT PWM5OUT PWM5OUT
01100 CCP4OUT CCP4OUT CCP4OUT
01011 CCP3OUT CCP3OUT CCP3OUT
01010 CCP2OUT CCP2OUT CCP2OUT
01001 CCP1OUT CCP1OUT CCP1OUT
01000 SMT1_match SMT1_match SMT1_match
00111 TMR6OUT (post-scaled) TMR6OUT (post-scaled) TMR6OUT (post-scaled)
00110 TMR5 overflow TMR5 overflow Reserved
00101 TMR4OUT (post-scaled) TMR4OUT (post-scaled) TMR4OUT (post-scaled)
00100 TMR3 overflow Reserved TMR3 overflow
00011 TMR2OUT (post-scaled) TMR2OUT (post-scaled) TMR2OUT (post-scaled)
00010 Reserved TMR1 overflow TMR1 overflow
00001 TMR0 overflow TMR0 overflow TMR0 overflow
00000 Pin selected by T1GPPS Pin selected by T3GPPS Pin selected by T5GPPS

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 301


PIC18(L)F25/26K83

REGISTER 21-5: TMRxL: TIMERx LOW BYTE REGISTER


R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x
TMRxL<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 TMRxL<7:0>:Timerx Low Byte bits

REGISTER 21-6: TMRxH: TIMERx HIGH BYTE REGISTER


R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x
TMRxH<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 TMRxH<7:0>:Timerx High Byte bits

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 302


PIC18(L)F25/26K83
TABLE 21-3: SUMMARY OF REGISTERS ASSOCIATED WITH TIMER1/3/5 AS A TIMER/COUNTER
Reset
Values
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on
Page

TxCON — — CKPS<1:0> — SYNC RD16 ON 298


TxGCON GE GPOL GTM GSPM GO/DONE GVAL — — 299
TxCLK — — — CS<4:0> 300

TxGATE — — — GSS<4:0> 301


TMRxL Least Significant Byte of the 16-bit TMR3 Register 302
TMRxH Holding Register for the Most Significant Byte of the 16-bit TMR3 Register 302
Legend: — = Unimplemented location, read as ‘0’. Shaded cells are not used by TIMER1/3/5.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 303


PIC18(L)F25/26K83
22.0 TIMER2/4/6 MODULE • Three modes of operation:
- Free Running Period
The Timer2/4/6 modules are 8-bit timers that can
- One-Shot
operate as free-running period counters or in
conjunction with external signals that control start, run, - Monostable
freeze, and reset operation in One-Shot and See Figure 22-1 for a block diagram of Timer2. See
Monostable modes of operation. Sophisticated Figure 22-2 for the clock source block diagram.
waveform control such as pulse density modulation are
possible by combining the operation of these timers Note: Three identical Timer2 modules are
with other internal peripherals such as the comparators implemented on this device. The timers are
and CCP modules. Features of the timer include: named Timer2, Timer4, and Timer6. All
references to Timer2 apply as well to
• 8-bit timer register Timer4 and Timer6. All references to T2PR
• 8-bit period register apply as well to T4PR and T6PR.
• Selectable external hardware timer resets
• Programmable prescaler (1:1 to 1:128)
• Programmable postscaler (1:1 to 1:16)
• Selectable synchronous/asynchronous operation
• Alternate clock sources
• Interrupt on period

FIGURE 22-1: TIMER2 BLOCK DIAGRAM


RSEL <4:0> Rev. 10-000168D
9/12/2016

TxINPPS
TxIN PPS MODE<4:0> MODE<3>

Edge Detector reset


External
TMRx_ers Level Detector CCP_pset(1)
Reset
(2) Mode Control
Sources (2 clock Sync)

enable MODE<4:3>=01
Clear ON
MODE<4:1>=1011 D Q

CKPOL
TMRx_clk Prescaler 0
R
TxTMR
Set flag bit
3 Sync 1 TMRxIF

CKPS<2:0> Fosc/4 PSYNC TMRx_postscaled


Comparator Postscaler

4
ON Sync
1
(2 Clocks) TxPR OUTPS<3:0>
0

CKSYNC

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 304


PIC18(L)F25/26K83
FIGURE 22-2: TIMER2 CLOCK SOURCE output postscaler counter. When the postscaler count
BLOCK DIAGRAM equals the value in the OUTPS bits of the TxCON
Rev. 10-000169E
register then a one clock period wide pulse occurs on the
9/12/2016
T2TMR_postscaled output, and the postscaler count is
cleared.
CS<3:0>
TXINPPS 22.1.2 ONE-SHOT MODE
TXIN PPS 0000 The One-Shot mode is identical to the Free Running
Period mode except that the ON bit is cleared and the
timer is stopped when T2TMR matches T2PR and will
not restart until the T2ON bit is cycled off and on.
Postscaler OUTPS values other than 0 are
See TMRx_clk
TxCLK
meaningless in this mode because the timer is stopped
Register at the first period event and the postscaler is reset
when the timer is restarted.

1111
22.1.3 MONOSTABLE MODE
Monostable modes are similar to One-Shot modes
except that the ON bit is not cleared and the timer can
be restarted by an external Reset event.
22.1 Timer2 Operation
22.2 Timer2 Output
Timer2 operates in three major modes:
The Timer2 module’s primary output is T2TMR_posts-
• Free Running Period
caled, which pulses for a single T2TMR_clk period
• One-Shot when the postscaler counter matches the value in the
• Monostable OUTPS bits of the TxCON register. The T2PR posts-
Within each mode there are several options for starting, caler is incremented each time the T2TMR value
stopping, and reset. Table 22-1 lists the options. matches the T2PR value. this signal can be selected as
an input to several other input modules.
In all modes the T2TMR count register is incremented
on the rising edge of the clock signal from the program- Timer2 is also used by the CCP module for pulse gen-
mable prescaler. When T2TMR equals T2PR then a eration in PWM mode. Both the actual T2TMR value as
high level is output to the postscaler counter. T2TMR is well as other internal signals are sent to the CCP mod-
cleared on the next clock input. ule to properly clock both the period and pulse width of
the PWM signal. See Section 23.0 “Capture/Com-
An external signal from hardware can also be config-
pare/PWM Module” for more details on setting up
ured to gate the timer operation or force a T2TMR
Timer2 for use with the CCP, as well as the timing dia-
count Reset. In gate modes the counter stops when the
grams in Section 22.5 “Operation Examples” for
gate is disabled and resumes when the gate is
examples of how the varying Timer2 modes affect CCP
enabled. In Reset modes the T2TMR count is reset on
PWM output.
either the level or edge from the external source.
The T2TMR and T2PR registers are both directly read- 22.3 External Reset Sources
able and writable. The T2TMR register is cleared and
the T2PR register initializes to FFh on any device In addition to the clock source, the Timer2 also takes in
Reset. Both the prescaler and postscaler counters are an external Reset source. This external Reset source
cleared on the following events: is selected for Timer2, Timer4, and Timer6 with the
T2RST, T4RST, and T6RST registers, respectively.
• a write to the T2TMR register
This source can control starting and stopping of the
• a write to the TxCON register timer, as well as resetting the timer, depending on
• any device Reset which mode the timer is in. The mode of the timer is
• External Reset Source event that resets the timer. controlled by the MODE bits of the T2HLT register.
Note: T2TMR is not cleared when TxCON is Edge Triggered modes require six Timer clock periods
written. between external triggers. Level Triggered modes
require the triggering level to be at least three Timer
clock periods long. External triggers are ignored while
22.1.1 FREE RUNNING PERIOD MODE
in Debug Freeze mode.
The value of T2TMR is compared to that of the Period
register, T2PR, on each clock cycle. When the two
values match, the comparator resets the value of
T2TMR to 00h on the next cycle and increments the

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 305


PIC18(L)F25/26K83
TABLE 22-1: TIMER2 OPERATING MODES
MODE<4:0> Output Timer Control
Mode Operation
<4:3> <2:0> Operation Start Reset Stop
000 Software gate (Figure 22-6) ON = 1 — ON = 0
Hardware gate, active-high ON = 1 & — ON = 0 or
001 Period
(Figure 22-7) TMRx_ers = 1 TMRx_ers = 0
Pulse
ON = 1 & — ON = 0 or
010 Hardware gate, active-low
TMRx_ers = 0 TMRx_ers = 1
Free 011 Rising or Falling Edge Reset TMRx_ers ↕
Running 00
Period 100 Period Rising Edge Reset (Figure 22-8) TMRx_ers ↑ ON = 0
101 Pulse Falling Edge Reset TMRx_ers ↓
with ON = 1 ON = 0 or
110 Hardware Low Level Reset TMRx_ers = 0
TMRx_ers = 0
Reset
High Level Reset (Figure 22-9) ON = 0 or
111 TMRx_ers = 1
TMRx_ers = 1
000 One-Shot Software Start (Figure 22-10) ON = 1 —
ON = 1 &
001 Rising Edge Start (Figure 22-9) —
Edge TMRx_ers ↑
Triggered ON = 1 &
010 Falling Edge Start —
Start TMRx_ers ↓
(Note 1) ON = 1 &
011 Any eEdge Start — ON = 0
TMRx_ers ↕ or
One-shot 01 Rising Edge Start & ON = 1 & Next clock after
100 TMRx_ers ↑ TMRx = PRx
Edge Rising Edge Reset (Figure 22-12) TMRx_ers ↑
Triggered (Note 2)
Falling Edge Start & ON = 1 &
101 Start TMRx_ers ↓
Falling Edge Reset TMRx_ers ↓
and
Hardware Rising Edge Start & ON = 1 &
110 TMRx_ers = 0
Reset Low Level Reset (Figure 22-13) TMRx_ers ↑
(Note 1) Falling Edge Start & ON = 1 &
111 TMRx_ers = 1
High Level Reset TMRx_ers ↓
000 Reserved
Rising Edge Start ON = 1 &
001 — ON=0
Edge (Figure 22-12) TMRx_ers ↑
Mono-sta- or
ble Triggered ON = 1 &
010 Falling Edge Start — Next clock after
Start TMRx_ers ↓
TxTMR = TxPR
(Note 1) ON = 1 &
011 Any Edge Start — (Note 3)
TMRx_ers ↕
Reserved 10 100 Reserved
Reserved 101 Reserved
Level High Level Start & ON = 1 &
110 TMRx_ers = 0
Triggered Low Level Reset (Figure 22-13) TMRx_ers = 1
ON = 0 or
Start
One-shot Held in Reset
and Low Level Start & ON = 1 &
111 TMRx_ers = 1 (Note 2)
Hardware High Level Reset TMRx_ers = 0
Reset
Reserved 11 xxx Reserved
Note 1: If ON = 0 then an edge is required to restart the timer after ON = 1.
2: When TxTMR = TxPR then the next clock clears ON and stops TxTMR at 00h.
3: When TxTMR = TxPR then the next clock stops TxTMR at 00h but does not clear ON.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 306


PIC18(L)F25/26K83
22.4 Timer2 Interrupt
Timer2 can also generate a device interrupt. The
interrupt is generated when the postscaler counter
matches one of 16 postscale options (from 1:1 through
1:16), which is selected with the postscaler control bits,
OUTPS of the T2CON register. The interrupt is enabled
by setting the T2TMR Interrupt Enable bit, TMR2IE, of
the respective PIE register. The interrupt timing is
illustrated in Figure 22-3.

FIGURE 22-3: TIMER2 PRESCALER, POSTSCALER, AND INTERRUPT TIMING DIAGRAM

Rev. 10-000205B
9/12/2016

CKPS 0b010

TxPR 1

OUTPS 0b0001

TMRx_clk

TxTMR 0 1 0 1 0 1 0

TMRx_postscaled

(1) (2) (1)


TMRxIF

Note 1: Setting the interrupt flag is synchronized with the instruction clock.
Synchronization may take as many as 2 instruction cycles
2: Cleared by software.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 307


PIC18(L)F25/26K83
22.5 Operation Examples
Unless otherwise specified, the following notes apply to
the following timing diagrams:
- Both the prescaler and postscaler are set to
1:1 (both the CKPS and OUTPS bits in the
T2CON register are cleared).
- The diagrams illustrate any clock except
FOSC/4 and show clock-sync delays of at
least two full cycles for both ON and
T2TMR_ers. When using FOSC/4, the clock-
sync delay is at least one instruction period
for T2TMR_ers; ON applies in the next
instruction period.
- ON and T2TMR_ers are somewhat
generalized, and clock-sync delays may
produce results that are slightly different than
illustrated.
- The PWM Duty Cycle and PWM output are
illustrated assuming that the timer is used for
the PWM function of the CCP module as
described in Section 23.0 “Capture/Com-
pare/PWM Module” and Section
24.0 “Pulse-Width Modulation (PWM)”.
The signals are not a part of the T2TMR
module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 308


PIC18(L)F25/26K83
22.5.1 SOFTWARE GATE MODE
The timer increments with each clock input when ON = 1
and does not increment when ON = 0. When the
T2TMR count equals the T2PR period count the timer
resets on the next clock and continues counting from 0.
Operation with the ON bit software controlled is illus-
trated in Figure 22-4. With T2PR = 5, the counter
advances until T2TMR = 5, and goes to zero with the
next clock.

FIGURE 22-4: SOFTWARE GATE MODE TIMING DIAGRAM


Rev. 10-000195C
9/12/2016

MODE 0b00000

TMRx_clk

Instruction (1) BSF BCF BSF

ON

TxPR 5

TxTMR 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0 1

TMRx_postscaled

PWM Duty
3
Cycle

PWM Output

Note 1: BSF and BCF represent Bit-Set File and Bit-Clear File instructions executed by the CPU to
set or clear the ON bit of TxCON. CPU execution is asynchronous to the timer clock input .

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 309


PIC18(L)F25/26K83
22.5.2 HARDWARE GATE MODE
The Hardware Gate modes operate the same as the
Software Gate mode except the T2TMR_ers external
signal can also gate the timer. When used with the CCP
the gating extends the PWM period. If the timer is
stopped when the PWM output is high then the duty
cycle is also extended.
When MODE<4:0> = 00001 then the timer is stopped
when the external signal is high. When MODE<4:0> =
00010 then the timer is stopped when the external
signal is low.
Figure 22-5 illustrates the Hardware Gating mode for
MODE<4:0>= 00001 in which a high input level starts
the counter.

FIGURE 22-5: HARDWARE GATE MODE TIMING DIAGRAM (MODE = 00001)

Rev. 10-000196C
9/12/2016

MODE 0b00001

TMRx_clk

TMRx_ers

TxPR 5

TxTMR 0 1 2 3 4 5 0 1 2 3 4 5 0 1

TMRx_postscaled

PWM Duty
3
Cycle

PWM Output

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 310


PIC18(L)F25/26K83
22.5.3 EDGE-TRIGGERED HARDWARE
LIMIT MODE
In Hardware Limit mode the timer can be reset by the
TMRx_ers external signal before the timer reaches the
period count. Three types of Resets are possible:
• Reset on rising or falling edge
(MODE<4:0> = 00011)
• Reset on rising edge (MODE<4:0> = 0010)
• Reset on falling edge (MODE<4:0> = 00101)
When the timer is used in conjunction with the CCP in
PWM mode then an early Reset shortens the period
and restarts the PWM pulse after a two clock delay.
Refer to Figure 22-6.

FIGURE 22-6: EDGE TRIGGERED HARDWARE LIMIT MODE TIMING DIAGRAM (MODE=00100)

Rev. 10-000197C
9/12/2016

MODE 0b00100

TMRx_clk

TxPR 5

Instruction (1) BSF BCF BSF

ON

TMRx_ers

TxTMR 0 1 2 0 1 2 3 4 5 0 1 2 3 4 5 0 1

TMRx_postscaled

PWM Duty
3
Cycle

PWM Output

Note 1: BSF and BCF represent Bit-Set File and Bit-Clear File instructions executed by the CPU to
set or clear the ON bit of TxCON. CPU execution is asynchronous to the timer clock input .

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 311


PIC18(L)F25/26K83
22.5.4 LEVEL-TRIGGERED HARDWARE When the CCP uses the timer as the PWM time base
LIMIT MODE then the PWM output will be set high when the timer
starts counting and then set low only when the timer
In the level triggered Hardware Limit Timer modes the
count matches the CCPRx value. The timer is reset
counter is reset by high or low levels of the external
when either the timer count matches the T2PR value or
signal TMR2_ers, as shown in Figure 22-7. Selecting
two clock periods after the external Reset signal goes
MODE<4:0> = 00110 will cause the timer to reset on a
true and stays true.
low level external signal. Selecting MODE<4:0> =
00111 will cause the timer to reset on a high level The timer starts counting, and the PWM output is set
external signal. In the example, the counter is reset high, on either the clock following the T2PR match or
while TMR2_ers = 1. ON is controlled by BSF and BCF two clocks after the external Reset signal relinquishes
instructions. When ON=0 the external signal is ignored. the Reset. The PWM output will remain high until the
timer counts up to match the CCPRx pulse width value.
If the external Reset signal goes true while the PWM
output is high then the PWM output will remain high
until the Reset signal is released allowing the timer to
count up to match the CCPRx value.

FIGURE 22-7: LEVEL TRIGGERED HARDWARE LIMIT MODE TIMING DIAGRAM


(MODE = 00111)

Rev. 10-000198C
9/12/2016

MODE 0b00111

TMRx_clk

TxPR 5

Instruction (1) BSF BCF BSF

ON

TMRx_ers

TxTMR 0 1 2 0 1 2 3 4 5 0 0 1 2 3 4 5 0

TMRx_postscaled

PWM Duty
3
Cycle

PWM Output

Note 1: BSF and BCF represent Bit-Set File and Bit-Clear File instructions executed by the CPU to
set or clear the ON bit of TxCON. CPU execution is asynchronous to the timer clock input .

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 312


PIC18(L)F25/26K83
22.5.5 SOFTWARE START ONE-SHOT When One-Shot mode is used in conjunction with the
MODE CCP PWM operation the PWM pulse drive starts
concurrent with setting the ON bit. Clearing the ON bit
In One-Shot mode the timer resets and the ON bit is
while the PWM drive is active will extend the PWM
cleared when the timer value matches the T2PR period
drive. The PWM drive will terminate when the timer
value. The ON bit must be set by software to start
value matches the CCPRx pulse width value. The
another timer cycle. Setting MODE<4:0> = 01000
PWM drive will remain off until software sets the ON bit
selects One-Shot mode which is illustrated in
to start another cycle. If software clears the ON bit after
Figure 22-8. In the example, ON is controlled by BSF
the CCPRx match but before the T2PR match then the
and BCF instructions. In the first case, a BSF
PWM drive will be extended by the length of time the
instruction sets ON and the counter runs to completion
ON bit remains cleared. Another timing cycle can only
and clears ON. In the second case, a BSF instruction
be initiated by setting the ON bit after it has been
starts the cycle, BCF/BSF instructions turn the counter
cleared by a T2PR period count match.
off and on during the cycle, and then it runs to
completion.

FIGURE 22-8: SOFTWARE START ONE-SHOT MODE TIMING DIAGRAM (MODE = 01000)

Rev. 10-000199C
9/12/2016

MODE 0b01000

TMRx_clk

TxPR 5

Instruction (1) BSF BSF BCF BSF

ON

TxTMR 0 1 2 3 4 5 0 1 2 3 4 5 0

TMRx_postscaled

PWM Duty
3
Cycle

PWM Output

Note 1: BSF and BCF represent Bit-Set File and Bit-Clear File instructions
executed by the CPU to set or clear the ON bit of TxCON. CPU
execution is asynchronous to the timer clock input.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 313


PIC18(L)F25/26K83
22.5.6 EDGE-TRIGGERED ONE-SHOT If the timer is halted by clearing the ON bit then another
MODE TMRx_ers edge is required after the ON bit is set to
resume counting. Figure 22-9 illustrates operation in
The Edge-Triggered One-Shot modes start the timer the rising edge One-Shot mode.
on an edge from the external signal input, after the ON
When Edge-Triggered One-Shot mode is used in
bit is set, and clear the ON bit when the timer matches
conjunction with the CCP then the edge-trigger will
the T2PR period value. The following edges will start activate the PWM drive and the PWM drive will
the timer: deactivate when the timer matches the CCPRx pulse
• Rising edge (MODE<4:0> = 01001) width value and stay deactivated when the timer halts
• Falling edge (MODE<4:0> = 01010) at the T2PR period count match.
• Rising or Falling edge (MODE<4:0>=‘01011’)

FIGURE 22-9: EDGE TRIGGERED ONE-SHOT MODE TIMING DIAGRAM (MODE = 01001)
Rev. 10-000200C
9/12/2016

MODE 0b01001

TMRx_clk

TxPR 5

Instruction (1) BSF BSF BCF

ON

TMRx_ers

TxTMR 0 1 2 3 4 5 0 1 2

CCP_pset

TMRx_postscaled

PWM Duty
3
Cycle

PWM Output

Note 1: BSF and BCF represent Bit-Set File and Bit-Clear File instructions executed by the CPU to
set or clear the ON bit of TxCON. CPU execution is asynchronous to the timer clock input.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 314


22.5.7 EDGE-TRIGGERED HARDWARE LIMIT ONE-SHOT The timer resets and clears the ON bit when the timer value matches the T2PR
 2017 Microchip Technology Inc.

MODE period value. External signal edges will have no effect until after software sets
the ON bit. Figure 22-10 illustrates the rising edge hardware limit one-shot
In Edge-Triggered Hardware Limit One-Shot modes the timer starts on the first operation.
external signal edge after the ON bit is set and resets on all subsequent edges.
When this mode is used in conjunction with the CCP then the first starting edge
Only the first edge after the ON bit is set is needed to start the timer. The
trigger, and all subsequent Reset edges, will activate the PWM drive. The PWM
counter will resume counting automatically two clocks after all subsequent drive will deactivate when the timer matches the CCPRx pulse width value and
external Reset edges. Edge triggers are as follows: stay deactivated until the timer halts at the T2PR period match unless an exter-
• Rising edge Start and Reset (MODE<4:0> = 01100) nal signal edge resets the timer before the match occurs.
• Falling edge Start and Reset (MODE<4:0> = 01101)

FIGURE 22-10: EDGE TRIGGERED HARDWARE LIMIT ONE-SHOT MODE TIMING DIAGRAM (MODE = 01100))
Rev. 10-000201C
9/12/2016

MODE 0b01100
Preliminary

TMRx_clk

TxPR 5

Instruction(1) BSF BSF

PIC18(L)F25/26K83
ON

TMRx_ers

TxTMR 0 1 2 3 4 5 0 1 2 0 1 2 3 4 5 0

TMRx_postscaled

PWM Duty
3
Cycle
DS40001943A-page 315

PWM Output

Note 1: BSF and BCF represent Bit-Set File and Bit-Clear File instructions executed by the CPU to
set or clear the ON bit of TxCON. CPU execution is asynchronous to the timer clock input.
22.5.8 LEVEL RESET, EDGE-TRIGGERED HARDWARE LIMIT When the timer count matches the T2PR period count, the timer is reset and
 2017 Microchip Technology Inc.

ONE-SHOT MODES the ON bit is cleared. When the ON bit is cleared by either a T2PR match or by
software control a new external signal edge is required after the ON bit is set to
In Level Triggered One-Shot mode the timer count is reset on the external start the counter.
signal level and starts counting on the rising/falling edge of the transition from
When Level Triggered Reset One-Shot mode is used in conjunction with the
reset level to the active level while the ON bit is set. Reset levels are selected
CCP PWM operation the PWM drive goes active with the external signal edge
as follows: that starts the timer. The PWM drive goes inactive when the timer count equals
• Low reset level (MODE<4:0> = 01110) the CCPRx pulse-width count. The PWM drive does not go active when the
• High reset level (MODE<4:0> = 01111) timer count clears at the T2PR period count match.

FIGURE 22-11: LOW LEVEL RESET, EDGE-TRIGGERED HARDWARE LIMIT ONE-SHOT MODE TIMING DIAGRAM (MODE = 01110)

Rev. 10-000202C
9/12/2016

MODE 0b01110
Preliminary

TMRx_clk

TxPR 5

Instruction(1) BSF BSF

ON

PIC18(L)F25/26K83
TMRx_ers

TxTMR 0 1 2 3 4 5 0 1 0 1 2 3 4 5 0

TMRx_postscaled

PWM Duty
3
Cycle
DS40001943A-page 316

PWM Output

Note 1: BSF and BCF represent Bit-Set File and Bit-Clear File instructions executed by the CPU to
set or clear the ON bit of TxCON. CPU execution is asynchronous to the timer clock input.
22.5.9 EDGE-TRIGGERED MONOSTABLE MODES When an Edge-Triggered Monostable mode is used in conjunction with the
 2017 Microchip Technology Inc.

CCP PWM operation the PWM drive goes active with the external Reset signal
The Edge-Triggered Monostable modes start the timer on an edge from the
edge that starts the timer, but will not go active when the timer matches the
external Reset signal input, after the ON bit is set, and stop incrementing the
T2PR value. While the timer is incrementing, additional edges on the external
timer when the timer matches the T2PR period value. The following edges will
Reset signal will not affect the CCP PWM.
start the timer:
• Rising edge (MODE<4:0> = 10001)
• Falling edge (MODE<4:0> = 10010)
• Rising or Falling edge (MODE<4:0> = 10011)

FIGURE 22-12: RISING EDGE-TRIGGERED MONOSTABLE MODE TIMING DIAGRAM (MODE = 10001)
Rev. 10-000203B
12/13/2016

MODE 0b10001

TMRx_clk

TxPR 5
Preliminary

Instruction(1) BSF BCF BSF BCF BSF

ON

TMRx_ers

PIC18(L)F25/26K83
TxTMR 0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 3 4 5 0

TMRx_postscaled

PWM Duty
3
Cycle

PWM Output
DS40001943A-page 317

Note 1: BSF and BCF represent Bit-Set File and Bit-Clear File instructions executed by the CPU to
set or clear the ON bit of TxCON. CPU execution is asynchronous to the timer clock input.
22.5.10 LEVEL-TRIGGERED HARDWARE LIMIT ONE-SHOT When the timer count matches the T2PR period count, the timer is reset and
 2017 Microchip Technology Inc.

MODES the ON bit is cleared. When the ON bit is cleared by either a T2PR match or by
software control the timer will stay in Reset until both the ON bit is set and the
The Level Triggered Hardware Limit One-Shot modes hold the timer in Reset
external signal is not at the Reset level.
on an external Reset level and start counting when both the ON bit is set and
the external signal is not at the Reset level. If one of either the external signal When Level Triggered Hardware Limit One-Shot modes are used in conjunction
is not in reset or the ON bit is set then the other signal being set/made active with the CCP PWM operation the PWM drive goes active with either the exter-
will start the timer. Reset levels are selected as follows: nal signal edge or the setting of the ON bit, whichever of the two starts the timer.
• Low reset level (MODE<4:0> = 10110)
• High reset level (MODE<4:0> = 10111)

FIGURE 22-13: LEVEL-TRIGGERED HARDWARE LIMIT ONE-SHOT MODE TIMING DIAGRAM (MODE = 10110)

Rev. 10-000204B
12/13/2016

MODE 0b10110

TMRx_clk
Preliminary

TxPR 5

Instruction(1) BSF BSF BCF BSF

ON

PIC18(L)F25/26K83
TMRx_ers

TxTMR 0 1 2 3 4 5 0 1 2 3 0 1 2 3 4 5 0

TMRx_postscaled

PWM Duty
‘D3
Cycle
DS40001943A-page 318

PWM Output

Note 1: BSF and BCF represent Bit-Set File and Bit-Clear File instructions executed by the CPU to
set or clear the ON bit of TxCON. CPU execution is asynchronous to the timer clock input.
PIC18(L)F25/26K83
22.6 Timer2 Operation During Sleep
When PSYNC = 1, Timer2 cannot be operated while
the processor is in Sleep mode. The contents of the
T2TMR and T2PR registers will remain unchanged
while processor is in Sleep mode.
When PSYNC = 0, Timer2 will operate in Sleep as long
as the clock source selected is also still running.
Selecting the LFINTOSC, MFINTOSC, or HFINTOSC
oscillator as the timer clock source will keep the
selected oscillator running during Sleep.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 319


PIC18(L)F25/26K83
22.7 Register Definitions: Timer2/4/6
Control TABLE 22-2: OPERATING MODES
Long bit name prefixes for the Timer2/4/6 peripherals Peripheral Bit Name Prefix
are shown in Table 22-2. Refer to Section Timer2 T2
1.3.2.2 “Long Bit Names” for more information.
Timer4 T4
Timer6 T6

REGISTER 22-1: TxCLK: TIMERx CLOCK SELECTION REGISTER


U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — CS<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-4 Unimplemented: Read as ‘0’


bit 3-0 CS<3:0>: Timerx Clock Selection bits

T2TMR TMR4 TMR6


CS<3:0>
Clock Source Clock Source Clock Source
1111 Reserved Reserved Reserved
1110 CLC4_out CLC4_out CLC4_out
1101 CLC3_out CLC3_out CLC3_out
1100 CLC2_out CLC2_out CLC2_out
1011 CLC1_out CLC1_out CLC1_out
1010 ZCD_OUT ZCD_OUT ZCD_OUT
1001 NCO1OUT NCO1OUT NCO1OUT
1000 CLKREF_OUT CLKREF_OUT CLKREF_OUT
0111 SOSC SOSC SOSC
0110 MFINTOSC (32 kHz) MFINTOSC (32 kHz) MFINTOSC (32 kHz)
0101 MFINTOSC (500 kHz) MFINTOSC (500 kHz) MFINTOSC (500 kHz)
0100 LFINTOSC LFINTOSC LFINTOSC
0011 HFINTOSC HFINTOSC HFINTOSC
0010 FOSC FOSC FOSC
0001 FOSC/4 FOSC/4 FOSC/4
0000 Pin selected by T2INPPS Pin selected by T4INPPS Pin selected by T6INPPS

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 320


PIC18(L)F25/26K83

REGISTER 22-2: TxRST: TIMER2 EXTERNAL RESET SIGNAL SELECTION REGISTER


U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — RSEL<4:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 RSEL<4:0>: Timer2 External Reset Signal Source Selection bits

T2TMR TMR4 TMR6


RSEL<4:0>
Reset Source Reset Source Reset Source
11111-11001 Reserved Reserved Reserved
11000 UART2_tx_edge UART2_tx_edge UART2_tx_edge
10111 UART2_rx_edge UART2_rx_edge UART2_rx_edge
10110 UART1_tx_edge UART1_tx_edge UART1_tx_edge
10101 UART1_rx_edge UART1_rx_edge UART1_rx_edge
10100 CLC4_out CLC4_out CLC4_out
10011 CLC3_out CLC3_out CLC3_out
10010 CLC2_out CLC2_out CLC2_out
10001 CLC1_out CLC1_out CLC1_out
10000 ZCD_OUT ZCD_OUT ZCD_OUT
01111 CMP2OUT CMP2OUT CMP2OUT
01110 CMP1OUT CMP1OUT CMP1OUT
01101-01100 Reserved Reserved Reserved
01011 PWM8OUT PWM8OUT PWM8OUT
01010 PWM7OUT PWM7OUT PWM7OUT
01001 PWM6OUT PWM6OUT PWM6OUT
01000 PWM5OUT PWM5OUT PWM5OUT
00111 CCP4OUT CCP4OUT CCP4OUT
00110 CCP3OUT CCP3OUT CCP3OUT
00101 CCP2OUT CCP2OUT CCP2OUT
00100 CCP1OUT CCP1OUT CCP1OUT
00011 TMR6 postscaled TMR6 postscaled Reserved
00010 TMR4 postscaled Reserved TMR4 postscaled
00001 Reserved T2TMR postscaled T2TMR postscaled
00000 Pin selected by T2INPPS Pin selected by T4INPPS Pin selected by T6INPPS

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 321


PIC18(L)F25/26K83

REGISTER 22-3: TxTMR: TIMERx COUNTER REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
TMRx<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 TMRx<7:0>: Timerx Counter bits

REGISTER 22-4: TxPR: TIMERx PERIOD REGISTER


R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1 R/W-1/1
PRx<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 PRx<7:0>: Timerx Period Register bits

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 322


PIC18(L)F25/26K83

REGISTER 22-5: TxCON: TIMERx CONTROL REGISTER


R/W/HC-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
ON CKPS<2:0> OUTPS<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HC = Bit is cleared by hardware

bit 7 ON: Timerx On bit(1)


1 = Timerx is On
0 = Timerx is Off: all counters and state machines are reset
bit 6-4 CKPS<2:0>: Timerx-type Clock Prescale Select bits
111 = 1:128 Prescaler
110 = 1:64 Prescaler
101 = 1:32 Prescaler
100 = 1:16 Prescaler
011 = 1:8 Prescaler
010 = 1:4 Prescaler
001 = 1:2 Prescaler
000 = 1:1 Prescaler
bit 3-0 OUTPS<3:0>: Timerx Output Postscaler Select bits
1111 = 1:16 Postscaler
1110 = 1:15 Postscaler
1101 = 1:14 Postscaler
1100 = 1:13 Postscaler
1011 = 1:12 Postscaler
1010 = 1:11 Postscaler
1001 = 1:10 Postscaler
1000 = 1:9 Postscaler
0111 = 1:8 Postscaler
0110 = 1:7 Postscaler
0101 = 1:6 Postscaler
0100 = 1:5 Postscaler
0011 = 1:4 Postscaler
0010 = 1:3 Postscaler
0001 = 1:2 Postscaler
0000 = 1:1 Postscaler

Note 1: In certain modes, the ON bit will be auto-cleared by hardware. See Section 22.1.2 “One-Shot Mode”.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 323


PIC18(L)F25/26K83

REGISTER 22-6: TxHLT: TIMERx HARDWARE LIMIT CONTROL REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
PSYNC CKPOL CKSYNC MODE<4:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 PSYNC: Timerx Prescaler Synchronization Enable bit(1, 2)


1 = TxTMR Prescaler Output is synchronized to Fosc/4
0 = TxTMR Prescaler Output is not synchronized to Fosc/4
bit 6 CKPOL: Timerx Clock Polarity Selection bit(3)
1 = Falling edge of input clock clocks timer/prescaler
0 = Rising edge of input clock clocks timer/prescaler
bit 5 CKSYNC: Timerx Clock Synchronization Enable bit(4, 5)
1 = ON register bit is synchronized to T2TMR_clk input
0 = ON register bit is not synchronized to T2TMR_clk input
bit 4-0 MODE<4:0>: Timerx Control Mode Selection bits(6, 7)
See Table 22-1 for all operating modes.

Note 1: Setting this bit ensures that reading TxTMR will return a valid data value.
2: When this bit is ‘1’, Timer2 cannot operate in Sleep mode.
3: CKPOL should not be changed while ON = 1.
4: Setting this bit ensures glitch-free operation when the ON is enabled or disabled.
5: When this bit is set then the timer operation will be delayed by two TxTMR input clocks after the ON bit is
set.
6: Unless otherwise indicated, all modes start upon ON = 1 and stop upon ON = 0 (stops occur without
affecting the value of TxTMR).
7: When TxTMR = TxPR, the next clock clears TxTMR, regardless of the operating mode.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 324


PIC18(L)F25/26K83
TABLE 22-3: SUMMARY OF REGISTERS ASSOCIATED WITH TIMER2
Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page

TxPR Timer2 Module Period Register 305*


TxTMR Holding Register for the 8-bit T2TMR Register 305*
TxCON ON CKPS<2:0> OUTPS<3:0> 323
TxCLK — — — — — CS<2:0> 320
TxRST — — — — RSEL<3:0> 321
TxHLT PSYNC CPOL CSYNC MODE<4:0> 324
Legend: — = unimplemented location, read as ‘0’. Shaded cells are not used for Timer2 module.
* Page provides register information.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 325


PIC18(L)F25/26K83
23.0 CAPTURE/COMPARE/PWM 23.1 CCP Module Configuration
MODULE Each Capture/Compare/PWM module is associated
The Capture/Compare/PWM module is a peripheral with a control register (CCPxCON), a capture input
that allows the user to time and control different events, selection register (CCPxCAP) and a data register
and to generate Pulse-Width Modulation (PWM) (CCPRx). The data register, in turn, is comprised of two
signals. In Capture mode, the peripheral allows the 8-bit registers: CCPRxL (low byte) and CCPRxH (high
timing of the duration of an event. The Compare mode byte).
allows the user to trigger an external event when a
23.1.1 CCP MODULES AND TIMER
predetermined amount of time has expired. The PWM
mode can generate pulse-width modulated signals of RESOURCES
varying frequency and duty cycle. The CCP modules utilize Timers 1 through 6 that vary
This family of devices contains four standard Capture/ with the selected mode. Various timers are available to
Compare/PWM modules (CCP1, CCP2, CCP3 and the CCP modules in Capture, Compare or PWM
CCP4). Each individual CCP module can select the modes, as shown in Table 23-1.
timer source that controls the module. Each module
has an independent timer selection which can be TABLE 23-1: CCP MODE – TIMER
accessed using the CxTSEL bits in the CCPTMRS0 RESOURCE
register (Register 23-2). The default timer selection is CCP Mode Timer Resource
TMR1 when using Capture/Compare mode and TMR2
when using PWM mode in the CCPx module. Capture
Timer1, Timer3 or Timer5
Please note that the Capture/Compare mode operation Compare
is described with respect to TMR1 and the PWM mode
PWM Timer2, Timer4 or Timer6
operation is described with respect to TMR2 in the
following sections. The assignment of a particular timer to a module is
The Capture and Compare functions are identical for all determined by the timer to CCP enable bits in the
CCP modules. CCPTMRS0 register (see Register 23-2) All of the
modules may be active at once and may share the
Note 1: In devices with more than one CCP same timer resource if they are configured to operate
module, it is very important to pay close in the same mode (Capture/Compare or PWM) at the
attention to the register names used. A same time.
number placed after the module acronym
is used to distinguish between separate 23.1.2 OPEN-DRAIN OUTPUT OPTION
modules. For example, the CCP1CON
When operating in Output mode (the Compare or PWM
and CCP2CON control the same
modes), the drivers for the CCPx pins can be optionally
operational aspects of two completely
configured as open-drain outputs. This feature allows
different CCP modules.
the voltage level on the pin to be pulled to a higher level
2: Throughout this section, generic through an external pull-up resistor and allows the
references to a CCP module in any of its output to communicate with external circuits without the
operating modes may be interpreted as need for additional level shifters.
being equally applicable to CCPx module.
Register names, module signals, I/O pins,
and bit names may use the generic
designator ‘x’ to indicate the use of a
numeral to distinguish a particular module,
when required.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 326


PIC18(L)F25/26K83
23.2 Capture Mode 23.2.1 CAPTURE SOURCES
Capture mode makes use of the 16-bit Timer1 In Capture mode, the CCPx pin should be configured
resource. When an event occurs on the capture as an input by setting the associated TRIS control bit.
source, the 16-bit CCPRxH:CCPRxL register pair Note: If the CCPx pin is configured as an output,
captures and stores the 16-bit value of the a write to the port can cause a capture
TMRxH:TMRxL register pair, respectively. An event is condition.
defined as one of the following and is configured by the
MODE<3:0> bits of the CCPxCON register: The capture source is selected by configuring the
CTS<2:0> bits of the CCPxCAP register. Refer to
• Every falling edge of CCPx input
CCPxCAP register (Register 23-4) for a list of sources
• Every rising edge of CCPx input that can be selected.
• Every 4th rising edge of CCPx input
• Every 16th rising edge of CCPx input 23.2.2 TIMER1 MODE RESOURCE
• Every edge of CCPx input (rising or falling) Timer1 must be running in Timer mode or Synchronized
When a capture is made, the Interrupt Request Flag bit Counter mode for the CCP module to use the capture
CCPxIF of the respective PIR register is set. The inter- feature. In Asynchronous Counter mode, the capture
rupt flag must be cleared in software. If another capture operation may not work.
occurs before the value in the CCPRxH:CCPRxL reg- • See Section 21.0 “Timer1/3/5 Module with Gate
ister pair is read, the old captured value is overwritten Control” for more information on configuring
by the new captured value. Timer1.

Note: If an event occurs during a 2-byte read, Note: Clocking Timer1 from the system clock
the high and low-byte data will be from (FOSC) should not be used in Capture
different events. It is recommended while mode. In order for Capture mode to
reading the CCPRxH:CCPRxL register recognize the trigger event on the CCPx
pair to either disable the module or read pin, Timer1 must be clocked from the
the register pair twice for data integrity. instruction clock (FOSC/4) or from an
Figure 23-1 shows a simplified diagram of the capture external clock source.
operation.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 327


PIC18(L)F25/26K83

FIGURE 23-1: CAPTURE MODE OPERATION BLOCK DIAGRAM

Rev. 10-000158J
9/13/2016
RxyPPS
CCPx
CTS<2:0>

TRIS Control
CLC4_out 111
CLC3_out 110 CCPRxH CCPRxL
CLC2_out 101 16
set CCPxIF
CLC1_out 100 Prescaler and
IOC_interrupt 011 1,4,16 Edge Detect
16
CMP2_out 010
CMP1_out 001 MODE <3:0> TMR1H TMR1L
CCPx PPS 000

CCPxPPS

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 328


PIC18(L)F25/26K83
23.2.3 SOFTWARE INTERRUPT MODE 23.3 Compare Mode
When the Capture mode is changed, a false capture Compare mode makes use of the 16-bit Timer1
interrupt may be generated. The user should keep the resource. The 16-bit value of the CCPRxH:CCPRxL
CCPxIE Interrupt Priority bit of the respective PIE register pair is constantly compared against the 16-bit
register clear to avoid false interrupts. Additionally, the value of the TMRxH:TMRxL register pair. When a
user should clear the CCPxIF interrupt flag bit of the match occurs, one of the following events can occur:
respective PIR register following any change in
Operating mode. • Toggle the CCPx output, clear TMRx
• Toggle the CCPx output
23.2.4 CAPTURE DURING SLEEP • Set the CCPx output
Capture mode depends upon the Timer1 module for • Clear the CCPx output
proper operation. There are two options for driving the • Pulse output
Timer1 module in Capture mode. It can be driven by the • Pulse output, clear TMRx
instruction clock (FOSC/4), or by an external clock source.
The action on the pin is based on the value of the
When Timer1 is clocked by FOSC/4, Timer1 will not MODE<3:0> control bits of the CCPxCON register. At
increment during Sleep. When the device wakes from the same time, the interrupt flag CCPxIF bit is set, and
Sleep, Timer1 will continue from its previous state. an ADC conversion can be triggered, if selected.
Capture mode will operate during Sleep as long as the All Compare modes can generate an interrupt and
clock source for Timer1 is active in Sleep. trigger an ADC conversion. When MODE = 0b0001 or
0b1011, the CCP resets the TMR register pair.
Figure 23-2 shows a simplified diagram of the compare
operation.

FIGURE 23-2: COMPARE MODE OPERATION BLOCK DIAGRAM

Rev. 10-000159C
5/26/2016

To Peripherals
CCPRxH CCPRxL
CCPx_out
set CCPxIF
Output S Q PPS CCPx Pin
Comparator
Logic
R TRIS Control
4 RxyPPS
TMR1H TMR1L MODE<3:0>

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 329


PIC18(L)F25/26K83
23.3.1 CCPx PIN CONFIGURATION 23.4 PWM Overview
The software must configure the CCPx pin as an output Pulse-Width Modulation (PWM) is a scheme that
by clearing the associated TRIS bit and defining the provides power to a load by switching quickly between
appropriate output pin through the RxyPPS registers. fully ON and fully OFF states. The PWM signal
See Section 17.0 “Peripheral Pin Select (PPS) resembles a square wave where the high portion of the
Module” for more details. signal is considered the ON state and the low portion of
the signal is considered the OFF state. The high portion,
also known as the pulse width, can vary in time and is
Note: Clearing the CCPxCON register will force defined in steps. A larger number of steps applied, which
the CCPx compare output latch to the lengthens the pulse width, also supplies more power to
default low level. This is not the PORT I/O the load. Lowering the number of steps applied, which
data latch. shortens the pulse width, supplies less power. The PWM
period is defined as the duration of one complete cycle
23.3.2 TIMER1 MODE RESOURCE or the total amount of on and off time combined.
In Compare mode, Timer1 must be running in either PWM resolution defines the maximum number of steps
Timer mode or Synchronized Counter mode. The that can be present in a single PWM period. A higher
compare operation may not work in Asynchronous resolution allows for more precise control of the pulse-
Counter mode. width time and in turn the power that is applied to the
See Section 21.0 “Timer1/3/5 Module with Gate load.
Control” for more information on configuring Timer1. The term duty cycle describes the proportion of the on
Note: Clocking Timer1 from the system clock time to the off time and is expressed in percentages,
(FOSC) should not be used in Compare where 0% is fully off and 100% is fully on. A lower duty
mode. In order for Compare mode to cycle corresponds to less power applied and a higher
recognize the trigger event on the CCPx duty cycle corresponds to more power applied.
pin, TImer1 must be clocked from the Figure 23-3 shows a typical waveform of the PWM
instruction clock (FOSC/4) or from an signal.
external clock source.
23.4.1 STANDARD PWM OPERATION
23.3.3 AUTO-CONVERSION TRIGGER The standard PWM mode generates a Pulse-Width
All CCPx modes set the CCP interrupt flag (CCPxIF). Modulation (PWM) signal on the CCPx pin with up to
When this flag is set and a match occurs, an auto- ten bits of resolution. The period, duty cycle, and
conversion trigger can take place if the CCP module is resolution are controlled by the following registers:
selected as the conversion trigger source. • T2PR registers
Refer to Section 37.2.5 “Auto-Conversion Trigger” • T2CON registers
for more information. • CCPRxL and CCPRxH registers
Note: Removing the match condition by • CCPxCON registers
changing the contents of the CCPRxH It is required to have FOSC/4 as the clock input to
and CCPRxL register pair, between the TMR2/4/6 for correct PWM operation. Figure 23-4
clock edge that generates the Auto- shows a simplified block diagram of PWM operation.
conversion Trigger and the clock edge
that generates the Timer1 Reset, will Note: The corresponding TRIS bit must be
preclude the Reset from occurring cleared to enable the PWM output on the
CCPx pin.
23.3.4 COMPARE DURING SLEEP
Since FOSC is shut down during Sleep mode, the FIGURE 23-3: CCP PWM OUTPUT SIGNAL
Compare mode will not function properly during Sleep, Period Rev. 10-000023E

unless the timer is running. The device will wake on


9/13/2016

interrupt (if enabled). Pulse Width


T2TMR = T2PR
T2TMR reloaded with 0

T2TMR = Duty Cycle =


PWMxDCH<7:0>:PWMxDCL<7:6>
T2TMR = T2PR
T2TMR reloaded with 0

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 330


PIC18(L)F25/26K83
FIGURE 23-4: SIMPLIFIED PWM BLOCK DIAGRAM

Rev. 10-000157D

Duty cycle registers 9/13/2016

CCPRxH CCPRxL
CCPx_out
To Peripherals
set CCPxIF
10-bit Latch(2)
(Not accessible by user)

Comparator R Q PPS CCPx

S RxyPPS
TMR2 Module TRIS Control

R
T2TMR (1)

ERS logic
Comparator CCPx_pset

T2PR

Notes: 1. 8-bit timer is concatenated with two bits generated by Fosc or two bits of the internal prescaler to
create 10-bit time-base.
2. The alignment of the 10 bits from the CCPR register is determined by the CCPxFMT bit.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 331


PIC18(L)F25/26K83
23.4.2 SETUP FOR PWM OPERATION 23.4.4 PWM PERIOD
The following steps should be taken when configuring The PWM period is specified by the T2PR register of
the CCP module for standard PWM operation: Timer2. The PWM period can be calculated using the
1. Use the desired output pin RxyPPS control to formula of Equation 23-1.
select CCPx as the source and disable the
CCPx pin output driver by setting the associated EQUATION 23-1: PWM PERIOD
TRIS bit.
PWM Period =   T2PR  + 1   4  T OSC 
2. Load the T2PR register with the PWM period
value. (TMR2 Prescale Value)
3. Configure the CCP module for the PWM mode
by loading the CCPxCON register with the Note 1: TOSC = 1/FOSC
appropriate values.
When T2TMR is equal to T2PR, the following three
4. Load the CCPRxL register, and the CCPRxH
events occur on the next increment cycle:
register with the PWM duty cycle value and
configure the FMT bit of the CCPxCON register • T2TMR is cleared
to set the proper register alignment. • The CCPx pin is set. (Exception: If the PWM duty
5. Configure and start Timer2: cycle = 0%, the pin will not be set.)
• Clear the TMR2IF interrupt flag bit of the • The PWM duty cycle is transferred from the
respective PIR register. See Note below. CCPRxL/H register pair into a 10-bit buffer.
• Select the timer clock source to be as
FOSC/4 using the T2CLK register. This is Note: The Timer postscaler (see Section
required for correct operation of the PWM 22.3 “External Reset Sources”) is not
module. used in the determination of the PWM
• Configure the CKPS bits of the T2CON frequency.
register with the Timer prescale value.
• Enable the Timer by setting the ON bit of
the T2CON register.
6. Enable PWM output pin:
• Wait until the Timer overflows and the
TMR2IF bit of the PIR4 register is set. See
Note below.
• Enable the CCPx pin output driver by
clearing the associated TRIS bit.

Note: In order to send a complete duty cycle and


period on the first PWM output, the above
steps must be included in the setup
sequence. If it is not critical to start with a
complete PWM signal on the first output,
then step 6 may be ignored.

23.4.3 TIMER2 TIMER RESOURCE


The PWM standard mode makes use of the 8-bit
Timer2 timer resources to specify the PWM period.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 332


PIC18(L)F25/26K83
23.4.5 PWM DUTY CYCLE 23.4.6 PWM RESOLUTION
The PWM duty cycle is specified by writing a 10-bit The resolution determines the number of available duty
value to the CCPRxH:CCPRxL register pair. The cycles for a given period. For example, a 10-bit resolution
alignment of the 10-bit value is determined by the FMT will result in 1024 discrete duty cycles, whereas an 8-bit
bit of the CCPxCON register (see Figure 23-5). The resolution will result in 256 discrete duty cycles.
CCPRxH:CCPRxL register pair can be written to at any The maximum PWM resolution is ten bits when T2PR
time; however the duty cycle value is not latched into is 255. The resolution is a function of the T2PR register
the 10-bit buffer until after a match between T2PR and value as shown by Equation 23-4.
T2TMR.
Equation 23-2 is used to calculate the PWM pulse EQUATION 23-4: PWM RESOLUTION
width. Equation 23-3 is used to calculate the PWM duty
cycle ratio.
log  4  T2PR + 1  
Resolution = ---------------------------------------------- bits
log  2 
FIGURE 23-5: PWM 10-BIT ALIGNMENT
Rev. 10-000 160A
12/9/201 3

CCPRxH CCPRxL Note: If the pulse-width value is greater than the


7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 FMT = 0 period, the assigned PWM pin(s) will
remain unchanged.
CCPRxH CCPRxL
FMT = 1 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

10-bit Duty Cycle


9 8 7 6 5 4 3 2 1 0

EQUATION 23-2: PULSE WIDTH

Pulse Width =  CCPRxH:CCPRxL register pair  


T OSC  (TMR2 Prescale Value)

EQUATION 23-3: DUTY CYCLE RATIO

 CCPRxH:CCPRxL register pair 


Duty Cycle Ratio = ----------------------------------------------------------------------------------
4  T2PR + 1 

CCPRxH:CCPRxL register pair are used to double


buffer the PWM duty cycle. This double buffering
provides glitchless PWM operation.
The 8-bit timer T2TMR register is concatenated with
either the 2-bit internal system clock (FOSC), or two bits
of the prescaler, to create the 10-bit time base. The
system clock is used if the Timer2 prescaler is set to 1:1.
When the 10-bit time base matches the
CCPRxH:CCPRxL register pair, then the CCPx pin is
cleared (see Figure 23-4).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 333


PIC18(L)F25/26K83

TABLE 23-2: EXAMPLE PWM FREQUENCIES AND RESOLUTIONS (FOSC = 20 MHz)


PWM Frequency 1.22 kHz 4.88 kHz 19.53 kHz 78.12 kHz 156.3 kHz 208.3 kHz
Timer Prescale 16 4 1 1 1 1
T2PR Value 0xFF 0xFF 0xFF 0x3F 0x1F 0x17
Maximum Resolution (bits) 10 10 10 8 7 6.6

TABLE 23-3: EXAMPLE PWM FREQUENCIES AND RESOLUTIONS (FOSC = 8 MHz)


PWM Frequency 1.22 kHz 4.90 kHz 19.61 kHz 76.92 kHz 153.85 kHz 200.0 kHz
Timer Prescale 16 4 1 1 1 1
T2PR Value 0x65 0x65 0x65 0x19 0x0C 0x09
Maximum Resolution (bits) 8 8 8 6 5 5

23.4.7 OPERATION IN SLEEP MODE


In Sleep mode, the T2TMR register will not increment
and the state of the module will not change. If the CCPx
pin is driving a value, it will continue to drive that value.
When the device wakes up, T2TMR will continue from
its previous state.

23.4.8 CHANGES IN SYSTEM CLOCK


FREQUENCY
The PWM frequency is derived from the system clock
frequency. Any changes in the system clock frequency
will result in changes to the PWM frequency. See Sec-
tion 7.0 “Oscillator Module (with Fail-Safe Clock
Monitor)” for additional details.

23.4.9 EFFECTS OF RESET


Any Reset will force all ports to Input mode and the
CCP registers to their Reset states.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 334


PIC18(L)F25/26K83
23.5 Register Definitions: CCP Control
Long bit name prefixes for the CCP peripherals are
shown below. Refer to Section 1.3.2.2 “Long Bit
Names” for more information.

Peripheral Bit Name Prefix


CCP1 CCP1
CCP2 CCP2
CCP3 CCP3
CCP4 CCP4

REGISTER 23-1: CCPxCON: CCPx CONTROL REGISTER


R/W-0/0 U-0 R-x R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
EN — OUT FMT MODE<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 EN: CCP Module Enable bit


1 = CCP is enabled
0 = CCP is disabled
bit 6 Unimplemented: Read as ‘0’
bit 5 OUT: CCPx Output Data bit (read-only)
bit 4 FMT: CCPW (pulse-width) Alignment bit
MODE = Capture mode:
Unused
MODE = Compare mode:
Unused
MODE = PWM mode:
1 = Left-aligned format
0 = Right-aligned format
bit 3-0 MODE<3:0>: CCPx Mode Select bits

MODE Operating Mode Operation Set CCPxIF


11xx PWM PWM operation Yes
1011 Pulse output; clear TMR1(2) Yes
1010 Pulse output Yes
Compare
1001 Clear output(1) Yes
1000 Set output(1) Yes
0111 Every 16th rising edge of CCPx input Yes
0110 Every 4th rising edge of CCPx input Yes
0101 Capture Every rising edge of CCPx input Yes
0100 Every falling edge of CCPx input Yes
0011 Every edge of CCPx input Yes
0010 Toggle output Yes
Compare
0001 Toggle output; clear TMR1(2) Yes
0000 Disabled —

Note 1: The set and clear operations of the Compare mode are reset by setting MODE = 4’b0000 or EN = 0.
2: When MODE = 0001 or 1011, then the timer associated with the CCP module is cleared. TMR1 is the default selection
for the CCP module, so it is used for indication purpose only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 335


PIC18(L)F25/26K83

REGISTER 23-2: CCPTMRS0: CCP TIMERS CONTROL REGISTER 0


R/W-0/0 R/W-1/1 R/W-0/0 R/W-1/1 R/W-0/0 R/W-1/1 R/W-0/0 R/W-1/1
C4TSEL<1:0> C3TSEL<1:0> C2TSEL<1:0> C1TSEL<1:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-6 C4TSEL<1:0>: CCP4 Timer Selection bits


11 = CCP4 is based off Timer5 in Capture/Compare mode and Timer6 in PWM mode
10 = CCP4 is based off Timer3 in Capture/Compare mode and Timer4 in PWM mode
01 = CCP4 is based off Timer1 in Capture/Compare mode and Timer2 in PWM mode
00 = Reserved
bit 5-4 C3TSEL<1:0>: CCP3 Timer Selection bits
11 = CCP3 is based off Timer5 in Capture/Compare mode and Timer6 in PWM mode
10 = CCP3 is based off Timer3 in Capture/Compare mode and Timer4 in PWM mode
01 = CCP3 is based off Timer1 in Capture/Compare mode and Timer2 in PWM mode
00 = Reserved
bit 3-2 C2TSEL<1:0>: CCP2 Timer Selection bits
11 = CCP2 is based off Timer5 in Capture/Compare mode and Timer6 in PWM mode
10 = CCP2 is based off Timer3 in Capture/Compare mode and Timer4 in PWM mode
01 = CCP2 is based off Timer1 in Capture/Compare mode and Timer2 in PWM mode
00 = Reserved
bit 1-0 C1TSEL<1:0>: CCP1 Timer Selection bits
11 = CCP1 is based off Timer5 in Capture/Compare mode and Timer6 in PWM mode
10 = CCP1 is based off Timer3 in Capture/Compare mode and Timer4 in PWM mode
01 = CCP1 is based off Timer1 in Capture/Compare mode and Timer2 in PWM mode
00 = Reserved

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 336


PIC18(L)F25/26K83

REGISTER 23-3: CCPTMRS1: CCP TIMERS CONTROL REGISTER 1


R/W-0/0 R/W-1/1 R/W-0/0 R/W-1/1 R/W-0/0 R/W-1/1 R/W-0/0 R/W-1/1
P8TSEL<1:0> P7TSEL<1:0> P6TSEL<1:0> P5TSEL<1:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-6 P8TSEL<1:0>: PWM8 Timer Selection bits


11 = PWM8 based on TMR8
10 = PWM8 based on TMR6
01 = PWM8 based on TMR4
00 = PWM8 based on TMR2
bit 5-4 P7TSEL<1:0>: PWM7 Timer Selection bits
11 = PWM7 based on TMR8
10 = PWM7 based on TMR6
01 = PWM7 based on TMR4
00 = PWM7 based on TMR2
bit 3-2 P6TSEL<1:0>: PWM6 Timer Selection bits
11 = PWM6 based on TMR8
10 = PWM6 based on TMR6
01 = PWM6 based on TMR4
00 = PWM6 based on TMR2
bit 1-0 P5TSEL<1:0>: PWM5 Timer Selection bits
11 = PWM5 based on TMR8
10 = PWM5 based on TMR6
01 = PWM5 based on TMR4
00 = PWM5 based on TMR2

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 337


PIC18(L)F25/26K83

REGISTER 23-4: CCPxCAP: CAPTURE INPUT SELECTION MULTIPLEXER REGISTER


U-0 U-0 U-0 U-0 R/W-0/x R/W-0/x R/W-0/x R/W-0/x
— — — — CTS<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-3 Unimplemented: Read as ‘0’


bit 2-0 CTS<2:0>: Capture Trigger Input Selection bits

Connection
CTS<3:0>
CCP1 CCP2 CCP3 CCP4

1111-1001 Reserved
1000 CAN_rx_timestamp
0111 CLC4_out
0110 CLC3_out
0101 CLC2_out
0100 CLC1_out
0011 IOC_Interrupt
0010 CMP2_output
0001 CMP1_output
Pin selected by Pin selected by Pin selected by Pin selected by
0000
CCP1PPS CCP2PPS CCP3PPS CCP4PPS

REGISTER 23-5: CCPRxL: CCPx REGISTER LOW BYTE


R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x
RL<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 MODE = Capture Mode:


RL<7:0>: LSB of captured TMR1 value
MODE = Compare Mode:
RL<7:0>: LSB compared to TMR1 value
MODE = PWM Mode && FMT = 0:
RL<7:0>: CCPW<7:0> – Pulse-Width LS 8 bits
MODE = PWM Mode && FMT = 1:
RL<7:6>: CCPW<1:0> – Pulse-Width LS 2 bits
RL<5:0>: Not used

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 338


PIC18(L)F25/26K83

REGISTER 23-6: CCPRxH: CCPx REGISTER HIGH BYTE


R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x
RH<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 MODE = Capture Mode:


RH<7:0>: MSB of captured TMR1 value
MODE = Compare Mode:
RH<7:0>: MSB compared to TMR1 value
MODE = PWM Mode && FMT = 0:
RH<7:2>: Not used
RH<1:0>: CCPW<9:8> – Pulse-Width MS 2 bits
MODE = PWM Mode && FMT = 1:
RH<7:0>: CCPW<9:2> – Pulse-Width MS 8 bits

TABLE 23-4: SUMMARY OF REGISTERS ASSOCIATED WITH CCPx


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page
CCPxCON EN — OUT FMT MODE<3:0> 335
CCPxCAP — — — — — — CTS<1:0> 338
CCPRxL CCPRx<7:0> 338
CCPRxH CCPRx<15:8> 339
CCPTMRS0 C4TSEL<1:0> C3TSEL<1:0> C2TSEL<1:0> C1TSEL<1:0> 336
Legend: — = Unimplemented location, read as ‘0’. Shaded cells are not used by the CCP module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 339


PIC18(L)F25/26K83
24.0 PULSE-WIDTH MODULATION Each PWM module can select the timer source that
controls the module. Each module has an independent
(PWM)
timer selection which can be accessed using the
The PWM module generates a pulse-width modulated CCPTMRS1 register (Register 23-2). Please note that
signal determined by the duty cycle, period, and the PWM mode operation is described with respect to
resolution that are configured by the following registers: T2TMR in the following sections.
• TxPR Figure 24-1 shows a simplified block diagram of PWM
• TxCON operation.
• PWMxDCH Figure 24-2 shows a typical waveform of the PWM
• PWMxDCL signal.
• PWMxCON
Note: The corresponding TRIS bit must be
cleared to enable the PWM output on the
PWMx pin.

FIGURE 24-1: SIMPLIFIED PWM BLOCK DIAGRAM

Rev. 10-000022D
9/13/2016

Duty cycle registers PWMxDCL<7:6>

PWMxDCH

PWMx_out
To Peripherals
10-bit Latch
(Not visible to user)

Comparator R Q
0
PPS PWMx
1
S Q
TMR2 Module
R POL RxyPPS TRIS Control
T2TMR (1)

Comparator
T2_match

T2PR

Note 1: 8-bit timer is concatenated with two bits generated by Fosc or two bits of the internal prescaler to
create 10-bit time-base.

FIGURE 24-2: PWM OUTPUT For a step-by-step procedure on how to set up this
Period Rev. 10-000023E
module for PWM operation, refer to Section
24.1.9 “Setup for PWM Operation using PWMx
9/13/2016

Pins”.
Pulse Width
T2TMR = T2PR
T2TMR reloaded with 0

T2TMR = Duty Cycle =


PWMxDCH<7:0>:PWMxDCL<7:6>
T2TMR = T2PR
T2TMR reloaded with 0

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 340


PIC18(L)F25/26K83
24.1 PWMx Pin Configuration 24.1.3 PWM PERIOD
All PWM outputs are multiplexed with the PORT data The PWM period is specified by the T2PR register of
latch. The user must configure the pins as outputs by Timer2. The PWM period can be calculated using the
clearing the associated TRIS bits. formula of Equation 24-1. It is required to have FOSC/4
as clock input to Timer2/4/6 for correct PWM operation.
24.1.1 FUNDAMENTAL OPERATION
The PWM module produces a 10-bit resolution output. EQUATION 24-1: PWM PERIOD
The PWM timer can be selected using the PxTSEL bits PWM Period =   T2PR  + 1   4  T OSC 
in the CCPTMRS1 register. The default selection for
(TMR2 Prescale Value)
PWMx is T2TMR. Please note that the PWM module
operation in the following sections is described with Note: TOSC = 1/FOSC
respect to T2TMR. Timer2 and T2PR set the period of
the PWM. The PWMxDCL and PWMxDCH registers When T2TMR is equal to T2PR, the following three
configure the duty cycle. The period is common to all events occur on the next increment cycle:
PWM modules, whereas the duty cycle is inde- • T2TMR is cleared
pendently controlled. • The PWM output is active. (Exception: When the
Note: The Timer2 postscaler is not used in the PWM duty cycle = 0%, the PWM output will
determination of the PWM frequency. The remain inactive.)
postscaler could be used to have a servo • The PWMxDCH and PWMxDCL register values
update rate at a different frequency than the are latched into the buffers.
PWM output.
All PWM outputs associated with Timer2 are set when Note: The Timer2 postscaler has no effect on the
T2TMR is cleared. Each PWMx is cleared when PWM operation.
T2TMR is equal to the value specified in the corre-
sponding PWMxDCH (8 MSb) and PWMxDCL<7:6> 24.1.4 PWM DUTY CYCLE
(2 LSb) registers. When the value is greater than or The PWM duty cycle is specified by writing a 10-bit
equal to T2PR, the PWM output is never cleared (100% value to the PWMxDCH and PWMxDCL register pair.
duty cycle). The PWMxDCH register contains the eight MSbs and
Note: The PWMxDCH and PWMxDCL registers the PWMxDCL<7:6>, the two LSbs. The PWMxDCH
are double buffered. The buffers are updated and PWMxDCL registers can be written to at any time.
when Timer2 matches T2PR. Care should Equation 24-2 is used to calculate the PWM pulse
be taken to update both registers before the width.
timer match occurs. Equation 24-3 is used to calculate the PWM duty cycle
ratio.
24.1.2 PWM OUTPUT POLARITY
The output polarity is inverted by setting the PWMxPOL EQUATION 24-2: PULSE WIDTH
bit of the PWMxCON register.
Pulse Width =  PWMxDCH:PWMxDCL<7:6>  

T OS C  (TMR2 Prescale Value)

Note: TOSC = 1/FOSC

EQUATION 24-3: DUTY CYCLE RATIO

 PWMxDCH:PWMxDCL<7:6> 
Duty Cycle Ratio = -----------------------------------------------------------------------------------
4  T2 PR + 1 

The 8-bit timer T2TMR register is concatenated with the


two Least Significant bits of 1/FOSC, adjusted by the
Timer2 prescaler to create the 10-bit time base. The
system clock is used if the Timer2 prescaler is set to 1:1.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 341


PIC18(L)F25/26K83
24.1.5 PWM RESOLUTION
The resolution determines the number of available duty
cycles for a given period. For example, a 10-bit resolution
will result in 1024 discrete duty cycles, whereas an 8-bit
resolution will result in 256 discrete duty cycles.
The maximum PWM resolution is ten bits when T2PR
is 255. The resolution is a function of the T2PR register
value as shown by Equation 24-4.

EQUATION 24-4: PWM RESOLUTION

log  4  T2PR + 1  
Resolution = ---------------------------------------------- bits
log  2 

Note: If the pulse-width value is greater than the


period, the assigned PWM pin(s) will
remain unchanged.

TABLE 24-1: EXAMPLE PWM FREQUENCIES AND RESOLUTIONS (FOSC = 20 MHz)


PWM Frequency 0.31 kHz 4.88 kHz 19.53 kHz 78.12 kHz 156.3 kHz 208.3 kHz
Timer Prescale 64 4 1 1 1 1
T2PR Value 0xFF 0xFF 0xFF 0x3F 0x1F 0x17
Maximum Resolution (bits) 10 10 10 8 7 6.6

TABLE 24-2: EXAMPLE PWM FREQUENCIES AND RESOLUTIONS (FOSC = 8 MHz)


PWM Frequency 0.31 kHz 4.90 kHz 19.61 kHz 76.92 kHz 153.85 kHz 200.0 kHz
Timer Prescale 64 4 1 1 1 1
T2PR Value 0x65 0x65 0x65 0x19 0x0C 0x09
Maximum Resolution (bits) 8 8 8 6 5 5

24.1.6 OPERATION IN SLEEP MODE


In Sleep mode, the T2TMR register will not increment
and the state of the module will not change. If the
PWMx pin is driving a value, it will continue to drive that
value. When the device wakes up, T2TMR will continue
from its previous state.

24.1.7 CHANGES IN SYSTEM CLOCK


FREQUENCY
The PWM frequency is derived from the system clock
frequency (FOSC). Any changes in the system clock
frequency will result in changes to the PWM frequency.
Refer to Section 7.0 “Oscillator Module (with Fail-
Safe Clock Monitor)” for additional details.

24.1.8 EFFECTS OF RESET


Any Reset will force all ports to Input mode and the
PWM registers to their Reset states.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 342


PIC18(L)F25/26K83
24.1.9 SETUP FOR PWM OPERATION 24.1.10 SETUP FOR PWM OPERATION TO
USING PWMx PINS OTHER DEVICE PERIPHERALS
The following steps should be taken when configuring The following steps should be taken when configuring
the module for PWM operation using the PWMx pins: the module for PWM operation to be used by other
1. Disable the PWMx pin output driver(s) by setting device peripherals:
the associated TRIS bit(s). 1. Disable the PWMx pin output driver(s) by setting
2. Clear the PWMxCON register. the associated TRIS bit(s).
3. Load the T2PR register with the PWM period 2. Clear the PWMxCON register.
value. 3. Load the T2PR register with the PWM period
4. Load the PWMxDCH register and bits <7:6> of value.
the PWMxDCL register with the PWM duty cycle 4. Load the PWMxDCH register and bits <7:6> of
value. the PWMxDCL register with the PWM duty cycle
5. Configure and start Timer2: value.
• Clear the TMR2IF interrupt flag bit of the 5. Configure and start Timer2:
respective PIR register. See Note 1 below. • Clear the TMR2IF interrupt flag bit of the
• Select the timer clock source to be as respective PIR register. See Note 1 below.
FOSC/4 using the TxCLK register. This is • Select the timer clock source to be as
required for correct operation of the PWM FOSC/4 using the TxCLK register. This is
module. required for correct operation of the PWM
• Configure the CKPS bits of the T2CON module.
register with the Timer2 prescale value. • Configure the CKPS bits of the T2CON regis-
• Enable Timer2 by setting the ON bit of the ter with the Timer2 prescale value.
T2CON register. • Enable Timer2 by setting the ON bit of the
6. Enable PWM output pin and wait until Timer2 T2CON register.
overflows, TMR2IF bit of the respective PIR 6. Enable PWM output pin:
register is set. See note below. • Wait until Timer2 overflows, TMR2IF bit of the
7. Enable the PWMx pin output driver(s) by clear- respective PIR register is set. See Note 1
ing the associated TRIS bit(s) and setting the below.
desired pin PPS control bits. 7. Configure the PWM module by loading the
8. Configure the PWM module by loading the PWMxCON register with the appropriate values.
PWMxCON register with the appropriate values.

Note 1: In order to send a complete duty cycle


Note 1: In order to send a complete duty cycle and period on the first PWM output, the
and period on the first PWM output, the above steps must be included in the
above steps must be followed in the order setup sequence. If it is not critical to start
given. If it is not critical to start with a with a complete PWM signal on the first
complete PWM signal, then move Step 8 output, then step 6 may be ignored.
to replace Step 4.
2: For operation with other peripherals only,
disable PWMx pin outputs.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 343


PIC18(L)F25/26K83
24.2 Register Definitions: PWM Control
Long bit name prefixes for the PWM peripherals are
shown below. Refer to Section 1.3.2.2 “Long Bit
Names” for more information.

Peripheral Bit Name Prefix


PWM3 PWM3
PWM4 PWM4

REGISTER 24-1: PWMxCON: PWM CONTROL REGISTER


R/W-0/0 U-0 R-0/0 R/W-0/0 U-0 U-0 U-0 U-0
EN — OUT POL — — — —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 EN: PWM Module Enable bit


1 = PWM module is enabled
0 = PWM module is disabled
bit 6 Unimplemented: Read as ‘0’
bit 5 OUT: PWM Module Output Level When Bit is Read
bit 4 POL: PWM Output Polarity Select bit
1 = PWM output is inverted
0 = PWM output is normal
bit 3-0 Unimplemented: Read as ‘0’

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 344


PIC18(L)F25/26K83

REGISTER 24-2: CCPTMRS1: CCP TIMERS CONTROL REGISTER 1


R/W-0/0 R/W-1/1 R/W-0/0 R/W-1/1 R/W-0/0 R/W-1/1 R/W-0/0 R/W-1/1
P8TSEL<1:0> P7TSEL<1:0> P6TSEL<1:0> P5TSEL<1:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-6 P8TSEL<1:0>: PWM8 Timer Selection bits


11 = PWM8 based on TMR6
10 = PWM8 based on TMR4
01 = PWM8 based on TMR2
00 = Reserved
bit 5-4 P7TSEL<1:0>: PWM7 Timer Selection bits
11 = PWM7 based on TMR6
10 = PWM7 based on TMR4
01 = PWM7 based on TMR2
00 = Reserved
bit 3-2 P6TSEL<1:0>: PWM6 Timer Selection bits
11 = PWM6 based on TMR6
10 = PWM6 based on TMR4
01 = PWM6 based on TMR2
00 = Reserved
bit 1-0 P5TSEL<1:0>: PWM5 Timer Selection bits
11 = PWM5 based on TMR6
10 = PWM5 based on TMR4
01 = PWM5 based on TMR2
00 = Reserved

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 345


PIC18(L)F25/26K83

REGISTER 24-3: PWMxDCH: PWM DUTY CYCLE HIGH BITS


R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
DC<9:2>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 DC<9:2>: PWM Duty Cycle Most Significant bits


These bits are the MSbs of the PWM duty cycle. The two LSbs are found in PWMxDCL Register.

REGISTER 24-4: PWMxDCL: PWM DUTY CYCLE LOW BITS


R/W-x/u R/W-x/u U-0 U-0 U-0 U-0 U-0 U-0
DC<1:0> — — — — — —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 DC<1:0>: PWM Duty Cycle Least Significant bits


These bits are the LSbs of the PWM duty cycle. The MSbs are found in PWMxDCH Register.
bit 5-0 Unimplemented: Read as ‘0’

TABLE 24-3: SUMMARY OF REGISTERS ASSOCIATED WITH PWM


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page

PWMxCON EN — OUT POL — — — — 344


PWMxDCH DC<9:2> 346
PWMxDCL DC<1:0> — — — — — — 346
CCPTMRS1 P8TSEL<1:0> P7TSEL<1:0> P6TSEL<1:0> P5TSEL<1:0> 345
Legend: - = Unimplemented locations, read as ‘0’, u = unchanged, x = unknown. Shaded cells are not used by the PWM.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 346


PIC18(L)F25/26K83
25.0 SIGNAL MEASUREMENT TIMER
(SMTx)
The SMT is a 24-bit counter with advanced clock and
gating logic, which can be configured for measuring a
variety of digital signal parameters such as pulse width,
frequency and duty cycle, and the time difference
between edges on two signals. The device has only
one SMT module implemented.
Features of the SMT include:
• 24-bit timer/counter
- Three 8-bit registers (SMTxL/H/U)
- Readable and writable
- Optional 16-bit operating mode
• Two 24-bit measurement capture registers
• One 24-bit period match register
• Multi-mode operation, including relative timing
measurement
• Interrupt on period match
• Multiple clock, gate and signal sources
• Interrupt on acquisition complete
• Ability to read current input values

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 347


PIC18(L)F25/26K83
FIGURE 25-1: SMT BLOCK DIAGRAM

Rev. 10-000161E
10/12/2016

Period Latch
Set SMTxPRAIF
SMT_window SMT
Clock SMTxPR
Sync
Circuit
Control Set SMTxIF
Logic Comparator
SMT_signal SMT
Clock
Sync
Circuit

24-bit
Reset SMTxCPR
Buffer

Enable SMTxTMR 24-bit


SMTxCPW
CLKR 111 Buffer

SOSC 110 Window Latch


Set SMTxPWAIF
MFINTOSC/16 101
MFINTOSC 100
Prescaler
LFINTOSC 011
HFINTOSC 010
FOSC 001
FOSC/4 000

CSEL<2:0>

FIGURE 25-2: SMT SIGNAL AND WINDOW BLOCK DIAGRAM


Rev. 10-000173D
10/12/2016

See See
SMTxSIG SMT_signal SMTxWIN SMT_window
Register Register

SSEL<4:0> WSEL<4:0>

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 348


PIC18(L)F25/26K83
25.1 SMT Operation 25.2.3 PERIOD LATCH REGISTERS
The core of the module is the 24-bit counter, SMTxTMR The SMTxCPR registers are the 24-bit SMT period
combined with a complex data acquisition front-end. latch. They are used to latch in other values of the
Depending on the mode of operation selected, the SMT SMTxTMR when triggered by various other signals,
can perform a variety of measurements summarized in which are determined by the mode the SMT is currently
Table 25-1. in.
The SMTxCPR registers can also be updated with the
25.1.1 CLOCK SOURCES current value of the SMTxTMR value by setting the
Clock sources available to the SMT include: CPRUP bit in the SMTxSTAT register.
• FOSC
25.3 Halt Operation
• FOSC/4
• HFINTOSC 16 MHz The counter can be prevented from rolling-over using
• LFINTOSC the STP bit in the SMTxCON0 register. When halting is
enabled, the period match interrupt persists until the
• MFINTOSC 31.25 kHz
SMTxTMR is reset (either by a manual Reset, Section
The SMT clock source is selected by configuring the 25.2.1 “Time Base”) or by clearing the GO bit of the
CSEL<2:0> bits in the SMTxCLK register. The clock SMTxCON1 register and writing the SMTxTMR values
source can also be prescaled using the PS<1:0> bits of in software.
the SMTxCON0 register. The prescaled clock source is
used to clock both the counter and any synchronization 25.4 Polarity Control
logic used by the module.
The three input signals for the SMT have polarity
25.1.2 PERIOD MATCH INTERRUPT control to determine whether or not they are active-
Similar to other timers, the SMT triggers an interrupt high/positive edge or active-low/negative edge signals.
when SMTxTMR rolls over to ‘0’. This happens when The following bits apply to Polarity Control:
SMTxTMR = SMTxPR, regardless of mode. Hence, in
• WSEL bit (Window Polarity)
any mode that relies on an external signal or a window
to reset the timer, proper operation requires that • SSEL bit (Signal Polarity)
SMTxPR be set to a period larger than that of the • CSEL bit (Clock Polarity)
expected signal or window. These bits are located in the SMTxCON0 register.

25.2 Basic Timer Function Registers 25.5 Status Information


The SMTxTMR time base and the SMTxCPW/ The SMT provides input status information for the user
SMTxPR/SMTxCPR buffer registers serve several without requiring the need to deal with the polarity of
functions and can be manually updated using software. the incoming signals.

25.2.1 TIME BASE 25.5.1 WINDOW STATUS


The SMTxTMR is the 24-bit counter that is the center of Window status is determined by the WS bit of the
the SMT. It is used as the basic counter/timer for SMTxSTAT register. This bit is only used in Windowed
measurement in each of the modes of the SMT. It can be Measure, Gated Counter and Gated Window Measure
reset to a value of 24’h00_0000 by setting the RST bit of modes, and is only valid when TS = 1, and will be
the SMTxSTAT register. It can be written to and read delayed in time by synchronizer delays in non-Counter
from software, but it is not guarded for atomic access, modes.
therefore reads and writes to the SMTxTMR should only
be made when the GO = 0, or the software should have 25.5.2 SIGNAL STATUS
other measures to ensure integrity of SMTxTMR reads/
Signal status is determined by the AS bit of the
writes.
SMTxSTAT register. This bit is used in all modes except
Window Measure, Time of Flight and Capture modes,
25.2.2 PULSE-WIDTH LATCH REGISTERS
and is only valid when TS = 1, and will be delayed in
The SMTxCPW registers are the 24-bit SMT pulse- time by synchronizer delays in non-Counter modes.
width latch. They are used to latch in the value of the
SMTxTMR when triggered by various signals, which 25.5.3 GO STATUS
are determined by the mode the SMT is currently in.
Timer run status is determined by the TS bit of the
The SMTxCPW registers can also be updated with the
SMTxSTAT register, and will be delayed in time by
current value of the SMTxTMR value by setting the
synchronizer delays in non-Counter modes.
CPWUP bit of the SMTxSTAT register.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 349


PIC18(L)F25/26K83
25.6 Modes of Operation 25.6.1 TIMER MODE
The modes of operation are summarized in Table 25-1. Timer mode is the simplest mode of operation where
The following sections provide detailed descriptions, the SMTxTMR is used as a 16/24-bit timer. No data
examples of how the modes can be used. Note that all acquisition takes place in this mode. The timer
waveforms assume WPOL/SPOL/CPOL = 0. When increments as long as the GO bit has been set by
WPOL/SPOL/CPOL = 1, all SMTSIGx, SMTWINx and software. No SMT window or SMT signal events affect
SMT clock signals will have a polarity opposite to that the GO bit. Everything is synchronized to the SMT
indicated. For all modes, the REPEAT bit controls clock source. When the timer experiences a period
whether the acquisition is repeated or single. When match (SMTxTMR = SMTxPR), SMTxTMR is reset and
REPEAT = 0 (Single Acquisition mode), the timer will the period match interrupt trips. See Figure 25-3.
stop incrementing and the GO bit will be reset upon the
completion of an acquisition. Otherwise, the timer will
continue and allow for continued acquisitions to
overwrite the previous ones until the timer is stopped in
software.

TABLE 25-1: MODES OF OPERATION


Synchronous
MODE Mode of Operation Reference
Operation
0000 Timer Yes Section 25.6.1 “Timer Mode”
0001 Gated Timer Yes Section 25.6.2 “Gated Timer Mode”
0010 Period and Duty Cycle Acquisition Yes Section 25.6.3 “Period and Duty Cycle Mode”
0011 High and Low Time Measurement Yes Section 25.6.4 “High and Low Measure Mode”
0100 Windowed Measurement Yes Section 25.6.5 “Windowed Measure Mode”
0101 Gated Windowed Measurement Yes Section 25.6.6 “Gated Windowed Measure Mode”
0110 Time of Flight Yes Section 25.6.7 “Time of Flight Measure Mode”
0111 Capture Yes Section 25.6.8 “Capture Mode”
1000 Counter No Section 25.6.9 “Counter Mode”
1001 Gated Counter No Section 25.6.10 “Gated Counter Mode”
1010 Windowed Counter No Section 25.6.11 “Windowed Counter Mode”
1011-1111 Reserved — —

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 350


FIGURE 25-3: TIMER MODE TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000 174A


12/19/201 3

SMTx Clock

SMTxEN

SMTxGO

SMTxGO_sync

SMTxPR 11

SMTxTMR 0 1 2 3 4 5 6 7 8 9 10 11 0 1 2 3 4 5 6 7 8 9
Preliminary

SMTxIF

PIC18(L)F25/26K83
DS40001943A-page 351
PIC18(L)F25/26K83
25.6.2 GATED TIMER MODE
Gated Timer mode uses the SMTSIGx input to control
whether or not the SMTxTMR will increment. Upon a
falling edge of the external signal, the SMTxCPW
register will update to the current value of the
SMTxTMR. Example waveforms for both repeated and
single acquisitions are provided in Figure 25-4 and
Figure 25-5.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 352


FIGURE 25-4: GATED TIMER MODE REPEAT ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000 176A


12/19/201 3

SMTx_signal

SMTx_signalsync

SMTx Clock

SMTxEN

SMTxGO

SMTxGO_sync

SMTxPR 0xFFFFFF
Preliminary

SMTxTMR 0 1 2 3 4 5 6 7

SMTxCPW 5 7

SMTxPWAIF

PIC18(L)F25/26K83
DS40001943A-page 353
FIGURE 25-5: GATED TIMER MODE SINGLE ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000 175A


12/19/201 3

SMTx_signal

SMTx_signalsync

SMTx Clock

SMTxEN

SMTxGO

SMTxGO_sync

SMTxPR 0xFFFFFF
Preliminary

SMTxTMR 0 1 2 3 4 5

SMTxCPW 5

SMTxPWAIF

PIC18(L)F25/26K83
DS40001943A-page 354
PIC18(L)F25/26K83
25.6.3 PERIOD AND DUTY CYCLE MODE
In Duty Cycle mode, either the duty cycle or period
(depending on polarity) of the SMTx_signal can be
acquired relative to the SMT clock. The CPW register is
updated on a falling edge of the signal, and the CPR
register is updated on a rising edge of the signal, along
with the SMTxTMR resetting to 0x0001. In addition, the
GO bit is reset on a rising edge when the SMT is in
Single Acquisition mode. See Figure 25-6 and
Figure 25-7.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 355


FIGURE 25-6: PERIOD AND DUTY-CYCLE REPEAT ACQUISITION MODE TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000 177A


12/19/201 3

SMTx_signal

SMTx_signalsync

SMTx Clock

SMTxEN

SMTxGO

SMTxGO_sync

SMTxTMR 0 1 2 3 4 5 6 7 8 9 10 11 1 2 3 4 5
Preliminary

SMTxCPW 5 2

SMTxCPR 11

SMTxPWAIF

PIC18(L)F25/26K83
SMTxPRAIF
DS40001943A-page 356
FIGURE 25-7: PERIOD AND DUTY-CYCLE SINGLE ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000 178A


12/19/201 3

SMTx_signal

SMTx_signalsync

SMTx Clock

SMTxEN

SMTxGO

SMTxGO_sync

SMTxTMR 0 1 2 3 4 5 6 7 8 9 10 11
Preliminary

SMTxCPW 5

SMTxCPR 11

SMTxPWAIF

PIC18(L)F25/26K83
SMTxPRAIF
DS40001943A-page 357
PIC18(L)F25/26K83
25.6.4 HIGH AND LOW MEASURE MODE
This mode measures the high and low pulse time of the
SMTSIGx relative to the SMT clock. It begins
incrementing the SMTxTMR on a rising edge on the
SMTSIGx input, then updates the SMTxCPW register
with the value and resets the SMTxTMR on a falling
edge, starting to increment again. Upon observing
another rising edge, it updates the SMTxCPR register
with its current value and once again resets the
SMTxTMR value and begins incrementing again. See
Figure 25-8 and Figure 25-9.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 358


FIGURE 25-8: HIGH AND LOW MEASURE MODE REPEAT ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000 180A


12/19/201 3

SMTx_signal

SMTx_signalsync

SMTx Clock

SMTxEN

SMTxGO

SMTxGO_sync
Preliminary

SMTxTMR 0 1 2 3 4 5 1 2 3 4 5 6 1 2 1 2 3

SMTxCPW 5 2

SMTxCPR 6

SMTxPWAIF

PIC18(L)F25/26K83
SMTxPRAIF
DS40001943A-page 359
FIGURE 25-9: HIGH AND LOW MEASURE MODE SINGLE ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000 179A


12/19/201 3

SMTx_signal

SMTx_signalsync

SMTx Clock

SMTxEN

SMTxGO

SMTxGO_sync
Preliminary

SMTxTMR 0 1 2 3 4 5 1 2 3 4 5 6

SMTxCPW 5

SMTxCPR 6

PIC18(L)F25/26K83
SMTxPWAIF

SMTxPRAIF
DS40001943A-page 360
PIC18(L)F25/26K83
25.6.5 WINDOWED MEASURE MODE
This mode measures the window duration of the
SMTWINx input of the SMT. It begins incrementing the
timer on a rising edge of the SMTWINx input and
updates the SMTxCPR register with the value of the
timer and resets the timer on a second rising edge. See
Figure 25-10 and Figure 25-11.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 361


FIGURE 25-10: WINDOWED MEASURE MODE REPEAT ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000 182A


12/19/201 3

SMTxWIN

SMTxWIN_sync

SMTx Clock

SMTxEN

SMTxGO

SMTxGO_sync

SMTxTMR 0 1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 4 5 6 7 8 1 2 3 4
Preliminary

SMTxCPR 12 8

SMTxPRAIF

PIC18(L)F25/26K83
DS40001943A-page 362
FIGURE 25-11: WINDOWED MEASURE MODE SINGLE ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000 181A


12/19/201 3

SMTxWIN

SMTxWIN_sync

SMTx Clock

SMTxEN

SMTxGO

SMTxGO_sync

SMTxTMR 0 1 2 3 4 5 6 7 8 9 10 11 12
Preliminary

SMTxCPR 12

SMTxPRAIF

PIC18(L)F25/26K83
DS40001943A-page 363
PIC18(L)F25/26K83
25.6.6 GATED WINDOWED MEASURE
MODE
This mode measures the duty cycle of the SMTx_signal
input over a known input window. It does so by
incrementing the timer on each pulse of the clock signal
while the SMTx_signal input is high, updating the
SMTxCPR register and resetting the timer on every
rising edge of the SMTWINx input after the first. See
Figure 25-12 and Figure 25-13.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 364


FIGURE 25-12: GATED WINDOWED MEASURE MODE REPEAT ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000 184A


12/19/201 3

SMTxWIN

SMTxWIN_sync

SMTx_signal

SMTx_signalsync

SMTx Clock

SMTxEN
Preliminary

SMTxGO

SMTxGO_sync

SMTxTMR 0 1 2 3 4 5 6 0 1 2 3 0

PIC18(L)F25/26K83
SMTxCPR 6 3

SMTxPRAIF
DS40001943A-page 365
FIGURE 25-13: GATED WINDOWED MEASURE MODE SINGLE ACQUISITION TIMING DIAGRAMS
 2017 Microchip Technology Inc.

PIC18(L)F25/26K83
Rev. 10-000 183A
12/19/201 3

SMTxWIN

SMTxWIN_sync

SMTx_signal

SMTx_signalsync

SMTx Clock

SMTxEN

SMTxGO
Preliminary

SMTxGO_sync

SMTxTMR 0 1 2 3 4 5 6

SMTxCPR 6

SMTxPRAIF
DS40001943A-page 366
PIC18(L)F25/26K83
25.6.7 TIME OF FLIGHT MEASURE MODE
This mode measures the time interval between a rising
edge on the SMTWINx input and a rising edge on the
SMTx_signal input, beginning to increment the timer
upon observing a rising edge on the SMTWINx input,
while updating the SMTxCPR register and resetting the
timer upon observing a rising edge on the SMTx_signal
input. In the event of two SMTWINx rising edges
without an SMTx_signal rising edge, it will update the
SMTxCPW register with the current value of the timer
and reset the timer value. See Figure 25-14 and
Figure 25-15.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 367


FIGURE 25-14: TIME OF FLIGHT MODE REPEAT ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000186A
4/22/2016

SMTxWIN

SMTxWIN_sync

SMTx_signal

SMTx_signalsync

SMTx Clock

SMTxEN
Preliminary

SMTxGO

SMTxGO_sync

SMTxTMR 0 1 2 3 4 5 1 2 3 4 5 6 7 8 9 10 11 12 13 1 2

PIC18(L)F25/26K83
SMTxCPW 13

SMTxCPR 4

SMTxPWAIF

SMTxPRAIF
DS40001943A-page 368
FIGURE 25-15: TIME OF FLIGHT MODE SINGLE ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000185A
4/26/2016

SMTxWIN

SMTxWIN_sync

SMTx_signal

SMTx_signalsync

SMTx Clock

SMTxEN

SMTxGO
Preliminary

SMTxGO_sync

SMTxTMR 0 1 2 3 4 5

SMTxCPW

PIC18(L)F25/26K83
SMTxCPR 4

SMTxPWAIF

SMTxPRAIF
DS40001943A-page 369
PIC18(L)F25/26K83
25.6.8 CAPTURE MODE
This mode captures the Timer value based on a rising
or falling edge on the SMTWINx input and triggers an
interrupt. This mimics the capture feature of a CCP
module. The timer begins incrementing upon the GO
bit being set, and updates the value of the SMTxCPR
register on each rising edge of SMTWINx, and updates
the value of the CPW register on each falling edge of
the SMTWINx. The timer is not reset by any hardware
conditions in this mode and must be reset by software,
if desired. See Figure 25-16 and Figure 25-17.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 370


FIGURE 25-16: CAPTURE MODE REPEAT ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000 188A


12/19/201 3

SMTxWIN

SMTxWIN_sync

SMTx Clock

SMTxEN

SMTxGO

SMTxGO_sync
Preliminary

SMTxTMR 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32

SMTxCPW 3 19 32

SMTxCPR 2 18 31

PIC18(L)F25/26K83
SMTxPWAIF

SMTxPRAIF
DS40001943A-page 371
FIGURE 25-17: CAPTURE MODE SINGLE ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

PIC18(L)F25/26K83
Rev. 10-000 187A
12/19/201 3

SMTxWIN

SMTxWIN_sync

SMTx Clock

SMTxEN

SMTxGO

SMTxGO_sync

SMTxTMR 0 1 2 3
Preliminary

SMTxCPW 3

SMTxCPR 2

SMTxPWAIF

SMTxPRAIF
DS40001943A-page 372
25.6.9 COUNTER MODE
 2017 Microchip Technology Inc.

This mode increments the timer on each pulse of the SMTx_signal input. This
mode is asynchronous to the SMT clock and uses the SMTx_signal as a time
source. The SMTxCPW register will be updated with the current SMTxTMR
value on the rising edge of the SMTxWIN input. See Figure 25-18.

FIGURE 25-18: COUNTER MODE TIMING DIAGRAM

Rev. 10-000189A
4/12/2016

SMTxWIN

SMTx_signal

SMTxEN
Preliminary

SMTxGO

SMTxTMR 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

SMTxCPW 12 25

PIC18(L)F25/26K83
DS40001943A-page 373
PIC18(L)F25/26K83
25.6.10 GATED COUNTER MODE
This mode counts pulses on the SMTx_signal input,
gated by the SMTxWIN input. It begins incrementing
the timer upon seeing a rising edge of the SMTxWIN
input and updates the SMTxCPW register upon a fall-
ing edge on the SMTxWIN input. See Figure 25-19
and Figure 25-20.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 374


FIGURE 25-19: GATED COUNTER MODE REPEAT ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000190A
12/18/2013

SMTxWIN

SMTx_signal

SMTxEN

SMTxGO

SMTxTMR 0 1 2 3 4 5 6 7 8 9 10 11 12 13

SMTxCPW 8 13

SMTxPWAIF
Preliminary

FIGURE 25-20: GATED COUNTER MODE SINGLE ACQUISITION TIMING DIAGRAM


Rev. 10-000191A
12/18/2013

PIC18(L)F25/26K83
SMTxWIN

SMTx_signal

SMTxEN

SMTxGO
DS40001943A-page 375

SMTxTMR 0 1 2 3 4 5 6 7 8

SMTxCPW 8

SMTxPWAIF
PIC18(L)F25/26K83
25.6.11 WINDOWED COUNTER MODE
This mode counts pulses on the SMTx_signal input,
within a window dictated by the SMTxWIN input. It
begins counting upon seeing a rising edge of the
SMTxWIN input, updates the SMTxCPW register on a
falling edge of the SMTxWIN input, and updates the
SMTxCPR register on each rising edge of the
SMTxWIN input beyond the first. See Figure 25-21 and
Figure 25-22.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 376


FIGURE 25-21: WINDOWED COUNTER MODE REPEAT ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

Rev. 10-000192A
12/18/2013

SMTxWIN

SMTx_signal

SMTxEN

SMTxGO

SMTxTMR 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5

SMTxCPW 9 5

SMTxCPR 16
Preliminary

SMTxPWAIF

SMTxPRAIF

PIC18(L)F25/26K83
DS40001943A-page 377
FIGURE 25-22: WINDOWED COUNTER MODE SINGLE ACQUISITION TIMING DIAGRAM
 2017 Microchip Technology Inc.

PIC18(L)F25/26K83
Rev. 10-000193A
12/18/2013

SMTxWIN

SMTx_signal

SMTxEN

SMTxGO

SMTxTMR 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

SMTxCPW 9

SMTxCPR 16
Preliminary

SMTxPWAIF

SMTxPRAIF
DS40001943A-page 378
PIC18(L)F25/26K83
25.7 Interrupts
The SMT can trigger an interrupt under three different
conditions:
• PW Acquisition Complete
• PR Acquisition Complete
• Counter Period Match
The interrupts are controlled by the PIR and PIE
registers of the device.

25.7.1 PW AND PR ACQUISITION


INTERRUPTS
The SMT can trigger interrupts whenever it updates the
SMTxCPW and SMTxCPR registers, the circum-
stances for which are dependent on the SMT mode,
and are discussed in each mode’s specific section. The
SMTxCPW interrupt is controlled by SMTxPWAIF and
SMTxPWAIE bits in the respective PIR and PIE regis-
ters. The SMTxCPR interrupt is controlled by the
SMTxPRAIF and SMTxPRAIE bits, also located in the
respective PIR and PIE registers.
In synchronous SMT modes, the interrupt trigger is
synchronized to the SMTxCLK. In Asynchronous
modes, the interrupt trigger is asynchronous. In either
mode, once triggered, the interrupt will be
synchronized to the CPU clock.

25.7.2 COUNTER PERIOD MATCH


INTERRUPT
As described in Section 25.1.2 “Period Match
interrupt”, the SMT will also interrupt upon SMTxTMR,
matching SMTxPR with its period match limit functionality
described in Section 25.3 “Halt Operation”. The period
match interrupt is controlled by SMTxIF and SMTxIE,
located in the respective PIR and PIE registers.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 379


PIC18(L)F25/26K83
25.8 Register Definitions: SMT Control
Long bit name prefixes for the Signal Measurement
Timer peripherals are shown in Section 1.3 “Register
and Bit naming conventions”.
TABLE 25-2: LONG BIT NAMES PREFIXES
FOR SMT PERIPHERALS
Peripheral Bit Name Prefix
SMT1 SMT1
SMT2 SMT2

REGISTER 25-1: SMTxCON0: SMT CONTROL REGISTER 0


R/W-0/0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
EN(1) — STP WPOL SPOL CPOL PS<1:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 EN: SMT Enable bit(1)


1 = SMT is enabled
0 = SMT is disabled; internal states are reset, clock requests are disabled
bit 6 Unimplemented: Read as ‘0’
bit 5 STP: SMT Counter Halt Enable bit
When SMTxTMR = SMTxPR:
1 = Counter remains SMTxPR; period match interrupt occurs when clocked
0 = Counter resets to 24’h000000; period match interrupt occurs when clocked
bit 4 WPOL: SMTxWIN Input Polarity Control bit
1 = SMTxWIN signal is active-low/falling edge enabled
0 = SMTxWIN signal is active-high/rising edge enabled
bit 3 SPOL: SMTxSIG Input Polarity Control bit
1 = SMTx_signal is active-low/falling edge enabled
0 = SMTx_signal is active-high/rising edge enabled
bit 2 CPOL: SMT Clock Input Polarity Control bit
1 = SMTxTMR increments on the falling edge of the selected clock signal
0 = SMTxTMR increments on the rising edge of the selected clock signal
bit 1-0 PS<1:0>: SMT Prescale Select bits
11 = Prescaler = 1:8
10 = Prescaler = 1:4
01 = Prescaler = 1:2
00 = Prescaler = 1:1

Note 1: Setting EN to ‘0’ does not affect the register contents.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 380


PIC18(L)F25/26K83

REGISTER 25-2: SMTxCON1: SMT CONTROL REGISTER 1


R/W/HC-0/0 R/W-0/0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
GO REPEAT — — MODE<3:0>
bit 7 bit 0

Legend:
HC = Bit is cleared by hardware HS = Bit is set by hardware
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 GO: GO Data Acquisition bit


1 = Incrementing, acquiring data is enabled
0 = Incrementing, acquiring data is disabled
bit 6 REPEAT: SMT Repeat Acquisition Enable bit
1 = Repeat Data Acquisition mode is enabled
0 = Single Acquisition mode is enabled
bit 5-4 Unimplemented: Read as ‘0’
bit 3-0 MODE<3:0> SMT Operation Mode Select bits
1111 = Reserved



1011 = Reserved
1010 = Windowed counter
1001 = Gated counter
1000 = Counter
0111 = Capture
0110 = Time of flight
0101 = Gated windowed measure
0100 = Windowed measure
0011 = High and low time measurement
0010 = Period and Duty-Cycle Acquisition
0001 = Gated Timer
0000 = Timer

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 381


PIC18(L)F25/26K83

REGISTER 25-3: SMTxSTAT: SMT STATUS REGISTER


R/W/HC-0/0 R/W/HC-0/0 R/W/HC-0/0 U-0 U-0 R-0/0 R-0/0 R-0/0
CPRUP CPWUP RST — — TS WS AS
bit 7 bit 0

Legend:
HC = Bit is cleared by hardware HS = Bit is set by hardware
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 CPRUP: SMT Manual Period Buffer Update bit


1 = Request update to SMTxPRx registers
0 = SMTxPRx registers update is complete
bit 6 CPWUP: SMT Manual Pulse Width Buffer Update bit
1 = Request update to SMTxCPW registers
0 = SMTxCPW registers update is complete
bit 5 RST: SMT Manual Timer Reset bit
1 = Request Reset to SMTxTMR registers
0 = SMTxTMR registers update is complete
bit 4-3 Unimplemented: Read as ‘0’
bit 2 TS: GO Value Status bit
1 = SMT timer is incrementing
0 = SMT timer is not incrementing
bit 1 WS: SMTxWIN Value Status bit
1 = SMT window is open
0 = SMT window is closed
bit 0 AS: SMT_signal Value Status bit
1 = SMT acquisition is in progress
0 = SMT acquisition is not in progress

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 382


PIC18(L)F25/26K83

REGISTER 25-4: SMTxCLK: SMT CLOCK SELECTION REGISTER


U-0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — — CSEL<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7-3 Unimplemented: Read as ‘0’


bit 2-0 CSEL<2:0>: SMT Clock Selection bits
111 = Reference Clock Output
110 = SOSC
101 = MFINTOSC/16 (32 kHz)
100 = MFINTOSC (500 kHz)
011 = LFINTOSC
010 = HFINTOSC 16 MHz
001 = FOSC
000 = FOSC/4

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 383


PIC18(L)F25/26K83

REGISTER 25-5: SMTxWIN: SMTx WINDOW INPUT SELECT REGISTER


U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — WSEL<4:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 WSEL<4:0>: SMTx Window Selection bits
11111 = Reserved



11011 = Reserved
11010 = CLC4_out
11001 = CLC3_out
11000 = CLC2_out
10111 = CLC1_out
10110 = ZCD1_out
10101 = CMP2_out
10100 = CMP1_out
10011 = NCO1_out
10010 = Reserved
10001 = Reserved
10000 = PWM8_out
01111 = PWM7_out
01110 = PWM6_out
01101 = PWM5_out
01100 = CCP4_out
01011 = CCP3_out
01010 = CCP2_out
01001 = CCP1_out
01000 = TMR6_postscaled
00111 = TMR4_postscaled
00110 = TMR2_postscaled
00101 = TMR0_overflow
00100 = CLKREF
00011 = SOSC
00010 = MFINTOSC/16 (32 kHz)
00001 = LFINTOSC
00000 = SMTxWINPPS

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 384


PIC18(L)F25/26K83

REGISTER 25-6: SMTxSIG: SMTx SIGNAL INPUT SELECT REGISTER


U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — SSEL<4:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 SSEL<4:0>: SMTx Signal Selection bits
11111 = Reserved



11010 = CAN_rx_timestamp
11001 = CLC4_out
11000 = CLC3_out
10111 = CLC2_out
10110 = CLC1_out
10101 = ZCD1_out
10100 = CMP2_out
10011 = CMP1_out
10010 = NCO1_out
10001 = Reserved
10000 = Reserved
01111 = PWM8_out
01110 = PWM7_out
01101 = PWM6_out
01100 = PWM5_out
01011 = CCP4_out
01010 = CCP3_out
01001 = CCP2_out
01000 = CCP1_out
00111 = TMR6_postscaled
00110 = TMR5_overflow
00101 = TMR4_postscaled
00100 = TMR3_overflow
00011 = TMR2_postscaled
00010 = TMR1_overflow
00001 = TMR0_overflow
00000 = SMTxSIGPPS

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 385


PIC18(L)F25/26K83

REGISTER 25-7: SMTxTMRL: SMT TIMER REGISTER – LOW BYTE


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
SMTxTMR<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 SMTxTMR<7:0>: Significant bits of the SMT Counter – Low Byte

REGISTER 25-8: SMTxTMRH: SMT TIMER REGISTER – HIGH BYTE


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
SMTxTMR<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 SMTxTMR<15:8>: Significant bits of the SMT Counter – High Byte

REGISTER 25-9: SMTxTMRU: SMT TIMER REGISTER – UPPER BYTE


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
SMTxTMR<23:16>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 SMTxTMR<23:16>: Significant bits of the SMT Counter – Upper Byte

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 386


PIC18(L)F25/26K83

REGISTER 25-10: SMTxCPRL: SMT CAPTURED PERIOD REGISTER – LOW BYTE


R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x
SMTxCPR<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 SMTxCPR<7:0>: Significant bits of the SMT Period Latch – Low Byte

REGISTER 25-11: SMTxCPRH: SMT CAPTURED PERIOD REGISTER – HIGH BYTE


R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x
SMTxCPR<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 SMTxCPR<15:8>: Significant bits of the SMT Period Latch – High Byte

REGISTER 25-12: SMTxCPRU: SMT CAPTURED PERIOD REGISTER – UPPER BYTE


R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x
SMTxCPR<23:16>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 SMTxCPR<23:16>: Significant bits of the SMT Period Latch – Upper Byte

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 387


PIC18(L)F25/26K83

REGISTER 25-13: SMTxCPWL: SMT CAPTURED PULSE WIDTH REGISTER – LOW BYTE
R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x
SMTxCPW<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 SMTxCPW<7:0>: Significant bits of the SMT PW Latch – Low Byte

REGISTER 25-14: SMTxCPWH: SMT CAPTURED PULSE WIDTH REGISTER – HIGH BYTE
R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x
SMTxCPW<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 SMTxCPW<15:8>: Significant bits of the SMT PW Latch – High Byte

REGISTER 25-15: SMTxCPWU: SMT CAPTURED PULSE WIDTH REGISTER – UPPER BYTE
R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x R-x/x
SMTxCPW<23:16>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 SMTxCPW<23:16>: Significant bits of the SMT PW Latch – Upper Byte

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 388


PIC18(L)F25/26K83

REGISTER 25-16: SMTxPRL: SMT PERIOD REGISTER – LOW BYTE


R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1
SMTxPR<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 SMTxPR<7:0>: Significant bits of the SMT Timer Value for Period Match – Low Byte

REGISTER 25-17: SMTxPRH: SMT PERIOD REGISTER – HIGH BYTE


R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1
SMTxPR<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 SMTxPR<15:8>: Significant bits of the SMT Timer Value for Period Match – High Byte

REGISTER 25-18: SMTxPRU: SMT PERIOD REGISTER – UPPER BYTE


R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1 R/W-x/1
SMTxPR<23:16>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 SMTxPR<23:16>: Significant bits of the SMT Timer Value for Period Match – Upper Byte

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 389


PIC18(L)F25/26K83
TABLE 25-3: SUMMARY OF REGISTERS ASSOCIATED WITH SMTx
Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page

SMT1CON0 EN — STP WPOL SPOL CPOL SMT1PS<1:0> 380


SMT1CON1 GO REPEAT — — MODE<3:0> 381
SMT1STAT CPRUP CPWUP RST — — TS WS AS 382
SMT1CLK — — — — — CSEL<2:0> 383
SMT1SIG — — — SSEL<4:0> 385
SMT1WIN — — — WSEL<4:0> 384
SMT1TMRL TMR<7:0> 386
SMT1TMRH TMR<15:8> 386
SMT1TMRU TMR<23:16> 386
SMT1CPRL CPR<7:0> 387
SMT1CPRH CPR<15:8> 387
SMT1CPRU CPR<23:16> 387
SMT1CPWL CPW<7:0> 388
SMT1CPWH CPW<15:8> 388
SMT1CPWU CPW<23:16> 388
SMT1PRL PR<7:0> 389
SMT1PRH PR<15:8> 389
SMT1PRU PR<23:16> 389
SMT2CON0 EN — STP WPOL SPOL CPOL SMT2PS<1:0> 380
SMT2CON1 GO REPEAT — — MODE<3:0> 381
SMT2STAT CPRUP CPWUP RST — — TS WS AS 382
SMT2CLK — — — — — CSEL<2:0> 383
SMT2SIG — — — SSEL<4:0> 385
SMT2WIN — — — WSEL<4:0> 384
SMT2TMRL TMR<7:0> 386
SMT2TMRH TMR<15:8> 386
SMT2TMRU TMR<23:16> 386
SMT2CPRL CPR<7:0> 387
SMT2CPRH CPR<15:8> 387
SMT2CPRU CPR<23:16> 387
SMT2CPWL CPW<7:0> 388
SMT2CPWH CPW<15:8> 388
SMT2CPWU CPW<23:16> 388
SMT2PRL PR<7:0> 389
SMT2PRH PR<15:8> 389
SMT2PRU PR<23:16> 389
Legend: — = unimplemented read as ‘0’. Shaded cells are not used for the SMTx module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 390


PIC18(L)F25/26K83
26.0 COMPLEMENTARY 26.2 Operating Modes
WAVEFORM GENERATOR The CWG module can operate in six different modes,
(CWG) MODULE as specified by the MODE<2:0> bits of the
CWGxCON0 register:
The Complementary Waveform Generator (CWG)
produces half-bridge, full-bridge, and steering of PWM • Half-Bridge mode
waveforms. It is backwards compatible with previous • Push-Pull mode
CCP functions. The PIC18(L)F25/26K83 family has • Asynchronous Steering mode
three instances of the CWG module. • Synchronous Steering mode
• Full-Bridge mode, Forward
Each of the CWG modules has the following features: • Full-Bridge mode, Reverse
• Six operating modes: All modes accept a single pulse data input, and
- Synchronous Steering mode provide up to four outputs as described in the following
- Asynchronous Steering mode sections.
- Full-Bridge mode, Forward All modes include auto-shutdown control as described
- Full-Bridge mode, Reverse in Section 26.10 “Auto-Shutdown”.
- Half-Bridge mode
- Push-Pull mode Note: Except as noted for Full-bridge mode
• Output polarity control (Section 26.2.3 “Full-Bridge Modes”),
• Output steering mode changes should only be performed
• Independent 6-bit rising and falling event dead- while EN = 0 (Register 26-1).
band timers
- Clocked dead band 26.2.1 HALF-BRIDGE MODE
- Independent rising and falling dead-band In Half-Bridge mode, two output signals are generated
enables as true and inverted versions of the input as illustrated
• Auto-shutdown control with: in Figure 26-2. A non-overlap (dead-band) time is
inserted between the two outputs as described in Sec-
- Selectable shutdown sources
tion 26.6 “Dead-Band Control”. The output steering
- Auto-restart option feature cannot be used in this mode. A basic block dia-
- Auto-shutdown pin override control gram of this mode is shown in Figure 26-1.
The unused outputs CWGxC and CWGxD drive similar
26.1 Fundamental Operation signals as CWGxA and CWGxB, with polarity inde-
The CWG generates two output waveforms from the pendently controlled by the POLC and POLD bits of the
selected input source. CWGxCON1 register, respectively.

The off-to-on transition of each output can be delayed


from the on-to-off transition of the other output, thereby,
creating a time delay immediately where neither output
is driven. This is referred to as dead time and is covered
in Section 26.6 “Dead-Band Control”.
It may be necessary to guard against the possibility of
circuit faults or a feedback event arriving too late or not
at all. In this case, the active drive must be terminated
before the Fault condition causes damage. This is
referred to as auto-shutdown and is covered in Section
26.10 “Auto-Shutdown”.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 391


PIC18(L)F25/26K83

FIGURE 26-1: SIMPLIFIED CWG BLOCK DIAGRAM (HALF-BRIDGE MODE, MODE<2:0> = 100)

LSAC<1:0> Rev. 10-000209D


2/2/2016

‘1’ 00
‘0’ 01
High-Z 10
11
Rising Dead-Band Block
CWG Clock clock 1
CWG Data A
data out
CWG Data data in 0 CWG1A
POLA

LSBD<1:0>

Falling Dead-Band Block ‘1’ 00


clock CWG Data B ‘0’ 01
data out
data in High-Z 10
11

CWG Data Input CWG 1


Data
0 CWG1B
POLB
D Q

E LSAC<1:0>

EN ‘1’ 00
‘0’ 01
High-Z 10
11

1
0 CWG1C
POLC
Auto-shutdown source S Q
(CWGxAS1 register) LSBD<1:0>
R

REN ‘1’ 00
SHUTDOWN = 0 ‘0’ 01
High-Z 10
11

1
0 CWG1D
POLD

SHUTDOWN

FREEZE
D Q

CWG Data

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 392


PIC18(L)F25/26K83
FIGURE 26-2: CWGx HALF-BRIDGE MODE OPERATION

CWGx_clock

CWGxA
CWGxC
Rising Event Dead Band Rising Event D
Falling Event Dead Band Falling Event Dead Band
CWGxB
CWGxD

CWGx_data
Note: CWGx_rising_src = CCP1_out, CWGx_falling_src = ~CCP1_out

26.2.2 PUSH-PULL MODE


In Push-Pull mode, two output signals are generated,
alternating copies of the input as illustrated in
Figure 26-4. This alternation creates the push-pull
effect required for driving some transformer-based
power supply designs. Steering modes are not used in
Push-Pull mode. A basic block diagram for the
Push-Pull mode is shown in Figure 26-3.
The push-pull sequencer is reset whenever EN = 0 or
if an auto-shutdown event occurs. The sequencer is
clocked by the first input pulse, and the first output
appears on CWGxA.
The unused outputs CWGxC and CWGxD drive copies
of CWGxA and CWGxB, respectively, but with polarity
controlled by the POLC and POLD bits of the
CWGxCON1 register, respectively.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 393


PIC18(L)F25/26K83

FIGURE 26-3: SIMPLIFIED CWG BLOCK DIAGRAM (PUSH-PULL MODE, MODE<2:0> = 101)

LSAC<1:0>
Rev. 10-000210D
2/2/2016

‘1’ 00
‘0’ 01
High-Z 10
11

1
CWG Data CWG Data A
0 CWG1A
POLA

LSBD<1:0>
D Q

Q
‘1’ 00
‘0’ 01

High-Z 10

CWG Data B 11

1
CWG Data Input CWG 0 CWG1B
POLB
Data
D Q
LSAC<1:0>
E

‘1’ 00
EN ‘0’ 01
High-Z 10
11

1
0 CWG1C
POLC
Auto-shutdown source S Q
(CWGxAS1 register)
R LSBD<1:0>

REN 00
‘1’
SHUTDOWN = 0
‘0’ 01
High-Z 10
11

1
0 CWG1D
POLD

SHUTDOWN
FREEZE
D Q

CWG Data

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 394


PIC18(L)F25/26K83
FIGURE 26-4: CWGx PUSH-PULL MODE OPERATION

CWG1
clock

Input
source

CWG1A

CWG1B

26.2.3 FULL-BRIDGE MODES


In Forward and Reverse Full-Bridge modes, three
outputs drive static values while the fourth is modulated
by the input data signal. The mode selection may be
toggled between forward and reverse by toggling the
MODE<0> bit of the CWGxCON0 while keeping
MODE<2:1> static, without disabling the CWG module.
When connected as shown in Figure 26-5, the outputs
are appropriate for a full-bridge motor driver. Each
CWG output signal has independent polarity control, so
the circuit can be adapted to high-active and low-active
drivers. A simplified block diagram for the Full-Bridge
modes is shown in Figure 26-6.

FIGURE 26-5: EXAMPLE OF FULL-BRIDGE APPLICATION


Rev. 10-000263A
12/8/2015

VDD

FET QA QC
FET
Driver Driver
CWG1A

CWG1B LOAD

CWG1C FET FET


Driver Driver

CWG1D QB QD

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 395


PIC18(L)F25/26K83

FIGURE 26-6: SIMPLIFIED CWG BLOCK DIAGRAM (FORWARD AND REVERSE FULL-BRIDGE
MODES)

MODE<2:0> = 010: Forward


Rev. 10-000212D
2/2/2016

LSAC<1:0>
MODE<2:0> = 011: Reverse

‘1’ 00
Rising Dead-Band Block ‘0’ 01
CWG Clock clock
signal out High-Z 10
signal in 11

CWG 1
CWG Data A
Data
MODE<2:0> 0 CWG1A
POLA
D Q
CWG Q LSBD<1:0>
Data

cwg data ‘1’ 00


signal in ‘0’ 01
signal out
CWG Clock clock High-Z 10

Falling Dead-Band Block 11

1
CWG Data Input CWG Data B
CWG Data
0 CWG1B
POLB
D Q

E LSAC<1:0>

‘1’ 00
EN
‘0’ 01
High-Z 10
11

CWG Data C
1
0 CWG1C
POLC
Auto-shutdown source S Q
(CWGxAS1 register)
R LSBD<1:0>

REN
‘1’ 00
SHUTDOWN = 0
‘0’ 01
High-Z 10
11

CWG Data D
1
0 CWG1D
POLD

SHUTDOWN

FREEZE
D Q

CWG Data

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 396


PIC18(L)F25/26K83
In Forward Full-Bridge mode (MODE<2:0> = 010), In Full-Bridge mode, the dead-band period is used
CWGxA is driven to its active state, CWGxB and when there is a switch from forward to reverse or vice-
CWGxC are driven to their inactive state, and CWGxD versa. This dead-band control is described in Section
is modulated by the input signal, as shown in 26.6 “Dead-Band Control”, with additional details in
Figure 26-7. Section 26.7 “Rising Edge and Reverse Dead
In Reverse Full-Bridge mode (MODE<2:0> = 011), Band” and Section 26.8 “Falling Edge and Forward
CWGxC is driven to its active state, CWGxA and Dead Band”. Steering modes are not used with either
CWGxD are driven to their inactive states, and CWGxB of the Full-Bridge modes. The mode selection may be
is modulated by the input signal, as shown in toggled between forward and reverse toggling the
Figure 26-7. MODE<0> bit of the CWGxCON0 while keeping
MODE<2:1> static, without disabling the CWG module.

FIGURE 26-7: EXAMPLE OF FULL-BRIDGE OUTPUT


Forward
Mode
Period

CWG1A(2)

CWG1B(2)

CWG1C(2)
Pulse Width

CWG1D(2)

(1) (1)

Reverse
Mode
Period

CWG1A(2)
Pulse Width

CWG1B(2)

CWG1C(2)

CWG1D(2)

(1) (1)

Note 1: A rising CWG data input creates a rising event on the modulated output.
2: Output signals shown as active-high; all POLy bits are clear.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 397


PIC18(L)F25/26K83
26.2.3.1 Direction Change in Full-Bridge The dead-band delay is inserted only when changing
Mode directions, and only the modulated output is affected.
The statically-configured outputs (CWGxA and
In Full-Bridge mode, changing MODE<2:0> controls
CWGxC) are not afforded dead band, and switch
the forward/reverse direction. Changes to MODE<2:0>
essentially simultaneously.
change to the new direction on the next rising edge of
the modulated input. Figure 26-8 shows an example of the CWG outputs
changing directions from forward to reverse, at near
A direction change is initiated in software by changing
100% duty cycle. In this example, at time t1, the output
the MODE<2:0> bits of the CWGxCON0 register. The
of CWGxA and CWGxD become inactive, while output
sequence is illustrated in Figure 26-8.
CWGxC becomes active. Since the turn-off time of the
• The associated active output CWGxA and the power devices is longer than the turn-on time, a shoot-
inactive output CWGxC are switched to drive in through current will flow through power devices QC and
the opposite direction. QD for the duration of ‘t’. The same phenomenon will
• The previously modulated output CWGxD is occur to power devices QA and QB for the CWG
switched to the inactive state, and the previously direction change from reverse to forward.
inactive output CWGxB begins to modulate.
When changing the CWG direction at high duty cycle is
• CWG modulation resumes after the direction-
required for an application, two possible solutions for
switch dead band has elapsed.
eliminating the shoot-through current are:
26.2.3.2 Dead-Band Delay in Full-Bridge 1. Reduce the CWG duty cycle for one period
Mode before changing directions.
2. Use switch drivers that can drive the switches off
Dead-band delay is important when either of the
faster than they can drive them on.
following conditions is true:
1. The direction of the CWG output changes when
the duty cycle of the data input is at or near
100%, or
2. The turn-off time of the power switch, including
the power device and driver circuit, is greater
than the turn-on time.

FIGURE 26-8: EXAMPLE OF PWM DIRECTION CHANGE AT NEAR 100% DUTY CYCLE
t1
Forward Period Reverse Period

CWG1A

CWG1B Pulse Width

CWG1C

CWG1D Pulse Width


TON

External Switch C
TOFF

External Switch D

Potential Shoot- T = TOFF - TON


Through Current

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 398


PIC18(L)F25/26K83
26.2.4 STEERING MODES 26.2.4.1 Synchronous Steering Mode
In both Synchronous and Asynchronous Steering In Synchronous Steering mode (MODE<2:0>
modes, the modulated input signal can be steered to bits = 001, Register 26-1), changes to steering
any combination of four CWG outputs and a fixed-value selection registers take effect on the next rising edge of
will be presented on all the outputs not used for the the modulated data input (Figure 26-9). In
PWM output. Each output has independent polarity, Synchronous Steering mode, the output will always
steering, and shutdown options. Dead-band control is produce a complete waveform.
not used in either steering mode.
When STRx = 0 (Register 26-5), then the
corresponding pin is held at the level defined by OVRx
(Register 26-5). When STRx = 1, then the pin is driven
by the modulated input signal.
The POLx bits (Register 26-2) control the signal
polarity only when STRx = 1.
The CWG auto-shutdown operation also applies to
steering modes as described in Section
26.14 “Register Definitions: CWG Control”.

Note: Only the STRx bits are synchronized; the


SDATx (data) bits are not synchronized.
The CWG auto-shutdown operation also applies in
Steering modes as described in Section 26.10 “Auto-
Shutdown””. An auto-shutdown event will only affect
pins that have STRx = 1.

FIGURE 26-9: EXAMPLE OF SYNCHRONOUS STEERING (MODE<2:0> = 001)

CWG1
clock

Input
source

CWG1A

CWG1B

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 399


PIC18(L)F25/26K83
26.2.4.2 Asynchronous Steering Mode
In Asynchronous mode (MODE<2:0> bits = 000,
Register 26-1), steering takes effect at the end of the
instruction cycle that writes to STR. In Asynchronous
Steering mode, the output signal may be an incomplete
waveform (Figure 26-10). This operation may be useful
when the user firmware needs to immediately remove
a signal from the output pin.

FIGURE 26-10: EXAMPLE OF ASYNCHRONOUS STEERING (MODE<2:0>= 000)

CWG1
INPUT
End of Instruction Cycle End of Instruction Cycle

STRA

CWG1A

CWG1A Follows CWG1 data input

26.2.4.3 Start-up Considerations


The application hardware must use the proper external
pull-up and/or pull-down resistors on the CWG output
pins. This is required because all I/O pins are forced to
high-impedance at Reset.
The POLy bits (Register 26-2) allow the user to choose
whether the output signals are active-high or active-
low.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 400


PIC18(L)F25/26K83

FIGURE 26-11: SIMPLIFIED CWG BLOCK DIAGRAM (OUTPUT STEERING MODES)

Rev. 10-000211D
2/2/2016

MODE<2:0> = 000: Asynchronous LSAC<1:0>


MODE<2:0> = 001: Synchronous

‘1’ 00
‘0’ 01
High-Z 10
11

CWG Data A 1
1
POLA 0 CWG1A
0
DATA

STRA LSBD<1:0>

‘1’ 00
‘0’ 01
CWG
CWG Data Data High-Z 10
Input
11

D Q CWG Data B
1
E 1
POLB 0 CWG1B
0
DATB
EN
STRB LSAC<1:0>

‘1’ 00
‘0’ 01
High-Z 10
11

CWG Data C 1
Auto-shutdown source S Q 1
(CWGxAS1 register) POLC 0 CWG1C
R 0
DATC

REN STRC LSBD<1:0>


SHUTDOWN = 0

‘1’ 00
‘0’ 01
High-Z 10
11

CWG Data D
1
1
POLD 0 CWG1D
0
DATD
SHUTDOWN
STRD
FREEZE
D Q

CWG Data

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 401


PIC18(L)F25/26K83
26.3 Clock Source 26.5 Output Control
The clock source is used to drive the dead-band timing 26.5.1 CWG OUTPUTS
circuits. The CWG module allows the following clock
sources to be selected: Each CWG output can be routed to a Peripheral Pin
Select (PPS) output via the RxyPPS register (see Sec-
• FOSC (system clock) tion 17.0 “Peripheral Pin Select (PPS) Module”).
• HFINTOSC
When the HFINTOSC is selected, the HFINTOSC will 26.5.2 POLARITY CONTROL
be kept running during Sleep. Therefore, CWG modes The polarity of each CWG output can be selected inde-
requiring dead band can operate in Sleep, provided pendently. When the output polarity bit is set, the corre-
that the CWG data input is also active during Sleep.The sponding output is active-high. Clearing the output
clock sources are selected using the CS bit of the polarity bit configures the corresponding output as
CWGxCLKCON register (Register 26-3). The system active-low. However, polarity does not affect the over-
clock FOSC, is disabled in Sleep and thus dead-band ride levels. Output polarity is selected with the POLy
control cannot be used. bits of the CWGxCON1. Auto-shutdown and steering
options are unaffected by polarity.
26.4 Selectable Input Sources
The CWG generates the output waveforms from the 26.6 Dead-Band Control
following input sources: The dead-band control provides non-overlapping PWM
signals to prevent shoot-through current in PWM
TABLE 26-1: SELECTABLE INPUT switches. Dead-band operation is employed for Half-
Bridge and Full-Bridge modes. The CWG contains two
SOURCES
6-bit dead-band counters. One is used for the rising
Source edge of the input source control in Half-Bridge mode or
Signal Name ISM<2:0>
Peripheral for reverse dead-band Full-Bridge mode. The other is
Pin selected by used for the falling edge of the input source control in
CWGxPPS CWGxPPS
000 Half-Bridge mode or for forward dead band in Full-
Bridge mode.
CCP1 CCP1 Output 001
Dead band is timed by counting CWG clock periods
CCP2 CCP2 Output 010 from zero up to the value in the rising or falling dead-
PWM3 PWM3 Output 011 band counter registers. See CWGxDBR and
PWM4 PWM4 Output 100 CWGxDBF registers, respectively.

CMP1 Comparator 1 Output 101 26.6.1 DEAD-BAND FUNCTIONALITY IN


CMP2 Comparator 2 Output 110 HALF-BRIDGE MODE
Data signal modulator In Half-Bridge mode, the dead-band counters dictate
DSM 111
output the delay between the falling edge of the normal output
and the rising edge of the inverted output. This can be
The input sources are selected using the IS<4:0> bits
seen in Figure 26-2.
in the CWGxISM register (Register 26-4).
26.6.2 DEAD-BAND FUNCTIONALITY IN
FULL-BRIDGE MODE
In Full-Bridge mode, the dead-band counters are used
when undergoing a direction change. The MODE<0>
bit of the CWGxCON0 register can be set or cleared
while the CWG is running, allowing for changes from
Forward to Reverse mode. The CWGxA and CWGxC
signals will change immediately upon the first rising
input edge following a direction change, but the modu-
lated signals (CWGxB or CWGxD, depending on the
direction of the change) will experience a delay dictated
by the dead-band counters.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 402


PIC18(L)F25/26K83
26.7 Rising Edge and Reverse Dead
Band
In Half-Bridge mode, the rising edge dead band delays
the turn-on of the CWGxA output after the rising edge
of the CWG data input. In Full-Bridge mode, the
reverse dead-band delay is only inserted when
changing directions from Forward mode to Reverse
mode, and only the modulated output CWGxB is
affected.
The CWGxDBR register determines the duration of the
dead-band interval on the rising edge of the input
source signal. This duration is from 0 to 64 periods of
the CWG clock.
Dead band is always initiated on the edge of the input
source signal. A count of zero indicates that no dead
band is present.
If the input source signal reverses polarity before the
dead-band count is completed, then no signal will be
seen on the respective output.
The CWGxDBR register value is double-buffered.
When EN = 0 (Register 26-1), the buffer is loaded
when CWGxDBR is written. If EN = 1, then the buffer
will be loaded at the rising edge following the first falling
edge of the data input, after the LD bit (Register 26-1)
is set. Refer to Figure 26-12 for an example.

26.8 Falling Edge and Forward Dead


Band
In Half-Bridge mode, the falling edge dead band delays
the turn-on of the CWGxB output at the falling edge of
the CWG data input. In Full-Bridge mode, the forward
dead-band delay is only inserted when changing direc-
tions from Reverse mode to Forward mode, and only
the modulated output CWGxD is affected.
The CWGxDBF register determines the duration of the
dead-band interval on the falling edge of the input
source signal. This duration is from zero to 64 periods
of CWG clock.
Dead-band delay is always initiated on the edge of the
input source signal. A count of zero indicates that no
dead band is present.
If the input source signal reverses polarity before the
dead-band count is completed, then no signal will be
seen on the respective output.
The CWGxDBF register value is double-buffered.
When EN = 0 (Register 26-1), the buffer is loaded
when CWGxDBF is written. If EN = 1, then the buffer
will be loaded at the rising edge following the first
falling edge of the data input after the LD (Register 26-
1) is set. Refer to Figure 26-13 for an example.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 403


FIGURE 26-12: DEAD-BAND OPERATION, CWGxDBR = 0x01, CWGxDBF = 0x02
 2017 Microchip Technology Inc.

cwg_clock

Input Source

CWGxA

CWGxB
Preliminary

FIGURE 26-13: DEAD-BAND OPERATION, CWGxDBR = 0x03, CWGxDBF = 0x06, SOURCE SHORTER THAN DEAD BAND

PIC18(L)F25/26K83
cwg_clock

Input Source

CWGxA
DS40001943A-page 404

CWGxB

source shorter than dead band


PIC18(L)F25/26K83
26.9 Dead-Band Jitter
When the rising and falling edges of the input source
are asynchronous to the CWG clock, it creates jitter in
the dead-band time delay. The maximum jitter is equal
to one CWG clock period. Refer to Equation 26-1 for
more details.

EQUATION 26-1: DEAD-BAND DELAY TIME


CALCULATION
1
T = ------------------------------------------  DBx  4: 0>
DEAD – BAND_MIN F
CWG CLOCK
1
T = ------------------------------------------  DBx  4: 0>+1
DEAD – BANDMAX F
CWG CLOCK

T
JITTER
= T
DEAD – BAND _ MAX
– TDEAD – BAND _ MIN
1
T = --------------------------------------------
JITTER F
CWG _ CLOCK
T = T +T
DEAD – BAND _ MAX DEAD – BAND _ MIN JITTER

EXAMPLE

DBR<4:0> = 0x0A = 10

F = 8 MHz
CWG_CLOCK
1
T = ---------------- = 125 ns
JITTER 8MHz
T = 125 ns*10 = 125 s
DEAD – BAND_MIN

T = 1.25 s + 0.125s = 1.37s


DEAD – BAND_MAX

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 405


PIC18(L)F25/26K83
26.10 Auto-Shutdown 26.10.1.3 Pin Override Levels
Auto-shutdown is a method to immediately override the The levels driven to the CWG outputs during an auto-
CWG output levels with specific overrides that allow for shutdown event are controlled by the LSBD<1:0> and
safe shutdown of the circuit. The shutdown state can be LSAC<1:0> bits of the CWGxAS0 register
either cleared automatically or held until cleared by (Register 26-6). The LSBD<1:0> bits control CWGxB/
software. The auto-shutdown circuit is illustrated in D output levels, while the LSAC<1:0> bits control the
Figure 26-14. CWGxA/C output levels.

26.10.1 SHUTDOWN 26.10.1.4 Auto-Shutdown Interrupts


The shutdown state can be entered by either of the When an auto-shutdown event occurs, either by soft-
following two methods: ware or hardware setting SHUTDOWN, the CWGxIF
flag bit of the respective PIR register is set.
• Software generated
• External Input 26.11 Auto-Shutdown Restart
26.10.1.1 Software Generated Shutdown After an auto-shutdown event has occurred, there are
Setting the SHUTDOWN bit of the CWGxAS0 register two ways to resume operation:
will force the CWG into the shutdown state. • Software controlled
When the auto-restart is disabled, the shutdown state • Auto-restart
will persist as long as the SHUTDOWN bit is set. In either case, the shutdown source must be cleared
before the restart can take place. That is, either the
When auto-restart is enabled, the SHUTDOWN bit will
shutdown condition must be removed, or the
clear automatically and resume operation on the next
corresponding ASxE bit must be cleared.
rising edge event. The SHUTDOWN bit indicates when
a shutdown condition exists. The bit may be set or
26.11.1 SOFTWARE-CONTROLLED
cleared in software or by hardware.
RESTART
26.10.1.2 External Input Source If the REN bit of the CWGxAS0 register is clear
External shutdown inputs provide the fastest way to safely (REN = 0), the CWG module must be restarted after an
suspend CWG operation in the event of a Fault condition. auto-shutdown event through software.
When any of the selected shutdown inputs goes active, Once all auto-shutdown sources are removed, the
the CWG outputs will immediately go to the specified software must clear SHUTDOWN. Once SHUTDOWN
override levels without software delay. The override levels is cleared, the CWG module will resume operation
are selected by the LSBD<1:0> and LSAC<1:0> bits of upon the first rising edge of the CWG data input.
the CWGxAS0 register (Register 26-6). Several input
sources can be selected to cause a shutdown condition.
All input sources are active-low. The sources are: Note: The SHUTDOWN bit cannot be cleared in
software if the auto-shutdown condition is
• Pin selected by CWGxPPS still present.
• Timer2 postscaled output
• Timer4 postscaled output 26.11.2 AUTO-RESTART
• Timer6 postscaled output If the REN bit of the CWGxAS0 register is set (REN = 1),
• Comparator 1 output the CWG module will restart from the shutdown state
• Comparator 2 output automatically.
• CLC2 output Once all auto-shutdown conditions are removed, the
Shutdown input sources are individually enabled by the hardware will automatically clear SHUTDOWN. Once
ASxE bits of the CWGxAS1 register (Register 26-7). SHUTDOWN is cleared, the CWG module will resume
operation upon the first rising edge of the CWG data
Note: Shutdown inputs are level sensitive, not input.
edge sensitive. The shutdown state can-
not be cleared, except by disabling auto-
shutdown, as long as the shutdown input Note: The SHUTDOWN bit cannot be cleared in
level persists. software if the auto-shutdown condition is
still present.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 406


PIC18(L)F25/26K83
26.12 Operation During Sleep 26.13 Configuring the CWG
The CWG module operates independently from the 1. Ensure that the TRIS control bits corresponding
system clock and will continue to run during Sleep, to CWG outputs are set so that all are
provided that the clock and input sources selected configured as inputs, ensuring that the outputs
remain active. are inactive during setup. External hardware
The HFINTOSC remains active during Sleep when all should ensure that pin levels are held to safe
the following conditions are met: levels.
2. Clear the EN bit, if not already cleared.
• CWG module is enabled
3. Configure the MODE<2:0> bits of the CWGx-
• Input source is active CON0 register to set the output operating mode.
• HFINTOSC is selected as the clock source, 4. Configure the POLy bits of the CWGxCON1
regardless of the system clock source selected. register to set the output polarities.
In other words, if the HFINTOSC is simultaneously 5. Configure the ISM<4:0> bits of the CWGxISM
selected as system clock and CWG clock, when the register to select the data input source.
CWG is enabled and the input source is active, then the 6. If a steering mode is selected, configure the
CPU will go Idle during Sleep, but the HFINTOSC will STRx bits to select the desired output on the
remain active and the CWG will continue to operate. CWG outputs.
This will have a direct effect on the Sleep mode current. 7. Configure the LSBD<1:0> and LSAC<1:0> bits
of the CWGxASD0 register to select the auto-
shutdown output override states (this is
necessary even if not using auto-shutdown
because start-up will be from a shutdown state).
8. If auto-restart is desired, set the REN bit of
CWGxAS0.
9. If auto-shutdown is desired, configure the ASxE
bits of the CWGxAS1 register to select the shut-
down source.
10. Set the desired rising and falling dead-band
times with the CWGxDBR and CWGxDBF
registers.
11. Select the clock source in the CWGxCLKCON
register.
12. Set the EN bit to enable the module.
13. Clear the TRIS bits that correspond to the CWG
outputs to set them as outputs.
If auto-restart is to be used, set the REN bit and the
SHUTDOWN bit will be cleared automatically. Other-
wise, clear the SHUTDOWN bit in software to start the
CWG.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 407


FIGURE 26-14: CWG SHUTDOWN BLOCK DIAGRAM
 2017 Microchip Technology Inc.

Write ‘1’ to Rev. 10-000172E


9/13/2016

SHUTDOWN bit
PPS
AS0E
CWGxINPPS
CMP1_out
AS4E
CMP2_out
AS5E
TMR2_postscaled SHUTDOWN S
S Q
AS1E D Q CWG_shutdown
TMR4_postscaled
REN FREEZE
R
AS2E Write ‘0’ to
SHUTDOWN bit
TMR6_postscaled CWG_data CK
AS3E
CLC2_out
AS6E
Preliminary

FIGURE 26-15: SHUTDOWN FUNCTIONALITY, AUTO-RESTART DISABLED (REN = 0, LSAC = 01, LSBD = 01)

Shutdown Event Ceases REN Cleared by Software

PIC18(L)F25/26K83
CWG Input
Source

Shutdown Source

SHUTDOWN

CWGxA Tri-State (No Pulse)


CWGxC
DS40001943A-page 408

CWGxB Tri-State (No Pulse)


CWGxD
No Shutdown
Shutdown Output Resumes
FIGURE 26-16: SHUTDOWN FUNCTIONALITY, AUTO-RESTART ENABLED (REN = 1, LSAC = 01, LSBD = 01)
 2017 Microchip Technology Inc.

Shutdown Event Ceases REN auto-cleared by hardware

CWG Input
Source

Shutdown Source

SHUTDOWN

CWGxA Tri-State (No Pulse)


CWGxC

CWGxB Tri-State (No Pulse)


CWGxD
No Shutdown
Shutdown Output Resumes
Preliminary

PIC18(L)F25/26K83
DS40001943A-page 409
PIC18(L)F25/26K83
26.14 Register Definitions: CWG Control
Long bit name prefixes for the CWG peripheral is
shown below. Refer to Section 1.3.2.2 “Long Bit
Names” for more information.

Peripheral Bit Name Prefix


CWG1 CWG1
CWG2 CWG2
CWG3 CWG3
l
REGISTER 26-1: CWGxCON0: CWG CONTROL REGISTER 0
R/W-0/0 R/W/HC-0/0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0
EN LD(1) — — — MODE<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HC = Bit is cleared by hardware

bit 7 EN: CWGx Enable bit


1 = Module is enabled
0 = Module is disabled
bit 6 LD: CWGx Load Buffers bit(1)
1 = Dead-band count buffers to be loaded on CWG data rising edge, following first falling edge after
this bit is set
0 = Buffers remain unchanged
bit 5-3 Unimplemented: Read as ‘0’
bit 2-0 MODE<2:0>: CWGx Mode bits
111 = Reserved
110 = Reserved
101 = CWG outputs operate in Push-Pull mode
100 = CWG outputs operate in Half-Bridge mode
011 = CWG outputs operate in Reverse Full-Bridge mode
010 = CWG outputs operate in Forward Full-Bridge mode
001 = CWG outputs operate in Synchronous Steering mode
000 = CWG outputs operate in Asynchronous Steering mode

Note 1: This bit can only be set after EN = 1; it cannot be set in the same cycle when EN is set.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 410


PIC18(L)F25/26K83

REGISTER 26-2: CWGxCON1: CWG CONTROL REGISTER 1


U-0 U-0 R-x U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — IN — POLD POLC POLB POLA
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7-6 Unimplemented: Read as ‘0’


bit 5 IN: CWG Input Value bit (read-only)
bit 4 Unimplemented: Read as ‘0’
bit 3 POLD: CWGxD Output Polarity bit
1 = Signal output is inverted polarity
0 = Signal output is normal polarity
bit 2 POLC: CWGxC Output Polarity bit
1 = Signal output is inverted polarity
0 = Signal output is normal polarity
bit 1 POLB: CWGxB Output Polarity bit
1 = Signal output is inverted polarity
0 = Signal output is normal polarity
bit 0 POLA: CWGxA Output Polarity bit
1 = Signal output is inverted polarity
0 = Signal output is normal polarity

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 411


PIC18(L)F25/26K83

REGISTER 26-3: CWGxCLK: CWGx CLOCK INPUT SELECTION REGISTER


U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0/0
— — — — — — — CS
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7-1 Unimplemented: Read as ‘0’


bit 0 CS: CWG Clock Source Selection Select bits

CS CWG1 CWG2 CWG3


1 HFINTOSC (1) HFINTOSC (1) HFINTOSC (1)
0 FOSC FOSC FOSC
Note 1: HFINTOSC remains operating during Sleep.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 412


PIC18(L)F25/26K83

REGISTER 26-4: CWGxISM: CWGx INPUT SELECTION REGISTER


U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — IS<4:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7-5 Unimplemented Read as ‘0’


bit 4-0 IS<4:0>: CWG Data Input Selection Multiplexer Select bits

CWG1 CWG2 CWG3


IS<4:0>
Input Selection Input Selection Input Selection
11111-10011 Reserved Reserved Reserved
10010 CLC4_out CLC4_out CLC4_out
10001 CLC3_out CLC3_out CLC3_out
10000 CLC2_out CLC2_out CLC2_out
01111 CLC1_out CLC1_out CLC1_out
01110 DSM_out DSM_out DSM_out
01101 CMP2OUT CMP2OUT CMP2OUT
01100 CMP1OUT CMP1OUT CMP1OUT
01011 NCO1OUT NCO1OUT NCO1OUT
01010-01001 Reserved Reserved Reserved
01000 PWM8OUT PWM8OUT PWM8OUT
00111 PWM7OUT PWM7OUT PWM7OUT
00110 PWM6OUT PWM6OUT PWM6OUT
00101 PWM5OUT PWM5OUT PWM5OUT
00100 CCP4_out CCP4_out CCP4_out
00011 CCP3_out CCP3_out CCP3_out
00010 CCP2_out CCP2_out CCP2_out
00001 CCP1_out CCP1_out CCP1_out
00000 Pin selected by Pin selected by Pin selected by
CWG1PPS CWG2PPS CWG3PPS

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 413


PIC18(L)F25/26K83

REGISTER 26-5: CWGxSTR(1): CWG STEERING CONTROL REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
OVRD OVRC OVRB OVRA STRD(2) STRC(2) STRB(2) STRA(2)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 OVRD: Steering Data D bit


bit 6 OVRC: Steering Data C bit
bit 5 OVRB: Steering Data B bit
bit 4 OVRA: Steering Data A bit
bit 3 STRD: Steering Enable bit D(2)
1 = CWGxD output has the CWG data input waveform with polarity control from POLD bit
0 = CWGxD output is assigned to value of OVRD bit
bit 2 STRC: Steering Enable bit C(2)
1 = CWGxC output has the CWG data input waveform with polarity control from POLC bit
0 = CWGxC output is assigned to value of OVRC bit
bit 1 STRB: Steering Enable bit B(2)
1 = CWGxB output has the CWG data input waveform with polarity control from POLB bit
0 = CWGxB output is assigned to value of OVRB bit
bit 0 STRA: Steering Enable bit A(2)
1 = CWGxA output has the CWG data input waveform with polarity control from POLA bit
0 = CWGxA output is assigned to value of OVRA bit

Note 1: The bits in this register apply only when MODE<2:0> = 00x (Register 26-1, Steering modes).
2: This bit is double-buffered when MODE<2:0> = 001.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 414


PIC18(L)F25/26K83

REGISTER 26-6: CWGxAS0: CWG AUTO-SHUTDOWN CONTROL REGISTER 0


R/W/HS/HC-0/0 R/W-0/0 R/W-0/0 R/W-1/1 R/W-0/0 R/W-1/1 U-0 U-0
SHUTDOWN REN LSBD<1:0> LSAC<1:0> — —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS/HC = Bit is set/cleared by hardware
q = Value depends on condition

bit 7 SHUTDOWN: Auto-Shutdown Event Status bit(1,2)


1 = An auto-shutdown state is in effect
0 = No auto-shutdown event has occurred
bit 6 REN: Auto-Restart Enable bit
1 = Auto-restart is enabled
0 = Auto-restart is disabled
bit 5-4 LSBD<1:0>: CWGxB and CWGxD Auto-Shutdown State Control bits
11 = A logic ‘1’ is placed on CWGxB/D when an auto-shutdown event occurs.
10 = A logic ‘0’ is placed on CWGxB/D when an auto-shutdown event occurs.
01 = Pin is tri-stated on CWGxB/D when an auto-shutdown event occurs.
00 = The inactive state of the pin, including polarity, is placed on CWGxB/D after the required
dead-band interval when an auto-shutdown event occurs.
bit 3-2 LSAC<1:0>: CWGxA and CWGxC Auto-Shutdown State Control bits
11 = A logic ‘1’ is placed on CWGxA/C when an auto-shutdown event occurs.
10 = A logic ‘0’ is placed on CWGxA/C when an auto-shutdown event occurs.
01 = Pin is tri-stated on CWGxA/C when an auto-shutdown event occurs.
00 = The inactive state of the pin, including polarity, is placed on CWGxA/C after the required
dead-band interval when an auto-shutdown event occurs.
bit 1-0 Unimplemented: Read as ‘0’

Note 1: This bit may be written while EN = 0 (Register 26-1), to place the outputs into the shutdown configuration.
2: The outputs will remain in auto-shutdown state until the next rising edge of the CWG data input after this
bit is cleared.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 415


PIC18(L)F25/26K83

REGISTER 26-7: CWGxAS1: CWG AUTO-SHUTDOWN CONTROL REGISTER 1


U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— AS6E AS5E AS4E AS3E AS2E AS1E AS0E
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 Unimplemented Read as ‘0’


bit 6 AS6E: CWG Auto-shutdown Source 6 Enable bit
1 = Auto-shutdown for Source 6 is enabled
CWG Module CWG1 CWG2 CWG3
Auto-shutdown Source 6 CLC2 OUT CLC3 OUT CLC4 OUT

0 = Auto-shutdown for Source 6 is disabled


bit 5 AS5E: CWG Auto-shutdown Source 5 (CMP2 OUT) Enable bit
1 = Auto-shutdown for CMP2 OUT is enabled
0 = Auto-shutdown for CMP2 OUT is disabled
bit 4 AS4E: CWG Auto-shutdown Source 4 (CMP1 OUT) Enable bit
1 = Auto-shutdown for CMP1 OUT is enabled
0 = Auto-shutdown for CMP1 OUT is disabled
bit 3 AS3E: CWG Auto-shutdown Source 3 (TMR6_Postscaled) Enable bit
1 = Auto-shutdown for TMR6_Postscaled is enabled
0 = Auto-shutdown for TMR6_Postscaled is disabled
bit 2 AS2E: CWG Auto-shutdown Source 2 (TMR4_Postscaled) Enable bit
1 = Auto-shutdown for TMR4_Postscaled is enabled
0 = Auto-shutdown for TMR4_Postscaled is disabled
bit 1 AS1E: CWG Auto-shutdown Source 1 (TMR2_Postscaled) Enable bit
1 = Auto-shutdown for TMR2_Postscaled is enabled
0 = Auto-shutdown for TMR2_Postscaled is disabled
bit 0 AS0E: CWG Auto-shutdown Source 0 (Pin selected by CWGxPPS) Enable bit
1 = Auto-shutdown for CWGxPPS Pin is enabled
0 = Auto-shutdown for CWGxPPS Pin is disabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 416


PIC18(L)F25/26K83

REGISTER 26-8: CWGxDBR: CWG RISING DEAD-BAND COUNT REGISTER


U-0 U-0 R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
— — DBR<5:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7-6 Unimplemented: Read as ‘0’


bit 5-0 DBR<5:0>: CWG Rising Edge Triggered Dead-Band Count bits
11 1111 = 63-64 CWG clock periods
11 1110 = 62-63 CWG clock periods
.
.
.
00 0010 = 2-3 CWG clock periods
00 0001 = 1-2 CWG clock periods
00 0000 = 0 CWG clock periods. Dead-band generation is by-passed

REGISTER 26-9: CWGxDBF: CWG FALLING DEAD-BAND COUNT REGISTER


U-0 U-0 R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
— — DBF<5:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7-6 Unimplemented: Read as ‘0’


bit 5-0 DBF<5:0>: CWG Falling Edge Triggered Dead-Band Count bits
11 1111 = 63-64 CWG clock periods
11 1110 = 62-63 CWG clock periods
.
.
.
00 0010 = 2-3 CWG clock periods
00 0001 = 1-2 CWG clock periods
00 0000 = 0 CWG clock periods. Dead-band generation is by-passed.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 417


PIC18(L)F25/26K83

TABLE 26-2: SUMMARY OF REGISTERS ASSOCIATED WITH CWG


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page
CWGxCON0 EN LD — — — MODE<2:0> 410
CWGxCON1 — — IN — POLD POLC POLB POLA 411
CWGxCLK — — — — — — — CS 412
CWGxISM — — — — — ISM<2:0> 413
CWGxSTR OVRD OVRC OVRB OVRA STRD STRC STRB STRA 414
CWGxAS0 SHUTDOWN REN LSBD<1:0> LSAC<1:0> — — 415
CWGxAS1 — AS6E AS5E AS4E AS3E AS2E AS1E AS0E 416
CWGxDBR — — DBR<5:0> 417
CWGxDBF — — DBF<5:0> 417
Legend: – = unimplemented locations read as ‘0’. Shaded cells are not used by CWG.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 418


PIC18(L)F25/26K83
27.0 CONFIGURABLE LOGIC CELL
(CLC)
The Configurable Logic Cell (CLCx) module provides
programmable logic that operates outside the speed
limitations of software execution. The logic cell takes up
to 32 input signals and, through the use of configurable
gates, reduces the 32 inputs to four logic lines that drive
one of eight selectable single-output logic functions.
Input sources are a combination of the following:
• I/O pins
• Internal clocks
• Peripherals
• Register bits
The output can be directed internally to peripherals and
to an output pin.
There are four CLC modules available on this device -
CLC1, CLC2, CLC3 and CLC4.
Note: The CLC1, CLC2, CLC3 and CLC4 are
four separate module instances of the
same CLC module design. Throughout
this section, the lower case ‘x’ in register
names is a generic reference to the CLC
number (which should be substituted with
1, 2, 3, or 4 during code development).
For example, the control register is gener-
ically described in this chapter as
CLCxCON, but the actual device registers
are CLC1CON, CLC2CON, CLC3CON
and CLC4CON.
Refer to Figure 27-1 for a simplified diagram showing
signal flow through the CLCx.
Possible configurations include:
• Combinatorial Logic
- AND
- NAND
- AND-OR
- AND-OR-INVERT
- OR-XOR
- OR-XNOR
• Latches
- S-R
- Clocked D with Set and Reset
- Transparent D with Set and Reset

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 419


PIC18(L)F25/26K83
FIGURE 27-1: CLCx SIMPLIFIED BLOCK DIAGRAM
Rev. 10-000025H
11/9/2016

OUT
D Q
CLCxOUT

Q1
LCx_in[0]
LCx_in[1] CLCx_out
to Peripherals
LCx_in[2]

Input Data Selection Gates(1)


. lcxg1
EN
CLCxPPS

. lcxg2

lcxg3
Logic
Function
(2)
lcxq
PPS CLCx

. lcxg4
POL TRIS

LCx_in[n-2] MODE<2:0> Interrupt


LCx_in[n-1] det
LCx_in[n]
INTP
set bit
INTN CLCxIF
Interrupt
det

Note 1: See Figure 27-2: Input Data Selection and Gating


2: See Figure 27-3: Programmable Logic Functions.

27.1 CLCx Setup Data inputs are selected with CLCxSEL0 through
CLCxSEL3 registers (Register 27-3 through
Programming the CLCx module is performed by Register 27-6).
configuring the four stages in the logic signal flow. The
four stages are: Note: Data selections are undefined at power-up.
• Data selection
• Data gating
• Logic function selection
• Output polarity
Each stage is setup at run time by writing to the corre-
sponding CLCx Special Function Registers. This has
the added advantage of permitting logic reconfiguration
on-the-fly during program execution.

27.1.1 DATA SELECTION


There are 32 signals available as inputs to the
configurable logic. Four 32-input multiplexers are used
to select the inputs to pass on to the next stage.
Data selection is through four multiplexers as indicated
on the left side of Figure 27-2. Data inputs in the figure
are identified by a generic numbered input name.
Table 27-1 correlates the generic input name to the
actual signal for each CLC module. The column labeled
‘DyS<4:0> Value’ indicates the MUX selection code for
the selected data input. DyS is an abbreviation for the
MUX select input codes: D1S<4:0> through D4S<4:0>.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 420


PIC18(L)F25/26K83
TABLE 27-1: CLCx DATA INPUT SELECTION
TABLE 27-1: CLCx DATA INPUT (CONTINUED)
SELECTION DyS<5:0>
CLCx Input Source
Value
DyS<5:0>
CLCx Input Source
Value 010001 [17] TMR5 _overflow
111111 [63] Reserved 010000 [16] TMR4 _out
 001111 [15] TMR3 _overflow
 001110 [14] TMR2 _out
 001101 [13] TMR1 _overflow
110110 [55] 001100 [12] TMR0 _overflow
110110 [54] CAN_tx1 001011 [11] CLKR _out
110101 [53] CAN_tx0 001010 [10] ADCRC
110100 [52] CWG3B_out 001001 [9] SOSC
110011 [51] CWG3A_out 001000 [8] MFINTOSC (32 kHz)
110010 [50] CWG2B_out 000111 [7] MFINTOSC (500 kHz)
110001 [49] CWG2A_out 000110 [6] LFINTOSC
110000 [48] CWG1B_out 000101 [5] HFINTOSC
101111 [47] CWG1A_out 000100 [4] FOSC
101110 [46] SS1 000011 [3] CLCIN3PPS
101101 [45] SCK1 000010 [2] CLCIN2PPS
101100 [44] SDO1 000001 [1] CLCIN1PPS
101011 [43] Reserved 000000 [0] CLCIN0PPS
101010 [42] UART2_tx_out
101001 [41] UART1_tx_out
101000 [40] CLC4_out
100111 [39] CLC3_out
100110 [38] CLC2_out
100101 [37] CLC1_out
100100 [36] DSM1_out
100011 [35] IOC_flag
100010 [34] ZCD_out
100001 [33] CMP2_out
100000 [32] CMP1_out
011111 [31] NCO1_out
011110 [30] Reserved
011101 [29] Reserved
011100 [28] PWM8_out
011011 [27] PWM7_out
011010 [26] PWM6_out
011001 [25] PWM5_out
011000 [24] CCP4_out
010111 [23] CCP3_out
010110 [22] CCP2_out
010101 [21] CCP1 _out
010100 [20] SMT2_out
010011 [19] SMT1_out
010010 [18] TMR6_out

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 421


PIC18(L)F25/26K83
27.1.2 DATA GATING Data gating is indicated in the right side of Figure 27-2.
Only one gate is shown in detail. The remaining three
Outputs from the input multiplexers are directed to the
gates are configured identically with the exception that
desired logic function input through the data gating
the data enables correspond to the enables for that
stage. Each data gate can direct any combination of the
gate.
four selected inputs.
Note: Data gating is undefined at power-up. 27.1.3 LOGIC FUNCTION
The gate stage is more than just signal direction. The There are eight available logic functions including:
gate can be configured to direct each input signal as • AND-OR
inverted or non-inverted data. Directed signals are • OR-XOR
ANDed together in each gate. The output of each gate
• AND
can be inverted before going on to the logic function
stage. • S-R Latch
• D Flip-Flop with Set and Reset
The gating is in essence a 1-to-4 input AND/NAND/OR/
NOR gate. When every input is inverted and the output • D Flip-Flop with Reset
is inverted, the gate is an OR of all enabled data inputs. • J-K Flip-Flop with Reset
When the inputs and output are not inverted, the gate • Transparent Latch with Set and Reset
is an AND or all enabled inputs. Logic functions are shown in Figure 27-2. Each logic
Table 27-2 summarizes the basic logic that can be function has four inputs and one output. The four inputs
obtained in gate 1 by using the gate logic select bits. are the four data gate outputs of the previous stage.
The table shows the logic of four input variables, but The output is fed to the inversion stage and from there
to other peripherals, an output pin, and back to the
each gate can be configured to use less than four. If
CLCx itself.
no inputs are selected, the output will be zero or one,
depending on the gate output polarity bit. 27.1.4 OUTPUT POLARITY
TABLE 27-2: DATA GATING LOGIC The last stage in the Configurable Logic Cell is the
output polarity. Setting the POL bit of the CLCxPOL
CLCxGLSy GyPOL Gate Logic register inverts the output signal from the logic stage.
0x55 1 AND Changing the polarity while the interrupts are enabled
will cause an interrupt for the resulting output transition.
0x55 0 NAND
0xAA 1 NOR
0xAA 0 OR
0x00 0 Logic 0
0x00 1 Logic 1
It is possible (but not recommended) to select both the
true and negated values of an input. When this is done,
the gate output is zero, regardless of the other inputs,
but may emit logic glitches (transient-induced pulses).
If the output of the channel must be zero or one, the
recommended method is to set all gate bits to zero and
use the gate polarity bit to set the desired level.
Data gating is configured with the logic gate select
registers as follows:
• Gate 1: CLCxGLS0 (Register 27-7)
• Gate 2: CLCxGLS1 (Register 27-8)
• Gate 3: CLCxGLS2 (Register 27-9)
• Gate 4: CLCxGLS3 (Register 27-10)
Register number suffixes are different than the gate
numbers because other variations of this module have
multiple gate selections in the same register.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 422


PIC18(L)F25/26K83
27.2 CLCx Interrupts 27.6 CLCx Setup Steps
An interrupt will be generated upon a change in the The following steps should be followed when setting up
output value of the CLCx when the appropriate interrupt the CLCx:
enables are set. A rising edge detector and a falling • Disable CLCx by clearing the EN bit.
edge detector are present in each CLC for this purpose.
• Select desired inputs using CLCxSEL0 through
The CLCxIF bit of the associated PIR5 register will be CLCxSEL3 registers (See Table 27-1).
set when either edge detector is triggered and its asso- • Clear any associated ANSEL bits.
ciated enable bit is set. The INTP enables rising edge • Set all TRIS bits associated with inputs.
interrupts and the INTN bit enables falling edge inter-
• Clear all TRIS bits associated with outputs.
rupts. Both are located in the CLCxCON register.
• Enable the chosen inputs through the four gates
To fully enable the interrupt, set the following bits: using CLCxGLS0, CLCxGLS1, CLCxGLS2, and
• CLCxIE bit of the respective PIE register CLCxGLS3 registers.
• INTP bit of the CLCxCON register (for a rising • Select the gate output polarities with the GyPOL
edge detection) bits of the CLCxPOL register.
• INTN bit of the CLCxCON register (for a falling • Select the desired logic function with the
edge detection) MODE<2:0> bits of the CLCxCON register.
• GIE bits of the INTCON0 register • Select the desired polarity of the logic output with
The CLCxIF bit of the respective PIR register, must be the POL bit of the CLCxPOL register. (This step
cleared in software as part of the interrupt service. If may be combined with the previous gate output
another edge is detected while this flag is being polarity step).
cleared, the flag will still be set at the end of the • If driving a device pin, set the desired pin PPS
sequence. control register and also clear the TRIS bit
corresponding to that output.
27.3 Output Mirror Copies • If interrupts are desired, configure the following
bits:
Mirror copies of all CON output bits are contained in the - Set the INTP bit in the CLCxCON register for
CLCxDATA register. Reading this register reads the rising event.
outputs of all CLCs simultaneously. This prevents any
- Set the INTN bit in the CLCxCON register for
reading skew introduced by testing or reading the OUT
falling event.
bits in the individual CLCxCON registers.
- Set the CLCxIE bit of the respective PIE
register.
27.4 Effects of a Reset
- Set the GIE bits of the INTCON0 register.
The CLCxCON register is cleared to zero as the result • Enable the CLCx by setting the EN bit of the
of a Reset. All other selection and gating values remain CLCxCON register.
unchanged.

27.5 Operation During Sleep


The CLC module operates independently from the
system clock and will continue to run during Sleep,
provided that the input sources selected remain active.
The HFINTOSC remains active during Sleep when the
CLC module is enabled and the HFINTOSC is
selected as an input source, regardless of the system
clock source selected.
In other words, if the HFINTOSC is simultaneously
selected as the system clock and as a CLC input
source, when the CLC is enabled, the CPU will go Idle
during Sleep, but the CLC will continue to operate and
the HFINTOSC will remain active.
This will have a direct effect on the Sleep mode current.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 423


PIC18(L)F25/26K83
FIGURE 27-2: INPUT DATA SELECTION AND GATING

Data Selection
LCx_in[0] 000000

Data GATE 1

d1T G1D1T

d1N G1D1N
LCx_in[n] 111111
G1D2T
D1S<5:0>

G1D2N lcxg1
LCx_in[0] 000000

G1D3T
G1POL
d2T
G1D3N
d2N
G1D4T
LCx_in[n] 111111

D2S<5:0> G1D4N

LCx_in[0] 000000
Data GATE 2
lcxg2
d3T
(Same as Data GATE 1)
d3N
Data GATE 3
LCx_in[n] 111111
lcxg3
D3S<5:0>
(Same as Data GATE 1)

LCx_in[0] 000000 Data GATE 4


lcxg4

d4T (Same as Data GATE 1)

d4N

LCx_in[n] 111111

D4S<5:0>

Note: All controls are undefined at power-up.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 424


PIC18(L)F25/26K83
FIGURE 27-3: PROGRAMMABLE LOGIC FUNCTIONS
Rev. 10-000122B
9/13/2016

AND-OR OR-XOR

lcxg1 lcxg1

lcxg2 lcxg2
lcxq lcxq
lcxg3 lcxg3

lcxg4 lcxg4

MODE<2:0> = 000 MODE<2:0> = 001


4-input AND S-R Latch

lcxg1 lcxg1
S Q lcxq
lcxg2
lcxg2
lcxq
lcxg3
lcxg3
R
lcxg4 lcxg4

MODE<2:0> = 010 MODE<2:0> = 011


1-Input D Flip-Flop with S and R 2-Input D Flip-Flop with R
lcxg4
S
lcxg4
lcxg2 D Q lcxq D Q lcxq
lcxg2

lcxg1 R
lcxg1 R
lcxg3 lcxg3

MODE<2:0> = 100 MODE<2:0> = 101


J-K Flip-Flop with R 1-Input Transparent Latch with S and R
lcxg4
lcxg2 J Q lcxq S
lcxg2 D Q lcxq
lcxg1
lcxg4 K
R
lcxg3 LE
R
lcxg3
lcxg1

MODE<2:0> = 110 MODE<2:0> = 111

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 425


PIC18(L)F25/26K83
27.7 Register Definitions: CLC Control

REGISTER 27-1: CLCxCON: CONFIGURABLE LOGIC CELL CONTROL REGISTER


R/W-0/0 U-0 R-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
EN — OUT INTP INTN MODE<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 EN: Configurable Logic Cell Enable bit


1 = Configurable logic cell is enabled and mixing input signals
0 = Configurable logic cell is disabled and has logic zero output
bit 6 Unimplemented: Read as ‘0’
bit 5 OUT: Configurable Logic Cell Data Output bit
Read-only: logic cell output data, after LCPOL; sampled from CLCxOUT
bit 4 INTP: Configurable Logic Cell Positive Edge Going Interrupt Enable bit
1 = CLCxIF will be set when a rising edge occurs on CLCxOUT
0 = CLCxIF will not be set
bit 3 INTN: Configurable Logic Cell Negative Edge Going Interrupt Enable bit
1 = CLCxIF will be set when a falling edge occurs on CLCxOUT
0 = CLCxIF will not be set
bit 2-0 MODE<2:0>: Configurable Logic Cell Functional Mode bits
111 = Cell is 1-input transparent latch with S and R
110 = Cell is J-K flip-flop with R
101 = Cell is 2-input D flip-flop with R
100 = Cell is 1-input D flip-flop with S and R
011 = Cell is S-R latch
010 = Cell is 4-input AND
001 = Cell is OR-XOR
000 = Cell is AND-OR

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 426


PIC18(L)F25/26K83

REGISTER 27-2: CLCxPOL: SIGNAL POLARITY CONTROL REGISTER


R/W-0/0 U-0 U-0 U-0 R/W-x/u R/W-x/u R/W-x/u R/W-x/u
POL — — — G4POL G3POL G2POL G1POL
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 POL: CLCxOUT Output Polarity Control bit


1 = The output of the logic cell is inverted
0 = The output of the logic cell is not inverted
bit 6-4 Unimplemented: Read as ‘0’
bit 3 G4POL: Gate 3 Output Polarity Control bit
1 = The output of gate 3 is inverted when applied to the logic cell
0 = The output of gate 3 is not inverted
bit 2 G3POL: Gate 2 Output Polarity Control bit
1 = The output of gate 2 is inverted when applied to the logic cell
0 = The output of gate 2 is not inverted
bit 1 G2POL: Gate 1 Output Polarity Control bit
1 = The output of gate 1 is inverted when applied to the logic cell
0 = The output of gate 1 is not inverted
bit 0 G1POL: Gate 0 Output Polarity Control bit
1 = The output of gate 0 is inverted when applied to the logic cell
0 = The output of gate 0 is not inverted

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 427


PIC18(L)F25/26K83

REGISTER 27-3: CLCxSEL0: GENERIC CLCx DATA 0 SELECT REGISTER


U-0 U-0 R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
— — D1S<5:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 Unimplemented: Read as ‘0’


bit 5-0 D1S<5:0>: CLCx Data1 Input Selection bits
See Table 27-1.

REGISTER 27-4: CLCxSEL1: GENERIC CLCx DATA 1 SELECT REGISTER


U-0 U-0 R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
— — D2S<5:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 Unimplemented: Read as ‘0’


bit 5-0 D2S<5:0>: CLCx Data 2 Input Selection bits
See Table 27-1.

REGISTER 27-5: CLCxSEL2: GENERIC CLCx DATA 2 SELECT REGISTER


U-0 U-0 R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
— — D3S<5:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 Unimplemented: Read as ‘0’


bit 5-0 D3S<5:0>: CLCx Data 3 Input Selection bits
See Table 27-1.

REGISTER 27-6: CLCxSEL3: GENERIC CLCx DATA 3 SELECT REGISTER


U-0 U-0 R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
— — D4S<5:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 Unimplemented: Read as ‘0’


bit 5-0 D4S<5:0>: CLCx Data 4 Input Selection bits
See Table 27-1.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 428


PIC18(L)F25/26K83

REGISTER 27-7: CLCxGLS0: GATE 0 LOGIC SELECT REGISTER


R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
G1D4T G1D4N G1D3T G1D3N G1D2T G1D2N G1D1T G1D1N
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 G1D4T: Gate 0 Data 4 True (non-inverted) bit


1 = CLCIN3 (true) is gated into CLCx Gate 0
0 = CLCIN3 (true) is not gated into CLCx Gate 0
bit 6 G1D4N: Gate 0 Data 4 Negated (inverted) bit
1 = CLCIN3 (inverted) is gated into CLCx Gate 0
0 = CLCIN3 (inverted) is not gated into CLCx Gate 0
bit 5 G1D3T: Gate 0 Data 3 True (non-inverted) bit
1 = CLCIN2 (true) is gated into CLCx Gate 0
0 = CLCIN2 (true) is not gated into CLCx Gate 0
bit 4 G1D3N: Gate 0 Data 3 Negated (inverted) bit
1 = CLCIN2 (inverted) is gated into CLCx Gate 0
0 = CLCIN2 (inverted) is not gated into CLCx Gate 0
bit 3 G1D2T: Gate 0 Data 2 True (non-inverted) bit
1 = CLCIN1 (true) is gated into CLCx Gate 0
0 = CLCIN1 (true) is not gated into l CLCx Gate 0
bit 2 G1D2N: Gate 0 Data 2 Negated (inverted) bit
1 = CLCIN1 (inverted) is gated into CLCx Gate 0
0 = CLCIN1 (inverted) is not gated into CLCx Gate 0
bit 1 G1D1T: Gate 0 Data 1 True (non-inverted) bit
1 = CLCIN0 (true) is gated into CLCx Gate 0
0 = CLCIN0 (true) is not gated into CLCx Gate 0
bit 0 G1D1N: Gate 0 Data 1 Negated (inverted) bit
1 = CLCIN0 (inverted) is gated into CLCx Gate 0
0 = CLCIN0 (inverted) is not gated into CLCx Gate 0

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 429


PIC18(L)F25/26K83

REGISTER 27-8: CLCxGLS1: GATE 1 LOGIC SELECT REGISTER


R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
G2D4T G2D4N G2D3T G2D3N G2D2T G2D2N G2D1T G2D1N
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 G2D4T: Gate 1 Data 4 True (noninverted) bit


1 = CLCIN3 (true) is gated into CLCx Gate 1
0 = CLCIN3 (true) is not gated into CLCx Gate 1
bit 6 G2D4N: Gate 1 Data 4 Negated (inverted) bit
1 = CLCIN3 (inverted) is gated into CLCx Gate 1
0 = CLCIN3 (inverted) is not gated into CLCx Gate 1
bit 5 G2D3T: Gate 1 Data 3 True (noninverted) bit
1 = CLCIN2 (true) is gated into CLCx Gate 1
0 = CLCIN2 (true) is not gated into CLCx Gate 1
bit 4 G2D3N: Gate 1 Data 3 Negated (inverted) bit
1 = CLCIN2 (inverted) is gated into CLCx Gate 1
0 = CLCIN2 (inverted) is not gated into CLCx Gate 1
bit 3 G2D2T: Gate 1 Data 2 True (noninverted) bit
1 = CLCIN1 (true) is gated into CLCx Gate 1
0 = CLCIN1 (true) is not gated into CLCx Gate 1
bit 2 G2D2N: Gate 1 Data 2 Negated (inverted) bit
1 = CLCIN1 (inverted) is gated into CLCx Gate 1
0 = CLCIN1 (inverted) is not gated into CLCx Gate 1
bit 1 G2D1T: Gate 1 Data 1 True (noninverted) bit
1 = CLCIN0 (true) is gated into CLCx Gate 1
0 = CLCIN0 (true) is not gated into CLCx Gate1
bit 0 G2D1N: Gate 1 Data 1 Negated (inverted) bit
1 = CLCIN0 (inverted) is gated into CLCx Gate 1
0 = CLCIN0 (inverted) is not gated into CLCx Gate 1

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 430


PIC18(L)F25/26K83

REGISTER 27-9: CLCxGLS2: GATE 2 LOGIC SELECT REGISTER


R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
G3D4T G3D4N G3D3T G3D3N G3D2T G3D2N G3D1T G3D1N
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 G3D4T: Gate 2 Data 4 True (noninverted) bit


1 = CLCIN3 (true) is gated into CLCx Gate 2
0 = CLCIN3 (true) is not gated into CLCx Gate 2
bit 6 G3D4N: Gate 2 Data 4 Negated (inverted) bit
1 = CLCIN3 (inverted) is gated into CLCx Gate 2
0 = CLCIN3 (inverted) is not gated into CLCx Gate 2
bit 5 G3D3T: Gate 2 Data 3 True (noninverted) bit
1 = CLCIN2 (true) is gated into CLCx Gate 2
0 = CLCIN2 (true) is not gated into CLCx Gate 2
bit 4 G3D3N: Gate 2 Data 3 Negated (inverted) bit
1 = CLCIN2 (inverted) is gated into CLCx Gate 2
0 = CLCIN2 (inverted) is not gated into CLCx Gate 2
bit 3 G3D2T: Gate 2 Data 2 True (noninverted) bit
1 = CLCIN1 (true) is gated into CLCx Gate 2
0 = CLCIN1 (true) is not gated into CLCx Gate 2
bit 2 G3D2N: Gate 2 Data 2 Negated (inverted) bit
1 = CLCIN1 (inverted) is gated into CLCx Gate 2
0 = CLCIN1 (inverted) is not gated into CLCx Gate 2
bit 1 G3D1T: Gate 2 Data 1 True (noninverted) bit
1 = CLCIN0 (true) is gated into CLCx Gate 2
0 = CLCIN0 (true) is not gated into CLCx Gate 2
bit 0 G3D1N: Gate 2 Data 1 Negated (inverted) bit
1 = CLCIN0 (inverted) is gated into CLCx Gate 2
0 = CLCIN0 (inverted) is not gated into CLCx Gate 2

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 431


PIC18(L)F25/26K83

REGISTER 27-10: CLCxGLS3: GATE 3 LOGIC SELECT REGISTER


R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
G4D4T G4D4N G4D3T G4D3N G4D2T G4D2N G4D1T G4D1N
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 G4D4T: Gate 3 Data 4 True (non-inverted) bit


1 = CLCIN3 (true) is gated into CLCx Gate 3
0 = CLCIN3 (true) is not gated into CLCx Gate 3
bit 6 G4D4N: Gate 3 Data 4 Negated (inverted) bit
1 = CLCIN3 (inverted) is gated into CLCx Gate 3
0 = CLCIN3 (inverted) is not gated into CLCx Gate 3
bit 5 G4D3T: Gate 3 Data 3 True (non-inverted) bit
1 = CLCIN2 (true) is gated into CLCx Gate 3
0 = CLCIN2 (true) is not gated into CLCx Gate 3
bit 4 G4D3N: Gate 3 Data 3 Negated (inverted) bit
1 = CLCIN2 (inverted) is gated into CLCx Gate 3
0 = CLCIN2 (inverted) is not gated into CLCx Gate 3
bit 3 G4D2T: Gate 3 Data 2 True (non-inverted) bit
1 = CLCIN1 (true) is gated into CLCx Gate 3
0 = CLCIN1 (true) is not gated into CLCx Gate 3
bit 2 G4D2N: Gate 3 Data 2 Negated (inverted) bit
1 = CLCIN1 (inverted) is gated into CLCx Gate 3
0 = CLCIN1 (inverted) is not gated into CLCx Gate 3
bit 1 G4D1T: Gate 4 Data 1 True (non-inverted) bit
1 = CLCIN0 (true) is gated into CLCx Gate 3
0 = CLCIN0 (true) is not gated into CLCx Gate 3
bit 0 G4D1N: Gate 3 Data 1 Negated (inverted) bit
1 = CLCIN0 (inverted) is gated into CLCx Gate 3
0 = CLCIN0 (inverted) is not gated into CLCx Gate 3

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 432


PIC18(L)F25/26K83

REGISTER 27-11: CLCDATA: CLC DATA OUTPUT


U-0 U-0 U-0 U-0 R-0 R-0 R-0 R-0
— — — — CLC4OUT CLC3OUT CLC2OUT CLC1OUT
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-4 Unimplemented: Read as ‘0’


bit 3 CLC4OUT: Mirror copy of OUT bit of CLC4CON register
bit 2 CLC3OUT: Mirror copy of OUT bit of CLC3CON register
bit 1 CLC2OUT: Mirror copy of OUT bit of CLC2CON register
bit 0 CLC1OUT: Mirror copy of OUT bit of CLC1CON register

TABLE 27-3: SUMMARY OF REGISTERS ASSOCIATED WITH CLCx

Register on
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Page

CLCxCON EN ― OUT INTP INTN MODE<2:0> <Blue>426


CLCxPOL POL ― ― ― G4POL G3POL G2POL G1POL <Blue>427
CLCxSEL0 ― ― D1S<5:0> <Blue>428
CLCxSEL1 ― ― D2S<5:0> <Blue>428
CLCxSEL2 ― ― D3S<5:0> <Blue>428
CLCxSEL3 ― ― D4S<5:0> <Blue>428
CLCxGLS0 G1D4T G1D4N G1D3T G1D3N G1D2T G1D2N G1D1T G1D1N <Blue>429
CLCxGLS1 G2D4T G2D4N G2D3T G2D3N G2D2T G2D2N G2D1T G2D1N <Blue>430
CLCxGLS2 G3D4T G3D4N G3D3T G3D3N G3D2T G3D2N G3D1T G3D1N <Blue>431
CLCxGLS3 G4D4T G4D4N G4D3T G4D3N G4D2T G4D2N G4D1T G4D1N <Blue>432
CLCDATA ― ― ― ― CLC4OUT CLC3OUT CLC2OUT CLC1OUT <Blue>433
Legend: — = unimplemented, read as ‘0’. Shaded cells are unused by the CLCx modules.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 433


PIC18(L)F25/26K83
28.0 NUMERICALLY CONTROLLED
OSCILLATOR (NCO) MODULE
The Numerically Controlled Oscillator (NCO) module is
a timer that uses overflow from the addition of an
increment value to divide the input frequency. The
advantage of the addition method over simple counter
driven timer is that the output frequency resolution
does not vary with the divider value. The NCO is most
useful for application that requires frequency accuracy
and fine resolution at a fixed duty cycle.
Features of the NCO include:
• 20-bit Increment Function
• Fixed Duty Cycle mode (FDC) mode
• Pulse Frequency (PF) mode
• Output Pulse-Width Control
• Multiple Clock Input Sources
• Output Polarity Control
• Interrupt Capability
Figure 28-1 is a simplified block diagram of the NCO
module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 434


FIGURE 28-1: DIRECT DIGITAL SYNTHESIS MODULE SIMPLIFIED BLOCK DIAGRAM
 2017 Microchip Technology Inc.

PIC18(L)F25/26K83
NCOxINCU NCOxINCH NCOxINCL Rev. 10-000028E
10/12/2016
20
(1)
INCBUFU INCBUFH INCBUFL
20
20
1111

NCO_overflow Adder
NCOx Clock 20
Sources
NCOx_clk
NCOxACCU NCOxACCH NCOxACCL
See 20
NCOxCLK
Register
NCO_interrupt set bit
NCOxIF
0000
Preliminary

Fixed Duty
Cycle Mode
Circuitry
CKS<3:0> D Q D Q 0 TRIS bit
4

_ NCOxOUT
1
Q

PFM POL

NCOx_out
To Peripherals

EN S Q

_ D Q OUT
Ripple
R Q
Counter

Pulse Q1
DS40001943A-page 435

R Frequency
3 Mode Circuitry
PWS<2:0>

Note 1: The increment registers are double-buffered to allow for value changes to be made without first disabling the NCO module. The full increment value is loaded into the buffer registers on the
second rising edge of the NCOx_clk signal that occurs immediately after a write to NCOxINCL register. The buffers are not user-accessible and are shown here for reference.
PIC18(L)F25/26K83
28.1 NCO Operation
The NCO operates by repeatedly adding a fixed value to
an accumulator. Additions occur at the input clock rate.
The accumulator will overflow with a carry periodically,
which is the raw NCO output (NCO_overflow). This
effectively reduces the input clock by the ratio of the
addition value to the maximum accumulator value. See
Equation 28-1.
The NCO output can be further modified by stretching
the pulse or toggling a flip-flop. The modified NCO
output is then distributed internally to other peripherals
and can be optionally output to a pin. The accumulator
overflow also generates an interrupt (NCO_overflow).
The NCO period changes in discrete steps to create an
average frequency. This output depends on the ability
of the receiving circuit (i.e., CWG or external resonant
converter circuitry) to average the NCO output to
reduce uncertainty.

EQUATION 28-1: NCO OVERFLOW FREQUENCY

NCO Clock Frequency  Increment Value


F OVERFLOW = ---------------------------------------------------------------------------------------------------------------
20
-
2

28.1.1 NCO CLOCK SOURCES 28.1.4 INCREMENT REGISTERS


Clock sources available to the NCO include: The increment value is stored in three registers making
• FOSC up a 20-bit incrementer. In order of LSB to MSB they
• HFINTOSC are:
• LFINTOSC • NCO1INCL
• MFINTOSC/4 (32 kHz) • NCO1INCH
• MFINTOSC (500 kHz) • NCO1INCU
• CLC1/2/3/4_out
• CLKREF When the NCO module is enabled, the NCO1INCU and
• SOSC NCO1INCH registers should be written first, then the
NCO1INCL register. Writing to the NCO1INCL register
The NCO clock source is selected by configuring the initiates the increment buffer registers to be loaded
N1CKS<2:0> bits in the NCO1CLK register. simultaneously on the second rising edge of the
NCO_clk signal.
28.1.2 ACCUMULATOR
The registers are readable and writable. The increment
The accumulator is a 20-bit register. Read and write
registers are double-buffered to allow value changes to
access to the accumulator is available through three
be made without first disabling the NCO module.
registers:
When the NCO module is disabled, the increment
• NCO1ACCL
buffers are loaded immediately after a write to the
• NCO1ACCH increment registers.
• NCO1ACCU

28.1.3 ADDER Note: The increment buffer registers are not user-
The NCO Adder is a full adder, which operates accessible.
independently from the source clock. The addition of
the previous result and the increment value replaces
the accumulator value on the rising edge of each input
clock.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 436


PIC18(L)F25/26K83
28.2 FIXED DUTY CYCLE MODE 28.5 Interrupts
In Fixed Duty Cycle (FDC) mode, every time the When the accumulator overflows (NCO_overflow), the
accumulator overflows (NCO_overflow), the output is NCO Interrupt Flag bit, NCO1IF, of the PIR4 register is
toggled. This provides a 50% duty cycle, provided that set. To enable the interrupt event (NCO_interrupt), the
the increment value remains constant. For more following bits must be set:
information, see Figure 28-2. • EN bit of the NCO1CON register
• NCO1IE bit of the PIE4 register
28.3 PULSE FREQUENCY MODE • GIE/GIEH bit of the INTCON0 register
In Pulse Frequency (PF) mode, every time the The interrupt must be cleared by software by clearing
Accumulator overflows, the output becomes active for the NCO1IF bit in the Interrupt Service Routine.
one or more clock periods. Once the clock period
expires, the output returns to an inactive state. This 28.6 Effects of a Reset
provides a pulsed output. The output becomes active
on the rising clock edge immediately following the All of the NCO registers are cleared to zero as the
overflow event. For more information, see Figure 28-2. result of a Reset.

The value of the active and inactive states depends on


the polarity bit, POL in the NCO1CON register.
28.7 Operation in Sleep
The PF mode is selected by setting the PFM bit in the The NCO module operates independently from the
NCO1CON register. system clock and will continue to run during Sleep,
provided that the clock source selected remains active.
28.3.1 OUTPUT PULSE-WIDTH CONTROL The HFINTOSC remains active during Sleep when the
When operating in PF mode, the active state of the out- NCO module is enabled and the HFINTOSC is
put can vary in width by multiple clock periods. Various selected as the clock source, regardless of the system
pulse widths are selected with the PWS<2:0> bits in the clock source selected.
NCO1CLK register. In other words, if the HFINTOSC is simultaneously
When the selected pulse width is greater than the selected as the system clock and the NCO clock
Accumulator overflow time frame, then DDS operation source, when the NCO is enabled, the CPU will go Idle
is undefined. during Sleep, but the NCO will continue to operate and
the HFINTOSC will remain active.
28.4 OUTPUT POLARITY CONTROL This will have a direct effect on the Sleep mode current.
The last stage in the NCO module is the output polarity.
The POL bit in the NCO1CON register selects the
output polarity. Changing the polarity while the
interrupts are enabled will cause an interrupt for the
resulting output transition. The NCO output signal is
available to most of the other peripherals available on
the device.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 437


PIC18(L)F25/26K83
FIGURE 28-2: FDC OUTPUT MODE OPERATION DIAGRAM
Rev. 10-000029A
11/7/2013

NCOx
Clock
Source

NCOx
Increment 4000h 4000h 4000h
Value

NCOx
Accumulator 00000h 04000h 08000h FC000h 00000h 04000h 08000h FC000h 00000h 04000h 08000h
Value

NCO_overflow

NCO_interrupt

NCOx Output
FDC Mode

NCOx Output
PF Mode
NCOxPWS =
000

NCOx Output
PF Mode
NCOxPWS =
001

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 438


PIC18(L)F25/26K83
28.8 NCO Control Registers

REGISTER 28-1: NCO1CON: NCO CONTROL REGISTER


R/W-0/0 U-0 R-0/0 R/W-0/0 U-0 U-0 U-0 R/W-0/0
EN — OUT POL — — — PFM
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 EN: NCO1 Enable bit


1 = NCO1 module is enabled
0 = NCO1 module is disabled
bit 6 Unimplemented: Read as ‘0’
bit 5 OUT: NCO1 Output bit
Displays the current output value of the NCO1 module.
bit 4 POL: NCO1 Polarity
1 = NCO1 output signal is inverted
0 = NCO1 output signal is not inverted
bit 3-1 Unimplemented: Read as ‘0’
bit 0 PFM: NCO1 Pulse Frequency Mode bit
1 = NCO1 operates in Pulse Frequency mode
0 = NCO1 operates in Fixed Duty Cycle mode, divide by 2

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 439


PIC18(L)F25/26K83
REGISTER 28-2: NCO1CLK: NCO1 INPUT CLOCK CONTROL REGISTER
R/W-0/0 R/W-0/0 R/W-0/0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
PWS<2:0>(1,2) — CKS<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-5 PWS<2:0>: NCO1 Output Pulse Width Select bits(1,2)


111 = NCO1 output is active for 128 input clock periods
110 = NCO1 output is active for 64 input clock periods
101 = NCO1 output is active for 32 input clock periods
100 = NCO1 output is active for 16 input clock periods
011 = NCO1 output is active for 8 input clock periods
010 = NCO1 output is active for 4 input clock periods
001 = NCO1 output is active for 2 input clock periods
000 = NCO1 output is active for 1 input clock period
bit 4 Unimplemented: Read as ‘0’
bit 3-0 CKS<3:0>: NCO1 Clock Source Select bits
1111 = Reserved



1011 = Reserved
1010 = CLC4_out
1001 = CLC3_out
1000 = CLC2_out
0111 = CLC1_out
0110 = CLKREF_out
0101 = SOSC
0100 = MFINTOSC/4 (32 kHz)
0011 = MFINTOSC (500 kHz)
0010 = LFINTOSC
0001 = HFINTOSC
0000 = FOSC

Note 1: N1PWS applies only when operating in Pulse Frequency mode.


2: If NCO1 pulse width is greater than NCO1 overflow period, operation is undefined.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 440


PIC18(L)F25/26K83
REGISTER 28-3: NCO1ACCL: NCO1 ACCUMULATOR REGISTER – LOW BYTE
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
ACC<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 ACC<7:0>: NCO1 Accumulator, Low Byte

REGISTER 28-4: NCO1ACCH: NCO1 ACCUMULATOR REGISTER – HIGH BYTE


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
ACC<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 ACC<15:8>: NCO1 Accumulator, High Byte

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 441


PIC18(L)F25/26K83
REGISTER 28-5: NCO1ACCU: NCO1 ACCUMULATOR REGISTER – UPPER BYTE(1)
U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — ACC<19:16>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-4 Unimplemented: Read as ‘0’


bit 3-0 ACC<19:16>: NCO1 Accumulator, Upper Byte

Note 1: The accumulator spans registers NCO1ACCU:NCO1ACCH: NCO1ACCL. The 24 bits are reserved but
not all are used.This register updates in real time, asynchronously to the CPU; there is no provision to
guarantee atomic access to this 24-bit space using an 8-bit bus. Writing to this register while the module is
operating will produce undefined results.

REGISTER 28-6: NCO1INCL: NCO1 INCREMENT REGISTER – LOW BYTE(1,2)


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-1/1
INC<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 INC<7:0>: NCO1 Increment, Low Byte

Note 1: The logical increment spans NCO1INCU:NCO1INCH:NCO1INCL.


2: NCO1INC is double-buffered as INCBUF; INCBUF is updated on the next falling edge of NCOCLK after
writing to NCO1INCL; NCO1INCU and NCO1INCH should be written prior to writing NCO1INCL.

REGISTER 28-7: NCO1INCH: NCO1 INCREMENT REGISTER – HIGH BYTE(1)


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
INC<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 INC<15:8>: NCO1 Increment, High Byte

Note 1: The logical increment spans NCO1INCU:NCO1INCH:NCO1INCL.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 442


PIC18(L)F25/26K83
REGISTER 28-8: NCO1INCU: NCO1 INCREMENT REGISTER – UPPER BYTE(1)
U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
INC<19:6>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-4 Unimplemented: Read as ‘0’


bit 3-0 INC<19:16>: NCO1 Increment, Upper Byte

Note 1: The logical increment spans NCO1INCU:NCO1INCH:NCO1INCL.

TABLE 28-1: SUMMARY OF REGISTERS ASSOCIATED WITH NCO

Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page

NCO1CON N1EN ― N1OUT N1POL ― ― ― N1PFM 439


NCO1CLK N1PWS<2:0> ― ― N1CKS<2:0> 440
NCO1ACCL NCO1ACC<7:0> 441
NCO1ACCH NCO1ACC<15:8> 441
NCO1ACCU ― ― ― ― NCO1ACC<19:16> 442
NCO1INCL NCO1INC<7:0> 442
NCO1INCH NCO1INC<15:8> 442
NCO1INCU ― ― ― ― NCO1INC<19:16> 443
Legend: — = unimplemented read as ‘0’. Shaded cells are not used for NCO module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 443


PIC18(L)F25/26K83
29.0 ZERO-CROSS DETECTION 29.1 External Resistor Selection
(ZCD) MODULE The ZCD module requires a current-limiting resistor in
The ZCD module detects when an A/C signal crosses series with the external voltage source. The impedance
through the ground potential. The actual zero-crossing and rating of this resistor depends on the external
threshold is the zero-crossing reference voltage, source peak voltage. Select a resistor value that will
VCPINV, which is typically 0.75V above ground. drop all of the peak voltage when the current through
the resistor is nominally 300 A. Refer to Equation 29-
The connection to the signal to be detected is through 1 and Figure 29-1. Make sure that the ZCD I/O pin
a series current-limiting resistor. The module applies a internal weak pull-up is disabled so it does not interfere
current source or sink to the ZCD pin to maintain a with the current source and sink.
constant voltage on the pin, thereby preventing the pin
voltage from forward biasing the ESD protection
EQUATION 29-1: EXTERNAL RESISTOR
diodes. When the applied voltage is greater than the
reference voltage, the module sinks current. When the
applied voltage is less than the reference voltage, the V PEAK
module sources current. The current source and sink R SERIES = ----------------
–4
-
action keeps the pin voltage constant over the full 3 10
range of the applied voltage. The ZCD module is
shown in the simplified block diagram Figure 29-2.
The ZCD module is useful when monitoring an A/C
waveform for, but not limited to, the following purposes: FIGURE 29-1: EXTERNAL VOLTAGE
• A/C period measurement VMAXPEAK
• Accurate long term time measurement VPEAK VMINPEAK
• Dimmer phase delayed drive
• Low EMI cycle switching

VCPINV

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 444


PIC18(L)F25/26K83
FIGURE 29-2: SIMPLIFIED ZCD BLOCK DIAGRAM

VPULLUP Rev. 10-000194E


9/13/2016

optional

VDD RPULLUP

- ZCDxIN RSERIES

External
Zcpinv + RPULLDOWN voltage
source

optional

ZCD Output for other modules

POL

OUT pin

Interrupt
det
INTP Set
ZCDxIF
INTN flag
Interrupt
det

29.2 ZCD Logic Output 29.3 ZCD Logic Polarity


The ZCD module includes a Status bit, which can be The POL bit of the ZCDCON register inverts the OUT
read to determine whether the current source or sink is bit relative to the current source and sink output. When
active. The OUT bit of the ZCDCON register is set the POL bit is set, a OUT high indicates that the current
when the current sink is active, and cleared when the source is active, and a low output indicates that the
current source is active. The OUT bit is affected by the current sink is active.
polarity bit, even if the module is disabled. The POL bit affects the ZCD interrupts.
The OUT signal can also be used as input to other
modules. This is controlled by the registers of the
corresponding module. OUT can be used as follows:
• Gate source for TMR1/3/5
• Clock source for TMR2/4/6
• Reset source for TMR2/4/6

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 445


PIC18(L)F25/26K83
29.4 ZCD Interrupts 29.5 Correcting for VCPINV offset
An interrupt will be generated upon a change in the The actual voltage at which the ZCD switches is the
ZCD logic output when the appropriate interrupt reference voltage at the noninverting input of the ZCD
enables are set. A rising edge detector and a falling op amp. For external voltage source waveforms other
edge detector are present in the ZCD for this purpose. than square waves, this voltage offset from zero
The ZCDIF bit of the respective PIR register will be set causes the zero-cross event to occur either too early or
when either edge detector is triggered and its associ- too late. When the waveform is varying relative to VSS,
ated enable bit is set. The INTP enables rising edge then the zero cross is detected too early as the
interrupts and the INTN bit enables falling edge inter- waveform falls and too late as the waveform rises.
rupts. Both are located in the ZCDCON register. Priority When the waveform is varying relative to VDD, then the
of the interrupt can be changed if the IPEN bit of the zero cross is detected too late as the waveform rises
INTCON register is set. The ZCD interrupt can be and too early as the waveform falls. The actual offset
made high or low priority by setting or clearing the time can be determined for sinusoidal waveforms with
ZCDIP bit of the respective IPR register. the corresponding equations shown in Equation 29-2.

To fully enable the interrupt, the following bits must be set:


EQUATION 29-2: ZCD EVENT OFFSET
• ZCDIE bit of the respective PIE register
• INTP bit of the ZCDCON register When External Voltage Source is relative to VSS:
(for a rising edge detection)
asin  -------------------
• INTN bit of the ZCDCON register
V CPINV
(for a falling edge detection) V PEAK
T OFFSET = -----------------------------------
• GIE bits of the INTCON0 register 2  Freq
Changing the POL bit can cause an interrupt,
regardless of the level of the SEN bit. When External Voltage Source is relative to VDD:
The ZCDIF bit of the respective PIR register must be
cleared in software as part of the interrupt service. If
asin  ---------------------------------
V DD – V CPINV
another edge is detected while this flag is being
cleared, the flag will still be set at the end of the V PEAK
T OFFSET = -------------------------------------------------
sequence. 2  Freq

This offset time can be compensated for by adding a


pull-up or pull-down biasing resistor to the ZCD pin. A
pull-up resistor is used when the external voltage
source is varying relative to VSS. A pull-down resistor is
used when the voltage is varying relative to VDD. The
resistor adds a bias to the ZCD pin so that the target
external voltage source must go to zero to pull the pin
voltage to the VCPINV switching voltage. The pull-up or
pull-down value can be determined with the equations
shown in Equation 29-3 or Equation 29-4.

EQUATION 29-3: ZCD PULL-UP/DOWN

When External Signal is relative to Vss:

R SERIES  V PULLUP – V CPINV 


R PULLUP = --------------------------------------------------------------------------
V CPINV
When External Signal is relative to VDD:

R SERIES  V CPINV 
R PULLDOWN = ---------------------------------------------
 V DD – V CPINV 

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 446


PIC18(L)F25/26K83
Measuring VCPINV can be difficult, especially when the 29.8 Effects of a Reset
waveform is relative to VDD. However, by combining
Equations 29-2 and 29-3, the resistor value can be The ZCD circuit can be configured to default to the active
determined from the time difference between the or inactive state on Power-on-Reset (POR). When the
ZCD_output high and low intervals. Note that the time ZCD Configuration bit is cleared, the ZCD circuit will be
difference, ∆T, is 4*TOFFSET. The equation for active at POR. When the ZCD Configuration bit is set,
determining the pull-up and pull-down resistor values the SEN bit of the ZCDCON register must be set to
from the high and low ZCD_output periods is shown in enable the ZCD module.
Equation 29-4.
29.9 Disabling the ZCD Module
EQUATION 29-4: PULL-UP/DOWN The ZCD module can be disabled in two ways:
RESISTOR VALUES
1. Configuration Word 2H has the ZCD bit which
disables the ZCD module when set, but it can be
  enabled using the SEN bit of the ZCDCON
 V BI A S  register (Register 29-1). If the ZCD bit is clear,
R = R SERIES  ---------------------------------------------------------------- – 1
 V PE AK  sin  Freq ----------- T  
-  the ZCD is always enabled.
   2   2. The ZCD can also be disabled using the
ZCDMD bit of the respective PMD2 register
(Register 19-3). This is subject to the status of
R is pull-up or pull-down resistor. the ZCD bit.
VBIAS is VPULLUP when R is pull-up or VDD when R
is pull-down.
∆T is the ZCDOUT high and low period difference.

29.6 Handling VPEAK Variations


If the peak amplitude of the external voltage is
expected to vary, the series resistor must be selected
to keep the ZCD current source and sink below the
design maximum range of ± 600 A and above a
reasonable minimum range. A general rule of thumb is
that the maximum peak voltage can be no more than
six times the minimum peak voltage. To ensure that the
maximum current does not exceed ± 600 A and the
minimum is at least ± 100 A, compute the series
resistance as shown in Equation 29-5. The
compensating pull-up for this series resistance can be
determined with Equation 29-3 because the pull-up
value is not dependent to the peak voltage.

EQUATION 29-5: SERIES R FOR V RANGE

V MAXPEAK + V MINPEAK
R SERIES = ---------------------------------------------------------
–4
7 10

29.7 Operation During Sleep


The ZCD current sources and interrupts are unaffected
by Sleep.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 447


PIC18(L)F25/26K83
29.10 Register Definitions: ZCD Control

REGISTER 29-1: ZCDCON: ZERO-CROSS DETECT CONTROL REGISTER


R/W-0/0 U-0 R-x R/W-0/0 U-0 U-0 R/W-0/0 R/W-0/0
SEN — OUT POL — — INTP INTN
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 SEN: Zero-Cross Detect Software Enable bit


This bit is ignored when ZCDSEN Configuration bit is set.
1= Zero-cross detect is enabled.
0= Zero-cross detect is disabled. ZCD pin operates according to PPS and TRIS controls.
bit 6 Unimplemented: Read as ‘0’
bit 5 OUT: Zero-Cross Detect Data Output bit
ZCDPOL bit = 0:
1 = ZCD pin is sinking current
0 = ZCD pin is sourcing current
ZCDPOL bit = 1:
1 = ZCD pin is sourcing current
0 = ZCD pin is sinking current
bit 4 POL: Zero-Cross Detect Polarity bit
1 = ZCD logic output is inverted
0 = ZCD logic output is not inverted
bit 3-2 Unimplemented: Read as ‘0’
bit 1 INTP: Zero-Cross Detect Positive-Going Edge Interrupt Enable bit
1 = ZCDIF bit is set on low-to-high ZCD_output transition
0 = ZCDIF bit is unaffected by low-to-high ZCD_output transition
bit 0 INTN: Zero-Cross Detect Negative-Going Edge Interrupt Enable bit
1 = ZCDIF bit is set on high-to-low ZCD_output transition
0 = ZCDIF bit is unaffected by high-to-low ZCD_output transition

TABLE 29-1: SUMMARY OF REGISTERS ASSOCIATED WITH THE ZCD MODULE


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page
ZCDCON SEN — OUT POL — — INTP INTN 448
Legend: — = unimplemented, read as ‘0’. Shaded cells are unused by the ZCD module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 448


PIC18(L)F25/26K83
30.0 DATA SIGNAL MODULATOR
(DSM) MODULE
The Data Signal Modulator (DSM) is a peripheral which
allows the user to mix a data stream, also known as a
modulator signal, with a carrier signal to produce a
modulated output.
Both the carrier and the modulator signals are supplied
to the DSM module either internally, from the output of
a peripheral, or externally through an input pin.
The modulated output signal is generated by
performing a logical “AND” operation of both the carrier
and modulator signals and then provided to the MDOUT
pin.
The carrier signal is comprised of two distinct and
separate signals. A carrier high (CARH) signal and a
carrier low (CARL) signal. During the time in which the
modulator (MOD) signal is in a logic high state, the
DSM mixes the carrier high signal with the modulator
signal. When the modulator signal is in a logic low
state, the DSM mixes the carrier low signal with the
modulator signal.
Using this method, the DSM can generate the following
types of Key Modulation schemes:
• Frequency-Shift Keying (FSK)
• Phase-Shift Keying (PSK)
• On-Off Keying (OOK)
Additionally, the following features are provided within
the DSM module:
• Carrier Synchronization
• Carrier Source Polarity Select
• Programmable Modulator Data
• Modulated Output Polarity Select
• Peripheral Module Disable, which provides the
ability to place the DSM module in the lowest
power consumption mode
Figure 30-1 shows a Simplified Block Diagram of the
Data Signal Modulator peripheral.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 449


PIC18(L)F25/26K83
FIGURE 30-1: SIMPLIFIED BLOCK DIAGRAM OF THE DATA SIGNAL MODULATOR

CH<3:0> Rev. 10-000248G


10/12/2016

Data Signal Modulator


0000

See
MD1CARH CARH
Register

CHPOL D
1111 SYNC
Q

MS<4:0> 1
0

00000

CHSYNC
RxyPPS
See
MOD
MD1SRC
PPS
Register

OPOL
11111

CL<4:0>
D
SYNC
00000 Q

1
0
See
MD1CARL CARL
Register CLSYNC

CLPOL
11111

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 450


PIC18(L)F25/26K83
30.1 DSM Operation 30.3 Carrier Signal Sources
The DSM module can be enabled by setting the EN bit The carrier high signal and carrier low signal can be
in the MD1CON0 register. Clearing the EN bit in the supplied from the sources specified in Table 30-1.
MD1CON0 register, disables the DSM module output The carrier high signal is selected by configuring the
and switches the carrier high and carrier low signals to CH<4:0> bits in the MD1CARH register. The carrier low
the default option of MD1CARHPPS and signal is selected by configuring the CL<4:0> bits in the
MD1CARLPPS, respectively. The modulator signal MD1CARL register.
source is also switched to the BIT in the MD1CON0
register.
30.4 Carrier Synchronization
The values used to select the carrier high, carrier low,
and modulator sources held by the Modulation Source, During the time when the DSM switches between car-
Modulation High Carrier, and Modulation Low Carrier rier high and carrier low signal sources, the carrier data
control registers are not affected when the EN bit is in the modulated output signal can become truncated.
cleared and the DSM module is disabled. The values To prevent this, the carrier signal can be synchronized
inside these registers remain unchanged while the to the modulator signal. When synchronization is
DSM is inactive. The sources for the carrier high, car- enabled, the carrier pulse that is being mixed at the
rier low and modulator signals will once again be time of the transition is allowed to transition low before
selected when the EN bit is set and the DSM module is the DSM switches over to the next carrier source.
again enabled and active. Synchronization is enabled separately for the carrier
high and carrier low signal sources. Synchronization for
30.2 Modulator Signal Sources the carrier high signal is enabled by setting the
CHSYNC bit in the MD1CON1 register.
The modulator signal can be supplied from the sources Synchronization for the carrier low signal is enabled by
specified in Table 30-3. setting the CLSYNC bit in the MD1CON1 register.
The modulator signal is selected by configuring the Figure 30-2 through Figure 30-6 show timing diagrams
MS<4:0> bits in the MD1SRC register. of using various synchronization methods.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 451


PIC18(L)F25/26K83
FIGURE 30-2: On Off Keying (OOK) Synchronization
Carrier Low (CARL)

Carrier High (CARH)

Modulator (BIT)

CHSYNC = 1
CLSYNC = 0

CHSYNC = 1
CLSYNC = 1

CHSYNC = 0
CLSYNC = 0

CHSYNC = 0
CLSYNC = 1

FIGURE 30-3: No Synchronization (CHSYNC = 0, CLSYNC = 0)

carrier_high

carrier_low

modulator

MDCHSYNC = 0
MDCLSYNC = 0

Active Carrier
carrier_high carrier_low carrier_high carrier_low
State

FIGURE 30-4: Carrier High Synchronization (CHSYNC = 1, CLSYNC = 0)

carrier_high

carrier_low

modulator

MDCHSYNC = 1
MDCLSYNC = 0

Active Carrier carrier_high carrier_high carrier_low


State both carrier_low both

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 452


PIC18(L)F25/26K83
FIGURE 30-5: Carrier Low Synchronization (CHSYNC = 0, CLSYNC = 1)

carrier_high

carrier_low

modulator

MDCHSYNC = 0
MDCLSYNC = 1

Active Carrier
State carrier_high carrier_low carrier_high carrier_low

FIGURE 30-6: Full Synchronization (CHSYNC = 1, CLSYNC = 1)

carrier_high

carrier_low

modulator Falling edges


used to sync
MDCHSYNC = 1
MDCLSYNC = 1

Active Carrier
State carrier_high carrier_low carrier_high CL

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 453


PIC18(L)F25/26K83
30.5 Carrier Source Polarity Select 30.8 Operation in Sleep Mode
The signal provided from any selected input source for The DSM module is not affected by Sleep mode. The
the carrier high and carrier low signals can be inverted. DSM can still operate during Sleep, if the Carrier and
Inverting the signal for the carrier high source is Modulator input sources are also still operable during
enabled by setting the CHPOL bit of the MD1CON1 Sleep. Refer to Section 10.0 “Power-Saving Opera-
register. Inverting the signal for the carrier low source is tion Modes” for more details.
enabled by setting the CLPOL bit of the MD1CON1
register. 30.9 Effects of a Reset

30.6 Programmable Modulator Data Upon any device Reset, the DSM module is disabled.
The user’s firmware is responsible for initializing the
The BIT of the MD1CON0 register can be selected as module before enabling the output. The registers are
the source for the modulator signal. This gives the user reset to their default values.
the ability to program the value used for modulation.
30.10 Peripheral Module Disable
30.7 Modulated Output Polarity
The DSM module can be completely disabled using the
The modulated output signal provided on the DSM pin PMD module to achieve maximum power saving. The
can also be inverted. Inverting the modulated output DSMMD bit of PMD6 (Register 19-7) when set disables
signal is enabled by setting the OPOL bit of the the DSM module completely. When enabled again all
MD1CON0 register. the registers of the DSM module default to POR status.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 454


PIC18(L)F25/26K83
30.11 Register Definitions: Modulation Control
Long bit name prefixes for the Modulation peripheral is
shown below. Refer to Section 1.3.2.2 “Long Bit
Names” for more information.

Peripheral Bit Name Prefix


MD1 MD1

REGISTER 30-1: MD1CON0: MODULATION CONTROL REGISTER 0


R/W-0/0 U-0 R-0/0 R/W-0/0 U-0 U-0 U-0 R/W-0/0
EN — OUT OPOL — — — BIT
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 EN: Modulator Module Enable bit


1 = Modulator module is enabled and mixing input signals
0 = Modulator module is disabled and has no output
bit 6 Unimplemented: Read as ‘0’
bit 5 OUT: Modulator Output bit
Displays the current output value of the Modulator module.(1)
bit 4 OPOL: Modulator Output Polarity Select bit
1 = Modulator output signal is inverted; idle high output
0 = Modulator output signal is not inverted; idle low output
bit 3-1 Unimplemented: Read as ‘0’
bit 0 BIT: Allows software to manually set modulation source input to module(2)
1 = Modulator selects Carrier High
0 = Modulator selects Carrier Low

Note 1: The modulated output frequency can be greater and asynchronous from the clock that updates this
register bit, the bit value may not be valid for higher speed modulator or carrier signals.
2: BIT bit must be selected as the modulation source in the MD1SRC register for this operation.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 455


PIC18(L)F25/26K83

REGISTER 30-2: MD1CON1: MODULATION CONTROL REGISTER 1


U-0 U-0 R/W-0/0 R/W-0/0 U-0 U-0 R/W-0/0 R/W-0/0
— — CHPOL CHSYNC — — CLPOL CLSYNC
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 Unimplemented: Read as ‘0’


bit 5 CHPOL: Modulator High Carrier Polarity Select bit
1 = Selected high carrier signal is inverted
0 = Selected high carrier signal is not inverted
bit 4 CHSYNC: Modulator High Carrier Synchronization Enable bit
1 = Modulator waits for a falling edge on the high time carrier signal before allowing a switch to the
low time carrier
0 = Modulator output is not synchronized to the high time carrier signal(1)
bit 3-2 Unimplemented: Read as ‘0’
bit 1 CLPOL: Modulator Low Carrier Polarity Select bit
1 = Selected low carrier signal is inverted
0 = Selected low carrier signal is not inverted
bit 0 CLSYNC: Modulator Low Carrier Synchronization Enable bit
1 = Modulator waits for a falling edge on the low time carrier signal before allowing a switch to the high
time carrier
0 = Modulator output is not synchronized to the low time carrier signal(1)
Note 1: Narrowed carrier pulse widths or spurs may occur in the signal stream if the carrier is not synchronized.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 456


PIC18(L)F25/26K83

REGISTER 30-3: MD1CARH: MODULATION HIGH CARRIER CONTROL REGISTER


U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
(1)
— — — CH<4:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 CH<4:0>: Modulator Carrier High Selection bits(1)
See Table 30-1 for signal list

Note 1: Unused selections provide an input value.

REGISTER 30-4: MD1CARL: MODULATION LOW CARRIER CONTROL REGISTER


U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — CL<4:0>(1)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 CL<4:0>: Modulator Carrier Low Input Selection bits(1)
See Table 30-1 for signal list

Note 1: Unused selections provide a zero as the input value.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 457


PIC18(L)F25/26K83

TABLE 30-1: MD1CARH/MD1CARL SELECTION MUX CONNECTIONS


MD1CARH MD1CARL

CH<4:0> Connection CL<4:0> Connection


11111-10011 31-19 Reserved 11111-10011 31-19 Reserved
10010 18 CLC4OUT 10010 18 CLC4OUT
10001 17 CLC3OUT 10001 17 CLC3OUT
10000 16 CLC2OUT 10000 16 CLC2OUT
01111 15 CLC1OUT 01111 15 CLC1OUT
01110 14 NCO1OUT 01110 14 NCO1OUT
01101-01100 13-12 Reserved 01101-01100 13-12 Reserved
01011 11 PWM8 OUT 01011 11 PWM8 OUT
01010 10 PWM7 OUT 01010 10 PWM7 OUT
01001 9 PWM6 OUT 01001 9 PWM6 OUT
01000 8 PWM5 OUT 01000 8 PWM5 OUT
00111 7 CCP4 OUT 00111 7 CCP4 OUT
00110 6 CCP3 OUT 00110 6 CCP3 OUT
00101 5 CCP2 OUT 00101 5 CCP2 OUT
00100 4 CCP1 OUT 00100 4 CCP1 OUT
00011 3 CLKREF output 00011 3 CLKREF output
00010 2 HFINTOSC 00010 2 HFINTOSC
00001 1 FOSC (system clock) 00001 1 FOSC (system clock)
00000 0 Pin selected by MD1CARHPPS 00000 0 Pin selected by
MD1CARLPPS

REGISTER 30-5: MD1SRC: MODULATION SOURCE CONTROL REGISTER


U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — MS<4:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 MS<4:0>: Modulator Source Selection bits(1)
See Table 30-2 for signal list

Note 1:Unused selections provide a zero as the input value.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 458


PIC18(L)F25/26K83

TABLE 30-2: MD1SRC SELECTION MUX


CONNECTIONS
MS<4:0> Connection
1 1111 31 Reserved
- -
1 1000 24
1 0111 23 CAN_tx0
1 0110 22 SPI1 SDO
1 0101 21 Reserved
1 0100 20 UART2 TX
1 0011 19 UART1 TX
1 0010 18 CLC4 OUT
1 0001 17 CLC3 OUT
1 0000 16 CLC2 OUT
0 1111 15 CLC1 OUT
0 1110 14 CMP2 OUT
0 1101 13 CMP1 OUT
0 1100 12 NCO1 OUT
0 1011 11 Reserved
0 1010 10 Reserved
0 1001 9 PWM8 OUT
0 1000 8 PWM7 OUT
0 0111 7 PWM6 OUT
0 0110 6 PWM5 OUT
0 0101 5 CCP4 OUT
0 0100 4 CCP3 OUT
0 0011 3 CCP2 OUT
0 0010 2 CCP1 OUT
0 0001 1 DSM1 BIT
0 0000 0 Pin selected by MDSRCPPS

TABLE 30-3: SUMMARY OF REGISTERS ASSOCIATED WITH DATA SIGNAL MODULATOR MODE
Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page
MD1CON0 EN — OUT OPOL — — — BIT 455
MD1CON1 — — CHPOL CHSYNC — — CLPOL CLSYNC 456
MD1CARH — — — — — CHS<2:0> 457
MD1CARL — — — — — CLS<2:0> 457
MDSRC — — — — SRCS<3:0> 458
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used in the Data Signal Modulator mode.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 459


PIC18(L)F25/26K83
31.0 UNIVERSAL ASYNCHRONOUS The UART module includes the following capabilities:
RECEIVER TRANSMITTER • Full-duplex asynchronous transmit and receive
(UART) WITH PROTOCOL • Two-character input buffer
• One-character output buffer
SUPPORT • Programmable 7-bit or 8-bit character length
The Universal Asynchronous Receiver Transmitter • 9th bit Address detection
(UART) module is a serial I/O communications • 9th bit even or odd parity
peripheral. It contains all the clock generators, shift • Input buffer overrun error detection
registers and data buffers necessary to perform an • Received character framing error detection
input or output serial data transfer, independent of • Hardware and software flow control
device program execution. The UART, also known as a • Automatic checksums
Serial Communications Interface (SCI), can be • Programmable 1, 1.5, and 2 Stop bits
configured as a full-duplex asynchronous system or • Programmable data polarity
one of several automated protocols. Full-Duplex mode • Manchester encoder/decoder
is useful for communications with peripheral systems, • Operation in Sleep
such as CRT terminals and personal computers. • Automatic detection and calibration of the baud
rate
Supported protocols include: • Wake-up on Break reception
• LIN Master and Slave • Automatic and user timed Break period
• DMX mode generation
• DALI control gear and control device • RX and TX inactivity timeouts (with Timer2)
Block diagrams of the UART transmitter and receiver
are shown in Figure 31-1 and Figure 31-2.
The UART transmit output (TX_out) is available to the
TX pin and internally to various peripherals.

FIGURE 31-1: UART TRANSMIT BLOCK DIAGRAM


Data Bus
UxTXIE

+ Interrupt
UxTXCHK UxTXB Register UxTXIF
8 RxyPPS
TXEN
MSb LSb TX pin
(8) 0 Mode
• • • Control PPS
Transmit Shift Register (TSR)

TXMTIF TX_out
Address or
Baud Rate Generator FOSC Parity Mode
÷n

n
+1 Multiplier x4 x16
BRGS 1 0
UxBRGH UxBRGL

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 460


PIC18(L)F25/26K83
FIGURE 31-2: UART RECEIVE BLOCK DIAGRAM

RXEN RXFOIF RXIDL

RXPPS
RX pin MSb RSR Register LSb
Pin Buffer Mode Data
PPS and Control Recovery
Stop (8) 7 ••• 1 0 Start

Baud Rate Generator FOSC


÷n
Address or +
Parity Mode UxRXCHK

+1 n
Multiplier x4 x16
BRGS 1 0
UxBRGH UxBRGL FIFO
FERIF PERIF UxRXB Register

8
Data Bus

RXIF Interrupt
RXIE

The operation of the UART module is controlled represents a ‘1’ data bit, and a VOL Space state, which
through nineteen registers: represents a ‘0’ data bit. NRZ refers to the fact that
• Three control registers (UxCON0-UxCON2) consecutively transmitted data bits of the same value
• Error enable and status (UxERRIE, UxERRIR, stay at the output level of that bit without returning to a
UxUIR) neutral level between each bit transmission. An NRZ
• UART buffer status and control (UxFIFO) transmission port idles in the Mark state. Each character
• Three 9-bit protocol parameters (UxP1-UxP3) transmission consists of one Start bit followed by seven
• 16-bit baud rate generator (UxBRGH:L) or eight data bits, one optional parity or address bit, and
• Transmit buffer write (UxTXB) is always terminated by one or more Stop bits. The Start
• Receive buffer read (UxRXB) bit is always a space and the Stop bits are always
• Receive checksum (UxRXCHK) marks. The most common data format is eight bits with
• Transmit checksum (UxTXCHK) no parity. Each transmitted bit persists for a period of 1/
(Baud Rate). An on-chip dedicated 16-bit Baud Rate
These registers are detailed in Section 31.21 “Register Generator is used to derive standard baud rate
Definitions: UART Control”. frequencies from the system oscillator. See
Section 31.17 “UART Baud Rate Generator (BRG)”
31.1 UART I/O Pin Configuration for more information.
The RX input pin is selected with the UxRPPS register. In all the Asynchronous modes, the UART transmits
The TX output pin is selected with each pin’s RxyPPS and receives the LSb first. The UART’s transmitter and
register. When the TRIS control for the pin corresponding receiver are functionally independent, but share the
to the TX output is cleared, then the UART will maintain same data format and baud rate. Parity is supported by
control and the logic level on the TX pin. Changing the the hardware by even and odd parity modes.
TXPOL bit in UxCON2 will immediately change the TX
pin logic level regardless of the value of EN or TXEN. 31.2.1 UART ASYNCHRONOUS
TRANSMITTER
31.2 UART Asynchronous Modes The UART transmitter block diagram is shown in
Figure 31-1. The heart of the transmitter is the serial
The UART has five asynchronous modes: Transmit Shift Register (TSR), which is not directly
• 7-bit accessible by software. The TSR obtains its data from
• 8-bit the transmit buffer, which is the UxTXB register.
• 8-bit with even parity in the 9th bit
• 8-bit with odd parity in the 9th bit
• 8-bit with address indicator in the 9th bit
The UART transmits and receives data using the
standard Non-Return-to-Zero (NRZ) format. NRZ is
implemented with two levels: a VOH Mark state, which

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 461


PIC18(L)F25/26K83
31.2.1.1 Enabling the Transmitter The UxTXIF interrupt can be enabled by setting the
UxTXIE interrupt enable bit in the PIE register.
The UART transmitter is enabled for asynchronous
However, the UxTXIF flag bit will be set whenever the
operations by configuring the following control bits:
UxTXB is empty, regardless of the state of UxTXIE
• TXEN = 1 enable bit.The UxTXIF bit is read-only and cannot be
• MODE<3:0> = 0h through 3h set or cleared by software.
• UxBRGH:L = desired baud rate
To use interrupts when transmitting data, set the
• UxBRGS = desired baud rate multiplier
UxTXIE bit only when there is more data to send. Clear
• RxyPPS = code for desired output pin
the UxTXIE interrupt enable bit upon writing UxTXB
• ON = 1
with the last character of the transmission.
All other UART control bits are assumed to be in their
default state. 31.2.1.5 TSR Status
Setting the TXEN bit in the UxCON0 register enables The TXMTIF bit in the UxERRIR register indicates the
the transmitter circuitry of the UART. The MODE<3:0> status of the TSR. This is a read-only bit. The TXMTIF
bits in the UxCON0 register select the desired mode. bit is set when the TSR is empty and idle. The TXMTIF
Setting the ON bit in the UxCON1 register enables the bit is cleared when a character is transferred to the
UART. When TXEN is set and the transmitter is not idle, TSR from the UxTXB. The TXMTIF bit remains clear
the TX pin is automatically configured as an output. until all bits, including the Stop bits, have been shifted
When the transmitter is idle, the TX pin drive is out of the TSR and a byte is not waiting in the UxTXB
relinquished to the port TRIS control. If the TX pin is register.
shared with an analog peripheral, the analog I/O
The TXMTIF will generate an interrupt when the
function should be disabled by clearing the
TXMTIE bit in the UxERRIE register is set.
corresponding ANSEL bit.
Note: The TSR is not mapped in data memory,
Note: The UxTXIF Transmitter Interrupt flag is
so it is not available to the user.
set when the TXEN enable bit is set and
the UxTXB register can accept data.
31.2.1.6 Transmitter 7-bit Mode
31.2.1.2 Transmitting Data 7-Bit mode is selected when the MODE<3:0> bits are
set to ‘0001’. In 7-bit mode, only the seven Least
A transmission is initiated by writing a character to the
Significant bits of the data written to UxTXB are
UxTXB register. If this is the first character, or the
transmitted. The Most Significant bit is ignored.
previous character has been completely transmitted
from the TSR, the data in the UxTXB is immediately 31.2.1.7 Transmitter Parity Modes
transferred to the TSR register. If the TSR still contains
all or part of a previous character, the new character When the Odd or even Parity mode is selected, all data
data is held in the UxTXB until the previous character is sent as nine bits. The first eight bits are data and the
transmission is complete. The pending character in the 9th bit is parity. Even and odd parity is selected when
UxTXB is then transferred to the TSR at the beginning the MODE<3:0> bits are set to ‘0011’ and ‘0010’,
of the previous character Stop bit transmission. The respectively. Parity is automatically determined by the
transmission of the Start bit, data bits and Stop bit module and inserted in the serial data stream.
sequence commences immediately following the
completion of all of the previous character’s Stop bits.

31.2.1.3 Transmit Data Polarity


The polarity of the transmit data is controlled with the
TXPOL bit in the UxCON2 register. The default state of
this bit is ‘0’ which selects high true transmit idle and
data bits. Setting the TXPOL bit to ‘1’ will invert the
transmit data, resulting in low true idle and data bits. The
TXPOL bit controls transmit data polarity in all modes.

31.2.1.4 Transmit Interrupt Flag


The UxTXIF interrupt flag bit in the PIR register is set
whenever the UART transmitter is enabled and no
character is being held for transmission in the UxTXB. In
other words, the UxTXIF bit is clear only when the TSR
is busy with a character and a new character has been
queued for transmission in the UxTXB.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 462


PIC18(L)F25/26K83
31.2.1.8 Asynchronous Transmission Setup
1. Initialize the UxBRGH, UxBRGL register pair and
the BRGS bit to achieve the desired baud rate
(see Section 31.17 “UART Baud Rate
Generator (BRG)”).
2. Set the MODE<3:0> bits to the desired
Asynchronous mode.
3. Set TXPOL bit if inverted TX output is desired.
4. Enable the asynchronous serial port by setting
the ON bit.
5. Enable the transmitter by setting the TXEN
control bit. This will cause the UxTXIF interrupt
flag to be set.
6. If the device has PPS, configure the desired I/O
pin RxyPPS register with the code for TX output.
7. If interrupts are desired, set the UxTXIE interrupt
enable bit in the respective PIE register. An
interrupt will occur immediately provided that the
GIE bits in the INTCON0 register are also set.
8. Write one byte of data into the UxTXB register.
This will start the transmission.
9. Subsequent bytes may be written when the
UxTXIF bit is ‘1’.

FIGURE 31-3: ASYNCHRONOUS TRANSMISSION

Write to UxTXB
Word 1
BRG Output
(Shift Clock)
TX
pin Start bit bit 0 bit 1 last bit Stop bit
Word 1
UxTXIF bit
(Transmit Buffer 1 TCY
Reg. Empty Flag)

Word 1
TXMTIF bit Transmit Shift Reg.
(Transmit Shift
Reg. Empty Flag)

FIGURE 31-4: ASYNCHRONOUS TRANSMISSION (BACK-TO-BACK)

Write to UxTXB
Word 1 Word 2
BRG Output
(Shift Clock)
TX
pin Start bit bit 0 bit 1 last bit Stop bit Start bit bit 0
UxTXIF bit 1 TCY Word 1 Word 2
(Transmit Buffer
Reg. Empty Flag) 1 TCY

TXMTIF bit Word 1 Word 2


(Transmit Shift Transmit Shift Reg. Transmit Shift Reg.
Reg. Empty Flag)

Note: This timing diagram shows the first transmission and the start of the second consecutive transmission.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 463


PIC18(L)F25/26K83
31.2.2 UART ASYNCHRONOUS RECEIVER If both samples are high then the falling edge is
deemed a glitch and the UART returns to the Start bit
The Asynchronous mode is typically used in RS-232
detection state without generating an error.
systems. The receiver block diagram is shown in
Figure 31-2. The data is received on the RX pin and If either sample is low, the data recovery circuit
drives the data recovery block. The data recovery block continues counting BRG clocks and takes samples at
is actually a high-speed shifter operating at 4 or 16 clock counts 7, 8, and 9. When less than two samples
times the baud rate, whereas the serial Receive Shift are low, the Start bit is deemed invalid and the data
Register (RSR) operates at the bit rate. When all bits of recovery circuit aborts character reception, without
the character have been shifted in, they are generating an error, and resumes looking for the falling
immediately transferred to a two character First-In- edge of the Start bit.
First-Out (FIFO) memory. The FIFO buffering allows When two or more samples are low, the Start bit is
reception of two complete characters and the start of a deemed valid and the data recovery continues. After a
third character before software must start servicing the valid Start bit is detected, the BRG clock counter
UART receiver. The FIFO registers and RSR are not continues and resets at count 16. This is the beginning
directly accessible by software. Access to the received of the first data bit.
data is via the UxRXB register.
The data recovery circuit counts BRG clocks from the
31.2.2.1 Enabling the Receiver beginning of the bit and takes samples at clocks 7, 8,
and 9. The bit value is determined from the majority of
The UART receiver is enabled for asynchronous oper- the samples. The resulting ‘0’ or ‘1’ is shifted into the
ation by configuring the following control bits: RSR.The BRG clock counter continues and resets at
• RXEN = 1 count 16. This sequence repeats until all data bits have
• MODE<3:0> = 0h through 3h been sampled and shifted into the RSR.
• UxBRGH:L = desired baud rate After all data bits have been shifted in, the first Stop bit
• RXPPS = code for desired input pin is sampled. Stop bits are always a ‘1’. If the bit sampling
• Input pin ANSEL bit = 0 determines that a ‘0’ is in the Stop bit position, the
• ON = 1 framing error is set for this character. Otherwise, the
All other UART control bits are assumed to be in their framing error is cleared for this character. See Section
default state. 31.2.2.4 “Receive Framing Error” for more
Setting the RXEN bit in the UxCON0 register enables information on framing errors.
the receiver circuitry of the UART. Setting the
31.2.2.3 Receive Interrupts
MODE<3:0> bits in the UxCON0 register configures the
UART for the desired Asynchronous mode. Setting the Immediately after all data bits and the Stop bit have
ON bit in the UxCON1 register enables the UART. The been received, the character in the RSR is transferred
TRIS bit corresponding to the selected RX I/O pin must to the UART receive FIFO. The UxRXIF interrupt flag in
be set to configure the pin as an input. the respective PIR register is set at this time, provided
it is not being suppressed.
Note: If the RX function is on an analog pin, the
corresponding ANSEL bit must be cleared The UxRXIF is suppressed by any of the following:
for the receiver to function. • FERIF if FERIE is set
• PERIF if PERIE is set
31.2.2.2 Receiving Data This suspends DMA transfer of data until software
Data is recovered from the bit stream by timing to the processes the error and reads UxRXB to advance the
center of the bits and sampling the input level. In High- FIFO beyond the error.
Speed mode, there are four BRG clocks per bit and UxRXIF interrupts are enabled by setting all of the
only one sample is taken per bit. In Normal-Speed following bits:
mode, there are 16 BRG clocks per bit and three
samples are taken per bit. • UxRXIE, Interrupt Enable bit in the PIE register
• GIE, Global Interrupt Enable bits in the INTCON0
The receiver data recovery circuit initiates character register
reception on the falling edge of the Start bit. The Start
bit, is always a ‘0’. The Start bit is qualified in the middle The UxRXIF interrupt flag bit will be set when not
of the bit. In Normal-Speed mode only, the Start bit is suppressed and there is an unread character in the
also qualified at the leading edge of the bit. The FIFO, regardless of the state of interrupt enable bits.
following paragraphs describe the majority detect Reading the UxRXB register will transfer the top
sampling of Normal-Speed mode. character out of the FIFO and reduce the FIFO
contents by one. The UxRXIF interrupt flag bit is read-
The falling edge starts the baud rate generator (BRG) only, it cannot be set or cleared by software.
clock. The input is sampled at the first and second BRG
clocks.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 464


PIC18(L)F25/26K83
31.2.2.4 Receive Framing Error 31.2.2.6 Receive FIFO Overflow
Each character in the receive FIFO buffer has a When more characters are received than the receive
corresponding framing error flag bit. A framing error FIFO can hold, the RXFOIF bit in the UxERRIR register
indicates that the Stop bit was not seen at the expected is set. The character causing the overflow condition is
time. The framing error flag is accessed via the FERIF discarded. The RUNOVF bit in the UxCON2 register
bit in the UxERRIR register. The FERIF bit represents determines how the receive circuit responds to
the frame status of the top unread character of the characters while the overflow condition persists. When
receive FIFO. Therefore, the FERIF bit must be read RUNOVF is set, the receive shifter stays synchronized
before reading UxRXB. to the incoming data stream by responding to Start,
The FERIF bit is read-only and only applies to the top data, and Stop bits. However, all received bytes not
unread character of the receive FIFO. A framing error already in the FIFO are discarded. When RUNOVF is
(FERIF = 1) does not preclude reception of additional cleared, the receive shifter ceases operation and Start,
characters. It is neither necessary nor possible to clear data, and Stop bits are ignored. The receive overflow
the FERIF bit directly. Reading the next character from condition is cleared by reading the UxRXB register and
the FIFO buffer will advance the FIFO to the next clearing the RXFOIF bit. If the UxRXB register is not
character and the next corresponding framing error. read to open a space in the FIFO, the next character
received will be discarded and cause another overflow
The FERIF bit is cleared when the character at the top condition.
of the FIFO does not have a framing error or when all
bytes in the receive FIFO have been read. Clearing the A receive overflow error will generate a summary
ON bit resets the receive FIFO, thereby also clearing UxEIF interrupt when the RXFOIE bit in the UxERRIE
the FERIF bit. register is set.

A framing error will generate a summary UxERR 31.2.2.7 Asynchronous Reception Setup
interrupt when the FERIE bit in the UxERRIE register is
1. Initialize the UxBRGH, UxBRGL register pair
set. The summary error is reset when the FERIF bit of
and the BRGS bit to achieve the desired baud
the top of the FIFO is ‘0’ or when all FIFO characters
rate (see Section 31.17 “UART Baud Rate
have been retrieved.
Generator (BRG)”).
When FERIE is set, UxRXIF interrupts are suppressed 2. Configure the RXPPS register for the desired RX
when FERIF is ‘1’. pin
3. Clear the ANSEL bit for the RX pin (if
31.2.2.5 Receiver Parity Modes
applicable).
Even and odd parity is automatically detected when the 4. Set the MODE<3:0> bits to the desired
MODE<3:0> bits are set to ‘0011’ and ‘0010’, Asynchronous mode.
respectively. Parity modes receive eight data bits and
5. Set the RXPOL bit if the data stream is inverted.
one parity bit for a total of nine bits for each character.
The PERIF bit in the UxERRIR register represents the 6. Enable the serial port by setting the ON bit.
parity error of the top unread character of the receive 7. If interrupts are desired, set the UxRXIE bit in
FIFO rather than the parity bit itself. The parity error must the PIEx register and the GIE bits in the
be read before reading the UxRXB register advances INTCON0 register.
the FIFO. 8. Enable reception by setting the RXEN bit.
A parity error will generate a summary UxERR interrupt 9. The UxRXIF interrupt flag bit will be set when a
when the PERIE bit in the UxERRIE register is set.The character is transferred from the RSR to the
summary error is reset when the PERIF bit of the top of receive buffer. An interrupt will be generated if
the FIFO is ‘0’ or when all FIFO characters have been the UxRXIE interrupt enable bit is also set.
retrieved. 10. Read the UxERRIR register to get the error
When PERIE is set, UxRXIF interrupts are suppressed flags.
when PERIF is ‘1’. 11. Read the UxRXB register to get the received
byte.
12. If an overrun occurred, clear the RXFOIF bit.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 465


PIC18(L)F25/26K83
FIGURE 31-5: ASYNCHRONOUS RECEPTION
Start Start Start
RX pin bit bit 0 bit 1 last bit Stop bit bit 0 last bit Stop bit last bit Stop
bit bit bit
Rcv Shift
Reg
Rcv Buffer Reg. Word 1 Word 2
UxRXB UxRXB
RXIDL

Read Rcv
Buffer Reg.
UxRXB

UxRXIF
(Interrupt Flag)

RXFOIF bit

Cleared by software

Note: This timing diagram shows three words appearing on the RX input. The UxRXB (receive buffer) is not read before the third word
is received, causing the RXFOIF (FIFO overrun) bit to be set. STPMD = 0, STP<1:0> = 00.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 466


PIC18(L)F25/26K83
31.3 Asynchronous Address Mode 31.3.2 ADDRESS MODE RECEIVE
A special Address Detection mode is available for use The UART receiver is enabled for asynchronous
when multiple receivers share the same transmission address operation by configuring the following control
line, such as in RS-485 systems. bits:

When Asynchronous Address mode is enabled, all • RXEN = 1


data is transmitted and received as 9-bit characters. • MODE<3:0> = 0100
The 9th bit determines whether the character is an • UxBRGH:L = desired baud rate
address or data. When the 9th bit is set, the eight Least • RXPPS = code for desired input pin
Significant bits are the address. When the 9th bit is • Input pin ANSEL bit = 0
clear, the Least Significant bits are data. In either case, • UxP2L = receiver address
the 9th bit is stored in PERIF when the byte is written to • UxP3L = address mask
the receive FIFO. When PERIE is also set, the RXIF • ON = 1
will be suppressed, thereby suspending DMA transfers In Address mode, no data will be transferred to the
allowing software to process the received address. input FIFO until a valid address is received. This is the
An address character will enable all receivers that default state. Any of the following conditions will cause
match the address and disable all other receivers. the UART to revert to the default state:
Once a receiver is enabled, all non-address characters • ON = 0
will be received until an address character is received • RXEN = 0
that does not match. • Received address does not match
When a character with the 9th bit set is received, the
31.3.1 ADDRESS MODE TRANSMIT
Least Significant eight bits of that character will be
The UART transmitter is enabled for asynchronous qualified by the values in the UxP2L and UxP3L
address operation by configuring the following control registers.
bits:
The byte is XOR’d with UxP2L then AND’d with UxP3L.
• TXEN = 1 A match occurs when the result is 0h, in which case,
• MODE<3:0> = 0100 the unaltered received character is stored in the
• UxBRGH:L = desired baud rate receive FIFO, thereby setting the UxRXIF interrupt bit.
• RxyPPS = code for desired output pin The 9th bit is stored in the corresponding PERIF bit,
• ON = 1 identifying this byte as an address.
Addresses are sent by writing to the UxP1L register. An address match also enables the receiver for all data
This transmits the written byte with the 9th bit set, which such that all subsequent characters without the 9th bit
indicates that the byte is an address. set will be stored in the receive FIFO.
Data is sent by writing to the UxTXB register. This When the 9th bit is set and a match does not occur, the
transmits the written byte with the 9th bit cleared, which character is not stored in the receive FIFO and all
indicates that the byte is data. subsequent data is ignored.
To send data to a particular device on the transmission The UxP3L register mask allows a range of addresses
bus, first transmit the address of the intended device. All to be accepted. Software can then determine the sub-
subsequent data will be accepted only by that device address of the range by processing the received
until an address of another device is transmitted. address character.
Writes to UxP1L take precedence over writes to
UxTXB. When both the UxP1L and UxTXB registers
are written while the TSR is busy, the next byte to be
transmitted will be from UxP1L.
To ensure that all data intended for one device is sent
before the address is changed, wait until the TXMTIF
bit is high before writing UxP1L with the new address.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 467


PIC18(L)F25/26K83
31.4 DMX Mode toggle TXEN after the last byte of the universe is
completely free of the transmit shift register as
DMX is a protocol used in stage and show equipment. indicated by the TXMTIF bit.
This includes lighting, fog machines, motors, etc. The
protocol consists of a controller that sends out com- 31.4.2 DMX RECEIVER
mands, and receiver such as theater lights that receive
DMX Receiver mode is configured with the following
these commands. DMX protocol is usually unidirec-
settings:
tional, but can be a bidirectional protocol in either Half
or Full-Duplex modes. An example of Half-Duplex • MODE<3:0> = 1010
mode is the RDM (Remote Device Management) pro- • TXEN = 0
tocol that sits on DMX512A. The controller transmits • RXEN = 1
commands and the receiver receives them. Also there • RXPOL = 1
are no error conditions or retransmit mechanisms. • UxP2 = number of first byte to receive
• UxP3 = number of last byte to receive
DMX, or DMX512A as it is known, consists of a
• UxBRGH:L = Value to achieve 250K baud rate
“Universe” of 512 channels. This means that one
• STP<1:0> = 10 for 2 Stop bits
controller can output up to 512 bytes on a single DMX
• ON = 1
link. Each equipment on the line is programmed to
• UxRXPPS = code for desired input pin
listen to a consecutive sequence of one or more of
• Input pin ANSEL bit = 0
these bytes.
When configured as DMX Receiver, the UART listens
For example, a fog machine connected to one of the
for a Break character that is at least 23 bit periods wide.
universes may be programmed to receive one byte,
If the Break is shorter than 23 bit times, the Break is
starting at byte number 10, and a lighting unit may be
ignored and the DMX state machine remains in Idle
programmed to receive four bytes starting at byte
mode. Upon receiving the Break, the DMX counters will
number 22.
be reset to align with the incoming data stream.
31.4.1 DMX CONTROLLER Immediately after the Break, the UART will see the
“Mark after Break” (MAB). This space is ignored by the
DMX Controller mode is configured with the following UART. The Start Code follows the MAB and will always
settings: be stored in the receive FIFO.
• MODE<3:0> = 1010 After the Start Code, the 1st through 512th byte will be
• TXEN = 1 received, but not all of them are stored in the receive
• RXEN = 0 FIFO. The UART ignores all received bytes until the
• TXPOL = 1 ones of interest are received. This is done using the
• UxP1 = One less than the number of bytes to UxP2 and UxP3 registers. The UxP2 register holds the
transmit (excluding the Start code) value of the byte number to start the receive process
• UxBRGH:L = Value to achieve 250K baud rate and the UxP3 register holds the value of the byte
• STP<1:0> = 10 for 2 Stop bits number to end the receive process. The byte counter
• RxyPPS = TX pin output code starts at 0 for the first byte after the Start Code. For
• ON = 1 example, to receive four bytes starting at the 10th byte
Each DMX transmission begins with a Break followed after the Start Code, write 009h (9 decimal) to UxP2H:L
by a byte called the ‘Start Code’. The width of the and 00Ch (12 decimal) to UxP3H:L. The receive FIFO
BREAK is fixed at 25 bit times. The Break is followed is only 2 bytes deep, therefore the bytes must be
by a “Mark After Break” (MAB) Idle period. After this retrieved by reading UxRXB as they come in to avoid a
Idle period, the 1st through ‘n’th byte is transmitted, receive FIFO overrun condition.
where ‘n-1’ is the value in UxP1. See Figure 31-6. Typically two Stop bits are inserted between bytes. If
Software sends the Start Code and the ‘n’ data bytes by either Stop bit is detected as a ‘0’ then the framing error
writing the UxTXB register with each byte to be sent in for that byte will be set.
the desired order. A UxTXIF value of ‘1’ indicates when Since the DMX sequence always starts with a Break,
the UxTXB is ready to accept the next byte. the software can verify that it is in sync with the
The internal byte counter is not accessible to software. sequence by monitoring the RXBKIF flag to ensure that
Software needs to keep track of the number of bytes the next byte received after the RXBKIF is processed
written to UxTXB to ensure that no more and no less as the Start Code and subsequent bytes are processed
than ‘n’ bytes are sent because the DMX state machine as the expected data.
will automatically insert a Break and reset its internal
counter after ‘n’ bytes are written. One way to ensure
synchronization between hardware and software is to

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 468


PIC18(L)F25/26K83
FIGURE 31-6: DMX TRANSMIT SEQUENCE

Start Code Byte 1 Byte 2 Byte 3 Byte n Start Code Byte 1


Write to UxTXB

MAB(1)
TX pin Break Start Code byte 1 byte 2 byte n software Break MAB Start Code
UxTXIF bit delay
(Transmit Buffer
Reg. Empty Flag)

TXMTIF bit
(Transmit Shift
Reg. Empty Flag)

TXEN bit
(optional
synchronization)

Note 1: The MAB period is fixed at 3-bits period.

31.5 LIN Modes When a slave receives data, the checksum is


accumulated on each byte as it is received using the
LIN is a protocol used primarily in automotive same algorithm as the sending process. The last byte,
applications. The LIN network consists of two kinds of which is the inverted checksum value calculated by the
software processes: a Master process and a Slave sending process, is added to the locally calculated
process. Each network has only one Master process checksum by the UART. The check passes when the
and one or more Slave processes. result is all ‘1’s, otherwise the check fails and the
From a physical layer point of view, the UART on one CERIF bit is set.
processor may be driven by both a Master and a Slave Two methods for computing the checksum are
process, as long as only one Master process exists on available: legacy and enhanced. The legacy checksum
the network. includes only the data bytes. The enhanced checksum
A LIN transaction consists of a Master process followed includes the PID and the data. The C0EN control bit in
by a Slave process. The Slave process may involve the UxCON2 register determines the checksum
more than one slave where one is transmitting and the method. Setting C0EN to ‘1’ selects the enhanced
other(s) are receiving. The transaction begins by the method. Software must select the appropriate method
following Master process transmission sequence: before the Start bit of the checksum byte is received.
1. Break
31.5.1 LIN MASTER/SLAVE MODE
2. Delimiter bit
The LIN Master mode includes capabilities to generate
3. Sync Field
Slave processes. The Master process stops at the PID
4. PID byte transmission. Any data that is transmitted in Master/
The PID determines which Slave processes are Slave mode is done as a Slave process. LIN Master/
expected to respond to the Master. When the PID byte Slave mode is configured by the following settings:
is complete, the TX output remains in the Idle state. • MODE<3:0> = 1100
One or more of the Slave processes may respond to • TXEN = 1
the Master process. If no one responds within the inter- • RXEN = 1
byte period, the Master is free to start another transmis- • UxBRGH:L = Value to achieve desired baud rate
sion. The inter-byte period is timed by software using a • TXPOL = 0 (for high Idle state)
means other than the UART. • STP = desired Stop bits selection
The Slave process follows the Master process. When • C0EN = desired checksum mode
the slave software recognizes the PID then that Slave • RxyPPS = TX pin selection code
process responds by either transmitting the required • TX pin TRIS control = 0
response or by receiving the transmitted data. Only • ON = 1
Slave processes send data. Therefore, Slave
processes receiving data are receiving that of another
Slave process. Note: The TXEN bit must be set before the
Master process is received and remain set
When a slave sends data, the slave UART
while in LIN mode whether or not the
automatically calculates the checksum for the
Slave process is a transmitter.
transmitted bytes as they are sent and appends the
inverted checksum byte to the slave response.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 469


PIC18(L)F25/26K83
The Master process is started by writing the PID to the 31.5.2.1 LIN Slave Receiver
UxP1L register when UxP2 is ‘0’ and the UART is Idle.
When the Slave process is a receiver, the software
The UxTXIF will not be set in this case. Only the six
performs the following tasks:
Least Significant bits of UxP1L are used in the PID
transmission. • UxP3 register is written with a value equal to the
number of data bytes to receive.
The two Most Significant bits of the transmitted PID are
• C0EN bit is set or cleared to select the
PID parity bits. PID<6> is the exclusive-or of PID bits
appropriate checksum. This must be completed
0,1,2,and 4. PID<7> is the inverse of the exclusive-or
before the Start bit of the checksum byte is
of PID bits 1,3,4,and 5.
received.
The UART calculates and inserts these bits in the serial • Each byte of the process response is read from
stream. UxRXB when UxRXIF is set.
Writing UxP1L automatically clears the UxTXCHK and The UART updates the checksum on each received
UxRXCHK registers and generates the Break, delimiter byte. When the last data byte is received, the computed
bit, Sync character (55h), and PID transmission portion checksum total is stored in the UxRXCHK register. The
of the transaction. The data portion of the transaction next received byte is saved in the receive FIFO and
that follows, if there is one, is a Slave process. See added with the value in UxRXCHK. The result of this
Section 31.5.2 “LIN Slave Mode” for more details of addition is not accessible. However, if the result is not
that process. The master receives its own PID when all ‘1’s, the CERIF bit in the UxERRIR is set. The
RXEN is set. Software performs the Slave process CERIF flag persists until cleared by software. Software
corresponding to the PID that was sent and received. needs to read UxRXB to remove the checksum byte
Attempting to write UxP1L before an active master from the FIFO, but the byte can be discarded if not
process is complete will not succeed. Instead, the needed for any other purpose.
TXWRE bit will be set.
After the checksum is received, the UART ignores all
activity on the RX pin until a Break starts the next
31.5.2 LIN SLAVE MODE
transaction.
LIN Slave mode is configured by the following settings:
• MODE<3:0> = 1011 31.5.2.2 LIN Slave Transmitter
• TXEN = 1 When the Slave process is a transmitter, software
• RXEN = 1 performs the following tasks in the order shown:
• UxP2 = Number of data bytes to transmit
• UxP2 register is written with a value equal to the
• UxP3 = Number of data bytes to receive
number of bytes to transmit. This will enable TXIF
• UxBRGH:L = Value to achieve default baud rate
flag which is disabled when UxP2 is ‘0’.
• TXPOL = 0 (for high Idle state)
• C0EN bit is set or cleared to select the
• STP = desired Stop bits selection
appropriate checksum
• C0EN = desired checksum mode
• Inter-byte delay is performed
• RxyPPS = TX pin selection code
• Each byte of the process response is written to
• TX pin TRIS control = 0
UxTXB when UxTXIF is set
• ON = 1
The UART accumulates the checksum as each byte is
The Slave process starts upon detecting a Break on the
written to UxTXB. After the last byte is written, the
RX pin. The Break clears the UxTXCHK, UxRXCHK,
UART stores the calculated checksum in the
UxP2, and UxP3 registers. At the end of the Break, the
UxTXCHK register and transmits the inverted result as
auto-baud circuity is activated and the baud rate is
the last byte in the response.
automatically set using the Sync character following
the Break. The character following the Sync character The TXIF flag is disabled when UxP2 bytes have been
is received as the PID code and is saved in the receive written. Any writes to UxTXB that exceed the UxP2
FIFO. The UART computes the two PID parity bits from count will be ignored and set the TXWRE flag in the
the six Least Significant bits of the PID. If either parity UxFIFO register.
bit does not match the corresponding bit of the received
PID code, the PERIF flag is set and saved at the same
FIFO location as the PID code. The UxRXIF bit is set
indicating that the PID is available.
Software retrieves the PID by reading the UxRXB
register and determines the Slave process to execute
from that. The checksum method, number of data
bytes, and whether to send or receive data, is defined
by software according to the PID code.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 470


PIC18(L)F25/26K83
31.6 DALI Mode A Start bit is used to indicate the start of the forward and
backward frames. When ABDEN = 0, the receiver bit
DALI is a protocol used for intelligent lighting control for rate is determined by the BRG register. When
building automation. The protocol consists of ‘Control ABDEN = 1, the first bit synchronizes the receiver with
Devices’ and ‘Control Gear’. A Control Device is an the transmitter and sets the receiver bit rate. The low
application controller that sends out commands to the period of the Start bit is measured and is used as the
light fixtures. The light fixture itself is termed as a con- timing reference for all data bits in the forward and
trol gear. The communication is done using Manches- backward frames. The ABDOVF bit is set if the Start bit
ter encoding, which is performed by the UART low period causes the measurement counter to over-
hardware. flow. All bits following the Start bit are data bits. The bit
Manchester encoding consists of the clock and data in stream terminates when no transition is detected in the
a single bit stream. A high-to-low or a low-to-high tran- middle of a bit period (see Figure 31-7).
sition always occurs in the middle of the bit period and Forward and backward frames are terminated by two
is not guaranteed to occur at the bit period boundaries. Idle bit periods or Stop bits. Normally, these start in the
When the consecutive bits in the bit stream are of the first bit period of a byte. If both Stop bits are valid, the
same value (i.e., consecutive ‘1’s or consecutive ‘0’s), byte reception is terminated.
a transition occurs at the bit boundary. However, when If either of the Stop bits is invalid, the frame is tagged
the bit value changes, there is no transition at the bit as invalid by saving it as a null byte and setting the
boundary. According to the standard, a half-bit time is framing error in the receive FIFO.
typically 416.7 s long. A double half-bit time or a single
bit is typically 833.3 s. A framing error also occurs when no transition is
detected on the bus in the middle of a bit period when
The protocol is inherently half-duplex. Communication the byte reception is not complete. In such a scenario,
over the bus occurs in the form of forward and back- the byte will be saved with the FERIF bit.
ward frames. Wait times between the frames are
defined in the standard to prevent collision between the 31.6.1 CONTROL DEVICE
frames.
Control Device mode is configured with the following
A Control Device transmission is termed as the ‘For- settings:
ward Frame’. In the DALI 2.0 standard, a forward frame
• MODE<3:0> = 1000
can be two or three bytes in length. The two-byte for-
• TXEN = 1
ward frame is used for communication between control
• RXEN = 1
device and control gear, whereas the three-byte for-
• UxP1 = Forward frames are held for transmission
ward frame is used for communication between Control
this number of half-bit periods after the completion
Devices on the bus. The first byte in the forward frame
of a forward or backward frame.
is the control byte and is followed by either one or two
• UxP2 = Forward/backward frame threshold delim-
data bytes. The transaction begins when the Control
iter. Any reception that starts this number of half
Device starts a transmission. Unlike other protocols,
bit periods after the completion of a forward or
each byte in the frame is transmitted MSB first. Typical
backward frame is detected as forward frame and
frame timing is as shown in Figure 31-8.
sets the PERIF flag of the corresponding received
During communication between two control devices, byte.
three bytes are required to be transmitted. In this case, • UxBRGH:L = Value to achieve 1200 baud rate
the software must write the third byte to UxTXB as soon • TXPOL = appropriate polarity for interface circuit
as UxTXIF goes True and before the output shifter • STP<1:0> = 10 for two Stop bits
becomes empty. This ensures that the three bytes of • RxyPPS = TX pin selection code
the forward frame are transmitted back-to-back, with- • TX pin TRIS control = 0
out any interruption. • ON = 1
All control gear on the bus receive the forward frame. If A forward frame is initiated by writing the control byte to
the forward frame requires a reply to be sent, one of the the UxTXB register. Each data byte after the control
control gear may respond with a single byte, called the byte must be written to the UxTXB register as soon as
‘Backward Frame’. The 2.0 standard requires the con- UxTXIF goes true. It is necessary to perform every
trol gear to begin transmission of the backward frame write after UxTXIF goes true to ensure the transmit
between 5.5 ms to 10.5 ms (~14 to 22 half-bit times) buffer is ready to accept the byte. Each write must also
after reception of the forward frame. Once the back- occur before the TXMTIF bit goes true, to ensure that
ward frame is received by the Control Device, it is the bit stream of forward frame is generated without
required to wait a minimum of 2.4 ms (~6 half-bit times). interruption.
After this wait time, the Control Device is free to trans-
mit another forward frame (see Figure 31-9).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 471


PIC18(L)F25/26K83
When TXMTIF goes true, indicating the transmit shift 31.6.2 CONTROL GEAR
register has completed sending the last byte in the
The Control Gear mode is configured with the following
frame, the TX output is held in the Idle state for the
settings:
number of half-bit periods selected by the STP bits in
the UxCON2 register. • MODE<3:0> = 1001
• TXEN = 1
After the last Stop bit, the TX output is held in the Idle
• RXEN = 1
state for an additional wait time determined by the half-
• UxP1 = Backward frames are held for transmis-
bit period count in the UxP1 register. For example, a
sion this number of half-bit periods after the com-
2450 s delay (~6 half-bit times) requires a value of 6
pletion of a forward frame.
in UxP1L.
• UxP2 = Forward/backward frame threshold
Any writes to the UxTXB register that occur after delimiter. Idle periods more than this number of
TXMTIF goes true, but before the UxP1 wait time, will half-bit periods are detected as forward frames.
be held and then transmitted immediately following the • UxBRGH:L = Value to achieve 1200 baud rate
wait time. If a backward frame is received during the • TXPOL = appropriate polarity for interface circuit
wait time, any bytes that may have been written to • RXPOL = same as TXPOL
UxTXB will be transmitted after completion of the • STP = 10 for two Stop bits
backward frame reception the backward frame plus the • RxyPPS = TX pin output code
UxP1 wait time. • TX pin TRIS control = 0
The wait timer is reset by the backward frame and • RXPPS = RX pin selection code
starts over immediately following the Stop bits of the • RX pin TRIS control = 1
backward frame. Data pending in the transmit shift reg- • Input pin ANSEL bit = 0
ister will be sent when the wait time elapses. • ON = 1

To replace or delete any pending forward frame data, The UART starts listening for a forward frame when the
the TXBE bit needs to be set to flush the shift register Control Gear mode is entered. Only the frames that fol-
and transmit buffer, then write the new control byte to low an Idle period longer than UxP2 half-bit periods are
the UxTXB register. The new control byte will be held in detected as forward frames. Backward frames from
the buffer and sent as the beginning of the next forward other Control Gear are ignored. Only forward frames
frame following the UxP1 wait time. will be stored in UxRXB. This is necessary because a
backward frame can be sent only as a response to a
In Control Device mode, PERIF is set when a forward forward frame.
frame is received. This helps the software distinguish
whether the received byte is part of a forward frame The forward frame is received one byte at a time in the
from a Control Device (either from the Control Device receive FIFO and retrieved by reading the UxRXB reg-
under consideration or from another Control Device on ister. The end of the forward frame starts a timer to
the bus) or a backward frame from a Control Gear. delay the backward frame response by wait time equal
to the number of half-bit periods stored in UxP1. The
data received in the forward frame is processed by the
application software. If the application decides to send
a backward frame in response to the forward frame, the
value of the backward frame is written to UxTXB. This
value is held for transmission in the transmit shift regis-
ter until the wait time expires and is then transmitted.
If the backward frame data is written to UxTXB after the
wait time has expired, it is held in the UxTXB register
until the end of the wait time following the next forward
frame. The TXMTIF bit is false when the backward
frame data is held in the transmit shift register. Receiv-
ing a UxRXIF interrupt before the TXMTIF goes true
indicates that the backward frame write was too late
and another forward frame was received before send-
ing the backward frame. The pending backward frame
has to be flushed by setting the TXBE bit, to prevent it
from being sent after the next Forward Frame.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 472


PIC18(L)F25/26K83
FIGURE 31-7: MANCHESTER TIMING
byte0 byte1
Write to UxTXB
Start byte0 byte1 Stop bit(s) idle Start
bit bit
TX pin
b7=1 b6=0 b5=0 b4=1 b0=1 b7=0 b6=1 b0=0
UxTXIF bit
(Transmit Buffer
Reg. Empty Flag)

TXMTIF bit
(Transmit Shift
Reg. Empty Flag)

FIGURE 31-8: DALI FRAME TIMING


Control Control
Byte 1 Code Byte 1
Code
Write to UxTXB

Start bit Stop bits wait period Start bit


TX pin CC<7> CC<6> CC<0> byte1<7> byte1<0>
UxTXIF bit
(Transmit Buffer
Reg. Empty Flag)

TXMTIF bit
(Transmit Shift
Reg. Empty Flag)

FIGURE 31-9: DALI FORWARD/BACK FRAME TIMING

forward wait period forward wait period


Device TX Forward Frame Forward Frame Forward Frame

Gear TX Back Frame


back wait period
Gear
UxTXB Write

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 473


PIC18(L)F25/26K83
31.7 General Purpose Manchester The input is checked for the idle level in the middle of
the first Stop bit, when receive verify on first is selected,
General purpose Manchester is a subset of the DALI as well as in the middle of the second Stop bit, when
mode. When the UxP1L register is cleared, there is no verify on both is selected. If any Stop bit verification
minimum wait time between frames. This allows full indicates a non-idle level, the framing error FERIF bit is
and half-duplex operation because writes to the UxTXB set for the received word.
are not held waiting for a receive operation to complete.
General purpose Manchester operation maintains all 31.9.1 DELAYED UXRXIF
other aspects of DALI mode such as: When operating in Half-Duplex mode, where the micro-
• Single-pulse Start bit controller needs to reverse the transceiver direction
• Most Significant bit first after a reception, it may be more convenient to hold off
• No stop periods between back-to-back bytes the UxRXIF interrupt until the end of the Stop bits to
avoid line contention. The user selects when the
General purpose Manchester mode is configured with
UxRXIF interrupt occurs with the STPMD bit in the
the following settings:
UxFIFO register. When STPMD is ‘1’, the UxRXIF
• MODE<3:0> = 1000 occurs at the end of the last Stop bit. When STPMD is
• TXEN = 1 ‘0’, UxRXIF occurs when the received byte is stored in
• RXEN = 1 the receive FIFO. When STP<1:0> = 10, the store
• UxP1 = 0h operation is performed in the middle of the second Stop
• UxBRGH:L = desired baud rate bit, otherwise, it is performed in the middle of the first
• TXPOL and RXPOL = desired Idle state Stop bit. The FERIF and PERIF interrupts are not
• STP = desired number of stop periods delayed with STPMD. Only UxRXIF is delayed when
• RxyPPS = TX pin selection code STPMD is set and should be the only indicator for
• TX pin TRIS control = 0 reversing transceiver direction.
• RXPPS = RX pin selection code
• RX pin TRIS control = 1 31.10 Operation after FIFO overflow
• Input pin ANSEL bit = 0
• ON = 1 The Receive Shift Register (RSR) can be configured to
stop or continue running during a receive FIFO
The Manchester bit stream timing is shown in
overflow condition. Stopped operation is the Legacy
Figure 31-7.
mode.

31.8 Polarity When the RSR continues to run during an overflow


condition, the first word received after clearing the
Receive and transmit polarity is user selectable and overflow will always be valid.
affects all modes of operation.
When the RSR is stopped during an overflow condition,
The idle level is programmable with the polarity control synchronization with the Start bits is lost. Therefore, the
bits in the UxCON2 register. The control bits default to first word received after the overflow is cleared may
‘0’, which select a high idle level. The low level Idle start in the middle of a word.
state is selected by setting the control bit to ‘1’. TXPOL
Operation during overflow is selected with the
controls the TX idle level. RXPOL controls the RX idle
RUNOVF bit in the UxCON2 register. Setting the
level.
RUNOVF bit selects the run during overflow method.

31.9 Stop Bits


The number of Stop bits is user selectable with the STP
bits in the UxCON2 register.The STP bits affect all
modes of operation.
Stop bits selections include:
• 1 transmit with receive verify on first
• 1.5 transmit with receive verify on first
• 2 transmit with receive verify on both
• 2 transmit with receive verify on first only
In all modes, except DALI, the transmitter is idle for the
number of Stop bit periods between each consecutively
transmitted word. In DALI, the Stop bits are generated
after the last bit in the transmitted data stream.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 474


PIC18(L)F25/26K83
31.11 Receive and Transmit Buffers 31.12 Flow Control
The UART uses small buffer areas to transmit and This section does not apply to the LIN, DALI, or DMX
receive data. These are sometimes referred to as modes.
FIFOs. Flow control is the means by which a sending UART
The receiver has a Receive Shift Register (RSR) and data stream can be suspended by a receiving UART.
two buffer registers. The buffer at the top of the FIFO Flow control prevents input buffers from overflowing
(earliest byte to enter the FIFO) is by retrieved by read- without software intervention. The UART supports both
ing the UxRXB register. hardware and XON/XOFF methods of flow control.
The transmitter has one Transmit Shift Register (TSR) The flow control method is selected with the FLO<1:0>
and one buffer register. Writes to UxTXB go to the bits in the UxCON2 register. Flow control is disabled
transmit buffer then immediately to the TSR, if it is when are both bits are cleared.
empty. When the TSR is not empty, writes to UxTXB
are held then transferred to the TSR when it becomes 31.12.1 HARDWARE FLOW CONTROL
available. Hardware flow control is selected by setting the
FLO<1:0> bits to ‘10’.
31.11.1 FIFO STATUS
Hardware flow control consists of three lines. The RS-
The UxFIFO register contains several Status bits for 232 signal names for two of these are RTS, and CTS.
determining the state of the receive and transmit buf- Both are low true. The third line may be used to control
fers. an RS-485 transceiver. The signal name for this is
The RXBE bit indicates that the receive FIFO is empty. TXDE for transmit drive enable. This output is high
This bit is essentially the inverse of UxRXIF. The RXBF when the TX output is actively sending a character and
bit indicates that the receive FIFO is full. low at all other times. The UART is configured as DTE
The transmitter has only one buffer register so the (computer) equipment which means RTS is an output
Status bits are essentially a copy and inverse of the and CTS is an input.
UxTXIF bit. The TXBE bit indicates that the buffer is The RTS and CTS signals work as a pair to control the
empty (same as UxTXIF) and the TXBF bit indicates transmission flow. A DTE-to-DTE configuration
that the buffer is full (UxTXIF inverse). A third transmit- connects the RTS output of the receiving UART to the
ter Status bit, TXWRE (transmit write error), is set CTS input of the sending UART. Refer to Figure 31-10.
whenever a UxTXB write is performed when the TXBF The UART receiving data asserts the RTS output low
bit is set. This indicates that the write was unsuccess- when the input FIFO is empty. When a character is
ful. received, the RTS output goes high until the UxRXB is
read to free up both FIFO locations.
31.11.2 FIFO RESET
When the CTS input goes high after a byte has started
All modes support resetting the receive and transmit
to transmit, the transmission will complete normally.
buffers.
The receiver accommodates this by accepting the
The receive buffer is flushed and all unread data dis- character in the second FIFO location even when the
carded when the RXBE bit in the UxFIFO register is CTS input is high.
written to ‘1’. The MOVWF instruction with the TXBE bit
cleared should be used to avoid inadvertently clearing
a byte pending in the TSR when UxTXB is empty.
Data written to UxTXB when TXEN is low will be held in
the Transmit Shift Register (TSR) then sent when
TXEN is set. The transmit buffer and inactive TSR are
flushed by setting the TXBE bit in the UxFIFO register.
Setting TXBE while a character is actively transmitting
from the TSR will complete the transmission without
being flushed.
Clearing the ON bit will discard all received data and
transmit data pending in the TSR and UxTXB.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 475


PIC18(L)F25/26K83
FIGURE 31-10: FLOW CONTROL 31.12.3 XON/XOFF FLOW CONTROL
UART 1 UART 2 XON/XOFF flow control is selected by setting the
(DTE) (DTE) FLO<1:0> bits to ‘01’.
XON/XOFF is a data based flow control method. The
RX TX signals to suspend and resume transmission are
special characters sent by the receiver to the
RTS CTS transmitter The advantage is that additional hardware
lines are not needed.
TX RX XON/XOFF flow control requires full-duplex operation
because the transmitter must be able to receive the
CTS RTS signal to suspend transmitting while the transmission is
in progress. Although XON and XOFF are not defined
in the ASCII code, the generally accepted values are
13h for XOFF and 11h for XON. The UART uses those
31.12.2 RS-485 TRANSCEIVER CONTROL codes.
Hardware flow control can be used to control the The transmitter defaults to XON, or transmitter
direction of an RS-485 transceiver as shown in enabled. This state is also indicated by the read-only
Figure 31-11. Configure the CTS input to be always XON bit in the UxFIFO register.
enabled by setting the UxCTSPPS selection to an
When an XOFF character is received, the transmitter
unimplemented port pin such as RD0. When the signal
stops transmitting after completing the character
and control lines are configured as shown in Figure 31-
actively being transmitted. The transmitter remains
11, then the UART will not receive its own
disabled until an XON character is received.
transmissions. To verify that there are no collisions on
the RS-485 lines then the transceiver RE control can XON will be forced on when software toggles the TXEN
be disconnected from TXDE and tied low thereby bit.
enabling loop-back reception of all transmissions. See When the RUNOVF bit in the UxCON2 register is set
Section 31.14 “Collision Detection” for more then XON and XOFF characters continue to be
information. received and processed without the need to clear the
input FIFO by reading the UxRXB. However, if the
FIGURE 31-11: RS-485 CONFIGURATION RUNOVF bit is clear then the UxRXB must be read to
avoid a receive overflow which will suspend flow
control when the receive buffer overflows.
UART VCC

RX R 4k7
(1) RE A
TXDE
DE B
TX D 4k7
SN75176
Gnd

Note 1: Configure UxCTSPPS to an


unimplemented input such as RD0
(UxCTSPPS = 0x18).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 476


PIC18(L)F25/26K83
31.13 Checksum The TXCIF flag in the UxERRIR register is used to
signal collisions. This signal is only useful when the TX
This section does not apply to the LIN mode, which output is looped back to the RX input and everything
handles checksums automatically. that is transmitted is expected to be received. If more
The transmit and receive checksum adders are than one transmitter is active at the same time, it can
enabled when the C0EN bit in the UxCON2 register is be assumed that the TX word will not match the RX
set. When enabled, the adders accumulate every byte word. The TXCIF detects this mismatch and flags an
that is transmitted or received. The accumulated sum interrupt. The TXCIF bit will also be set in DALI mode
includes the carry of the addition. Software is transmissions when the received bit is missing the
responsible for clearing the checksum registers before expected mid-bit transition.
a transaction and performing the check at the end of Collision detection is always active, regardless of
the transaction. whether or not the RX input is connected to the TX
The following is an example of how the checksum output. It is up to the user to disable the TXCIE bit when
registers could be used in the Asynchronous modes. collision interrupts are not required.
The software overhead of unloading the receive buffer
31.13.1 TRANSMIT CHECKSUM METHOD of transmitted data is avoided by setting the RUNOVF
1. Clear the UxTXCHK register. bit in UxCON2 and ignoring the receive interrupt and
2. Set the C0EN bit. letting the receive buffer overflow. When the transmis-
3. Send all bytes of the transaction output. sion is complete, prepare for receiving data by flushing
the receive buffer (see Section 31.11.2, FIFO Reset)
4. Invert UxTXCHK and send the result as the last
and clearing the RXFOIF overflow flag in the UxERRIR
byte of the transaction.
register.
31.13.2 RECEIVE CHECKSUM METHOD
31.15 RX/TX Activity Timeout
1. Clear the UxRXCHK register.
2. Set the C0EN bit. The UART works in conjunction with the HLT timers to
3. Receive all bytes in the transaction including the monitor activity on the RX and TX lines. Use this
checksum byte. feature to determine when there has been no activity
on the receive or transmit lines for a user specified
4. Set MSb of UxRXCHK if 7-bit mode is selected.
period of time.
5. Add 1 to UxRXCHK.
To use this feature, set the HLT to the desired timeout
6. If the result is ‘0’, the checksum passes,
period by a combination of the HLT clock source, timer
otherwise it fails.
prescale value, and timer period registers. Configure
The CERIF checksum interrupt flag is not active in any the HLT to reset on the UART TX or RX line and start
mode other than LIN. the HLT at the same time the UART is started. UART
activity will keep resetting the HLT to prevent a full HLT
31.14 Collision Detection period from elapsing. When there has been no activity
on the selected TX or RX line for longer than the HLT
External forces that interfere with the transmit line are period then an HLT interrupt will occur signaling the
detected in all modes of operation with collision timeout event.
detection. Collision detection is always active when
RXEN and TXEN are both set. For example, the following register settings will
configure HLT2 for a 5 ms timeout of no activity on
When the receive input is connected to the transmit U1RX:
output through either the same I/O pin or external
circuitry, a character will be received for every • T2PR = 0x9C (156 prescale periods)
character transmitted. The collision detection circuit • T2CLKCON = 0x05 (500 kHz internal oscillator)
provides a warning when the word received does not • T2HLT = 0x04 (free running, reset on rising edge)
match the word transmitted. • T2RST = 0x15 (reset on U1RX)
• T2CON = 0xC0 (Timer2 on with 1:16 prescale)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 477


PIC18(L)F25/26K83
31.16 Clock Accuracy with EXAMPLE 31-1: CALCULATING BAUD
Asynchronous Operation RATE ERROR
The factory calibrates the internal oscillator block For a device with FOSC of 16 MHz, desired baud rate
output (INTOSC). However, the INTOSC frequency of 9600, Asynchronous mode, BRGS = 0:
may drift as VDD or temperature changes, and this
directly affects the asynchronous baud rate. Two
methods may be used to adjust the baud rate clock, but FOSC
Desired Baud Rate = ---------------------------------------------
both require a reference clock source of some kind. 16  [UxBRG] + 1 
The first (preferred) method uses the OSCTUNE FOSC
register to adjust the INTOSC output. Adjusting the ---------------------------------------------
Desired Baud Rate
value of the OSCTUNE register allows for fine resolution X = --------------------------------------------- – 1
16
changes to the system clock source. See Section
7.2.2.3 “Internal Oscillator Frequency Adjustment” 16000000
---------------------------
for more information. 9600
= --------------------------- – 1
The other method adjusts the value of the Baud Rate 16
Generator. This can be done automatically with the
Auto-Baud Detect feature (see Section =  103.17  = 103
31.17.1 “Auto-Baud Detect”). There may not be fine
enough resolution when adjusting the Baud Rate
16000000
Generator to compensate for a gradual change of the Calculated Baud Rate = -------------------------------
16  103 + 1 
peripheral clock frequency.
= 9615
31.17 UART Baud Rate Generator (BRG)
Calc. Baud Rate – Desired Baud Rate
The Baud Rate Generator (BRG) is a 16-bit timer that Error = --------------------------------------------------------------------------------------------
Desired Baud Rate
is dedicated to the support of the UART operation.
The UxBRGH, UxBRGL register pair determines the  9615 – 9600 
period of the free running baud rate timer. The multiplier = ------------------------------------- = 0.16 %
9600
of the baud rate period is determined by the BRGS bit in
the UxCON0 register.
Table 31-1 contains the formulas for determining the
TABLE 31-1: BAUD RATE FORMULAS
baud rate. Example 31-1 provides a sample calculation
for determining the baud rate and baud rate error. BRGS BRG/UART Mode Baud Rate Formula

The high baud rate range (BRGS = 1) is intended to 1 High Rate FOSC/[4 (n+1)]
extend the baud rate range up to a faster rate when the
0 Normal Rate FOSC/[16(n+1)]
desired baud rate is not possible otherwise. Using the
normal baud rate range (BRGS = 0) is recommended Legend: n = value of UxBRGH, UxBRGL register pair.
when the desired baud rate is achievable with either
range.
Writing a new value to the UxBRGH, UxBRGL register
pair causes the BRG timer to be reset (or cleared). This
ensures that the BRG does not wait for a timer overflow
before outputting the new baud rate.
If the system clock is changed during an active receive
operation, a receive error or data loss may result. To
avoid this problem, check the status of the RXIDL bit to
make sure that the receive operation is idle before
changing the system clock.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 478


PIC18(L)F25/26K83
31.17.1 AUTO-BAUD DETECT RXIDL indicates that the sync input is active. RXIDL will
go low on the first falling edge and go high on the fifth
The UART module supports automatic detection and
rising edge.
calibration of the baud rate in the 8-bit Asynchronous
and LIN modes. However, setting ABDEN to start auto- The BRG auto-baud clock is determined by the BRGS
baud detection is neither necessary, nor possible in LIN bit as shown in Table 31-2. During ABD, the internal
mode because that mode supports auto-baud detec- BRG register is used as a 16-bit counter. However, the
tion automatically at the beginning of every data UxBRGH and UxBRGL registers retain the previous
packet. Enabling auto-baud detect with the ABDEN bit BRG value until the auto-baud process is successfully
applies to the Asynchronous modes only. completed. While calibrating the baud rate period, the
internal BRG register is clocked at 1/8th the BRG base
When Auto-Baud Detect (ABD) is active, the clock to
clock rate. The resulting byte measurement is the
the BRG is reversed. Rather than the BRG clocking the
average bit time when clocked at full speed and is
incoming RX signal, the RX signal is timing the BRG.
transferred to the UxBRGH and UxBRGL registers
The Baud Rate Generator is used to time the period of
when complete.
a received 55h (ASCII “U”), which is the Sync character
for the LIN bus. The unique feature of this character is Note 1: If the WUE bit is set with the ABDEN bit,
that it has five falling edges, including the Start bit edge, auto-baud detection will occur on the byte
five rising edges including the Stop bit edge. following the Break character (see Sec-
In 8-bit Asynchronous mode, setting the ABDEN bit in tion 31.17.3 “Auto-Wake-up on
the UxCON0 register enables the auto-baud calibration Break”).
sequence. The first falling edge of the RX input after 2: It is up to the user to determine that the
ABDEN is set will start the auto-baud calibration incoming character baud rate is within the
sequence. While the ABD sequence takes place, the range of the selected BRG clock source.
UART state machine is held in idle. On the first falling Some combinations of oscillator frequency
edge of the receive line, the UxBRG begins counting up and UART baud rates are not possible.
using the BRG counter clock as shown in Figure 31-12.
The fifth falling edge will occur on the RX pin at the TABLE 31-2: BRG COUNTER CLOCK RATES
beginning of the bit 7 period. At that time, an
accumulated value totaling the proper BRG period is BRGS BRG Base Clock BRG ABD Clock
left in the UxBRGH, UxBRGL register pair, the ABDEN 1 FOSC/4 FOSC/32
bit is automatically cleared and the ABDIF interrupt flag
is set. ABDIF must be cleared by software. 0 FOSC/16 FOSC/128

FIGURE 31-12: AUTOMATIC BAUD RATE CALIBRATION

BRG Value XXXXh 0000h 001Ch

Edge #1 Edge #2 Edge #3 Edge #4 Edge #5


RX pin Start bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 Stop bit

BRG Clock

Set by User Auto Cleared


in 8-bit mode
ABDEN bit

RXIDL

ABDIF bit
(Interrupt)
Cleared by software
UxBRG XXXXh 001Ch

Note 1: Auto-baud is supported in LIN and 8-bit Asynchronous modes only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 479


PIC18(L)F25/26K83
31.17.2 AUTO-BAUD OVERFLOW 31.17.3.1 Special Considerations
During the course of automatic baud detection, the Break Character
ABDOVF bit in the UxERRIR register will be set if the To avoid character errors or character fragments during
baud rate counter overflows before the fifth falling edge a wake-up event, the wake-up character must be all
is detected on the RX pin. The ABDOVF bit indicates zeros.
that the counter has exceeded the maximum count that
can fit in the 16 bits of the UxBRGH:UxBRGL register When the wake-up is enabled, the function works
pair. After the ABDOVF bit has been set, the state independent of the low time on the data stream. If the
machine continues to search until the fifth falling edge WUE bit is set and a valid non-zero character is
is detected on the RX pin. Upon detecting the fifth received, the low time from the Start bit to the first rising
falling RX edge, the hardware will set the ABDIF edge will be interpreted as the wake-up event. The
interrupt flag and clear the ABDEN bit in the UxCON0 remaining bits of the character will be received as a
register. The UxBRGH and UxBRGL register values fragmented character and subsequent characters can
retain their previous value. The ABDIF flag in the result in framing or overrun errors.
UxUIR register and ABDOVF flag in the UxERRIR Therefore, the initial character of the transmission must
register can be cleared by software directly. To be all zeros. This must be eleven or more bit times, 13-
generate an interrupt on an auto-baud overflow bit times recommended for LIN bus, or any number of
condition, all the following bits must be set: bit times for standard RS-232 devices.
• ABDOVE bit in the UxERRIE register Oscillator Start-up Time
• UxEIE bit in the PIEx register
Oscillator start-up time must be considered, especially
• PIE and GIE bits in the INTCON register
in applications using oscillators with longer start-up
To terminate the auto-baud process before the ABDIF intervals (i.e., LP, XT or HS/PLL modes). The Sync
flag is set, clear the ABDEN bit, then clear the ABDOVF Break (or wake-up signal) character must be of
bit in the UxERRIR register. sufficient length, and be followed by a sufficient
interval, to allow enough time for the selected oscillator
31.17.3 AUTO-WAKE-UP ON BREAK to start and provide proper initialization of the UART.
During Sleep mode, all clocks to the UART are WUE Bit
suspended. Because of this, the Baud Rate Generator
To ensure that no actual data is lost, check the RXIDL
is inactive and a proper character reception cannot be
bit to verify that a receive operation is not in process
performed. The Auto-Wake-up feature allows the
before setting the WUE bit. If a receive operation is not
controller to wake-up due to activity on the RX line.
occurring, the WUE bit may then be set just prior to
The Auto-Wake-up feature is enabled by setting both the entering the Sleep mode.
WUE bit in the UxCON1 register and the UxIE bit in the
PIEx register. Once set, the normal receive sequence on
RX is disabled, and the UART remains in an Idle state,
monitoring for a wake-up event independent of the CPU
mode. A wake-up event consists of a transition out of the
Idle state on the RX line. (This coincides with the start of
a Break or a wake-up signal character for the LIN
protocol.)
The UART module generates a WUIF interrupt
coincident with the wake-up event. The interrupt is
generated synchronously to the Q clocks in normal CPU
operating modes (Figure 31-13), and asynchronously, if
the device is in Sleep mode (Figure 31-14). The
interrupt condition is cleared by clearing the WUIF bit in
the UxUIR register. To generate an interrupt on a wake-
up event, all the following bits must be set:
• UxIE bit in the PIEx register
• PIE and GIE bits in the INTCON register
The WUE bit is automatically cleared by the transition
to the Idle state on the RX line at the end of the Break.
This signals to the user that the Break event is over. At
this point, the UART module is in Idle mode, waiting to
receive the next character.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 480


PIC18(L)F25/26K83
FIGURE 31-13: AUTO-WAKE-UP BIT (WUE) TIMING DURING NORMAL OPERATION
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
OSC1
Bit set by user Auto Cleared
WUE bit
RX Line

WUIF
Cleared by software

Note 1: The UART remains in Idle while the WUE bit is set.

FIGURE 31-14: AUTO-WAKE-UP BIT (WUE) TIMINGS DURING SLEEP

Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1Q2 Q3 Q4


OSC1
Bit Set by User Auto Cleared
WUE bit
RX Line
Note 1
WUIF
Cleared by software
Sleep Command Executed Sleep Ends

Note 1: If the wake-up event requires long oscillator warm-up time, the automatic clearing of the WUE bit can occur while the stposc signal is
still active. This sequence should not depend on the presence of Q clocks.
2: The UART remains in Idle while the WUE bit is set.

31.18 Transmitting a Break 31.19 Receiving a Break


The UART module has the capability of sending either The UART has counters to detect when the RX input
a fixed length Break period or a software timed Break remains in the space state for an extended period of
period. The fixed length Break consists of a Start bit, time. When this happens, the RXBKIF bit in the
followed by 12 ‘0’ bits and a Stop bit. The software UxERRIR register is set.
timed Break is generated by setting and clearing the A Break is detected when the RX input remains in the
BRKOVR bit in the UxCON1 register. space state for 11 bit periods for Asynchronous and LIN
To send the fixed length Break, set the SENDB and modes, and 23 bit periods for DMX mode.
TXEN bits in the UxCON0 register. The Break The user can select to receive the Break interrupt as
sequence is then initiated by a write to UxTXB. The soon as the Break is detected or at the end of the
timed Break will occur first, followed by the character Break, when the RX input returns to the Idle state.
written to UxTXB that initiated the Break. The initiating When the RXBIMD bit in the UxCON1 is ‘1’ then
character is typically the Sync character of the LIN RXBKIF is set immediately upon Break detection.
specification. When RXBIMD is ‘0’ then RXBKIF is set when the RX
SENB is disabled in the LIN and DMX modes because input returns to the Idle state.
those modes generate the Break sequence
automatically. 31.20 UART Operation During Sleep
The SENDB bit is automatically reset by hardware after
The UART ceases to operate during Sleep. The safe
the Break Stop bit is complete.
way to wake the device from Sleep by a serial
The TXMTIF bit in the UxERRIR register indicates when operation is to use the Wake-on-Break feature of the
the transmit operation is active or idle, just as it does UART. See Section 31.17.3, Auto-Wake-up on Break
during normal transmission. See Figure 31-15 for the
timing of the Break sequence.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 481


PIC18(L)F25/26K83
FIGURE 31-15: SEND BREAK CHARACTER SEQUENCE

Write to UxTXB
Sync Write

BRG Output
(Shift Clock)
TX (pin) Start bit bit 0 bit 1 bit 11 Sync start
Stop bit
Break
UxTXIF bit
(Transmit
Interrupt Flag)
TXMTIF bit
(Transmit Shift
Empty Flag)
Auto Cleared
SENDB
(send Break
control bit)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 482


PIC18(L)F25/26K83
31.21 Register Definitions: UART Control
Long bit name prefixes for the UART peripherals are
shown below. Refer to Section 1.3 “Register and Bit
naming conventions”for more information.

Peripheral Bit Name Prefix


UART 1 U1
UART 2 U2

REGISTER 31-1: UxCON0: UART CONTROL REGISTER 0


R/W-0/0 R/W/HS/HC-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
BRGS ABDEN TXEN RXEN MODE<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HC = Hardware clear

bit 7 BRGS: Baud rate Generator Speed Select bit


1 = Baud rate generator is high speed with 4 baud clocks per bit
0 = Baud rate generator is normal speed with 16 baud clocks per bit
bit 6 ABDEN: Auto-baud Detect Enable bit(3)
1 = Auto-baud is enabled. Receiver is waiting for Sync character (0x55)
0 = Auto-baud is not enabled or auto-baud is complete
bit 5 TXEN: Transmit Enable Control bit(2)
1 = Transmit is enabled. TX output pin drive is forced on when transmission is active, and controlled by PORT
TRIS control when transmission is idle.
0 = Transmit is disabled. TX output pin drive is controlled by PORT TRIS control
bit 4 RXEN: Receive Enable Control bit(2)
1 = Receiver is enabled
0 = Receiver is disabled
bit 3-0 MODE<3:0>: UART Mode Select bits(1)
1111 = Reserved
1110 = Reserved
1101 = Reserved
1100 = LIN Master/Slave mode
1011 = LIN Slave-Only mode
1010 = DMX mode
1001 = DALI Control Gear mode
1000 = DALI Control Device mode
0111 = Reserved
0110 = Reserved
0101 = Reserved
0100 = Asynchronous 9-bit UART Address mode. 9th bit: 1 = address, 0 = data
0011 = Asynchronous 8-bit UART mode with 9th bit even parity
0010 = Asynchronous 8-bit UART mode with 9th bit odd parity
0001 = Asynchronous 7-bit UART mode
0000 = Asynchronous 8-bit UART mode

Note 1: Changing the UART MODE while ON = 1 may cause unexpected results.
2: Clearing TXEN or RXEN will not clear the corresponding buffers. Use TXBE or RXBE to clear the buffers.
3: ABDEN is read-only when MODE = 1001. When MODE = 100x and ABDEN = 1, then auto-baud is determined from
Start bit.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 483


PIC18(L)F25/26K83

REGISTER 31-2: UxCON1: UART CONTROL REGISTER 1


R/W-0/0 U-0 U-0 R/W/HC-0/0 R/W-0/0 U-0 R/W-0/0 R/W/HC-0/0
ON — — WUE RXBIMD — BRKOVR SENDB
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HC = Hardware clear

bit 7 ON: Serial Port Enable bit


1 = Serial port enabled
0 = Serial port disabled (held in Reset)
bit 6-5 Unimplemented: Read as ‘0’
bit 4 WUE: Wake-up Enable bit
1 = Receiver is waiting for falling RX input edge which will set the UxIF bit. Cleared by hardware on
wake event. Also requires UxIE bit of PIEx to enable wake
0 = Receiver operates normally
bit 3 RXBIMD: Receive Break Interrupt Mode Select bit
1 = Set RXBKIF immediately when RX in has been low for the minimum Break time
0 = Set RXBKIF on rising RX input after RX in has been low for the minimum Break time
bit 2 Unimplemented: Read as ‘0’
bit 1 BRKOVR: Send Break Software Override bit
1 = TX output is forced to non-idle state
0 = TX output is driven by transmit shift register
bit 0 SENDB: Send Break Control bit(1)
1 = Output Break upon UxTXB write. Written byte follows Break. Bit is cleared by hardware.
0 = Break transmission completed or disabled

Note 1: This bit is read-only in LIN, DMX, and DALI modes.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 484


PIC18(L)F25/26K83

REGISTER 31-3: UxCON2: UART CONTROL REGISTER 2


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
RUNOVF RXPOL STP<1:0> C0EN TXPOL FLO<1:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 RUNOVF: Run During Overflow Control bit


1 = RX input shifter continues to synchronize with Start bits after overflow condition
0 = RX input shifter stops all activity on receiver overflow condition
bit 6 RXPOL: Receive Polarity Control bit
1 = Invert RX polarity, Idle state is low
0 = RX polarity is not inverted, Idle state is high
bit 5-4 STP<1:0>: Stop Bit Mode Control bits(1)
11 = Transmit 2 Stop bits, receiver verifies first Stop bit
10 = Transmit 2 Stop bits, receiver verifies first and second Stop bits
01 = Transmit 1.5 Stop bits, receiver verifies first Stop bit
00 = Transmit 1 Stop bit, receiver verifies first Stop bit
bit 3 C0EN: Checksum Mode Select bit
LIN mode:
1 = Checksum Mode 1, enhanced LIN checksum includes PID in sum
0 = Checksum Mode 0, legacy LIN checksum does not include PID in sum
Other modes:
1 = Add all TX and RX characters
0 = Checksums disabled
bit 2 TXPOL: Transmit Polarity Control bit
1 = Output data is inverted, TX output is low in Idle state
0 = Output data is not inverted, TX output is high in Idle state
bit 1-0 FLO<1:0>: Handshake Flow Control bits
11 = Reserved
10 = RTS/CTS and TXDE Hardware flow control
01 = XON/XOFF Software flow control
00 = Flow control is off

Note 1: All modes transmit selected number of Stop bits. Only DMX and DALI receivers verify selected number of
Stop bits and all others verify only the first Stop bit.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 485


PIC18(L)F25/26K83

REGISTER 31-4: UxERRIR: UART ERROR INTERRUPT FLAG REGISTER


R/S/C-1/1 R/S/C-0/0 R/W/S-0/0 R/W/S-0/0 R/S/C-0/0 R/W/S-0/0 R/W/S-0/0 R/W/S-0/0
TXMTIF PERIF ABDOVF CERIF FERIF RXBKIF RXFOIF TXCIF
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared S = Hardware set C = Hardware clear

bit 7 TXMTIF: Transmit Shift Register Empty Interrupt Flag bit


1 = Transmit shift register is empty (Set at end of Stop bits)
0 = Transmit shift register is actively shifting data
bit 6 PERIF: Parity Error Interrupt Flag bit
LIN and Parity modes:
1 = Unread byte at top of input FIFO has parity error
0 = Unread byte at top of input FIFO does not have parity error
DALI Device mode:
1 = Unread byte at top of input FIFO received as Forward Frame
0 = Unread byte at top of input FIFO received as Back Frame
Address mode:
1 = Unread byte at top of input FIFO received as address
0 = Unread byte at top of input FIFO received as data
Other modes:
Not used
bit 5 ABDOVF: Auto-Baud Detect Overflow Interrupt Flag bit
DALI mode:
1 = Start bit measurement overflowed counter
0 = No overflow during Start bit measurement
Other modes:
1 = Baud rate generator overflowed during the auto detection sequence
0 = Baud rate generator has not overflowed
bit 4 CERIF: Checksum Error Interrupt Flag bit (LIN mode only)
1 = Checksum error
0 = No checksum error
bit 3 FERIF: Framing Error Interrupt Flag bit
1 = Unread byte at top of input FIFO has framing error
0 = Unread byte at top of input FIFO does not have framing error
bit 2 RXBKIF: Break Reception Interrupt Flag bit
1 = Break detected
0 = No Break detected
bit 1 RXFOIF: Receive FIFO Overflow Interrupt Flag bit
1 = Receive FIFO has overflowed
0 = Receive FIFO has not overflowed
bit 0 TXCIF: Transmit Collision Interrupt Flag bit
1 = Transmitted word is not equal to the word received during transmission
0 = Transmitted word equals the word received during transmission

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 486


PIC18(L)F25/26K83

REGISTER 31-5: UxERRIE: UART ERROR INTERRUPT ENABLE REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
TXMTIE PERIE ABDOVE CERIE FERIE RXBKIE RXFOIE TXCIE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 TXMTIE: Transmit Shift Register Empty Interrupt Enable bit


1 = Interrupt enabled
0 = Interrupt not enabled
bit 6 PERIE: Parity Error Interrupt Enable bit
1 = Interrupt enabled
0 = Interrupt not enabled
bit 5 ABDOVE: Auto-Baud Detect Overflow Interrupt Enable bit
1 = Interrupt enabled
0 = Interrupt not enabled
bit 4 CERIE: Checksum Error Interrupt Enable bit
1 = Interrupt enabled
0 = Interrupt not enabled
bit 3 FERIE: Framing Error Interrupt Enable bit
1 = Interrupt enabled
0 = Interrupt not enabled
bit 2 RXBKIE: Break Reception Interrupt Enable bit
1 = Interrupt enabled
0 = Interrupt not enabled
bit 1 RXFOIE: Receive FIFO Overflow Interrupt Enable bit
1 = Interrupt enabled
0 = Interrupt not enabled
bit 0 TXCIE: Transmit Collision Interrupt Enable bit
1 = Interrupt enabled
0 = Interrupt not enabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 487


PIC18(L)F25/26K83

REGISTER 31-6: UxUIR: UART GENERAL INTERRUPT REGISTER


R/S/W-0/0 R/S/W-0/0 U-0 U-0 U-0 R/W-0/0 U-0 U-0
WUIF ABDIF — — — ABDIE — —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared S = Hardware set

bit 7 WUIF: Wake-up Interrupt bit


1 = Idle to non-idle transition on RX line detected when WUE is set. Also sets UxIF. (WUIF must be
cleared by software to clear UxIF)
0 = WUE not enabled by software or no transition detected
bit 6 ABDIF: Auto-Baud detect interrupt bit
1 = Auto-baud detection complete. Status shown in UxIF when ABDIE is set. (Must be cleared by
software)
0 = Auto-baud not enabled or auto-baud enabled and auto-baud detection not complete
bit 5-3 Unimplemented: Read as ‘0’
bit 2 ABDIE: Auto-Baud Detect Interrupt Enable bit
1 = ABDIF will set UxIF bit in PIRx register
0 = ABDIF will not set UxIF
bit 1-0 Unimplemented: Read as ‘0’

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 488


PIC18(L)F25/26K83

REGISTER 31-7: UxFIFO: UART FIFO STATUS REGISTER


R/W/S-0/0 R/W-0/0 R/W/S/C-1/1 R/S/C-0/0 R/S/C-1/1 S/C-1/1 R/W/S/C-1/1 R/S/C-0/0
TXWRE STPMD TXBE TXBF RXIDL XON RXBE RXBF
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared S = Hardware set C = Hardware clear

bit 7 TXWRE: Transmit Write Error Status bit (Must be cleared by software)
LIN Master mode:
1 = UxP1L was written when a master process was active
LIN Slave mode:
1 = UxTXB was written when UxP2 = 0 or more than UxP2 bytes have been written to UxTXB since
last Break
Address Detect mode:
1 = UxP1L was written before the previous data in UxP1L was transferred to TX shifter
All modes:
1 = A new byte was written to UxTXB when the output FIFO was full
0 = No error
bit 6 STPMD: Stop Bit Detection Mode bit
1 = Assert UxRXIF at end of last Stop bit or end of first Stop bit when STP = 11
0 = Assert UxRXIF in middle of first Stop bit
bit 5 TXBE: Transmit Buffer Empty Status bit
1 = Transmit buffer is empty. Setting this bit will clear the transmit buffer and output shift register.
0 = Transmit buffer is not empty. Software cannot clear this bit.
bit 4 TXBF: Transmit Buffer Full Status bit
1 = Transmit buffer is full
0 = Transmit buffer is not full
bit 3 RXIDL: Receive Pin Idle Status bit
1 = Receive pin is in Idle state
0 = UART is receiving Start, Stop, Data, Auto-baud, or Break
bit 2 XON: Software Flow Control Transmit Enable Status bit
1 = Transmitter is enabled
0 = Transmitter is disabled
bit 1 RXBE: Receive Buffer Empty Status bit
1 = Receive buffer is empty. Setting this bit will clear the RX buffer(1)
0 = Receive buffer is not empty. Software cannot clear this bit.
bit 0 RXBF: Receive Buffer Full Status bit
1 = Receive buffer is full
0 = Receive buffer is not full

Note 1: The BSF instruction should not be used to set RXBE because doing so will clear a byte pending in the
transmit shift register when the UxTXB register is empty. Instead, use the MOVWF instruction with a ‘0’ in
the TXBE bit location.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 489


PIC18(L)F25/26K83

REGISTER 31-8: UxBRGL: UART BAUD RATE GENERATOR LOW REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
BRG<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 BRG<7:0>: Least Significant Byte of Baud Rate Generator

REGISTER 31-9: UxBRGH: UART BAUD RATE GENERATOR HIGH REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
BRG<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 BRG<15:8>: Most Significant Byte of Baud Rate Generator


Note 1: The UxBRG registers should only be written when ON = 0.
2: Maximum BRG value when MODE = ‘100x’ and BRGS = 1 is 0x7FFE.
3: Maximum BRG value when MODE = ‘100x’ and BRGS = 0 is 0x1FFE.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 490


PIC18(L)F25/26K83

REGISTER 31-10: UxRXB: UART RECEIVE REGISTER


R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0 R-0/0
RXB<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 RXB<7:0>: Top of Receive Buffer

REGISTER 31-11: UxTXB: UART TRANSMIT REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
TXB<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 TXB<7:0>: Bottom of Transmit Buffer

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 491


PIC18(L)F25/26K83

REGISTER 31-12: UxP1H: UART PARAMETER 1 HIGH REGISTER


U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0/0
— — — — — — — P1<8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 Unimplemented: Read as ‘0’


bit 0 P1<8>: Most Significant Bit of Parameter 1
DMX mode:
Most Significant bit of number of bytes to transmit between Start Code and automatic Break generation
DALI Control Device mode:
Most Significant bit of idle time delay after which a Forward Frame is sent. Measured in half-bit periods
DALI Control Gear mode:
Most Significant bit of delay between the end of a Forward Frame and the start of the Back Frame
Measured in half-bit periods
Other modes:
Not used

REGISTER 31-13: UxP1L: UART PARAMETER 1 LOW REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
P1<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 P1<7:0>: Least Significant Bits of Parameter 1


DMX mode:
Least Significant Byte of number of bytes to transmit between Start Code and automatic Break
generation
DALI Control Device mode:
Least Significant Byte of idle time delay after which a Forward Frame is sent. Measured in half-bit periods
DALI Control Gear mode:
Least Significant Byte of delay between the end of a Forward Frame and the start of the Back Frame
Measured in half-bit periods
LIN mode:
PID to transmit (Only Least Significant 6 bits used)
Asynchronous Address mode:
Address to transmit (9th transmit bit automatically set to ‘1’)
Other modes:
Not used

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 492


PIC18(L)F25/26K83

REGISTER 31-14: UxP2H: UART PARAMETER 2 HIGH REGISTER


U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0/0
— — — — — — — P2<8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 Unimplemented: Read as ‘0’


bit 0 P2<8>: Most Significant Bit of Parameter 2
DMX mode:
Most Significant bit of first address of receive block
DALI mode:
Most Significant bit of number of half-bit periods of idle time in Forward Frame detection threshold
Other modes:
Not used

REGISTER 31-15: UxP2L: UART PARAMETER 2 LOW REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
P2<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 P2<7:0>: Least Significant Bits of Parameter 2


DMX mode:
Least Significant Byte of first address of receive block
LIN Slave mode:
Number of data bytes to transmit
DALI mode:
Least Significant Byte of number of half-bit periods of idle time in Forward Frame detection threshold
Asynchronous Address mode:
Receiver address
Other modes:
Not used

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 493


PIC18(L)F25/26K83

REGISTER 31-16: UxP3H: UART PARAMETER 3 HIGH REGISTER


U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0/0
— — — — — — — P3<8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 Unimplemented: Read as ‘0’


bit 0 P3<8>: Most Significant Bit of Parameter 3
DMX mode:
Most Significant bit of last address of receive block
Other modes:
Not used

REGISTER 31-17: UxP3L: UART PARAMETER 3 LOW REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
P3<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 P3<7:0>: Least Significant Bits of Parameter 3


DMX mode:
Least Significant Byte of last address of receive block
LIN Slave mode:
Number of data bytes to receive
Asynchronous Address mode:
Receiver address mask. Received address is XOR’d with UxP2L then AND’d with UxP3L
Match occurs when result is zero
Other modes:
Not used

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 494


PIC18(L)F25/26K83

REGISTER 31-18: UxTXCHK: UART TRANSMIT CHECKSUM RESULT REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
TXCHK<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 TXCHK<7:0>: Checksum calculated from TX bytes


LIN mode and C0EN = 1:
Sum of all transmitted bytes including PID
LIN mode and C0EN = 0:
Sum of all transmitted bytes except PID
All other modes and C0EN = 1:
Sum of all transmitted bytes since last clear
All other modes and C0EN = 0:
Not used

REGISTER 31-19: UxRXCHK: UART RECEIVE CHECKSUM RESULT REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
RXCHK<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 RXCHK<7:0>: Checksum calculated from RX bytes


LIN mode and C0EN = 1:
Sum of all received bytes including PID
LIN mode and C0EN = 0:
Sum of all received bytes except PID
All other modes and C0EN = 1:
Sum of all received bytes since last clear
All other modes and C0EN = 0:
Not used

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 495


PIC18(L)F25/26K83

TABLE 31-3: SUMMARY OF REGISTERS ASSOCIATED WITH THE UART


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page
UxCON0 BRGS ABDEN TXEN RXEN MODE<3:0> 483
UxCON1 ON — — WUE RXBIMD — BRKOVR SENDB 484
UxCON2 RUNOVF RXPOL STP<1:0> C0EN TXPOL FLO<1:0> 485
UxERRIR TXMTIF PERIF ABDOVF CERIF FERIF RXBKIF RXFOIF TXCIF 486
UxERRIE TXMTIE PERIE ABDOVE CERIE FERIE; RXBKIE RXFOIE TXCIE 487
UxUIR WUIF ABDIF — — — ABDIE — — 488
UxFIFO TXWRE STPMD TXBE TXBF RXIDL XON RXBE RXBF 489
UxBRGL BRG<7:0> 490
UxBRGH BRG<15:8> 490
UxRXB RXB<7:0> 491
UxTXB TXB<7:0> 491
UxP1H — — — — — — — P1<8> 492
UxP1L P1<7:0> 492
UxP2H — — — — — — — P2<8> 493
UxP2L P2<7:0> 493
UxP3H — — — — — — — P3<8> 494
UxP3L P3<7:0> 494
UxTXCHK TXCHK<7:0> 495
UxRXCHK RXCHK<7:0> 495
Legend: — = unimplemented, read as ‘0’. Shaded cells are unused by the UART module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 496


PIC18(L)F25/26K83
32.0 SERIAL PERIPHERAL
INTERFACE (SPI) MODULE

32.1 SPI Module Overview


The SPI (Serial Peripheral Interface) module is a
synchronous serial data communication bus that
operates in Full-Duplex mode. Devices communicate
in a master/slave environment where the master device
initiates the communication. A slave device is
controlled through a Chip Select known as Slave
Select. Example slave devices include serial
EEPROMs, shift registers, display drivers, A/D
converters, or another PIC® device.
The SPI bus specifies four signal connections:
• Serial Clock (SCK)
• Serial Data Out (SDO)
• Serial Data IN (SDI)
• Slave Select (SS)
The SPI interface supports the following modes and
features:
• Master mode
• Slave mode
• Clock Polarity and Edge Select
• SDI, SDO, and SS Polarity Control
• Separate Transmit and Receive Enables
• Slave Select Synchronization
• Daisy-chain connection of slave devices
• Separate Transmit and Receive Buffers with
2-byte FIFO and DMA capabilities
Figure 32-1 shows the block diagram of the SPI
module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 497


PIC18(L)F25/26K83
FIGURE 32-1: SPI MODULE SIMPLIFIED BLOCK DIAGRAM

Data bus Rev. 10-000076B


9/14/2016

Read Write

8 8

Receive FIFO Transmit FIFO


(2 deep) (2 deep)

8 8

SDI SPIxSDIPPS Receive Shift Transmit


RxyPPS SDO
Register Serializer(1)
SDIP

SDOP

1
RXR TXR
1
SS(in) SPIxSSPPS
0 RxyPPS
SSP
SCK(out)

CKP
SSET SPI Control Module
and Transfer Counter

See
SPIxCLK
Register SCK Generator 1
0

1
SPIxBAUD
1
MST
0 RxyPPS

SS(out)
CLKSEL<3:0>

SSP
SCK(in) SPIxSCKPPS
SSET

CKP

Note 1: If TXR=1 and the transmit FIFO is empty, the previous value of the
receive shift register will be sent to the transmit serializer.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 498


PIC18(L)F25/26K83
The SPI transmit output (SDO_out) is available to the • Master sends useful data and slave sends dummy
remappable PPS SDO pin and internally to the data
following peripherals: • Master sends useful data and slave sends useful
• Configurable Logic Cell (CLC) data
• Data Signal Modulator (DSM) • Master sends dummy data and slave sends useful
data
The SPI bus typically operates with a single master
device and one or more slave devices. When multiple In this particular SPI module, dummy data may be sent
slave devices are used, an independent Slave Select without software involvement, by clearing either the
connection is required from the master device to each RXR bit (for receiving dummy data) or the TXR bit (for
slave device. sending dummy data) (see Table 32-1 as well as
Section 32.5 “Master mode” and Section 32.6
The master selects only one slave at a time. Most slave
“Slave Mode” for further TXR/RXR setting details).
devices have tri-state outputs so their output signal
This SPI module can send transmissions of any
appears disconnected from the bus when they are not
number of bits, and can send information in segments
selected.
of varying size (from 1-8 bits in width). As such,
Transmissions typically involve shift registers, eight bits transmissions may involve any number of clock cycles,
in size, one in the master and one in the slave. With depending on the amount of data to be transmitted.
either the master or the slave device, data is always
When there is no more data to be transmitted, the
shifted out one bit at a time, with the Most Significant bit
master stops sending the clock signal and deselects
(MSb) shifted out first. At the same time, a new bit is
the slave.
shifted into the device. Unlike older Microchip devices,
the SPI on the PIC18(L)F2X/4X/5XK42 contains two Every slave device connected to the bus that has not
separate registers for incoming and outgoing data. been selected through its Slave Select line disregards
Both registers also have 2-byte FIFO buffers and allow the clock and transmission signals and does not
for DMA bus connections. transmit out any data of its own.
Figure 32-2 shows a typical connection between two
PIC18F2X/4XK42 devices configured as master and
slave devices.
Data is shifted out of the transmit FIFO on the
programmed clock edge and into the receive shift
register on the opposite edge of the clock.
The master device transmits information on its SDO
output pin which is connected to, and received by, the
slave’s SDI input pin. The slave device transmits
information on its SDO output pin, which is connected
to, and received by, the master’s SDI input pin.
The master device sends out the clock signal. Both the
master and the slave devices should be configured for
the same clock polarity.
During each SPI clock cycle, a full-duplex data
transmission occurs. This means that while the master
device is sending out the MSb from its output register
(on its SDO pin) and the slave device is reading this bit
and saving as the LSb of its input register, that the slave
device is also sending out the MSb from its shift register
(on its SDO pin) and the master device is reading this
bit and saving it as the LSb of its input register.
After eight bits have been shifted out, the master and
slave have exchanged register values and stored the
incoming data into the receiver FIFOs.
If there is more data to exchange, the registers are
loaded with new data and the process repeats itself.
Whether the data is meaningful or not (dummy data)
depends on the application software. This leads to
three scenarios for data transmission:

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 499


PIC18(L)F25/26K83
FIGURE 32-2: SPI MASTER/SLAVE CONNECTION WITH FIFOs
Rev. 10-000080B
9/14/2016

SPI Master MST=1 SPI Slave MST=0

Receive FIFO
Transmit FIFO (SPIxRXB)
(SPIxTXB) SDOx SDIx
Receive Shift
Register
LSb MSb LSb MSb

(Note 1) (Note 1)

Receive FIFO
(SPIxRXB) Transmit FIFO
SDIx SDOx (SPIxTXB)
Receive Shift
Register Serial clock
SCKx SCKx
MSb LSb MSb LSb
Slave Select
SSxOUT/ SSxIN
PIC18F2X/4XK42 GPIO (optional) PIC18F2X/4XK42

Note 1: In some modes, if the Transmit FIFO is empty, the most recently
received byte of data will be transmitted
2: This diagram assumes that the LSBF bit is cleared (communications are
MSb-first). If LSBF is set, the communications will be LSb-first.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 500


PIC18(L)F25/26K83
32.2 SPI REGISTERS The SPIxINTF and SPIxINTE are the flags and
enables, respectively, for SPI-specific interrupts. They
• SPI Interrupt Flag Register (SPIxINTF) are tied to the SPIxIF flag and SPIxIE enable in the PIR
• SPI Interrupt Enable Register (SPIxINTE) and PIE registers, which is triggered when any interrupt
• SPI Byte Count High and Low Registers contained in the SPIxINTF/SPIxINTE registers is
(SPIxTCTH/L) triggered. The PIR/PIE registers also contain
• SPI Bit Count Register (SPIxTWIDTH) SPIxTXIF/SPIxTXIE bits, which are the interrupt flag
and enable for the SPI Transmit Interrupt, as well as the
• SPI Baud Rate Register (SPIxBAUD)
SPIxRXIF/SPIxRXIE bits, which are the interrupt flag
• SPI Control Register 0 (SPIxCON0) and enable for the SPI Receive Interrupt.
• SPI Control Register 1 (SPIxCON1)
• SPI Control Register 2 (SPIxCON2) 32.3 SPI MODE OPERATION
• SPI FIFO Status Register (SPIxSTATUS)
When initializing the SPI, several options need to be
• SPI Receiver Buffer Register (SPIxRB)
specified. This is done by programming the appropriate
• SPI Transmit Buffer Register (SPIxTB) control bits (SPIxCON0<2:0>, SPIxCON1<7:4>,
• SPI Clock Select Register (SPIxCLKSEL) SPIxCON1<2:0>, and SPIxCON2<2:0>). These
SPIxCON0, SPIxCON1, and SPIxCON2 are control control bits allow the following to be specified:
registers for the SPI module. • Master mode (SCK is the clock output)
SPIxSTATUS contains several Status bits that indicate • Slave mode (SCK is the clock input)
the status of both the SPI module and the receive and • Clock Polarity (Idle state of SCK)
transmit FIFOs. • Input, Output, and Slave Select Polarity
SPIxBAUD and SPIxCLKSEL control the baud rate • Data Input Sample Phase (middle or end of data
generator of the SPI module when in Master mode. The output time)
SPIxCLKSEL selects the clock source that is used. The • Clock Edge (output data on first/second edge of
SPIxBAUD configures the clock divider used on that SCK)
clock. More information on the baud rate generator is
• Clock Rate (Master mode only)
available in Section 32.5.6 “Master Mode SPI Clock
Configuration”.” • Slave Select Mode (Master or Slave mode)
• MSB-First or LSB-First
SPIxTxB and SPIxRxB are the transmit and receive
buffer registers used to send and receive data on the • Receive/Transmit Modes
SPI bus. They both offer indirect access to shift - Full-duplex
registers that are used for shifting the data in and out. - Receive-without-transmit
Both registers access the two-byte FIFOs, allowing for - Transmit-without-receive
multiple transmissions/receptions to be stored between • Transfer Counter Mode (Transmit-without-receive
software transfers the data. mode)
The SPIxTCTH:L register pair either count or control
the number of bits or bytes in a data transfer. When
BMODE = 1, the SPIxTCT value signifies bytes and the
SPIxTWIDTH value signifies the number of bits in a
byte. When BMODE = 0, the SPIxTCT value is
concatenated with the SPIxTWIDTH register to signify
bits. In Master Receive-only mode (TXR = 0 and
RXR = 1), the data transfer is initiated by writing
SPIxTCT with the desired bit or byte value to transfer.
In Master Transmit mode (TXR = 1), the data transfer
is initiated by writing the SPIxTxB register, in which
case the SPIxTCT is a down counter for the bits or
bytes transferred.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 501


PIC18(L)F25/26K83
32.3.1 ENABLING AND DISABLING THE 32.3.3 TRANSMIT AND RECEIVE FIFOS
SPI MODULE The transmission and reception of data from the SPI
To enable the serial peripheral, the SPI enable bit (EN module is handled by two FIFOs, one for reception and
in SPIxCON0) must be set. To reset or reconfigure SPI one for transmission (addressed by the SFRs SPIxRXB
mode, clear the EN bit, re-initialize the SSPxCONx and SPIxTXB, respectively.). The TXFIFO is written by
registers and then set the EN bit. Setting the EN bit software and is read by the SPI module to shift the data
enables the SPI inputs and outputs: SDI, SDO, onto the SDO pin. The RXFIFO is written by the SPI
SCK(out), SCK(in), SS(out), and SS(in). All of these module as it shifts in the data from the SDI pin and is
inputs and outputs are steered by PPS, and thus must read by software. Setting the CLRBF bit of
have their functions properly mapped to device pins to SPIxSTATUS resets the occupancy for both FIFOs,
function (see Section 17.0 “Peripheral Pin Select emptying both buffers. The FIFOs are also reset by dis-
(PPS) Module”). In addition, SS(out) and SCK(out) abling the SPI module.
must have the pins they are steered to set as outputs
Note: TXFIFO occupancy and RXFIFO
(TRIS bits must be ‘0’) in order to properly output.
occupancy simply refer to the number of
Clearing the TRIS bit of the SDO pin will cause the SPI
bytes that are currently being stored in
module to always control that pin, but is not necessary
each FIFO. These values are used in this
for SDO functionality. (see Section 32.3.5 “Input and
chapter to illustrate the function of these
Output Polarity Bits”). Configurations selected by the
FIFOs and are not directly accessible
following registers should not be changed while the EN
through software.
bit is set:
• SPIxBAUD The SPIxRXB register addresses the receive FIFO and
is read-only. Reading from this register will read from
• SPIxCON1
the first FIFO location that was written to by hardware
• SPIxCON0 (except to clear the EN bit) and decrease the RXFIFO occupancy. If the FIFO is
Clearing the EN bit aborts any transmissions in empty, reading from this register will instead return a
progress, disables the setting of interrupt flags by value of zero and set the RXRE (Receive Buffer Read
hardware, and resets the FIFO occupancy (see Error) bit of the SPIxSTATUS register. The RXRE bit
Section 32.3.3 “Transmit and Receive FIFOs” for must then be cleared in software in order to properly
more FIFO details). reflect the status of the read error. When RXFIFO is full,
the RXBF bit of the SPIxSTATUS register will be set.
32.3.2 BUSY BIT When the device receives data on the SDI pin, the
While a data transfer is in progress, the SPI module receive FIFO may be written to by hardware and the
sets the BUSY bit of SPIxCON2. This bit can be polled occupancy increased, depending on the mode and
by the user to determine the current status of the SPI receiver settings, as summarized in Table 32-1.
module, and to know when a communication is The SPIxTXB register addresses the transmit FIFO
complete. The following registers/bits should not be and is write-only. Writing to the register will write to the
written by software while the BUSY bit is set: first empty FIFO location and increase the occupancy.
• SPIxTCNTH/L If the FIFO is full, writing to this register will not affect
the data and will set the TXWE bit of the SPIxSTATUS
• SPIxTWIDTH
register. When the TXFIFO is empty, the TXBE bit of
• SPIxCON2 SPIxSTATUS will be set. When a data transfer occurs,
• The CLRBF bit of SPIxSTATUS data may be read from the first FIFO location written to
Note: It is also not recommended to read SPIx- and the occupancy decreases, depending on mode
TCNTH/L while the BUSY bit is set, as the and transmitter settings, as summarized in Table 32-1
value in the registers may not be a reliable and Section 32.6.1 “Slave Mode Transmit options”.
indicator of the Transfer Counter. Use the
Transfer Count Zero Interrupt Flag (the 32.3.4 LSB VS. MSB-FIRST OPERATION
TCZIF bit of SPIxINTF) to accurately Typically, SPI communication is output Most-Significant
determine that the Transfer Counter has bit first, but some devices/buses may not conform to
reached zero. this standard. In this case, the LSBF bit may be used to
alter the order in which bits are shifted out during the
data exchange. In both Master and Slave mode, the
LSBF bit of SPIxCON0 controls if data is shifted MSb or
LSb first. Clearing the bit (default) configures the data
to transfer MSb first, which is traditional SPI operation,
while setting the bit configures the data to transfer LSb
first.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 502


PIC18(L)F25/26K83
32.3.5 INPUT AND OUTPUT POLARITY
BITS Note: When BMODE=1 in all Master modes
SPIxCON1 has three bits that control the polarity of the (and at all times in Slave modes), the
SPI inputs and outputs. The SDIP bit controls the Transfer Counter will still decrement as
polarity of the SDI input, the SDOP bit controls the transfers occur and can be used to count
polarity of the SDO output, and the SSP bit controls the the number of messages sent/received,
polarity of both the slave SS input and the master SS as well as to control SS(out) and to trigger
output. For all three bits, when the bit is clear, the input TCZIF. Also when BMODE = 1, the
or output is active-high, and when the bit is set, the SPIxTWIDTH register can be used in
input or output is active-low. When the EN bit of Master and Slave modes to determine the
SPIxCON0 is cleared, SS(out) and SCK(out) both size of messages sent and received by
revert to the inactive state dictated by their polarity bits. the SPI, even if the Transfer Counter is
The SDO output state when the EN bit of SPIxCON0 is not being actively used to control the
cleared is determined by several factors. number of messages being sent/received
• When the associated TRIS bit for the SDO pin is by the SPI module.
cleared, and the SPI goes Idle after a transmis-
sion, the SDO output will remain at the last bit 32.4.1 TOTAL BIT COUNT MODE
level. The SDO pin will revert to the Idle state if (BMODE = 0)
EN is cleared. In this mode, SPIxTCTH/L and SPIxTWIDTH are
• When the associated TRIS bit for the SDO pin is concatenated to determine the total number of bits to
set, behavior varies in Slave and Master mode. be transferred. These bits will be loaded from/into the
- In Slave mode, the SDO pin tri-states when: transmit/receive FIFOs in 8-bit increments and the
- Slave Select is inactive, transfer counter will be decremented by eight until the
total number of remaining bits is less than eight. If there
- the EN bit of SPIxCON0 is cleared, or when
are any remaining bits (SPIxTWIDTH ≠ 0), the transmit
- the TXR bit of SPIxCON2 is cleared. FIFO will send out one final message with any extra bits
- In Master mode, the SDO pin tri-states when greater than the remainder ignored. The SPIxTWIDTH
TXR = 0. When TXR = 1 and the SPI goes is the remaining bit count but the value does not
Idle after a transmission, the SDO output will change as it does for the SPIxTCT value. Similarly, the
remain at the last bit level. The SDO pin will receiver will load a final byte into the receiver FIFO, and
revert to the Idle state if EN is cleared. pad the extra bits with zeros. The LSBF bit of
SPIxCON0 determines whether the Most Significant or
32.4 Transfer Counter Least Significant bits of this final byte are ignored/
padded. For example, when LSBF = 0 and the final
In all Master modes, the transfer counter can be used transfer contains only two bits then if the last byte sent
to determine how many data transfers the SPI will was 5Fh then the RXB of the receiver will contain 40h
send/receive. The transfer counter is comprised of the which are the two MSbits of the final byte padded with
SPIxTCTH/L set of registers, and is also partially zeros in the LSbits.
controlled by the SPIxTWIDTH register. The Transfer
Counter has two primary modes, determined by the In this mode, the SPI master will only transmit
BMODE bit of the SPIxCON0 register. Each mode uses messages when the SPIxTCT value is greater than
the SPIxTCTH/L and SPIxTWIDTH registers to zero, regardless of TXR and RXR settings. In Master
determine the number and size of the transfers. In both Transmit mode, the transfer starts with the data write to
modes, when the transfer counter reaches zero, the the SPIxTXB register or the count value written to the
TCZIF interrupt flag is set. SPIxTCTL register, which ever occurs last. In Master
Receive-only mode, the transfer clocks start when the
SPIxTCTL value is written. Transfer clocks are
suspended when the receive FIFO is full and resume
as the FIFO is read.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 503


PIC18(L)F25/26K83
32.4.2 VARIABLE TRANSFER SIZE MODE 32.5 Master mode
(BMODE = 1)
In Master mode, the device controls the SCK line, and
In this mode, SPIxTWIDTH specifies the width of every as such, initiates data transfers and determines when
individual piece of the data transfer in bits. SPIxTCTH/ any slaves broadcast data onto the SPI bus.
SPIxTCTL specifies the number of transfers of this bit
Master mode of this device can be configured in four
length. If SPIxTWIDTH = 0, each piece is a full byte of
different modes, configured by the TXR and RXR bits:
data. If SPIxTWIDTH ≠ 0, then only the specified
number of bits from the transmit FIFO are shifted out, • Full-Duplex mode
with the unused bits ignored. Received data is padded • Receive Only mode
with zeros in the unused bit areas when transfered into • Transmit Only mode
the receive FIFO. The LSBF bit of SPIxCON0
• Transfer Off mode
determines whether the Most Significant or Least
Significant bits of the transfers are ignored/padded. In The modes are illustrated in Table 32-1, below:
this mode, the transfer counter being zero only stops
messages from being sent/received when in “Receive
only” mode.
Note: With BMODE = 1, it is possible for the
transfer counter (SPIxTCTH/L) to decre-
ment below zero, although when in
“Receive Only” Master mode, transfer
clocks will cease when the transfer
counter reaches zero.

32.4.3 TRANSFER COUNTER IN SLAVE


MODE
In Slave mode, the transfer counter will still decrement
as data is shifted in and out of the SPI module, but it will
not control data transfers. In addition, in Slave mode,
the BMODE bit along with the transfer counter is used
to determine when the device should look for Slave
Select faults. If BMODE = 0, the SSFLT bit will be set if
Slave Select transitions from its active to inactive state
during bytes of data, as well as if it transitions before
the last bit sent during the final byte (if
SPIxTWIDTH≠0). If BMODE=1, the SSFLT bit will be
set if Slave Select transitions from its active to inactive
state before the final bit of each individual transfer is
completed. Note that SSFLT does not have an associ-
ated interrupt, so it should be checked in software. An
ideal time to do this is when the End of Slave Select
Interrupt (EOSIF) is triggered (see Section 32.8.3.3
“Start of Slave Select and End of Slave Select Inter-
rupts”).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 504


PIC18(L)F25/26K83

TABLE 32-1: MASTER MODE TXR/RXR SETTINGS


TXR = 1 TXR = 0
Full-Duplex mode
Receive Only mode
If BMODE = 1, transfer when RxFIFO is not full and
Transfer when RxFIFO is not full and the
TxFIFO is not empty
RXR = 1 Transfer Counter is non-zero
If BMODE = 0, Transfer when RXFIFO is not full,
Transmitted data is either the top of the FIFO
TXFIFO is not empty, and the Transfer Counter is non-
or the most recently received data
zero
Transmit Only mode
If BMODE = 1, transfer when TxFIFO is not empty
RXR = 0 If BMODE = 0, Transfer when TXFIFO is not empty and No Transfers
the Transfer Counter is non-zero
Received data is not stored

32.5.1 FULL-DUPLEX MODE


When both TXR and RXR are set, the SPI master is in
Full-Duplex mode. In this mode, data transfer triggering
is affected by the BMODE bit of SPIxCON0.
When BMODE = 1, data transfers will occur whenever
both the RXFIFO is not full and there is data present in
the TXFIFO. In practice, as long as the RXFIFO is not
full, data will be transmitted/received as soon as the
SPIxTxB register is written to, matching functionality of
SPI (MSSP) modules on older 8-bit Microchip devices.
The SPIxTCNT will decrement with each transfer.
However, when SPIxTCNT is zero the next transfer is
not inhibited and the corresponding SPIxTCNT
decrement will cause the count to roll over to the
maximum value. Figure 32-3 shows an example of a
communication using this mode.
When BMODE = 0, the transfer counter (SPIxTCNTH/
SPIxTCNTL) must also be written to before transfers
will occur, and transfers will cease when the transfer
counter reaches ‘0’. For example, if SPIxTXB is written
twice and then SPIxTCTL is written with ‘3’ then the
transfer will start with the SPIxTCTL write. The two
bytes in the TXFIFO will be sent after which the transfer
will suspend until the third and last byte is written to
SPIxTXB.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 505


PIC18(L)F25/26K83
FIGURE 32-3: SPI MASTER OPERATION – DATA EXCHANGE, TXR/RXR = 1/1
Rev. 10-000281A
9/22/2016
Software Write to
Note 2
SPIxTCNT
SPIxTCNT 0 5 4 3 2 1 0

Software Write To
TXR

TXR
Software Write to
RXR
RXR

SCK_out Note 3

SDO_out `HX `HX

SRMTIF

TCZIF Note 2

Software Write
to SPIxTXB
TXFIFO 0 1 2 1 2 1 2 1 0 1 0
Occupancy
SPIxTIF

Software Read
from SPIxRXB
RXFIFO 0 1 0 1 0 1 0 1 0 1 0
Occupancy

SPIxRIF

Note: 1. SS(out) is not shown on this diagram


2. SPIxTCNT write is optional TXR/RXR = 1/1 and BMODE=1. If BMODE=0, a write to SPIxTCNT is required to start
transmission; TCZIF signals the end of the transmission.
3. Transmission gap occurs while waiting for transmitter data.

32.5.2 TRANSMIT ONLY MODE


When TXR is set and RXR is clear, the SPI master is in
Transmit Only mode. In this mode, data transfer
triggering is affected by the BMODE bit of SPIxCON0.
When BMODE = 1, data transfers will occur whenever
TXFIFO is not empty. Data will be transmitted as soon
as the TXFIFO register is written to, matching
functionality of SPI (MSSP) modules on previous 8-bit
Microchip devices. The SPIxTCNT will decrement with
each transfer. However, when SPIxTCNT is zero the
next transfer is not inhibited and the corresponding
SPIxTCNT decrement will cause the count to roll over
to the maximum value. Any data received in this mode
is not stored in RXFIFO. Figure 32-4 shows an
example of sending a command and then sending a
byte of data, using this mode.
When BMODE = 0, the transfer counter (SPIxTCNTH/
L) must also be written to before transfers will occur,
and transfers will cease when the transfer counter
reaches ‘0’.
For example, if SPIxTXB is written twice and then
SPIxTCTL is written with ‘3’, the transfer will start with
the SPIxTCTL write. The two bytes in the TXFIFO will
be sent after which the transfer will suspend until the
third and last byte is written to SPIxTXB.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 506


PIC18(L)F25/26K83
FIGURE 32-4: SPI MASTER OPERATION, COMMAND+WRITE DATA, TXR/RXR=1/0
Rev. 10-
000282A
9/22/2016

Software Write to Note 2


TXTCNTL
SPIxTXCNT 0 -1 -2 3 2 1 0

Software Write
to TXR

TXR

Software Write
to RXR
RXR

SCK_out

SDO_out Shifted data out

SRM TIF Note 3

BCZIF

Software Write Note 4


to SPIxTXB
TxFIFO 0 1 2 1 0 1 2 1 2 1 0
Occupancy
SPIxTIF

Note: 1. SS(out) is not shown


2. The byte counter is optional when TXR/RXR = 1/0;
3. After the command bytes, wait for SRMTIF before loading SPIxBYTESL otherwise the command bytes would decrement BYTES.
Alternatively, load BC = 5 and count the command bytes also; TCZIF signals the end of the transmission.
4. Transmit data interrupt handler (or DMA) must write only the bytes necessary; the byte counter is not available as an indicator.
5. Reading the RXFIFO is not required because RXR = 0.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 507


PIC18(L)F25/26K83
32.5.3 RECEIVE ONLY MODE data written to the TXFIFO will be transmitted on each
data exchange, although the TXFIFO occupancy will
When RXR is set and TXR is clear, the SPI master is in
not change, meaning that the same message will be
Receive Only mode. In this mode, data transfers when
sent on each transmission. If there is no data in the
the RXFIFO is not full and the Transfer Counter is non-
TXFIFO, the most recently received data will instead be
zero. In this mode, writing a value to SPIxTCNTL will
transmitted. Figure 32-5 shows an example of sending
start the clocks for transfer. The clocks will suspend
a command using Section 32.5.2 “Transmit Only
while the RXFIFO is full and cease when the
Mode” and then receiving a byte of data using this
SPIxTCNT reaches zero (see Section 32.4 “Transfer
mode.
Counter”). If there is any data in the TXFIFO, the first

FIGURE 32-5: SPI MASTER OPERATION, COMMAND+READ DATA, TXR/RXR=0/1


Rev. 10-
000283A
9/22/2016

Software Write to
TxCNTL
SPIxTXCNT 0 -1 -2 3 2 1 0

Software Write to
TXR

TXR
Software Write
to RXR

RXR
SCK_out

SDO_out Shifted data out

SRMTIF Note 2

TCZIF

Software Write
to SPIxTXB
TXFIFO 0 1 2 1 0
Occupancy

Software Read
from SPIxRXB

RXFIFO 0 1 0 1 0 1 0
Occupancy

SPIxRIF

Note: 1. SS(out) is not shown


2. Software must wait for shift-register empty (SRMTIF) before changing TXR, RXR, BYTES and BITS controls.
This is not considered an imposition in this case, because the slave probably needs time to load output data (see also Figure 4-14).

32.5.4 TRANSFER OFF MODE


When both TXR and RXR are cleared, the SPI master
is in Transfer Off mode. In this mode, SCK will not
toggle and no data is exchanged. However, writes to
SPIxTXB will be transferred to the TXFIFO which will
be transmitted if the TXR bit is set.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 508


PIC18(L)F25/26K83
32.5.5 MASTER MODE SLAVE SELECT and its polarity is controlled by the SSP bit of
CONTROL SPIxCON1. Setting the SSET bit will also assert
SS(out). Clearing the SSET bit will leave SS(out) to be
32.5.5.1 Hardware Slave Select Control controlled by the Transfer Counter. When the Transfer
Counter is loaded, the SPI module will automatically
This SPI module allows for direct hardware control of a
assert the SS. When the Transfer Counter decrements
Slave Select output. The Slave Select output SS(out) is
to zero, the SPI module will deassert SS either one
controlled both directly, through the SSET bit of
baud period after the final SCK pulse of the final
SPIxCON2, as well indirectly by the hardware while the
transfer (if CKE/SMP = 0/1) or one half baud period
transfer counter is non-zero (see Section 32.4
otherwise (see Figure 32-6).
“Transfer Counter”). SS(out) is steered by the PPS
registers to pins (see Section 17.2 “PPS Outputs”)

FIGURE 32-6: SPI MASTER SS OPERATION- CKE = 0, BMODE = 1, TCWIDTH = 0, SSP = 0


Rev. 10-
000284A
9/14/2016
SPIEN

baud_clock

Software Write to
SPIxTCNTL

Transfer 1 0
Counter

SS_out

minimum 1 baud clock when FST = 0 approx. 1 baud clock

SCK_out

SDO_bit_number 7 6 5 4 3 2 1 0

Note: 1. SDO bit number illustrates the transmitted bit number, and is not intended to imply SDO (out) tristate operation.
2. Assumes SPIxTXB holds data when SPIxTCNTL is written.

32.5.5.2 Software Slave Select Control


Slave Select can also be controlled through software
via a general purpose I/O pin. In this case, ensure that
the pin in question is configured as a GPIO through
PPS (see Section 17.2 “PPS Outputs”), and ensure
that the pin is set as an output (clear the appropriate bit
in the appropriate TRIS register). In this case, SSET
will not affect the Slave Select, the Transfer Counter
will not automatically control the Slave Select output,
and all setting and clearing of the Slave Select output
line must be directly controlled by software.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 509


PIC18(L)F25/26K83
32.5.6 MASTER MODE SPI CLOCK
CONFIGURATION

32.5.6.1 SPI Clock Selection


The clock source for SPI Master modes is selected by
the SPIxCLK register. Selections include the following:
• FOSC
• HFINTOSC
• CLKREF
• Timer0_overflow
• Timer2_Postscaled
• Timer4_Postscaled
• Timer6_Postscaled
• SMT_match
The SPIxBAUD register allows for dividing this clock.
The frequency of the SCK output is defined by
Equation 32-1:

EQUATION 32-1: FREQUENCY OF SCK


OUTPUT SIGNAL
F CSEL
FBAUD = --------------------------------
 2   BAUD + 1  
-

where FBAUD is the baud rate frequency output on the


SCK pin, FCSEL is the frequency of the input clock
selected by the SPIxCLK register, and BAUD is the
value contained in the SPIxBAUD register.

32.5.6.2 CKE, CKP and SMP


The CKP, CKE, and SMP bits control the relationship
between the SCK clock output, SDO output data
changes, and SDI input data sampling. The bit
functions are as follows:
• CKP - SCK output polarity
• CKE - SDO output change relative to the SCK
clock
• SMP - SDI input sampling relative to the clock
edges
The CKE bit, when set, inverts the low Idle state of the
SCK output to a high Idle state.
Figure 32-7 through Figure 32-10 illustrate the eight
possible combinations of the CKP, CKE, and SMP bit
selections.
When the CKE bit is set, the SDO data is valid before
there is a clock edge on SCK. When the CKE bit is
cleared, the SDO data is undefined prior to the first
SCK edge.
Note: All timing diagrams assume the LSBF bit
of SPIxCON0 is cleared.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 510


PIC18(L)F25/26K83
FIGURE 32-7: CLOCKING DETAIL – MASTER MODE, CKE/SMP = 0/0
Rev. 10-
000276A
MSTEN = ,CKE = , SMP =  10/10/2016

SCK A I A I A I A I A I A I A I A I

SDO Previous bit 0 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 CKP = 

input sample clock

SCK A I A I A I A I A I A I A I A I

SDO Previous bit 0 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 CKP = 

input sample clock

RXFIFO Occupancy increments


T;FIFO Open R;FIFO TXFIFO Occupancy decrements
determined latch SPIxRIF and SPIxTIF interrupts
trigger

FIGURE 32-8: CLOCKING DETAIL – MASTER MODE, CKE/SMP = 1/1

Rev. 10-
000315A
10/13/2016
MSTEN = , CKE = , SMP = 

SCK A I A I A I A I A I A I A I A I

SDO bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 next CKP = 
tx_buf
input sample clock write

A I A I A I A I A I A I A I A I
SCK

SDO bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 next CKP = 
tx_buf
input sample clock write

T;FIFO Open R;FIFO RXFIFO Occupancy increments


determined latch TXFIFO Occupancy decrements
SPIxRIF and SPIxTIF interrupts
trigger

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 511


PIC18(L)F25/26K83
FIGURE 32-9: CLOCKING DETAIL – MASTER MODE, CKE = 0, SMP = 1
Rev. 10-
000277A
9/14/2016
MSTEN = , CKE = , SMP = 

SCK A I A I A I A I A I A I A I A I

SDO previous bit 0 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 CKP = 

input sample clock

SCK A I A I A I A I A I A I A I A I

SDO previous bit 0 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 CKP = 

input sample clock

T;FIFO determined Open R;FIFO latch RXFIFO Occupancy increments,


TXFIFO Occupancy decrements,
SPIxRIF and SPIxTIF interrupts
trigger

FIGURE 32-10: CLOCKING DETAIL – MASTER MODE, CKE = 1, SMP = 0


Rev. 10-
000278A
9/14/2016
MSTEN =, CKE = , SMP = 

SCK I A I A I A I A I A I A I A I A

SDO bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 CKP = 

input sample clock tx_buf


write

SCK I A I A I A I A I A I A I A I A

SDO bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 CKP = 

input sample clock tx_buf


write

T;FIFO to SDO Open R;FIFO latch RXFIFO Occupancy increments,


TXFIFO Occupancy decrements,
SPIxRIF and SPIxTIF interrupts
trigger

32.5.6.3 SCK Start-Up Delay SPIxBAUD (indicating lower SCK frequencies), this
delay is much smaller and the first SCK can appear
When starting an SPI data exchange, the master
relatively quickly after SS is set.
device sets the SS output (either through hardware or
software) and then triggers the module to send data. By default, the SPI module inserts a ½ baud delay (half
These data triggers are synchronized to the clock of the period of the clock selected by the SPIxCLK
selected by the SPIxCLK register before the first SCK register) before the first SCK pulse. This allows for
pulse appears, usually requiring one or two clocks of systems with a high SPIxBAUD value to have extra set-
the selected clock. up time before the first clock. Setting the FST bit in
SPIxCON1 removes this additional delay, allowing
The SPI module includes synchronization delays on
systems with low SPIxBAUD values (and thus, long
SCK generation specifically designed to ensure that
synchronization delays) to forego this unnecessary
the Slave Select output timing is correct, without
extra delay.
requiring precision software timing loops.
When the value of the SPIxBAUD register is a small
number (indicating higher SCK frequencies), the
synchronization delay can be relatively long between
setting SS and the first SCK. With larger values of

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 512


PIC18(L)F25/26K83
32.6 Slave Mode When the TRIS bit associated with the SDO pin is set,
the pin will only have an output level driven to it when
32.6.1 SLAVE MODE TRANSMIT OPTIONS TXR = 1 and the Slave Select input is true. In all other
cases, the pin will be tri-stated.
The SDO output of the SPI module in Slave mode is
controlled by the TXR bit of SPIxCON2, the TRIS bit
32.6.1.2 SDO Output Data
associated with the SDO pin, the Slave Select input,
and the current state of the TXFIFO. This control is The TXR bit controls the nature of the data that is
summarized in Table 32-2. In this table, TRISxn refers transmitted in Slave mode. When TXR is set,
to the bit in the TRIS register corresponding to the pin transmitted data is taken from the TXFIFO. If the FIFO
that SDO has been assigned with PPS, TXR is the is empty, the most recently received data will be
Transmit Data Required Control bit of SPIxCON2, SS transmitted and the TXUIF flag will be set to indicate
is the state of the Slave Select input, and TXBE is the that a transmit FIFO underflow has occurred.
TXFIFO Buffer Empty bit of SPIxSTATUS. When TXR is cleared, the data will be taken from the
TXFIFO, and the TXFIFO occupancy will not decrease.
32.6.1.1 SDO Drive/Tri-state If the TXFIFO is empty, the most recently received data
The TRIS bit associated with the SDO pin controls will be transmitted, and the TXUIF bit will not be set.
whether the SDO pin will tri-state. When this TRIS bit is However, if the TRIS bit associated with the SDO pin is
cleared, the pin will always be driving to a level, even set, clearing the TXR bit will cause the SPI module to
when the SPI module is inactive. When the SPI module not output any data to the SDO pin.
is inactive (either due to the master not clocking the
SCK line or the SS being false), the SDO pin will be
driven to the value of the LAT bit associated with the
SDO pin. When the SPI module is active, its output is
determined by both TXR and whether there is data in
the TXFIFO.

TABLE 32-2: SLAVE MODE TRANSMIT


(1)
TRISxn TXR SS TXBE SDO State
0 0 FALSE 0 Drives state determined by LATxn(2)
0 0 FALSE 1 Drives state determined by LATxn(2)
0 0 TRUE 0 Outputs the oldest byte in the TXFIFO
Does not remove data from the TXFIFO
0 0 TRUE 1 Outputs the most recently received byte
0 1 FALSE 0 Drives state determined by LATxn(2)
0 1 FALSE 1 Drives state determined by LATxn(2)
0 1 TRUE 0 Outputs the oldest byte in the TXFIFO
Removes transmitted byte from the TXFIFO
Decrements occupancy of TXFIFO
0 1 TRUE 1 Outputs the most recently received byte
Sets the TXUIF bit of SPIxINTF
1 0 FALSE 0 Tri-stated
1 0 FALSE 1 Tri-stated
1 0 TRUE 0 Tri-stated
1 0 TRUE 1 Tri-stated
1 1 FALSE 0 Tri-stated
1 1 FALSE 1 Tri-stated
1 1 TRUE 0 Outputs the oldest byte in the TXFIFO
Removes transmitted byte from the TXFIFO
Decrements occupancy of TXFIFO
1 1 TRUE 1 Outputs the most recently received byte
Sets the TXUIF bit of SPIxINTF
Note 1: TRISxn is the bit in the TRISx register corresponding to the pin that SDO has been assigned with PPS.
2: LATxn is the bit in the LATx register corresponding to the pin that SDO has been assigned with PPS.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 513


PIC18(L)F25/26K83
32.6.2 SLAVE MODE RECEIVE OPTIONS
The RXR bit controls the nature of receptions in Slave
mode. When RXR is set, the SDI input data will be
stored in the RXFIFO if it is not full. If the RXFIFO is full,
the RXOIF bit will be set to indicate an RXFIFO over-
flow error and the data is discarded. When RXR is
cleared, all received data will be ignored and not stored
in the RXFIFO (although it may still be used for trans-
mission if TXFIFO is empty). Figure 32-11 shows a typ-
ical Slave mode communication, showing a case where
the master writes two then three bytes, showing inter-
rupts as well as the behavior of the transfer counter in
Slave mode (see Section 32.4.3 “Transfer Counter
in Slave mode” for more details on the transfer
counter in Slave mode as well as Section 32.8 “SPI
Interrupts” for more information on interrupts).

FIGURE 32-11: SPI SLAVE MODE OPERATION – INTERRUPT-DRIVEN, MASTER WRITES 2+3
BYTES
Rev. 10-
000285A
9/22/2016

SS_in

SCK_in Note 1

SDO_out Output data

SOSIF Note 2

EOSIF

Transfer Counter 0 -1 -2 3 2 1 0

Software Write to Note 3


SPIxTCNTL
TCZIF
Software Write
to TXR
TXR
Software Write to
RXR
RXR

Receiver process

SPIxRIF

Software
Read from
SPIxRXB

Note: 1. This delay is exaggerated for illustration, and can be as short as1/2 bit period.
2. If the device is sleeping, SOSIF will wake it up for interrupt service.
3. Setting SPIxTCNTL is optional in this example, otherwise it will count -3, -4, -5, and TCZIF will not occur

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 514


PIC18(L)F25/26K83
32.6.3 SLAVE MODE SLAVE SELECT 32.6.5 DAISY-CHAIN CONFIGURATION
In Slave mode, an external Slave Select Signal can be The SPI bus can be connected in a daisy-chain
used to synchronize communication with the master configuration. The first slave output is connected to the
device. The Slave Select line is held in its inactive state second slave input, the second slave output is
(high by default) until the master device is ready to connected to the third slave input, and so on. The final
communicate. When the Slave Select transitions to its slave output is connected to the master input. Each
active state, the slave knows that a new transmission is slave sends out, during a second group of clock pulses,
starting. an exact copy of what was received during the first
When the Slave Select goes false at the end of the group of clock pulses. The whole chain acts as one
transmission the receive function of the selected SPI large communication shift register. The daisy-chain
slave device returns to the inactive state. The slave is feature only requires a single Slave Select line from the
then ready to receive a new transmission when the master device connected to all slave devices
Slave Select goes True again. (alternately, the slave devices can be configured to
ignore the Slave Select line by setting the SSET bit). In
The Slave Select signal is received on the SS input pin. a typical Daisy-Chain configuration, the SCK signal
This pin is remappable with the SPIxSSPPS register from the master is connected to each of the slave
(see Section 17.1 “PPS Inputs”). When the input on device SCK inputs. However, the SCK input and output
this pin is true, transmission and reception are enabled, are separate signals selected by the PPS control.
and the SDO pin is driven. When the input on this pin is When the PPS selection is made to configure the SCK
false, the SDO pin is either tri-stated (if the TRIS bit input and SCK output on separate pins then, the SCK
associated with the SDO pin is set) or driven to the output will follow the SCK input, allowing for SCK
value of the LAT bit associated with the SDO pin (if the signals to be daisy-chained like the SDO/SDI signals.
TRIS bit associated with the SDO pin is cleared). In
addition, the SCK input is ignored. Figure 32-12 shows the block diagram of a typical
daisy-chain connection, and Figure 32-13 shows the
If the SS input goes False, while a data transfer is still block diagram of a daisy-chain connection possible
in progress, it is considered a Slave Select fault. The using this SPI module.
SSFLT bit of SPIxCON2 indicates whether such an
event has occurred. The transfer counter value deter-
mines the number of bits in a valid data transfer (see
Section 32.4 “Transfer Counter” for more details).
The Slave Select polarity is controlled by the SSP bit of
SPIxCON1. When SSP is set (its default state), the
Slave Select input is active-low, and when it is cleared,
the Slave Select input is active-high.
The Slave Select for the SPI module is controlled by
the SSET bit of SPIxCON2. When the bit is cleared (its
default state), the Slave Select will act as described
above. When the bit is set, the SPI module will behave
as if the SS input was always in its active state.

Note: When SSET is set, the effective SS(in)


signal is always active. Hence, the SSFLT
bit may be disregarded.

32.6.4 SLAVE MODE CLOCK


CONFIGURATION
In Slave mode, SCK is an input, and must be
configured to the same polarity and clock edge as the
master device. As in Master mode, the polarity of the
clock input is controlled by the CKP bit of SPIxCON1
and the clock edge used for transmitting data is
controlled by the CKE bit of SPIxCON1.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 515


PIC18(L)F25/26K83
FIGURE 32-12: TRADITIONAL SPI DAISY – CHAIN CONNECTION
Rev. 10-000082B
8/11/2016

SCK SCK
SPI Master SDOx SDIx SPI Slave
SDIx SDOx #1

SSxOUT/GPIO SSxIN

SCK
SDIx SPI Slave
SDOx #2
SSxIN

SCK
SDIx SPI Slave
SDOx #3
SSxIN

FIGURE 32-13: SPI DAISY-CHAIN CONNECTION WITH CHAINED SCK

Rev. 10-000082C
10/13/2016

SCK SCK(in)
SPI Master SDOx SDIx SPI Slave
SDIx #1
SSxIN
SSxOUT/GPIO
SCK(out) SDOx

SCK(in) SDIx

SPI Slave
SSxIN #2

SCK(out) SDOx

SCK(in) SDIx

SSxIN SPI Slave


#3

SDOx

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 516


PIC18(L)F25/26K83
32.7 SPI Operation in Sleep Mode 32.8.2 SPI TRANSMITTER DATA
INTERRUPT
SPI Master mode will operate in Sleep, provided the
clock source selected by SPIxCLK is active in Sleep The SPI Transmitter Data Interrupt is set when TXFIFO
mode. FIFOs will operate as they would when the part is not full, and is cleared when the TXFIFO is full. The
is awake. When TXR = 1, the TXFIFO will need to interrupt flag SPI1TXIF is located in PIRx and the
contain data in order for transfers to take place in interrupt enable SPI1TXIE is located in PIEx. The
Sleep. All interrupts will still set the interrupt flags in interrupt flag is read-only.
Sleep but only enabled interrupts will wake the device
from Sleep. 32.8.3 SPI MODULE STATUS INTERRUPTS
SPI Slave mode will operate in Sleep, because the The SPIxIF flag in the respective PIR register is set
clock is provided by an external master device. FIFOs when any of the individual status flags in SPIxINTF and
will still operate and interrupts will set interrupt flags, their respective SPIxINTE bits are set. In order for the
and enabled interrupts will wake the device from Sleep. setting of any specific interrupt flag to interrupt normal
program flow both the SPIxIE bit as well as the specific
bit in SPIxINTE associated with that interrupt must be
32.8 SPI Interrupts
set.
There are three top level SPI interrupts in the PIRx The Status Interrupts are:
register:
• Shift Register Empty Interrupt
• SPI Transmit
• Transfer Counter is Zero Interrupt
• SPI Receive
• Start of Slave Select Interrupt
• SPI Module status
• End of Slave Select Interrupt
The status interrupts are enabled at the module level in • Receiver Overflow Interrupt
the SPIxINTE register. Only enabled status interrupts
• Transmitter Underflow Interrupt
will cause the single top level SPIxIF flag to be set.

32.8.1 SPI RECEIVER DATA INTERRUPT


The SPI Receiver Data Interrupt is set when RXFIFO
contains data, and is cleared when the RXFIFO is
empty. The interrupt flag SPI1RXIF is located in PIRx
and the interrupt enable SPI1RXIE is located in PIEx.
This interrupt flag is read-only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 517


PIC18(L)F25/26K83
32.8.3.1 Shift Register Empty Interrupt
The Shift Register Empty interrupt flag and enable are Note: The TCZIF flag only indicates that the
the SRMTIF and SRMTIE bits, respectively. This transfer counter has decremented from
interrupt is only available in Master mode and triggers one to zero, and may not indicate that the
when a data transfer completes and conditions are not entire data transfer process is complete.
present to start a new transfer, as dictated by the TXR Either poll the BUSY bit of SPIxCON2 and
and RXR bits (see Table 32-1 for conditions for starting wait for it to be cleared or use the Shift
a new Master mode data transfer with different TXR/ Register Empty Interrupt (SRMTIF) to
RXR settings). This interrupt will be triggered at the end determine if a data transfer is fully
of the last full bit period, after SCK has been low for one complete.
½-baud period. See Figure 32-14 for more details of
the timing of this interrupt as well as other interrupts. 32.8.3.3 Start of Slave Select and End of
This bit will not clear itself when the conditions for Slave Select Interrupts
starting a new transfer occur, and must be cleared in
software. The start of Slave Select interrupt flag and enable are
the SOSIF and SOSIE bits, respectively, and the end of
32.8.3.2 Transfer Counter is Zero Interrupt Slave Select interrupt flag and enable are similarly des-
ignated by the EOSIF and EOSIE bits. These interrupts
The transfer counter is zero interrupt flag and enable trigger at the leading and trailing edges of the Slave
are the TCZIF and TCZIE bits, respectively. This Select input. Note that the interrupts are active in both
interrupt will trigger when the transfer counter (defined master and Slave mode, and will trigger on transitions
by BMODE, SPIxTCTH/L and SPIxTWIDTH) of the Slave Select input regardless of which mode the
decrements from one to zero. See Figure 32-14 for SPI is in. In Master mode, PPS should be used to route
more details on the timing of this interrupt as well as the Slave Select input to the same pin as the Slave
other interrupts. This bit must be cleared in software. Select output, allowing these interrupts to trigger on
changes to the Slave Select output. Also note that in
Slave mode, changing the SSET bit can trigger these
interrupts, as it changes the effective input value of
Slave Select. Both SOSIF and EOSIF must be cleared
in software

FIGURE 32-14: TRANSFER AND SLAVE SELECT INTERRUPT TIMINGS

Rev. 10-000286A
9/14/2016

SS(in)

SCK

SDO_bit_number 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

SRMTIF

SOSIF
Note 3

TCZIF

EOSIF Note 3

Note 1: SRMTIF available only in Master mode


2: Clearing of interrupt flags is shown for illustration; actual interrupt flags must be cleared in software
3: SOSIF and EOSIF are set according to SS(in), even in Master mode.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 518


PIC18(L)F25/26K83
32.8.3.4 Receiver Overflow and Transmitter
Underflow Interrupts
The receiver overflow interrupt triggers if data is
received when the RXFIFO is already full and RXR = 1.
In this case, the data will be discarded and the RXOIF
bit will be set. The receiver overflow interrupt flag is the
RXOIF bit of SPIxINTF. The receiver overflow interrupt
enable bit is the RXOIE bit of SPIxINTE.
The Transmitter Underflow interrupt flag triggers if a
data transfer begins when the TXFIFO is empty and
TXR = 1. In this case, the most recently received data
will be transmitted and the TXUIF bit will be set. The
transmitter underflow interrupt flag is the TXUIF bit of
SPIxINTF. The transmitter underflow interrupt enable
bit is the TXUIE bit of SPIxINTE.
Both of these interrupts will only occur in Slave mode,
as Master mode will not allow the RXFIFO to overflow
or the TXFIFO to underflow.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 519


PIC18(L)F25/26K83
32.9 Register definitions: SPI

REGISTER 32-1: SPIxINTF: SPI INTERRUPT FLAG REGISTER


R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 R/W/HS-0/0 U-0 R/W/HS-0/0 R/W/HS-0/0 U-0
SRMTIF TCZIF SOSIF EOSIF — RXOIF TXUIF —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
HS = Bit can be set by hardware

bit 7 SRMTIF: Shift Register Empty Interrupt Flag bit


Slave mode:
This bit is ignored
Master mode:
1 = The data transfer is complete
0 = Either no data transfers have occurred or a data transfer is in progress
bit 6 TCZIF: Transfer Counter is Zero Interrupt Flag bit
1 = The transfer counter (as defined by BMODE in Register 32-7, TCNTH/L, and TWIDTH) has dec-
remented to zero
0= No interrupt pending
bit 5 SOSIF: Start of Slave Select Interrupt Flag bit
1 = SS(in) transitioned from false to true
0 = No interrupt pending
bit 4 EOSIF: End of Slave Select Interrupt Flag bit
1 = SS(in) transitioned from true to false
0 = No interrupt pending
bit 3 Unimplemented: Read as ‘0’
bit 2 RXOIF: Receiver Overflow Interrupt Flag bit
1 = Data transfer completed when RXBF = 1 (edge triggered) and RXR = 1
0 = No interrupt pending
bit 1 TXUIF: Transmitter Underflow Interrupt Flag bit
1 = Slave Data transfer started when TXBE = 1 and TXR = 1
0 = No interrupt pending
bit 0 Unimplemented: Read as ‘0’

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 520


PIC18(L)F25/26K83
REGISTER 32-2: SPIxINTE: SPI INTERRUPT ENABLE REGISTER
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 U-0 R/W-0/0 R/W-0/0 U-0
SRMTIE TCZIE SOSIE EOSIE — RXOIE TXUIE —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’

bit 7 SRMTIE: Shift Register Empty Interrupt Enable bit


1 = Enables the Shift Register Empty Interrupt
0 = Disables the Shift Register Empty Interrupt
bit 6 TCZIE: Transfer Counter is Zero Interrupt Enable bit
1 = Enables the Transfer Counter is Zero Interrupt
0 = Disables the Transfer Counter is Zero Interrupt
bit 5 SOSIE: Start of Slave Select Interrupt Enable bit
1 = Enables the Start of Slave Select Interrupt
0 = Disables the Start of Slave Select Interrupt
bit 4 EOSIE: End of Slave Select Interrupt Enable bit
1 = Enables the End of Slave Select Interrupt
0 = Disables the End of Slave Select Interrupt
bit 3 Unimplemented: Read as ‘0’
bit 2 RXOIE: Receiver Overflow Interrupt Enable bit
1 = Enables the Receiver Overflow Interrupt
0 = Disables the Receiver Overflow Interrupt
bit 1 TXUIE: Transmitter Underflow Interrupt Enable bit
1 = Enables the Transmitter Underflow Interrupt
0 = Disables the Transmitter Underflow Interrupt
bit 0 Unimplemented: Read as ‘0’

REGISTER 32-3: SPIxTCNTL – SPI TRANSFER COUNTER LSB REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
TCNT7 TCNT6 TCNT5 TCNT4 TCNT3 TCNT2 TCNT1 TCNT0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’

bit 7-0 TCNT<7:0>:


BMODE = 0
Bits 10-3 of the Transfer Counter, counting the total number of bits to transfer
BMODE = 1
Bits 7-0 of the Transfer Counter, counting the total number of bytes to transfer
Note: This register should not be written to while a transfer is in progress (BUSY bit of SPIxCON2 is set).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 521


PIC18(L)F25/26K83
REGISTER 32-4: SPIxTCNTH: SPI TRANSFER COUNTER MSB REGISTER
U-0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — — TCNT10 TCNT9 TCNT8
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’

bit 7-3 Unimplemented: Read as ‘0’


bit 2-0 TCNT<10:8>:
BMODE = 0
Bits 13-11 of the Transfer Counter, counting the total number of bits to transfer
BMODE = 1
Bits 10-8 of the Transfer Counter, counting the total number of bytes to transfer
Note: This register should not be written to while a transfer is in progress (BUSY bit of SPIxCON2 is set).

REGISTER 32-5: SPIxTWIDTH: SPI TRANSFER WIDTH REGISTER


U-0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — — TWIDTH2 TWIDTH1 TWIDTH0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’

bit 7-3 Unimplemented: Read as ‘0’


bit 2-0 TWIDTH<2:0>:
BMODE = 0
Bits 2-0 of the Transfer Counter, counting the total number of bits to transfer
BMODE = 1
Size (in bits) of each transfer counted by the transfer counter
111 = 7 bits
110 = 6 bits
101 = 5 bits
100 = 4 bits
011 = 3 bits
010 = 2 bits
001 = 1 bit
000 = 8 bits
Note: This register should not be written to while a transfer is in progress (BUSY bit of SPIxCON2 is set).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 522


PIC18(L)F25/26K83
REGISTER 32-6: SPIxBAUD: SPI BAUD RATE REGISTER
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
BAUD7 BAUD6 BAUD5 BAUD4 BAUD3 BAUD2 BAUD1 BAUD0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’

bit 7-0 BAUD<7:0>: Baud Clock Prescaler Select bits


SCK high or low time: TSC=SPI Clock Period*(BAUD+1)
SCK toggle frequency: FSCK=FBAUD= SPI Clock Frequency/(2*(BAUD+1))
Note: This register should not be written while the SPI is enabled (EN bit of SPIxCON0 = 1)

REGISTER 32-7: SPIxCON0: SPI CONFIGURATION REGISTER 0


R/W-0/0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0
EN — — — — LSBF MST BMODE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’

bit 7 EN: SPI Module Enable Control bit


1 = SPI is enabled
0 = SPI is disabled,
bit 6-3 Unimplemented: Read as ‘0’
bit 2 LSBF: LSb-First Data Exchange bit
1 = Data is exchanged LSb first
0 = Data is exchanged MSb first (traditional SPI operation)
bit 1 MST: SPI Operating Mode Master Select bit
1 = SPI module operates as the bus master
0 = SPI module operates as a bus slave
bit 0 BMODE: Bit-Length Mode Select bit
1 = SPIxTWIDTH setting applies to every byte: total bits sent is SPIxTWIDTH*SPIxTCNT, end-of-
packet occurs when SPIxTCNT = 0
0 = SPIxTWIDTH setting applies only to the last byte exchanged; total bits sent is SPIxTWIDTH +
(SPIxTCNT*8)
Note: This register should only be written when the EN bit is cleared, or to clear the EN bit.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 523


PIC18(L)F25/26K83
REGISTER 32-8: SPIxCON1: SPI CONFIGURATION REGISTER 1
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 U-0 R/W-1/1 R/W-0/0 R/W-0/0
SMP CKE CKP FST — SSP SDIP SDOP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’

bit 7 SMP: SPI Input Sample Phase Control bit


Slave mode:
1 = Reserved
0 = SDI input is sampled in the middle of data output time
Master mode:
1 = SDI input is sampled at the end of data output time
0 = SDI input is sampled in the middle of data output time
bit 6 CKE: Clock Edge Select bit
1 = Output data changes on transition from active to idle clock state
0 = Output data changes on transition from idle to active clock state
bit 5 CKP: Clock Polarity Select bit
1 = Idle state for SCK is high level
0 = Idle state for SCK is low level
bit 4 FST: Fast Start Enable bit
Slave mode:
This bit is ignored
Master mode:
1 = Delay to first SCK may be less than ½ baud period
0 = Delay to first SCK will be at least ½ baud period
bit 3 Unimplemented: Read as ‘0’
bit 2 SSP: SS Input/Output Polarity Control bit
1 = SS is active-low
0 = SS is active-high
bit 1 SDIP: SDI Input Polarity Control bit
1 = SDI input is active-low
0 = SDI input is active-high
bit 0 SDOP: SDI Output Polarity Control bit
1 = SDO output is active-low
0 = SDO output is active-high

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 524


PIC18(L)F25/26K83
REGISTER 32-9: SPIxCON2: SPI CONFIGURATION REGISTER 2
R-0/0 R-0/0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0
BUSY SSFLT — — — SSET TXR(1) RXR(1)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’

bit 7 BUSY: SPI Module Busy Status bit


1 = Data exchange is busy
0 = Data exchange is not taking place
bit 6 SSFLT: SS(in) Fault Status bit
If SSET = 0
1 = SS(in) ended the transaction unexpectedly, and the data byte being received was lost
0 = SS(in) ended normally
If SSET = 1
This bit is unchanged.
bit 5-3 Unimplemented: Read as ‘0’
bit 2 SSET: Slave Select Enable bit
Master mode:
1 = SS(out) is driven to the active state continuously
0 = SS(out) is driven to the active state while the transmit counter is not zero
Slave mode:
1 = SS(in) is ignored and data is clocked on all SCK(in) (as though SS = TRUE at all times)
0 = SS(in) enables/disables data input and tri-states SDO if the TRIS bit associated with the SDO pin
is set (see Table 32-2 for details)
bit 1 TXR: Transmit Data-Required Control bit(1)
1 = TxFIFO data is required for a transfer
0 = TxFIFO data is not required for a transfer
bit 0 RXR: Receive FIFO Space-Required Control bit(1)
1 = Data transfers are suspended if the RxFIFO is full
0 = Received data is not stored in the FIFO
Note 1: See Table 32-1 as well as Section 32.5 “Master mode” and Section 32.6 “Slave Mode” for more details
pertaining to TXR and RXR function.
2: This register should not be written to while a transfer is in progress (BUSY bit of SPIxCON2 is set).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 525


PIC18(L)F25/26K83
REGISTER 32-10: SPIxSTATUS: SPI STATUS REGISTER
R/C/HS-0/0 U-0 R-1/1 U-0 R/C/HS-0/0 S-0/0 U-0 R-0/0
TXWE — TXBE — RXRE CLRBF — RXBF
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
C = Clearable bit
S = Settable bit
HS = Bit can be set by hardware

bit 7 TXWE: Transmit Buffer Write Error bit


1 = SPIxTxB was written while TxFIFO was full
0 = No error has occurred
bit 6 Unimplemented: Read as ‘0’
bit 5 TXBE: Transmit Buffer Empty bit (read-only)
1 = Transmit buffer TxFIFO is empty
0 = Transmit buffer is not empty
bit 4 Unimplemented: Read as ‘0’
bit 3 RXRE: Receive Buffer Read Error bit
1 = SPIxRB was read while RxFIFO was empty
0 = No error has occurred
bit 2 CLRBF: Clear Buffer Control bit (write only)
1 = Reset the receive and transmit buffers, making both buffers empty
0 = Take no action
bit 1 Unimplemented: Read as ‘0’
bit 0 RXBF: Receive Buffer Full bit (read-only)
1 = Receive buffer is full
0 = Receive buffer is not full

REGISTER 32-11: SPIxRxB: SPI READ BUFFER REGISTER


R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
RXB7 RXB6 RXB5 RXB4 RXB3 RXB2 RXB1 RXB0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’

bit 7-0 RXB<7:0>: Receiver Buffer bits (read-only)


If RX buffer is not empty:
Contains the top-most byte of RXFIFO, and reading this register will remove the top-most byte
RXFIFO and decrease the occupancy of the RXFIFO
If RX buffer is empty:
Reading this register will read as ‘0’, leave the occupancy unchanged, and set the RXRE bit of
SPIxSTATUS

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 526


PIC18(L)F25/26K83
REGISTER 32-12: SPIxTxB: SPI TRANSMIT BUFFER REGISTER
W-0 W-0 W-0 W-0 W-0 W-0 W-0 W-0
TXB7 TXB6 TXB5 TXB4 TXB3 TXB2 TXB1 TXB0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’

bit 7-0 TXB<7:0>: Transmit Buffer bits (write only)


If TXFIFO is not full:
Writing to this register adds the data to the top of the TXFIFO and increases the occupancy of the
TXFIFO write pointer
If TXFIFO is full:
Writing to this register does not affect the data in the TXFIFO or the write pointer, and the TXWE bit of
SPIxSTATUS will be set

REGISTER 32-13: SPIxCLK: SPI CLOCK SELECTION REGISTER


U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — CLKSEL3 CLKSEL2 CLKSEL1 CLKSEL0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’

bit 7-4 Unimplemented: Read as ‘0’


bit 3-0 CLKSEL<3:0>: SPI Clock Source Selection bits
1111-1001 = Reserved
1000 = SMT_match
0111 = TMR6_Postscaled
0110 = TMR4_Postscaled
0101 = TMR2_Postscaled
0100 = TMR0_overflow
0011 = CLKREF
0010 = MFINTOSC
0001 = HFINTOSC
0000 = FOSC

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 527


PIC18(L)F25/26K83

TABLE 32-3: SUMMARY OF REGISTERS ASSOCIATED WITH SPI


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page
SPIxINTF SRMTIF TCZIF SOSIF EOSIF — RXOIF TXUIF — 520
SPIxINTE SRMTIE TCZIE SOSIE EOSIE — RXOIE TXUIE — 521
SPIxTCNTH — — — — — TCNT10 TCNT9 TCNT8 522
SPIxTCNTL TCNT7 TCNT6 TCNT5 TCNT4 TCNT3 TCNT2 TCNT1 TCNT0 521
SPIxTWIDTH — — — — — TWIDTH2 TWIDTH1 TWITDH0 522
SPIxBAUD BAUD7 BAUD6 BAUD5 BAUD4 BAUD3 BAUD2 BAUD1 BAUD0 523
SPIxCON0 EN — — — — LSBF MST BMODE 523
SPIxCON1 SMP CKE CKP FST — SSP SDIP SDOP 524
SPIxCON2 BUSY SSFLT — — — SSET TXR RXR 525
SPIxSTATUS TXWE — TXBE — RXRE CLRBF — RXBF 526
SPIxRXB RXB7 RXB6 RXB5 RXB4 RXB3 RXB2 RXB1 RXB0 526
SPIxTXB TXB7 TXB6 TXB5 TXB4 TXB3 TXB2 TXB1 TXB0 527
SPIxCLK — — — — CLKSEL3 CLKSEL2 CLKSEL1 CLKSEL0 527
Legend: — = unimplemented, read as ‘0’. Shaded cells are unused by the SPI module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 528


33.0 I2C MODULE
 2017 Microchip Technology Inc.

The device has two dedicated, independent I2C modules. Figure 33-1 is a block
diagram of the I2C interface module. The figure shows both the Master and
Slave modes together.

FIGURE 33-1: I2C MODULE BLOCK DIAGRAM

Rev. 10-000 312A


11/2/201 6

SDAHT<1:0>

SDA(in) I2CxSDAPPS Shift Register SDA


Auto-NACK RxyPPS SDA(out)
RX/TX Delay
8 8
ACKDT/
I2CLVL<1:0> 8 ACKCNT
Address Buffer Transmit Buffer Recieve Buffer
and Match
(I2CxTXB) (I2CxRXB)
I2CxADB0/1
Preliminary

I2CxADD0/1/2/3

See I2C Control


I2CxCLK Unit and
Register

PIC18(L)F25/26K83
Transfer
Counter
I2CCLK<3:0>
Master
See
Module
I2CxBTO
Register

Slave
Module RxyPPS SCL(out)
I2CBTO<2:0>

Interrupt
SCL(in) I2CxSCLPPS Controller
DS40001943A-page 529

I2CLVL<1:0>
PIC18(L)F25/26K83
33.1 I2C Features 33.2 I2C Module Overview
• Inter-Integrated Circuit (I2C) interface supports The I2C module provides a synchronous interface
the following modes in hardware: between the microcontroller and other I2C-compatible
- Master mode devices using the two-wire I2C serial bus. Devices
- Slave mode with byte NACKing communicate in a master/slave environment. The I2C
- Multi-Master mode bus specifies two signal connections:
• Dedicated Address, Receive and Transmit buffers • Serial Clock (SCL)
• Up to four slave addresses matching • Serial Data (SDA)
• General Call address matching
• 7-bit and 10-bit addressing with masking Both the SCL and SDA connections are bidirectional
• Start, Restart, Stop, Address, Write, and ACK open-drain lines, each requiring pull-up resistors to the
Interrupts supply voltage. Pulling the line to ground is considered
• Clock Stretching hardware for: a logical zero and letting the line float is considered a
- RX Buffer Full logical one. Every transaction on the I2C bus has to be
- TX Buffer Empty initiated by the master.
- After Address, Write, and ACK Figure 33-2 shows a typical connection between a
• Bus Collision Detection with arbitration master and more than one slave.
• Bus Timeout Detection
• SDA hold time selection
• I2C, SMBus 2.0, and SMBus 3.0 input level
selections

FIGURE 33-2: I2C MASTER/SLAVE CONNECTIONS


Rev. 10-000 288A
11/2/201 6

Receive Buffer

Receive Buffer SDA


Shift Register

SDA
Shift Register SCK Transmit Buffer

I2C Slave 1
Transmit Buffer
SCK
Receive Buffer
I2C Master
SDA
Shift Register

SCK Transmit Buffer

I2C Slave 2

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 530


PIC18(L)F25/26K83
There are four main operations based on the direction
of the data being shared during I2C communication. TABLE 33-1: I2C BUS TERMS
• Master Transmit (master is transmitting data to a TERM Description
slave)
• Master Receive (master is receiving data from a Transmitter The device which shifts data out onto
slave) the bus
• Slave Transmit (slave is transmitting data to a Receiver The device which shifts data in from the
master) bus
• Slave Receive (slave is receiving data from the Master The device that initiates a transfer, gen-
master) erates clock signals and terminates a
transfer
To begin any I2C communication, the master device
Slave The device addressed by the master
sends out a Start bit followed by the address byte of the
slave it intends to communicate with. This is followed Multi-master A bus with more than one device that
by a single Read/Write bit, which determines whether can initiate data transfers
the master intends to transmit to or receive data from Arbitration Procedure to ensure that only one mas-
the slave device. ter at a time controls the bus. Winning
arbitration ensures that the message is
If the requested slave exists on the bus, it will respond not corrupted
with an Acknowledge bit, otherwise known as an ACK. Synchronization Procedure to synchronize the clocks of
The master then continues to shift data in or out of the two or more devices on the bus.
slave until it terminates the message with a Stop.
Idle No master is controlling the bus, and
Further details about the I2C module are discussed in both SDA and SCL lines are high
the section below. Active Any time one or more master devices
are controlling the bus
33.3 I2C Mode Operation Addressed Slave Slave device that has received a match-
ing address and is actively being
All I2C communication is 8-bit data and 1-bit clocked by a master
acknowledge and shifted out MSb first. The user can
Matching Address byte that is clocked into a
control the interaction between the software and the Address slave that matches the value stored in
module using several control registers and interrupt I2CxADR
flags. Two pins, SDA and SCL, are exercised by the
Write Request Slave receives a matching address with
module to communicate with other external I2C R/W bit clear and is ready to clock in
devices. data
Read Request Master sends an address byte with the
33.3.1 DEFINITION OF I2C TERMINOLOGY
R/W bit set, indicating that it wishes to
The I2C communication protocol terminologies are clock data out of the slave. This data is
defined for reference below in Table 33-1. These termi- the next and all following bytes until a
nologies are used throughout this document. Table 33- Restart or Stop.
1 has been adapted from the Phillips I2C specification. Clock Stretching When a device on the bus holds SCL
low to stall communication
Bus Collision Any time the SDA line is sampled low
by the module while it is outputting and
expected high state.
Bus Timeout Any time the I2CBTOISM input transi-
tions high, the I2C module is reset and
the module goes Idle.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 531


PIC18(L)F25/26K83
33.3.2 BYTE FORMAT 33.3.4 SDA HOLD TIME
All communication in I2C is done in 9-bit segments. A The hold time of the SDA pin is selected by the
byte is sent from a master to a slave or vice-versa, fol- SDAHT<1:0> bits of the I2CxCON2 register. Hold time
lowed by an Acknowledge bit sent by the receiver. After is the time SDA is held valid after the falling edge of
the 8th falling edge of the SCL line, the device transmit- SCL. A longer hold time setting may help on buses with
ting data on the SDA line releases control of that pin to large capacitance.
an input, and reads in an acknowledge value on the
next clock pulse. The clock signal is provided by the 33.3.5 START CONDITION
master. Data is valid to change while the SCL line is The I2C specification defines a Start condition as a
low, and sampled on the rising edge of the clock. transition of SDA line from a high to a low state while
Changes on the SDA line while the SCL line is high SCL line is high. A Start condition is always generated
define Start and Stop conditions on the bus which are by the master and signifies the transition of the bus
explained further in the chapter. from an Idle to an Active state. Figure 33-3 shows
waveforms for Start conditions. Master hardware waits
33.3.3 SDA AND SCL PINS for the BFRE bit of I2CxSTAT0 to be set, before assert-
The user must configure these pins as open-drain ing a Start condition on the SCL and SDA lines. If two
outputs. This is done by clearing the appropriate TRIS masters assert a start at the same time, a collision will
bits and setting the appropriate ODCON bits. The user occur during the addressing phase.
may also select the input threshold, slew-rate and inter-
nal pull-up settings using the RxyI2C control registers 33.3.6 STOP CONDITION
(Register 16-9). A Stop condition is a transition of the SDA line from low
to high while the SCL line is high. Figure 33-3 shows
waveforms for Stop conditions.

FIGURE 33-3: START AND STOP CONDITIONS

Rev. 10-000 290A


11/2/201 6

SDA

SCL
S P
Change of Change of
Data Allowed Data Allowed
Start Stop
Condition Condition

Note: At least one SCL low time must appear


before a Stop is valid. Therefore, if the
SDA line goes low then high again while
the SCL line is high, only the Start condi-
tion is detected.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 532


PIC18(L)F25/26K83
33.3.7 RESTART CONDITION In 10-bit Addressing Slave mode a Restart is required
for the master to clock data out of the addressed slave.
A Restart is valid any time that a Stop would be valid. A
Once a slave has been fully addressed, matching both
master can issue a Restart if it wishes to hold the bus
high and low address bytes (SMA = 1), the master can
after terminating the current transfer. A Restart has the
issue a Restart and the high address byte with the R/W
same effect on the slave that a Start would, resetting all
bit set. The slave logic will then hold the clock and pre-
slave logic and preparing it to clock in an address. The
pare to clock out data.
master may want to address the same or another
slave. Figure 33-4 shows the waveform for a Restart
condition.

FIGURE 33-4: RESTART CONDITION

Rev. 10-000 291A


11/2/201 6

SDA

SCL
RS
Change of Change of
Data Allowed Data Allowed
Restart
Condition

33.3.8 ACKNOWLEDGE SEQUENCE Certain conditions will cause a not-ACK (NACK) to be


sent automatically. If any of the RXRE, TXRE, RXO, or
The ninth SCL pulse for any transferred byte in I2 C is
TXU bits is set, the hardware response is forced to
dedicated as an Acknowledge. It allows receiving
NACK. All subsequent responses from the device for
devices to respond back to the transmitter by pulling
address matches or data will be a NACK response.
the SDA line low. The transmitter must release control
of the line during this time to shift in the response. The
33.3.9 BUS TIME-OUT
Acknowledge (ACK) is an active-low signal, pulling the
SDA line low indicates to the transmitter that the device The I2CxBTO register can be used to select the time-
has received the transmitted data and is ready to out source for the module. The I2C module is reset
receive more. when the selected bus time out signal goes high. This
feature is useful for SMBus and PMBus™ compatibility.
The result of an ACK is placed in the ACKSTAT bit of
the I2CxCON1 register. The ACKSTAT bit is cleared For example, Timer2 can be selected as the bus time-
when the receiving device sends an Acknowledge and out source and configured to count when the SCL pin
is set when the receiving device does not Acknowl- is low. If the timer runs over before the SCL pin transi-
edge. A slave sends an Acknowledge when it has rec- tioned high, the timer-out pulse will reset the module.
ognized its address. When in a mode that is receiving
data, the ACK data being sent to the transmitter
depends on the value of I2CxCNT register. ACKDT is Note: The bus time-out source should produce a
the value sent when I2CxCNT! = 0. When rising edge.
I2CxCNT = 0, the ACKCNT value is used instead. If the module is configured as a slave and a BTO event
In Slave mode, if the ADRIE or WRIE bits are set, clock occurs when the slave is active (i.e., the SMA bit is set),
stretching is initiated when there is an address match the module is immediately reset. The SMA and CSTR
or when there is an attempt to write to slave. This bits are also cleared, and the BTOIF bit is set.
allows the user to set the ACK value sent back to the
transmitter. The ACKDT bit of the I2CxCON1 register is
set/cleared to determine the response. Slave hardware
will generate an ACK response if the ADRIE or WRIE
bits are clear.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 533


PIC18(L)F25/26K83
If a BTO event occurs when the module is configured to the user to specify all eight of these bits, even though
as a master and is active, (i.e., MMA bit is set), and the the I2C specification defines the upper five bits as a
module immediately tries to assert a Stop condition and constant.
also sets the BTOIF bit. The actual generation of the
Stop condition may be delayed if the bus is been clock 33.3.10.5 Multi-Master Mode (7-bit only)
stretched by some slave device. The MMA bit will be In Multi-Master mode, the device can be both master
cleared only after the Stop condition is generated. and slave depending on the sequence of events on the
bus. If being addressed as a slave, the I2CxADB0
33.3.10 ADDRESS BUFFERS register stores the received matching slave address
The I2C module has two address buffer registers, byte. If the device is trying to communicate as a master
I2CxADB0 and I2CxADB1. Depending on the mode, on the bus, the contents of the I2CxADB1 register are
these registers are used as either receive or transmit copied to the shift register for addressing a slave
address buffers. See Table 33-2 for data flow directions device.
in these registers. In Slave modes, these registers are
only updated when there is an address match. The 33.3.11 RECEIVE AND TRANSMIT BUFFER
ADB bit in the I2CxCON2 register is used to enable/dis- The receive buffer holds one byte of data while another
able the address buffer functionality. When disabled, is shifted into the SDA pin. The user can access the
the address data is sourced from the transmit buffer buffer by software (or DMA) through the I2CxRXB reg-
and is stored in the receive buffer. ister. When new data is loaded into the I2CxRXB regis-
ter, the receive buffer full Status bit (RXBF) is set and
TABLE 33-2: ADDRESS BUFFER reading the I2CxRXB register clears this bit.
DIRECTION AS PER I2C MODE If the user tries to read I2CxRXB when it is empty (i.e.,
RXBF = 0), receive read error bit (RXRE) is set and a
Modes MODE<2:0> I2CxADB0 I2CxADB1
NACK will be generated. The user must clear the error
Slave (7-bit) 000 RX — bit to resume normal operation.
001 RX — The transmit buffer holds one byte of data while
Slave (10-bit) 010 RX RX another can be shifted out through the SDA pin. The
011 RX RX user can access the buffer by software (or DMA)
through the I2CxTXB register. When the I2CxTXB does
Master (7-bit) 100 — TX
not contain any transmit data, the transmit buffer empty
Master (10-bit) 101 TX TX Status bit (TXBE) is set. At this point, the user can load
Multi-Master 110 RX TX another byte into the buffer.
(7-bit) RX TX
111 If the user tries to write I2CxTXB when it is NOT empty
(i.e., TXBE = 0), transmit write error flag bit (TXRE) is
33.3.10.1 Slave Mode (7-bit) set and the new data is discarded. When TXRE is set,
In 7-bit Slave mode, I2CxADB0 is loaded with the the user must clear this error condition to resume
received matching address and R/W data. The normal operation.
I2CxADB1 register is ignored in this mode. By setting the CLRBF bit in the I2CxSTAT1 register, the
user can clear both receive and transmit buffers.
33.3.10.2 Slave Mode (10-bit) CLRBF will also clear the I2CxRXIF and I2CxTXIF bits.
In 10-bit Slave mode, I2CxADB0 is loaded with the
lower eight bits of the matching received address. 33.3.12 CLOCK STRETCHING
I2CxADB1 is loaded with full eight bits of the high When a slave device has not completed processing
address byte, including the R/W bit. data, it can delay the transfer of more data through the
process of clock stretching. An addressed slave device
33.3.10.3 Master Mode (7-bit) may hold the SCL clock line low after receiving or send-
The I2CxADB0 register is ignored in this mode. In 7-bit ing a bit, indicating that it is not yet ready to continue.
Master mode, the I2CxADB1 register is used to copy The master will attempt to raise the SCL line in order to
address data byte, including the R/W value, to the shift transfer the next bit, but will detect that the clock line
register. has not yet been released. Since the SCL connection
is open-drain, the slave has the ability to hold the line
33.3.10.4 Master Mode (10-bit) low until it is ready to continue communicating. Clock
stretching allows receivers that cannot keep up with a
In 10-bit Master mode, the I2CxADB0 register stores
transmitter to control the flow of incoming data.
the low address data byte value that will be copied to
the shift register after the high address byte is shifted
out. The I2CxADB1 register stores the high address
byte value that will be copied to the shift register. It is up

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 534


PIC18(L)F25/26K83
Clock stretching can be enabled or disabled by the • Acknowledge status
clearing or setting of CSTRDIS (clock stretching dis- - The acknowledge status time interrupt and
able) bit in the I2CxCON2 register. This bit is valid only hold enable (ACKTIE) bit is used to enable
in the Multi-Master and Slave modes of operation. clock stretching after the ACK phase of a
transmission. This bit enables clock stretch-
33.3.12.1 Clock Stretching for Buffer ing for all address/data transactions; address,
Operations write, or read. Following the ACK, the slave
If enabled, clock stretching is forced during buffer read/ hardware will set CSTR. Clock stretching
write operations. For example, in Slave mode if RXBF from ACKTIE is released by software clearing
= 1 (receive buffer full), the clock will be stretched after the CSTR bit.
the seventh falling edge of SCL. The SCL line is
33.3.13 DATA BYTE COUNT
released only after the user reads data from the receive
buffer. This ensures that there is never a receive data The I2CxCNT register is used to specify the number of
overflow. In this situation, if clock stretching is disabled, bytes in a complete I2C packet. The value in this regis-
the RXO bit in I2CxCON1 is set indicating a receive ter will decrement every time a data byte is received or
overflow. When set, the module will always respond transmitted from the I2C module. The I2CxCNT register
with a NACK. will not decrement past zero.
Similarly, when TXBE = 1 (transmit buffer empty) and If a byte transfer causes the I2CxCNT register to dec-
I2CCNT! = 0, the clock is stretched after the 8th falling rement to zero, the Count Interrupt Flag bit (CNTIF) in
edge of SCL. The SCL line is released only after the I2CxPIR is set. This flag bit is set on the 9th falling edge
user loads new data into the transmit buffer. This of SCL for transmit operations and can be more infor-
ensures that there is never a transmit underflow. In this mational if the edge is specified.
situation, if clock stretching is disabled, the TXUF bit in The I2CxCNT register can be auto-loaded if the ACNT
I2CxCON1 is set indicating a transmit underflow. When bit in the I2CxCON2 register is set. When ACNT bit is
set, the module will always respond with a NACK. set, the data byte following the address byte is loaded
into the I2CxCNT register.
33.3.12.2 Clock Stretching for Other Slave
Operations
There are three Interrupt and Hold bits that provide Note 1: I2CxCNT decrements on the eighth
clock stretching in Slave mode. These bits can also be (receive) or ninth (transmit) falling edge
used in conjunction with the I2CxIE bit in PIRx register of SCL; writes during this bit time can cor-
to generate system level interrupts. rupt the value.
• Incoming address match interrupt 2: If the block size of the message is greater
- Clock stretching after an incoming matching than 255, the I2CxCNT register can be
address byte is enabled by the Address Inter- updated mid-message to prevent decre-
rupt and Hold (ADRIE) bit of the I2CxPIE reg- ment to zero.
ister. When ADRIE = 1, the CSTR bit is set
and the SCL line is stretched following the 33.4 I2C Slave Mode
8th falling edge of SCL of a received match-
ing address. This allows the user to read the The I2C Slave mode operates in one of four modes
received address from the I2CADB0/1 regis- selected in the Mode bits of I2CxCON0. The modes
ters and selectively ACK/NACK based on the can be divided into 7- and 10-bit Addressing modes.
received address. Clock stretching from 10-bit Addressing modes operate the same as 7-bit
ADRIE is released by software clearing the with some additional overhead for handling the larger
CSTR bit. addresses.
• Data Write Interrupt
- The data write interrupt and hold enable 33.4.1 SLAVE ADDRESSING MODES
(WRIE) bit is used to enable clock stretching The I2CxADR/1/2/3 registers contain the Slave mode
after a received data byte. When WRIE = 1, addresses. The first byte received after a Start or
the CSTR bit is set, and the SCL line is Restart condition is compared against the values
stretched, following the 8th falling SCL edge stored in these registers. If the byte matches a value, it
for incoming slave data. This bit allows user is loaded into the I2CxADB0/1 registers. If the value
software to selectively ACK/NACK each does not match, there is no response from the module.
received data byte. Clock stretching from The I2C module can be configured in the following
WRIE is released by software clearing the slave configurations.
CSTR bit.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 535


PIC18(L)F25/26K83
33.4.1.1 7-bit Addresses Mode
In this mode, the LSb of the received data byte is Note: Even though 10-bit addressing calls out
ignored when determining if there is an address match. only ten bits used in the address compari-
All four I2CxADR registers are independently com- son, all 15 address bits in I2CxADR0/1 are
pared to the received address byte. compared in these modes.

33.4.1.2 7-bit Addresses with Masking 33.4.2 GENERAL CALL ADDRESS


In this mode, the value in I2CxADR0 is masked with the SUPPORT
value in I2CxADR1 to determine if an address match The addressing procedure for the I2C bus is such that
occurred. A second address and mask are also com- the first byte after the Start condition usually deter-
pared from I2CxADR2/3. When Mode<2:0> = 001 or mines which device will be the slave addressed by the
111, the I2CxADR1/3 registers serve as the mask value master device. The exception is the general call
for I2CxADR0/2. All seven bits of the address can be address which can address all devices. When this
masked address is used, all devices should, in theory, respond
with an ACK. The general call address is a reserved
33.4.1.3 10-bit Addresses
address in the I2C protocol, defined as address 0x00.
In this mode, the values stored in I2CxADR0 and In order for the slave hardware to ACK this address, it
I2CxADR1 registers are used to create a 10-bit must be enabled by setting the GCEN bit in the
address. A second 10-bit compare address is formed I2CxCON2 register. Setting one of the I2CxADR0/1/2/3
from I2CxADR2 and I2CxADR3. registers to 0x00 is not required. Figure 33-5 shows a
General Call reception sequence.
33.4.1.4 10-bit Address with Masking
If the ADRIE bit is set, the module will clock stretch after
In this mode, the I2CxADR0/1 registers are used to the eighth SCL pulse just like any other address match.
form a 10-bit address, and the I2CxADR2/3 registers
are used to form a 10-bit mask for that address. When Note: General Call addressing is supported in
MODE<2:0> = 011, the I2CxADR2/3 registers serve as only 7-bit Addressing modes
the mask value for the 10-bit address stored in
I2CxADR0/1.

FIGURE 33-5: SLAVE MODE GENERAL CALL ADDRESS SEQUENCE

Rev. 10-000 292A


11/2/201 6

Add ress is compared to Genera l Call Add ress (I2CxA DR0 = 0x00)
afte r ACK, set interrup t

Receivi ng Data ACK


Gen eral Ca ll A ddress ACK D7 D6 D5 D4 D3 D2 D1 D0
SDA

SCL
S 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9

ADRIF

Cleared by so ftwa re
Matchin g a ddress written to I2CxA DB0

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 536


PIC18(L)F25/26K83
33.4.3 SLAVE OPERATION IN 7-BIT 13. If the receive buffer is full from the previous
ADDRESSING MODE transaction (i.e., RXBF = 1 (I2CxRXIF = 1)),
CSTR is set. Slave software must read data out
The 8th bit in an address byte transmitted by the mas-
of I2CxRXB to resume communication.
ter is used to determine if the master wants to read from
or write to the slave device. If set, it denotes that the 14. Master sends 8th SCL pulse of the data byte. D/
master wants to read from the slave and if cleared it A bit is set, WRIF is set.
means the master wants to write to the slave device. If 15. I2CxRXB is loaded with new data, RXBF bit is
there is an address match, the R/W bit is copied to the set, I2CxRXIF is set.
R/W bit of the I2CxSTAT0 register. 16. If Data write interrupt and hold is enabled
(WRIE = 1), CSTR is set, I2CxIF is set. Slave
33.4.3.1 Slave Reception (7-bit Addressing software can read data from I2CxRXB and set/
Mode) clear ACKDT before releasing SCL by clearing
This section describes the sequence of events for the CSTR.
I2C module configured as an I2C slave in 7-bit Address- 17. If I2CxCNT = 0, the ACKCNT value is output to
ing mode and is receiving data. Figure 33-6, Figure 33- the SDA; else, if I2CxCNT!= 0, the ACKDT value
7, and Figure 33-8 are used as a visual reference for is used and the value of I2CxCNT is decre-
this description. mented.
1. Master asserts Start condition (can also be a 18. The ACK value is copied out to SDA to be read
restart) on the bus. Start condition Interrupt Flag by the master on the 9th SCL pulse.
(SCIF) in I2CxPIR register is set. 19. If I2CxCNT = 0, CNTIF is set.
2. If Start condition interrupt is enabled (SCIE bit is 20. If a NACK was sent, NACKIF is set, module
set), generic interrupt I2CxIF is set. becomes idle.
3. Master transmits eight bits – 7-bit address and 21. If ACKTIE = 1, CSTR is set, I2CxIF is set. Slave
R/W = 0. software can read data from I2CxRXB clearing
4. Received address is compared with the values RXBF, before releasing SCL by clearing CSTR.
in I2CxADR0/I2CxADR1/I2CxADR2/I2CxADR3 22. Go to step 11.
registers. Refer to section Section 33.4.1
“Slave Addressing Modes” for slave address-
ing modes.
5. If address matches; SMA in I2CxSTAT0 register
is set, R/W is copied to R/W bit, D/A bit is
cleared. If the address does not match; module
becomes Idle.
6. The matched address data is loaded into
I2CxADB0 and ADRIF in I2CxPIR register is set.
7. If Address hold interrupt is enabled
(ADRIE = 1), CSTR is set. I2CxIF is set. Slave
software can read address from I2CxADB0 and
set/clear ACKDT before releasing SCL.
8. If there are any previous error conditions (e.g.,
Receive buffer overflow or transmit buffer under-
flow errors), slave will force a NACK and the
module becomes Idle.
9. ACKDT value is copied out to SDA for ACK
pulse to be read by the master on the 9th SCL
pulse.
10. If the Acknowledge interrupt and hold is enabled
(ACKTIE = 1), CSTR is set, I2CxIF is set, then
slave software can read address from
I2CxADB0 register and change the value of
ACKDT before releasing SCL by clearing
CSTR.
11. Master sends first seven SCL pulses of the data
byte or a Stop condition (in the case of NACK).
12. If Stop condition; PCIF in I2CxPIR register is set,
module becomes Idle.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 537


FIGURE 33-6: I2C SLAVE, 7-BIT ADDRESS, RECEPTION (ACKTIE = 0, ADRIE = 0, WRIE = 0)
 2017 Microchip Technology Inc.

PIC18(L)F25/26K83
Rev. 10-000 293A
11/2/201 6

Bus Master sends


Matching Received Address From Slave to Master stop condition
loaded into I2CxADB0
Start R/W = 0 Receiving Data Receiving Data ACK = 1 Stop
SDA
A7 A6 A5 A4 A3 A2 A1 ACK D7 D6 D5 D4 D3 D2 D1 D0 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

CSTR
SCIE = 0 ADRIE = 0 WRIE = 0 WRIE = 0
CSTR is not held low ACKTIE = 0 ACKTIE = 0 ACKTIE = 0

SMA
SCIF is set
PCIF is set
Preliminary

R/W
ACKTIF is set WRIF is set ACKTIF is set WRIF is set ACKTIF is set
R/W c opied from matching address
ADRIF is set NACKIF is set
D/A

Matching address written to I2CxADB0

I2CxCNT 0x02 0x02 0x01 0x00


Slave sends ACKCNT
value for I2CxCNT = 0
CNTIF is set
RXBF

RXIF set RXIF set


Software reads I2CxRXB
clearing RXIF
DS40001943A-page 538
FIGURE 33-7: I2C SLAVE, 7-BIT ADDRESS, RECEPTION WITH I2CxCNT (ACKTIE = 1, ADRIE = 0, WRIE = 0)
 2017 Microchip Technology Inc.

Rev. 10-000 294A


11/2/201 6

Bus Master sends


stop condition
From Slave to Master

S Receive Address Receive Data Receive Data P


NACK
SDA A7 A6 A5 A4 A3 A2 A1 R/W= 0 ACK D7 D6 D5 D4 D3 D2 D1 D0 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

CSTR

SCIF is set ADIHE = 0 WRIE = 0 WRIE = 0


ACKTIE = 1 Software clears CSTR No CSTR for NACK
Software clears CSTR ACKTIE = 1
Preliminary

R/W
ACKTIF is set WRIF is set ACKTIF is set WRIF is set ACKTIF is set
R/W copied from matching address
NACKIF is set
ADRIF is set
D/A
matching address copied to
I2CxADB0

PIC18(L)F25/26K83
I2CxCNT 0x02 0x02 0x01 0x00
Slave sends ACKCNT
value for I2CxCNT = 0
CNTIF is set
RXBF

Data byte written to I2CxRXB Second data byte written to


I2CxRXB
RXIF set
RXIF set
Software reads I2CxRXB
clearing RXIF
DS40001943A-page 539
FIGURE 33-8: I2C SLAVE, 7-BIT ADDRESS, RECEPTION NO I2CxCNT (ACKTIE = 0, ADRIE = 1, WRIE = 1)
 2017 Microchip Technology Inc.

PIC18(L)F25/26K83
Rev. 10-000 295A
11/2/201 6

Master sends
Master Releases SDA to
stop condition
slave for ACK sequence
S
Receiving Data Received Data P
Receiving Address R/W = 0 NACK
SDA A7 A6 A5 A4 A3 A2 A1 ACK D7 D6 D5 D4 D3 D2 D1 D0 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

Clock is held low until CSTR is set to ‘1’

CSTR
CSTR cleared software, Software clears CSTR
ADRIE = 1 WRIE = 1
SCL is released SCL is released
CSTR is set by hardware CSTR is set by hardware WRIE = 1

R/W
WRIF is set WRIF is set ACKTIF is set
Preliminary

R/W copied from ma tching address


ADRIF is set NACKIF is set

D/A
matching address written to
Data byte written to I2CxRXB Second data byte to I2CxRXB
I2CxADB0
ACKDT

Software reads I2CxADB0 Slave software


Software clears ACKDT sets ACKDT
ACKT
ACKT set by hard ware on ACKT cleared by
8th falling edge of SCL hardware in 9th rising
edge of SCL
I2CxCNT 0x44 0x44 0x43 0x42

RXBF
DS40001943A-page 540

I2CxRXIF is set I2CxRXIF is set


Software reads d ata from I2CxRXB Software reads d ata from I2CxRXB
Clearing I2CxRXIF Clearing I2CxRXIF
PIC18(L)F25/26K83
33.4.3.2 Slave Transmission (7-bit
Addressing Mode)
This section describes the sequence of events for the
I2C module configured as an I2C slave in 7-bit Address-
ing mode and is transmitting data. Figure 33-9 and
Figure 33-10 are used as a visual reference for this
description.
1. Master asserts Start condition (can also be a
restart) on the bus. Start condition Interrupt Flag
(SCIF) in I2CxPIR register is set.
2. If Start condition interrupt is enabled (SCIE bit is
set), generic interrupt I2CxIF is set.
3. Master transmits eight bits – 7-bit address and
R/W = 1.
4. Received address is compared with the values
in I2CxADR0/I2CxADR1/I2CxADR2/I2CxADR3
registers. Refer to Section 33.4.1 “Slave
Addressing Modes” for Slave Addressing
modes
5. If address matches; SMA in I2CxSTAT0 register
is set, R/W is copied to R/W bit, D/A bit is
cleared. If the address does not match; module
becomes idle.
6. The matched address data is loaded into
I2CxADB0 and ADRIF in I2CxPIR register is set.
7. If Address hold interrupt is enabled
(ADRIE = 1), CSTR is set. I2CxIF is set. Slave
software can read address from I2CxADB0 and
set/clear ACKDT before releasing SCL. SCL
line can be released by clearing CSTR.
8. If the transmit buffer is empty from the previous
transaction, i.e., TXBE = 1 and I2CxCNT!= 0
(I2CxTXIF = 1), CSTR is set. Slave software
must load data into I2CxTXB to release SCL.
I2CxCNT decrements after the byte is loaded
into the shift register.
9. Slave hardware waits for 9th SCL pulse with
ACK data from master.
10. If I2CxCNT = 0, CNTIF is set.
11. If the Acknowledge interrupt and hold is enabled
(ACKTIE = 1), CSTR is set, I2CxIF is set.
12. Slave software can change the value of ACKDT
before releasing SCL by clearing CSTR.
13. Master sends eight SCL pulses to clock out data
or asserts a Stop condition to end the transac-
tion.
14. Go to step 8.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 541


FIGURE 33-9: I2C SLAVE, 7-BIT ADDRESS, TRANSMISSION
 2017 Microchip Technology Inc.

PIC18(L)F25/26K83
Rev. 10-000 296A
11/2/201 6

Master sends
Master Releases SDA stop condition
Master sends ACK Master sends NACK
Slave sends ACK
S Slave Transmitting Data Slave Transmitting Data
R/W = 1 P
SDA A7 A6 A5 A4 A3 A2 A1 D7 D6 D5 D4 D3 D2 D1 D0 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

CSTR

SCIF is set ADRIE = 1 PCIF is set


ACKTIE = 0 ACKTIE = 0
Software write to
I2CxTXB, clears CSTR
Preliminary

R/W
R/W copied from matching address
ADRIF is set ACKTIF is set ACKTIF is set

D/A

matching address copy to I2CxADB0

ACKSTAT

Master’s ACK NACKIF is set


copied to ACKSTAT

I2CxCNT 0x02 0x01 0x00 0x00


Software writes
I2CxCNT CNTIF is set
TXBE
TXIF is set for read address when TXBE = 1
DS40001943A-page 542

value in I2CxCNT is ignored Software writes TXIF NOT set


Software write to I2CxTXB, clears CSTR I2CxTXB
MSb is of I2CxTXB copied to SDA MSb is of I2CxTXB copied to SDA No new TX data on I2CxCNT = 0
Data byte 1 loaded from Data byte 2 loaded from (shifter loaded 8’b1111 1111)
I2CxTXB to shifter I2CxTXB to shifter
TXIF set TXIF NOT set
FIGURE 33-10: I2C SLAVE, 7-BIT ADDRESS, TRANSMISSION (NO CLOCK STRETCHING)
 2017 Microchip Technology Inc.

Rev. 10-000 297A


11/2/201 6

Master sends
Master Releases SDA stop condition
Master sends ACK Master sends NACK
Slave sends ACK
S
R/W = 1 Slave Transmitting Data Slave Transmitting Data P
SDA A7 A6 A5 A4 A3 A2 A1 D7 D6 D5 D4 D3 D2 D1 D0 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

CSTR
ADRIE = 0
SCIF is set ACKTIE = 0 ACKTIE = 0 ACKTIE = 0 PCIF is set

R/W
R/W copied from matching address
Preliminary

ADRIF is set ACKTIF is set ACKTIF is set

D/A

matching address copy to I2CxADB0

ACKSTAT

PIC18(L)F25/26K83
Master’s ACK NACKIF is set
copied to ACKSTAT

I2CxCNT 0x02 0x01 0x00 0x00

CNTIF is set
TXBE

Software writes
Before Start, software loads
I2CxTXB
one byte in I2CxTXB
No new TX data on I2CxCNT = 0
MSb is of I2CxTXB copied to SDA
DS40001943A-page 543

MSb is of I2CxTXB copied to SDA (shifter loaded 8’b1111 1111)


Data byte 1 loaded from Data byte 2 loaded from
I2CxTXB to shifter I2CxTXB to shifter
TXIF set I2CxTXIF NOT set I2CxTXIF NOT set
PIC18(L)F25/26K83
33.4.3.3 Slave operation in 10-bit Addressing NACK and the module becomes Idle.
Mode 10. Master transmits low address data byte
In 10-bit Addressing mode, the first received byte is 11. If the low address matches; SMA is set, ADRIF
compared to the binary value of ‘11110A9A80’. A9 and is set, R/W is copied to R/W bit, D/A bit is
A8 are the two MSb of the 10-bit address. The first byte cleared, low address data is copied to
is compared with the value in I2CxADR1 and I2CxADB0, and ACTDT is copied to SDA. If the
I2CxADR3 registers. After the high byte is acknowl- address does not match; module becomes Idle.
edged, the low address byte is clocked in and all eight 12. If address hold interrupt is enabled, the CSTR
bits are compared to the low address value in the bit is set as mentioned in step 6. Slave software
I2CxADR0 and I2CxADR2 registers. A high and low can read low address byte from I2CxADB0 reg-
address match as a write request is required at the start ister and change ACKDT value before releasing
of all 10-bit addressing communication. To initiate a SCL.
read, the master needs to issue a Restart once the 13. Master sends ninth SCL pulse for ACK.
slave is addressed and clock in the high address with 14. If the Acknowledge interrupt and hold is enabled
the R/W bit set. The slave hardware will then acknowl- (ACKTIE = 1), CSTR is set, I2CxIF is set.
edge the read request and prepare to clock out data.
15. Slave software can read address from
The SMA (slave active) bit is set only when both the
I2CxADB0 and I2CxADB1 registers and change
high and low address bytes match.
the value of ACKDT before releasing SCL by
clearing CSTR.
Note: All seven bits of the received high address 16. Master sends first seven SCL pulses of the data
are compared to the values in the byte or a Stop condition (in the case of NACK).
I2CxADR1 and I2CxADR3 registers. The 17. If Stop condition; PCIF in I2CxPIR register is set,
five-bit ‘11110’ high address format is not module becomes Idle.
enforced by module hardware. It is up to 18. If the receive buffer is full from the previous
the user to configure these bits correctly. transaction i.e. RXBF = 1 (I2CxRXIF = 1), CSTR
is set. Slave software must read data out of
33.4.3.4 Slave Reception (10-bit Addressing I2CxRXB to resume communication.
Mode) 19. Master sends eighth SCL pulse of the data byte.
This section describes the sequence of events for the D/A bit is set, WRIF is set. I2CxRXB is loaded
I2C module configured as an I2C slave in 10-bit with new data, RXBF bit is set.
Addressing mode and is receiving data. Figure 33-11 is 20. If Data write interrupt and hold is enabled
used as a visual reference for this description. (WRIE = 1), CSTR is set, I2CxIF is set. Slave
1. Master asserts Start condition (can also be a software can read data from I2CxRXB and set/
restart) on the bus. Start condition Interrupt Flag clear ACKDT before releasing SCL by clearing
(SCIF) in I2CxPIR register is set. If Start condi- CSTR.
tion interrupt is enabled (SCIE bit is set), generic 21. If I2CxCNT = 0, the ACKCNT value is output to
interrupt I2CxIF is set. the SDA; else, the ACKDT value is used and the
2. Master transmits high address byte with R/W = 0. value of I2CxCNT is decremented.
3. The received high address is compared with the 22. Master sends SCL pulse for ACK.
values in I2CxADR1 and I2CxADR3 registers. 23. If I2CxCNT = 0, CNTIF is set.
4. If high address matches; R/W is copied to R/W 24. If the response was a NACK; NACKIF is set,
bit, D/A bit is cleared, high address data is cop- module becomes idle.
ied to I2CxADB1. If the address does not match; 25. If ACKTIE = 1, CSTR is set, I2CxIF is set. Slave
module becomes idle. software can read data from I2CxRXB clearing
5. If Address hold interrupt is enabled RXBF; before releasing SCL by clearing CSTR
(ADRIE = 1), CSTR is set. I2CxIF is set. 26. Go to step 16.
6. Slave software can read high address from
I2CxADB1 and set/clear ACKDT before releas-
ing SCL.
7. ACKDT value is copied out to SDA for ACK
pulse. SCL line is released by clearing CSTR.
8. Master sends ninth SCL pulse for ACK
9. Slave can force a NACK at this point due to pre-
vious error not being cleared. E.g. Receive buf-
fer overflow or transmit buffer underflow errors.
In these cases the slave hardware forces a

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 544


FIGURE 33-11: I2C SLAVE, 10-BIT ADDRESS, RECEPTION WITH STOP (ADB = 1)
 2017 Microchip Technology Inc.

Rev. 10-000 298A


11/2/201 6

From Slave to Master

R/W = 0 from I2CxADB1[0]


S Recieve High Address Recieve Low Address Receive Data P
SDA
1 1 1 1 0 A9 A8 ACK A7 A6 A5 A4 A3 A2 A1 A0 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK

High Address copied Low Address copied


to I2CxRXB to I2CxRXB

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

CSTR
ADRIE = 0 ADRIE = 0 PCIF is set
SCIF is set ACKTIE = 0

R/W
R/W copied from matching address ACKTIF is ACKTIF is
ACKTIF NOT set for
Preliminary

ADRIF is set set set


high address /w

D/A

matching address R/W value copied

PIC18(L)F25/26K83
SMA

SMA set only after full


address match Hardware clears SMA

RXBF

I2CxRXIF is set I2CxRXIF is set I2CxRXIF is set


Software reads address from Software reads address from Software reads data from
I2CxRXB, Clearing I2CxRXIF I2CxRXB, Clearing I2CxRXIF I2CxRXB, Clearing I2CxRXIF
DS40001943A-page 545
PIC18(L)F25/26K83
33.4.3.5 Slave Transmission (10-bit 18. If SMA = 1, and if high address matches; R/W is
Addressing Mode) copied to R/W bit, D/A bit is cleared, high
address data is copied to I2CxADB1, and
This section describes the sequence of events for the
ACTDT is output to SDA. If the address does not
I2C module configured as an I2C slave in 10-bit
match or SMA = 0; module become Idle.
Addressing mode and is transmitting data. Figure 33-
12 is used as a visual reference for this description. 19. If ADRIE = 1, CSTR is set. I2CIF is set. Slave
software can read address from I2CxADB0/1
1. Master asserts Start condition (can also be a and set/clear ACKDT. The ACKDT value is cop-
restart) on the bus. Start condition Interrupt Flag ied out to SDA. SCL is released by clearing
(SCIF) in I2CxPIR register is set. If Start condi- CSTR bit.
tion interrupt is enabled (SCIE bit is set), generic
20. If TXBE = 1 and I2CCNT!= 0 (I2CTXIF = 1),
interrupt I2CxIF is set.
CSTR is set. Slave software must load data into
2. Master transmits high address byte with R/W = 0. I2CxTXB to release SCL.
3. The received high address is compared with the 21. Master sends SCL pulse for ACK. If
values in I2CxADR1 and I2CxADR3 registers. I2CCNT = 0, CNTIF is set.
4. If high address matches; R/W is copied to R/W 22. If NACK; NACKIF is set, slave goes Idle.
bit, D/A bit is cleared, high address data is cop-
23. If ACKTIE = 1, CSTR is set, I2CIF is set. Slave
ied to I2CxADB1. If the address does not match;
software can read address from I2CxADB0/1
module becomes Idle.
before releasing SCL by clearing CSTR.
5. If Address hold interrupt is enabled
24. Master sends eight SCL pulses to clock out
(ADRIE = 1), CSTR is set. I2CxIF is set.
data.
6. Slave software can read high address from
25. Go to step 20.
I2CxADB1 and set/clear ACKDT before
releasing SCL.
7. ACKDT value is copied out to SDA for ACK
pulse. SCL line is released by clearing CSTR.
8. Master sends ninth SCL pulse for ACK.
9. Slave can force a NACK at this point due to pre-
vious error not being cleared. E.g. Receive buf-
fer overflow or transmit buffer underflow errors.
In these cases the slave hardware forces a
NACK and the module becomes Idle.
10. Master transmits low address data byte.
11. If the low address matches; SMA is set, ADRIF
is set, R/W is copied to R/W bit, D/A bit is
cleared, low address data is copied to
I2CxADB0, and ACTDT is copied to SDA. If the
address does not match; module becomes Idle.
12. If address hold interrupt is enabled, the CSTR
bit is set as mentioned in step 6. Slave software
can read low address byte from I2CxADB0 reg-
ister and change ACKDT value before releasing
SCL.
13. Master sends 9th SCL pulse for ACK.
14. If the Acknowledge interrupt and hold is enabled
(ACKTIE = 1), CSTR is set, I2CxIF is set.
15. Slave software can read address from
I2CxADB0 and I2CxADB1 registers and change
the value of ACKDT before releasing SCL by
clearing CSTR.
16. Master asserts Restart condition (cannot be
Start) on the bus. Restart Condition Interrupt
Flag (RSCIF) is set. If the Restart Condition
Interrupt is enabled, generic interrupt I2CxIF is
set.
17. Master transmits high address byte with R/W = 1.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 546


FIGURE 33-12: I2C SLAVE, 10-BIT ADDRESS, TRANSMISSION
 2017 Microchip Technology Inc.

Rev. 10-000 299A


11/2/201 6

Master sends
Master sends Master sends stop event
start event restart event Master sends
NACK
R/W = 0 R/W = 1
S Sr ACK = 1 P
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 D7 D6 D5 D4 D3 D2 D1 D0

High Address copied Low Address copied High Address copied Transmit data loaded from
to I2CxADB1[7:0] to I2CxADB0[7:0] to I2CxADB1[7:0] I2CxTXB to TX shift reg

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

CSTR
Preliminary

Hardware clea rs SMA

SMA

SCIF is set Full matching address


PCIF is set
RSIF is set

PIC18(L)F25/26K83
R/W
R/W copied from matching ad dress ACKTIE NOT set
ADRIF is set for high address /w ACKTIE is set ACKTIE is set
ACKTIE is set
D/A
matching add ress R/W value
copied

TXBE
DS40001943A-page 547

I2CxTXIF is set
Software load s I2CxTXB

I2CxCNT 0x01 0x00

Software load s I2CxCNT


PIC18(L)F25/26K83
33.5 I2C Master Mode After each byte is received, an Acknowledge bit is
transmitted. Start and Stop conditions indicate the
Master mode is enabled by setting and clearing the beginning and end of the transmission.
appropriate Mode<2:0> bits in I2CxCON and then by
setting the I2CEN bit. Master mode of operation is sup- 33.5.2 MASTER CLOCK SOURCE AND
ported by interrupt generation on buffer full (RXIF), buf- ARBITRATION
fer empty (TXIF), and the detection of the Start, Restart,
and Stop conditions. The Stop (P), Restart (RS) and The I2C module clock source is selected by the
Start (S) bits are cleared from a Reset or when the I2C I2CxCLK register. The I2C Clock provides the SCL out-
module is disabled. Control of the I2C bus is asserted put clock for Master mode and is used by the Bus Free
when the BFRE bit of I2CSTAT0 is set. timer. The I2C clock can be sourced from several
peripherals.
33.5.1 I2C MASTER MODE OPERATION
33.5.3 BUS FREE TIME
The master device generates all of the serial clock
pulses and the Start, Restart, and Stop conditions. A In Master modes, the BFRE bit of the I2CxSTAT0 reg-
transfer is ended with a Stop condition or with a Restart ister gives an indication of the bus idle status. The mas-
condition. Since the Repeated Start condition is also ter hardware cannot assert a Start condition until this bit
the beginning of the next serial transfer, the I2C bus will is set by the hardware. This prevents the master from
not be released, and MMA bit will stay set signifying colliding with other masters that may already be talking
that the master module is still active. on the bus. The BFRET<1:0> bits of I2CxCON1 allow
selection of 8 to 64 pulses of the I2C clock input before
The steps to initiate a transaction depends on the asserting the BFRE bit. The BFRET bits are used to
setting of the address buffer disable bit (ABD) of the ensure that the I2C module always follows the mini-
I2CxCON2 register. mum Stop Hold Time. The I2C timing requirements are
• ABD = 0 (Address buffers are enabled) listed in the electrical specifications chapter.
In this case, the master module will use the address Note: I2C clock is not required to have a 50%
stored in the address buffer registers (I2CxADB0/1) to duty cycle.
initiate communication with a slave device. User soft-
ware needs to set the Start bit (S) in the I2CxCON0 reg- 33.5.4 MASTER CLOCK TIMING
ister to start communication. This is valid for both 7-bit
The clock generation in the I2C module can be config-
and 10-bit Addressing modes.
ured using the Fast Mode Enable (FME) bit of the
• ABD = 1 (Address buffers are disabled) I2CxCON2 register. This bit controls the number of
In this case, the slave address is transmitted through times the SCL pin is sampled before the master hard-
the transmit buffer and the contents of the address ware drives it.
buffers are ignored. User software needs to write the
slave address to the transmit buffer (I2CxTXB) to 33.5.4.1 Clock Timing with FME = 0
initiate communication. Writing to the Start bit is One Tscl, consists of five clocks of the I2C clock input.
ignored in this mode. This is valid for both 7-bit and 10- The first clock is used to drive SCL low, the third
bit Addressing modes. releases SCL high. The fourth and fifth clocks are used
to detect if the SCL pin is, in fact, high or being
33.5.1.1 Master Transmitter stretched by a slave.
In Master Transmitter mode, the first byte transmitted If a slave is clock stretching, the hardware waits; check-
contains the slave address of the receiving device (7 ing SCL on each successive I2C clock, proceeding only
bits) and the Read/Write (R/W) bit. In the case of mas- after detecting SCL high. Figure 33-13 shows the clock
ter transmitter, the R/W bit will be logic ‘0’. Serial data synthesis timing when FME = 0.
is transmitted eight bits at a time. After each byte is
transmitted, an Acknowledge bit is received. Start and
Stop conditions are output to indicate the beginning
and the end of a serial transfer.

33.5.1.2 Master Receiver


In Master Receive mode, the first byte transmitted con-
tains the slave address of the transmitting device (7
bits) and the R/W bit. In this case, the R/W bit will be
logic ‘1’. Thus, the first byte transmitted is a 7-bit slave
address followed by a ‘1’ to indicate the receive bit.
Serial data is received via SDA, while SCL outputs the
serial clock. Serial data is received eight bits at a time.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 548


PIC18(L)F25/26K83
FIGURE 33-13: CLOCK SYNTHESIS TIMING (FME = 0)
Rev. 10-000 305A
8/16/201 6

TSCL TSCL
2
I C_clk

SDA

SDA delay time

SCL

Master device
releases clock Slave releases bus
SCL is shortened but
is 2*TCLK, min
Master drives Master device
SCL low detects clock high twice Master waits to
detect SCL twice

33.5.4.2 Clock Timing with FME = 1


One TSCL, consists of four clocks of the I2C clock input.
The first clock is used to drive SCL low, the third
releases SCL high, and the fourth is used to detect if
the clock is, in fact, high or being stretched by a slave.
If a slave is clock stretching, the hardware waits; check-
ing SCL on each successive I2C clock, proceeding only
after detecting SCL high. Figure 33-14 shows the clock
synthesis timing when FME = 1.

FIGURE 33-14: CLOCK SYNTHESIS TIMING (FME = 1)


Rev. 10-000 306A
8/16/201 6

TSCL TSCL TSCL


2
I C_clk

SDA

SDA delay time

SCL

Master device
Slave releases
releases clock
bus, a shortened
Master device SCL clock appears
Master drives
detects clock high Master waits to detect
SCL low
SCL no longer held low

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 549


PIC18(L)F25/26K83
33.5.5 I2C MASTER MODE START asserting the Start condition. The action of the SDA
CONDITION TIMING being driven low while SCL is high is the Start condition,
causing the SCIF bit to be set. One TSCL later the SCL
The user can initiate a Start condition by either writing
is asserted low, ending the start sequence. Figure 33-
to the Start bit (S) of the I2CxCON0 register or by
15 shows the Start condition timing.
writing to the I2CxTXB register based on the ABD bit
setting. Master hardware waits for BFRE = 1, before

FIGURE 33-15: START CONDITION TIMING


Rev. 10-000 307A
8/16/201 6

BFRE = 1, start is asserted


Set SCIF bit

Write to START bit occurs here At completion of Start,


hardware loads I2CSR from I2CADB0/1

S
SDA
1st bit 2nd bit

SCL

I2C_clk 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4

33.5.6 I2C MASTER MODE REPEATED


START CONDITION TIMING
A Repeated Start condition occurs when the Start bit of
the I2CxCON0 register is set and the master module is
waiting from a Restart clock stretch event (RSEN = 1
and I2CxCNT = 0).
When the Start bit is set, the SDA pin is released high
for TSCL/2. Then the SCL pin is released floated high)
for TSCL/2. If the SDA pin is detected low, bus collision
flag (BCLIF) is set and the master goes idle. If SDA is
detected high, the SDA pin will be pulled low (Start con-
dition) for TSCL. Last, SCL is asserted low and
I2CxADB0/1 is loaded into the shift register. As soon as
a Restart condition is detected on the SDA and SCL
pins, the RSCIF bit is set. Figure 33-16 shows the tim-
ings for repeated Start Condition.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 550


PIC18(L)F25/26K83
FIGURE 33-16: REPEATED START CONDITION TIMING

Rev. 10-000 308A


8/16/201 6

Repeated Start
RSCIF bit set
2
Write to I CCON0<START>

Completion of Restart

Sr
st
1 bit
SDA

I2CTSR loaded from I2CADB0/1

SCL

I2C_clk 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2

33.5.7 ACKNOWLEDGE SEQUENCE should set the ACKDT bit before starting an Acknowl-
TIMING edge sequence. The master then waits one clock
period (TSCL) and the SCL pin is released high. When
An Acknowledge sequence is enabled automatically
the SCL pin is sampled high (clock arbitration), the
following an address/data byte transmission. The SCL
master counts another TSCL. The SCL pin is then pulled
pin is pulled low and the contents of the Acknowledge
low. Figure 33-17 shows the timings for Acknowledge
Data bits (ACKDT/ACKCNT) are presented on the SDA
sequence.
pin. If the user wishes to generate an Acknowledge,
then the ACKDT bit should be cleared. If not, the user

FIGURE 33-17: ACKNOWLEDGE SEQUENCE TIMING


Rev. 10-000 309A
8/16/201 6

Acknowledge sequence starts here,


ACKDT = 0

TSCL
SDA D0 ACK

SCL 8 9

xxxIF

Cleared in
WRIF set at software
the end of receive Cleared in
ASTIF set at the end
software
of Acknowledge sequence

33.5.8 STOP CONDITION TIMING sitions high while SCL is high, the PCIF bit of the I2CxIF
register is set. Figure 33-18 shows the timings for a
A Stop bit is asserted on the SDA pin at the end of
Stop condition.
receive/transmit when I2CxCNT = 0. After the last byte
of a receive/transmit sequence, the SCL line is held
low. The master asserts the SDA line low. The SCL pin
is then released high TSCL/2 later and is detected high.
The SDA pin is then released. When the SDA pin tran-

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 551


PIC18(L)F25/26K83
FIGURE 33-18: STOP CONDITION DURING RECEIVE OR TRANSMIT
Rev. 10-000 310A
11/2/201 6

SCL = 1 for T SCL/2, followed by SDA = 1


PCIF bit is set
Stop condition starts Stop c ondition must be held for
falling edge of T SCL after Stop transition
9th clock

SDA ACK

SCL

I2C_clk 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4

TSCL TSCL TSCL

SDA asserted low before rising edge of clock


to setup Stop condition

33.5.9 MASTER TRANSMISSION IN 7-BIT value of I2CxCNT register is decremented.


ADDRESSING MODE 6. If a NACK was received, master hardware
This section describes the sequence of events for the asserts Stop or Restart
I2C module configured as an I2C master in 7-bit 7. If ABD = 0; i.e., Address buffers are enabled
Addressing mode and is transmitting data. Figure 33- If I2CxCNT = 0, Master hardware sends Stop or sets
19 is used as a visual reference for this description. MDR if RSEN = 1 and waits for the software to set the
1. If ABD = 0; i.e., Address buffers are enabled Start bit again to issue a restart condition.
Master software loads number of bytes to be If ABD = 1; i.e., Address buffers are disabled
transmitted in one sequence in I2CxCNT, slave If I2CxCNT = 0, Master hardware sends Stop or sets
address in I2CxADB1 with R/W = 0 and the first byte MDR if RSEN = 1 and waits for the software to write the
of data in I2CxTXB. Master software has to set the Start new address to the I2CxTXB register. Software writes
(S) bit to initiate communication. to the S bit are ignored in this case.
If ABD = 1; i.e., Address buffers are disabled 8. Master hardware outputs data on SDA.
Master software loads the number of bytes to be 9. If TXBE = 1 and I2CxCNT! = 0, I2CxTXIF and
transmitted in one sequence in I2CxCNT and the slave MDR bits are set and the clock is stretched on
address with R/W = 0 into the I2CxTXB register. Writing 8th falling SCL edge. The user can release the
to the I2CxTXB will assert the start condition on the bus clock by writing the next data byte to I2CxTXB
and sets the S bit. Software writes to the S bit are register.
ignored in this case. 10. Master hardware clocks in ACK from slave, and
2. Master hardware waits for BFRE bit to be set; loads the next data byte from I2CTXB to the shift
then shifts out start and address. register. The value of I2CxCNT is decremented.
3. If the transmit buffer is empty (i.e., TXBE = 1) 11. Go to step 7.
and I2CxCNT!= 0, the I2CxTXIF and MDR bits
are set and the clock is stretched on the 8th fall-
ing SCL edge. Clock can be started by loading
the next data byte in I2CxTXB register.
4. Master sends out the 9th SCL pulse for ACK.
5. If the master hardware receives ACK from slave
device, it loads the next byte from the transmit
buffer (I2CxTXB) into the shift register and the

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 552


FIGURE 33-19: I2C MASTER, 7-BIT ADDRESS, TRANSMISSION WITH STOP
 2017 Microchip Technology Inc.

Rev. 10-000 300A


11/2/201 6

From S lave to Ma ster

S R/W = 0 from I2CxA DB1[0] Master Transmitting Data


Master Transmitting Data P
SDA
A7 A6 A5 A4 A3 A2 A1 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK

Add ress co pied fr om


I2CxA DB1[7:1]
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

MMA

Softwa re sets START to


Hardware clears MMA o n S top
Preliminary

star t tra nsmission


SCIF is set PCIF is set

ACKSTAT

PIC18(L)F25/26K83
I2CxCNT 0x02 0x01 0x00 0x00

CNTIF is set
I2CxCNT = 0
RSEN = 0, mas ter se nds Stop

TXBE
Softwa re writes
Before Start, I2CxTXB
software loads one MSb is of I2CxTXB copied to SDA
MSb is of I2CxTXB copied to SDA
byte in I2CxTXB Second da ta byte loa ded fro m No new TX data o n I2CxCNT = 0
DS40001943A-page 553

Data byte l oaded (shifter load ed 8’b111 1 1 111)


from I2CxTXB to shifter I2CxTXB to shifter
I2CxTXIF NOT set
I2CxTXIF is set I2CxTXIF NOT set
PIC18(L)F25/26K83
33.5.10 MASTER RECEPTION IN 7-BIT
ADDRESSING MODE
This section describes the sequence of events for the
I2C module configured as an I2C master in 7-bit
Addressing mode and is receiving data. Figure 33-20 is
used as a visual reference for this description.
1. Master software loads slave address in
I2CxADB1 with R/W bit = d and number of bytes
to be received in one sequence in I2CxCNT reg-
ister.
2. Master hardware waits for BFRE bit to be set;
then shifts out start and address with R/W = 1.
3. Master sends out the 9th SCL pulse for ACK,
master hardware clocks in ACK from slave
4. If ABD = 0; i.e., Address buffers are enabled
If NACK, master hardware sends Stop or sets MDR (if
RSEN = 1) and waits for user software to write to S bit
for restart.
If ABD = 1; i.e., Address buffers are disabled
If NACK, master hardware sends Stop or sets MDR (if
RSEN = 1) and waits for user software to load the new
address into I2CxTXB. Software writes to the S bit are
ignored in this case.
5. If ACK, master hardware receives 7 bits of data
into the shift register.
6. If the receive buffer is full (i.e., RXBF = 1), clock
is stretched on 7th falling SCL edge.
7. Master software must read previous data out of
I2CxRXB to clear RXBF.
8. Master hardware receives 8th bit of data into the
shift register and loads it into I2CxRXB, sets
I2CxRXIF and RXBF bits. I2CxCNT is
decremented.
9. If I2CxCNT! = 0, master hardware clocks out
ACKDT as ACK value to slave. If I2CxCNT = 0,
master hardware clocks out ACKCNT as ACK
value to slave. It is up to the user to set the val-
ues of ACKDT and ACKCNT correctly. If the
user does not set ACKCNT to ‘1’, the master
hardware will never send a NACK when
I2CxCNT becomes zero. Since a NACK was not
seen on the bus, the master hardware will also
not assert a Stop condition.
10. Go to step 4.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 554


FIGURE 33-20: I2C MASTER, 7-BIT ADDRESS, RECEPTION
 2017 Microchip Technology Inc.

Rev. 10-000 301A


11/2/201 6

RSEN = 0;
Slave Sends ACK Master sends
stop condition
R/W = 1 from I2CxADB1[0] Master sends ACK Master sends NACK
S
Slave Transmitting Data Slave Transmitting Data P
SDA A7 A6 A5 A4 A3 A2 A1 D7 D6 D5 D4 D3 D2 D1 D0 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

Slave Address copied


from I2CxADB1[7:1]

Software sets START


to start transmission Hardware clears MMA
Preliminary

MMA

MDR
PCIF is set
SCIF is set

PIC18(L)F25/26K83
ACKDT

Master’s ACK NACK on CNT= 0


copied from ACKDT NACKIF is set

I2CxCNT 0x02 0x02 0x01 0x00

CNTIF is set

RXBF
DS40001943A-page 555

I2CxRXIF is set I2CxRXF is set


Software reads data from I2CxRXB Software reads I2CxRXB
PIC18(L)F25/26K83
33.5.11 MASTER TRANSMISSION IN 10-BIT
ADDRESSING MODE
This section describes the sequence of events for the
I2C module configured as an I2C master in 10-bit
Addressing mode and is transmitting data. Figure 33-
21 is used as a visual reference for this description
1. If ABD = 0; i.e., Address buffers are enabled
Master software loads number of bytes to be
transmitted in one sequence in I2CxCNT, high address
byte of slave address in I2CxADB1 with R/W = 0, low
address byte in I2CxADB0 and the first byte of data in
I2CxTXB. Master software has to set the Start (S) bit to
initiate communication.
If ABD = 1; i.e., Address buffers are disabled
Master software loads the number of bytes to be
transmitted in one sequence in I2CxCNT and the high
address byte of the slave address with R/W = 0 into the
I2CxTXB register. Writing to the I2CxTXB will assert
the start condition on the bus and sets the S bit.
Software writes to the S bit are ignored in this case.
2. Master hardware waits for BFRE bit to be set;
then shifts out the start and high address and
waits for acknowledge.
3. If NACK, master hardware sends Stop.
4. If ABD = 0; i.e., Address buffer are enabled
If ACK, master hardware sends the low address byte
from I2CxADB0.
If ABD = 1; i.e., Address buffer are disabled
If ACK, master hardware sets TXIF and MDR bits and
the software has to write the low address byte into
I2CxTXB. Writing to I2CxTXB sends the low address
on the bus.
5. If TXBE = 1 and I2CxCNT! = 0, I2CxTXIF and
MDR bits are set. Clock is stretched on 8th fall-
ing SCL edge till master software writes next
data byte to I2CxTXB.
6. Master hardware sends ninth SCL pulse for
ACK from slave and loads the shift register from
I2CxTXB. I2CxCNT is decremented.
7. If slave sends a NACK, master hardware sends
Stop and ends transmission.
8. If slave sends an ACK, master hardware outputs
data in the shift register on SDA. I2CxCNT value
is checked on the 8th falling SCL edge. If
I2CxCNT = 0; master hardware sends 9th SCL
pulse for ACK and CNTIF is set.
9. If I2CxCNT != 0; go to step 5.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 556


FIGURE 33-21: I2C MASTER, 10-BIT ADDRESS, TRANSMISSION WITH STOP
 2017 Microchip Technology Inc.

Rev. 10-000 302A


11/2/201 6

From Slave to Master

R/W = 0 from I2CxADB1[0]


S Transmitting Data P
SDA
1 1 1 1 0 A9 A8 ACK A7 A6 A5 A4 A3 A2 A1 A0 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK

High Address copied Low Address copied


from I2CxADB1[7:1] from I2CxADB0[7:0]

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

MMA
Preliminary

Software sets START to


start transmission Hardware clears MMA
SCIF is set PCIF is set

PIC18(L)F25/26K83
ACKSTAT

I2CxCNT 0x01 0x01 0x00 0x00

CNTIF is set
I2CxCNT = 0
Master sends Stop

TXBE
DS40001943A-page 557

I2CxTXIF NOT set I2CxTXIF NOT set


Before Start, software
loads one byte in I2CxTXB Data byte loaded No new TX data on I2CxCNT = 0
from I2CxTXB to shifter (shifter loaded 8’b1111 1111)
PIC18(L)F25/26K83
33.5.12 MASTER RECEPTION IN 10-BIT 21. If I2CxCNT! = 0, master hardware clocks out
ADDRESSING MODE ACKDT as ACK value to slave.
This section describes the sequence of events for the 22. If I2CxCNT = 0, master hardware clocks out
I2C module configured as an I2C master in 10-bit ACKCNT as ACK value to slave
Addressing mode and is receiving data. Figure 33-22 is 23. Go to step 4.
used as a visual reference for this description.
1. Master software loads high address byte in
I2CxADB1 and low address byte in I2CxADB0
for write and sets restart enable (RSTEN) bit.
2. Master software sets START bit.
3. Master hardware waits for BFRE bit to be set;
then shifts out start, high address and waits for
acknowledge.
4. If slave responds with a NACK, master hard-
ware sends Stop and ends communication.
5. If slave responds with ACK, master hardware
shifts out the low address.
6. If the transmit buffer empty flag (TXBE) is set
and I2CxCNT! = 0, the clock is stretched on 8th
falling SCL edge. Allowing master software
writes next data to I2CxTXB.
7. Master hardware sends 9th SCL pulse for ACK
from slave and loads the shift register from
I2CxTXB.
8. If slave responds with a NACK, master hard-
ware sends Stop and ends communication.
9. If slave responds with an ACK and
I2CxCNT = 0, master hardware sets MDR bit,
go to Step 11.
10. If slave responds with an ACK and
I2CxCNT! = 0, master hardware outputs data in
shift register on SDA and waits for ACK from
slave. Go to step 4.
11. Master software loads I2CxADB0 for read, and
I2CCNT with the number of bytes to be received
in the current transaction.
12. Master software sets Start bit.
13. Master hardware shifts out Restart and high
address with R/W = 1.
14. Master sends out 9th SCL pulse for ACK from
slave.
15. If slave responds with a NACK, master hard-
ware sends Stop or sets MDR (RSEN bit).
16. If slave responds with an ACK, master hardware
shifts 7 bits of data into the shift register from the
slave.
17. If the receive buffer full flag (RXBF) is set, clock
is stretched on seventh falling SCL edge.
18. Master software can clear clock stretching by
reading the previous data in the receive buffer.
19. Master hardware shifts 8th bit of data into the
shift register from slave and loads it into
I2CxRXB.
20. Master software reads data from I2CxRXB reg-
ister.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 558


FIGURE 33-22: I2C MASTER, 10-BIT ADDRESS, RECEPTION (USING RSTEN BIT)
 2017 Microchip Technology Inc.

Rev. 10-000 303A


11/2/201 6

Master s ends Master s ends


Master s ends
restart event stop c ondition
start event Master s ends
NACK
R/W = 0 from I2CxADB1[0] R/W = 1 from I2CxADB1[0]
S Sr ACK = 1 P

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 D7 D6 D5 D4 D3 D2 D1 D0

Low Address c opied High Addres s copied Receive data loaded from
High Addres s copied
from I2CxADB0[7:0] from I2CxADB1[7:1] RX shift reg to I2CxRXB
from I2CxADB1[7:1]

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

Software sets ST ART to Software sets ST ART


start trans mission MMA remains set Hardware clears MMA
Preliminary

MMA

MDR
MDR cleared by
setting START

SCIF is set RSIF is set PCIF is set

PIC18(L)F25/26K83
ACKSTAT

Software sets RSEN Software clears RSEN


before setting START before setting START

RSEN

I2CxCN T 0x00 0x00 0x01 0x01 0x00


DS40001943A-page 559

Software writes
I2CxCN T before CNTIF is set
Software sends no write data
sett ing START I2CxCNT = 0
Master sends Stop

RXBF

I2CxRXIF is set
PIC18(L)F25/26K83
33.6 I2C Multi-Master Mode In master operation, the SDA line must be monitored
for arbitration to see if the signal level is the expected
In Multi-Master mode, the bus-free (BFRE) bit allows output level. This check is performed by hardware with
the master to determine when the bus is free. Control the result placed in the BCLIF bit. MSTACK is cleared
of the I2C bus may be taken when the BFRE bit of the when BCLIF is set. The states where arbitration can be
I2CxSTAT0 register is set. Interrupt generation on the lost are:
detection of a slave address match, ADRIE; causes a
clock stretch and allows user software to respond to the • Address Transfer
master being addressed as a slave device. The Slave • Data Transfer (master write)
Active (SMA) bit is set for a matching received slave • Repeated Start Condition
address. • Acknowledge Condition

Clock arbitration occurs when the master, during any 33.6.1 MULTI-MASTER MODE BUS
receive, transmit or Restart/Stop condition, releases COLLISION
the SCL pin (SCL allowed to float high). When the SCL
pin is allowed to float high, the SCL line is monitored to Multi-Master mode support is achieved by bus arbitra-
see if the pin is actually sampled high. tion. When the master outputs address/data bits onto
the SDA pin, arbitration takes place when the master
outputs a ‘1’ on SDA, by letting SDA float high and
Note: In this mode, the slave hardware has pri- another master asserts a ‘0’. When the SCL pin floats
ority over the master hardware. Master high, data is stable. If the expected data on SDA is a ‘1’
mode communication can only be initiated and the data sampled on the SDA pin is ‘0’, then a bus
when the SMA = 0. collision has taken place. The master will set the Bus
Collision Interrupt Flag, BCLIF and reset the I2C bus to
its Idle state. Refer to Figure 33-23 for a detailed timing
diagram.

FIGURE 33-23: BUS COLLISION TIMING FOR TRANSMIT AND ACKNOWLEDGE


Rev. 10-000 311A
8/16/201 6

Data changes Sample SDA. While SCL is high,


while SCL = 0 SDA line pulled low data doesn’t match what is driven
by another source by the master.
Bus collision has occurred.
SDA released
by master

SDA

SCL Set bus collision


interrupt (BCLIF)

BCLIF

If transmission was in progress when the bus collision


occurred, the SDA and SCL lines are released. If a
Repeated Start, Stop or Acknowledge was in progress
when the bus collision occurred, the action is aborted;
the SDA and SCL lines are released. The BCLIF con-
dition must be cleared by software to allow an ACK to
be shifted out on the bus again, until then the module
will always respond with a NACK. Refer to Figure 33-
24 for a detailed timing diagram of a transaction in
Multi-Master mode.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 560


FIGURE 33-24: I2C MULTI-MASTER, 7-BIT ADDRESS, WRITE (ADRIE = 1, WRIE = 0)
 2017 Microchip Technology Inc.

Rev. 10-000 304A


11/2/201 6

Other Master
Add ress copied Another Mas ter clocks ACK sends stop
from I2CxA DB1 and begin sending data condition

S Received Data Received Data P


SDA
A7 A6 A5 A4 A3 A2 A1 ACK D7 D6 D5 D4 D3 D2 D1 D0 ACK 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

If RX shift reg ister matches I2CxA DR0:


- Received Address a nd R/W
copied to I2CxA DB0[7:0]

CSTR

ADRIF is set CSTR cleared by so ftware


User m us t use ADRIE bit to
inte rrupt on slave addres s m atch
SMA

MMA
Preliminary

Softwa re sets START


Master loses arbitration of a ddress.
BCLIF is s et, hardw are clears MMA
Continues to clock in slave addre ss

ACKDT

ACKDT clear ed by software

PIC18(L)F25/26K83
User m us t clear BCLIF to se nd ACK

I2CxCNT 0x07 0x02 0x01 0x00

Softwa re u pdates I2CxCNT


for Slave r ece ive message CNTIF is set

RXBF

I2CxRXIF is se t I2CxRXIF is se t
Softwa re r eads d ata from I2CxRXB Softwa re r eads I2CxRXB
DS40001943A-page 561
PIC18(L)F25/26K83
33.7 Register Definitions: I2C Control
This section defines all the registers associated with
the control and status of the I2C bus.

REGISTER 33-1: I2CxCON0: I2C CONTROL REGISTER 0


R/W-0 R/W-0 R/W/HC/HS-0 R/C/HS/HC-0 R-0 R/W-0 R/W-0 R/W-0
EN(1,2) RSEN S CSTR(3) MDR MODE <2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7 EN: I2C Module Enable bit


1 = Enables the I2C module(1,2)
0 = Disables the I2C module.

bit 6 RSEN: Restart Enable bit (Only mode<2:0> = 1xx)


1 = When (I2CCNT = 0 or ACKSTAT = 1), on 9th falling SCL sets MDR.
0 = When (I2CCNT = 0 or ACKSTAT = 1), on 9th falling SCL; master shifts out a Stop condition
bit 5 S: Master Start/Restart bit (Only Mode<2:0> = 1xx)
When MMA = 0
1 = Set by user set of START bit or write to I2CTXB, waits for BFRE = 1 to begin with a Start
0 = Cleared by hardware after sending Start
When (MMA = 1 & MDR = 1 & pause_for_Restart)
1 = Set by user set of START bit or write to I2CTXB, resumes communication with a Restart
0 = Cleared by hardware after sending Restart
Else - Writes to I2CTXB or set has no effect on Start bit
bit 4 CSTR: Slave Clock Stretching bit (3)
1 = Clock is held low (clock stretching)
0 = Enable clocking, SCL control is released

SMA = 1 and RXBF = 1(6)


- Set by hardware on 7th falling SCL edge
- User must read byte I2CRXB to release SCL
SMA = 1 and TXBE = 1 and I2CCNT!= 0
- Set by hardware on 8th falling SCL edge
- User must write byte to I2CTXB to release SCL
when ADRIE is set (4)
- Set by hardware on 8th falling SCL edge of matching received address
- User must clear CSTR to release SCL
SMA = 1 & WRIE = 1
- Set by hardware on 8th falling SCL edge of received data byte
- User must clear CSTR to release SCL
SMA = 1 & ACKTIE = 1
- Set by hardware on 9th falling SCL edge
- User must clear CSTR to release SCL

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 562


PIC18(L)F25/26K83
bit 3 MDR: Master Data Request (Master pause)
1 = Master state mechine pauses until data is read/written to proceed (SCL is output held low)
0 = Master clocking of data is enabled.

MMA = 1 & RXBF = 1


pause_for_rx - Set by hardware on 7th falling SCL edge
- User must read from I2CRXB to release SCL
MMA = 1 & TXBE = 1 & I2CCNT!= 0
pause_for_tx - Set by hardware on 8th falling SCL edge
- User must write to I2CTXB to release SCL
ADB = 1
- I2CCNT is ignored for the high and low address in 10-bit mode
pause_for_restart - Set by hardware on 9th falling SCL edge
RSEN = 1 & MMA = 1 && I2CCNT = 0 || ACKSTAT = 1
- User must set START or write to I2CTXB to release SCL and shift Restart onto bus
bit 2-0 MODE<2:0>: I2C Mode Select bits
111 = I2C Muti-Master mode (SMBus 2.0 Host), (5)
Works as both mode<2:0> = 001 and mode<2:0> = 100
110 = I2C Muti-Master mode (SMBus 2.0 Host), (5)
Works as both mode<2:0> = 000 and mode<2:0> = 100
101 = I2C Master mode, 10-bit address
100 = I2C Master mode, 7-bit address
011 = I2C Slave mode, one 10-bit address with masking
010 = I2C Slave mode, two 10-bit address
001 = I2C Slave mode, two 7-bit address with masking
000 = I2C Slave mode, four 7-bit address
Note 1: SDA and SCL pins must be configured for open-drain with internal or external pull-up
2: SDA and SCL pins must be selected as both input and output in PPS
3: CSTR can be set by more than one hardware source, all sources must be addressed by user software before the SCL line
is released. CSTR is a module Status bit, and does not show the true bus state.
4: SMA is set on the same SCL edge as CSTR for a matching received address
5: In this mode, ADRIE should be set, this allows an interrupt to clear the BCLIF condition and allow the ACK of matching
address.
6: In 10-bit Slave mode, when ADB = 1, CSTR will set when the high address has not been read out of I2CxRXB before the
low address is shifted in.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 563


PIC18(L)F25/26K83
REGISTER 33-2: I2CxCON1: I2C CONTROL REGISTER 1
R/W-0 R/W-0 R-0 R-0 U-0 R/W/HS-0 R/W/HS-0 R/W-0
ACKCNT(2) ACKDT (1,2)
ACKSTAT ACKT — RXO TXU CSD
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7 ACKCNT: Acknowledge End of Count bit(2)


Acknowledge value transmitted after received data, when I2CCNT = 0
1 = Not Acknowledge (copied to SDA output)
0 = Acknowledge (copied to SDA output)
bit 6 ACKDT: Acknowledge Data bit(1,2)
Acknowledge value transmitted after matching address
Acknowledge value transmitted after received data, when I2CCNT! = 0
1 = Not Acknowledge (copied to SDA output)
0 = Acknowledge (copied to SDA output)
bit 5 ACKSTAT: Acknowledge Status bit (Transmission only)
1 = Acknowledge was not received for most recent transmission
0 = Acknowledge was received for most recent transmission
bit 4 ACKT: Acknowledge Time Status bit
1 = Indicates the I2C bus is in an Acknowledge sequence, set on 8th falling edge of SCL clock
0 = Not in Acknowledge sequence, cleared on 9th rising edge of SCL
bit 3 Unimplemented: Read as 1’b0
bit 2 RXO: Receive Overflow Status bit (MODE<2:0> = 0xx & 11x)
This bit can only be set when CSD= 1
1 = Set when SMA = 1, and a master clocks in data when RXBF = 1
0 = No slave overflow condition
bit 1 TXU: Transmit Underflow Status bit (MODE<2:0> = 0xx & 11x)
This bit can only be set when CSTRDIS = 1
1 = Set when SMA = 1, and a master clocks out data when TXBE = 1
0 = No slave underflow condition
bit 0 CSD: Clock Stretching Disable bit (MODE<2:0> = 0xx & 11x)
1 = When SMA = 1, the CSTR bit will never be set
0 = Slave clock stretching proceeds normally
Note 1: Software writes to ACKDT bit must be followed by a minimum SDA data-setup time before clearing CSTR.
2: NACK may still be generated by I2C hardware when bus errors are indicated in the I2CxSTAT1 or
I2CxERR registers.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 564


PIC18(L)F25/26K83
REGISTER 33-3: I2CxCON2: I2C CONTROL REGISTER 2
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
ACNT GCEN FME ADB SDAHT<1:0> BFRET<1:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7 ACNT: Auto-Load I2C Count Register Enable bit


1 = The first received or transmitted byte after the address, is automatically loaded into the I2CCNT reg-
ister. The I2CCNT register is loaded at the same time as the value is moved to/from the shifter.
ACKDT is used to determine the ACK/NACK value for the address bytes and first data byte of a
received message. This prevents a I2CCNT<NACK> from being sent for the byte that would
update the I2CCNT register.
0 = Auto-load of I2CCNT disabled
bit 6 GCEN: General Call Address Enable bit (MODE<2:0> = 00x & 11x)
1 = General call address, 0x00, causes address match event
0 = General call address disabled
bit 5 FME: Fast Mode Enable bit
1 = SCL is sampled high only once before driving SCL low. (FSCL = FCLK/4)
0 = SCL is sampled high twice before driving SCL low. (FSCL = FCLK/5)
bit 4 ADB: Address Data Buffer Disable bit
1 = Received address data is loaded into both the I2CADB and I2CRXB
Transmitted address data is loaded from the I2CTXB
0 = Received address data is loaded only into the I2CADB
Transmitted address data is loaded from the I2CADB0/1 registers.
bit 3-2 SDAHT<1:0>: SDA Hold Time Selection bits
11 = Reserved
10 = Minimum of 30 ns hold time on SDA after the falling edge of SCL
01 = Minimum of 100 ns hold time on SDA after the falling edge of SCL
00 = Minimum of 300 ns hold time on SDA after the falling edge of SCL
bit 1-0 BFRET<1:0>: Bus Free Time Selection bits
11 = 64 I2C Clock pulses
10 = 32 I2C Clock pulses
01 = 16 I2C Clock pulses
00 = 8 I2C Clock pulses

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 565


PIC18(L)F25/26K83
REGISTER 33-4: I2CxCLK: I2C CLOCK SELECTION REGISTER
U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — CLK<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7-4 Unimplemented: Read as ‘0’


bit 3-0 CLK<3:0>: I2C Clock Selection Bits
CLK<3:0> I2Cx Clock Selection
1010-1111 Reserved
1001 SMT1 overflow
1000 TMR6 post scaled output
0111 TMR4 post scaled output
0110 TMR2 post scaled output
0101 TMR0 overflow
0100 Clock Reference output
0011 MFINTOSC (500 kHz)
0010 HFINTOSC
0001 FOSC
0000 FOSC/4

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 566


PIC18(L)F25/26K83
REGISTER 33-5: I2CxBTO: I2C BUS TIMEOUT SELECTION REGISTER
U-0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — — BTO<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7-3 Unimplemented: Read as ‘0’


bit 2-0 BTO<2:0>: I2C Bus Timeout Selection bits
BTO<2:0> I2Cx Bus Timeout Selection
111 CLC4OUT
110 CLC3OUT
101 CLC2OUT
100 CLC1OUT
011 TMR6 post scaled output
010 TMR4 post scaled output
001 TMR2 post scaled output
000 Reserved

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 567


PIC18(L)F25/26K83
REGISTER 33-6: I2CxSTAT0: I2C STATUS REGISTER 0
R-0 R-0 R-0 R-0 R-0 U-0 U-0 U-0
BFRE(3) SMA MMA R(1, 2) D — — —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7 BFRE: Bus Free Status bit(3)


1 = Indicates the I2C bus is Idle
Both SCL and SDA have been high for time-out selected by I2CCON2<BFRET<1:0>> bits.
I2CCLK must select a valid clock source for this bit to function.
0 = Bus not Idle (When no I2CCLK is selected, this bit remains clear)
bit 6 SMA: Slave Module Active Status bit
1 = Set after the 8th falling SCL edge of a received matching 7-bit slave address
Set after the 8th falling SCL edge of a received matching 10-bit slave low address
Set after the 8th falling SCL edge of a received matching 10-bit slave high w/ read address, only
after a previous matching high and low w/ write.
0 = Cleared by any Restart/Stop detected on the bus
Cleared by BTOIF and BCLIF conditions
bit 5 MMA: Master Module Active Status bit
1 = Master Mode state machine is active
Set when master state machine asserts a Start on bus
0 = Master state machine is Idle
Cleared when BCLIF is set
Cleared when Stop is shifted out by master.
Cleared for BTOIF condition, after the master successfully shifts out a Stop condition.
bit 4 R: Read Information bit (1, 2)
1 = Indicates the last matching received (high) address was a Read request
0 = Indicates the last matching received (high) address was a Write
bit 3 D: Data bit
1 = Indicates the last byte received or transmitted was data
0 = Indicates the last byte received or transmitted was an address
bit 2-0 Unimplemented: Read as 1’b0
Note 1: This bit holds the R bit information following the last received address match. Addresses transmitted by
the master or appearing on the bus without a match do not affect this bit.
2: Clock requests and input from I2CxCLK register are disabled in Slave modes.
3: Software must use the EN bit to force master or slave hardware to Idle.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 568


PIC18(L)F25/26K83
REGISTER 33-7: I2CxSTAT1: I2C STATUS REGISTER 1
R/W/HS-0 U-0 R-1 U-0 R/W/HS-0 R/S-0/0 U-0 R-0
TXWE(2) — TXBE(1, 3) — RXRE(2) CLRBF — RXBF(1,3)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7 TXWE: Transmit Write Error Status bit (2)


1 = A new byte of data was written to I2CTXB when it was full (Must be cleared by software)
0 = No transmit write error
bit 6 Unimplemented: Read as ‘0’
bit 5 TXBE: Transmit Buffer Empty Status bit
1 = I2CTXB is empty (Cleared by writing the I2CTXB register)
0 = I2CTXB is full
bit 4 Unimplemented: Read as ‘0’
bit 3 RXRE: Receive Read Error Status bit
1 = A byte of data was read from I2CxRXB when it was empty. (Must be cleared by software)
0 = No receive overflow
bit 2 CLRBF: Clear Buffer bit
Setting this bit clears/empties the receive and transmit buffers, causing reset of RXBF and TXBE.
Setting this bit clears the RXIF and TXIF interrupt flags.
This bit is set-only special function, and always reads ‘0’
bit 1 Unimplemented: Read as ‘0’
bit 0 RXBF: Receive Buffer Full Status bit
1 = I2CRXB has received new data (Cleared by reading the I2CRXB register)
0 = I2CRXB is empty
Note 1: The bits are held in Reset when I2CEN = 0.
2: Will cause NACK to be sent for slave address and master/slave data read bytes.
3: Used as triggers for DMA operation.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 569


PIC18(L)F25/26K83
REGISTER 33-8: I2CxERR: I2C ERROR REGISTER
U-0 R/W/HS-0 R/W/HS-0 R/W/HS-0 U-0 R/W-0 R/W-0 R/W-0
— BTOIF(1,2) BCLIF (1)
NACKIF (1)
— BTOIE BCLIE NACKIE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7 Unimplemented: Read as ‘0’


bit 6 BTOIF: Bus Time-Out Interrupt Flag bit(1,2)
1 = Bus Timeout occurred
0 = No bus timeout
bit 5 BCLIF: Bus Collision Detect Interrupt Flag bit(1)
1 = Bus collision detected (On the rising edge of SCL input, SDA output is high and input is sampled
low)
Slave and Master mode the module immediately goes Idle
Multi-Master mode attempts to match slave addresses, and/or goes Idle
0 = No bus collision detected
bit 4 NACKIF: NACK Detect Interrupt Flag bit(1)
1 = When (SMA = 1 || MMA = 1) and a NACK is detected on the bus
NACKIF is also set when any of the TXWRE, RXRDE, TXUF, RXOVR bits are set.
0 = No NACK/Error detected
NACKIF is not set by the NACK send for non-matching slave addresses
bit 3 Unimplemented: Read as ‘0’
bit 2 BTOIE: Bus Time-Out Interrupt Enable bit
1 = Enable interrupt on bus time out
0 = Bus Tim-out not enabled
bit 1 BCLIE: Bus Collision Detect Interrupt Enable bit
1 = Enable interrupt on bus collision
0 = Bus collision interrupts are disabled
bit 0 NACKIE: NACK Detect Interrupt Enable bit
1 = Enable interrupt on NACKIF
0 = NACKIF interrupt is disabled
Note 1: Enabled error interrupt flags are OR’d to produce the PIRx<I2CEIF> bit.
2: User software must select the Bus Time-out Source in the I2CBTO register.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 570


PIC18(L)F25/26K83
REGISTER 33-9: I2CxCNT: I2C BYTE COUNT REGISTER
R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
CNT<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7-0 CNT<7:0>: I2C Byte Count Register bits


If receiving data,
decremented 8th SCL edge, when a new data byte is loaded into I2CxRXB
If transmitting data,
decremented 9th SCL edge, when a new data byte is moved from I2CxTXB
CNTIF flag is set on 9th falling SCL edge, when I2CxCNT = 0. (Byte count cannot decrement past ‘0’)
Note 1: It is recommended to write this register only when the module is IDLE (MMA = 0, SMA = 0) or when clock
stretching (CSTR = 1 || MDR = 1).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 571


PIC18(L)F25/26K83
REGISTER 33-10: I2CxPIR: I2CxIF INTERRUPT FLAG REGISTER
R/W/HS-0 R/W/HS-0 U-0 R/W/HS-0 R/W/HS-0 R/W/HS-0 R/W/HS-0 R/W/HS-0
CNTIF ACKTIF — WRIF ADRIF PCIF RSCIF SCIF
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7 CNTIF: Byte Count Interrupt Flag bit


1 = When I2CCNT = 0, set by the 9th falling edge of SCL.
0 = I2CCNT condition has not occurred.
bit 6 ACKTIF: Acknowledge Status Time Interrupt Flag bit (2) (MODE<2:0> = 0xx OR 11x)
1 = Set by the 9th falling edge of SCL for any byte when addressed as a slave
0 = Acknowledge condition not detected.
bit 5 Unimplemented: Read as ‘0’
bit 4 WRIF: Data Write Interrupt Flag bit (MODE<2:0> = 0xx OR 11x)
1 = Set the 8th falling edge of SCL for a received data byte.
0 = Data Write condition not detected
bit 3 ADRIF: Address Interrupt Flag bit (MODE<2:0> = 0xx OR 11x)
1 = Set the 8th falling edge of SCL for a matching received (high/low) address byte
0 = Address condition not detected
bit 2 PCIF: Stop Condition Interrupt Flag
1 = Set on detection of Stop condition
0 = No Stop condition detected
bit 1 RSCIF: Restart Condition Interrupt Flag
1 = Set on detection of Restart condition
0 = No Restart condition detected
bit 0 SCIF: Start Condition Interrupt Flag
1 = Set on detection of Start condition
0 = No Start condition detected
Note 1: Enabled interrupt flags are OR’d to produce the PIRx<I2CxIF> bit.
2: ACKTIF is not set by a matching, 10-bit, high address byte with the R/W bit clear. It is only set after the
matching low address byte is shifted in.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 572


PIC18(L)F25/26K83
REGISTER 33-11: I2CxPIE: I2CxIE INTERRUPT AND HOLD ENABLE REGISTER
R/W-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
CNTIE ACKTIE — WRIE ADRIE PCIE RSCIE SCIE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7 CNTIE: Byte Count Interrupt Enable bit


1 = When CNTIF is set
0 = Byte count interrupts are disabled
bit 6 ACKTIE: Acknowledge Interrupt and Hold Enable bit
1 = When ACKTIF is set
If ACK is generated, CSTR is also set.
If NACK is generated, CSTR is unchanged
0 = Acknowledge holding and interrupt is disabled
bit 5 Unimplemented: Read as ‘0’
bit 4 WRIE: Data Write Interrupt and Hold Enable bit
1 = When WRIF is set; CSTR is set
0 = Data Write holding and interrupt is disabled
bit 3 ADRIE: Address Interrupt and Hold Enable bit
1 = When ADRIF is set; CSTR is set
0 = Address holding and interrupt is disabled
bit 2 PCIE: Stop Condition Interrupt Enable bit
1 = Enable interrupt on detection of Stop condition
0 = Stop detection interrupts are disabled
bit 1 RSCIE: Restart Condition Interrupt Enable bit
1 = Enable interrupt on detection of Restart condition
0 = Start detection interrupts are disabled
bit 0 SCIE: Start Condition Interrupt Enable bit
1 = Enable interrupt on detection of Start condition
0 = Start detection interrupts are disabled
Note 1: Enabled interrupt flags are OR’d to produce the PIRx<I2CxIF> bit.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 573


PIC18(L)F25/26K83
REGISTER 33-12: I2CxADR0: I2C ADDRESS 0 REGISTER
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
ADR7 ADR6 ADR5 ADR4 ADR3 ADR2 ADR1 ADR0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7-0 ADR<7-0>: Address 1 bits


MODE<2:0> = 00x | 11x - 7-bit Slave/Multi-Master Modes
ADR0<7:1>:7-bit Slave Address
ADR0<0>: Unused in this mode; bit state is a “don’t care”
MODE<2:0> = 01x - 10-bit Slave Modes
ADR0<7:0>:Eight Least Significant bits of 10-bit address 0

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 574


PIC18(L)F25/26K83
REGISTER 33-13: I2CxADR1: I2C ADDRESS 1 REGISTER
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 U-0
ADR14 ADR13 ADR12 ADR11 ADR10 ADR9 ADR8 —
bit 7 bit 0
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 U-0
ADR7 ADR6 ADR5 ADR4 ADR3 ADR2 ADR1 —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7-1 ADR[7-1]: Address or Divider bits


MODE<2:0> = 000 | 110 - 7-bit Slave/Multi-Master Modes
ADR<7:1>:7-bit Slave Address
ADR<0>: Unused in this mode; bit state is a “don’t care”
MODE<2:0> = 001 | 111 - 7-bit Slave/Multi-Master modes w/Masking
MSK0<7:1>:7-bit Slave Address
MSK0<0>: Unused in this mode; bit state is a “don’t care”
MODE<2:0> = 01x - 10-bit Slave Modes
ADR<14-10>:Bit pattern sent by master is fixed by I2C specification and must be equal to
‘11110’. However, these bit values are compared by hardware to the received
data to determine a match. It is up to the user to set these bits as ‘11110’.
ADR<9-8>:Two Most Significant bits of 10-bit address
bit 0 Unimplemented: Read as ‘0’.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 575


PIC18(L)F25/26K83
REGISTER 33-14: I2CxADR2: I2C ADDRESS 2 REGISTER
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
ADR7 ADR6 ADR5 ADR4 ADR3 ADR2 ADR1 ADR0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7-0 ADR<7-0>: Address 2 bits


MODE<2:0> = 000 | 110 - 7-bit Slave/Multi-Master Modes
ADR<7:1>:7-bit Slave Address
MODE<2:0> = 001 | 111 - 7-bit Slave/Multi-Master Modes with Masking
ADR<7:1>:7-bit Slave Address
MODE<2:0> = 010 - 10-Bit Slave Mode
ADR<7:0>:Eight Least Significant bits of second 10-bit address
MODE<2:0> = 011 - 10-Bit Slave Mode with Masking
MSK0<7-0>:The received address byte is masked, then compared to I2CxADR0

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 576


PIC18(L)F25/26K83
REGISTER 33-15: I2CXADR3: I2C ADDRESS 3 REGISTER
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 U-0
ADR14 ADR13 ADR12 ADR11 ADR10 ADR9 ADR8 —
bit 15 bit 8
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 U-0
ADR7 ADR6 ADR5 ADR4 ADR3 ADR2 ADR1 —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7-0 ADR<7-0>: Address 3 bits


MODE<2:0> = 000 | 110 - 7-bit Slave/Multi-Master Modes
ADR<7:1>:7-bit Slave Address
ADR<0>: Unused in this mode; bit state is a “don’t care”
MODE<2:0> = 001 | 111 - 7-bit Slave/Multi-Master Mode with Masking
MSK1<7:1>:7-bit Slave Address
MSK1<0>: Unused in this mode; bit state is a “don’t care”
MODE<2:0> = 010 - 10-Bit Slave Mode
ADR<14-10>:Bit pattern sent by master is fixed by I2C specification and must be equal to
‘11110’. However, these bit values are compared by hardware to the received
data to determine a match. It is up to the user to set these bits as ‘11110’
ADR<9-8>:Two Most Significant bits of 10-bit address
MODE<2:0> = 011 - 10-Bit Slave Mode with Masking
MSK0<14-8>:The received address byte, bit n, is compared to I2CxADR0 to detect I2C
address match

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 577


PIC18(L)F25/26K83
REGISTER 33-16: I2CxADB0: I2C ADDRESS DATA BUFFER 0 REGISTER(1)
R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
ADB7 ADB6 ADB5 ADB4 ADB3 ADB2 ADB1 ADB0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7-0 MODE<2:0> = 00x


ADB<7:1>: Address Data byte
Received matching 7-bit slave address data
R/W: Read/not-Write Data bit
Received read/write value from 7-bit address byte
MODE<2:0> = 01x
ADB<7:0>: Address Data byte
Received matching lower eight bits of 10-bit slave address data
MODE<2:0> = 100
Unused in this mode; bit state is a “don’t care”
MODE<2:0> = 101
ADB<7:0>: Low Address Data byte
Low 10-bit address value copied to transmit shift register
MODE<2:0> = 11x
ADB<7:1>: Address Data byte
Received matching 7-bit slave address
R/W: Read/not-Write Data bit
Received read/write value received 7-bit slave address byte
Note 1: This register is read only except in master, 10-bit Address mode (MODE<2:0> = 101).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 578


PIC18(L)F25/26K83
REGISTER 33-17: I2CxADB1: I2C ADDRESS DATA BUFFER 1 REGISTER(1)
R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
ADB7 ADB6 ADB5 ADB4 ADB3 ADB2 ADB1 ADB0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS = Hardware set HC = Hardware clear

bit 7-0 MODE<2:0> = 00x


Unused in this mode; bit state is a “don’t care”
MODE<2:0> = 01x
ADB<7:1>: 10-bit Address High byte
Received matching 10-bit high address data
R/W: Read/not-Write Data bit
Received read/write value from matching 10-bit high address
MODE<2:0> = 100
ADB<7:1>: Address Data byte
7-bit address value copied to transmit shift register
R/W: Read/not-Write Data bit
Read/write value copied to transmit shift register
Master hardware uses this bit to produce read versus write operations.
MODE<2:0> = 101
ADB<7:1>: 10-bit Address High Data byte
10-bit high address value copied to transmit shift register
R/W: Read/not-Write Data bit
Read/write value copied to transmit shift register
Master hardware uses this bit to produce read versus write operations.
MODE<2:0> = 11x
ADB<7:1>: Address Data byte
7-bit address value copied to transmit shift register
R/W: Read/not-Write Data bit
Read/write value copied to transmit shift register
Master hardware uses this bit to produce read versus write operations
Note 1: This register is read only in slave, 7-bit Addressing modes (MODE<2:0> = 0xx)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 579


PIC18(L)F25/26K83
TABLE 33-18: SUMMARY OF REGISTERS FOR I2C 8-BIT MACRO
Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page
I2CxBTO — — — — — BTO<2:0> 567
I2CxCLK — — — — — CLK<2:0> 566
I2CxPIE CNTIE ACKTIE — WRIE ADRIE PCIE RSCIE SCIE 573
I2CxPIR CNTIF ACKTIF — WRIF ADRIF PCIF RSCIF SCIF 572
I2CxERR — BTOIF BCLIF NACKIF — BTOIE BCLIE NACKIE 570
I2CxSTAT0 BFRE SMA MMA R D — — — 568
I2CxSTAT1 TXWE — TXBE — RXRE CLRBF — RXBF 569
I2CxCON0 EN RSEN S CSTR MDR MODE<2:0> 562
I2CxCON1 ACKCNT ACKDT ACKSTAT ACKT — RXOV TXU CSD 564
I2CxCON2 ACNT GCEN FME ADB SDAHT<3:2> BFRET<1:0> 565
I2CxADR0 ADR<7:0> 574
I2CxADR1 ADR<7:1> — 575
I2CxADR2 ADR<7:0> 576
I2CxADR3 ADR<7:1> — 577
I2CxADB0 ADB<7:0> 578
I2CxADB1 ADB<7:0> 579
I2CxCNT CNT<7:0> 571
I2CxRXB RXB<7:0> —
I2CxTXB TXB<7:0> —
Legend: — = unimplemented, read as ‘0’. Shaded cells are unused by the I2C module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 580


PIC18(L)F25/26K83
34.0 CAN MODULE 34.1 Module Overview
This family of devices contain a Controller Area Net- The CAN bus module consists of a protocol engine and
work (CAN) module. The CAN module is fully back- message buffering and control. The CAN protocol
wards-compatible with the CAN and ECAN modules engine automatically handles all functions for receiving
found in older PIC18 devices. and transmitting messages on the CAN bus. Messages
The Controller Area Network (CAN) module is a serial are transmitted by first loading the appropriate data
interface which is useful for communicating with other registers. Status and errors can be checked by reading
peripherals or microcontroller devices. This interface, the appropriate registers. Any message detected on
or protocol, was designed to allow communications the CAN bus is checked for errors and then matched
within noisy environments. against filters to see if it should be received and stored
The CAN module is a communication controller, imple- in one of the two receive registers.
menting the CAN 2.0A or B protocol as defined in the The CAN module supports the following frame types:
BOSCH specification. The module will support CAN 1.2,
CAN 2.0A, CAN 2.0B Passive and CAN 2.0B Active • Standard Data Frame
versions of the protocol. The module implementation is • Extended Data Frame
a full CAN system; however, the CAN specification is not • Remote Frame
covered within this data sheet. Refer to the BOSCH CAN • Error Frame
specification for further details. • Overload Frame Reception
The module features are as follows: The CANRX input pin is selected with the CANRXPPS
• Implementation of the CAN protocol, CAN 1.2, register. The CANTX output pin is selected with each
CAN 2.0A and CAN 2.0B pin’s RxyPPS register.
• DeviceNetTM data bytes filter support Note: The CANRX pin defaults to pin RB3, but
• Standard and extended data frames the CANTX has no default location and
• 0-8 bytes data length must be assigned to a pin before CAN
• Programmable bit rate up to 1 Mbit/sec transmissions can occur.
• Fully backward compatible with CAN modules on In Normal mode, the user must ensure that the appropri-
older PIC18 devices ate TRIS bit for CANRX is set and the appropriate TRIS
• Three modes of operation: bit for CANRX is cleared. In addition, the appropriate
- Mode 0 – Legacy mode ANSEL bit for CANRX must be cleared to disable the
- Mode 1 – Enhanced Legacy mode with analog input buffer.
DeviceNet support
Note: Unlike older Microchip devices with CAN
- Mode 2 – FIFO mode with DeviceNet support
functionality, the CAN pins can be
• Support for remote frames with automated handling mapped to pins with analog functionality.
• Double-buffered receiver with two prioritized Ensure that the analog functionality on the
received message storage buffers CANRX pin is disabled, or the CAN mod-
• Six buffers programmable as RX and TX ule will not properly function.
message buffers
• 16 full (standard/extended identifier) acceptance 34.1.1 MODULE FUNCTIONALITY
filters that can be linked to one of four masks
The CAN bus module consists of a protocol engine,
• Two full acceptance filter masks that can be
message buffering and control (see Figure 34-1). The
assigned to any filter
protocol engine can best be understood by defining the
• One full acceptance filter that can be used as either types of data frames to be transmitted and received by
an acceptance filter or acceptance filter mask the module.
• Three dedicated transmit buffers with application
The following sequence illustrates the necessary initial-
specified prioritization and abort capability
ization steps before the CAN module can be used to
• Programmable wake-up functionality with
transmit or receive a message. Steps can be added or
integrated low-pass filter
removed depending on the requirements of the
• Programmable Loopback mode supports self-test application.
operation
1. Use the CANRXPPS and appropriate RxyPPS
• Signaling via interrupt capabilities for all CAN
registers to map the CANRX and CANTX
receiver and transmitter error states
functions to the desired pins of the device.
• Programmable clock source
2. Initialize LAT, TRIS and ANSEL bits for the
• Programmable link to timer module for
selected CANRX and CANTX pins.
time-stamping and network synchronization
3. Ensure that the CAN module is in Configuration
• Low-power Sleep mode
mode.
4. Select CAN Functional mode.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 581


PIC18(L)F25/26K83
5. Set up the Baud Rate registers.
6. Set up the Filter and Mask registers.
7. Set the CAN module to Normal mode or any
other mode required by the application logic.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 582


PIC18(L)F25/26K83
FIGURE 34-1: CAN BUFFERS AND PROTOCOL ENGINE BLOCK DIAGRAM

BUFFERS

Acceptance Mask
16 - 4 to 1 MUXs

RXM0
Acceptance Filters
TXB0 TXB1 TXB2 (RXF0-RXF05)
VCC
A MODE 0
c
MESSAGE

MESSAGE

MESSAGE
MTXBUFF

MTXBUFF

MTXBUFF
MSGREQ

MSGREQ

MSGREQ
c
TXERR

TXERR

TXERR

Acceptance Mask
MLOA

MLOA

MLOA
ABTF

ABTF

ABTF
e
p Acceptance Filters RXF15

RXM1
t (RXF06-RXF15)
MODE 1, 2

Message MODE 0
2 RX Identifier
Queue
Control
Buffers M
A
Transmit Byte Sequencer Data Field B

MODE 1, 2 Rcv Byte


6 TX/RX
Buffers

Transmit Option

MESSAGE
BUFFERS

PROTOCOL Receive REC


ENGINE Error
Counter TEC

Transmit Err-Pas
Error Bus-Off
Counter
Transmit<7:0> Receive<8:0>
Shift<14:0>
{Transmit<5:0>, Receive<8:0>}
Comparator
Protocol
Finite
State
CRC<14:0> Machine

Bit
Transmit Clock
Timing
Logic Logic Generator

Configuration
TX RX Registers

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 583


PIC18(L)F25/26K83
34.2 CAN Modes of Operation In the Configuration mode, the module will not transmit
or receive. The error counters are cleared and the inter-
The CAN module has six main modes of operation: rupt flags remain unchanged. The programmer will
• Configuration mode have access to Configuration registers that are access
• Disable/Sleep mode restricted in other modes. I/O pins will revert to normal
I/O functions.
• Normal Operation mode
• Listen Only mode 34.2.2 DISABLE/SLEEP MODE
• Loopback mode
When the REQOP<2:0> bits are set to ‘001’, the mod-
• Error Recognition mode ule will enter Disable/Sleep mode. This mode is similar
All modes, except Error Recognition, are requested by to disabling other peripheral modules by turning off the
setting the REQOP bits (CANCON<7:5>). Error Recog- module enables. This causes the module internal clock
nition mode is requested through the RXM bits of the to stop unless the module is active (i.e., receiving or
Receive Buffer register(s). Entry into a mode is transmitting a message). If the module is active, the
acknowledged by monitoring the OPMODE bits. module will wait for 11 recessive bits on the CAN bus,
detect that condition as an Idle bus, then accept the
When changing modes, the mode will not actually
module Disable/Sleep command. OPMODE<2:0> =
change until all pending message transmissions are
001 indicates whether the module successfully went
complete. Because of this, the user must verify that the
into the module Disable/Sleep mode. In Disable/Sleep
device has actually changed into the requested mode
mode, the module will not transmit or receive. The
before further operations are executed.
module has the ability to set the WAKIF bit due to bus
Note: The module may fail to change modes activity. However, any pending interrupts will remain
from Configuration mode if the CANRX and the error counters will retain their value.
and CANTX pins are not externally con- The WAKIF interrupt is the only module interrupt that is
nected to a CAN transceiver. If connection still active in the Disable/Sleep mode. If the WAKDIS is
to a transceiver is not desired for the par- cleared and WAKIE is set, the processor will receive an
ticular use case or application (for exam- interrupt whenever the module detects a recessive to
ple, transitioning to Loopback mode for dominant transition. On wake-up, the module will auto-
development/debugging), the CANRX pin matically be set to the previous mode of operation. For
must be externally tied to VDD through a example, if the module was switched from Normal to
10k pull-up resistor. Disable/Sleep mode on bus activity wake-up, the
module will automatically enter into Normal mode and
34.2.1 CONFIGURATION MODE the first message that caused the module to wake-up is
The CAN module has to be initialized before the lost. The module will not generate any error frame.
activation. This is only possible if the module is in the Firmware logic must detect this condition and make
Configuration mode. The Configuration mode is sure that retransmission is requested. If the processor
requested by setting the REQOP<2:0> bits to 0b100. receives a wake-up interrupt while it is sleeping, more
Only when the Status bits OPMODE<2:0> are equal to than one message may get lost. The actual number of
0b100, can the initialization be performed. Afterwards, messages lost would depend on the processor
the Configuration registers, the acceptance mask reg- oscillator start-up time and incoming message bit rate.
isters and the acceptance filter registers can be written. The CANTX pin will stay in the recessive state while the
Configuration mode protects the user from accidentally module is in Disable/Sleep mode.
violating the CAN protocol through programming
errors, as all registers which control the configuration of 34.2.3 NORMAL MODE
the module can not be modified while the module is on- This is the standard operating mode of the CAN mod-
line. The CAN module will not enter the Configuration ule. In this mode, the device actively monitors all bus
mode while a transmission or reception is taking place. messages and generates Acknowledge bits, error
The following registers can only be modified in frames, etc. This is also the only mode in which the
Configuration mode: CAN module will transmit messages over the CAN bus.
• Configuration Registers The Normal mode is activated by clearing the mode
• Functional Mode Selection Registers request bits in the CANCON register.
• Bit Timing Registers
• Identifier Acceptance Filter Registers
• Identifier Acceptance Mask Registers
• Filter and Mask Control Registers
• Mask Selection Registers

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 584


PIC18(L)F25/26K83
34.2.4 LISTEN ONLY MODE 34.3 CAN Module Functional Modes
Listen Only mode provides a means for the CAN In addition to CAN modes of operation, the CAN mod-
module to receive all messages, including messages ule offers a total of three functional modes. Each of
with errors. This mode can be used for bus monitor these modes are identified as Mode 0, Mode 1 and
applications or for detecting the baud rate in ‘hot Mode 2.
plugging’ situations. For auto-baud detection, it is
necessary that there are at least two other nodes which 34.3.1 MODE 0 – LEGACY MODE
are communicating with each other. The baud rate can
Mode 0 is designed to be fully compatible with CAN
be detected empirically by testing different values until
modules used in PIC18CXX8 and PIC18FXX8 devices.
valid messages are received. The Listen Only mode is
This is the default mode of operation on all Reset con-
a silent mode, meaning no messages will be
ditions. As a result, module code written for the
transmitted while in this state, including error flags or
PIC18XX8 CAN module may be used on the CAN mod-
Acknowledge signals. In Listen Only mode, both valid
ule with only very minor code changes.
and invalid messages will be received, regardless of
RXMn bit settings. The filters and masks can still be The following is the list of resources available in Mode 0:
used to allow only particular valid messages to be • Three transmit buffers: TXB0, TXB1 and TXB2
loaded into the Receive registers, or the filter masks
• Two receive buffers: RXB0 and RXB1
can be set to all zeros to allow a message with any
identifier to pass. All invalid messages will be received • Two acceptance masks, one for each receive
in this mode, regardless of filters and masks or RXMn buffer: RXM0, RXM1
Receive Buffer mode bits.The error counters are reset • Six acceptance filters, 2 for RXB0 and 4 for RXB1:
and deactivated in this state. The Listen Only mode is RXF0, RXF1, RXF2, RXF3, RXF4, RXF5
activated by setting the mode request bits in the
CANCON register to 0b011. 34.3.2 MODE 1 – ENHANCED LEGACY
MODE
34.2.5 LOOPBACK MODE Mode 1 is similar to Mode 0, with the exception
This mode will allow internal transmission of messages that more resources are available in Mode 1. There are
from the transmit buffers to the receive buffers without 16 acceptance filters and two acceptance mask regis-
actually transmitting messages on the CAN bus. This ters. Acceptance Filter 15 can be used as either an
mode can be used in system development and testing. acceptance filter or an acceptance mask register. In
In this mode, the ACK bit is ignored and the device will addition to three transmit and two receive buffers, there
allow incoming messages from itself, just as if they are six more message buffers. One or more of these
were coming from another node. The Loopback mode additional buffers can be programmed as transmit or
is a silent mode, meaning no messages will be trans- receive buffers. These additional buffers can also be
mitted while in this state, including error flags or programmed to automatically handle RTR messages.
Acknowledge signals. The TXCAN pin will revert to port Fourteen of sixteen acceptance filter registers can be
I/O while the device is in this mode. The filters and dynamically associated to any receive buffer and
masks can be used to allow only particular messages acceptance mask register. One can use this capability
to be loaded into the receive registers. The masks can to associate more than one filter to any one buffer.
be set to all zeros to provide a mode that accepts all
messages. The Loopback mode is activated by setting When a receive buffer is programmed to use standard
the mode request bits in the CANCON register to identifier messages, part of the full acceptance filter reg-
0b010. ister can be used as a data byte filter. The length of the
data byte filter is programmable from 0 to 18 bits. This
34.2.6 ERROR RECOGNITION MODE functionality simplifies implementation of high-level
protocols, such as the DeviceNet™ protocol.
The module can be set to ignore all errors and receive
any message. In functional Mode 0, the Error Recogni- The following is the list of resources available in Mode 1:
tion mode is activated by setting the RXM<1:0> bits in • Three transmit buffers: TXB0, TXB1 and TXB2
the RXBnCON registers to ‘11’. In this mode, the data • Two receive buffers: RXB0 and RXB1
which is in the message assembly buffer until the error
• Six buffers programmable as TX or RX: B0-B5
time, is copied in the receive buffer and can be read via
the CPU interface. • Automatic RTR handling on B0-B5
• Sixteen dynamically assigned acceptance filters:
RXF0-RXF15
• Two dedicated acceptance mask registers;
RXF15 programmable as third mask:
RXM0-RXM1, RXF15
• Programmable data filter on standard identifier

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 585


PIC18(L)F25/26K83
messages: SDFLC Each receive buffer contains one Control register
(RXBnCON), four Identifier registers (RXBnSIDL,
34.3.3 MODE 2 – ENHANCED FIFO MODE RXBnSIDH, RXBnEIDL, RXBnEIDH), one Data Length
In Mode 2, two or more receive buffers are used to form Count register (RXBnDLC) and eight Data Byte
the receive FIFO (first in, first out) buffer. There is no registers (RXBnDm).
one-to-one relationship between the receive buffer and There is also a separate Message Assembly Buffer
acceptance filter registers. Any filter that is enabled and (MAB) which acts as an additional receive buffer. MAB
linked to any FIFO receive buffer can generate is always committed to receiving the next message
acceptance and cause FIFO to be updated. from the bus and is not directly accessible to user firm-
FIFO length is user-programmable, from 2-8 buffers ware. The MAB assembles all incoming messages one
deep. FIFO length is determined by the very first by one. A message is transferred to appropriate
programmable buffer that is configured as a transmit receive buffers only if the corresponding acceptance
buffer. For example, if Buffer 2 (B2) is programmed as a filter criteria is met.
transmit buffer, FIFO consists of RXB0, RXB1, B0 and
B1, creating a FIFO length of four. If all programmable 34.4.3 PROGRAMMABLE TRANSMIT/
buffers are configured as receive buffers, FIFO will have RECEIVE BUFFERS
the maximum length of eight. The CAN module implements six non-dedicated buffers:
The following is the list of resources available in Mode 2: B0-B5. These buffers are individually programmable as
either transmit or receive buffers. These buffers are
• Three transmit buffers: TXB0, TXB1 and TXB2 available only in Mode 1 and 2. As with dedicated trans-
• Two receive buffers: RXB0 and RXB1 mit and receive buffers, each of these programmable
• Six buffers programmable as TX or RX; receive buffers occupies 14 bytes of SRAM and are mapped into
buffers form FIFO: B0-B5 SFR memory map.
• Automatic RTR handling on B0-B5 Each buffer contains one Control register (BnCON),
• Sixteen acceptance filters: RXF0-RXF15 four Identifier registers (BnSIDL, BnSIDH, BnEIDL,
• Two dedicated acceptance mask registers; BnEIDH), one Data Length Count register (BnDLC)
RXF15 programmable as third mask: and eight Data Byte registers (BnDm). Each of these
RXM0-RXM1, RXF15 registers contains two sets of control bits. Depending
• Programmable data filter on standard identifier on whether the buffer is configured as transmit or
messages: SDFLC, useful for DeviceNet protocol receive, one would use the corresponding control bit
set. By default, all buffers are configured as receive
buffers. Each buffer can be individually configured as a
34.4 CAN Message Buffers transmit or receive buffer by setting the corresponding
TXENn bit in the BSEL0 register.
34.4.1 DEDICATED TRANSMIT BUFFERS
When configured as transmit buffers, user firmware
The CAN module implements three dedicated transmit
may access transmit buffers in any order similar to
buffers – TXB0, TXB1 and TXB2. Each of these buffers
accessing dedicated transmit buffers. In receive
occupies 14 bytes of SRAM and are mapped into the
configuration with Mode 1 enabled, user firmware may
SFR memory map. These are the only transmit buffers
also access receive buffers in any order required. But
available in Mode 0. Mode 1 and 2 may access these
in Mode 2, all receive buffers are combined to form a
and other additional buffers.
single FIFO. Actual FIFO length is programmable by
Each transmit buffer contains one Control register user firmware. Access to FIFO must be done through
(TXBnCON), four Identifier registers (TXBnSIDL, the FIFO Pointer bits (FP<4:0>) in the CANCON
TXBnSIDH, TXBnEIDL, TXBnEIDH), one Data Length register. It must be noted that there is no hardware
Count register (TXBnDLC) and eight Data Byte protection against out of order FIFO reads.
registers (TXBnDm).
34.4.4 PROGRAMMABLE AUTO-RTR
34.4.2 DEDICATED RECEIVE BUFFERS BUFFERS
The CAN module implements two dedicated receive In Mode 1 and 2, any of six programmable transmit/
buffers: RXB0 and RXB1. Each of these buffers occu- receive buffers may be programmed to automatically
pies 14 bytes of SRAM and are mapped into SFR respond to predefined RTR messages without user
memory map. These are the only receive buffers avail- firmware intervention. Automatic RTR handling is
able in Mode 0. Mode 1 and 2 may access these and enabled by setting the TX2EN bit in the BSEL0 register
other additional buffers. and the RTREN bit in the BnCON register. After this
setup, when an RTR request is received, the TXREQ
bit is automatically set and the current buffer content is
automatically queued for transmission as a RTR

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 586


PIC18(L)F25/26K83
response. As with all transmit buffers, once the TXREQ
bit is set, buffer registers become read-only and any
writes to them will be ignored.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 587


PIC18(L)F25/26K83
The following outlines the steps required to 34.5.2 ABORTING TRANSMISSION
automatically handle RTR messages:
The MCU can request to abort a message by clearing
1. Set buffer to Transmit mode by setting the the TXREQ bit associated with the corresponding mes-
TXnEN bit to ‘1’ in the BSEL0 register. sage buffer (TXBnCON<3> or BnCON<3>). Setting the
2. At least one acceptance filter must be associ- ABAT bit (CANCON<4>) will request an abort of all
ated with this buffer and preloaded with the pending messages. If the message has not yet started
expected RTR identifier. transmission, or if the message started but is interrupted
3. Bit, RTREN in the BnCON register, must be set by loss of arbitration or an error, the abort will be pro-
to ‘1’. cessed. The abort is indicated when the module sets the
TXABT bit for the corresponding buffer (TXBnCON<6>
4. Buffer must be preloaded with the data to be
or BnCON<6>). If the message has started to transmit,
sent as a RTR response.
it will attempt to transmit the current message fully. If the
Normally, user firmware will keep buffer data registers current message is transmitted fully and is not lost to
up to date. If firmware attempts to update the buffer arbitration or an error, the TXABT bit will not be set
while an automatic RTR response is in the process of because the message was transmitted successfully.
transmission, all writes to buffers are ignored. Likewise, if a message is being transmitted during an
abort request and the message is lost to arbitration or an
34.5 CAN Message Transmission error, the message will not be retransmitted and the
TXABT bit will be set, indicating that the message was
34.5.1 INITIATING TRANSMISSION successfully aborted.
For the MCU to have write access to the message buf- Once an abort is requested by setting the ABAT or
fer, the TXREQ bit must be clear, indicating that the TXABT bits, it cannot be cleared to cancel the abort
message buffer is clear of any pending message to be request. Only CAN module hardware or a POR
transmitted. At a minimum, the SIDH, SIDL and DLC condition can clear it.
registers must be loaded. If data bytes are present in
the message, the Data registers must also be loaded. 34.5.3 TRANSMIT PRIORITY
If the message is to use extended identifiers, the Transmit priority is a prioritization within the ECAN
EIDH:EIDL registers must also be loaded and the module of the pending transmittable messages. This is
EXIDE bit set. independent from, and not related to, any prioritization
To initiate message transmission, the TXREQ bit must implicit in the message arbitration scheme built into the
be set for each buffer to be transmitted. When TXREQ CAN protocol. Prior to sending the Start-of-Frame
is set, the TXABT, TXLARB and TXERR bits will be (SOF), the priority of all buffers that are queued for
cleared. To successfully complete the transmission, transmission is compared. The transmit buffer with the
there must be at least one node with matching baud highest priority will be sent first. If two buffers have the
rate on the network. same priority setting, the buffer with the highest buffer
number will be sent first. There are four levels of trans-
Setting the TXREQ bit does not initiate a message
mit priority. If the TXP bits for a particular message buf-
transmission; it merely flags a message buffer as ready
fer are set to ‘11’, that buffer has the highest possible
for transmission. Transmission will start when the
priority. If the TXP bits for a particular message buffer
device detects that the bus is available. The device will
are set to ‘00’, that buffer has the lowest possible
then begin transmission of the highest priority message
priority.
that is ready.
When the transmission has completed successfully, the
TXREQ bit will be cleared, the TXBnIF bit will be set and
an interrupt will be generated if the TXBnIE bit is set.
If the message transmission fails, the TXREQ will remain
set, indicating that the message is still pending for trans-
mission and one of the following condition flags will be
set. If the message started to transmit but encountered
an error condition, the TXERR and the IRXIF bits will be
set and an interrupt will be generated. If the message lost
arbitration, the TXLARB bit will be set.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 588


PIC18(L)F25/26K83
FIGURE 34-2: TRANSMIT BUFFERS

TXB0 TXB1 TXB2 TXB3-TXB8

MESSAGE

MESSAGE

MESSAGE

MESSAGE
TXLARB

TXLARB

TXLARB

TXLARB
TXREQ

TXREQ

TXREQ

TXREQ
TXERR

TXERR

TXERR

TXERR
TXB0IF

TXB1IF

TXB2IF

TXB2IF
TXABT

TXABT

TXABT

TXABT
Message
Queue
Control
Transmit Byte Sequencer

34.6 Message Reception the current message is an RTR frame or not. A


received message is considered a standard identifier
34.6.1 RECEIVING A MESSAGE message if the EXID/EXIDE bit in the RXBnSIDL or the
BnSIDL register is cleared. Conversely, a set EXID bit
Of all receive buffers, the MAB is always committed to
indicates an extended identifier message. If the
receiving the next message from the bus. The MCU
received message is a standard identifier message,
can access one buffer while the other buffer is available
user firmware needs to read the SIDL and SIDH regis-
for message reception or holding a previously received
ters. In the case of an extended identifier message,
message.
firmware should read the SIDL, SIDH, EIDL and EIDH
Note: The entire contents of the MAB are moved registers. If the RXBnDLC or BnDLC register contain
into the receive buffer once a message is non-zero data count, user firmware should also read
accepted. This means that regardless of the corresponding number of data bytes by accessing
the type of identifier (standard or the RXBnDm or the BnDm registers. When a received
extended) and the number of data bytes message is an RTR, and if the current buffer is not con-
received, the entire receive buffer is over- figured for automatic RTR handling, user firmware
written with the MAB contents. Therefore, must take appropriate action and respond manually.
the contents of all registers in the buffer Each receive buffer contains RXM bits to set special
must be assumed to have been modified Receive modes. In Mode 0, RXM<1:0> bits in
when any message is received. RXBnCON define a total of four Receive modes. In
When a message is moved into either of the receive Mode 1 and 2, RXM1 bit, in combination with the EXID
buffers, the associated RXFUL bit is set. This bit must mask and filter bit, define the same four receive modes.
be cleared by the MCU when it has completed process- Normally, these bits are set to ‘00’ to enable reception
ing the message in the buffer in order to allow a new of all valid messages as determined by the appropriate
message to be received into the buffer. This bit acceptance filters. In this case, the determination of
provides a positive lockout to ensure that the firmware whether or not to receive standard or extended
has finished with the message before the module messages is determined by the EXIDE bit in the accep-
attempts to load a new message into the receive buffer. tance filter register. In Mode 0, if the RXM bits are set
If the receive interrupt is enabled, an interrupt will be to ‘01’ or ‘10’, the receiver will accept only messages
generated to indicate that a valid message has been with standard or extended identifiers, respectively. If an
received. acceptance filter has the EXIDE bit set, such that it
does not correspond with the RXM mode, that accep-
Once a message is loaded into any matching buffer,
tance filter is rendered useless. In Mode 1 and 2,
user firmware may determine exactly what filter caused
setting EXID in the SIDL Mask register will ensure that
this reception by checking the filter hit bits in the
only standard or extended identifiers are received.
RXBnCON or BnCON registers. In Mode 0,
These two modes of RXM bits can be used in systems
FILHIT<2:0> of RXBnCON serve as filter hit bits. In
where it is known that only standard or extended mes-
Mode 1 and 2, FILHIT<4:0> bits of BnCON serve as
sages will be on the bus. If the RXM bits are set to ‘11’
filter hit bits. The same registers also indicate whether
(RXM1 = 1 in Mode 1 and 2), the buffer will receive all

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 589


PIC18(L)F25/26K83
messages regardless of the values of the acceptance configured as a transmit buffer, the actual FIFO will
filters. Also, if a message has an error before the end consist of RXB0, RXB1, B0, B1 and B2, a total of five
of frame, that portion of the message assembled in the buffers. If B0 is configured as a transmit buffer, the
MAB before the error frame will be loaded into the buf- FIFO length will be two. If none of the programmable
fer. This mode may serve as a valuable debugging tool buffers are configured as a transmit buffer, the FIFO will
for a given CAN network. It should not be used in an be eight buffers deep. A system that requires more
actual system environment as the actual system will transmit buffers should try to locate transmit buffers at
always have some bus errors and all nodes on the bus the very end of B0-B5 buffers to maximize available
are expected to ignore them. FIFO length.
In Mode 1 and 2, when a programmable buffer is When a message is received in FIFO mode, the Inter-
configured as a transmit buffer and one or more accep- rupt Flag Code bits (EICODE<4:0>) in the CANSTAT
tance filters are associated with it, all incoming messages register will have a value of ‘10000’, indicating the
matching this acceptance filter criteria will be discarded. FIFO has received a message. FIFO Pointer bits,
To avoid this scenario, user firmware must make sure FP<3:0> in the CANCON register, point to the buffer
that there are no acceptance filters associated with a that contains data not yet read. The FIFO Pointer bits,
buffer configured as a transmit buffer. in this sense, serve as the FIFO Read Pointer. The user
should use the FP bits and read corresponding buffer
34.6.2 RECEIVE PRIORITY data. When receive data is no longer needed, the
When in Mode 0, RXB0 is the higher priority buffer and RXFUL bit in the current buffer must be cleared,
has two message acceptance filters associated with it. causing FP<3:0> to be updated by the module.
RXB1 is the lower priority buffer and has four acceptance To determine whether FIFO is empty or not, the user
filters associated with it. The lower number of acceptance may use the FP<3:0> bits to access the RXFUL bit in
filters makes the match on RXB0 more restrictive and the current buffer. If RXFUL is cleared, the FIFO is con-
implies a higher priority for that buffer. Additionally, the sidered to be empty. If it is set, the FIFO may contain
RXB0CON register can be configured such that if RXB0 one or more messages. In Mode 2, the module also
contains a valid message and another valid message is provides a bit called FIFO High Water Mark (FIFOWM)
received, an overflow error will not occur and the new in the ECANCON register. This bit can be used to
message will be moved into RXB1 regardless of the cause an interrupt whenever the FIFO contains only
acceptance criteria of RXB1. There are also two one or four empty buffers. The FIFO high water mark
programmable acceptance filter masks available, one for interrupt can serve as an early warning to a full FIFO
each receive buffer (see Section 34.4 “CAN Message condition.
Buffers”).
In Mode 1 and 2, there are a total of 16 acceptance 34.6.4 TIME-STAMPING
filters available and each can be dynamically assigned The CAN module can be programmed to generate a
to any of the receive buffers. A buffer with a lower time-stamp for every message that is received. When
number has higher priority. Given this, if an incoming enabled, the module generates a capture signal for the
message matches with two or more receive buffer CCP modules, which in turn captures the value of
acceptance criteria, the buffer with the lower number Timer1, Timer3 or Timer5. This value can be used as
will be loaded with that message. the message time-stamp.
To use the time-stamp capability, set the CTS<3:0> bits
34.6.3 ENHANCED FIFO MODE
of the appropriate CCPxCAP register to '1000' to con-
When configured for Mode 2, two of the dedicated figure the CCP module capture input to the CAN_rx_-
receive buffers in combination with one or more pro- timestamp signal.
grammable transmit/receive buffers, are used to create
In addition, the CAN_rx_timestamp can be chosen as a
a maximum of an eight buffers deep FIFO buffer. In this
signal input for the Signal Measurement Timer, which
mode, there is no direct correlation between filters and
can be used for a variety of other timing applications.
receive buffer registers. Any filter that has been
enabled can generate an acceptance. When a
message has been accepted, it is stored in the next
available receive buffer register and an internal Write
Pointer is incremented. The FIFO can be a maximum
of eight buffers deep. The entire FIFO must consist of
contiguous receive buffers. The FIFO head begins at
RXB0 buffer and its tail spans toward B5. The maxi-
mum length of the FIFO is limited by the presence or
absence of the first transmit buffer starting from B0. If a
buffer is configured as a transmit buffer, the FIFO
length is reduced accordingly. For instance, if B3 is

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 590


PIC18(L)F25/26K83
34.7 Message Acceptance Filters In addition to dynamic filter to buffer association, in
and Masks Mode 1 and 2, each filter can also be dynamically asso-
ciated to available Acceptance Mask registers. The
The message acceptance filters and masks are used to FILn_m bits in the MSELn register can be used to link
determine if a message in the Message Assembly Buf- a specific acceptance filter to an acceptance mask reg-
fer should be loaded into any of the receive buffers. ister. As with filter to buffer association, one can also
Once a valid message has been received into the MAB, associate more than one mask to a specific acceptance
the identifier fields of the message are compared to the filter.
filter values. If there is a match, that message will be
When a filter matches and a message is loaded into the
loaded into the appropriate receive buffer. The filter
receive buffer, the filter number that enabled the
masks are used to determine which bits in the identifier
message reception is loaded into the FILHIT bit(s). In
are examined with the filters. A truth table is shown
Mode 0 for RXB1, the RXB1CON register contains the
below in Table 34-1 that indicates how each bit in the
FILHIT<2:0> bits. They are coded as follows:
identifier is compared to the masks and filters to
determine if a message should be loaded into a receive • 101 = Acceptance Filter 5 (RXF5)
buffer. The mask essentially determines which bits to • 100 = Acceptance Filter 4 (RXF4)
apply the acceptance filters to. If any mask bit is set to • 011 = Acceptance Filter 3 (RXF3)
a zero, then that bit will automatically be accepted • 010 = Acceptance Filter 2 (RXF2)
regardless of the filter bit.
• 001 = Acceptance Filter 1 (RXF1)
• 000 = Acceptance Filter 0 (RXF0)
TABLE 34-1: FILTER/MASK TRUTH TABLE
Message Accept or Note: ‘000’ and ‘001’ can only occur if the
Mask Filter
Identifier Reject RXB0DBEN bit is set in the RXB0CON
bit n bit n
bit n001 bit n register, allowing RXB0 messages to
rollover into RXB1.
0 x x Accept
The coding of the RXB0DBEN bit enables these three
1 0 0 Accept
bits to be used similarly to the FILHIT bits and to distin-
1 0 1 Reject guish a hit on filter, RXF0 and RXF1, in either RXB0 or
1 1 0 Reject after a rollover into RXB1.
1 1 1 Accept • 111 = Acceptance Filter 1 (RXF1)
Legend: x = don’t care • 110 = Acceptance Filter 0 (RXF0)
In Mode 0, acceptance filters, RXF0 and RXF1, and • 001 = Acceptance Filter 1 (RXF1)
filter mask, RXM0, are associated with RXB0. Filters, • 000 = Acceptance Filter 0 (RXF0)
RXF2, RXF3, RXF4 and RXF5, and mask, RXM1, are If the RXB0DBEN bit is clear, there are six codes
associated with RXB1. corresponding to the six filters. If the RXB0DBEN bit is
In Mode 1 and 2, there are an additional ten set, there are six codes corresponding to the six filters,
acceptance filters, RXF6-RXF15, creating a total of 16 plus two additional codes corresponding to RXF0 and
available filters. RXF15 can be used either as an RXF1 filters, that rollover into RXB1.
acceptance filter or acceptance mask register. Each of In Mode 1 and 2, each buffer control register contains
these acceptance filters can be individually enabled or five bits of filter hit bits (FILHIT<4:0>). A binary value of
disabled by setting or clearing the RXFENn bit in the ‘0’ indicates a hit from RXF0 and 15 indicates RXF15.
RXFCONn register. Any of these 16 acceptance filters
can be dynamically associated with any of the receive If more than one acceptance filter matches, the FILHIT
buffers. Actual association is made by setting the bits will encode the binary value of the lowest num-
appropriate bits in the RXFBCONn register. Each bered filter that matched. In other words, if filter RXF2
RXFBCONn register contains a nibble for each filter. and filter RXF4 match, FILHIT will be loaded with the
This nibble can be used to associate a specific filter to value for RXF2. This essentially prioritizes the
any of available receive buffers. User firmware may acceptance filters with a lower number filter having
associate more than one filter to any one specific higher priority. Messages are compared to filters in
receive buffer. ascending order of filter number.
The mask and filter registers can only be modified
when the CAN module is in Configuration mode.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 591


PIC18(L)F25/26K83
FIGURE 34-3: MESSAGE ACCEPTANCE MASK AND FILTER OPERATION

Acceptance Filter Register Acceptance Mask Register

RXFn0 RXMn0

RXFn1 RXMn1 RxRqst

RXFnn RXMnn

Message Assembly Buffer


Identifier

34.8 Baud Rate Setting The “Nominal Bit Time” is defined as:

All nodes on a given CAN bus must have the same


EQUATION 34-1: NOMINAL BIT TIME
nominal bit rate. The CAN protocol uses Non-Return-
to-Zero (NRZ) coding which does not encode a clock TBIT = 1/Nominal Bit Rate
within the data stream. Therefore, the receive clock
must be recovered by the receiving nodes and The Nominal Bit Time can be thought of as being
synchronized to the transmitter’s clock. divided into separate, non-overlapping time segments.
As oscillators and transmission time may vary from These segments (Figure 34-4) include:
node to node, the receiver must have some type of • Synchronization Segment (Sync_Seg)
Phase Lock Loop (PLL) synchronized to data transmis- • Propagation Time Segment (Prop_Seg)
sion edges to synchronize and maintain the receiver
• Phase Buffer Segment 1 (Phase_Seg1)
clock. Since the data is NRZ coded, it is necessary to
include bit stuffing to ensure that an edge occurs at • Phase Buffer Segment 2 (Phase_Seg2)
least every six bit times to maintain the Digital Phase The time segments (and thus, the Nominal Bit Time)
Lock Loop (DPLL) synchronization. are, in turn, made up of integer units of time called Time
The bit timing of the CAN module is implemented using Quanta or TQ (see Figure 34-4). By definition, the
a DPLL that is configured to synchronize to the incom- Nominal Bit Time is programmable from a minimum of
ing data and provides the nominal timing for the trans- 8 TQ to a maximum of 25 TQ. Also by definition, the
mitted data. The DPLL breaks each bit time into minimum Nominal Bit Time is 1 s, corresponding to a
multiple segments made up of minimal periods of time maximum 1 Mb/s rate. The actual duration is given by
called the Time Quanta (TQ). the following relationship:

Bus timing functions executed within the bit time frame,


EQUATION 34-2: NOMINAL BIT TIME
such as synchronization to the local oscillator, network
DURATION
transmission delay compensation and sample point
positioning, are defined by the programmable bit timing Nominal Bit Time = TQ * (Sync_Seg + Prop_Seg +
logic of the DPLL. Phase_Seg1 + Phase_Seg2)
All devices on the CAN bus must use the same bit rate.
However, all devices are not required to have the same
master oscillator clock frequency. For the different clock
frequencies of the individual devices, the bit rate has to
be adjusted by appropriately setting the baud rate
prescaler and number of time quanta in each segment.
The “Nominal Bit Rate” is the number of bits transmitted
per second, assuming an ideal transmitter with an ideal
oscillator, in the absence of resynchronization. The
nominal bit rate is defined to be a maximum of 1 Mb/s.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 592


PIC18(L)F25/26K83
The Time Quantum is a fixed unit derived from the
oscillator period. It is also defined by the programmable
baud rate prescaler, with integer values from 1 to 64, in
addition to a fixed divide-by-two for clock generation.
Mathematically, this is:

EQUATION 34-3: TIME QUANTUM


TQ (s) = (2 * (BRP + 1))/FOSC (MHz)
or
TQ (s) = (2 * (BRP + 1)) * TOSC (s)

where FOSC is the clock frequency, TOSC is the


corresponding oscillator period and BRP is an integer
(0 through 63) represented by the binary values of
BRGCON1<5:0>. The equation above refers to the
effective clock frequency used by the microcontroller. If,
for example, a 10 MHz crystal in HS mode is used, then
FOSC = 10 MHz and TOSC = 100 ns. If the same 10 MHz
crystal is used in HS-PLL mode, then the effective
frequency is FOSC = 40 MHz and TOSC = 25 ns.

FIGURE 34-4: BIT TIME PARTITIONING


Input
Signal

Bit Sync Propagation Phase Phase


Time Segment Segment Segment 1 Segment 2
Intervals

TQ

Sample Point
Nominal Bit Time

34.8.1 EXTERNAL CLOCK, INTERNAL


CLOCK AND MEASURABLE JITTER
IN HS-PLL BASED OSCILLATORS
The microcontroller clock frequency generated from a
PLL circuit is subject to a jitter, also defined as Phase
Jitter or Phase Skew. For its PIC18 Enhanced micro-
controllers, Microchip specifies phase jitter (Pjitter) as
being 2% (Gaussian distribution, within three standard
deviations, see Parameter PLL04 in Table 45-9) and
Total Jitter (Tjitter) as being 2 * Pjitter.
The CAN protocol uses a bit-stuffing technique that
inserts a bit of a given polarity following five bits with the
opposite polarity. This gives a total of ten bits transmit-
ted without resynchronization (compensation for jitter
or phase error).
Given the random nature of the added jitter error, it can
be shown that the total error caused by the jitter tends
to cancel itself over time. For a period of ten bits, it is
necessary to add only two jitter intervals to correct for
jitter induced error: one interval in the beginning of the
10-bit period and another at the end. The overall effect
is shown in Figure 34-5.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 593


PIC18(L)F25/26K83
FIGURE 34-5: EFFECTS OF PHASE JITTER ON THE MICROCONTROLLER CLOCK
AND CAN BIT TIME

Nominal Clock

Clock with Jitter

Phase Skew (Jitter)

CAN Bit Time


with Jitter CAN Bit Jitter

Once these considerations are taken into account, it is EQUATION 34-6: RESULTANT FREQUENCY
possible to show that the relation between the jitter and ERROR:
the total frequency error can be defined as: –9
2   1.25 10  –5
- = 3.125 10 = 0.0031%
--------------------------------------
–6
EQUATION 34-4: JITTER AND TOTAL 10   8 10 
FREQUENCY ERROR
Table 34-2 shows the relation between the clock
T jitter 2  P jitter generated by the PLL and the frequency error from
f = ------------------------ = ------------------------
10  NBT 10  NBT jitter (measured jitter-induced error of 2%, Gaussian
distribution, within three standard deviations), as a
where jitter is expressed in terms of time and NBT is the percentage of the nominal clock frequency.
Nominal Bit Time. This is clearly smaller than the expected drift of a
For example, assume a CAN bit rate of 125 Kb/s, which crystal oscillator, typically specified at 100 ppm or
gives an NBT of 8 µs. For a 16 MHz clock generated 0.01%. If we add jitter to oscillator drift, we have a total
from a 4x PLL, the jitter at this clock frequency is: frequency drift of 0.0132%. The total oscillator
frequency errors for common clock frequencies and bit
rates, including both drift and jitter, are shown in
EQUATION 34-5: 16 MHz CLOCK FROM 4x
Table 34-3.
PLL JITTER:
1 0.02
2%  ------------------- = -----------------6 = 1.25ns
16 MHz 16 10

and resultant frequency error is:

TABLE 34-2: FREQUENCY ERROR FROM JITTER AT VARIOUS PLL GENERATED CLOCK SPEEDS
Frequency Error at Various Nominal Bit Times (Bit Rates)
PLL
Pjitter Tjitter 8 s 4 s 2 s 1 s
Output
(125 Kb/s) (250 Kb/s) (500 Kb/s) (1 Mb/s)
40 MHz 0.5 ns 1 ns 0.00125% 0.00250% 0.005% 0.01%
24 MHz 0.83 ns 1.67 ns 0.00209% 0.00418% 0.008% 0.017%
16 MHz 1.25 ns 2.5 ns 0.00313% 0.00625% 0.013% 0.025%

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 594


PIC18(L)F25/26K83
TABLE 34-3: TOTAL FREQUENCY ERROR AT VARIOUS PLL GENERATED CLOCK SPEEDS
(100 PPM OSCILLATOR DRIFT, INCLUDING ERROR FROM JITTER)
Frequency Error at Various Nominal Bit Times (Bit Rates)
Nominal PLL Output 8 s 4 s 2 s 1 s
(125 Kb/s) (250 Kb/s) (500 Kb/s) (1 Mb/s)
40 MHz 0.01125% 0.01250% 0.015% 0.02%
24 MHz 0.01209% 0.01418% 0.018% 0.027%
16 MHz 0.01313% 0.01625% 0.023% 0.035%

34.8.2 TIME QUANTA is programmable from 4 to 25, the usable minimum is


8 TQ. There is no assurance that a bit time of less than
As already mentioned, the Time Quanta is a fixed unit
8 TQ in length will operate correctly.
derived from the oscillator period and baud rate
prescaler. Its relationship to TBIT and the Nominal Bit
34.8.3 SYNCHRONIZATION SEGMENT
Rate is shown in Example 34-1.
This part of the bit time is used to synchronize the
EXAMPLE 34-1: CALCULATING TQ, various CAN nodes on the bus. The edge of the input
signal is expected to occur during the sync segment.
NOMINAL BIT RATE AND
The duration is 1 TQ.
NOMINAL BIT TIME
TQ (s) = (2 * (BRP + 1))/FOSC (MHz) 34.8.4 PROPAGATION SEGMENT
TBIT (s) = TQ (s) * number of TQ per bit interval This part of the bit time is used to compensate for phys-
Nominal Bit Rate (bits/s) = 1/TBIT ical delay times within the network. These delay times
This frequency (FOSC) refers to the effective consist of the signal propagation time on the bus line
frequency used. If, for example, a 10 MHz external and the internal delay time of the nodes. The length of
signal is used along with a PLL, then the effective the propagation segment can be programmed from
frequency will be 4 x 10 MHz which equals 40 MHz. 1 TQ to 8 TQ by setting the PRSEG<2:0> bits.

34.8.5 PHASE BUFFER SEGMENTS


CASE 1: The phase buffer segments are used to optimally locate
For FOSC = 16 MHz, BRP<5:0> = 00h and the sampling point of the received bit within the Nominal
Nominal Bit Time = 8 TQ: Bit Time. The sampling point occurs between Phase Seg-
TQ = (2 * 1)/16 = 0.125 s (125 ns) ment 1 and Phase Segment 2. These segments can be
lengthened or shortened by the resynchronization pro-
TBIT = 8 * 0.125 = 1 s (10-6s)
cess. The end of Phase Segment 1 determines the sam-
Nominal Bit Rate = 1/10-6 = 106 bits/s (1 Mb/s) pling point within a bit time. Phase Segment 1 is
programmable from 1 TQ to 8 TQ in duration. Phase Seg-
CASE 2: ment 2 provides a delay before the next transmitted data
transition and is also programmable from 1 TQ to 8 TQ in
For FOSC = 20 MHz, BRP<5:0> = 01h and
duration. However, due to IPT requirements, the actual
Nominal Bit Time = 8 TQ:
minimum length of Phase Segment 2 is 2 TQ, or it may be
TQ = (2 * 2)/20 = 0.2 s (200 ns) defined to be equal to the greater of Phase Segment 1 or
TBIT = 8 * 0.2 = 1.6 s (1.6 * 10-6s) the Information Processing Time (IPT). The sampling
Nominal Bit Rate = 1/1.6 * 10-6s = 625,000 bits/s point should be as late as possible or approximately 80%
(625 Kb/s) of the bit time.

34.8.6 SAMPLE POINT


CASE 3: The sample point is the point of time at which the bus level
For FOSC = 25 MHz, BRP<5:0> = 3Fh and is read and the value of the received bit is determined.
Nominal Bit Time = 25 TQ: The sampling point occurs at the end of Phase
Segment 1. If the bit timing is slow and contains many TQ,
The frequencies of the oscillators in the different nodes it is possible to specify multiple sampling of the bus line at
must be coordinated in order to provide a system wide the sample point. The value of the received bit is deter-
specified Nominal Bit Time. This means that all oscilla- mined to be the value of the majority decision of three val-
tors must have a TOSC that is an integral divisor of TQ. ues. The three samples are taken at the sample point and
It should also be noted that although the number of TQ twice before, with a time of TQ/2 between each sample.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 595


PIC18(L)F25/26K83
34.8.7 INFORMATION PROCESSING TIME 34.9.2 RESYNCHRONIZATION
The Information Processing Time (IPT) is the time As a result of resynchronization, Phase Segment 1
segment starting at the sample point that is reserved may be lengthened or Phase Segment 2 may be short-
for calculation of the subsequent bit level. The CAN ened. The amount of lengthening or shortening of the
specification defines this time to be less than or equal phase buffer segments has an upper bound given by
to 2 TQ. The ECAN module defines this time to be 2 TQ. the Synchronization Jump Width (SJW). The value of
Thus, Phase Segment 2 must be at least 2 TQ long. the SJW will be added to Phase Segment 1 (see
Figure 34-6) or subtracted from Phase Segment 2 (see
34.8.8 CLOCK SELECTION Figure 34-7). The SJW is programmable between 1 TQ
The CLKSEL bit of the CIOCON register allows for and 4 TQ.
selection between two CAN input clocks. When Clocking information will only be derived from reces-
CLKSEL = 0 (default), the CAN clock (FOSC in the sive to dominant transitions. The property, that only a
equations above) will be the same as the system clock. fixed maximum number of successive bits have the
When CLKSEL = 1, the CAN clock will be the clock same value, ensures resynchronization to the bit
selected by the FEXTOSC Configuration bit, regard- stream during a frame.
less of the system clock. This allows for the core of the
The phase error of an edge is given by the position of
device to be clocked by a PLL at 64 MHz (16 MHz HS
the edge relative to Sync_Seg, measured in TQ. The
crystal+4xPLL) while keeping the CAN clocked by the
phase error is defined in magnitude of TQ as follows:
base 16 MHz HS crystal without the PLL, for example.
• e = 0 if the edge lies within Sync_Seg.
• e > 0 if the edge lies before the sample point.
Note: If CLKSEL = 1, the system clock must be • e < 0 if the edge lies after the sample point of the
greater than or equal to the FEXTOSC previous bit.
selected clock. Having a slower system
clock than the CAN clock will lead to unex- If the magnitude of the phase error is less than, or equal
pected behavior.The Information Process- to, the programmed value of the Synchronization Jump
ing Time (IPT) is the time segment starting Width, the effect of a resynchronization is the same as
at the sample point that is reserved for cal- that of a hard synchronization.
culation of the subsequent bit level. The If the magnitude of the phase error is larger than the
CAN specification defines this time to be Synchronization Jump Width and if the phase error is
less than or equal to 2 TQ. The CAN module positive, then Phase Segment 1 is lengthened by an
defines this time to be 2 TQ. Thus, Phase amount equal to the Synchronization Jump Width.
Segment 2 must be at least 2 TQ long. If the magnitude of the phase error is larger than the
resynchronization jump width and if the phase error is
34.9 Synchronization negative, then Phase Segment 2 is shortened by an
amount equal to the Synchronization Jump Width.
To compensate for phase shifts between the oscillator
frequencies of each of the nodes on the bus, each CAN 34.9.3 SYNCHRONIZATION RULES
controller must be able to synchronize to the relevant
signal edge of the incoming signal. When an edge in • Only one synchronization within one bit time is
the transmitted data is detected, the logic will compare allowed.
the location of the edge to the expected time • An edge will be used for synchronization only if
(Sync_Seg). The circuit will then adjust the values of the value detected at the previous sample point
Phase Segment 1 and Phase Segment 2 as necessary. (previously read bus value) differs from the bus
There are two mechanisms used for synchronization. value immediately after the edge.
• All other recessive to dominant edges fulfilling
34.9.1 HARD SYNCHRONIZATION rules 1 and 2 will be used for resynchronization,
Hard synchronization is only done when there is a with the exception that a node transmitting a
recessive to dominant edge during a bus Idle condition, dominant bit will not perform a resynchronization
indicating the start of a message. After hard synchroni- as a result of a recessive to dominant edge with a
zation, the bit time counters are restarted with positive phase error.
Sync_Seg. Hard synchronization forces the edge,
which has occurred to lie within the synchronization
segment of the restarted bit time. Due to the rules of
synchronization, if a hard synchronization occurs, there
will not be a resynchronization within that bit time.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 596


PIC18(L)F25/26K83
FIGURE 34-6: LENGTHENING A BIT PERIOD (ADDING SJW TO PHASE SEGMENT 1)

Input
Signal

Bit Prop Phase Phase


Time Sync Segment Segment 1  SJW Segment 2
Segments

TQ
Sample Point
Nominal Bit Length

Actual Bit Length

FIGURE 34-7: SHORTENING A BIT PERIOD (SUBTRACTING SJW FROM PHASE SEGMENT 2)

Prop Phase Phase


Sync Segment Segment 1 Segment 2  SJW

TQ Sample Point
Actual Bit Length
Nominal Bit Length

34.10 Programming Time Segments 34.11 Oscillator Tolerance


Some requirements for programming of the time As a rule of thumb, the bit timing requirements allow
segments: ceramic resonators to be used in applications with
• Prop_Seg + Phase_Seg 1  Phase_Seg 2 transmission rates of up to 125 Kbit/sec. For the full bus
speed range of the CAN protocol, a quartz oscillator is
• Phase_Seg 2  Sync Jump Width.
required. Refer to ISO11898-1 for oscillator tolerance
For example, assume that a 125 kHz CAN baud rate is requirements.
desired, using 20 MHz for FOSC. With a TOSC of 50 ns,
a baud rate prescaler value of 04h gives a TQ of 500 ns. 34.12 Bit Timing Configuration
To obtain a Nominal Bit Rate of 125 kHz, the Nominal
Registers
Bit Time must be 8 s or 16 TQ.
Using 1 TQ for the Sync_Seg, 2 TQ for the Prop_Seg The Baud Rate Control registers (BRGCON1,
and 7 TQ for Phase Segment 1 would place the sample BRGCON2, BRGCON3) control the bit timing for the
point at 10 TQ after the transition. This leaves 6 TQ for CAN bus interface. These registers can only be
Phase Segment 2. modified when the CAN module is in Configuration
mode.
By the rules above, the Sync Jump Width could be the
maximum of 4 TQ. However, normally a large SJW is 34.12.1 BRGCON1
only necessary when the clock generation of the
different nodes is inaccurate or unstable, such as using The BRP bits control the baud rate prescaler. The
ceramic resonators. Typically, an SJW of 1 is enough. SJW<1:0> bits select the synchronization jump width in
terms of multiples of TQ.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 597


PIC18(L)F25/26K83
34.12.2 BRGCON2 34.13.4 BIT ERROR
The PRSEG bits set the length of the propagation seg- A bit error occurs if a transmitter sends a dominant bit
ment in terms of TQ. The SEG1PH bits set the length of and detects a recessive bit, or if it sends a recessive bit
Phase Segment 1 in TQ. The SAM bit controls how and detects a dominant bit, when monitoring the actual
many times the RXCAN pin is sampled. Setting this bit bus level and comparing it to the just transmitted bit. In
to a ‘1’ causes the bus to be sampled three times: twice the case where the transmitter sends a recessive bit
at TQ/2 before the sample point and once at the normal and a dominant bit is detected during the arbitration
sample point (which is at the end of Phase Segment 1). field and the Acknowledge slot, no bit error is
The value of the bus is determined to be the value read generated because normal arbitration is occurring.
during at least two of the samples. If the SAM bit is set
to a ‘0’, then the RXCAN pin is sampled only once at 34.13.5 STUFF BIT ERROR
the sample point. The SEG2PHTS bit controls how the lf, between the Start-of-Frame (SOF) and the CRC
length of Phase Segment 2 is determined. If this bit is delimiter, six consecutive bits with the same polarity are
set to a ‘1’, then the length of Phase Segment 2 is detected, the bit stuffing rule has been violated. A stuff
determined by the SEG2PH bits of BRGCON3. If the bit error occurs and an error frame is generated. The
SEG2PHTS bit is set to a ‘0’, then the length of Phase message is repeated.
Segment 2 is the greater of Phase Segment 1 and the
information processing time (which is fixed at 2 TQ for 34.13.6 ERROR STATES
the ECAN module).
Detected errors are made public to all other nodes via
34.12.3 BRGCON3 error frames. The transmission of the erroneous mes-
sage is aborted and the frame is repeated as soon as
The PHSEG2<2:0> bits set the length (in TQ) of Phase possible. Furthermore, each CAN node is in one of the
Segment 2 if the SEG2PHTS bit is set to a ‘1’. If the three error states; “error-active”, “error-passive” or
SEG2PHTS bit is set to a ‘0’, then the PHSEG2<2:0> “bus-off”, according to the value of the internal error
bits have no effect. counters. The error-active state is the usual state
where the bus node can transmit messages and acti-
34.13 Error Detection vate error frames (made of dominant bits) without any
restrictions. In the error-passive state, messages and
The CAN protocol provides sophisticated error
passive error frames (made of recessive bits) may be
detection mechanisms. The following errors can be
transmitted. The bus-off state makes it temporarily
detected.
impossible for the node to participate in the bus
communication. During this state, messages can neither
34.13.1 CRC ERROR
be received nor transmitted.
With the Cyclic Redundancy Check (CRC), the trans-
mitter calculates special check bits for the bit 34.13.7 ERROR MODES AND ERROR
sequence, from the start of a frame until the end of the COUNTERS
data field. This CRC sequence is transmitted in the
The CAN module contains two error counters: the
CRC field. The receiving node also calculates the CRC
Receive Error Counter (RXERRCNT) and the Transmit
sequence using the same formula and performs a
Error Counter (TXERRCNT). The values of both count-
comparison to the received sequence. If a mismatch is
ers can be read by the MCU. These counters are incre-
detected, a CRC error has occurred and an error frame
mented or decremented in accordance with the CAN
is generated. The message is repeated.
bus specification.
34.13.2 ACKNOWLEDGE ERROR The CAN module is error-active if both error counters
In the Acknowledge field of a message, the transmitter are below the error-passive limit of 128. They are error-
checks if the Acknowledge slot (which was sent out as passive if at least one of the error counters equals or
a recessive bit) contains a dominant bit. If not, no other exceeds 128. They go to bus-off if the transmit error
node has received the frame correctly. An Acknowl- counter equals or exceeds the bus-off limit of 256. The
edge error has occurred, an error frame is generated devices remain in this state until the bus-off recovery
and the message will have to be repeated. sequence is finished. The bus-off recovery sequence
consists of 128 occurrences of 11 consecutive reces-
34.13.3 FORM ERROR sive bits (see Figure 34-8). Note that the CAN module,
after going bus-off, will recover back to error-active
If a node detects a dominant bit in one of the four seg- without any intervention by the MCU if the bus remains
ments, including End-of-Frame (EOF), interframe Idle for 128 x 11 bit times. If this is not desired, the error
space, Acknowledge delimiter or CRC delimiter, then a Interrupt Service Routine should address this. The cur-
form error has occurred and an error frame is rent Error mode of the CAN module can be read by the
generated. The message is repeated. MCU via the COMSTAT register.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 598


PIC18(L)F25/26K83
Additionally, there is an Error State Warning flag bit,
EWARN, which is set if at least one of the error count-
ers equals or exceeds the error warning limit of 96.
EWARN is reset if both error counters are less than the
error warning limit.

FIGURE 34-8: ERROR MODES STATE DIAGRAM

Reset

RXERRCNT < 128 or Error-


TXERRCNT < 128 Active
128 occurrences of
11 consecutive
RXERRCNT  128 or “recessive” bits
TXERRCNT  128

Error-
Passive
TXERRCNT > 255
Bus-
Off

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 599


PIC18(L)F25/26K83
34.14 CAN Interrupts 34.14.2 TRANSMIT INTERRUPT
The module has several sources of interrupts. Each of When the transmit interrupt is enabled, an interrupt will
these interrupts can be individually enabled or dis- be generated when the associated transmit buffer
abled. The PIR5 register contains interrupt flags. The becomes empty and is ready to be loaded with a new
PIE5 register contains the enables for the eight main message. In Mode 0, there are separate interrupt enable/
interrupts. A special set of read-only bits in the disable and flag bits for each of the three dedicated trans-
CANSTAT register, the ICODE bits, can be used in mit buffers. The TXBnIF bit will be set to indicate the
combination with a jump table for efficient handling of source of the interrupt. The interrupt is cleared by the
interrupts. MCU, resetting the TXBnIF bit to a ‘0’. In Mode 1 and 2,
all transmit buffers share one interrupt enable/disable bit
All interrupts have one source, with the exception of the and one flag bit. In Mode 1 and 2, TXBnIE in PIE5 and
error interrupt and buffer interrupts in Mode 1 and 2. Any TXBnIF in PIR5 indicate when a transmit buffer has com-
of the error interrupt sources can set the error interrupt pleted transmission of its message. TXBnIF, TXBnIE and
flag. The source of the error interrupt can be determined TXBnIP in PIR5, PIE5 and IPR5, respectively, are not
by reading the Communication Status register, used in Mode 1 and 2. Individual transmit buffer interrupts
COMSTAT. In Mode 1 and 2, there are two interrupt can be enabled or disabled by setting or clearing TXBnIE
enable/disable and flag bits – one for all transmit buffers and B0IE register bits. When a shared interrupt occurs,
and the other for all receive buffers. user firmware must poll the TXREQ bit of all transmit
The interrupts can be broken up into two categories: buffers to detect the source of interrupt.
receive and transmit interrupts.
34.14.3 RECEIVE INTERRUPT
The receive related interrupts are:
When the receive interrupt is enabled, an interrupt will
• Receive Interrupts
be generated when a message has been successfully
• Wake-up Interrupt received and loaded into the associated receive buffer.
• Receiver Overrun Interrupt This interrupt is activated immediately after receiving
• Receiver Warning Interrupt the End-of-Frame (EOF) field.
• Receiver Error-Passive Interrupt In Mode 0, the RXBnIF bit is set to indicate the source
The transmit related interrupts are: of the interrupt. The interrupt is cleared by the MCU,
resetting the RXBnIF bit to a ‘0’.
• Transmit Interrupts
• Transmitter Warning Interrupt In Mode 1 and 2, all receive buffers share RXBnIE,
RXBnIF and RXBnIP in PIE5, PIR5 and IPR5, respec-
• Transmitter Error-Passive Interrupt
tively. Individual receive buffer interrupts can be con-
• Bus-Off Interrupt trolled by the TXBnIE and BIE0 registers. In Mode 1,
when a shared receive interrupt occurs, user firmware
34.14.1 INTERRUPT CODE BITS must poll the RXFUL bit of each receive buffer to detect
To simplify the interrupt handling process in user firm- the source of interrupt. In Mode 2, a receive interrupt
ware, the ECAN module encodes a special set of bits. In indicates that the new message is loaded into FIFO.
Mode 0, these bits are ICODE<3:1> in the CANSTAT FIFO can be read by using FIFO Pointer bits, FP.
register. In Mode 1 and 2, these bits are EICODE<4:0> in
the CANSTAT register. Interrupts are internally prioritized
such that the higher priority interrupts are assigned lower
values. Once the highest priority interrupt condition has
been cleared, the code for the next highest priority inter-
rupt that is pending (if any) will be reflected by the ICODE
bits (see Table 34-4). Note that only those interrupt
sources that have their associated interrupt enable bit set
will be reflected in the ICODE bits.
In Mode 2, when a receive message interrupt occurs,
the EICODE bits will always consist of ‘10000’. User
firmware may use FIFO Pointer bits to actually access
the next available buffer.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 600


PIC18(L)F25/26K83
TABLE 34-4: VALUES FOR ICODE<2:0> 34.14.6.1 Receiver Overflow
ICODE An overflow condition occurs when the MAB has
Interrupt Boolean Expression
<2:0> assembled a valid received message (the message
meets the criteria of the acceptance filters) and the
000 None ERR•WAK•TX0•TX1•TX2•RX0•RX1 receive buffer associated with the filter is not available
for loading of a new message. The associated
001 Error ERR
RXBnOVFL bit in the COMSTAT register will be set to
indicate the overflow condition. This bit must be cleared
010 TXB2 ERR•TX0•TX1•TX2
by the MCU. In mode 0, RXB0 and RXB1 have sepa-
rate overflow bits. In modes 1 and 2, there is one
011 TXB1 ERR•TX0•TX1
shared bit that indicates a receive buffer has over-
flowed, but each buffer must be checked individually.
100 TXB0 ERR•TX0
34.14.6.2 Receiver Warning
101 RXB1 ERR•TX0•TX1•TX2•RX0•RX1
The receive error counter has reached the MCU
110 RXB0 ERR•TX0•TX1•TX2•RX0 warning limit of 96. This is indicated by the RXWARN
bit of the COMSTAT register
111 Wake on ERR•TX0•TX1•TX2•RX0•RX1•WAK
Interrupt 34.14.6.3 Transmitter Warning
Legend: The transmit error counter has reached the MCU
ERR = ERRIF * ERRIE RX0 = RXB0IF * RXB0IE warning limit of 96. This is indicated by the TXWARN bit
TX0 = TXB0IF * TXB0IE RX1 = RXB1IF * RXB1IE of the COMSTAT register.
TX1 = TXB1IF * TXB1IE WAK = WAKIF * WAKIE
TX2 = TXB2IF * TXB2IE 34.14.6.4 Receiver Bus Passive
This will occur when the device has gone to the error-
34.14.4 MESSAGE ERROR INTERRUPT passive state because the receive error counter is
When an error occurs during transmission or reception greater or equal to 128. This is indicated by the RXBP
of a message, the message error flag, IRXIF, will be set bit of the COMSTAT register.
and if the IRXIE bit is set, an interrupt will be generated.
This is intended to be used to facilitate baud rate 34.14.6.5 Transmitter Bus Passive
determination when used in conjunction with Listen This will occur when the device has gone to the error-
Only mode. passive state because the transmit error counter is
greater or equal to 128. This is indicated by the TXBP
34.14.5 BUS ACTIVITY WAKE-UP bit of the COMSTAT register.
INTERRUPT
When the ECAN module is in Sleep mode and the bus
34.14.6.6 Bus-Off
activity wake-up interrupt is enabled, an interrupt will be The transmit error counter has exceeded 255 and the
generated and the WAKIF bit will be set when activity is device has gone to bus-off state. This is indicated by
detected on the CAN bus. This interrupt causes the the TXBO bit of the COMSTAT register.
MCU to exit Sleep mode. The interrupt is reset by the
MCU, clearing the WAKIF bit.

34.14.6 ERROR INTERRUPT


When the CAN module error interrupt (ERRIE in PIE5)
is enabled, an interrupt is generated if an overflow con-
dition occurs, or if the error state of the transmitter or
receiver has changed. The error flags in COMSTAT will
indicate one of the following conditions.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 601


PIC18(L)F25/26K83
34.15 CAN Module Registers
Note: Not all CAN registers are available in the
Access Bank.

There are many control and data registers associated


with the CAN module. For convenience, their
descriptions have been grouped into the following
sections:
• Control and Status Registers
• Dedicated Transmit Buffer Registers
• Dedicated Receive Buffer Registers
• Programmable TX/RX and Auto RTR Buffers
• Baud Rate Control Registers
• I/O Control Register
• Interrupt Status and Control Registers
Detailed descriptions of each register and their usage
are described in the following sections.

34.15.1 CAN CONTROL AND STATUS


REGISTERS
The registers described in this section control the
overall operation of the CAN module and show its
operational status.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 602


PIC18(L)F25/26K83

REGISTER 34-1: CANCON: CAN CONTROL REGISTER


R/W-1 R/W-0 R/W-0 R/S-0 R/W-0 R/W-0 R/W-0 U-0
Mode 0
REQOP2 REQOP1 REQOP0 ABAT WIN2 WIN1 WIN0 —

R/W-1 R/W-0 R/W-0 R/S-0 U0 U-0 U-0 U-0


Mode 1
REQOP2 REQOP1 REQOP0 ABAT — — — —

R/W-1 R/W-0 R/W-0 R/S-0 R-0 R-0 R-0 R-0


Mode 2
REQOP2 REQOP1 REQOP0 ABAT FP3 FP2 FP1 FP0
bit 7 bit 0

Legend: S = Settable bit


R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-5 REQOP<2:0>: Request CAN Operation Mode bits


1xx = Requests Configuration mode
011 = Requests Listen Only mode
010 = Requests Loopback mode
001 = Disabled/Sleep mode
000 = Requests Normal mode
bit 4 ABAT: Abort All Pending Transmissions bit
1 = Abort all pending transmissions (in all transmit buffers)(1)
0 = Transmissions proceeding as normal
bit 3-1 Mode 0:
WIN<2:0>: Window Address bits
These bits select which of the CAN buffers to switch into the Access Bank area. This allows access to the
buffer registers from any data memory bank. After a frame has caused an interrupt, the ICODE<3:0> bits
can be copied to the WIN<2:0> bits to select the correct buffer. See Example 34-2 for a code example.
111 = Receive Buffer 0
110 = Receive Buffer 0
101 = Receive Buffer 1
100 = Transmit Buffer 0
011 = Transmit Buffer 1
010 = Transmit Buffer 2
001 = Receive Buffer 0
000 = Receive Buffer 0
bit 0 Mode 0:
Unimplemented: Read as ‘0’
bit 4-0 Mode 1:
Unimplemented: Read as ‘0’
Mode 2:
FP<3:0>: FIFO Read Pointer bits
These bits point to the message buffer to be read.
0000 = Receive Message Buffer 0
0001 = Receive Message Buffer 1
0010 = Receive Message Buffer 2
0011 = Receive Message Buffer 3
0100 = Receive Message Buffer 4
0101 = Receive Message Buffer 5
0110 = Receive Message Buffer 6
0111 = Receive Message Buffer 7
1000:1111 Reserved

Note 1: This bit will clear when all transmissions are aborted.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 603


PIC18(L)F25/26K83

REGISTER 34-2: CANSTAT: CAN STATUS REGISTER


R-1 R-0 R-0 R-0 R-0 R-0 R-0 U-0
Mode 0
OPMODE2(1) OPMODE1(1) OPMODE0(1) — ICODE2 ICODE1 ICODE0 —

R-1 R-0 R-0 R-0 R-0 R-0 R-0 R-0


Mode 1,2 (1) (1) (1)
OPMODE2 OPMODE1 OPMODE0 EICODE4 EICODE3 EICODE2 EICODE1 EICODE0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-5 OPMODE<2:0>: Operation Mode Status bits(1)


111 = Reserved
110 = Reserved
101 = Reserved
100 = Configuration mode
011 = Listen Only mode
010 = Loopback mode
001 = Disable/Sleep mode
000 = Normal mode
bit 4 Mode 0:
Unimplemented: Read as ‘0’
bit 3-1,4-0 Mode 0:
ICODE<2:0>: Interrupt Code bits
When an interrupt occurs, a prioritized coded interrupt value will be present in these bits. This code
indicates the source of the interrupt. By copying ICODE<3:1> to WIN<3:0> (Mode 0) or EICODE<4:0>
to EWIN<4:0> (Mode 1 and 2), it is possible to select the correct buffer to map into the Access Bank area.
See Example 34-2 for a code example. To simplify the description, the following table lists all five bits.
Mode 0 Mode 1 Mode 2
No interrupt 00000 00000 00000
CAN bus error interrupt 00010 00010 00010
TXB2 interrupt 00100 00100 00100
TXB1 interrupt 00110 00110 00110
TXB0 interrupt 01000 01000 01000
RXB1 interrupt 01010 10001 -----
RXB0 interrupt 01100 10000 10000
Wake-up interrupt 01110 01110 01110
RXB0 interrupt ----- 10000 10000
RXB1 interrupt ----- 10001 10000
RX/TX B0 interrupt ----- 10010 10010(2)
RX/TX B1 interrupt ----- 10011 10011(2)
RX/TX B2 interrupt ----- 10100 10100(2)
RX/TX B3 interrupt ----- 10101 10101(2)
RX/TX B4 interrupt ----- 10110 10110(2)
RX/TX B5 interrupt ----- 10111 10111(2)
bit 0 Mode 0:
Unimplemented: Read as ‘0’
bit 4-0 Mode 1, 2:
EICODE<4:0>: Interrupt Code bits
See ICODE<3:1> above.

Note 1: To achieve maximum power saving and/or able to wake-up on CAN bus activity, switch the CAN module in
Disable/Sleep mode before putting the device to Sleep.
2: If the buffer is configured as a receiver, the EICODE bits will contain ‘10000’ upon interrupt.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 604


PIC18(L)F25/26K83
EXAMPLE 34-2: CHANGING TO CONFIGURATION MODE
; Request Configuration mode.
MOVLW B’10000000’ ; Set to Configuration Mode.
MOVWF CANCON
; A request to switch to Configuration mode may not be immediately honored.
; Module will wait for CAN bus to be idle before switching to Configuration Mode.
; Request for other modes such as Loopback, Disable etc. may be honored immediately.
; It is always good practice to wait and verify before continuing.
ConfigWait:
MOVF CANSTAT, W ; Read current mode state.
ANDLW B’10000000’ ; Interested in OPMODE bits only.
TSTFSZ WREG ; Is it Configuration mode yet?
BRA ConfigWait ; No. Continue to wait...
; Module is in Configuration mode now.
; Modify configuration registers as required.
; Switch back to Normal mode to be able to communicate.

EXAMPLE 34-3: WIN AND ICODE BITS USAGE IN INTERRUPT SERVICE ROUTINE TO ACCESS
TX/RX BUFFERS
; Save application required context.
; Poll interrupt flags and determine source of interrupt
; This was found to be CAN interrupt
; TempCANCON and TempCANSTAT are variables defined in Access Bank low
MOVFF CANCON, TempCANCON ; Save CANCON.WIN bits
; This is required to prevent CANCON
; from corrupting CAN buffer access
; in-progress while this interrupt
; occurred
MOVFF CANSTAT, TempCANSTAT ; Save CANSTAT register
; This is required to make sure that
; we use same CANSTAT value rather
; than one changed by another CAN
; interrupt.
MOVF TempCANSTAT, W ; Retrieve ICODE bits
ANDLW B’00001110’
ADDWF PCL, F ; Perform computed GOTO
; to corresponding interrupt cause
BRA NoInterrupt ; 000 = No interrupt
BRA ErrorInterrupt ; 001 = Error interrupt
BRA TXB2Interrupt ; 010 = TXB2 interrupt
BRA TXB1Interrupt ; 011 = TXB1 interrupt
BRA TXB0Interrupt ; 100 = TXB0 interrupt
BRA RXB1Interrupt ; 101 = RXB1 interrupt
BRA RXB0Interrupt ; 110 = RXB0 interrupt
; 111 = Wake-up on interrupt
WakeupInterrupt
BCF PIR3, WAKIF ; Clear the interrupt flag
;
; User code to handle wake-up procedure
;
;
; Continue checking for other interrupt source or return from here

NoInterrupt
… ; PC should never vector here. User may
; place a trap such as infinite loop or pin/port
; indication to catch this error.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 605


PIC18(L)F25/26K83
EXAMPLE 34-2: WIN AND ICODE BITS USAGE IN INTERRUPT SERVICE ROUTINE TO ACCESS
TX/RX BUFFERS (CONTINUED)
ErrorInterrupt
BCF PIR3, ERRIF ; Clear the interrupt flag
… ; Handle error.
RETFIE
TXB2Interrupt
BCF PIR3, TXB2IF ; Clear the interrupt flag
GOTO AccessBuffer
TXB1Interrupt
BCF PIR3, TXB1IF ; Clear the interrupt flag
GOTO AccessBuffer
TXB0Interrupt
BCF PIR3, TXB0IF ; Clear the interrupt flag
GOTO AccessBuffer
RXB1Interrupt
BCF PIR3, RXB1IF ; Clear the interrupt flag
GOTO Accessbuffer
RXB0Interrupt
BCF PIR3, RXB0IF ; Clear the interrupt flag
GOTO AccessBuffer
AccessBuffer ; This is either TX or RX interrupt
; Copy CANSTAT.ICODE bits to CANCON.WIN bits
MOVF TempCANCON, W ; Clear CANCON.WIN bits before copying
; new ones.
ANDLW B’11110001’ ; Use previously saved CANCON value to
; make sure same value.
MOVWF TempCANCON ; Copy masked value back to TempCANCON
MOVF TempCANSTAT, W ; Retrieve ICODE bits
ANDLW B’00001110’ ; Use previously saved CANSTAT value
; to make sure same value.
IORWF TempCANCON ; Copy ICODE bits to WIN bits.
MOVFF TempCANCON, CANCON ; Copy the result to actual CANCON
; Access current buffer…
; User code
; Restore CANCON.WIN bits
MOVF CANCON, W ; Preserve current non WIN bits
ANDLW B’11110001’
IORWF TempCANCON ; Restore original WIN bits
; Do not need to restore CANSTAT - it is read-only register.
; Return from interrupt or check for another module interrupt source

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 606


PIC18(L)F25/26K83

REGISTER 34-3: ECANCON: ENHANCED CAN CONTROL REGISTER


R/W-0 R/W-0 R/W-0 R/W-1 R/W-0 R/W-0 R/W-0 R/W-0
MDSEL1(1) MDSEL0(1) FIFOWM(2) EWIN4 EWIN3 EWIN2 EWIN1 EWIN0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-6 MDSEL<1:0>: Mode Select bits(1)


00 = Legacy mode (Mode 0, default)
01 = Enhanced Legacy mode (Mode 1)
10 = Enhanced FIFO mode (Mode 2)
11 = Reserved
bit 5 FIFOWM: FIFO High Water Mark bit(2)
1 = Will cause FIFO interrupt when one receive buffer remains
0 = Will cause FIFO interrupt when four receive buffers remain(3)
bit 4-0 EWIN<4:0>: Enhanced Window Address bits
These bits map the group of 16 banked CAN SFRs into Access Bank addresses, 0F60-0F6Dh. The
exact group of registers to map is determined by the binary value of these bits.
Mode 0:
Unimplemented: Read as ‘0’
Mode 1, 2:
00000 = Acceptance Filters 0, 1, 2 and BRGCON2, 3
00001 = Acceptance Filters 3, 4, 5 and BRGCON1, CIOCON
00010 = Acceptance Filter Masks, Error and Interrupt Control
00011 = Transmit Buffer 0
00100 = Transmit Buffer 1
00101 = Transmit Buffer 2
00110 = Acceptance Filters 6, 7, 8
00111 = Acceptance Filters 9, 10, 11
01000 = Acceptance Filters 12, 13, 14
01001 = Acceptance Filter 15
01010-01110 = Reserved
01111 = RXINT0, RXINT1
10000 = Receive Buffer 0
10001 = Receive Buffer 1
10010 = TX/RX Buffer 0
10011 = TX/RX Buffer 1
10100 = TX/RX Buffer 2
10101 = TX/RX Buffer 3
10110 = TX/RX Buffer 4
10111 = TX/RX Buffer 5
11000-11111 = Reserved

Note 1: These bits can only be changed in Configuration mode. See Register 34-1 to change to Configuration mode.
2: This bit is used in Mode 2 only.
3: If FIFO is configured to contain four or less buffers, then the FIFO interrupt will trigger.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 607


PIC18(L)F25/26K83

REGISTER 34-4: COMSTAT: COMMUNICATION STATUS REGISTER


R/C-0 R/C-0 R-0 R-0 R-0 R-0 R-0 R-0
Mode 0
RXB0OVFL RXB1OVFL TXBO TXBP RXBP TXWARN RXWARN EWARN

R/C-0 R/C-0 R-0 R-0 R-0 R-0 R-0 R-0


Mode 1
— RXBnOVFL TXB0 TXBP RXBP TXWARN RXWARN EWARN

R/C-0 R/C-0 R-0 R-0 R-0 R-0 R-0 R-0


Mode 2
FIFOEMPTY RXBnOVFL TXBO TXBP RXBP TXWARN RXWARN EWARN
bit 7 bit 0

Legend: C = Clearable bit


R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 Mode 0:
RXB0OVFL: Receive Buffer 0 Overflow bit
1 = Receive Buffer 0 has overflowed
0 = Receive Buffer 0 has not overflowed
Mode 1:
Unimplemented: Read as ‘0’
Mode 2:
FIFOEMPTY: FIFO Not Empty bit
1 = Receive FIFO is not empty
0 = Receive FIFO is empty
bit 6 Mode 0:
RXB1OVFL: Receive Buffer 1 Overflow bit
1 = Receive Buffer 1 has overflowed
0 = Receive Buffer 1 has not overflowed
Mode 1, 2:
RXBnOVFL: Receive Buffer n Overflow bit
1 = Receive Buffer n has overflowed
0 = Receive Buffer n has not overflowed
bit 5 TXBO: Transmitter Bus-Off bit
1 = Transmit error counter > 255
0 = Transmit error counter 255
bit 4 TXBP: Transmitter Bus Passive bit
1 = Transmit error counter > 127
0 = Transmit error counter 127
bit 3 RXBP: Receiver Bus Passive bit
1 = Receive error counter > 127
0 = Receive error counter 127
bit 2 TXWARN: Transmitter Warning bit
1 = Transmit error counter > 95
0 = Transmit error counter 95
bit 1 RXWARN: Receiver Warning bit
1 = 127  Receive error counter > 95
0 = Receive error counter  95
bit 0 EWARN: Error Warning bit
This bit is a flag of the RXWARN and TXWARN bits.
1 = The RXWARN or the TXWARN bits are set
0 = Neither the RXWARN or the TXWARN bits are set

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 608


PIC18(L)F25/26K83
34.15.2 DEDICATED CAN TRANSMIT
BUFFER REGISTERS
This section describes the dedicated CAN Transmit
Buffer registers and their associated control registers.

REGISTER 34-5: TXBnCON: TRANSMIT BUFFER n CONTROL REGISTERS [0  n  2]


RC-0 R-0 R-0 R-0 R/W-0 U-0 R/W-0 R/W-0
TXBIF TXABT(1) TXLARB(1) TXERR(1) TXREQ(2) — TXPRI1(3) TXPRI0(3)
bit 7 bit 0

Legend: C = Clearable bit


R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 TXBIF: Transmit Buffer Interrupt Flag bit


1 = Transmit buffer has completed transmission of a message and may be reloaded
0 = Transmit buffer has not completed transmission of a message
bit 6 TXABT: Transmission Aborted Status bit(1)
1 = Message was aborted
0 = Message was not aborted
bit 5 TXLARB: Transmission Lost Arbitration Status bit(1)
1 = Message lost arbitration while being sent
0 = Message did not lose arbitration while being sent
bit 4 TXERR: Transmission Error Detected Status bit(1)
1 = A bus error occurred while the message was being sent
0 = A bus error did not occur while the message was being sent
bit 3 TXREQ: Transmit Request Status bit(2)
1 = Requests sending a message; clears the TXABT, TXLARB and TXERR bits
0 = Automatically cleared when the message is successfully sent
bit 2 Unimplemented: Read as ‘0’
bit 1-0 TXPRI<1:0>: Transmit Priority bits(3)
11 = Priority Level 3 (highest priority)
10 = Priority Level 2
01 = Priority Level 1
00 = Priority Level 0 (lowest priority)

Note 1: This bit is automatically cleared when TXREQ is set.


2: While TXREQ is set, Transmit Buffer registers remain read-only. Clearing this bit in software while the bit is
set will request a message abort.
3: These bits define the order in which transmit buffers will be transferred. They do not alter the CAN
message identifier.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 609


PIC18(L)F25/26K83

REGISTER 34-6: TXBnSIDH: TRANSMIT BUFFER ‘n’ STANDARD IDENTIFIER REGISTERS,


HIGH BYTE [0  n  2]
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 SID<10:3>: Standard Identifier bits (if EXIDE (TXBnSIDL<3>) = 0)


Extended Identifier bits, EID<28:21> (if EXIDE = 1).

REGISTER 34-7: TXBnSIDL: TRANSMIT BUFFER ‘n’ STANDARD IDENTIFIER REGISTERS,


LOW BYTE [0  n  2]
R/W-x R/W-x R/W-x U-0 R/W-x U-0 R/W-x R/W-x
SID2 SID1 SID0 — EXIDE — EID17 EID16
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-5 SID<2:0>: Standard Identifier bits (if EXIDE (TXBnSIDL<3>) = 0)


Extended Identifier bits, EID<20:18> (if EXIDE = 1).
bit 4 Unimplemented: Read as ‘0’
bit 3 EXIDE: Extended Identifier Enable bit
1 = Message will transmit extended ID, SID<10:0> become EID<28:18>
0 = Message will transmit standard ID, EID<17:0> are ignored
bit 2 Unimplemented: Read as ‘0’
bit 1-0 EID<17:16>: Extended Identifier bits

REGISTER 34-8: TXBnEIDH: TRANSMIT BUFFER ‘n’ EXTENDED IDENTIFIER REGISTERS,


HIGH BYTE [0  n  2]
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 EID<15:8>: Extended Identifier bits (not used when transmitting standard identifier message)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 610


PIC18(L)F25/26K83

REGISTER 34-9: TXBnEIDL: TRANSMIT BUFFER ‘n’ EXTENDED IDENTIFIER REGISTERS,


LOW BYTE [0  n  2]
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 EID<7:0>: Extended Identifier bits (not used when transmitting standard identifier message)

REGISTER 34-10: TXBnDm: TRANSMIT BUFFER ‘n’ DATA FIELD BYTE ‘m’ REGISTERS
[0  n  2, 0  m  7]
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
TXBnDm7 TXBnDm6 TXBnDm5 TXBnDm4 TXBnDm3 TXBnDm2 TXBnDm1 TXBnDm0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 TXBnDm<7:0>: Transmit Buffer n Data Field Byte m bits (where 0 n < 3 and 0 m < 8)
Each transmit buffer has an array of registers. For example, Transmit Buffer 0 has 7 registers: TXB0D0
to TXB0D7.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 611


PIC18(L)F25/26K83

REGISTER 34-11: TXBnDLC: TRANSMIT BUFFER ‘n’ DATA LENGTH CODE REGISTERS [0  n  2]
U-0 R/W-x U-0 U-0 R/W-x R/W-x R/W-x R/W-x
— TXRTR — — DLC3 DLC2 DLC1 DLC0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 Unimplemented: Read as ‘0’


bit 6 TXRTR: Transmit Remote Frame Transmission Request bit
1 = Transmitted message will have the TXRTR bit set
0 = Transmitted message will have the TXRTR bit cleared
bit 5-4 Unimplemented: Read as ‘0’
bit 3-0 DLC<3:0>: Data Length Code bits
1111 = Reserved
1110 = Reserved
1101 = Reserved
1100 = Reserved
1011 = Reserved
1010 = Reserved
1001 = Reserved
1000 = Data length = 8 bytes
0111 = Data length = 7 bytes
0110 = Data length = 6 bytes
0101 = Data length = 5 bytes
0100 = Data length = 4 bytes
0011 = Data length = 3 bytes
0010 = Data length = 2 bytes
0001 = Data length = 1 bytes
0000 = Data length = 0 bytes

REGISTER 34-12: TXERRCNT: TRANSMIT ERROR COUNT REGISTER


R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
TEC7 TEC6 TEC5 TEC4 TEC3 TEC2 TEC1 TEC0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 TEC<7:0>: Transmit Error Counter bits


This register contains a value which is derived from the rate at which errors occur. When the error
count overflows, the bus-off state occurs. When the bus has 128 occurrences of 11 consecutive
recessive bits, the counter value is cleared.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 612


PIC18(L)F25/26K83
EXAMPLE 34-3: TRANSMITTING A CAN MESSAGE USING BANKED METHOD
; Need to transmit Standard Identifier message 123h using TXB0 buffer.
; To successfully transmit, CAN module must be either in Normal or Loopback mode.
; TXB0 buffer is not in access bank. And since we want banked method, we need to make sure
; that correct bank is selected.
BANKSEL TXB0CON ; One BANKSEL in beginning will make sure that we are
; in correct bank for rest of the buffer access.
; Now load transmit data into TXB0 buffer.
MOVLW MY_DATA_BYTE1 ; Load first data byte into buffer
MOVWF TXB0D0 ; Compiler will automatically set “BANKED” bit
; Load rest of data bytes - up to 8 bytes into TXB0 buffer.
...
; Load message identifier
MOVLW 60H ; Load SID2:SID0, EXIDE = 0
MOVWF TXB0SIDL
MOVLW 24H ; Load SID10:SID3
MOVWF TXB0SIDH
; No need to load TXB0EIDL:TXB0EIDH, as we are transmitting Standard Identifier Message only.

; Now that all data bytes are loaded, mark it for transmission.
MOVLW B’00001000’ ; Normal priority; Request transmission
MOVWF TXB0CON

; If required, wait for message to get transmitted


BTFSC TXB0CON, TXREQ ; Is it transmitted?
BRA $-2 ; No. Continue to wait...

; Message is transmitted.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 613


PIC18(L)F25/26K83
EXAMPLE 34-4: TRANSMITTING A CAN MESSAGE USING WIN BITS
; Need to transmit Standard Identifier message 123h using TXB0 buffer.
; To successfully transmit, CAN module must be either in Normal or Loopback mode.
; TXB0 buffer is not in access bank. Use WIN bits to map it to RXB0 area.
MOVF CANCON, W ; WIN bits are in lower 4 bits only. Read CANCON
; register to preserve all other bits. If operation
; mode is already known, there is no need to preserve
; other bits.
ANDLW B’11110000’ ; Clear WIN bits.
IORLW B’00001000’ ; Select Transmit Buffer 0
MOVWF CANCON ; Apply the changes.
; Now TXB0 is mapped in place of RXB0. All future access to RXB0 registers will actually
; yield TXB0 register values.

; Load transmit data into TXB0 buffer.


MOVLW MY_DATA_BYTE1 ; Load first data byte into buffer
MOVWF RXB0D0 ; Access TXB0D0 via RXB0D0 address.
; Load rest of the data bytes - up to 8 bytes into “TXB0” buffer using RXB0 registers.
...
; Load message identifier
MOVLW 60H ; Load SID2:SID0, EXIDE = 0
MOVWF RXB0SIDL
MOVLW 24H ; Load SID10:SID3
MOVWF RXB0SIDH
; No need to load RXB0EIDL:RXB0EIDH, as we are transmitting Standard Identifier Message only.

; Now that all data bytes are loaded, mark it for transmission.
MOVLW B’00001000’ ; Normal priority; Request transmission
MOVWF RXB0CON

; If required, wait for message to get transmitted


BTFSC RXB0CON, TXREQ ; Is it transmitted?
BRA $-2 ; No. Continue to wait...

; Message is transmitted.
; If required, reset the WIN bits to default state.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 614


PIC18(L)F25/26K83
34.15.3 DEDICATED CAN RECEIVE
BUFFER REGISTERS
This section shows the dedicated CAN Receive Buffer
registers with their associated control registers.

REGISTER 34-13: RXB0CON: RECEIVE BUFFER 0 CONTROL REGISTER


R/C-0 R/W-0 R/W-0 U-0 R-0 R/W-0 R-0 R-0
Mode 0
RXFUL(1) RXM1 RXM0 — RXRTRRO RXB0DBEN JTOFF(2) FILHIT0

R/C-0 R/W-0 R-0 R-0 R-0 R-0 R-0 R-0


Mode 1,2
RXFUL(1) RXM1 RTRRO FILHITF4 FILHIT3 FILHIT2 FILHIT1 FILHIT0
bit 7 bit 0

Legend: C = Clearable bit


R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 RXFUL: Receive Full Status bit(1)


1 = Receive buffer contains a received message
0 = Receive buffer is open to receive a new message
bit 6,6-5 Mode 0:
RXM<1:0>: Receive Buffer Mode bit 1 (combines with RXM0 to form RXM<1:0> bits, see bit 5)
11 = Receive all messages (including those with errors); filter criteria is ignored
10 = Receive only valid messages with extended identifier; EXIDEN in RXFnSIDL must be ‘1’
01 = Receive only valid messages with standard identifier; EXIDEN in RXFnSIDL must be ‘0’
00 = Receive all valid messages as per the EXIDEN bit in the RXFnSIDL register
Mode 1, 2:
RXM1: Receive Buffer Mode bit 1
1 = Receive all messages (including those with errors); acceptance filters are ignored
0 = Receive all valid messages as per acceptance filters
bit 5 Mode 0:
RXM0: Receive Buffer Mode bit 0 (combines with RXM1 to form RXM<1:0>bits, see bit 6)
Mode 1, 2:
RTRRO: Remote Transmission Request bit for Received Message (read-only)
1 = A remote transmission request is received
0 = A remote transmission request is not received
bit 4 Mode 0:
Unimplemented: Read as ‘0’
Mode 1, 2:
FILHIT<4:0>: Filter Hit bit 4
This bit combines with other bits to form filter acceptance bits<4:0>.
bit 3 Mode 0:
RXRTRRO: Remote Transmission Request bit for Received Message (read-only)
1 = A remote transmission request is received
0 = A remote transmission request is not received
Mode 1, 2:
FILHIT<4:0>: Filter Hit bit 3
This bit combines with other bits to form filter acceptance bits<4:0>.

Note 1: This bit is set by the CAN module upon receiving a message and must be cleared by software after the
buffer is read. As long as RXFUL is set, no new message will be loaded and the buffer will be considered
full. After clearing the RXFUL flag, the PIR5 bit, RXB0IF, can be cleared. If RXB0IF is cleared, but RXFUL
is not cleared, then RXB0IF is set again.
2: This bit allows the same filter jump table for both RXB0CON and RXB1CON.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 615


PIC18(L)F25/26K83
REGISTER 34-13: RXB0CON: RECEIVE BUFFER 0 CONTROL REGISTER (CONTINUED)
bit 2 Mode 0:
RB0DBEN: Receive Buffer 0 Double-Buffer Enable bit
1 = Receive Buffer 0 overflow will write to Receive Buffer 1
0 = No Receive Buffer 0 overflow to Receive Buffer 1
Mode 1, 2:
FILHIT<4:0>: Filter Hit bit 2
This bit combines with other bits to form filter acceptance bits<4:0>.
bit 1 Mode 0:
JTOFF: Jump Table Offset bit (read-only copy of RXB0DBEN)(2)
1 = Allows jump table offset between 6 and 7
0 = Allows jump table offset between 1 and 0
Mode 1, 2:
FILHIT<4:0>: Filter Hit bit 1
This bit combines with other bits to form filter acceptance bits<4:0>.
bit 0 Mode 0:
FILHIT0: Filter Hit bit 0
This bit indicates which acceptance filter enabled the message reception into Receive Buffer 0.
1 = Acceptance Filter 1 (RXF1)
0 = Acceptance Filter 0 (RXF0)
Mode 1, 2:
FILHIT<4:0>: Filter Hit bit 0
This bit, in combination with FILHIT<4:1>, indicates which acceptance filter enabled the message reception
into this receive buffer.
01111 = Acceptance Filter 15 (RXF15)
01110 = Acceptance Filter 14 (RXF14)
...
00000 = Acceptance Filter 0 (RXF0)

Note 1: This bit is set by the CAN module upon receiving a message and must be cleared by software after the
buffer is read. As long as RXFUL is set, no new message will be loaded and the buffer will be considered
full. After clearing the RXFUL flag, the PIR5 bit, RXB0IF, can be cleared. If RXB0IF is cleared, but RXFUL
is not cleared, then RXB0IF is set again.
2: This bit allows the same filter jump table for both RXB0CON and RXB1CON.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 616


PIC18(L)F25/26K83
REGISTER 34-14: RXB1CON: RECEIVE BUFFER 1 CONTROL REGISTER
R/C-0 R/W-0 R/W-0 U-0 R-0 R/W-0 R-0 R-0
Mode 0 (1)
RXFUL RXM1 RXM0 — RXRTRRO FILHIT2 FILHIT1 FILHIT0

R/C-0 R/W-0 R-0 R-0 R-0 R-0 R-0 R-0


Mode 1,2 (1)
RXFUL RXM1 RTRRO FILHIT4 FILHIT3 FILHIT2 FILHIT1 FILHIT0
bit 7 bit 0

Legend: C = Clearable bit


R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 RXFUL: Receive Full Status bit(1)


1 = Receive buffer contains a received message
0 = Receive buffer is open to receive a new message
bit 6-5, 6 Mode 0:
RXM<1:0>: Receive Buffer Mode bit 1 (combines with RXM0 to form RXM<1:0> bits, see bit 5)
11 = Receive all messages (including those with errors); filter criteria is ignored
10 = Receive only valid messages with extended identifier; EXIDEN in RXFnSIDL must be ‘1’
01 = Receive only valid messages with standard identifier, EXIDEN in RXFnSIDL must be ‘0’
00 = Receive all valid messages as per EXIDEN bit in RXFnSIDL register
Mode 1, 2:
RXM1: Receive Buffer Mode bit
1 = Receive all messages (including those with errors); acceptance filters are ignored
0 = Receive all valid messages as per acceptance filters
bit 5 Mode 0:
RXM<1:0>: Receive Buffer Mode bit 0 (combines with RXM1 to form RXM<1:0> bits, see bit 6)
Mode 1, 2:
RTRRO: Remote Transmission Request bit for Received Message (read-only)
1 = A remote transmission request is received
0 = A remote transmission request is not received
bit 4 Mode 0:
FILHIT24: Filter Hit bit 4
Mode 1, 2:
FILHIT<4:0>: Filter Hit bit 4
This bit combines with other bits to form the filter acceptance bits<4:0>.
bit 3 Mode 0:
RXRTRRO: Remote Transmission Request bit for Received Message (read-only)
1 = A remote transmission request is received
0 = A remote transmission request is not received
Mode 1, 2:
FILHIT<4:0>: Filter Hit bit 3
This bit combines with other bits to form the filter acceptance bits<4:0>.

Note 1: This bit is set by the CAN module upon receiving a message and must be cleared by software after the buffer
is read. As long as RXFUL is set, no new message will be loaded and the buffer will be considered full.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 617


PIC18(L)F25/26K83
REGISTER 34-14: RXB1CON: RECEIVE BUFFER 1 CONTROL REGISTER (CONTINUED)
bit 2-0 Mode 0:
FILHIT<2:0>: Filter Hit bits
These bits indicate which acceptance filter enabled the last message reception into Receive Buffer 1.
111 = Reserved
110 = Reserved
101 = Acceptance Filter 5 (RXF5)
100 = Acceptance Filter 4 (RXF4)
011 = Acceptance Filter 3 (RXF3)
010 = Acceptance Filter 2 (RXF2)
001 = Acceptance Filter 1 (RXF1), only possible when RXB0DBEN bit is set
000 = Acceptance Filter 0 (RXF0), only possible when RXB0DBEN bit is set
Mode 1, 2:
FILHIT<4:0>: Filter Hit bits<2:0>
These bits, in combination with FILHIT<4:3>, indicate which acceptance filter enabled the message
reception into this receive buffer.
01111 = Acceptance Filter 15 (RXF15)
01110 = Acceptance Filter 14 (RXF14)
...
00000 = Acceptance Filter 0 (RXF0)

Note 1: This bit is set by the CAN module upon receiving a message and must be cleared by software after the buffer
is read. As long as RXFUL is set, no new message will be loaded and the buffer will be considered full.

REGISTER 34-15: RXBnSIDH: RECEIVE BUFFER ‘n’ STANDARD IDENTIFIER REGISTERS,


HIGH BYTE [0  n  1]
R-x R-x R-x R-x R-x R-x R-x R-x
SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 SID<10:3>: Standard Identifier bits (if EXID (RXBnSIDL<3>) = 0)


Extended Identifier bits, EID<28:21> (if EXID = 1).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 618


PIC18(L)F25/26K83

REGISTER 34-16: RXBnSIDL: RECEIVE BUFFER ‘n’ STANDARD IDENTIFIER REGISTERS,


LOW BYTE [0  n  1]
R-x R-x R-x R-x R-x U-0 R-x R-x
SID2 SID1 SID0 SRR EXID — EID17 EID16
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-5 SID<2:0>: Standard Identifier bits (if EXID = 0)


Extended Identifier bits, EID<20:18> (if EXID = 1).
bit 4 SRR: Substitute Remote Request bit
bit 3 EXID: Extended Identifier bit
1 = Received message is an extended data frame, SID<10:0> are EID<28:18>
0 = Received message is a standard data frame
bit 2 Unimplemented: Read as ‘0’
bit 1-0 EID<17:16>: Extended Identifier bits

REGISTER 34-17: RXBnEIDH: RECEIVE BUFFER ‘n’ EXTENDED IDENTIFIER REGISTERS,


HIGH BYTE [0  n  1]
R-x R-x R-x R-x R-x R-x R-x R-x
EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 EID<15:8>: Extended Identifier bits

REGISTER 34-18: RXBnEIDL: RECEIVE BUFFER ‘n’ EXTENDED IDENTIFIER REGISTERS,


LOW BYTE [0  n  1]
R-x R-x R-x R-x R-x R-x R-x R-x
EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 EID<7:0>: Extended Identifier bits

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 619


PIC18(L)F25/26K83

REGISTER 34-19: RXBnDLC: RECEIVE BUFFER ‘n’ DATA LENGTH CODE REGISTERS [0  n  1]
U-0 R-x R-x R-x R-x R-x R-x R-x
— RXRTR RB1 RB0 DLC3 DLC2 DLC1 DLC0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 Unimplemented: Read as ‘0’


bit 6 RXRTR: Receiver Remote Transmission Request bit
1 = Remote transfer request
0 = No remote transfer request
bit 5 RB1: Reserved bit 1
Reserved by CAN Spec and read as ‘0’.
bit 4 RB0: Reserved bit 0
Reserved by CAN Spec and read as ‘0’.
bit 3-0 DLC<3:0>: Data Length Code bits
1111 = Invalid
1110 = Invalid
1101 = Invalid
1100 = Invalid
1011 = Invalid
1010 = Invalid
1001 = Invalid
1000 = Data length = 8 bytes
0111 = Data length = 7 bytes
0110 = Data length = 6 bytes
0101 = Data length = 5 bytes
0100 = Data length = 4 bytes
0011 = Data length = 3 bytes
0010 = Data length = 2 bytes
0001 = Data length = 1 byte
0000 = Data length = 0 bytes

REGISTER 34-20: RXBnDm: RECEIVE BUFFER ‘n’ DATA FIELD BYTE ‘m’ REGISTERS
[0  n  1, 0  m  7]
R-x R-x R-x R-x R-x R-x R-x R-x
RXBnDm7 RXBnDm6 RXBnDm5 RXBnDm4 RXBnDm3 RXBnDm2 RXBnDm1 RXBnDm0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 RXBnDm<7:0>: Receive Buffer n Data Field Byte m bits (where 0 n < 1 and 0 < m < 7)
Each receive buffer has an array of registers. For example, Receive Buffer 0 has eight registers:
RXB0D0 to RXB0D7.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 620


PIC18(L)F25/26K83

REGISTER 34-21: RXERRCNT: RECEIVE ERROR COUNT REGISTER


R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0
REC7 REC6 REC5 REC4 REC3 REC2 REC1 REC0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 REC<7:0>: Receive Error Counter bits


This register contains the receive error value as defined by the CAN specifications. When
RXERRCNT > 127, the module will go into an error-passive state. RXERRCNT does not have the
ability to put the module in “bus-off” state.

EXAMPLE 34-5: READING A CAN MESSAGE


; Need to read a pending message from RXB0 buffer.
; To receive any message, filter, mask and RXM1:RXM0 bits in RXB0CON registers must be
; programmed correctly.
;
; Make sure that there is a message pending in RXB0.
BTFSS RXB0CON, RXFUL ; Does RXB0 contain a message?
BRA NoMessage ; No. Handle this situation...
; We have verified that a message is pending in RXB0 buffer.
; If this buffer can receive both Standard or Extended Identifier messages,
; identify type of message received.
BTFSS RXB0SIDL, EXID ; Is this Extended Identifier?
BRA StandardMessage ; No. This is Standard Identifier message.
; Yes. This is Extended Identifier message.
; Read all 29-bits of Extended Identifier message.
...
; Now read all data bytes
MOVFF RXB0DO, MY_DATA_BYTE1
...
; Once entire message is read, mark the RXB0 that it is read and no longer FULL.
BCF RXB0CON, RXFUL ; This will allow CAN Module to load new messages
; into this buffer.
...

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 621


PIC18(L)F25/26K83
34.15.3.1 Programmable TX/RX and
Auto-RTR Buffers
The ECAN module contains six message buffers that
can be programmed as transmit or receive buffers. Any
of these buffers can also be programmed to automati-
cally handle RTR messages.
Note: These registers are not used in Mode 0.

REGISTER 34-22: BnCON: TX/RX BUFFER ‘n’ CONTROL REGISTERS IN RECEIVE MODE
[0  n  5, TXnEN (BSEL0<n>) = 0](1)
R/W-0 R/W-0 R-0 R-0 R-0 R-0 R-0 R-0
(2)
RXFUL RXM1 RXRTRRO FILHIT4 FILHIT3 FILHIT2 FILHIT1 FILHIT0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 RXFUL: Receive Full Status bit(2)


1 = Receive buffer contains a received message
0 = Receive buffer is open to receive a new message
bit 6 RXM1: Receive Buffer Mode bit
1 = Receive all messages including partial and invalid (acceptance filters are ignored)
0 = Receive all valid messages as per acceptance filters
bit 5 RXRTRRO: Read-Only Remote Transmission Request for Received Message bit
1 = Received message is a remote transmission request
0 = Received message is not a remote transmission request
bit 4-0 FILHIT<4:0>: Filter Hit bits
These bits indicate which acceptance filter enabled the last message reception into this buffer.
01111 = Acceptance Filter 15 (RXF15)
01110 = Acceptance Filter 14 (RXF14)
...
00001 = Acceptance Filter 1 (RXF1)
00000 = Acceptance Filter 0 (RXF0)

Note 1: These registers are available in Mode 1 and 2 only.


2: This bit is set by the CAN module upon receiving a message and must be cleared by software after the
buffer is read. As long as RXFUL is set, no new message will be loaded and the buffer will be considered
full.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 622


PIC18(L)F25/26K83

REGISTER 34-23: BnCON: TX/RX BUFFER ‘n’ CONTROL REGISTERS IN TRANSMIT MODE
[0  n  5, TXnEN (BSEL0<n>) = 1](1)
R/W-0 R-0 R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0
TXBIF(3) TXABT(3) TXLARB(3) TXERR(3) TXREQ(2,4) RTREN TXPRI1(5) TXPRI0(5)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 TXBIF: Transmit Buffer Interrupt Flag bit(3)


1 = A message was successfully transmitted
0 = No message was transmitted
bit 6 TXABT: Transmission Aborted Status bit(3)
1 = Message was aborted
0 = Message was not aborted
bit 5 TXLARB: Transmission Lost Arbitration Status bit(3)
1 = Message lost arbitration while being sent
0 = Message did not lose arbitration while being sent
bit 4 TXERR: Transmission Error Detected Status bit(3)
1 = A bus error occurred while the message was being sent
0 = A bus error did not occur while the message was being sent
bit 3 TXREQ: Transmit Request Status bit(2,4)
1 = Requests sending a message; clears the TXABT, TXLARB and TXERR bits
0 = Automatically cleared when the message is successfully sent
bit 2 RTREN: Automatic Remote Transmission Request Enable bit
1 = When a remote transmission request is received, TXREQ will be automatically set
0 = When a remote transmission request is received, TXREQ will be unaffected
bit 1-0 TXPRI<1:0>: Transmit Priority bits(5)
11 = Priority Level 3 (highest priority)
10 = Priority Level 2
01 = Priority Level 1
00 = Priority Level 0 (lowest priority)

Note 1: These registers are available in Mode 1 and 2 only.


2: Clearing this bit in software while the bit is set will request a message abort.
3: This bit is automatically cleared when TXREQ is set.
4: While TXREQ is set or a transmission is in progress, Transmit Buffer registers remain read-only.
5: These bits set the order in which the Transmit Buffer register will be transferred. They do not alter the CAN
message identifier.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 623


PIC18(L)F25/26K83

REGISTER 34-24: BnSIDH: TX/RX BUFFER ‘n’ STANDARD IDENTIFIER REGISTERS,


HIGH BYTE IN RECEIVE MODE [0  n  5, TXnEN (BSEL0<n>) = 0](1)
R-x R-x R-x R-x R-x R-x R-x R-x
SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 SID<10:3>: Standard Identifier bits (if EXIDE (BnSIDL<3>) = 0)


Extended Identifier bits, EID<28:21> (if EXIDE = 1).

Note 1: These registers are available in Mode 1 and 2 only.

REGISTER 34-25: BnSIDH: TX/RX BUFFER ‘n’ STANDARD IDENTIFIER REGISTERS,


HIGH BYTE IN TRANSMIT MODE [0  n  5, TXnEN (BSEL0<n>) = 1](1)
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 SID<10:3>: Standard Identifier bits (if EXIDE (BnSIDL<3>) = 0)


Extended Identifier bits, EID<28:21> (if EXIDE = 1).

Note 1: These registers are available in Mode 1 and 2 only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 624


PIC18(L)F25/26K83

REGISTER 34-26: BnSIDL: TX/RX BUFFER ‘n’ STANDARD IDENTIFIER REGISTERS,


LOW BYTE IN RECEIVE MODE [0  n  5, TXnEN (BSEL0<n>) = 0](1)
R-x R-x R-x R-x R-x U-0 R-x R-x
SID2 SID1 SID0 SRR EXIDE — EID17 EID16
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-5 SID<2:0>: Standard Identifier bits (if EXID = 0)


Extended Identifier bits, EID<20:18> (if EXID = 1).
bit 4 SRR: Substitute Remote Transmission Request bit
This bit is always ‘1’ when EXID = 1 or equal to the value of RXRTRRO (BnCON<5>) when EXID = 0.
bit 3 EXIDE: Extended Identifier Enable bit
1 = Received message is an extended identifier frame (SID<10:0> are EID<28:18>)
0 = Received message is a standard identifier frame
bit 2 Unimplemented: Read as ‘0’
bit 1-0 EID<17:16>: Extended Identifier bits

Note 1: These registers are available in Mode 1 and 2 only.

REGISTER 34-27: BnSIDL: TX/RX BUFFER ‘n’ STANDARD IDENTIFIER REGISTERS,


LOW BYTE IN TRANSMIT MODE [0  n  5, TXnEN (BSEL0<n>) = 1](1)
R/W-x R/W-x R/W-x U-0 R/W-x U-0 R/W-x R/W-x
SID2 SID1 SID0 — EXIDE — EID17 EID16
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-5 SID<2:0>: Standard Identifier bits (if EXIDE (TXBnSIDL<3>) = 0)


Extended Identifier bits, EID<20:18> (if EXIDE = 1).
bit 4 Unimplemented: Read as ‘0’
bit 3 EXIDE: Extended Identifier Enable bit
1 = Message will transmit extended ID, SID<10:0> bits become EID<28:18>
0 = Received will transmit standard ID, EID<17:0> are ignored
bit 2 Unimplemented: Read as ‘0’
bit 1-0 EID<17:16>: Extended Identifier bits

Note 1: These registers are available in Mode 1 and 2 only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 625


PIC18(L)F25/26K83

REGISTER 34-28: BnEIDH: TX/RX BUFFER ‘n’ EXTENDED IDENTIFIER REGISTERS,


HIGH BYTE IN RECEIVE MODE [0  n  5, TXnEN (BSEL0<n>) = 0](1)
R-x R-x R-x R-x R-x R-x R-x R-x
EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 EID<15:8>: Extended Identifier bits

Note 1: These registers are available in Mode 1 and 2 only.

REGISTER 34-29: BnEIDH: TX/RX BUFFER ‘n’ EXTENDED IDENTIFIER REGISTERS,


HIGH BYTE IN TRANSMIT MODE [0  n  5, TXnEN (BSEL0<n>) = 1](1)
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 EID<15:8>: Extended Identifier bits

Note 1: These registers are available in Mode 1 and 2 only.

REGISTER 34-30: BnEIDL: TX/RX BUFFER ‘n’ EXTENDED IDENTIFIER REGISTERS,


LOW BYTE IN RECEIVE MODE [0  n  5, TXnEN (BSEL<n>) = 0](1)
R-x R-x R-x R-x R-x R-x R-x R-x
EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 EID<7:0>: Extended Identifier bits

Note 1: These registers are available in Mode 1 and 2 only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 626


PIC18(L)F25/26K83

REGISTER 34-31: BnEIDL: TX/RX BUFFER ‘n’ EXTENDED IDENTIFIER REGISTERS,


LOW BYTE IN RECEIVE MODE [0  n  5, TXnEN (BSEL<n>) = 1](1)
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
EID7 EID6 EID5 FEID4 EID3 EID2 EID1 EID0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 EID<7:0>: Extended Identifier bits

Note 1: These registers are available in Mode 1 and 2 only.

REGISTER 34-32: BnDm: TX/RX BUFFER ‘n’ DATA FIELD BYTE ‘m’ REGISTERS IN RECEIVE MODE
[0  n  5, 0  m  7, TXnEN (BSEL<n>) = 0](1)
R-x R-x R-x R-x R-x R-x R-x R-x
BnDm7 BnDm6 BnDm5 BnDm4 BnDm3 BnDm2 BnDm1 BnDm0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 BnDm<7:0>: Receive Buffer n Data Field Byte m bits (where 0 n < 3 and 0 < m < 8)
Each receive buffer has an array of registers. For example, Receive Buffer 0 has 7 registers: B0D0 to
B0D7.

Note 1: These registers are available in Mode 1 and 2 only.

REGISTER 34-33: BnDm: TX/RX BUFFER ‘n’ DATA FIELD BYTE ‘m’ REGISTERS IN TRANSMIT MODE
[0  n  5, 0  m  7, TXnEN (BSEL<n>) = 1](1)
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
BnDm7 BnDm6 BnDm5 BnDm4 BnDm3 BnDm2 BnDm1 BnDm0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 BnDm<7:0>: Transmit Buffer n Data Field Byte m bits (where 0 n < 3 and 0 < m < 8)
Each transmit buffer has an array of registers. For example, Transmit Buffer 0 has 7 registers: TXB0D0
to TXB0D7.

Note 1: These registers are available in Mode 1 and 2 only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 627


PIC18(L)F25/26K83

REGISTER 34-34: BnDLC: TX/RX BUFFER ‘n’ DATA LENGTH CODE REGISTERS IN RECEIVE MODE
[0  n  5, TXnEN (BSEL<n>) = 0](1)
U-0 R-x R-x R-x R-x R-x R-x R-x
— RXRTR RB1 RB0 DLC3 DLC2 DLC1 DLC0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 Unimplemented: Read as ‘0’


bit 6 RXRTR: Receiver Remote Transmission Request bit
1 = This is a remote transmission request
0 = This is not a remote transmission request
bit 5 RB1: Reserved bit 1
Reserved by CAN Spec and read as ‘0’.
bit 4 RB0: Reserved bit 0
Reserved by CAN Spec and read as ‘0’.
bit 3-0 DLC<3:0>: Data Length Code bits
1111 = Reserved
1110 = Reserved
1101 = Reserved
1100 = Reserved
1011 = Reserved
1010 = Reserved
1001 = Reserved
1000 = Data length = 8 bytes
0111 = Data length = 7 bytes
0110 = Data length = 6 bytes
0101 = Data length = 5 bytes
0100 = Data length = 4 bytes
0011 = Data length = 3 bytes
0010 = Data length = 2 bytes
0001 = Data length = 1 byte
0000 = Data length = 0 bytes

Note 1: These registers are available in Mode 1 and 2 only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 628


PIC18(L)F25/26K83

REGISTER 34-35: BnDLC: TX/RX BUFFER ‘n’ DATA LENGTH CODE REGISTERS IN TRANSMIT MODE
[0  n  5, TXnEN (BSEL<n>) = 1](1)
U-0 R/W-x U-0 U-0 R/W-x R/W-x R/W-x R/W-x
— TXRTR — — DLC3 DLC2 DLC1 DLC0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 Unimplemented: Read as ‘0’


bit 6 TXRTR: Transmitter Remote Transmission Request bit
1 = Transmitted message will have the RTR bit set
0 = Transmitted message will have the RTR bit cleared
bit 5-4 Unimplemented: Read as ‘0’
bit 3-0 DLC<3:0>: Data Length Code bits
1111-1001 = Reserved
1000 = Data length = 8 bytes
0111 = Data length = 7 bytes
0110 = Data length = 6 bytes
0101 = Data length = 5 bytes
0100 = Data length = 4 bytes
0011 = Data length = 3 bytes
0010 = Data length = 2 bytes
0001 = Data length = 1 byte
0000 = Data length = 0 bytes

Note 1: These registers are available in Mode 1 and 2 only.

REGISTER 34-36: BSEL0: BUFFER SELECT REGISTER 0(1)


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 U-0
B5TXEN B4TXEN B3TXEN B2TXEN B1TXEN B0TXEN — —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-2 B<5:0>TXEN: Buffer 5 to Buffer 0 Transmit Enable bits


1 = Buffer is configured in Transmit mode
0 = Buffer is configured in Receive mode
bit 1-0 Unimplemented: Read as ‘0’

Note 1: These registers are available in Mode 1 and 2 only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 629


PIC18(L)F25/26K83
34.15.3.2 Message Acceptance Filters
and Masks
This section describes the message acceptance filters
and masks for the CAN receive buffers.

REGISTER 34-37: RXFnSIDH: RECEIVE ACCEPTANCE FILTER ‘n’ STANDARD IDENTIFIER FILTER
REGISTERS, HIGH BYTE [0  n  15](1)
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 SID<10:3>: Standard Identifier Filter bits (if EXIDEN = 0)


Extended Identifier Filter bits, EID<28:21> (if EXIDEN = 1).

Note 1: Registers, RXF6SIDH:RXF15SIDH, are available in Mode 1 and 2 only.

REGISTER 34-38: RXFnSIDL: RECEIVE ACCEPTANCE FILTER ‘n’ STANDARD IDENTIFIER FILTER
REGISTERS, LOW BYTE [0  n  15](1)
R/W-x R/W-x R/W-x U-0 R/W-x U-0 R/W-x R/W-x
SID2 SID1 SID0 — EXIDEN(2) — EID17 EID16
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-5 SID<2:0>: Standard Identifier Filter bits (if EXIDEN = 0)


Extended Identifier Filter bits, EID<20:18> (if EXIDEN = 1).
bit 4 Unimplemented: Read as ‘0’
bit 3 EXIDEN: Extended Identifier Filter Enable bit(2)
1 = Filter will only accept extended ID messages
0 = Filter will only accept standard ID messages
bit 2 Unimplemented: Read as ‘0’
bit 1-0 EID<17:16>: Extended Identifier Filter bits

Note 1: Registers, RXF6SIDL:RXF15SIDL, are available in Mode 1 and 2 only.


2: In Mode 0, this bit must be set/cleared as required, irrespective of corresponding mask register value.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 630


PIC18(L)F25/26K83

REGISTER 34-39: RXFnEIDH: RECEIVE ACCEPTANCE FILTER ‘n’ EXTENDED IDENTIFIER


REGISTERS, HIGH BYTE [0  n  15](1)
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 EID<15:8>: Extended Identifier Filter bits

Note 1: Registers, RXF6EIDH:RXF15EIDH, are available in Mode 1 and 2 only.

REGISTER 34-40: RXFnEIDL: RECEIVE ACCEPTANCE FILTER ‘n’ EXTENDED IDENTIFIER


REGISTERS, LOW BYTE [0  n  15](1)
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 EID<7:0>: Extended Identifier Filter bits

Note 1: Registers, RXF6EIDL:RXF15EIDL, are available in Mode 1 and 2 only.

REGISTER 34-41: RXMnSIDH: RECEIVE ACCEPTANCE MASK ‘n’ STANDARD IDENTIFIER MASK
REGISTERS, HIGH BYTE [0  n  1]
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 SID<10:3>: Standard Identifier Mask bits or Extended Identifier Mask bits (EID<28:21>)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 631


PIC18(L)F25/26K83

REGISTER 34-42: RXMnSIDL: RECEIVE ACCEPTANCE MASK ‘n’ STANDARD IDENTIFIER MASK
REGISTERS, LOW BYTE [0  n  1]
R/W-x R/W-x R/W-x U-0 R/W-0 U-0 R/W-x R/W-x
SID2 SID1 SID0 — EXIDEN(1) — EID17 EID16
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-5 SID<2:0>: Standard Identifier Mask bits or Extended Identifier Mask bits (EID<20:18>)
bit 4 Unimplemented: Read as ‘0’
bit 3 Mode 0:
Unimplemented: Read as ‘0’
Mode 1, 2:
EXIDEN: Extended Identifier Filter Enable Mask bit(1)
1 = Messages selected by the EXIDEN bit in RXFnSIDL will be accepted
0 = Both standard and extended identifier messages will be accepted
bit 2 Unimplemented: Read as ‘0’
bit 1-0 EID<17:16>: Extended Identifier Mask bits

Note 1: This bit is available in Mode 1 and 2 only.

REGISTER 34-43: RXMnEIDH: RECEIVE ACCEPTANCE MASK ‘n’ EXTENDED IDENTIFIER MASK
REGISTERS, HIGH BYTE [0  n  1]
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 EID<15:8>: Extended Identifier Mask bits

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 632


PIC18(L)F25/26K83

REGISTER 34-44: RXMnEIDL: RECEIVE ACCEPTANCE MASK ‘n’ EXTENDED IDENTIFIER MASK
REGISTERS, LOW BYTE [0  n  1]
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 EID<7:0>: Extended Identifier Mask bits

REGISTER 34-45: RXFCONn: RECEIVE FILTER CONTROL REGISTER ‘n’ [0  n  1](1)


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
RXFCON0
RXF7EN RXF6EN RXF5EN RXF4EN RXF3EN RXF2EN RXF1EN RXF0EN

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0


RXFCON1
RXF15EN RXF14EN RXF13EN RXF12EN RXF11EN RXF10EN RXF9EN RXF8EN
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 RXF<7:0>EN: Receive Filter n Enable bits


0 = Filter is disabled
1 = Filter is enabled

Note 1: This register is available in Mode 1 and 2 only.

Note: Register 34-46 through Register 34-51 are writable in Configuration mode only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 633


PIC18(L)F25/26K83

REGISTER 34-46: SDFLC: STANDARD DATA BYTES FILTER LENGTH COUNT REGISTER(1)
U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
— — — FLC4 FLC3 FLC2 FLC1 FLC0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 FLC<4:0>: Filter Length Count bits
Mode 0:
Not used; forced to ‘00000’.
Mode 1, 2:
00000-10010 = 0 18 bits are available for standard data byte filter. Actual number of bits used
depends on the DLC<3:0> bits (RXBnDLC<3:0> or BnDLC<3:0> if configured
as RX buffer) of the message being received.
If DLC<3:0> = 0000 No bits will be compared with incoming data bits.
If DLC<3:0> = 0001 Up to 8 data bits of RXFnEID<7:0>, as determined by FLC<2:0>, will be com-
pared with the corresponding number of data bits of the incoming message.
If DLC<3:0> = 0010 Up to 16 data bits of RXFnEID<15:0>, as determined by FLC<3:0>, will be
compared with the corresponding number of data bits of the incoming
message.
If DLC<3:0> = 0011 Up to 18 data bits of RXFnEID<17:0>, as determined by FLC<4:0>, will be
compared with the corresponding number of data bits of the incoming
message.

Note 1: This register is available in Mode 1 and 2 only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 634


PIC18(L)F25/26K83

REGISTER 34-47: RXFBCONn: RECEIVE FILTER BUFFER CONTROL REGISTER ‘n’(1)


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
RXFBCON0
F1BP_3 F1BP_2 F1BP_1 F1BP_0 F0BP_3 F0BP_2 F0BP_1 F0BP_0

R/W-0 R/W-0 R/W-0 R/W-1 R/W-0 R/W-0 R/W-0 R/W-1


RXFBCON1
F3BP_3 F3BP_2 F3BP_1 F3BP_0 F2BP_3 F2BP_2 F2BP_1 F2BP_0

R/W-0 R/W-0 R/W-0 R/W-1 R/W-0 R/W-0 R/W-0 R/W-1


RXFBCON2
F5BP_3 F5BP_2 F5BP_1 F5BP_0 F4BP_3 F4BP_2 F4BP_1 F4BP_0

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0


RXFBCON3
F7BP_3 F7BP_2 F7BP_1 F7BP_0 F6BP_3 F6BP_2 F6BP_1 F6BP_0

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0


RXFBCON4
F9BP_3 F9BP_2 F9BP_1 F9BP_0 F8BP_3 F8BP_2 F8BP_1 F8BP_0

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0


RXFBCON5
F11BP_3 F11BP_2 F11BP_1 F11BP_0 F10BP_3 F10BP_2 F10BP_1 F10BP_0

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0


RXFBCON6
F13BP_3 F13BP_2 F13BP_1 F13BP_0 F12BP_3 F12BP_2 F12BP_1 F12BP_0

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0


RXFBCON7
F15BP_3 F15BP_2 F15BP_1 F15BP_0 F14BP_3 F14BP_2 F14BP_1 F14BP_0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-0 F<15:2>BP_<3:0>: Filter n Buffer Pointer Nibble bits


0000 = Filter n is associated with RXB0
0001 = Filter n is associated with RXB1
0010 = Filter n is associated with B0
0011 = Filter n is associated with B1
...
0111 = Filter n is associated with B5
1111-1000 = Reserved

Note 1: This register is available in Mode 1 and 2 only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 635


PIC18(L)F25/26K83

REGISTER 34-48: MSEL0: MASK SELECT REGISTER 0(1)


R/W-0 R/W-1 R/W-0 R/W-1 R/W-0 R/W-0 R/W-0 R/W-0
FIL3_1 FIL3_0 FIL2_1 FIL2_0 FIL1_1 FIL1_0 FIL0_1 FIL0_0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-6 FIL3_<1:0>: Filter 3 Select bits 1 and 0


11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0
bit 5-4 FIL2_<1:0>: Filter 2 Select bits 1 and 0
11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0
bit 3-2 FIL1_<1:0>: Filter 1 Select bits 1 and 0
11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0
bit 1-0 FIL0_<1:0>: Filter 0 Select bits 1 and 0
11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0

Note 1: This register is available in Mode 1 and 2 only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 636


PIC18(L)F25/26K83

REGISTER 34-49: MSEL1: MASK SELECT REGISTER 1(1)


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-1 R/W-0 R/W-1
FIL7_1 FIL7_0 FIL6_1 FIL6_0 FIL5_1 FIL5_0 FIL4_1 FIL4_0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-6 FIL7_<1:0>: Filter 7 Select bits 1 and 0


11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0
bit 5-4 FIL6_<1:0>: Filter 6 Select bits 1 and 0
11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0
bit 3-2 FIL5_<1:0>: Filter 5 Select bits 1 and 0
11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0
bit 1-0 FIL4_<1:0>: Filter 4 Select bits 1 and 0
11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0

Note 1: This register is available in Mode 1 and 2 only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 637


PIC18(L)F25/26K83

REGISTER 34-50: MSEL2: MASK SELECT REGISTER 2(1)


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
FIL11_1 FIL11_0 FIL10_1 FIL10_0 FIL9_1 FIL9_0 FIL8_1 FIL8_0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-6 FIL11_<1:0>: Filter 11 Select bits 1 and 0


11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0
bit 5-4 FIL10_<1:0>: Filter 10 Select bits 1 and 0
11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0
bit 3-2 FIL9_<1:0>: Filter 9 Select bits 1 and 0
11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0
bit 1-0 FIL8_<1:0>: Filter 8 Select bits 1 and 0
11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0

Note 1: This register is available in Mode 1 and 2 only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 638


PIC18(L)F25/26K83

REGISTER 34-51: MSEL3: MASK SELECT REGISTER 3(1)


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
FIL15_1 FIL15_0 FIL14_1 FIL14_0 FIL13_1 FIL13_0 FIL12_1 FIL12_0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-6 FIL15_<1:0>: Filter 15 Select bits 1 and 0


11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0
bit 5-4 FIL14_<1:0>: Filter 14 Select bits 1 and 0
11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0
bit 3-2 FIL13_<1:0>: Filter 13 Select bits 1 and 0
11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0
bit 1-0 FIL12_<1:0>: Filter 12 Select bits 1 and 0
11 = No mask
10 = Filter 15
01 = Acceptance Mask 1
00 = Acceptance Mask 0

Note 1: This register is available in Mode 1 and 2 only.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 639


PIC18(L)F25/26K83
34.15.4 CAN BAUD RATE REGISTERS
This section describes the CAN Baud Rate registers.
Note: These registers are writable in
Configuration mode only.

REGISTER 34-52: BRGCON1: BAUD RATE CONTROL REGISTER 1


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
SJW1 SJW0 BRP5 BRP4 BRP3 BRP2 BRP1 BRP0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-6 SJW<1:0>: Synchronized Jump Width bits


11 = Synchronization jump width time = 4 x TQ
10 = Synchronization jump width time = 3 x TQ
01 = Synchronization jump width time = 2 x TQ
00 = Synchronization jump width time = 1 x TQ
bit 5-0 BRP<5:0>: Baud Rate Prescaler bits
111111 = TQ = (2 x 64)/FOSC
111110 = TQ = (2 x 63)/FOSC
:
:
000001 = TQ = (2 x 2)/FOSC
000000 = TQ = (2 x 1)/FOSC

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 640


PIC18(L)F25/26K83

REGISTER 34-53: BRGCON2: BAUD RATE CONTROL REGISTER 2


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
SEG2PHTS SAM SEG1PH2 SEG1PH1 SEG1PH0 PRSEG2 PRSEG1 PRSEG0
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 SEG2PHTS: Phase Segment 2 Time Select bit


1 = Freely programmable
0 = Maximum of PHEG1 or Information Processing Time (IPT), whichever is greater
bit 6 SAM: Sample of the CAN bus Line bit
1 = Bus line is sampled three times prior to the sample point
0 = Bus line is sampled once at the sample point
bit 5-3 SEG1PH<2:0>: Phase Segment 1 bits
111 = Phase Segment 1 time = 8 x TQ
110 = Phase Segment 1 time = 7 x TQ
101 = Phase Segment 1 time = 6 x TQ
100 = Phase Segment 1 time = 5 x TQ
011 = Phase Segment 1 time = 4 x TQ
010 = Phase Segment 1 time = 3 x TQ
001 = Phase Segment 1 time = 2 x TQ
000 = Phase Segment 1 time = 1 x TQ
bit 2-0 PRSEG<2:0>: Propagation Time Select bits
111 = Propagation time = 8 x TQ
110 = Propagation time = 7 x TQ
101 = Propagation time = 6 x TQ
100 = Propagation time = 5 x TQ
011 = Propagation time = 4 x TQ
010 = Propagation time = 3 x TQ
001 = Propagation time = 2 x TQ
000 = Propagation time = 1 x TQ

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 641


PIC18(L)F25/26K83

REGISTER 34-54: BRGCON3: BAUD RATE CONTROL REGISTER 3


R/W-0 R/W-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0
WAKDIS WAKFIL — — — SEG2PH2(1) SEG2PH1(1) SEG2PH0(1)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 WAKDIS: Wake-up Disable bit


1 = Disable CAN bus activity wake-up feature
0 = Enable CAN bus activity wake-up feature
bit 6 WAKFIL: Selects CAN bus Line Filter for Wake-up bit
1 = Use CAN bus line filter for wake-up
0 = CAN bus line filter is not used for wake-up
bit 5-3 Unimplemented: Read as ‘0’
bit 2-0 SEG2PH<2:0>: Phase Segment 2 Time Select bits(1)
111 = Phase Segment 2 time = 8 x TQ
110 = Phase Segment 2 time = 7 x TQ
101 = Phase Segment 2 time = 6 x TQ
100 = Phase Segment 2 time = 5 x TQ
011 = Phase Segment 2 time = 4 x TQ
010 = Phase Segment 2 time = 3 x TQ
001 = Phase Segment 2 time = 2 x TQ
000 = Phase Segment 2 time = 1 x TQ

Note 1: These bits are ignored if SEG2PHTS bit (BRGCON2<7>) is ‘0’.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 642


PIC18(L)F25/26K83
34.15.5 CAN MODULE I/O CONTROL
REGISTER
This register controls the operation of the CAN module’s
I/O pins in relation to the rest of the microcontroller.

REGISTER 34-55: CIOCON: CAN I/O CONTROL REGISTER


R/W-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0
TX1SRC — — — — — — CLKSEL
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 TX1SRC: CAN_tx1 Signal Data Source bit


1 = CAN_tx1 signal will output the CAN clock
0 = CAN_tx1 signal will output CANTX
bit 6-1 Unimplemented: Read as ‘0’
bit 0 CLKSEL: CAN Clock Source Selection bit
1 = CAN clock is sourced by the clock selected by the FEXTOSC Configuration bit field, regardless of
system clock(1)
0 = CAN clock is sourced from the system clock

Note 1: When CLKSEL = 1, the clock supplied by FEXTOSC must be less than or equal to the system clock. If the
CAN clock is greater than the system clock, unexpected behavior will occur.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 643


PIC18(L)F25/26K83
34.15.6 CAN INTERRUPT REGISTERS
The registers in this section are the same as described
in Section 9.0 “Interrupt Controller”. They are dupli-
cated here for convenience.

REGISTER 34-56: PIR5: PERIPHERAL INTERRUPT REQUEST (FLAG) REGISTER 5


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
Mode 0
IRXIF WAKIF ERRIF TXB2IF TXB1IF(1) TXB0IF(1) RXB1IF RXB0IF

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0


Mode 1,2
IRXIF WAKIF ERRIF TXBnIF TXB1IF(1) TXB0IF(1) RXBnIF FIFOWMIF
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 IRXIF: CAN Bus Error Message Received Interrupt Flag bit
1 = An invalid message has occurred on the CAN bus
0 = No invalid message on the CAN bus
bit 6 WAKIF: CAN Bus Activity Wake-up Interrupt Flag bit
1 = Activity on the CAN bus has occurred
0 = No activity on the CAN bus
bit 5 ERRIF: CAN Module Error Interrupt Flag bit
1 = An error has occurred in the CAN module (multiple sources; refer to Section 34.14.6 “Error Interrupt”)
0 = No CAN module errors
bit 4 When CAN is in Mode 0:
TXB2IF: CAN Transmit Buffer 2 Interrupt Flag bit
1 = Transmit Buffer 2 has completed transmission of a message and may be reloaded
0 = Transmit Buffer 2 has not completed transmission of a message
When CAN is in Mode 1 or 2:
TXBnIF: Any Transmit Buffer Interrupt Flag bit
1 = One or more transmit buffers have completed transmission of a message and may be reloaded
0 = No transmit buffer is ready for reload
bit 3 TXB1IF: CAN Transmit Buffer 1 Interrupt Flag bit(1)
1 = Transmit Buffer 1 has completed transmission of a message and may be reloaded
0 = Transmit Buffer 1 has not completed transmission of a message
bit 2 TXB0IF: CAN Transmit Buffer 0 Interrupt Flag bit(1)
1 = Transmit Buffer 0 has completed transmission of a message and may be reloaded
0 = Transmit Buffer 0 has not completed transmission of a message
bit 1 When CAN is in Mode 0:
RXB1IF: CAN Receive Buffer 1 Interrupt Flag bit
1 = Receive Buffer 1 has received a new message
0 = Receive Buffer 1 has not received a new message
When CAN is in Mode 1 or 2:
RXBnIF: Any Receive Buffer Interrupt Flag bit
1 = One or more receive buffers has received a new message
0 = No receive buffer has received a new message
bit 0 When CAN is in Mode 0:
RXB0IF: CAN Receive Buffer 0 Interrupt Flag bit
1 = Receive Buffer 0 has received a new message
0 = Receive Buffer 0 has not received a new message
When CAN is in Mode 1:
Unimplemented: Read as ‘0’
When CAN is in Mode 2:
FIFOWMIF: FIFO Watermark Interrupt Flag bit
1 = FIFO high watermark is reached
0 = FIFO high watermark is not reached
Note 1: In CAN Mode 1 and 2, these bits are forced to ‘0’.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 644


PIC18(L)F25/26K83

REGISTER 34-57: PIE5: PERIPHERAL INTERRUPT ENABLE REGISTER 5


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
Mode 0
IRXIE WAKIE ERRIE TXB2IE TXB1IE(1) TXB0IE(1) RXB1IE RXB0IE

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0


Mode 1
IRXIE WAKIE ERRIE TXBnIE TXB1IE(1) TXB0IE(1) RXBnIE FIFOWMIE
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 IRXIE: CAN Bus Error Message Received Interrupt Enable bit
1 = Enable invalid message received interrupt
0 = Disable invalid message received interrupt
bit 6 WAKIE: CAN bus Activity Wake-up Interrupt Enable bit
1 = Enable bus activity wake-up interrupt
0 = Disable bus activity wake-up interrupt
bit 5 ERRIE: CAN bus Error Interrupt Enable bit
1 = Enable CAN module error interrupt
0 = Disable CAN module error interrupt
bit 4 When CAN is in Mode 0:
TXB2IE: CAN Transmit Buffer 2 Interrupt Enable bit
1 = Enable Transmit Buffer 2 interrupt
0 = Disable Transmit Buffer 2 interrupt
When CAN is in Mode 1 or 2:
TXBnIE: CAN Transmit Buffer Interrupts Enable bit
1 = Enable transmit buffer interrupt; individual interrupt is enabled by TXBIE and BIE0
0 = Disable all transmit buffer interrupts
bit 3 TXB1IE: CAN Transmit Buffer 1 Interrupt Enable bit(1)
1 = Enable Transmit Buffer 1 interrupt
0 = Disable Transmit Buffer 1 interrupt
bit 2 TXB0IE: CAN Transmit Buffer 0 Interrupt Enable bit(1)
1 = Enable Transmit Buffer 0 interrupt
0 = Disable Transmit Buffer 0 interrupt
bit 1 When CAN is in Mode 0:
RXB1IE: CAN Receive Buffer 1 Interrupt Enable bit
1 = Enable Receive Buffer 1 interrupt
0 = Disable Receive Buffer 1 interrupt
When CAN is in Mode 1 or 2:
RXBnIE: CAN Receive Buffer Interrupts Enable bit
1 = Enable receive buffer interrupt; individual interrupt is enabled by BIE0
0 = Disable all receive buffer interrupts
bit 0 When CAN is in Mode 0:
RXB0IE: CAN Receive Buffer 0 Interrupt Enable bit
1 = Enable Receive Buffer 0 interrupt
0 = Disable Receive Buffer 0 interrupt
When CAN is in Mode 1:
Unimplemented: Read as ‘0’
When CAN is in Mode 2:
FIFOWMIE: FIFO Watermark Interrupt Enable bit
1 = Enable FIFO watermark interrupt
0 = Disable FIFO watermark interrupt

Note 1: In CAN Mode 1 and 2, these bits are forced to ‘0’.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 645


PIC18(L)F25/26K83

REGISTER 34-58: IPR5: PERIPHERAL INTERRUPT PRIORITY REGISTER 5


R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
Mode 0
IRXIP WAKIP ERRIP TXB2IP TXB1IP(1) TXB0IP (1)
RXB1IP RXB0IP

R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1


Mode 1,2 (1)
IRXIP WAKIP ERRIP TXBnIP TXB1IP TXB0IP(1) RXBnIP FIFOWMIP
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 IRXIP: CAN Bus Error Message Received Interrupt Priority bit
1 = High priority
0 = Low priority
bit 6 WAKIP: CAN Bus Activity Wake-up Interrupt Priority bit
1 = High priority
0 = Low priority
bit 5 ERRIP: CAN Module Error Interrupt Priority bit
1 = High priority
0 = Low priority
bit 4 When CAN is in Mode 0:
TXB2IP: CAN Transmit Buffer 2 Interrupt Priority bit
1 = High priority
0 = Low priority
When CAN is in Mode 1 or 2:
TXBnIP: CAN Transmit Buffer Interrupt Priority bit
1 = High priority
0 = Low priority
bit 3 TXB1IP: CAN Transmit Buffer 1 Interrupt Priority bit(1)
1 = High priority
0 = Low priority
bit 2 TXB0IP: CAN Transmit Buffer 0 Interrupt Priority bit(1)
1 = High priority
0 = Low priority
bit 1 When CAN is in Mode 0:
RXB1IP: CAN Receive Buffer 1 Interrupt Priority bit
1 = High priority
0 = Low priority
When CAN is in Mode 1 or 2:
RXBnIP: CAN Receive Buffer Interrupts Priority bit
1 = High priority
0 = Low priority

Note 1: In CAN Mode 1 and 2, these bits are forced to ‘0’.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 646


PIC18(L)F25/26K83
REGISTER 34-58: IPR5: PERIPHERAL INTERRUPT PRIORITY REGISTER 5 (CONTINUED)
bit 0 When CAN is in Mode 0:
RXB0IP: CAN Receive Buffer 0 Interrupt Priority bit
1 = High priority
0 = Low priority
When CAN is in Mode 1:
Unimplemented: Read as ‘0’
When CAN is in Mode 2:
FIFOWMIP: FIFO Watermark Interrupt Priority bit
1 = High priority
0 = Low priority

Note 1: In CAN Mode 1 and 2, these bits are forced to ‘0’.

REGISTER 34-59: TXBIE: TRANSMIT BUFFERS INTERRUPT ENABLE REGISTER(1)


U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 U-0 U-0
— — — TXB2IE(2) TXB1IE(2) TXB0IE(2) — —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-5 Unimplemented: Read as ‘0’


bit 4-2 TXB2IE:TXB0IE: Transmit Buffer 2-0 Interrupt Enable bits(2)
1 = Transmit buffer interrupt is enabled
0 = Transmit buffer interrupt is disabled
bit 1-0 Unimplemented: Read as ‘0’

Note 1: This register is available in Mode 1 and 2 only.


2: TXBnIE in PIE5 register must be set to get an interrupt.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 647


PIC18(L)F25/26K83

REGISTER 34-60: BIE0: BUFFER INTERRUPT ENABLE REGISTER 0(1)


R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
B5IE(2) B4IE(2) B3IE(2) B2IE(2) B1IE(2) B0IE(2) RXB1IE(2) RXB0IE(2)
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-2 B<5:0>IE: Programmable Transmit/Receive Buffer 5-0 Interrupt Enable bits(2)
1 = Interrupt is enabled
0 = Interrupt is disabled
bit 1-0 RXB<1:0>IE: Dedicated Receive Buffer 1-0 Interrupt Enable bits(2)
1 = Interrupt is enabled
0 = Interrupt is disabled

Note 1: This register is available in Mode 1 and 2 only.


2: Either TXBnIE or RXBnIE, in the PIE5 register, must be set to get an interrupt.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 648


PIC18(L)F25/26K83
35.0 FIXED VOLTAGE REFERENCE The ADFVR<1:0> bits of the FVRCON register are
used to enable and configure the gain amplifier settings
(FVR)
for the reference supplied to the ADC module.
The Fixed Voltage Reference, or FVR, is a stable Reference Section 37.0 “Analog-to-Digital Con-
voltage reference, independent of VDD, with 1.024V, verter with Computation (ADC2) Module” for addi-
2.048V or 4.096V selectable output levels. The output tional information.
of the FVR can be configured to supply a reference The CDAFVR<1:0> bits of the FVRCON register are
voltage to the following: used to enable and configure the gain amplifier settings
• ADC input channel for the reference supplied to the DAC and comparator
• ADC positive reference module. Reference Section 38.0 “5-Bit Digital-to-
Analog Converter (DAC) Module” and Section
• Comparator input
39.0 “Comparator Module” for additional information.
• Digital-to-Analog Converter (DAC)
The FVR can be enabled by setting the EN bit of the 35.2 FVR Stabilization Period
FVRCON register.
When the Fixed Voltage Reference module is enabled, it
Note: Fixed Voltage Reference output cannot requires time for the reference and amplifier circuits to
exceed VDD. stabilize. Once the circuits stabilize and are ready for use,
the RDY bit of the FVRCON register will be set.

35.1 Independent Gain Amplifiers


The output of the FVR, which is connected to the ADC,
Comparators, and DAC, is routed through two
independent programmable gain amplifiers. Each
amplifier can be programmed for a gain of 1x, 2x or 4x,
to produce the three possible voltage levels.

FIGURE 35-1: VOLTAGE REFERENCE BLOCK DIAGRAM

Rev. 10-000053E
1/27/2017

2
ADFVR<1:0>

1x
FVR Buffer 1
2x
4x (To ADC Module)

2
CDAFVR<1:0>

1x FVR Buffer 2
2x (To ADC, Comparator
4x and DAC Modules)

EN
+
_ RDY
Any peripheral
requiring Fixed
Reference

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 647


PIC18(L)F25/26K83
35.3 Register Definitions: FVR Control

REGISTER 35-1: FVRCON: FIXED VOLTAGE REFERENCE CONTROL REGISTER


R/W-0/0 R-q/q R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
(1) (3) (3)
EN RDY TSEN TSRNG CDAFVR<1:0> ADFVR<1:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared q = Value depends on condition

bit 7 EN: Fixed Voltage Reference Enable bit


1 = Fixed Voltage Reference is enabled
0 = Fixed Voltage Reference is disabled
bit 6 RDY: Fixed Voltage Reference Ready Flag bit(1)
1 = Fixed Voltage Reference output is ready for use
0 = Fixed Voltage Reference output is not ready or not enabled
bit 5 TSEN: Temperature Indicator Enable bit(3)
1 = Temperature Indicator is enabled
0 = Temperature Indicator is disabled
bit 4 TSRNG: Temperature Indicator Range Selection bit(3)
1 = VOUT = 3VT (High Range)
0 = VOUT = 2VT (Low Range)
bit 3-2 CDAFVR<1:0>: Comparator FVR Buffer Gain Selection bits
11 = FVR Buffer 1 Gain is 4x, (4.096V)(2)
10 = FVR Buffer 1 Gain is 2x, (2.048V)(2)
01 = FVR Buffer 1 Gain is 1x, (1.024V)
00 = FVR Buffer 1 is off
bit 1-0 ADFVR<1:0>: ADC FVR Buffer Gain Selection bit
11 = FVR Buffer 2 Gain is 4x, (4.096V)(2)
10 = FVR Buffer 2 Gain is 2x, (2.048V)(2)
01 = FVR Buffer 2 Gain is 1x, (1.024V)
00 = FVR Buffer 2 is off

Note 1: FVRRDY is always ‘1’.


2: Fixed Voltage Reference output cannot exceed VDD.
3: See Section 36.0 “Temperature Indicator Module” for additional information.

TABLE 35-1: SUMMARY OF REGISTERS ASSOCIATED WITH FIXED VOLTAGE REFERENCE


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page
FVRCON EN RDY TSEN TSRNG CDAFVR<1:0> ADFVR<1:0> 648
Legend: — = Unimplemented location, read as ‘0’. Shaded cells are not used with the Fixed Voltage Reference.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 648


PIC18(L)F25/26K83
36.0 TEMPERATURE INDICATOR The output of the circuit is measured using the internal
Analog-to-Digital Converter. A channel is reserved for
MODULE
the temperature circuit output. Refer to Section
This family of devices is equipped with a temperature 37.0 “Analog-to-Digital Converter with
circuit designed to measure the operating temperature Computation (ADC2) Module” for detailed
of the silicon die. The main purpose of the Temperature information.
Indicator module is to provide temperature-dependent The ON/OFF bit for the module is located in the
voltage that can be measured by the Analog-to-Digital FVRCON register. See Section 35.0 “Fixed Voltage
Converter. Reference (FVR)” for more information. The circuit is
The circuit’s range of operating temperature falls enabled by setting the TSEN bit of the FVRCON
between -40°C and +125°C. The circuit may be used register. When the module is disabled, the circuit draws
as a temperature threshold detector or a more accurate no current.
temperature indicator, depending on the level of The circuit operates in either High or Low range. Refer
calibration performed. A one-point calibration allows to Section 36.5 “Temperature Indicator Range” for
the circuit to indicate a temperature closely surrounding more details on the range settings.
that point. A two-point calibration allows the circuit to
sense the entire range of temperature more accurately.
36.2 Estimation of Temperature
36.1 Module Operation This section describes how the sensor voltage can be
used to estimate the temperature of the module. To use
The temperature indicator module consists of a the sensor, the output voltage, VTSENSE, is measured
temperature-sensing circuit that provides a voltage to and the corresponding temperature is determined.
the device ADC. The analog voltage output, VTSENSE, Equation 36-1 provides an estimate for the die
varies inversely to the device temperature. The output of temperature based on the VTSENSE value.
the temperature indicator is referred to as VOUT.
Figure 36-1 shows a simplified block diagram of the EQUATION 36-1: SENSOR TEMPERATURE
temperature indicator module.
T SENSE = V TSENSE   – M t  + T OFFSET
FIGURE 36-1: TEMPERATURE CIRCUIT
DIAGRAM
Where:
Mt = 1/Mv, where Mv = sensor voltage sensitivity (V/°C).
TOFFSET is the temperature difference between the
Rev. 10-000069C
12/21/2016

VDD theoretical temperature and the actual temperature.

TSEN

VOUT
To ADC
Temp.
Indicator
TSRNG

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 649


PIC18(L)F25/26K83
36.2.1 CALIBRATION 36.2.2 TEMPERATURE RESOLUTION
The resolution of the ADC reading, Ma (°C/count),
36.2.1.1 Single-Point Calibration
depends on both the ADC resolution N and the
Single-point calibration is performed by application reference voltage used for conversion, as shown in
software using Equation 36-1 and the assumed Mt. A Equation 36-2. It is recommended to use the smallest
reading of VTSENSE at a known temperature is taken, VREF value, such as 2.048 FVR reference voltage,
and the theoretical temperature is calculated by instead of VDD.
temporarily setting TOFFSET = 0. Then TOFFSET is
computed as the difference of the actual and calculated
temperatures. Finally, TOFFSET is stored in nonvolatile Note: Refer to Table 45-17 for FVR reference
memory within the device, and is applied to future voltage accuracy.
readings to gain a more accurate measurement.
EQUATION 36-2: TEMPERATURE
36.2.1.2 Higher-Order Calibration
RESOLUTION (°C/LSb)
If the application requires more precise temperature
measurement, additional calibrations steps will be V REF
necessary. For these applications, two-point or three- N
-  Mt
Ma = -----------
2
point calibration is recommended.
Note 1: The TOFFSET value may be determined V REF
by the user with a temperature test.
-----------
N
-
2
2: Although the measurement range is Ma = ------------
Mv
-40°C to +125 °C, due to the variations in
offset error, the single-point uncalibrated
Where:
calculated TSENSE value may indicate a
Mv = sensor voltage sensitivity (V/°C)
temperature from -140°C to +225°C,
before the calibration offset is applied. VREF = Reference voltage of the ADC module (in Volts)
N = Resolution of the ADC
3: The User must take into consideration
self-heating of the device at different
clock frequencies and output pin loading. The typical Mv value for a single diode is approximately
For package related thermal characteris- -1.267 to -1.32 mV/C.
tics information, refer to Table 45-6. The typical Mv value for a stack of two diodes (Low
Range setting) is approximately -2.533 mV/C.
The typical Mv value for a stack of three diodes (High
range setting) is approximately -3.8 mV/C.

36.3 ADC Acquisition Time


To ensure accurate temperature measurements, the
user must wait a certain time for the ADC value to
settle, after the ADC input multiplexer is connected to
the temperature indicator output, before the conversion
is performed.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 650


PIC18(L)F25/26K83
36.4 Minimum Operating VDD The output voltage of the sensor is the highest value at
-40°C and the lowest value at +125°C.
When the temperature circuit is operated in low range,
the device may be operated at any operating voltage • High Range: The High range is used in
that is within specifications. When the temperature applications with the reference for the ADC,
circuit is operated in High range, the device operating VREF = 2.048V. This range may not be suitable for
voltage, VDD, must be high enough to ensure that the battery-powered applications.
temperature circuit is correctly biased. • Low Range: This mode is useful in applications in
which the VDD is too low for high-range operation.
Table 36-1 shows the recommended minimum VDD vs. The VDD in this mode can be as low as 1.8V. VDD
Range setting. must, however, be at least 0.5V higher than the
maximum sensor voltage depending on the
TABLE 36-1: RECOMMENDED VDD vs. expected low operating temperature.
RANGE
36.6 DIA Information
Min.VDD, TSRNG = 1 Min. VDD, TSRNG = 0
(High Range) (Low Range) DIA data provide ADC readings at one operating
temperature. DIA data is taken during factory testing
 2.5  1.8
and stored within the device. The 90°C reading alone
allows single-point calibration as described in
36.5 Temperature Indicator Range Section 36.2.1, Calibration, by solving Equation 36-1
for TOFFSET.
The temperature indicator circuit operates in either high
or low range. The high range, selected by setting the Refer to Section 5.7 “Device Information Area” for
TSRNG bit of the FVRCON register, provides a wider more information on the data stored in the DIA and how
output voltage. This provides more resolution over the to access them.
temperature range. High range requires a higher-bias
Note: The lower temperature range (e.g., - 40°C)
voltage to operate and thus, a higher VDD is needed.
will suffer in accuracy because
The low range is selected by clearing the TSRNG bit of
temperature conversion must extrapolate
the FVRCON register. The low range generates a lower
below the reference points, amplifying any
sensor voltage and thus, a lower VDD voltage is needed
measurement errors.
to operate the circuit.

TABLE 36-2: SUMMARY OF REGISTERS ASSOCIATED WITH THE TEMPERATURE INDICATOR


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page
FVRCON EN RDY TSEN TSRNG CDAFVR<1:0> ADFVR<1:0> 648
Legend: — = Unimplemented location, read as ‘0’. Shaded cells are unused by the temperature indicator module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 651


PIC18(L)F25/26K83
37.0 ANALOG-TO-DIGITAL
CONVERTER WITH
COMPUTATION (ADC2)
MODULE
The Analog-to-Digital Converter with Computation
(ADC2) allows conversion of an analog input signal to
a 12-bit binary representation of that signal. This device
uses analog inputs, which are multiplexed into a single
sample and hold circuit. The output of the sample and
hold is connected to the input of the converter. The
converter generates a 12-bit binary result via
successive approximation and stores the conversion
result into the ADC result registers (ADRESH:ADRESL
register pair).
Additionally, the following features are provided within
the ADC module:
• 13-bit Acquisition Timer
• Hardware Capacitive Voltage Divider (CVD)
support:
- 13-bit Precharge Timer
- Adjustable sample and hold capacitor array
- Guard ring digital output drive
• Automatic repeat and sequencing:
- Automated double sample conversion for
CVD
- Two sets of result registers (Result and
Previous result)
- Auto-conversion trigger
- Internal retrigger
• Computation features:
- Averaging and Low-Pass Filter functions
- Reference Comparison
- 2-level Threshold Comparison
- Selectable Interrupts
Figure 37-1 shows the block diagram of the ADC.
The ADC voltage reference is software selectable to be
either internally generated or externally supplied.
The ADC can generate an interrupt upon completion of
a conversion and upon threshold comparison. These
interrupts can be used to wake up the device from
Sleep.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 652


PIC18(L)F25/26K83
FIGURE 37-1: ADC2 BLOCK DIAGRAM
PREF<1:0> Rev. 10-000034D
11/2/2016

FVR_buffer1 11 Positive
VREF+ pin Reference
10 Select
Reserved 01
00
NREF
VDD
VREF- pin 1
0
VSS CS
AN0
ANa Vref- Vref+
External .
Channel . FOSC /n Fosc
. Divider FOSC
Inputs ADC_clk ADC
ANz sampled Clock
VSS input Select FRC
FRC
Temp Indicator
Internal
Channel DACx_output ADC CLOCK SOURCE
Inputs
FVR_buffer ADC
Sample Circuit
PCH<5:0>
ADFM
set bit ADIF

12
complete 12-bit Result
Write to bit
GO/DONE
GO/DONE 16
start
ADRESH ADRESL
Enable

Trigger Select
ACT<4:0> ADON
. . . VSS
Trigger Sources

AUTO CONVERSION
TRIGGER

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 653


PIC18(L)F25/26K83
37.1 ADC Configuration 37.1.3 ADC VOLTAGE REFERENCE
When configuring and using the ADC the following The ADPREF<1:0> bits of the ADREF register provide
functions must be considered: control of the positive voltage reference. The positive
voltage reference can be:
• Port configuration
• VREF+ pin
• Channel selection
• VDD
• ADC voltage reference selection
• FVR outputs
• ADC conversion clock source
• Interrupt control The ADNREF bit of the ADREF register provides
control of the negative voltage reference. The negative
• Result formatting
voltage reference can be:
• Conversion Trigger Selection
• VREF- pin
• ADC Acquisition Time
• VSS
• ADC Precharge Time
See Section 35.0 “Fixed Voltage Reference (FVR)”
• Additional Sample and Hold Capacitor
for more details on the Fixed Voltage Reference.
• Single/Double Sample Conversion
• Guard Ring Outputs 37.1.4 CONVERSION CLOCK
The source of the conversion clock is software
37.1.1 PORT CONFIGURATION
selectable via the ADCLK register and the CS bits of
The ADC can be used to convert both analog and the ADCON0 register. If FOSC is selected as the ADC
digital signals. When converting analog signals, the I/O clock, there is a prescaler available to divide the clock
pin should be configured for analog by setting the so that it meets the ADC clock period specification. The
associated TRIS and ANSEL bits. Refer to Section ADC clock source options are the following:
16.0 “I/O Ports” for more information.
• FOSC/(2*n)(where n is from 1 to 128)
Note: Analog voltages on any pin that is defined • FRC (dedicated RC oscillator)
as a digital input may cause the input
The time to complete one bit conversion is defined as
buffer to conduct excess current.
TAD. Refer Figure 37-2 for the complete timing details
of the ADC conversion.
37.1.2 CHANNEL SELECTION
For correct conversion, the appropriate TAD specification
There are several channel selections available:
must be met. Refer to Table 45-14 for more information.
• Eight PORTA pins (RA<7:0>) Table 37-1 gives examples of appropriate ADC clock
• Eight PORTB pins (RB<7:0>) selections.
• Eight PORTC pins (RC<7:0>) Note 1: Unless using the FRC, any changes in the
• Temperature Indicator system clock frequency will change the
• DAC output ADC clock frequency, which may
• Fixed Voltage Reference (FVR) adversely affect the ADC result.
• VSS (ground) 2: The internal control logic of the ADC runs
off of the clock selected by the CS bit of
The ADPCH register determines which channel is
ADCON0. What this can mean is when
connected to the sample and hold circuit.
the CS bit of ADCON0 is set to ‘1’ (ADC
When changing channels, a delay is required before runs on FRC), there may be unexpected
starting the next conversion. delays in operation when setting ADC
Refer to Section 37.2 “ADC Operation” for more control bits.
information.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 654


PIC18(L)F25/26K83
TABLE 37-1: ADC CLOCK PERIOD (TAD) VS. DEVICE OPERATING FREQUENCIES(1,4)
ADC Clock Period (TAD) Device Frequency (FOSC)

ADC
CS<5:0> 64 MHz 32 MHz 20 MHz 16 MHz 8 MHz 4 MHz 1 MHz
Clock Source

FOSC/2 000000 31.25 ns(2) 62.5 ns(2) 100 ns(2) 125 ns(2) 250 ns(2) 500 ns(2) 2.0 s
FOSC/4 000001 62.5 ns(2) 125 ns(2) 200 ns(2) 250 ns(2) 500 ns(2) 1.0 s 4.0 s
FOSC/6 000010 125 ns(2) 187.5 ns(2) 300 ns(2) 375 ns(2) 750 ns(2) 1.5 s 6.0 s
FOSC/8 000011 187.5 ns(2) 250 ns(2) 400 ns(2) 500 ns(2) 1.0 s 2.0 s 8.0 s
... ... ... ... ... ... ... ... ...
FOSC/16 000111 250 ns(2) 500 ns(2) 800 ns(2) 1.0 s 2.0 s 4.0 s 16.0 s(3)
... ... ... ... ... ... ... ... ...
FOSC/128 111111 2.0 s 4.0 s 6.4 s 8.0 s 16.0 s(3) 32.0 s(2) 128.0 s(2)
FRC CS(ADCON0<4>) = 1 1.0-6.0 s 1.0-6.0 s 1.0-6.0 s 1.0-6.0 s 1.0-6.0 s 1.0-6.0 s 1.0-6.0 s
Legend: Shaded cells are outside of recommended range.
Note 1: See TAD parameter for FRC source typical TAD value.
2: These values violate the required TAD time.
3: Outside the recommended TAD time.
4: The ADC clock period (TAD) and total ADC conversion time can be minimized when the ADC clock is derived from the system
clock FOSC. However, the FRC oscillator source must be used when conversions are to be performed with the device in Sleep
mode.

FIGURE 37-2: ANALOG-TO-DIGITAL CONVERSION TAD CYCLES


Rev. 10-000035C
11/2/2016
Precharge Acquisition/ Conversion Time
Time Sharing Time (Traditional Timing of ADC Conversion)
1-8191 TCY 1-8191 TCY
(TPRE) (TACQ) TCY TCY-TAD TAD 1 TAD 2 TAD 3 TAD 4 TAD 5 TAD 6 TAD 7 TAD 8 TAD 9 TAD 10 TAD 11TAD 12 TAD 13 2TCY
b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0

TAD 11
External and Internal External and Internal Conversion starts
Channels are Channels share
charged/discharged charge
Holding capacitor CHOLD is disconnected from analog input (typically 100ns)

If ADPRE ≠ 0 If ADACQ ≠ 0 If ADPRE = 0


If ADACQ = 0 On the following cycle:
(Traditional Operation Start) ADRESH:ADRESL is loaded,
GO bit is cleared,
Set GO bit ADIF bit is set,

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 655


PIC18(L)F25/26K83
37.1.5 INTERRUPTS 37.1.6 RESULT FORMATTING
The ADC module allows for the ability to generate an The 12-bit ADC conversion result can be supplied in
interrupt upon completion of an Analog-to-Digital two formats, left justified or right justified. The FM bits
conversion. The ADC Interrupt Flag is the ADIF bit in of the ADCON0 register controls the output format.
the PIR1 register. The ADC Interrupt Enable is the Figure 37-3 shows the two output formats.
ADIE bit in the PIE1 register. The ADIF bit must be
cleared in software. Writes to the ADRES register pair are always right
justified regardless of the selected format mode. There-
Note 1: The ADIF bit is set at the completion of fore, data read after writing to ADRES when
every conversion, regardless of whether ADFRM0 = 0 will be shifted left four places.
or not the ADC interrupt is enabled.
2: The ADC operates during Sleep only
when the FRC oscillator is selected.
This interrupt can be generated while the device is
operating or while in Sleep. If the device is in Sleep, the
interrupt will wake up the device. Upon waking from
Sleep, the next instruction following the SLEEP
instruction is always executed. If the user is attempting
to wake up from Sleep and resume in-line code
execution, the ADIE bit of the PIEx register and the GIE
bits of the INTCON0 register must both be set. If all
these bits are set, the execution will switch to the
Interrupt Service Routine.

FIGURE 37-3: 12-BIT ADC CONVERSION RESULT FORMAT

ADRESH ADRESL
(FM = 0) MSB
bit 7 bit 0 bit 7 LSB bit 0

12-bit ADC Result Unimplemented:


Read as ‘0’

(FM = 1) MSB LSB


bit 7 bit 0 bit 7 bit 0

Unimplemented: Read as ‘0’ 12-bit ADC Result

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 656


PIC18(L)F25/26K83
37.2 ADC Operation 37.2.4 EXTERNAL TRIGGER DURING
SLEEP
37.2.1 STARTING A CONVERSION
If the external trigger is received during Sleep while
To enable the ADC module, the ON bit of the ADCON0 ADC clock source is set to the FRC, ADC module will
register must be set to a ‘1’. A conversion may be perform the conversion and set the ADIF bit upon com-
started by any of the following: pletion.
• Software setting the GO bit of ADCON0 to ‘1’ If an external trigger is received when the ADC clock
• An external trigger (selected by Register 37-3) source is something other than FRC, the trigger will be
• A continuous-mode retrigger (see section Sec- recorded, but the conversion will not begin until the
tion 37.6.8 “Continuous Sampling mode”) device exits Sleep.
.
Note: The GO bit should not be set in the same
instruction that turns on the ADC. Refer to
Section 37.2.6 “ADC Conversion Pro-
cedure (Basic Mode)”.

37.2.2 COMPLETION OF A CONVERSION


When any individual conversion is complete, the value
already in ADRES is written into PREV (if ADPSIS = 1)
and the new conversion results appear in ADRES.
When the conversion completes, the ADC module will:
• Clear the GO bit (unless the CONT bit of
ADCON0 is set)
• Set the ADIF Interrupt Flag bit
• Set the ADMATH bit
• Update ACC
When ADDSEN = 0 then after every conversion, or
when ADDSEN = 1 then after every other conversion,
the following events occur:
• ERR is calculated
• ADTIF is set if ERR calculation meets threshold
comparison
Importantly, filter and threshold computations occur
after the conversion itself is complete. As such,
interrupt handlers responding to ADIF should check
ADTIF before reading filter and threshold results.

37.2.3 ADC OPERATION DURING SLEEP


The ADC module can operate during Sleep. This
requires the ADC clock source to be set to the FRC
option. When the FRC oscillator source is selected, the
ADC waits one additional instruction before starting the
conversion. This allows the SLEEP instruction to be
executed, which can reduce system noise during the
conversion. If the ADC interrupt is enabled, the device
will wake-up from Sleep when the conversion
completes. If the ADC interrupt is disabled, the ADC
module is turned off after the conversion completes,
although the ON bit remains set.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 657


PIC18(L)F25/26K83
37.2.5 AUTO-CONVERSION TRIGGER • Precharge and acquisition
The auto-conversion trigger allows periodic ADC • Turn on ADC module
measurements without software intervention. When a 3. Configure ADC interrupt (optional):
rising edge of the selected source occurs, the GO bit is • Clear ADC interrupt flag
set by hardware. • Enable ADC interrupt
The auto-conversion trigger source is selected by the • Enable global interrupt (GIEL bit)(1)
ADACT register. 4. If ADACQ = 0, software must wait the required
Using the auto-conversion trigger does not assure acquisition time(2).
proper ADC timing. It is the user’s responsibility to 5. Start conversion by setting the GO bit.
ensure that the ADC timing requirements are met. See 6. Wait for ADC conversion to complete by one of
Register 37-33 for auto-conversion sources. the following:
• Polling the GO bit
37.2.6 ADC CONVERSION PROCEDURE
(BASIC MODE) • Polling the ADIF bit
• Waiting for the ADC interrupt (interrupts
This is an example procedure for using the ADC to
enabled)
perform an analog-to-digital conversion:
7. Read ADC Result.
1. Configure Port:
8. Clear the ADC interrupt flag (required if interrupt
• Disable pin output driver (Refer to the TRISx is enabled).
register)
• Configure pin as analog (Refer to the
ANSELx register) Note 1: The global interrupt can be disabled if the
2. Configure the ADC module: user is attempting to wake-up from Sleep
• Select ADC conversion clock and resume in-line code execution.
• Select voltage reference 2: Refer to Section 37.3 “ADC Acquisi-
• Select ADC input channel tion Requirements”.

EXAMPLE 37-1: ADC CONVERSION


/*This code block configures the ADC
for polling, VDD and VSS references, FRC
oscillator and AN0 input.
Conversion start & polling for completion
are included.
*/
void main() {
//System Initialize
initializeSystem();

//Setup ADC
ADCON0bits.FM = 1; //right justify
ADCON0bits.CS = 1; //FRC Clock
ADPCH = 0x00; //RA0 is Analog channel
TRISAbits.TRISA0 = 1; //Set RA0 to input
ANSELAbits.ANSELA0 = 1; //Set RA0 to analog
ADCON0bits.ON = 1; //Turn ADC On

while (1) {
ADCON0bits.GO = 1; //Start conversion
while (ADCON0bits.GO); //Wait for conversion done
resultHigh = ADRESH; //Read result
resultLow = ADRESL; //Read result
}
}

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 658


PIC18(L)F25/26K83
37.3 ADC Acquisition Requirements impedance is decreased, the acquisition time may be
decreased. After the analog input channel is selected
For the ADC to meet its specified accuracy, the charge (or changed), an ADC acquisition must be completed
holding capacitor (CHOLD) must be allowed to fully before the conversion can be started. To calculate the
charge to the input channel voltage level. The Analog minimum acquisition time, Equation 37-1 may be used.
Input model is shown in Figure 37-4. The source This equation assumes that 1/2 LSb error is used
impedance (RS) and the internal sampling switch (RSS) (4,096 steps for the ADC). The 1/2 LSb error is the
impedance directly affect the time required to charge maximum error allowed for the ADC to meet its
the capacitor CHOLD. The sampling switch (RSS) specified resolution.
impedance varies over the device voltage (VDD), refer
to Figure 37-4. The maximum recommended
impedance for analog sources is 10 k. If the source

EQUATION 37-1: ACQUISITION TIME EXAMPLE

Assumptions: Temperature = 50°C and external impedance of 10k  5.0V V DD

T ACQ = Amplifier Settling Time + Hold Capacitor Charging Time + Temperature Coefficient
= T AMP + T C + T COFF
= 2µs + T C +   Temperature - 25°C   0.05µs/°C  

The value for TC can be approximated with the following equations:

V AP P LI ED  1 – -------------------------- = V CHOLD
1
;[1] VCHOLD charged to within 1/2 lsb
 n+1 
2 –1
–TC
 ----------
RC
V AP P LI ED  1 – e  = V CHOLD ;[2] VCHOLD charge response to VAPPLIED
 
– Tc
 ---------
V AP P LI ED  1 – e  = V A PP LIE D  1 – -------------------------- ;combining [1] and [2]
RC 1
  n+1 
2 –1

Note: Where n = number of bits of the ADC.

Solving for TC:

T C = – C HOLD  R IC + R SS + R S  ln(1/8191)
= – 28pF  1k  + 7k  + 10k   ln(0.0001221)
= 4.54 µs
Therefore:
T A CQ = 2µs + 4.54µs +   50°C- 25°C   0.05 µs/°C  
= 7.79µs

Note 1: The reference voltage (VREF) has no effect on the equation, since it cancels itself out.
2: The charge holding capacitor (CHOLD) is not discharged after each conversion.
3: The maximum recommended impedance for analog sources is 10 k. This is required to meet the pin
leakage specification.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 659


PIC18(L)F25/26K83
FIGURE 37-4: ANALOG INPUT MODEL

VDD
Analog Sampling
Input Switch
VT  0.6V
Rs pin RIC  1k SS Rss

VA CPIN I LEAKAGE(1)
VT  0.6V CHOLD = 28 pF
5 pF
Ref-

6V
5V RSS
Legend: CHOLD = Sample/Hold Capacitance VDD 4V
3V
CPIN = Input Capacitance 2V
I LEAKAGE = Leakage current at the pin due to
various junctions
5 6 7 8 9 10 11
RIC = Interconnect Resistance
Sampling Switch
RSS = Resistance of Sampling Switch (k)
SS = Sampling Switch
VT = Threshold Voltage

Note 1: Refer to Table 45-4 (parameter D340 and D341).

FIGURE 37-5: ADC TRANSFER FUNCTION

Full-Scale Range

FFFh
FFEh
FFDh
FFCh
ADC Output Code

FFBh

03h
02h
01h
00h
Analog Input Voltage
0.5 LSB 1.5 LSB

REF- Zero-Scale
Transition Full-Scale
Transition REF+

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 660


PIC18(L)F25/26K83
37.4 ADC Charge Pump 37.5 Capacitive Voltage Divider (CVD)
The ADC module has a dedicated charge pump which
Features
can be controlled through the ADCP register The ADC module contains several features that allow
(Register 37-36). The primary purpose of the charge the user to perform a relative capacitance
pump is to supply a constant voltage to the gates of measurement on any ADC channel using the internal
transistor devices in the A/D converter, signal and ref- ADC sample and hold capacitance as a reference. This
erence input pass-gates, to prevent degradation of relative capacitance measurement can be used to
transistor performance at low operating voltage. implement capacitive touch or proximity sensing
The charge pump can be enabled by setting the CPON applications. Figure 37-6 shows the basic block
bit in the ADC register. Once enabled, the pump will diagram of the CVD portion of the ADC module.
undergo a start-up time to stabilize the charge pump
output. Once the output stabilizes and is ready for use,
the CPRDY bit of the ADCP register will be set.

FIGURE 37-6: HARDWARE CAPACITIVE VOLTAGE DIVIDER BLOCK DIAGRAM

ADOUT Pad

ADOUT

VDD

ADIPPOL =1

ANx ADC Conversion Bus

ANx Pads
ADIPPOL = 0

VGND

ADDCAP<2:0>
Additional
Sample and
Hold Cap

VGND VGND VGND

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 661


PIC18(L)F25/26K83
37.5.1 CVD OPERATION
A CVD operation begins with the ADC’s internal
sample and hold capacitor (CHOLD) being
disconnected from the path which connects it to the
external capacitive sensor node. While disconnected,
CHOLD is precharged to VDD or VSS, while the path to
the sensor node is precharged to the level opposite that
of CHOLD. When the precharge phase is complete, the
VDD/VSS precharge paths for the two nodes are shut off
and CHOLD and the path to the external sensor node
are reconnected, at which time the acquisition phase of
the CVD operation begins. During acquisition, a
capacitive voltage divider is formed between the
precharged CHOLD and sensor nodes, which results in
a final voltage level setting on CHOLD, which is
determined by the capacitances and precharge levels
of the two nodes. After acquisition, the ADC converts
the voltage level on CHOLD. This process is then
repeated with inverted precharge levels for both the
CHOLD and external sensor nodes. Figure 37-7 shows
the waveform for two inverted CVD measurements,
which is known as differential CVD measurement.

FIGURE 37-7: DIFFERENTIAL CVD MEASUREMENT WAVEFORM

Precharge Acquisition Conversion Precharge Acquisition Conversion


VDD
ADC Sample and Hold Capacitor
Voltage

External Capacitive Sensor

VSS
First Sample Second Sample
Time

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 662


PIC18(L)F25/26K83
37.5.2 PRECHARGE CONTROL 37.5.4 GUARD RING OUTPUTS
The precharge stage is an optional period of time that Figure 37-8 shows a typical guard ring circuit. CGUARD
brings the external channel and internal sample and represents the capacitance of the guard ring trace
hold capacitor to known voltage levels. Precharge is placed on the PCB board. The user selects values for
enabled by writing a non-zero value to the PRE RA and RB that will create a voltage profile on CGUARD,
register. This stage is initiated when an ADC which will match the selected acquisition channel.
conversion begins, either from setting the GO bit, a The purpose of the guard ring is to generate a signal in
special event trigger, or a conversion restart from the phase with the CVD sensing signal to minimize the
computation functionality. If the PRE register is cleared effects of the parasitic capacitance on sensing elec-
when an ADC conversion begins, this stage is skipped. trodes. It also can be used as a mutual drive for mutual
During the precharge time, CHOLD is disconnected from capacitive sensing. For more information about active
the outer portion of the sample path that leads to the guard and mutual drive, see Application Note AN1478,
external capacitive sensor and is connected to either “mTouchTM Sensing Solution Acquisition Methods
VDD or VSS, depending on the value of the ADPPOL bit Capacitive Voltage Divider” (DS01478).
of ADCON1. At the same time, the port pin logic of the The ADC has two guard ring drive outputs, ADGRDA
selected analog channel is overridden to drive a digital and ADGRDB. These outputs can be routed through
high or low out, in order to precharge the outer portion PPS controls to I/O pins (see Section
of the ADC’s sample path, which includes the external 17.0 “Peripheral Pin Select (PPS) Module” for
sensor. The output polarity of this override is also deter- details) and the polarity of these outputs are controlled
mined by the ADPPOL bit of ADCON1. The amount of by the ADGPOL and ADIPEN bits of ADCON1.
time that this charging receives is controlled by the
PRE register. At the start of the first precharge stage, both outputs
are set to match the ADGPOL bit of ADCON1. Once
the acquisition stage begins, ADGRDA changes
Note 1: The external charging overrides the TRIS polarity, while ADGRDB remains unchanged. When
setting of the respective I/O pin. performing a double sample conversion, setting the
ADIPEN bit of ADCON1 causes both guard ring
2: If there is a device attached to this pin,
outputs to transition to the opposite polarity of
Precharge should not be used.
ADGPOL at the start of the second precharge stage,
and ADGRDA toggles again for the second acquisition.
37.5.3 ACQUISITION CONTROL For more information on the timing of the guard ring
The Acquisition stage is an optional time for the voltage output, refer to Figure 37-8 and Figure 37-9.
on the internal sample and hold capacitor to charge or
discharge from the selected analog channel.This FIGURE 37-8: GUARD RING CIRCUIT
acquisition time is controlled by the ADACQ register. If
PRE = 0, acquisition starts at the beginning of
conversion. When PRE = 1, the acquisition stage ADGRDA
begins when precharge ends.
RA
At the start of the acquisition stage, the port pin logic of
the selected analog channel is overridden to turn off the
digital high/low output drivers so they do not affect the
final result of the charge averaging. Also, the selected
ADC channel is connected to CHOLD. This allows RB CGUARD
charge averaging to proceed between the precharged
channel and the CHOLD capacitor. ADGRDB

Note: When PRE! = 0, acquisition time cannot


be ‘0’. In this case, setting ADACQ to ‘0’
will set a maximum acquisition time (8191
ADC clock cycles). When precharge is
disabled, setting ADACQ to ‘0’ will disable
hardware acquisition time control.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 663


PIC18(L)F25/26K83
FIGURE 37-9: DIFFERENTIAL CVD WITH GUARD RING OUTPUT WAVEFORM
VDD

Voltage
External Capacitive Sensor
Guard Ring Output

VSS
First Sample Second Sample
Time

37.5.5 ADDITIONAL SAMPLE AND HOLD


CAPACITANCE
Additional capacitance can be added in parallel with the
internal sample and hold capacitor (CHOLD) by using
the ADCAP register. This register selects a digitally
programmable capacitance which is added to the ADC
conversion bus, increasing the effective internal capac-
itance of the sample and hold capacitor in the ADC
module. This is used to improve the match between
internal and external capacitance for a better sensing
performance. The additional capacitance does not
affect analog performance of the ADC because it is not
connected during conversion. See Figure 37-10.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 664


PIC18(L)F25/26K83
37.6 Computation Operation
The ADC module hardware is equipped with post
conversion computation features. These features
provide data post-processing functions that can be
operated on the ADC conversion result, including
digital filtering/averaging and threshold comparison
functions.

FIGURE 37-10: COMPUTATIONAL FEATURES SIMPLIFIED BLOCK DIAGRAM


Rev. 10-000260B
8/4/2015

ADCALC<2:0>

ADMD<2:0>
ADRES

ADFILT
Set
Error Threshold
Interrupt
Average/ Calculation ADERR Logic
1 Flag
Filter ADPREV
0
ADSTPT
ADUTHR ADLTHR
ADPSIS

The operation of the ADC computational features is


controlled by ADMD <2:0> bits in the ADCON2 register.
The module can be operated in one of five modes:
• Basic: In this mode, ADC conversion occurs on single
(ADDSEN = 0) or double (ADDSEN = 1) samples.
ADIF is set after all the conversion are complete.
• Accumulate: With each trigger, the ADC conversion
result is added to accumulator and CNT increments.
ADIF is set after each conversion. ADTIF is set accord-
ing to the calculation mode.
• Average: With each trigger, the ADC conversion
result is added to the accumulator. When the RPT
number of samples have been accumulated, a
threshold test is performed. Upon the next trigger, the
accumulator is cleared. For the subsequent tests,
additional RPT samples are required to be
accumulated.
• Burst Average: At the trigger, the accumulator is
cleared. The ADC conversion results are then collected
repetitively until RPT samples are accumulated and
finally the threshold is tested.
• Low-Pass Filter (LPF): With each trigger, the ADC
conversion result is sent through a filter. When RPT
samples have occurred, a threshold test is performed.
Every trigger after that the ADC conversion result is
sent through the filter and another threshold test is
performed.
The five modes are summarized in Table 37-2 below.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 665


 2017 Microchip Technology Inc.

TABLE 37-2: COMPUTATION MODES


Bit Clear Conditions Value after Trigger completion Threshold Operations Value at ADTIF interrupt

Mode ADMD ACC and CNT ACC CNT Retrigger Threshold Interrupt ADAOV FLTR CNT
Test
Basic 0 ADACLR = 1 Unchanged Unchanged No Every Sam- If threshold=true N/A N/A count
ple
Accumulate 1 ADACLR = 1 S + ACC If (CNT=0xFF): CNT, oth- No Every Sam- If threshold=true ACC Overflow ACC/2ADCRS count
or erwise: CNT+1 ple
(S2-S1) + ACC
Average 2 ADACLR = 1 or CNT>=RPT S + ACC If (CNT=0xFF): CNT, oth- No If If threshold=true ACC Overflow ACC/2ADCRS count
at GO or retrigger or erwise: CNT+1 CNT>=RPT
(S2-S1) + ACC
Burst 3 ADACLR = 1 or GO set or Each repetition: same as Each repetition: same as Repeat while If If threshold=true ACC Overflow ACC/2ADCRS RPT
Average retrigger Average Average CNT<RPT CNT>=RPT
End with sum of all End with CNT=RPT
samples
Low-pass 4 ADACLR = 1 S+ACC-ACC/ Count up, stop counting No If If threshold=true ACC Overflow Filtered Value count
Filter 2ADCRS when CNT = 0xFF CNT>=RPT
or
(S2-S1)+ACC-ACC/2ADCRS
Preliminary

Note: S1 and S2 are abbreviations for Sample 1 and Sample 2, respectively. When ADDSEN = 0, S1 = ADRES; When ADDSEN = 1, S1 = PREV and S2 = ADRES.

PIC18(L)F25/26K83
DS40001943A-page 666
PIC18(L)F25/26K83
37.6.1 DIGITAL FILTER/AVERAGE ADCNT register. The ADACLR bit is cleared by the
hardware when accumulator clearing action is
The digital filter/average module consists of an accu-
complete.
mulator with data feedback options, and control logic to
determine when threshold tests need to be applied.
The accumulator is a 16-bit wide register which can be Note: When ADC is operating from FRC, five
accessed through the ADACCH:ADACCL register pair. FRC clock cycles are required to execute
the ACC clearing operation.
Upon each trigger event (the GO bit set or external
event trigger), the ADC conversion result is added to The ADCRS <2:0> bits in the ADCON2 register control
the accumulator. If the accumulated result exceeds the data shift on the accumulator result, which
2(accumulator_width)-1 = 18 = 262143, the overflow bit effectively divides the value in accumulator
ADAOV in the ADSTAT register is set. (ADACCU:ADACCH:ADACCL) register pair. For the
Accumulate mode of the digital filter, the shift provides
The number of samples to be accumulated is
a simple scaling operation. For the Average/Burst
determined by the RPT (A/D Repeat Setting) register.
Average mode, the shift bits are used to determine the
Each time a sample is added to the accumulator, the
number of logical right shifts to be performed on the
ADCNT register is incremented. Once RPT samples
accumulated result. For the Low-pass Filter mode, the
are accumulated (CNT = RPT), an Accumulator Clear
shift is an integral part of the filter, and determines the
command can be issued by the software by setting the
cut-off frequency of the filter. Table 37-3 shows the -3
ADACLR bit in the ADCON2 register. Setting the
dB cut-off frequency in ωT (radians) and the highest
ADACLR bit will also clear the ADAOV (Accumulator
signal attenuation obtained by this filter at nyquist
overflow) bit in the ADSTAT register, as well as the
frequency (ωT = π).

TABLE 37-3: LOW-PASS FILTER -3 dB CUT-OFF FREQUENCY


ADCRS ωT (radians) @ -3 dB Frequency dB @ Fnyquist=1/(2T)
1 0.72 -9.5
2 0.284 -16.9
3 0.134 -23.5
4 0.065 -29.8
5 0.032 -36.0
6 0.016 -42.0
7 0.0078 -48.1

37.6.2 BASIC MODE 37.6.4 AVERAGE MODE


Basic mode (ADMD = 000) disables all additional In Average mode (ADMD = 010), the ADACC registers
computation features. In this mode, no accumulation accumulate with each ADC sample, much as in
occurs but threshold error comparison is performed. Accumulate mode, and the ADCNT register increments
Double sampling, Continuous mode, and all CVD with each sample. The ADFLT register is also updated
features are still available, but no features involving the with the right-shifted value of the ADACC register. The
digital filter/average features are used. value of the ADCRS bits governs the number of right
shifts. However, in Average mode, the threshold
37.6.3 ACCUMULATE MODE comparison is performed upon CNT being greater than
In Accumulate mode (ADMD = 001), after every or equal to a user-defined RPT value. In this mode
conversion, the ADC result is added to the ADACC when RPT = 2^CNT, then the final accumulated value
register. The ADACC register is right-shifted by the will be divided by number of samples, allowing for a
value of the ADCRS bits in the ADCON2 register. This threshold comparison operation on the average of all
right-shifted value is copied in to the ADFLT register. gathered samples.
The Formatting mode does not affect the
right-justification of the ACC value. Upon each sample,
CNT is also incremented, incrementing the number of
samples accumulated. After each sample and
accumulation, the ACC value has a threshold
comparison performed on it (see Section
37.6.7 “Threshold Comparison”) and the ADTIF
interrupt may trigger.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 667


PIC18(L)F25/26K83
37.6.5 BURST AVERAGE MODE - Always interrupt regardless of threshold test
results
The Burst Average mode (ADMD = 011) acts the same
- If the threshold condition is met, the threshold
as the Average mode in most respects. The one way it
interrupt flag ADTIF is set.
differs is that it continuously retriggers ADC sampling
until the CNT value is greater than or equal to RPT,
even if Continuous Sampling mode (see Section Note 1: The threshold tests are signed
37.6.8 “Continuous Sampling mode”) is not operations.
enabled. This allows for a threshold comparison on the 2: If ADAOV is set, a threshold interrupt is
average of a short burst of ADC samples. signaled.

37.6.6 LOW-PASS FILTER MODE 37.6.8 CONTINUOUS SAMPLING MODE


The Low-pass Filter mode (ADMD = 100) acts similarly Setting the CONT bit in the ADCON0 register
to the Average mode in how it handles samples automatically retriggers a new conversion cycle after
(accumulates samples until CNT value greater than or updating the ADACC register. The GO bit remains set
equal to RPT, then triggers threshold comparison), but and retriggering occurs automatically.
instead of a simple average, it performs a low-pass
filter operation on all of the samples, reducing the effect If ADSOI = 1, a threshold interrupt condition will clear
of high-frequency noise on the average, then performs GO and the conversions will stop.
a threshold comparison on the results. (see Table 37-2
37.6.9 DOUBLE SAMPLE CONVERSION
for a more detailed description of the mathematical
operation). In this mode, the ADCRS bits determine the Double sampling is enabled by setting the ADDSEN bit
cut-off frequency of the low-pass filter (as of the ADCON1 register. When this bit is set, two
demonstrated by Table 37-3). conversions are required before the module will
calculate threshold error (each conversion must still be
37.6.7 THRESHOLD COMPARISON triggered separately). The first conversion will set the
At the end of each computation: ADMATH bit of the ADSTAT register and update
ADACC, but will not calculate ERR or trigger ADTIF.
• The conversion results are latched and held When the second conversion completes, the first value
stable at the end-of-conversion. is transferred to PREV (depending on the setting of
• The error is calculated based on a difference ADPSIS) and the value of the second conversion is
calculation which is selected by the placed into ADRES. Only upon the completion of the
ADCALC<2:0> bits in the ADCON3 register. The second conversion is ERR calculated and ADTIF
value can be one of the following calculations triggered (depending on the value of ADCALC).
(see Register 37-4 for more details):
- The first derivative of single measurements
- The CVD result in CVD mode
- The current result vs. a setpoint
- The current result vs. the filtered/average
result
- The first derivative of the filtered/average
value
- Filtered/average value vs. a setpoint
• The result of the calculation (ERR) is compared to
the upper and lower thresholds,
UTH<ADUTHH:ADUTHL> and
LTH<ADLTHH:ADLTHL> registers, to set the
ADUTHR and ADLTHR flag bits. The threshold
logic is selected by ADTMD<2:0> bits in the
ADCON3 register. The threshold trigger option
can be one of the following:
- Never interrupt
- Error is less than lower threshold
- Error is greater than or equal to lower
threshold
- Error is between thresholds (inclusive)
- Error is outside of thresholds
- Error is less than or equal to upper threshold
- Error is greater than upper threshold

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 668


PIC18(L)F25/26K83
37.7 Register Definitions: ADC Control
REGISTER 37-1: ADCON0: ADC CONTROL REGISTER 0
R/W-0/0 R/W-0/0 U-0 R/W-0/0 U-0 R/W-0/0 U-0 R/W/HC-0
ON CONT — CS — FM — GO
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HC = Bit is cleared by hardware

bit 7 ON: ADC Enable bit


1 = ADC is enabled
0 = ADC is disabled
bit 6 CONT: ADC Continuous Operation Enable bit
1 = GO is retriggered upon completion of each conversion trigger until ADTIF is set (if ADSOI is set)
or until GO is cleared (regardless of the value of ADSOI)
0 = ADC is cleared upon completion of each conversion trigger
bit 5 Unimplemented: Read as ‘0’
bit 4 CS: ADC Clock Selection bit
1 = Clock supplied from FRC dedicated oscillator
0 = Clock supplied by FOSC, divided according to ADCLK register
bit 3 Unimplemented: Read as ‘0’
bit 2 FM: ADC results Format/alignment Selection
1 = ADRES and PREV data are right-justified
0 = ADRES and PREV data are left-justified, zero-filled
bit 1 Unimplemented: Read as ‘0’
bit 0 GO: ADC Conversion Status bit(1)
1 = ADC conversion cycle in progress. Setting this bit starts an ADC conversion cycle. The bit is
cleared by hardware as determined by the CONT bit
0 = ADC conversion completed/not in progress
Note 1: This bit requires ON bit to be set.
2: If cleared by software while a conversion is in progress, the results of the conversion up to this point will
be transfered to ADRES and the state machine will be reset, but the ADIF interrupt flag bit will not be set;
filter and threshold operations will not be performed.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 669


PIC18(L)F25/26K83
REGISTER 37-2: ADCON1: ADC CONTROL REGISTER 1
R/W-0/0 R/W-0/0 R/W-0/0 U-0 U-0 U-0 U-0 R/W-0/0
PPOL IPEN GPOL — — — — DSEN
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 PPOL: Precharge Polarity bit


If PRE>0x00:

Action During 1st Precharge Stage


PPOL
External (selected analog I/O pin) Internal (AD sampling capacitor)
1 Connected to VDD CHOLD connected to VSS
0 Connected to VSS CHOLD connected to VDD

Otherwise:
The bit is ignored
bit 6 IPEN: A/D Inverted Precharge Enable bit
If DSEN = 1
1 = The precharge and guard signals in the second conversion cycle are the opposite polarity of the
first cycle
0 = Both Conversion cycles use the precharge and guards specified by ADPPOL and ADGPOL
Otherwise:
The bit is ignored
bit 5 GPOL: Guard Ring Polarity Selection bit
1 = ADC guard Ring outputs start as digital high during Precharge stage
0 = ADC guard Ring outputs start as digital low during Precharge stage
bit 4-1 Unimplemented: Read as ‘0’
bit 0 DSEN: Double-sample enable bit
1 = Two conversions are performed on each trigger. Data from the first conversion appears in PREV
0 = One conversion is performed for each trigger

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 670


PIC18(L)F25/26K83

REGISTER 37-3: ADCON2: ADC CONTROL REGISTER 2


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W/HC-0 R/W-0/0 R/W-0/0 R/W-0/0
PSIS CRS<2:0> ACLR MD<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HC = Bit is cleared by hardware

bit 7 PSIS: ADC Previous Sample Input Select bits


1 = PREV is the FLTR value at start-of-conversion
0 = PREV is the RES value at start-of-conversion
bit 6-4 CRS<2:0>: ADC Accumulated Calculation Right Shift Select bits
If ADMD = 100:
Low-pass filter time constant is 2ADCRS, filter gain is 1:1
If ADMD = 001, 010 or 011:
The accumulated value is right-shifted by CRS (divided by 2ADCRS)(1,2)
Otherwise:
Bits are ignored
bit 3 ACLR: A/D Accumulator Clear Command bit(3)
1 = ACC, AOV and CNT registers are cleared
0 = Clearing action is complete (or not started)
bit 2-0 MD<2:0>: ADC Operating Mode Selection bits(4)
111-101 = Reserved
100 = Low-pass Filter mode
011 = Burst Average mode
010 = Average mode
001 = Accumulate mode
000 = Basic mode
Note 1: To correctly calculate an average, the number of samples (set in RPT) must be 2ADCRS.
2: ADCRS = 3'b111 is a reserved option.
3: This bit is cleared by hardware when the accumulator operation is complete; depending on oscillator
selections, the delay may be many instructions.
4: See Table 37-2 for Full mode descriptions.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 671


PIC18(L)F25/26K83

REGISTER 37-4: ADCON3: ADC CONTROL REGISTER 3


U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W/HC-0 R/W-0/0 R/W-0/0 R/W-0/0
— CALC<2:0> SOI TMD<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HC = Bit is cleared by hardware

bit 7 Unimplemented: Read as ‘0’


bit 6-4 CALC<2:0>: ADC Error Calculation Mode Select bits

DSEN = 0 DSEN = 1 CVD


CALC Application
Single-Sample Mode Double-Sample Mode(1)
111 Reserved Reserved Reserved
110 Reserved Reserved Reserved
101 FLTR-STPT FLTR-STPT Average/filtered value vs.
setpoint
100 PREV-FLTR PREV-FLTR First derivative of filtered
value(3) (negative)
011 Reserved Reserved Reserved
010 RES-FLTR (RES-PREV)-FLTR Actual result vs.
averaged/filtered value
001 RES-STPT (RES-PREV)-STPT Actual result vs.setpoint
000 RES-PREV RES-PREV First derivative of single
measurement(2)
Actual CVD result in CVD
mode(2)
bit 3 SOI: ADC Stop-on-Interrupt bit
If CONT = 1:
1 = GO is cleared when the threshold conditions are met, otherwise the conversion is retriggered
0 = GO is not cleared by hardware, must be cleared by software to stop retriggers
bit 2-0 TMD<2:0>: Threshold Interrupt Mode Select bits
111 = Interrupt regardless of threshold test results
110 = Interrupt if ERR>UTH
101 = Interrupt if ERRUTH
100 = Interrupt if ERRLTH or ERR>UTH
011 = Interrupt if ERR>LTH and ERR<UTH
010 = Interrupt if ERR≥LTH
001 = Interrupt if ERR<LTH
000 = Never interrupt

Note 1: When PSIS = 0, the value of (RES-PREV) is the value of (S2-S1) from Table 37-2.
2: When PSIS = 0
3: When PSIS = 1.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 672


PIC18(L)F25/26K83

REGISTER 37-5: ADSTAT: ADC STATUS REGISTER


R-0/0 R-0/0 R-0/0 R/HS/HC-0/0 U-0 R-0/0 R-0/0 R-0/0
AOV UTHR LTHR MATH — STAT<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS/HC = Bit is set/cleared by hardware

bit 7 AOV: ADC Accumulator Overflow bit


1 = ADC accumulator or ERR calculation have overflowed
0 = ADC accumulator and ERR calculation have not overflowed
bit 6 UTHR: ADC Module Greater-than Upper Threshold Flag bit
1 = ERR >UTH
0 = ERR UTH
bit 5 LTHR: ADC Module Less-than Lower Threshold Flag bit
1 = ERR < LTH
0 = ERR ≥ LTH
bit 4 MATH: ADC Module Computation Status bit
1 = Registers ACC, FLTR, UTH, LTH and the AOV bit are updating or have already updated
0 = Associated registers/bits have not changed since this bit was last cleared
bit 3 Unimplemented: Read as ‘0’
bit 2-0 STAT<2:0>: ADC Module Cycle Multistage Status bits(1)
111 = ADC module is in 2nd conversion stage
110 = ADC module is in 2nd acquisition stage
101 = ADC module is in 2nd precharge stage
100 = Not used
011 = ADC module is in 1st conversion stage
010 = ADC module is in 1st acquisition stage
001 = ADC module is in 1st precharge stage
000 = ADC module is not converting

Note 1: If CS = 1, and FOSC<FRC, these bits may be invalid.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 673


PIC18(L)F25/26K83

REGISTER 37-6: ADCLK: ADC CLOCK SELECTION REGISTER


U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — CS<5:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 Unimplemented: Read as ‘0’


bit 5-0 CS<5:0>: ADC Conversion Clock Select bits
111111 = FOSC/128
111110 = FOSC/126
111101 = FOSC/124



000000 = FOSC/2

REGISTER 37-7: ADREF: ADC REFERENCE SELECTION REGISTER


U-0 U-0 U-0 R/W-0/0 U-0 U-0 R/W-0/0 R/W-0/0
— — — NREF — — PREF<1:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-5 Unimplemented: Read as ‘0’


bit 4 NREF: ADC Negative Voltage Reference Selection bit
1 = VREF- is connected to external VREF-
0 = VREF- is connected to VSS
bit 3-2 Unimplemented: Read as ‘0’
bit 1-0 PREF: ADC Positive Voltage Reference Selection bits
11 = VREF+ is connected to internal Fixed Voltage Reference (FVR) module
10 = VREF+ is connected to external VREF+
01 = Reserved
00 = VREF+ is connected to VDD

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 674


PIC18(L)F25/26K83

REGISTER 37-8: ADPCH: ADC POSITIVE CHANNEL SELECTION REGISTER


U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — ADPCH<5:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-6 Unimplemented: Read as ‘0’


bit 5-0 ADPCH<5:0>: ADC Positive Input Channel Selection bits

111111 = Fixed Voltage Reference (FVR)(2)


111110 = DAC1 output(1)
111101 = Temperature Indicator(3)
111100 = AVSS (Analog Ground)
111011 = Reserved. No channel connected.



010111 = ANC7
010110 = ANC6
010101 = ANC5
010100 = ANC4
010011 = ANC3
010010 = ANC2
010001 = ANC1
010000 = ANC0
001111 = ANB7
001110 = ANB6
001101 = ANB5
001100 = ANB4
001011 = ANB3
001010 = ANB2
001001 = ANB1
001000 = ANB0
000111 = ANA7
000110 = ANA6
000101 = ANA5
000100 = ANA4
000011 = ANA3
000010 = ANA2
000001 = ANA1
000000 = ANA0

Note 1: See Section 38.0 “5-Bit Digital-to-Analog Converter (DAC) Module” for more information.
2: See Section 35.0 “Fixed Voltage Reference (FVR)” for more information.
3: See Section 36.0 “Temperature Indicator Module” for more information.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 675


PIC18(L)F25/26K83

REGISTER 37-9: ADPREL: ADC PRECHARGE TIME CONTROL REGISTER (LOW BYTE)
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
PRE<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 PRE<7:0>: Precharge Time Select bits


See Table 37-4.

REGISTER 37-10: ADPREH: ADC PRECHARGE TIME CONTROL REGISTER (HIGH BYTE)
U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — PRE<12:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 PRE<12:8>: Precharge Time Select bits
See Table 37-4.

Note: If PRE is not equal to ‘0’, then ADACQ = b’00000000 means Acquisition time is 256 clocks of the selected
ADC clock.

TABLE 37-4: PRECHARGE TIME


ADPRE Precharge time

1 1111 1111 1111 8191 clocks of the selected ADC clock


1 1111 1111 1110 8190 clocks of the selected ADC clock
1 1111 1111 1101 8189 clocks of the selected ADC clock
... ...
0 0000 0000 0010 2 clocks of the selected ADC clock
0 0000 0000 0001 1 clock of the selected ADC clock
0 0000 0000 0000 Not included in the data conversion cycle

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 676


PIC18(L)F25/26K83

REGISTER 37-11: ADACQL: ADC ACQUISITION TIME CONTROL REGISTER (LOW BYTE)
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
ACQ<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 ACQ<7:0>: Acquisition (charge share time) Select bits


See Table .

REGISTER 37-12: ADACQH: ADC ACQUISITION TIME CONTROL REGISTER (HIGH BYTE)
U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — ACQ<12:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 ACQ<12:8>: Acquisition (charge share time) Select bits
See Table .

TABLE 37-5: ACQUISITION TIME


ADACQ Acquisition time

1 1111 1111 1111 8191 clocks of the selected ADC clock


1 1111 1111 1110 8190 clocks of the selected ADC clock
1 1111 1111 1101 8189 clocks of the selected ADC clock
... ...
0 0000 0000 0010 2 clocks of the selected ADC clock
0 0000 0000 0001 1 clock of the selected ADC clock
0 0000 0000 0000 Not included in the data conversion cycle(1)
Note 1: If ADPRE is not equal to ‘0’, then ADACQ = 0b0_0000_0000_0000 means Acquisition time is 8192
clocks of the selected ADC clock.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 677


PIC18(L)F25/26K83

REGISTER 37-13: ADCAP: ADC ADDITIONAL SAMPLE CAPACITOR SELECTION REGISTER


U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — ADCAP<4:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 ADCAP<4:0>: ADC Additional Sample Capacitor Selection bits
11111 = 31 pF
11110 = 30 pF
11101 = 29 pF



00011 = 3 pF
00010 = 2 pF
00001 = 1 pF
00000 = No additional capacitance

REGISTER 37-14: ADRPT: ADC REPEAT SETTING REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
RPT<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 RPT<7:0>: ADC Repeat Threshold bits


Counts the number of times that the ADC has been triggered and is used along with CNT to determine
when the error threshold is checked when the computation is Low-pass Filter, Burst Average, or Aver-
age modes. See Table 37-2 for more details.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 678


PIC18(L)F25/26K83

REGISTER 37-15: ADCNT: ADC REPEAT COUNTER REGISTER


R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
CNT<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 CNT<7:0>: ADC Repeat Count bits


Determines the number of times that the ADC is triggered before the threshold is checked when the
computation is Low-pass Filter, Burst Average, or Average modes. See Table 37-2 for more details.

REGISTER 37-16: ADFLTRH: ADC FILTER HIGH BYTE REGISTER


R-x R-x R-x R-x R-x R-x R-x R-x
FLTR<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 FLTR<15:8>: ADC Filter Output Most Significant bits


In Accumulate, Average, and Burst Average mode, this is equal to ACC right shifted by the ADCRS
bits of ADCON2. In LPF mode, this is the output of the Low-pass Filter.

REGISTER 37-17: ADFLTRL: ADC FILTER LOW BYTE REGISTER


R-x R-x R-x R-x R-x R-x R-x R-x
FLTR<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 FLTR<7:0>: ADC Filter Output Least Significant bits


In Accumulate, Average, and Burst Average mode, this is equal to ACC right shifted by the ADCRS
bits of ADCON2. In LPF mode, this is the output of the Low-pass Filter.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 679


PIC18(L)F25/26K83

REGISTER 37-18: ADRESH: ADC RESULT REGISTER HIGH, FM = 0


R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
ADRES<11:4>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 ADRES<11:4>: ADC Result Register bits


Upper eight bits of 12-bit conversion result.

REGISTER 37-19: ADRESL: ADC RESULT REGISTER LOW, FM = 0


R/W-x/u R/W-x/u R/W-x/u R/W-x/u U-0 U-0 U-0 U-0
ADRES<3:0> — — — —
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-4 ADRES<3:0>: ADC Result Register bits. Lower four bits of 12-bit conversion result.
bit 3-0 Reserved

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 680


PIC18(L)F25/26K83

REGISTER 37-20: ADRESH: ADC RESULT REGISTER HIGH, FM = 1


U-0 U-0 U-0 U-0 R/W-x/u R/W-x/u R/W-x/u R/W-x/u
— — — — ADRES<11:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-4 Reserved


bit 3-0 ADRES<11:8>: ADC Sample Result bits. Upper four bits of 12-bit conversion result.

REGISTER 37-21: ADRESL: ADC RESULT REGISTER LOW, FM = 1


R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u R/W-x/u
ADRES<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 ADRES<7:0>: ADC Result Register bits. Lower eight bits of 12-bit conversion result.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 681


PIC18(L)F25/26K83

REGISTER 37-22: ADPREVH: ADC PREVIOUS RESULT REGISTER


R-x R-x R-x R-x R-x R-x R-x R-x
PREV<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 PREV<15:8>: Previous ADC Results bits


If ADPSIS = 1:
Upper byte of FLTR at the start of current ADC conversion
If ADPSIS = 0:
Upper bits of ADRES at the start of current ADC conversion(1)

Note 1: If ADPSIS = 0, ADPREVH and ADPREVL are formatted the same way as ADRES is, depending on the
FM bit.

REGISTER 37-23: ADPREVL: ADC PREVIOUS RESULT REGISTER


R-x R-x R-x R-x R-x R-x R-x R-x
PREV<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 PREV<7:0>: Previous ADC Results bits


If ADPSIS = 1:
Lower byte of FLTR at the start of current ADC conversion
If ADPSIS = 0:
Lower bits of ADRES at the start of current ADC conversion(1)

Note 1: If ADPSIS = 0, ADPREVH and ADPREVL are formatted the same way as ADRES is, depending on the
FM bit.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 682


PIC18(L)F25/26K83

REGISTER 37-24: ADACCU: ADC ACCUMULATOR REGISTER UPPER


U-0 U-0 U-0 U-0 U-0 U-0 R/W-x/x R/W-x/x
— — — — — — ACC<17:16>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-2 Unimplemented: Read as ‘0’


bit 1-0 ACC<17:16>: ADC Accumulator MSB. Upper two bits of accumulator value. See Table 37-2 for more
details.

REGISTER 37-25: ADACCH: ADC ACCUMULATOR REGISTER HIGH


R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x
ACC<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 ACC<15:8>: ADC Accumulator middle bits. Middle eight bits of accumulator value. See Table 37-2 for
more details.

REGISTER 37-26: ADACCL: ADC ACCUMULATOR REGISTER LOW


R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x R/W-x/x
ACC<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 ACC<7:0>: ADC Accumulator LSB. Lower eight bits of accumulator value. See Table 37-2 for more
details.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 683


PIC18(L)F25/26K83

REGISTER 37-27: ADSTPTH: ADC THRESHOLD SETPOINT REGISTER HIGH


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
STPT<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 STPT<15:8>: ADC Threshold Setpoint MSB. Upper byte of ADC threshold setpoint, depending on
ADCALC, may be used to determine ERR, see Register 37-29 for more details.

REGISTER 37-28: ADSTPTL: ADC THRESHOLD SETPOINT REGISTER LOW


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
STPT<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 STPT<7:0>: ADC Threshold Setpoint LSB. Lower byte of ADC threshold setpoint, depending on
ADCALC, may be used to determine ERR, see Register 37-30 for more details.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 684


PIC18(L)F25/26K83

REGISTER 37-29: ADERRH: ADC SETPOINT ERROR REGISTER HIGH


R-x R-x R-x R-x R-x R-x R-x R-x
ERR<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 ERR<15:8>: ADC Setpoint Error MSB. Upper byte of ADC Setpoint Error. Setpoint Error calculation
is determined by CALC bits of ADCON3, see Register 37-4 for more details.

REGISTER 37-30: ADERRL: ADC SETPOINT ERROR LOW BYTE REGISTER


R-x R-x R-x R-x R-x R-x R-x R-x
ERR<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 ERR<7:0>: ADC Setpoint Error LSB. Lower byte of ADC Setpoint Error calculation is determined by
CALC bits of ADCON3, see Register 37-4 for more details.

REGISTER 37-31: ADLTHH: ADC LOWER THRESHOLD HIGH BYTE REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
LTH<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 LTH<15:8>: ADC Lower Threshold MSB. LTH and UTH are compared with ERR to set the ADUTHR
and ADLTHR bits of ADSTAT. Depending on the setting of ADTMD, an interrupt may be triggered by
the results of this comparison.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 685


PIC18(L)F25/26K83

REGISTER 37-32: ADLTHL: ADC LOWER THRESHOLD LOW BYTE REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
LTH<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 LTH<7:0>: ADC Lower Threshold LSB. LTH and UTH are compared with ERR to set the ADUTHR
and ADLTHR bits of ADSTAT. Depending on the setting of ADTMD, an interrupt may be triggered by
the results of this comparison.

REGISTER 37-33: ADUTHH: ADC UPPER THRESHOLD HIGH BYTE REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
UTH<15:8>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 UTH<15:8>: ADC Upper Threshold MSB. LTH and UTH are compared with ERR to set the ADUTHR
and ADLTHR bits of ADSTAT. Depending on the setting of ADTMD, an interrupt may be triggered by
the results of this comparison.

REGISTER 37-34: ADUTHL: ADC UPPER THRESHOLD LOW BYTE REGISTER


R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
UTH<7:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-0 UTH<7:0>: ADC Upper Threshold LSB. LTH and UTH are compared with ERR to set the ADUTHR
and ADLTHR bits of ADSTAT. Depending on the setting of ADTMD, an interrupt may be triggered by
the results of this comparison.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 686


PIC18(L)F25/26K83

REGISTER 37-35: ADACT: ADC AUTO-CONVERSION TRIGGER CONTROL REGISTER


U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — ACT<4:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 ADACT<4:0>: Auto-Conversion Trigger Select Bits
11111 = Reserved, do not use



11110 = Reserved, do not use
11101 = Software write to ADPCH
11100 = Reserved, do not use
11011 = Software read of ADRESH
11010 = Software read of ADERRH
11001 = CLC4_out
11000 = CLC3_out
10111 = CLC2_out
10110 = CLC1_out
10101 = Logical OR of all Interrupt-on-Change Interrupt Flags
10100 = CMP2_out
10011 = CMP1_out
10010 = NCO1_out
10001 = PWM8_out
10000 = PWM7_out
01111 = PWM6_out
01110 = PWM5_out
01101 = CCP4_trigger
01100 = CCP3_trigger
01011 = CCP2_trigger
01010 = CCP1_trigger
01001 = SMT1_trigger
01000 = TMR6_postscaled
00111 = TMR5_overflow
00110 = TMR4_postscaled
00101 = TMR3_overflow
00100 = TMR2_postscaled
00011 = TMR1_overflow
00010 = TMR0_overflow
00001 = Pin selected by ADACTPPS
00000 = External Trigger Disabled

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 687


PIC18(L)F25/26K83

REGISTER 37-36: ADCP: ADC CHARGE PUMP CONTROL REGISTER


R/W-0/0 U-0 U-0 U-0 U-0 U-0 U-0 R-0/0
CPON — — — — — — CPRDY
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared HS= Hardware set

bit 7 CPON: Charge Pump On Control bit


1 = Charge Pump On when requested by the ADC
0 = Charge Pump Off
bit 6-1 Unimplemented: Read as ‘0’
bit 0 CPRDY: Charge Pump Ready Status bit
1 = Charge Pump is ready
0 = Charge Pump is not ready (or never started)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 688


PIC18(L)F25/26K83

TABLE 37-6: SUMMARY OF REGISTERS ASSOCIATED WITH ADC


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page

ADCON0 ON CONT — CS — FM — GO 669


ADCON1 ADPPOL ADIPEN ADGPOL — — — — ADDSEN 670
ADCON2 ADPSIS ADCRS<2:0> ADACLR MD<2:0> 671
ADCON3 — ADCALC<2:0> ADSOI ADTMD<2:0> 672
ADSTAT ADAOV ADUTHR ADLTHR ADMATH ADSTAT<3:0> 673
ADCLK — — CS<5:0> 674
ADREF — — — ADNREF — — ADPREF<1:0> 674
ADPCH — — ADPCH<5:0> 675
ADPREL PRE<7:0> 676
ADPREH — — — PRE<12:8> 676
ADACQL ACQ<7:0> 677
ADCAP — — — ADCAP<4:0> 678
ADRPT RPT<7:0> 678
ADCNT CNT<7:0> 679
ADFLTRL FLTR<7:0> 679
ADFLTRH FLTR<15:8> 679
ADRESL ADRESL<7:0> 680, 681
ADRESH ADRESH<7:0> 680, 681
ADPREVH PREV<15:8> 682
ADPREVL PREV<7:0> 682
ADACCH ACC<15:8> 683
ADACCL ACC<7:0> 683
ADACCU — — — — — — ACC<17:16> 683
ADSTPTL STPT<7:0> 684
ADSTPTH STPT<15:8> 684
ADERRL ERR<7:0> 685
ADERRH ERR<15:8> 685
ADLTHH LTH<15:8> 685
ADLTHL LTH<7:0> 686
ADUTHH UTH<15:8> 686
ADUTHL UTH<7:0> 686
ADERRL ERR<15:8> 685
ADACT — — — — ADACT<4:0> 671
ADCP CPON — — — — — — CPRDY 688
Legend: — = unimplemented read as ‘0’. Shaded cells are not used for the ADC module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 689


PIC18(L)F25/26K83
38.0 5-BIT DIGITAL-TO-ANALOG The output of the DAC (DAC1_output) can be selected
as a reference voltage to the following:
CONVERTER (DAC) MODULE
• Comparator positive input
The Digital-to-Analog Converter supplies a variable
• ADC input channel
voltage reference, ratiometric with the input source,
with 32 selectable output levels. • DAC1OUT1 pin
• DAC1OUT2 pin
The positive input source (VSOURCE+) of the DAC can
be connected to: The Digital-to-Analog Converter (DAC) can be enabled
by setting the EN bit of the DAC1CON0 register.
• FVR Buffer
• External VREF+ pin
• VDD supply voltage
The negative input source (VSOURCE-) of the DAC can
be connected to:
• External VREF- pin
• Vss

FIGURE 38-1: DIGITAL-TO-ANALOG CONVERTER BLOCK DIAGRAM


Rev. 10-000026H
10/12/2016

Reserved 11
VSOURCE+ DATA<4:0>
FVR Buffer 10 5
VREF+ 01 R

AVDD 00

R
PSS

R
32-to-1 MUX

32 DACx_output
To Peripherals
Steps
EN

R DACxOUT1(1)

OE1
R
DACxOUT2(1)

VREF- 1 VSOURCE- OE2


AVSS 0

NSS

Note 1: The unbuffered DACx_output is provided on the DACxOUT pin(s).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 690


PIC18(L)F25/26K83
38.1 Output Voltage Selection Reading the DAC1OUTn pin when it has been
configured for DAC reference voltage output will
The DAC has 32 voltage level ranges. The 32 levels always return a ‘0’.
are set with the DATA<4:0> bits of the DAC1CON1
register. Note: The unbuffered DAC output (DAC1OUTn)
is not intended to drive an external load.
The DAC output voltage can be determined by using
Equation 38-1.
38.4 Operation During Sleep
38.2 Ratiometric Output Level When the device wakes up from Sleep through an
The DAC output value is derived using a resistor ladder interrupt or a Windowed Watchdog Timer Time-out, the
with each end of the ladder tied to a positive and contents of the DAC1CON0 register are not affected.
negative voltage reference input source. If the voltage To minimize current consumption in Sleep mode, the
of either input source fluctuates, a similar fluctuation voltage reference should be disabled.
will result in the DAC output value.
38.5 Effects of a Reset
The value of the individual resistors within the ladder
can be found in Table 45-16. A device Reset affects the following:
• DAC1 is disabled.
38.3 DAC Voltage Reference Output • DAC1 output voltage is removed from the
The unbuffered DAC voltage can be output to the DAC1OUTn pin(s).
DAC1OUTn pin(s) by setting the respective DACOEn • The DAC1R<4:0> range select bits are cleared.
bit(s) of the DAC1CON0 register. Selecting the DAC
reference voltage for output on either DAC1OUTn pin
automatically overrides the digital output buffer, the
weak pull-up and digital input threshold detector
functions of that pin.

EQUATION 38-1: DAC OUTPUT VOLTAGE


IF DACEN = 1

DATA  4:0 
DACx_output =   VREF+ – VREF-   ----------------------------
5
- + VREF-
2

Note: See the DAC1CON0 register for the available VSOURCE+ and VSOURCE- selections.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 691


PIC18(L)F25/26K83
38.6 Register Definitions: DAC Control
Long bit name prefixes for the DAC peripheral is shown
below. Refer to Section 1.3.2.2 “Long Bit Names” for
more information.

Peripheral Bit Name Prefix


DAC1 DAC1
l
REGISTER 38-1: DAC1CON0: DAC CONTROL REGISTER
R/W-0/0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 U-0 R/W-0/0
EN — OE1 OE2 PSS<1:0> — NSS
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7 EN: DAC Enable bit


1 = DAC is enabled
0 = DAC is disabled(1)
bit 6 Unimplemented: Read as ‘0’
bit 5 OE1: DAC Voltage Output Enable bit
1 = DAC voltage level is output on the DAC1OUT1 pin
0 = DAC voltage level is disconnected from the DAC1OUT1 pin
bit 4 OE2: DAC Voltage Output Enable bit
1 = DAC voltage level is output on the DAC1OUT2 pin
0 = DAC voltage level is disconnected from the DAC1OUT2 pin
bit 3-2 PSS<1:0>: DAC Positive Source Select bit
11 = Reserved
10 = FVR buffer 2
01 = VREF+
00 = VDD
bit 1 Unimplemented: Read as ‘0’
bit 0 NSS: DAC Negative Source Select bit
1 = VREF-
0 = VSS
Note 1: DAC1OUTx output pins are still active.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 692


PIC18(L)F25/26K83

REGISTER 38-2: DAC1CON1: DAC DATA REGISTER


U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — DATA<4:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
u = Bit is unchanged x = Bit is unknown -n/n = Value at POR and BOR/Value at all other Resets
‘1’ = Bit is set ‘0’ = Bit is cleared

bit 7-5 Unimplemented: Read as ‘0’


bit 4-0 DATA<4:0>: Data Input Register for DAC bits

TABLE 38-1: SUMMARY OF REGISTERS ASSOCIATED WITH THE DAC MODULE


Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page
DAC1CON0 EN — OE1 OE2 PSS<1:0> — NSS 692
DAC1CON1 — — — DATA<4:0> 693
Legend: — = Unimplemented location, read as ‘0’. Shaded cells are not used with the DAC module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 693


PIC18(L)F25/26K83
39.0 COMPARATOR MODULE 39.1 Comparator Overview
Note: The PIC18(L)F25/26K83 devices have A single comparator is shown in Figure 39-1 along with
two comparators. Therefore, all informa- the relationship between the analog input levels and
tion in this section refers to both C1 and the digital output. When the analog voltage at VIN+ is
C2. less than the analog voltage at VIN-, the output of the
comparator is a digital low level. When the analog
Comparators are used to interface analog circuits to a voltage at VIN+ is greater than the analog voltage at
digital circuit by comparing two analog voltages and VIN-, the output of the comparator is a digital high level.
providing a digital indication of their relative magnitudes.
Comparators are very useful mixed signal building FIGURE 39-1: SINGLE COMPARATOR
blocks because they provide analog functionality
independent of program execution.
VIN+ +
The analog comparator module includes the following
Output
features: VIN- –
• Programmable input selection
• Programmable output polarity
• Rising/falling output edge interrupts
VIN-
VIN+

Output

Note: The black areas of the output of the


comparator represents the uncertainty
due to input offsets and response time.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 694


PIC18(L)F25/26K83
FIGURE 39-2: COMPARATOR MODULE SIMPLIFIED BLOCK DIAGRAM

Rev. 10-000027N
10/12/2016

3 (1)
NCH<2:0> EN
Interrupt INTP
Rising
Edge set bit
CxIN0- 000 CxIF
Interrupt INTN
CxIN1- 001
Falling
CxIN2- 010 EN(1) Edge

CxIN3- 011 CxVP


- D Q CxOUT
Reserved 100
Cx
Reserved 101 CxVN
FVR_buffer2 110
+ Q1

111
SP HYS POL

CxOUT_sync To Other
Peripherals
SYNC
CxIN0+ 000
TRIS bit
CxIN1+ 001 0

Reserved 010 PPS CxOUT


D Q 1
Reserved 011
Reserved 100 RxyPPS
(From Timer1 Module) T1CLK
DAC_output 101
FVR_buffer2 110
111

PCH<2:0> EN(1)
3

Note 1: When CxON = 0, all multiplexer inputs are disconnected and the Comparator will produce a ‘0’ at the output.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 695


PIC18(L)F25/26K83
39.2 Comparator Control 39.2.3 COMPARATOR OUTPUT POLARITY
Each comparator has two control registers: CMxCON0 Inverting the output of the comparator is functionally
and CMxCON1. equivalent to swapping the comparator inputs. The
polarity of the comparator output can be inverted by
The CMxCON0 register (see Register 39-1) contains setting the POL bit of the CMxCON0 register. Clearing
Control and Status bits for the following: the POL bit results in a noninverted output.
• Enable Table 39-1 shows the output state versus input
• Output conditions, including polarity control.
• Output polarity
• Hysteresis enable
TABLE 39-1: COMPARATOR OUTPUT
• Timer1 output synchronization STATE VS. INPUT
The CMxCON1 register (see Register 39-2) contains CONDITIONS
Control bits for the following:
Input Condition POL CxOUT
• Interrupt on positive/negative edge enables
CxVN > CxVP 0 0
The CMxPCH and CMxNCH registers are used to
CxVN < CxVP 0 1
select the positive and negative input channels,
respectively. CxVN > CxVP 1 1
CxVN < CxVP 1 0
39.2.1 COMPARATOR ENABLE
Setting the EN bit of the CMxCON0 register enables
the comparator for operation. Clearing the EN bit dis-
ables the comparator resulting in minimum current con-
sumption.

39.2.2 COMPARATOR OUTPUT


The output of the comparator can be monitored by
reading either the CxOUT bit of the CMxCON0 register
or the CxOUT bit of the CMOUT register.
The comparator output can also be routed to an
external pin through the RxyPPS register (Register 17-2).
The corresponding TRIS bit must be clear to enable the
pin as an output.
Note 1: The internal output of the comparator is
latched with each instruction cycle.
Unless otherwise specified, external out-
puts are not latched.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 696


PIC18(L)F25/26K83
39.3 Comparator Hysteresis 39.5 Comparator Positive Input
A selectable amount of separation voltage can be
Selection
added to the input pins of each comparator to provide a Configuring the PCH<2:0> bits of the CMxPCH register
hysteresis function to the overall operation. Hysteresis directs an internal voltage reference or an analog pin to
is enabled by setting the HYS bit of the CMxCON0 the non-inverting input of the comparator:
register.
• CxIN0+, CxIN1+ analog pin
See Comparator Specifications in Table 45-15 for more • DAC output
information.
• FVR (Fixed Voltage Reference)
39.3.1 COMPARATOR OUTPUT • VSS (Ground)
SYNCHRONIZATION See Section 35.0 “Fixed Voltage Reference (FVR)”
The output from a comparator can be synchronized for more information on the Fixed Voltage Reference
with Timer1 by setting the SYNC bit of the CMxCON0 module.
register. See Section 38.0 “5-Bit Digital-to-Analog Converter
Once enabled, the comparator output is latched on the (DAC) Module” for more information on the DAC input
falling edge of the Timer1 source clock. If a prescaler is signal.
used, the CxOUT bit is synchronized with the timer, so Any time the comparator is disabled (EN = 0), all com-
that the software sees no ambiguity due to timing. See parator inputs are disabled.
the Comparator Block Diagram (Figure 39-2) and the
Timer1 Block Diagram (Figure 21-1) for more 39.6 Comparator Negative Input
information.
Selection
39.4 Comparator Interrupt The NCH<2:0> bits of the CMxNCH register direct an
analog input pin and internal reference voltage or ana-
An interrupt can be generated for every rising or falling log ground to the inverting input of the comparator:
edge of the comparator output.
• CxIN0-, CxIN1-, CxIN2-, CxIN3- analog pin
When either edge detector is triggered and its associ-
• FVR (Fixed Voltage Reference)
ated enable bit is set (INTP and/or INTN bits of the
CMxCON1 register), the Corresponding Interrupt Flag • Analog Ground
bit (CxIF bit of the respective PIR register) will be set.
To enable the interrupt, you must set the following bits: Note: To use CxINy+ and CxINy- pins as analog
• EN bit of the CMxCON0 register input, the appropriate bits must be set in
the ANSEL register and the correspond-
• CxIE bit of the respective PIE register
ing TRIS bits must also be set to disable
• INTP bit of the CMxCON1 register (for a rising the output drivers.
edge detection)
• INTN bit of the CMxCON1 register (for a falling
edge detection)
• GIE bit of the INTCON0 register
The associated interrupt flag bit, CxIF bit of the
respective PIR register, must be cleared in software. If
another edge is detected while this flag is being
cleared, the flag will still be set at the end of the
sequence.
Note: Although a comparator is disabled, an
interrupt can be generated by changing
the output polarity with the POL bit of the
CMxCON0 register, or by switching the
comparator on or off with the EN bit of the
CMxCON0 register.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 697


PIC18(L)F25/26K83
39.7 Comparator Response Time 39.8 Analog Input Connection
The comparator output is indeterminate for a period of
Considerations
time after the change of an input source or the selection A simplified circuit for an analog input is shown in
of a new reference voltage. This period is referred to as Figure 39-3. Since the analog input pins share their
the response time. The response time of the comparator connection with a digital input, they have reverse
differs from the settling time of the voltage reference. biased ESD protection diodes to VDD and VSS. The
Therefore, both of these times must be considered when analog input, therefore, must be between VSS and VDD.
determining the total response time to a comparator If the input voltage deviates from this range by more
input change. See the Comparator and Voltage than 0.6V in either direction, one of the diodes is
Reference Specifications in Table 45-15 and Table 45- forward biased and a latch-up may occur.
17 for more details.
A maximum source impedance of 10 k is recommended
for the analog sources. Also, any external component
connected to an analog input pin, such as a capacitor or
a Zener diode, should have very little leakage current to
minimize inaccuracies introduced.

Note 1: When reading a PORT register, all pins


configured as analog inputs will read as a
‘0’. Pins configured as digital inputs will
convert as an analog input, according to
the input specification.
2: Analog levels on any pin defined as a
digital input, may cause the input buffer to
consume more current than is specified.

FIGURE 39-3: ANALOG INPUT MODEL

Rev. 10-000071A
8/2/2013

VDD
Analog
VT § 0.6V
RS < 10K Input pin RIC
To Comparator
ILEAKAGE(1)
VA CPIN VT § 0.6V
5pF

VSS

Legend: CPIN = Input Capacitance


ILEAKAGE = Leakage Current at the pin due to various junctions
RIC = Interconnect Resistance
RS = Source Impedance
VA = Analog Voltage
VT = Threshold Voltage

Note 1: See Section 45.0 “Electrical Specifications”.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 698


PIC18(L)F25/26K83
39.9 CWG1 Auto-Shutdown Source
The output of the comparator module can be used as
an auto-shutdown source for the CWG1 module. When
the output of the comparator is active and the
corresponding WGASxE is enabled, the CWG
operation will be suspended immediately (see Section
26.10.1.2 “External Input Source”).

39.10 ADC Auto-Trigger Source


The output of the comparator module can be used to
trigger an ADC conversion. When the ADACT register
is set to trigger on a comparator output, an ADC
conversion will trigger when the Comparator output
goes high.

39.11 TMR2/4/6 Reset


The output of the comparator module can be used to
reset Timer2. When the TxERS register is
appropriately set, the timer will reset when the
Comparator output goes high.

39.12 Operation in Sleep Mode


The comparator module can operate during Sleep. The
comparator clock source is based on the Timer1 clock
source. If the Timer1 clock source is either the system
clock (FOSC) or the instruction clock (FOSC/4), Timer1
will not operate during Sleep, and synchronized
comparator outputs will not operate.
A comparator interrupt will wake the device from
Sleep. The CxIE bits of the respective PIE register
must be set to enable comparator interrupts.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 699


PIC18(L)F25/26K83
39.13 Register Definitions: Comparator Control
Long bit name prefixes for the Comparators are shown
in Table 39-2. Refer to Section 1.3.2.2 “Long Bit
Names” for more information.
TABLE 39-2:
Peripheral Bit Name Prefix
C1 C1
C2 C2

REGISTER 39-1: CMxCON0: COMPARATOR x CONTROL REGISTER 0


R/W-0/0 R-0/0 U-0 R/W-0/0 U-0 U-1 R/W-0/0 R/W-0/0
EN OUT — POL — — HYS SYNC
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 EN: Comparator Enable bit


1 = Comparator is enabled
0 = Comparator is disabled and consumes no active power
bit 6 OUT: Comparator Output bit
If POL = 0 (noninverted polarity):
1 = CxVP > CxVN
0 = CxVP < CxVN
If POL = 1 (inverted polarity):
1 = CxVP < CxVN
0 = CxVP > CxVN
bit 5 Unimplemented: Read as ‘0’
bit 4 POL: Comparator Output Polarity Select bit
1 = Comparator output is inverted
0 = Comparator output is not inverted
bit 3 Unimplemented: Read as ‘0’
bit 2 Unimplemented: Read as ‘1’
bit 1 HYS: Comparator Hysteresis Enable bit
1 = Comparator hysteresis enabled
0 = Comparator hysteresis disabled
bit 0 SYNC: Comparator Output Synchronous Mode bit
1 = Comparator output to Timer1/3/5 and I/O pin is synchronous to changes on Timer1 clock source.
0 = Comparator output to Timer1/3/5 and I/O pin is asynchronous
Output updated on the falling edge of Timer1/3/5 clock source.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 700


PIC18(L)F25/26K83

REGISTER 39-2: CMxCON1: COMPARATOR x CONTROL REGISTER 1


U-0 U-0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0
— — — — — — INTP INTN
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-2 Unimplemented: Read as ‘0’


bit 1 INTP: Comparator Interrupt on Positive-Going Edge Enable bit
1 = The CxIF interrupt flag will be set upon a positive-going edge of the CxOUT bit
0 = No interrupt flag will be set on a positive-going edge of the CxOUT bit
bit 0 INTN: Comparator Interrupt on Negative-Going Edge Enable bit
1 = The CxIF interrupt flag will be set upon a negative-going edge of the CxOUT bit
0 = No interrupt flag will be set on a negative-going edge of the CxOUT bit

REGISTER 39-3: CMxNCH: COMPARATOR x INVERTING CHANNEL SELECT REGISTER


U-0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — — NCH<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-3 Unimplemented: Read as ‘0’


bit 2-0 NCH<2:0>: Comparator Inverting Input Channel Select bits
111 = VSS
110 = FVR_Buffer2
101 = NCH not connected
100 = NCH not connected
011 = CxIN3-
010 = CxIN2-
001 = CxIN1-
000 = CxIN0-

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 701


PIC18(L)F25/26K83

REGISTER 39-4: CMxPCH: COMPARATOR x NON-INVERTING CHANNEL SELECT REGISTER


U-0 U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — — PCH<2:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-3 Unimplemented: Read as ‘0’


bit 2-0 PCH<2:0>: Comparator Non-Inverting Input Channel Select bits
111 = VSS
110 = FVR_Buffer2
101 = DAC_Output
100 = PCH not connected
011 = PCH not connected
010 = PCH not connected
001 = CxIN1+
000 = CxIN0+

REGISTER 39-5: CMOUT: COMPARATOR OUTPUT REGISTER


U-0 U-0 U-0 U-0 U-0 U-0 R-0/0 R-0/0
— — — — — — C2OUT C1OUT
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7-2 Unimplemented: Read as ‘0’


bit 1 C2OUT: Mirror copy of C2OUT bit
bit 0 C1OUT: Mirror copy of C1OUT bit

TABLE 39-3: SUMMARY OF REGISTERS ASSOCIATED WITH COMPARATOR MODULE


Reset
Values
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on
page
CMxCON0 EN OUT — POL — — HYS SYNC 700
CMxCON1 — — — — — — INTP INTN 701
CMxNCH — — — — — NCH<2:0> 701
CMxPCH — — — — — PCH<2:0> 702
CMOUT — — — — — — C2OUT C1OUT 702
Legend: — = unimplemented, read as ‘0’. Shaded cells are unused by the comparator module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 702


PIC18(L)F25/26K83
40.0 HIGH/LOW-VOLTAGE DETECT
(HLVD)
The PIC18(L)F25/26K83 family of devices has a High/
Low-Voltage Detect module (HLVD). This is a program-
mable circuit that sets both a device voltage trip point
and the direction of change from that point (positive
going, negative going or both). If the device experiences
an excursion past the trip point in that direction, an inter-
rupt flag is set. If the interrupt is enabled, the program
execution branches to the interrupt vector address and
the software responds to the interrupt.
Complete control of the HLVD module is provided
through the HLVDCON0 and HLVDCON1 register. This
allows the circuitry to be “turned off” by the user under
software control, which minimizes the current
consumption for the device.
The module’s block diagram is shown in Figure 40-1.
Since the HLVD can be software enabled through the
EN bit, setting and clearing the enable bit does not
produce a false HLVD event glitch. Each time the HLVD
module is enabled, the circuitry requires some time to
stabilize. The RDY bit (HLVDCON0<4>) is a read-only
bit used to indicate when the band gap reference
voltages are stable.
The module can only generate an interrupt after the
module is turned ON and the band gap reference
voltages are ready.
The INTH and INTL bits determine the overall
operation of the module. When INTH is set, the module
monitors for rises in VDD above the trip point set by the
HLVDCON1 register. When INTL is set, the module
monitors for drops in VDD below the trip point set by the
HLVDCON1 register. When both the INTH and INTL
bits are set, any changes above or below the trip point
set by the HLVDCON1 register can be monitored.
The OUT bit can be read to determine if the voltage is
greater than or less than the voltage level selected by
the HLVDCON1 register.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 703


PIC18(L)F25/26K83
40.1 Operation When the supply voltage is equal to the trip point, the
voltage tapped off of the resistor array is equal to the
When the HLVD module is enabled, a comparator uses internal reference voltage generated by the voltage
an internally generated voltage reference as the set reference module. The comparator then generates an
point. The set point is compared with the trip point, interrupt signal by setting the HLVDIF bit.
where each node in the resistor divider represents a
trip point voltage. The “trip point” voltage is the voltage The trip point voltage is software programmable to any of
level at which the device detects a high or low-voltage SEL<3:0> bits (HLVDCON1<3:0>).
event, depending on the configuration of the module.

FIGURE 40-1: HLVD MODULE BLOCK DIAGRAM

VDD
4 SEL<3:0>
Rev. 10-000256B
10/13/2016

EN
16-to-1 MUX

OUT

- Trigger/
Interrupt HLVDIF
+ Generation
RDY INTH INTL

Bandgap
Reference
EN Volatge

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 704


PIC18(L)F25/26K83
40.2 HLVD Setup 40.3 Current Consumption
To set up the HLVD module: When the module is enabled, the HLVD comparator
1. Select the desired HLVD trip point by writing the and voltage divider are enabled and consume static
value to the SEL<3:0> bits of the HLVDCON1 current. The total current consumption, when enabled,
register. is specified in electrical specification Parameter D206
(Table 45-3).
2. Depending on the application to detect
high-voltage peaks or low-voltage drops or both, Depending on the application, the HLVD module does
set the INTH or INTL bit appropriately. not need to operate constantly. To reduce current
3. Enable the HLVD module by setting the EN bit. requirements, the HLVD circuitry may only need to be
enabled for short periods where the voltage is checked.
4. Clear the HLVD interrupt flag (PIR2 register),
After such a check, the module could be disabled.
which may have been set from a previous inter-
rupt.
40.4 HLVD Start-up Time
5. If interrupts are desired, enable the HLVD
interrupt by setting the HLVDIE in the PIE2 The internal reference voltage of the HLVD module,
register and GIE bits. specified in electrical specification (Table 45-17), may
An interrupt will not be generated until the RDY be used by other internal circuitry, such as the
bit is set. programmable Brown-out Reset. If the HLVD or other
circuits using the voltage reference are disabled to
Note: Before changing any module settings lower the device’s current consumption, the reference
(INTH, INTL, SEL<3:0>), first disable the voltage circuit will require time to become stable before
module (EN = 0), make the changes and a low or high-voltage condition can be reliably
re-enable the module. This prevents the detected. This start-up time, TFVRST, is an interval that
generation of false HLVD events. is independent of device clock speed. It is specified in
electrical specification (Table 45-17).
The HLVD interrupt flag is not enabled until TFVRST has
expired and a stable reference voltage is reached. For
this reason, brief excursions beyond the set point may
not be detected during this interval (see Figure 40-2 or
Figure 40-3).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 705


PIC18(L)F25/26K83
FIGURE 40-2: LOW-VOLTAGE DETECT OPERATION (INTL = 1)
CASE 1: HLVDIF may not be Set

VDD

VHLVD

HLVDIF

Enable HLVD

TFVRST
RDY
HLVDIF Cleared in Software
Band Gap Reference Voltage is Stable

CASE 2:
VDD
VHLVD

HLVDIF

Enable HLVD

RDY TFVRST

Band Gap Reference Voltage is Stable


HLVDIF Cleared in Software

HLVDIF Cleared in Software,


HLVDIF Remains Set since HLVD Condition still Exists

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 706


PIC18(L)F25/26K83
FIGURE 40-3: HIGH-VOLTAGE DETECT OPERATION (INTH = 1)
CASE 1:
HLVDIF may not be Set

VHLVD
VDD

HLVDIF

Enable HLVD

RDY TIRVST

HLVDIF Cleared in Software


Band Gap Reference Voltage is Stable

CASE 2:

VHLVD
VDD

HLVDIF

Enable HLVD

RDY TIRVST

Band Gap Reference Voltage is Stable


HLVDIF Cleared in Software

HLVDIF Cleared in Software,


HLVDIF Remains Set since HLVD Condition still Exists

40.5 Applications FIGURE 40-4: TYPICAL LOW-VOLTAGE


DETECT APPLICATION
In many applications, it is desirable to detect a drop
below, or rise above, a particular voltage threshold. For
example, the HLVD module could be periodically
enabled to detect Universal Serial Bus (USB) attach or
detach. This assumes the device is powered by a lower
voltage source than the USB when detached. An attach VA
would indicate a High-Voltage Detect from, for example, VB
3.3V to 5V (the voltage on USB) and vice versa for a
Voltage

detach. This feature could save a design a few extra


components and an attach signal (input pin).
For general battery applications, Figure 40-4 shows a
possible voltage curve. Over time, the device voltage
decreases. When the device voltage reaches voltage,
VA, the HLVD logic generates an interrupt at time, TA.
The interrupt could cause the execution of an Interrupt TA TB
Time
Service Routine (ISR), which would allow the applica-
tion to perform “housekeeping tasks” and a controlled Legend: VA = HLVD trip point
shutdown before the device voltage exits the valid VB = Minimum valid device
operating range at TB. This would give the application operating voltage
a time window, represented by the difference between
TA and TB, to safely exit.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 707


PIC18(L)F25/26K83
40.6 Operation During Sleep
When enabled, the HLVD circuitry continues to operate
during Sleep. If the device voltage crosses the trip
point, the HLVDIF bit will be set and the device will
wake up from Sleep. Device execution will continue
from the interrupt vector address if interrupts have
been globally enabled.

40.7 Operation During Idle and Doze


Modes
In both Idle and Doze modes, the module is active and
events are generated if peripheral is enabled.

40.8 Operation During Freeze


When in Freeze mode, no new event or interrupt can
be generated. The state of the LRDY bit is frozen.
Register reads and writes through the CPU interface
are allowed.

40.9 Effects of a Reset


A device Reset forces all registers to their Reset state.
This forces the HLVD module to be turned off.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 708


PIC18(L)F25/26K83
40.10 Register Definitions: HLVD Control
Long bit name prefixes for the HLVD peripheral is
shown in Table 40-1. Refer to Section 1.3.2.2 “Long
Bit Names” for more information.
TABLE 40-1:
Peripheral Bit Name Prefix
HLVD HLVD

REGISTER 40-1: HLVDCON0: HIGH/LOW-VOLTAGE DETECT CONTROL REGISTER 0


R/W-0/0 U-0 R-x R-x U-0 U-0 R/W-0/0 R/W-0/0
EN — OUT RDY — — INTH INTL
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared x = Bit is unknown

bit 7 EN: High/Low-voltage Detect Power Enable bit


1 = Enables HLVD, powers up HLVD circuit and supporting reference circuitry
0 = Disables HLVD, powers down HLVD and supporting circuitry
bit 6 Unimplemented: Read as ‘0’
bit 5 OUT: HLVD Comparator Output bit
1 = Voltage  selected detection limit (HLVDL<3:0>)
0 = Voltage  selected detection limit (HLVDL<3:0>)
bit 4 RDY: Band Gap Reference Voltages Stable Status Flag bit
1 = Indicates HLVD Module is ready and output is stable
0 = Indicates HLVD Module is not ready
bit 3-2 Unimplemented: Read as ‘0’
bit 1 INTH: HLVD Positive going (High Voltage) Interrupt Enable
1 = HLVDIF will be set when voltage  selected detection limit (SEL<3:0>)
0 = HLVDIF will not be set
bit 0 INTL: HLVD Negative going (Low Voltage) Interrupt Enable
1 = HLVDIF will be set when voltage  selected detection limit (SEL<3:0>)
0 = HLVDIF will not be set

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 709


PIC18(L)F25/26K83

REGISTER 40-2: HLVDCON1: LOW-VOLTAGE DETECT CONTROL REGISTER 1


U-0 U-0 U-0 U-0 R/W-0/u R/W-0/u R/W-0/u R/W-0/u
— — — — SEL<3:0>
bit 7 bit 0

Legend:
R = Readable bit W = Writable bit U = Unimplemented bit, read as ‘0’
-n = Value at POR ‘1’ = Bit is set ‘0’ = Bit is cleared u = Bit is unchanged

bit 7-4 Unimplemented: Read as ‘0’


bit 3-0 SEL<3:0>: High/Low Voltage Detection Limit Selection bits

SEL<3:0> Typical Voltage


1111 Reserved
1110 4.65V
1101 4.35V
1100 4.20V
1011 4.00V
1010 3.75V
1001 3.60V
1000 3.35V
0111 3.15V
0110 2.90V
0101 2.75V
0100 2.60V
0011 2.50V
0010 2.25V
0001 2.10V
0000 1.90V

TABLE 40-2: SUMMARY OF REGISTERS ASSOCIATED WITH HIGH/LOW-VOLTAGE DETECT


MODULE
Register
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on Page

HLVDCON0 EN — OUT RDY — — INTH INTL 709

HLVDCON1 — — — — SEL<3:0> 710


Legend: — = unimplemented, read as ‘0’. Shaded cells are unused by the HLVD module.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 710


PIC18(L)F25/26K83
41.0 IN-CIRCUIT SERIAL 41.3 Common Programming Interfaces
PROGRAMMING™ (ICSP™) Connection to a target device is typically done through
ICSP™ programming allows customers to manufacture an ICSP™ header. A commonly found connector on
circuit boards with unprogrammed devices. Programming development tools is the RJ-11 in the 6P6C (6-pin, 6-
can be done after the assembly process, allowing the connector) configuration. See Figure 41-1.
device to be programmed with the most recent firmware
or a custom firmware. Five pins are needed for ICSP™ FIGURE 41-1: ICD RJ-11 STYLE
programming: CONNECTOR INTERFACE
• ICSPCLK
• ICSPDAT
• MCLR/VPP
• VDD
ICSPDAT
• VSS
2 4 6 NC
VDD
In Program/Verify mode the program memory, User IDs ICSPCLK
and the Configuration Words are programmed through 1 3 5
Target
serial communications. The ICSPDAT pin is a VPP/MCLR PC Board
VSS
bidirectional I/O used for transferring the serial data Bottom Side
and the ICSPCLK pin is the clock input. For more
information on ICSP™ refer to the “PIC18(L)F25/
26K82 Memory Programming Specification” Pin Description*
(DS40000000).
1 = VPP/MCLR
2 = VDD Target
41.1 High-Voltage Programming Entry 3 = VSS (ground)
Mode 4 = ICSPDAT

The device is placed into High-Voltage Programming 5 = ICSPCLK


Entry mode by holding the ICSPCLK and ICSPDAT 6 = No Connect
pins low then raising the voltage on MCLR/VPP to VIHH.
Another connector often found in use with the PICkit™
41.2 Low-Voltage Programming Entry programmers is a standard 6-pin header with 0.1 inch
Mode spacing. Refer to Figure 41-2.
The Low-Voltage Programming Entry mode allows the For additional interface recommendations, refer to your
PIC® Flash MCUs to be programmed using VDD only, specific device programmer manual prior to PCB
without high voltage. When the LVP bit of Configuration design.
Words is set to ‘1’, the low-voltage ICSP™ It is recommended that isolation devices be used to
programming entry is enabled. To disable the Low- separate the programming pins from other circuitry.
Voltage ICSP mode, the LVP bit must be programmed The type of isolation is highly dependent on the specific
to ‘0’. application and may include devices such as resistors,
Entry into the Low-Voltage Programming Entry mode diodes, or even jumpers. See Figure 41-3 for more
requires the following steps: information.
1. MCLR is brought to VIL.
2. A 32-bit key sequence is presented on
ICSPDAT, while clocking ICSPCLK.
Once the key sequence is complete, MCLR must be
held at VIL for as long as Program/Verify mode is to be
maintained.
If low-voltage programming is enabled (LVP = 1), the
MCLR Reset function is automatically enabled and
cannot be disabled. See Section 6.5 “MCLR” for more
information.
The LVP bit can only be reprogrammed to ‘0’ by using
the High-Voltage Programming mode.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 711


PIC18(L)F25/26K83
FIGURE 41-2: PICkit™ PROGRAMMER STYLE CONNECTOR INTERFACE

Pin 1 Indicator

Pin Description*
1 1 = VPP/MCLR
2
2 = VDD Target
3
4 3 = VSS (ground)
5
6 4 = ICSPDAT
5 = ICSPCLK
6 = No Connect

* The 6-pin header (0.100" spacing) accepts 0.025" square pins.

FIGURE 41-3: TYPICAL CONNECTION FOR ICSP™ PROGRAMMING

External
Programming VDD Device to be
Signals Programmed

VDD VDD

VPP MCLR/VPP
VSS VSS

Data ICSPDAT
Clock ICSPCLK

* * *

To Normal Connections

* Isolation devices (as required).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 712


PIC18(L)F25/26K83
42.0 INSTRUCTION SET SUMMARY The literal instructions may use some of the following
operands:
PIC18(L)F25/26K83 devices incorporate the standard
• A literal value to be loaded into a file register
set of PIC18 core instructions, as well as an extended
(specified by ‘k’)
set of instructions, for the optimization of code that is
recursive or that utilizes a software stack. The extended • The desired FSR register to load the literal value
set is discussed later in this section. into (specified by ‘f’)
• No operand required
(specified by ‘—’)
42.1 Standard Instruction Set
The control instructions may use some of the following
The standard PIC18 instruction set adds many operands:
enhancements to the previous PIC® MCU instruction
sets, while maintaining an easy migration from these • A program memory address (specified by ‘n’)
PIC® MCU instruction sets. Most instructions are a • The mode of the CALL or RETURN instructions
single program memory word (16 bits), but there are (specified by ‘s’)
four instructions that require two-program memory • The mode of the table read and table write
locations and two that require three-program memory instructions (specified by ‘m’)
locations. • No operand required
(specified by ‘—’)
Each single-word instruction is a 16-bit word divided
into an opcode, which specifies the instruction type and All instructions are a single word, except for four
one or more operands, which further specify the double-word instructions. These instructions were
operation of the instruction. made double-word to contain the required information
in 32 bits. In the second word, the four MSbs are ‘1’s. If
The instruction set is highly orthogonal and is grouped
this second word is executed as an instruction (by
into four basic categories:
itself), it will execute as a NOP.
• Byte-oriented operations
All single-word instructions are executed in a single
• Bit-oriented operations instruction cycle, unless a conditional test is true or the
• Literal operations Program Counter is changed as a result of the instruc-
• Control operations tion. In these cases, the execution takes two instruction
The PIC18 instruction set summary in Table 42-3 lists cycles, with the additional instruction cycle(s) executed
byte-oriented, bit-oriented, literal and control as a NOP.
operations. Table 42-1 shows the opcode field The double-word instructions execute in two instruction
descriptions. cycles.
Most byte-oriented instructions have three operands: One instruction cycle consists of four oscillator periods.
1. The file register (specified by ‘f’) Thus, for an oscillator frequency of 4 MHz, the normal
instruction execution time is 1 s. If a conditional test is
2. The destination of the result (specified by ‘d’)
true, or the Program Counter is changed as a result of
3. The accessed memory (specified by ‘a’)
an instruction, the instruction execution time is 2 s.
The file register designator ‘f’ specifies which file Two-word branch instructions (if true) would take 3 s.
register is to be used by the instruction. The destination
Figure 42-1 shows the general formats that the instruc-
designator ‘d’ specifies where the result of the opera-
tions can have. All examples use the convention ‘nnh’
tion is to be placed. If ‘d’ is zero, the result is placed in
to represent a hexadecimal number.
the WREG register. If ‘d’ is one, the result is placed in
the file register specified in the instruction. The Instruction Set Summary, shown in Table 42-3,
lists the standard instructions recognized by the
All bit-oriented instructions have three operands:
Microchip Assembler (MPASMTM).
1. The file register (specified by ‘f’)
Section 42.1.1 “Standard Instruction Set” provides
2. The bit in the file register (specified by ‘b’) a description of each instruction.
3. The accessed memory (specified by ‘a’)
The bit field designator ‘b’ selects the number of the bit
affected by the operation, while the file register
designator ‘f’ represents the number of the file in which
the bit is located.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 713


PIC18(L)F25/26K83

TABLE 42-1: OPCODE FIELD DESCRIPTIONS


Field Description

a RAM access bit


a = 0: RAM location in Access RAM (BSR register is ignored)
a = 1: RAM bank is specified by BSR register
ACCESS ACCESS = 0: RAM access bit symbol
BANKED BANKED = 1: RAM access bit symbol
bbb Bit address within an 8-bit file register (0 to 7)
BSR Bank Select Register. Used to select the current RAM bank.
d Destination select bit;
d = 0: store result in WREG,
d = 1: store result in file register f.
dest Destination either the WREG register or the specified register file location
f 8-bit Register file address (00h to FFh)
fn FSR Number (0 to 2)
fs 12-bit Register file address (000h to FFFh). This is the source address.
fd 12-bit Register file address (000h to FFFh). This is the destination address.
zs 7-bit literal offset for FSR2 to used as register file address (000h to FFFh). This is the source address.
zd 7-bit literal offset for FSR2 to used as register file address (000h to FFFh). This is the destination address.
k Literal field, constant data or label (may be a 6-bit, 8-bit, 12-bit or a 20-bit value)
label Label name
mm The mode of the TBLPTR register for the Table Read and Table Write instructions
Only used with Table Read and Table Write instructions:
* No Change to register (such as TBLPTR with Table reads and writes)
*+ Post-Increment register (such as TBLPTR with Table reads and writes)
*- Post-Decrement register (such as TBLPTR with Table reads and writes)
+* Pre-Increment register (such as TBLPTR with Table reads and writes)
n The relative address (2’s complement number) for relative branch instructions, or the direct address for Call/Branch and
Return instructions
PRODH Product of Multiply high byte
PRODL Product of Multiply low byte
s Fast Call / Return mode select bit.
s = 0: do not update into/from shadow registers
s = 1: certain registers loaded into/from shadow registers (Fast mode)
u Unused or Unchanged
W W = 0: Destination select bit symbol
WREG Working register (accumulator)
x Don’t care (0 or 1)
The assembler will generate code with x = 0. It is the recommended form of use for compatibility with all Microchip software
tools.
TBLPTR 21-bit Table Pointer (points to a Program Memory location)
TABLAT 8-bit Table Latch
TOS Top-of-Stack
PC Program Counter
PCL Program Counter Low Byte
PCH Program Counter High Byte
PCLATH Program Counter High Byte Latch
PCLATU Program Counter Upper Byte Latch
GIE Global Interrupt Enable bit
WDT Watchdog Timer
TO Time-out bit
PD Power-down bit
C, DC, Z, OV, N ALU Status bits Carry, Digit Carry, Zero, Overflow, Negative
[ ] Optional
( ) Contents
 Assigned to

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 714


PIC18(L)F25/26K83
TABLE 42-1: OPCODE FIELD DESCRIPTIONS (CONTINUED)
Field Description

< > Register bit field


 In the set of
italics User defined term (font is courier)

FIGURE 42-1: General Format for Instructions (1/2)

Byte-oriented file register operations Example Instruction

15 10 9 8 7 0
OPCODE d a f (FILE #) ADDWF MYREG, W, B

d = 0 for result destination to be WREG register


d = 1 for result destination to be file register (f)
a = 0 to force Access Bank
a = 1 for BSR to select bank
f = 8-bit file register address

Byte to Byte move operations (2-word)

15 12 11 0
OPCODE f (Source FILE #) MOVFF MYREG1, MYREG2

15 12 11 0
1111 f (Destination FILE #)

f = 12-bit file register address

Byte to Byte move operations (3-word)

15 4 3 0
OPCODE FILE # MOVFFL MYREG1, MYREG2

15 12 11 0
1111 FILE #

15 12 11 0
1111 FILE #

Bit-oriented file register operations

15 12 11 9 8 7 0
OPCODE b (BIT #) a f (FILE #) BSF MYREG, bit, B

b = 3-bit position of bit in file register (f)


a = 0 to force Access Bank
a = 1 for BSR to select bank
f = 8-bit file register address

Literal operations

15 8 7 0
OPCODE k (literal) MOVLW 7Fh

k = 8-bit immediate value

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 715


PIC18(L)F25/26K83
FIGURE 42-2: General Format for Instructions (2/2)
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)

n = 20-bit immediate value

15 8 7 0
OPCODE S n<7:0> (literal) CALL MYFUNC

15 12 11 0
1111 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

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 716


PIC18(L)F25/26K83
TABLE 42-2: INSTRUCTION SET
Mnemonic, 16-Bit Instruction Word Status
Description Cycles Notes
Operands MSb LSb Affected

BYTE-ORIENTED FILE REGISTER INSTRUCTIONS


ADDWF f, d ,a Add WREG and f 1 0010 01da ffff ffff C, DC, Z, OV, N
ADDWFC f, d, a Add WREG and Carry bit to f 1 0010 00da ffff ffff C, DC, Z, OV, N
ANDWF f, d, a AND WREG with f 1 0001 01da ffff ffff Z, N
CLRF f, a Clear f 1 0110 101a ffff ffff Z
COMF f, d, a Complement f 1 0001 11da ffff ffff Z, N
DECF f, d, a Decrement f 1 0000 01da ffff ffff C, DC, Z, OV, N
INCF f, d, a Increment f 1 0010 10da ffff ffff C, DC, Z, OV, N
IORWF f, d, a Inclusive OR WREG with f 1 0001 00da ffff ffff Z, N
MOVF f, d, a Move f to WREG or f 1 0101 00da ffff ffff Z, N
MOVFF fs, fd Move fs (source) to 1st word 2 1100 ffff ffff ffff None 2, 3
fd (destination) 2nd word 1111 ffff ffff ffff
MOVFFL fs, fd Move fs (source) to 3 0000 0000 0110 ffff None 2
g (full destination) 1111 ffff ffff ffgg
fd (full destination)3rd word 1111 gggg gggg gggg
MOVWF f, a Move WREG to f 1 0110 111a ffff ffff None
MULWF f, a Multiply WREG with f 1 0000 001a ffff ffff None
NEGF f, a Negate f 1 0110 110a ffff ffff C, DC, Z, OV, N
RLCF f, d, a Rotate Left f through Carry 1 0011 01da ffff ffff C, Z, N
RLNCF f, d, a Rotate Left f (No Carry) 1 0100 01da ffff ffff Z, N
RRCF f, d, a Rotate Right f through Carry 1 0011 00da ffff ffff C, Z, N
RRNCF f, d, a Rotate Right f (No Carry) 1 0100 00da ffff ffff Z, N
SETF f, a Set f 1 0110 100a ffff ffff None
SUBFWB f, d, a Subtract f from WREG with 1 0101 01da ffff ffff C, DC, Z, OV, N
borrow
SUBWF f, d, a Subtract WREG from f 1 0101 11da ffff ffff C, DC, Z, OV, N
SUBWFB f, d, a Subtract WREG from f with 1 0101 10da ffff ffff C, DC, Z, OV, N
borrow
SWAPF f, d, a Swap nibbles in f 1 0011 10da ffff ffff None
XORWF f, d, a Exclusive OR WREG with f 1 0001 10da ffff ffff Z, N
BYTE-ORIENTED SKIP INSTRUCTIONS
CPFSEQ f, a Compare f with WREG, skip = 1 (2 or 3) 0110 001a ffff ffff None 1
CPFSGT f, a Compare f with WREG, skip > 1 (2 or 3) 0110 010a ffff ffff None 1
CPFSLT f, a Compare f with WREG, skip < 1 (2 or 3) 0110 000a ffff ffff None 1
DECFSZ f, d, a Decrement f, Skip if 0 1 (2 or 3) 0010 11da ffff ffff None 1
DCFSNZ f, d, a Decrement f, Skip if Not 0 1 (2 or 3) 0100 11da ffff ffff None 1
INCFSZ f, d, a Increment f, Skip if 0 1 (2 or 3) 0011 11da ffff ffff None 1
INFSNZ f, d, a Increment f, Skip if Not 0 1 (2 or 3) 0100 10da ffff ffff None 1
TSTFSZ f, a Test f, skip if 0 1 (2 or 3) 0110 011a ffff ffff None 1
BIT-ORIENTED FILE REGISTER INSTRUCTIONS
BCF f, b, a Bit Clear f 1 1001 bbba ffff ffff None
BSF f, b, a Bit Set f 1 1000 bbba ffff ffff None
BTG f, d, a Bit Toggle f 1 0111 bbba ffff ffff None
BIT-ORIENTED SKIP INSTRUCTIONS
BTFSC f, b, a Bit Test f, Skip if Clear 1 (2 or 3) 1011 bbba ffff ffff None 1
BTFSS f, b, a Bit Test f, Skip if Set 1 (2 or 3) 1010 bbba ffff ffff None 1
Note 1: If Program Counter (PC) is modified or a conditional test is true, the instruction requires an additional cycle. The extra cycle is exe-
cuted as a NOP.
2: Some instructions are multi word instructions. The second/third words of these instructions will be decoded 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.
3: fs and fd do not cover the full memory range. 2 MSBs of bank selection are forced to ‘b00 to limit the range of these instructions to
lower 4k addressing space.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 717


PIC18(L)F25/26K83
TABLE 42-2: INSTRUCTION SET (CONTINUED)
Mnemonic, 16-Bit Instruction Word Status
Description Cycles Notes
Operands MSb LSb Affected

CONTROL INSTRUCTIONS
BC n Branch if Carry 1 (2) 1110 0010 nnnn nnnn None 1
BN n Branch if Negative 1 (2) 1110 0110 nnnn nnnn None 1
BNC n Branch if Not Carry 1 (2) 1110 0011 nnnn nnnn None 1
BNN n Branch if Not Negative 1 (2) 1110 0111 nnnn nnnn None 1
BNOV n Branch if Not Overflow 1 (2) 1110 0101 nnnn nnnn None 1
BNZ n Branch if Not Zero 2 1110 0001 nnnn nnnn None 1
BOV n Branch if Overflow 1 (2) 1110 0100 nnnn nnnn None 1
BRA n Branch Unconditionally 1 (2) 1101 0nnn nnnn nnnn None
BZ n Branch if Zero 1 (2) 1110 0000 nnnn nnnn None 1
CALL n, s Call subroutine 1st word 2 1110 110s nnnn nnnn None 2
2nd word 1111 nnnn nnnn nnnn
GOTO n Go to address 1st word 2 1110 1111 nnnn nnnn None 2
— 2nd word 1111 nnnn nnnn nnnn
CALLW — W -> PCL and Call subroutine 2 0000 0000 0001 0100 None 1
RCALL n Relative Call 2 1101 1nnn nnnn nnnn None 1
RETFIE s Return from interrupt enable 2 0000 0000 0001 000s None 1
RETLW k Return with literal in WREG 2 0000 1100 kkkk kkkk None 1
RETURN s Return from Subroutine 2 0000 0000 0001 001s None 1
INHERENT INSTRUCTIONS
CLRWDT — Clear Watchdog Timer 1 0000 0000 0000 0100 None
DAW — Decimal Adjust WREG 1 0000 0000 0000 0111 C
NOP — No Operation 1 0000 0000 0000 0000 None
NOP — No Operation 1 1111 xxxx xxxx xxxx None 2
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
RESET Software device Reset 1 0000 0000 1111 1111 All
SLEEP — Go into Standby mode 1 0000 0000 0000 0011 None
Note 1: If Program Counter (PC) is modified or a conditional test is true, the instruction requires an additional cycle. The extra cycle is exe-
cuted as a NOP.
2: Some instructions are multi word instructions. The second/third words of these instructions will be decoded 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.
3: fs and fd do not cover the full memory range. 2 MSBs of bank selection are forced to ‘b00 to limit the range of these instructions to
lower 4k addressing space.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 718


PIC18(L)F25/26K83
TABLE 42-2: INSTRUCTION SET (CONTINUED)
Mnemonic, 16-Bit Instruction Word Status
Description Cycles Notes
Operands MSb LSb Affected

LITERAL INSTRUCTIONS
ADDLW k Add literal and WREG 1 0000 1111 kkkk kkkk C, DC, Z, OV, N
ANDLW k AND literal with WREG 1 0000 1011 kkkk kkkk Z, N
IORLW k Inclusive OR literal with WREG 1 0000 1001 kkkk kkkk Z, N
LFSR fn, k Load FSR(fn) with a 14-bit 2 1110 1110 00ff kkkk None
literal (k) 1111 00kk kkkk kkkk
ADDFSR fn, k Add FSR(fn) with (k) 1 1110 1000 ffkk kkkk None
SUBFSR fn, k Subtract (k) from FSR(fn) 1 1110 1001 ffkk kkkk None
MOVLB k Move literal to BSR<5:0> 1 0000 0001 00kk kkkk None
MOVLW k Move literal to WREG 1 0000 1110 kkkk kkkk None
MULLW k Multiply literal with WREG 1 0000 1101 kkkk kkkk None
RETLW k Return with literal in WREG 2 0000 1100 kkkk kkkk None
SUBLW k Subtract WREG from literal 1 0000 1000 kkkk kkkk C, DC, Z, OV, N
XORLW k Exclusive OR literal with WREG 1 0000 1010 kkkk kkkk Z, N
DATA MEMORY  PROGRAM MEMORY INSTRUCTIONS
TBLRD* Table Read 2-5 0000 0000 0000 1000 None
TBLRD*+ Table Read with post-increment 0000 0000 0000 1001 None
TBLRD*- Table Read with post-decrement 0000 0000 0000 1010 None
TBLRD+* Table Read with pre-increment 0000 0000 0000 1011 None
TBLWT* Table Write 2-5 0000 0000 0000 1100 None
TBLWT*+ Table Write with post-increment 0000 0000 0000 1101 None
TBLWT*- Table Write with post-decrement 0000 0000 0000 1110 None
TBLWT+* Table Write with pre-increment 0000 0000 0000 1111 None
Note 1: If Program Counter (PC) is modified or a conditional test is true, the instruction requires an additional cycle. The extra cycle is exe-
cuted as a NOP.
2: Some instructions are multi word instructions. The second/third words of these instructions will be decoded 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.
3: fs and fd do not cover the full memory range. 2 MSBs of bank selection are forced to ‘b00 to limit the range of these instructions to
lower 4k addressing space.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 719


PIC18(L)F25/26K83
42.1.1 STANDARD INSTRUCTION SET
Example: ADDLW 15h
Before Instruction
W = 10h
ADDFSR Add Literal to FSR
After Instruction
Syntax: ADDFSR f, k
W = 25h
Operands: 0  k  63
f  [ 0, 1, 2 ]
Operation: FSR(f) + k  FSR(f)
Status Affected: None ADDWF ADD W to f
Encoding: 1110 1000 ffkk kkkk Syntax: ADDWF f {,d {,a}}
Description: The 6-bit literal ‘k’ is added to the Operands: 0  f  255
contents of the FSR specified by ‘f’. d  [0,1]
Words: 1 a  [0,1]
Cycles: 1 Operation: (W) + (f)  dest
Q Cycle Activity:
Status Affected: N, OV, C, DC, Z
Q1 Q2 Q3 Q4
Decod Read Pro- Write to Encoding: 0010 01da ffff ffff
e literal cess FSR Description: Add W to register ‘f’. If ‘d’ is ‘0’, the
‘k’ Data result is stored in W. If ‘d’ is ‘1’, the
Decod Read Pro- Write to result is stored back in register ‘f’
e literal cess FSR (default).
‘k’ Data If ‘a’ is ‘0’, the Access Bank is selected.
If ‘a’ is ‘1’, the BSR is used to select the
GPR bank.
Example: ADDFSR 2, 23h If ‘a’ is ‘0’ and the extended instruction
set is enabled, this instruction operates
Before Instruction in Indexed Literal Offset Addressing
FSR2 = 03FFh mode whenever f 95 (5Fh). See Sec-
After Instruction tion 42.2.3 “Byte-Oriented and Bit-
FSR2 = 0422h Oriented Instructions in Indexed Lit-
eral Offset Mode” for details.
Words: 1
ADDLW ADD literal to W Cycles: 1
Syntax: ADDLW k
Operands: 0  k  255
Q Cycle Activity:
Operation: (W) + k  W
Q1 Q2 Q3 Q4
Status Affected: N, OV, C, DC, Z
Decode Read Process Write to
Encoding: 0000 1111 kkkk kkkk register ‘f’ Data destination
Description: The contents of W are added to the
8-bit literal ‘k’ and the result is placed in Example: ADDWF REG, 0, 0
W.
Before Instruction
Words: 1
W = 17h
Cycles: 1 REG = 0C2h
Q Cycle Activity: After Instruction
Q1 Q2 Q3 Q4 W = 0D9h
REG = 0C2h
Decode Read Process Write to W
literal ‘k’ Data

Note: All PIC18 instructions may take an optional label argument preceding the instruction mnemonic for use in
symbolic addressing. If a label is used, the instruction format then becomes: {label} instruction argument(s).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 720


PIC18(L)F25/26K83

ADDWFC ADD W and CARRY bit to f ANDLW AND literal with W


Syntax: ADDWFC f {,d {,a}} Syntax: ANDLW k
Operands: 0  f  255 Operands: 0  k  255
d [0,1]
Operation: (W) .AND. k  W
a [0,1]
Status Affected: N, Z
Operation: (W) + (f) + (C)  dest
Encoding: 0000 1011 kkkk kkkk
Status Affected: N,OV, C, DC, Z
Description: The contents of W are AND’ed with the
Encoding: 0010 00da ffff ffff
8-bit literal ‘k’. The result is placed in W.
Description: Add W, the CARRY flag and data mem-
Words: 1
ory location ‘f’. If ‘d’ is ‘0’, the result is
placed in W. If ‘d’ is ‘1’, the result is Cycles: 1
placed in data memory location ‘f’. Q Cycle Activity:
If ‘a’ is ‘0’, the Access Bank is selected.
Q1 Q2 Q3 Q4
If ‘a’ is ‘1’, the BSR is used to select the
GPR bank. Decode Read literal Process Write to W
If ‘a’ is ‘0’ and the extended instruction ‘k’ Data
set is enabled, this instruction operates
in Indexed Literal Offset Addressing Example: ANDLW 05Fh
mode whenever f 95 (5Fh). See Sec-
tion 42.2.3 “Byte-Oriented and Bit- Before Instruction
Oriented Instructions in Indexed Lit- W = A3h
eral Offset Mode” for details. After Instruction
Words: 1 W = 03h
Cycles: 1
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read Process Write to
register ‘f’ Data destination

Example: ADDWFC REG, 0, 1


Before Instruction
CARRY bit = 1
REG = 02h
W = 4Dh
After Instruction
CARRY bit = 0
REG = 02h
W = 50h

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 721


PIC18(L)F25/26K83

ANDWF AND W with f BC Branch if Carry


Syntax: ANDWF f {,d {,a}} Syntax: BC n
Operands: 0  f  255 Operands: -128  n  127
d [0,1]
Operation: if CARRY bit is ‘1’
a [0,1] (PC) + 2 + 2n  PC
Operation: (W) .AND. (f)  dest
Status Affected: None
Status Affected: N, Z Encoding: 1110 0010 nnnn nnnn
Encoding: 0001 01da ffff ffff
Description: If the CARRY bit is ‘1’, then the program
Description: The contents of W are AND’ed with will branch.
register ‘f’. If ‘d’ is ‘0’, the result is stored The 2’s complement number ‘2n’ is
in W. If ‘d’ is ‘1’, the result is stored back added to the PC. Since the PC will have
in register ‘f’ (default). incremented to fetch the next
If ‘a’ is ‘0’, the Access Bank is selected. instruction, the new address will be
If ‘a’ is ‘1’, the BSR is used to select the PC + 2 + 2n. This instruction is then a
GPR bank. 2-cycle instruction.
If ‘a’ is ‘0’ and the extended instruction Words: 1
set is enabled, this instruction operates
in Indexed Literal Offset Addressing Cycles: 1(2)
mode whenever f 95 (5Fh). See Sec- Q Cycle Activity:
tion 42.2.3 “Byte-Oriented and Bit- If Jump:
Oriented Instructions in Indexed Lit-
Q1 Q2 Q3 Q4
eral Offset Mode” for details.
Decode Read literal Process Write to PC
Words: 1 ‘n’ Data
Cycles: 1 No No No No
operation operation operation operation
Q Cycle Activity:
If No Jump:
Q1 Q2 Q3 Q4
Q1 Q2 Q3 Q4
Decode Read Process Write to
Decode Read literal Process No
register ‘f’ Data destination
‘n’ Data operation

Example: ANDWF REG, 0, 0


Example: HERE BC 5
Before Instruction
Before Instruction
W = 17h PC = address (HERE)
REG = C2h After Instruction
After Instruction
If CARRY = 1;
W = 02h PC = address (HERE + 12)
REG = C2h If CARRY = 0;
PC = address (HERE + 2)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 722


PIC18(L)F25/26K83

BCF Bit Clear f BN Branch if Negative


Syntax: BCF f, b {,a} Syntax: BN n
Operands: 0  f  255 Operands: -128  n  127
0b7
Operation: if NEGATIVE bit is ‘1’
a [0,1] (PC) + 2 + 2n  PC
Operation: 0  f<b>
Status Affected: None
Status Affected: None Encoding: 1110 0110 nnnn nnnn
Encoding: 1001 bbba ffff ffff
Description: If the NEGATIVE bit is ‘1’, then the
Description: Bit ‘b’ in register ‘f’ is cleared. program will branch.
If ‘a’ is ‘0’, the Access Bank is selected. The 2’s complement number ‘2n’ is
If ‘a’ is ‘1’, the BSR is used to select the added to the PC. Since the PC will have
GPR bank. incremented to fetch the next
If ‘a’ is ‘0’ and the extended instruction instruction, the new address will be
set is enabled, this instruction operates PC + 2 + 2n. This instruction is then a
in Indexed Literal Offset Addressing 2-cycle instruction.
mode whenever f 95 (5Fh). See Sec- Words: 1
tion 42.2.3 “Byte-Oriented and Bit-
Oriented Instructions in Indexed Lit- Cycles: 1(2)
eral Offset Mode” for details. Q Cycle Activity:
Words: 1 If Jump:
Cycles: 1 Q1 Q2 Q3 Q4
Decode Read literal Process Write to PC
Q Cycle Activity: ‘n’ Data
Q1 Q2 Q3 Q4 No No No No
Decode Read Process Write operation operation operation operation
register ‘f’ Data register ‘f’ If No Jump:
Q1 Q2 Q3 Q4
Example: BCF FLAG_REG, 7, 0 Decode Read literal Process No
Before Instruction ‘n’ Data operation
FLAG_REG = C7h
After Instruction Example: HERE BN Jump
FLAG_REG = 47h
Before Instruction
PC = address (HERE)
After Instruction
If NEGATIVE = 1;
PC = address (Jump)
If NEGATIVE = 0;
PC = address (HERE + 2)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 723


PIC18(L)F25/26K83

BNC Branch if Not Carry BNN Branch if Not Negative


Syntax: BNC n Syntax: BNN n
Operands: -128  n  127 Operands: -128  n  127
Operation: if CARRY bit is ‘0’ Operation: if NEGATIVE bit is ‘0’
(PC) + 2 + 2n  PC (PC) + 2 + 2n  PC
Status Affected: None Status Affected: None
Encoding: 1110 0011 nnnn nnnn Encoding: 1110 0111 nnnn nnnn
Description: If the CARRY bit is ‘0’, then the program Description: If the NEGATIVE bit is ‘0’, then the
will branch. program will branch.
The 2’s complement number ‘2n’ is The 2’s complement number ‘2n’ is
added to the PC. Since the PC will have added to the PC. Since the PC will have
incremented to fetch the next incremented to fetch the next
instruction, the new address will be instruction, the new address will be
PC + 2 + 2n. This instruction is then a PC + 2 + 2n. This instruction is then a
2-cycle instruction. 2-cycle instruction.
Words: 1 Words: 1
Cycles: 1(2) Cycles: 1(2)
Q Cycle Activity: Q Cycle Activity:
If Jump: If Jump:
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
Decode Read literal Process Write to PC Decode Read literal Process Write to PC
‘n’ Data ‘n’ Data
No No No No No No No No
operation operation operation operation operation operation operation operation
If No Jump: If No Jump:
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
Decode Read literal Process No Decode Read literal Process No
‘n’ Data operation ‘n’ Data operation

Example: HERE BNC Jump Example: HERE BNN Jump


Before Instruction Before Instruction
PC = address (HERE) PC = address (HERE)
After Instruction After Instruction
If CARRY = 0; If NEGATIVE = 0;
PC = address (Jump) PC = address (Jump)
If CARRY = 1; If NEGATIVE = 1;
PC = address (HERE + 2) PC = address (HERE + 2)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 724


PIC18(L)F25/26K83

BNOV Branch if Not Overflow BNZ Branch if Not Zero


Syntax: BNOV n Syntax: BNZ n
Operands: -128  n  127 Operands: -128  n  127
Operation: if OVERFLOW bit is ‘0’ Operation: if ZERO bit is ‘0’
(PC) + 2 + 2n  PC (PC) + 2 + 2n  PC
Status Affected: None Status Affected: None
Encoding: 1110 0101 nnnn nnnn Encoding: 1110 0001 nnnn nnnn
Description: If the OVERFLOW bit is ‘0’, then the Description: If the ZERO bit is ‘0’, then the program
program will branch. will branch.
The 2’s complement number ‘2n’ is The 2’s complement number ‘2n’ is
added to the PC. Since the PC will have added to the PC. Since the PC will have
incremented to fetch the next incremented to fetch the next
instruction, the new address will be instruction, the new address will be
PC + 2 + 2n. This instruction is then a PC + 2 + 2n. This instruction is then a
2-cycle instruction. 2-cycle instruction.
Words: 1 Words: 1
Cycles: 1(2) Cycles: 1(2)
Q Cycle Activity: Q Cycle Activity:
If Jump: If Jump:
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
Decode Read literal Process Write to PC Decode Read literal Process Write to PC
‘n’ Data ‘n’ Data
No No No No No No No No
operation operation operation operation operation operation operation operation
If No Jump: If No Jump:
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
Decode Read literal Process No Decode Read literal Process No
‘n’ Data operation ‘n’ Data operation

Example: HERE BNOV Jump Example: HERE BNZ Jump


Before Instruction Before Instruction
PC = address (HERE) PC = address (HERE)
After Instruction After Instruction
If OVERFLOW = 0; If ZERO = 0;
PC = address (Jump) PC = address (Jump)
If OVERFLOW = 1; If ZERO = 1;
PC = address (HERE + 2) PC = address (HERE + 2)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 725


PIC18(L)F25/26K83

BRA Unconditional Branch BSF Bit Set f


Syntax: BRA n Syntax: BSF f, b {,a}
Operands: -1024  n  1023 Operands: 0  f  255
0b7
Operation: (PC) + 2 + 2n  PC
a [0,1]
Status Affected: None
Operation: 1  f<b>
Encoding: 1101 0nnn nnnn nnnn
Status Affected: None
Description: Add the 2’s complement number ‘2n’ to
the PC. Since the PC will have incre- Encoding: 1000 bbba ffff ffff
mented to fetch the next instruction, the Description: Bit ‘b’ in register ‘f’ is set.
new address will be PC + 2 + 2n. This If ‘a’ is ‘0’, the Access Bank is selected.
instruction is a 2-cycle instruction. If ‘a’ is ‘1’, the BSR is used to select the
GPR bank.
Words: 1
If ‘a’ is ‘0’ and the extended instruction
Cycles: 2 set is enabled, this instruction operates
Q Cycle Activity: in Indexed Literal Offset Addressing
mode whenever f 95 (5Fh). See Sec-
Q1 Q2 Q3 Q4
tion 42.2.3 “Byte-Oriented and Bit-
Decode Read literal Process Write to PC Oriented Instructions in Indexed Lit-
‘n’ Data eral Offset Mode” for details.
No No No No
Words: 1
operation operation operation operation
Cycles: 1
Q Cycle Activity:
Example: HERE BRA Jump
Q1 Q2 Q3 Q4
Before Instruction Decode Read Process Write
PC = address (HERE) register ‘f’ Data register ‘f’
After Instruction
PC = address (Jump)
Example: BSF FLAG_REG, 7, 1
Before Instruction
FLAG_REG = 0Ah
After Instruction
FLAG_REG = 8Ah

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 726


PIC18(L)F25/26K83

BTFSC Bit Test File, Skip if Clear BTFSS Bit Test File, Skip if Set
Syntax: BTFSC f, b {,a} Syntax: 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 next Description: If bit ‘b’ in register ‘f’ is ‘1’, then the next
instruction is skipped. If bit ‘b’ is ‘0’, then instruction is skipped. If bit ‘b’ is ‘1’, then
the next instruction fetched during the the next instruction fetched during the
current instruction execution is discarded current instruction execution is discarded
and a NOP is executed instead, making and a NOP is executed instead, making
this a 2-cycle instruction. this a 2-cycle instruction.
If ‘a’ is ‘0’, the Access Bank is selected. If If ‘a’ is ‘0’, the Access Bank is selected. If
‘a’ is ‘1’, the BSR is used to select the ‘a’ is ‘1’, the BSR is used to select the
GPR bank. GPR bank.
If ‘a’ is ‘0’ and the extended instruction If ‘a’ is ‘0’ and the extended instruction
set is enabled, this instruction operates in set is enabled, this instruction operates
Indexed Literal Offset Addressing in Indexed Literal Offset Addressing
mode whenever f 95 (5Fh). mode whenever f 95 (5Fh).
See Section 42.2.3 “Byte-Oriented and See Section 42.2.3 “Byte-Oriented and
Bit-Oriented Instructions in Indexed Bit-Oriented Instructions in Indexed
Literal Offset Mode” for details. Literal Offset Mode” for details.
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 BTFSC FLAG, 1, 0 Example: HERE BTFSS FLAG, 1, 0


FALSE : FALSE :
TRUE : TRUE :
Before Instruction Before Instruction
PC = address (HERE) PC = address (HERE)
After Instruction After Instruction
If FLAG<1> = 0; If FLAG<1> = 0;
PC = address (TRUE) PC = address (FALSE)
If FLAG<1> = 1; If FLAG<1> = 1;
PC = address (FALSE) PC = address (TRUE)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 727


PIC18(L)F25/26K83

BTG Bit Toggle f BOV Branch if Overflow


Syntax: BTG f, b {,a} Syntax: BOV n
Operands: 0  f  255 Operands: -128  n  127
0b<7
Operation: if OVERFLOW bit is ‘1’
a [0,1] (PC) + 2 + 2n  PC
Operation: (f<b>)  f<b>
Status Affected: None
Status Affected: None Encoding: 1110 0100 nnnn nnnn
Encoding: 0111 bbba ffff ffff
Description: If the OVERFLOW bit is ‘1’, then the
Description: Bit ‘b’ in data memory location ‘f’ is program will branch.
inverted. The 2’s complement number ‘2n’ is
If ‘a’ is ‘0’, the Access Bank is selected. added to the PC. Since the PC will have
If ‘a’ is ‘1’, the BSR is used to select the incremented to fetch the next
GPR bank. instruction, the new address will be
If ‘a’ is ‘0’ and the extended instruction PC + 2 + 2n. This instruction is then a
set is enabled, this instruction operates 2-cycle instruction.
in Indexed Literal Offset Addressing Words: 1
mode whenever f 95 (5Fh). See Sec-
tion 42.2.3 “Byte-Oriented and Bit- Cycles: 1(2)
Oriented Instructions in Indexed Lit- Q Cycle Activity:
eral Offset Mode” for details. If Jump:
Words: 1 Q1 Q2 Q3 Q4
Cycles: 1 Decode Read literal Process Write to PC
‘n’ Data
Q Cycle Activity:
No No No No
Q1 Q2 Q3 Q4 operation operation operation operation
Decode Read Process Write If No Jump:
register ‘f’ Data register ‘f’
Q1 Q2 Q3 Q4
Decode Read literal Process No
Example: BTG PORTC, 4, 0 ‘n’ Data operation
Before Instruction:
PORTC = 0111 0101 [75h]
Example: HERE BOV Jump
After Instruction:
PORTC = 0110 0101 [65h] Before Instruction
PC = address (HERE)
After Instruction
If OVERFLOW = 1;
PC = address (Jump)
If OVERFLOW = 0;
PC = address (HERE + 2)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 728


PIC18(L)F25/26K83

BZ Branch if Zero CALL Subroutine Call


Syntax: BZ n Syntax: CALL k {,s}
Operands: -128  n  127 Operands: 0  k  1048575
s [0,1]
Operation: if ZERO bit is ‘1’
(PC) + 2 + 2n  PC Operation: (PC) + 4  TOS,
k  PC<20:1>,
Status Affected: None
if s = 1
Encoding: 1110 0000 nnnn nnnn (W)  WS,
Description: If the ZERO bit is ‘1’, then the program (Status)  STATUSS,
will branch. (BSR)  BSRS
The 2’s complement number ‘2n’ is Status Affected: None
added to the PC. Since the PC will
have incremented to fetch the next Encoding:
1st word (k<7:0>) 1110 110s k7kkk kkkk0
instruction, the new address will be
PC + 2 + 2n. This instruction is then a 2nd word(k<19:8>) 1111 k19kkk kkkk kkkk8
2-cycle instruction. Description: Subroutine call of entire 2-Mbyte
Words: 1 memory range. First, return address
(PC + 4) is pushed onto the return
Cycles: 1(2) stack. If ‘s’ = 1, the W, Status and BSR
Q Cycle Activity: registers are also pushed into their
If Jump: respective shadow registers, WS,
STATUSS and BSRS. If ‘s’ = 0, no
Q1 Q2 Q3 Q4
update occurs (default). Then, the
Decode Read literal Process Write to PC 20-bit value ‘k’ is loaded into PC<20:1>.
‘n’ Data CALL is a 2-cycle instruction.
No No No No
operation operation operation operation Words: 2
If No Jump: Cycles: 2
Q1 Q2 Q3 Q4 Q Cycle Activity:
Decode Read literal Process No Q1 Q2 Q3 Q4
‘n’ Data operation Decode Read literal PUSH PC to Read literal
‘k’<7:0>, stack ‘k’<19:8>,
Example: HERE BZ Jump Write to PC
No No No No
Before Instruction
PC = address (HERE) operation operation operation operation
After Instruction
If ZERO = 1;
PC = address (Jump) Example: HERE CALL THERE, 1
If ZERO = 0; Before Instruction
PC = address (HERE + 2)
PC = address (HERE)
After Instruction
PC = address (THERE)
TOS = address (HERE + 4)
WS = W
BSRS = BSR
STATUSS = Status

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 729


PIC18(L)F25/26K83

CLRF Clear f
CALLW Subroutine Call Using WREG
Syntax: CLRF f {,a}
Syntax: CALLW
Operands: 0  f  255
Operands: None a [0,1]
Operation: (PC + 2)  TOS, Operation: 000h  f
(W)  PCL, 1Z
(PCLATH)  PCH,
(PCLATU)  PCU Status Affected: Z

Status Affected: None Encoding: 0110 101a ffff ffff


Description: Clears the contents of the specified
Encoding: 0000 0000 0001 0100
register.
Description First, the return address (PC + 2) is If ‘a’ is ‘0’, the Access Bank is selected.
pushed onto the return stack. Next, the If ‘a’ is ‘1’, the BSR is used to select the
contents of W are written to PCL; the GPR bank.
existing value is discarded. Then, the If ‘a’ is ‘0’ and the extended instruction
contents of PCLATH and PCLATU are set is enabled, this instruction operates
latched into PCH and PCU, in Indexed Literal Offset Addressing
respectively. The second cycle is mode whenever f 95 (5Fh). See Sec-
executed as a NOP instruction while the tion 42.2.3 “Byte-Oriented and Bit-
new next instruction is fetched. Oriented Instructions in Indexed Lit-
Unlike CALL, there is no option to eral Offset Mode” for details.
update W, Status or BSR.
Words: 1
Words: 1
Cycles: 1
Cycles: 2
Q Cycle Activity:
Q Cycle Activity:
Q1 Q2 Q3 Q4
Q1 Q2 Q3 Q4 Decode Read Process Write
Decode Read PUSH PC No register ‘f’ Data register ‘f’
WREG to stack operation
No No No No Example: CLRF FLAG_REG, 1
operation opera- operation operation Before Instruction
tion FLAG_REG = 5Ah
After Instruction
FLAG_REG = 00h
Example: HERE CALLW
Before Instruction
PC = address (HERE)
PCLATH = 10h
PCLATU = 00h
W = 06h
After Instruction
PC = 001006h
TOS = address (HERE + 2)
PCLATH = 10h
PCLATU = 00h
W = 06h

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 730


PIC18(L)F25/26K83

CLRWDT Clear Watchdog Timer COMF Complement f


Syntax: CLRWDT Syntax: COMF f {,d {,a}}
Operands: None Operands: 0  f  255
d  [0,1]
Operation: 000h  WDT,
000h  WDT postscaler, a  [0,1]
1  TO, Operation: (f)  dest
1  PD Status Affected: N, Z
Status Affected: TO, PD
Encoding: 0001 11da ffff ffff
Encoding: 0000 0000 0000 0100 Description: The contents of register ‘f’ are
Description: CLRWDT instruction resets the complemented. If ‘d’ is ‘0’, the result is
Watchdog Timer. It also resets the post- stored in W. If ‘d’ is ‘1’, the result is
scaler of the WDT. Status bits, TO and stored back in register ‘f’ (default).
PD, are set. If ‘a’ is ‘0’, the Access Bank is selected.
Words: 1 If ‘a’ is ‘1’, the BSR is used to select the
GPR bank.
Cycles: 1 If ‘a’ is ‘0’ and the extended instruction
Q Cycle Activity: set is enabled, this instruction operates
in Indexed Literal Offset Addressing
Q1 Q2 Q3 Q4
mode whenever f 95 (5Fh). See Sec-
Decode No Process No tion 42.2.3 “Byte-Oriented and Bit-
operation Data operation Oriented Instructions in Indexed Lit-
eral Offset Mode” for details.
Example: CLRWDT Words: 1
Before Instruction Cycles: 1
WDT Counter = ?
After Instruction Q Cycle Activity:
WDT Counter = 00h Q1 Q2 Q3 Q4
WDT Postscaler = 0 Decode Read Process Write to
TO = 1 register ‘f’ Data destination
PD = 1

Example: COMF REG, 0, 0


Before Instruction
REG = 13h
After Instruction
REG = 13h
W = ECh

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 731


PIC18(L)F25/26K83

CPFSEQ Compare f with W, skip if f = W CPFSGT Compare f with W, skip if f > W


Syntax: CPFSEQ f {,a} Syntax: CPFSGT f {,a}
Operands: 0  f  255 Operands: 0  f  255
a  [0,1] a  [0,1]
Operation: (f) – (W), Operation: (f) –W),
skip if (f) = (W) skip if (f) > (W)
(unsigned comparison) (unsigned comparison)
Status Affected: None Status Affected: None
Encoding: 0110 001a ffff ffff Encoding: 0110 010a ffff ffff
Description: Compares the contents of data memory Description: Compares the contents of data memory
location ‘f’ to the contents of W by location ‘f’ to the contents of the W by
performing an unsigned subtraction. performing an unsigned subtraction.
If ‘f’ = W, then the fetched instruction is If the contents of ‘f’ are greater than the
discarded and a NOP is executed contents of WREG, then the fetched
instead, making this a 2-cycle instruction is discarded and a NOP is
instruction. executed instead, making this a
If ‘a’ is ‘0’, the Access Bank is selected. 2-cycle instruction.
If ‘a’ is ‘1’, the BSR is used to select the If ‘a’ is ‘0’, the Access Bank is selected.
GPR bank. If ‘a’ is ‘1’, the BSR is used to select the
If ‘a’ is ‘0’ and the extended instruction GPR bank.
set is enabled, this instruction operates If ‘a’ is ‘0’ and the extended instruction
in Indexed Literal Offset Addressing set is enabled, this instruction operates
mode whenever f 95 (5Fh). See Sec- in Indexed Literal Offset Addressing
tion 42.2.3 “Byte-Oriented and Bit- mode whenever f 95 (5Fh). See Sec-
Oriented Instructions in Indexed Lit- tion 42.2.3 “Byte-Oriented and Bit-
eral Offset Mode” for details. Oriented Instructions in Indexed Lit-
Words: 1 eral Offset Mode” for details.
Cycles: 1(2) Words: 1
Note: 3 cycles if skip and followed Cycles: 1(2)
by a 2-word instruction. Note: 3 cycles if skip and followed
Q Cycle Activity: by a 2-word instruction.
Q1 Q2 Q3 Q4 Q Cycle Activity:
Decode Read Process No Q1 Q2 Q3 Q4
register ‘f’ Data operation Decode Read Process No
If skip: register ‘f’ Data operation
Q1 Q2 Q3 Q4 If skip:
No No No No Q1 Q2 Q3 Q4
operation operation operation operation No No No No
If skip and followed by 2-word instruction: operation operation operation operation
Q1 Q2 Q3 Q4 If skip and followed by 2-word instruction:
No No No No Q1 Q2 Q3 Q4
operation operation operation operation No No No No
No No No No operation operation operation operation
operation operation operation operation No No No No
operation operation operation operation
Example: HERE CPFSEQ REG, 0
NEQUAL :
Example: HERE CPFSGT REG, 0
EQUAL :
NGREATER :
Before Instruction GREATER :
PC Address = HERE
Before Instruction
W = ? PC = Address (HERE)
REG = ?
W = ?
After Instruction
After Instruction
If REG = W;
PC = Address (EQUAL) If REG  W;
PC = Address (GREATER)
If REG  W;
PC = Address (NEQUAL) If REG  W;
PC = Address (NGREATER)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 732


PIC18(L)F25/26K83

CPFSLT Compare f with W, skip if f < W DAW Decimal Adjust W Register


Syntax: CPFSLT f {,a} Syntax: DAW
Operands: 0  f  255 Operands: None
a  [0,1]
Operation: If [W<3:0> > 9] or [DC = 1] then
Operation: (f) –W), (W<3:0>) + 6  W<3:0>;
skip if (f) < (W) else
(unsigned comparison) (W<3:0>)  W<3:0>;
Status Affected: None
If [W<7:4> + DC > 9] or [C = 1] then
Encoding: 0110 000a ffff ffff (W<7:4>) + 6 + DC  W<7:4>;
Description: Compares the contents of data memory else
location ‘f’ to the contents of W by (W<7:4>) + DC  W<7:4>
performing an unsigned subtraction. Status Affected: C
If the contents of ‘f’ are less than the
contents of W, then the fetched Encoding: 0000 0000 0000 0111
instruction is discarded and a NOP is Description: DAW adjusts the 8-bit value in W, result-
executed instead, making this a ing from the earlier addition of two vari-
2-cycle instruction. ables (each in packed BCD format) and
If ‘a’ is ‘0’, the Access Bank is selected. produces a correct packed BCD result.
If ‘a’ is ‘1’, the BSR is used to select the Words: 1
GPR bank.
Cycles: 1
Words: 1
Q Cycle Activity:
Cycles: 1(2)
Note: 3 cycles if skip and followed Q1 Q2 Q3 Q4
by a 2-word instruction. Decode Read Process Write
register W Data W
Q Cycle Activity:
Example1:
Q1 Q2 Q3 Q4
DAW
Decode Read Process No
register ‘f’ Data operation Before Instruction
If skip: W = A5h
C = 0
Q1 Q2 Q3 Q4 DC = 0
No No No No After Instruction
operation operation operation operation W = 05h
If skip and followed by 2-word instruction: C = 1
Q1 Q2 Q3 Q4 DC = 0
Example 2:
No No No No
Before Instruction
operation operation operation operation
W = CEh
No No No No
C = 0
operation operation operation operation DC = 0
After Instruction
Example: HERE CPFSLT REG, 1 W = 34h
NLESS : C = 1
LESS : DC = 0
Before Instruction
PC = Address (HERE)
W = ?
After Instruction
If REG < W;
PC = Address (LESS)
If REG  W;
PC = Address (NLESS)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 733


PIC18(L)F25/26K83

DECF Decrement f DECFSZ Decrement f, skip if 0


Syntax: DECF f {,d {,a}} Syntax: DECFSZ 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) – 1  dest Operation: (f) – 1  dest,
Status Affected: C, DC, N, OV, Z skip if result = 0
Status Affected: None
Encoding: 0000 01da ffff ffff
Description: Decrement register ‘f’. If ‘d’ is ‘0’, the Encoding: 0010 11da ffff ffff
result is stored in W. If ‘d’ is ‘1’, the Description: The contents of register ‘f’ are
result is stored back in register ‘f’ decremented. If ‘d’ is ‘0’, the result is
(default). placed in W. If ‘d’ is ‘1’, the result is
If ‘a’ is ‘0’, the Access Bank is selected. placed back in register ‘f’ (default).
If ‘a’ is ‘1’, the BSR is used to select the If the result is ‘0’, the next instruction,
GPR bank. which is already fetched, is discarded
If ‘a’ is ‘0’ and the extended instruction and a NOP is executed instead, making
set is enabled, this instruction operates it a 2-cycle instruction.
in Indexed Literal Offset Addressing If ‘a’ is ‘0’, the Access Bank is selected.
mode whenever f 95 (5Fh). See Sec- If ‘a’ is ‘1’, the BSR is used to select the
tion 42.2.3 “Byte-Oriented and Bit- GPR bank.
Oriented Instructions in Indexed Lit- If ‘a’ is ‘0’ and the extended instruction
eral Offset Mode” for details. set is enabled, this instruction operates
Words: 1 in Indexed Literal Offset Addressing
mode whenever f 95 (5Fh). See Sec-
Cycles: 1 tion 42.2.3 “Byte-Oriented and Bit-
Q Cycle Activity: Oriented Instructions in Indexed Lit-
eral Offset Mode” for details.
Q1 Q2 Q3 Q4
Decode Read Process Write to Words: 1
register ‘f’ Data destination Cycles: 1(2)
Note: 3 cycles if skip and followed
by a 2-word instruction.
Example: DECF CNT, 1, 0
Before Instruction Q Cycle Activity:
CNT = 01h Q1 Q2 Q3 Q4
Z = 0 Decode Read Process Write to
After Instruction register ‘f’ Data destination
CNT = 00h
Z = 1 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

Example: HERE DECFSZ CNT, 1, 1


GOTO LOOP
CONTINUE
Before Instruction
PC = Address (HERE)
After Instruction
CNT = CNT - 1
If CNT = 0;
PC = Address (CONTINUE)
If CNT  0;
PC = Address (HERE + 2)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 734


PIC18(L)F25/26K83

DCFSNZ Decrement f, skip if not 0 GOTO Unconditional Branch


Syntax: DCFSNZ f {,d {,a}} Syntax: GOTO k
Operands: 0  f  255 Operands: 0  k  1048575
d  [0,1]
Operation: k  PC<20:1>
a  [0,1]
Status Affected: None
Operation: (f) – 1  dest,
skip if result  0 Encoding:
1st word (k<7:0>) 1110 1111 k7kkk kkkk0
Status Affected: None
2nd word(k<19:8>) 1111 k19kkk kkkk kkkk8
Encoding: 0100 11da ffff ffff Description: GOTO allows an unconditional branch
Description: The contents of register ‘f’ are anywhere within entire
decremented. If ‘d’ is ‘0’, the result is 2-Mbyte memory range. The 20-bit
placed in W. If ‘d’ is ‘1’, the result is value ‘k’ is loaded into PC<20:1>.
placed back in register ‘f’ (default). GOTO is always a 2-cycle
If the result is not ‘0’, the next instruction.
instruction, which is already fetched, is
Words: 2
discarded and a NOP is executed
instead, making it a 2-cycle Cycles: 2
instruction. Q Cycle Activity:
If ‘a’ is ‘0’, the Access Bank is selected.
Q1 Q2 Q3 Q4
If ‘a’ is ‘1’, the BSR is used to select the
GPR bank. Decode Read literal No Read literal
If ‘a’ is ‘0’ and the extended instruction ‘k’<7:0>, operation ‘k’<19:8>,
set is enabled, this instruction operates Write to PC
in Indexed Literal Offset Addressing No No No No
mode whenever f 95 (5Fh). See Sec- operation operation operation operation
tion 42.2.3 “Byte-Oriented and Bit-
Oriented Instructions in Indexed Lit-
Example: GOTO THERE
eral Offset Mode” for details.
After Instruction
Words: 1
PC = Address (THERE)
Cycles: 1(2)
Note: 3 cycles if skip and followed
by a 2-word instruction.
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read Process Write to
register ‘f’ Data destination
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

Example: HERE DCFSNZ TEMP, 1, 0


ZERO :
NZERO :
Before Instruction
TEMP = ?
After Instruction
TEMP = TEMP – 1,
If TEMP = 0;
PC = Address (ZERO)
If TEMP  0;
PC = Address (NZERO)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 735


PIC18(L)F25/26K83

INCF Increment f INCFSZ Increment f, skip if 0


Syntax: INCF f {,d {,a}} Syntax: INCFSZ 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) + 1  dest Operation: (f) + 1  dest,
Status Affected: C, DC, N, OV, Z skip if result = 0
Status Affected: None
Encoding: 0010 10da ffff ffff
Description: The contents of register ‘f’ are Encoding: 0011 11da ffff ffff
incremented. If ‘d’ is ‘0’, the result is Description: The contents of register ‘f’ are
placed in W. If ‘d’ is ‘1’, the result is incremented. If ‘d’ is ‘0’, the result is
placed back in register ‘f’ (default). placed in W. If ‘d’ is ‘1’, the result is
If ‘a’ is ‘0’, the Access Bank is selected. placed back in register ‘f’ (default).
If ‘a’ is ‘1’, the BSR is used to select the If the result is ‘0’, the next instruction,
GPR bank. which is already fetched, is discarded
If ‘a’ is ‘0’ and the extended instruction and a NOP is executed instead, making
set is enabled, this instruction operates it a 2-cycle instruction.
in Indexed Literal Offset Addressing If ‘a’ is ‘0’, the Access Bank is selected.
mode whenever f 95 (5Fh). See Sec- If ‘a’ is ‘1’, the BSR is used to select the
tion 42.2.3 “Byte-Oriented and Bit- GPR bank.
Oriented Instructions in Indexed Lit- If ‘a’ is ‘0’ and the extended instruction
eral Offset Mode” for details. set is enabled, this instruction operates
Words: 1 in Indexed Literal Offset Addressing
mode whenever f 95 (5Fh). See Sec-
Cycles: 1 tion 42.2.3 “Byte-Oriented and Bit-
Q Cycle Activity: Oriented Instructions in Indexed Lit-
eral Offset Mode” for details.
Q1 Q2 Q3 Q4
Decode Read Process Write to Words: 1
register ‘f’ Data destination Cycles: 1(2)
Note: 3 cycles if skip and followed
by a 2-word instruction.
Example: INCF CNT, 1, 0
Before Instruction Q Cycle Activity:
CNT = FFh Q1 Q2 Q3 Q4
Z = 0 Decode Read Process Write to
C = ?
DC = ? register ‘f’ Data destination
After Instruction If skip:
CNT = 00h Q1 Q2 Q3 Q4
Z = 1
C = 1 No No No No
DC = 1 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

Example: HERE INCFSZ CNT, 1, 0


NZERO :
ZERO :
Before Instruction
PC = Address (HERE)
After Instruction
CNT = CNT + 1
If CNT = 0;
PC = Address (ZERO)
If CNT  0;
PC = Address (NZERO)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 736


PIC18(L)F25/26K83

INFSNZ Increment f, skip if not 0 IORLW Inclusive OR literal with W


Syntax: INFSNZ f {,d {,a}} Syntax: IORLW k
Operands: 0  f  255 Operands: 0  k  255
d  [0,1]
a  [0,1] Operation: (W) .OR. k  W
Operation: (f) + 1  dest, Status Affected: N, Z
skip if result  0 Encoding: 0000 1001 kkkk kkkk
Status Affected: None Description: The contents of W are ORed with the 8-
Encoding: 0100 10da ffff ffff bit literal ‘k’. The result is placed in W.
Description: The contents of register ‘f’ are Words: 1
incremented. If ‘d’ is ‘0’, the result is
Cycles: 1
placed in W. If ‘d’ is ‘1’, the result is
placed back in register ‘f’ (default). Q Cycle Activity:
If the result is not ‘0’, the next Q1 Q2 Q3 Q4
instruction, which is already fetched, is Decode Read Process Write to W
discarded and a NOP is executed
literal ‘k’ Data
instead, making it a 2-cycle
instruction.
If ‘a’ is ‘0’, the Access Bank is selected. Example: IORLW 35h
If ‘a’ is ‘1’, the BSR is used to select the Before Instruction
GPR bank.
W = 9Ah
If ‘a’ is ‘0’ and the extended instruction
set is enabled, this instruction operates After Instruction
in Indexed Literal Offset Addressing W = BFh
mode whenever f 95 (5Fh). See Sec-
tion 42.2.3 “Byte-Oriented and Bit-
Oriented Instructions in Indexed Lit-
eral Offset Mode” for details.
Words: 1
Cycles: 1(2)
Note: 3 cycles if skip and followed
by a 2-word instruction.
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read Process Write to
register ‘f’ Data destination
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

Example: HERE INFSNZ REG, 1, 0


ZERO
NZERO
Before Instruction
PC = Address (HERE)
After Instruction
REG = REG + 1
If REG  0;
PC = Address (NZERO)
If REG = 0;
PC = Address (ZERO)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 737


PIC18(L)F25/26K83

IORWF Inclusive OR W with f LFSR Load FSR


Syntax: IORWF f {,d {,a}} Syntax: LFSR f, k
Operands: 0  f  255 Operands: 0f2
d  [0,1] 0  k  16383
a  [0,1] Operation: k  FSRf
Operation: (W) .OR. (f)  dest
Status Affected: None
Status Affected: N, Z Encoding: 1110 1110 00k13k kkkk
Encoding: 0001 00da ffff ffff 1111 0000 k7kkk kkkk
Description: Inclusive OR W with register ‘f’. If ‘d’ is Description: The 14-bit literal ‘k’ is loaded into the
‘0’, the result is placed in W. If ‘d’ is ‘1’, File Select Register pointed to by ‘f’.
the result is placed back in register ‘f’ Words: 2
(default).
If ‘a’ is ‘0’, the Access Bank is selected. Cycles: 2
If ‘a’ is ‘1’, the BSR is used to select the Q Cycle Activity:
GPR bank.
Q1 Q2 Q3 Q4
If ‘a’ is ‘0’ and the extended instruction
set is enabled, this instruction operates Decode Read literal Process Write
in Indexed Literal Offset Addressing ‘k’ MSB Data literal ‘k’
mode whenever f 95 (5Fh). See Sec- MSB to
tion 42.2.3 “Byte-Oriented and Bit- FSRfH
Oriented Instructions in Indexed Lit- Decode Read literal Process Write literal
eral Offset Mode” for details. ‘k’ LSB Data ‘k’ to FSRfL
Words: 1
Cycles: 1 Example: LFSR 2, 3ABh
After Instruction
Q Cycle Activity:
FSR2H = 03h
Q1 Q2 Q3 Q4 FSR2L = ABh
Decode Read Process Write to
register ‘f’ Data destination

Example: IORWF RESULT, 0, 1


Before Instruction
RESULT = 13h
W = 91h
After Instruction
RESULT = 13h
W = 93h

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 738


PIC18(L)F25/26K83

MOVF Move f MOVFF Move f to f


Syntax: MOVF f {,d {,a}} Syntax: MOVFF fs,fd
Operands: 0  f  255 Operands: 0  fs  4095
d  [0,1] 0  fd  4095
a  [0,1] Operation: (fs)  fd
Operation: f  dest
Status Affected: None
Status Affected: N, Z Encoding:
Encoding: 0101 00da ffff ffff 1st word (source) 1100 ffff ffff ffffs
Description: The contents of register ‘f’ are moved to 2nd word (destin.) 1111 ffff ffff ffffd
a destination dependent upon the Description: The contents of source register ‘fs’ are
status of ‘d’. If ‘d’ is ‘0’, the result is moved to destination register ‘fd’.
placed in W. If ‘d’ is ‘1’, the result is Location of source ‘fs’ can be anywhere
placed back in register ‘f’ (default). in the 4096-byte data space (000h to
Location ‘f’ can be anywhere in the FFFh) and location of destination ‘fd’
256-byte bank. can also be anywhere from 000h to
If ‘a’ is ‘0’, the Access Bank is selected. FFFh.
If ‘a’ is ‘1’, the BSR is used to select the MOVFF has curtailed the
GPR bank. source and destination range to the
If ‘a’ is ‘0’ and the extended instruction lower 4 Kbyte space of memory (Banks
set is enabled, this instruction operates 1 through 15). For everything else, use
in Indexed Literal Offset Addressing MOVFFL.
mode whenever f 95 (5Fh). See Sec- Words: 2
tion 42.2.3 “Byte-Oriented and Bit-
Oriented Instructions in Indexed Lit- Cycles: 2 (3)
eral Offset Mode” for details. Q Cycle Activity:
Words: 1 Q1 Q2 Q3 Q4
Cycles: 1 Decode Read Process No
register ‘f’ Data operation
Q Cycle Activity:
(src)
Q1 Q2 Q3 Q4 Decode No No Write
Decode Read Process Write W operation operation register ‘f’
register ‘f’ Data (dest)
No dummy
read
Example: MOVF REG, 0, 0
Before Instruction Example: MOVFF REG1, REG2
REG = 22h Before Instruction
W = FFh REG1 = 33h
After Instruction REG2 = 11h
REG = 22h After Instruction
W = 22h REG1 = 33h
REG2 = 33h

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 739


PIC18(L)F25/26K83

MOVLB Move literal to BSR


MOVFFL Move f to f (Long Range)
Syntax: MOVLW k
Syntax: MOVFFL fs,fd
Operands: 0  k  63
Operands: 0  fs  16383
0  fd  16383 Operation: k  BSR
Status Affected: None
Operation: (fs)  fd
Status Affected: None Encoding: 0000 0001 00kk kkkk

Encoding: Description: The 6-bit literal ‘k’ is loaded into the


1st word Bank Select Register (BSR<5:0>). The
0000 0000 0110 fs fs fs fs
value of BSR<7:6> always remains ‘0’.
2nd word 1111 fsfsfsfs fsfsfsfs fs fs fd fd
3rd word 1111 fdfdfdfd fdfdfdfd fd fd fd fd Words: 1
Description: The contents of source register ‘fs’ are Cycles: 1
moved to destination register ‘fd’. Q Cycle Activity:
Location of source ‘fs’ can be anywhere in
the 16 Kbyte data space (0000h to 3FFFh). Q1 Q2 Q3 Q4
Either source or destination can be W Decode Read Process Write literal
(a useful special situation). literal ‘k’ Data ‘k’ to BSR
MOVFFL is particularly useful for
transferring a data memory location to a Example: MOVLB 5
peripheral register (such as the transmit
buffer or an I/O port). Before Instruction
The MOVFFL instruction cannot use the BSR Register = 02h
PCL, TOSU, TOSH or TOSL as the After Instruction
destination register. BSR Register = 05h
Words: 3
Cycles: 3
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode No No No
operation operation operation
Decode Read reg- Process No
ister ‘fs’ data operation
(src)
Decode No No Write
operation operation register ‘fd’
No dummy (dest)
read

Example: MOVFFL 2000h, 200Ah


Before Instruction
Contents of 2000h = 33h
Contents of 200Ah = 11h
After Instruction
Contents of 2000h = 33h
Contents of 200Ah = 33h

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 740


PIC18(L)F25/26K83

MOVLW Move literal to W MOVWF Move W to f


Syntax: MOVLW k Syntax: MOVWF f {,a}
Operands: 0  k  255 Operands: 0  f  255
a  [0,1]
Operation: kW
Status Affected: None Operation: (W)  f

Encoding: 0000 1110 kkkk kkkk Status Affected: None


Encoding: 0110 111a ffff ffff
Description: The 8-bit literal ‘k’ is loaded into W.
Words: 1 Description: Move data from W to register ‘f’.
Location ‘f’ can be anywhere in the
Cycles: 1 256-byte bank.
Q Cycle Activity: If ‘a’ is ‘0’, the Access Bank is selected.
If ‘a’ is ‘1’, the BSR is used to select the
Q1 Q2 Q3 Q4
GPR bank.
Decode Read Process Write to W If ‘a’ is ‘0’ and the extended instruction
literal ‘k’ Data set is enabled, this instruction operates
in Indexed Literal Offset Addressing
Example: MOVLW 5Ah mode whenever f 95 (5Fh). See Sec-
tion 42.2.3 “Byte-Oriented and Bit-
After Instruction
Oriented Instructions in Indexed Lit-
W = 5Ah eral Offset Mode” for details.
Words: 1
Cycles: 1
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read Process Write
register ‘f’ Data register ‘f’

Example: MOVWF REG, 0


Before Instruction
W = 4Fh
REG = FFh
After Instruction
W = 4Fh
REG = 4Fh

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 741


PIC18(L)F25/26K83

MULLW Multiply literal with W MULWF Multiply W with f


Syntax: MULLW k Syntax: MULWF f {,a}
Operands: 0  k  255 Operands: 0  f  255
a  [0,1]
Operation: (W) x k  PRODH:PRODL
Status Affected: None Operation: (W) x (f)  PRODH:PRODL

Encoding: 0000 1101 kkkk kkkk Status Affected: None


Encoding: 0000 001a ffff ffff
Description: An unsigned multiplication is carried
out between the contents of W and the Description: An unsigned multiplication is carried
8-bit literal ‘k’. The 16-bit result is out between the contents of W and the
placed in the PRODH:PRODL register register file location ‘f’. The 16-bit
pair. PRODH contains the high byte. result is stored in the PRODH:PRODL
W is unchanged. register pair. PRODH contains the
None of the Status flags are affected. high byte. Both W and ‘f’ are
Note that neither overflow nor carry is unchanged.
possible in this operation. A zero result None of the Status flags are affected.
is possible but not detected. Note that neither overflow nor carry is
Words: 1 possible in this operation. A zero
result is possible but not detected.
Cycles: 1 If ‘a’ is ‘0’, the Access Bank is
Q Cycle Activity: selected. If ‘a’ is ‘1’, the BSR is used
to select the GPR bank.
Q1 Q2 Q3 Q4
If ‘a’ is ‘0’ and the extended instruction
Decode Read Process Write set is enabled, this instruction
literal ‘k’ Data registers operates in Indexed Literal Offset
PRODH: Addressing mode whenever
PRODL f 95 (5Fh). See Section
42.2.3 “Byte-Oriented and Bit-Ori-
Example: MULLW 0C4h ented Instructions in Indexed Literal
Offset Mode” for details.
Before Instruction
Words: 1
W = E2h
PRODH = ? Cycles: 1
PRODL = ?
After Instruction Q Cycle Activity:

W = E2h Q1 Q2 Q3 Q4
PRODH = ADh Decode Read Process Write
PRODL = 08h register ‘f’ Data registers
PRODH:
PRODL

Example: MULWF REG, 1


Before Instruction
W = C4h
REG = B5h
PRODH = ?
PRODL = ?
After Instruction
W = C4h
REG = B5h
PRODH = 8Ah
PRODL = 94h

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 742


PIC18(L)F25/26K83

NEGF Negate f NOP No Operation


Syntax: NEGF f {,a} Syntax: NOP
Operands: 0  f  255 Operands: None
a  [0,1]
Operation: No operation
Operation: (f)+1f Status Affected: None
Status Affected: N, OV, C, DC, Z Encoding: 0000 0000 0000 0000
Encoding: 0110 110a ffff ffff 1111 xxxx xxxx xxxx
Description: Location ‘f’ is negated using two’s Description: No operation.
complement. The result is placed in the
Words: 1
data memory location ‘f’.
If ‘a’ is ‘0’, the Access Bank is selected. Cycles: 1
If ‘a’ is ‘1’, the BSR is used to select the Q Cycle Activity:
GPR bank.
Q1 Q2 Q3 Q4
If ‘a’ is ‘0’ and the extended instruction
set is enabled, this instruction operates Decode No No No
in Indexed Literal Offset Addressing operation operation operation
mode whenever f 95 (5Fh). See Sec-
tion 42.2.3 “Byte-Oriented and Bit- Example:
Oriented Instructions in Indexed Lit-
eral Offset Mode” for details. None.

Words: 1
Cycles: 1
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read Process Write
register ‘f’ Data register ‘f’

Example: NEGF REG, 1


Before Instruction
REG = 0011 1010 [3Ah]
After Instruction
REG = 1100 0110 [C6h]

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 743


PIC18(L)F25/26K83

POP Pop Top of Return Stack PUSH Push Top of Return Stack
Syntax: POP Syntax: 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 return Description: The PC + 2 is pushed onto the top of
stack and is discarded. The TOS value the return stack. The previous TOS
then becomes the previous value that value is pushed down on the stack.
was pushed onto the return stack. This instruction allows implementing a
This instruction is provided to enable software stack by modifying TOS and
the user to properly manage the return then pushing it onto the return stack.
stack to incorporate a software stack. Words: 1
Words: 1
Cycles: 1
Cycles: 1 Q Cycle Activity:
Q Cycle Activity: Q1 Q2 Q3 Q4
Q1 Q2 Q3 Q4 Decode PUSH No No
Decode No POP TOS No PC + 2 onto operation operation
operation value operation return stack

Example: POP Example: PUSH


GOTO NEW
Before Instruction
Before Instruction TOS = 345Ah
TOS = 0031A2h PC = 0124h
Stack (1 level down) = 014332h
After Instruction
After Instruction PC = 0126h
TOS = 014332h TOS = 0126h
PC = NEW Stack (1 level down) = 345Ah

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 744


PIC18(L)F25/26K83

RCALL Relative Call RESET Reset


Syntax: RCALL n Syntax: RESET
Operands: -1024  n  1023 Operands: None
Operation: (PC) + 2  TOS, Operation: Reset all registers and flags that are
(PC) + 2 + 2n  PC affected by a MCLR Reset.
Status Affected: None Status Affected: All
Encoding: 1101 1nnn nnnn nnnn Encoding: 0000 0000 1111 1111
Description: Subroutine call with a jump up to 1K Description: This instruction provides a way to
from the current location. First, return execute a MCLR Reset by software.
address (PC + 2) is pushed onto the Words: 1
stack. Then, add the 2’s complement
number ‘2n’ to the PC. Since the PC will Cycles: 1
have incremented to fetch the next Q Cycle Activity:
instruction, the new address will be
Q1 Q2 Q3 Q4
PC + 2 + 2n. This instruction is a
2-cycle instruction. Decode Start No No
Reset operation operation
Words: 1
Cycles: 2 Example: RESET
Q Cycle Activity: After Instruction
Q1 Q2 Q3 Q4 Registers = Reset Value
Decode Read literal Process Write to PC Flags* = Reset Value
‘n’ Data
PUSH PC to
stack
No No No No
operation operation operation operation

Example: HERE RCALL Jump


Before Instruction
PC = Address (HERE)
After Instruction
PC = Address (Jump)
TOS = Address (HERE + 2)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 745


PIC18(L)F25/26K83

RETFIE Return from Interrupt RETLW Return literal to W


Syntax: RETFIE {s} Syntax: RETLW k
Operands: s  [0,1] Operands: 0  k  255
Operation: (TOS)  PC, Operation: k  W,
if s = 1, context is restored into WREG, (TOS)  PC,
STATUS, BSR, FSR0H, FSR0L, PCLATU, PCLATH are unchanged
FSR1H, FSR1L, FSR2H, FSR2L, Status Affected: None
PRODH, PRODL, PCLATH and
PCLATU registers from the Encoding: 0000 1100 kkkk kkkk
corresponding shadow registers. Description: W is loaded with the 8-bit literal ‘k’. The
Program Counter is loaded from the top
if s = 0, there is no change in status of of the stack (the return address). The
any register. high address latch (PCLATH) remains
Status Affected: STAT<1:0> in INTCON1 register unchanged.
Encoding: 0000 0000 0001 000s Words: 1

Description: Return from interrupt. Stack is popped Cycles: 2


and Top-of-Stack (TOS) is loaded into Q Cycle Activity:
the PC. Interrupts are enabled by
Q1 Q2 Q3 Q4
setting either the high or low priority
global interrupt enable bit. If ‘s’ = 1, the Decode Read Process POP PC
contents of the shadow registers, literal ‘k’ Data from stack,
WREG, STATUS, BSR, FSR0H, Write to W
FSR0L, FSR1H, FSR1L, FSR2H, No No No No
FSR2L, PRODH, PRODL, PCLATH and operation operation operation operation
PCLATU, are loaded into corresponding
registers. There are two sets of shadow Example:
registers, main context and low context.
The set retrieved on RETFIE instruction
CALL TABLE ; W contains table
execution depends on what the state of
; offset value
operation of the CPU was when RET-
; W now has
FIE was executed. If ‘s’ = 0, no update
; table value
of these registers occurs (default).
:
Words: 1 TABLE
Cycles: 2 ADDWF PCL ; W = offset
RETLW k0 ; Begin table
Q Cycle Activity: RETLW k1 ;
Q1 Q2 Q3 Q4 :
Decode No No POP PC :
operation operation from stack RETLW kn ; End of table
Set GIEH or
GIEL Before Instruction
No No No No W = 07h
operation operation operation operation After Instruction
W = value of kn
Example: RETFIE 1
After Interrupt
PC = TOS
WREG = WREG_SHAD
BSR = BSR_SHAD
STATUS = STATUS_SHAD
FSR0L/H = FSR0L/H_SHAD
FSR1L/H = FSR1L/H_SHAD
FSR2L/H = FSR2L/H_SHAD
PROD/H = PROD/H_SHAD
PCLATH/U = PCLATH/U_SHAD

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 746


PIC18(L)F25/26K83

RETURN Return from Subroutine RLCF Rotate Left f through Carry


Syntax: RETURN {s} Syntax: RLCF f {,d {,a}}
Operands: s  [0,1] Operands: 0  f  255
d  [0,1]
Operation: (TOS)  PC,
if s = 1 a  [0,1]
(WS)  W, Operation: (f<n>)  dest<n + 1>,
(STATUSS)  Status, (f<7>)  C,
(BSRS)  BSR, (C)  dest<0>
PCLATU, PCLATH are unchanged
Status Affected: C, N, Z
Status Affected: None Encoding: 0011 01da ffff ffff
Encoding: 0000 0000 0001 001s
Description: The contents of register ‘f’ are rotated
Description: Return from subroutine. The stack is one bit to the left through the CARRY
popped and the top of the stack (TOS) flag. If ‘d’ is ‘0’, the result is placed in
is loaded into the Program Counter. If W. If ‘d’ is ‘1’, the result is stored back
‘s’= 1, the contents of the shadow in register ‘f’ (default).
registers, WS, STATUSS and BSRS, If ‘a’ is ‘0’, the Access Bank is
are loaded into their corresponding selected. If ‘a’ is ‘1’, the BSR is used to
registers, W, Status and BSR. If select the GPR bank.
‘s’ = 0, no update of these registers If ‘a’ is ‘0’ and the extended instruction
occurs (default). set is enabled, this instruction
operates in Indexed Literal Offset
Words: 1
Addressing mode whenever
Cycles: 2 f 95 (5Fh). See Section
Q Cycle Activity: 42.2.3 “Byte-Oriented and Bit-Ori-
ented Instructions in Indexed Literal
Q1 Q2 Q3 Q4
Offset Mode” for details.
Decode No Process POP PC
operation Data from stack C register f
No No No No
operation operation operation operation Words: 1
Cycles: 1
Q Cycle Activity:
Example: RETURN Q1 Q2 Q3 Q4
After Instruction: Decode Read Process Write to
PC = TOS register ‘f’ Data destination

Example: RLCF REG, 0, 0


Before Instruction
REG = 1110 0110
C = 0
After Instruction
REG = 1110 0110
W = 1100 1100
C = 1

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 747


PIC18(L)F25/26K83

RLNCF Rotate Left f (No Carry) RRCF Rotate Right f through Carry
Syntax: RLNCF f {,d {,a}} Syntax: 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>

Encoding: 0100 01da ffff ffff Status Affected: C, N, Z


Encoding: 0011 00da ffff ffff
Description: The contents of register ‘f’ are rotated
one bit to the left. If ‘d’ is ‘0’, the result Description: The contents of register ‘f’ are rotated
is placed in W. If ‘d’ is ‘1’, the result is one bit to the right through the CARRY
stored back in register ‘f’ (default). flag. If ‘d’ is ‘0’, the result is placed in W.
If ‘a’ is ‘0’, the Access Bank is selected. If ‘d’ is ‘1’, the result is placed back in
If ‘a’ is ‘1’, the BSR is used to select the register ‘f’ (default).
GPR bank. If ‘a’ is ‘0’, the Access Bank is selected.
If ‘a’ is ‘0’ and the extended instruction If ‘a’ is ‘1’, the BSR is used to select the
set is enabled, this instruction operates GPR bank.
in Indexed Literal Offset Addressing If ‘a’ is ‘0’ and the extended instruction
mode whenever f 95 (5Fh). See Sec- set is enabled, this instruction operates
tion 42.2.3 “Byte-Oriented and Bit- in Indexed Literal Offset Addressing
Oriented Instructions in Indexed Lit- mode whenever f 95 (5Fh). See Sec-
eral Offset Mode” for details. tion 42.2.3 “Byte-Oriented and Bit-
Oriented Instructions in Indexed Lit-
register f
eral Offset Mode” for details.

Words: 1 C register f
Cycles: 1
Words: 1
Q Cycle Activity:
Cycles: 1
Q1 Q2 Q3 Q4
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
W = 0111 0011
C = 0

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 748


PIC18(L)F25/26K83

RRNCF Rotate Right f (No Carry) SETF Set f


Syntax: RRNCF f {,d {,a}} Syntax: SETF f {,a}
Operands: 0  f  255 Operands: 0  f  255
d  [0,1] a [0,1]
a  [0,1] Operation: FFh  f
Operation: (f<n>)  dest<n – 1>,
Status Affected: None
(f<0>)  dest<7>
Encoding: 0110 100a ffff ffff
Status Affected: N, Z
Description: The contents of the specified register
Encoding: 0100 00da ffff ffff
are set to FFh.
Description: The contents of register ‘f’ are rotated If ‘a’ is ‘0’, the Access Bank is selected.
one bit to the right. If ‘d’ is ‘0’, the result If ‘a’ is ‘1’, the BSR is used to select the
is placed in W. If ‘d’ is ‘1’, the result is GPR bank.
placed back in register ‘f’ (default). If ‘a’ is ‘0’ and the extended instruction
If ‘a’ is ‘0’, the Access Bank will be set is enabled, this instruction operates
selected (default), overriding the BSR in Indexed Literal Offset Addressing
value. If ‘a’ is ‘1’, then the bank will be mode whenever f 95 (5Fh). See Sec-
selected as per the BSR value. tion 42.2.3 “Byte-Oriented and Bit-
If ‘a’ is ‘0’ and the extended instruction Oriented Instructions in Indexed Lit-
set is enabled, this instruction operates eral Offset Mode” for details.
in Indexed Literal Offset Addressing Words: 1
mode whenever f 95 (5Fh). See Sec-
tion 42.2.3 “Byte-Oriented and Bit- Cycles: 1
Oriented Instructions in Indexed Lit- Q Cycle Activity:
eral Offset Mode” for details.
Q1 Q2 Q3 Q4
register f Decode Read Process Write
register ‘f’ Data register ‘f’
Words: 1
Cycles: 1 Example: SETF REG, 1
Q Cycle Activity: Before Instruction
Q1 Q2 Q3 Q4 REG = 5Ah
Decode Read Process Write to After Instruction
REG = FFh
register ‘f’ Data destination

Example 1: RRNCF REG, 1, 0


Before Instruction
REG = 1101 0111
After Instruction
REG = 1110 1011

Example 2: RRNCF REG, 0, 0


Before Instruction
W = ?
REG = 1101 0111
After Instruction
W = 1110 1011
REG = 1101 0111

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 749


PIC18(L)F25/26K83

SLEEP Enter Sleep mode SUBFSR Subtract Literal from FSR


Syntax: SLEEP Syntax: SUBFSR f, k
Operands: None Operands: 0  k  63
f  [ 0, 1, 2 ]
Operation: 00h  WDT,
0  WDT postscaler, Operation: FSR(f) – k  FSRf
1  TO, Status Affected: None
0  PD Encoding: 1110 1001 ffkk kkkk
Status Affected: TO, PD Description: The 6-bit literal ‘k’ is subtracted from
the contents of the FSR specified by
Encoding: 0000 0000 0000 0011
‘f’.
Description: The Power-down Status bit (PD) is Words: 1
cleared. The Time-out Status bit (TO)
Cycles: 1
is set. Watchdog Timer and its
postscaler are cleared. Q Cycle Activity:
The processor is put into Sleep mode Q1 Q2 Q3 Q4
with the oscillator stopped. Decode Read Process Write to
Words: 1 register ‘f’ Data destination

Cycles: 1
Q Cycle Activity:
Example: SUBFSR 2, 23h
Q1 Q2 Q3 Q4
Before Instruction
Decode No Process Go to
operation Data Sleep FSR2 = 03FFh
After Instruction
FSR2 = 03DCh
Example: SLEEP
Before Instruction
TO = ?
PD = ?
After Instruction
TO = 1†
PD = 0

† If WDT causes wake-up, this bit is cleared.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 750


PIC18(L)F25/26K83

SUBFWB Subtract f from W with borrow SUBLW Subtract W from literal


Syntax: SUBFWB f {,d {,a}} Syntax: SUBLW k
Operands: 0 f 255 Operands: 0 k 255
d  [0,1]
Operation: k – (W) W
a  [0,1]
Status Affected: N, OV, C, DC, Z
Operation: (W) – (f) – (C) dest
Encoding: 0000 1000 kkkk kkkk
Status Affected: N, OV, C, DC, Z
Description W is subtracted from the 8-bit
Encoding: 0101 01da ffff ffff
literal ‘k’. The result is placed in W.
Description: Subtract register ‘f’ and CARRY flag
Words: 1
(borrow) from W (2’s complement
method). If ‘d’ is ‘0’, the result is stored Cycles: 1
in W. If ‘d’ is ‘1’, the result is stored in Q Cycle Activity:
register ‘f’ (default).
Q1 Q2 Q3 Q4
If ‘a’ is ‘0’, the Access Bank is
selected. If ‘a’ is ‘1’, the BSR is used Decode Read Process Write to W
to select the GPR bank. literal ‘k’ Data
If ‘a’ is ‘0’ and the extended instruction
Example 1: SUBLW 02h
set is enabled, this instruction
operates in Indexed Literal Offset Before Instruction
Addressing mode whenever W = 01h
C = ?
f 95 (5Fh). See Section
After Instruction
42.2.3 “Byte-Oriented and Bit-Ori- W = 01h
ented Instructions in Indexed Literal C = 1 ; result is positive
Offset Mode” for details. Z = 0
N = 0
Words: 1
Example 2: SUBLW 02h
Cycles: 1
Before Instruction
Q Cycle Activity: W = 02h
C = ?
Q1 Q2 Q3 Q4
After Instruction
Decode Read Process Write to W = 00h
register ‘f’ Data destination C = 1 ; result is zero
Z = 1
Example 1: SUBFWB REG, 1, 0 N = 0
Before Instruction Example 3: SUBLW 02h
REG = 3
W = 2 Before Instruction
C = 1 W = 03h
After Instruction C = ?
REG = FF After Instruction
W = 2 W = FFh ; (2’s complement)
C = 0 C = 0 ; result is negative
Z = 0 Z = 0
N = 1 ; result is negative N = 1
Example 2: SUBFWB REG, 0, 0
Before Instruction
REG = 2
W = 5
C = 1
After Instruction
REG = 2
W = 3
C = 1
Z = 0
N = 0 ; result is positive
Example 3: SUBFWB REG, 1, 0
Before Instruction
REG = 1
W = 2
C = 0
After Instruction
REG = 0
W = 2
C = 1
Z = 1 ; result is zero
N = 0

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 751


PIC18(L)F25/26K83

SUBWF Subtract W from f SUBWFB Subtract W from f with Borrow


Syntax: SUBWF f {,d {,a}} Syntax: SUBWFB 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) – (W) dest Operation: (f) – (W) – (C) dest


Status Affected: N, OV, C, DC, Z
Status Affected: N, OV, C, DC, Z
Encoding: 0101 10da ffff ffff
Encoding: 0101 11da ffff ffff
Description: Subtract W and the CARRY flag
Description: Subtract W from register ‘f’ (2’s (borrow) from register ‘f’ (2’s comple-
complement method). If ‘d’ is ‘0’, the ment method). If ‘d’ is ‘0’, the result is
result is stored in W. If ‘d’ is ‘1’, the stored in W. If ‘d’ is ‘1’, the result is
result is stored back in register ‘f’ stored back in register ‘f’ (default).
(default). If ‘a’ is ‘0’, the Access Bank is selected.
If ‘a’ is ‘0’, the Access Bank is If ‘a’ is ‘1’, the BSR is used to select the
selected. If ‘a’ is ‘1’, the BSR is used GPR bank.
to select the GPR bank. If ‘a’ is ‘0’ and the extended instruction
If ‘a’ is ‘0’ and the extended instruction set is enabled, this instruction operates
set is enabled, this instruction in Indexed Literal Offset Addressing
operates in Indexed Literal Offset mode whenever f 95 (5Fh). See Sec-
Addressing mode whenever tion 42.2.3 “Byte-Oriented and Bit-
f 95 (5Fh). See Section Oriented Instructions in Indexed Lit-
42.2.3 “Byte-Oriented and Bit-Ori- eral Offset Mode” for details.
ented Instructions in Indexed Literal
Offset Mode” for details. Words: 1
Cycles: 1
Words: 1
Q Cycle Activity:
Cycles: 1
Q1 Q2 Q3 Q4
Q Cycle Activity: Decode Read Process Write to
Q1 Q2 Q3 Q4 register ‘f’ Data destination
Decode Read Process Write to Example 1: SUBWFB REG, 1, 0
register ‘f’ Data destination
Before Instruction
Example 1: SUBWF REG, 1, 0 REG = 19h (0001 1001)
W = 0Dh (0000 1101)
Before Instruction C = 1
REG = 3 After Instruction
W = 2 REG = 0Ch (0000 1100)
C = ? W = 0Dh (0000 1101)
After Instruction C = 1
REG = 1 Z = 0
W = 2 N = 0 ; result is positive
C = 1 ; result is positive
Z = 0 Example 2: SUBWFB REG, 0, 0
N = 0 Before Instruction
Example 2: SUBWF REG, 0, 0 REG = 1Bh (0001 1011)
W = 1Ah (0001 1010)
Before Instruction C = 0
REG = 2 After Instruction
W = 2 REG = 1Bh (0001 1011)
C = ? W = 00h
After Instruction C = 1
REG = 2 Z = 1 ; result is zero
W = 0 N = 0
C = 1 ; result is zero
Z = 1 Example 3: SUBWFB REG, 1, 0
N = 0 Before Instruction
Example 3: SUBWF REG, 1, 0 REG = 03h (0000 0011)
W = 0Eh (0000 1110)
Before Instruction C = 1
REG = 1 After Instruction
W = 2 REG = F5h (1111 0101)
C = ? ; [2’s comp]
After Instruction W = 0Eh (0000 1110)
REG = FFh ;(2’s complement) C = 0
W = 2 Z = 0
C = 0 ; result is negative N = 1 ; result is negative
Z = 0
N = 1

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 752


PIC18(L)F25/26K83

SWAPF Swap f
Syntax: 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 register
‘f’ are exchanged. If ‘d’ is ‘0’, the result
is placed in W. If ‘d’ is ‘1’, the result is
placed in register ‘f’ (default).
If ‘a’ is ‘0’, the Access Bank is selected.
If ‘a’ is ‘1’, the BSR is used to select the
GPR bank.
If ‘a’ is ‘0’ and the extended instruction
set is enabled, this instruction operates
in Indexed Literal Offset Addressing
mode whenever f 95 (5Fh). See Sec-
tion 42.2.3 “Byte-Oriented and Bit-
Oriented Instructions in Indexed Lit-
eral Offset Mode” for details.
Words: 1
Cycles: 1
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read Process Write to
register ‘f’ Data destination

Example: SWAPF REG, 1, 0


Before Instruction
REG = 53h
After Instruction
REG = 35h

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 753


PIC18(L)F25/26K83

TBLRD Table Read TBLRD Table Read (Continued)


Syntax: TBLRD ( *; *+; *-; +*) Example1: TBLRD *+ ;
Operands: None Before Instruction
TABLAT = 55h
Operation: if TBLRD *, TBLPTR = 00A356h
(Prog Mem (TBLPTR))  TABLAT; MEMORY (00A356h) = 34h
TBLPTR – No Change; After Instruction
if TBLRD *+, TABLAT = 34h
(Prog Mem (TBLPTR))  TABLAT; TBLPTR = 00A357h
(TBLPTR) + 1  TBLPTR;
Example2: TBLRD +* ;
if TBLRD *-,
(Prog Mem (TBLPTR))  TABLAT; Before Instruction
(TBLPTR) – 1  TBLPTR; TABLAT = AAh
TBLPTR = 01A357h
if TBLRD +*, MEMORY (01A357h) = 12h
(TBLPTR) + 1  TBLPTR; MEMORY (01A358h) = 34h
(Prog Mem (TBLPTR))  TABLAT; After Instruction
Status Affected: None TABLAT = 34h
TBLPTR = 01A358h
Encoding: 0000 0000 0000 10nn
nn=0 *
=1 *+
=2 *-
=3 +*
Description: This instruction is used to read the contents
of Program Memory (P.M.). To address the
program memory, a pointer called Table
Pointer (TBLPTR) is used.
The TBLPTR (a 21-bit pointer) points to
each byte in the program memory. TBLPTR
has a 2-Mbyte address range.
TBLPTR[0] = 0: Least Significant Byte
of Program Memory
Word
TBLPTR[0] = 1: Most Significant Byte
of Program Memory
Word
The TBLRD instruction can modify the value
of TBLPTR as follows:
• no change
• post-increment
• post-decrement
• pre-increment
Words: 1
Cycles: 2
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode No No No
operation operation operation
No No operation No No operation
operation (Read Program operation (Write TABLAT)
Memory)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 754


PIC18(L)F25/26K83

TBLWT Table Write TBLWT Table Write (Continued)


Syntax: TBLWT ( *; *+; *-; +*) Example1: TBLWT *+;
Operands: None Before Instruction
Operation: if TBLWT*, TABLAT = 55h
(TABLAT)  Holding Register; TBLPTR = 00A356h
TBLPTR – No Change; HOLDING REGISTER
(00A356h) = FFh
if TBLWT*+,
After Instructions (table write completion)
(TABLAT)  Holding Register;
TABLAT = 55h
(TBLPTR) + 1  TBLPTR; TBLPTR = 00A357h
if TBLWT*-, HOLDING REGISTER
(TABLAT)  Holding Register; (00A356h) = 55h
(TBLPTR) – 1  TBLPTR; Example 2: TBLWT +*;
if TBLWT+*,
(TBLPTR) + 1  TBLPTR; Before Instruction
(TABLAT)  Holding Register; TABLAT = 34h
TBLPTR = 01389Ah
Status Affected: None HOLDING REGISTER
(01389Ah) = FFh
Encoding: 0000 0000 0000 11nn
HOLDING REGISTER
nn=0 * (01389Bh) = FFh
=1 *+ After Instruction (table write completion)
=2 *- TABLAT = 34h
=3 +* TBLPTR = 01389Bh
HOLDING REGISTER
Description: This instruction uses the three LSBs of (01389Ah) = FFh
TBLPTR to determine which of the eight HOLDING REGISTER
holding registers the TABLAT is written to. (01389Bh) = 34h
The holding registers are used to program
the contents of Program Memory (P.M.).
(Refer to Section 13.1 “Program Flash
Memory” for additional details on pro-
gramming Flash memory.)
The TBLPTR (a 21-bit pointer) points to
each byte in the program memory.
TBLPTR has a 2-MByte address range.
The LSb of the TBLPTR selects which
byte of the program memory location to
access.
TBLPTR[0] = 0: Least Significant
Byte of Program
Memory Word
TBLPTR[0] = 1: Most Significant
Byte of Program
Memory Word
The TBLWT instruction can modify the
value of TBLPTR as follows:
• no change
• post-increment
• post-decrement
• pre-increment
Words: 1
Cycles: 2
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode No No No
operation operation operation
No No No No
operation operation operation operation
(Read (Write to
TABLAT) Holding
Register)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 755


PIC18(L)F25/26K83

TSTFSZ Test f, skip if 0 XORLW Exclusive OR literal with W


Syntax: TSTFSZ f {,a} Syntax: XORLW k
Operands: 0  f  255 Operands: 0 k 255
a  [0,1]
Operation: (W) .XOR. k W
Operation: skip if f = 0 Status Affected: N, Z
Status Affected: None Encoding: 0000 1010 kkkk kkkk
Encoding: 0110 011a ffff ffff
Description: The contents of W are XORed with
Description: If ‘f’ = 0, the next instruction fetched the 8-bit literal ‘k’. The result is placed
during the current instruction execution in W.
is discarded and a NOP is executed, Words: 1
making this a 2-cycle instruction.
If ‘a’ is ‘0’, the Access Bank is selected. Cycles: 1
If ‘a’ is ‘1’, the BSR is used to select the Q Cycle Activity:
GPR bank.
Q1 Q2 Q3 Q4
If ‘a’ is ‘0’ and the extended instruction
set is enabled, this instruction operates Decode Read Process Write to W
in Indexed Literal Offset Addressing literal ‘k’ Data
mode whenever f 95 (5Fh). See Sec-
tion 42.2.3 “Byte-Oriented and Bit- Example: XORLW 0AFh
Oriented Instructions in Indexed Lit-
eral Offset Mode” for details. Before Instruction
W = B5h
Words: 1
After Instruction
Cycles: 1(2)
W = 1Ah
Note: 3 cycles if skip and followed
by a 2-word instruction.
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read Process No
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

Example: HERE TSTFSZ CNT, 1


NZERO :
ZERO :
Before Instruction
PC = Address (HERE)
After Instruction
If CNT = 00h,
PC = Address (ZERO)
If CNT  00h,
PC = Address (NZERO)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 756


PIC18(L)F25/26K83

XORWF Exclusive OR W with f


Syntax: XORWF f {,d {,a}}
Operands: 0  f  255
d  [0,1]
a  [0,1]
Operation: (W) .XOR. (f) dest
Status Affected: N, Z
Encoding: 0001 10da ffff ffff
Description: Exclusive OR the contents of W with
register ‘f’. If ‘d’ is ‘0’, the result is stored
in W. If ‘d’ is ‘1’, the result is stored back
in the register ‘f’ (default).
If ‘a’ is ‘0’, the Access Bank is selected.
If ‘a’ is ‘1’, the BSR is used to select the
GPR bank.
If ‘a’ is ‘0’ and the extended instruction
set is enabled, this instruction operates
in Indexed Literal Offset Addressing
mode whenever f 95 (5Fh). See Sec-
tion 42.2.3 “Byte-Oriented and Bit-
Oriented Instructions in Indexed Lit-
eral Offset Mode” for details.
Words: 1
Cycles: 1
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read Process Write to
register ‘f’ Data destination

Example: XORWF REG, 1, 0


Before Instruction
REG = AFh
W = B5h
After Instruction
REG = 1Ah
W = B5h

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 757


PIC18(L)F25/26K83
42.2 Extended Instruction Set A summary of the instructions in the extended instruc-
tion set is provided in Table 42-3. Detailed descriptions
In addition to the standard 75 instructions of the PIC18 are provided in Section 42.2.2 “Extended Instruction
instruction set, PIC18(L)F25/26K83 devices also Set”. The opcode field descriptions in Table 42-1 apply
provide an optional extension to the core CPU to both the standard and extended PIC18 instruction
functionality. The added features include eight sets.
additional instructions that augment indirect and
indexed addressing operations and the implementation Note: The instruction set extension and the
of Indexed Literal Offset Addressing mode for many of Indexed Literal Offset Addressing mode
the standard PIC18 instructions. were designed for optimizing applications
written in C; the user may likely never use
The additional features of the extended instruction set
these instructions directly in assembler.
are disabled by default. To enable them, users must set
The syntax for these commands is pro-
the XINST Configuration bit.
vided as a reference for users who may be
The instructions in the extended set can all be reviewing code that has been generated
classified as literal operations, which either manipulate by a compiler.
the File Select Registers, or use them for indexed
addressing. Two of the instructions, ADDFSR and 42.2.1 EXTENDED INSTRUCTION SYNTAX
SUBFSR, each have an additional special instantiation
Most of the extended instructions use indexed
for using FSR2. These versions (ADDULNK and
arguments, using one of the File Select Registers and
SUBULNK) allow for automatic return after execution.
some offset to specify a source or destination register.
The extended instructions are specifically implemented When an argument for an instruction serves as part of
to optimize re-entrant program code (that is, code that indexed addressing, it is enclosed in square brackets
is recursive or that uses a software stack) written in (“[ ]”). This is done to indicate that the argument is used
high-level languages, particularly C. Among other as an index or offset. MPASM™ Assembler will flag an
things, they allow users working in high-level error if it determines that an index or offset value is not
languages to perform certain operations on data bracketed.
structures more efficiently. These include:
When the extended instruction set is enabled, brackets
• dynamic allocation and deallocation of software are also used to indicate index arguments in byte-
stack space when entering and leaving oriented and bit-oriented instructions. This is in addition
subroutines to other changes in their syntax. For more details, see
• function pointer invocation Section 42.2.3.1 “Extended Instruction Syntax with
• software Stack Pointer manipulation Standard PIC18 Commands”.
• manipulation of variables located in a software Note: In the past, square brackets have been
stack used to denote optional arguments in the
PIC18 and earlier instruction sets. In this
text and going forward, optional
arguments are denoted by braces (“{ }”).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 758


PIC18(L)F25/26K83
TABLE 42-3: EXTENSIONS TO THE PIC18 INSTRUCTION SET

Mnemonic, 16-Bit Instruction Word Status


Description Cycles
Operands MSb LSb Affected

ADDULNK k Add FSR2 with (k) & return 2 1110 1000 11kk kkkk None
MOVSF zs, fd Move zs (source) to 1st word 2 1110 1011 0zzz zzzz None
fd (destination) 2nd word 2 1111 ffff ffff ffff
MOVSFL zs, fd Opcode 1st word 0000 0000 0000 0010 None
Move zs (source) to 2nd word 3 1111 xxxz zzzz zzff
fd (full destination) 3rd word 1111 ffff ffff ffff
MOVSS zs, zd Move zs (source) to 1st word 1110 1011 1zzz zzzz None
zd (destination) 2nd word 2 1111 xxxx xzzz zzzz
PUSHL k Push literal to POSTDEC2 1 1110 1010 kkkk kkkk None
SUBULNK k Subtract (k) from FSR2 & return 2 1110 1001 11kk kkkk None
Note 1: If Program Counter (PC) is modified or a conditional test is true, the instruction requires an additional cycle. The extra
cycle is executed as a NOP.
2: Some instructions are multi word instructions. The second/third words of these instructions will be decoded 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.
3: Only available when extended instruction set is enabled.
4: fs and fd do not cover the full memory range. Two MSBs of bank selection are forced to ‘b00 to limit the range of these
instructions to lower 4k addressing space.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 759


PIC18(L)F25/26K83
42.2.2 EXTENDED INSTRUCTION SET

ADDULNK Add Literal to FSR2 and Return


Syntax: ADDULNK k
Operands: 0  k  63
Operation: FSR2 + k  FSR2,
(TOS) PC
Status Affected: None
Encoding: 1110 1000 11kk kkkk
Description: The 6-bit literal ‘k’ is added to the
contents of FSR2. A RETURN is then
executed by loading the PC with the
TOS.
The instruction takes two cycles to
execute; a NOP is performed during
the second cycle.
This may be thought of as a special
case of the ADDFSR instruction,
where f = 3 (binary ‘11’); it operates
only on FSR2.
Words: 1
Cycles: 2

Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read Process Write to
literal ‘k’ Data FSR
No No No No
Operation Operation Operation Operation

Example: ADDULNK 23h


Before Instruction
FSR2 = 03FFh
PC = 0100h
After Instruction
FSR2 = 0422h
PC = (TOS)

Note: All PIC18 instructions may take an optional label argument preceding the instruction mnemonic for use in
symbolic addressing. If a label is used, the instruction syntax then becomes: {label} instruction argument(s).

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 760


PIC18(L)F25/26K83

MOVSF Move Indexed to f


Syntax: MOVSF [zs], fd MOVSFL Move Indexed to f (Long Range)
Operands: 0  zs  127 Syntax: MOVSFL [zs], fd
0  fd  4095 Operands: 0  zs  127
Operation: ((FSR2) + zs)  fd 0  fd  16383
Status Affected: None Operation: ((FSR2) + zs)  fd
Encoding: Status Affected: None
1st word (source) 1110 1011 0zzz zzzzs Encoding:
2nd word (destin.) 1111 ffff ffff ffffd 1st word (opcode) 0000 0000 0110 0010
Description: The contents of the source register are 2nd word (source) 1111 xxxz zzzz zzsff
moved to destination register ‘fd’. The 3rd word (full destin.) 1111 ffff ffff ffffd
actual address of the source register is Description: The contents of the source register are
determined by adding the 7-bit literal moved to destination register ‘fd’. The
offset ‘zs’ in the first word to the value of actual address of the source register is
FSR2. The address of the destination determined by adding the 7-bit literal
register is specified by the 12-bit literal offset ‘zs’ in the first word to the value of
‘fd’ in the second word. Both addresses FSR2 (14 bits). The address of the
can be anywhere in the 4096-byte data destination register is specified by the
space (000h to FFFh). 14-bit literal ‘fd’ in the second word.
MOVSF has curtailed the destination Both addresses can be anywhere in the
range to the lower 4 Kbyte space in 16 Kbyte data space (0000h to 3FFFh).
memory (Banks 1 through 15). For The MOVSFL instruction cannot use the
everything else, use MOVSFL. PCL, TOSU, TOSH or TOSL as the
Words: 2 destination register. If the resultant
source address points to an indirect
Cycles: 2
addressing register, the value returned
Q Cycle Activity: will be 00h.
Q1 Q2 Q3 Q4 Words: 3
Decode Determine Determine Read
Cycles: 3
source addr source addr source reg
Q Cycle Activity:
Decode No No Write
operation operation register ‘f’ Q1 Q2 Q3 Q4
No dummy (dest)
Decode No No No
read opera- operation operation
tion
Decode Read Process No
Example: MOVSF [05h], REG2 register data operation
Before Instruction “z” (src.)
FSR2 = 80h Decode No No Write
Contents opera- operation register
of 85h = 33h
REG2 = 11h tion “f” (dest.)
After Instruction No
FSR2 = 80h dummy
Contents read
of 85h = 33h
REG2 = 33h

Example: MOVSFL [05h], REG2


Before Instruction
FSR2 = 80h
Contents of 85h = 33h
REG2 = 11h
After Instruction
FSR2 = 80h
Contents of 85h = 33h

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 761


PIC18(L)F25/26K83

MOVSS Move Indexed to Indexed PUSHL Store Literal at FSR2, Decrement FSR2
Syntax: MOVSS [zs], [zd] Syntax: PUSHL k
Operands: 0  zs  127 Operands: 0k  255
0  zd  127
Operation: k  (FSR2),
Operation: ((FSR2) + zs)  ((FSR2) + zd) FSR2 – 1  FSR2
Status Affected: None
Status Affected: None
Encoding:
Encoding: 1111 1010 kkkk kkkk
1st word (source) 1110 1011 1zzz zzzzs
2nd word (dest.) 1111 xxxx xzzz zzzzd Description: The 8-bit literal ‘k’ is written to the data
memory address specified by FSR2. FSR2
Description The contents of the source register are
moved to the destination register. The is decremented by 1 after the operation.
addresses of the source and destination This instruction allows users to push values
onto a software stack.
registers are determined by adding the
7-bit literal offsets ‘zs’ or ‘zd’, Words: 1
respectively, to the value of FSR2. Both
Cycles: 1
registers can be located anywhere in
the 4096-byte data memory space Q Cycle Activity:
(000h to FFFh). Q1 Q2 Q3 Q4
The MOVSS instruction cannot use the Decode Read ‘k’ Process Write to
PCL, TOSU, TOSH or TOSL as the data destination
destination register.
If the resultant source address points to
an indirect addressing register, the Example: PUSHL 08h
value returned will be 00h. If the
resultant destination address points to Before Instruction
an indirect addressing register, the FSR2H:FSR2L = 01ECh
Memory (01ECh) = 00h
instruction will execute as a NOP.
Words: 2 After Instruction
Cycles: 2 FSR2H:FSR2L = 01EBh
Memory (01ECh) = 08h
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Determine Determine Read
source addr source addr source reg
Decode Determine Determine Write
dest addr dest addr to dest reg

Example: MOVSS [05h], [06h]


Before Instruction
FSR2 = 80h
Contents
of 85h = 33h
Contents
of 86h = 11h
After Instruction
FSR2 = 80h
Contents
of 85h = 33h
Contents
of 86h = 33h

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 762


PIC18(L)F25/26K83

SUBULNK Subtract Literal from FSR2 and Return


Syntax: SUBULNK k
Operands: 0  k  63
Operation: FSR2 – k  FSR2
(TOS) PC
Status Affected: None
Encoding: 1110 1001 11kk kkkk
Description: The 6-bit literal ‘k’ is subtracted from the
contents of the FSR2. A RETURN is then
executed by loading the PC with the TOS.
The instruction takes two cycles to
execute; a NOP is performed during the
second cycle.
This may be thought of as a special case of
the SUBFSR instruction, where f = 3 (binary
‘11’); it operates only on FSR2.
Words: 1
Cycles: 2
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read Process Write to
register ‘f’ Data destination
No No No No
Operation Operation Operation Operation

Example: SUBULNK 23h


Before Instruction
FSR2 = 03FFh
PC = 0100h
After Instruction
FSR2 = 03DCh
PC = (TOS)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 763


PIC18(L)F25/26K83
42.2.3 BYTE-ORIENTED AND 42.2.3.1 Extended Instruction Syntax with
BIT-ORIENTED INSTRUCTIONS IN Standard PIC18 Commands
INDEXED LITERAL OFFSET MODE When the extended instruction set is enabled, the file
Note: Enabling the PIC18 instruction set register argument, ‘f’, in the standard byte-oriented and
extension may cause legacy applications bit-oriented commands is replaced with the literal offset
to behave erratically or fail entirely. value, ‘k’. As already noted, this occurs only when ‘f’ is
less than or equal to 5Fh. When an offset value is used,
In addition to eight new commands in the extended set, it must be indicated by square brackets (“[ ]”). As with
enabling the extended instruction set also enables the extended instructions, the use of brackets indicates
Indexed Literal Offset Addressing mode (Section to the compiler that the value is to be interpreted as an
4.8.1 “Indexed Addressing with Literal Offset”). index or an offset. Omitting the brackets, or using a
This has a significant impact on the way that many value greater than 5Fh within brackets, will generate an
commands of the standard PIC18 instruction set are error in the MPASM assembler.
interpreted.
If the index argument is properly bracketed for Indexed
When the extended set is disabled, addresses Literal Offset Addressing, the Access RAM argument is
embedded in opcodes are treated as literal memory never specified; it will automatically be assumed to be
locations: either as a location in the Access Bank (‘a’ = ‘0’. This is in contrast to standard operation (extended
0), or in a GPR bank designated by the BSR (‘a’ = 1). instruction set disabled) when ‘a’ is set on the basis of
When the extended instruction set is enabled and ‘a’ = the target address. Declaring the Access RAM bit in
0, however, a file register argument of 5Fh or less is this mode will also generate an error in the MPASM
interpreted as an offset from the pointer value in FSR2 assembler.
and not as a literal address. For practical purposes, this
The destination argument, ‘d’, functions as before.
means that all instructions that use the Access RAM bit
as an argument – that is, all byte-oriented and bit- In the latest versions of the MPASM™ assembler,
oriented instructions, or almost half of the core PIC18 language support for the extended instruction set must
instructions – may behave differently when the be explicitly invoked. This is done with either the
extended instruction set is enabled. command line option, /y, or the PE directive in the
source listing.
When the content of FSR2 is 00h, the boundaries of the
Access RAM are essentially remapped to their original
42.2.4 CONSIDERATIONS WHEN
values. This may be useful in creating backward
ENABLING THE EXTENDED
compatible code. If this technique is used, it may be
necessary to save the value of FSR2 and restore it INSTRUCTION SET
when moving back and forth between C and assembly It is important to note that the extensions to the instruc-
routines in order to preserve the Stack Pointer. Users tion set may not be beneficial to all users. In particular,
must also keep in mind the syntax requirements of the users who are not writing code that uses a software
extended instruction set (see Section stack may not benefit from using the extensions to the
42.2.3.1 “Extended Instruction Syntax with instruction set.
Standard PIC18 Commands”). Additionally, the Indexed Literal Offset Addressing
Although the Indexed Literal Offset Addressing mode mode may create issues with legacy applications
can be very useful for dynamic stack and pointer written to the PIC18 assembler. This is because
manipulation, it can also be very annoying if a simple instructions in the legacy code may attempt to address
arithmetic operation is carried out on the wrong registers in the Access Bank below 5Fh. Since these
register. Users who are accustomed to the PIC18 addresses are interpreted as literal offsets to FSR2
programming must keep in mind that, when the when the instruction set extension is enabled, the
extended instruction set is enabled, register addresses application may read or write to the wrong data
of 5Fh or less are used for Indexed Literal Offset addresses.
Addressing. When porting an application to the PIC18(L)F25/
Representative examples of typical byte-oriented and 26K83, it is very important to consider the type of code.
bit-oriented instructions in the Indexed Literal Offset A large, re-entrant application that is written in ‘C’ and
Addressing mode are provided on the following page to would benefit from efficient compilation will do well
show how execution is affected. The operand condi- when using the instruction set extensions. Legacy
tions shown in the examples are applicable to all applications that heavily use the Access Bank will most
instructions of these types. likely not benefit from using the extended instruction
set.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 764


PIC18(L)F25/26K83

ADD W to Indexed Bit Set Indexed


ADDWF BSF
(Indexed Literal Offset mode) (Indexed Literal Offset mode)
Syntax: ADDWF [k] {,d} Syntax: BSF [k], b
Operands: 0  k  95 Operands: 0  f  95
d  [0,1] 0b7
Operation: (W) + ((FSR2) + k)  dest Operation: 1  ((FSR2) + k)<b>
Status Affected: N, OV, C, DC, Z Status Affected: None
Encoding: 0010 01d0 kkkk kkkk Encoding: 1000 bbb0 kkkk kkkk
Description: The contents of W are added to the Description: Bit ‘b’ of the register indicated by FSR2,
contents of the register indicated by offset by the value ‘k’, is set.
FSR2, offset by the value ‘k’.
Words: 1
If ‘d’ is ‘0’, the result is stored in W. If ‘d’
is ‘1’, the result is stored back in Cycles: 1
register ‘f’ (default). Q Cycle Activity:
Words: 1 Q1 Q2 Q3 Q4
Cycles: 1 Decode Read Process Write to
Q Cycle Activity: register ‘f’ Data destination
Q1 Q2 Q3 Q4
Example: BSF [FLAG_OFST], 7
Decode Read ‘k’ Process Write to
Before Instruction
Data destination
FLAG_OFST = 0Ah
FSR2 = 0A00h
Example: ADDWF [OFST] , 0 Contents
of 0A0Ah = 55h
Before Instruction
After Instruction
W = 17h Contents
OFST = 2Ch of 0A0Ah = D5h
FSR2 = 0A00h
Contents
of 0A2Ch = 20h
After Instruction
W = 37h
Contents
Set Indexed
SETF
of 0A2Ch = 20h (Indexed Literal Offset mode)
Syntax: SETF [k]
Operands: 0  k  95
Operation: FFh  ((FSR2) + k)
Status Affected: None
Encoding: 0110 1000 kkkk kkkk
Description: The contents of the register indicated
by FSR2, offset by ‘k’, are set to FFh.
Words: 1
Cycles: 1
Q Cycle Activity:
Q1 Q2 Q3 Q4
Decode Read ‘k’ Process Write
Data register

Example: SETF [OFST]


Before Instruction
OFST = 2Ch
FSR2 = 0A00h
Contents
of 0A2Ch = 00h
After Instruction
Contents
of 0A2Ch = FFh

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 765


PIC18(L)F25/26K83
42.2.5 SPECIAL CONSIDERATIONS WITH
MICROCHIP MPLAB® IDE TOOLS
The latest versions of Microchip’s software tools have
been designed to fully support the extended instruction
set of the PIC18(L)F25/26K83 family of devices. This
includes the MPLAB C18 C compiler, MPASM
assembly language and MPLAB Integrated
Development Environment (IDE).
When selecting a target device for software
development, MPLAB IDE will automatically set default
Configuration bits for that device. The default setting for
the XINST Configuration bit is ‘0’, disabling the
extended instruction set and Indexed Literal Offset
Addressing mode. For proper execution of applications
developed to take advantage of the extended
instruction set, XINST must be set during
programming.
To develop software for the extended instruction set,
the user must enable support for the instructions and
the Indexed Addressing mode in their language tool(s).
Depending on the environment being used, this may be
done in several ways:
• A menu option, or dialog box within the
environment, that allows the user to configure the
language tool and its settings for the project
• A command line option
• A directive in the source code
These options vary between different compilers,
assemblers and development environments. Users are
encouraged to review the documentation accompanying
their development systems for the appropriate
information.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 766


PIC18(L)F25/26K83
43.0 REGISTER SUMMARY
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3FFFh TOSU — — — Top-of-Stack Upper byte 28


3FFEh TOSH Top-of-Stack High byte 28
3FFDh TOSL Top-of-Stack Low byte 28
3FFCh STKPTR — — — Stack Pointer 29
3FFBh PCLATU — — — Holding Register for PC Upper byte 29
3FFAh PCLATH Holding Register for PC High byte 29
3FF9h PCL PC Low byte 29
3FF8h TBLPTRU — — Program Memory Table Pointer Upper byte 29
3FF7h TBLPTRH Program Memory Table Pointer High byte 182
3FF6h TBLPTRL Program Memory Table Pointer Low byte 182
3FF5h TABLAT Table Latch 182
3FF4h PRODH Product Register High byte 177
3FF3h PRODL Product Register Low byte 177
3FF2h — Unimplemented —
3FF1h PCON1 — — — — — — MEMV — 81
3FF0h PCON0 STKOVF STKUNF WDTWV RWDT RMCLR RI POR BOR 80
3FEFh INDF0 Uses contents of FSR0 to address data memory – value of FSR0 not changed 50
3FEEh POSTINC0 Uses contents of FSR0 to address data memory – value of FSR0 post-incremented 51
3FEDh POSTDEC0 Uses contents of FSR0 to address data memory – value of FSR0 post-decremented 51
3FECh PREINC0 Uses contents of FSR0 to address data memory – value of FSR0 pre-incremented 51
3FEBh PLUSW0 Uses contents of FSR0 to address data memory – value of FSR0 pre-incremented – value of FSR0 offset by W 51
3FEAh FSR0H — — Indirect Data Memory Address Pointer 0 High 51
3FE9h FSR0L Indirect Data Memory Address Pointer 0 Low 51
3FE8h WREG Working Register —
3FE7h INDF1 Uses contents of FSR1 to address data memory – value of FSR1 not changed 51
3FE6h POSTINC1 Uses contents of FSR1 to address data memory – value of FSR1 post-incremented 51
3FE5h POSTDEC1 Uses contents of FSR1 to address data memory – value of FSR1 post-decremented 51
3FE4h PREINC1 Uses contents of FSR1 to address data memory – value of FSR1 pre-incremented 51
3FE3h PLUSW1 Uses contents of FSR1 to address data memory – value of FSR1 pre-incremented – value of FSR1 offset by W 51
3FE2h FSR1H — — Indirect Data Memory Address Pointer 1 High 51
3FE1h FSR1L Indirect Data Memory Address Pointer 1 Low 51
3FE0h BSR — — Bank Select Register 34
3FDFh INDF2 Uses contents of FSR2 to address data memory – value of FSR2 not changed 51
3FDEh POSTINC2 Uses contents of FSR2 to address data memory – value of FSR2 post-incremented 51
3FDDh POSTDEC2 Uses contents of FSR2 to address data memory – value of FSR2 post-decremented 51
3FDCh PREINC2 Uses contents of FSR2 to address data memory – value of FSR2 pre-incremented 51
3FDBh PLUSW2 Uses contents of FSR2 to address data memory – value of FSR2 pre-incremented – value of FSR2 offset by W 51
3FDAh FSR2H — — Indirect Data Memory Address Pointer 2 High 51
3FD9h FSR2L Indirect Data Memory Address Pointer 2 Low 51
3FD8h STATUS — TO PD N OV Z DC C 48
3FD7h IVTBASEU — — — BASE20 BASE19 BASE18 BASE17 BASE16 157
3FD6h IVTBASEH BASE15 BASE14 BASE13 BASE12 BASE11 BASE10 BASE9 BASE8 157
3FD5h IVTBASEL BASE7 BASE6 BASE5 BASE4 BASE3 BASE2 BASE1 BASE0 157
3FD4h IVTLOCK — — — — — — — IVTLOCKED 159
3FD3h INTCON1 STAT — — — — — — 126
3FD2h INTCON0 GIE GIEL IPEN — — INT2EDG INT1EDG INT0EDG 125
3FD1h -
— Unimplemented —
3FD0h
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 767


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3FCEh PORTE — — — — RE3 — — — 252


3FCDh — Unimplemented —
3FCCh PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 252
3FCBh PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 252
3FCAh PORTA RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0 252
3FC9h -
— Unimplemented —
3FC5h
3FC4h TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 253
3FC3h TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 253
3FC2h TRISA TRISA7 TRISA6 TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 253
3FC1h -
— Unimplemented —
3FBDh
3FBCh LATC LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0 254
3FBBh LATB LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0 254
3FBAh LATA LATA7 LATA6 LATA5 LATA4 LATA3 LATA2 LATA1 LATA0 254
3FB9h T0CON1 CS<2:0> ASYNC CKPS<3:0> 287
3FB8h T0CON0 EN — OUT MD16 OUTPS 286
3FB7h TMR0H TMR0H 288
3FB6h TMR0L TMR0L 288
3FB5h T1CLK CS 300
3FB4h T1GATE GSS 301
3FB3h T1GCON GE GPOL GTM GSPM GGO GVAL — — 299
3FB2h T1CON — — CKPS<1:0> — SYNC RD16 ON 323
3FB1h TMR1H TMR1H 302
3FB0h TMR1L TMR1L 302
3FAFh T2RST — — — RSEL 321
3FAEh T2CLK — — — — CS 300
3FADh T2HLT PSYNC CKPOL CKSYNC MODE 324
3FACh T2CON ON CKPS OUTPS 298
3FABh T2PR PR2 322
3FAAh T2TMR TMR2 322
3FA9h T3CLK CS 300
3FA8h T3GATE GSS 301
3FA7h T3GCON GE GPOL GTM GSPM GGO GVAL — — 299
3FA6h T3CON — — CKPS — NOT_SYNC RD16 ON 323
3FA5h TMR3H TMR3H 302
3FA4h TMR3L TMR3L 302
3FA3h T4RST — — — RSEL 321
3FA2h T4CLK — — — — CS 320
3FA1h T4HLT PSYNC CKPOL CKSYNC MODE 324
3FA0h T4CON ON CKPS OUTPS 323
3F9Fh T4PR PR4 322
3F9Eh T4TMR TMR4 322
3F9Dh T5CLK CS 320
3F9Ch T5GATE GSS 301
3F9Bh T5GCON GE GPOL GTM GSPM GGO GVAL — — 299
3F9Ah T5CON — — CKPS — NOT_SYNC RD16 ON 323
3F99h TMR5H TMR5H 302
3F98h TMR5L TMR5L 302
3F97h T6RST — — — RSEL 321
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 768


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3F96h T6CLK — — — — CS 300


3F95h T6HLT PSYNC CKPOL CKSYNC MODE 324
3F94h T6CON ON CKPS OUTPS 323
3F93h T6PR PR6 322
3F92h T6TMR TMR6 322
3F91h ECANCON MDSEL1 MDSEL0 FIFOWM EWIN4 EWIN3 EWIN2 EWIN1 EWIN0 607
3F90h COMSTAT RXB0OVFL RXB1OVFL TXBO TXBP RXBP TXWARN RXWARN EWARN 608
3F90h COMSTAT — RXBnOVFL TXBO TXBP RXBP TXWARN RXWARN EWARN 608
3F90h COMSTAT FIFOEMPTY RXBnOVFL TXBO TXBP RXBP TXWARN RXWARN EWARN 608
3F8Fh CANCON REQOP2 REQOP1 REQOP0 ABAT WIN2 WIN1 WIN0 — 603
3F8Fh CANCON REQOP2 REQOP1 REQOP0 ABAT — — — — 603
3F8Fh CANCON REQOP2 REQOP1 REQOP0 ABAT FP3 FP2 FP1 FP0 603
3F8Eh CANSTAT OPMODE2 OPMODE1 OPMODE0 — ICODE2 ICODE1 ICODE0 — 604
3F8Eh CANSTAT OPMODE2 OPMODE1 OPMODE0 EICODE4 EICODE3 EICODE2 EICODE1 EICODE0 604
3F8Dh RXB0D7 RXB0Dm7 RXB0Dm6 RXB0Dm5 RXB0Dm4 RXB0Dm3 RXB0Dm2 RXB0Dm1 RXB0Dm0 620
3F8Ch RXB0D6 RXB0Dm7 RXB0Dm6 RXB0Dm5 RXB0Dm4 RXB0Dm3 RXB0Dm2 RXB0Dm1 RXB0Dm0 620
3F8Bh RXB0D5 RXB0Dm7 RXB0Dm6 RXB0Dm5 RXB0Dm4 RXB0Dm3 RXB0Dm2 RXB0Dm1 RXB0Dm0 620
3F8Ah RXB0D4 RXB0Dm7 RXB0Dm6 RXB0Dm5 RXB0Dm4 RXB0Dm3 RXB0Dm2 RXB0Dm1 RXB0Dm0 620
3F89h RXB0D3 RXB0Dm7 RXB0Dm6 RXB0Dm5 RXB0Dm4 RXB0Dm3 RXB0Dm2 RXB0Dm1 RXB0Dm0 620
3F88h RXB0D2 RXB0Dm7 RXB0Dm6 RXB0Dm5 RXB0Dm4 RXB0Dm3 RXB0Dm2 RXB0Dm1 RXB0Dm0 620
3F87h RXB0D1 RXB0Dm7 RXB0Dm6 RXB0Dm5 RXB0Dm4 RXB0Dm3 RXB0Dm2 RXB0Dm1 RXB0Dm0 620
3F86h RXB0D0 RXB0Dm7 RXB0Dm6 RXB0Dm5 RXB0Dm4 RXB0Dm3 RXB0Dm2 RXB0Dm1 RXB0Dm0 620
3F85h RXB0DLC — RXRTR RB1 RB0 DLC3 DLC2 DLC1 DLC0 620
3F84h RXB0EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 620
3F83h RXB0EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 620
3F82h RXB0SIDL SID2 SID1 SID0 SRR EXID — EID17 EID16 620
3F81h RXB0SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 620
3F80h RXB0CON RXFUL RXM1 RXM0 — RXRTRRO RXB0DBEN JTOFF FILHIT0 620
3F80h RXB0CON RXFUL RXM1 RTRRO FILHITF4 FILHIT3 FILHIT2 FILHIT1 FILHIT0 620
3F7Fh CCP1CAP — — — — CTS<3:0> 338
3F7Eh CCP1CON EN — OUT FMT MODE 335
3F7Dh CCPR1H RH 339
3F7Ch CCPR1L RL 338
3F7Bh CCP2CAP — — — — CTS<3:0> 338
3F7Ah CCP2CON EN — OUT FMT MODE 335
3F79h CCPR2H RH 339
3F78h CCPR2L RL 338
3F77h CCP3CAP — — — — CTS<3:0> 338
3F76h CCP3CON EN — OUT FMT MODE 335
3F75h CCPR3H RH 339
3F74h CCPR3L RL 338
3F73h CCP4CAP — — — — CTS<3:0> 338
3F72h CCP4CON EN — OUT FMT MODE 335
3F71h CCPR4H RH 339
3F70h CCPR4L RL 338
3F6Fh — Unimplemented —
3F6Eh PWM5CON EN — OUT POL — — — — 344
3F6Dh PWM5DCH DC9 DC8 DC7 DC6 DC5 DC4 DC3 DC2 346
3F6Ch PWM5DCL DC1 DC0 — — — — — — 346
3F6Bh — Unimplemented —
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 769


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3F6Ah PWM6CON EN — OUT POL — — — — 344


3F69h PWM6DCH DC9 DC7 DC6 DC5 DC4 DC3 DC2 346
3F68h PWM6DCL DC1 DC0 — — — — — — 346
3F67h — Unimplemented —
3F66h PWM7CON EN — OUT POL — — — — 344
3F65h PWM7DCH DC9 DC8 DC7 DC6 DC5 DC4 DC3 DC2 346
3F64h PWM7DCL DC1 DC0 — — — — — — 346
3F63h — Unimplemented —
3F62h PWM8CON EN — OUT POL — — — — 344
3F61h PWM8DCH DC9 DC8 DC7 DC6 DC5 DC4 DC3 DC2 346
3F60h PWM8DCL DC1 DC0 — — — — — — 346
3F5Fh CCPTMRS1 P8TSEL P7TSEL P6TSEL P5TSEL 345
3F5Eh CCPTMRS0 C4TSEL C3TSEL C2TSEL C1TSEL 345
3F5Dh -
— Unimplemented —
3F5Bh
3F5Ah CWG1STR OVRD OVRC OVRB OVRA STRD STRC STRB STRA 414
3F59h CWG1AS1 — AS6E AS5E AS4E AS3E AS2E AS1E AS0E 416
3F58h CWG1AS0 SHUTDOWN REN LSBD LSAC — — 415
3F57h CWG1CON1 — — IN — POLD POLC POLB POLA 411
3F56h CWG1CON0 EN LD — — — MODE 410
3F55h CWG1DBF — — DBF 417
3F54h CWG1DBR — — DBR 417
3F53h CWG1ISM — — — — IS 413
3F52h CWG1CLK — — — — — — — CS 412
3F51h CWG2STR OVRD OVRC OVRB OVRA STRD STRC STRB STRA 414
3F50h CWG2AS1 — AS6E AS5E AS4E AS3E AS2E AS1E AS0E 416
3F4Fh CWG2AS0 SHUTDOWN REN LSBD LSAC — — 415
3F4Eh CWG2CON1 — — IN — POLD POLC POLB POLA 411
3F4Dh CWG2CON0 EN LD — — — MODE 410
3F4Ch CWG2DBF — — DBF 417
3F4Bh CWG2DBR — — DBR 417
3F4Ah CWG2ISM — — — — IS 413
3F49h CWG2CLK — — — — — — — CS 412
3F48h CWG3STR OVRD OVRC OVRB OVRA STRD STRC STRB STRA 414
3F47h CWG3AS1 — AS6E AS5E AS4E AS3E AS2E AS1E AS0E 416
3F46h CWG3AS0 SHUTDOWN REN LSBD LSAC — — 415
3F45h CWG3CON1 — — IN — POLD POLC POLB POLA 411
3F44h CWG3CON0 EN LD — — — MODE 410
3F43h CWG3DBF — — DBF 417
3F42h CWG3DBR — — DBR 417
3F41h CWG3ISM — — — — IS 413
3F40h CWG3CLK — — — — — — — CS 412
3F3Fh NCO1CLK PWS — CKS 440
3F3Eh NCO1CON EN — OUT POL — — — PFM 439
3F3Dh NCO1INCU INC 443
3F3Ch NCO1INCH INC 442
3F3Bh NCO1INCL INC 442
3F3Ah NCO1ACCU ACC 442
3F39h NCO1ACCH ACC 441
3F38h NCO1ACCL ACC 441
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 770


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3F37h -
— Unimplemented —
3F24h
3F23h SMT1WIN — — — WSEL 384
3F22h SMT1SIG — — — SSEL 385
3F21h SMT1CLK — — — — — CSEL 383
3F20h SMT1STAT CPRUP CPWUP RST — — TS WS AS 382
3F1Fh SMT1CON1 GO REPEAT — — MODE 381
3F1Eh SMT1CON0 EN — STP WPOL SPOL CPOL PS 380
3F1Dh SMT1PRU PR 387
3F1Ch SMT1PRH PR 389
3F1Bh SMT1PRL PR 389
3F1Ah SMT1CPWU CPW 388
3F19h SMT1CPWH CPW 388
3F18h SMT1CPWL CPW 388
3F17h SMT1CPRU CPR 387
3F16h SMT1CPRH CPR 387
3F15h SMT1CPRL CPR 387
3F14h SMT1TMRU TMR 386
3F13h SMT1TMRH TMR 386
3F12h SMT1TMRL TMR 386
3F11h SMT2WIN — — — WSEL 384
3F10h SMT2SIG — — — SSEL 385
3F0Fh SMT2CLK — — — — — CSEL 383
3F0Eh SMT2STAT CPRUP CPWUP RST — — TS WS AS 382
3F0Dh SMT2CON1 GO REPEAT — — MODE 381
3F0Ch SMT2CON0 EN — STP WPOL SPOL CPOL PS 380
3F0Bh SMT2PRU PR 387
3F0Ah SMT2PRH PR 389
3F09h SMT2PRL PR 389
3F08h SMT2CPWU CPW 388
3F07h SMT2CPWH CPW 388
3F06h SMT2CPWL CPW 388
3F05h SMT2CPRU CPR 387
3F04h SMT2CPRH CPR 387
3F03h SMT2CPRL CPR 387
3F02h SMT2TMRU TMR 386
3F01h SMT2TMRH TMR 386
3F00h SMT2TMRL TMR 386
3EFFh ADCLK — — CS 674
3EFEh ADACT — — — ACT 674
3EFDh ADREF NREF PREF 674
3EFCh ADSTAT OV UTHR LTHR MATH — STAT 673
3EFBh ADCON3 — CALC SOI TMD 672
3EFAh ADCON2 PSIS CRS ACLR MODE 671
3EF9h ADCON1 PPOL IPEN GPOL — — — — DSEN 670
3EF8h ADCON0 ON CONT — CS FM — GO 669
3EF7h ADPREH — — — PRE 676
3EF6h ADPREL PRE 676
3EF5h ADCAP — — — ADCAP 678
3EF4h ADACQH — — — ACQ 677
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 771


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3EF3h ADACQL ACQ 677


3EF2h — Unimplemented —
3EF1h ADPCH — — ADPCH 675
3EF0h ADRESH RES 680
3EEFh ADRESL RES 680
3EEEh ADPREVH PREV 682
3EEDh ADPREVL PREV 682
3EECh ADRPT RPT 678
3EEBh ADCNT CNT 679
3EEAh ADACCU ACC 683
3EE9h ADACCH ACC 683
3EE8h ADACCL ACC 683
3EE7h ADFLTRH FLTR 679
3EE6h ADFLTRL FLTR 679
3EE5h ADSTPTH STPT 684
3EE4h ADSTPTL STPT 684
3EE3h ADERRH ERR 685
3EE2h ADERRL ERR 685
3EE1h ADUTHH UTH 686
3EE0h ADUTHL UTH 686
3EDFh ADLTHH LTH 685
3EDEh ADLTHL LTH 686
3EDDh
— Unimplemented —
- 3ED8h
3ED7h ADCP ON — — — — — — CPRDY 688
3ED6h -
— Unimplemented —
3ECBh
3ECAh HLVDCON1 — — — — SEL 710
3EC9h HLVDCON0 EN — OUT RDY — — INTH INTL 709
3EC8h -
— Unimplemented —
3EC4h
3EC3h ZCDCON SEN — OUT POL — — INTP INTN 448
3EC2h — Unimplemented —
3EC1h FVRCON EN RDY TSEN TSRNG CDAFVR ADFVR 648
3EC0h CMOUT — — — — — — C2OUT C1OUT 702
3EBFh CM1PCH — — — — — PCH 702
3EBEh CM1NCH — — — — — NCH 701
3EBDh CM1CON1 — — — — — — INTP INTN 701
3EBCh CM1CON0 EN OUT — POL — — HYS SYNC 700
3EBBh CM2PCH — — — — — PCH 702
3EBAh CM2NCH — — — — — NCH 701
3EB9h CM2CON1 — — — — — — INTP INTN 701
3EB8h CM2CON0 EN OUT — POL — — HYS SYNC 700
3EB7h -
— Unimplemented —
3E9Fh
3E9Eh DAC1CON0 EN — OE1 OE2 PSS — NSS 692
3E9Dh — Unimplemented —
3E9Ch DAC1CON1 — — — DATA 693
3E9Bh -
— Unimplemented
3DFBh
3DFAh U1ERRIE TXMTIE PERIE ABDOVE CERIE FERIE RXBKIE RXFOIE TXCIE 487
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 772


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3DF9h U1ERRIR TXMTIF PERIF ABDOVF CERIF FERIF RXBKIF RXFOIF TXCIF 486
3DF8h U1UIR WUIF ABDIF — — — ABDIE — — 488
3DF7h U1FIFO TXWRE STPMD TXBE TXBF RXIDL XON RXBE RXBF 489
3DF6h U1BRGH BRGH 490
3DF5h U1BRGL BRGL 490
3DF4h U1CON2 RUNOVF RXPOL STP C0EN TXPOL FLO 485
3DF3h U1CON1 ON — — WUE RXBIMD — BRKOVR SENDB 484
3DF2h U1CON0 BRGS ABDEN TXEN RXEN MODE 483
3DF1h U1P3H — — — — — — — P3H 494
3DF0h U1P3L P3L 494
3DEFh U1P2H — — — — — — — P2H 493
3DEEh U1P2L P2L 493
3DEDh U1P1H — — — — — — — P1H 492
3DECh U1P1L P1L 492
3DEBh U1TXCHK TXCHK 495
3DEAh U1TXB TXB 491
3DE9h U1RXCHK RXCHK 495
3DE8h U1RXB RXB 491
3DE7h -
— Unimplemented —
3DE3h
3DE2h U2ERRIE TXMTIE PERIE ABDOVE CERIE FERIE RXBKIE RXFOIE TXCIE 487
3DE1h U2ERRIR TXMTIF PERIF ABDOVF CERIF FERIF RXBKIF RXFOIF TXCIF 486
3DE0h U2UIR WUIF ABDIF — — — ABDIE — — 488
3DDFh U2FIFO TXWRE STPMD TXBE TXBF RXIDL XON RXBE RXBF 489
3DDEh U2BRGH BRGH 490
3DDDh U2BRGL BRGL 490
3DDCh U2CON2 RUNOVF RXPOL STP — TXPOL FLO 485
3DDBh U2CON1 ON — — WUE RXBIMD — BRKOVR SENDB 484
3DDAh U2CON0 BRGS ABDEN TXEN RXEN MODE 483
3DD9h U2P3H — — — — — — — P3H 494
3DD8h U2P3L P3L 494
3DD7h U2P2H — — — — — — — P2H 493
3DD6h U2P2L P2L 493
3DD5h U2P1H — — — — — — — P1H 492
3DD4h U2P1L P1L 492
3DD3h U2TXCHK TXCHK 495
3DD2h U2TXB TXB 491
3DD1h U2RXCHK RXCHK 495
3DD0h U2RXB RXB 491
3DCFh
- — Unimplemented —
3D7Dh
3D7Ch I2C1BTO BTO 567
3D7Bh I2C1CLK CLK 566
3D7Ah I2C1PIE CNTIE ACKTIE — WRIE ADRIE PCIE RSCIE SCIE 573
3D79h I2C1PIR CNTIF ACKTIF — WRIF ADRIF PCIF RSCIF SCIF 572
3D78h I2C1STAT1 TXWE — TXBE — RXRE CLRBF — RXBF 569
3D77h I2C1STAT0 BFRE SMA MMA R D — — — 568
3D76h I2C1ERR — BTOIF BCLIF NACKIF — BTOIE BCLIE NACKIE 570
3D75h I2C1CON2 ACNT GCEN FME ABD SDAHT BFRET 565
3D74h I2C1CON1 ACKCNT ACKDT ACKSTAT ACKT — RXO TXU CSD 564
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 773


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3D73h I2C1CON0 EN RSEN S CSTR MDR MODE 562


3D72h I2C1ADR3 ADR — 577
3D71h I2C1ADR2 ADR 576
3D70h I2C1ADR1 ADR — 575
3D6Fh I2C1ADR0 ADR 574
3D6Eh I2C1ADB1 ADB 579
3D6Dh I2C1ADB0 ADB 578
3D6Ch I2C1CNT CNT 571
3D6Bh I2C1TXB TXB —
3D6Ah I2C1RXB RXB —
3D69h -
— Unimplemented —
3D67h
3D66h I2C2BTO BTO 567
3D65h I2C2CLK CLK 566
3D64h I2C2PIE CNTIE ACKTIE — WRIE ADRIE PCIE RSCIE SCIE 573
3D63h I2C2PIR CNTIF ACKTIF — WRIF ADRIF PCIF RSCIF SCIF 572
3D62h I2C2STAT1 TXWE — TXBE — RXRE CLRBF — RXBF 569
3D61h I2C2STAT0 BFRE SMA MMA R D — — — 568
3D60h I2C2ERR — BTOIF BCLIF NACKIF — BTOIE BCLIE NACKIE 570
3D5Fh I2C2CON2 ACNT GCEN FME ABD SDAHT BFRET 565
3D5Eh I2C2CON1 ACKCNT ACKDT ACKSTAT ACKT — RXO TXU CSD 564
3D5Dh I2C2CON0 EN RSEN S CSTR MDR MODE 562
3D5Ch I2C2ADR3 ADR — 577
3D5Bh I2C2ADR2 ADR 576
3D5Ah I2C2ADR1 ADR — 575
3D59h I2C2ADR0 ADR 574
3D58h I2C2ADB1 ADB 579
3D57h I2C2ADB0 ADB 578
3D56h I2C2CNT CNT 571
3D55h I2C2TXB TXB —
3D54h I2C2RXB RXB —
3D53h -
— Unimplemented —
3D1Dh
3D1Ch SPI1CLK CLKSEL 527
3D1Bh SPI1INTE SRMTIE TCZIE SOSIE EOSIE — RXOIE TXUIE — 521
3D1Ah SPI1INTF SRMTIF TCZIF SOSIF EOSIF — RXOIF TXUIF — 520
3D19h SPI1BAUD BAUD 523
3D18h SPI1TWIDTH — — — — — TWIDTH 522
3D17h SPI1STATUS TXWE — TXBE — RXRE CLRBF — RXBF 526
3D16h SPI1CON2 BUSY SSFLT — — — SSET TXR RXR 525
3D15h SPI1CON1 SMP CKE CKP FST — SSP SDIP SDOP 524
3D14h SPI1CON0 EN — — — — LSBF MST BMODE 523
3D13h SPI1TCNTH — — — — — TCNTH 522
3D12h SPI1TCNTL TCNTL 521
3D11h SPI1TXB TXB 527
3D10h SPI1RXB RXB 526
3D0Fh -
— Unimplemented —
3CFFh
3CFEh MD1CARH — — — CH 457
3CFDh MD1CARL — — — CL 457
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 774


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3CFCh MD1SRC — — — MS 458


3CFBh MD1CON1 — — CHPOL CHSYNC — — CLPOL CLSYNC 456
3CFAh MD1CON0 EN — OUT OPOL — — — BIT 455
3CF9h -
— Unimplemented —
3CE7h
3CE6h CLKRCLK — — — — CLK 104
3CE5h CLKRCON EN — — DC DIV 103
3CE4h -
— Unimplemented —
3C7Fh
3C7Eh CLCDATA0 — — — — CLC4OUT CLC3OUT CLC2OUT CLC1OUT 433
3C7Dh CLC1GLS3 G4D4T G4D4N G4D3T G4D3N G4D2T G4D2N G4D1T G4D1N 432
3C7Ch CLC1GLS2 G3D4T G3D4N G3D3T G3D3N G3D2T G3D2N G3D1T G3D1N 431
3C7Bh CLC1GLS1 G2D4T G2D4N G2D3T G2D3N G2D2T G2D2N G2D1T G2D1N 430
3C7Ah CLC1GLS0 G1D4T G1D4N G1D3T G1D3N G1D2T G1D2N G1D1T G1D1N 429
3C79h CLC1SEL3 D4S 428
3C78h CLC1SEL2 D3S 428
3C77h CLC1SEL1 D2S 428
3C76h CLC1SEL0 D1S 428
3C75h CLC1POL POL — — — G4POL G3POL G2POL G1POL 427
3C74h CLC1CON EN OE OUT INTP INTN MODE 426
3C73h CLC2GLS3 G4D4T G4D4N G4D3T G4D3N G4D2T G4D2N G4D1T G4D1N 432
3C72h CLC2GLS2 G3D4T G3D4N G3D3T G3D3N G3D2T G3D2N G3D1T G3D1N 431
3C71h CLC2GLS1 G2D4T G2D4N G2D3T G2D3N G2D2T G2D2N G2D1T G2D1N 430
3C70h CLC2GLS0 G1D4T G1D4N G1D3T G1D3N G1D2T G1D2N G1D1T G1D1N 429
3C6Fh CLC2SEL3 D4S 428
3C6Eh CLC2SEL2 D3S 428
3C6Dh CLC2SEL1 D2S 428
3C6Ch CLC2SEL0 D1S 428
3C6Bh CLC2POL POL — — — G4POL G3POL G2POL G1POL 427
3C6Ah CLC2CON EN OE OUT INTP INTN MODE 426
3C69h CLC3GLS3 G4D4T G4D4N G4D3T G4D3N G4D2T G4D2N G4D1T G4D1N 432
3C68h CLC3GLS2 G3D4T G3D4N G3D3T G3D3N G3D2T G3D2N G3D1T G3D1N 431
3C67h CLC3GLS1 G2D4T G2D4N G2D3T G2D3N G2D2T G2D2N G2D1T G2D1N 430
3C66h CLC3GLS0 G1D4T G1D4N G1D3T G1D3N G1D2T G1D2N G1D1T G1D1N 429
3C65h CLC3SEL3 D4S 428
3C64h CLC3SEL2 D3S 428
3C63h CLC3SEL1 D2S 428
3C62h CLC3SEL0 D1S 429
3C61h CLC3POL POL — — — G4POL G3POL G2POL G1POL 427
3C60h CLC3CON EN OE OUT INTP INTN MODE 426
3C5Fh CLC4GLS3 G4D4T G4D4N G4D3T G4D3N G4D2T G4D2N G4D1T G4D1N 432
3C5Eh CLC4GLS2 G3D4T G3D4N G3D3T G3D3N G3D2T G3D2N G3D1T G3D1N 431
3C5Dh CLC4GLS1 G2D4T G2D4N G2D3T G2D3N G2D2T G2D2N G2D1T G2D1N 430
3C5Ch CLC4GLS0 G1D4T G1D4N G1D3T G1D3N G1D2T G1D2N G1D1T G1D1N 429
3C5Bh CLC4SEL3 D4S 428
3C5Ah CLC4SEL2 D3S 428
3C59h CLC4SEL1 D2S 428
3C58h CLC4SEL0 D1S 429
3C57h CLC4POL POL — — — G4POL G3POL G2POL G1POL 427
3C56h CLC4CON EN OE OUT INTP INTN MODE 426
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 775


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3C55h -
— Unimplemented —
3C00h
3BFFh DMA1SIRQ SIRQ 246
3BFEh DMA1AIRQ AIRQ 246
3BFDh DMA1CON1 DMODE DSTP SMR SMODE SSTP 239
3BFCh DMA1CON0 EN SIRQEN DGO — — AIRQEN — XIP 238
3BFBh DMA1SSAU — — SSA 241
3BFAh DMA1SSAH SSA 240
3BF9h DMA1SSAL SSA 240
3BF8h DMA1SSZH — — — — SSZ 242
3BF7h DMA1SSZL SSZ 242
3BF6h DMA1SPTRU — — SPTR 242
3BF5h DMA1SPTRH SPTR 241
3BF4h DMA1SPTRL SPTR 241
3BF3h DMA1SCNTH — — — — SCNT 243
3BF2h DMA1SCNTL SCNT 243
3BF1h DMA1DSAH DSA 244
3BF0h DMA1DSAL SSA 243
3BEFh DMA1DSZH — — — — DSZ 245
3BEEh DMA1DSZL DSZ 245
3BEDh DMA1DPTRH DPTR 244
3BECh DMA1DPTRL DPTR 244
3BEBh DMA1DCNTH — — — — DCNT 243
3BEAh DMA1DCNTL DCNT 245
3BE9h DMA1BUF BUF 240
3BE8h -
— Unimplemented —
3BE0h
3BDFh DMA2SIRQ — SIRQ 246
3BDEh DMA2AIRQ — AIRQ 246
3BDDh DMA2CON1 DMODE DSTP SMR SMODE SSTP 239
3BDCh DMA2CON0 EN SIRQEN DGO — — AIRQEN — XIP 238
3BDBh DMA2SSAU — — SSA 241
3BDAh DMA2SSAH SSA 240
3BD9h DMA2SSAL SSA 240
3BD8h DMA2SSZH — — — — SSZ 242
3BD7h DMA2SSZL SSZ 242
3BD6h DMA2SPTRU — — SPTR 242
3BD5h DMA2SPTRH SPTR 241
3BD4h DMA2SPTRL SPTR 241
3BD3h DMA2SCNTH — — — — SCNT 243
3BD2h DMA2SCNTL SCNT 243
3BD1h DMA2DSAH DSA 244
3BD0h DMA2DSAL SSA 243
3BCFh DMA2DSZH — — — — DSZ 245
3BCEh DMA2DSZL DSZ 245
3BCDh DMA2DPTRH DPTR 244
3BCCh DMA2DPTRL DPTR 244
3BCBh DMA2DCNTH — — — — DCNT 243
3BCAh DMA2DCNTL DCNT 245
3BC9h DMA2BUF BUF 240
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 776


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3BC8h -
— Unimplemented —
3AEEh
3AEDh CANRXPPS — — — CANRXPPS 264
3AECh — Unimplemented —
3AEBh U2CTSPPS — — — U2CTSPPS 264
3AEAh U2RXPPS — — — U2RXPPS 264
3AE9h — Unimplemented —
3AE8h U1CTSPPS — — — U1CTSPPS 264
3AE7h U1RXPPS — — — U1RXPPS 264
3AE6h I2C2SDAPPS — — — I2C2SDAPPS 264
3AE5h I2C2SCLPPS — — — I2C2SCLPPS 264
3AE4h I2C1SDAPPS — — — I2C1SDAPPS 264
3AE3h I2C1SCLPPS — — — I2C1SCLPPS 264
3AE2h SPI1SSPPS — — — SPI1SSPPS 264
3AE1h SPI1SDIPPS — — — SPI1SDIPPS 264
3AE0h SPI1SCKPPS — — — SPI1SCKPPS 264
3ADFh ADACTPPS — — — ADACTPPS 264
3ADEh CLCIN3PPS — — — CLCIN3PPS 264
3ADDh CLCIN2PPS — — — CLCIN2PPS 264
3ADCh CLCIN1PPS — — — CLCIN1PPS 264
3ADBh CLCIN0PPS — — — CLCIN0PPS 264
3ADAh MD1SRCPPS — — — MD1SRCPPS 264
3AD9h MD1CARHPPS — — — MD1CARHPPS 264
3AD8h MD1CARLPPS — — — MD1CARLPPS 264
3AD7h CWG3INPPS — — — CWG3INPPS 264
3AD6h CWG2INPPS — — — CWG2INPPS 264
3AD5h CWG1INPPS — — — CWG1INPPS 264
3AD4h SMT2SIGPPS — — — SMT2SIGPPS 264
3AD3h SMT2WINPPS — — — SMT2WINPPS 264
3AD2h SMT1SIGPPS — — — SMT1SIGPPS 264
3AD1h SMT1WINPPS — — — SMT1WINPPS 264
3AD0h CCP4PPS — — — CCP4PPS 264
3ACFh CCP3PPS — — — CCP3PPS 264
3ACEh CCP2PPS — — — CCP2PPS 264
3ACDh CCP1PPS — — — CCP1PPS 264
3ACCh T6INPPS — — — T6INPPS 264
3ACBh T4INPPS — — — T4INPPS 264
3ACAh T2INPPS — — — T2INPPS 264
3AC9h T5GPPS — — — T5GPPS 264
3AC8h T5CLKIPPS — — — T5CLKIPPS 264
3AC7h T3GPPS — — — T3GPPS 264
3AC6h T3CLKIPPS — — — T3CLKIPPS 264
3AC5h T1GPPS — — — T1GPPS 264
3AC4h T1CKIPPS — — — T1CKIPPS 264
3AC3h T0CKIPPS — — — T0CKIPPS 264
3AC2h INT2PPS — — — INT2PPS 264
3AC1h INT1PPS — — — INT1PPS 264
3AC0h INT0PPS — — — INT0PPS 264
3ABFh PPSLOCK — — — — — — — PPSLOCKED 268
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 777


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3ABEh
- — Unimplemented —
3A88h
3A87h IOCEF — — — — IOCEF3 — — — 272
3A86h IOCEN — — — — IOCEN3 — — — 272
3A85h IOCEP — — — — IOCEP3 — — — 272
3A84h INLVLE — — — — INLVLE3 — — — 259
3A83h — Unimplemented —
3A82h — Unimplemented —
3A81h WPUE — — — — WPUE3 — — — 256
3A80h-
— Unimplemented —
3A6Ch
3A6Bh RC4I2C — SLEW PU — — TH 252
3A6Ah RC3I2C — SLEW PU — — TH 252
3A69h — Unimplemented —
3A68h — Unimplemented —
3A67h IOCCF IOCCF7 IOCCF6 IOCCF5 IOCCF4 IOCCF3 IOCCF2 IOCCF1 IOCCF0 272
3A66h IOCCN IOCCN7 IOCCN6 IOCCN5 IOCCN4 IOCCN3 IOCCN2 IOCCN1 IOCCN0 272
3A65h IOCCP IOCCP7 IOCCP6 IOCCP5 IOCCP4 IOCCP3 IOCCP2 IOCCP1 IOCCP0 272
3A64h INLVLC INLVLC7 INLVLC6 INLVLC5 INLVLC4 INLVLC3 INLVLC2 INLVLC1 INLVLC0 259
3A63h SLRCONC SLRC7 SLRC6 SLRC5 SLRC4 SLRC3 SLRC2 SLRC1 SLRC0 258
3A62h ODCONC ODCC7 ODCC6 ODCC5 ODCC4 ODCC3 ODCC2 ODCC1 ODCC0 257
3A61h WPUC WPUC7 WPUC6 WPUC5 WPUC4 WPUC3 WPUC2 WPUC1 WPUC0 256
3A60h ANSELC ANSELC7 ANSELC6 ANSELC5 ANSELC4 ANSELC3 ANSELC2 ANSELC1 ANSELC0 255
3A5Fh -
— Unimplemented —
3A5Ch
3A5Bh RB2I2C — SLEW PU — — TH 252
3A5Ah RB1I2C — SLEW PU — — TH 252
3A59h — Unimplemented —
3A58h — Unimplemented —
3A57h IOCBF IOCBF7 IOCBF6 IOCBF5 IOCBF4 IOCBF3 IOCBF2 IOCBF1 IOCBF0 272
3A56h IOCBN IOCBN7 IOCBN6 IOCBN5 IOCBN4 IOCBN3 IOCBN2 IOCBN1 IOCBN0 272
3A55h IOCBP IOCBP7 IOCBP6 IOCBP5 IOCBP4 IOCBP3 IOCBP2 IOCBP1 IOCBP0 272
3A54h INLVLB INLVLB7 INLVLB6 INLVLB5 INLVLB4 INLVLB3 INLVLB2 INLVLB1 INLVLB0 259
3A53h SLRCONB SLRB7 SLRB6 SLRB5 SLRB4 SLRB3 SLRB2 SLRB1 SLRB0 258
3A52h ODCONB ODCB7 ODCB6 ODCB5 ODCB4 ODCB3 ODCB2 ODCB1 ODCB0 257
3A51h WPUB WPUB7 WPUB6 WPUB5 WPUB4 WPUB3 WPUB2 WPUB1 WPUB0 256
3A50h ANSELB ANSELB7 ANSELB6 ANSELB5 ANSELB4 ANSELB3 ANSELB2 ANSELB1 ANSELB0 255
3A4Fh -
— Unimplemented —
3A48h
3A47h IOCAF IOCAF7 IOCAF6 IOCAF5 IOCAF4 IOCAF3 IOCAF2 IOCAF1 IOCAF0 272
3A46h IOCAN IOCAN7 IOCAN6 IOCAN5 IOCAN4 IOCAN3 IOCAN2 IOCAN1 IOCAN0 272
3A45h IOCAP IOCAP7 IOCAP6 IOCAP5 IOCAP4 IOCAP3 IOCAP2 IOCAP1 IOCAP0 272
3A44h INLVLA INLVLA7 INLVLA6 INLVLA5 INLVLA4 INLVLA3 INLVLA2 INLVLA1 INLVLA0 259
3A43h SLRCONA SLRA7 SLRA6 SLRA5 SLRA4 SLRA3 SLRA2 SLRA1 SLRA0 258
3A42h ODCONA ODCA7 ODCA6 ODCA5 ODCA4 ODCA3 ODCA2 ODCA1 ODCA0 257
3A41h WPUA WPUA7 WPUA6 WPUA5 WPUA4 WPUA3 WPUA2 WPUA1 WPUA0 256
3A40h ANSELA ANSELA7 ANSELA6 ANSELA5 ANSELA4 ANSELA3 ANSELA2 ANSELA1 ANSELA0 255
3A3Fh -
— Unimplemented —
3A18h
3A17h RC7PPS — — — RC7PPS4 RC7PPS3 RC7PPS2 RC7PPS1 RC7PPS0 266
3A16h RC6PPS — — — RC6PPS4 RC6PPS3 RC6PPS2 RC6PPS1 RC6PPS0 266
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 778


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3A15h RC5PPS — — — RC5PPS4 RC5PPS3 RC5PPS2 RC5PPS1 RC5PPS0 266


3A14h RC4PPS — — — RC4PPS4 RC4PPS3 RC4PPS2 RC4PPS1 RC4PPS0 266
3A13h RC3PPS — — — RC3PPS4 RC3PPS3 RC3PPS2 RC3PPS1 RC3PPS0 266
3A12h RC2PPS — — — RC2PPS4 RC2PPS3 RC2PPS2 RC2PPS1 RC2PPS0 266
3A11h RC1PPS — — — RC1PPS4 RC1PPS3 RC1PPS2 RC1PPS1 RC1PPS0 266
3A10h RC0PPS — — — RC0PPS4 RC0PPS3 RC0PPS2 RC0PPS1 RC0PPS0 266
3A0Fh RB7PPS — — — RB7PPS4 RB7PPS3 RB7PPS2 RB7PPS1 RB7PPS0 266
3A0Eh RB6PPS — — — RB6PPS4 RB6PPS3 RB6PPS2 RB6PPS1 RB6PPS0 266
3A0Dh RB5PPS — — — RB5PPS4 RB5PPS3 RB5PPS2 RB5PPS1 RB5PPS0 266
3A0Ch RB4PPS — — — RB4PPS4 RB4PPS3 RB4PPS2 RB4PPS1 RB4PPS0 266
3A0Bh RB3PPS — — — RB3PPS4 RB3PPS3 RB3PPS2 RB3PPS1 RB3PPS0 266
3A0Ah RB2PPS — — — RB2PPS4 RB2PPS3 RB2PPS2 RB2PPS1 RB2PPS0 266
3A09h RB1PPS — — — RB1PPS4 RB1PPS3 RB1PPS2 RB1PPS1 RB1PPS0 266
3A08h RB0PPS — — — RB0PPS4 RB0PPS3 RB0PPS2 RB0PPS1 RB0PPS0 266
3A07h RA7PPS — — — RA7PPS4 RA7PPS3 RA7PPS2 RA7PPS1 RA7PPS0 266
3A06h RA6PPS — — — RA6PPS4 RA6PPS3 RA6PPS2 RA6PPS1 RA6PPS0 266
3A05h RA5PPS — — — RA5PPS4 RA5PPS3 RA5PPS2 RA5PPS1 RA5PPS0 266
3A04h RA4PPS — — — RA4PPS4 RA4PPS3 RA4PPS2 RA4PPS1 RA4PPS0 266
3A03h RA3PPS — — — RA3PPS4 RA3PPS3 RA3PPS2 RA3PPS1 RA3PPS0 266
3A02h RA2PPS — — — RA2PPS4 RA2PPS3 RA2PPS2 RA2PPS1 RA2PPS0 266
3A01h RA1PPS — — — RA1PPS4 RA1PPS3 RA1PPS2 RA1PPS1 RA1PPS0 266
3A00h RA0PPS — — — RA0PPS4 RA0PPS3 RA0PPS2 RA0PPS1 RA0PPS0 266
39FFh -
— Unimplemented —
39F8h
39F7h SCANPR — — — — — PR 21
39F6h -
— Unimplemented —
39F5h
39F4h DMA2PR — — — — — PR 21
39F3h DMA1PR — — — — — PR 20
39F2h MAINPR — — — — — PR 20
39F1h ISRPR — — — — — PR 20
39F0h — Unimplemented —
39EFh PRLOCK — — — — — — — PRLOCKED 21
39EEh -
— Unimplemented —
39E7h
39E6h NVMCON2 NVMCON2 201
39E5h NVMCON1 REG — FREE WRERR WREN WR RD 200
39E4h — Unimplemented —
39E3h NVMDAT DAT 202
39E2h — Unimplemented —
39E1h — Unimplemented —
39E0h NVMADRL ADR 201
39DFh OSCFRQ — — — — FRQ 97
39DEh OSCTUNE — — TUN 98
39DDh OSCEN EXTOEN HFOEN MFOEN LFOEN SOSCEN ADOEN — — 99
39DCh OSCSTAT EXTOR HFOR MFOR LFOR SOR ADOR — PLLR 96
39DBh OSCCON3 CSWHOLD SOSCPWR — ORDY NOSCR — — — 95
39DAh OSCCON2 — COSC CDIV 95
39D9h OSCCON1 — NOSC NDIV 94
39D8h CPUDOZE IDLEN DOZEN ROI DOE — DOZE 167
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 779


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

39D7h -
— Unimplemented —
39D2h
39D1h VREGCON(1) — — — — — — VREGPM — 166
39D0h BORCON SBOREN — — — — — — BORRDY 75
39CFh -
— Unimplemented —
39C8h
39C7h PMD7 CANMD — — — — — DMA2MD DMA1MD 282
39C6h PMD6 — SMT2MD SMT1MD CLC4MD CLC3MD CLC2MD CLC1MD DSMMD 281
39C5h PMD5 — — U2MD U1MD — SPI1MD I2C2MD I2C1MD 280
39C4h PMD4 CWG3MD CWG2MD CWG1MD — — — — — 279
39C3h PMD3 PWM8MD PWM7MD PWM6MD PWM5MD CCP4MD CCP3MD CCP2MD CCP1MD 278
39C2h PMD2 — DACMD ADCMD — — CMP2MD CMP1MD ZCDMD 277
39C1h PMD1 NCO1MD TMR6MD TMR5MD TMR4MD TMR3MD TMR2MD TMR1MD TMR0MD 276
39C0h PMD0 SYSCMD FVRMD HLVDMD CRCMD SCANMD NVMMD CLKRMD IOCMD 275
39BFh -
— Unimplemented —
39AAh
39A9h PIR9 — CLC4IF CCP4IF CLC3IF CWG3IF CCP3IF TMR6IF TMR5IF 136
39A8h PIR8 TMR5IF INT2IF CLC2IF CWG2IF CCP2IF TMR4IF TMR3GIF TMR3IF 135
39A7h PIR7 U2IF U2EIF U2TXIF U2RXIF I2C2EIF I2C2IF I2C2TXIF I2C2RXIF 134
39A6h PIR6 DMA2AIF DMA2ORIF DMA2DCNTIF DMA2SCNTIF SMT2PWAIF SMT2PRAIF SMT2IF C2IF 133
39A5h PIR5 IRXIF WAKIF ERRIF TXB2IF/ TXB1IF TXB0IF RXB1IF/ RXB0IF/ 132
TXBnIF RXBnIF FIFOFIF
39A4h PIR4 INT1IF CLC1IF CWG1IF NCO1IF CCP1IF TMR2IF TMR1GIF TMR1IF 131
39A3h PIR3 TMR0IF U1IF U1EIF U1TXIF U1RXIF I2C1EIF I2C1IF I2C1TXIF 130
39A2h PIR2 I2C1RXIF SPI1IF SPI1TXIF SPI1RXIF DMA1AIF DMA1ORIF DMA1DCNTIF DMA1SCNTIF 128
39A1h PIR1 SMT1PWAIF SMT1PRAIF SMT1IF C1IF ADTIF ADIF ZCDIF INT0IF 128
39A0h PIR0 IOCIF CRCIF SCANIF NVMIF CSWIF OSFIF HLVDIF SWIF 127
399Fh -
— Unimplemented —
399Ah
3999h PIE9 — CLC4IE CCP4IE CLC3IE CWG3IE CCP3IE TMR6IE TMR5IE 146
3998h PIE8 TMR5IE INT2IE CLC2IE CWG2IE CCP2IE TMR4IE TMR3GIE TMR3IE 145
3997h PIE7 U2IE U2EIE U2TXIE U2RXIE I2C2EIE I2C2IE I2C2TXIE I2C2RXIE 144
3996h PIE6 DMA2AIE DMA2ORIE DMA2DCNTIE DMA2SCNTIE SMT2PWAIE SMT2PRAIE SMT2IE C2IE 143
3995h PIE5 IRXIE WAKIE ERRIE TXB2IE/TXB- TXB1IE TXB0IE RXB1IE/ RXB0IF/ 142
nIE RXBnIE FIFOFIF
3994h PIE4 INT1IE CLC1IE CWG1IE NCO1IE CCP1IE TMR2IE TMR1GIE TMR1IE 141
3993h PIE3 TMR0IE U1IE U1EIE U1TXIE U1RXIE I2C1EIE I2C1IE I2C1TXIE 140
3992h PIE2 I2C1RXIE SPI1IE SPI1TXIE SPI1RXIE DMA1AIE DMA1ORIE DMA1DCNTIE DMA1SCNTIE 139
3991h PIE1 SMT1PWAIE SMT1PRAIE SMT1IE C1IE ADTIE ADIE ZCDIE INT0IE 138
3990h PIE0 IOCIE CRCIE SCANIE NVMIE CSWIE OSFIE HLVDIE SWIE 137
398Fh -
— Unimplemented —
398Ah
3989h IPR9 — CLC4IP CCP4IP CLC3IP CWG3IP CCP3IP TMR6IP TMR5IP 156
3988h IPR8 TMR5IP INT2IP CLC2IP CWG2IP CCP2IP TMR4IP TMR3GIP TMR3IP 155
3987h IPR7 U2IP U2EIP U2TXIP U2RXIP I2C2EIP I2C2IP I2C2TXIP I2C2RXIP 154
3986h IPR6 DMA2AIP DMA2ORIP DMA2DCNTIP DMA2SCNTIP SMT2PWAIP SMT2PRAIP SMT2IP C2IP 153
3985h IPR5 IRXIP WAKIP ERRIP TXB2IP/TXB- TXB1IP TXB0IP RXB1IP/ RXB0IP/ 152
nIP RXBnIP FIFOFIP
3984h IPR4 INT1IP CLC1IP CWG1IP NCO1IP CCP1IP TMR2IP TMR1GIP TMR1IP 151
3983h IPR3 TMR0IP U1IP U1EIP U1TXIP U1RXIP I2C1EIP I2C1IP I2C1TXIP 150
3982h IPR2 I2C1RXIP SPI1IP SPI1TXIP SPI1RXIP DMA1AIP DMA1ORIP DMA1DCNTIP DMA1SCNTIP 149
3981h IPR1 SMT1PWAIP SMT1PRAIP SMT1IP C1IP ADTIP ADIP ZCDIP INT0IP 148
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 780


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3980h IPR0 IOCIP CRCIP SCANIP NVMIP CSWIP OSFIP HLVDIP SWIP 147
397Fh -
— Unimplemented —
397Eh
397Dh SCANTRIG — — — — TSEL 216
397Ch SCANCON0 EN TRIGEN SGO — — MREG BURSTMD BUSY 212
397Bh SCANHADRU — — HADR 214
397Ah SCANHADRH HADR 215
3979h SCANHADRL HADR 215
3978h SCANLADRU — — LADR 213
3977h SCANLADRH LADR 213
3976h SCANLADRL LADR 214
3975h -
— Unimplemented —
396Ah
3969h CRCCON1 DLEN PLEN 208
3968h CRCCON0 EN CRCGO BUSY ACCM — — SHIFTM FULL 208
3967h CRCXORH X15 X14 X13 X12 X11 X10 X9 X8 211
3966h CRCXORL X7 X6 X5 X4 X3 X2 X1 — 211
3965h CRCSHIFTH SHFT15 SHFT14 SHFT13 SHFT12 SHFT11 SHFT10 SHFT9 SHFT8 210
3964h CRCSHIFTL SHFT7 SHFT6 SHFT5 SHFT4 SHFT3 SHFT2 SHFT1 SHFT0 210
3963h CRCACCH ACC15 ACC14 ACC13 ACC12 ACC11 ACC10 ACC9 ACC8 209
3962h CRCACCL ACC7 ACC6 ACC5 ACC4 ACC3 ACC2 ACC1 ACC0 210
3961h CRCDATH DATA15 DATA14 DATA13 DATA12 DATA11 DATA10 DATA9 DATA8 209
3960h CRCDATL DATA7 DATA6 DATA5 DATA4 DATA3 DATA2 DATA1 DATA0 209
395Fh WDTTMR WDTTMR STATE PSCNT 175
395Eh WDTPSH PSCNT 174
395Dh WDTPSL PSCNT 174
395Ch WDTCON1 — WDTCS — WINDOW 173
395Bh WDTCON0 — — WDTPS SEN 172
395Ah -
— Unimplemented —
38A0h
389Fh IVTADU AD 158
389Eh IVTADH AD 158
389Dh IVTADL AD 158
389Ch -
— Unimplemented —
3891h
3890h PRODH_SHAD PRODH 115
388Fh PRODL_SHAD PRODL 115
388Eh FSR2H_SHAD — — FSR2H 115
388Dh FSR2L_SHAD FSR2L 115
388Ch FSR1H_SHAD — — FSR1H 115
388Bh FSR1L_SHAD FSR1L 115
388Ah FSR0H_SHAD — — FSR0H 115
3889h FSR0L_SHAD FSR0L 115
3888h PCLATU_SHAD — — — PCU 115
3887h PCLATH_SHAD PCH 115
3886h BSR_SHAD — — BSR 115
3885h WREG_SHAD WREG 115
3884h STATUS_SHAD — TO PD N OV Z DC C 115
3883h SHADCON — — — — — — — SHADLO 159
3882h BSR_CSHAD — — BSR 47
3881h WREG_CSHAD WREG 47
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 781


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3880h STATUS_CSHAD — TO PD N OV Z DC C 47
387Fh
- — Unimplemented —
3800h
37FFh CANCON_RO0 CANCON_RO0 603
37FEh CANSTAT_RO0 CANSTAT_RO0 604
37FDh RXB1D7 RXB1D7 620
37FCh RXB1D6 RXB1D6 620
37FBh RXB1D5 RXB1D5 620
37FAh RXB1D4 RXB1D4 620
37F9h RXB1D3 RXB1D3 620
37F8h RXB1D2 RXB1D2 620
37F7h RXB1D1 RXB1D1 620
37F6h RXB1D0 RXB1D0 620
37F5h RXB1DLC — RXRTR RB1 R0 DLC3 DLC2 DLC1 DLC0 620
37F4h RXB1EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 619
37F3h RXB1EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 619
37F2h RXB1SIDL SID2 SID1 SID0 SRR EXID — EID17 EID16 619
37F1h RXB1SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 618
37F0h RXB1CON RXFUL RXM1 RXM0 — RXRTRRO FILHIT2 FILHIT1 FILHIT0 617
37F0h RXB1CON RXFUL RXM1 RTRRO FILHIT4 FILHIT3 FILHIT2 FILHIT1 FILHIT0 617
37EFh CANCON_RO1 CANCON_RO1 603
37EEh CANSTAT_RO1 CANSTAT_RO1 604
37EDh TXB0D7 TXB0D7 611
37ECh TXB0D6 TXB0D6 611
37EBh TXB0D5 TXB0D5 611
37EAh TXB0D4 TXB0D4 611
37E9h TXB0D3 TXB0D3 611
37E8h TXB0D2 TXB0D2 611
37E7h TXB0D1 TXB0D1 611
37E6h TXB0D0 TXB0D0 611
37E5h TXB0DLC — TXRTR — — DLC3 DLC2 DLC1 DLC0 612
37E4h TXB0EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 611
37E3h TXB0EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 610
37E2h TXB0SIDL SID2 SID1 SID0 — EXIDE — EID17 EID16 610
37E1h TXB0SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 610
37E0h TXB0CON TXBIF TXABT TXLARB TXERR TXREQ — TXPRI1 TXPRI0 609
37DFh CANCON_RO2 CANCON_RO2 603
37DEh CANSTAT_RO2 CANSTAT_RO2 604
37DDh TXB1D7 TXB1D7 611
37DCh TXB1D6 TXB1D6 611
37DBh TXB1D5 TXB1D5 611
37DAh TXB1D4 TXB1D4 611
37D9h TXB1D3 TXB1D3 611
37D8h TXB1D2 TXB1D2 611
37D7h TXB1D1 TXB1D1 611
37D6h TXB1D0 TXB1D0 611
37D5h TXB1DLC — TXRTR — — DLC3 DLC2 DLC1 DLC0 612
37D4h TXB1EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 611
37D3h TXB1EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 610
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 782


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

37D2h TXB1SIDL SID2 SID1 SID0 — EXIDE — EID17 EID16 610


37D1h TXB1SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 610
37D0h TXB1CON TXBIF TXABT TXLARB TXERR TXREQ — TXPRI1 TXPRI0 609
37CFh CANCON_R03 CANCON_RO3 603
37CEh CANSTAT_R03 CANSTAT_RO3 604
37CDh TXB2D7 TXB2D7 611
37CCh TXB2D6 TXB2D6 611
37CBh TXB2D5 TXB2D5 611
37CAh TXB2D4 TXB2D4 611
37C9h TXB2D3 TXB2D3 611
37C8h TXB2D2 TXB2D2 611
37C7h TXB2D1 TXB2D1 611
37C6h TXB2D0 TXB2D0 611
37C5h TXB2DLC — TXRTR — — DLC3 DLC2 DLC1 DLC0 612
37C4h TXB2EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 611
37C3h TXB2EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 610
37C2h TXB2SIDL SID2 SID1 SID0 — EXIDE — EID17 EID16 610
37C1h TXB2SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 610
37C0h TXB2CON TXBIF TXABT TXLARB TXERR TXREQ — TXPRI1 TXPRI0 609
37BFh RXM1EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 633
37BEh RXM1EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 632
37BDh RXM1SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 632
37BCh RXM1SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 631
37BBh RXM0EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 633
37BAh RXM0EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 632
37B9h RXM0SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 631
37B8h RXM0SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 631
37B7h RXF5EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
37B6h RXF5EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
37B5h RXF5SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
37B4h RXF5SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
37B3h RXF4EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
37B2h RXF4EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
37B1h RXF4SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
37B0h RXF4SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
37AFh RXF3EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
37AEh RXF3EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
37ADh RXF3SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
37ACh RXF3SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
37ABh RXF2EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
37AAh RXF2EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
37A9h RXF2SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
37A8h RXF2SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
37A7h RXF1EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
37A6h RXF1EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
37A5h RXF1SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
37A4h RXF1SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
37A3h RXF0EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
37A2h RXF0EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
37A1h RXF0SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 783


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

37A0h RXF0SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
379Fh CANCON_RO4 CANCON_RO4 603
379Eh CANSTAT_RO4 CANSTAT_RO4 604
379Dh B5D7 B5D7 627
379Ch B5D6 B5D6 627
379Bh B5D5 B5D5 627
379Ah B5D4 B5D4 627
3799h B5D3 B5D3 627
3798h B5D2 B5D2 627
3797h B5D1 B5D1 627
3796h B5D0 B5D0 627
3795h B5DLC — RXRTR RB1 RB0 DLC3 DLC2 DLC1 DLC0 628
3795h B5DLC — TXRTR — — DLC3 DLC2 DLC1 DLC0 629
3794h B5EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 626
3793h B5EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 626
3792h B5SIDL SID2 SID1 SID0 SRR EXIDE — EID17 EID16 625
3791h B5SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 624
3790h B5CON RXFUL RXM1 RXRTRRO FILHIT4 FILHIT3 FILHIT2 FILHIT1 FILHIT0 622
3790h B5CON TXBIF TXABT TXLARB TXERR TXREQ RTREN TXPRI1 TXPRI0 623
378Fh CANCON_RO5 CANCON_RO5 603
378Eh CANSTAT_RO5 CANSTAT_RO5 604
378Dh B4D7 B4D7 627
378Ch B4D6 B4D6 627
378Bh B4D5 B4D5 627
378Ah B4D4 B4D4 627
3789h B4D3 B4D3 627
3788h B4D2 B4D2 627
3787h B4D1 B4D1 627
3786h B4D0 B4D0 627
3785h B4DLC — RXRTR RB1 RB0 DLC3 DLC2 DLC1 DLC0 628
3785h B4DLC — TXRTR — — DLC3 DLC2 DLC1 DLC0 629
3784h B4EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 626
3783h B4EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 626
3782h B4SIDL SID2 SID1 SID0 SRR EXIDE — EID17 EID16 625
3781h B4SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 624
3780h B4CON RXFUL RXM1 RXRTRRO FILHIT4 FILHIT3 FILHIT2 FILHIT1 FILHIT0 622
3780h B4CON TXBIF TXABT TXLARB TXERR TXREQ RTREN TXPRI1 TXPRI0 623
377Fh CANCON_RO6 CANCON_RO6 603
377Eh CANSTAT_RO6 CANSTAT_RO6 604
377Dh B3D7 B3D7 627
377Ch B3D6 B3D6 627
377Bh B3D5 B3D5 627
377Ah B3D4 B3D4 627
3779h B3D3 B3D3 627
3778h B3D2 B3D2 627
3777h B3D1 B3D1 627
3776h B3D0 B3D0 627
3775h B3DLC — RXRTR RB1 RB0 DLC3 DLC2 DLC1 DLC0 628
3775h B3DLC — TXRTR — — DLC3 DLC2 DLC1 DLC0 629
3774h B3EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 626
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 784


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3773h B3EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 626
3772h B3SIDL SID2 SID1 SID0 SRR EXIDE — EID17 EID16 625
3771h B3SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 624
3770h B3CON RXFUL RXM1 RXRTRRO FILHIT4 FILHIT3 FILHIT2 FILHIT1 FILHIT0 622
3770h B3CON TXBIF TXABT TXLARB TXERR TXREQ RTREN TXPRI1 TXPRI0 623
376Fh CANCON_RO7 CANCON_RO7 603
376Eh CANSTAT_RO7 CANSTAT_RO7 604
376Dh B2D7 B2D7 627
376Ch B2D6 B2D6 627
376Bh B2D5 B2D5 627
376Ah B2D4 B2D4 627
3769h B2D3 B2D3 627
3768h B2D2 B2D2 627
3767h B2D1 B2D1 627
3766h B2D0 B2D0 627
3765h B2DLC — RXRTR RB1 RB0 DLC3 DLC2 DLC1 DLC0 628
3765h B2DLC — TXRTR — — DLC3 DLC2 DLC1 DLC0 629
3764h B2EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 626
3763h B2EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 626
3762h B2SIDL SID2 SID1 SID0 SRR EXIDE — EID17 EID16 625
3761h B2SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 624
3760h B2CON RXFUL RXM1 RXRTRRO FILHIT4 FILHIT3 FILHIT2 FILHIT1 FILHIT0 622
3760h B2CON TXBIF TXABT TXLARB TXERR TXREQ RTREN TXPRI1 TXPRI0 623
375Fh CANCON_RO8 CANCON_RO8 603
375Eh CANSTAT_RO8 CANSTAT_RO8 604
375Dh B1D7 B1D7 627
375Ch B1D6 B1D6 627
375Bh B1D5 B1D5 627
375Ah B1D4 B1D4 627
3759h B1D3 B1D3 627
3758h B1D2 B1D2 627
3757h B1D1 B1D1 627
3756h B1D0 B1D0 627
3755h B1DLC — RXRTR RB1 RB0 DLC3 DLC2 DLC1 DLC0 628
3755h B1DLC — TXRTR — — DLC3 DLC2 DLC1 DLC0 629
3754h B1EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 626
3753h B1EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 626
3752h B1SIDL SID2 SID1 SID0 SRR EXIDE — EID17 EID16 625
3751h B1SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 624
3750h B1CON RXFUL RXM1 RXRTRRO FILHIT4 FILHIT3 FILHIT2 FILHIT1 FILHIT0 622
3750h B1CON TXBIF TXABT TXLARB TXERR TXREQ RTREN TXPRI1 TXPRI0 623
374Fh CANCON_RO9 CANCON_RO9 603
374Eh CANSTAT_RO9 CANSTAT_RO9 604
374Dh B0D7 B0D7 627
374Ch B0D6 B0D6 627
374Bh B0D5 B0D5 627
374Ah B0D4 B0D4 627
3749h B0D3 B0D3 627
3748h B0D2 B0D2 627
3747h B0D1 B0D1 627
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 785


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3746h B0D0 B0D0 627


3745h B0DLC — RXRTR RB1 RB0 DLC3 DLC2 DLC1 DLC0 628
3745h B0DLC — TXRTR — — DLC3 DLC2 DLC1 DLC0 629
3744h B0EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 626
3743h B0EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 626
3742h B0SIDL SID2 SID1 SID0 SRR EXIDE — EID17 EID16 625
3741h B0SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 624
3740h B0CON RXFUL RXM1 RXRTRRO FILHIT4 FILHIT3 FILHIT2 FILHIT1 FILHIT0 622
3740h B0CON TXBIF TXABT TXLARB TXERR TXREQ RTREN TXPRI1 TXPRI0 623
373Fh TXBIE — — — TXB2IE TXB1IE TXB0IE — — 647
373Eh BIE0 B5IE B4IE B3IE B2IE B1IE B0IE RXB1IE RXB0IE 648
373Dh BSEL0 B5TXEN B4TXEN B3TXEN B2TXEN B1TXEN B0TXEN — — 629
373Ch MSEL3 FIL15_1 FIL15_0 FIL14_1 FIL14_0 FIL13_1 FIL13_0 FIL12_1 FIL12_0 639
373Bh MSEL2 FIL11_1 FIL11_0 FIL10_1 FIL10_0 FIL9_1 FIL9_0 FIL8_1 FIL8_0 638
373Ah MSEL1 FIL7_1 FIL7_0 FIL6_1 FIL6_0 FIL5_1 FIL5_0 FIL4_1 FIL4_0 637
3739h MSEL0 FIL3_1 FIL3_0 FIL2_1 FIL2_0 FIL1_1 FIL1_0 FIL0_1 FIL0_0 639
3738h RXFBCON7 F15BP_3 F15BP_2 F15BP_1 F15BP_0 F14BP_3 F14BP_2 F14BP_1 F14BP_0 635
3737h RXFBCON6 F13BP_3 F13BP_2 F13BP_1 F13BP_0 F12BP_3 F12BP_2 F12BP_1 F12BP_0 635
3736h RXFBCON5 F11BP_3 F11BP_2 F11BP_1 F11BP_0 F10BP_3 F10BP_2 F10BP_1 F10BP_0 635
3735h RXFBCON4 F9BP_3 F9BP_2 F9BP_1 F9BP_0 F8BP_3 F8BP_2 F8BP_1 F8BP_0 635
3734h RXFBCON3 F7BP_3 F7BP_2 F7BP_1 F7BP_0 F6BP_3 F6BP_2 F6BP_1 F6BP_0 635
3733h RXFBCON2 F5BP_3 F5BP_2 F5BP_1 F5BP_0 F4BP_3 F4BP_2 F4BP_1 F4BP_0 635
3732h RXFBCON1 F3BP_3 F3BP_2 F3BP_1 F3BP_0 F2BP_3 F2BP_2 F2BP_1 F2BP_0 635
3731h RXFBCON0 F1BP_3 F1BP_2 F1BP_1 F1BP_0 F0BP_3 F0BP_2 F0BP_1 F0BP_0 635
3730h SDFLC — — — FLC4 FLC3 FLC2 FLC1 FLC0 634
372Fh RXF15EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
372Eh RXF15EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
372Dh RXF15SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
372Ch RXF15SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
372Bh RXF14EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
372Ah RXF14EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
3729h RXF14SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
3728h RXF14SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
3727h RXF13EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
3726h RXF13EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
3725h RXF13SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
3724h RXF13SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
3723h RXF12EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
3722h RXF12EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
3721h RXF12SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
3720h RXF12SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
371Fh RXF11EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
371Eh RXF11EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
371Dh RXF11SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
371Ch RXF11SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
371Bh RXF10EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
371Ah RXF10EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
3719h RXF10SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
3718h RXF10SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
3717h RXF9EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 786


PIC18(L)F25/26K83
TABLE 43-1: REGISTER FILE SUMMARY FOR PIC18(L)F25/26K83 DEVICES (CONTINUED)
Register
Addr Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
on page

3716h RXF9EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
3715h RXF9SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
3714h RXF9SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
3713h RXF8EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
3712h RXF8EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
3711h RXF8SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
3710h RXF8SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
370Fh RXF7EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
370Eh RXF7EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
370Dh RXF7SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
370Ch RXF7SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
370Bh RXF6EIDL EID7 EID6 EID5 EID4 EID3 EID2 EID1 EID0 631
370Ah RXF6EIDH EID15 EID14 EID13 EID12 EID11 EID10 EID9 EID8 631
3709h RXF6SIDL SID2 SID1 SID0 — EXIDEN — EID17 EID16 630
3708h RXF6SIDH SID10 SID9 SID8 SID7 SID6 SID5 SID4 SID3 630
3707h RXFCON1 RXF15EN RXF14EN RXF13EN RXF12EN RXF11EN RXF10EN RXF9EN RXF8EN 633
3706h RXFCON0 RXF7EN RXF6EN RXF5EN RXF4EN RXF3EN RXF2EN RXF1EN RXF0EN 633
3705h BRGCON3 WAKDIS WAKFIL — — — SEG2PH2 SEG2PH1 SEG2PH0 642
3704h BRGCON2 SEG2PHTS SAM SEG1PH2 SEG1PH1 SEG1PH0 PRSEG2 PRSEG1 PRSEG0 641
3703h BRGCON1 SJW1 SJW0 BRP5 BRP4 BRP3 BRP2 BRP1 BRP0 640
3702h TXERRCNT TEC7 TEC6 TEC5 TEC4 TEC3 TEC2 TEC1 TEC0 612
3701h RXERRCNT REC7 REC6 REC5 REC4 REC3 REC2 REC1 REC0 621
3700h CIOCON TX1SRC — — — — — — CLKSEL 643
Legend: x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1: Not present in LF devices.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 787


PIC18(L)F25/26K83
44.0 DEVELOPMENT SUPPORT 44.1 MPLAB X Integrated Development
Environment Software
The PIC® microcontrollers (MCU) and dsPIC® digital
signal controllers (DSC) are supported with a full range The MPLAB X IDE is a single, unified graphical user
of software and hardware development tools: interface for Microchip and third-party software, and
• Integrated Development Environment hardware development tool that runs on Windows®,
Linux and Mac OS® X. Based on the NetBeans IDE,
- MPLAB® X IDE Software
MPLAB X IDE is an entirely new IDE with a host of free
• Compilers/Assemblers/Linkers software components and plug-ins for high-
- MPLAB XC Compiler performance application development and debugging.
- MPASMTM Assembler Moving between tools and upgrading from software
- MPLINKTM Object Linker/ simulators to hardware debugging and programming
MPLIBTM Object Librarian tools is simple with the seamless user interface.
- MPLAB Assembler/Linker/Librarian for With complete project management, visual call graphs,
Various Device Families a configurable watch window and a feature-rich editor
• Simulators that includes code completion and context menus,
- MPLAB X SIM Software Simulator MPLAB X IDE is flexible and friendly enough for new
users. With the ability to support multiple tools on
• Emulators
multiple projects with simultaneous debugging, MPLAB
- MPLAB REAL ICE™ In-Circuit Emulator X IDE is also suitable for the needs of experienced
• In-Circuit Debuggers/Programmers users.
- MPLAB ICD 3 Feature-Rich Editor:
- PICkit™ 3
• Color syntax highlighting
• Device Programmers
• Smart code completion makes suggestions and
- MPLAB PM3 Device Programmer provides hints as you type
• Low-Cost Demonstration/Development Boards, • Automatic code formatting based on user-defined
Evaluation Kits and Starter Kits rules
• Third-party development tools • Live parsing
User-Friendly, Customizable Interface:
• Fully customizable interface: toolbars, toolbar
buttons, windows, window placement, etc.
• Call graph window
Project-Based Workspaces:
• Multiple projects
• Multiple tools
• Multiple configurations
• Simultaneous debugging sessions
File History and Bug Tracking:
• Local file history feature
• Built-in support for Bugzilla issue tracker

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 788


PIC18(L)F25/26K83
44.2 MPLAB XC Compilers 44.4 MPLINK Object Linker/
The MPLAB XC Compilers are complete ANSI C
MPLIB Object Librarian
compilers for all of Microchip’s 8, 16, and 32-bit MCU The MPLINK Object Linker combines relocatable
and DSC devices. These compilers provide powerful objects created by the MPASM Assembler. It can link
integration capabilities, superior code optimization and relocatable objects from precompiled libraries, using
ease of use. MPLAB XC Compilers run on Windows, directives from a linker script.
Linux or MAC OS X.
The MPLIB Object Librarian manages the creation and
For easy source level debugging, the compilers provide modification of library files of precompiled code. When
debug information that is optimized to the MPLAB X a routine from a library is called from a source file, only
IDE. the modules that contain that routine will be linked in
The free MPLAB XC Compiler editions support all with the application. This allows large libraries to be
devices and commands, with no time or memory used efficiently in many different applications.
restrictions, and offer sufficient code optimization for The object linker/library features include:
most applications.
• Efficient linking of single libraries instead of many
MPLAB XC Compilers include an assembler, linker and smaller files
utilities. The assembler generates relocatable object • Enhanced code maintainability by grouping
files that can then be archived or linked with other relo- related modules together
catable object files and archives to create an execut-
• Flexible creation of libraries with easy module
able file. MPLAB XC Compiler uses the assembler to
listing, replacement, deletion and extraction
produce its object file. Notable features of the assem-
bler include:
44.5 MPLAB Assembler, Linker and
• Support for the entire device instruction set
Librarian for Various Device
• Support for fixed-point and floating-point data
Families
• Command-line interface
• Rich directive set MPLAB Assembler produces relocatable machine
• Flexible macro language code from symbolic assembly language for PIC24,
PIC32 and dsPIC DSC devices. MPLAB XC Compiler
• MPLAB X IDE compatibility
uses the assembler to produce its object file. The
assembler generates relocatable object files that can
44.3 MPASM Assembler then be archived or linked with other relocatable object
The MPASM Assembler is a full-featured, universal files and archives to create an executable file. Notable
macro assembler for PIC10/12/16/18 MCUs. features of the assembler include:

The MPASM Assembler generates relocatable object • Support for the entire device instruction set
files for the MPLINK Object Linker, Intel® standard HEX • Support for fixed-point and floating-point data
files, MAP files to detail memory usage and symbol • Command-line interface
reference, absolute LST files that contain source lines • Rich directive set
and generated machine code, and COFF files for • Flexible macro language
debugging.
• MPLAB X IDE compatibility
The MPASM Assembler features include:
• Integration into MPLAB X IDE projects
• User-defined macros to streamline
assembly code
• Conditional assembly for multipurpose
source files
• Directives that allow complete control over the
assembly process

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 789


PIC18(L)F25/26K83
44.6 MPLAB X SIM Software Simulator 44.8 MPLAB ICD 3 In-Circuit Debugger
The MPLAB X SIM Software Simulator allows code
System
development in a PC-hosted environment by simulat- The MPLAB ICD 3 In-Circuit Debugger System is
ing the PIC MCUs and dsPIC DSCs on an instruction Microchip’s most cost-effective, high-speed hardware
level. On any given instruction, the data areas can be debugger/programmer for Microchip Flash DSC and
examined or modified and stimuli can be applied from MCU devices. It debugs and programs PIC Flash
a comprehensive stimulus controller. Registers can be microcontrollers and dsPIC DSCs with the powerful,
logged to files for further run-time analysis. The trace yet easy-to-use graphical user interface of the MPLAB
buffer and logic analyzer display extend the power of IDE.
the simulator to record and track program execution,
The MPLAB ICD 3 In-Circuit Debugger probe is
actions on I/O, most peripherals and internal registers.
connected to the design engineer’s PC using a high-
The MPLAB X SIM Software Simulator fully supports speed USB 2.0 interface and is connected to the target
symbolic debugging using the MPLAB XC Compilers, with a connector compatible with the MPLAB ICD 2 or
and the MPASM and MPLAB Assemblers. The soft- MPLAB REAL ICE systems (RJ-11). MPLAB ICD 3
ware simulator offers the flexibility to develop and supports all MPLAB ICD 2 headers.
debug code outside of the hardware laboratory envi-
ronment, making it an excellent, economical software 44.9 PICkit 3 In-Circuit Debugger/
development tool.
Programmer
44.7 MPLAB REAL ICE In-Circuit The MPLAB PICkit 3 allows debugging and program-
Emulator System ming of PIC and dsPIC Flash microcontrollers at a most
affordable price point using the powerful graphical user
The MPLAB REAL ICE In-Circuit Emulator System is interface of the MPLAB IDE. The MPLAB PICkit 3 is
Microchip’s next generation high-speed emulator for connected to the design engineer’s PC using a full-
Microchip Flash DSC and MCU devices. It debugs and speed USB interface and can be connected to the tar-
programs all 8, 16 and 32-bit MCU, and DSC devices get via a Microchip debug (RJ-11) connector (compati-
with the easy-to-use, powerful graphical user interface of ble with MPLAB ICD 3 and MPLAB REAL ICE). The
the MPLAB X IDE. connector uses two device I/O pins and the Reset line
The emulator is connected to the design engineer’s to implement in-circuit debugging and In-Circuit Serial
PC using a high-speed USB 2.0 interface and is Programming™ (ICSP™).
connected to the target with either a connector
compatible with in-circuit debugger systems (RJ-11) 44.10 MPLAB PM3 Device Programmer
or with the new high-speed, noise tolerant, Low-
Voltage Differential Signal (LVDS) interconnection The MPLAB PM3 Device Programmer is a universal,
(CAT5). CE compliant device programmer with programmable
voltage verification at VDDMIN and VDDMAX for
The emulator is field upgradable through future firmware maximum reliability. It features a large LCD display
downloads in MPLAB X IDE. MPLAB REAL ICE offers (128 x 64) for menus and error messages, and a mod-
significant advantages over competitive emulators ular, detachable socket assembly to support various
including full-speed emulation, run-time variable package types. The ICSP cable assembly is included
watches, trace analysis, complex breakpoints, logic as a standard item. In Stand-Alone mode, the MPLAB
probes, a ruggedized probe interface and long (up to PM3 Device Programmer can read, verify and program
three meters) interconnection cables. PIC devices without a PC connection. It can also set
code protection in this mode. The MPLAB PM3
connects to the host PC via an RS-232 or USB cable.
The MPLAB PM3 has high-speed communications and
optimized algorithms for quick programming of large
memory devices, and incorporates an MMC card for file
storage and data applications.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 790


PIC18(L)F25/26K83
44.11 Demonstration/Development 44.12 Third-Party Development Tools
Boards, Evaluation Kits, and Microchip also offers a great collection of tools from
Starter Kits third-party vendors. These tools are carefully selected
A wide variety of demonstration, development and to offer good value and unique functionality.
evaluation boards for various PIC MCUs and dsPIC • Device Programmers and Gang Programmers
DSCs allows quick application development on fully from companies, such as SoftLog and CCS
functional systems. Most boards include prototyping • Software Tools from companies, such as Gimpel
areas for adding custom circuitry and provide applica- and Trace Systems
tion firmware and source code for examination and • Protocol Analyzers from companies, such as
modification. Saleae and Total Phase
The boards support a variety of features, including LEDs, • Demonstration Boards from companies, such as
temperature sensors, switches, speakers, RS-232 MikroElektronika, Digilent® and Olimex
interfaces, LCD displays, potentiometers and additional • Embedded Ethernet Solutions from companies,
EEPROM memory. such as EZ Web Lynx, WIZnet and IPLogika®
The demonstration and development boards can be
used in teaching environments, for prototyping custom
circuits and for learning about various microcontroller
applications.
In addition to the PICDEM™ and dsPICDEM™
demonstration/development board series of circuits,
Microchip has a line of evaluation kits and demonstra-
tion software for analog filter design, KEELOQ® security
ICs, CAN, IrDA®, PowerSmart battery management,
SEEVAL® evaluation system, Sigma-Delta ADC, flow
rate sensing, plus many more.
Also available are starter kits that contain everything
needed to experience the specified device. This usually
includes a single application and debug capability, all
on one board.
Check the Microchip web page (www.microchip.com)
for the complete list of demonstration, development
and evaluation kits.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 791


PIC18(L)F25/26K83
45.0 ELECTRICAL SPECIFICATIONS
45.1 Absolute Maximum Ratings(†)
Ambient temperature under bias...................................................................................................... -40°C to +125°C
Storage temperature ........................................................................................................................ -65°C to +150°C
Voltage on pins with respect to VSS
on VDD pin
PIC18F25/26K83 ...................................................................................................... -0.3V to +6.5V
PIC18LF25/26K83 .................................................................................................... -0.3V to +4.0V
on MCLR pin ........................................................................................................................... -0.3V to +9.0V
on all other pins ............................................................................................................ -0.3V to (VDD + 0.3V)
Maximum current
on VSS pin(1)
-40°C  TA  +85°C .............................................................................................................. 350 mA
85°C  TA  +125°C ............................................................................................................. 120 mA
on VDD pin for 28-Pin devices(1)
-40°C  TA  +85°C .............................................................................................................. 250 mA
85°C  TA  +125°C ............................................................................................................... 85 mA
on any standard I/O pin ...................................................................................................................... 50 mA
Clamp current, IK (VPIN < 0 or VPIN > VDD) ................................................................................................... 20 mA
Total power dissipation(2)................................................................................................................................ 800 mW

Note 1: Maximum current rating requires even load distribution across I/O pins. Maximum current rating may be
limited by the device package power dissipation characterizations, see Table 45-6 to calculate device
specifications.
2: Power dissipation is calculated as follows:
PDIS = VDD x {IDD - IOH} + VDD - VOH) x IOH} + VOI x IOL

† 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 above maximum rating conditions for
extended periods may affect device reliability.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 792


PIC18(L)F25/26K83
45.2 Standard Operating Conditions
The standard operating conditions for any device are defined as:
Operating Voltage: VDDMIN VDD VDDMAX
Operating Temperature: TA_MIN TA TA_MAX
VDD — Operating Supply Voltage(1)
PIC18LF25/26K83
VDDMIN (Fosc  16 MHz) ......................................................................................................... +1.8V
VDDMIN (Fosc  32 MHz) ......................................................................................................... +2.5V
VDDMIN (Fosc  64 MHz) ......................................................................................................... +2.7V
VDDMAX .................................................................................................................................... +3.6V
PIC18F25/26K83
VDDMIN (Fosc  16 MHz) ......................................................................................................... +2.3V
VDDMIN (Fosc  32 MHz) ......................................................................................................... +2.5V
VDDMIN (Fosc  64 MHz) ......................................................................................................... +3.0V
VDDMAX .................................................................................................................................... +5.5V
TA — Operating Ambient Temperature Range
Industrial Temperature
TA_MIN ...................................................................................................................................... -40°C
TA_MAX .................................................................................................................................... +85°C
Extended Temperature
TA_MIN ...................................................................................................................................... -40°C
TA_MAX .................................................................................................................................. +125°C
Note 1: See Parameter Supply Voltage, DS Characteristics: Supply Voltage.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 793


PIC18(L)F25/26K83
FIGURE 45-1: VOLTAGE FREQUENCY GRAPH, -40°C  TA +125°C, PIC18F25/26K83 ONLY

5.5

2.7
VDD (V)

2.5

2.3

0 4 10 16 32 64
Frequency (MHz)

Note 1: The shaded region indicates the permissible combinations of voltage and frequency.
2: Refer to Table 45-7 for each Oscillator mode’s supported frequencies.

FIGURE 45-2: VOLTAGE FREQUENCY GRAPH, -40°C  TA +125°C, PIC18LF25/26K83 ONLY

3.6
VDD (V)

2.7

2.5

1.8

0 4 10 16 32 64
Frequency (MHz)

Note 1: The shaded region indicates the permissible combinations of voltage and frequency.
2: Refer to Table 45-7 for each Oscillator mode’s supported frequencies.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 794


PIC18(L)F25/26K83
45.3 DC Characteristics
TABLE 45-1: SUPPLY VOLTAGE
PIC18LF25/26K83 Standard Operating Conditions (unless otherwise stated)

PIC18F25/26K83

Param.
Sym. Characteristic Min. Typ.† Max. Units Conditions
No.
Supply Voltage
D002 VDD 1.8 — 3.6 V FOSC  16 MHz
2.5 — 3.6 V FOSC  16 MHz
2.7 — 3.6 V FOSC  32 MHz
D002 VDD 2.3 — 5.5 V FOSC  16 MHz
2.5 — 5.5 V FOSC 16 MHz
2.7 — 5.5 V FOSC  32 MHz
RAM Data Retention(1)
D003 VDR 1.5 — — V Device in Sleep mode
D003 VDR 1.7 — — V Device in Sleep mode
Power-on Reset Release Voltage(2)
D004 VPOR — 1.6 — V BOR or LPBOR disabled(3)
D004 VPOR — 1.6 — V BOR or LPBOR disabled(3)
Power-on Reset Rearm Voltage(2)
D005 VPORR — 0.8 — V BOR or LPBOR disabled(3)
D005 VPORR — 1.5 — V BOR or LPBOR disabled(3)
VDD Rise Rate to ensure internal Power-on Reset signal(2)
D006 SVDD 0.05 — — V/ms BOR or LPBOR disabled(3)
D006 SVDD 0.05 — — V/ms BOR or LPBOR disabled(3)

Data in “Typ.” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance
only and are not tested.
Note 1: This is the limit to which VDD can be lowered in Sleep mode without losing RAM data.
2: See Figure 45-3, POR and POR REARM with Slow Rising VDD.
3: See Table 45-11 for BOR and LPBOR trip point information.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 795


PIC18(L)F25/26K83
FIGURE 45-3: POR AND POR REARM WITH SLOW RISING VDD

VDD

VPOR
VPORR
SVDD

VSS
NPOR(1)

POR REARM

VSS

TVLOW(3) TPOR(2)

Note 1: When NPOR is low, the device is held in Reset.


2: TPOR 1 s typical.
3: TVLOW 2.7 s typical.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 796


PIC18(L)F25/26K83

TABLE 45-2: SUPPLY CURRENT (IDD)(1,2,4)


PIC18LF25/26K83 Standard Operating Conditions (unless otherwise stated)

PIC18F25/26K83

Param. Typ. Conditions


Symbol Device Characteristics Min. Max. Units
No. † VDD Note
D100 IDDXT4 XT = 4 MHz — 590 1200 A 3.0V
D100 IDDXT4 XT = 4 MHz — 770 1300 A 3.0V
D100A IDDXT4 XT = 4 MHz — 390 850 A 3.0V PMD’s all 1’s
D100A IDDXT4 XT = 4 MHz — 620 950 A 3.0V PMD’s all 1’s
D101 IDDHFO16 HFINTOSC = 16 MHz — 2.3 5.0 mA 3.0V
D101 IDDHFO16 HFINTOSC = 16 MHz — 2.4 5.1 mA 3.0V
D101A IDDHFO16 HFINTOSC = 16 MHz — 1.5 3.2 mA 3.0V PMD’s all 1’s
D101A IDDHFO16 HFINTOSC = 16 MHz — 1.5 3.5 mA 3.0V PMD’s all 1’s
D102 IDDHFOPLL HFINTOSC = 64 MHz — 8.4 18.5 mA 3.0V
D102 IDDHFOPLL HFINTOSC = 64 MHz — 8.4 19 mA 3.0V
D102A IDDHFOPLL HFINTOSC = 64 MHz — 5 11 mA 3.0V PMD’s all 1’s
D102A IDDHFOPLL HFINTOSC = 64 MHz — 5 11.5 mA 3.0V PMD’s all 1’s
D103 IDDHSPLL64 HS+PLL = 64 MHz — 8.4 19 mA 3.0V
D103 IDDHSPLL64 HS+PLL = 64 MHz — 8.4 20 mA 3.0V
D103A IDDHSPLL64 HS+PLL = 64 MHz — 5 10 mA 3.0V PMD’s all 1’s
D103A IDDHSPLL64 HS+PLL = 64 MHz — 5 10 mA 3.0V PMD’s all 1’s
D104 IDDIDLE IDLE mode, HFINTOSC = 16 MHz — 1.9 4.5 mA 3.0V
D104 IDDIDLE IDLE mode, HFINTOSC = 16 MHz — 1.9 4.5 mA 3.0V
D105 IDDDOZE(3) DOZE mode, HFINTOSC = 16 MHz, Doze Ratio = 16 — 1.9 — mA 3.0V
D105 IDDDOZE(3) DOZE mode, HFINTOSC = 16 MHz, Doze Ratio = 16 — 1.9 — mA 3.0V
† Data in “Typ.” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance only and are not tested.
Note 1: The test conditions for all IDD measurements in active operation mode are: OSC1 = external square wave, from
rail-to-rail; all I/O pins are outputs driven low; MCLR = VDD; WDT disabled.
2: The supply current is mainly a function of the operating voltage and frequency. Other factors, such as I/O pin loading and switch-
ing rate, oscillator type, internal code execution pattern and temperature, also have an impact on the current consumption.
3: IDDDOZE = [IDDIDLE*(N-1)/N] + IDDHFO16/N where N = DOZE Ratio (Register 10-2).
4: PMD bits are all in the default state, no modules are disabled.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 797


PIC18(L)F25/26K83

TABLE 45-3: POWER-DOWN CURRENT (IPD)(1,2)


PIC18LF25/26K83 Standard Operating Conditions (unless otherwise stated)

Standard Operating Conditions (unless otherwise stated)


PIC18F25/26K83
VREGPM = 1

Param. Max. Max. Conditions


Symbol Device Characteristics Min. Typ.† Units
No. +85°C +125°C VDD Note
D200 IPD IPD Base — 0.07 2 6 A 3.0V

D200 IPD IPD Base — 0.4 2.5 8 A 3.0V


D200A — 20 37 45 A 3.0V VREGPM = 0
D201 IPD_WDT Low-Frequency Internal Oscillator/ — 0.9 2.9 9 A 3.0V
WDT
D201 IPD_WDT Low-Frequency Internal Oscillator/ — 1.1 3.3 9 A 3.0V
WDT
D202 IPD_SOSC Secondary Oscillator (SOSC) — 0.6 2.8 13 A 3.0V LP mode
D202 IPD_SOSC Secondary Oscillator (SOSC) — 0.8 3.2 15 A 3.0V LP mode
D203 IPD_FVR FVR — 37 70 75 A 3.0V FVRCON = 0x81 or 0x84
D203 IPD_FVR FVR — 30 70 76 A 3.0V FVRCON = 0x81 or 0x84
D204 IPD_BOR Brown-out Reset (BOR) — 9.4 16 18 A 3.0V
D204 IPD_BOR Brown-out Reset (BOR) — 9.4 17 19 A 3.0V
D205 IPD_LPBOR Low-Power Brown-out Reset (LPBOR) — 0.2 3 6 A 3.0V
D205 IPD_LPBOR Low-Power Brown-out Reset (LPBOR) — 0.5 3 5 A 3.0V
D206 IPD_HLVD High/Low Voltage Detect (HLVD) — 9.5 16 19 A 3.0V
D206 IPD_HLVD High/Low Voltage Detect (HLVD) — 9.7 17 20 A 3.0V
D207 IPD_ADCA ADC - Active — 400 — — A 3.0V ADC is converting (4)
D207 IPD_ADCA ADC - Active — 400 — — A 3.0V ADC is converting (4)
D208 IPD_CMP Comparator — 33 50 55 A 3.0V
D208 IPD_CMP Comparator — 30 50 60 A 3.0V
† Data in “Typ.” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance only and are not
tested.
Note 1: The peripheral current is the sum of the base IDD and the additional current consumed when this peripheral is enabled. The
peripheral ∆ current can be determined by subtracting the base IDD or IPD current from this limit. Max. values should be used
when calculating total current consumption.
2: The power-down current in Sleep mode does not depend on the oscillator type. Power-down current is measured with the part
in Sleep mode with all I/O pins in high-impedance state and tied to VSS.
3: All peripheral currents listed are on a per-peripheral basis if more than one instance of a peripheral is available.
4: ADC clock source is FRC.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 798


PIC18(L)F25/26K83

TABLE 45-4: I/O PORTS


Standard Operating Conditions (unless otherwise stated)

Param
Sym. Characteristic Min. Typ† Max. Units Conditions
No.

VIL Input Low Voltage


I/O PORT:
D300 with TTL buffer — — 0.8 V 4.5V  VDD  5.5V
D301 — — 0.15 VDD V 1.8V  VDD  4.5V
D302 with Schmitt Trigger buffer — — 0.2 VDD V 2.0V  VDD  5.5V
D303 with I2C levels — — 0.3 VDD V
D304 with SMBus 2.0 — — 0.8 V 2.7V  VDD  5.5V
D305 with SMBus 3.0 — — 0.8 V 1.8V  VDD  5.5V
D306 MCLR — — 0.2 VDD V
VIH Input High Voltage
I/O PORT:
D320 with TTL buffer 2.0 — — V 4.5V  VDD 5.5V
D321 0.25 VDD + — — V 1.8V  VDD  4.5V
0.8
D322 with Schmitt Trigger buffer 0.8 VDD — — V 2.0V  VDD  5.5V
D323 with I2C levels 0.7 VDD — — V
D324 with SMBus 2.0 2.1 — — V 2.7V  VDD  5.5V
D325 with SMBus 3.0 1.35 — — V 1.8V  VDD  5.5V
D326 MCLR 0.7 VDD — — V
IIL Input Leakage Current(1)
D340 I/O Ports — ±5 ± 125 nA VSS  VPIN  VDD,
Pin at high-impedance, 85°C
D341 — ±5 ± 1000 nA VSS  VPIN  VDD,
Pin at high-impedance, 125°C
D342 MCLR(2) — ± 50 ± 200 nA VSS  VPIN  VDD,
Pin at high-impedance, 85°C
IPUR Weak Pull-up Current
D350 25 120 200 A VDD = 3.0V, VPIN = VSS
VOL Output Low Voltage
D360 I/O ports — — 0.6 V IOL = 10.0mA, VDD = 3.0V
VOH Output High Voltage
D370 I/O ports VDD - 0.7 — — V IOH = 6.0 mA, VDD = 3.0V
D380 CIO All I/O pins — 5 50 pF
†Data in “Typ” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance only and are
not tested.
Note 1: Negative current is defined as current sourced by the pin.
2: The leakage current on the MCLR pin is strongly dependent on the applied voltage level. The specified levels represent
normal operating conditions. Higher leakage current may be measured at different input voltages.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 799


PIC18(L)F25/26K83

TABLE 45-5: MEMORY PROGRAMMING SPECIFICATIONS


Standard Operating Conditions (unless otherwise stated)
Param
Sym. Characteristic Min. Typ† Max. Units Conditions
No.
Data EEPROM Memory Specifications
MEM20 ED DataEE Byte Endurance 100k — — E/W -40C  TA  +85C
MEM21 TD_RET Characteristic Retention — 40 — Year Provided no other
specifications are violated
MEM22 ND_REF Total Erase/Write Cycles before 1M 10M — E/W -40C  TA  +60C
Refresh 500k — — -40C  TA  +85C
MEM23 VD_RW VDD for Read or Erase/Write VDDMIN — VDDMAX V
operation
MEM24 TD_BEW Byte Erase and Write Cycle Time — 4.0 5.0 ms
Program Flash Memory Specifications
MEM30 EP Memory Cell Endurance 10k — — E/W -40C  TA  +85C
(Note 1)
MEM32 TP_RET Characteristic Retention — 40 — Year Provided no other
specifications are violated

MEM33 VP_RD VDD for Read operation VDDMIN — VDDMAX V


MEM34 VP_REW VDD for Row Erase or Write VDDMIN — VDDMAX V
operation
MEM35 TP_REW Self-Timed Row Erase or Self-Timed — 2.0 2.5 ms
Write
† Data in “Typ” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance only and are
not tested.
Note 1: Memory Cell Endurance for the Program memory is defined as: One Row Erase operation and one Self-Timed Write.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 800


PIC18(L)F25/26K83
TABLE 45-6: THERMAL CHARACTERISTICS
Standard Operating Conditions (unless otherwise stated)
Param
Sym. Characteristic Typ. Units Conditions
No.

TH01 JA Thermal Resistance Junction to Ambient 60 C/W 28-pin SPDIP package
80 C/W 28-pin SOIC package
90 C/W 28-pin SSOP package
27.5 C/W 28-pin UQFN 4x4 mm package
27.5 C/W 28-pin QFN 6x6mm package
TH02 JC Thermal Resistance Junction to Case 31.4 C/W 28-pin SPDIP package
24 C/W 28-pin SOIC package
24 C/W 28-pin SSOP package
24 C/W 28-pin UQFN 4x4mm package
24 C/W 28-pin QFN 6x6mm package
TH03 TJMAX Maximum Junction Temperature 150 C
TH04 PD Power Dissipation — W PD = PINTERNAL + PI/O(3)
TH05 PINTERNAL Internal Power Dissipation — W PINTERNAL = IDD x VDD(1)
TH06 PI/O I/O Power Dissipation — W PI/O =  (IOL * VOL) +  (IOH * (VDD - VOH))
TH07 PDER Derated Power — W PDER = PDMAX (TJ - TA)/JA(2)
Note 1: IDD is current to run the chip alone without driving any load on the output pins.
2: TA = Ambient Temperature, TJ = Junction Temperature
3: See absolute maximum ratings for total power dissipation.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 801


PIC18(L)F25/26K83
45.4 AC Characteristics

FIGURE 45-4: LOAD CONDITIONS

Rev. 10-000133A
8/1/2013

Load Condition

Pin

CL

VSS

Legend: CL=50 pF for all pins

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 802


PIC18(L)F25/26K83
FIGURE 45-5: CLOCK TIMING
Q4 Q1 Q2 Q3 Q4 Q1

CLKIN
OS1 OS2 OS2

OS20

CLKOUT
(CLKOUT Mode)

Note 1: See Table 45-7.

TABLE 45-7: EXTERNAL CLOCK/OSCILLATOR TIMING REQUIREMENTS


Standard Operating Conditions (unless otherwise stated)

Param
Sym. Characteristic Min. Typ† Max. Units Conditions
No.
ECL Oscillator
OS1 FECL Clock Frequency — — 500 kHz
OS2 TECL_DC Clock Duty Cycle 40 — 60 %
ECM Oscillator
OS3 FECM Clock Frequency — — 4 MHz
OS4 TECM_DC Clock Duty Cycle 40 — 60 %
ECH Oscillator
OS5 FECH Clock Frequency — — 32 MHz
OS6 TECH_DC Clock Duty Cycle 40 — 60 %
LP Oscillator
OS7 FLP Clock Frequency — — 100 kHz Note 4
XT Oscillator
OS8 FXT Clock Frequency — — 4 MHz Note 4
HS Oscillator
OS9 FHS Clock Frequency — — 20 MHz Note 4
Secondary Oscillator
OS10 FSEC Clock Frequency 32.4 32.768 33.1 kHz
System Oscillator
OS20 FOSC System Clock Frequency — — 64 MHz (Note 2, Note 3)
* These parameters are characterized but not tested.
† Data in “Typ” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance only and are
not tested.
Note 1: Instruction cycle period (TCY) equals four times the input oscillator time base period. All specified values are based on
characterization data for that particular oscillator type under standard operating conditions with the device executing
code. Exceeding these specified limits may result in an unstable oscillator operation and/or higher than expected
current consumption. All devices are tested to operate at “min” values with an external clock applied to OSC1 pin.
When an external clock input is used, the “max” cycle time limit is “DC” (no clock) for all devices.
2: The system clock frequency (FOSC) is selected by the “main clock switch controls” as described in Section 10.0
“Power-Saving Operation Modes”.
3: The system clock frequency (FOSC) must meet the voltage requirements defined in the Section 45.2 “Standard
Operating Conditions”.
4: LP, XT and HS oscillator modes require an appropriate crystal or resonator to be connected to the device. For clocking
the device with the external square wave, one of the EC mode selections must be used.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 803


PIC18(L)F25/26K83
TABLE 45-7: EXTERNAL CLOCK/OSCILLATOR TIMING REQUIREMENTS (CONTINUED)
Standard Operating Conditions (unless otherwise stated)

Param
Sym. Characteristic Min. Typ† Max. Units Conditions
No.
OS21 FCY Instruction Frequency — FOSC/4 — MHz
OS22 TCY Instruction Period 62.5 1/FCY — ns
* These parameters are characterized but not tested.
† Data in “Typ” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance only and are
not tested.
Note 1: Instruction cycle period (TCY) equals four times the input oscillator time base period. All specified values are based on
characterization data for that particular oscillator type under standard operating conditions with the device executing
code. Exceeding these specified limits may result in an unstable oscillator operation and/or higher than expected
current consumption. All devices are tested to operate at “min” values with an external clock applied to OSC1 pin.
When an external clock input is used, the “max” cycle time limit is “DC” (no clock) for all devices.
2: The system clock frequency (FOSC) is selected by the “main clock switch controls” as described in Section 10.0
“Power-Saving Operation Modes”.
3: The system clock frequency (FOSC) must meet the voltage requirements defined in the Section 45.2 “Standard
Operating Conditions”.
4: LP, XT and HS oscillator modes require an appropriate crystal or resonator to be connected to the device. For clocking
the device with the external square wave, one of the EC mode selections must be used.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 804


PIC18(L)F25/26K83
TABLE 45-8: INTERNAL OSCILLATOR PARAMETERS(1)
Standard Operating Conditions (unless otherwise stated)

Param
Sym. Characteristic Min. Typ† Max. Units Conditions
No.
OS50 FHFOSC Precision Calibrated HFINTOSC — 4 — MHz (Note 2)
Frequency 8
12
16
48
64
OS51 FHFOSCLP Low-Power Optimized HFINTOSC 0.93 1 1.07 MHz
Frequency 1.86 2 2.14 MHz
OS53* FLFOSC Internal LFINTOSC Frequency — 31 — kHz
OS54* THFOSCST HFINTOSC — 11 20 s VREGPM = 0
Wake-up from Sleep Start-up — 50 — s VREGPM = 1
Time
OS56 TLFOSCST LFINTOSC — 0.2 — ms
Wake-up from Sleep Start-up Time
*These parameters are characterized but not tested.
†Data in “Typ” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance
only and are not tested.
Note 1: To ensure these oscillator frequency tolerances, VDD and VSS must be capacitively decoupled as close to
the device as possible. 0.1 F and 0.01 F values in parallel are recommended.
2: See Figure 45-6: Precision Calibrated HFINTOSC Frequency Accuracy Over Device VDD and Tempera-
ture.

FIGURE 45-6: PRECISION CALIBRATED HFINTOSC FREQUENCY ACCURACY OVER DEVICE


VDD AND TEMPERATURE

125

± 5%

85

± 3%
Temperature (°C)

60

± 2%

0
± 5%

-40
1.8 2.0 2.3 3.0 3.5 4.0 4.5 5.0 5.5

VDD (V)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 805


PIC18(L)F25/26K83
TABLE 45-9: PLL SPECIFICATIONS
Standard Operating Conditions (unless otherwise stated) VDD 2.5V
Param
Sym. Characteristic Min. Typ† Max. Units Conditions
No.
PLL01 FPLLIN PLL Input Frequency Range 4 — 16 MHz
PLL02 FPLLOUT PLL Output Frequency Range 16 — 64 MHz Note 1
PLL03 TPLLST PLL Lock Time from Start-up — 200 — s
PLL04 FPLLJIT PLL Output Frequency Stability (Jitter) -0.25 — 0.25 %
* These parameters are characterized but not tested.
† Data in “Typ” column is at 5V, 25C unless otherwise stated. These parameters are for design guidance
only and are not tested.
Note 1: The output frequency of the PLL must meet the FOSC requirements listed in Parameter D002.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 806


PIC18(L)F25/26K83
FIGURE 45-7: CLKOUT AND I/O TIMING

Cycle Write Fetch Read Execute


Q4 Q1 Q2 Q3
FOSC
IO1 IO2
IO10
CLKOUT
IO8 IO4 IO7
IO5
I/O pin
(Input)
IO3
I/O pin Old Value New Value
(Output)
IO7, IO8

TABLE 45-10: I/O AND CLKOUT TIMING SPECIFICATIONS


Standard Operating Conditions (unless otherwise stated)
Param
Sym. Characteristic Min. Typ† Max. Units Conditions
No.
IO1* TCLKOUTH CLKOUT rising edge delay (rising edge — — 70 ns
Fosc (Q1 cycle) to falling edge CLKOUT
IO2* TCLKOUTL CLKOUT falling edge delay (rising edge — — 72 ns
Fosc (Q3 cycle) to rising edge CLKOUT
IO3* TIO_VALID Port output valid time (rising edge Fosc — 50 70 ns
(Q1 cycle) to port valid)
IO4* TIO_SETUP Port input setup time (Setup time before 20 — — ns
rising edge Fosc – Q2 cycle)
IO5* TIO_HOLD Port input hold time (Hold time after rising 50 — — ns
edge Fosc – Q2 cycle)
IO6* TIOR_SLREN Port I/O rise time, slew rate enabled — 25 — ns VDD = 3.0V
IO7* TIOR_SLRDIS Port I/O rise time, slew rate disabled — 5 — ns VDD = 3.0V
IO8* TIOF_SLREN Port I/O fall time, slew rate enabled — 25 — ns VDD = 3.0V
IO9* TIOF_SLRDIS Port I/O fall time, slew rate disabled — 5 — ns VDD = 3.0V
IO10* TINT INT pin high or low time to trigger an 25 — — ns
interrupt

IO11* TIOC Interrupt-on-Change minimum high or low 25 — — ns


time to trigger interrupt
*These parameters are characterized but not tested.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 807


PIC18(L)F25/26K83
FIGURE 45-8: RESET, WATCHDOG TIMER, OSCILLATOR START-UP TIMER AND POWER-UP
TIMER TIMING

VDD

MCLR

RST01
Internal
POR

RST04
PWRT
Time-out RST05
OSC
Start-up Time

Internal Reset(1)

Watchdog Timer
Reset(1)
RST03
RST02
RST02
I/O pins

Note 1: Asserted low.

FIGURE 45-9: BROWN-OUT RESET TIMING AND CHARACTERISTICS

VDD
VBOR and VHYST
VBOR

(Device in Brown-out Reset) (Device not in Brown-out Reset)

RST08

Reset
RST04(1)
(due to BOR)

Note 1: Delay depends on PWRTS<1:0> Configuration bits.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 808


PIC18(L)F25/26K83
TABLE 45-11: RESET, WDT, OSCILLATOR START-UP TIMER, POWER-UP TIMER, BROWN-OUT
RESET AND LOW-POWER BROWN-OUT RESET SPECIFICATIONS
Standard Operating Conditions (unless otherwise stated)

Param
Sym. Characteristic Min. Typ† Max. Units Conditions
No.

RST01* TMCLR MCLR Pulse Width Low to ensure Reset 2 — — s


RST02* TIOZ I/O high-impedance from Reset detection — — 2 s
RST03 TWDT Watchdog Timer Time-out Period — 16 — ms 1:512 Prescaler
RST04* TPWRT Power-up Timer Period — 1 — ms PWRTS = 00
16 ms PWRTS = 01
64 ms PWRTS = 10
RST05 TOST Oscillator Start-up Timer Period(1,2) — 1024 — TOSC
RST06 VBOR Brown-out Reset Voltage(4) 2.7 2.85 3.0 V BORV = 00
2.55 2.7 2.85 V BORV = 01
2.3 2.45 2.6 V BORV = 10
2.3 2.45 2.6 V BORV = 11 (PIC18Fxxx)
1.8 1.9 2.05 V BORV = 11 (PIC18LFxxx)
RST07 VBORHYS Brown-out Reset Hysteresis — 40 — mV
RST08 TBORDC Brown-out Reset Response Time — 3 — s
RST09 VLPBOR Low-Power Brown-out Reset Voltage 1.8 1.9 2.2 V
*These parameters are characterized but not tested.
†Data in “Typ” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance only and are not
tested.
Note 1: By design, the Oscillator Start-up Timer (OST) counts the first 1024 cycles, independent of frequency.
2: To ensure these voltage tolerances, VDD and VSS must be capacitively decoupled as close to the device as possible.
0.1 F and 0.01 F values in parallel are recommended.

TABLE 45-12: HIGH/LOW-VOLTAGE DETECT CHARACTERISTICS


Standard Operating Conditions (unless otherwise stated)
Param. No. Symbol Characteristic Min. Typ† Max. Units Conditions
HLVD01 VDET Voltage Detection — 1.90 — V HLVDSEL<3:0>=0000
— 2.10 — V HLVDSEL<3:0>=0001
— 2.25 — V HLVDSEL<3:0>=0010
— 2.50 — V HLVDSEL<3:0>=0011
— 2.60 — V HLVDSEL<3:0>=0100
— 2.75 — V HLVDSEL<3:0>=0101
— 2.90 — V HLVDSEL<3:0>=0110
— 3.15 — V HLVDSEL<3:0>=0111
— 3.35 — V HLVDSEL<3:0>=1000
— 3.60 — V HLVDSEL<3:0>=1001
— 3.75 — V HLVDSEL<3:0>=1010
— 4.00 — V HLVDSEL<3:0>=1011
— 4.20 — V HLVDSEL<3:0>=1100
— 4.35 — V HLVDSEL<3:0>=1101
— 4.65 — V HLVDSEL<3:0>=1110

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 809


PIC18(L)F25/26K83
TABLE 45-13: ANALOG-TO-DIGITAL CONVERTER (ADC) ACCURACY SPECIFICATIONS(1,2):
Operating Conditions (unless otherwise stated)
VDD = 3.0V, TA = 25°C, TAD = 1s
Param
Sym. Characteristic Min. Typ† Max. Units Conditions
No.
AD01 NR Resolution — — 12 bit
AD02 EIL Integral Error — ±0.1 ±2.0 LSb ADCREF+ = 3.0V, ADCREF-= 0V
AD03 EDL Differential Error — ±0.1 ±1.0 LSb ADCREF+ = 3.0V, ADCREF-= 0V
AD04 EOFF Offset Error — 0.5 6.0 LSb ADCREF+ = 3.0V, ADCREF-= 0V
AD05 EGN Gain Error — ±0.2 ±6.0 LSb ADCREF+ = 3.0V, ADCREF-= 0V
AD06 VADREF ADC Reference Voltage 1.8 — VDD V
(ADREF+ - ADREF-)
AD07 VAIN Full-Scale Range ADREF- — ADREF+ V
AD08 ZAIN Recommended Impedance of — 10 — k
Analog Voltage Source
AD09 RVREF ADC Voltage Reference Ladder — 50 — k Note 3
Impedance
*These parameters are characterized but not tested.
†Data in “Typ” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance only and are not
tested.
Note 1: Total Absolute Error is the sum of the offset, gain and integral non-linearity (INL) errors.
2: The ADC conversion result never decreases with an increase in the input and has no missing codes.
3: This is the impedance seen by the VREF pads when the external reference pads are selected.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 810


PIC18(L)F25/26K83
TABLE 45-14: ANALOG-TO-DIGITAL CONVERTER (ADC) CONVERSION TIMING SPECIFICATIONS
Standard Operating Conditions (unless otherwise stated)

Param
Sym. Characteristic Min. Typ† Max. Units Conditions
No.
AD20 TAD ADC Clock Period 1 — 9 s Using FOSC as the ADC clock
source ADOCS = 0
AD21 — 2 — s Using FRC as the ADC clock
source ADOCS = 1
AD22 TCNV Conversion Time(1) — 13+3 TAD — TAD Set of GO/DONE bit to Clear of GO/
DONE bit
AD23 TACQ Acquisition Time — 2 — s
AD24 THCD Sample and Hold Capacitor 3 — — TAD FOSC-based clock source
Disconnect Time FRC-based clock source
*
These parameters are characterized but not tested.

Data in “Typ” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance only and are not
tested.
Note 1: Does not apply for the ADCRC oscillator.

FIGURE 45-10: ADC CONVERSION TIMING (ADC CLOCK FOSC-BASED)


Rev. 10-000321A
12/16/2016

BSF ADCON0, GO 1 TCY

AD24 AD22
Q4
AD20

ADC_clk

ADC Data 9 8 7 6 3 2 1 0

ADRES OLD DATA NEW DATA

ADIF 1 TCY

GO DONE

Sampling Stopped
Sample AD23

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 811


PIC18(L)F25/26K83
FIGURE 45-11: ADC CONVERSION TIMING (ADC CLOCK FROM ADCRC)

BSF ADCON0, GO
AD133 1 TCY
AD131
Q4
AD130
ADC_clk

ADC Data 9 8 7 6 3 2 1 0

ADRES OLD_DATA NEW_DATA

ADIF 1 TCY

GO DONE

AD132 Sampling Stopped


Sample

Note 1: If the ADC clock source is selected as ADCRC, a time of TCY is added before the ADC clock starts. This allows
the SLEEP instruction to be executed.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 812


PIC18(L)F25/26K83
TABLE 45-15: COMPARATOR SPECIFICATIONS
Operating Conditions (unless otherwise stated)
VDD = 3.0V, TA = 25°C

Param
Sym. Characteristics Min. Typ. Max. Units Comments
No.
CM01 VIOFF Input Offset Voltage — — ±40 mV VICM = VDD/2
CM02 VICM Input Common Mode Range GND — VDD V
CM03 CMRR Common Mode Input Rejection Ratio — 50 — dB
CM04 VHYST Comparator Hysteresis 10 25 40 mV
CM05 TRESP(1) Response Time, Rising Edge — 300 600 ns
Response Time, Falling Edge — 220 500 ns
* These parameters are characterized but not tested.
Note 1: Response time measured with one comparator input at VDD/2, while the other input transitions from VSS to VDD.
2: A mode change includes changing any of the control register values, including module enable.

TABLE 45-16: 5-BIT DAC SPECIFICATIONS


Standard Operating Conditions (unless otherwise stated)
VDD = 3.0V, TA = 25°C

Param
Sym. Characteristics Min. Typ. Max. Units Comments
No.

DSB01 VLSB Step Size — (VDACREF+ -VDACREF-) / — V


32
DSB01 VACC Absolute Accuracy — —  0.5 LSb
DSB03* RUNIT Unit Resistor Value — 5000 — 
DSB04* TST Settling Time(1) — — 10 s
* These parameters are characterized but not tested.
† Data in “Typ” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance only and are not tested.
Note 1: Settling time measured while DACR<4:0> transitions from ‘00000’ to ‘01111’.

TABLE 45-17: FIXED VOLTAGE REFERENCE (FVR) SPECIFICATIONS


Standard Operating Conditions (unless otherwise stated)

Param.
Symbol Characteristic Min. Typ. Max. Units Conditions
No.
FVR01 VFVR1 1x Gain (1.024V) -4 — +4 % VDD  2.5V, -40°C to 85°C
FVR02 VFVR2 2x Gain (2.048V) -4 — +4 % VDD  2.5V, -40°C to 85°C
FVR03 VFVR4 4x Gain (4.096V) -5 — +5 % VDD  4.75V, -40°C to 85°C
FVR04 TFVRST FVR Start-up Time — 25 — us

TABLE 45-18: ZERO CROSS DETECT (ZCD) SPECIFICATIONS


Standard Operating Conditions (unless otherwise stated)
VDD = 3.0V, TA = 25°C

Param.
Sym. Characteristics Min Typ† Max Units Comments
No.
ZC01 VPINZC Voltage on Zero Cross Pin — 0.75 — V
ZC02 IZCD_MAX Maximum source or sink current — — 600 A
ZC03 TRESPH Response Time, Rising Edge — 1 — s
TRESPL Response Time, Falling Edge — 1 — s
† Data in “Typ” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance only and are not tested.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 813


PIC18(L)F25/26K83
FIGURE 45-12: TIMER0 AND TIMER1 EXTERNAL CLOCK TIMINGS

T0CKI

40 41

42

T1CKI
45 46

47 49

TMR0 or
TMR1

TABLE 45-19: TIMER0 AND TIMER1 EXTERNAL CLOCK REQUIREMENTS


Standard Operating Conditions (unless otherwise stated)
Operating Temperature -40°C TA +125°C
Param
Sym. Characteristic Min. Typ† Max. Units Conditions
No.
40* TT0H T0CKI High Pulse Width No Prescaler 0.5 TCY + 20 — — ns
With Prescaler 10 — — ns
41* TT0L T0CKI Low Pulse Width No Prescaler 0.5 TCY + 20 — — ns
With Prescaler 10 — — ns
42* TT0P T0CKI Period Greater of: — — ns N = prescale value
20 or TCY + 40
N
45* TT1H T1CKI High Synchronous, No Prescaler 0.5 TCY + 20 — — ns
Time Synchronous, with Prescaler 15 — — ns
Asynchronous 30 — — ns
46* TT1L T1CKI Low Synchronous, No Prescaler 0.5 TCY + 20 — — ns
Time Synchronous, with Prescaler 15 — — ns
Asynchronous 30 — — ns
47* TT1P T1CKI Input Synchronous Greater of: — — ns N = prescale value
Period 30 or TCY + 40
N
Asynchronous 60 — — ns
49* TCKEZTMR1 Delay from External Clock Edge to Timer 2 TOSC — 7 TOSC — Timers in Sync
Increment mode
* These parameters are characterized but not tested.
† Data in “Typ” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance only and are not
tested.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 814


PIC18(L)F25/26K83
FIGURE 45-13: CAPTURE/COMPARE/PWM TIMINGS (CCP)
CCPx
(Capture mode)

CC01 CC02

CC03

Note: Refer to Figure 45-4 for load conditions.

TABLE 45-20: CAPTURE/COMPARE/PWM REQUIREMENTS (CCP)


Standard Operating Conditions (unless otherwise stated)
Operating Temperature -40°C  TA  +125°C
Param
Sym. Characteristic Min. Typ† Max. Units Conditions
No.
CC01* TccL CCPx Input Low Time No Prescaler 0.5TCY + 20 — — ns
With Prescaler 20 — — ns
CC02* TccH CCPx Input High Time No Prescaler 0.5TCY + 20 — — ns
With Prescaler 20 — — ns
CC03* TccP CCPx Input Period 3TCY + 40 — — ns N = prescale value
N
* These parameters are characterized but not tested.
† Data in “Typ” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance only and are not
tested.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 815


PIC18(L)F25/26K83
FIGURE 45-14: SPI MASTER MODE TIMING (CKE = 0, SMP = 0)

SS
SP81
SCK
(CKP = 0)
SP71 SP72
SP78 SP79

SCK
(CKP = 1)

SP79 SP78
SP80

SDO MSb bit 6 - - - - - -1 LSb

SP75, SP76

SDI MSb In bit 6 - - - -1 LSb In

SP74
SP73

Note: Refer to Figure 45-4 for load conditions.

FIGURE 45-15: SPI MASTER MODE TIMING (CKE = 1, SMP = 1)

SS

SP81
SCK
(CKP = 0)
SP71 SP72
SP79
SP73
SCK
(CKP = 1)

SP80
SP78

SDO MSb bit 6 - - - - - -1 LSb

SP75, SP76

SDI MSb In bit 6 - - - -1 LSb In

SP74

Note: Refer to Figure 45-4 for load conditions.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 816


PIC18(L)F25/26K83
FIGURE 45-16: SPI SLAVE MODE TIMING (CKE = 0)

SS

SP70

SCK SP83
(CKP = 0)
SP71 SP72
SP78 SP79

SCK
(CKP = 1)

SP79 SP78
SP80

SDO MSb bit 6 - - - - - -1 LSb

SP75, SP76 SP77

SDI MSb In bit 6 - - - -1 LSb In

SP74

SP73

Note: Refer to Figure 45-4 for load conditions.

FIGURE 45-17: SPI SLAVE MODE TIMING (CKE = 1)

SP82
SS

SP70
SCK SP83
(CKP = 0)

SP71 SP72

SCK
(CKP = 1)

SP80

SDO MSb bit 6 - - - - - -1 LSb

SP77
SP75, SP76

SDI
MSb In bit 6 - - - -1 LSb In

SP74

Note: Refer to Figure 45-4 for load conditions.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 817


PIC18(L)F25/26K83
TABLE 45-21: SPI MODE REQUIREMENTS
Standard Operating Conditions (unless otherwise stated)

Param
Symbol Characteristic Min. Typ† Max. Units Conditions
No.

SP70* TSSL2SCH, SS to SCK or SCK input 2.25*TCY — — ns


TSSL2SCL
SP71* TSCH SCK input high time (Slave mode) TCY + 20 — — ns
SP72* TSCL SCK input low time (Slave mode) TCY + 20 — — ns
SP73* TDIV2SCH, Setup time of SDI data input to SCK 100 — — ns
TDIV2SCL edge
SP74* TSCH2DIL, Hold time of SDI data input to SCK edge 100 — — ns
TSCL2DIL
SP75* TDOR SDO data output rise time — 10 25 ns 3.0V  VDD  5.5V
— 25 50 ns 1.8V  VDD  5.5V
SP76* TDOF SDO data output fall time — 10 25 ns
SP77* TSSH2DOZ SS to SDO output high-impedance 10 — 50 ns
SP78* TSCR SCK output rise time — 10 25 ns 3.0V  VDD  5.5V
(Master mode) — 25 50 ns 1.8V  VDD  5.5V
SP79* TSCF SCK output fall time (Master mode) — 10 25 ns
SP80* TSCH2DOV, SDO data output valid after SCK edge — — 50 ns 3.0V  VDD  5.5V
TSCL2DOV — — 145 ns 1.8V  VDD  5.5V
SP81* TDOV2SCH, SDO data output setup to SCK edge 1 Tcy — — ns
TDOV2SCL
SP82* TSSL2DOV SDO data output valid after SS edge — — 50 ns
SP83* TSCH2SSH, SS after SCK edge 1.5 TCY + 40 — — ns
TSCL2SSH
* These parameters are characterized but not tested.
† Data in “Typ” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance
only and are not tested.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 818


PIC18(L)F25/26K83
FIGURE 45-18: I2C BUS START/STOP BITS TIMING

SCL
SP91 SP93
SP90 SP92

SDA

Start Stop
Condition Condition

Note: Refer to Figure 45-4 for load conditions.

TABLE 45-22: I2C BUS START/STOP BITS REQUIREMENTS


Standard Operating Conditions (unless otherwise stated)

Param
Symbol Characteristic Min. Typ Max. Units Conditions
No.

SP90* TSU:STA Start condition 100 kHz mode 4700 — — ns Only relevant for Repeated Start
Setup time 400 kHz mode 600 — — condition
SP91* THD:STA Start condition 100 kHz mode 4000 — — ns After this period, the first clock
Hold time 400 kHz mode 600 — — pulse is generated

SP92* TSU:STO Stop condition 100 kHz mode 4700 — — ns


Setup time 400 kHz mode 600 — —
SP93 THD:STO Stop condition 100 kHz mode 4000 — — ns
Hold time 400 kHz mode 600 — —
* These parameters are characterized but not tested.

FIGURE 45-19: I2C BUS DATA TIMING

SP103 SP100 SP102


SP101

SCL
SP90
SP106
SP107
SP91 SP92
SDA
In
SP110
SP109
SP109
SDA
Out

Note: Refer to Figure 45-4 for load conditions.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 819


PIC18(L)F25/26K83
TABLE 45-23: I2C BUS DATA REQUIREMENTS
Standard Operating Conditions (unless otherwise stated)

Param.
Symbol Characteristic Min. Max. Units Conditions
No.
SP100* THIGH Clock high time 100 kHz mode 4.0 — s Device must operate at a
minimum of 1.5 MHz
400 kHz mode 0.6 — s Device must operate at a
minimum of 10 MHz
SSP module 1.5TCY —
SP101* TLOW Clock low time 100 kHz mode 4.7 — s Device must operate at a
minimum of 1.5 MHz
400 kHz mode 1.3 — s Device must operate at a
minimum of 10 MHz
SSP module 1.5TCY —
SP102* TR SDA and SCL rise 100 kHz mode — 1000 ns
time 400 kHz mode 20 + 0.1CB 300 ns CB is specified to be from
10-400 pF
SP103* TF SDA and SCL fall time 100 kHz mode — 250 ns
400 kHz mode 20 + 0.1CB 250 ns CB is specified to be from
10-400 pF
SP106* THD:DAT Data input hold time 100 kHz mode 0 — ns
400 kHz mode 0 0.9 s
SP107* TSU:DAT Data input setup time 100 kHz mode 250 — ns (Note 2)
400 kHz mode 100 — ns
SP109* TAA Output valid from 100 kHz mode — 3500 ns (Note 1)
clock 400 kHz mode — — ns
SP110* TBUF Bus free time 100 kHz mode 4.7 — s Time the bus must be free
400 kHz mode 1.3 — s before a new transmission
can start
SP111 CB Bus capacitive loading — 400 pF
* These parameters are characterized but not tested.
Note 1: As a transmitter, the device must provide this internal minimum delay time to bridge the undefined region (min. 300 ns)
of the falling edge of SCL to avoid unintended generation of Start or Stop conditions.
2: A Fast mode (400 kHz) I2C bus device can be used in a Standard mode (100 kHz) I2C bus system, but the requirement
TSU:DAT 250 ns must then be met. This will automatically be the case if the device does not stretch the low period of
the SCL signal. If such a device does stretch the low period of the SCL signal, it must output the next data bit to the SDA
line TR max. + TSU:DAT = 1000 + 250 = 1250 ns (according to the Standard mode I2C bus specification), before the SCL
line is released.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 820


PIC18(L)F25/26K83
46.0 DC AND AC
CHARACTERISTICS GRAPHS
AND TABLES
Graphs and tables are not available at this time.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 821


PIC18(L)F25/26K83
47.0 PACKAGING INFORMATION
Package Marking Information

28-Lead SPDIP (.300”) Example

PIC18F25K83
/SP e3
1526017

28-Lead SOIC (7.50 mm) Example

XXXXXXXXXXXXXXXXXXXX PIC18F25K83
XXXXXXXXXXXXXXXXXXXX /SO e3
XXXXXXXXXXXXXXXXXXXX 1526017
YYWWNNN

28-Lead SSOP (5.30 mm) Example

PIC18F26K83
/SS e3
1526017

Legend: XX...X Customer-specific information or Microchip part number


Y Year code (last digit of calendar year)
YY Year code (last 2 digits of calendar year)
WW Week code (week of January 1 is week ‘01’)
NNN Alphanumeric traceability code
e3 Pb-free JEDEC® designator for Matte Tin (Sn)
* This package is Pb-free. The Pb-free JEDEC designator ( e3 )
can be found on the outer packaging for this package.

Note: In the event the full Microchip part number cannot be marked on one line, it will
be carried over to the next line, thus limiting the number of available
characters for customer-specific information.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 822


PIC18(L)F25/26K83
Package Marking Information (Continued)

28-Lead QFN (6x6 mm) Example

PIN 1 PIN 1
XXXXXXXX 18F26K83
XXXXXXXX /ML e3
YYWWNNN 1526017

28-Lead UQFN (6x6x0.5 mm) Example

PIN 1 PIN 1 PIC18


F26K83
/MX e 3

526017

Legend: XX...X Customer-specific information or Microchip part number


Y Year code (last digit of calendar year)
YY Year code (last 2 digits of calendar year)
WW Week code (week of January 1 is week ‘01’)
NNN Alphanumeric traceability code
e3 Pb-free JEDEC® designator for Matte Tin (Sn)
* This package is Pb-free. The Pb-free JEDEC designator ( e3 )
can be found on the outer packaging for this package.

Note: In the event the full Microchip part number cannot be marked on one line, it will
be carried over to the next line, thus limiting the number of available
characters for customer-specific information.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 823


PIC18(L)F25/26K83
47.1 Package Details
The following sections give the technical details of the packages.

/HDG6NLQQ\3ODVWLF'XDO,Q/LQH 63 ±PLO%RG\>63',3@
1RWH 5
( ) #( $

(  6%
,#* ##( 
 ! 6  ' (  (%(
(( 477,,,)
  )7  6

NOTE 1
E1

1 2 3

A A2

L c

A1 b1
b e eB

8(# 9.:0
)# ;)(# 9 9< =
9$)+
 '!# 9 >
!(  3.
 ( (!  ? ? 
 %%! 6  6##   / 
3#( (!   ? ?
 $%
(  $%
@%( 0  / //
 %%! 6@%( 0  > 
<"
;(  / /B 
 ( (! ;  / 
;%  6## >  
8 
;%@%( +   
; ,
;%@%( +  > 
<"
 ,  - 3 ? ? /
1RWHV
 !"#$%&'($
)"
*+$()$#(+ (%,( (  ( %

 -' (. 
 (
#( 
/ )# #%0%  ( $%) %'# 

(
$# # %'# 

(
$# ##  (& %1 
#%
 )# %( 
  
02
3.4 3# )#  
( & ("$# ,,( $(( 
 #


     
, .3

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 824


PIC18(L)F25/26K83

Note: For the most current package drawings, please see the Microchip Packaging Specification located at
http://www.microchip.com/packaging

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 825


PIC18(L)F25/26K83

Note: For the most current package drawings, please see the Microchip Packaging Specification located at
http://www.microchip.com/packaging

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 826


PIC18(L)F25/26K83

Note: For the most current package drawings, please see the Microchip Packaging Specification located at
http://www.microchip.com/packaging

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 827


PIC18(L)F25/26K83

/HDG3ODVWLF6KULQN6PDOO2XWOLQH 66 ±PP%RG\>6623@
1RWH 5
( ) #( $

(  6%
,#* ##( 
 ! 6  ' (  (%(
(( 477,,,)
  )7  6

D
N

E
E1

1 2
b
NOTE 1
e

c
A A2

φ
A1
L1 L

8(# ;;00
)# ;)(# 9 9< =
9$)+
 '!# 9 >
!(  B3.
<"
: (  ? ? 
 %%! 6  6##  B  >
(% ''   ? ?
<"
@%( 0  > >
 %%! 6@%( 0  / B
<"
;(    
5 (;( ;   
5 (
( ; 05
;%  6##  ? 
5 (  D D >D
;%@%( +  ? />
1RWHV
 !"#$%&'($
)"
*+$()$#(+ (%,( (  ( %

 )# #%0%  ( $%) %'# 

(
$# # %'# 

(
$# ##  (& %)) 
#%
/ )# %( 
  
02
3.4 3# )#  
( & ("$# ,,( $(( 
 #
054 '
 )# *$#$,( $(( 
 *'
'
)(  $
## 


     
, ./3

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 828


PIC18(L)F25/26K83

Note: For the most current package drawings, please see the Microchip Packaging Specification located at
http://www.microchip.com/packaging

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 829


PIC18(L)F25/26K83

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 830


PIC18(L)F25/26K83

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 831


PIC18(L)F25/26K83

/HDG3ODVWLF4XDG)ODW1R/HDG3DFNDJH 0/ ±[PP%RG\>4)1@
ZLWKPP&RQWDFW/HQJWK
1RWH 5
( ) #( $

(  6%
,#* ##( 
 ! 6  ' (  (%(
(( 477,,,)
  )7  6

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 832


PIC18(L)F25/26K83
g
Note: For the most current package drawings, please see the Microchip Packaging Specification located at
http://www.microchip.com/packaging

D A

B
N
NOTE 1
1
2
(DATUM A)

E
(DATUM B)

2X
0.15 C

2X
0.15 C
TOP VIEW
A

C 0.10 C
SEATING
PLANE
(A3) A1
NOTE 4
0.08 C

SIDE VIEW

4x b1
4x b2
0.10 C A B
D2 4x b1

0.10 C A B
4x b2

E2

K
2
1

N
L b 0.10 C A B
NOTE 4
e 0.05 C

BOTTOM VIEW
Microchip Technology Drawing C04-0209 Rev C Sheet 1 of 2

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 833


PIC18(L)F25/26K83

28-Lead Plastic Quad Flat, No Lead Package (MX) - 6x6x0.5mm Body [UQFN]
Ultra-Thin with 0.40 x 0.60 mm Terminal Width/Length and Corner Anchors
Note: For the most current package drawings, please see the Microchip Packaging Specification located at
http://www.microchip.com/packaging

Units MILLIMETERS
Dimension Limits MIN NOM MAX
Number of Pins N 28
Pitch e 0.65 BSC
Overall Height A 0.40 0.50 0.60
Standoff A1 0.00 0.02 0.05
Terminal Thickness (A3) 0.127 REF
Overall Width E 6.00 BSC
Exposed Pad Width E2 4.00
Overall Length D 6.00 BSC
Exposed Pad Length D2 4.00
Terminal Width b 0.35 0.40 0.45
Corner Pad b1 0.55 0.60 0.65
Corner Pad, Metal Free Zone b2 0.15 0.20 0.25
Terminal Length L 0.55 0.60 0.65
Terminal-to-Exposed Pad K 0.20 - -

Notes:
1. Pin 1 visual index feature may vary, but must be located within the hatched area.
2. Package is saw singulated
3. Dimensioning and tolerancing per ASME Y14.5M
BSC: Basic Dimension. Theoretically exact value shown without tolerances.
REF: Reference Dimension, usually without tolerance, for information purposes only.
4. Outermost portions of corner structures may vary slightly.

Microchip Technology Drawing C04-0209 Rev C Sheet 2 of 2

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 834


PIC18(L)F25/26K83

28-Lead Plastic Quad Flat, No Lead Package (MX) - 6x6 mm Body [UQFN]
With 0.60mm Contact Length And Corner Anchors
Note: For the most current package drawings, please see the Microchip Packaging Specification located at
http://www.microchip.com/packaging

C1
X2
W1

Y2

E
G
C2 T2

Y1

X1

SILK SCREEN

RECOMMENDED LAND PATTERN

Units MILLIMETERS
Dimension Limits MIN NOM MAX
Contact Pitch E 0.65 BSC
Optional Center Pad Width W1 4.05
Optional Center Pad Length T2 4.05
Contact Pad Spacing C1 5.70
Contact Pad Spacing C2 5.70
Contact Pad Width (X28) X1 0.45
Contact Pad Length (X28) Y1 1.00
Corner Pad Width (X4) X2 0.90
Corner Pad Length (X4) Y2 0.90
Distance Between Pads G 0.20
Notes:
1. Dimensioning and tolerancing per ASME Y14.5M
BSC: Basic Dimension. Theoretically exact value shown without tolerances.

Microchip Technology Drawing No. C04-2209B

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 835


PIC18(L)F25/26K83
REVISION HISTORY
Revision A (8/2017)
Initial release of the document.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 836


PIC18(L)F25/26K83
THE MICROCHIP WEBSITE CUSTOMER SUPPORT
Microchip provides online support via our website at Users of Microchip products can receive assistance
www.microchip.com. This website is used as a means through several channels:
to make files and information easily available to • Distributor or Representative
customers. Accessible by using your favorite Internet
• Local Sales Office
browser, the website contains the following information:
• Field Application Engineer (FAE)
• Product Support – Data sheets and errata,
• Technical Support
application notes and sample programs, design
resources, user’s guides and hardware support Customers should contact their distributor,
documents, latest software releases and archived representative or Field Application Engineer (FAE) for
software support. Local sales offices are also available to help
• General Technical Support – Frequently Asked customers. A listing of sales offices and locations is
Questions (FAQ), technical support requests, included in the back of this document.
online discussion groups, Microchip consultant Technical support is available through the website
program member listing at: http://www.microchip.com/support
• Business of Microchip – Product selector and
ordering guides, latest Microchip press releases,
listing of seminars and events, listings of
Microchip sales offices, distributors and factory
representatives

CUSTOMER CHANGE NOTIFICATION


SERVICE
Microchip’s customer notification service helps keep
customers current on Microchip products. Subscribers
will receive e-mail notification whenever there are
changes, updates, revisions or errata related to a
specified product family or development tool of interest.
To register, access the Microchip website at
www.microchip.com. Under “Support”, click on
“Customer Change Notification” and follow the
registration instructions.

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 837


PIC18(L)F25/26K83
PRODUCT IDENTIFICATION SYSTEM
To order or obtain information, e.g., on pricing or delivery, refer to the factory or the listed sales office.

PART NO. [X](2) - X /XX XXX


Examples:
Device Tape and Reel Temperature Package Pattern a) PIC18F25K83-E/P 301 = Extended temp.,
Option Range SPDIP package, QTP pattern #301.
b) PIC18F26K83-E/SO = Extended temp., SOIC
package.
c) PIC18F25K83T-I/ML = Tape and reel, Industrial
Device: PIC18F25K83, PIC18LF25K83 temp., QFN package.
PIC18F26K83, PIC18LF26K83

Tape and Reel Blank = standard packaging (tube or tray)


Option: T = Tape and Reel(1), (2)

Temperature E = -40C to +125C (Extended)


Range: I = -40C to +85C (Industrial)

Note 1: Tape and Reel option is available for ML,


Package: ML = 28-lead QFN 6x6mm MV, SO and SS packages with industrial
MV = 28-lead UQFN 4x4x0.5mm Temperature Range only.
SO = 28-lead SOIC
SP = 28-lead Skinny Plastic DIP 2: Tape and Reel identifier only appears in
SS = 28-lead SSOP catalog part number description. This
identifier is used for ordering purposes and
is not printed on the device package.
Pattern: QTP, SQTP, Code or Special Requirements
(blank otherwise)

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 838


PIC18(L)F25/26K83

Note the following details of the code protection feature on Microchip devices:
• Microchip products meet the specification contained in their particular Microchip Data Sheet.

• Microchip believes that its family of products is one of the most secure families of its kind on the market today, when used in the
intended manner and under normal conditions.

• There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our
knowledge, require using the Microchip products in a manner outside the operating specifications contained in Microchip’s Data
Sheets. Most likely, the person doing so is engaged in theft of intellectual property.

• Microchip is willing to work with the customer who is concerned about the integrity of their code.

• Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not
mean that we are guaranteeing the product as “unbreakable.”

Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of our
products. Attempts to break Microchip’s code protection feature may be a violation of the Digital Millennium Copyright Act. If such acts
allow unauthorized access to your software or other copyrighted work, you may have a right to sue for relief under that Act.

Information contained in this publication regarding device Trademarks


applications and the like is provided only for your convenience The Microchip name and logo, the Microchip logo, AnyRate, AVR,
and may be superseded by updates. It is your responsibility to AVR logo, AVR Freaks, BeaconThings, BitCloud, chipKIT, chipKIT
ensure that your application meets with your specifications. logo, CryptoMemory, CryptoRF, dsPIC, FlashFlex, flexPWR,
MICROCHIP MAKES NO REPRESENTATIONS OR Heldo, JukeBlox, KEELOQ, KEELOQ logo, Kleer, LANCheck, LINK
WARRANTIES OF ANY KIND WHETHER EXPRESS OR MD, maXStylus, maXTouch, MediaLB, megaAVR, MOST, MOST
IMPLIED, WRITTEN OR ORAL, STATUTORY OR logo, MPLAB, OptoLyzer, PIC, picoPower, PICSTART, PIC32
OTHERWISE, RELATED TO THE INFORMATION, logo, Prochip Designer, QTouch, RightTouch, SAM-BA, SpyNIC,
INCLUDING BUT NOT LIMITED TO ITS CONDITION, SST, SST Logo, SuperFlash, tinyAVR, UNI/O, and XMEGA are
QUALITY, PERFORMANCE, MERCHANTABILITY OR registered trademarks of Microchip Technology Incorporated in
FITNESS FOR PURPOSE. Microchip disclaims all liability the U.S.A. and other countries.
arising from this information and its use. Use of Microchip ClockWorks, The Embedded Control Solutions Company,
devices in life support and/or safety applications is entirely at EtherSynch, Hyper Speed Control, HyperLight Load, IntelliMOS,
the buyer’s risk, and the buyer agrees to defend, indemnify and mTouch, Precision Edge, and Quiet-Wire are registered
hold harmless Microchip from any and all damages, claims, trademarks of Microchip Technology Incorporated in the U.S.A.
suits, or expenses resulting from such use. No licenses are Adjacent Key Suppression, AKS, Analog-for-the-Digital Age, Any
conveyed, implicitly or otherwise, under any Microchip Capacitor, AnyIn, AnyOut, BodyCom, CodeGuard,
intellectual property rights unless otherwise stated. CryptoAuthentication, CryptoCompanion, CryptoController,
dsPICDEM, dsPICDEM.net, Dynamic Average Matching, DAM,
ECAN, EtherGREEN, In-Circuit Serial Programming, ICSP, Inter-
Chip Connectivity, JitterBlocker, KleerNet, KleerNet logo, Mindi,
MiWi, motorBench, MPASM, MPF, MPLAB Certified logo, MPLIB,
MPLINK, MultiTRAK, NetDetach, Omniscient Code Generation,
PICDEM, PICDEM.net, PICkit, PICtail, PureSilicon, QMatrix,
RightTouch logo, REAL ICE, Ripple Blocker, SAM-ICE, Serial
Quad I/O, SMART-I.S., SQI, SuperSwitcher, SuperSwitcher II,
Total Endurance, TSHARC, USBCheck, VariSense, ViewSpan,
WiperLock, Wireless DNA, and ZENA are trademarks of Microchip
Technology Incorporated in the U.S.A. and other countries.
SQTP is a service mark of Microchip Technology Incorporated in
the U.S.A.
Microchip received ISO/TS-16949:2009 certification for its worldwide
headquarters, design and wafer fabrication facilities in Chandler and Silicon Storage Technology is a registered trademark of Microchip
Tempe, Arizona; Gresham, Oregon and design centers in California Technology Inc. in other countries.
and India. The Company’s quality system processes and procedures
are for its PIC® MCUs and dsPIC® DSCs, KEELOQ® code hopping GestIC is a registered trademark of Microchip Technology
devices, Serial EEPROMs, microperipherals, nonvolatile memory and Germany II GmbH & Co. KG, a subsidiary of Microchip
analog products. In addition, Microchip’s quality system for the design Technology Inc., in other countries.
and manufacture of development systems is ISO 9001:2000 certified.
All other trademarks mentioned herein are property of their
respective companies.

QUALITY MANAGEMENT SYSTEM © 2017, Microchip Technology Incorporated, All Rights Reserved.
ISBN: 978-1-5224-2047-7
CERTIFIED BY DNV
== ISO/TS 16949 ==

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 839


Worldwide Sales and Service
AMERICAS ASIA/PACIFIC ASIA/PACIFIC EUROPE
Corporate Office Asia Pacific Office China - Xiamen Austria - Wels
2355 West Chandler Blvd. Suites 3707-14, 37th Floor Tel: 86-592-2388138 Tel: 43-7242-2244-39
Chandler, AZ 85224-6199 Tower 6, The Gateway Fax: 86-592-2388130 Fax: 43-7242-2244-393
Tel: 480-792-7200 Harbour City, Kowloon China - Zhuhai Denmark - Copenhagen
Fax: 480-792-7277 Hong Kong Tel: 86-756-3210040 Tel: 45-4450-2828
Technical Support: Tel: 852-2943-5100 Fax: 86-756-3210049 Fax: 45-4485-2829
http://www.microchip.com/ Fax: 852-2401-3431 India - Bangalore Finland - Espoo
support Tel: 91-80-3090-4444 Tel: 358-9-4520-820
Australia - Sydney
Web Address:
Tel: 61-2-9868-6733 Fax: 91-80-3090-4123 France - Paris
www.microchip.com Fax: 61-2-9868-6755 India - New Delhi Tel: 33-1-69-53-63-20
Atlanta China - Beijing Tel: 91-11-4160-8631 Fax: 33-1-69-30-90-79
Duluth, GA Tel: 86-10-8569-7000 Fax: 91-11-4160-8632
Tel: 678-957-9614 France - Saint Cloud
Fax: 86-10-8528-2104 India - Pune Tel: 33-1-30-60-70-00
Fax: 678-957-1455
China - Chengdu Tel: 91-20-3019-1500 Germany - Garching
Austin, TX Tel: 86-28-8665-5511
Tel: 512-257-3370 Japan - Osaka Tel: 49-8931-9700
Fax: 86-28-8665-7889 Tel: 81-6-6152-7160 Germany - Haan
Boston China - Chongqing Fax: 81-6-6152-9310 Tel: 49-2129-3766400
Westborough, MA Tel: 86-23-8980-9588
Tel: 774-760-0087 Japan - Tokyo Germany - Heilbronn
Fax: 86-23-8980-9500 Tel: 81-3-6880- 3770 Tel: 49-7131-67-3636
Fax: 774-760-0088
China - Dongguan Fax: 81-3-6880-3771 Germany - Karlsruhe
Chicago Tel: 86-769-8702-9880 Korea - Daegu Tel: 49-721-625370
Itasca, IL
Tel: 630-285-0071 China - Guangzhou Tel: 82-53-744-4301 Germany - Munich
Fax: 630-285-0075 Tel: 86-20-8755-8029 Fax: 82-53-744-4302 Tel: 49-89-627-144-0
China - Hangzhou Korea - Seoul Fax: 49-89-627-144-44
Dallas
Tel: 86-571-8792-8115 Tel: 82-2-554-7200 Germany - Rosenheim
Addison, TX
Tel: 972-818-7423 Fax: 86-571-8792-8116 Fax: 82-2-558-5932 or Tel: 49-8031-354-560
Fax: 972-818-2924 China - Hong Kong SAR 82-2-558-5934
Israel - Ra’anana
Tel: 852-2943-5100 Malaysia - Kuala Lumpur Tel: 972-9-744-7705
Detroit
Fax: 852-2401-3431 Tel: 60-3-6201-9857
Novi, MI Italy - Milan
Tel: 248-848-4000 China - Nanjing Fax: 60-3-6201-9859 Tel: 39-0331-742611
Tel: 86-25-8473-2460 Malaysia - Penang Fax: 39-0331-466781
Houston, TX
Tel: 281-894-5983 Fax: 86-25-8473-2470 Tel: 60-4-227-8870
Italy - Padova
China - Qingdao Fax: 60-4-227-4068
Indianapolis Tel: 39-049-7625286
Tel: 86-532-8502-7355 Philippines - Manila
Noblesville, IN Netherlands - Drunen
Tel: 317-773-8323 Fax: 86-532-8502-7205 Tel: 63-2-634-9065 Tel: 31-416-690399
Fax: 317-773-5453 China - Shanghai Fax: 63-2-634-9069 Fax: 31-416-690340
Tel: 317-536-2380 Tel: 86-21-3326-8000 Singapore
Norway - Trondheim
Fax: 86-21-3326-8021 Tel: 65-6334-8870
Los Angeles Tel: 47-7289-7561
Mission Viejo, CA China - Shenyang Fax: 65-6334-8850
Poland - Warsaw
Tel: 949-462-9523 Tel: 86-24-2334-2829 Taiwan - Hsin Chu Tel: 48-22-3325737
Fax: 949-462-9608 Fax: 86-24-2334-2393 Tel: 886-3-5778-366
Tel: 951-273-7800 Fax: 886-3-5770-955 Romania - Bucharest
China - Shenzhen
Tel: 86-755-8864-2200 Tel: 40-21-407-87-50
Raleigh, NC Taiwan - Kaohsiung
Tel: 919-844-7510 Fax: 86-755-8203-1760 Tel: 886-7-213-7830 Spain - Madrid
Tel: 34-91-708-08-90
New York, NY China - Wuhan Taiwan - Taipei
Tel: 86-27-5980-5300 Tel: 886-2-2508-8600 Fax: 34-91-708-08-91
Tel: 631-435-6000
Fax: 86-27-5980-5118 Fax: 886-2-2508-0102 Sweden - Gothenberg
San Jose, CA Tel: 46-31-704-60-40
Tel: 408-735-9110 China - Xian Thailand - Bangkok
Tel: 408-436-4270 Tel: 86-29-8833-7252 Tel: 66-2-694-1351 Sweden - Stockholm
Fax: 86-29-8833-7256 Fax: 66-2-694-1350 Tel: 46-8-5090-4654
Canada - Toronto
Tel: 905-695-1980 UK - Wokingham
Fax: 905-695-2078 Tel: 44-118-921-5800
Fax: 44-118-921-5820

 2017 Microchip Technology Inc. Preliminary DS40001943A-page 840


11/07/16

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy