电子工程世界电子工程世界电子工程世界

型号

产品描述

搜索
 

PIC18C242-I-SP

器件型号:PIC18C242-I-SP
文件大小:49625.52KB,共0页
厂商名称:MICROCHIP [Microchip Technology]
厂商官网:http://www.microchip.com/
下载文档

器件描述

PIC18C242-I-SP器件文档内容

                                                            PIC18CXX2

High Performance Microcontrollers with 10-bit A/D

High Performance RISC CPU:                                  Pin Diagrams

C compiler optimized architecture/instruction set           DIP, Windowed CERDIP
   - Source code compatible with the PIC16CXX
      instruction set                                       MCLR/VPP          1                40  RB7

Linear program memory addressing to 2 Mbytes              RA0/AN0           2                39  RB6
Linear data memory addressing to 4 Kbytes
                                                            RA1/AN1           3                38  RB5

                                                            RA2/AN2/VREF-     4                37  RB4

                                                            RA3/AN3/VREF+     5                36  RB3/CCP2*

           On-Chip Program Memory                           RA4/T0CKI         6                35  RB2/INT2

                                      On-Chip               RA5/AN4/SS/LVDIN  7     PIC18C4X2  34  RB1/INT1
                                        RAM
Device     EPROM    # Single Word                           RE0/RD/AN5        8                33  RB0/INT0
           (bytes)   Instructions      (bytes)
                                                            RE1/WR/AN6        9                32  VDD

                                                            RE2/CS/AN7        10               31  VSS

PIC18C242  16K      8192              512                   VDD               11               30  RD7/PSP7
                    16384             1536
PIC18C252  32K      8192              512                   VSS               12               29  RD6/PSP6

                                                            OSC1/CLKI         13               28  RD5/PSP5

PIC18C442  16K                                              OSC2/CLKO/RA6     14               27  RD4/PSP4

                                                            RC0/T1OSO/T1CKI   15               26  RC7/RX/DT

PIC18C452  32K      16384             1536                  RC1/T1OSI/CCP2*   16               25  RC6/TX/CK

Up to 10 MIPs operation:                                  RC2/CCP1          17               24  RC5/SDO
   - DC - 40 MHz osc./clock input
   - 4 MHz - 10 MHz osc./clock input with PLL active        RC3/SCK/SCL       18               23  RC4/SDI/SDA

16-bit wide instructions, 8-bit wide data path            RD0/PSP0          19               22  RD3/PSP3
Priority levels for interrupts
8 x 8 Single Cycle Hardware Multiplier                    RD1/PSP1          20               21  RD2/PSP2

                                                               * RB3 is the alternate pin for the CCP2 pin multiplexing.
                                                            Note: Pin compatible with 40-pin PIC16C7X devices.

Peripheral Features:                                        Analog Features:

High current sink/source 25 mA/25 mA                      Compatible 10-bit Analog-to-Digital Converter
Three external interrupt pins                                module (A/D) with:
Timer0 module: 8-bit/16-bit timer/counter with               - Fast sampling rate
                                                               - Conversion available during SLEEP
   8-bit programmable prescaler                                - DNL = 1 LSb, INL = 1 LSb
Timer1 module: 16-bit timer/counter
Timer2 module: 8-bit timer/counter with 8-bit             Programmable Low Voltage Detection (LVD)
                                                               module
   period register (time-base for PWM)                         - Supports interrupt-on-low voltage detection
Timer3 module: 16-bit timer/counter
Secondary oscillator clock option - Timer1/Timer3          Programmable Brown-out Reset (BOR)
Two Capture/Compare/PWM (CCP) modules.
                                                            Special Microcontroller Features:
   CCP pins that can be configured as:
   - Capture input: capture is 16-bit,                      Power-on Reset (POR), Power-up Timer (PWRT)
                                                               and Oscillator Start-up Timer (OST)
      max. resolution 6.25 ns (TCY/16)
   - Compare is 16-bit, max. resolution 100 ns (TCY)         Watchdog Timer (WDT) with its own on-chip RC
   - PWM output: PWM resolution is 1- to 10-bit.               oscillator for reliable operation

      Max. PWM freq. @: 8-bit resolution = 156 kHz          Programmable code protection
                                10-bit resolution = 39 kHz   Power saving SLEEP mode
                                                             Selectable oscillator options including:
Master Synchronous Serial Port (MSSP) module.
   Two modes of operation:                                     - 4X Phase Lock Loop (of primary oscillator)
   - 3-wire SPI (supports all 4 SPI modes)                     - Secondary Oscillator (32 kHz) clock input
   - I2CTM master and slave mode                            In-Circuit Serial Programming (ICSPTM) via two pins

Addressable USART module:                                 CMOS Technology:
   - Supports interrupt on Address bit
                                                             Low power, high speed EPROM technology
Parallel Slave Port (PSP) module                           Fully static design
                                                             Wide operating voltage range (2.5V to 5.5V)
                                                             Industrial and Extended temperature ranges
                                                             Low power consumption

1999-2013 Microchip Technology Inc.                                                               DS39026D-page 1
PIC18CXX2                                                                      RA3/AN3/VREF+   RA2/AN2/VREF-  RA1/AN1  RA0/AN0  MCLR/VPP

Pin Diagrams

                                       PLCC

                                                                                                                                          NC        RB7          RB6          RB5              RB4            NC

                                                                               6               5              4        3        2         1         44           43           42               41             40

           RA4/T0CKI                                                       7                                                                                                                                      39  RB3/CCP2*
RA5/AN4/SS/LVDIN                                                                                                                                                                                                      RB2/INT2
                                                                           8                                                                                                                                      38  RB1/INT1
         RE0/RD/AN5                                                                                                                                                                                                   RB0/INT0
        RE1/WR/AN6                                                         9                                                                                                                                      37  VDD
         RE2/CS/AN7                                                                                                                                                                                                   VSS
                                                                           10                                                                                                                                     36  RD7/PSP7
                     VDD                                                                                                                                                                                              RD6/PSP6
                                                                           11                    PIC18C4X2                                                                                                        35  RD5/PSP5
                     VSS                                                   12                                                                                                                                     34  RD4/PSP4
           OSC1/CLKI                                                                                                                                                                                                  RC7/RX/DT
  OSC2/CLKO/RA6                                                            13                                                                                                                                     33
RC0/T1OSO/T1CKI
                                                                           14                                                                                                                                     32
                      NC
                                                                           15                                                                                                                                     31

                                                                           16                                                                                                                                     30

                                                                           17                                                                                                                                     29
                                                                              18    19                   20           21        22        23        24           25           26             27               28

                                                                              RC1/T1OSI/CCP2*  RC2/CCP1  RC3/SCK/SCL  RD0/PSP0  RD1/PSP1  RD2/PSP2  RD3/PSP3     RC4/SDI/SDA  RC5/SDO        RC6/TX/CK        NC

                                                                RC6/TX/CK  RC5/SDO  RC4/SDI/SDA  RD3/PSP3     RD2/PSP2  RD1/PSP1  RD0/PSP0          RC3/SCK/SCL  RC2/CCP1     RC1/T1OSI/CCP2*  NC

    TQFP                                                        44         43       42           41           40        39        38        37                   36           35               34

RC7/RX/DT                                    1                                                                                                                                                          33            NC
RD4/PSP4                                                                                                                                                                                                             RC0/T1OSO/T1CKI
RD5/PSP5                                    2                                                                                                                                                          32            OSC2/CLKO/RA6
RD6/PSP6                                                                                                                                                                                                             OSC1/CLKI
RD7/PSP7                                    3                                                                                                                                                          31            VSS
                                                                                                                                                                                                                      VDD
          VSS                                4                                                                                                                                                          30            RE2/AN7/CS
          VDD                                                                                                                                                                                                         RE1/AN6/WR
  RB0/INT0                                   5                                      PIC18C4X2                                                                                                           29            RE0/AN5/RD
  RB1/INT1                                   6                                                                                                                                                          28            RA5/AN4/SS/LVDIN
  RB2/INT2                                                                                                                                                                                                            RA4/T0CKI
RB3/CCP2*                                    7                                                                                                                                                          27

                                             8                                                                                                                                                          26

                                             9                                                                                                                                                          25

                                             10                                                                                                                                                         24

                                             11                 12         13       14           15           16        17        18        19                   20           21               22       23

                                                                NC         NC       RB4          RB5          RB6       RB7       MCLR/VPP  RA0/AN0              RA1/AN1      RA2/AN2/VREF-    RA3/AN3/VREF+

     * RB3 is the alternate pin for the CCP2 pin multiplexing.                                                                                                                                                         1999-2013 Microchip Technology Inc.
     Note: Pin compatible with 44-pin PIC16C7X devices.

DS39026D-page 2
                                                                                                 PIC18CXX2

Pin Diagrams (Cont.'d)

DIP, JW

                        MCLR/VPP                           1                40      RB7

                        RA0/AN0                            2                39      RB6

                        RA1/AN1                            3                38      RB5

                        RA2/AN2/VREF-                      4                37      RB4

                        RA3/AN3/VREF+                      5                36      RB3/CCP2*

                        RA4/T0CKI                          6                35      RB2/INT2

         RA5/AN4/SS/LVDIN                                  7     PIC18C4X2  34      RB1/INT1

                        RE0/RD/AN5                         8                33      RB0/INT0

                        RE1/WR/AN6                         9                32      VDD

                        RE2/CS/AN7                         10               31      VSS

                                      VDD                  11               30      RD7/PSP7

                                      VSS                  12               29      RD6/PSP6

                        OSC1/CLKI                          13               28      RD5/PSP5

         OSC2/CLKO/RA6                                     14               27      RD4/PSP4

         RC0/T1OSO/T1CKI                                   15               26      RC7/RX/DT

         RC1/T1OSI/CCP2*                                   16               25      RC6/TX/CK

                        RC2/CCP1                           17               24      RC5/SDO

                        RC3/SCK/SCL                        18               23      RC4/SDI/SDA

                        RD0/PSP0                           19               22      RD3/PSP3

                        RD1/PSP1                           20               21      RD2/PSP2

Note: Pin compatible with 40-pin PIC16C7X devices.

DIP, SOIC, JW

                        MCLR/VPP                              1                 28  RB7

                        RA0/AN0                               2                 27  RB6

                        RA1/AN1                               3                 26  RB5

                        RA2/AN2/VREF-                         4                 25  RB4

                        RA3/AN3/VREF+                         5  PIC18C2X2      24  RB3/CCP2*

                        RA4/T0CKI                             6                 23  RB2/INT2

         RA5/AN4/SS/LVDIN                                     7                 22  RB1/INT1

                                      VSS                     8                 21  RB0/INT0

                        OSC1/CLKI                             9                 20  VDD

                        OSC2/CLKO/RA6                      10                   19  VSS

         RC0/T1OSO/T1CKI                                   11                   18  RC7/RX/DT

                        RC1/T1OSI/CCP2*                    12                   17  RC6/TX/CK

                        RC2/CCP1                           13                   16  RC5/SDO

                        RC3/SCK/SCL                        14                   15  RC4/SDI/SDA

* RB3 is the alternate pin for the CCP2 pin multiplexing.
Note: Pin compatible with 28-pin PIC16C7X devices.

1999-2013 Microchip Technology Inc.                                                             DS39026D-page 3
PIC18CXX2

Table of Contents

1.0 Device Overview ......................................................................................................................................................................... 7
2.0 Oscillator Configurations........................................................................................................................................................... 17
3.0 Reset......................................................................................................................................................................................... 25
4.0 Memory Organization................................................................................................................................................................ 35
5.0 Table Reads/Table Writes ........................................................................................................................................................ 55
6.0 8 X 8 Hardware Multiplier.......................................................................................................................................................... 61
7.0 Interrupts................................................................................................................................................................................... 63
8.0 I/O Ports.................................................................................................................................................................................... 77
9.0 Timer0 Module .......................................................................................................................................................................... 93
10.0 Timer1 Module .......................................................................................................................................................................... 97
11.0 Timer2 Module ........................................................................................................................................................................ 101
12.0 Timer3 Module ........................................................................................................................................................................ 103
13.0 Capture/Compare/PWM (CCP) Modules ................................................................................................................................ 107
14.0 Master Synchronous Serial Port (MSSP) Module................................................................................................................... 115
15.0 Addressable Universal Synchronous Asynchronous Receiver Transmitter (USART) ............................................................ 149
16.0 Compatible 10-bit Analog-to-Digital Converter (A/D) Module ................................................................................................. 165
17.0 Low Voltage Detect................................................................................................................................................................. 173
18.0 Special Features of the CPU .................................................................................................................................................. 179
19.0 Instruction Set Summary......................................................................................................................................................... 187
20.0 Development Support ............................................................................................................................................................. 229
21.0 Electrical Characteristics......................................................................................................................................................... 235
22.0 DC and AC Characteristics Graphs and Tables ..................................................................................................................... 263
23.0 Packaging Information ............................................................................................................................................................ 277
Appendix A: Revision History ......................................................................................................................................................... 287
Appendix B: Device Differences..................................................................................................................................................... 287
Appendix C: Conversion Considerations........................................................................................................................................ 288
Appendix D: Migration from Baseline to Enhanced Devices .......................................................................................................... 288
Appendix E: Migration from Mid-Range to Enhanced Devices ...................................................................................................... 289
Appendix F: Migration from High-End to Enhanced Devices ......................................................................................................... 289
Index ................................................................................................................................................................................................. 291
On-Line Support................................................................................................................................................................................ 299
Reader Response ............................................................................................................................................................................. 300
PIC18CXX2 Product Identification System ....................................................................................................................................... 301

DS39026D-page 4   1999-2013 Microchip Technology Inc.
                                               PIC18CXX2

                                   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@mail.microchip.com or fax the Reader Response Form in the back of this data sheet to (480) 792-4150.
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 Web site 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., DS30000A is version A of document DS30000).

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 Web site; http://www.microchip.com
Your local Microchip sales office (see last page)
The Microchip Corporate Literature Center; U.S. FAX: (480) 792-7277
When contacting a sales office or the literature center, please specify which device, revision of silicon and data sheet (include liter-
ature number) you are using.

Customer Notification System

Register on our web site at www.microchip.com/cn to receive the most current information on all of our products.

1999-2013 Microchip Technology Inc.  DS39026D-page 5
PIC18CXX2

NOTES:

DS39026D-page 6   1999-2013 Microchip Technology Inc.
                                                                                 PIC18CXX2

1.0 DEVICE OVERVIEW                                       The following two figures are device block diagrams
                                                          sorted by pin count: 28-pin for Figure 1-1 and 40-pin for
This document contains device specific information for    Figure 1-2. The 28-pin and 40-pin pinouts are listed in
the following four devices:                               Table 1-2 and Table 1-3, respectively.

1. PIC18C242
2. PIC18C252
3. PIC18C442
4. PIC18C452

These devices come in 28-pin and 40-pin packages.
The 28-pin devices do not have a Parallel Slave Port
(PSP) implemented and the number of Analog-to-
Digital (A/D) converter input channels is reduced to 5.
An overview of features is shown in Table 1-1.

TABLE 1-1: DEVICE FEATURES

Features                              PIC18C242           PIC18C252           PIC18C442           PIC18C452

Operating Frequency                      DC - 40 MHz         DC - 40 MHz      DC - 40 MHz         DC - 40 MHz
Program Memory (Bytes)                         16K                 32K
Program Memory (Instructions)                 8192                16384       16K                 32K
Data Memory (Bytes)                            512                1536
Interrupt Sources                               16                  16        8192                16384
I/O Ports
Timers                                   Ports A, B, C       Ports A, B, C    512                 1536
Capture/Compare/PWM Modules                      4                   4
Serial Communications                            2                   2        17                  17

Parallel Communications                      MSSP,               MSSP,        Ports A, B, C, D, E Ports A, B, C, D, E
10-bit Analog-to-Digital Module          Addressable         Addressable
RESETS (and Delays)                                                           4                   4
                                             USART               USART
Programmable Low Voltage                        --                  --        2                   2
Detect
Programmable Brown-out Reset           5 input channels    5 input channels      MSSP,               MSSP,
Instruction Set                           POR, BOR,           POR, BOR,       Addressable         Addressable
Packages
                                      RESET Instruction,  RESET Instruction,     USART               USART
                                           Stack Full,         Stack Full,
                                                                              PSP                 PSP
                                       Stack Underflow     Stack Underflow
                                         (PWRT, OST)         (PWRT, OST)      8 input channels 8 input channels
                                               Yes                 Yes
                                                                                  POR, BOR,           POR, BOR,
                                                                              RESET Instruction,  RESET Instruction,

                                                                                   Stack Full,         Stack Full,
                                                                               Stack Underflow     Stack Underflow

                                                                                 (PWRT, OST)         (PWRT, OST)

                                                                              Yes                 Yes

                                             Yes                 Yes                 Yes                 Yes

                                      75 Instructions     75 Instructions     75 Instructions     75 Instructions

                                        28-pin DIP          28-pin DIP          40-pin DIP          40-pin DIP
                                       28-pin SOIC         28-pin SOIC         44-pin PLCC         44-pin PLCC
                                         28-pin JW           28-pin JW         44-pin TQFP         44-pin TQFP

                                                                                 40-pin JW           40-pin JW

1999-2013 Microchip Technology Inc.                                                              DS39026D-page 7
PIC18CXX2

FIGURE 1-1:           PIC18C2X2 BLOCK DIAGRAM

                                                                             Data Bus<8>

                      21 Table Pointer <2>                                   Data Latch                   PORTA          RA0/AN0
                                                                             Data RAM                     PORTB          RA1/AN1
                                            88                8                                           PORTC          RA2/AN2/VREF-
                                                                                                                         RA3/AN3/VREF+
                  21  inc/dec logic                                                                                      RA4/T0CKI
           21                                                                                                            RA5/AN4/SS/LVDIN
Address Latch                        20     PCLATU PCLATH                    Address Latch                               RA6
Program Memory
(up to 2M Bytes)                            PCU PCH PCL                                        (2)                       RB0/INT0
   Data Latch                                Program Counter                                                             RB1/INT1
                                                                                       12                                RB2/INT2
          16                                                                 Address<12>                                 RB3/CCP2(1)
                                                                                                                         RB7:RB4
                                                                     4       12          4
                                                                     BSR                 Bank0, F                        RC0/T1OSO/T1CKI
                                                                               FSR0                                      RC1/T1OSI/CCP2(1)
                                            31 Level Stack                     FSR1            12                        RC2/CCP1
                                                                               FSR2                                      RC3/SCK/SCL
                                                                                                                         RC4/SDI/SDA
                                                                     Decode  inc/dec                                     RC5/SDO
                                                                               logic                                     RC6/TX/CK
                      Table Latch                                                                                        RC7/RX/DT

                      8
                                      ROM Latch

                        Instruction         Instruction                                             8
                        Decode &            Register
                                                                             PRODH PRODL
                          Control              Power-up
OSC2/CLKO                                         Timer              3       8 x 8 Multiply
OSC1/CLKI               Timing
                      Generation               Oscillator                                              8
    T1OSI                                    Start-up Timer
   T1OSO                4X PLL                                       BIT OP WREG                       8
                                               Power-on
                       Precision                 Reset               8       8
                        Voltage
                      Reference                Watchdog                      8
                                                  Timer                         ALU<8>

                                              Brown-out                               8
                                                 Reset

                                         MCLR VDD, VSS

      Timer0          Timer1                                 Timer2          Timer3                       A/D Converter

      CCP1            CCP2                      Master                       Addressable
                                            Synchronous                         USART

                                             Serial Port

Note  1: Optional multiplexing of CCP2 input/output with RB3 is enabled by selection of configuration bit.

      2: The high order bits of the Direct Address for the RAM are from the BSR register (except for the MOVFF instruction).

      3: Many of the general purpose I/O pins are multiplexed with one or more peripheral module functions. The multiplexing combinations
           are device dependent.

DS39026D-page 8                                                                                            1999-2013 Microchip Technology Inc.
                                                                                                            PIC18CXX2

FIGURE 1-2:            PIC18C4X2 BLOCK DIAGRAM

                                                                                      Data Bus<8>

                       21 Table Pointer <2>                                   Data Latch                    PORTA                RA0/AN0
                                                                                                            PORTB                RA1/AN1
                                             88              8                Data RAM                      PORTC                RA2/AN2/VREF-
                                                                               (up to 4K                    PORTD                RA3/AN3/VREF+
                   21  inc/dec logic                                         address reach)                 PORTE                RA4/T0CKI
           21                                                                                                                    RA5/AN4/SS/LVDIN
Address Latch          20                    PCLATU PCLATH                   Address Latch                                       RA6
Program Memory
(up to 2M Bytes)                             PCU PCH PCL                                         (2)                             RB0/INT0
   Data Latch                                Program Counter                                                                     RB1/INT1
                                                                                        12                                       RB2/INT2
           16                                                                Address<12>                                         RB3/CCP2(1)
                                                                                                                                 RB7:RB4
                                                                      4      12       4
                                                                      BSR             Bank0, F                                   RC0/T1OSO/T1CKI
                                                                             FSR0                                                RC1/T1OSI/CCP2(1)
                                             31 Level Stack                  FSR1           12                                   RC2/CCP1
                                                                             FSR2                                                RC3/SCK/SCL
                                                                                                                                 RC4/SDI/SDA
                                                                     Decode  inc/dec                                             RC5/SDO
                                                                                                                                 RC6/TX/CK
                       Table Latch                                           logic                                               RC7/RX/DT
                               8
                                                                                                                                  RD0/PSP0
                                             ROM Latch                                                                            RD1/PSP1
                                                                                                                                  RD2/PSP2
                          Instruction        Instruction                                              8                           RD3/PSP3
                          Decode &             Register                                                                           RD4/PSP4
                                                                             PRODH PRODL                                          RD5/PSP5
                            Control            Power-up                                                                           RD6/PSP6
OSC2/CLKO                                         Timer               3      8 x 8 Multiply                                       RD7/PSP7
OSC1/CLKI                Timing
                       Generation              Oscillator                                                8                       RE0/AN5/RD
   T1OSI                                     Start-up Timer                                                                      RE1/AN6/WR
   T1OSO                 4X PLL                                       BIT OP WREG                        8                       RE2/AN7/CS
                                                Power-on
                        Precision                 Reset               8      8
                         Voltage
                       Reference               Watchdog                      8
                                                  Timer                        ALU<8>

                                               Brown-out                              8
                                                  Reset

                                       MCLR VDD, VSS

      Timer0           Timer1                                Timer2                 Timer3                  A/D Converter

      CCP1             CCP2                                 Master           Addressable                    Parallel Slave Port
                                                        Synchronous             USART

                                                         Serial Port

Note  1: Optional multiplexing of CCP2 input/output with RB3 is enabled by selection of configuration bit.

      2: The high order bits of the Direct Address for the RAM are from the BSR register (except for the MOVFF instruction).

      3: Many of the general purpose I/O pins are multiplexed with one or more peripheral module functions. The multiplexing combinations
           are device dependent.

1999-2013 Microchip Technology Inc.                                                                                             DS39026D-page 9
PIC18CXX2

TABLE 1-2: PIC18C2X2 PINOUT I/O DESCRIPTIONS

     Pin Name     Pin Number Pin Buffer                                Description
                  DIP SOIC Type Type

MCLR/VPP          1  1                                Master clear (input) or programming voltage (input).
    MCLR
                        I                 ST          Master Clear (Reset) input. This pin is an active low
    VPP
                                                      RESET to the device.

                        P                             Programming voltage input.

NC                -- ----                 -- These pins should be left unconnected.

OSC1/CLKI         9  9                                Oscillator crystal or external clock input.
    OSC1
                        I                 ST          Oscillator crystal input or external clock source input.
    CLKI
                                                      ST buffer when configured in RC mode. CMOS otherwise.

                        I CMOS                        External clock source input. Always associated with

                                                      pin function OSC1. (See related OSC1/CLKIN,

                                                      OSC2/CLKOUT pins.)

OSC2/CLKO/RA6     10 10                               Oscillator crystal or clock output.
    OSC2                              O
    CLKO                              O   --          Oscillator crystal output. Connects to crystal or

    RA6                              I/O              resonator in Crystal Oscillator mode.

                                          --          In RC mode, OSC2 pin outputs CLKOUT which has 1/4

                                                      the frequency of OSC1, and denotes the instruction

                                                      cycle rate.

                                          TTL         General Purpose I/O pin.

                                                      PORTA is a bi-directional I/O port.

RA0/AN0           2  2
    RA0
    AN0                 I/O TTL                       Digital I/O.

                        I Analog                      Analog input 0.

RA1/AN1           3  3
    RA1
    AN1                 I/O TTL                       Digital I/O.

                        I Analog                      Analog input 1.

RA2/AN2/VREF-     4  4
    RA2
    AN2                 I/O TTL                       Digital I/O.
    VREF-
                        I Analog                      Analog input 2.

                        I Analog                      A/D Reference Voltage (Low) input.

RA3/AN3/VREF+     5  5
    RA3
    AN3                 I/O TTL                       Digital I/O.
    VREF+
                        I Analog                      Analog input 3.

                        I Analog                      A/D Reference Voltage (High) input.

RA4/T0CKI         6  6
    RA4
    T0CKI               I/O ST/OD                     Digital I/O. Open drain when configured as output.

                        I                 ST          Timer0 external clock input.

RA5/AN4/SS/LVDIN 7   7
    RA5
    AN4                 I/O TTL                       Digital I/O.
    SS                                                Analog input 4.
    LVDIN               I Analog                      SPI Slave Select input.
                                                      Low Voltage Detect Input.
                        I                 ST

                        I Analog

RA6                                                   See the OSC2/CLKO/RA6 pin.

Legend:  TTL = TTL compatible input                   CMOS = CMOS compatible input or output
         ST = Schmitt Trigger input with CMOS levels  I = Input
         O = Output                                   P = Power
         OD = Open Drain (no P diode to VDD)

DS39026D-page 10                                                             1999-2013 Microchip Technology Inc.
                                                                                PIC18CXX2

TABLE 1-2: PIC18C2X2 PINOUT I/O DESCRIPTIONS (CONTINUED)

Pin Name  Pin Number Pin Buffer                                              Description
          DIP SOIC Type Type

                                                      PORTB is a bi-directional I/O port. PORTB can be software
                                                      programmed for internal weak pull-ups on all inputs.

RB0/INT0  21 21                            TTL        Digital I/O.
    RB0                      I/O
    INT0                      I            ST         External Interrupt 0.

RB1/INT1  22 22                            TTL
    RB1                      I/O
    INT1                      I            ST         External Interrupt 1.

RB2/INT2  23 23                            TTL        Digital I/O.
    RB2                      I/O
    INT2                      I            ST         External Interrupt 2.

RB3/CCP2  24 24                            TTL        Digital I/O.
    RB3                      I/O
    CCP2                     I/O           ST         Capture2 input, Compare2 output, PWM2 output.

RB4       25 25 I/O                        TTL        Digital I/O.

                                                      Interrupt-on-change pin.

RB5       26 26 I/O TTL                                 Digital I/O.
RB6                                                     Interrupt-on-change pin.
RB7       27 27 I/O TTL
Legend:                                                 Digital I/O.
                                      I    ST           Interrupt-on-change pin.
                                                        ICSP programming clock.
          28 28 I/O TTL
                                                        Digital I/O.
                                      I/O  ST           Interrupt-on-change pin.
                                                        ICSP programming data.
         TTL = TTL compatible input
         ST = Schmitt Trigger input with CMOS levels  CMOS = CMOS compatible input or output
         O = Output                                   I = Input
         OD = Open Drain (no P diode to VDD)          P = Power

1999-2013 Microchip Technology Inc.                                                      DS39026D-page 11
PIC18CXX2

TABLE 1-2: PIC18C2X2 PINOUT I/O DESCRIPTIONS (CONTINUED)

Pin Name          Pin Number Pin Buffer                              Description
                  DIP SOIC Type Type

                                                      PORTC is a bi-directional I/O port.

RC0/T1OSO/T1CKI 11    11
    RC0
    T1OSO                 I/O    ST                   Digital I/O.
    T1CKI                                             Timer1 oscillator output.
                          O      --                   Timer1/Timer3 external clock input.

                          I      ST

RC1/T1OSI/CCP2 12     12
    RC1
    T1OSI                 I/O    ST                   Digital I/O.
    CCP2                                              Timer1 oscillator input.
                          I CMOS                      Capture2 input, Compare2 output, PWM2 output.

                          I/O    ST

RC2/CCP1          13  13

RC2                       I/O    ST                   Digital I/O.
                                                      Capture1 input/Compare1 output/PWM1 output.
CCP1                      I/O    ST

RC3/SCK/SCL       14  14

RC3                       I/O    ST                   Digital I/O.

SCK                       I/O    ST                   Synchronous serial clock input/output for SPI mode.
                                                      Synchronous serial clock input/output for I2C mode.
SCL                       I/O    ST

RC4/SDI/SDA       15  15

RC4                       I/O    ST                   Digital I/O.

SDI                       I      ST                   SPI Data In.
                                                      I2C Data I/O.
SDA                       I/O    ST

RC5/SDO           16  16

RC5                       I/O    ST                   Digital I/O.
                                                      SPI Data Out.
SDO                       O      --

RC6/TX/CK         17  17

RC6                       I/O    ST                   Digital I/O.
                                                      USART Asynchronous Transmit.
TX                        O      --                   USART Synchronous Clock (see related RX/DT).

CK                        I/O    ST

RC7/RX/DT         18  18

RC7                       I/O    ST                   Digital I/O.
                                                      USART Asynchronous Receive.
RX                        I      ST                   USART Synchronous Data (see related TX/CK).

DT                        I/O    ST

VSS               8, 19 8, 19 P  -- Ground reference for logic and I/O pins.
VDD
Legend:           20 20 P        -- Positive supply for logic and I/O pins.

         TTL = TTL compatible input                   CMOS = CMOS compatible input or output
         ST = Schmitt Trigger input with CMOS levels  I = Input
         O = Output                                   P = Power
         OD = Open Drain (no P diode to VDD)

DS39026D-page 12                                                      1999-2013 Microchip Technology Inc.
                                                                                   PIC18CXX2

TABLE 1-3: PIC18C4X2 PINOUT I/O DESCRIPTIONS

                    Pin Number            Pin Buffer

     Pin Name  DIP PLCC TQFP Type Type                               Description

MCLR/VPP       1    2                 18               Master clear (input) or programming voltage (input).
    MCLR
                                          I   ST       Master Clear (Reset) input. This pin is an active
    VPP
                                                       low RESET to the device.

                                          P            Programming voltage input.

NC             --                         --  -- These pins should be left unconnected.

OSC1/CLKI      13 14 30                                Oscillator crystal or external clock input.
    OSC1
                                          I   ST       Oscillator crystal input or external clock source input.
    CLKI
                                                       ST buffer when configured in RC mode, CMOS otherwise.

                                          I CMOS External clock source input. Always associated with

                                                       pin function OSC1. (See related OSC1/CLKIN,

                                                       OSC2/CLKOUT pins.)

OSC2/CLKO/RA6 14 15 31                                 Oscillator crystal output.

    OSC2                                  O   --       Oscillator crystal output. Connects to crystal

                                                       or resonator in Crystal Oscillator mode.

    CLKO                                  O   --       In RC mode, OSC2 pin outputs CLKOUT, which has

                                                       1/4 the frequency of OSC1 and denotes the instruction

                                                       cycle rate.

    RA6                                   I/O TTL      General Purpose I/O pin.

                                                       PORTA is a bi-directional I/O port.

RA0/AN0        2    3                 19
    RA0
    AN0                                   I/O TTL      Digital I/O.

                                          I Analog Analog input 0.

RA1/AN1        3    4                 20
    RA1
    AN1                                   I/O TTL      Digital I/O.

                                          I Analog Analog input 1.

RA2/AN2/VREF-  4    5                 21
    RA2
    AN2                                   I/O TTL      Digital I/O.
    VREF-
                                          I Analog Analog input 2.

                                          I Analog A/D Reference Voltage (Low) input.

RA3/AN3/VREF+  5    6                 22
    RA3
    AN3                                   I/O TTL      Digital I/O.
    VREF+
                                          I Analog Analog input 3.

                                          I Analog A/D Reference Voltage (High) input.

RA4/T0CKI      6    7                 23
    RA4
    T0CKI                                 I/O ST/OD Digital I/O. Open drain when configured as output.

                                          I   ST       Timer0 external clock input.

RA5/AN4/SS/LVDIN 7  8                 24
    RA5
    AN4                                   I/O TTL      Digital I/O.
    SS
    LVDIN                                 I Analog Analog input 4.

                                          I   ST       SPI Slave Select input.

                                          I Analog Low Voltage Detect Input.

RA6                                                    See the OSC2/CLKO/RA6 pin.

Legend:   TTL = TTL compatible input                   CMOS = CMOS compatible input or output
          ST = Schmitt Trigger input with CMOS levels  I = Input
          O = Output                                   P = Power
          OD = Open Drain (no P diode to VDD)

1999-2013 Microchip Technology Inc.                                                        DS39026D-page 13
PIC18CXX2

TABLE 1-3: PIC18C4X2 PINOUT I/O DESCRIPTIONS (CONTINUED)

                  Pin Number     Pin Buffer

Pin Name          DIP PLCC TQFP Type Type                 Description

                                                        PORTB is a bi-directional I/O port. PORTB can be
                                                        software programmed for internal weak pull-ups on all
                                                        inputs.

RB0/INT0          33 36       8
    RB0
    INT0                         I/O TTL                Digital I/O.
                                                        External Interrupt 0.
RB1/INT1                         I  ST
    RB1
    INT1          34 37       9

RB2/INT2                         I/O TTL
    RB2
    INT2                         I  ST                  External Interrupt 1.

RB3/CCP2          35 38 10
    RB3
    CCP2                         I/O TTL                Digital I/O.
                                                        External Interrupt 2.
RB4                              I  ST

                  36 39 11                              Digital I/O.
                                               I/O TTL  Capture2 input, Compare2 output, PWM2 output.
                                               I/O ST

                  37 41 14 I/O TTL Digital I/O. Interrupt-on-change pin.

RB5               38 42 15 I/O TTL Digital I/O. Interrupt-on-change pin.
RB6
                  39 43 16 I/O TTL Digital I/O. Interrupt-on-change pin.
RB7
                                 I  ST ICSP programming clock.
Legend:
                  40 44 17 I/O TTL Digital I/O. Interrupt-on-change pin.
                                               I/O ST ICSP programming data.

         TTL = TTL compatible input                   CMOS = CMOS compatible input or output
         ST = Schmitt Trigger input with CMOS levels  I = Input
         O = Output                                   P = Power
         OD = Open Drain (no P diode to VDD)

DS39026D-page 14                                         1999-2013 Microchip Technology Inc.
                                                                     PIC18CXX2

TABLE 1-3: PIC18C4X2 PINOUT I/O DESCRIPTIONS (CONTINUED)

             Pin Number               Pin Buffer

Pin Name     DIP PLCC TQFP Type Type                                 Description

                                                      PORTC is a bi-directional I/O port.

RC0/T1OSO/T1CKI 15 16 32

RC0                                   I/O ST          Digital I/O.
                                                      Timer1 oscillator output.
T1OSO                                 O  --           Timer1/Timer3 external clock input.

T1CKI                                 I  ST

RC1/T1OSI/CCP2 16 18 35

RC1                                   I/O ST          Digital I/O.
                                                      Timer1 oscillator input.
T1OSI                                 I CMOS          Capture2 input, Compare2 output, PWM2 output.

CCP2                                  I/O ST

RC2/CCP1     17 19 36                                 Digital I/O.
    RC2                                   I/O ST      Capture1 input/Compare1 output/PWM1 output.
    CCP1                                  I/O ST

RC3/SCK/SCL  18 20 37                                 Digital I/O.
    RC3                                   I/O ST
    SCK                                   I/O ST      Synchronous serial clock input/output for

    SCL                                   I/O ST      SPI mode.
                                                      Synchronous serial clock input/output for
                                                      I2C mode.

RC4/SDI/SDA  23 25 42
    RC4
    SDI                               I/O ST          Digital I/O.
    SDA
                                      I  ST           SPI Data In.
                                                      I2C Data I/O.
                                      I/O ST

RC5/SDO      24 26 43
    RC5
    SDO                               I/O ST          Digital I/O.
                                                      SPI Data Out.
                                      O  --

RC6/TX/CK    25 27 44
    RC6
    TX                                I/O ST          Digital I/O.
    CK                                                USART Asynchronous Transmit.
                                      O  --           USART Synchronous Clock (see related RX/DT).

                                      I/O ST

RC7/RX/DT    26 29 1
    RC7
    RX                                I/O ST          Digital I/O.
    DT                                                USART Asynchronous Receive.
                                      I  ST           USART Synchronous Data (see related TX/CK).

                                      I/O ST

Legend:  TTL = TTL compatible input                   CMOS = CMOS compatible input or output
         ST = Schmitt Trigger input with CMOS levels  I = Input
         O = Output                                   P = Power
         OD = Open Drain (no P diode to VDD)

1999-2013 Microchip Technology Inc.                                                       DS39026D-page 15
PIC18CXX2

TABLE 1-3: PIC18C4X2 PINOUT I/O DESCRIPTIONS (CONTINUED)

                     Pin Number  Pin Buffer

     Pin Name     DIP PLCC TQFP Type Type                                     Description

                                                               PORTD is a bi-directional I/O port, or a Parallel Slave Port
                                                               (PSP) for interfacing to a microprocessor port. These pins
                                                               have TTL input buffers when PSP module is enabled.

RD0/PSP0          19 21 38 I/O ST                              Digital I/O.
RD1/PSP1                                                  TTL  Parallel Slave Port Data.
RD2/PSP2
                  20 22 39 I/O ST                              Digital I/O.
                                                          TTL  Parallel Slave Port Data.

                  21 23 40 I/O ST                              Digital I/O.
                                                          TTL  Parallel Slave Port Data.

RD3/PSP3          22 24 41 I/O ST                              Digital I/O.
RD4/PSP4                                                  TTL  Parallel Slave Port Data.
RD5/PSP5
                  27 30          2 I/O ST                      Digital I/O.
                                                    TTL        Parallel Slave Port Data.

                  28 31          3 I/O ST                      Digital I/O.
                                                    TTL        Parallel Slave Port Data.

RD6/PSP6          29 32          4 I/O ST                      Digital I/O.
                                                    TTL        Parallel Slave Port Data.

RD7/PSP7          30 33          5 I/O ST                      Digital I/O.
                                                    TTL        Parallel Slave Port Data.

                                                               PORTE is a bi-directional I/O port.

RE0/RD/AN5        8  9   25 I/O
    RE0
    RD                                   ST                    Digital I/O.

    AN5                                  TTL                   Read control for parallel slave port (see also WR

                                                               and CS pins).

                                         Analog Analog input 5.

RE1/WR/AN6        9 10 26 I/O
    RE1
    WR                                   ST                    Digital I/O.

    AN6                                  TTL                   Write control for parallel slave port (see CS

                                                               and RD pins).

                                         Analog Analog input 6.

RE2/CS/AN7        10 11  27 I/O
    RE2                                      ST
    CS                                       TTL               Digital I/O.
                                                               Chip Select control for parallel slave port (see related
    AN7                                    Analog              RD and WR).
                                                               Analog input 7.

VSS               12, 31 13, 34 6, 29 P  -- Ground reference for logic and I/O pins.

VDD               11, 32 12, 35 7, 28 P  -- Positive supply for logic and I/O pins.

Legend:  TTL = TTL compatible input                   CMOS = CMOS compatible input or output
         ST = Schmitt Trigger input with CMOS levels  I = Input
         O = Output                                   P = Power
         OD = Open Drain (no P diode to VDD)

DS39026D-page 16                                                               1999-2013 Microchip Technology Inc.
                                                                      PIC18CXX2

2.0 OSCILLATOR                                            TABLE 2-1: CAPACITOR SELECTION FOR
         CONFIGURATIONS                                                        CERAMIC RESONATORS

2.1 Oscillator Types                                            Ranges Tested:

The PIC18CXX2 can be operated in eight different          Mode  Freq  C1                              C2
oscillator modes. The user can program three configu-
ration bits (FOSC2, FOSC1, and FOSC0) to select one       XT    455 kHz 68 - 100 pF 68 - 100 pF
of these eight modes:
                                                                2.0 MHz 15 - 68 pF 15 - 68 pF

                                                                4.0 MHz 15 - 68 pF 15 - 68 pF

1. LP        Low Power Crystal                            HS    8.0 MHz 10 - 68 pF 10 - 68 pF
2. XT        Crystal/Resonator
3. HS        High Speed Crystal/Resonator                       16.0 MHz 10 - 22 pF 10 - 22 pF
4. HS + PLL  High Speed Crystal/Resonator
             with x 4 PLL enabled                         These values are for design guidance only.
5. RC        External Resistor/Capacitor                  See notes following this table.
6. RCIO      External Resistor/Capacitor with
             RA6 I/O pin enabled                                Resonators Used:
7. EC        External Clock
8. ECIO      External Clock with RA6 I/O pin               455 kHz Panasonic EFO-A455K04B  0.3%
             enabled                                       2.0 MHz Murata Erie CSA2.00MG  0.5%
                                                           4.0 MHz Murata Erie CSA4.00MG  0.5%
                                                           8.0 MHz Murata Erie CSA8.00MT  0.5%
                                                          16.0 MHz Murata Erie CSA16.00MX  0.5%
                                                          All resonators used did not have built-in capacitors.

2.2 Crystal Oscillator/Ceramic                            Note 1: Higher capacitance increases the stability
         Resonators                                                   of the oscillator, but also increases the
                                                                      start-up time.
In XT, LP, HS or HS-PLL oscillator modes, a crystal or
ceramic resonator is connected to the OSC1 and                    2: When operating below 3V VDD, it may be
OSC2 pins to establish oscillation. Figure 2-1 shows                  necessary to use high gain HS mode on
the pin connections.                                                  lower frequency ceramic resonators.

The PIC18CXX2 oscillator design requires the use of a             3: Since each resonator/crystal has its own
parallel cut crystal.                                                 characteristics, the user should consult
                                                                      the resonator/crystal manufacturer for
Note:  Use of a series cut crystal may give a fre-                    appropriate values of external compo-
       quency out of the crystal manufacturers                        nents or verify oscillator performance.
       specifications.

FIGURE 2-1:   CRYSTAL/CERAMIC
              RESONATOR OPERATION
              (HS, XT OR LP
              OSC CONFIGURATION)

C1(1)        OSC1

       XTAL           RF(3)           To
                                      Internal
                                      Logic

       RS(2)                          SLEEP

C2(1)        OSC2                      PIC18CXXX

Note 1: See Table 2-1 and Table 2-2 for recom-
             mended values of C1 and C2.

        2: A series resistor (RS) may be required for AT
              strip cut crystals.

        3: RF varies with the osc mode chosen.

1999-2013 Microchip Technology Inc.                                            DS39026D-page 17
PIC18CXX2

TABLE 2-2: CAPACITOR SELECTION FOR                         FIGURE 2-2:             EXTERNAL CLOCK INPUT
                     CRYSTAL OSCILLATORS                                           OPERATION (HS, XT OR
                                                                                   LP CONFIGURATION)
                  Ranges Tested:

Mode      Freq      C1                      C2             Clock from                    OSC1
                                                           Ext. System
LP        32.0 kHz  33 pF          33 pF                                                         PIC18CXXX
                                                                             Open
          200 kHz   15 pF          15 pF                                                 OSC2

XT        200 kHz 47-68 pF 47-68 pF

          1.0 MHz   15 pF          15 pF

          4.0 MHz   15 pF          15 pF                   2.3 RC Oscillator

HS        4.0 MHz   15 pF          15 pF                   For timing insensitive applications, the "RC" and
                                                           "RCIO" device options offer additional cost savings.
          8.0 MHz 15-33 pF 15-33 pF                        The RC oscillator frequency is a function of the supply
                                                           voltage, the resistor (REXT) and capacitor (CEXT) val-
          20.0      15-33 pF 15-33 pF                      ues and the operating temperature. In addition to this,
          MHz                                              the oscillator frequency will vary from unit to unit due to
                                                           normal process parameter variation. Furthermore, the
          25.0      15-33 pF 15-33 pF                      difference in lead frame capacitance between package
          MHz                                              types will also affect the oscillation frequency, espe-
                                                           cially for low CEXT values. The user also needs to take
These values are for design guidance only.                 into account variation due to tolerance of external R
See notes following this table.                            and C components used. Figure 2-3 shows how the
                                                           R/C combination is connected.
                  Crystals Used
                                                           In the RC oscillator mode, the oscillator frequency
32.0 kHz  Epson C-001R32.768K-A 20 PPM                   divided by 4 is available on the OSC2 pin. This signal
200 kHz                                                    may be used for test purposes or to synchronize other
1.0 MHz   STD XTL 200.000kHz 20 PPM                      logic.
4.0 MHz
8.0 MHz           ECS ECS-10-13-1   50 PPM
20.0 MHz
                  ECS ECS-40-20-1   50 PPM

          Epson CA-301 8.000M-C 30 PPM

          Epson CA-301 20.000M-C 30 PPM

                                                           FIGURE 2-3:             RC OSCILLATOR MODE

    Note 1: Higher capacitance increases the stability     VDD
                of the oscillator, but also increases the
                start-up time.                             REXT

            2: Rs may be required in HS mode, as well                              OSC1             Internal
                as XT mode, to avoid overdriving crystals                                            Clock
                with low drive level specification.
                                                           CEXT                                     PIC18CXXX
            3: Since each resonator/crystal has its own
                characteristics, the user should consult   VSS
                the resonator/crystal manufacturer for                                   OSC2/CLKO
                appropriate values of external compo-
                nents or verify oscillator performance.                      FOSC/4

An external clock source may also be connected to the      Recommended values:3 k  REXT  100 k
OSC1 pin in these modes, as shown in Figure 2-2.
                                                                                   CEXT > 20pF

                                                           The RCIO oscillator mode functions like the RC mode,
                                                           except that the OSC2 pin becomes an additional gen-
                                                           eral purpose I/O pin. The I/O pin becomes bit 6 of
                                                           PORTA (RA6).

DS39026D-page 18                                                         1999-2013 Microchip Technology Inc.
                                                                                         PIC18CXX2

2.4 External Clock Input                                          FIGURE 2-5:            EXTERNAL CLOCK INPUT
                                                                                         OPERATION
The EC and ECIO oscillator modes require an external                                     (ECIO CONFIGURATION)
clock source to be connected to the OSC1 pin. The
feedback device between OSC1 and OSC2 is turned                   Clock from             OSC1
off in these modes to save current. There is no oscilla-          Ext. System
tor start-up time required after a Power-on Reset or                                             PIC18CXXX
after a recovery from SLEEP mode.                                                   RA6
                                                                                         I/O (OSC2)
In the EC oscillator mode, the oscillator frequency
divided by 4 is available on the OSC2 pin. This signal            2.5 HS/PLL
may be used for test purposes or to synchronize other
logic. Figure 2-4 shows the pin connections for the EC            A Phase Locked Loop circuit is provided as a program-
oscillator mode.                                                  mable option for users that want to multiply the fre-
                                                                  quency of the incoming crystal oscillator signal by 4.
FIGURE 2-4:             EXTERNAL CLOCK INPUT                      For an input clock frequency of 10 MHz, the internal
                        OPERATION (EC OSC                         clock frequency will be multiplied to 40 MHz. This is
                        CONFIGURATION)                            useful for customers who are concerned with EMI due
                                                                  to high frequency crystals.
Clock from                       OSC1
Ext. System                                                       The PLL can only be enabled when the oscillator con-
                                         PIC18CXXX                figuration bits are programmed for HS mode. If they are
                FOSC/4                                            programmed for any other mode, the PLL is not
                                 OSC2                             enabled and the system clock will come directly from
                                                                  OSC1.
The ECIO oscillator mode functions like the EC mode,
except that the OSC2 pin becomes an additional gen-               The PLL is one of the modes of the FOSC<2:0> config-
eral purpose I/O pin. The I/O pin becomes bit 6 of                uration bits. The oscillator mode is specified during
PORTA (RA6). Figure 2-5 shows the pin connections                 device programming.
for the ECIO oscillator mode.
                                                                  A PLL lock timer is used to ensure that the PLL has
                                                                  locked before device execution starts. The PLL lock
                                                                  timer has a time-out that is called TPLL.

FIGURE 2-6:             PLL BLOCK DIAGRAM

(from Configuration     HS Osc
   bit Register)

                        PLL Enable

OSC2                    Crystal            Phase          Loop                 VCO
OSC1                      Osc          Comparator         Filter
                                 FIN
                                                                                              SYSCLK
                                       FOUT

                                                                  Divide by 4            MUX

1999-2013 Microchip Technology Inc.                                                     DS39026D-page 19
PIC18CXX2

2.6 Oscillator Switching Feature                           been enabled, the device can switch to a low power
                                                           execution mode. Figure 2-7 shows a block diagram of
The PIC18CXX2 devices include a feature that allows        the system clock sources. The clock switching feature
the system clock source to be switched from the main       is enabled by programming the Oscillator Switching
oscillator to an alternate low frequency clock source.     Enable (OSCSEN) bit in Configuration Register1H to a
For the PIC18CXX2 devices, this alternate clock            '0'. Clock switching is disabled in an erased device.
source is the Timer1 oscillator. If a low frequency crys-  See Section 9.0 for further details of the Timer1 oscilla-
tal (32 kHz, for example) has been attached to the         tor. See Section 18.0 for Configuration Register details.
Timer1 oscillator pins and the Timer1 oscillator has

FIGURE 2-7:       DEVICE CLOCK SOURCES

                  OSC2     PIC18CXXX                       4 x PLL TOSC/4       MUX     TSCLK
                  OSC1                                        TOSC
                  T1OSO  Main Oscillator                    TT1P
                  T1OSI                    SLEEP

                         Timer1 Oscillator

                                            T1OSCEN                             Clock
                                            Enable                              Source

                                            Oscillator

                                                           Clock Source option
                                                           for other modules

2.6.1 SYSTEM CLOCK SWITCH BIT                              Note:  The Timer1 oscillator must be enabled and
                                                                  operating to switch the system clock
The system clock source switching is performed under              source. The Timer1 oscillator is enabled by
software control. The system clock switch bit, SCS                setting the T1OSCEN bit in the Timer1
(OSCCON<0>) controls the clock switching. When the                control register (T1CON). If the Timer1
SCS bit is'0', the system clock source comes from the             oscillator is not enabled, then any write to
main oscillator that is selected by the FOSC configura-           the SCS bit will be ignored (SCS bit forced
tion bits in Configuration Register1H. When the SCS bit           cleared) and the main oscillator will con-
is set, the system clock source will come from the                tinue to be the system clock source.
Timer1 oscillator. The SCS bit is cleared on all forms of
RESET.

REGISTER 2-1: OSCCON REGISTER

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

                  --     --                 --             --     --            --      --     SCS

                  bit 7                                                                        bit 0

bit 7-1           Unimplemented: Read as '0'
bit 0
                  SCS: System Clock Switch bit
                  When OSCSEN configuration bit = '0' and T1OSCEN bit is set:
                  1 = Switch to Timer1 oscillator/clock pin
                  0 = Use primary oscillator/clock input pin
                  When OSCSEN and T1OSCEN are in other states:
                  bit is forced clear

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

DS39026D-page 20                                                                 1999-2013 Microchip Technology Inc.
                                                                                                     PIC18CXX2

2.6.2 OSCILLATOR TRANSITIONS                                               A timing diagram indicating the transition from the main
                                                                           oscillator to the Timer1 oscillator is shown in
The PIC18CXX2 devices contain circuitry to prevent                         Figure 2-8. The Timer1 oscillator is assumed to be run-
"glitches" when switching between oscillator sources.                      ning all the time. After the SCS bit is set, the processor
Essentially, the circuitry waits for eight rising edges of                 is frozen at the next occurring Q1 cycle. After eight syn-
the clock source that the processor is switching to. This                  chronization cycles are counted from the Timer1 oscil-
ensures that the new clock source is stable and that it's                  lator, operation resumes. No additional delays are
pulse width will not be less than the shortest pulse                       required after the synchronization cycles.
width of the two clock sources.

FIGURE 2-8:                   TIMING DIAGRAM FOR TRANSITION FROM OSC1 TO TIMER1 OSCILLATOR

         Q1 Q2 Q3 Q4 Q1                                                                 Q1 Q2 Q3 Q4  Q1 Q2    Q3 Q4 Q1

                                           TT1P

T1OSI                               1      2     3  4        5          6  7       8
OSC1
                                                       Tscs

                    TOSC      TDLY

Internal
System
Clock

SCS
(OSCCON<0>)

Program             PC                                 PC + 2                                                 PC + 4

Counter

Note 1: Delay on internal system clock is eight oscillator cycles for synchronization.

The sequence of events that takes place when switch-                       If the main oscillator is configured for an external crys-
ing from the Timer1 oscillator to the main oscillator will                 tal (HS, XT, LP), then the transition will take place after
depend on the mode of the main oscillator. In addition                     an oscillator start-up time (TOST) has occurred. A timing
to eight clock cycles of the main oscillator, additional                   diagram indicating the transition from the Timer1 oscil-
delays may take place.                                                     lator to the main oscillator for HS, XT and LP modes is
                                                                           shown in Figure 2-9.

FIGURE 2-9:                   TIMING FOR TRANSITION BETWEEN TIMER1 AND OSC1 (HS, XT, LP)

                    Q3        Q4       Q1                                               TT1P         Q1 Q2 Q3 Q4 Q1 Q2 Q3

            T1OSI                                   TOST                      1 2 34 567 8
             OSC1                                                 TOSC                                  TSCS

             OSC2
Internal System

             Clock
              SCS
(OSCCON<0>)

Program Counter           PC                                               PC + 2                                     PC + 6

Note 1: TOST = 1024TOSC (drawing not to scale).

1999-2013 Microchip Technology Inc.                                                                          DS39026D-page 21
PIC18CXX2

If the main oscillator is configured for HS-PLL mode, an                  frequency. A timing diagram, indicating the transition
oscillator start-up time (TOST) plus an additional PLL                    from the Timer1 oscillator to the main oscillator for
time-out (TPLL) will occur. The PLL time-out is typically                 HS-PLL mode, is shown in Figure 2-10.
2 ms and allows the PLL to lock to the main oscillator

FIGURE 2-10:            TIMING FOR TRANSITION BETWEEN TIMER1 AND OSC1 (HS WITH PLL)

                    Q4  Q1                                                TT1P            Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4

T1OSI                       TOST         TPLL
OSC1

OSC2

        PLL Clock                                          TOSC                      TSCS
                Input                                                  1  234 5678

Internal System                                     PC + 2                                PC + 4
               Clock

                 SCS
  (OSCCON<0>)

Program Counter PC

Note 1: TOST = 1024TOSC (drawing not to scale).

If the main oscillator is configured in the RC, RCIO, EC                  cating the transition from the Timer1 oscillator to the
or ECIO modes, there is no oscillator start-up time-out.                  main oscillator for RC, RCIO, EC and ECIO modes, is
Operation will resume after eight cycles of the main                      shown in Figure 2-11.
oscillator have been counted. A timing diagram, indi-

FIGURE 2-11:            TIMING FOR TRANSITION BETWEEN TIMER1 AND OSC1 (RC, EC)

                    Q3               Q4          Q1          TT1P                         Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4

            T1OSI                                            TOSC
                                                              12 34 5 6 7 8
             OSC1
                                                                                    TSCS
             OSC2

Internal System
             Clock
              SCS

(OSCCON<0>)

Program Counter             PC                                            PC + 2           PC + 4

Note 1: RC oscillator mode assumed.

DS39026D-page 22                                                                   1999-2013 Microchip Technology Inc.
                                                                          PIC18CXX2

2.7 Effects of SLEEP Mode on the                          switching currents have been removed, SLEEP mode
         On-chip Oscillator                               achieves the lowest current consumption of the device
                                                          (only leakage currents). Enabling any on-chip feature
When the device executes a SLEEP instruction, the         that will operate during SLEEP will increase the current
on-chip clocks and oscillator are turned off and the      consumed during SLEEP. The user can wake from
device is held at the beginning of an instruction cycle   SLEEP through external RESET, Watchdog Timer
(Q1 state). With the oscillator off, the OSC1 and OSC2    Reset, or through an interrupt.
signals will stop oscillating. Since all the transistor

TABLE 2-3: OSC1 AND OSC2 PIN STATES IN SLEEP MODE

       OSC Mode                       OSC1 Pin                            OSC2 Pin

       RC                             Floating, external resistor should  At logic low

                                      pull high

       RCIO                           Floating, external resistor should  Configured as PORTA, bit 6
                                                      pull high

       ECIO                           Floating                            Configured as PORTA, bit 6

       EC                             Floating                            At logic low

       LP, XT, and HS                 Feedback inverter disabled, at      Feedback inverter disabled, at
                                          quiescent voltage level             quiescent voltage level

Note:  See Table 3-1, in Section 3.0 RESET, for time-outs due to SLEEP and MCLR Reset.

2.8 Power-up Delays                                       With the PLL enabled (HS/PLL oscillator mode), the
                                                          time-out sequence following a Power-on Reset is differ-
Power up delays are controlled by two timers, so that     ent from other oscillator modes. The time-out sequence
no external RESET circuitry is required for most appli-   is as follows: First, the PWRT time-out is invoked after
cations. The delays ensure that the device is kept in     a POR time delay has expired. Then, the Oscillator
RESET until the device power supply and clock are sta-    Start-up Timer (OST) is invoked. However, this is still
ble. For additional information on RESET operation,       not a sufficient amount of time to allow the PLL to lock
see the "RESET" section.                                  at high frequencies. The PWRT timer is used to provide
                                                          an additional fixed 2ms (nominal) time-out to allow the
The first timer is the Power-up Timer (PWRT), which       PLL ample time to lock to the incoming clock frequency.
optionally provides a fixed delay of 72 ms (nominal) on
power-up only (POR and BOR). The second timer is
the Oscillator Start-up Timer, OST, intended to keep the
chip in RESET until the crystal oscillator is stable.

1999-2013 Microchip Technology Inc.                                                    DS39026D-page 23
PIC18CXX2

NOTES:

DS39026D-page 24   1999-2013 Microchip Technology Inc.
                                                                                         PIC18CXX2

3.0 RESET                                               Most registers are not affected by a WDT wake-up,
                                                        since this is viewed as the resumption of normal oper-
The PIC18CXX2 differentiates between various kinds      ation. Status bits from the RCON register, RI, TO, PD,
of RESET:                                               POR and BOR, are set or cleared differently in different
                                                        RESET situations, as indicated in Table 3-2. These bits
a) Power-on Reset (POR)                                 are used in software to determine the nature of the
b) MCLR Reset during normal operation                   RESET. See Table 3-3 for a full description of the
c) MCLR Reset during SLEEP                              RESET states of all registers.
d) Watchdog Timer (WDT) Reset (during normal
                                                        A simplified block diagram of the On-Chip Reset Circuit
      operation)                                        is shown in Figure 3-1.
e) Programmable Brown-out Reset (BOR)
f) RESET Instruction                                    The Enhanced MCU devices have a MCLR noise filter
g) Stack Full Reset                                     in the MCLR Reset path. The filter will detect and
h) Stack Underflow Reset                                ignore small pulses.

Most registers are unaffected by a RESET. Their status  MCLR pin is not driven low by any internal RESETS,
is unknown on POR and unchanged by all other            including WDT.
RESETS. The other registers are forced to a "RESET
state" on Power-on Reset, MCLR, WDT Reset, Brown-
out Reset, MCLR Reset during SLEEP, and by the
RESET instruction.

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

  RESET          Stack Full/Underflow Reset
Instruction      External Reset

       Stack
     Pointer

MCLR                                SLEEP
VDD
                WDT WDT
               Module Time-out                                                           S

                            Reset
              VDD Rise

                Detect
                                Power-on Reset

              Brown-out
                Reset BOREN

          OST/PWRT                                                                             Chip_Reset
                            OST
                                 10-bit Ripple Counter                                   R  Q

OSC1

                 PWRT

       On-chip   10-bit Ripple Counter
      RC OSC(1)

                                                                          Enable PWRT
                                                                          Enable OST(2)

Note 1: This is a separate oscillator from the RC oscillator of the CLKIN pin.
        2: See Table 3-1 for time-out situations.

1999-2013 Microchip Technology Inc.                                                        DS39026D-page 25
PIC18CXX2

3.1 Power-on Reset (POR)                                     3.3 Oscillator Start-up Timer (OST)

A Power-on Reset pulse is generated on-chip when             The Oscillator Start-up Timer (OST) provides a 1024
VDD rise is detected. To take advantage of the POR cir-      oscillator cycle (from OSC1 input) delay after the
cuitry, just tie the MCLR pin directly (or through a resis-  PWRT delay is over (parameter #32). This ensures that
tor) to VDD. This will eliminate external RC components      the crystal oscillator or resonator has started and
usually needed to create a Power-on Reset delay. A           stabilized.
minimum rise rate for VDD is specified (parameter
D004). For a slow rise time, see Figure 3-2.                 The OST time-out is invoked only for XT, LP and HS
                                                             modes and only on Power-on Reset or wake-up from
When the device starts normal operation (i.e., exits the     SLEEP.
RESET condition), device operating parameters (volt-
age, frequency, temperature, etc.) must be met to            3.4 PLL Lock Time-out
ensure operation. If these conditions are not met, the
device must be held in reset until the operating condi-      With the PLL enabled, the time-out sequence following
tions are met.                                               a Power-on Reset is different from other oscillator
                                                             modes. A portion of the Power-up Timer is used to pro-
FIGURE 3-2:          EXTERNAL POWER-ON                       vide a fixed time-out that is sufficient for the PLL to lock
                     RESET CIRCUIT (FOR                      to the main oscillator frequency. This PLL lock time-out
                     SLOW VDD POWER-UP)                      (TPLL) is typically 2 ms and follows the oscillator start-
                                                             up time-out (OST).
             VDD
                                                             3.5 Brown-out Reset (BOR)
      D           R
                                                             A configuration bit, BOREN, can disable (if clear/
                  C  R1                                      programmed), or enable (if set) the Brown-out Reset
                                MCLR                         circuitry. If VDD falls below parameter D005 for greater
                                                             than parameter #35, the brown-out situation will reset
                             PIC18CXXX                       the chip. A RESET may not occur if VDD falls below
                                                             parameter D005 for less than parameter #35. The chip
Note  1: External Power-on Reset circuit is required         will remain in Brown-out Reset until VDD rises above
          only if the VDD power-up slope is too slow.        BVDD. The Power-up Timer will then be invoked and
          The diode D helps discharge the capacitor          will keep the chip in RESET an additional time delay
          quickly when VDD powers down.                      (parameter #33). If VDD drops below BVDD while the
                                                             Power-up Timer is running, the chip will go back into a
      2: R < 40 k is recommended to make sure that           Brown-out Reset and the Power-up Timer will be initial-
          the voltage drop across R does not violate         ized. Once VDD rises above BVDD, the Power-up Timer
          the device's electrical specification.             will execute the additional time delay.

      3: R1 = 100 to 1 k will limit any current flow-        3.6 Time-out Sequence
          ing into MCLR from external capacitor C in
          the event of MCLR/VPP pin breakdown, due           On power-up, the time-out sequence is as follows:
          to Electrostatic Discharge (ESD) or Electrical     First, PWRT time-out is invoked after the POR time
          Overstress (EOS).                                  delay has expired. Then, OST is activated. The total
                                                             time-out will vary based on oscillator configuration and
3.2 Power-up Timer (PWRT)                                    the status of the PWRT. For example, in RC mode with
                                                             the PWRT disabled, there will be no time-out at all.
The Power-up Timer provides a fixed nominal time-out         Figure 3-3, Figure 3-4, Figure 3-5, Figure 3-6 and
(parameter #33) only on power-up from the POR. The           Figure 3-7 depict time-out sequences on power-up.
Power-up Timer operates on an internal RC oscillator.
The chip is kept in reset as long as the PWRT is active.     Since the time-outs occur from the POR pulse, if MCLR
The PWRT's time delay allows VDD to rise to an accept-       is kept low long enough, the time-outs will expire.
able level. A configuration bit is provided to enable/       Bringing MCLR high will begin execution immediately
disable the PWRT.                                            (Figure 3-5). This is useful for testing purposes or to
                                                             synchronize more than one PIC18CXXX device oper-
The power-up time delay will vary from chip-to-chip due      ating in parallel.
to VDD, temperature and process variation. See DC
parameter #33 for details.                                   Table 3-2 shows the RESET conditions for some
                                                             Special Function Registers, while Table 3-3 shows the
                                                             RESET conditions for all the registers.

DS39026D-page 26                                              1999-2013 Microchip Technology Inc.
                                                                                PIC18CXX2

TABLE 3-1: TIME-OUT IN VARIOUS SITUATIONS

  Oscillator                          Power-up(2)                                        Wake-up from
Configuration                                                                               SLEEP or
                              PWRTE = 0             PWRTE = 1         Brown-out(2)
                                                                                       Oscillator Switch
HS with PLL enabled(1)       72 ms + 1024TOSC       1024TOSC       72 ms + 1024TOSC
                                     + 2ms            + 2 ms               + 2ms       1024TOSC + 2 ms

HS, XT, LP                   72 ms + 1024TOSC       1024TOSC       72 ms + 1024TOSC         1024TOSC
                                                                           72 ms                 --
           EC                 72 ms                 --                     72 ms                 --

External RC                   72 ms                 --

Note 1: 2 ms is the nominal time required for the 4x PLL to lock.
        2: 72 ms is the nominal Power-up Timer delay.

REGISTER 3-1:         RCON REGISTER BITS AND POSITIONS

                        R/W-0 R/W-0            U-0       R/W-1 R/W-1            R/W-1  R/W-0  R/W-0
                                                                                  PD    POR   BOR
                        IPEN          LWRT     --        RI        TO
                                                                                                  bit 0
                      bit 7

                        Note: See Register 4-3 on page 53 for bit definitions.

TABLE 3-2: STATUS BITS, THEIR SIGNIFICANCE AND THE INITIALIZATION CONDITION FOR
                     RCON REGISTER

           Condition                  Program   RCON     RI TO PD POR BOR STKFUL STKUNF
                                      Counter  Register

Power-on Reset                        0000h 00-1 1100 1 1 1 0                   0      u      u

MCLR Reset during normal              0000h 00-u uuuu u u u u                   u      u      u

operation

Software Reset during normal          0000h 0u-0 uuuu 0 u u u                   u      u      u

operation

Stack Full Reset during normal 0000h 0u-u uu11 u u u u                          u      u      1

operation

Stack Underflow Reset during          0000h 0u-u uu11 u u u u                   u      1      u

normal operation

MCLR Reset during SLEEP               0000h 00-u 10uu u 1 0 u                   u      u      u

WDT Reset                             0000h 0u-u 01uu 1 0 1 u                   u      u      u

WDT Wake-up                           PC + 2 uu-u 00uu u 0 0 u                  u      u      u

Brown-out Reset                       0000h 0u-1 11u0 1 1 1 1                   0      u      u

Interrupt wake-up from SLEEP PC + 2(1) uu-u 00uu u 1 0 u                        u      u      u

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as '0'.
Note 1: When the wake-up is due to an interrupt and the GIEH or GIEL bits are set, the PC is loaded with the

             interrupt vector (0x000008h or 0x000018h).

1999-2013 Microchip Technology Inc.                                                   DS39026D-page 27
PIC18CXX2

TABLE 3-3: INITIALIZATION CONDITIONS FOR ALL REGISTERS

Register  Applicable Devices  Power-on Reset,     MCLR Resets     Wake-up via WDT
                              Brown-out Reset      WDT Reset          or Interrupt

                                               RESET Instruction
                                                  Stack Resets

TOSU 242 442 252 452          ---0 0000        ---0 0000          ---0 uuuu(3)
                              0000 0000        0000 0000          uuuu uuuu(3)
TOSH 242 442 252 452          0000 0000        0000 0000          uuuu uuuu(3)
                              00-0 0000        00-0 0000          uu-u uuuu(3)
TOSL 242 442 252 452          ---0 0000        ---0 0000
                              0000 0000        0000 0000          ---u uuuu
STKPTR 242 442 252 452        0000 0000        0000 0000
                              --00 0000        --00 0000          uuuu uuuu
PCLATU 242 442 252 452        0000 0000        0000 0000             PC + 2(2)
                              0000 0000        0000 0000
PCLATH 242 442 252 452        0000 0000        0000 0000          --uu uuuu
                              xxxx xxxx        uuuu uuuu
PCL       242 442 252 452     xxxx xxxx        uuuu uuuu          uuuu uuuu
                              0000 000x        0000 000u
TBLPTRU 242 442 252 452       1111 -1-1        1111 -1-1          uuuu uuuu
                              11-0 0-00        11-0 0-00
TBLPTRH 242 442 252 452                                           uuuu uuuu
                                   N/A              N/A
TBLPTRL 242 442 252 452            N/A              N/A           uuuu uuuu
                                   N/A              N/A
TABLAT 242 442 252 452             N/A              N/A           uuuu uuuu
                                   N/A              N/A           uuuu uuuu(1)
PRODH 242 442 252 452                                             uuuu -u-u(1)
                                                                  uu-u u-uu(1)
PRODL 242 442 252 452
                                                                        N/A
INTCON 242 442 252 452                                                  N/A
                                                                        N/A
INTCON2 242 442 252 452                                                 N/A
                                                                        N/A
INTCON3 242 442 252 452

INDF0 242 442 252 452

POSTINC0 242 442 252 452

POSTDEC0 242 442 252 452

PREINC0 242 442 252 452

PLUSW0 242 442 252 452

FSR0H 242 442 252 452         ---- 0000        ---- 0000          ---- uuuu

FSR0L 242 442 252 452         xxxx xxxx        uuuu uuuu          uuuu uuuu

WREG 242 442 252 452          xxxx xxxx        uuuu uuuu          uuuu uuuu

INDF1 242 442 252 452         N/A              N/A                N/A

POSTINC1 242 442 252 452      N/A              N/A                N/A

POSTDEC1 242 442 252 452      N/A              N/A                N/A

PREINC1 242 442 252 452       N/A              N/A                N/A

PLUSW1 242 442 252 452        N/A              N/A                N/A

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as '0', q = value depends on condition
Note 1: One or more bits in the INTCONx or PIRx registers will be affected (to cause wake-up).

        2: When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the PC is loaded with the interrupt
             vector (0008h or 0018h).

        3: When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the TOSU, TOSH and TOSL are
             updated with the current value of the PC. The STKPTR is modified to point to the next location in the hard-
             ware stack.

        4: See Table 3-2 for RESET value for specific condition.
        5: Bit 6 of PORTA, LATA, and TRISA are enabled in ECIO and RCIO oscillator modes only. In all other

             oscillator modes, they are disabled and read '0'.
        6: The long write enable is only reset on a POR or MCLR Reset.
        7: Bit 6 of PORTA, LATA and TRISA are not available on all devices. When unimplemented, they are read as '0'.

DS39026D-page 28                                         1999-2013 Microchip Technology Inc.
                                                                          PIC18CXX2

TABLE 3-3: INITIALIZATION CONDITIONS FOR ALL REGISTERS (CONTINUED)

Register  Applicable Devices          Power-on Reset,     MCLR Resets     Wake-up via WDT
                                      Brown-out Reset      WDT Reset          or Interrupt

                                                       RESET Instruction
                                                          Stack Resets

FSR1H 242 442 252 452                 ---- 0000        ---- 0000          ---- uuuu

FSR1L 242 442 252 452                 xxxx xxxx        uuuu uuuu          uuuu uuuu

BSR       242 442 252 452             ---- 0000        ---- 0000          ---- uuuu

INDF2 242 442 252 452                 N/A              N/A                N/A

POSTINC2 242 442 252 452              N/A              N/A                N/A

POSTDEC2 242 442 252 452              N/A              N/A                N/A

PREINC2 242 442 252 452               N/A              N/A                N/A

PLUSW2 242 442 252 452                N/A              N/A                N/A

FSR2H 242 442 252 452                 ---- 0000        ---- 0000          ---- uuuu

FSR2L 242 442 252 452                 xxxx xxxx        uuuu uuuu          uuuu uuuu

STATUS 242 442 252 452                ---x xxxx        ---u uuuu          ---u uuuu

TMR0H 242 442 252 452                 xxxx xxxx        uuuu uuuu          uuuu uuuu

TMR0L 242 442 252 452                 xxxx xxxx        uuuu uuuu          uuuu uuuu

T0CON 242 442 252 452                 1111 1111        1111 1111          uuuu uuuu

OSCCON 242 442 252 452                ---- ---0        ---- ---0          ---- ---u

LVDCON 242 442 252 452                --00 0101        --00 0101          --uu uuuu

WDTCON 242 442 252 452                ---- ---0        ---- ---0          ---- ---u
RCON(4, 6) 242 442 252 452            00-1 11q0        00-1 qquu          uu-u qquu

TMR1H 242 442 252 452                 xxxx xxxx        uuuu uuuu          uuuu uuuu

TMR1L 242 442 252 452                 xxxx xxxx        uuuu uuuu          uuuu uuuu

T1CON 242 442 252 452                 0-00 0000        u-uu uuuu          u-uu uuuu

TMR2 242 442 252 452                  xxxx xxxx        uuuu uuuu          uuuu uuuu

PR2       242 442 252 452             1111 1111        1111 1111          1111 1111

T2CON 242 442 252 452                 -000 0000        -000 0000          -uuu uuuu

SSPBUF 242 442 252 452                xxxx xxxx        uuuu uuuu          uuuu uuuu

SSPADD 242 442 252 452                0000 0000        0000 0000          uuuu uuuu

SSPSTAT 242 442 252 452               0000 0000        0000 0000          uuuu uuuu

SSPCON1 242 442 252 452               0000 0000        0000 0000          uuuu uuuu

SSPCON2 242 442 252 452               0000 0000        0000 0000          uuuu uuuu

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as '0', q = value depends on condition
Note 1: One or more bits in the INTCONx or PIRx registers will be affected (to cause wake-up).

        2: When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the PC is loaded with the interrupt
             vector (0008h or 0018h).

        3: When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the TOSU, TOSH and TOSL are
             updated with the current value of the PC. The STKPTR is modified to point to the next location in the hard-
             ware stack.

        4: See Table 3-2 for RESET value for specific condition.
        5: Bit 6 of PORTA, LATA, and TRISA are enabled in ECIO and RCIO oscillator modes only. In all other

             oscillator modes, they are disabled and read '0'.
        6: The long write enable is only reset on a POR or MCLR Reset.
        7: Bit 6 of PORTA, LATA and TRISA are not available on all devices. When unimplemented, they are read as '0'.

1999-2013 Microchip Technology Inc.                                      DS39026D-page 29
PIC18CXX2

TABLE 3-3: INITIALIZATION CONDITIONS FOR ALL REGISTERS (CONTINUED)

Register  Applicable Devices  Power-on Reset,     MCLR Resets     Wake-up via WDT
                              Brown-out Reset      WDT Reset          or Interrupt

                                               RESET Instruction
                                                  Stack Resets

ADRESH 242 442 252 452        xxxx xxxx        uuuu uuuu          uuuu uuuu

ADRESL 242 442 252 452        xxxx xxxx        uuuu uuuu          uuuu uuuu

ADCON0 242 442 252 452        0000 0000        0000 0000          uuuu uuuu

ADCON1 242 442 252 452        --0- 0000        --0- 0000          --u- uuuu

CCPR1H 242 442 252 452        xxxx xxxx        uuuu uuuu          uuuu uuuu

CCPR1L 242 442 252 452        xxxx xxxx        uuuu uuuu          uuuu uuuu

CCP1CON 242 442 252 452       --00 0000        --00 0000          --uu uuuu

CCPR2H 242 442 252 452        xxxx xxxx        uuuu uuuu          uuuu uuuu

CCPR2L 242 442 252 452        xxxx xxxx        uuuu uuuu          uuuu uuuu

CCP2CON 242 442 252 452       --00 0000        --00 0000          --uu uuuu

TMR3H 242 442 252 452         xxxx xxxx        uuuu uuuu          uuuu uuuu

TMR3L 242 442 252 452         xxxx xxxx        uuuu uuuu          uuuu uuuu

T3CON 242 442 252 452         0000 0000        uuuu uuuu          uuuu uuuu

SPBRG 242 442 252 452         xxxx xxxx        uuuu uuuu          uuuu uuuu

RCREG 242 442 252 452         xxxx xxxx        uuuu uuuu          uuuu uuuu

TXREG 242 442 252 452         xxxx xxxx        uuuu uuuu          uuuu uuuu

TXSTA 242 442 252 452         0000 -01x        0000 -01u          uuuu -uuu

RCSTA 242 442 252 452         0000 000x        0000 000u          uuuu uuuu

IPR2      242 442 252 452     ---- 1111        ---- 1111          ---- uuuu
PIR2      242 442 252 452     ---- 0000        ---- 0000          ---- uuuu(1)

PIE2      242 442 252 452     ---- 0000        ---- 0000          ---- uuuu

IPR1      242 442 252 452     1111 1111        1111 1111          uuuu uuuu

PIR1      242 442 252 452     -111 1111        -111 1111          -uuu uuuu
          242 442 252 452     0000 0000        0000 0000          uuuu uuuu(1)
          242 442 252 452     -000 0000        -000 0000          -uuu uuuu(1)

PIE1      242 442 252 452     0000 0000        0000 0000          uuuu uuuu

          242 442 252 452     -000 0000        -000 0000          -uuu uuuu

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as '0', q = value depends on condition
Note 1: One or more bits in the INTCONx or PIRx registers will be affected (to cause wake-up).

        2: When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the PC is loaded with the interrupt
             vector (0008h or 0018h).

        3: When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the TOSU, TOSH and TOSL are
             updated with the current value of the PC. The STKPTR is modified to point to the next location in the hard-
             ware stack.

        4: See Table 3-2 for RESET value for specific condition.
        5: Bit 6 of PORTA, LATA, and TRISA are enabled in ECIO and RCIO oscillator modes only. In all other

             oscillator modes, they are disabled and read '0'.
        6: The long write enable is only reset on a POR or MCLR Reset.
        7: Bit 6 of PORTA, LATA and TRISA are not available on all devices. When unimplemented, they are read as '0'.

DS39026D-page 30                                1999-2013 Microchip Technology Inc.
                                                                          PIC18CXX2

TABLE 3-3: INITIALIZATION CONDITIONS FOR ALL REGISTERS (CONTINUED)

Register  Applicable Devices          Power-on Reset,     MCLR Resets     Wake-up via WDT
                                      Brown-out Reset      WDT Reset          or Interrupt

                                                       RESET Instruction
                                                          Stack Resets

TRISE 242 442 252 452 0000 -111                        0000 -111          uuuu -uuu

TRISD 242 442 252 452 1111 1111                        1111 1111          uuuu uuuu

TRISC 242 442 252 452 1111 1111                        1111 1111          uuuu uuuu

  TRISB 242 442 252 452               1111 1111        1111 1111          uuuu uuuu
TRISA(5, 7) 242 442 252 452           -111 1111(5)     -111 1111(5)       -uuu uuuu(5)

LATE 242 442 252 452 ---- -xxx                         ---- -uuu          ---- -uuu

LATD 242 442 252 452 xxxx xxxx                         uuuu uuuu          uuuu uuuu

LATC 242 442 252 452 xxxx xxxx                         uuuu uuuu          uuuu uuuu

  LATB 242 442 252 452                xxxx xxxx        uuuu uuuu          uuuu uuuu
LATA(5, 7) 242 442 252 452            -xxx xxxx(5)     -uuu uuuu(5)       -uuu uuuu(5)

PORTE 242 442 252 452 ---- -000                        ---- -000          ---- -uuu

PORTD 242 442 252 452 xxxx xxxx                        uuuu uuuu          uuuu uuuu

PORTC 242 442 252 452 xxxx xxxx                        uuuu uuuu          uuuu uuuu

  PORTB 242 442 252 452               xxxx xxxx        uuuu uuuu          uuuu uuuu
PORTA(5, 7) 242 442 252 452           -x0x 0000(5)     -u0u 0000(5)       -uuu uuuu(5)

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as '0', q = value depends on condition
Note 1: One or more bits in the INTCONx or PIRx registers will be affected (to cause wake-up).

        2: When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the PC is loaded with the interrupt
             vector (0008h or 0018h).

        3: When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the TOSU, TOSH and TOSL are
             updated with the current value of the PC. The STKPTR is modified to point to the next location in the hard-
             ware stack.

        4: See Table 3-2 for RESET value for specific condition.
        5: Bit 6 of PORTA, LATA, and TRISA are enabled in ECIO and RCIO oscillator modes only. In all other

             oscillator modes, they are disabled and read '0'.
        6: The long write enable is only reset on a POR or MCLR Reset.
        7: Bit 6 of PORTA, LATA and TRISA are not available on all devices. When unimplemented, they are read as '0'.

1999-2013 Microchip Technology Inc.                                      DS39026D-page 31
PIC18CXX2

FIGURE 3-3:              TIME-OUT SEQUENCE ON POWER-UP (MCLR TIED TO VDD)

                    VDD  TPWRT
                 MCLR
   INTERNAL POR                        TOST

PWRT TIME-OUT
    OST TIME-OUT

INTERNAL RESET

FIGURE 3-4:              TIME-OUT SEQUENCE ON POWER-UP (MCLR NOT TIED TO VDD): CASE 1

                    VDD         TPWRT
                 MCLR
   INTERNAL POR                              TOST

PWRT TIME-OUT
    OST TIME-OUT

INTERNAL RESET

FIGURE 3-5:              TIME-OUT SEQUENCE ON POWER-UP (MCLR NOT TIED TO VDD): CASE 2

                    VDD         TPWRT
                 MCLR
   INTERNAL POR                              TOST

PWRT TIME-OUT
    OST TIME-OUT

INTERNAL RESET

DS39026D-page 32                              1999-2013 Microchip Technology Inc.
                                                                              PIC18CXX2

FIGURE 3-6:             SLOW RISE TIME (MCLR TIED TO VDD)

                                                           5V

                        VDD           0V         1V

             MCLR

INTERNAL POR

                                          TPWRT

PWRT TIME-OUT

                                                               TOST

OST TIME-OUT

INTERNAL RESET

FIGURE 3-7:             TIME-OUT SEQUENCE ON POR W/ PLL ENABLED (MCLR TIED TO VDD)

                   VDD                    TPWRT
               MCLR
IINTERNAL POR                                       TOST
                                                                  TPLL
PWRT TIME-OUT
  OST TIME-OUT

     PLL TIME-OUT

INTERNAL RESET

           Note: TOST = 1024 clock cycles.
                       TPLL  2 ms max. First three stages of the PWRT timer.

1999-2013 Microchip Technology Inc.                                          DS39026D-page 33
PIC18CXX2

NOTES:

DS39026D-page 34   1999-2013 Microchip Technology Inc.
                                                          PIC18CXX2

4.0 MEMORY ORGANIZATION

There are two memory blocks in Enhanced MCU
devices. These memory blocks are:

Program Memory
Data Memory

Program and data memory use separate buses so that
concurrent access can occur.

4.1 Program Memory Organization

A 21-bit program counter is capable of addressing the
2-Mbyte program memory space. Accessing a location
between the physically implemented memory and the
2-Mbyte address will cause a read of all '0's (a NOP
instruction).

PIC18C252 and PIC18C452 have 32 Kbytes of
EPROM, while PIC18C242 and PIC18C442 have
16 Kbytes of EPROM. This means that PIC18CX52
devices can store up to 16K of single word instructions,
and PIC18CX42 devices can store up to 8K of single
word instructions.

The RESET vector address is at 0000h and the inter-
rupt vector addresses are at 0008h and 0018h.

Figure 4-1 shows the Program Memory Map for
PIC18C242/442 devices and Figure 4-2 shows the
Program Memory Map for PIC18C252/452 devices.

1999-2013 Microchip Technology Inc.                      DS39026D-page 35
PIC18CXX2

FIGURE 4-1:        PROGRAM MEMORY MAP                FIGURE 4-2:   PROGRAM MEMORY MAP
                   AND STACK FOR                                   AND STACK FOR
                   PIC18C442/242                                   PIC18C452/252

                  PC<20:0>                                         PC<20:0>

CALL,RCALL,RETURN             21                     CALL,RCALL,RETURN             21

RETFIE,RETLW                                         RETFIE,RETLW

              Stack Level 1                                        Stack Level 1

                                                                        
                                                                        
                                                                        

              Stack Level 31                                       Stack Level 31

              RESET Vector        0000h                            RESET Vector        0000h

High Priority Interrupt Vector 0008h                 High Priority Interrupt Vector 0008h

Low Priority Interrupt Vector 0018h                  Low Priority Interrupt Vector 0018h

              On-chip
              Program Memory

                                  3FFFh
                                  4000h

                                                                   On-chip
                                                                   Program Memory
                                         User Memory Space
                                                                                                                                         User Memory Space
                  Read '0'                                                                    7FFFh
                                                                                              8000h
                                            1FFFFFh
                                            200000h                Read '0'

                                                                                              1FFFFFh
                                                                                              200000h

DS39026D-page 36                                                    1999-2013 Microchip Technology Inc.
                                                                   PIC18CXX2

4.2 Return Address Stack                                    4.2.2  RETURN STACK POINTER
                                                                   (STKPTR)
The return address stack allows any combination of up
to 31 program calls and interrupts to occur. The PC         The STKPTR register contains the stack pointer value,
(Program Counter) is pushed onto the stack when a           the STKFUL (stack full) status bit, and the STKUNF
CALL or RCALL instruction is executed, or an interrupt      (stack underflow) status bits. Register 4-1 shows the
is acknowledged. The PC value is pulled off the stack       STKPTR register. The value of the stack pointer can be
on a RETURN, RETLW or a RETFIE instruction.                 0 through 31. The stack pointer increments when val-
PCLATU and PCLATH are not affected by any of the call       ues are pushed onto the stack and decrements when
or return instructions.                                     values are popped off the stack. At RESET, the stack
                                                            pointer value will be 0. The user may read and write the
The stack operates as a 31-word by 21-bit RAM and a         stack pointer value. This feature can be used by a Real
5-bit stack pointer, with the stack pointer initialized to  Time Operating System for return stack maintenance.
00000b after all RESETS. There is no RAM associated
with stack pointer 00000b. This is only a RESET value.      After the PC is pushed onto the stack 31 times (without
During a CALL type instruction causing a push onto the      popping any values off the stack), the STKFUL bit is
stack, the stack pointer is first incremented and the       set. The STKFUL bit can only be cleared in software or
RAM location pointed to by the stack pointer is written     by a POR.
with the contents of the PC. During a RETURN type
instruction causing a pop from the stack, the contents      The action that takes place when the stack becomes
of the RAM location pointed to by the STKPTR is trans-      full, depends on the state of the STVREN (Stack Over-
ferred to the PC and then the stack pointer is              flow Reset Enable) configuration bit. Refer to
decremented.                                                Section 18.0 for a description of the device configura-
                                                            tion bits. If STVREN is set (default), the 31st push will
The stack space is not part of either program or data       push the (PC + 2) value onto the stack, set the STKFUL
space. The stack pointer is readable and writable, and      bit, and reset the device. The STKFUL bit will remain
the address on the top of the stack is readable and writ-   set and the stack pointer will be set to 0.
able through SFR registers. Data can also be pushed
to, or popped from, the stack, using the top-of-stack       If STVREN is cleared, the STKFUL bit will be set on the
SFRs. Status bits indicate if the stack pointer is at, or   31st push and the stack pointer will increment to 31.
beyond the 31 levels provided.                              Any additional pushes will not overwrite the 31st push
                                                            and STKPTR will remain at 31.
4.2.1 TOP-OF-STACK ACCESS
                                                            When the stack has been popped enough times to
The top of the stack is readable and writable. Three        unload the stack, the next pop will return a value of zero
register locations, TOSU, TOSH and TOSL hold the            to the PC and sets the STKUNF bit, while the stack
contents of the stack location pointed to by the            pointer remains at 0. The STKUNF bit will remain set
STKPTR register. This allows users to implement a           until cleared in software or a POR occurs.
software stack, if necessary. After a CALL, RCALL or
interrupt, the software can read the pushed value by        Note:  Returning a value of zero to the PC on an
reading the TOSU, TOSH and TOSL registers. These                   underflow, has the effect of vectoring the
values can be placed on a user defined software stack.             program to the RESET vector, where the
At return time, the software can replace the TOSU,                 stack conditions can be verified and appro-
TOSH and TOSL and do a return.                                     priate actions can be taken.

The user must disable the global interrupt enable bits
during this time to prevent inadvertent stack opera-
tions..

1999-2013 Microchip Technology Inc.                               DS39026D-page 37
PIC18CXX2

REGISTER 4-1: STKPTR REGISTER

                  R/C-0  R/C-0        U-0                  R/W-0  R/W-0          R/W-0  R/W-0  R/W-0
                                                            SP4    SP3            SP2    SP1    SP0
                  STKFUL STKUNF       --
                                                                                                    bit 0
                  bit 7

bit 7(1)          STKFUL: Stack Full Flag bit
                  1 = Stack became full or overflowed
bit 6(1)          0 = Stack has not become full or overflowed

bit 5             STKUNF: Stack Underflow Flag bit
bit 4-0           1 = Stack underflow occurred
                  0 = Stack underflow did not occur

                  Unimplemented: Read as '0'
                  SP4:SP0: Stack Pointer Location bits

                  Note 1: Bit 7 and bit 6 can only be cleared in user software or by a POR.

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

FIGURE 4-3:       RETURN ADDRESS STACK AND ASSOCIATED REGISTERS

                                                           Return Address Stack

                  TOSU   TOSH         TOSL                        11111
                  0x00    0x1A        0x34                        11110
                                                                  11101

                                                                             STKPTR<4:0>

                                                                                 00010

                                                                          00011
                                      Top-of-Stack 0x001A34 00010

                                                         0x000D58 00001

                                                                          00000

4.2.3 PUSH AND POP INSTRUCTIONS                            4.2.4 STACK FULL/UNDERFLOW RESETS

Since the Top-of-Stack (TOS) is readable and writable,     These resets are enabled by programming the
the ability to push values onto the stack and pull values  STVREN configuration bit. When the STVREN bit is
off the stack, without disturbing normal program execu-    disabled, a full or underflow condition will set the appro-
tion, is a desirable option. To push the current PC value  priate STKFUL or STKUNF bit, but not cause a device
onto the stack, a PUSH instruction can be executed.        RESET. When the STVREN bit is enabled, a full or
This will increment the stack pointer and load the cur-    underflow will set the appropriate STKFUL or STKUNF
rent PC value onto the stack. TOSU, TOSH and TOSL          bit and then cause a device RESET. The STKFUL or
can then be modified to place a return address on the      STKUNF bits are only cleared by the user software or
stack.                                                     a POR Reset.

The ability to pull the TOS value off of the stack and
replace it with the value that was previously pushed
onto the stack, without disturbing normal execution, is
achieved by using the POP instruction. The POP instruc-
tion discards the current TOS by decrementing the
stack pointer. The previous value pushed onto the
stack then becomes the TOS value.

DS39026D-page 38                                                                  1999-2013 Microchip Technology Inc.
                                                                               PIC18CXX2

4.3 Fast Register Stack                                        4.4 PCL, PCLATH and PCLATU

A "fast interrupt return" option is available for interrupts.  The program counter (PC) specifies the address of the
A Fast Register Stack is provided for the STATUS,              instruction to fetch for execution. The PC is 21-bits
WREG and BSR registers and are only one in depth.              wide. The low byte is called the PCL register. This reg-
The stack is not readable or writable and is loaded with       ister is readable and writable. The high byte is called
the current value of the corresponding register when           the PCH register. This register contains the PC<15:8>
the processor vectors for an interrupt. The values in the      bits and is not directly readable or writable. Updates to
registers are then loaded back into the working regis-         the PCH register may be performed through the
ters, if the FAST RETURN instruction is used to return         PCLATH register. The upper byte is called PCU. This
from the interrupt.                                            register contains the PC<20:16> bits and is not directly
                                                               readable or writable. Updates to the PCU register may
A low or high priority interrupt source will push values       be performed through the PCLATU register.
into the stack registers. If both low and high priority
interrupts are enabled, the stack registers cannot be          The PC addresses bytes in the program memory. To
used reliably for low priority interrupts. If a high priority  prevent the PC from becoming misaligned with word
interrupt occurs while servicing a low priority interrupt,     instructions, the LSB of PCL is fixed to a value of '0'.
the stack register values stored by the low priority inter-    The PC increments by 2 to address sequential instruc-
rupt will be overwritten.                                      tions in the program memory.

If high priority interrupts are not disabled during low pri-   The CALL, RCALL, GOTO and program branch
ority interrupts, users must save the key registers in         instructions write to the program counter directly. For
software during a low priority interrupt.                      these instructions, the contents of PCLATH and
                                                               PCLATU are not transferred to the program counter.
If no interrupts are used, the fast register stack can be
used to restore the STATUS, WREG and BSR registers             The contents of PCLATH and PCLATU will be trans-
at the end of a subroutine call. To use the fast register      ferred to the program counter by an operation that
stack for a subroutine call, a FAST CALL instruction           writes PCL. Similarly, the upper two bytes of the pro-
must be executed.                                              gram counter will be transferred to PCLATH and
                                                               PCLATU by an operation that reads PCL. This is useful
Example 4-1 shows a source code example that uses              for computed offsets to the PC (see Section 4.8.1).
the fast register stack.
                                                               4.5 Clocking Scheme/Instruction
EXAMPLE 4-1:         FAST REGISTER STACK                                Cycle
                     CODE EXAMPLE
CALL SUB1, FAST                                               The clock input (from OSC1) is internally divided by
                      ;STATUS, WREG, BSR                       four to generate four non-overlapping quadrature
                      ;SAVED IN FAST REGISTER                  clocks, namely Q1, Q2, Q3 and Q4. Internally, the pro-
                      ;STACK                                   gram counter (PC) is incremented every Q1, the
                                                               instruction is fetched from the program memory and
SUB1                 ;RESTORE VALUES SAVED                     latched into the instruction register in Q4. The instruc-
                     ;IN FAST REGISTER STACK                   tion is decoded and executed during the following Q1
                                                               through Q4. The clocks and instruction execution flow
                                                               is shown in Figure 4-4.
      RETURN FAST

FIGURE 4-4:          CLOCK/INSTRUCTION CYCLE

             OSC1    Q1 Q2 Q3 Q4                  Q1 Q2 Q3 Q4                  Q1 Q2 Q3 Q4                   Internal
                 Q1                                                                                          Phase
                 Q2                       PC                        PC+2                          PC+4       Clock
                 Q3          Execute INST (PC-2)            Execute INST (PC)           Execute INST (PC+2)
                Q4                                          Fetch INST (PC+2)             Fetch INST (PC+4)
                PC               Fetch INST (PC)

OSC2/CLKOUT
      (RC mode)

1999-2013 Microchip Technology Inc.                                           DS39026D-page 39
PIC18CXX2

4.6 Instruction Flow/Pipelining                           A fetch cycle begins with the program counter (PC)
                                                          incrementing in Q1.
An "Instruction Cycle" consists of four Q cycles (Q1,
Q2, Q3 and Q4). The instruction fetch and execute are     In the execution cycle, the fetched instruction is latched
pipelined such that fetch takes one instruction cycle,    into the "Instruction Register" (IR) in cycle Q1. This
while decode and execute takes another instruction        instruction is then decoded and executed during the
cycle. However, due to the pipelining, each instruction   Q2, Q3, and Q4 cycles. Data memory is read during Q2
effectively executes in one cycle. If an instruction      (operand read) and written during Q4 (destination
causes the program counter to change (e.g. GOTO),         write).
then two cycles are required to complete the instruction
(Example 4-2).

EXAMPLE 4-2: INSTRUCTION PIPELINE FLOW

                   TCY0               TCY1                   TCY2    TCY3     TCY4          TCY5
                  Fetch 1          Execute 1
1. MOVLW 55h                                              Execute 2
2. MOVWF PORTB                      Fetch 2                Fetch 3

3. BRA SUB_1                                                         Execute 3
                                                                      Fetch 4 Flush (NOP)
4. BSF PORTA, BIT3 (Forced NOP)                                                      Fetch SUB_1 Execute SUB_1

5. Instruction @ address SUB_1

All instructions are single cycle, except for any program branches. These take two cycles since the fetch instruction
is "flushed" from the pipeline, while the new instruction is being fetched and then executed.

4.7 Instructions in Program Memory                        The CALL and GOTO instructions have an absolute pro-
                                                          gram memory address embedded into the instruction.
The program memory is addressed in bytes. Instruc-        Since instructions are always stored on word bound-
tions are stored as two bytes or four bytes in program    aries, the data contained in the instruction is a word
memory. The Least Significant Byte of an instruction      address. The word address is written to PC<20:1>,
word is always stored in a program memory location        which accesses the desired byte address in program
with an even address (LSB ='0'). Figure 4-5 shows an      memory. Instruction #2 in Figure 4-5 shows how the
example of how instruction words are stored in the pro-   instruction "GOTO 000006h" is encoded in the program
gram memory. To maintain alignment with instruction       memory. Program branch instructions, which encode a
boundaries, the PC increments in steps of 2 and the       relative address offset, operate in the same manner.
LSB will always read '0' (see Section 4.4).               The offset value stored in a branch instruction repre-
                                                          sents the number of single word instructions that the
                                                          PC will be offset by. Section 19.0 provides further
                                                          details of the instruction set.

FIGURE 4-5:       INSTRUCTIONS IN PROGRAM MEMORY

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

DS39026D-page 40                                                               1999-2013 Microchip Technology Inc.
                                                                                    PIC18CXX2

4.7.1 TWO-WORD INSTRUCTIONS                                   second word of the instruction is executed by itself (first
                                                              word was skipped), it will execute as a NOP. This action
The PIC18CXX2 devices have four two-word instruc-             is necessary when the two-word instruction is preceded
tions: MOVFF, CALL, GOTO and LFSR. The second                 by a conditional instruction that changes the PC. A pro-
word of these instructions has the 4 MSBs set to 1's          gram example that demonstrates this concept is shown
and is a special kind of NOP instruction. The lower 12-       in Example 4-3. Refer to Section 19.0 for further details
bits of the second word contain data to be used by the        of the instruction set.
instruction. If the first word of the instruction is exe-
cuted, the data in the second word is accessed. If the

EXAMPLE 4-3: TWO-WORD INSTRUCTIONS

CASE 1:              Source Code
Object Code
0110 0110 0000 0000  TSTFSZ REG1                              ; is RAM location 0?
1100 0001 0010 0011
1111 0100 0101 0110  MOVFF REG1, REG2 ; No, execute 2-word instruction
0010 0100 0000 0000
CASE 2:                                                       ; 2nd operand holds address of REG2
Object Code
0110 0110 0000 0000  ADDWF REG3                               ; continue code
1100 0001 0010 0011
1111 0100 0101 0110  Source Code
0010 0100 0000 0000
                     TSTFSZ REG1                              ; is RAM location 0?

                     MOVFF REG1, REG2 ; Yes

                                                              ; 2nd operand becomes NOP

                     ADDWF REG3                               ; continue code

4.8 Lookup Tables                                             4.8.2 TABLE READS/TABLE WRITES

Lookup tables are implemented two ways. These are:            A better method of storing data in program memory
                                                              allows 2 bytes of data to be stored in each instruction
Computed GOTO                                               location.
Table Reads
                                                              Lookup table data may be stored 2 bytes per program
4.8.1 COMPUTED GOTO                                           word by using table reads and writes. The table pointer
                                                              (TBLPTR) specifies the byte address and the table
A computed GOTO is accomplished by adding an offset           latch (TABLAT) contains the data that is read from, or
to the program counter (ADDWF PCL).                           written to program memory. Data is transferred to/from
                                                              program memory one byte at a time.
A lookup table can be formed with an ADDWF PCL
instruction and a group of RETLW 0xnn instructions.           A description of the Table Read/Table Write operation
WREG is loaded with an offset into the table, before          is shown in Section 5.0.
executing a call to that table. The first instruction of the
called routine is the ADDWF PCL instruction. The next
instruction executed will be one of the RETLW 0xnn
instructions that returns the value 0xnn to the calling
function.

The offset value (value in WREG) specifies the number
of bytes that the program counter should advance.

In this method, only one data byte may be stored in
each instruction location and room on the return
address stack is required.

1999-2013 Microchip Technology Inc.                                                               DS39026D-page 41
PIC18CXX2                                                 4.9.1  GENERAL PURPOSE REGISTER
                                                                 FILE
4.9 Data Memory Organization
                                                          The register file can be accessed either directly, or indi-
The data memory is implemented as static RAM. Each        rectly. Indirect addressing operates using the File
register in the data memory has a 12-bit address,         Select Registers (FSRn) and corresponding Indirect
allowing up to 4096 bytes of data memory. Figure 4-6      File Operand (INDFn). The operation of indirect
and Figure 4-7 show the data memory organization for      addressing is shown in Section 4.12.
the PIC18CXX2 devices.
                                                          Enhanced MCU devices may have banked memory in
The data memory map is divided into as many as 16         the GPR area. GPRs are not initialized by a Power-on
banks that contain 256 bytes each. The lower 4 bits of    Reset and are unchanged on all other RESETS.
the Bank Select Register (BSR<3:0>) select which
bank will be accessed. The upper 4 bits for the BSR are   Data RAM is available for use as GPR registers by all
not implemented.                                          instructions. The top half of bank 15 (0xF80 to 0xFFF)
                                                          contains SFRs. All other banks of data memory contain
The data memory contains Special Function Registers       GPR registers, starting with bank 0.
(SFR) and General Purpose Registers (GPR). The
SFRs are used for control and status of the controller    4.9.2 SPECIAL FUNCTION REGISTERS
and peripheral functions, while GPRs are used for data
storage and scratch pad operations in the user's appli-   The Special Function Registers (SFRs) are registers
cation. The SFRs start at the last location of Bank 15    used by the CPU and Peripheral Modules for control-
(0xFFF) and extend downwards. Any remaining space         ling the desired operation of the device. These regis-
beyond the SFRs in the Bank may be implemented as         ters are implemented as static RAM. A list of these
GPRs. GPRs start at the first location of Bank 0 and      registers is given in Table 4-1 and Table 4-2.
grow upwards. Any read of an unimplemented location
will read as '0's.                                        The SFRs can be classified into two sets; those asso-
                                                          ciated with the "core" function and those related to the
The entire data memory may be accessed directly, or       peripheral functions. Those registers related to the
indirectly. Direct addressing may require the use of the  "core" are described in this section, while those related
BSR register. Indirect addressing requires the use of a   to the operation of the peripheral features are
File Select Register (FSRn) and corresponding Indirect    described in the section of that peripheral feature.
File Operand (INDFn). Each FSR holds a 12-bit
address value that can be used to access any location     The SFRs are typically distributed among the peripher-
in the Data Memory map without banking.                   als whose functions they control.

The instruction set and architecture allow operations     The unused SFR locations will be unimplemented and
across all banks. This may be accomplished by indirect    read as '0's. See Table 4-1 for addresses for the SFRs.
addressing or by the use of the MOVFF instruction. The
MOVFF instruction is a two-word/two-cycle instruction
that moves a value from one register to another.

To ensure that commonly used registers (SFRs and
select GPRs) can be accessed in a single cycle,
regardless of the current BSR values, an Access Bank
is implemented. A segment of Bank 0 and a segment of
Bank 15 comprise the Access RAM. Section 4.10 pro-
vides a detailed description of the Access RAM.

DS39026D-page 42                                                  1999-2013 Microchip Technology Inc.
                                                             PIC18CXX2

FIGURE 4-6:  DATA MEMORY MAP FOR PIC18C242/442

BSR<3:0>                              Data Memory Map
    = 0000b
    = 0001b              00h          Access RAM       000h
             Bank 0                        GPR         07Fh
                                                       080h
                        FFh                GPR         0FFh
                         00h                           100h

             Bank 1                                    1FFh
                        FFh
                                                       200h

                                                             Access Bank

                                                                              00h
                                                             Access RAM low 7Fh

= 0010b      Bank 2                     Unused               Access RAM high  80h
= 1110b         to                    Read '00h'                              FFh
                                                             (SFR's)
             Bank 14

                                                       EFFh  When a = 0,
                                                       F00h  the BSR is ignored and the
                                                             Access Bank is used.
                                                       F7Fh  The first 128 bytes are General
                                                             Purpose RAM (from Bank 0).
                                                       F80h  The second 128 bytes are
                                                       FFFh  Special Function Registers
                                                             (from Bank 15).

= 1111b                   00h         Unused
             Bank 15                    SFR

                         FFh

When a = 1,
the BSR is used to specify the
RAM location that the instruc-
tion uses.

1999-2013 Microchip Technology Inc.                         DS39026D-page 43
PIC18CXX2

FIGURE 4-7:       DATA MEMORY MAP FOR PIC18C252/452

BSR<3:0>                            Data Memory Map
    = 0000b
    = 0001b                   00h   Access RAM       000h
    = 0010b       Bank 0                 GPR         07Fh
    = 0011b                              GPR         080h
    = 0100b                  FFh                     0FFh
    = 0101b                   00h        GPR         100h

                  Bank 1                 GPR         1FFh
                             FFh                     200h
                              00h
                                                     2FFh
                  Bank 2                             300h

                             FFh                     3FFh
                              00h                    400h
                  Bank 3
                                                     4FFh
                             FFh                     500h

                  Bank 4            GPR              5FFh  Access Bank
                                                     600h
                                                                            00h
                              00h                          Access RAM low 7Fh
                  Bank 5            GPR
                                                           Access RAM high  80h
                              FFh                                           FFh
                                                           (SFR's)

= 0110b           Bank 6              Unused               When a = 0,
= 1110b              to             Read '00h'             the BSR is ignored and the
                                                           Access Bank is used.
                  Bank 14                                  The first 128 bytes are General
                                                           Purpose RAM (from Bank 0).
                                                     EFFh  The second 128 bytes are
                                                     F00h  Special Function Registers
                                                           (from Bank 15).
                                                     F7Fh
= 1111b                        00h  Unused
                  Bank 15             SFR            F80h
                                                     FFFh
                              FFh

When a = 1,
the BSR is used to specify the
RAM location that the instruc-
tion uses.

DS39026D-page 44                                            1999-2013 Microchip Technology Inc.
                                                                       PIC18CXX2

TABLE 4-1: SPECIAL FUNCTION REGISTER MAP

FFFh       TOSU    FDFh                  INDF2(3)                FBFh   CCPR1H   F9Fh     IPR1
FFEh       TOSH    FDEh               POSTINC2(3)                FBEh   CCPR1L   F9Eh     PIR1
FFDh       TOSL    FDDh               POSTDEC2(3)                FBDh  CCP1CON   F9Dh     PIE1
FFCh     STKPTR    FDCh                PREINC2(3)                FBCh   CCPR2H   F9Ch
FFBh     PCLATU    FDBh                PLUSW2(3)                 FBBh   CCPR2L   F9Bh       --
FFAh     PCLATH    FDAh                                          FBAh  CCP2CON   F9Ah       --
FF9h        PCL    FD9h                   FSR2H                  FB9h            F99h       --
FF8h    TBLPTRU    FD8h                   FSR2L                  FB8h       --   F98h       --
FF7h    TBLPTRH    FD7h                  STATUS                  FB7h       --   F97h       --
FF6h    TBLPTRL    FD6h                   TMR0H                  FB6h       --   F96h       --
FF5h      TABLAT   FD5h                   TMR0L                  FB5h       --   F95h  TRISE(2)
FF4h      PRODH    FD4h                   T0CON                  FB4h       --   F94h  TRISD(2)
FF3h      PRODL    FD3h                                          FB3h       --   F93h    TRISC
FF2h     INTCON    FD2h                       --                 FB2h    TMR3H   F92h    TRISB
FF1h     INTCON2   FD1h                 OSCCON                   FB1h    TMR3L   F91h    TRISA
FF0h     INTCON3   FD0h                  LVDCON                  FB0h    T3CON   F90h       --
FEFh     INDF0(3)  FCFh                 WDTCON                   FAFh       --   F8Fh       --
FEEh  POSTINC0(3)  FCEh                                          FAEh    SPBRG   F8Eh       --
FEDh  POSTDEC0(3)  FCDh                    RCON                  FADh   RCREG    F8Dh       --
FECh   PREINC0(3)  FCCh                   TMR1H                  FACh    TXREG   F8Ch   LATE(2)
FEBh   PLUSW0(3)   FCBh                   TMR1L                  FABh    TXSTA   F8Bh   LATD(2)
FEAh      FSR0H    FCAh                   T1CON                  FAAh    RCSTA   F8Ah     LATC
FE9h      FSR0L    FC9h                    TMR2                  FA9h       --   F89h     LATB
FE8h      WREG     FC8h                                          FA8h       --   F88h     LATA
FE7h     INDF1(3)  FC7h                     PR2                  FA7h       --   F87h       --
FE6h  POSTINC1(3)  FC6h                   T2CON                  FA6h       --   F86h       --
FE5h  POSTDEC1(3)  FC5h                  SSPBUF                  FA5h       --   F85h       --
FE4h   PREINC1(3)  FC4h                  SSPADD                  FA4h       --   F84h       --
FE3h   PLUSW1(3)   FC3h                 SSPSTAT                  FA3h       --   F83h  PORTE(2)
FE2h      FSR1H    FC2h                 SSPCON1                  FA2h       --   F82h  PORTD(2)
FE1h      FSR1L    FC1h                 SSPCON2                  FA1h      IPR2  F81h   PORTC
FE0h        BSR    FC0h                  ADRESH                  FA0h      PIR2  F80h   PORTB
                                         ADRESL                            PIE2         PORTA
                                         ADCON0
                                         ADCON1

                                              --

Note 1: Unimplemented registers are read as '0'.
        2: This register is not available on PIC18C2X2 devices.
        3: This is not a physical register.

1999-2013 Microchip Technology Inc.                                             DS39026D-page 45
PIC18CXX2

TABLE 4-2: REGISTER FILE SUMMARY

File Name  Bit 7   Bit 6               Bit 5      Bit 4      Bit 3      Bit 2           Bit 1   Bit 0                Value on    Details
                                                                                                                       POR,     on page:
                                                                                                                       BOR

TOSU       --                --           --      Top-of-Stack Upper Byte (TOS<20:16>)                               ---0 0000                  37

TOSH       Top-of-Stack High Byte (TOS<15:8>)                                                                        0000 0000                  37

TOSL       Top-of-Stack Low Byte (TOS<7:0>)                                                                          0000 0000                  37

STKPTR     STKFUL STKUNF                  --      Return Stack Pointer                                               00-0 0000                  38

PCLATU     --                --           --      Holding Register for PC<20:16>                                     ---0 0000                  39

PCLATH     Holding Register for PC<15:8>                                                                             0000 0000                  39

PCL        PC Low Byte (PC<7:0>)                                                                                     0000 0000                  39
TBLPTRU
           --                --        bit21(2)   Program Memory Table Pointer Upper Byte (TBLPTR<20:16>)            ---0 0000                  57

TBLPTRH Program Memory Table Pointer High Byte (TBLPTR<15:8>)                                                        0000 0000                  57

TBLPTRL Program Memory Table Pointer Low Byte (TBLPTR<7:0>)                                                          0000 0000                  57

TABLAT     Program Memory Table Latch                                                                                0000 0000                  57

PRODH      Product Register High Byte                                                                                xxxx xxxx                  61

PRODL      Product Register Low Byte                                                                                 xxxx xxxx                  61

INTCON     GIE/GIEH PEIE/GIEL TMR0IE              INT0IE     RBIE       TMR0IF          INT0IF  RBIF                 0000 000x                  65

INTCON2    RBPU INTEDG0 INTEDG1 INTEDG2                        --       TMR0IP          --      RBIP 1111 -1-1                                  66

INTCON3    INT2IP  INT1IP                 --      INT2IE     INT1IE               --    INT2IF  INT1IF 11-0 0-00                                67

INDF0      Uses contents of FSR0 to address data memory - value of FSR0 not changed (not a physical register)        N/A                        50

POSTINC0 Uses contents of FSR0 to address data memory - value of FSR0 post-incremented (not a physical register)     N/A                        50

POSTDEC0 Uses contents of FSR0 to address data memory - value of FSR0 post-decremented (not a physical register)     N/A                        50

PREINC0 Uses contents of FSR0 to address data memory - value of FSR0 pre-incremented (not a physical register)       N/A                        50

PLUSW0     Uses contents of FSR0 to address data memory - value of FSR0 pre-incremented (not a physical register) -  N/A                        50

           value of FSR0 offset by value in WREG

FSR0H      --                --           --      --        Indirect Data Memory Address Pointer 0 High Byte ---- 0000                          50

FSR0L      Indirect Data Memory Address Pointer 0 Low Byte                                                           xxxx xxxx                  50

WREG       Working Register                                                                                          xxxx xxxx

INDF1      Uses contents of FSR1 to address data memory - value of FSR1 not changed (not a physical register)        N/A                        50

POSTINC1 Uses contents of FSR1 to address data memory - value of FSR1 post-incremented (not a physical register)     N/A                        50

POSTDEC1 Uses contents of FSR1 to address data memory - value of FSR1 post-decremented (not a physical register)     N/A                        50

PREINC1 Uses contents of FSR1 to address data memory - value of FSR1 pre-incremented (not a physical register)       N/A                        50

PLUSW1     Uses contents of FSR1 to address data memory - value of FSR1 pre-incremented (not a physical register) -  N/A                        50

           value of FSR1 offset by value in WREG

FSR1H      --                --           --      --        Indirect Data Memory Address Pointer 1 High Byte ---- 0000                          50

FSR1L      Indirect Data Memory Address Pointer 1 Low Byte                                                           xxxx xxxx                  50

BSR        --                --           --      --        Bank Select Register                                     ---- 0000                  49

INDF2      Uses contents of FSR2 to address data memory - value of FSR2 not changed (not a physical register)        N/A                        50

POSTINC2 Uses contents of FSR2 to address data memory - value of FSR2 post-incremented (not a physical register)     N/A                        50

POSTDEC2 Uses contents of FSR2 to address data memory - value of FSR2 post-decremented (not a physical register)     N/A                        50

PREINC2 Uses contents of FSR2 to address data memory - value of FSR2 pre-incremented (not a physical register)       N/A                        50

PLUSW2     Uses contents of FSR2 to address data memory - value of FSR2 pre-incremented (not a physical register) -  N/A                        50

           value of FSR2 offset by value in WREG

FSR2H      --                --           --      --        Indirect Data Memory Address Pointer 2 High Byte ---- 0000                          50

FSR2L      Indirect Data Memory Address Pointer 2 Low Byte                                                           xxxx xxxx                  50

STATUS     --                --           --      N            OV                 Z     DC                     C     ---x xxxx                  52

TMR0H      Timer0 Register High Byte                                                                                 0000 0000                  95

TMR0L      Timer0 Register Low Byte                                                                                  xxxx xxxx                  95

T0CON      TMR0ON T08BIT               T0CS       T0SE       PSA        T0PS2           T0PS1   T0PS0 1111 1111                                 93

OSCCON     --                --           --      --           --                 --    --      SCS                  ---- ---0                  20

LVDCON     --                --        IRVST      LVDEN      LVDL3      LVDL2           LVDL1   LVDL0 --00 0101                                 175

Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition
Note 1: RA6 and associated bits are configured as port pins in RCIO and ECIO oscillator mode only, and read '0' in all other oscillator modes.

       2: Bit 21 of the TBLPTRU allows access to the device configuration bits.

DS39026D-page 46                                                                         1999-2013 Microchip Technology Inc.
                                                                                PIC18CXX2

TABLE 4-2: REGISTER FILE SUMMARY (CONTINUED)

File Name  Bit 7            Bit 6         Bit 5     Bit 4  Bit 3  Bit 2  Bit 1                        Bit 0  Value on    Details
                                                                                                               POR,     on page:
                                                                                                               BOR

WDTCON     --               --            --        --     --     --     --                           SWDTE ---- ---0                           183

RCON       IPEN   LWRT                    --        RI     TO     PD     POR                          BOR    0q-1 11qq 53, 56,

                                                                                                                                                74

TMR1H      Timer1 Register High Byte                                                                         xxxx xxxx                          97

TMR1L      Timer1 Register Low Byte                                                                          xxxx xxxx                          97

T1CON      RD16             --        T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 0-00 0000                                                    97

TMR2       Timer2 Register                                                                                   0000 0000                          101

PR2        Timer2 Period Register                                                                            1111 1111                          102

T2CON      --     TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000                                                              101

SSPBUF     SSP Receive Buffer/Transmit Register                                                              xxxx xxxx                          121
SSPADD     SSP Address Register in I2C Slave Mode. SSP Baud Rate Reload Register in I2C Master Mode.
                                                                                                             0000 0000                          128

SSPSTAT    SMP              CKE           D/A       P      S      R/W    UA                           BF     0000 0000                          116

SSPCON1    WCOL   SSPOV               SSPEN         CKP    SSPM3  SSPM2  SSPM1                        SSPM0 0000 0000                           118

SSPCON2    GCEN ACKSTAT ACKDT                    ACKEN     RCEN   PEN    RSEN                         SEN    0000 0000                          120

ADRESH     A/D Result Register High Byte                                                                     xxxx xxxx 171,172

ADRESL     A/D Result Register Low Byte                                                                      xxxx xxxx 171,172

ADCON0     ADCS1  ADCS0                  CHS2    CHS1      CHS0 GO/DONE  --                           ADON 0000 00-0                            165

ADCON1     ADFM   ADCS2                   --        --     PCFG3  PCFG2  PCFG1                        PCFG0 00-- 0000                           166

CCPR1H     Capture/Compare/PWM Register1 High Byte                                                           xxxx xxxx 111, 113

CCPR1L     Capture/Compare/PWM Register1 Low Byte                                                            xxxx xxxx 111, 113

CCP1CON    --               --        DC1B1      DC1B0     CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000                                                107

CCPR2H     Capture/Compare/PWM Register2 High Byte                                                           xxxx xxxx 111, 113

CCPR2L     Capture/Compare/PWM Register2 Low Byte                                                            xxxx xxxx 111, 113

CCP2CON    --               --        DC2B1      DC2B0     CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000                                                107

TMR3H      Timer3 Register High Byte                                                                         xxxx xxxx                          103

TMR3L      Timer3 Register Low Byte                                                                          xxxx xxxx                          103

T3CON      RD16   T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON 0000 0000                                                                  103

SPBRG      USART1 Baud Rate Generator                                                                        0000 0000                          151

RCREG      USART1 Receive Register                                                                           0000 0000  158, 161,

                                                                                                                                                163

TXREG      USART1 Transmit Register                                                                          0000 0000  156, 159,

                                                                                                                                                162

TXSTA      CSRC             TX9          TXEN    SYNC      --     BRGH   TRMT                         TX9D 0000 -010                            149

RCSTA      SPEN             RX9          SREN    CREN      ADDEN  FERR   OERR                         RX9D 0000 000x                            150

Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition
Note 1: RA6 and associated bits are configured as port pins in RCIO and ECIO oscillator mode only, and read '0' in all other oscillator modes.

       2: Bit 21 of the TBLPTRU allows access to the device configuration bits.

1999-2013 Microchip Technology Inc.                                                                         DS39026D-page 47
PIC18CXX2

TABLE 4-2: REGISTER FILE SUMMARY (CONTINUED)

File Name  Bit 7  Bit 6   Bit 5                       Bit 4  Bit 3     Bit 2  Bit 1                   Bit 0  Value on    Details
                                                                                                               POR,     on page:
                                                                                                               BOR

IPR2       --     --      --                          --     BCLIP     LVDIP  TMR3IP CCP2IP ---- 1111                                           73

PIR2       --     --      --                          --     BCLIF     LVDIF  TMR3IF CCP2IF ---- 0000                                           69

PIE2       --     --      --                          --     BCLIE     LVDIE  TMR3IE CCP2IE ---- 0000                                           71

IPR1       PSPIP  ADIP    RCIP                        TXIP   SSPIP     CCP1IP TMR2IP TMR1IP 1111 1111                                           72

PIR1       PSPIF  ADIF    RCIF                        TXIF   SSPIF     CCP1IF TMR2IF TMR1IF 0000 0000                                           68

PIE1       PSPIE  ADIE    RCIE                        TXIE   SSPIE     CCP1IE TMR2IE TMR1IE 0000 0000                                           70

TRISE      IBF    OBF     IBOV   PSPMODE                     --        Data Direction bits for PORTE         0000 -111                          88

TRISD      Data Direction Control Register for PORTD                                                         1111 1111                          85

TRISC      Data Direction Control Register for PORTC                                                         1111 1111                          83

TRISB      Data Direction Control Register for PORTB                                                         1111 1111                          80
TRISA
           --     TRISA6(1) Data Direction Control Register for PORTA                                        -111 1111                          77

LATE       --     --      --                          --     --        Read PORTE Data Latch,                ---- -xxx                          87

                                                                       Write PORTE Data Latch

LATD       Read PORTD Data Latch, Write PORTD Data Latch                                                     xxxx xxxx                          85

LATC       Read PORTC Data Latch, Write PORTC Data Latch                                                     xxxx xxxx                          83

LATB       Read PORTB Data Latch, Write PORTB Data Latch                                                     xxxx xxxx                          80
LATA
           --     LATA6(1) Read PORTA Data Latch, Write PORTA Data Latch(1)                                  -xxx xxxx                          77

PORTE      Read PORTE pins, Write PORTE Data Latch                                                           ---- -000                          87

PORTD      Read PORTD pins, Write PORTD Data Latch                                                           xxxx xxxx                          85

PORTC      Read PORTC pins, Write PORTC Data Latch                                                           xxxx xxxx                          83

PORTB      Read PORTB pins, Write PORTB Data Latch                                                           xxxx xxxx                          80
PORTA
           --     RA6(1)  Read PORTA pins, Write PORTA Data Latch(1)                                         -x0x 0000                          77

Legend: x = unknown, u = unchanged, - = unimplemented, q = value depends on condition
Note 1: RA6 and associated bits are configured as port pins in RCIO and ECIO oscillator mode only, and read '0' in all other oscillator modes.

       2: Bit 21 of the TBLPTRU allows access to the device configuration bits.

DS39026D-page 48                                                               1999-2013 Microchip Technology Inc.
                                                                               PIC18CXX2

4.10 Access Bank                                                   can be accessed without any software overhead. This
                                                                   is useful for testing status flags and modifying control
The Access Bank is an architectural enhancement,                   bits.
which is very useful for C compiler code optimization.
The techniques used by the C compiler may also be                  4.11 Bank Select Register (BSR)
useful for programs written in assembly.
                                                                   The need for a large general purpose memory space
This data memory region can be used for:                           dictates a RAM banking scheme. The data memory is
                                                                   partitioned into sixteen banks. When using direct
Intermediate computational values                                addressing, the BSR should be configured for the
Local variables of subroutines                                   desired bank.
Faster context saving/switching of variables
Common variables                                                 BSR<3:0> holds the upper 4 bits of the 12-bit RAM
Faster evaluation/control of SFRs (no banking)                   address. The BSR<7:4> bits will always read '0's, and
                                                                   writes will have no effect.
The Access Bank is comprised of the upper 128 bytes
in Bank 15 (SFRs) and the lower 128 bytes in Bank 0.               A MOVLB instruction has been provided in the instruc-
These two sections will be referred to as Access RAM               tion set to assist in selecting banks.
High and Access RAM Low, respectively. Figure 4-6
and Figure 4-7 indicate the Access RAM areas.                      If the currently selected bank is not implemented, any
                                                                   read will return all '0's and all writes are ignored. The
A bit in the instruction word specifies if the operation is        STATUS register bits will be set/cleared as appropriate
to occur in the bank specified by the BSR register or in           for the instruction performed.
the Access Bank. This bit is denoted by the 'a' bit (for
access bit).                                                       Each Bank extends up to FFh (256 bytes). All data
                                                                   memory is implemented as static RAM.
When forced in the Access Bank (a = '0'), the last
address in Access RAM Low is followed by the first                 A MOVFF instruction ignores the BSR, since the 12-bit
address in Access RAM High. Access RAM High maps                   addresses are embedded into the instruction word.
the Special Function registers, so that these registers
                                                                   Section 4.12 provides a description of indirect address-
                                                                   ing, which allows linear addressing of the entire RAM
                                                                   space.

FIGURE 4-8:     DIRECT ADDRESSING

                                                    Direct Addressing

             BSR<3:0>                 7  From Opcode(3)            0

Bank Select(2)         Location Select(3)

                                                             00h      01h          0Eh     0Fh
                                                                               E00h     F00h
                                                             000h     100h

                                         Data
                                         Memory(1)

                                                             0FFh     1FFh     EFFh     FFFh

                                                             Bank 0 Bank 1     Bank 14 Bank 15

Note 1: For register file map detail, see Table 4-1.

2: The access bit of the instruction can be used to force an override of the selected bank (BSR<3:0>) to the reg-
     isters of the Access Bank.

3: The MOVFF instruction embeds the entire 12-bit address in the instruction.

1999-2013 Microchip Technology Inc.                                                    DS39026D-page 49
PIC18CXX2

4.12 Indirect Addressing, INDF and                          If INDF0, INDF1 or INDF2 are read indirectly via an
         FSR Registers                                      FSR, all '0's are read (zero bit is set). Similarly, if
                                                            INDF0, INDF1 or INDF2 are written to indirectly, the
Indirect addressing is a mode of addressing data mem-       operation will be equivalent to a NOP instruction and the
ory, where the data memory address in the instruction       STATUS bits are not affected.
is not fixed. An FSR register is used as a pointer to the
data memory location that is to be read or written. Since   4.12.1 INDIRECT ADDRESSING
this pointer is in RAM, the contents can be modified by                   OPERATION
the program. This can be useful for data tables in the
data memory and for software stacks. Figure 4-9             Each FSR register has an INDF register associated
shows the operation of indirect addressing. This shows      with it, plus four additional register addresses. Perform-
the moving of the value to the data memory address,         ing an operation on one of these five registers deter-
specified by the value of the FSR register.                 mines how the FSR will be modified during indirect
                                                            addressing.
Indirect addressing is possible by using one of the         When data access is done to one of the five INDFn
INDF registers. Any instruction using the INDF register     locations, the address selected will configure the FSRn
actually accesses the register pointed to by the File       register to:
Select Register, FSR. Reading the INDF register itself,      Do nothing to FSRn after an indirect access (no
indirectly (FSR = '0'), will read 00h. Writing to the INDF
register indirectly, results in a no operation. The FSR        change) - INDFn
register contains a 12-bit address, which is shown in       Auto-decrement FSRn after an indirect access
Figure 4-10.
                                                               (post-decrement) - POSTDECn
The INDFn register is not a physical register. Address-      Auto-increment FSRn after an indirect access
ing INDFn actually addresses the register whose
address is contained in the FSRn register (FSRn is a           (post-increment) - POSTINCn
pointer). This is indirect addressing.                      Auto-increment FSRn before an indirect access

Example 4-4 shows a simple use of indirect addressing          (pre-increment) - PREINCn
to clear the RAM in Bank1 (locations 100h-1FFh) in a         Use the value in the WREG register as an offset
minimum number of instructions.
                                                               to FSRn. Do not modify the value of the WREG or
EXAMPLE 4-4:      HOW TO CLEAR RAM                             the FSRn register after an indirect access (no
                  (BANK1) USING INDIRECT                       change) - PLUSWn
                  ADDRESSING                                When using the auto-increment or auto-decrement fea-
                                                            tures, the effect on the FSR is not reflected in the
          LFSR FSR0, 0x100  ;                               STATUS register. For example, if the indirect address
NEXT CLRF POSTINC0          ; Clear INDF register           causes the FSR to equal '0', the Z bit will not be set.
                            ; & inc pointer                 Incrementing or decrementing an FSR affects all 12
          BTFSS FSR0H, 1    ; All done w/ Bank1?            bits. That is, when FSRnL overflows from an increment,
          GOTO NEXT         ; NO, clear next                FSRnH will be incremented automatically.
CONTINUE                    ; YES, continue                 Adding these features allows the FSRn to be used as a
                                                            stack pointer, in addition to its uses for table operations
There are three indirect addressing registers. To           in data memory.
address the entire data memory space (4096 bytes),          Each FSR has an address associated with it that per-
these registers are 12-bit wide. To store the 12-bits of    forms an indexed indirect access. When a data access
addressing information, two 8-bit registers are             to this INDFn location (PLUSWn) occurs, the FSRn is
required. These indirect addressing registers are:          configured to add the signed value in the WREG regis-
                                                            ter and the value in FSR to form the address before an
1. FSR0: composed of FSR0H:FSR0L                            indirect access. The FSR value is not changed.
                                                            If an FSR register contains a value that points to one of
2. FSR1: composed of FSR1H:FSR1L                            the INDFn, an indirect read will read 00h (zero bit is
                                                            set), while an indirect write will be equivalent to a NOP
3. FSR2: composed of FSR2H:FSR2L                            (STATUS bits are not affected).

In addition, there are registers INDF0, INDF1 and                                        1999-2013 Microchip Technology Inc.
INDF2, which are not physically implemented. Reading
or writing to these registers activates indirect address-
ing, with the value in the corresponding FSR register
being the address of the data.

If an instruction writes a value to INDF0, the value will
be written to the address pointed to by FSR0H:FSR0L.
A read from INDF1 reads the data from the address
pointed to by FSR1H:FSR1L. INDFn can be used in
code anywhere an operand can be used.

DS39026D-page 50
                                                                                PIC18CXX2

If an indirect addressing operation is done where the
target address is an FSRnH or FSRnL register, the
write operation will dominate over the pre- or post-
increment/decrement functions.

FIGURE 4-9:       INDIRECT ADDRESSING OPERATION

                                                                 RAM 0h

                  Instruction                         Address
                  Executed

                             Opcode

                                                                                FFFh

                                                       12

                                                                File Address = access of an indirect addressing register

                                      BSR<3:0> 12                12
                                                                           FSR
                  Instruction                         48
                  Fetched

                                      Opcode           File

FIGURE 4-10:      INDIRECT ADDRESSING

                  Indirect Addressing

              11  FSR Register                               0

                  Location Select

                                                          0000h

                                      Data
                                      Memory(1)

                                                          0FFFh

Note 1: For register file map detail, see Table 4-1.

1999-2013 Microchip Technology Inc.                                                  DS39026D-page 51
PIC18CXX2

4.13 STATUS Register                                         For example, CLRF STATUS will clear the upper three
                                                             bits and set the Z bit. This leaves the STATUS register
The STATUS register, shown in Register 4-2, contains         as 000u u1uu (where u = unchanged).
the arithmetic status of the ALU. The STATUS register
can be the destination for any instruction, as with any      It is recommended, therefore, that only BCF, BSF,
other register. If the STATUS register is the destination    SWAPF, MOVFF and MOVWF instructions are used to
for an instruction that affects the Z, DC, C, OV or N bits,  alter the STATUS register, because these instructions
then the write to these five bits is disabled. These bits    do not affect the Z, C, DC, OV or N bits from the
are set or cleared according to the device logic. There-     STATUS register. For other instructions not affecting
fore, the result of an instruction with the STATUS regis-    any status bits, see Table 19-2.
ter as destination may be different than intended.
                                                                Note: The C and DC bits operate as a borrow and
                                                                            digit borrow bit respectively, in subtraction.

REGISTER 4-2: STATUS REGISTER

                  U-0    U-0                U-0              R/W-x  R/W-x         R/W-x  R/W-x  R/W-x
                                                                N    OV              Z    DC       C
                  --     --                 --                                                      bit 0

                  bit 7

bit 7-5           Unimplemented: Read as '0'
bit 4
bit 3             N: Negative bit
bit 2             This bit is used for signed arithmetic (2's complement). It indicates whether the result was
bit 1             negative, (ALU MSB = 1).

bit 0             1 = Result was negative
                  0 = Result was positive

                  OV: Overflow bit
                  This bit is used for signed arithmetic (2's complement). It indicates an overflow of the 7-bit
                  magnitude, which causes the sign bit (bit7) to change state.

                  1 = Overflow occurred for signed arithmetic (in this arithmetic operation)
                  0 = No overflow occurred

                  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

                  DC: Digit carry/borrow bit
                  For ADDWF, ADDLW, SUBLW, and SUBWF instructions

                  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

                  Note:  For borrow, the polarity is reversed. A subtraction is executed by adding the two's
                         complement of the second operand. For rotate (RRF, RLF) instructions, this bit is
                         loaded with either the bit 4 or bit 3 of the source register.

                  C: Carry/borrow bit
                  For ADDWF, ADDLW, SUBLW, and SUBWF instructions

                  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:  For borrow, the polarity is reversed. A subtraction is executed by adding the two's
                         complement of the second operand. For rotate (RRF, RLF) instructions, this bit is
                         loaded with either the high or low order bit of the source register.

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

DS39026D-page 52                                                            1999-2013 Microchip Technology Inc.
                                                                        PIC18CXX2

4.13.1 RCON REGISTER                                            .

The Reset Control (RCON) register contains flag bits      Note 1: If the BOREN configuration bit is set
that allow differentiation between the sources of a                   (Brown-out Reset enabled), the BOR bit is
device RESET. These flags include the TO, PD, POR,                    '1' on a Power-on Reset. After a Brown-
BOR and RI bits. This register is readable and writable.              out Reset has occurred, the BOR bit will
                                                                      be clear and must be set by firmware to
                                                                      indicate the occurrence of the next Brown-
                                                                      out Reset.
                                                                      If the BOREN configuration bit is clear
                                                                      (Brown-out Reset disabled), BOR is
                                                                      unknown after Power-on Reset and
                                                                      Brown-out Reset conditions.

                                                                  2: It is recommended that the POR bit be set
                                                                      after a Power-on Reset has been
                                                                      detected, so that subsequent Power-on
                                                                      Resets may be detected.

REGISTER 4-3: RCON REGISTER

R/W-0                                 R/W-0  U-0          R/W-1  R/W-1  R/W-1  R/W-0  R/W-0
                                                            RI     TO     PD   POR    BOR
IPEN                                  LWRT   --
                                                                                          bit 0
bit 7

bit 7 IPEN: Interrupt Priority Enable bit
            1 = Enable priority levels on interrupts
            0 = Disable priority levels on interrupts (16CXXX compatibility mode)

bit 6 LWRT: Long Write Enable bit
            1 = Enable TBLWT to internal program memory
                  Once this bit is set, it can only be cleared by a POR or MCLR Reset.
            0 = Disable TBLWT to internal program memory; TBLWT only to external program memory

bit 5 Unimplemented: Read as '0'

bit 4 RI: RESET Instruction Flag bit
            1 = The RESET instruction was not executed
            0 = The RESET instruction was executed causing a device RESET
                  (must be set in software after a Brown-out Reset occurs)

bit 3 TO: Watchdog Time-out Flag bit
            1 = After power-up, CLRWDT instruction, or SLEEP instruction
            0 = A WDT time-out occurred

bit 2 PD: Power-down Detection Flag bit
            1 = After power-up or by the CLRWDT instruction
            0 = By execution of the SLEEP instruction

bit 1 POR: Power-on Reset Status bit
            1 = A Power-on Reset has not occurred
            0 = A Power-on Reset occurred
                  (must be set in software after a Power-on Reset occurs)

bit 0 BOR: Brown-out Reset Status bit
            1 = A Brown-out Reset has not occurred
            0 = A Brown-out Reset occurred
                  (must be set in software after a Brown-out Reset occurs)

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

1999-2013 Microchip Technology Inc.                                           DS39026D-page 53
PIC18CXX2

NOTES:

DS39026D-page 54   1999-2013 Microchip Technology Inc.
                                                                                PIC18CXX2

5.0 TABLE READS/TABLE WRITES                                  Table Read operations retrieve data from program
                                                              memory and place it into the data memory space.
Enhanced devices have two memory spaces: the pro-             Figure 5-1 shows the operation of a Table Read with
gram memory space and the data memory space. The              program and data memory.
program memory space is 16-bits wide, while the data
memory space is 8 bits wide. Table Reads and Table            Table Write operations store data from the data mem-
Writes have been provided to move data between                ory space into program memory. Figure 5-2 shows the
these two memory spaces through an 8-bit register             operation of a Table Write with program and data
(TABLAT).                                                     memory.

The operations that allow the processor to move data          Table operations work with byte entities. A table block
between the data and program memory spaces are:               containing data is not required to be word aligned, so a
                                                              table block can start and end at any byte address. If a
Table Read (TBLRD)                                          Table Write is being used to write an executable pro-
Table Write (TBLWT)                                         gram to program memory, program instructions will
                                                              need to be word aligned.

FIGURE 5-1:  TABLE READ OPERATION

                                Instruction: TBLRD*

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

             Program Memory
             (TBLPTR)

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

FIGURE 5-2:  TABLE WRITE OPERATION

                                                           Instruction: TBLWT*

                                                              Program Memory

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

             Program Memory                                                                  DS39026D-page 55
             (TBLPTR)

   Note 1: Table Pointer points to a byte in program memory.
1999-2013 Microchip Technology Inc.
PIC18CXX2

5.1 Control Registers                                   5.1.1 RCON REGISTER

Several control registers are used in conjunction with  The LWRT bit specifies the operation of Table Writes to
the TBLRD and TBLWT instructions. These include the:    internal memory when the VPP voltage is applied to the
TBLPTR registers                                      MCLR pin. When the LWRT bit is set, the controller
TABLAT register                                       continues to execute user code, but long Table Writes
RCON register                                         are allowed (for programming internal program mem-
                                                        ory) from user mode. The LWRT bit can be cleared only
                                                        by performing either a POR or MCLR Reset.

REGISTER 5-1:     RCON REGISTER (ADDRESS: FD0h)

                  R/W-0 R/W-0               U-0         R/W-1  R/W-1       R/W-1   R/W-0  R/W-0
                                                                 TO          PD    POR    BOR
                  IPEN   LWRT               --          RI
                                                                                              bit 0
                  bit 7

bit 7 IPEN: Interrupt Priority Enable bit

            1 = Enable priority levels on interrupts
            0 = Disable priority levels on interrupts (16CXXX compatibility mode)

bit 6 LWRT: Long Write Enable bit

            1 = Enable TBLWT to internal program memory
            0 = Disable TBLWT to internal program memory.

                  Note:  Only cleared on a POR or MCLR Reset.
                         This bit has no effect on TBLWTs to external program memory.

bit 5 Unimplemented: Read as '0'

bit 4 RI: RESET Instruction Flag bit

            1 = No RESET instruction occurred
            0 = A RESET instruction occurred

bit 3 TO: Time-out bit

            1 = After power-up, CLRWDT instruction, or SLEEP instruction
            0 = A WDT time-out occurred

bit 2 PD: Power-down bit

            1 = After power-up or by the CLRWDT instruction
            0 = By execution of the SLEEP instruction

bit 1 POR: Power-on Reset Status bit

            1 = No Power-on Reset occurred
            0 = A Power-on Reset occurred (must be set in software after a Power-on Reset occurs)

bit 0 BOR: Brown-out Reset Status bit

            1 = No Brown-out Reset or POR Reset occurred
            0 = A Brown-out Reset or POR Reset occurred

                 (must be set in software after a Brown-out Reset occurs)

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

DS39026D-page 56                                                       1999-2013 Microchip Technology Inc.
                                                                  PIC18CXX2

5.1.2 TABLAT - TABLE LATCH REGISTER                        5.1.3  TBLPTR - TABLE POINTER
                                                                  REGISTER
The Table Latch (TABLAT) is an 8-bit register mapped
into the SFR space. The Table Latch is used to hold        The Table Pointer (TBLPTR) addresses a byte within
8-bit data during data transfers between program           the program memory. The TBLPTR is comprised of
memory and data memory.                                    three SFR registers (Table Pointer Upper Byte, High
                                                           Byte and Low Byte). These three registers
                                                           (TBLPTRU:TBLPTRH:TBLPTRL) join to form a 22-bit
                                                           wide pointer. The lower 21-bits allow the device to
                                                           address up to 2 Mbytes of program memory space. The
                                                           22nd bit allows access to the Device ID, the User ID
                                                           and the Configuration bits.

                                                           The Table Pointer, TBLPTR, is used by the TBLRD and
                                                           TBLWT instructions. These instructions can update the
                                                           TBLPTR in one of four ways, based on the table operation.
                                                           These operations are shown in Table 5-1. These opera-
                                                           tions on the TBLPTR only affect the lower 21-bits.

TABLE 5-1:     TABLE POINTER OPERATIONS WITH TBLRD AND TBLWT INSTRUCTIONS
                                                              Operation on Table Pointer
      Example                                                    TBLPTR is not modified
      TBLRD*
      TBLWT*                                        TBLPTR is incremented after the read/write
     TBLRD*+                                        TBLPTR is decremented after the read/write
     TBLWT*+                                       TBLPTR is incremented before the read/write
     TBLRD*-
     TBLWT*-
     TBLRD+*
     TBLWT+*

5.2 Internal Program Memory Read/                          When a Table Write occurs to an even program mem-
         Writes                                            ory address (TBLPTR<0> = 0), the contents of TABLAT
                                                           are transferred to an internal holding register. This is
5.2.1 TABLE READ OVERVIEW (TBLRD)                          performed as a short write and the program memory
                                                           block is not actually programmed at this time. The hold-
The TBLRD instructions are used to read data from          ing register is not accessible by the user.
program memory to data memory.
                                                           When a Table Write occurs to an odd program memory
TBLPTR points to a byte address in program space.          address (TBLPTR<0>=1), a long write is started. Dur-
Executing TBLRD places the byte pointed to into TAB-       ing the long write, the contents of TABLAT are written
LAT. In addition, TBLPTR can be modified automati-         to the high byte of the program memory block and the
cally for the next Table Read operation.                   contents of the holding register are transferred to the
                                                           low byte of the program memory block.
Table Reads from program memory are performed one
byte at a time. The instruction will load TABLAT with the  Figure 5-3 shows the holding register and the program
one byte from program memory pointed to by TBLPTR.         memory write blocks.

5.2.2  INTERNAL PROGRAM MEMORY                             If a single byte is to be programmed, the low (even)
       WRITE BLOCK SIZE                                    byte of the destination program word should be read
                                                           using TBLRD*, modified or changed, if required, and
The internal program memory of PIC18CXXX devices           written back to the same address using TBLWT*+. The
is written in blocks. For PIC18CXX2 devices, the write     high (odd) byte should be read using TBLRD*, modified
block size is 2 bytes. Consequently, Table Write opera-    or changed if required, and written back to the same
tions to internal program memory are performed in          address using TBLWT. A write to the odd address will
pairs, one byte at a time.                                 cause a long write to begin. This process ensures that
                                                           existing data in either byte will not be changed unless
                                                           desired.

1999-2013 Microchip Technology Inc.                              DS39026D-page 57
PIC18CXX2

FIGURE 5-3:       HOLDING REGISTER AND THE WRITE BLOCK

                  Program Memory (x 2-bits)

                  Block n                                        Write Block
                                                             MSB
                                                                              Holding Register

                  Block n + 1

                  Block n + 2

                                                             The write to the MSB of the Write Block
                                                             causes the entire block to be written to pro-
                                                             gram memory. The program memory block
                                                             that is written depends on the address that is
                                                             written to in the MSB of the Write Block.

5.2.2.1 Operation                                            5.2.2.2 Sequence of Events

The long write is what actually programs words of data       The sequence of events for programming an internal
into the internal memory. When a TBLWT to the MSB of         program memory location should be:
the write block occurs, instruction execution is halted.
During this time, programming voltage and the data           1. Enable the interrupt that terminates the long
stored in internal latches is applied to program memory.           write. Disable all other interrupts.

For a long write to occur:                                   2. Clear the source interrupt flag.
                                                             3. If Interrupt Service Routine execution is desired
1. MCLR/VPP pin must be at the programming
      voltage                                                      when the device wakes, enable global
                                                                   interrupts.
2. LWRT bit must be set                                      4. Set LWRT bit in the RCON register.
3. TBLWT to the address of the MSB of the write              5. Raise MCLR/VPP pin to the programming
                                                                   voltage, VPP.
      block                                                  6. Clear the WDT (if enabled).
                                                             7. Set the interrupt source to interrupt at the
If the LWRT bit is clear, a short write will occur and pro-        required time.
gram memory will not be changed. If the TBLWT is not         8. Execute the Table Write for the lower (even)
to the MSB of the write block, then the programming                byte. This will be a short write.
phase is not initiated.                                      9. Execute the Table Write for the upper (odd) byte.
                                                                   This will be a long write. The microcontroller will
Setting the LWRT bit enables long writes when the                  then halt internal operations. (This is not the
MCLR pin is taken to VPP voltage. Once the LWRT bit                same as SLEEP mode, as the clocks and
is set, it can be cleared only by performing a POR or              peripherals will continue to run.) The interrupt
MCLR Reset.                                                        will cause the microcontroller to resume
                                                                   operation.
To ensure that the memory location has been well pro-        10. If GIE was set, service the interrupt request.
grammed, a minimum programming time is required.             11. Lower MCLR/VPP pin to VDD.
The long write can be terminated after the program-          12. Verify the memory location (Table Read).
ming time has expired by a RESET or an interrupt.
Having only one interrupt source enabled to terminate
the long write ensures that no unintended interrupts will
prematurely terminate the long write.

DS39026D-page 58                                              1999-2013 Microchip Technology Inc.
                                                                                      PIC18CXX2

5.2.3 INTERRUPTS                                              Depending on the states of interrupt priority bits, the
                                                              GIE/GIEH bit or the PIE/GIEL bit, program execution
The long write must be terminated by a RESET or any           can either be vectored to the high or low priority Inter-
interrupt.                                                    rupt Service Routine (ISR), or continue execution from
                                                              where programming commenced.
The interrupt source must have its interrupt enable bit
set. When the source sets its interrupt flag, program-        In either case, the interrupt flag will not be cleared
ming will terminate. This will occur, regardless of the       when programming is terminated and will need to be
settings of interrupt priority bits, the GIE/GIEH bit, or     cleared by the software.
the PIE/GIEL bit.

TABLE 5-2: LONG WRITE EXECUTION, INTERRUPT ENABLE BITS AND INTERRUPT RESULTS

  GIE/       PIE/       Priority      Interrupt  Interrupt                            Action
GIEH        GIEL                      Enable       Flag
                            X
    X          X                           0               X  Long write continues
                            X         (default)               even if interrupt flag becomes set.
    X          X
    0          0            X              1               0  Long write continues, will resume operations
(default)  (default)                       1                  when the interrupt flag is set.
    0                       1
(default)      1      high priority        1               1  Terminates long write, executes next instruction.
                                                              Interrupt flag not cleared.
    1          0        (default)          1
           (default)        0                              1  Terminates long write, executes next instruction.
    0                      low             1                  Interrupt flag not cleared.
(default)      1
                            0              1               1  Terminates long write, executes next instruction.
    1          0           low                                Interrupt flag not cleared.
           (default)
                            1                                 Terminates long write,
                      high priority
                                                           1  branches to low priority interrupt vector.
                        (default)
                                                              Interrupt flag can be cleared by ISR.

                                                              Terminates long write,

                                                           1  branches to high priority interrupt vector.

                                                              Interrupt flag can be cleared by ISR.

5.2.4      UNEXPECTED TERMINATION OF
           WRITE OPERATIONS

If a write is terminated by an unplanned event such as
loss of power, an unexpected RESET, or an interrupt
that was not disabled, the memory location just pro-
grammed should be verified and reprogrammed if
needed.

1999-2013 Microchip Technology Inc.                                                                 DS39026D-page 59
PIC18CXX2

NOTES:

DS39026D-page 60   1999-2013 Microchip Technology Inc.
                                                                                       PIC18CXX2

6.0 8 X 8 HARDWARE MULTIPLIER                                Making the 8 x 8 multiplier execute in a single cycle
                                                             gives the following advantages:
6.1 Introduction
                                                             Higher computational throughput
An 8 x 8 hardware multiplier is included in the ALU of       Reduces code size requirements for multiply
the PIC18CXX2 devices. By making the multiply a
hardware operation, it completes in a single instruction        algorithms
cycle. This is an unsigned multiply that gives a 16-bit
result. The result is stored into the 16-bit product regis-  The performance increase allows the device to be used
ter pair (PRODH:PRODL). The multiplier does not              in applications previously reserved for Digital Signal
affect any flags in the ALUSTA register.                     Processors.

                                                             Table 6-1 shows a performance comparison between
                                                             enhanced devices using the single cycle hardware mul-
                                                             tiply, and performing the same function without the
                                                             hardware multiply.

TABLE 6-1: PERFORMANCE COMPARISON

                                                             Program  Cycles                  Time
                                                             Memory   (Max)
     Routine           Multiply Method                       (Words)                @ 40 MHz  @ 10 MHz  @ 4 MHz
8 x 8 unsigned                                                          69
                  Without hardware multiply                      13       1           6.9 s     27.6 s    69 s
   8 x 8 signed        Hardware multiply                          1      91           100 ns    400 ns     1 s
16 x 16 unsigned                                                 33       6           9.1 s     36.4 s    91 s
                  Without hardware multiply                       6     242           600 ns    2.4 s      6 s
16 x 16 signed        Hardware multiply                         21      24           24.2 s    96.8 s   242 s
                                                                 24     254           2.4 s     9.6 s     24 s
                  Without hardware multiply                      52      36           25.4 s   102.6 s   254 s
                       Hardware multiply                         36                   3.6 s     14.4 s    36 s

                  Without hardware multiply
                       Hardware multiply

6.2 Operation                                                EXAMPLE 6-2:           8 x 8 SIGNED MULTIPLY
                                                                                    ROUTINE
Example 6-1 shows the sequence to do an 8 x 8
unsigned multiply. Only one instruction is required                   MOVF   ARG1, W   ; ARG1 * ARG2 ->
when one argument of the multiply is already loaded in                MULWF  ARG2
the WREG register.                                                                     ; PRODH:PRODL
                                                                      BTFSC  ARG2, SB
Example 6-2 shows the sequence to do an 8 x 8 signed                  SUBWF  PRODH, F  ; Test Sign Bit
multiply. To account for the sign bits of the arguments,
each argument's Most Significant bit (MSb) is tested                  MOVF   ARG2, W   ; PRODH = PRODH
and the appropriate subtractions are done.                            BTFSC  ARG1, SB
                                                                      SUBWF  PRODH, F  ;            - ARG1

                                                                                       ; Test Sign Bit

                                                                                       ; PRODH = PRODH

EXAMPLE 6-1:      8 x 8 UNSIGNED                                                       ;            - ARG2
                  MULTIPLY ROUTINE

MOVF   ARG1, W    ;                                          Example 6-3 shows the sequence to do a 16 x 16
MULWF  ARG2       ; ARG1 * ARG2 ->                           unsigned multiply. Equation 6-1 shows the algorithm
                  ; PRODH:PRODL                              that is used. The 32-bit result is stored in four registers,
                                                             RES3:RES0.

                                                             EQUATION 6-1:          16 x 16 UNSIGNED
                                                                                    MULTIPLICATION
                                                                                    ALGORITHM

                                                             RES3:RES0 =            ARG1H:ARG1L  ARG2H:ARG2L
                                                                                 =  (ARG1H  ARG2H  216)+
                                                                                    (ARG1H  ARG2L  28)+
                                                                                    (ARG1L  ARG2H  28)+

                                                                                    (ARG1L  ARG2L)

1999-2013 Microchip Technology Inc.                                                          DS39026D-page 61
PIC18CXX2

EXAMPLE 6-3:        16 x 16 UNSIGNED                    EXAMPLE 6-4:        16 x 16 SIGNED
                    MULTIPLY ROUTINE                                        MULTIPLY ROUTINE

     MOVF    ARG1L, W                                        MOVF    ARG1L, W
     MULWF                                                   MULWF
             ARG2L     ; ARG1L * ARG2L ->                            ARG2L      ; ARG1L * ARG2L ->
     MOVFF                                                   MOVFF
     MOVFF             ; PRODH:PRODL                         MOVFF              ; PRODH:PRODL
;                                                       ;
     MOVF    PRODH, RES1 ;                                   MOVF    PRODH, RES1 ;
     MULWF                                                   MULWF
             PRODL, RES0 ;                                           PRODL, RES0 ;
     MOVFF                                                   MOVFF
     MOVFF   ARG1H, W                                        MOVFF   ARG1H, W
;                                                       ;
     MOVF    ARG2H     ; ARG1H * ARG2H ->                    MOVF    ARG2H      ; ARG1H * ARG2H ->
     MULWF                                                   MULWF
                       ; PRODH:PRODL                                            ; PRODH:PRODL
     MOVF                                                    MOVF
     ADDWF   PRODH, RES3 ;                                   ADDWF   PRODH, RES3 ;
     MOVF                                                    MOVF
     ADDWFC  PRODL, RES2 ;                                   ADDWFC  PRODL, RES2 ;
     CLRF                                                    CLRF
     ADDWFC  ARG1L, W  ; ARG1L * ARG2H ->                    ADDWFC  ARG1L, W   ; ARG1L * ARG2H ->
;            ARG2H     ; PRODH:PRODL                    ;            ARG2H      ; PRODH:PRODL
     MOVF              ;                                     MOVF               ;
     MULWF   PRODL, W  ; Add cross                           MULWF   PRODL, W   ; Add cross
             RES1, F   ; products                                    RES1, F    ; products
     MOVF    PRODH, W  ;                                     MOVF    PRODH, W   ;
     ADDWF   RES2, F   ;                                     ADDWF   RES2, F    ;
     MOVF    WREG, F   ;                                     MOVF    WREG, F    ;
     ADDWFC  RES3, F                                         ADDWFC  RES3, F
     CLRF                                                    CLRF
     ADDWFC  ARG1H, W  ;                                     ADDWFC  ARG1H, W   ;
             ARG2L     ; ARG1H * ARG2L ->               ;            ARG2L      ; ARG1H * ARG2L ->
                       ; PRODH:PRODL                         BTFSS              ; PRODH:PRODL
             PRODL, W  ;                                     BRA     PRODL, W   ;
             RES1, F   ; Add cross                           MOVF    RES1, F    ; Add cross
             PRODH, W  ; products                            SUBWF   PRODH, W   ; products
             RES2, F   ;                                     MOVF    RES2, F    ;
             WREG, F   ;                                     SUBWFB  WREG, F    ;
             RES3, F   ;                                ;            RES3, F    ;
                                                        SIGN_ARG1
Example 6-4 shows the sequence to do a 16 x 16               BTFSS   ARG2H, 7   ; ARG2H:ARG2L neg?
signed multiply. Equation 6-2 shows the algorithm            BRA     SIGN_ARG1  ; no, check ARG1
used. The 32-bit result is stored in four registers,         MOVF    ARG1L, W   ;
RES3:RES0. To account for the sign bits of the argu-         SUBWF   RES2       ;
ments, each argument pairs' Most Significant bit (MSb)       MOVF    ARG1H, W   ;
is tested and the appropriate subtractions are done.         SUBWFB  RES3
                                                        ;
EQUATION 6-2:       16 x 16 SIGNED                      CONT_CODE    ARG1H, 7   ; ARG1H:ARG1L neg?
                    MULTIPLICATION                                   CONT_CODE  ; no, done
                    ALGORITHM                                    :   ARG2L, W   ;
                                                                     RES2       ;
                                                                     ARG2H, W   ;
                                                                     RES3
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)

DS39026D-page 62                                                       1999-2013 Microchip Technology Inc.
7.0 INTERRUPTS                                                            PIC18CXX2

The PIC18CXX2 devices have multiple interrupt                When the IPEN bit is cleared (default state), the inter-
sources and an interrupt priority feature that allows        rupt priority feature is disabled and interrupts are com-
each interrupt source to be assigned a high priority         patible with PIC mid-range devices. In Compatibility
level, or a low priority level. The high priority interrupt  mode, the interrupt priority bits for each source have no
vector is at 000008h and the low priority interrupt vector   effect. INTCON<6> is the PEIE bit, which enables/dis-
is at 000018h. High priority interrupt events will over-     ables all peripheral interrupt sources. INTCON<7> is
ride any low priority interrupts that may be in progress.    the GIE bit, which enables/disables all interrupt
                                                             sources. All interrupts branch to address 000008h in
There are ten registers which are used to control inter-     Compatibility mode.
rupt operation. These registers are:
                                                             When an interrupt is responded to, the Global Interrupt
RCON                                                       Enable bit is cleared to disable further interrupts. If the
                                                             IPEN bit is cleared, this is the GIE bit. If interrupt priority
INTCON                                                     levels are used, this will be either the GIEH, or GIEL bit.
INTCON2                                                    High priority interrupt sources can interrupt a low prior-
INTCON3                                                    ity interrupt.

PIR1, PIR2                                                 The return address is pushed onto the stack and the
PIE1, PIE2                                                 PC is loaded with the interrupt vector address
IPR1, IPR2                                                 (000008h or 000018h). Once in the Interrupt Service
                                                             Routine, the source(s) of the interrupt can be deter-
It is recommended that the Microchip header files sup-       mined by polling the interrupt flag bits. The interrupt
plied with MPLAB IDE be used for the symbolic bit           flag bits must be cleared in software before re-enabling
names in these registers. This allows the assembler/         interrupts to avoid recursive interrupts.
compiler to automatically take care of the placement of
these bits within the specified register.                    The "return from interrupt" instruction, RETFIE, exits
                                                             the interrupt routine and sets the GIE bit (GIEH or GIEL
Each interrupt source has three bits to control its oper-    if priority levels are used), which re-enables interrupts.
ation. The functions of these bits are:
                                                             For external interrupt events, such as the INT pins or
Flag bit to indicate that an interrupt event               the PORTB input change interrupt, the interrupt latency
   occurred                                                  will be three to four instruction cycles. The exact
                                                             latency is the same for one or two-cycle instructions.
Enable bit that allows program execution to                Individual interrupt flag bits are set, regardless of the
   branch to the interrupt vector address when the           status of their corresponding enable bit or the GIE bit.
   flag bit is set

Priority bit to select high priority or low priority

The interrupt priority feature is enabled by setting the
IPEN bit (RCON<7>). When interrupt priority is
enabled, there are two bits which enable interrupts glo-
bally. Setting the GIEH bit (INTCON<7>) enables all
interrupts that have the priority bit set. Setting the GIEL
bit (INTCON<6>) enables all interrupts that have the
priority bit cleared. When the interrupt flag, enable bit
and appropriate global interrupt enable bit are set, the
interrupt will vector immediately to address 000008h or
000018h, depending on the priority level. Individual
interrupts can be disabled through their corresponding
enable bits.

1999-2013 Microchip Technology Inc.                         DS39026D-page 63
PIC18CXX2

FIGURE 7-1:       INTERRUPT LOGIC

        Peripheral Interrupt Flag bit                                                 TMR0IF                    Wake-up if in SLEEP mode
     Peripheral Interrupt Enable bit                                                  TMR0IE
     Peripheral Interrupt Priority bit                                                TMR0IP                               Interrupt to CPU
                                                                                                                           Vector to location
                                 TMR1IF                                                   RBIF                            0008h
                                 TMR1IE                                                   RBIE                           GIEH/GIE
                                 TMR1IP                                                   RBIP
                                                                                                                           Interrupt to CPU
                                  XXXXIF                                               INT0IF                              Vector to Location
                                 XXXXIE                                                INT0IE                              0018h
                                 XXXXIP                                                                     GIEL\PEIE
                                                                                       INT1IF
High Priority Interrupt Generation                                                     INT1IE
                                                                                       INT1IP
Low Priority Interrupt Generation                                                      INT2IF
                                                                                       INT2IE
                                                                                       INT2IP

                                                                            IPE

                                                                                           IPEN
                                                                                    GIEL/PEIE

                                                                                                      IPEN

                                          Additional Peripheral Interrupts

   Peripheral Interrupt Flag bit                                            TMR0IF
Peripheral Interrupt Enable bit                                             TMR0IE
Peripheral Interrupt Priority bit                                           TMR0IP

               TMR1IF                                                          RBIF
               TMR1IE                                                          RBIE
               TMR1IP                                                           RBIP

                XXXXIF                                                       INT0IF
               XXXXIE                                                        INT0IE
               XXXXIP
                                                                             INT1IF
                                          Additional Peripheral Interrupts   INT1IE
                                                                             INT1IP

                                                                             INT2IF
                                                                             INT2IE
                                                                             INT2IP

DS39026D-page 64                                                                                             1999-2013 Microchip Technology Inc.
                                                                               PIC18CXX2

7.1 INTCON Registers

The INTCON Registers are readable and writable reg-
isters, which contains various enable, priority, and flag
bits.

REGISTER 7-1:  INTCON REGISTER

                 R/W-0                  R/W-0     R/W-0    R/W-0    R/W-0   R/W-0      R/W-0     R/W-x
               GIE/GIEH               PEIE/GIEL  TMR0IE    INT0IE   RBIE   TMR0IF      INT0IF    RBIF
               bit 7
                                                                                                    bit 0

bit 7          GIE/GIEH: Global Interrupt Enable bit

               When IPEN = 0:

               1 = Enables all unmasked interrupts
               0 = Disables all interrupts
               When IPEN = 1:

               1 = Enables all high priority interrupts
               0 = Disables all high priority interrupts

bit 6          PEIE/GIEL: Peripheral Interrupt Enable bit

               When IPEN = 0:

               1 = Enables all unmasked peripheral interrupts
               0 = Disables all peripheral interrupts
               When IPEN = 1:

               1 = Enables all low priority peripheral interrupts
               0 = Disables all low priority peripheral interrupts

bit 5          TMR0IE: TMR0 Overflow Interrupt Enable bit

               1 = Enables the TMR0 overflow interrupt
               0 = Disables the TMR0 overflow interrupt

bit 4          INT0IE: INT0 External Interrupt Enable bit

               1 = Enables the INT0 external interrupt
               0 = Disables the INT0 external interrupt

bit 3          RBIE: RB Port Change Interrupt Enable bit

               1 = Enables the RB port change interrupt
               0 = Disables the RB port change interrupt

bit 2          TMR0IF: TMR0 Overflow Interrupt Flag bit

               1 = TMR0 register has overflowed (must be cleared in software)
               0 = TMR0 register did not overflow

bit 1          INT0IF: INT0 External Interrupt Flag bit

               1 = The INT0 external interrupt occurred (must be cleared in software)
               0 = The INT0 external interrupt did not occur

bit 0          RBIF: RB Port Change Interrupt Flag bit

               1 = At least one of the RB7:RB4 pins changed state (must be cleared in software)
               0 = None of the RB7:RB4 pins have changed state

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

               Note:  Interrupt flag bits are set when an interrupt condition occurs, regardless of the state
                      of its corresponding enable bit, or the global enable bit. User software should ensure
                      the appropriate interrupt flag bits are clear prior to enabling an interrupt. This feature
                      allows for software polling.

1999-2013 Microchip Technology Inc.                                                   DS39026D-page 65
PIC18CXX2

REGISTER 7-2: INTCON2 REGISTER

                  R/W-1  R/W-1              R/W-1  R/W-1           U-0            R/W-1  U-0  R/W-1
                                                                                              RBIP
                  RBPU INTEDG0 INTEDG1 INTEDG2                     --   TMR0IP           --
                                                                                                  bit 0
                  bit 7

bit 7             RBPU: PORTB Pull-up Enable bit

                  1 = All PORTB pull-ups are disabled
                  0 = PORTB pull-ups are enabled by individual port latch values

bit 6             INTEDG0:External Interrupt0 Edge Select bit

                  1 = Interrupt on rising edge
                  0 = Interrupt on falling edge

bit 5             INTEDG1: External Interrupt1 Edge Select bit

                  1 = Interrupt on rising edge
                  0 = Interrupt on falling edge

bit 4             INTEDG2: External Interrupt2 Edge Select bit

                  1 = Interrupt on rising edge
                  0 = Interrupt on falling edge

bit 3             Unimplemented: Read as '0'

bit 2             TMR0IP: TMR0 Overflow Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 1             Unimplemented: Read as '0'

bit 0             RBIP: RB Port Change Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

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

                  Note:  Interrupt flag bits are set when an interrupt condition occurs, regardless of the state
                         of its corresponding enable bit, or the global enable bit. User software should ensure
                         the appropriate interrupt flag bits are clear prior to enabling an interrupt. This feature
                         allows for software polling.

DS39026D-page 66                                                         1999-2013 Microchip Technology Inc.
                                                                 PIC18CXX2

REGISTER 7-3: INTCON3 REGISTER

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

       INT2IP INT1IP                         --   INT2IE INT1IE  --   INT2IF INT1IF

       bit 7                                                          bit 0

bit 7  INT2IP: INT2 External Interrupt Priority bit

       1 = High priority
       0 = Low priority

bit 6  INT1IP: INT1 External Interrupt Priority bit

       1 = High priority
       0 = Low priority

bit 5  Unimplemented: Read as '0'

bit 4  INT2IE: INT2 External Interrupt Enable bit

       1 = Enables the INT2 external interrupt
       0 = Disables the INT2 external interrupt

bit 3  INT1IE: INT1 External Interrupt Enable bit

       1 = Enables the INT1 external interrupt
       0 = Disables the INT1 external interrupt

bit 2  Unimplemented: Read as '0'

bit 1  INT2IF: INT2 External Interrupt Flag bit

       1 = The INT2 external interrupt occurred
            (must be cleared in software)

       0 = The INT2 external interrupt did not occur

bit 0  INT1IF: INT1 External Interrupt Flag bit

       1 = The INT1 external interrupt occurred
            (must be cleared in software)

       0 = The INT1 external interrupt did not occur

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

       Note:  Interrupt flag bits are set when an interrupt condition occurs, regardless of the state
              of its corresponding enable bit, or the global enable bit. User software should ensure
              the appropriate interrupt flag bits are clear prior to enabling an interrupt. This feature
              allows for software polling.

1999-2013 Microchip Technology Inc.                                  DS39026D-page 67
PIC18CXX2

7.2 PIR Registers                                           Note 1: Interrupt flag bits get set when an interrupt
                                                                        condition occurs, regardless of the state of
The PIR registers contain the individual flag bits for the              its corresponding enable bit, or the global
peripheral interrupts. Due to the number of peripheral                  enable bit, GIE (INTCON<7>).
interrupt sources, there are two Peripheral Interrupt
Flag Registers (PIR1, PIR2).                                        2: User software should ensure the appropri-
                                                                        ate interrupt flag bits are cleared prior to
                                                                        enabling an interrupt, and after servicing
                                                                        that interrupt.

REGISTER 7-4:     PERIPHERAL INTERRUPT REQUEST (FLAG) REGISTER 1 (PIR1)

                   R/W-0     R/W-0           R-0            R-0   R/W-0        R/W-0 R/W-0         R/W-0
                   PSPIF     ADIF           RCIF            TXIF  SSPIF       CCP1IF TMR2IF       TMR1IF
                  bit 7
                                                                                                        bit 0

bit 7             PSPIF: Parallel Slave Port Read/Write Interrupt Flag bit

                  1 = A read or a write operation has taken place (must be cleared in software)

                  0 = No read or write has occurred

bit 6             ADIF: A/D Converter Interrupt Flag bit

                  1 = An A/D conversion completed (must be cleared in software)

                  0 = The A/D conversion is not complete

bit 5             RCIF: USART Receive Interrupt Flag bit

                  1 = The USART receive buffer, RCREG, is full (cleared when RCREG is read)

                  0 = The USART receive buffer is empty

bit 4             TXIF: USART Transmit Interrupt Flag bit

                  1 = The USART transmit buffer, TXREG, is empty (cleared when TXREG is written)

                  0 = The USART transmit buffer is full

bit 3             SSPIF: Master Synchronous Serial Port Interrupt Flag bit

                  1 = The transmission/reception is complete (must be cleared in software)
                  0 = Waiting to transmit/receive

bit 2             CCP1IF: CCP1 Interrupt Flag bit

                  Capture mode:

                  1 = A TMR1 register capture occurred (must be cleared in software)

                  0 = No TMR1 register capture occurred

                  Compare mode:

                  1 = A TMR1 register compare match occurred (must be cleared in software)

                  0 = No TMR1 register compare match occurred

                  PWM mode:

                  Unused in this mode

bit 1             TMR2IF: TMR2 to PR2 Match Interrupt Flag bit

                  1 = TMR2 to PR2 match occurred (must be cleared in software)

                  0 = No TMR2 to PR2 match occurred

bit 0             TMR1IF: TMR1 Overflow Interrupt Flag bit

                  1 = TMR1 register overflowed (must be cleared in software)

                  0 = MR1 register did not overflow

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

DS39026D-page 68                                                             1999-2013 Microchip Technology Inc.
                                                             PIC18CXX2

REGISTER 7-5:  PERIPHERAL INTERRUPT REQUEST (FLAG) REGISTER 2 (PIR2)

               U-0                    U-0  U-0  U-0          R/W-0 R/W-0 R/W-0 R/W-0

               --                     --   --   --           BCLIF LVDIF TMR3IF CCP2IF

               bit 7                                                                     bit 0

bit 7-4        Unimplemented: Read as '0'
bit 3
bit 2          BCLIF: Bus Collision Interrupt Flag bit
bit 1          1 = A bus collision occurred (must be cleared in software)
               0 = No bus collision occurred
bit 0
               LVDIF: Low Voltage Detect Interrupt Flag bit
               1 = A low voltage condition occurred (must be cleared in software)
               0 = The device voltage is above the Low Voltage Detect trip point

               TMR3IF: TMR3 Overflow Interrupt Flag bit
               1 = TMR3 register overflowed (must be cleared in software)
               0 = TMR3 register did not overflow

               CCP2IF: CCPx Interrupt Flag bit
               Capture mode:
               1 = A TMR1 register capture occurred (must be cleared in software)
               0 = No TMR1 register capture occurred
               Compare mode:
               1 = A TMR1 register compare match occurred (must be cleared in software)
               0 = No TMR1 register compare match occurred
               PWM mode:
               Unused in this mode

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

1999-2013 Microchip Technology Inc.                                                     DS39026D-page 69
PIC18CXX2

7.3 PIE Registers

The PIE registers contain the individual enable bits for
the peripheral interrupts. Due to the number of periph-
eral interrupt sources, there are two Peripheral Inter-
rupt Enable Registers (PIE1, PIE2). When IPEN = 0,
the PEIE bit must be set to enable any of these periph-
eral interrupts.

REGISTER 7-6:     PERIPHERAL INTERRUPT ENABLE REGISTER 1 (PIE1)

                    R/W-0  R/W-0      R/W-0               R/W-0   R/W-0        R/W-0   R/W-0   R/W-0
                    PSPIE  ADIE       RCIE                TXIE    SSPIE       CCP1IE  TMR2IE  TMR1IE
                  bit 7
                                                                                                    bit 0

bit 7             PSPIE: Parallel Slave Port Read/Write Interrupt Enable bit

                  1 = Enables the PSP read/write interrupt
                  0 = Disables the PSP read/write interrupt

bit 6             ADIE: A/D Converter Interrupt Enable bit

                  1 = Enables the A/D interrupt
                  0 = Disables the A/D interrupt

bit 5             RCIE: USART Receive Interrupt Enable bit

                  1 = Enables the USART receive interrupt
                  0 = Disables the USART receive interrupt

bit 4             TXIE: USART Transmit Interrupt Enable bit

                  1 = Enables the USART transmit interrupt
                  0 = Disables the USART transmit interrupt

bit 3             SSPIE: Master Synchronous Serial Port Interrupt Enable bit

                  1 = Enables the MSSP interrupt
                  0 = Disables the MSSP interrupt

bit 2             CCP1IE: CCP1 Interrupt Enable bit

                  1 = Enables the CCP1 interrupt
                  0 = Disables the CCP1 interrupt

bit 1             TMR2IE: TMR2 to PR2 Match Interrupt Enable bit

                  1 = Enables the TMR2 to PR2 match interrupt
                  0 = Disables the TMR2 to PR2 match interrupt

bit 0             TMR1IE: TMR1 Overflow Interrupt Enable bit

                  1 = Enables the TMR1 overflow interrupt
                  0 = Disables the TMR1 overflow interrupt

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

DS39026D-page 70                                                               1999-2013 Microchip Technology Inc.
                                                               PIC18CXX2

REGISTER 7-7:  PERIPHERAL INTERRUPT ENABLE REGISTER 2 (PIE2)

               U-0                    U-0  U-0  U-0            R/W-0 R/W-0   R/W-0   R/W-0
                                                                            TMR3IE  CCP2IE
               --                     --   --   --             BCLIE LVDIE
                                                                                          bit 0
               bit 7

bit 7-4        Unimplemented: Read as '0'
bit 3
               BCLIE: Bus Collision Interrupt Enable bit
bit 2          1 = Enabled
bit 1          0 = Disabled

bit 0          LVDIE: Low Voltage Detect Interrupt Enable bit
               1 = Enabled
               0 = Disabled

               TMR3IE: TMR3 Overflow Interrupt Enable bit
               1 = Enables the TMR3 overflow interrupt
               0 = Disables the TMR3 overflow interrupt

               CCP2IE: CCP2 Interrupt Enable bit
               1 = Enables the CCP2 interrupt
               0 = Disables the CCP2 interrupt

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

1999-2013 Microchip Technology Inc.                                        DS39026D-page 71
PIC18CXX2

7.4 IPR Registers

The IPR registers contain the individual priority bits for
the peripheral interrupts. Due to the number of periph-
eral interrupt sources, there are two Peripheral Inter-
rupt Priority Registers (IPR1, IPR2). The operation of
the priority bits requires that the Interrupt Priority
Enable (IPEN) bit be set.

REGISTER 7-8:     PERIPHERAL INTERRUPT PRIORITY REGISTER 1 (IPR1)

                    R/W-1  R/W-1      R/W-1                 R/W-1  R/W-1         R/W-1   R/W-1   R/W-1
                    PSPIP  ADIP       RCIP                  TXIP   SSPIP        CCP1IP  TMR2IP  TMR1IP
                  bit 7
                                                                                                      bit 0

bit 7             PSPIP: Parallel Slave Port Read/Write Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 6             ADIP: A/D Converter Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 5             RCIP: USART Receive Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 4             TXIP: USART Transmit Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 3             SSPIP: Master Synchronous Serial Port Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 2             CCP1IP: CCP1 Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 1             TMR2IP: TMR2 to PR2 Match Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 0             TMR1IP: TMR1 Overflow Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

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

DS39026D-page 72                                                                 1999-2013 Microchip Technology Inc.
                                                                 PIC18CXX2

REGISTER 7-9:  PERIPHERAL INTERRUPT PRIORITY REGISTER 2 (IPR2)

               U-0                    U-0  U-0  U-0              R/W-1 R/W-1   R/W-1   R/W-1
                                                                              TMR3IP  CCP2IP
               --                     --   --   --               BCLIP LVDIP
                                                                                            bit 0
               bit 7

bit 7-4        Unimplemented: Read as '0'
bit 3
               BCLIP: Bus Collision Interrupt Priority bit
bit 2          1 = High priority
bit 1          0 = Low priority

bit 0          LVDIP: Low Voltage Detect Interrupt Priority bit
               1 = High priority
               0 = Low priority

               TMR3IP: TMR3 Overflow Interrupt Priority bit
               1 = High priority
               0 = Low priority

               CCP2IP: CCP2 Interrupt Priority bit
               1 = High priority
               0 = Low priority

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

1999-2013 Microchip Technology Inc.                                          DS39026D-page 73
PIC18CXX2

7.5 RCON Register

The RCON register contains the bit which is used to
enable prioritized interrupts (IPEN).

REGISTER 7-10: RCON REGISTER

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

                  IPEN   LWRT               --         RI         TO   PD                POR  BOR

                  bit 7                                                                       bit 0

bit 7             IPEN: Interrupt Priority Enable bit

                  1 = Enable priority levels on interrupts
                  0 = Disable priority levels on interrupts (16CXXX compatibility mode)

bit 6             LWRT: Long Write Enable bit

                  For details of bit operation, see Register 4-3

bit 5             Unimplemented: Read as '0'

bit 4             RI: RESET Instruction Flag bit

                  For details of bit operation, see Register 4-3

bit 3             TO: Watchdog Time-out Flag bit

                  For details of bit operation, see Register 4-3

bit 2             PD: Power-down Detection Flag bit

                  For details of bit operation, see Register 4-3

bit 1             POR: Power-on Reset Status bit

                  For details of bit operation, see Register 4-3

bit 0             BOR: Brown-out Reset Status bit

                  For details of bit operation, see Register 4-3

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

DS39026D-page 74                                                        1999-2013 Microchip Technology Inc.
                                                                      PIC18CXX2

7.6 INT0 Interrupt                                            7.7 TMR0 Interrupt

External interrupts on the RB0/INT0, RB1/INT1 and             In 8-bit mode (which is the default), an overflow (FFh
RB2/INT2 pins are edge triggered: either rising, if the       00h) in the TMR0 register will set flag bit TMR0IF. In
corresponding INTEDGx bit is set in the INTCON2 reg-          16-bit mode, an overflow (FFFFh  0000h) in the
ister, or falling, if the INTEDGx bit is clear. When a valid  TMR0H:TMR0L registers will set flag bit TMR0IF. The
edge appears on the RBx/INTx pin, the corresponding           interrupt can be enabled/disabled by setting/clearing
flag bit INTxF is set. This interrupt can be disabled by      enable bit T0IE (INTCON<5>). Interrupt priority for
clearing the corresponding enable bit INTxE. Flag bit         Timer0 is determined by the value contained in the
INTxF must be cleared in software in the Interrupt Ser-       interrupt priority bit TMR0IP (INTCON2<2>). See Sec-
vice Routine before re-enabling the interrupt. All exter-     tion 8.0 for further details on the Timer0 module.
nal interrupts (INT0, INT1 and INT2) can wake-up the
processor from SLEEP, if bit INTxE was set prior to           7.8 PORTB Interrupt-on-Change
going into SLEEP. If the global interrupt enable bit GIE
set, the processor will branch to the interrupt vector        An input change on PORTB<7:4> sets flag bit RBIF
following wake-up.                                            (INTCON<0>). The interrupt can be enabled/disabled
                                                              by setting/clearing enable bit, RBIE (INTCON<3>).
Interrupt priority for INT1 and INT2 is determined by the     Interrupt priority for PORTB Interrupt-on-change is
value contained in the interrupt priority bits, INT1IP        determined by the value contained in the interrupt pri-
(INTCON3<6>) and INT2IP (INTCON3<7>). There is                ority bit, RBIP (INTCON2<0>).
no priority bit associated with INT0. It is always a high
priority interrupt source.                                    7.9 Context Saving During Interrupts

                                                              During an interrupt, the return PC value is saved on the
                                                              stack. Additionally, the WREG, STATUS and BSR regis-
                                                              ters are saved on the fast return stack. If a fast return
                                                              from interrupt is not used (see Section 4.3), the user
                                                              may need to save the WREG, STATUS and BSR regis-
                                                              ters in software. Depending on the user's application,
                                                              other registers may also need to be saved. Example 7-1
                                                              saves and restores the WREG, STATUS and BSR regis-
                                                              ters during an Interrupt Service Routine.

EXAMPLE 7-1: SAVING STATUS, WREG AND BSR REGISTERS IN RAM

MOVWF W_TEMP                          ; W_TEMP is in virtual bank
MOVFF STATUS, STATUS_TEMP             ; STATUS_TEMP located anywhere
MOVFF BSR, BSR_TEMP                   ; BSR located anywhere
;
; USER ISR CODE                       ; Restore BSR
;                                     ; Restore WREG
MOVFF BSR_TEMP, BSR                   ; Restore STATUS
MOVF W_TEMP, W
MOVFF STATUS_TEMP, STATUS

1999-2013 Microchip Technology Inc.                                  DS39026D-page 75
PIC18CXX2

NOTES:

DS39026D-page 76   1999-2013 Microchip Technology Inc.
                                                                                    PIC18CXX2

8.0 I/O PORTS                                              EXAMPLE 8-1:       INITIALIZING PORTA

Depending on the device selected, there are either five      CLRF PORTA    ; Initialize PORTA by
ports, or three ports available. Some pins of the I/O                      ; clearing output
ports are multiplexed with an alternate function from        CLRF LATA     ; data latches
the peripheral features on the device. In general, when                    ; Alternate method
a peripheral is enabled, that pin may not be used as a       MOVLW 0x07    ; to clear output
general purpose I/O pin.                                     MOVWF ADCON1  ; data latches
                                                             MOVLW 0xCF    ; Configure A/D
Each port has three registers for its operation. These                     ; for digital inputs
registers are:                                               MOVWF TRISA   ; Value used to
                                                                           ; initialize data
TRIS register (data direction register)                                  ; direction
PORT register (reads the levels on the pins of the                       ; Set RA<3:0> as inputs
                                                                           ; RA<5:4> as outputs
   device)
LAT register (output latch)                              FIGURE 8-1:     BLOCK DIAGRAM OF
                                                                           RA3:RA0 AND RA5 PINS
The data latch (LAT register) is useful for read-modify-
write operations on the value that the I/O pins are                        RD LATA
driving.
                                                                  Data  D  Q
8.1 PORTA, TRISA and LATA                                         Bus
         Registers                                                       CK Q                                   VDD
                                                             WR LATA    Data Latch                              P
PORTA is a 6-bit wide, bi-directional port. The corre-       or
sponding data direction register is TRISA. Setting a         PORTA      D  Q                                    N    I/O pin(1)
TRISA bit (= 1) will make the corresponding PORTA pin
an input (i.e., put the corresponding output driver in a   WR TRISA                                  VSS
Hi-Impedance mode). Clearing a TRISA bit (= 0) will
make the corresponding PORTA pin an output (i.e., put                     CK Q                Analog
the contents of the output latch on the selected pin).                  TRIS Latch            Input
                                                                                              Mode
   Note: On a Power-on Reset, these pins are con-
               figured as digital inputs.                                           RD TRISA                         TTL
                                                                                                                     Input
Reading the PORTA register reads the status of the                                                                   Buffer
pins, whereas writing to it will write to the port latch.
                                                                                    Q         D
The Data Latch register (LATA) is also memory
mapped. Read-modify-write operations on the LATA                                                            EN
register reads and writes the latched output value for     RD PORTA
PORTA.                                                     SS Input (RA5 only)
                                                           To A/D Converter and LVD Modules
The RA4 pin is multiplexed with the Timer0 module
clock input to become the RA4/T0CKI pin. The RA4/          Note 1: I/O pins have protection diodes to VDD and VSS.
T0CKI pin is a Schmitt Trigger input and an open drain
output. All other RA port pins have TTL input levels and
full CMOS output drivers.

The other PORTA pins are multiplexed with analog
inputs and the analog VREF+ and VREF- inputs. The
operation of each pin is selected by clearing/setting the
control bits in the ADCON1 register (A/D Control
Register1).

   Note: On a Power-on Reset, these pins are con-
               figured as analog inputs and read as '0'.

The TRISA register controls the direction of the RA
pins, even when they are being used as analog inputs.
The user must ensure the bits in the TRISA register are
maintained set when using them as analog inputs.

1999-2013 Microchip Technology Inc.                                                          DS39026D-page 77
PIC18CXX2

FIGURE 8-2:       BLOCK DIAGRAM OF                       FIGURE 8-3:               BLOCK DIAGRAM OF RA6
                  RA4/T0CKI PIN
                                                             ECRA6 or
                                                             RCRA6 Enable

                                                             Data
                                                             Bus

   Data           RD LATA                                                 RD LATA
  Bus         DQ
                                                                       D   Q
WR LATA        CK Q
or           Data Latch              N    I/O pin(1)     WR LATA                      VDD
PORTA         DQ                                                                      P
                                                         or            CK Q
WR TRISA       CK Q
             TRIS Latch                                  PORTA

                                     VSS                           Data Latch

                               Schmitt                                 D   Q          N                                        I/O pin(1)
                               Trigger
                               Input                     WR         CK Q                              VSS
                               Buffer                    TRISA     TRIS Latch
                                                                                   ECRA6 or
                  RD TRISA                               Data Bus                  RCRA6
                                                                                   Enable

                            Q  D                                                                                               TTL
                                                                                                                               Input
                                                                   RD TRISA                                                    Buffer

                               ENEN

RD PORTA                                                     Data Bus
TMR0 Clock Input
                                                                                   Q     D

Note 1: I/O pins have protection diodes to VDD and VSS.                                                                    EN
                                                             RD PORTA

                                                         Note 1: I/O pins have protection diodes to VDD and VSS.

DS39026D-page 78                                                              1999-2013 Microchip Technology Inc.
                                                                                     PIC18CXX2

TABLE 8-1: PORTA FUNCTIONS

       Name       Bit# Buffer                                            Function

RA0/AN0           bit0                TTL Input/output or analog input.

RA1/AN1           bit1                TTL Input/output or analog input.

RA2/AN2/VREF-     bit2                TTL Input/output or analog input or VREF-.

RA3/AN3/VREF+     bit3                TTL Input/output or analog input or VREF+.

RA4/T0CKI         bit4                ST Input/output or external clock input for Timer0.

                                      Output is open drain type.

RA5/SS/AN4/LVDIN  bit5                TTL Input/output or slave select input for synchronous serial port or analog

                                      input, or low voltage detect input.

OSC2/CLKO/RA6     bit6                TTL OSC2 or clock output or I/O pin.

Legend: TTL = TTL input, ST = Schmitt Trigger input

TABLE 8-2: SUMMARY OF REGISTERS ASSOCIATED WITH PORTA

                                                                                           Value on Value on all

Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2                          Bit 1       Bit 0        POR,  other

                                                                                           BOR   RESETS

PORTA      -- RA6 RA5 RA4 RA3                        RA2          RA1         RA0    --0x 0000 --0u 0000
                                                                                     --xx xxxx --uu uuuu
LATA       -- Latch A Data Output Register                                           --11 1111 --11 1111
                                                                                     --0- 0000 --0- 0000
TRISA      -- PORTA Data Direction Register

ADCON1 ADFM ADCS2 --                  -- PCFG3 PCFG2 PCFG1 PCFG0

Legend: x = unknown, u = unchanged, - = unimplemented locations read as '0'.
            Shaded cells are not used by PORTA.

1999-2013 Microchip Technology Inc.                                                       DS39026D-page 79
PIC18CXX2

8.2 PORTB, TRISB and LATB                                      A mismatch condition will continue to set flag bit RBIF.
         Registers                                             Reading PORTB will end the mismatch condition and
                                                               allow flag bit RBIF to be cleared.
PORTB is an 8-bit wide, bi-directional port. The corre-
sponding data direction register is TRISB. Setting a           The interrupt-on-change feature is recommended for
TRISB bit (= 1) will make the corresponding PORTB pin          wake-up on key depression operation and operations
an input (i.e., put the corresponding output driver in a       where PORTB is only used for the interrupt-on-change
Hi-Impedance mode). Clearing a TRISB bit (= 0) will            feature. Polling of PORTB is not recommended while
make the corresponding PORTB pin an output (i.e., put          using the interrupt-on-change feature.
the contents of the output latch on the selected pin).
                                                               RB3 can be configured by the configuration bit
   Note: On a Power-on Reset, these pins are con-              CCP2MX as the alternate peripheral pin for the CCP2
               figured as digital inputs.                      module (CCP2MX = `0').

The Data Latch register (LATB) is also memory                  FIGURE 8-4:      BLOCK DIAGRAM OF
mapped. Read-modify-write operations on the LATB                                RB7:RB4 PINS
register reads and writes the latched output value for
PORTB.                                                                                               VDD

                                                               RBPU(2)                               P  Weak
                                                                                                        Pull-up
EXAMPLE 8-2: INITIALIZING PORTB                                Data Bus
                                                                                Data Latch
CLRF PORTB        ; Initialize PORTB by                        WR LATB           DQ                       I/O
CLRF LATB         ; clearing output                            or                                         pin(1)
MOVLW 0xCF        ; data latches                               PORTB              CK
MOVWF TRISB       ; Alternate method                                            TRIS Latch  TTL
                  ; to clear output                            WR TRISB                     Input
                  ; data latches                                                 DQ         Buffer
                  ; Value used to
                  ; initialize data                                               CK
                  ; direction
                  ; Set RB<3:0> as inputs                                                                     ST
                  ; RB<5:4> as outputs                                                                    Buffer
                  ; RB<7:6> as inputs
                                                                            RD TRISB

Each of the PORTB pins has a weak internal pull-up. A                       RD LATB           Latch
single control bit can turn on all the pull-ups. This is per-                               QD
formed by clearing bit RBPU (INTCON2<7>). The
weak pull-up is automatically turned off when the port                      RD PORTB        EN            Q1
pin is configured as an output. The pull-ups are dis-
abled on a Power-on Reset.                                     Set RBIF

Four of the PORTB pins, RB7:RB4, have an interrupt-               From other                QD
on-change feature. Only pins configured as inputs can             RB7:RB4 pins                                RD PORTB
cause this interrupt to occur (i.e., any RB7:RB4 pin
configured as an output is excluded from the interrupt-        RBx/INTx                            EN
on-change comparison). The input pins (of RB7:RB4)                                                                       Q3
are compared with the old value latched on the last
read of PORTB. The "mismatch" outputs of RB7:RB4               Note 1: I/O pins have diode protection to VDD and VSS.
are OR'ed together to generate the RB Port Change
Interrupt with flag bit RBIF (INTCON<0>).                             2: To enable weak pull-ups, set the appropriate TRIS
                                                                           bit(s) and clear the RBPU bit (INTCON2<7>).
This interrupt can wake the device from SLEEP. The
user, in the Interrupt Service Routine, can clear the
interrupt in the following manner:

a) Any read or write of PORTB (except with the
      MOVFF instruction). This will end the mismatch
      condition.

b) Clear flag bit RBIF.

DS39026D-page 80                                                                 1999-2013 Microchip Technology Inc.
                                                                                                      PIC18CXX2

FIGURE 8-5:  BLOCK DIAGRAM OF RB2:RB0 PINS

                                                                                 VDD

                            RBPU(2)                                              P  Weak
                            Data Bus                                                Pull-up
                            WR Port
                                              Data Latch                              I/O pin(1)
                                               DQ

                                                CK

                            WR TRIS           TRIS Latch             TTL
                                               DQ                    Input
                                                                     Buffer
                                                CK

                                      RD TRIS                        QD
                                      RD Port                                EN

                            RB0/INT

                                                    Schmitt Trigger Buffer       RD Port

Note 1: I/O pins have diode protection to VDD and VSS.
       2: To enable weak pull-ups, set the appropriate TRIS bit(s) and clear the RBPU bit (OPTION_REG<7>).

FIGURE 8-6:  BLOCK DIAGRAM OF RB3

                                                                                             VDD

             RBPU(2)                                                                              P   Weak
                     CCP2MX                                                                           Pull-up

             CCP Output(3)                          1                                 VDD
                                                                                      P

             Enable                                           0                                       I/O pin(1)
             CCP Output(3)            Data Latch
             Data Bus                  DQ                                            N
             WR LATB or
             WR PORTB                   CK                                          VSS
                                      TRIS Latch
             WR TRISB                  D                                                      TTL
                                                                                              Input
                                        CK Q                                                  Buffer

                                      RD TRISB      Q            D
                                          RD LATB
                                                                 EN
                                          RD PORTB

             RD PORTB

             CCP2 Input(3)

                             Schmitt Trigger

                             Buffer           CCP2MX = 0

Note 1: I/O pin has diode protection to VDD and VSS.
       2: To enable weak pull-ups, set the appropriate DDR bit(s) and clear the RBPU bit (INTCON2<7>).
       3: The CCP2 input/output is multiplexed with RB3, if the CCP2MX bit is enabled (='0') in the configuration register.

1999-2013 Microchip Technology Inc.                                                                              DS39026D-page 81
PIC18CXX2

TABLE 8-3: PORTB FUNCTIONS

Name              Bit#         Buffer                                    Function

RB0/INT0          bit0         TTL/ST(1)  Input/output pin or external interrupt input1. Internal software
                               TTL/ST(1)  programmable weak pull-up.
RB1/INT1          bit1         TTL/ST(1)
                               TTL/ST(4)  Input/output pin or external interrupt input2. Internal software
RB2/INT2          bit2                    programmable weak pull-up.

RB3/CCP2(3) bit3                          Input/output pin or external interrupt input3. Internal software
                                          programmable weak pull-up.

                                          Input/output pin. Capture2 input/Compare2 output/PWM output when
                                          CCP2MX configuration bit is enabled. Internal software
                                          programmable weak pull-up.

      RB4         bit4         TTL        Input/output pin (with interrupt-on-change). Internal software

                                          programmable weak pull-up.

      RB5         bit5         TTL        Input/output pin (with interrupt-on-change). Internal software

                                          programmable weak pull-up.

      RB6         bit6 TTL/ST(2) Input/output pin (with interrupt-on-change). Internal software

                                          programmable weak pull-up. Serial programming clock.

      RB7         bit7 TTL/ST(2) Input/output pin (with interrupt-on-change). Internal software

                                          programmable weak pull-up. Serial programming data.

Legend: TTL = TTL input, ST = Schmitt Trigger input
Note 1: This buffer is a Schmitt Trigger input when configured as the external interrupt.

        2: This buffer is a Schmitt Trigger input when used in Serial Programming mode.
        3: A device configuration bit selects which I/O pin the CCP2 pin is multiplexed on.
        4: This buffer is a Schmitt Trigger input when configured as the CCP2 input.

TABLE 8-4: SUMMARY OF REGISTERS ASSOCIATED WITH PORTB

Name       Bit 7        Bit 6  Bit 5      Bit 4  Bit 3 Bit 2 Bit 1                Bit 0       Value on    Value on all
                                                                                  RB0            POR,         other
PORTB      RB7          RB6    RB5        RB4    RB3     RB2             RB1                     BOR
                                                                                  RBIF                      RESETS
LATB       LATB Data Output Register                                              RBIP       xxxx xxxx    uuuu uuuu
                                                                                 INT1IF
TRISB      PORTB Data Direction Register                                                     1111 1111    1111 1111
                                                                                             0000 000x    0000 000u
INTCON     GIE/         PEIE/  TMR0IE INT0IE RBIE TMR0IF INT0IF
           GIEH         GIEL                                                                 1111 -1-1    1111 -1-1
                                                                                             11-0 0-00    11-0 0-00
INTCON2 RBPU INTEDG0 INTEDG1 INTEDG2 -- TMR0IP --

INTCON3 INT2IP INT1IP               --    INT2IE INT1IE  --              INT2IF

Legend: x = unknown, u = unchanged. Shaded cells are not used by PORTB.

DS39026D-page 82                                                                  1999-2013 Microchip Technology Inc.
                                                                                                     PIC18CXX2

8.3 PORTC, TRISC and LATC                                   The pin override value is not loaded into the TRIS reg-
         Registers                                          ister. This allows read-modify-write of the TRIS register,
                                                            without concern due to peripheral overrides.
PORTC is an 8-bit wide, bi-directional port. The corre-
sponding Data Direction Register is TRISC. Setting a        RC1 is normally configured by the configuration bit
TRISC bit (= 1) will make the corresponding PORTC           CCP2MX as the default peripheral pin for the CCP2
pin an input (i.e., put the corresponding output driver in  module (default/erased state, CCP2MX = `1').
a Hi-Impedance mode). Clearing a TRISC bit (= 0) will
make the corresponding PORTC pin an output (i.e., put       EXAMPLE 8-3: INITIALIZING PORTC
the contents of the output latch on the selected pin).
                                                            CLRF PORTC                            ; Initialize PORTC by
   Note: On a Power-on Reset, these pins are con-           CLRF LATC                             ; clearing output
               figured as digital inputs.                   MOVLW 0xCF                            ; data latches
                                                            MOVWF TRISC                           ; Alternate method
The Data Latch register (LATC) is also memory                                                     ; to clear output
mapped. Read-modify-write operations on the LATC                                                  ; data latches
register reads and writes the latched output value for                                            ; Value used to
PORTC.                                                                                            ; initialize data
                                                                                                  ; direction
PORTC is multiplexed with several peripheral functions                                            ; Set RC<3:0> as inputs
(Table 8-5). PORTC pins have Schmitt Trigger input                                                ; RC<5:4> as outputs
buffers.                                                                                          ; RC<7:6> as inputs

When enabling peripheral functions, care should be
taken in defining TRIS bits for each PORTC pin. Some
peripherals override the TRIS bit to make a pin an out-
put, while other peripherals override the TRIS bit to make
a pin an input. The user should refer to the correspond-
ing peripheral section for the correct TRIS bit settings.

FIGURE 8-7:  PORTC BLOCK DIAGRAM (PERIPHERAL OUTPUT OVERRIDE)

                       Port/Peripheral Select(2)
                                                                                                                  VDD

                      Peripheral Data Out

             RD LATC

             Data Bus                                                0
                                      Data Latch

             WR LATC or               DQ                                                          P
             WR PORTC
                                      CK Q                  1                                        I/O pin(1)

                                      DDR Latch                                                      Schmitt
                                                                                                     Trigger
                                      DQ

             WR TRISC                 CK Q                                                        N

             RD TRISC                                                                           VSS
             Peripheral Output
             Enable(3)                                                  QD
                                                                               EN
             RD PORTC
             Peripheral Data In

Note 1: I/O pins have diode protection to VDD and VSS.
       2: Port/Peripheral select signal selects between port data (input) and peripheral output.
       3: Peripheral Output Enable is only active if peripheral select is active.

1999-2013 Microchip Technology Inc.                                                                                   DS39026D-page 83
PIC18CXX2

TABLE 8-5: PORTC FUNCTIONS

       Name       Bit# Buffer Type                                              Function

RC0/T1OSO/T1CKI bit0                ST  Input/output port pin or Timer1 oscillator output/Timer1 clock input.

RC1/T1OSI/CCP2 bit1                 ST  Input/output port pin, Timer1 oscillator input, or Capture2 input/
                                        Compare2 output/PWM output when CCP2MX configuration bit is
RC2/CCP1          bit2              ST  disabled.

RC3/SCK/SCL       bit3              ST  Input/output port pin or Capture1 input/Compare1 output/
                                        PWM1 output.
RC4/SDI/SDA       bit4              ST
                                        RC3 can also be the synchronous serial clock for both SPI and
RC5/SDO           bit5              ST  I2C modes.
                                        RC4 can also be the SPI Data In (SPI mode) or Data I/O (I2C mode).
RC6/TX/CK         bit6              ST
                                        Input/output port pin or Synchronous Serial Port Data output.
RC7/RX/DT         bit7              ST
                                        Input/output port pin, Addressable USART Asynchronous Transmit, or
                                        Addressable USART Synchronous Clock.

                                        Input/output port pin, Addressable USART Asynchronous Receive, or
                                        Addressable USART Synchronous Data.

Legend: ST = Schmitt Trigger input

TABLE 8-6: SUMMARY OF REGISTERS ASSOCIATED WITH PORTC

Name Bit 7 Bit 6 Bit 5 Bit 4            Bit 3  Bit 2  Bit 1  Bit 0  Value on   Value on all
                                        RC3    RC2    RC1    RC0      POR,         other
                                                                      BOR
                                                                                 RESETS

PORTC RC7 RC6 RC5 RC4                                               xxxx xxxx  uuuu uuuu
                                                                    xxxx xxxx  uuuu uuuu
LATC   LATC Data Output Register                                    1111 1111  1111 1111
TRISC  PORTC Data Direction Register

Legend: x = unknown, u = unchanged

DS39026D-page 84                                              1999-2013 Microchip Technology Inc.
                                                                                     PIC18CXX2

8.4 PORTD, TRISD and LATD                                   FIGURE 8-8:     PORTD BLOCK DIAGRAM
         Registers                                                          IN I/O PORT MODE

This section is only applicable to the PIC18C4X2             Data        RD LATD
devices.                                                     Bus
                                                                         D  Q
PORTD is an 8-bit wide, bi-directional port. The corre-     WR LATD
sponding Data Direction register is TRISD. Setting a        or             CK                            I/O pin(1)
TRISD bit (= 1) will make the corresponding PORTD           PORTD        Data Latch
pin an input (i.e., put the corresponding output driver in                DQ             Schmitt
a Hi-Impedance mode). Clearing a TRISD bit (= 0) will       WR TRISD                     Trigger
make the corresponding PORTD pin an output (i.e., put                      CK            Input
the contents of the output latch on the selected pin).                   TRIS Latch      Buffer

   Note: On a Power-on Reset, these pins are con-                           RD TRISD
               figured as digital inputs.
                                                                                      Q  D
The Data Latch register (LATD) is also memory
mapped. Read-modify-write operations on the LATD                                         ENEN
register reads and writes the latched output value for
PORTD.                                                      RD PORTD

PORTD is an 8-bit port with Schmitt Trigger input buff-     Note 1: I/O pins have diode protection to VDD and VSS.
ers. Each pin is individually configurable as an input or
output.

PORTD can be configured as an 8-bit wide micropro-
cessor port (parallel slave port) by setting control bit
PSPMODE (TRISE<4>). In this mode, the input buffers
are TTL. See Section 8.6 for additional information on
the Parallel Slave Port (PSP).

EXAMPLE 8-4: INITIALIZING PORTD

CLRF PORTD   ; Initialize PORTD by
CLRF LATD    ; clearing output
MOVLW 0xCF   ; data latches
MOVWF TRISD  ; Alternate method
             ; to clear output
             ; data latches
             ; Value used to
             ; initialize data
             ; direction
             ; Set RD<3:0> as inputs
             ; RD<5:4> as outputs
             ; RD<7:6> as inputs

1999-2013 Microchip Technology Inc.                                                     DS39026D-page 85
PIC18CXX2

TABLE 8-7: PORTD FUNCTIONS

Name  Bit#        Buffer Type                       Function

RD0/PSP0 bit0     ST/TTL(1)            Input/output port pin or parallel slave port bit0.
RD1/PSP1 bit1     ST/TTL(1)            Input/output port pin or parallel slave port bit1.
RD2/PSP2 bit2     ST/TTL(1)            Input/output port pin or parallel slave port bit2.
RD3/PSP3 bit3     ST/TTL(1)            Input/output port pin or parallel slave port bit3.
RD4/PSP4 bit4     ST/TTL(1)            Input/output port pin or parallel slave port bit4.
RD5/PSP5 bit5     ST/TTL(1)            Input/output port pin or parallel slave port bit5.
RD6/PSP6 bit6     ST/TTL(1)            Input/output port pin or parallel slave port bit6.
RD7/PSP7 bit7     ST/TTL(1)            Input/output port pin or parallel slave port bit7.

Legend: ST = Schmitt Trigger input, TTL = TTL input
Note 1: Input buffers are Schmitt Triggers when in I/O mode and TTL buffers when in Parallel Slave Port mode.

TABLE 8-8: SUMMARY OF REGISTERS ASSOCIATED WITH PORTD

Name Bit 7 Bit 6 Bit 5          Bit 4  Bit 3 Bit 2  Bit 1 Bit 0  Value on                  Value on all
                                                                   POR,                        other
                                                                   BOR
                                                                                             RESETS

PORTD RD7 RD6 RD5               RD4    RD3 RD2      RD1 RD0 xxxx xxxx uuuu uuuu

LATD LATD Data Output Register                                   xxxx xxxx uuuu uuuu

TRISD PORTD Data Direction Register                              1111 1111 1111 1111

TRISE IBF OBF IBOV PSPMODE -- PORTE Data Direction bits 0000 -111 0000 -111

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by PORTD.

DS39026D-page 86                                     1999-2013 Microchip Technology Inc.
                                                                                  PIC18CXX2

8.5 PORTE, TRISE and LATE                                   FIGURE 8-9:  PORTE BLOCK DIAGRAM
         Registers                                                       IN I/O PORT MODE

This section is only applicable to the PIC18C4X2                Data     RD LATE                         I/O pin(1)
devices.                                                        Bus    DQ
                                                                                      Schmitt
PORTE is a 3-bit wide, bi-directional port. The corre-      WR LATE     CK            Trigger
sponding Data Direction register is TRISE. Setting a        or        Data Latch      Input
TRISE bit (= 1) will make the corresponding PORTE pin       PORTE      DQ             Buffer
an input (i.e., put the corresponding output driver in a
Hi-Impedance mode). Clearing a TRISE bit (= 0) will         WR TRISE    CK
make the corresponding PORTE pin an output (i.e., put                 TRIS Latch
the contents of the output latch on the selected pin).
                                                                         RD TRISE
   Note: On a Power-on Reset, these pins are con-
               figured as digital inputs.                                          Q  D

The Data Latch register (LATE) is also memory                                         ENEN
mapped. Read-modify-write operations on the LATE
register reads and writes the latched output value for      RD PORTE
PORTE.
                                                            To Analog Converter
PORTE has three pins (RE0/RD/AN5, RE1/WR/AN6
and RE2/CS/AN7), which are individually configurable        Note 1: I/O pins have diode protection to VDD and VSS.
as inputs or outputs. These pins have Schmitt Trigger
input buffers.

Register 8-1 shows the TRISE register, which also con-
trols the parallel slave port operation.

PORTE pins are multiplexed with analog inputs. When
selected as an analog input, these pins will read as '0's.

TRISE controls the direction of the RE pins, even when
they are being used as analog inputs. The user must
make sure to keep the pins configured as inputs when
using them as analog inputs.

Note: On a Power-on Reset, these pins are con-
            figured as analog inputs.

EXAMPLE 8-5: INITIALIZING PORTE

CLRF   PORTE   ; Initialize PORTE by
               ; clearing output
CLRF   LATE    ; data latches
               ; Alternate method
MOVLW  0x07    ; to clear output
MOVWF  ADCON1  ; data latches
MOVLW  0x03    ; Configure A/D
               ; for digital inputs
MOVWF  TRISC   ; Value used to
               ; initialize data
               ; direction
               ; Set RE<0> as inputs
               ; RE<1> as outputs
               ; RE<2> as inputs

1999-2013 Microchip Technology Inc.                                                        DS39026D-page 87
PIC18CXX2

REGISTER 8-1: TRISE REGISTER

                      R-0     R-0     R/W-0           R/W-0     U-0             R/W-1   R/W-1   R/W-1
                      IBF     OBF                                              TRISE2  TRISE1  TRISE0
                  bit 7               IBOV PSPMODE --
                                                                                                     bit 0

bit 7             IBF: Input Buffer Full Status bit

                  1 = A word has been received and waiting to be read by the CPU
                  0 = No word has been received

bit 6             OBF: Output Buffer Full Status bit

                  1 = The output buffer still holds a previously written word
                  0 = The output buffer has been read

bit 5             IBOV: Input Buffer Overflow Detect bit (in Microprocessor mode)

                  1 = A write occurred when a previously input word has not been read
                       (must be cleared in software)

                  0 = No overflow occurred

bit 4             PSPMODE: Parallel Slave Port Mode Select bit

                  1 = Parallel Slave Port mode
                  0 = General purpose I/O mode

bit 3             Unimplemented: Read as '0'

bit 2             TRISE2: RE2 Direction Control bit

                  1 = Input
                  0 = Output

bit 1             TRISE1: RE1 Direction Control bit

                  1 = Input
                  0 = Output

bit 0             TRISE0: RE0 Direction Control bit

                  1 = Input
                  0 = Output

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

DS39026D-page 88                                                                1999-2013 Microchip Technology Inc.
                                                                                   PIC18CXX2

TABLE 8-9: PORTE FUNCTIONS

      Name       Bit# Buffer Type                                        Function

RE0/RD/AN5 bit0      ST/TTL(1)               Input/output port pin or read control input in Parallel Slave Port mode
                                             or analog input:

                                             RD

                                             1 = Not a read operation
                                             0 = Read operation. Reads PORTD register (if chip selected).

RE1/WR/AN6 bit1      ST/TTL(1)               Input/output port pin or write control input in Parallel Slave Port mode
                                             or analog input:

                                             WR

                                             1 = Not a write operation
                                             0 = Write operation. Writes PORTD register (if chip selected).

RE2/CS/AN7 bit2      ST/TTL(1)               Input/output port pin or chip select control input in Parallel Slave Port
                                             mode or analog input:

                                             CS

                                             1 = Device is not selected
                                             0 = Device is selected

Legend: ST = Schmitt Trigger input, TTL = TTL input
Note 1: Input buffers are Schmitt Triggers when in I/O mode and TTL buffers when in Parallel Slave Port mode.

TABLE 8-10: SUMMARY OF REGISTERS ASSOCIATED WITH PORTE

Name Bit 7 Bit 6 Bit 5                Bit 4  Bit 3  Bit 2  Bit 1         Bit 0     Value on              Value on all
                                                                                     POR,                    other
                                                                                     BOR
                                                                                                           RESETS
PORTE       --   --  --               --     --     RE2    RE1           RE0 ---- -000
                                                                                                         ---- -000
LATE        --   --  --               --     -- LATE Data Output Register          ---- -xxx             ---- -uuu
                                                                                                         0000 -111
TRISE       IBF  OBF IBOV PSPMODE            -- PORTE Data Direction bits          0000 -111             --0- -000

ADCON1 ADFM ADCS2 --                  --     PCFG3 PCFG2 PCFG1 PCFG0 --0- -000

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by PORTE.

1999-2013 Microchip Technology Inc.                                                                     DS39026D-page 89
PIC18CXX2

8.6 Parallel Slave Port                                    FIGURE 8-10:          PORTD AND PORTE
                                                                                 BLOCK DIAGRAM
The Parallel Slave Port is implemented on the 40-pin                             (PARALLEL SLAVE
devices only (PIC18C4X2).                                                        PORT)

PORTD operates as an 8-bit wide, parallel slave port,      Data Bus
or microprocessor port, when control bit PSPMODE
(TRISE<4>) is set. It is asynchronously readable and                     DQ
writable by the external world through RD control input
pin RE0/RD and WR control input pin RE1/WR.                WR LATD       CK                                      RDx
                                                           or                                                    pin
It can directly interface to an 8-bit microprocessor data
bus. The external microprocessor can read or write the     PORTD                               TTL
PORTD latch as an 8-bit latch. Setting bit PSPMODE                          Data Latch
enables port pin RE0/RD to be the RD input, RE1/WR
to be the WR input and RE2/CS to be the CS (chip                     Q           D
select) input. For this functionality, the corresponding
data direction bits of the TRISE register (TRISE<2:0>)     RD PORTD              ENEN
must be configured as inputs (set). The A/D port config-
uration bits PCFG2:PCFG0 (ADCON1<2:0>) must be                       RD LATD
set, which will configure pins RE2:RE0 as digital I/O.
                                                           One bit of PORTD
A write to the PSP occurs when both the CS and WR            Set Interrupt Flag
lines are first detected low. A read from the PSP occurs     PSPIF (PIR1<7>)
when both the CS and RD lines are first detected low.

The PORTE I/O pins become control inputs for the
microprocessor port when bit PSPMODE (TRISE<4>)
is set. In this mode, the user must make sure that the
TRISE<2:0> bits are set (pins are configured as digital
inputs), and the ADCON1 is configured for digital I/O.
In this mode, the input buffers are TTL.

                                                                                        Read          RD
                                                                                                 TTL

                                                                                        Chip Select

                                                                                               TTL    CS

                                                                                        Write         WR

                                                                                               TTL

                                                           Note: I/O pin has protection diodes to VDD and VSS.

FIGURE 8-11:      PARALLEL SLAVE PORT WRITE WAVEFORMS

                  Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4

             CS
             WR
             RD
PORTD<7:0>
             IBF
           OBF
         PSPIF

DS39026D-page 90                                                                  1999-2013 Microchip Technology Inc.
                                                                               PIC18CXX2

FIGURE 8-12:           PARALLEL SLAVE PORT READ WAVEFORMS

                  CS   Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
                  WR
                  RD
     PORTD<7:0>
                  IBF
                 OBF
              PSPIF

TABLE 8-11: REGISTERS ASSOCIATED WITH PARALLEL SLAVE PORT

Name Bit 7 Bit 6 Bit 5                Bit 4   Bit 3      Bit 2  Bit 1   Bit 0   Value on  Value on all
                                                                               POR, BOR       other

                                                                                            RESETS

PORTD Port Data Latch when written; Port pins when read                        xxxx xxxx uuuu uuuu

LATD LATD Data Output bits                                                     xxxx xxxx uuuu uuuu

TRISD PORTD Data Direction bits                                                1111 1111 1111 1111

PORTE   --             --     --      --      --         RE2    RE1     RE0 ---- -000 ---- -000

LATE    --             --     --      --      -- LATE Data Output bits         ---- -xxx ---- -uuu

TRISE   IBF            OBF IBOV PSPMODE -- PORTE Data Direction bits           0000 -111 0000 -111

INTCON  GIE/           PEIE/  TMR0IF  INT0IE  RBIE TMR0IF INT0IF        RBIF 0000 000x 0000 000u
        GIEH           GIEL

PIR1    PSPIF ADIF RCIF               TXIF    SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000

PIE1    PSPIE ADIE RCIE               TXIE    SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000

IPR1    PSPIP ADIP RCIP               TXIP    SSPIP CCP1IP TMR2IP TMR1IP 0000 0000 0000 0000

ADCON1 ADFM ADCS2 --                  --      PCFG3 PCFG2 PCFG1 PCFG0 --0- -000 --0- -000

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by the Parallel Slave Port.

1999-2013 Microchip Technology Inc.                                           DS39026D-page 91
PIC18CXX2

NOTES:

DS39026D-page 92   1999-2013 Microchip Technology Inc.
                                                                               PIC18CXX2

9.0 TIMER0 MODULE                                     Figure 9-1 shows a simplified block diagram of the
                                                      Timer0 module in 8-bit mode and Figure 9-2 shows a
The Timer0 module has the following features:         simplified block diagram of the Timer0 module in 16-bit
                                                      mode.
Software selectable as an 8-bit or 16-bit timer/
   counter                                            The T0CON register (Register 9-1) is a readable and
                                                      writable register that controls all the aspects of Timer0,
Readable and writable                               including the prescale selection.
Dedicated 8-bit software programmable prescaler
Clock source selectable to be external or internal
Interrupt-on-overflow from FFh to 00h in 8-bit

   mode and FFFFh to 0000h in 16-bit mode
Edge select for external clock

REGISTER 9-1:  T0CON: TIMER0 CONTROL 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
               TMR0ON                 T08BIT  T0CS    T0SE               PSA   T0PS2 T0PS1        T0PS0
               bit 7
                                                                                                       bit 0

bit 7          TMR0ON: Timer0 On/Off Control bit
bit 6          1 = Enables Timer0
bit 5          0 = Stops Timer0
bit 4
bit 3          T08BIT: Timer0 8-bit/16-bit Control bit
bit 2:0        1 = Timer0 is configured as an 8-bit timer/counter
               0 = Timer0 is configured as a 16-bit timer/counter

               T0CS: Timer0 Clock Source Select bit
               1 = Transition on T0CKI pin
               0 = Internal instruction cycle clock (CLKOUT)

               T0SE: Timer0 Source Edge Select bit
               1 = Increment on high-to-low transition on T0CKI pin
               0 = Increment on low-to-high transition on T0CKI pin

               PSA: Timer0 Prescaler Assignment bit
               1 = TImer0 prescaler is NOT assigned. Timer0 clock input bypasses prescaler.
               0 = Timer0 prescaler is assigned. Timer0 clock input comes from prescaler output.

               T0PS2:T0PS0: Timer0 Prescaler Select bits
               111 = 1:256 prescale value
               110 = 1:128 prescale value
               101 = 1:64 prescale value
               100 = 1:32 prescale value
               011 = 1:16 prescale value
               010 = 1:8 prescale value
               001 = 1:4 prescale value
               000 = 1:2 prescale value

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

1999-2013 Microchip Technology Inc.                                           DS39026D-page 93
PIC18CXX2

FIGURE 9-1:               TIMER0 BLOCK DIAGRAM IN 8-BIT MODE

                  FOSC/4        0                                                               Data Bus
                                                                                                           8
                                                                  0               Sync with
                                                                                    Internal    TMR0
                                1                                                   Clocks
                                                                                                                 Set Interrupt
RA4/T0CKI                             Programmable                1              (2 TCY delay)                 Flag bit TMR0IF
pin
                                               Prescaler                                                         on Overflow

             T0SE

                                                          3       PSA

                                            T0PS2, T0PS1, T0PS0
                                T0CS

Note: Upon RESET, Timer0 is enabled in 8-bit mode with clock input from T0CKI max. prescale.

FIGURE 9-2:               TIMER0 BLOCK DIAGRAM IN 16-BIT MODE

                  FOSC/4  0                                        Sync with     TMR0L            TMR0              Set Interrupt
                                                               0     Internal           8       High Byte         Flag bit TMR0IF
T0CKI pin                                                            Clocks
             T0SE         1                                       (2 TCY delay)                                8    on Overflow
                                     Programmable 1
                                         Prescaler

                                   3                                                                              Read TMR0L
                                                                                                                  Write TMR0L
                          T0PS2, T0PS1, T0PS0

                          T0CS                 PSA

                                                                                                  8
                                                                                                TMR0H

                                                                                                8
                                                                                                            Data Bus<7:0>

Note: Upon RESET, Timer0 is enabled in 8-bit mode with clock input from T0CKI max. prescale.

DS39026D-page 94                                                                                 1999-2013 Microchip Technology Inc.
                                                                                   PIC18CXX2

9.1 Timer0 Operation                                                 9.2.1 SWITCHING PRESCALER ASSIGNMENT

Timer0 can operate as a timer or as a counter.                       The prescaler assignment is fully under software con-
                                                                     trol (i.e., it can be changed "on-the-fly" during program
Timer mode is selected by clearing the T0CS bit. In                  execution).
Timer mode, the Timer0 module will increment every
instruction cycle (without prescaler). If the TMR0 regis-            9.3 Timer0 Interrupt
ter is written, the increment is inhibited for the following
two instruction cycles. The user can work around this                The TMR0 interrupt is generated when the TMR0 reg-
by writing an adjusted value to the TMR0 register.                   ister overflows from FFh to 00h in 8-bit mode, or FFFFh
                                                                     to 0000h in 16-bit mode. This overflow sets the TMR0IF
Counter mode is selected by setting the T0CS bit. In                 bit. The interrupt can be masked by clearing the
Counter mode, Timer0 will increment either on every                  TMR0IE bit. The TMR0IE bit must be cleared in soft-
rising, or falling edge of pin RA4/T0CKI. The increment-             ware by the Timer0 module Interrupt Service Routine
ing edge is determined by the Timer0 Source Edge                     before re-enabling this interrupt. The TMR0 interrupt
Select bit (T0SE). Clearing the T0SE bit selects the ris-            cannot awaken the processor from SLEEP, since the
ing edge. Restrictions on the external clock input are               timer is shut-off during SLEEP.
discussed below.
                                                                     9.4 16-Bit Mode Timer Reads and
When an external clock input is used for Timer0, it must                      Writes
meet certain requirements. The requirements ensure
the external clock can be synchronized with the internal             TMR0H is not the high byte of the timer/counter in
phase clock (TOSC). Also, there is a delay in the actual             16-bit mode, but is actually a buffered version of the
incrementing of Timer0 after synchronization.                        high byte of Timer0 (refer to Figure 9-2). The high byte
                                                                     of the Timer0 counter/timer is not directly readable nor
9.2 Prescaler                                                        writable. TMR0H is updated with the contents of the
                                                                     high byte of Timer0 during a read of TMR0L. This pro-
An 8-bit counter is available as a prescaler for the                 vides the ability to read all 16-bits of Timer0 without
Timer0 module. The prescaler is not readable or                      having to verify that the read of the high and low byte
writable.                                                            were valid due to a rollover between successive reads
                                                                     of the high and low byte.
The PSA and T0PS2:T0PS0 bits determine the pres-
caler assignment and prescale ratio.                                 A write to the high byte of Timer0 must also take place
                                                                     through the TMR0H buffer register. Timer0 high byte is
Clearing bit PSA will assign the prescaler to the Timer0             updated with the contents of TMR0H when a write
module. When the prescaler is assigned to the Timer0                 occurs to TMR0L. This allows all 16-bits of Timer0 to be
module, prescale values of 1:2, 1:4,..., 1:256 are                   updated at once.
selectable.

When assigned to the Timer0 module, all instructions
writing to the TMR0 register (e.g. CLRF TMR0, MOVWF
TMR0, BSF TMR0, x....etc.) will clear the prescaler
count.

Note:  Writing to TMR0 when the prescaler is
       assigned to Timer0 will clear the prescaler
       count, but will not change the prescaler
       assignment.

TABLE 9-1: REGISTERS ASSOCIATED WITH TIMER0

Name   Bit 7   Bit 6                  Bit 5  Bit 4            Bit 3  Bit 2  Bit 1  Bit 0   Value on  Value on all
                                                                                          POR, BOR       other

                                                                                                       RESETS

TMR0L Timer0 Module's Low Byte Register                                                   xxxx xxxx uuuu uuuu

TMR0H Timer0 Module's High Byte Register                                                  0000 0000 0000 0000

INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 0000 000u

T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 1111 1111 1111 1111

TRISA  --      --                     PORTA Data Direction Register                       --11 1111 --11 1111

Legend: x = unknown, u = unchanged, - = unimplemented locations read as '0'. Shaded cells are not used by Timer0.

1999-2013 Microchip Technology Inc.                                                      DS39026D-page 95
PIC18CXX2

NOTES:

DS39026D-page 96   1999-2013 Microchip Technology Inc.
                                                                      PIC18CXX2

10.0 TIMER1 MODULE                                 Figure 10-1 is a simplified block diagram of the Timer1
                                                   module.
The Timer1 module timer/counter has the following
features:                                          Register 10-1 details the Timer1 control register. This
                                                   register controls the operating mode of the Timer1
16-bit timer/counter                             module, and contains the Timer1 oscillator enable bit
   (two 8-bit registers: TMR1H and TMR1L)          (T1OSCEN). Timer1 can be enabled or disabled by set-
                                                   ting or clearing control bit TMR1ON (T1CON<0>).
Readable and writable (both registers)
Internal or external clock select
Interrupt-on-overflow from FFFFh to 0000h
Reset from CCP module special event trigger

REGISTER 10-1: T1CON: TIMER1 CONTROL REGISTER

         R/W-0 U-0                    R/W-0        R/W-0       R/W-0  R/W-0 R/W-0  R/W-0

         RD16 -- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON

         bit 7                                                                                        bit 0

bit 7    RD16: 16-bit Read/Write Mode Enable bit
bit 6    1 = Enables register Read/Write of TImer1 in one 16-bit operation
bit 5-4  0 = Enables register Read/Write of Timer1 in two 8-bit operations

bit 3    Unimplemented: Read as '0'
bit 2
         T1CKPS1:T1CKPS0: Timer1 Input Clock Prescale Select bits
bit 1    11 = 1:8 Prescale value
bit 0    10 = 1:4 Prescale value
         01 = 1:2 Prescale value
         00 = 1:1 Prescale value

         T1OSCEN: Timer1 Oscillator Enable bit
         1 = Timer1 Oscillator is enabled
         0 = Timer1 Oscillator is shut-off

              The oscillator inverter and feedback resistor are turned off to eliminate power drain.

         T1SYNC: Timer1 External Clock Input Synchronization Select bit
         When TMR1CS = 1:
         1 = Do not synchronize external clock input
         0 = Synchronize external clock input
         When TMR1CS = 0:
         This bit is ignored. Timer1 uses the internal clock when TMR1CS = 0.

         TMR1CS: Timer1 Clock Source Select bit
         1 = External clock from pin RC0/T1OSO/T13CKI (on the rising edge)
         0 = Internal clock (FOSC/4)

         TMR1ON: Timer1 On bit
         1 = Enables Timer1
         0 = Stops Timer1

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

1999-2013 Microchip Technology Inc.                                  DS39026D-page 97
PIC18CXX2

10.1 Timer1 Operation                                                When TMR1CS = 0, Timer1 increments every instruc-
                                                                     tion cycle. When TMR1CS = 1, Timer1 increments on
Timer1 can operate in one of these modes:                            every rising edge of the external clock input or the
As a timer                                                         Timer1 oscillator, if enabled.
As a synchronous counter
As an asynchronous counter                                         When the Timer1 oscillator is enabled (T1OSCEN is
The operating mode is determined by the clock select                 set), the RC1/T1OSI and RC0/T1OSO/T1CKI pins
bit, TMR1CS (T1CON<1>).                                              become inputs. That is, the TRISC<1:0> value is
                                                                     ignored.

                                                                     Timer1 also has an internal "RESET input". This
                                                                     RESET can be generated by the CCP module
                                                                     (Section 13.0).

FIGURE 10-1:      TIMER1 BLOCK DIAGRAM

     TMR1IF                                                CCP Special Event Trigger
     Overflow
     Interrupt                 TMR1                                            0                Synchronized
     Flag bit                                  CLR
                                                                                                Clock Input
T1CKI/T1OSO          TMR1H TMR1L
           T1OSI                                           TMR1ON                  1
                       T1OSC                                 On/Off          T1SYNC
                                    T1OSCEN
                                    Enable                 FOSC/4    1                          Synchronize
                                    Oscillator(1)          Internal               Prescaler             det
                                                                                  1, 2, 4, 8
                                                           Clock                                SLEEP Input
                                                                     0
                                                                                            2

                                                                           T1CKPS1:T1CKPS0

                                                                     TMR1CS

Note 1: When enable bit T1OSCEN is cleared, the inverter and feedback resistor are turned off. This eliminates power drain.

FIGURE 10-2:      TIMER1 BLOCK DIAGRAM: 16-BIT READ/WRITE MODE

Data Bus<7:0>
                               8

                            TMR1H                                    CCP Special Event Trigger
                                                        8

                                  8
Write TMR1L

Read TMR1L

       TMR1IF     8               TMR1                                                0         Synchronized
       Overflow
       Interrupt                                   CLR                                             Clock Input
       Flag bit                         TMR1L
                     Timer 1
T13CKI/T1OSO         High Byte                                                          1
                                                                                  T1SYNC
      T1OSI                                                          TMR1ON
                     T1OSC                                             On/Off

                                      T1OSCEN              FOSC/4       1                          Synchronize
                                      Enable               Internal                   Prescaler            det
                                     Oscillator(1)                                    1, 2, 4, 8
                                                           Clock                                   SLEEP Input
                                                                        0
                                                                                                2

                                                                     TMR1CS

                                                                                 T1CKPS1:T1CKPS0

Note 1: When enable bit T1OSCEN is cleared, the inverter and feedback resistor are turned off. This eliminates power drain.

DS39026D-page 98                                                                       1999-2013 Microchip Technology Inc.
                                                                    PIC18CXX2

10.2 Timer1 Oscillator                                       10.4 Resetting Timer1 using a CCP
                                                                      Trigger Output
A crystal oscillator circuit is built-in between pins T1OSI
(input) and T1OSO (amplifier output). It is enabled by       If the CCP module is configured in compare mode to
setting control bit T1OSCEN (T1CON<3>). The oscilla-         generate a "special event trigger" (CCP1M3:CCP1M0
tor is a low power oscillator rated up to 200 kHz. It will   = 1011), this signal will reset Timer1 and start an A/D
continue to run during SLEEP. It is primarily intended       conversion (if the A/D module is enabled).
for a 32 kHz crystal. Table 10-1 shows the capacitor
selection for the Timer1 oscillator.                         Note:  The special event triggers from the CCP1
                                                                    module will not set interrupt flag bit
The user must provide a software time delay to ensure               TMR1IF (PIR1<0>).
proper start-up of the Timer1 oscillator.

TABLE 10-1: CAPACITOR SELECTION FOR                          Timer1 must be configured for either timer or synchro-
                     THE ALTERNATE                           nized counter mode to take advantage of this feature. If
                     OSCILLATOR                              Timer1 is running in asynchronous counter mode, this
                                                             reset operation may not work.
Osc Type   Freq.    C1                  C2
    LP    32 kHz  TBD(1)              TBD(1)                 In the event that a write to Timer1 coincides with a spe-
                                                             cial event trigger from CCP1, the write will take prece-
          Crystal to be Tested:                              dence.

32.768 kHz Epson C-001R32.768K-A       20                    In this mode of operation, the CCPR1H:CCPR1L regis-
                                      PPM                    ters pair effectively becomes the period register for
                                                             Timer1.

Note 1: Microchip suggests 33 pF as a starting               10.5 Timer1 16-Bit Read/Write Mode
             point in validating the oscillator circuit.
                                                             Timer1 can be configured for 16-bit reads and writes
        2: Higher capacitance increases the stability        (see Figure 10-2). When the RD16 control bit
             of the oscillator, but also increases the       (T1CON<7>) is set, the address for TMR1H is mapped
             start-up time.                                  to a buffer register for the high byte of Timer1. A read
                                                             from TMR1L will load the contents of the high byte of
        3: Since each resonator/crystal has its own          Timer1 into the Timer1 high byte buffer. This provides
             characteristics, the user should consult        the user with the ability to accurately read all 16-bits of
             the resonator/crystal manufacturer for          Timer1, without having to determine whether a read of
             appropriate values of external                  the high byte, followed by a read of the low byte, is
             components.                                     valid, due to a rollover between reads.

        4: Capacitor values are for design guidance          A write to the high byte of Timer1 must also take place
             only.                                           through the TMR1H buffer register. Timer1 high byte is
                                                             updated with the contents of TMR1H when a write
10.3 Timer1 Interrupt                                        occurs to TMR1L. This allows a user to write all 16 bits
                                                             to both the high and low bytes of Timer1 at once.
The TMR1 Register pair (TMR1H:TMR1L) increments              TMR1H is updated from the high byte when TMR1L is
from 0000h to FFFFh and rolls over to 0000h. The             read.
TMR1 Interrupt, if enabled, is generated on overflow,
which is latched in interrupt flag bit TMR1IF (PIR1<0>).     The high byte of Timer1 is not directly readable or writ-
This interrupt can be enabled/disabled by setting/clear-     able in this mode. All reads and writes must take place
ing TMR1 interrupt enable bit TMR1IE (PIE1<0>).              through the Timer1 high byte buffer register. Writes to
                                                             TMR1H do not clear the Timer1 prescaler. The pres-
                                                             caler is only cleared on writes to TMR1L.

1999-2013 Microchip Technology Inc.                                DS39026D-page 99
PIC18CXX2

TABLE 10-2: REGISTERS ASSOCIATED WITH TIMER1 AS A TIMER/COUNTER

Name    Bit 7      Bit 6  Bit 5   Bit 4   Bit 3  Bit 2   Bit 1                     Bit 0    Value on  Value on
                                                                                           POR, BOR   all other
                                                                                                      RESETS

INTCON  GIE/GIEH   PEIE/  TMR0IE  INT0IE  RBIE TMR0IF INT0IF                       RBIF 0000 000x 0000 000u
                   GIEL
PIR1    PSPIF(1)   ADIF     RCIF   TXIF   SSPIF  CCP1IF  TMR2IF                    TMR1IF  0000 0000 0000 0000
PIE1    PSPIE(1)   ADIE    RCIE    TXIE   SSPIE  CCP1IE  TMR2IE                    TMR1IE  0000 0000 0000 0000
IPR1    PSPIP(1)   ADIP    RCIP    TXIP   SSPIP  CCP1IP  TMR2IP                    TMR1IP  0000 0000 0000 0000

TMR1L Holding Register for the Least Significant Byte of the 16-bit TMR1 Register          xxxx xxxx uuuu uuuu

TMR1H Holding Register for the Most Significant Byte of the 16-bit TMR1 Register           xxxx xxxx uuuu uuuu

T1CON RD16         -- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by the Timer1 module.
Note 1: The PSPIF, PSPIE and PSPIP bits are reserved on the PIC18C2X2 devices. Always maintain these bits clear.

DS39026D-page 100                                                                   1999-2013 Microchip Technology Inc.
11.0 TIMER2 MODULE                                                    PIC18CXX2

The Timer2 module timer has the following features:      11.1 Timer2 Operation

8-bit timer (TMR2 register)                            Timer2 can be used as the PWM time-base for the
8-bit period register (PR2)                            PWM mode of the CCP module. The TMR2 register is
Readable and writable (both registers)                 readable and writable, and is cleared on any device
Software programmable prescaler (1:1, 1:4, 1:16)       RESET. The input clock (FOSC/4) has a prescale option
Software programmable postscaler (1:1 to 1:16)         of 1:1, 1:4, or 1:16, selected by control bits
Interrupt on TMR2 match of PR2                         T2CKPS1:T2CKPS0 (T2CON<1:0>). The match out-
SSP module optional use of TMR2 output to gen-         put of TMR2 goes through a 4-bit postscaler (which
                                                         gives a 1:1 to 1:16 scaling inclusive) to generate a
   erate clock shift                                     TMR2 interrupt (latched in flag bit TMR2IF, (PIR1<1>)).

Timer2 has a control register shown in Register 11-1.    The prescaler and postscaler counters are cleared
Timer2 can be shut-off by clearing control bit TMR2ON    when any of the following occurs:
(T2CON<2>) to minimize power consumption.
Figure 11-1 is a simplified block diagram of the Timer2   a write to the TMR2 register
module. Register 11-1 shows the Timer2 control regis-    a write to the T2CON register
ter. The prescaler and postscaler selection of Timer2    any device RESET (Power-on Reset, MCLR
are controlled by this register.
                                                            Reset, Watchdog Timer Reset, or Brown-out
                                                            Reset)

                                                         TMR2 is not cleared when T2CON is written.

REGISTER 11-1: T2CON: TIMER2 CONTROL REGISTER

            U-0  R/W-0                R/W-0                R/W-0    R/W-0   R/W-0    R/W-0    R/W-0
             --                                          TOUTPS1  TOUTPS0  TMR2ON  T2CKPS1  T2CKPS0
         bit 7   TOUTPS3 TOUTPS2
                                                                                                    bit 0

bit 7    Unimplemented: Read as '0'
bit 6-3
         TOUTPS3:TOUTPS0: Timer2 Output Postscale Select bits
bit 2    0000 = 1:1 Postscale
bit 1-0  0001 = 1:2 Postscale
         
         
         
         1111 = 1:16 Postscale

         TMR2ON: Timer2 On bit

         1 = Timer2 is on
         0 = Timer2 is off

         T2CKPS1:T2CKPS0: Timer2 Clock Prescale Select bits
         00 = Prescaler is 1
         01 = Prescaler is 4
         1x = Prescaler is 16

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

1999-2013 Microchip Technology Inc.                                               DS39026D-page 101
PIC18CXX2

11.2 Timer2 Interrupt                                           11.3 Output of TMR2

The Timer2 module has an 8-bit period register, PR2.            The output of TMR2 (before the postscaler) is fed to the
Timer2 increments from 00h until it matches PR2 and             Synchronous Serial Port module, which optionally uses
then resets to 00h on the next increment cycle. PR2 is          it to generate the shift clock.
a readable and writable register. The PR2 register is
initialized to FFh upon RESET.

FIGURE 11-1:       TIMER2 BLOCK DIAGRAM

                                                                          TMR2                             Sets Flag
                                                                        Output(1)                         bit TMR2IF

        FOSC/4                 Prescaler            TMR2        RESET
                             1:1, 1:4, 1:16
                                                    Comparator              Postscaler
                                        2                PR2    EQ 1:1 to 1:16

                          T2CKPS1:T2CKPS0                                            4
                                                                       TOUTPS3:TOUTPS0

        Note 1: TMR2 register output can be software selected by the SSP Module as a baud clock.

TABLE 11-1: REGISTERS ASSOCIATED WITH TIMER2 AS A TIMER/COUNTER

Name Bit 7         Bit 6        Bit 5        Bit 4      Bit 3   Bit 2   Bit 1                     Bit 0    Value on   Value on
                                                                                                          POR, BOR    all other
                                                                                                                      RESETS

INTCON  GIE/GIEH PEIE/GIEL      TMR0IE  INT0IE          RBIE    TMR0IF  INT0IF                      RBIF  0000 000x 0000 000u
PIR1    PSPIF(1) ADIF             RCIF   TXIF           SSPIF   CCP1IF  TMR2IF                    TMR1IF  0000 0000 0000 0000
PIE1    PSPIE(1) ADIE            RCIE    TXIE           SSPIE   CCP1IE  TMR2IE                    TMR1IE  0000 0000 0000 0000
IPR1    PSPIP(1) ADIP            RCIP    TXIP           SSPIP   CCP1IP  TMR2IP                    TMR1IP  0000 0000 0000 0000

TMR2 Timer2 Module Register                                                                               0000 0000 0000 0000

T2CON   --         TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 -000 0000

PR2     Timer2 Period Register                                                                            1111 1111 1111 1111

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by the Timer2 module.

Note 1: The PSPIF, PSPIE and PSPIP bits are reserved on the PIC18C2X2 devices. Always maintain these bits clear.

DS39026D-page 102                                                                   1999-2013 Microchip Technology Inc.
                                                                  PIC18CXX2

12.0 TIMER3 MODULE                                 Figure 12-1 is a simplified block diagram of the Timer3
                                                   module.
The Timer3 module timer/counter has the following
features:                                          Register 12-1 shows the Timer3 control register. This
                                                   register controls the operating mode of the Timer3
16-bit timer/counter                             module and sets the CCP clock source.
   (two 8-bit registers: TMR3H and TMR3L)
                                                   Register 10-1 shows the Timer1 control register. This
Readable and writable (both registers)           register controls the operating mode of the Timer1
Internal or external clock select                module, as well as contains the Timer1 oscillator
Interrupt-on-overflow from FFFFh to 0000h        enable bit (T1OSCEN), which can be a clock source for
Reset from CCP module trigger                    Timer3.

REGISTER 12-1: T3CON: TIMER3 CONTROL 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
          RD16                                            T3CCP1  T3SYNC       TMR3CS  TMR3ON
         bit 7   T3CCP2 T3CKPS1 T3CKPS0
                                                                                              bit 0

bit 7    RD16: 16-bit Read/Write Mode Enable
bit 6-3  1 = Enables register Read/Write of Timer3 in one 16-bit operation
bit 5-4  0 = Enables register Read/Write of Timer3 in two 8-bit operations
bit 2
         T3CCP2:T3CCP1: Timer3 and Timer1 to CCPx Enable bits
bit 1    1x = Timer3 is the clock source for compare/capture CCP modules
bit 0    01 = Timer3 is the clock source for compare/capture of CCP2,

                Timer1 is the clock source for compare/capture of CCP1
         00 = Timer1 is the clock source for compare/capture CCP modules

         T3CKPS1:T3CKPS0: Timer3 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

         T3SYNC: Timer3 External Clock Input Synchronization Control bit
         (Not usable if the system clock comes from Timer1/Timer3.)
         When TMR3CS = 1:
         1 = Do not synchronize external clock input
         0 = Synchronize external clock input
         When TMR3CS = 0:
         This bit is ignored. Timer3 uses the internal clock when TMR3CS = 0.

         TMR3CS: Timer3 Clock Source Select bit
         1 = External clock input from Timer1 oscillator or T1CKI

              (on the rising edge after the first falling edge)
         0 = Internal clock (FOSC/4)

         TMR3ON: Timer3 On bit
         1 = Enables Timer3
         0 = Stops Timer3

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

1999-2013 Microchip Technology Inc.                                           DS39026D-page 103
PIC18CXX2

12.1 Timer3 Operation                                               When TMR3CS = 0, Timer3 increments every instruc-
                                                                    tion cycle. When TMR3CS = 1, Timer3 increments on
Timer3 can operate in one of these modes:                           every rising edge of the Timer1 external clock input or
As a timer                                                        the Timer1 oscillator, if enabled.
As a synchronous counter
As an asynchronous counter                                        When the Timer1 oscillator is enabled (T1OSCEN is
The operating mode is determined by the clock select                set), the RC1/T1OSI and RC0/T1OSO/T1CKI pins
bit, TMR3CS (T3CON<1>).                                             become inputs. That is, the TRISC<1:0> value is
                                                                    ignored.

                                                                    Timer3 also has an internal "RESET input". This
                                                                    RESET can be generated by the CCP module
                                                                    (Section 12.0).

FIGURE 12-1:       TIMER3 BLOCK DIAGRAM

              TMR3IF                          CLR                   CCP Special Trigger           Synchronized
              Overflow                 TMR3L                        T3CCPx                          Clock Input
              Interrupt
                                                                                        0
              Flag bit

                            TMR3H

                                                                 TMR3ON             1
                                                                   On/Off     T3SYNC

T1OSO/                      T1OSC                         (3)
T13CKI
                                       T1OSCEN FOSC/4                   1                         Synchronize
T1OSI                                  Enable                                        Prescaler            det
                                       Oscillator(1)      Internal                   1, 2, 4, 8
                                                          Clock                                   SLEEP Input
                                                                        0
                                                                                               2

                                                                    TMR3CS
                                                                              T3CKPS1:T3CKPS0

Note 1: When enable bit T1OSCEN is cleared, the inverter and feedback resistor are turned off. This eliminates power drain.

FIGURE 12-2:       TIMER3 BLOCK DIAGRAM CONFIGURED IN 16-BIT READ/WRITE MODE

Data Bus<7:0>

                            8

                          TMR3H
                                              8

                                8
Write TMR3L

Read TMR3L

Set TMR3IF Flag bit      8             TMR3                                   CCP Special Trigger           Synchronized
on Overflow                                                                   T3CCPx                          Clock Input

                                                                                              0

                             Timer3                         CLR
                            High Byte            TMR3L

                                   To Timer1 Clock Input            TMR3ON          1
                     T1OSC                                            On/Off  T3SYNC

T1OSO/                                T1OSCEN                       FOSC/4        1                         Synchronize
T13CKI                                Enable                        Internal                   Prescaler            det
                                      Oscillator(1)                                            1, 2, 4, 8
T1OSI                                                               Clock                                   SLEEP Input
                                                                                  0
                                                                                                         2

                                                                                        T3CKPS1:T3CKPS0
                                                                              TMR3CS

Note 1: When enable bit T1OSCEN is cleared, the inverter and feedback resistor are turned off. This eliminates power drain.

DS39026D-page 104                                                                       1999-2013 Microchip Technology Inc.
                                                                                   PIC18CXX2

12.2 Timer1 Oscillator                                    12.4 Resetting Timer3 Using a CCP
                                                                   Trigger Output
The Timer1 oscillator may be used as the clock source
for Timer3. The Timer1 oscillator is enabled by setting   If the CCP module is configured in Compare mode to
the T1OSCEN (T1CON<3>) bit. The oscillator is a low       generate a "special event trigger" (CCP1M3:CCP1M0
power oscillator rated up to 200 KHz. See Section 10.0    = 1011), this signal will reset Timer3.
for further details.
                                                          Note:  The special event triggers from the CCP
12.3 Timer3 Interrupt                                            module will not set interrupt flag bit
                                                                 TMR3IF (PIR1<0>).
The TMR3 Register pair (TMR3H:TMR3L) increments
from 0000h to FFFFh and rolls over to 0000h. The          Timer3 must be configured for either Timer or Synchro-
TMR3 interrupt, if enabled, is generated on overflow      nized Counter mode to take advantage of this feature.
which is latched in interrupt flag bit TMR3IF (PIR2<1>).  If Timer3 is running in Asynchronous Counter mode,
This interrupt can be enabled/disabled by setting/clear-  this RESET operation may not work. In the event that a
ing TMR3 interrupt enable bit, TMR3IE (PIE2<1>).          write to Timer3 coincides with a special event trigger
                                                          from CCP1, the write will take precedence. In this mode
                                                          of operation, the CCPR1H:CCPR1L registers pair
                                                          effectively becomes the period register for Timer3.

TABLE 12-1: REGISTERS ASSOCIATED WITH TIMER3 AS A TIMER/COUNTER

Name Bit 7    Bit 6  Bit 5            Bit 4  Bit 3        Bit 2  Bit 1             Bit 0  Value on  Value on
                                                                                            POR,    all other
                                                                                            BOR     RESETS

INTCON  GIE/  PEIE/  TMR0IE INT0IE           RBIE TMR0IF INT0IF                    RBIF 0000 000x 0000 000u
        GIEH  GIEL

PIR2    --    --     --               --     BCLIF        LVDIF TMR3IF CCP2IF 0000 0000 0000 0000

PIE2    --    --     --               --     BCLIE LVDIE TMR3IE CCP2IE 0000 0000 0000 0000

IPR2    --    --     --               --     BCLIP LVDIP TMR3IP CCP2IP 0000 0000 0000 0000

TMR3L Holding Register for the Least Significant Byte of the 16-bit TMR3 Register         xxxx xxxx uuuu uuuu

TMR3H Holding Register for the Most Significant Byte of the 16-bit TMR3 Register          xxxx xxxx uuuu uuuu

T1CON RD16    -- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu

T3CON RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON -000 0000 -uuu uuuu

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by the Timer1 module.

1999-2013 Microchip Technology Inc.                                                      DS39026D-page 105
PIC18CXX2

NOTES:

DS39026D-page 106   1999-2013 Microchip Technology Inc.
                                                                       PIC18CXX2

13.0 CAPTURE/COMPARE/PWM                                 The operation of CCP1 is identical to that of CCP2, with
         (CCP) MODULES                                   the exception of the special event trigger. Therefore,
                                                         operation of a CCP module in the following sections is
Each CCP (Capture/Compare/PWM) module contains           described with respect to CCP1.
a 16-bit register which can operate as a 16-bit capture
register, as a 16-bit compare register, or as a PWM      Table 13-2 shows the interaction of the CCP modules.
master/slave Duty Cycle register. Table 13-1 shows the
timer resources of the CCP module modes.

REGISTER 13-1: CCP1CON REGISTER/CCP2CON REGISTER

            U-0                       U-0  R/W-0         R/W-0  R/W-0  R/W-0  R/W-0 R/W-0
             --
         bit 7                        --   DCxB1 DCxB0 CCPxM3 CCPxM2 CCPxM1 CCPxM0

                                                                              bit 0

bit 7-6  Unimplemented: Read as '0'
bit 5-4
         DCxB1:DCxB0: PWM Duty Cycle bit1 and bit0
bit 3-0  Capture mode:

         Unused
         Compare mode:

         Unused
         PWM mode:

         These bits are the two LSbs (bit1 and bit0) of the 10-bit PWM duty cycle. The upper eight bits
         (DCx9:DCx2) of the duty cycle are found in CCPRxL.

         CCPxM3:CCPxM0: CCPx Mode Select bits

         0000 = Capture/Compare/PWM off (resets CCPx module)
         0001 = Reserved
         0010 = Compare mode, toggle output on match (CCPxIF bit is set)
         0011 = Reserved
         0100 = Capture mode, every falling edge
         0101 = Capture mode, every rising edge
         0110 = Capture mode, every 4th rising edge
         0111 = Capture mode, every 16th rising edge
         1000 = Compare mode,

                   Initialize CCP pin Low, on compare match force CCP pin High (CCPIF bit is set)
         1001 = Compare mode,

                   Initialize CCP pin High, on compare match force CCP pin Low (CCPIF bit is set)
         1010 = Compare mode,

                   Generate software interrupt on compare match (CCPIF bit is set, CCP pin is
                   unaffected)
         1011 = Compare mode,
                   Trigger special event (CCPIF bit is set)
         11xx = PWM mode

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

1999-2013 Microchip Technology Inc.                                          DS39026D-page 107
PIC18CXX2

13.1 CCP1 Module                                       13.2 CCP2 Module

Capture/Compare/PWM Register 1 (CCPR1) is com-         Capture/Compare/PWM Register2 (CCPR2) is com-
prised of two 8-bit registers: CCPR1L (low byte) and   prised of two 8-bit registers: CCPR2L (low byte) and
CCPR1H (high byte). The CCP1CON register controls      CCPR2H (high byte). The CCP2CON register controls
the operation of CCP1. All are readable and writable.  the operation of CCP2. All are readable and writable.

TABLE 13-1: CCP MODE - TIMER
                     RESOURCE

CCP Mode             Timer Resource

  Capture            Timer1 or Timer3
Compare             Timer1 or Timer3

   PWM                     Timer2

TABLE 13-2: INTERACTION OF TWO CCP MODULES

CCPx Mode CCPy Mode                                    Interaction

Capture  Capture     TMR1 or TMR3 time-base. Time-base can be different for each CCP.
Capture  Compare     The compare could be configured for the special event trigger,
                     which clears either TMR1, or TMR3, depending upon which time-base is used.
Compare  Compare     The compare(s) could be configured for the special event trigger,
                     which clears TMR1, or TMR3, depending upon which time-base is used.
  PWM      PWM       The PWMs will have the same frequency and update rate (TMR2 interrupt).
  PWM    Capture     None.
  PWM    Compare     None.

DS39026D-page 108                                                    1999-2013 Microchip Technology Inc.
                                                                                  PIC18CXX2

13.3 Capture Mode                                                13.3.3 SOFTWARE INTERRUPT

In Capture mode, CCPR1H:CCPR1L captures the                      When the Capture mode is changed, a false capture
16-bit value of the TMR1 or TMR3 registers when an               interrupt may be generated. The user should keep bit
event occurs on pin RC2/CCP1. An event is defined as:            CCP1IE (PIE1<2>) clear to avoid false interrupts and
                                                                 should clear the flag bit, CCP1IF, following any such
every falling edge                                             change in operating mode.
every rising edge
every 4th rising edge                                          13.3.4 CCP PRESCALER
every 16th rising edge
                                                                 There are four prescaler settings, specified by bits
An event is selected by control bits CCP1M3:CCP1M0               CCP1M3:CCP1M0. Whenever the CCP module is
(CCP1CON<3:0>). When a capture is made, the inter-               turned off, or the CCP module is not in Capture mode,
rupt request flag bit CCP1IF (PIR1<2>) is set. It must           the prescaler counter is cleared. This means that any
be cleared in software. If another capture occurs before         RESET will clear the prescaler counter.
the value in register CCPR1 is read, the old captured
value will be lost.                                              Switching from one capture prescaler to another may
                                                                 generate an interrupt. Also, the prescaler counter will
13.3.1 CCP PIN CONFIGURATION                                     not be cleared, therefore, the first capture may be from
                                                                 a non-zero prescaler. Example 13-1 shows the recom-
In Capture mode, the RC2/CCP1 pin should be config-              mended method for switching between capture pres-
ured as an input by setting the TRISC<2> bit.                    calers. This example also clears the prescaler counter
                                                                 and will not generate the "false" interrupt.
Note:  If the RC2/CCP1 is configured as an out-
       put, a write to the port can cause a capture
       condition.                                                EXAMPLE 13-1: CHANGING BETWEEN
                                                                                            CAPTURE PRESCALERS

13.3.2 TIMER1/TIMER3 MODE SELECTION                              CLRF    CCP1CON, F ; Turn CCP module off
                                                                 MOVLW
The timers that are to be used with the capture feature                  NEW_CAPT_PS ; Load WREG with the
(either Timer1 and/or Timer3) must be running in Timer           MOVWF
mode or Synchronized Counter mode. In Asynchro-                                   ; new prescaler mode
nous Counter mode, the capture operation may not
work. The timer to be used with each CCP module is                                ; value and CCP ON
selected in the T3CON register.
                                                                         CCP1CON  ; Load CCP1CON with

                                                                                  ; this value

FIGURE 13-1:     CAPTURE MODE OPERATION BLOCK DIAGRAM

                                                                                  TMR3H TMR3L

                                      Set Flag bit CCP1IF

                 Prescaler                                       T3CCP2  TMR3
                  1, 4, 16                                               Enable

       CCP1 pin                                                                 CCPR1H CCPR1L

                      and                                        T3CCP2  TMR1
                 Edge Detect                                             Enable

                                                                                TMR1H  TMR1L

                        CCP1CON<3:0>
                 Q's

                                      Set Flag bit CCP2IF                       TMR3H TMR3L

                                                         T3CCP1          TMR3
                                                         T3CCP2          Enable

                 Prescaler                                                      CCPR2H CCPR2L
                  1, 4, 16

       CCP2 pin

                      and              T3CCP2                            TMR1          TMR1L
                 Edge Detect           T3CCP1                            Enable

                         CCP2CON<3:0>                                           TMR1H
                 Q's

1999-2013 Microchip Technology Inc.                                                   DS39026D-page 109
PIC18CXX2

13.4 Compare Mode                                                   13.4.2 TIMER1/TIMER3 MODE SELECTION

In Compare mode, the 16-bit CCPR1 (CCPR2) register                  Timer1 and/or Timer3 must be running in Timer mode,
value is constantly compared against either the TMR1                or Synchronized Counter mode, if the CCP module is
register pair value or the TMR3 register pair value.                using the compare feature. In Asynchronous Counter
When a match occurs, the RC2/CCP1 (RC1/CCP2) pin                    mode, the compare operation may not work.
is:
                                                                    13.4.3 SOFTWARE INTERRUPT MODE
driven High
driven Low                                                        When generate software interrupt is chosen, the CCP1
toggle output (High to Low or Low to High)                        pin is not affected. Only a CCP interrupt is generated (if
remains unchanged                                                 enabled).

The action on the pin is based on the value of control              13.4.4 SPECIAL EVENT TRIGGER
bits CCP1M3:CCP1M0 (CCP2M3:CCP2M0). At the
same time, interrupt flag bit, CCP1IF (CCP2IF) is set.              In this mode, an internal hardware trigger is generated,
                                                                    which may be used to initiate an action.
13.4.1 CCP PIN CONFIGURATION
                                                                    The special event trigger output of CCP1 resets the
The user must configure the CCPx pin as an output by                TMR1 register pair. This allows the CCPR1 register to
clearing the appropriate TRISC bit.                                 effectively be a 16-bit programmable period register for
                                                                    Timer1.
Note:  Clearing the CCP1CON register will force
       the RC2/CCP1 compare output latch to the                     The special trigger output of CCPx resets either the
       default low level. This is not the data latch.               TMR1 or TMR3 register pair. Additionally, the CCP2
                                                                    Special Event Trigger will start an A/D conversion if the
                                                                    A/D module is enabled.

                                                                    Note:           The special event trigger from the CCP2
                                                                                    module will not set the Timer1 or Timer3
                                                                                    interrupt flag bits.

FIGURE 13-2:       COMPARE MODE OPERATION BLOCK DIAGRAM

       Special Event Trigger will:
           Reset Timer1or Timer3, but not set Timer1 or Timer3 Interrupt Flag bit,
           and set bit GO/DONE (ADCON0<2>)
           which starts an A/D Conversion (CCP2 only)

                                                        Special Event Trigger

                                                    Set Flag bit CCP1IF

       RC2/CCP1               QS          Output             Match                          CCPR1H CCPR1L
       pin                         R       Logic                                                 Comparator

                 TRISC<2>             CCP1CON<3:0>                                  T3CCP2       01
               Output Enable          Mode Select

                                                                                    TMR1H TMR1L      TMR3H TMR3L

                                      Special Event Trigger

                                                    Set Flag bit CCP2IF T3CCP1                      01
                                                                                   T3CCP2        Comparator
                                                                                            CCPR2H CCPR2L
       RC1/CCP2               QS            Output           Match
       pin                         R         Logic

                 TRISC<1>             CCP2CON<3:0>
               Output Enable           Mode Select

DS39026D-page 110                                                                           1999-2013 Microchip Technology Inc.
                                                                                   PIC18CXX2

TABLE 13-3: REGISTERS ASSOCIATED WITH CAPTURE, COMPARE, TIMER1 AND TIMER3

Name    Bit 7     Bit 6  Bit 5            Bit 4   Bit 3  Bit 2   Bit 1             Bit 0   Value on  Value on
                                                                                             POR,    all other
                                                                                             BOR     RESETS

INTCON  GIE/GIEH  PEIE/  TMR0IE           INT0IE  RBIE   TMR0IF INT0IF RBIF 0000 000x 0000 000u
                  GIEL
PIR1    PSPIF(1)  ADIF     RCIF            TXIF   SSPIF  CCP1IF  TMR2IF            TMR1IF  0000 0000 0000 0000
PIE1    PSPIE(1)  ADIE    RCIE             TXIE   SSPIE  CCP1IE  TMR2IE            TMR1IE  0000 0000 0000 0000
IPR1    PSPIP(1)  ADIP    RCIP             TXIP   SSPIP  CCP1IP  TMR2IP            TMR1IP  0000 0000 0000 0000

TRISC PORTC Data Direction Register                                                        1111 1111 1111 1111

TMR1L Holding Register for the Least Significant Byte of the 16-bit TMR1 Register          xxxx xxxx uuuu uuuu

TMR1H Holding Register for the Most Significant Byte of the 16-bit TMR1 Register           xxxx xxxx uuuu uuuu

T1CON   RD16      -- T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON --00 0000 --uu uuuu

CCPR1L Capture/Compare/PWM Register1 (LSB)                                                 xxxx xxxx uuuu uuuu

CCPR1H Capture/Compare/PWM Register1 (MSB)                                                 xxxx xxxx uuuu uuuu

CCP1CON --        --     DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 --00 0000

CCPR2L Capture/Compare/PWM Register2 (LSB)                                                 xxxx xxxx uuuu uuuu

CCPR2H Capture/Compare/PWM Register2 (MSB)                                                 xxxx xxxx uuuu uuuu

CCP2CON --        --     DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 --00 0000

PIR2    --        --                  --  --      BCLIF LVDIF TMR3IF CCP2IF 0000 0000 0000 0000

PIE2    --        --                  --  --      BCLIE LVDIE TMR3IE CCP2IE 0000 0000 0000 0000

IPR2    --        --                  --  --      BCLIP LVDIP TMR3IP CCP2IP 0000 0000 0000 0000

TMR3L Holding Register for the Least Significant Byte of the 16-bit TMR3 Register          xxxx xxxx uuuu uuuu

TMR3H Holding Register for the Most Significant Byte of the 16-bit TMR3 Register           xxxx xxxx uuuu uuuu

T3CON   RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON -000 0000 -uuu uuuu

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by Capture and Timer1.
Note 1: The PSPIF, PSPIE and PSPIP bits are reserved on the PIC18C2X2 devices. Always maintain these bits clear.

1999-2013 Microchip Technology Inc.                                                       DS39026D-page 111
PIC18CXX2

13.5 PWM Mode                                                     13.5.1 PWM PERIOD

In Pulse Width Modulation (PWM) mode, the CCP1 pin                The PWM period is specified by writing to the PR2 reg-
produces up to a 10-bit resolution PWM output. Since              ister. The PWM period can be calculated using the fol-
the CCP1 pin is multiplexed with the PORTC data latch,            lowing formula:
the TRISC<2> bit must be cleared to make the CCP1
pin an output.                                                    PWM period = (PR2) + 1] 4 TOSC
                                                                                       (TMR2 prescale value)

Note:  Clearing the CCP1CON register will force                   PWM frequency is defined as 1 / [PWM period].
       the CCP1 PWM output latch to the default
       low level. This is not the PORTC I/O data                  When TMR2 is equal to PR2, the following three events
       latch.                                                     occur on the next increment cycle:

Figure 13-3 shows a simplified block diagram of the                TMR2 is cleared
CCP module in PWM mode.
                                                                   The CCP1 pin is set (exception: if PWM duty
For a step-by-step procedure on how to set up the CCP                cycle = 0%, the CCP1 pin will not be set)
module for PWM operation, see Section 13.5.3.
                                                                   The PWM duty cycle is latched from CCPR1L into
                                                                     CCPR1H

FIGURE 13-3:          SIMPLIFIED PWM BLOCK                        Note:  The Timer2 postscaler (see Section 11.0)
                      DIAGRAM                                            is not used in the determination of the
                                                                         PWM frequency. The postscaler could be
    Duty Cycle Registers  CCP1CON<5:4>                                   used to have a servo update rate at a dif-
CCPR1L                                                                   ferent frequency than the PWM output.

CCPR1H (Slave)                                                    13.5.2 PWM DUTY CYCLE

       Comparator         R      Q                                The PWM duty cycle is specified by writing to the
                                                                  CCPR1L register and to the CCP1CON<5:4> bits. Up
                                               RC2/CCP1           to 10-bit resolution is available. The CCPR1L contains
                                                                  the eight MSbs and the CCP1CON<5:4> contains the
TMR2            (Note 1)                                          two LSbs. This 10-bit value is represented by
                                                                  CCPR1L:CCP1CON<5:4>. The following equation is
                          S                                       used to calculate the PWM duty cycle in time:

Comparator                                     TRISC<2>                PWM duty cycle = (CCPR1L:CCP1CON<5:4>)
    PR2                                                                                           TOSC (TMR2 prescale value)
                   Clear Timer,
                   CCP1 pin and                                   CCPR1L and CCP1CON<5:4> can be written to at any
                   latch D.C.                                     time, but the duty cycle value is not latched into
                                                                  CCPR1H until after a match between PR2 and TMR2
Note: 8-bit timer is concatenated with 2-bit internal Q clock or  occurs (i.e., the period is complete). In PWM mode,
            2 bits of the prescaler to create 10-bit time-base.   CCPR1H is a read only register.

A PWM output (Figure 13-4) has a time-base (period)               The CCPR1H register and a 2-bit internal latch are
and a time that the output stays high (duty cycle). The           used to double buffer the PWM duty cycle. This double
frequency of the PWM is the inverse of the period                 buffering is essential for glitchless PWM operation.
(1/period).
                                                                  When the CCPR1H and 2-bit latch match TMR2 con-
FIGURE 13-4:          PWM OUTPUT                                  catenated with an internal 2-bit Q clock or 2 bits of the
                                                                  TMR2 prescaler, the CCP1 pin is cleared.

                                                                  The maximum PWM resolution (bits) for a given PWM
                                                                  frequency is given by the equation:

              Period

                                                                                           log    F--F--P-O--W--S---CM---
                                                                                                
                                                                  PWM Resolution (max)  =  -------l--o---g------2-----------bits

      Duty Cycle                                                  Note:  If the PWM duty cycle value is longer than
                                   TMR2 = PR2                            the PWM period, the CCP1 pin will not be
                                                                         cleared.
                       TMR2 = Duty Cycle
TMR2 = PR2

DS39026D-page 112                                                         1999-2013 Microchip Technology Inc.
                                                                                PIC18CXX2

13.5.3 SETUP FOR PWM OPERATION                               3. Make the CCP1 pin an output by clearing the
                                                                   TRISC<2> bit.
The following steps should be taken when configuring
the CCP module for PWM operation:                            4. Set the TMR2 prescale value and enable Timer2
                                                                   by writing to T2CON.
1. Set the PWM period by writing to the PR2
      register.                                              5. Configure the CCP1 module for PWM operation.

2. Set the PWM duty cycle by writing to the
      CCPR1L register and CCP1CON<5:4> bits.

TABLE 13-4: EXAMPLE PWM FREQUENCIES AND RESOLUTIONS AT 40 MHz

      PWM Frequency             2.44 kHz    9.77 kHz         39.06 kHz  156.25 kHz 312.50 kHz 416.67 kHz
Timer Prescaler (1, 4, 16)          16           4                 1
                                                                          1              1                          1
          PR2 Value               0xFF        0xFF              0xFF    0x3F           0x1F                       0x17
Maximum Resolution (bits)           14          12                10                                              6.58
                                                                          8              7

TABLE 13-5: REGISTERS ASSOCIATED WITH PWM AND TIMER2

Name    Bit 7     Bit 6         Bit 5     Bit 4       Bit 3  Bit 2      Bit 1   Bit 0  Value on                   Value on
                                                                                         POR,                     all other
                                                                                         BOR                      RESETS

INTCON    GIE/    PEIE/         TMR0IE INT0IE         RBIE TMR0IF INT0IF        RBIF 0000 000x 0000 000u
          GIEH    GIEL
PIR1    PSPIF(1)  ADIF          RCIF      TXIF        SSPIF  CCP1IF     TMR2IF  TMR1IF 0000 0000 0000 0000
PIE1    PSPIE(1)  ADIE          RCIE      TXIE        SSPIE  CCP1IE     TMR2IE  TMR1IE 0000 0000 0000 0000
IPR1    PSPIP(1)  ADIP          RCIP      TXIP        SSPIP  CCP1IP     TMR2IP  TMR1IP 0000 0000 0000 0000

TRISC PORTC Data Direction Register                                                    1111 1111 1111 1111

TMR2    Timer2 Module Register                                                         0000 0000 0000 0000

PR2     Timer2 Module Period Register                                                  1111 1111 1111 1111

T2CON   -- TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 -000 0000

CCPR1L Capture/Compare/PWM Register1 (LSB)                                             xxxx xxxx uuuu uuuu

CCPR1H Capture/Compare/PWM Register1 (MSB)                                             xxxx xxxx uuuu uuuu

CCP1CON --        --            DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 --00 0000

CCPR2L Capture/Compare/PWM Register2 (LSB)                                             xxxx xxxx uuuu uuuu

CCPR2H Capture/Compare/PWM Register2 (MSB)                                             xxxx xxxx uuuu uuuu

CCP2CON --        --            DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 --00 0000

Legend: x = unknown, u = unchanged, - = unimplemented, read as '0'. Shaded cells are not used by PWM and Timer2.
Note 1: The PSPIF, PSPIE and PSPIP bits are reserved on the PIC18C2X2 devices. Always maintain these bits clear.

1999-2013 Microchip Technology Inc.                                                   DS39026D-page 113
PIC18CXX2

NOTES:

DS39026D-page 114   1999-2013 Microchip Technology Inc.
                                                         PIC18CXX2

14.0 MASTER SYNCHRONOUS
         SERIAL PORT (MSSP)
         MODULE

14.1 Master SSP (MSSP) Module
         Overview

The Master Synchronous Serial Port (MSSP) module is
a serial interface useful for communicating with other
peripheral or microcontroller devices. These peripheral
devices may be Serial EEPROMs, shift registers, dis-
play drivers, A/D converters, etc. The MSSP module
can operate in one of two modes:

Serial Peripheral Interface (SPITM)
Inter-Integrated Circuit (I2CTM)

   - Full Master mode
   - Slave mode (with general address call)
The I2C interface supports the following modes in
hardware:

Master mode
Multi-Master mode
Slave mode

1999-2013 Microchip Technology Inc.                     DS39026D-page 115
PIC18CXX2

14.2 Control Registers

The MSSP module has three associated registers.
These include a status register (SSPSTAT) and two
control registers (SSPCON1 and SSPCON2).

REGISTER 14-1: SSPSTAT: MSSP STATUS REGISTER

                   R/W-0 R/W-0         R-0                R-0   R-0      R-0             R-0        R-0

                   SMP          CKE    D/A                P     S        R/W             UA         BF

                   bit 7                                                                            bit 0

bit 7              SMP: Sample bit

                   SPI Master mode:
                   1 = Input data sampled at end of data output time
                   0 = Input data sampled at middle of data output time

                   SPI Slave mode:
                   SMP must be cleared when SPI is used in Slave mode
                   In I2C Master or Slave mode:
                   1 = Slew rate control disabled for standard speed mode (100 kHz and 1 MHz)
                   0 = Slew rate control enabled for high speed mode (400 kHz)

bit 6              CKE: SPI Clock Edge Select bit

                   CKP = 0:
                   1 = Data transmitted on rising edge of SCK
                   0 = Data transmitted on falling edge of SCK

                   CKP = 1:

                   1 = Data transmitted on falling edge of SCK

                   0 = Data transmitted on rising edge of SCK

bit 5              D/A: Data/Address bit (I2C mode only)

                   1 = Indicates that the last byte received or transmitted was data
                   0 = Indicates that the last byte received or transmitted was address

bit 4              P: STOP bit

                   (I2C mode only. This bit is cleared when the MSSP module is disabled, SSPEN is cleared.)

                   1 = Indicates that a STOP bit has been detected last (this bit is '0' on RESET)
                   0 = STOP bit was not detected last

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

DS39026D-page 116                                                         1999-2013 Microchip Technology Inc.
                                                                     PIC18CXX2

REGISTER 14-1: SSPSTAT: MSSP STATUS REGISTER (CONTINUED)

       R/W-0 R/W-0                         R-0  R-0             R-0  R-0              R-0           R-0

       SMP                            CKE  D/A               P  S    R/W              UA            BF

       bit 7                                                                                        bit 0

bit 3  S: START bit

       (I2C mode only. This bit is cleared when the MSSP module is disabled, SSPEN is cleared.)

       1 = Indicates that a START bit has been detected last (this bit is '0' on RESET)

       0 = START bit was not detected last

bit 2  R/W: Read/Write bit information (I2C mode only)

       This bit holds the R/W bit information following the last address match. This bit is only valid from

       the address match to the next START bit, STOP bit, or not ACK bit.

       In I2C Slave mode:

       1 = Read

       0 = Write

       In I2C Master mode:

       1 = Transmit is in progress

       0 = Transmit is not in progress

       OR-ing this bit with SEN, RSEN, PEN, RCEN, or ACKEN will indicate if the MSSP is in

       IDLE mode.

bit 1  UA: Update Address bit (10-bit I2C mode only)

       1 = Indicates that the user needs to update the address in the SSPADD register
       0 = Address does not need to be updated

bit 0  BF: Buffer Full Status bit

       Receive (SPI and I2C modes):

       1 = Receive complete, SSPBUF is full

       0 = Receive not complete, SSPBUF is empty

       Transmit (I2C mode only):

       1 = Data transmit in progress (does not include the ACK and STOP bits), SSPBUF is full

       0 = Data transmit complete (does not include the ACK and STOP bits), SSPBUF is empty

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

1999-2013 Microchip Technology Inc.                                                  DS39026D-page 117
PIC18CXX2

REGISTER 14-2: SSPCON1: MSSP CONTROL REGISTER1

                     R/W-0  R/W-0      R/W-0         R/W-0    R/W-0  R/W-0          R/W-0               R/W-0
                     WCOL   SSPOV      SSPEN          CKP     SSPM3  SSPM2          SSPM1               SSPM0
                   bit 7
                                                                                                              bit 0

bit 7              WCOL: Write Collision Detect bit

                   Master mode:
                   1 = A write to the SSPBUF register was attempted while the I2C conditions were not valid for a

                        transmission to be started

                   0 = No collision

                   Slave mode:
                   1 = The SSPBUF register is written while it is still transmitting the previous word

                        (must be cleared in software)
                   0 = No collision

bit 6              SSPOV: Receive Overflow Indicator bit

                   In SPI mode:
                   1 = A new byte is received while the SSPBUF register is still holding the previous data. In case

                        of overflow, the data in SSPSR is lost. Overflow can only occur in Slave mode.
                        In Slave mode, the user must read the SSPBUF, even if only transmitting data to avoid
                        setting overflow.
                        In Master mode, the overflow bit is not set, since each new reception (and transmission) is
                        initiated by writing to the SSPBUF register (must be cleared in software).
                   0 = No overflow
                   In I2C mode:
                   1 = A byte is received while the SSPBUF register is still holding the previous byte. SSPOV is a
                        "don't care" in Transmit mode (must be cleared in software).
                   0 = No overflow

bit 5              SSPEN: Synchronous Serial Port Enable bit

                   In both modes when enabled, these pins must be properly configured as input or output.

                   In SPI mode:
                   1 = Enables serial port and configures SCK, SDO, SDI, and SS as the source of the serial

                        port pins
                   0 = Disables serial port and configures these pins as I/O port pins
                   In I2C mode:
                   1 = Enables the serial port and configures the SDA and SCL pins as the source of the

                        serial port pins
                   0 = Disables serial port and configures these pins as I/O port pins

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

DS39026D-page 118                                                     1999-2013 Microchip Technology Inc.
                                                                      PIC18CXX2

REGISTER 14-2: SSPCON1: MSSP CONTROL REGISTER1 (CONTINUED)

           R/W-0                      R/W-0  R/W-0  R/W-0      R/W-0  R/W-0          R/W-0         R/W-0
           WCOL                       SSPOV  SSPEN   CKP       SSPM3  SSPM2          SSPM1         SSPM0
         bit 7
                                                                                                         bit 0

bit 4    CKP: Clock Polarity Select bit
bit 3-0
         In SPI mode:
         1 = Idle state for clock is a high level
         0 = Idle state for clock is a low level
         In I2C Slave mode:
         SCK release control
         1 = Enable clock
         0 = Holds clock low (clock stretch). (Used to ensure data setup time.)
         In I2C Master mode:
         Unused in this mode

         SSPM3:SSPM0: Synchronous Serial Port Mode Select bits

         0000 = SPI Master mode, clock = FOSC/4
         0001 = SPI Master mode, clock = FOSC/16
         0010 = SPI Master mode, clock = FOSC/64
         0011 = SPI Master mode, clock = TMR2 output/2
         0100 = SPI Slave mode, clock = SCK pin. SS pin control enabled.
         0101 = SPI Slave mode, clock = SCK pin. SS pin control disabled. SS can be used as I/O pin.
         0110 = I2C Slave mode, 7-bit address
         0111 = I2C Slave mode, 10-bit address
         1000 = I2C Master mode, clock = FOSC / (4 * (SSPADD+1))
         1001 = Reserved
         1010 = Reserved
         1011 = I2C firmware controlled Master mode (Slave idle)
         1100 = Reserved
         1101 = Reserved
         1110 = I2C Slave mode, 7-bit address with START and STOP bit interrupts enabled
         1111 = I2C Slave mode, 10-bit address with START and STOP bit interrupts enabled

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

1999-2013 Microchip Technology Inc.                                                 DS39026D-page 119
PIC18CXX2

REGISTER 14-3:     SSPCON2: MSSP CONTROL REGISTER2

                    R/W-0    R/W-0           R/W-0    R/W-0     R/W-0          R/W-0  R/W-0           R/W-0
                    GCEN   ACKSTAT           ACKDT    ACKEN     RCEN            PEN   RSEN             SEN
                   bit 7
                                                                                                          bit 0

bit 7              GCEN: General Call Enable bit (In I2C Slave mode only)

                   1 = Enable interrupt when a general call address (0000h) is received in the SSPSR
                   0 = General call address disabled

bit 6              ACKSTAT: Acknowledge Status bit (In I2C Master mode only)

                   In Master Transmit mode:
                   1 = Acknowledge was not received from slave
                   0 = Acknowledge was received from slave

bit 5              ACKDT: Acknowledge Data bit (In I2C Master mode only)

                   In Master Receive mode:

                   Value that will be transmitted when the user initiates an Acknowledge sequence at the end of

                   a receive.
                   1 = Not Acknowledge
                   0 = Acknowledge

bit 4              ACKEN: Acknowledge Sequence Enable bit (In I2C Master mode only)

                   In Master Receive mode:

                   1 = Initiate Acknowledge sequence on SDA and SCL pins, and transmit ACKDT data bit.
                        Automatically cleared by hardware.

                   0 = Acknowledge sequence idle

bit 3              RCEN: Receive Enable bit (In I2C Master mode only)

                   1 = Enables Receive mode for I2C
                   0 = Receive idle

bit 2              PEN: STOP Condition Enable bit (In I2C Master mode only)

                   SCK Release Control:

                   1 = Initiate STOP condition on SDA and SCL pins. Automatically cleared by hardware.
                   0 = STOP condition idle

bit 1              RSEN: Repeated START Condition Enabled bit (In I2C Master mode only)

                   1 = Initiate Repeated START condition on SDA and SCL pins.
                        Automatically cleared by hardware.

                   0 = Repeated START condition idle

bit 0              SEN: START Condition Enabled bit (In I2C Master mode only)

                   1 = Initiate START condition on SDA and SCL pins. Automatically cleared by hardware.
                   0 = START condition idle

                   Note:   For bits ACKEN, RCEN, PEN, RSEN, SEN: If the I2C module is not in the Idle mode,
                           this bit may not be set (no spooling) and the SSPBUF may not be written (or writes
                           to the SSPBUF are disabled).

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

DS39026D-page 120                                                           1999-2013 Microchip Technology Inc.
                                                                                     PIC18CXX2

14.3 SPI Mode                                            FIGURE 14-1:                MSSP BLOCK DIAGRAM
                                                                                     (SPI MODE)
The SPI mode allows 8-bits of data to be synchronously                         Read
transmitted and received simultaneously. All four                                                                Internal
modes of SPI are supported. To accomplish communi-                                                              Data Bus
cation, typically three pins are used:
                                                                                                         Write
Serial Data Out (SDO) - RC5/SDO
Serial Data In (SDI) - RC4/SDI/SDA                                                 SSPBUF reg
Serial Clock (SCK) - RC3/SCK/SCL/LVOIN
                                                         SDI         SSPSR reg                     Shift
Additionally, a fourth pin may be used when in a Slave   SDO  bit0                                 Clock
mode of operation:
                                                              SS Control
Slave Select (SS) - RA5/SS/AN4                                   Enable

14.3.1 OPERATION                                         SS   Edge

When initializing the SPI, several options need to be         Select
specified. This is done by programming the appropriate
control bits (SSPCON1<5:0>) and SSPSTAT<7:6>.                                               2
These control bits allow the following to be specified:                              Clock Select

Master mode (SCK is the clock output)                                              SSPM3:SSPM0
Slave mode (SCK is the clock input)
Clock Polarity (Idle state of SCK)                          SMP:CKE 4                            ( ) TMR2 output
Data input sample phase (middle or end of data                      2                                      2

   output time)                                               Edge
Clock edge (output data on rising/falling edge of
                                                              Select                             Prescaler TOSC
   SCK)
Clock Rate (Master mode only)                          SCK                                     4, 16, 64
Slave Select mode (Slave mode only)
                                                                                     Data to TX/RX in SSPSR
Figure 14-1 shows the block diagram of the MSSP                                      TRIS bit
module, when in SPI mode.

                                                         The MSSP consists of a transmit/receive shift register
                                                         (SSPSR) and a buffer register (SSPBUF). The SSPSR
                                                         shifts the data in and out of the device, MSb first. The
                                                         SSPBUF holds the data that was written to the SSPSR,
                                                         until the received data is ready. Once the 8-bits of data
                                                         have been received, that byte is moved to the SSPBUF
                                                         register. Then the buffer full detect bit, BF
                                                         (SSPSTAT<0>), and the interrupt flag bit, SSPIF, are
                                                         set. This double buffering of the received data
                                                         (SSPBUF) allows the next byte to start reception before
                                                         reading the data that was just received. Any write to the
                                                         SSPBUF register during transmission/reception of data
                                                         will be ignored, and the write collision detect bit, WCOL
                                                         (SSPCON1<7>), will be set. User software must clear
                                                         the WCOL bit so that it can be determined if the follow-
                                                         ing write(s) to the SSPBUF register completed
                                                         successfully.

1999-2013 Microchip Technology Inc.                                                             DS39026D-page 121
PIC18CXX2

When the application software is expecting to receive      transmitter. Generally the MSSP Interrupt is used to
valid data, the SSPBUF should be read before the next      determine when the transmission/reception has com-
byte of data to transfer is written to the SSPBUF. Buffer  pleted. The SSPBUF must be read and/or written. If the
full bit, BF (SSPSTAT<0>), indicates when SSPBUF           interrupt method is not going to be used, then software
has been loaded with the received data (transmission       polling can be done to ensure that a write collision does
is complete). When the SSPBUF is read, the BF bit is       not occur. Example 14-1 shows the loading of the
cleared. This data may be irrelevant if the SPI is only a  SSPBUF (SSPSR) for data transmission.

EXAMPLE 14-1: LOADING THE SSPBUF (SSPSR) REGISTER

LOOP BTFSS SSPSTAT, BF   ;Has data been received(transmit complete)?
         GOTO LOOP       ;No
         MOVF SSPBUF, W  ;WREG reg = contents of SSPBUF
         MOVWF RXDATA    ;Save in user RAM, if data is meaningful
         MOVF TXDATA, W  ;W reg = contents of TXDATA
         MOVWF SSPBUF    ;New data to xmit

The SSPSR is not directly readable or writable, and        port pins. For the pins to behave as the serial port func-
can only be accessed by addressing the SSPBUF reg-         tion, some must have their data direction bits (in the
ister. Additionally, the MSSP status register (SSPSTAT)    TRIS register) appropriately programmed. That is:
indicates the various status conditions.
                                                            SDI is automatically controlled by the SPI module
14.3.2 ENABLING SPI I/O                                     SDO must have TRISC<5> bit cleared
                                                            SCK (Master mode) must have TRISC<3> bit cleared
To enable the serial port, SSP enable bit, SSPEN            SCK (Slave mode) must have TRISC<3> bit set
(SSPCON1<5>), must be set. To reset or reconfigure          SS must have TRISC<4> bit set
SPI mode, clear the SSPEN bit, re-initialize the
SSPCON registers, and then set the SSPEN bit. This         Any serial port function that is not desired may be over-
configures the SDI, SDO, SCK, and SS pins as serial        ridden by programming the corresponding data direc-
                                                           tion (TRIS) register to the opposite value.

DS39026D-page 122                                           1999-2013 Microchip Technology Inc.
                                                                              PIC18CXX2

14.3.3 TYPICAL CONNECTION                                           trollers would send and receive data at the same time.
                                                                    Whether the data is meaningful (or dummy data)
Figure 14-2 shows a typical connection between two                  depends on the application software. This leads to
microcontrollers. The master controller (Processor 1)               three scenarios for data transmission:
initiates the data transfer by sending the SCK signal.
Data is shifted out of both shift registers on their pro-            Master sends data--Slave sends dummy data
grammed clock edge, and latched on the opposite                      Master sends data--Slave sends data
edge of the clock. Both processors should be pro-                   Master sends dummy data--Slave sends data
grammed to same Clock Polarity (CKP), then both con-

FIGURE 14-2:       SPI MASTER/SLAVE CONNECTION

SPI Master SSPM3:SSPM0 = 00xxb                                             SPI Slave SSPM3:SSPM0 = 010xb
                                                   SDO              SDI

               Serial Input Buffer                                                   Serial Input Buffer
                    (SSPBUF)                                                              (SSPBUF)

                   Shift Register          SDI                      SDO       Shift Register
                     (SSPSR)                          Serial Clock              (SSPSR)

              MSb                     LSb  SCK                           MSb                  LSb

                                                                    SCK

              PROCESSOR 1                                                     PROCESSOR 2

1999-2013 Microchip Technology Inc.                                                          DS39026D-page 123
PIC18CXX2

14.3.4 MASTER MODE                                                 Figure 14-3, Figure 14-5, and Figure 14-6, where the
                                                                   MSB is transmitted first. In Master mode, the SPI clock
The master can initiate the data transfer at any time              rate (bit rate) is user programmable to be one of the
because it controls the SCK. The master determines                 following:
when the slave (Processor 2, Figure 14-2) is to broad-
cast data by the software protocol.                                 FOSC/4 (or TCY)
                                                                   FOSC/16 (or 4 TCY)
In Master mode, the data is transmitted/received as                FOSC/64 (or 16 TCY)
soon as the SSPBUF register is written to. If the SPI is            Timer2 output/2
only going to receive, the SDO output could be dis-
abled (programmed as an input). The SSPSR register                 This allows a maximum data rate (at 40 MHz) of 10.00
will continue to shift in the signal present on the SDI pin        Mbps.
at the programmed clock rate. As each byte is
received, it will be loaded into the SSPBUF register as            Figure 14-3 shows the waveforms for Master mode.
if a normal received byte (interrupts and status bits              When the CKE bit is set, the SDO data is valid before
appropriately set). This could be useful in receiver               there is a clock edge on SCK. The change of the input
applications as a "Line Activity Monitor" mode.                    sample is shown based on the state of the SMP bit. The
                                                                   time when the SSPBUF is loaded with the received
The clock polarity is selected by appropriately program-           data is shown.
ming the CKP bit (SSPCON1<4>). This then, would
give waveforms for SPI communication as shown in

FIGURE 14-3:        SPI MODE WAVEFORM (MASTER MODE)

         Write to                                                                                4 Clock
         SSPBUF                                                                                  modes

         SCK        bit7        bit6  bit5                   bit4  bit3  bit2  bit1  bit0
         (CKP = 0
         CKE = 0)   bit7        bit6  bit5                   bit4  bit3  bit2  bit1  bit0

         SCK        bit7                                                             bit0
         (CKP = 1
         CKE = 0)         bit7                                                             bit0

         SCK                                                                                     Next Q4 cycle
         (CKP = 0                                                                                after Q2
         CKE = 1)

         SCK
         (CKP = 1
         CKE = 1)

         SDO
         (CKE = 0)

         SDO
         (CKE = 1)

         SDI
         (SMP = 0)

         Input
         Sample
         (SMP = 0)

         SDI
         (SMP = 1)

         Input
         Sample
         (SMP = 1)
         SSPIF

         SSPSR to
         SSPBUF

DS39026D-page 124                                                               1999-2013 Microchip Technology Inc.
                                                                  PIC18CXX2

14.3.5 SLAVE MODE                                          the SDO pin is no longer driven, even if in the mid-
                                                           dle of a transmitted byte, and becomes a floating
In Slave mode, the data is transmitted and received as     output. External pull-up/pull-down resistors may be
the external clock pulses appear on SCK. When the          desirable, depending on the application.
last bit is latched, the SSPIF interrupt flag bit is set.
                                                               Note 1: When the SPI is in Slave mode with SS
While in Slave mode, the external clock is supplied by                     pin control enabled (SSPCON<3:0> =
the external clock source on the SCK pin. This external                    0100), the SPI module will reset if the SS
clock must meet the minimum high and low times as                          pin is set to VDD.
specified in the electrical specifications.
                                                                       2: If the SPI is used in Slave mode with CKE
While in SLEEP mode, the slave can transmit/receive                        set, then the SS pin control must be
data. When a byte is received, the device will wake-up                     enabled.
from SLEEP.
                                                           When the SPI module resets, the bit counter is forced
14.3.6 SLAVE SELECT                                        to 0. This can be done by either forcing the SS pin to a
              SYNCHRONIZATION                              high level, or clearing the SSPEN bit.

The SS pin allows a Synchronous Slave mode. The            To emulate two-wire communication, the SDO pin can
SPI must be in Slave mode with SS pin control              be connected to the SDI pin. When the SPI needs to
enabled (SSPCON1<3:0> = 04h). The pin must not             operate as a receiver, the SDO pin can be configured
be driven low for the SS pin to function as an input.      as an input. This disables transmissions from the SDO.
The Data Latch must be high. When the SS pin is            The SDI can always be left as an input (SDI function),
low, transmission and reception are enabled and            since it cannot create a bus conflict.
the SDO pin is driven. When the SS pin goes high,

FIGURE 14-4:  SLAVE SYNCHRONIZATION WAVEFORM

SS

SCK
(CKP = 0
CKE = 0)

SCK
(CKP = 1
CKE = 0)

Write to
SSPBUF

SDO           bit7                    bit6                  bit7   bit0
                                                           bit7   bit0
SDI
(SMP = 0)     bit7

Input                                                             Next Q4 cycle
Sample                                                            after Q2
(SMP = 0)
SSPIF
Interrupt
Flag
SSPSR to
SSPBUF

1999-2013 Microchip Technology Inc.                              DS39026D-page 125
PIC18CXX2

FIGURE 14-5:       SPI MODE WAVEFORM (SLAVE MODE WITH CKE = 0)

  SS               bit7  bit6  bit5  bit4  bit3  bit2           bit1  bit0
  optional
                   bit7                                               bit0
  SCK
  (CKP = 0                                                                  Next Q4 cycle
  CKE = 0)                                                                  after Q2

  SCK
  (CKP = 1
  CKE = 0)

  Write to
  SSPBUF

  SDO

  SDI
  (SMP = 0)

  Input
  Sample
  (SMP = 0)

  SSPIF
  Interrupt
  Flag
  SSPSR to
  SSPBUF

FIGURE 14-6:       SPI MODE WAVEFORM (SLAVE MODE WITH CKE = 1)

   SS              bit7  bit6  bit5  bit4  bit3  bit2           bit1 bit0
   not optional
                   bit7                                               bit0
   SCK
   (CKP = 0                                                                 Next Q4 cycle
   CKE = 1)                                                                 after Q2

   SCK
   (CKP = 1
   CKE = 1)
   Write to
   SSPBUF

   SDO

   SDI
   (SMP = 0)

   Input
   Sample
   (SMP = 0)

   SSPIF
   Interrupt
   Flag

   SSPSR to
   SSPBUF

DS39026D-page 126                                       1999-2013 Microchip Technology Inc.
                                                                                      PIC18CXX2

14.3.7 SLEEP OPERATION                                             14.3.9 BUS MODE COMPATIBILITY

In Master mode, all module clocks are halted, and the              Table 14-1 shows the compatibility between the stan-
transmission/reception will remain in that state until the         dard SPI modes and the states of the CKP and CKE
device wakes from SLEEP. After the device returns to               control bits.
normal mode, the module will continue to transmit/
receive data.                                                      TABLE 14-1: SPI BUS MODES

In Slave mode, the SPI transmit/receive shift register