PIC18F23K20/24K20/25K20/26K20/
43K20/44K20/45K20/46K20
                     Data Sheet
                              28/40/44-Pin Flash Microcontrollers
                                   with nanoWatt XLP Technology
 2010 Microchip Technology Inc.                             DS41303G
Note the following details of the code protection feature on Microchip devices:
•    Microchip products meet the specification contained in their particular Microchip Data Sheet.
•    Microchip believes that its family of products is one of the most secure families of its kind on the market today, when used in the
     intended manner and under normal conditions.
•    There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our
     knowledge, require using the Microchip products in a manner outside the operating specifications contained in Microchip’s Data
     Sheets. Most likely, the person doing so is engaged in theft of intellectual property.
•    Microchip is willing to work with the customer who is concerned about the integrity of their code.
•    Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not
     mean that we are guaranteeing the product as “unbreakable.”
Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of our
products. Attempts to break Microchip’s code protection feature may be a violation of the Digital Millennium Copyright Act. If such acts
allow unauthorized access to your software or other copyrighted work, you may have a right to sue for relief under that Act.
Information c ontained in t his p ublication regarding d evice           Trademarks
applications and the like is provided only for your convenience
                                                                         The Microchip name and logo, the Microchip logo, dsPIC,
and may be superseded by updates. It is your responsibility to           KEELOQ, KEELOQ logo, MPLAB, PIC, PICmicro, PICSTART,
ensure that yo ur ap plication me ets wi th yo ur sp ecifications.
                                                                         rfPIC and UNI/O are registered trademarks of Microchip
MICROCHIP MAKES N O R EPRESENTATIONS OR                                  Technology Incorporated in the U.S.A. and other countries.
WARRANTIES OF AN Y KIN D W HETHER EXPRESS OR
IMPLIED, WR ITTEN O R O RAL, ST ATUTORY OR                               FilterLab, Hampshire, HI-TECH C, Linear Active Thermistor,
OTHERWISE, RE LATED T O T HE I NFORMATION,                               MXDEV, MXLAB, SEEVAL and The Embedded Control
INCLUDING B UT NOT L IMITED T O IT S C ONDITION,                         Solutions Company are registered trademarks of Microchip
QUALITY, PE RFORMANCE, M ERCHANTABILITY OR                               Technology Incorporated in the U.S.A.
FITNESS FOR PU RPOSE. Microchip dis claims al l lia bility               Analog-for-the-Digital Age, Application Maestro, CodeGuard,
arising f rom t his i nformation an d its use. U se o f Microchip        dsPICDEM, dsPICDEM.net, dsPICworks, dsSPEAK, ECAN,
devices in li fe su pport a nd/or safety ap plications is e ntirely at   ECONOMONITOR, FanSense, HI-TIDE, In-Circuit Serial
the buyer’s risk, and the buyer agrees to defend, indemnify and          Programming, ICSP, Mindi, MiWi, MPASM, MPLAB Certified
hold h armless M icrochip f rom a ny an d al l da mages, c laims,        logo, MPLIB, MPLINK, mTouch, Octopus, Omniscient Code
suits, o r e xpenses re sulting f rom s uch u se. No li censes are       Generation, PICC, PICC-18, PICDEM, PICDEM.net, PICkit,
conveyed, im plicitly or ot herwise, under an y M icrochip               PICtail, PIC32 logo, REAL ICE, rfLAB, Select Mode, Total
intellectual property rights.                                            Endurance, TSHARC, UniWinDriver, WiperLock and ZENA
                                                                         are trademarks of Microchip Technology Incorporated in the
                                                                         U.S.A. and other countries.
                                                                         SQTP is a service mark of Microchip Technology Incorporated
                                                                         in the U.S.A.
                                                                         All other trademarks mentioned herein are property of their
                                                                         respective companies.
                                                                         © 2010, Microchip Technology Incorporated, Printed in the
                                                                         U.S.A., All Rights Reserved.
                                                                              Printed on recycled paper.
                                                                         Microchip received ISO/TS-16949:2002 certification for its worldwide
                                                                         headquarters, design and wafer fabrication facilities in Chandler and
                                                                         Tempe, Arizona; Gresham, Oregon and design centers in California
                                                                         and India. The Company’s quality system processes and procedures
                                                                         are for its PIC® MCUs and dsPIC® DSCs, KEELOQ® code hopping
                                                                         devices, Serial EEPROMs, microperipherals, nonvolatile memory and
                                                                         analog products. In addition, Microchip’s quality system for the design
                                                                         and manufacture of development systems is ISO 9001:2000 certified.
DS41303G-page 2                                                                                          2010 Microchip Technology Inc.
                                                    PIC18F2XK20/4XK20
                         28/40/44-Pin Flash Microcontrollers
                           with nanoWatt XLP Technology
High-Performance RISC CPU:                           Extreme Low-Power Management
• C Compiler Optimized Architecture:                 with nanoWatt XLP:
  - Optional extended instruction set designed to    • Sleep mode: < 100 nA @ 1.8V
    optimize re-entrant code                         • Watchdog Timer: < 800 nA @ 1.8V
• Up to 1024 bytes Data EEPROM
                                                     • Timer1 Oscillator: < 800 nA @ 32 kHz and 1.8V
• Up to 64 Kbytes Linear Program Memory
  Addressing                                         Analog Features:
• Up to 3936 bytes Linear Data Memory Addressing
• Up to 16 MIPS Operation                            • Analog-to-Digital Converter (ADC) module:
• 16-bit Wide Instructions, 8-bit Wide Data Path       - 10-bit resolution, 13 External Channels
• Priority Levels for Interrupts                       - Auto-acquisition capability
• 31-Level, Software Accessible Hardware Stack         - Conversion available during Sleep
• 8 x 8 Single-Cycle Hardware Multiplier               - 1.2V Fixed Voltage Reference (FVR) channel
Flexible Oscillator Structure:                         - Independent input multiplexing
                                                     • Analog Comparator module:
• Precision 16 MHz Internal Oscillator Block:          - Two rail-to-rail analog comparators
  - Factory calibrated to ± 1%
                                                       - Independent input multiplexing
  - Software selectable frequencies range of
    31 kHz to 16 MHz                                 • Voltage Reference (CVREF) module
  - 64 MHz performance available using PLL –           - Programmable (% VDD), 16 steps
    no external components required                    - Two 16-level voltage ranges using VREF pins
• Four Crystal modes up to 64 MHz
                                                     Peripheral Highlights:
• Two External Clock modes up to 64 MHz
• 4X Phase Lock Loop (PLL)                           • Up to 35 I/O Pins plus 1 Input-only Pin:
• Secondary Oscillator using Timer1 @ 32 kHz           - High-Current Sink/Source 25 mA/25 mA
• Fail-Safe Clock Monitor:                             - Three programmable external interrupts
  - Allows for safe shutdown if peripheral clock       - Four programmable interrupt-on-change
    stops                                              - Eight programmable weak pull-ups
  - Two-Speed Oscillator Start-up                      - Programmable slew rate
                                                     • Capture/Compare/PWM (CCP) module
Special Microcontroller Features:                    • Enhanced CCP (ECCP) module:
• Operating Voltage Range: 1.8V to 3.6V                - One, two or four PWM outputs
• Self-Programmable under Software Control             - Selectable polarity
• Programmable 16-Level High/Low-Voltage               - Programmable dead time
  Detection (HLVD) module:                             - Auto-Shutdown and Auto-Restart
  - Interrupt on High/Low-Voltage Detection          • Master Synchronous Serial Port (MSSP) module
• Programmable Brown-out Reset (BOR):                  - 3-wire SPI (supports all 4 modes)
  - With software enable option                        - I2C™ Master and Slave modes with address
• Extended Watchdog Timer (WDT):                         mask
  - Programmable period from 4 ms to 131s            • Enhanced Universal Synchronous Asynchronous
• Single-Supply 3V In-Circuit Serial                   Receiver Transmitter (EUSART) module:
  Programming™ (ICSP™) via Two Pins                    - Supports RS-485, RS-232 and LIN
• In-Circuit Debug (ICD) via Two Pins                  - RS-232 operation using internal oscillator
                                                       - Auto-Wake-up on Break
                                                       - Auto-Baud Detect
 2010 Microchip Technology Inc.                                                        DS41303G-page 3
PIC18F2XK20/4XK20
-
                                                                                                   EUSART
                    Program Memory       Data Memory             10-bit     CCP/       MSSP
                                                       (1)                                                          Timers
      Device       Flash # Single-Word SRAM EEPROM I/O            A/D       ECCP         Master             Comp.
                                                                                   SPI                              8/16-bit
                  (bytes) Instructions (bytes) (bytes)           (ch)(2)   (PWM)         I2C™
    PIC18F23K20    8K        4096        512      256      25      11       1/1    Y          Y    1          2       1/3
    PIC18F24K20    16K       8192        768      256      25      11       1/1    Y          Y    1          2       1/3
    PIC18F25K20    32K      16384       1536      256      25      11       1/1    Y          Y    1          2       1/3
    PIC18F26K20    64k      32768       3936      1024     25      11       1/1    Y          Y    1          2       1/3
    PIC18F43K20    8K        4096        512      256      36      14       1/1    Y          Y    1          2       1/3
    PIC18F44K20    16K       8192        768      256      36      14       1/1    Y          Y    1          2       1/3
    PIC18F45K20    32K      16384       1536      256      36      14       1/1    Y          Y    1          2       1/3
PIC18F46K20  64k          32768       3936        1024      36     14       1/1    Y          Y    1          2       1/3
Note 1: One pin is input only.
     2: Channel count includes internal fixed voltage reference channel.
DS41303G-page 4                                                                            2010 Microchip Technology Inc.
                                                                                                PIC18F2XK20/4XK20
Pin Diagrams
       28-pin PDIP, SOIC, SSOP
                                MCLR/VPP/RE3                  1                                         28   RB7/KBI3/PGD
                              RA0/AN0/C12IN0-                 2                                         27   RB6//KBI2/PGC
                              RA1/AN1/C12IN1-                 3                                         26   RB5/KBI1/PGM
                     RA2/AN2/VREF-/CVREF/C2IN+                4                                         25   RB4/KBI0/AN11/P1D
                                                                             PIC18F23K20
                                                                             PIC18F24K20
                                                                             PIC18F25K20
                                                                             PIC18F26K20
                          RA3/AN3/VREF+/C1IN+                 5                                         24   RB3/AN9/C12IN2-/CCP2(1)
                             RA4/T0CKI/C1OUT                  6                                         23   RB2/INT2/AN8/P1B
                     RA5/AN4/SS/HLVDIN/C2OUT                  7                                         22   RB1/INT1/AN10/C12IN3-/P1C
                                           VSS                8                                         21   RB0/INT0/FLT0/AN12
                              OSC1/CLKIN/RA7                  9                                         20   VDD
                            OSC2/CLKOUT/RA6                  10                                         19   VSS
                            RC0/T1OSO/T13CKI                 11                                         18   RC7/RX/DT
                            RC1/T1OSI/CCP2(1)                12                                         17   RC6/TX/CK
                                RC2/CCP1/P1A                 13                                         16   RC5/SDO
                                 RC3/SCK/SCL                 14                                         15   RC4/SDI/SDA
       40-pin PDIP
                               MCLR/VPP/RE3                     1                                  40        RB7/KBI3/PGD
                             RA0/AN0/C12IN0-                    2                                  39        RB6/KBI2/PGC
                             RA1/AN1/C12IN1-                    3                                  38        RB5/KBI1/PGM
                    RA2/AN2/VREF-/CVREF/C2IN+                   4                                  37        RB4/KBI0/AN11
                         RA3/AN3/VREF+/C1IN+                    5                                  36        RB3/AN9/C12IN2-/CCP2(1)
                            RA4/T0CKI/C1OUT                     6                                  35        RB2/INT2/AN8
                    RA5/AN4/SS/HLVDIN/C2OUT                     7                                  34        RB1/INT1/AN10/C12IN3-
                                  RE0/RD/AN5                    8                                  33        RB0/INT0/FLT0/AN12
                                                                          PIC18F43K20
                                                                          PIC18F44K20
                                                                          PIC18F45K20
                                  RE1/WR/AN6                    9         PIC18F46K20              32        VDD
                                  RE2/CS/AN7                    10                                 31        VSS
                                          VDD                   11                                 30        RD7/PSP7/P1D
                                          VSS                   12                                 29        RD6/PSP6/P1C
                             OSC1/CLKIN/RA7                     13                                 28        RD5/PSP5/P1B
                           OSC2/CLKOUT/RA6                      14                                 27        RD4/PSP4
                           RC0/T1OSO/T13CKI                     15                                 26        RC7/RX/DT
                           RC1/T1OSI/CCP2(1)                    16                                 25        RC6/TX/CK
                               RC2/CCP1/P1A                     17                                 24        RC5/SDO
                                RC3/SCK/SCL                     18                                 23        RC4/SDI/SDA
                                    RD0/PSP0                    19                                 22        RD3/PSP3
                                    RD1/PSP1                    20                                 21        RD2/PSP2
                                                                                    RB4/KBI0/AN11/P1D
                                                                  RA1/AN1/C12IN1-
                                                                  RA0/AN0/C12IN0-
                                                                                    MCLR/VPP/RE3
                                                                                    RB5/KBI1/PGM
                                                                                    RB7/KBI3/PGD
                                                                                    RB6/KBI2/PGC
       28-pin QFN/UQFN(2)
                                                                   28 27 26 25 24 23 22
                     RA2/AN2/VREF-/CVREF/C2IN+              1                                           21   RB3/AN9/C12IN2-/CCP2(1)
                          RA3/AN3/VREF+/C1IN+               2     PIC18F23K20                           20   RB2/INT2/AN8/P1B
                             RA4/T0CKI/C1OUT                3     PIC18F24K20                           19   RB1/INT1/AN10/C12IN3-/P1C
                     RA5/AN4/SS/HLVDIN/C2OUT                4                                           18   RB0/INT0/FLT0/AN12
                                           VSS              5
                                                                  PIC18F25K20                                VDD
                                                                                                        17
                              OSC1/CLKIN/RA7                6     PIC18F26K20                           16   VSS
                            OSC2/CLKOUT/RA6                 7                                           15   RC7/RX/DT
                                                                   8 9 10 11 12 13 14
                                                                  RC0/T1OSO/T13CKI
                                                                           RC5/SDO
                                                                  RC1/T1OSI/CCP2(1)
                                                                       RC4/SDI/SDA
                                                                      RC2/CCP1/P1A
                                                                       RC3/SCK/SCL
                                                                         RC6/TX/CK
    Note   1:   RB3 is the alternate pin for CCP2 multiplexing.
           2:   UQFN package availability applies only to PIC18F23K20.
 2010 Microchip Technology Inc.                                                                                                         DS41303G-page 5
PIC18F2XK20/4XK20
Pin Diagrams (Cont.’d)
                                                             RC1/T1OSI/CCP2(1)
                44-pin TQFP
                                                             RC2/CCP1/P1A
                                                             RC3/SCK/SCL
                                                             RC4/SDI/SDA
                                                             RC6/TX/CK
                                                             RD3/PSP3
                                                             RD2/PSP2
                                                             RD1/PSP1
                                                             RD0/PSP0
                                                             RC5/SDO
                                                             NC
                                                             44
                                                             43
                                                             42
                                                             41
                                                             40
                                                             39
                                                             38
                                                             37
                                                             36
                                                             35
                                                             34
                               RC7/RX/DT                   1                                      33        NC
                                RD4/PSP4                   2                                      32        RC0/T1OSO/T13CKI
                            RD5/PSP5/P1B                   3                                      31        OSC2/CLKOUT/RA6
                            RD6/PSP6/P1C                   4         PIC18F43K20                  30        OSC1/CLKIN/RA7
                            RD7/PSP7/P1D                   5         PIC18F44K20                  29        VSS
                                      VSS                  6                                      28        VDD
                                      VDD                  7
                                                                     PIC18F45K20                  27        RE2/CS/AN7
                       RB0/INT0/FLT0/AN12                  8         PIC18F46K20                  26        RE1/WR/AN6
                    RB1/INT1/AN10/C12IN3-                  9                                      25        RE0/RD/AN5
                             RB2/INT2/AN8                  10                                     24        RA5/AN4/SS/HLVDIN/C2OUT
                   RB3/AN9/C12IN2-/CCP2(1)                 11                                     23        RA4/T0CKI/C1OUT
                                                             12
                                                             13
                                                             14
                                                             15
                                                             16
                                                             17
                                                             18
                                                             19
                                                             20
                                                             21
                                                             22
                                                                               RA2/AN2/VREF-/CVREF/C2IN+
                                                                                                     NC
                                                                                                     NC
                                                                                          RB6/KBI2/PGC
                                                                                          RB7/KBI3/PGD
                                                                                    RA3/AN3/VREF+/C1IN+
                                                                                          RB4/KBI0/AN11
                                                                                          RB5/KBI1/PGM
                                                                                          MCLR/VPP/RE3
                                                                                        RA0/AN0/C12IN0-
                                                                                        RA1/AN1/C12IN1-
                                                             RC1/T1OSI/CCP2(1)
                                                             RC0/T1OSO/T13CKI
                                                             RC2/CCP1/P1A
                                                             RC3/SCK/SCL
                                                             RC4/SDI/SDA
                                                             RC6/TX/CK
                                                             RD3/PSP3
                                                             RD2/PSP2
                                                             RD1/PSP1
                                                             RD0/PSP0
                                                             RC5/SDO
            44-pin QFN
                                                                   44
                                                                   43
                                                                   42
                                                                   41
                                                                   40
                                                                   39
                                                                   38
                                                                   37
                                                                   36
                                                                   35
                                                                   34
                                       RC7/RX/DT                1                                      33   OSC2/CLKOUT/RA6
                                        RD4/PSP4                2                                      32   OSC1/CLKIN/RA7
                                    RD5/PSP5/P1B                3                                      31   VSS
                                    RD6/PSP6/P1C                4      PIC18F43K20                     30   VSS
                                    RD7/PSP7/P1D                5      PIC18F44K20                     29   VDD
                                              VSS               6                                      28   VDD
                                              VDD                      PIC18F45K20                     27   RE2/CS/AN7
                                                                7
                                              VDD               8      PIC18F46K20                     26   RE1/WR/AN6
                              RB0/INT0/FLT0/AN12                9                                      25   RE0/RD/AN5
                            RB1/INT1/AN10/C12IN3-               10                                     24   RA5/AN4/SS/HLVDIN/C2OUT
                                     RB2/INT2/AN8               11                                     23   RA4/T0CKI/C1OUT
                                                                   12
                                                                   13
                                                                   14
                                                                   15
                                                                   16
                                                                   17
                                                                   18
                                                                   19
                                                                   20
                                                                   21
                                                                   22
                                                                   RA2/AN2/VREF-/CVREF/C2IN+
                                                                    RB3/AN9/C12IN2-/CCP2(1)
                                                                              RB5/KBI1/PGM
                                                                              RB4/KBI0/AN11
                                                                              MCLR/VPP/RE3
                                                                            RA0/AN0/C12IN0-
                                                                            RA1/AN1/C12IN1-
                                                                                         NC
                                                                              RB6/KBI2/PGC
                                                                              RB7/KBI3/PGD
                                                                        RA3/AN3/VREF+/C1IN+
    Note   1:    RB3 is the alternate pin for CCP2 multiplexing.
DS41303G-page 6                                                                                                  2010 Microchip Technology Inc.
                                                                                                     PIC18F2XK20/4XK20
TABLE 1:                         PIC18F4XK20 PIN SUMMARY
                                                      Comparator
                                                                     Reference
                                                                                                                                   Interrupts
            TQFP Pin
                                                                                            EUSART
                       QFN Pin
  DIL Pin
                                           Analog
                                                                                                                                                Pull-up
                                                                                                                Timers
                                                                                                       MSSP
                                                                                   ECCP
                                                                                                                                                              Basic
                                                                                                                          Slave
                                   I/O
  2         19         19         RA0     AN0       C12IN0-         —              —        —         —        —         —        —             —            —
  3         20         20         RA1     AN1       C12IN1-         —              —        —         —        —         —        —             —            —
  4         21         21         RA2     AN2       C2IN+          VREF-/          —        —         —        —         —        —             —            —
                                                                   CVREF
  5         22         22         RA3     AN3       C1IN+          VREF+           —        —         —        —         —        —             —            —
  6         23         23         RA4               C1OUT           —              —        —         —       T0CKI      —        —             —            —
  7         24         24         RA5     AN4       C2OUT          HLVDIN          —        —         SS       —         —        —             —            —
  14        31         33         RA6     —           —             —              —        —         —        —         —        —             —           OSC2/
                                                                                                                                                           CLKOUT
  13        30         32         RA7     —           —             —              —        —         —        —         —        —             —         OSC1/CLKIN
  33         8          9         RB0     AN12        —             —             FLT0      —         —        —         —        INT0          Yes          —
  34         9         10         RB1     AN10      C12IN3-         —              —        —         —        —         —        INT1          Yes          —
  35        10         11         RB2     AN8         —             —              —        —         —        —         —        INT2          Yes          —
  36        11         12         RB3     AN9       C12IN2-         —            CCP2(1)    —         —        —         —        —             Yes          —
  37        14         14         RB4     AN11        —             —              —        —         —        —         —        KBI0          Yes          —
  38        15         15         RB5     —           —             —              —        —         —        —         —        KBI1          Yes          PGM
  39        16         16         RB6     —           —             —              —        —         —        —         —        KBI2          Yes          PGC
  40        17         17         RB7     —           —             —              —        —         —        —         —        KBI3          Yes          PGD
  15        32         34         RC0     —           —             —              —        —         —       T1OSO/     —        —             —            —
                                                                                                              T13CKI
  16        35         35         RC1     —           —             —            CCP2(2)    —         —       T1OSI      —        —             —            —
  17        36         36         RC2     —           —             —            CCP1/      —         —        —         —        —             —            —
                                                                                  P1A
  18        37         37         RC3     —           —             —              —        —        SCK/      —         —        —             —            —
                                                                                                     SCL
  23        42         42         RC4     —           —             —              —        —         SDI/     —         —        —             —            —
                                                                                                      SDA
  24        43         43         RC5     —           —             —              —        —        SDO       —         —        —             —            —
  25        44         44         RC6     —           —             —              —       TX/CK      —        —         —        —             —            —
  26         1          1         RC7     —           —             —              —       RX/DT      —        —         —        —             —            —
  19        38         38         RD0     —           —             —              —        —         —        —         PSP0     —             —            —
  20        39         39         RD1     —           —             —              —        —         —        —         PSP1     —             —            —
  21        40         40         RD2     —           —             —              —        —         —        —         PSP2     —             —            —
  22        41         41         RD3     —           —             —              —        —         —        —         PSP3     —             —            —
  27         2          2         RD4     —           —             —              —        —         —        —         PSP4     —             —            —
  28         3          3         RD5     —           —             —             P1B       —         —        —         PSP5     —             —            —
  29         4          4         RD6     —           —             —             P1C       —         —        —         PSP6     —             —            —
  30         5          5         RD7     —           —             —             P1D       —         —        —         PSP7     —             —            —
  8         25         25         RE0     AN5         —             —              —        —         —        —         RD       —             —            —
  9         26         26         RE1     AN6         —             —              —        —         —        —         WR       —             —            —
  10        27         27         RE2     AN7         —             —              —        —         —        —         CS       —             —            —
  1         18         18        RE3(3)   —           —             —              —        —         —        —         —        —             —         MCLR/VPP
  11         7          7         —       —           —             —              —        —         —        —         —        —             —            VDD
  32        28         28         —       —           —             —              —        —         —        —         —        —             —            VDD
  12         6          6         —       —           —             —              —        —         —        —         —        —             —            VSS
  31        29         30         —       —           —             —              —        —         —        —         —        —             —            VSS
  –         NC          8         —       —           —             —              —        —         —        —         —        —             —            VDD
  –         NC         29         —       —           —             —              —        —         —        —         —        —             —            VDD
  –-        NC         31         —       —           —             —              —        —         —        —         —        —             —            VSS
Note 1:            CCP2 multiplexed with RB3 when CONFIG3H<0> = 0
     2:            CCP2 multiplexed with RC1 when CONFIG3H<0> = 1
     3:            Input-only.
 2010 Microchip Technology Inc.                                                                                                                    DS41303G-page 7
PIC18F2XK20/4XK20
TABLE 2:                      PIC18F2XK20 PIN SUMMARY
                                            Comparator
                                                           Reference
           Pin QUAD
                                                                                                                        Interrupts
                                                                                  EUSART
 Pin DIL
                                 Analog
                                                                                                                                     Pull-up
                                                                                                     Timers
                                                                                            MSSP
                                                                         ECCP
                                                                                                                                                 Basic
                                                                                                              Slave
                        I/O
  2        27          RA0       AN0      C12IN0-
  3        28          RA1       AN1      C12IN1-
  4        1           RA2       AN2      C2IN+          VREF-/
                                                         CVREF
  5        2           RA3       AN3      C1IN+          VREF+
  6        3           RA4                C1OUT                                                    T0CKI
  7        4           RA5       AN4      C2OUT          HLVDIN                            SS
 10        7           RA6                                                                                                                      OSC2/
                                                                                                                                               CLKOUT
  9        6           RA7                                                                                                                     OSC1/
                                                                                                                                               CLKIN
 21        18          RB0      AN12                                    FLT0                                          INT0           Yes
 22        19          RB1      AN10      C12IN3-                       P1C                                           INT1           Yes
 23        20          RB2       AN8                                    P1B                                           INT2           Yes
 24        21          RB3       AN9      C12IN2-                      CCP2(1)                                                       Yes
 25        22          RB4      AN11                                    P1D                                           KBI0           Yes
 26        23          RB5                                                                                            KBI1           Yes        PGM
 27        24          RB6                                                                                            KBI2           Yes        PGC
 28        25          RB7                                                                                            KBI3           Yes        PGD
 11        8          RC0                                                                          T1OSO/
                                                                                                   T13CKI
 12        9          RC1                                              CCP2(2)                     T1OSI
 13        10         RC2                                              CCP1/
                                                                        P1A
 14        11         RC3                                                                  SCK/
                                                                                           SCL
 15        12         RC4                                                                  SDI/
                                                                                           SDA
 16        13         RC5                                                                  SDO
 17        14         RC6                                                        TX/CK
 18        15         RC7                                                        RX/DT
  1        26         RE3(3)                                                                                                                   MCLR/
                                                                                                                                                VPP
  8        5                                                                                                                                    VSS
 19        16                                                                                                                                   VSS
 20        17                                                                                                                                   VDD
Note 1:         CCP2 multiplexed with RB3 when CONFIG3H<0> = 0
     2:         CCP2 multiplexed with RC1 when CONFIG3H<0> = 1
     3:         Input-only
DS41303G-page 8                                                                                                   2010 Microchip Technology Inc.
                                                                                                             PIC18F2XK20/4XK20
Table of Contents
1.0 Device Overview ....................................................................................................................................................................... 11
2.0 Oscillator Module (With Fail-Safe Clock Monitor)...................................................................................................................... 27
3.0 Power-Managed Modes ............................................................................................................................................................ 43
4.0 Reset ......................................................................................................................................................................................... 51
5.0 Memory Organization ................................................................................................................................................................ 65
6.0 Flash Program Memory............................................................................................................................................................. 89
7.0 Data EEPROM Memory ............................................................................................................................................................ 99
8.0 8 x 8 Hardware Multiplier......................................................................................................................................................... 105
9.0 Interrupts ................................................................................................................................................................................. 107
10.0 I/O Ports .................................................................................................................................................................................. 121
11.0 Capture/Compare/PWM (CCP) Modules ................................................................................................................................ 143
12.0 Timer0 Module ........................................................................................................................................................................ 155
13.0 Timer1 Module ........................................................................................................................................................................ 159
14.0 Timer2 Module ........................................................................................................................................................................ 167
15.0 Timer3 Module ........................................................................................................................................................................ 169
16.0 Enhanced Capture/Compare/PWM (ECCP) Module............................................................................................................... 173
17.0 Master Synchronous Serial Port (MSSP) Module ................................................................................................................... 193
18.0 Enhanced Universal Synchronous Asynchronous Receiver Transmitter (EUSART) .............................................................. 237
19.0 Analog-to-Digital Converter (ADC) Module ............................................................................................................................. 265
20.0 Comparator Module................................................................................................................................................................. 279
21.0 Voltage References................................................................................................................................................................. 289
22.0 High/Low-Voltage Detect (HLVD)............................................................................................................................................ 293
23.0 Special Features of the CPU................................................................................................................................................... 299
24.0 Instruction Set Summary ......................................................................................................................................................... 315
25.0 Development Support.............................................................................................................................................................. 365
26.0 Electrical Characteristics ......................................................................................................................................................... 369
27.0 DC and AC Characteristics Graphs and Tables...................................................................................................................... 403
28.0 Packaging Information............................................................................................................................................................. 427
Appendix A: Revision History............................................................................................................................................................ 441
Appendix B: Device Differences ....................................................................................................................................................... 442
Index ................................................................................................................................................................................................. 443
The Microchip Web Site .................................................................................................................................................................... 453
Customer Change Notification Service ............................................................................................................................................. 453
Customer Support ............................................................................................................................................................................. 453
Reader Response ............................................................................................................................................................................. 454
Product Identification System ........................................................................................................................................................... 455
 2010 Microchip Technology Inc.                                                                                                                                             DS41303G-page 9
PIC18F2XK20/4XK20
                                          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 t he literature c enter, pleas e specify whic h device, rev ision of s ilicon and data sheet (include
 literature 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.
DS41303G-page 10                                                                                      2010 Microchip Technology Inc.
                                                             PIC18F2XK20/4XK20
1.0      DEVICE OVERVIEW                                     1.1.2        MULTIPLE OSCILLATOR OPTIONS
                                                                          AND FEATURES
This document contains device specific information for
the following devices:                                       All o f th e devices i n th e PIC18F2XK20/4XK20 family
                                                             offer ten d ifferent os cillator op tions, all owing us ers a
• PIC18F23K20                • PIC18F43K20                   wide r ange o f ch oices in de veloping a pplication
• PIC18F24K20                • PIC18F44K20                   hardware. These include:
• PIC18F25K20                • PIC18F45K20                   • Four Crystal modes, using crystals or ceramic
• PIC18F26K20                • PIC18F46K20                     resonators
                                                             • Two External Clock modes, offering the option of
This fam ily of fers th e ad vantages of a ll PI C18
                                                               using two pins (oscillator input and a divide-by-4
microcontrollers – na mely, hig h computational
                                                               clock output) or one pin (oscillator input, with the
performance at an economical price – with the addition
                                                               second pin reassigned as general I/O)
of high-endurance, Flash program memory. On top of
these fea tures, the     PIC18F2XK20/4XK20 fam ily           • Two External RC Oscillator modes with the same
introduces d esign en hancements t hat make t hese             pin options as the External Clock modes
microcontrollers a log ical ch oice for many hig h-          • An internal oscillator block which contains a
performance, power sensitive applications.                     16 MHz HFINTOSC oscillator and a 31 kHz
                                                               LFINTOSC oscillator which together provide 8
1.1      New Core Features                                     user selectable clock frequencies, from 31 kHz to
                                                               16 MHz. This option frees the two oscillator pins
1.1.1       nanoWatt TECHNOLOGY                                for use as additional general purpose I/O.
All o f t he devices i n t he PIC18F2XK20/4XK20 family       • A Phase Lock Loop (PLL) frequency multiplier,
incorporate a ra nge o f features that c an s ignificantly     available to both the high-speed crystal and inter-
reduce power c onsumption d uring operation. Ke y              nal oscillator modes, which allows clock speeds of
items include:                                                 up to 64 MHz. Used with the internal oscillator, the
                                                               PLL gives users a complete selection of clock
• Alternate Run Modes: By clocking the controller              speeds, from 31 kHz to 64 MHz – all without using
  from the Timer1 source or the internal oscillator            an external crystal or clock circuit.
  block, power consumption during code execution
  can be reduced by as much as 90%.                          Besides its availability a s a cl ock so urce, t he internal
                                                             oscillator block provides a stable reference source that
• Multiple Idle Modes: The controller can also run
                                                             gives th e fam ily a dditional feat ures for ro bust
  with its CPU core disabled but the peripherals still
                                                             operation:
  active. In these states, power consumption can be
  reduced even further, to as little as 4% of normal         • Fail-Safe Clock Monitor: This option constantly
  operation requirements.                                      monitors the main clock source against a refer-
• On-the-fly Mode Switching: The power-                        ence signal provided by the LFINTOSC. If a clock
  managed modes are invoked by user code during                failure occurs, the controller is switched to the
  operation, allowing the user to incorporate power-           internal oscillator block, allowing for continued
  saving ideas into their application’s software               operation or a safe application shutdown.
  design.                                                    • Two-Speed Start-up: This option allows the
• Low Consumption in Key Modules: The                          internal oscillator to serve as the clock source
  power requirements for both Timer1 and the                   from Power-on Reset, or wake-up from Sleep
  Watchdog Timer are minimized. See                            mode, until the primary clock source is available.
  Section 26.0 “Electrical Characteristics”
  for values.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 11
PIC18F2XK20/4XK20
1.2      Other Special Features                           1.3       Details on Individual Family
• Memory Endurance: The Flash cells for both
                                                                    Members
  program memory and data EEPROM are rated to             Devices in the PIC18F2XK20/4XK20 family are av ail-
  last for many thousands of erase/write cycles – up to   able in 28-pin and 40/44-pin packages. Block diagrams
  10K for program memory and 100K for EEPROM.             for the tw o g roups are shown i n Fi gure 1-1 an d
  Data retention without refresh is conservatively        Figure 1-2.
  estimated to be greater than 40 years.
                                                          The devices are differentiated from each other in five
• Self-programmability: These devices can write           ways:
  to their own program memory spaces under inter-
  nal software control. By using a bootloader rou-        1.    Flash program me mory (8 Kbytes for
  tine located in the protected Boot Block at the top           PIC18F23K20/43K20 de vices, 16 Kbytes for
  of program memory, it becomes possible to create              PIC18F24K20/44K20 de vices, 32 Kbytes for
  an application that can update itself in the field.           PIC18F25K20/45K20 AN D 64 Kbytes for
                                                                PIC18F26K20/46K20).
• Extended Instruction Set: The PIC18F2XK20/
  4XK20 family introduces an optional extension to        2.    A/D channels (11 fo r 28 -pin d evices, 14 fo r
  the PIC18 instruction set, which adds 8 new                   40/44-pin devices).
  instructions and an Indexed Addressing mode.            3.    I/O ports (3 bidirectional ports on 28-pin devices,
  This extension, enabled as a device configuration             5 bidirectional ports on 40/44-pin devices).
  option, has been specifically designed to optimize      4.    Parallel Sl ave Port (p resent o nly on 4 0/44-pin
  re-entrant application code originally developed in           devices).
  high-level languages, such as C.
                                                          All other features for devices in this family are identical.
• Enhanced CCP module: In PWM mode, this                  These are summarized in Table 1-1.
  module provides 1, 2 or 4 modulated outputs for
  controlling half-bridge and full-bridge drivers.        The pinouts for all devices are listed in the pin summary
  Other features include:                                 tables: Table 1 and Table 2, and I/O description tables:
                                                          Table 1-2 and Table 1-3.
  - Auto-Shutdown, for disabling PWM outputs
     on interrupt or other select conditions
  - Auto-Restart, to reactivate outputs once the
     condition has cleared
  - Output steering to selectively enable one or
     more of 4 outputs to provide the PWM signal.
• Enhanced Addressable USART: This serial
  communication module is capable of standard
  RS-232 operation and provides support for the LIN
  bus protocol. Other enhancements include
  automatic baud rate detection and a 16-bit Baud
  Rate Generator for improved resolution. When the
  microcontroller is using the internal oscillator
  block, the USART provides stable operation for
  applications that talk to the outside world without
  using an external crystal (or its accompanying
  power requirement).
• 10-bit A/D Converter: This module incorporates
  programmable acquisition time, allowing for a
  channel to be selected and a conversion to be
  initiated without waiting for a sampling period and
  thus, reduce code overhead.
• Extended Watchdog Timer (WDT): This
  enhanced version incorporates a 16-bit
  postscaler, allowing an extended time-out range
  that is stable across operating voltage and
  temperature. See Section 26.0 “Electrical
  Characteristics” for time-out periods.
DS41303G-page 12                                                                     2010 Microchip Technology Inc.
                                   TABLE 1-1:              DEVICE FEATURES
 2010 Microchip Technology Inc.
                                         Features                PIC18F23K20             PIC18F24K20             PIC18F25K20             PIC18F26K20             PIC18F43K20             PIC18F44K20             PIC18F45K20             PIC18F46K20
                                   Operating   Frequency(2)         DC – 64 MHz            DC – 64 MHz             DC – 64 MHz             DC – 64 MHz             DC – 64 MHz             DC – 64 MHz             DC – 64 MHz             DC – 64 MHz
                                   Program Memory (Bytes)               8192                   16384                   32768                   65536                    8192                   16384                   32768                   65536
                                   Program Memory                       4096                    8192                   16384                   32768                    4096                    8192                   16384                   32768
                                   (Instructions)
                                   Data Memory (Bytes)                   512                     768                    1536                    3936                    512                     768                     1536                    3936
                                   Data EEPROM Memory                    256                     256                    256                     1024                    256                      256                     256                    1024
                                   (Bytes)
                                   Interrupt Sources                      19                     19                      19                      19                      20                      20                      20                      20
                                   I/O Ports                        A, B, C, (E)(1)        A, B, C, (E)(1)         A, B, C, (E)(1)         A, B, C, (E)(1)          A, B, C, D, E           A, B, C, D, E           A, B, C, D, E           A, B, C, D, E
                                   Timers                                 4                       4                      44                                              44                                              44
                                   Capture/Compare/PWM                    1                       1                       1                       1                       1                       1                       1                       1
                                   Modules
                                   Enhanced Capture/                      1                       1                      11                                              11                                              11
                                   Compare/PWM Modules
                                   Serial Communications          MSSP, Enhanced         MSSP, Enhanced          MSSP, Enhanced          MSSP, Enhanced          MSSP, Enhanced          MSSP, Enhanced          MSSP, Enhanced          MSSP, Enhanced
                                                                     USART                  USART                   USART                   USART                   USART                   USART                   USART                   USART
                                   Parallel Communica-                   No                      No                      No                      No                     Yes                      Yes                     Yes                     Yes
                                   tions (PSP)
                                   10-bit Analog-to-Digital       1 internal plus 10      1 internal plus 10     1 internal plus 10       1 internal plus 10     1 internal plus 13       1 internal plus 13      1 internal plus 13      1 internal plus 13
                                   Module                          Input Channels          Input Channels         Input Channels           Input Channels         Input Channels           Input Channels          Input Channels          Input Channels
                                   Resets (and Delays)           POR, BOR, RESET         POR, BOR, RESET        POR, BOR, RESET          POR, BOR, RESET        POR, BOR, RESET         POR, BOR, RESET         POR, BOR, RESET          POR, BOR, RESET
                                                                  Instruction, Stack      Instruction, Stack     Instruction, Stack       Instruction, Stack     Instruction, Stack      Instruction, Stack      Instruction, Stack       Instruction, Stack
                                                                                                                                                                                                                                                                PIC18F2XK20/4XK20
                                                                Full, Stack Underflow   Full, Stack Underflow   Full, Stack Underflow   Full, Stack Underflow   Full, Stack Underflow   Full, Stack Underflow   Full, Stack Underflow   Full, Stack Underflow
                                                                    (PWRT, OST),        (PWRT, OST), MCLR           (PWRT, OST),        (PWRT, OST), MCLR          (PWRT, OST),             (PWRT, OST),            (PWRT, OST),        (PWRT, OST), MCLR
                                                                  MCLR (optional),         (optional), WDT        MCLR (optional),         (optional), WDT        MCLR (optional),        MCLR (optional),        MCLR (optional),         (optional), WDT
                                                                         WDT                                             WDT                                             WDT                     WDT                     WDT
                                   Programmable High/                    Yes                     Yes                    Yes                      Yes                    Yes                      Yes                     Yes                     Yes
                                   Low-Voltage Detect
                                   Programmable Brown-                   Yes                     Yes                    Yes                      Yes                    Yes                      Yes                     Yes                     Yes
                                   out Reset
                                   Instruction Set               75 Instructions; 83     75 Instructions; 83     75 Instructions; 83     75 Instructions; 83     75 Instructions; 83     75 Instructions; 83     75 Instructions; 83     75 Instructions; 83
                                                                   with Extended           with Extended           with Extended           with Extended           with Extended           with Extended           with Extended           with Extended
                                                                   Instruction Set         Instruction Set         Instruction Set         Instruction Set         Instruction Set         Instruction Set         Instruction Set         Instruction Set
                                                                      enabled                 enabled                 enabled                 enabled                 enabled                 enabled                 enabled                 enabled
                                   Packages                         28-pin PDIP             28-pin PDIP             28-pin PDIP             28-pin PDIP             40-pin PDIP             40-pin PDIP             40-pin PDIP             40-pin PDIP
                                                                    28-pin SOIC             28-pin SOIC             28-pin SOIC             28-pin SOIC              44-pin QFN             44-pin QFN               44-pin QFN             44-pin QFN
                                                                     28-pin QFN              28-pin QFN              28-pin QFN              28-pin QFN             44-pin TQFP             44-pin TQFP             44-pin TQFP             44-pin TQFP
DS41303G-page 13
                                                                    28-pin SSOP             28-pin SSOP             28-pin SSOP             28-pin SSOP
                                                                    28-pin UQFN
                                      Note     1:    PORTE contains the single RE3 read-only bit. The LATE and TRISE registers are not implemented.
                                               2:    Frequency range shown applies to industrial range devices only. Maximum frequency for extended range devices is 48 MHz.
PIC18F2XK20/4XK20
FIGURE 1-1:                       PIC18F2XK20 (28-PIN) BLOCK DIAGRAM
                                                           Data Bus<8>
        Table Pointer<21>
                                                     8        8                      Data Latch                            PORTA
           inc/dec logic                                                                                                               RA0/AN0
                                                                                     Data Memory                                       RA1/AN1
                                    PCLATU PCLATH                                                                                      RA2/AN2/VREF-/CVREF
                  21
                                                                                                                                       RA3/AN3/VREF+
                             20                                                     Address Latch                                      RA4/T0CKI/C1OUT
                                           PCU PCH PCL
                                                                                                                                       RA5/AN4/SS/HLVDIN/C2OUT
                                           Program Counter                                  12                                         OSC2/CLKOUT(3)/RA6
                                                                                  Data Address<12>                                     OSC1/CLKIN(3)/RA7
                                            31-Level Stack
         Address Latch                                                        4            12       4
                                                                            BSR      FSR0       Access
         Program Memory                         STKPTR                                           Bank
        (8/16/32/64 Kbytes)                                                          FSR1
                                                                                     FSR2              12
               Data Latch
                                                                                                                           PORTB
                                                                                                                                       RB0/INT0/FLT0/AN12
                                                                                     inc/dec
                              8                                                       logic                                            RB1/INT1/AN10/C12IN3-
                                     Table Latch                                                                                       RB2/INT2/AN8
                                                                                                                                       RB3/AN9/CCP2(1)/C12IN2-
                                                                                                                                       RB4/KBI0/AN11
                                     ROM Latch                                      Address
                                                                                                                                       RB5/KBI1/PGM
        Instruction Bus <16>                                                        Decode
                                                                                                                                       RB6/KBI2/PGC
                                                                                                                                       RB7/KBI3/PGD
                                           IR
                                                                                                         8
                                     Instruction         State machine
                                    Decode and           control signals
                                       Control
                                                                                      PRODH PRODL
                                                                                                                           PORTC
                                                                                        8 x 8 Multiply                                 RC0/T1OSO/T13CKI
                                                                               3                                 8                     RC1/T1OSI/CCP2(1)
                                                                                                                                       RC2/CCP1
                                                                            BITOP           W                                          RC3/SCK/SCL
                                                                                8               8            8
                                                                                                                                       RC4/SDI/SDA
                               Internal                                                                                                RC5/SDO
 OSC1(3)                                             Power-up                                                                          RC6/TX/CK
                              Oscillator                                               8                     8
                                Block                 Timer                                                                            RC7/RX/DT
 OSC2    (3)                                         Oscillator                        ALU<8>
                              LFINTOSC             Start-up Timer
 T1OSI                        Oscillator             Power-on                                   8
                                                       Reset
                              16 MHz
 T1OSO                        Oscillator             Watchdog
                                                      Timer
                                                                             Precision          FVR
                            Single-Supply           Brown-out                Band Gap
 MCLR(2)                                                                                                                   PORTE
                            Programming               Reset                  Reference
                              In-Circuit             Fail-Safe
 VDD, VSS                     Debugger             Clock Monitor
                                                                                                                                       MCLR/VPP/RE3(2)
                BOR                 Data
                                  EEPROM          Timer0           Timer1          Timer2           Timer3
                HLVD
 FVR
                                                                                                       ADC           FVR
CVREF Comparator                  ECCP1            CCP2            MSSP           EUSART              10-bit
 Note    1:       CCP2 is multiplexed with RC1 when Configuration bit CCP2MX is set, or RB3 when CCP2MX is not set.
         2:       RE3 is only available when MCLR functionality is disabled.
         3:       OSC1/CLKIN and OSC2/CLKOUT are only available in select oscillator modes and when these pins are not being used as digital I/O.
                  Refer to Section 2.0 “Oscillator Module (With Fail-Safe Clock Monitor)” for additional information.
DS41303G-page 14                                                                                                                2010 Microchip Technology Inc.
                                                                                                PIC18F2XK20/4XK20
FIGURE 1-2:                          PIC18F4XK20 (40/44-PIN) BLOCK DIAGRAM
                                                             Data Bus<8>
          Table Pointer<21>                                                                                                  PORTA
                                                                                                                                      RA0/AN0
                                                       8        8                      Data Latch                                     RA1/AN1
                inc/dec logic                                                                                                         RA2/AN2/VREF-/CVREF
                                                                                      Data Memory                                     RA3/AN3/VREF+
                    21                 PCLATU PCLATH                                                                                  RA4/T0CKI/C1OUT
                                                                                                                                      RA5/AN4/SS/HLVDIN/C2OUT
                                20                                                    Address Latch
                                                                                                                                      OSC2/CLKOUT(3)/RA6
                                             PCU PCH PCL
                                                                                                                                      OSC1/CLKIN(3)/RA7
                                             Program Counter                                  12
                                                                                    Data Address<12>
                                                                                                                             PORTB
                                              31-Level Stack                                                                          RB0/INT0/FLT0/AN12
          Address Latch                                                        4          12         4
                                                                                                                                      RB1/INT1/AN10/C12IN3-
                                                                             BSR                 Access
          Program Memory                          STKPTR                              FSR0        Bank                                RB2/INT2/AN8
         (8/16/32/64 Kbytes)                                                          FSR1                                            RB3/AN9/CCP2(1)/C12IN2-
                                                                                      FSR2             12                             RB4/KBI0/AN11
            Data Latch
                                                                                                                                      RB5/KBI1/PGM
                                                                                                                                      RB6/KBI2/PGC
                                                                                      inc/dec
                                8                                                      logic                                          RB7/KBI3/PGD
                                       Table Latch
                                       ROM Latch                                     Address                                 PORTC
       Instruction Bus <16>                                                          Decode                                           RC0/T1OSO/T13CKI
                                                                                                                                      RC1/T1OSI/CCP2(1)
                                                                                                                                      RC2/CCP1/P1A
                                             IR
                                                                                                                                      RC3/SCK/SCL
                                                                                                                                      RC4/SDI/SDA
                                                                                                          8                           RC5/SDO
                                                           State machine                                                              RC6/TX/CK
                                        Instruction
                                       Decode and          control signals                                                            RC7/RX/DT
                                          Control
                                                                                        PRODH PRODL
                                                                                                                             PORTD
                                                                                          8 x 8 Multiply                              RD0/PSP0
                                                                                3                                  8                  RD1/PSP1
                                                                                                                                      RD2/PSP2
                                                                             BITOP           W
                                                                                                              8                       RD3/PSP3
                                                                                 8               8
                                                                                                                                      RD4/PSP4
  OSC1(3)                        Internal                                                                                             RD5/PSP5/P1B
                                Oscillator              Power-up
                                                         Timer                           8                     8                      RD6/PSP6/P1C
                                  Block                                                                                               RD7/PSP7/P1D
  OSC2    (3)                                           Oscillator                       ALU<8>
                                LFINTOSC              Start-up Timer
  T1OSI                         Oscillator              Power-on                                  8
                                                          Reset
                                16 MHz
  T1OSO                         Oscillator              Watchdog                                                             PORTE
                                                         Timer
                                                                              Precision                                               RE0/RD/AN5
                                                       Brown-out                                FVR                                   RE1/WR/AN6
  MCLR(2)                   Single-Supply                                     Band Gap
                            Programming                   Reset               Reference                                               RE2/CS/AN7
                              In-Circuit                Fail-Safe                                                                     MCLR/VPP/RE3(2)
  VDD, VSS                    Debugger                Clock Monitor
                 BOR               Data
                                 EEPROM            Timer0           Timer1          Timer2            Timer3
                 HLVD
 FVR
                                                                                                       ADC             FVR
CVREF Comparator                     ECCP1          CCP2             MSSP       EUSART                                          PSP
                                                                                                      10-bit
  Note     1:      CCP2 is multiplexed with RC1 when Configuration bit CCP2MX is set, or RB3 when CCP2MX is not set.
           2:      RE3 is only available when MCLR functionality is disabled.
           3:      OSC1/CLKIN and OSC2/CLKOUT are only available in select oscillator modes and when these pins are not being used as digital I/O.
                   Refer to Section 2.0 “Oscillator Module (With Fail-Safe Clock Monitor)” for additional information.
 2010 Microchip Technology Inc.                                                                                                          DS41303G-page 15
PIC18F2XK20/4XK20
TABLE 1-2:         PIC18F2XK20 PINOUT I/O DESCRIPTIONS
                         Pin Number
                                    Pin Buffer
       Pin Name          PDIP,                                             Description
                               QFN Type Type
                         SOIC
MCLR/VPP/RE3               1     26                Master Clear (input) or programming voltage (input)
  MCLR                                  I    ST      Active-low Master Clear (device Reset) input
  VPP                                   P            Programming voltage input
  RE3                                   I    ST      Digital input
OSC1/CLKIN/RA7             9     6              Oscillator crystal or external clock input
  OSC1                                  I    ST    Oscillator crystal input or external clock source input
                                                   ST buffer when configured in RC mode; CMOS otherwise
   CLKIN                                 I CMOS    External clock source input. Always associated with pin
                                                   function OSC1. (See related OSC1/CLKIN, OSC2/CLKOUT
                                                   pins)
   RA7                                 I/O  TTL    General purpose I/O pin
OSC2/CLKOUT/RA6           10     7                 Oscillator crystal or clock output
  OSC2                                 O      —      Oscillator crystal output. Connects to crystal or
                                                     resonator in Crystal Oscillator mode
   CLKOUT                              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
Legend: TTL = TTL compatible input                      CMOS = CMOS compatible input or output
        ST = Schmitt Trigger input with CMOS levels     I    = Input
        O = Output                                      P    = Power
Note 1: Default assignment for CCP2 when Configuration bit CCP2MX is set.
     2: Alternate assignment for CCP2 when Configuration bit CCP2MX is cleared.
DS41303G-page 16                                                                   2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
TABLE 1-2:        PIC18F2XK20 PINOUT I/O DESCRIPTIONS (CONTINUED)
                            Pin Number
                                       Pin Buffer
        Pin Name            PDIP,                                               Description
                                  QFN Type Type
                            SOIC
                                                       PORTA is a bidirectional I/O port.
RA0/AN0/C12IN0-                2   27
  RA0                                   I/O  TTL         Digital I/O
  AN0                                     I Analog       Analog input 0, ADC channel 0
  C12IN0-                                 I Analog       Comparators C1 and C2 inverting input
RA1/AN1/C12IN1-                3   28
  RA1                                   I/O  TTL         Digital I/O
  AN1                                     I Analog       ADC input 1, ADC channel 1
  C12IN1-                                 I Analog       Comparators C1 and C2 inverting input
RA2/AN2/VREF-/CVREF/           4   1
C2IN+
   RA2                                  I/O    TTL       Digital I/O
   AN2                                    I   Analog     Analog input 2, ADC channel 2
   VREF-                                  I   Analog     A/D reference voltage (low) input
   CVREF                                 O    Analog     Comparator reference voltage output
   C2IN+                                  I   Analog     Comparator C2 non-inverting input
RA3/AN3/VREF+/C1IN+            5   2
  RA3                                   I/O  TTL         Digital I/O
  AN3                                     I Analog       Analog input 3, ADC channel 3
  VREF+                                   I Analog       A/D reference voltage (high) input
  C1IN+                                   I Analog       Comparator C1 non-inverting input
RA4/T0CKI/C1OUT                6   3
  RA4                                   I/O ST           Digital I/O
  T0CKI                                   I ST           Timer0 external clock input
  C1OUT                                  O CMOS          Comparator C1 output
RA5/AN4/SS/HLVDIN/             7   4
C2OUT
  RA5                                   I/O  TTL         Digital I/O
  AN4                                     I Analog       Analog input 4, ADC channel 4
  SS                                      I  TTL         SPI slave select input
  HLVDIN                                  I Analog       High/Low-Voltage Detect input
  C2OUT                                  O CMOS          Comparator C2 output
RA6                                                      See the OSC2/CLKOUT/RA6 pin
RA7                                                      See the OSC1/CLKIN/RA7 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
Note 1: Default assignment for CCP2 when Configuration bit CCP2MX is set.
     2: Alternate assignment for CCP2 when Configuration bit CCP2MX is cleared.
 2010 Microchip Technology Inc.                                                                 DS41303G-page 17
PIC18F2XK20/4XK20
TABLE 1-2:         PIC18F2XK20 PINOUT I/O DESCRIPTIONS (CONTINUED)
                         Pin Number
                                    Pin Buffer
       Pin Name          PDIP,                                             Description
                               QFN Type Type
                         SOIC
                                                    PORTB is a bidirectional I/O port. PORTB can be software
                                                    programmed for internal weak pull-up on each input.
RB0/INT0/FLT0/AN12        21     18
  RB0                                  I/O  TTL       Digital I/O
  INT0                                   I  ST        External interrupt 0
  FLT0                                   I  ST        PWM Fault input for CCP1
  AN12                                   I Analog     Analog input 12, ADC channel 12
RB1/INT1/AN10/C12IN3-     22     19
/P1C
   RB1                                 I/O  TTL       Digital I/O
   INT1                                  I  ST        External interrupt 1
   AN10                                  I Analog     Analog input 10, ADC channel 10
   C12IN3-                               I Analog     Comparators C1 and C2 inverting input
   P1C                                  O CMOS        Enhanced CCP1 PWM output
RB2/INT2/AN8/P1B          23     20
  RB2                                  I/O  TTL       Digital I/O
  INT2                                   I  ST        External interrupt 2
  AN8                                    I Analog     Analog input 8, ADC channel 8
  P1B                                   O CMOS        Enhanced CCP1 PWM output
RB3/AN9/C12IN2-/CCP2      24     21
  RB3                                  I/O  TTL       Digital I/O
  AN9                                    I Analog     Analog input 9, ADC channel 9
  C12IN2-                                I Analog     Comparators C1 and C2 inverting input
  CCP2(2)                              I/O  ST        Capture 2 input/Compare 2 output/PWM 2 output
RB4/KBI0/AN11/P1D         25     22
  RB4                                  I/O  TTL       Digital I/O
  KBI0                                   I  TTL       Interrupt-on-change pin
  AN11                                   I Analog     Analog input 11, ADC channel 11
  P1D                                   O CMOS        Enhanced CCP1 PWM output
RB5/KBI1/PGM              26     23
  RB5                                  I/O   TTL      Digital I/O
  KBI1                                   I   TTL      Interrupt-on-change pin
  PGM                                  I/O   ST       Low-Voltage ICSP™ Programming enable pin
RB6/KBI2/PGC              27     24
  RB6                                  I/O   TTL      Digital I/O
  KBI2                                   I   TTL      Interrupt-on-change pin
  PGC                                  I/O   ST       In-Circuit Debugger and ICSP™ programming clock pin
RB7/KBI3/PGD              28     25
  RB7                                  I/O   TTL      Digital I/O
  KBI3                                   I   TTL      Interrupt-on-change pin
  PGD                                  I/O   ST       In-Circuit Debugger and ICSP™ programming data 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
Note 1: Default assignment for CCP2 when Configuration bit CCP2MX is set.
     2: Alternate assignment for CCP2 when Configuration bit CCP2MX is cleared.
DS41303G-page 18                                                                   2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
TABLE 1-2:        PIC18F2XK20 PINOUT I/O DESCRIPTIONS (CONTINUED)
                            Pin Number
                                       Pin Buffer
        Pin Name            PDIP,                                                Description
                                  QFN Type Type
                            SOIC
                                                        PORTC is a bidirectional I/O port.
RC0/T1OSO/T13CKI              11     8
  RC0                                      I/O   ST       Digital I/O
  T1OSO                                     O    —        Timer1 oscillator output
  T13CKI                                     I   ST       Timer1/Timer3 external clock input
RC1/T1OSI/CCP2                12     9
  RC1                                      I/O  ST        Digital I/O
  T1OSI                                      I Analog     Timer1 oscillator input
  CCP2(1)                                  I/O  ST        Capture 2 input/Compare 2 output/PWM 2 output
RC2/CCP1/P1A                  13    10
  RC2                                      I/O ST         Digital I/O
  CCP1                                     I/O ST         Capture 1 input/Compare 1 output
  P1A                                       O CMOS        Enhanced CCP1 PWM output
RC3/SCK/SCL                   14    11
  RC3                                      I/O   ST        Digital I/O
  SCK                                      I/O   ST        Synchronous serial clock input/output for SPI mode
  SCL                                      I/O   ST        Synchronous serial clock input/output for I2C™ mode
RC4/SDI/SDA                   15    12
  RC4                                      I/O   ST        Digital I/O
  SDI                                        I   ST        SPI data in
  SDA                                      I/O   ST        I2C™ data I/O
RC5/SDO                       16    13
  RC5                                      I/O   ST        Digital I/O
  SDO                                       O    —         SPI data out
RC6/TX/CK                     17    14
  RC6                                      I/O   ST        Digital I/O
  TX                                        O    —         EUSART asynchronous transmit
  CK                                       I/O   ST        EUSART synchronous clock (see related RX/DT)
RC7/RX/DT                     18    15
  RC7                                      I/O   ST        Digital I/O
  RX                                         I   ST        EUSART asynchronous receive
  DT                                       I/O   ST        EUSART synchronous data (see related TX/CK)
RE3                           —     —      —     —      See MCLR/VPP/RE3 pin
VSS                          8, 19 5, 16   P     —      Ground reference for logic and I/O pins
VDD                           20    17     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
Note 1: Default assignment for CCP2 when Configuration bit CCP2MX is set.
     2: Alternate assignment for CCP2 when Configuration bit CCP2MX is cleared.
 2010 Microchip Technology Inc.                                                                  DS41303G-page 19
PIC18F2XK20/4XK20
TABLE 1-3:         PIC18F4XK20 PINOUT I/O DESCRIPTIONS
                              Pin Number   Pin Buffer
      Pin Name                                                                     Description
                        PDIP     QFN TQFP Type Type
MCLR/VPP/RE3             1       18        18                 Master Clear (input) or programming voltage (input)
  MCLR                                          I      ST       Active-low Master Clear (device Reset) input
  VPP                                           P               Programming voltage input
  RE3                                           I      ST       Digital input
OSC1/CLKIN/RA7           13      32        30              Oscillator crystal or external clock input
  OSC1                                           I     ST    Oscillator crystal input or external clock source input
                                                             ST buffer when configured in RC mode;
                                                             analog otherwise
   CLKIN                                         I    CMOS   External clock source input. Always associated with
                                                             pin function OSC1 (See related OSC1/CLKIN,
                                                             OSC2/CLKOUT pins)
   RA7                                          I/O    TTL   General purpose I/O pin
OSC2/CLKOUT/RA6          14      33        31                 Oscillator crystal or clock output
  OSC2                                          O       —       Oscillator crystal output. Connects to crystal
                                                                or resonator in Crystal Oscillator mode
   CLKOUT                                       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
Legend: TTL = TTL compatible input                           CMOS = CMOS compatible input or output
        ST = Schmitt Trigger input with CMOS levels          I    = Input
        O = Output                                           P    = Power
Note 1: Default assignment for CCP2 when Configuration bit CCP2MX is set.
     2: Alternate assignment for CCP2 when Configuration bit CCP2MX is cleared.
DS41303G-page 20                                                                       2010 Microchip Technology Inc.
                                                                 PIC18F2XK20/4XK20
TABLE 1-3:        PIC18F4XK20 PINOUT I/O DESCRIPTIONS (CONTINUED)
                                Pin Number   Pin Buffer
       Pin Name                                                                       Description
                          PDIP     QFN TQFP Type Type
                                                                 PORTA is a bidirectional I/O port.
RA0/AN0/C12IN0-             2      19        19
  RA0                                             I/O    TTL       Digital I/O
  AN0                                               I   Analog     Analog input 0, ADC channel 0
  C12IN0-                                           I   Analog     Comparator C1 and C2 inverting input
RA1/AN1/C12IN0-             3      20        20
  RA1                                             I/O    TTL       Digital I/O
  AN1                                               I   Analog     Analog input 1, ADC channel 1
  C12IN0-                                           I   Analog     Comparator C1 and C2 inverting input
RA2/AN2/VREF-/CVREF/        4      21        21
C2IN+
   RA2                                            I/O    TTL       Digital I/O
   AN2                                              I   Analog     Analog input 2, ADC channel 2
   VREF-                                            I   Analog     A/D reference voltage (low) input
   CVREF                                           O    Analog     Comparator reference voltage output
   C2IN+                                            I   Analog     Comparator C2 non-inverting input
RA3/AN3/VREF+/              5      22        22
C1IN+
   RA3                                            I/O    TTL       Digital I/O
   AN3                                              I   Analog     Analog input 3, ADC channel 3
   VREF+                                            I   Analog     A/D reference voltage (high) input
   C1IN+                                            I   Analog     Comparator C1 non-inverting input
RA4/T0CKI/C1OUT             6      23        23
  RA4                                             I/O    ST        Digital I/O
  T0CKI                                             I    ST        Timer0 external clock input
  C1OUT                                            O    CMOS       Comparator C1 output
RA5/AN4/SS/HLVDIN/          7      24        24
C2OUT
  RA5                                             I/O    TTL       Digital I/O
  AN4                                               I   Analog     Analog input 4, ADC channel 4
  SS                                                I    TTL       SPI slave select input
  HLVDIN                                            I   Analog     High/Low-Voltage Detect input
  C2OUT                                            O    CMOS       Comparator C2 output
RA6                                                                See the OSC2/CLKOUT/RA6 pin
RA7                                                                See the OSC1/CLKIN/RA7 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
Note 1: Default assignment for CCP2 when Configuration bit CCP2MX is set.
     2: Alternate assignment for CCP2 when Configuration bit CCP2MX is cleared.
 2010 Microchip Technology Inc.                                                                      DS41303G-page 21
PIC18F2XK20/4XK20
TABLE 1-3:         PIC18F4XK20 PINOUT I/O DESCRIPTIONS (CONTINUED)
                              Pin Number   Pin Buffer
      Pin Name                                                                     Description
                        PDIP     QFN TQFP Type Type
                                                               PORTB is a bidirectional I/O port. PORTB can be
                                                               software programmed for internal weak pull-up on
                                                               each input.
RB0/INT0/FLT0/AN12       33       9        8
  RB0                                           I/O    TTL       Digital I/O
  INT0                                            I    ST        External interrupt 0
  FLT0                                            I    ST        PWM Fault input for Enhanced CCP1
  AN12                                            I   Analog     Analog input 12, ADC channel 12
RB1/INT1/AN10/           34      10        9
C12IN3-
   RB1                                          I/O    TTL       Digital I/O
   INT1                                           I    ST        External interrupt 1
   AN10                                           I   Analog     Analog input 10, ADC channel 10
   C12IN3-                                        I   Analog     Comparator C1 and C2 inverting input
RB2/INT2/AN8             35       11       10
  RB2                                           I/O    TTL       Digital I/O
  INT2                                            I    ST        External interrupt 2
  AN8                                             I   Analog     Analog input 8, ADC channel 8
RB3/AN9/C12IN2-/         36      12        11
CCP2
  RB3                                           I/O    TTL       Digital I/O
  AN9                                             I   Analog     Analog input 9, ADC channel 9
  C12IN23-                                        I   Analog     Comparator C1 and C2 inverting input
  CCP2(2)                                       I/O    ST        Capture 2 input/Compare 2 output/PWM 2 output
RB4/KBI0/AN11            37      14        14
  RB4                                           I/O    TTL       Digital I/O
  KBI0                                            I    TTL       Interrupt-on-change pin
  AN11                                            I   Analog     Analog input 11, ADC channel 11
RB5/KBI1/PGM             38      15        15
  RB5                                           I/O    TTL       Digital I/O
  KBI1                                            I    TTL       Interrupt-on-change pin
  PGM                                           I/O    ST        Low-Voltage ICSP™ Programming enable pin
RB6/KBI2/PGC             39      16        16
  RB6                                           I/O    TTL       Digital I/O
  KBI2                                            I    TTL       Interrupt-on-change pin
  PGC                                           I/O    ST        In-Circuit Debugger and ICSP™ programming
                                                                 clock pin
RB7/KBI3/PGD             40      17        17
  RB7                                           I/O    TTL       Digital I/O
  KBI3                                            I    TTL       Interrupt-on-change pin
  PGD                                           I/O    ST        In-Circuit Debugger and ICSP™ programming
                                                                 data 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
Note 1: Default assignment for CCP2 when Configuration bit CCP2MX is set.
     2: Alternate assignment for CCP2 when Configuration bit CCP2MX is cleared.
DS41303G-page 22                                                                      2010 Microchip Technology Inc.
                                                                PIC18F2XK20/4XK20
TABLE 1-3:        PIC18F4XK20 PINOUT I/O DESCRIPTIONS (CONTINUED)
                                 Pin Number   Pin Buffer
       Pin Name                                                                      Description
                          PDIP      QFN TQFP Type Type
                                                                PORTC is a bidirectional I/O port.
RC0/T1OSO/T13CKI            15      34        32
  RC0                                              I/O    ST      Digital I/O
  T1OSO                                             O     —       Timer1 oscillator output
  T13CKI                                             I    ST      Timer1/Timer3 external clock input
RC1/T1OSI/CCP2              16      35        35
  RC1                                              I/O    ST      Digital I/O
  T1OSI                                              I   CMOS     Timer1 oscillator input
  CCP2(1)                                          I/O    ST      Capture 2 input/Compare 2 output/PWM 2 output
RC2/CCP1/P1A                17      36        36
  RC2                                              I/O    ST      Digital I/O
  CCP1                                             I/O    ST      Capture 1 input/Compare 1 output/PWM 1 output
  P1A                                               O     —       Enhanced CCP1 output
RC3/SCK/SCL                 18      37        37
  RC3                                              I/O    ST      Digital I/O
  SCK                                              I/O    ST      Synchronous serial clock input/output for
                                                                  SPI mode
    SCL                                            I/O    ST      Synchronous serial clock input/output for I2C™ mode
RC4/SDI/SDA                 23      42        42
  RC4                                              I/O    ST      Digital I/O
  SDI                                                I    ST      SPI data in
  SDA                                              I/O    ST      I2C™ data I/O
RC5/SDO                     24      43        43
  RC5                                              I/O    ST      Digital I/O
  SDO                                               O     —       SPI data out
RC6/TX/CK                   25       44       44
  RC6                                              I/O    ST      Digital I/O
  TX                                                O     —       EUSART asynchronous transmit
  CK                                               I/O    ST      EUSART synchronous clock (see related RX/DT)
RC7/RX/DT                   26       1        1
  RC7                                              I/O    ST      Digital I/O
  RX                                                 I    ST      EUSART asynchronous receive
  DT                                               I/O    ST      EUSART synchronous data (see related TX/CK)
Legend: TTL = TTL compatible input                             CMOS = CMOS compatible input or output
        ST = Schmitt Trigger input with CMOS levels            I    = Input
        O = Output                                             P    = Power
Note 1: Default assignment for CCP2 when Configuration bit CCP2MX is set.
     2: Alternate assignment for CCP2 when Configuration bit CCP2MX is cleared.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 23
PIC18F2XK20/4XK20
TABLE 1-3:         PIC18F4XK20 PINOUT I/O DESCRIPTIONS (CONTINUED)
                              Pin Number   Pin Buffer
      Pin Name                                                                   Description
                        PDIP     QFN TQFP Type Type
                                                             PORTD is a bidirectional 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      38        38
  RD0                                           I/O   ST       Digital I/O
  PSP0                                          I/O   TTL      Parallel Slave Port data
RD1/PSP1                 20      39        39
  RD1                                           I/O   ST       Digital I/O
  PSP1                                          I/O   TTL      Parallel Slave Port data
RD2/PSP2                 21      40        40
  RD2                                           I/O   ST       Digital I/O
  PSP2                                          I/O   TTL      Parallel Slave Port data
RD3/PSP3                 22      41        41
  RD3                                           I/O   ST       Digital I/O
  PSP3                                          I/O   TTL      Parallel Slave Port data
RD4/PSP4                 27       2        2
  RD4                                           I/O   ST       Digital I/O
  PSP4                                          I/O   TTL      Parallel Slave Port data
RD5/PSP5/P1B             28       3        3
  RD5                                           I/O   ST       Digital I/O
  PSP5                                          I/O   TTL      Parallel Slave Port data
  P1B                                            O     —       Enhanced CCP1 output
RD6/PSP6/P1C             29       4        4
  RD6                                           I/O   ST       Digital I/O
  PSP6                                          I/O   TTL      Parallel Slave Port data
  P1C                                            O     —       Enhanced CCP1 output
RD7/PSP7/P1D             30       5        5
  RD7                                           I/O   ST       Digital I/O
  PSP7                                          I/O   TTL      Parallel Slave Port data
  P1D                                            O     —       Enhanced CCP1 output
Legend: TTL = TTL compatible input                          CMOS = CMOS compatible input or output
        ST = Schmitt Trigger input with CMOS levels         I    = Input
        O = Output                                          P    = Power
Note 1: Default assignment for CCP2 when Configuration bit CCP2MX is set.
     2: Alternate assignment for CCP2 when Configuration bit CCP2MX is cleared.
DS41303G-page 24                                                                     2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
TABLE 1-3:        PIC18F4XK20 PINOUT I/O DESCRIPTIONS (CONTINUED)
                                 Pin Number   Pin Buffer
       Pin Name                                                                         Description
                          PDIP      QFN TQFP Type Type
                                                                   PORTE is a bidirectional I/O port
RE0/RD/AN5                  8       25        25
  RE0                                               I/O    ST        Digital I/O
  RD                                                  I    TTL       Read control for Parallel Slave Port
                                                                     (see related WR and CS pins)
     AN5                                             I    Analog     Analog input 5, ADC channel 5
RE1/WR/AN6                  9       26        26
  RE1                                               I/O    ST        Digital I/O
  WR                                                  I    TTL       Write control for Parallel Slave Port
                                                                     (see related CS and RD pins)
     AN6                                             I    Analog     Analog input 6, ADC channel 6
RE2/CS/AN7                  10      27        27
  RE2                                               I/O    ST        Digital I/O
  CS                                                  I    TTL       Chip Select control for Parallel Slave Port
                                                                     (see related RD and WR)
     AN7                                             I    Analog     Analog input 7, ADC channel 7
RE3                         —        —        —     —       —      See MCLR/VPP/RE3 pin
VSS                       12, 31 6, 30,   6, 29     P       —      Ground reference for logic and I/O pins
                                  31
VDD                       11, 32    7, 8, 7, 28     P       —      Positive supply for logic and I/O pins
                                   28, 29
NC                          —       13    12, 13,   —       —      No connect
                                          33, 34
Legend: TTL = TTL compatible input                               CMOS = CMOS compatible input or output
        ST = Schmitt Trigger input with CMOS levels              I    = Input
        O = Output                                               P    = Power
Note 1: Default assignment for CCP2 when Configuration bit CCP2MX is set.
     2: Alternate assignment for CCP2 when Configuration bit CCP2MX is cleared.
 2010 Microchip Technology Inc.                                                                        DS41303G-page 25
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 26     2010 Microchip Technology Inc.
                                                                                 PIC18F2XK20/4XK20
2.0        OSCILLATOR MODULE (WITH                                              The Oscillator module can be configured in one of ten
                                                                                primary clock modes.
           FAIL-SAFE CLOCK MONITOR)
                                                                                1.      LP  Low-Power Crystal
2.1        Overview                                                             2.      XT  Crystal/Resonator
                                                                                3.      HS  High-Speed Crystal/Resonator
The O scillator m odule has a wide va riety o f cl ock
                                                                                4.      HSPLL
                                                                                            High-Speed Crystal/Resonator
sources and selection features that allow it to be used
                                                                                            with PLL enabled
in a wide range of applications while maximizing perfor-
mance and minimizing power consumption. Figure 2-1                              5. RC       External Resistor/Capacitor with
illustrates a block diagram of the Oscillator module.                                       FOSC/4 output on RA6
                                                                                6. RCIO     External Resistor/Capacitor with I/O
Clock sources ca n be con figured from             external
                                                                                            on RA6
oscillators, quartz crystal resonators, ceramic resonators
and R esistor-Capacitor (R C) c ircuits. In a ddition, the                      7. INTOSC Internal Oscillator with FOSC/4
system clock source can be configured from one of two                                       output on RA6 and I/O on RA7
internal oscillators, with a choice of speeds selectable via                    8. INTOSCIO Internal Oscillator with I/O on RA6
software. Additional clock features include:                                                and RA7
• Selectable system clock source between external                               9. EC       External Clock with FOSC/4 output
  or internal via software.                                                     10. ECIO    External Clock with I/O on RA6
• Two-Speed Start-up mode, which minimizes                                      Primary Clock modes are selected by the FOSC<3:0>
  latency between external oscillator start-up and                              bits of t he CONFIG1H C onfiguration R egister. T he
  code execution.                                                               HFINTOSC and LFINTOSC are factory calibrated high-
• Fail-Safe Clock Monitor (FSCM) designed to                                    frequency and low-frequency oscillators, respectively,
  detect a failure of the external clock source (LP,                            which are used as the internal clock sources.
  XT, HS, EC or RC modes) and switch
  automatically to the internal oscillator.
FIGURE 2-1:                  PIC® MCU CLOCK SOURCE BLOCK DIAGRAM
                                                          PIC18F2XK20/4XK20
                   Primary Oscillator                                                           LP, XT, HS, RC, EC
   OSC2
                                                                                                                              IDLEN
                                Sleep                                                       HSPLL, HFINTOSC/PLL
                                                                                4 x PLL                                          Sleep
   OSC1
                                             OSCTUNE<6>(1)
                   Secondary Oscillator                                                                    T1OSC                           Peripherals
                                                                                                                              Main
                                                                                                                        MUX
  T1OSO
                                T1OSCEN
                                Enable
   T1OSI                        Oscillator                                OSCCON<6:4>            Internal Oscillator
                       FOSC<3:0> O SCCON<1:0>                        16 MHz                                                                  CPU
                                                                                111
                                                                      8 MHz
                             Internal                                           110                                                Sleep
                            Oscillator                                4 MHz
                                                                                101
                              Block                                                                                    Clock
                                                       Postscaler
                                                                      2 MHz
                             16 MHz                                                                                    Control
                                                                                      MUX
                                                                                100
                              Source                                  1 MHz
                                          16 MHz                                011
                                         (HFINTOSC)                  500 kHz
                             31 kHz                                             010                        FOSC<3:0> OSCCON<1:0>
                             Source                                  250 kHz
                                                                                001
                                                                                                                   Clock Source Option
                                                                    1 31 kHz
                                 31 kHz (LFINTOSC)                           000                                   for other Modules
                                                                    0
                                                                            OSCTUNE<7>
                                                                                                                   WDT, PWRT, FSCM
                                                                                                                   and Two-Speed Start-up
           Note   1:   Operates only when HFINTOSC is the primary oscillator.
 2010 Microchip Technology Inc.                                                                                                    DS41303G-page 27
PIC18F2XK20/4XK20
2.2       Oscillator Control                                    2.2.4        CLOCK STATUS
The OSCCON register (Register 2-1) controls several             The OSTS and IOFS bits of the OSCCON register, and
aspects o f the dev ice c lock’s op eration, bo th in ful l     the T1RUN b it o f the T1CON re gister, indicate which
power operation and in power-managed modes.                     clock source is currently providing the main clock. The
                                                                OSTS b it i ndicates th at th e O scillator S tart-up T imer
•   Main System Clock Selection (SCS)                           has ti med ou t and the p rimary clock is p roviding th e
•   Internal Frequency selection bits (IRCF)                    device clock. The IOFS bit indicates when the internal
•   Clock Status bits (OSTS, IOFS)                              oscillator b lock has stabilized a nd is p roviding th e
•   Power management selection (IDLEN)                          device cl ock i n H FINTOSC C lock m odes. The IO FS
                                                                and O STS S tatus bit s w ill bo th b e s et w hen
2.2.1        MAIN SYSTEM CLOCK SELECTION                        SCS<1:0> = 00 and HFINTOSC is the primary clock.
                                                                The T1RUN bit indicates when the Timer1 oscillator is
The Sy stem Cloc k Se lect b its, SCS<1 :0>, s elect th e
                                                                providing the device clock in secondary clock modes.
main clock source. The available clock sources are
                                                                When SCS<1:0>  00, only one of these three bits will
• Primary clock defined by the FOSC<3:0> bits of                be s et a t a ny tim e. If n one of the se bi ts are set, th e
  CONFIG1H. The primary clock can be the primary                LFINTOSC is prov iding the clock or the H FINTOSC
  oscillator, an external clock, or the internal oscilla-       has just started and is not yet stable.
  tor block.
• Secondary clock (Timer1 oscillator)                           2.2.5        POWER MANAGEMENT
• Internal oscillator block (HFINTOSC and                       The IDLEN bit of the OSCCON register determines if
  LFINTOSC).                                                    the d evice go es into Sle ep mode o r on e of the Idl e
The c lock s ource cha nges i mmediately af ter one or          modes when the SLEEP instruction is executed.
more of the bits is written to, following a brief clock tran-   The u se of the fl ag and c ontrol bits in the OSCCON
sition interval. The SCS bits are cl eared to sel ect the       register i s di scussed in m ore d etail in Section 3.0
primary clock on all forms of Reset.                            “Power-Managed Modes”.
2.2.2        INTERNAL FREQUENCY                                    Note 1: The Timer1 oscillator must be enabled to
             SELECTION                                                     select the secondary c lock so urce. Th e
                                                                           Timer1 oscillator is enabled by setting the
The Int ernal Os cillator Frequency Se lect bit s
                                                                           T1OSCEN b it of the T1 CON re gister. If
(IRCF<2:0>) select the frequency output of the internal
                                                                           the Timer1 oscillator is not enabled, then
oscillator block. The choices are the LFINTOSC source
                                                                           the m ain osc illator w ill c ontinue to ru n
(31 kHz), t he H FINTOSC so urce (16 MHz) o r one of
                                                                           from the previously selected source. The
the freq uencies de rived from the H FINTOSC pos t-
                                                                           source will then switch to the secondary
scaler (31 .25 kHz to 8 MHz). If the int ernal os cillator
                                                                           oscillator after the T1OSCEN bit is set.
block is supplying the main clock, changing the states
of th ese b its w ill ha ve an i mmediate c hange on th e                2: It i s rec ommended tha t the Timer1
internal oscillator’s output. On device Resets, the out-                    oscillator be operating and stable before
put f requency of the in ternal oscillator is s et t o th e                 selecting the secondary clock source or a
default frequency of 1 MHz.                                                 very lo ng delay ma y o ccur while th e
                                                                            Timer1 oscillator starts.
2.2.3        LOW FREQUENCY SELECTION
When a nominal output frequency of 31 kHz is selected
(IRCF<2:0> = 000), users may choose which internal
oscillator ac ts as th e s ource. Thi s i s done w ith th e
INTSRC bit of the OSC TUNE register. Setting this bit
selects the HFINTOSC as a 31.25 kHz clock source by
enabling the di vide-by-512 ou tput of the H FINTOSC
postscaler. Clearing INTSRC selects LFINTOSC (nom-
inally 31 kHz) as the clock source.
This option allows users to select the tunable and more
precise HFINTOSC as a clock source, while maintain-
ing power savings with a very low clock speed. Regard-
less of t he se tting of I NTSRC, LFINTOSC a lways
remains th e c lock source fo r fea tures s uch a s th e
Watchdog Timer and the Fail-Safe Clock Monitor.
DS41303G-page 28                                                                            2010 Microchip Technology Inc.
                                                                PIC18F2XK20/4XK20
REGISTER 2-1:          OSCCON: OSCILLATOR CONTROL REGISTER
    R/W-0           R/W-0            R/W-1     R/W-1             R-q        R-0          R/W-0            R/W-0
    IDLEN           IRCF2            IRCF1     IRCF0          OSTS(1)       IOFS         SCS1             SCS0
bit 7                                                                                                         bit 0
Legend:
R = Readable bit          W = Writable bit    U = Unimplemented bit, read as ‘0’     q = depends on condition
-n = Value at POR         ‘1’ = Bit is set    ‘0’ = Bit is cleared                   x = Bit is unknown
bit 7            IDLEN: Idle Enable bit
                 1 = Device enters Idle mode on SLEEP instruction
                 0 = Device enters Sleep mode on SLEEP instruction
bit 6-4          IRCF<2:0>: Internal Oscillator Frequency Select bits
                 111 = 16 MHz (HFINTOSC drives clock directly)
                 110 = 8 MHz
                 101 = 4 MHz
                 100 = 2 MHz
                 011 = 1 MHz(3)
                 010 = 500 kHz
                 001 = 250 kHz
                 000 = 31 kHz (from either HFINTOSC/512 or LFINTOSC directly)(2)
bit 3            OSTS: Oscillator Start-up Time-out Status bit(1)
                 1 = Device is running from the clock defined by FOSC<2:0> of the CONFIG1 register
                 0 = Device is running from the internal oscillator (HFINTOSC or LFINTOSC)
bit 2            IOFS: HFINTOSC Frequency Stable bit
                 1 = HFINTOSC frequency is stable
                 0 = HFINTOSC frequency is not stable
bit 1-0          SCS<1:0>: System Clock Select bits
                 1x = Internal oscillator block
                 01 = Secondary (Timer1) oscillator
                 00 = Primary clock (determined by CONFIG1H[FOSC<3:0>]).
Note 1:     Reset state depends on state of the IESO Configuration bit.
     2:     Source selected by the INTSRC bit of the OSCTUNE register, see text.
     3:     Default output frequency of HFINTOSC on Reset.
 2010 Microchip Technology Inc.                                                                 DS41303G-page 29
PIC18F2XK20/4XK20
2.3       Clock Source Modes                                             2.4      External Clock Modes
Clock Source modes can be classified as external or                      2.4.1     OSCILLATOR START-UP TIMER
internal.
                                                                                    (OST)
• External Clock modes rely on external circuitry for
                                                                         When the Oscillator module is configured for LP, XT or
  the clock source. Examples are: Clock modules
                                                                         HS modes, the Oscillator Start-up Timer (OST) counts
  (EC mode), quartz crystal resonators or ceramic
                                                                         1024 oscillations from OSC1. This occurs following a
  resonators (LP, XT and HS modes) and Resistor-
                                                                         Power-on Reset (POR) and when the Power-up Timer
  Capacitor (RC mode) circuits.
                                                                         (PWRT) has expired (if configured), or a wake-up from
• Internal clock sources are contained internally                        Sleep. During this time, the program counter does not
  within the Oscillator block. The Oscillator block                      increment and program execution is suspended. The
  has two internal oscillators: the 16 MHz High-                         OST ensures that the oscillator circuit, using a q uartz
  Frequency Internal Oscillator (HFINTOSC) and                           crystal resonator or ceramic resonator, has started and
  the 31 kHz Low-Frequency Internal Oscillator                           is prov iding a stable system clo ck to the Oscillator
  (LFINTOSC).                                                            module. W hen swi tching be tween cl ock s ources, a
The system clock can be selected between external or                     delay i s required to al low the ne w cl ock to s tabilize.
internal cl ock sources vi a the S ystem Cl ock S elect                  These oscillator delays are shown in Table 2-1.
(SCS<1:0>) b its o f the OSCCO N register. Se e                          In order to minimize latency between external oscillator
Section 2.9 “Clock Switching” for additional informa-                    start-up a nd c ode ex ecution, the T wo-Speed C lock
tion.                                                                    Start-up mo de can be se lected (see Section 2.10
                                                                         “Two-Speed Clock Start-up Mode”).
TABLE 2-1:          OSCILLATOR DELAY EXAMPLES
        Switch From                    Switch To                     Frequency                        Oscillator Delay
                                       LFINTOSC                        31 kHz
          Sleep/POR                                                                       Oscillator Warm-Up Delay (TWARM)
                                       HFINTOSC                   250 kHz to 16 MHz
          Sleep/POR                      EC, RC                     DC – 64 MHz           2 instruction cycles
      LFINTOSC (31 kHz)                  EC, RC                     DC – 64 MHz           1 cycle of each
          Sleep/POR                    LP, XT, HS                 32 kHz to 40 MHz        1024 Clock Cycles (OST)
          Sleep/POR                      HSPLL                    32 MHz to 64 MHz        1024 Clock Cycles (OST) + 2 ms
      LFINTOSC (31 kHz)                HFINTOSC                   250 kHz to 16 MHz       1 s (approx.)
2.4.2        EC MODE                                                     FIGURE 2-2:             EXTERNAL CLOCK (EC)
The Ext ernal C lock ( EC) mode al lows an ext ernally                                           MODE OPERATION
generated logic level as the system clock source. When
operating in this mode , a n ext ernal clock sour ce is                    Clock from                   OSC1/CLKIN
connected to the OSC1 input and the OSC2 is available                      Ext. System
for ge neral p urpose I /O. Fig ure 2-2 s hows th e pi n                                                     PIC® MCU
connections for EC mode.
                                                                                          I/O           OSC2/CLKOUT(1)
The Oscillator Start-up Timer (OST) is disabled when
EC mode is selected. Therefore, there is no delay in
operation af ter a Power-on R eset (POR ) or wake-up                       Note 1:    Alternate pin functions are listed in
from Sleep. B ecause t he PIC® MCU de sign is fully                                   Section 1.0 “Device Overview”.
static, sto pping t he e xternal cl ock i nput w ill hav e th e
effect of halting the device while leaving all data intact.
Upon res tarting the external cl ock, th e dev ice w ill
resume operation as if no time had elapsed.
DS41303G-page 30                                                                                    2010 Microchip Technology Inc.
                                                                PIC18F2XK20/4XK20
2.4.3        LP, XT, HS MODES
                                                                  Note 1: Quartz crystal characteristics vary according
The LP, XT and HS modes support the use of quartz                         to ty pe, p ackage and manu facturer. Th e
crystal resonators or ceramic resonators connected to                     user s hould co nsult t he ma nufacturer d ata
OSC1 and OSC2 (Figure 2-3). The mode selects a low,                       sheets for specifications and recommended
medium o r h igh ga in setting of the in ternal inverter-                 application.
amplifier to support various resonator types and speed.
                                                                        2: Always verify oscillator performance over
LP Oscillator mode selects the lowest gain setting of the                  the V DD an d t emperature ran ge that i s
internal inverter-amplifier. LP mode current consumption                   expected for the application.
is the least of the three modes. This mode is best suited
                                                                        3: For oscillator design assistance, reference
to drive resonators with a low drive level specification, for
                                                                           the following Microchip Applications Notes:
example, tuning fork type crystals.
                                                                            • AN826, “Crystal Oscillator Basics and
XT Oscillator mode s elects t he intermediate g ain
                                                                              Crystal Selection for rfPIC® and PIC®
setting of the internal in verter-amplifier. XT mode
                                                                              Devices” (DS00826)
current consumption is the medium of the three modes.
This m ode is be st s uited to drive re sonators w ith a                    • AN849, “Basic PIC® Oscillator Design”
medium drive level specification.                                             (DS00849)
                                                                            • AN943, “Practical PIC® Oscillator
HS Oscillator mode selects the highest gain setting of the
                                                                              Analysis and Design” (DS00943)
internal inverter-amplifier. HS mode current consumption
is the h ighest of th e three modes. Th is m ode is be st                   • AN949, “Making Your Oscillator Work”
suited for resonators that require a high drive setting.                      (DS00949)
Figure 2-3 a nd Figure 2-4 show ty pical c ircuits for          FIGURE 2-4:                CERAMIC RESONATOR
quartz crystal and ceramic resonators, respectively.
                                                                                           OPERATION
                                                                                           (XT OR HS MODE)
FIGURE 2-3:               QUARTZ CRYSTAL
                          OPERATION (LP, XT OR
                                                                                                         PIC® MCU
                          HS MODE)
                                                                                             OSC1/CLKIN
                                         PIC® MCU
                                                                      C1                                        To Internal
                             OSC1/CLKIN                                                                         Logic
        C1                                                                         RP(3)         RF(2)          Sleep
                                                To Internal
                                                Logic
                Quartz
                                 RF(2)          Sleep
                Crystal
                                                                      C2 Ceramic RS(1)       OSC2/CLKOUT
                                                                         Resonator
        C2                   OSC2/CLKOUT
                  RS(1)                                          Note 1: A series res istor (R S) may be re quired f or
                                                                         ceramic resonators with low drive level.
 Note 1:     A seri es resistor (R S) may be required     for          2: The value of RF varies with the Oscillator mode
             quartz crystals with low drive level.                        selected (typically between 2 M to 10 M.
        2:   The value of RF varies with the Oscillator mode           3: An addit ional p arallel f eedback resis tor (R P)
             selected (typically between 2 M to 10 M.                  may be required for proper cer amic reson ator
                                                                          operation.
 2010 Microchip Technology Inc.                                                                         DS41303G-page 31
PIC18F2XK20/4XK20
2.4.4          EXTERNAL RC MODES                                2.5       Internal Clock Modes
The external Resistor-Capacitor (R C) m odes su pport           The O scillator m odule has tw o ind ependent, int ernal
the u se of an external R C c ircuit. T his al lows th e        oscillators that c an be c onfigured o r s elected as th e
designer maximum flexibility in frequency choice while          system clock source.
keeping costs to a minimum when clock accuracy is not
required. There are two modes: RC and RCIO.                     1.    The HFINTOSC (H igh-Frequency Int ernal
                                                                      Oscillator) is factory calibrated and operates at
2.4.4.1         RC Mode                                               16 MHz. The frequency of the H FINTOSC can
                                                                      be us er-adjusted v ia software using the
In RC mode, the RC circuit connects to OSC1. OSC2/                    OSCTUNE register (Register 2-2).
CLKOUT outputs the R C oscillator frequency divided
                                                                2.    The LFINTOSC (Low -Frequency Internal
by 4. This si gnal ma y be used to provide a cl ock for
                                                                      Oscillator) operates at 31 kHz.
external c ircuitry, s ynchronization, c alibration, t est or
other application req uirements. Fig ure 2-5 sh ows the         The system clock speed can be selected via software
external RC mode connections.                                   using the Internal Oscillator Fre quency Sel ect bit s
                                                                IRCF<2:0> of the OSCCON register.
FIGURE 2-5:              EXTERNAL RC MODES                      The system clock can be selected between external or
                                                                internal clock sources via the System Clock Selection
        VDD
                                  PIC® MCU
                                                                (SCS<1:0>) bi ts of the O SCCON re gister. Se e
                                                                Section 2.9 “Clock Switching” for more information.
 REXT
                      OSC1/CLKIN                 Internal       2.5.1     INTOSC AND INTOSCIO MODES
                                                  Clock         The IN TOSC and INTOSCIO m odes co nfigure the
 CEXT                                                           internal os cillators as th e p rimary cl ock s ource. Th e
  VSS                                                           FOSC<3:0> bi ts i n t he C ONFIG1H Configuration
                                                                register determine w hich m ode i s selected. Se e
        FOSC/4 or     OSC2/CLKOUT(1)                            Section 23.0 “Special Features of the CPU” for more
        I/O(2)                                                  information.
                                                                In INTOSC mode, OSC1/CLKIN is available for general
  Recommended values: 10 k  REXT  100 k                     purpose I/O. O SC2/CLKOUT out puts the s elected
                      CEXT > 20 pF                              internal oscillator frequency divided by 4. The CLKOUT
                                                                signal may be used to prov ide a c lock fo r external
  Note 1:      Alternate pin functions are listed in            circuitry, sy nchronization, ca libration, test or oth er
               Section 1.0 “Device Overview”.                   application requirements.
          2:   Output depends upon RC or RCIO clock mode.       In INTOSCIO mode, OSC1/CLKIN and OSC2/CLKOUT
                                                                are available for general purpose I/O.
2.4.4.2         RCIO Mode
                                                                2.5.2        HFINTOSC
In RCIO mode, the RC circuit is c onnected to O SC1.
OSC2 becomes an additional general purpose I/O pin.             The output of the HFINTOSC connects to a postscaler
                                                                and m ultiplexer ( see Figure 2-1). On e of eight
The RC oscillator frequency is a function of the su pply        frequencies ca n be selec ted via s oftware us ing the
voltage, the resistor (REXT) and capacitor (CEXT) values        IRCF<2:0> bit s of the O      SCCON register . See
and the operating temp erature. O ther factors affecting        Section 2.5.4 “Frequency Select Bits (IRCF)” for
the oscillator frequency are:                                   more information.
• input threshold voltage variation
                                                                The HFINTOSC is enabled when:
• component tolerances
• packaging variations in capacitance                           • SCS1 =   1 and IRCF<2:0>  000
The user also needs to take into account variation due          • SCS1 =   1 and IRCF<2:0> = 000 and INTSRC = 1
to tolerance of external RC components used.                    • IESO bit of CONFIG1H = 1 enabling Two-Speed
                                                                  Start-up.
                                                                • FCMEM bit of CONFIG1H = 1 enabling Two-
                                                                  Speed Start-up and Fail-Safe mode.
                                                                • FOSC<3:0> of CONFIG1H selects the internal
                                                                  oscillator as the primary clock
                                                                The H F In ternal O scillator (IOFS) bi t o f the O SCCON
                                                                register indicates whether the HFINTOSC is stable or not.
DS41303G-page 32                                                                          2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
2.5.2.1       OSCTUNE Register                                   (PWRT), Watchdog Timer (WDT), Fail-Safe Clock Mon-
                                                                 itor (FS CM) and periphe rals, ar e not af fected by the
The H FINTOSC is fac tory ca librated b ut c an b e
                                                                 change in frequency.
adjusted in software by writing to the TUN<5:0> bits of
the OSCTUNE register (Register 2-2).                             The OSCTUNE register also implements the INTSRC
                                                                 and PLLEN bits, which control certain features of th e
The de fault v alue o f the TU N<5:0> is ‘ 000000’. Th e
                                                                 internal oscillator block.
value is a 6-bit two’s complement number.
                                                                 The INTSRC bit allows users to select w hich internal
When the OSC TUNE regis ter i s mod ified, the
                                                                 oscillator pr ovides the cl ock so urce when the 31 kHz
HFINTOSC fr equency will be gin shif ting to the new
                                                                 frequency option is selected. This is covered in greater
frequency. C ode ex ecution continues du ring this shift.
                                                                 detail in Section 2.2.3 “Low Frequency Selection”.
There is no indication that the shift has occurred.
                                                                 The PLLEN bit controls the operation of the frequency
OSCTUNE does not af fect the L FINTOSC frequency.
                                                                 multiplier, PLL, in internal oscillator modes. For more
Operation of features that depend on the LF INTOSC
                                                                 details a bout the function o f t he PLLEN b it see
clock source frequency , such as the Power-up Timer
                                                                 Section 2.6.2 “PLL in HFINTOSC Modes”
REGISTER 2-2:          OSCTUNE: OSCILLATOR TUNING 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
   INTSRC          PLLEN(1)            TUN5           TUN4       TUN3                TUN2      TUN1           TUN0
bit 7                                                                                                              bit 0
Legend:
R = Readable bit                   W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set           ‘0’ = Bit is cleared          x = Bit is unknown
bit 7            INTSRC: Internal Oscillator Low-Frequency Source Select bit
                 1 = 31.25 kHz device clock derived from 16 MHz HFINTOSC source (divide-by-512 enabled)
                 0 = 31 kHz device clock derived directly from LFINTOSC internal oscillator
bit 6            PLLEN: Frequency Multiplier PLL for HFINTOSC Enable bit(1)
                 1 = PLL enabled for HFINTOSC (8 MHz and 16 MHz only)
                 0 = PLL disabled
bit 5-0          TUN<5:0>: Frequency Tuning bits
                 011111 = Maximum frequency
                 011110 =
                  •••
                 000001 =
                 000000 = Oscillator module is running at the factory calibrated frequency.
                 111111 =
                  •••
                 100000 = Minimum frequency
Note 1:     The PLLEN bit is active only when the HFINTOSC is the primary clock source (FOSC<2:0> = 100X) and
            the selected frequency is 8 MHz or 16 MHz. Otherwise, the PLLEN bit is unavailable and always reads ‘0’.
 2010 Microchip Technology Inc.                                                                       DS41303G-page 33
PIC18F2XK20/4XK20
2.5.3       LFINTOSC                                        2.5.5        HFINTOSC FREQUENCY DRIFT
The Low-Frequency Internal Oscillator (LFINTOSC) is         The factory calibrates the internal oscillator block output
a 31 kHz internal clock source.                             (HFINTOSC) f or 16 MHz. H owever, this f requency may
The out put o f the LFINTOSC con nects to inte rnal         drift as VDD or temperature changes, which can affect the
oscillator block freq uency s election mul tiplexer (s ee   controller operation in a var iety of w ays. It is possibl e to
Figure 2-1). Sel ect 31 kHz, via s oftware, usi ng the      adjust the HFINTOSC frequency by modifying the value
IRCF<2:0> bit s of th e O SCCON register and the            of the TUN<5:0> bits in the OSCTUNE register. This has
INTSRC bit       of th e O SCTUNE reg ister. See            no effect on the LFINTOSC clock source frequency.
Section 2.5.4 “Frequency Select Bits (IRCF)” for            Tuning the HFINTOSC source requires knowing when to
more information. The LFINTOSC is also the frequency        make the adjus tment, in w hich directio n it should be
for the Power-up T imer (PWRT), W atchdog T imer            made and in some cases, how large a change is
(WDT) and Fail-Safe Clock Monitor (FSCM).                   needed. Th ree po ssible c ompensation techniques are
The LFINTOSC is enabled when any of the following           discussed in the following sections, however other tech-
are enabled:                                                niques may be used.
• IRCF<2:0> bits of the OSCCON register = 000 and           2.5.5.1        Compensating with the USART
  INTSRC bit of the OSCTUNE register = 0
                                                            An adj ustment m ay be req uired w hen the USART
• Power-up Timer (PWRT)                                     begins to generate framing errors or receives data with
• Watchdog Timer (WDT)                                      errors while in As ynchronous m ode. Framing error s
• Fail-Safe Clock Monitor (FSCM)                            indicate that the device clock frequency is too high; to
                                                            adjust for th is, decrement the value in OSCTUNE to
2.5.4       FREQUENCY SELECT BITS (IRCF)                    reduce the clock frequency. On the other hand, errors
The output of t he 16 MHz H FINTOSC an d 3 1 kHz            in data may suggest that the clock speed is too low; to
LFINTOSC co nnects to a postscaler and multiplexer          compensate, in crement O SCTUNE to inc rease the
(see Figure 2-1). The Int ernal Os cillator Fre quency      clock frequency.
Select bits IRCF<2:0> of th e OSCCON register select
the output frequency of the internal oscillators. One of    2.5.5.2        Compensating with the Timers
eight frequencies can be selected via software:             This technique compares device clock speed to some
•   16 M Hz                                                 reference clock. Two timers may be used; one timer is
                                                            clocked by the pe ripheral clo ck, w hile the other is
•   8 M Hz
                                                            clocked by a fi xed re ference source, s uch as th e
•   4 M Hz                                                  Timer1 oscillator.
•   2 M Hz
                                                            Both timers are cleared, but the timer clocked by the
•   1 MHz (Default after Reset)                             reference gen erates int errupts. Whe n an in terrupt
•   500 kHz                                                 occurs, th e internally c locked ti mer i s read a nd both
•   250 kHz                                                 timers are cleared. If the internally clocked timer value
•   31 kHz (LFINTOSC or HFINTOSC/512)                       is gre ater th an ex pected, th en the internal osc illator
                                                            block is running too fast. To adjust for this, decrement
                                                            the OSCTUNE register.
    Note:   Following any Reset, the IRCF<2:0> bits of
            the OSCCON register are set to ‘011’ and        2.5.5.3        Compensating with the CCP Module
            the fr equency selection i s s et to 1 MHz.                    in Capture Mode
            The use r can modify the IRCF bit s to          A CCP module can use free running Timer1 (or Timer3),
            select a different frequency.                   clocked b y t he i nternal o scillator bl ock a nd a n external
                                                            event w ith a k nown pe riod (i .e., A C po wer f requency).
                                                            The time of the fi rst e vent is c aptured in th e
                                                            CCPRxH:CCPRxL registers and is recorded for use later.
                                                            When the second event causes a capture, the time of the
                                                            first e vent i s subtracted from th e time of th e second
                                                            event. Since the period of the external event is known,
                                                            the time difference between events can be calculated.
                                                            If th e mea sured t ime is much gr eater tha n t he ca lcu-
                                                            lated time, t he i nternal osci llator bl ock is running to o
                                                            fast; to compensate, decrement the OSCTUNE register.
                                                            If the measured time is much les s than the calculated
                                                            time, the internal oscillator block is running too slow; to
                                                            compensate, increment the OSCTUNE register.
DS41303G-page 34                                                                        2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
2.6       PLL Frequency Multiplier                            2.6.2       PLL IN HFINTOSC MODES
A Phase Locked Loop (PLL) circuit is provided as an           The 4x frequency multiplier can be used with the inter-
option fo r us ers w ho w ish to u se a lo wer fre quency     nal o scillator blo ck to p roduce fas ter d evice cl ock
oscillator circuit or to clock the device up to its highest   speeds than are norm ally possible w ith an int ernal
rated frequency from the crystal oscillator. This may be      oscillator. Whe n ena bled, th e PLL pro duces a cl ock
useful for customers who are concerned with EMI due           speed of up to 64 MHz.
to high-frequency crystals or users who require higher        Unlike H SPLL mo de, the PLL is controlled through
clock sp eeds f rom an i nternal os cillator. Th ere a re     software. T he PL LEN co ntrol bi t of t he O SCTUNE
three conditions when the PLL can be used:                    register is used to enable or disable the PLL operation
• When the primary clock is HSPLL                             when the HFINTOSC is used.
• When the primary clock is HFINTOSC and the                  The PLL is availa ble when the devi ce is configured to
  selected frequency is 16 MHz                                use t he internal osc illator bloc k as it s p rimary cloc k
• When the primary clock is HFINTOSC and the                  source (FOSC<3:0> = 1001 or 1000). Additionally, the
  selected frequency is 8 MHz                                 PLL w ill only func tion w hen t he selected output fre-
                                                              quency is either 8 MHz or 16 MHz (O SCCON<6:4> =
2.6.1        HSPLL OSCILLATOR MODE                            111 or 110). If both of these conditions are not met, the
                                                              PLL is disabled.
The HSPLL mode makes use of the HS mode oscillator
for frequencies up to 16 MHz. A PLL then multiplies the       The PLLEN control bit is only functional in those inter-
oscillator output frequency by 4 to produce an internal       nal oscillator modes where the PLL is available. In all
clock frequency up to 64 MHz. The PLLEN bit of the            other m odes, it i s fo rced to ‘ 0’ an d is ef fectively
OSCTUNE register is active only when the HFINTOSC             unavailable.
is the primary clock and is not available in HSPLL oscil-
lator mode.
The PLL is only available to the primary oscillator when
the FOSC<3:0> Configuration bits are programmed for
HSPLL mode (= 0110).
FIGURE 2-6:             PLL BLOCK DIAGRAM
                        (HS MODE)
             HS Oscillator Enable
                      PLL Enable
          (from Configuration Register 1H)
      OSC2
                                 Phase
           HS Mode     FIN     Comparator
      OSC1 Crystal     FOUT
             Osc
                                   Loop
                                   Filter
                        4           VCO
                                                    SYSCLK
                                              MUX
 2010 Microchip Technology Inc.                                                                      DS41303G-page 35
PIC18F2XK20/4XK20
2.7       Effects of Power-Managed Modes                           2.8      Power-up Delays
          on the Various Clock Sources                             Power-up delays are controlled by two timers, so that
For more information about the modes discussed in this             no external Reset circuitry is required for most applica-
section see Section 3.0 “Power-Managed Modes”. A                   tions. The de lays ensure t hat the d evice i s k ept i n
quick reference list is also available in Table 3-1.               Reset until the device power supply is stable under nor-
                                                                   mal circumstances and the primary clock is operating
When PRI_IDLE mode is selected, the designated pri-
                                                                   and s table. Fo r ad ditional information o n p ower-up
mary oscillator continues to run w ithout int erruption.
                                                                   delays, see Section 4.5 “Device Reset Timers”.
For a ll other p ower-managed modes, t he oscillator
using the OSC1 pi n i s disabled. Th e O SC1 pin (an d             The first tim er is the Power-up Timer (PWRT), w hich
OSC2 pin, if used by the oscillator) will stop oscillating.        provides a f ixed de lay on pow er-up (parameter 3 3,
                                                                   Table 26-10). It i s en abled by c learing (= 0) th e
In se condary clock mo des (SEC_RUN a nd
                                                                   PWRTEN Configuration bit.
SEC_IDLE), th e T imer1 oscillator is ope rating an d
providing the device clock. The Timer1 oscillator may              The s econd tim er i s t he O scillator S tart-up T imer
also run in al l po wer-managed mo des if required to              (OST), i ntended to ke ep the ch ip in Res et un til th e
clock Timer1 or Timer3.                                            crystal oscillator is stable (LP, XT and HS modes). The
                                                                   OST d oes th is by co unting 10 24 o scillator c ycles
In internal o scillator m odes (INT OSC_RUN a nd
                                                                   before allowing the oscillator to clock the device.
INTOSC_IDLE), t he internal oscillator b lock p rovides
the device clock source. The 31 kHz LFINTOSC output                When the H SPLL O scillator m ode i s selected, th e
can be used directly to provide the clock and may be               device is kept in Reset for an additional 2 ms, following
enabled to support various special features, regardless            the H S mode OST delay, so the PLL can lock to th e
of th e power-managed m ode (s ee Section 23.2                     incoming clock frequency.
“Watchdog Timer (WDT)”, Section 2.10 “Two-                         There is a del ay of in terval TCSD (pa rameter 38,
Speed Clock Start-up Mode” and Section 2.11 “Fail-                 Table 26-10), fol lowing POR, w hile th e c ontroller
Safe Clock Monitor” fo r m ore in formation on W DT,               becomes ready to execute instructions. This delay runs
Fail-Safe Clock Monitor and Two-Speed Start-up). The               concurrently w ith any oth er del ays. Th is m ay be the
HFINTOSC output at 16 MHz may be used directly to                  only delay that occurs when any of the EC, RC or INTIO
clock the device or may be divided down by the post-               modes are used as the primary clock source.
scaler. The HFINTOSC output is disabled if the clock is
                                                                   When the HFINTOSC is selected as the primary clock,
provided directly from the LFINTOSC output.
                                                                   the ma in s ystem cl ock ca n be delayed un til th e
If the Slee p m ode is se lected, al l c lock sou rces a re        HFINTOSC is st able. This is us er sel ectable by the
stopped. Si nce all th e transistor s witching currents            HFOFST bit o f the CONFIG3H Configuration register.
have been stopped, Sleep mode achieves the lowest                  When the HFOFST bit is cleared the main system clock
current c onsumption of the de vice (only l eakage                 is de layed u ntil t he H FINTOSC is sta ble. W hen t he
currents).                                                         HFOFST bit is set the main system clock starts imme-
Enabling any on- chip fe ature tha t w ill operate d uring         diately. In either case the IOFS bit of the OSCCON reg-
Sleep will increase the current consumed during Sleep.             ister can be read to determine whether the HFINTOSC
The LFINTOSC is required to support WDT operation.                 is operating and stable.
The T imer1 o scillator m ay be operating to s upport a
real-time clock. Other features may be operating that
do not require a device clock source (i.e., SSP s lave,
PSP, INTn pins and others). Peripherals that may add
significant cu rrent consumption are li         sted in
Section 26.8 “DC Characteristics”.
TABLE 2-2:         OSC1 AND OSC2 PIN STATES IN SLEEP MODE
        OSC Mode                                OSC1 Pin                                       OSC2 Pin
RC, INTOSC                   Floating, external resistor should pull high    At logic low (clock/4 output)
RCIO                         Floating, external resistor should pull high    Configured as PORTA, bit 6
INTOSCIO                     Configured as PORTA, bit 7                      Configured as PORTA, bit 6
ECIO                         Floating, pulled by external clock              Configured as PORTA, bit 6
EC                           Floating, pulled by external clock              At logic low (clock/4 output)
LP, XT, HS and HSPLL         Feedback inverter disabled at quiescent         Feedback inverter disabled at quiescent
                             voltage level                                   voltage level
  Note:     See Table 4-2 in Section 4.0 “Reset” for time-outs due to Sleep and MCLR Reset.
DS41303G-page 36                                                                            2010 Microchip Technology Inc.
                                                             PIC18F2XK20/4XK20
2.9       Clock Switching                                    2.9.3        CLOCK SWITCH TIMING
The s ystem cl ock s ource c an b e sw itched b etween       When sw itching bet ween one os cillator and ano ther,
external and internal clock sources via software using       the new oscillator may not be op erating w hich saves
the S ystem C lock S elect (SCS<1:0>) b its of the           power (s ee Fi gure 2-7). If th is is th e c ase, the re is a
OSCCON register.                                             delay after the SCS<1:0> bits of the OSCCON register
                                                             are modified before the frequency change takes place.
PIC18F2XK20/4XK20 devices contain circuitry to pre-          The OSTS and IOFS bits of the OSCCON register will
vent c lock “glitches” when s witching b etween clock        reflect the current ac tive s tatus of th e ex ternal an d
sources. A short pause in the device clock occurs dur-       HFINTOSC o scillators. The t iming of a frequency
ing the clock switch. The length of this pause is the sum    selection is as follows:
of two cycles of the old clock source and three to four
cycles of the new clock source. This formula assumes         1.   SCS<1:0> bits of the OSCCON register are mod-
that the new clock source is stable.                              ified.
                                                             2.   The old clock continues to operate until the new
Clock t ransitions a re discussed in gre ater de tail i n
                                                                  clock is ready.
Section 3.1.2 “Entering Power-Managed Modes”.
                                                             3.   Clock switch circuitry waits for two consecutive
2.9.1       SYSTEM CLOCK SELECT                                   rising edges of the old clock after the new clock
            (SCS<1:0>) BITS                                       ready signal goes true.
The Sys tem Clock Sele ct (SC S<1:0>) bi ts o f the          4.   The system clock is held low starting at the next
OSCCON register select the system clock source that               falling edge of the old clock.
is used for the CPU and peripherals.                         5.   Clock switch circuitry waits for an additional two
                                                                  rising edges of the new clock.
• When SCS<1:0> = 00, the system clock source is
  determined by configuration of the FOSC<2:0>               6.   On the next falling edge of the new clock the low
  bits in the CONFIG1H Configuration register.                    hold on t he system c lock i s released a nd new
                                                                  clock is switched in as the system clock.
• When SCS<1:0> = 10, the system clock source is
  chosen by the internal oscillator frequency                7.   Clock switch is complete.
  selected by the INTSRC bit of the OSCTUNE                  See Figure 2-1 for more details.
  register and the IRCF<2:0> bits of the OSCCON              If the HFINTOSC is the source of both the old and new
  register.                                                  frequency, th ere is no st art-up d elay b efore th e n ew
• When SCS<1:0> = 01, the system clock source is             frequency is active. This is because the ol d and new
  the 32.768 kHz secondary oscillator shared with            frequencies are der ived fro m t he H FINTOSC vi a th e
  Timer1.                                                    postscaler and multiplexer.
After a Reset, th e SC S<1:0> bits o f the OSCCON            Start-up de lay sp ecifications are     located in
register are always cleared.                                 Section 26.0 “Electrical Characteristics”, under AC
  Note:     Any automa tic clock sw itch, whi ch may         Specifications (Oscillator Module).
            occur from Two-Speed Start-up or Fail-Safe
            Clock Mon itor, does not upd ate the
            SCS<1:0> bi ts of the O SCCON register.
            The user can monitor the T1RUN bit of the
            T1CON register and the IOFS and O STS
            bits of the OSCCON register to d etermine
            the current system clock source.
2.9.2       OSCILLATOR START-UP TIME-OUT
            STATUS (OSTS) BIT
The O scillator Start-up Time-out Status (O STS) bit of
the OSCCON register in dicates w hether the sy stem
clock is run ning from the ex ternal cl ock source, a s
defined b y t he F OSC<3:0> bi ts in t he C ONFIG1H
Configuration re gister, o r fro m the in ternal clock
source. In particular, when the primary oscillator is the
source of th e p rimary cl ock, O STS indicates th at th e
Oscillator Start-up Timer ( OST) h as timed ou t for LP,
XT or HS modes.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 37
PIC18F2XK20/4XK20
2.10      Two-Speed Clock Start-up Mode                     2.10.2      TWO-SPEED START-UP
                                                                        SEQUENCE
Two-Speed S tart-up m ode pro vides a dditional po wer
savings b y m inimizing th e la tency bet ween ext ernal    1.   Wake-up from Power-on Reset or Sleep.
oscillator start-up and code execution. In app lications    2.   Instructions b egin e xecuting by the int ernal
that make heavy use of the Sleep mode, Two-Speed                 oscillator at the frequency set in the IRCF<2:0>
Start-up w ill rem ove the external os cillator s tart-up        bits of the OSCCON register.
time fro m the tim e spent aw ake and c an red uce th e     3.   OST e nabled to count 1 024 ex ternal cl ock
overall power consumption of the device.                         cycles.
This mode a llows th e app lication to w ake-up fr om       4.   OST timed out. External clock is ready.
Sleep, perform a few instructions using the HFINTOSC        5.   OSTS is set.
as t he cl ock sou rce and g o ba ck to S leep w ithout     6.   Clock switch finishes according to FIGURE 2-7:
waiting for the primary oscillator to become stable.             “Clock Switch Timing”
  Note:     Executing a SLEEP ins truction w ill abo rt
            the oscillator start-up time and w ill cause    2.10.3      CHECKING TWO-SPEED CLOCK
            the OS TS bi t of the OSCCON register t o                   STATUS
            remain clear.                                   Checking t he s tate of t he OS TS b it of the OSCCON
When the Oscillator module is configured for LP, XT or      register will c onfirm if th e m icrocontroller is running
HS mode s, th e Oscilla tor S tart-up Timer (OS T) is       from the ex ternal cl ock so urce, as defined by t he
enabled (see Section 2.4.1 “Oscillator Start-up Timer       FOSC<2:0> bits in CONFIG1H Configuration register,
(OST)”). The OST will suspend program execution until       or the internal oscillator. OSTS = 0 when the external
1024 osc illations ar e co unted. T wo-Speed S tart-up      oscillator is not ready, which indicates that the system
mode mi nimizes the delay i n code e xecution b y           is running from the internal oscillator.
operating from the in ternal oscill ator as t he OST is
counting. When the OST count reaches 1024 and the
OSTS bit of the O SCCON regis ter i s set, program
execution switches to the external oscillator.
2.10.1      TWO-SPEED START-UP MODE
            CONFIGURATION
Two-Speed Start-up mode is enabled w hen all of the
following settings are configured as noted:
• Two-Speed Start-up mode is enabled by setting
  the IESO of the CONFIG1H Configuration register
  is set. Fail-Safe mode (FCMEM = 1) also enables
  two-speed by default.
• SCS<1:0> (of the OSCCON register) = 00.
• FOSC<2:0> bits of the CONFIG1H Configuration
  register are configured for LP, XT or HS mode.
Two-Speed Start-up mode becomes active after:
• Power-on Reset (POR) and, if enabled, after
  Power-up Timer (PWRT) has expired, or
• Wake-up from Sleep.
If th e ext ernal clock oscillator is co nfigured to be
anything ot her t han LP, XT or HS m ode, t hen T wo-
Speed S tart-up is d isabled. This is be cause t he
external clock o scillator does n ot re quire a ny
stabilization time after POR or an exit from Sleep.
DS41303G-page 38                                                                      2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
FIGURE 2-7:            CLOCK SWITCH TIMING
    High Speed       Low Speed
         Old Clock
                              Start-up Time(1)                      Clock Sync                              Running
        New Clock
   New Clk Ready
       IRCF <2:0> Select Old               Select New
     System Clock
    Low Speed        High Speed
        Old Clock
                            Start-up Time(1)                  Clock Sync                                   Running
       New Clock
  New Clk Ready
      IRCF <2:0> Select Old               Select New
    System Clock
      Note 1: Start-up time includes TOST (1024 TOSC) for external clocks, plus TPLL (approx. 2 ms) for HSPLL mode.
 2010 Microchip Technology Inc.                                                                            DS41303G-page 39
PIC18F2XK20/4XK20
2.11     Fail-Safe Clock Monitor                             2.11.3       FAIL-SAFE CONDITION CLEARING
The Fail-Safe Clock Monitor (FSCM) allows the device         The Fail-Safe condition is cleared by either one of the
to continue operating should the external oscillator fail.   following:
The FSCM can detect oscillator failure any time after        • Any R eset
the Oscillator Start-up Timer (OST) h as ex pired. Th e      • By toggling the SCS1 bit of the OSCCON register
FSCM is enabled by s etting th e F CMEN bit in th e
CONFIG1H C onfiguration register. The FSC M i s              Both of th ese co nditions re start the OST. Whi le th e
applicable to all external oscillator modes (LP, XT, HS,     OST is running, the device continues to operate from
EC, RC and RCIO).                                            the IN TOSC s elected in OS CCON. Wh en th e O ST
                                                             times o ut, th e Fa il-Safe con dition is cl eared an d th e
                                                             device automatically switches over to the external clock
FIGURE 2-8:             FSCM BLOCK DIAGRAM
                                                             source. The Fai l-Safe co ndition nee d not be cl eared
                                Clock Monitor                before the OSCFIF flag is cleared.
                                    Latch
     External
                                   S     Q
                                                             2.11.4      RESET OR WAKE-UP FROM SLEEP
      Clock
                                                             The FSC M is designed to detect an os cillator fa ilure
                                                             after the Oscillator Start-up Timer (OST) has expired.
   LFINTOSC                                                  The OST is used after waking up from Sleep and after
                     ÷ 64         R      Q                   any type of Reset. The OST is not used with the EC or
    Oscillator
                                                             RC C lock m odes so tha t th e F SCM w ill be active a s
      31 kHz       488 Hz                                    soon as t he R eset o r w ake-up has completed. W hen
     (~32 s)      (~2 ms)
                                                             the FSCM is enabled, the Two-Speed Start-up is also
                                                             enabled. Therefore, the device will always be executing
         Sample Clock                              Clock     code while the OST is operating.
                                                 Failure
                                                Detected       Note:     Due to the wide range of oscillator start-up
                                                                         times, the Fail-Safe circuit is not ac        tive
                                                                         during oscillator st art-up (i.e., af ter ex iting
2.11.1      FAIL-SAFE DETECTION                                          Reset or Sleep). Af ter an appropriate
The FS CM m odule dete cts a fai led os cillator b y                     amount of time, the user should check the
comparing the external oscillator to the FSCM sample                     OSTS bit of the OSCCON register to verify
clock. The s ample cl ock i s g enerated by di viding th e               the oscillator start-up and that the sys tem
LFINTOSC by 64. See Figure 2-8. Ins ide the fai l                        clock sw itchover has succ               essfully
detector block is a latc h. The ex ternal c lock s ets the               completed.
latch on each fal ling ed ge o f the external cl ock. Th e
sample clock clears the latch on each rising edge of the
sample clock. A failure is detected when an entire half-
cycle of the sample clock elapses before the primary
clock goes low.
2.11.2      FAIL-SAFE OPERATION
When the external clock fails, the FSCM switches the
device clock to an internal clock source and sets the bit
flag OSCFIF of the PIR2 register. The OSCFIF flag will
generate an int errupt if the OSCFIE bit of th e PIE2
register is also set. The device firmware can then take
steps to mi tigate the problems that may arise from a
failed cl ock. T he s ystem c lock w ill co ntinue t o be
sourced from the internal clock source until the device
firmware s uccessfully re starts the e xternal os cillator
and switches back to external operation. An automatic
transition back to the failed clock source will not occur.
The in ternal cl ock so urce ch osen by the FSC M is
determined by the IRCF<2:0> b its of th e OSC CON
register. Thi s al lows the internal os cillator to be
configured before a failure occurs.
DS41303G-page 40                                                                        2010 Microchip Technology Inc.
                                                                       PIC18F2XK20/4XK20
FIGURE 2-9:               FSCM TIMING DIAGRAM
        Sample Clock
              System                                                               Oscillator
               Clock                                                               Failure
              Output
 Clock Monitor Output
                  (Q)
                                                                                                          Failure
                                                                                                         Detected
              OSCFIF
                                                Test                            Test                             Test
          Note:       The system clock is normally at a much higher frequency than the sample clock. The relative frequencies in
                      this example have been chosen for clarity.
TABLE 2-3:           SUMMARY OF REGISTERS ASSOCIATED WITH CLOCK SOURCES
                                                                                                                          Value on
                                                                                                           Value on
   Name           Bit 7      Bit 6      Bit 5          Bit 4   Bit 3    Bit 2          Bit 1     Bit 0                    all other
                                                                                                          POR, BOR
                                                                                                                          Resets(1)
CONFIG1H          IESO     FCMEN         —              —      FOSC3   FOSC2       FOSC1        FOSC0        —               —
INTCON       GIE/GIEH P EIE/GIEL TMR0IE            INT0IE      RBIE    TMR0IF      INT0IF        RBIF    0000 000x       0000 000x
OSCCON        IDLEN         IRCF2      IRCF1       IRCF0       OSTS     IOFS       SCS1         SCS0     0011 q000       0011 q000
OSCTUNE       INTSRC        PLLEN      TUN5        TUN4        TUN3    TUN2        TUN1         TUN0     0000 0000       000u uuuu
PIE2          OSCFIE         C1IE       C2IE           EEIE    BCLIE   HLVDIE     TMR3IE        CCP2IE   0000 0000       0000 0000
PIR2          OSCFIF         C1IF       C2IF           EEIF    BCLIF   HLVDIF     TMR3IF        CCP2IF   0000 0000       0000 0000
IPR2          OSCFIP          —          —              —       —        —              —         —      1111 1111       1111 1111
Legend:     x = unknown, u = unchanged, – = unimplemented locations read as ‘0’. Shaded cells are not used by oscillators.
Note 1:     Other (non Power-up) Resets include MCLR Reset and Watchdog Timer Reset during normal operation.
 2010 Microchip Technology Inc.                                                                                    DS41303G-page 41
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 42     2010 Microchip Technology Inc.
                                                                      PIC18F2XK20/4XK20
3.0      POWER-MANAGED MODES                                          3.1.1       CLOCK SOURCES
PIC18F2XK20/4XK20 dev ices of fer a to tal of s even                  The SCS<1:0> bits allow the selection of one of three
operating modes fo r m ore e fficient po wer manage-                  clock sources for power-managed modes. They are:
ment. The se mo des pro vide a v ariety of op tions for               • the primary clock, as defined by the FOSC<3:0>
selective p ower conservation in ap plications w here                   Configuration bits
resources ma y be lim ited (i.e ., battery-powered                    • the secondary clock (the Timer1 oscillator)
devices).                                                             • the internal oscillator block
There are three categories of power-managed modes:
                                                                      3.1.2       ENTERING POWER-MANAGED
• Run modes
                                                                                  MODES
• Idle modes
• Sleep mode                                                          Switching from one power-managed mode to another
                                                                      begins by lo ading the O SCCON re gister. Th e
These categories define w hich portions of the device                 SCS<1:0> bits select the clock source and determine
are clocked and sometimes, what speed. The Run and                    which Run or Idle mode is to be used. Changing these
Idle modes m ay us e a ny of the three av ailable cl ock              bits ca uses a n im mediate sw itch to th e ne w cl ock
sources (pr imary, s econdary or i nternal os cillator                source, assuming that it is run ning. The switch ma y
block); the Sleep mode does not use a clock source.                   also be s ubject t o cl ock t ransition d elays. T hese are
The pow er-managed modes include several pow er-                      discussed in Section 3.1.3 “Clock Transitions and
saving features offered on previous PIC® microcontroller              Status Indicators” and subsequent sections.
devices. One is the clock switching feature which allows              Entry to the po wer-managed Idle or S leep mo des is
the controller to use the Timer1 oscillator in place of the           triggered by the execution of a SLEEP instruction. The
primary oscillator. Also inc luded is the S leep mode,                actual mode that results depends on the status of the
offered by al l PIC ® microcontroller d evices, w here all            IDLEN bit of the OSCCON register.
device clocks are stopped.
                                                                      Depending on the c urrent mod e and the m ode being
                                                                      switched to, a change to a power-managed mode does
3.1      Selecting Power-Managed Modes                                not always require s etting all of the se bi ts. M any
Selecting a pow er-managed mode r           equires two               transitions may be done by changing the oscillator select
decisions:                                                            bits, or changing the IDLEN bit, prior to issuing a SLEEP
                                                                      instruction. If the ID LEN bit is al ready c onfigured
• Whether or not the CPU is to be clocked
                                                                      correctly, it may only be necessary to perform a SLEEP
• The selection of a clock source                                     instruction to switch to the desired mode.
The IDLEN bit of the OSCCON register controls CPU
clocking, w hile t he S CS<1:0> b its of the OS CCON
register select the clock source. The individual modes,
bit settings, c lock sources a nd affected m odules a re
summarized in Table 3-1.
TABLE 3-1:         POWER-MANAGED MODES
                     OSCCON Bits                Module Clocking
      Mode                                                                     Available Clock and Oscillator Source
                IDLEN(1)     SCS<1:0>           CPU       Peripherals
Sleep               0              N/A          Off             Off        None – All clocks are disabled
PRI_RUN            N/A             00         Clocked         Clocked      Primary – LP, XT, HS, HSPLL, RC, EC and
                                                                           Internal Oscillator Block(2).
                                                                           This is the normal full power execution mode.
SEC_RUN            N/A             01         Clocked         Clocked      Secondary – Timer1 Oscillator
RC_RUN             N/A             1x         Clocked         Clocked      Internal Oscillator Block(2)
PRI_IDLE            1              00           Off           Clocked      Primary – LP, XT, HS, HSPLL, RC, EC
SEC_IDLE            1              01           Off           Clocked      Secondary – Timer1 Oscillator
RC_IDLE             1              1x           Off           Clocked      Internal Oscillator Block(2)
Note 1:      IDLEN reflects its value when the SLEEP instruction is executed.
     2:      Includes HFINTOSC and HFINTOSC postscaler, as well as the LFINTOSC source.
 2010 Microchip Technology Inc.                                                                             DS41303G-page 43
PIC18F2XK20/4XK20
3.1.3         CLOCK TRANSITIONS AND                         3.2       Run Modes
              STATUS INDICATORS
                                                            In the Run m odes, c locks to bot h the co re an d
The length of the transition between clock sources is       peripherals are ac tive. Th e difference bet ween these
the sum of:                                                 modes is the clock source.
• Start-up time of the new clock
                                                            3.2.1       PRI_RUN MODE
• Two and one half cycles of the old clock source
• Two and one half cycles of the new clock                  The PRI_RUN mode is the normal, full power execution
                                                            mode o f th e microcontroller. Th is i s also the default
Three flag bits indicate the current clock source and its   mode upon a device R eset, unless Two-Speed Start-
status. They are:                                           up is en abled (se e Section 2.10 “Two-Speed Clock
• OSTS (of the OSCCON register)                             Start-up Mode” for details). In this mode, the OSTS bit
• IOFS (of the OSCCON register)                             is set. The IOFS bit will be set if the HFINTOSC is the
• T1RUN (of the T1CON register)                             primary clock source and the oscillator is stable (see
                                                            Section 2.2 “Oscillator Control”).
In general, only one of these bits will be set while in a
given power-managed mode. Table 3-2 shows the rela-         3.2.2       SEC_RUN MODE
tionship of the fla gs to the active ma in sy stem cl ock
                                                            The SEC_RUN mo de i s t he mode compatible to th e
source.
                                                            “clock s witching” f eature offered i n o ther PIC 18
                                                            devices. I n thi s m ode, th e C PU and pe ripherals a re
TABLE 3-2:           SYSTEM CLOCK INDICATORS                clocked from the Timer1 oscillator. This gives users the
OSTS IOFS T1RUN         Main System Clock Source            option o f l ower p ower consumption w hile s till u sing a
                                                            high accuracy clock source.
    1     0      0            Primary Oscillator
                                                            SEC_RUN mo de i s en tered b y s etting t he S CS<1:0>
    0     1      0               HFINTOSC
                                                            bits to ‘01’. When SEC_RUN mode is active all of the
    0     0      1          Secondary Oscillator            following are true:
    1     1      0      HFINTOSC as primary clock           • The main clock source is switched to the Timer1
                              LFINTOSC or                     oscillator
    0     0      0
                         HFINTOSC is not yet stable         • Primary oscillator is shut down
.                                                           • T1RUN bit of the T1CON register is set
    Note 1: Executing a SLEEP in struction do es not        • OSTS bit is cleared.
            necessarily pl ace th e d evice i nto Sleep       Note:     The T imer1 osc illator sh ould al ready be
            mode. It a cts as the t rigger to place the                 running prior to entering SEC_RUN mode.
            controller in to eit her the Sleep mode or                  If t he T1 OSCEN b it is not set when th e
            one of the Idle modes, depending on the                     SCS<1:0> bits a re s et t o ‘ 01’, en try to
            setting of the IDLEN bit.                                   SEC_RUN mo de will n ot o ccur until
                                                                        T1OSCEN bit is set and Timer1 oscillator
3.1.4         MULTIPLE FUNCTIONS OF THE                                 is ready.
              SLEEP COMMAND
                                                            On transitions from SEC_RUN mode to PRI_RUN, the
The po wer-managed mode tha t is i nvoked w ith the         peripherals and CPU continue to be clocked from the
SLEEP instruction is determined by the s etting of the      Timer1 o scillator w hile th e primary clock i s started.
IDLEN bit o f the OSCCON regi ster at th e tim e th e       When the primary clock becomes ready, a clock switch
instruction is executed. All c locks sto p an d mi nimum    back to th e pri mary c lock oc curs (s ee Fi gure 2-7).
power is consumed when SLEEP is executed with the           When th e clock swi tch is co mplete, th e T1RUN bit i s
IDLEN bit cleared. The system clock continues to sup-       cleared, the O STS bit is set and the primary clock is
ply a clock to the peripherals but is disconnected from     providing the main system clock. The Timer1 oscillator
the CPU when SLEEP is executed with the IDLEN bit           continues to run as long as the T1OSCEN bit is set.
set.
DS41303G-page 44                                                                      2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
3.2.3        RC_RUN MODE                                       3.3      Sleep Mode
In R C_RUN mode, th e C PU a nd p eripherals are               The Power-Managed Sleep mode in the PIC18F2XK20/
clocked from the internal oscillator block using one of        4XK20 devi ces is id entical t o the lega cy Sle ep mod e
the selections from the HFINTOSC multiplexer. In this          offered in all oth er PIC® mi crocontroller devi ces. It is
mode, t he primary osc illator i s shut down. R C_RUN          entered by clearing the IDLEN bit (the default state on
mode provides the best power conservation of all the           device R eset) and execu ting the SLEEP i nstruction.
Run m odes w hen the LFINTOSC is the m ain cl ock              This shuts down the selected oscillator (Figure 3-1). All
source. It works well for user applications which are not      clock source Status bits are cleared.
highly timing se nsitive or do no t require hig h-speed
clocks at all times.                                           Entering the Sleep mode from any other mode does not
                                                               require a clock switch. This is because no cl ocks are
If the pri mary clock s ource is the in ternal oscillator      needed once th e controller h as e ntered Sleep. If th e
block (either LFINTOSC or HFINTOSC), there are no              WDT is selected, the LFINTOSC source will continue to
distinguishable d ifferences b etween PRI_RUN a nd             operate. If the Timer1 oscillator is enabled, it w ill also
RC_RUN m odes during e xecution. Ho wever, a c lock            continue to run.
switch de lay w ill oc cur du ring ent ry to and exi t fro m
RC_RUN mode. Therefore, if the primary clock source            When a wake event occurs in Sleep mode (by interrupt,
is the inte rnal os cillator bl ock, th e us e of R C_RUN      Reset or WDT time-out), the device will not be clocked
mode is not recommended. See 2.9.3 “Clock Switch               until the cl ock s ource s elected b y th e SC S<1:0> bits
Timing” for details about clock switching.                     becomes ready (see Figure 3-2), or i t w ill be clocked
                                                               from the internal oscillator block if either the Two-Speed
RC_RUN mo de i s e ntered b y s etting the SCS1 b it to        Start-up or the Fai l-Safe C lock Mo nitor are ena bled
‘1’. The SCS0 bit can be either ‘0’ or ‘1’ but should be       (see Section 23.0 “Special Features of the CPU”). In
‘0’ to ma intain so ftware co mpatibility w ith futu re        either case, the OSTS bit is set when the primary clock
devices. When t he cl ock s ource i s swi tched f rom t he     is providing the device clocks. The IDLEN and SCS bits
primary oscillator to the HFINTOSC multiplexer, the pri-       are not affected by the wake-up.
mary os cillator is sh ut do wn an d the OST S bit i s
cleared. The IRCF bits may be modified at any time to
                                                               3.4      Idle Modes
immediately change the clock speed.
On transitions from RC_RUN mode to PRI_RUN mode,               The Id le m odes al low th e c ontroller’s C PU to b e
the dev ice co ntinues to be c locked from the int ernal       selectively shut down while the peripherals continue to
oscillator block w hile the pri mary oscillator is st arted.   operate. Selecting a particular Idle mode allows users
When the pri mary o scillator b ecomes ready, a cl ock         to further manage power consumption.
switch t o t he primary c lock oc curs. Wh en the clock        If the IDLEN bit is set to a ‘1’ when a SLEEP instruction is
switch is complete, the IOFS bit is cleared, the OSTS          executed, the peripherals will be clocked from the clock
bit is set and the primary oscillator is providing the main    source selected by the SCS<1:0> bits; however, the CPU
system clock. The HFINTOSC will continue to run if any         will not be clocked. The clock source Status bits are not
of the conditions noted in Section 2.5.2 “HFINTOSC”            affected. Setting IDLEN and executing a SLEEP instruc-
are met. The LFINTOSC source will continue to run if           tion provides a quick method of switching from a given
any of the co nditions noted in Section 2.5.3 “LFIN-           Run mode to its corresponding Idle mode.
TOSC” are met.
                                                               If the WDT is selected, the LFINTOSC source will con-
                                                               tinue to operate. If the Timer1 oscillator is enabled, it
                                                               will also continue to run.
                                                               Since the C PU is not executing instructions, the only
                                                               exits from any of the Idle modes are by interrupt, WDT
                                                               time-out, or a Reset. When a wake event occurs, CPU
                                                               execution is d elayed by an i nterval of T CSD
                                                               (parameter 38, Table 26-10) while it becomes ready to
                                                               execute code. When the CPU begins executing code,
                                                               it resumes with the same clock source for the current
                                                               Idle mode. For example, when waking from RC_IDLE
                                                               mode, the in ternal oscillator block w ill clock the CPU
                                                               and peripherals (in other words, RC_RUN mode). The
                                                               IDLEN and SCS bits are not affected by the wake-up.
                                                               While in an y Idle mode or t he S leep mod e, a WDT
                                                               time-out will result in a WDT wake-up to the Run mode
                                                               currently specified by the SCS<1:0> bits.
 2010 Microchip Technology Inc.                                                                       DS41303G-page 45
PIC18F2XK20/4XK20
FIGURE 3-1:                TRANSITION TIMING FOR ENTRY TO SLEEP MODE
               Q1 Q2 Q3 Q4 Q1
     OSC1
      CPU
     Clock
 Peripheral
      Clock
     Sleep
  Program
  Counter            PC                                            PC + 2
FIGURE 3-2:                TRANSITION TIMING FOR WAKE FROM SLEEP (HSPLL)
                                 Q1                             Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
              OSC1
                                      TOST(1)      TPLL(1)
        PLL Clock
           Output
       CPU Clock
       Peripheral
            Clock
         Program                                  PC                               PC + 2       PC + 4         PC + 6
         Counter
                          Wake Event                OSTS bit set
       Note1: TOST = 1024 TOSC; TPLL = 2 ms (approx). These intervals are not shown to scale.
DS41303G-page 46                                                                                    2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
3.4.1        PRI_IDLE MODE                                          3.4.2       SEC_IDLE MODE
This mo de is un ique am ong the th ree lo w-power Idle             In SEC_IDLE mo de, the CPU is disabled but the
modes, in that it d oes not disable the primary device              peripherals continue to be cl ocked from the Timer1
clock. For timing sensitive applications, this allows for           oscillator. This mode is entered from SEC_RUN by set-
the fastest resumption of device operation with its more            ting the IDLEN bit and executing a SLEEP instruction. If
accurate primary clock source, since the clock source               the device is in another Run mode, set the IDLEN bit
does not have to “warm-up” or transition from another               first, then se t the SCS<1:0 > bits to ‘ 01’ a nd execute
oscillator.                                                         SLEEP. When th e clock so urce i s swi tched t o t he
PRI_IDLE mo de is ent ered from PR I_RUN m ode by                   Timer1 os cillator, the pr imary os cillator is shut down,
setting the IDLEN bit and executing a SLEEP instruc-                the OSTS bit is cleared and the T1RUN bit is set.
tion. If the device is in another Run mode, set IDLEN               When a wake event occurs, the peripherals continue to
first, then cle ar th e SC S bits and exe cute SLEEP.               be clocked from the Timer1 oscillator. After an interval
Although the CPU is disabled, the peripherals continue              of TCSD following the wake event, the CPU begins exe-
to be clocked from the primary clock source specified               cuting code being clocked by the Timer1 oscillator. The
by th e FO SC<3:0> C onfiguration b its. Th e O STS b it            IDLEN and SCS bits are not affected by the wake-up;
remains set (see Figure 3.3).                                       the Timer1 oscillator continues to run (see Figure 3-4).
When a wake event occurs, the CPU is clocked from the                   Note:   The T imer1 osc illator sh ould al ready be
primary clock so urce. A delay of in terval T CSD is                            running prior to entering SEC_IDLE mode.
required between the w ake even t and w hen cod e                               If th e T1 OSCEN b it is not set wh en th e
execution starts. T his is re quired t o allow th e CPU t o                     SLEEP instruction is ex ecuted, th e m ain
become ready to execute instructions. After the wake-                           system clock will continue to operate in the
up, the OSTS bit remains set. The IDLEN and SCS bits                            previously sel ected mode and the co rre-
are not affected by the wake-up (see Figure 3-4).                               sponding IDLE mode will be entered (i.e.,
                                                                                PRI_IDLE or RC_IDLE).
FIGURE 3-3:                TRANSITION TIMING FOR ENTRY TO IDLE MODE
                       Q1      Q2        Q3      Q4     Q1
             OSC1
         CPU Clock
         Peripheral
             Clock
          Program                   PC                    PC + 2
          Counter
FIGURE 3-4:                TRANSITION TIMING FOR WAKE FROM IDLE TO RUN MODE
                      Q1                                                               Q2             Q3             Q4
          OSC1
                                              TCSD
     CPU Clock
     Peripheral
          Clock
        Program                                                    PC
        Counter
                               Wake Event
 2010 Microchip Technology Inc.                                                                           DS41303G-page 47
PIC18F2XK20/4XK20
3.4.3       RC_IDLE MODE                                    3.5.1       EXIT BY INTERRUPT
In RC_IDLE mode, the CPU is disabled but the periph-        Any o f the av ailable i nterrupt so urces can ca use th e
erals continue to be clocked from the internal oscillator   device to exit from an Idle mode or the Sleep mode to
block from t he H FINTOSC multiplexer output. Thi s         a Run mode. To enable this functionality, an interrupt
mode allows for controllable power conservation during      source must be enabled by setting its enable bit in one
Idle periods.                                               of the INTCON or PIE registers. The PEIE bIt must also
From RC_RUN, t his mo de i s entered b y setting th e       be set If the desired interrupt enable bit is in a PIE reg-
IDLEN b it an d ex ecuting a SLEEP i nstruction. If th e    ister. The ex it s equence i s in itiated w hen the co rre-
device is in another Run mode, first set IDLEN, then set    sponding interrupt flag bit is set.
the S CS1 b it an d e xecute SLEEP. It is recommended       The in struction im mediately fo llowing the SLEEP
that SCS0 al so be cl eared, alt hough its v alue i s       instruction is executed on all exits by interrupt from Idle
ignored, to m aintain software compatibility with future    or Sleep modes. Code execution then branches to the
devices. The H FINTOSC multiplexer may be used to           interrupt vector if the GIE/GIEH bit of the INTCON reg-
select a higher clock frequency by modifying the IRCF       ister is set, otherwise code execution continues without
bits before executing the SLEEP instruction. When the       branching (see Section 9.0 “Interrupts”).
clock source is switched to the HFINTOSC multiplexer,       A fixed delay of interval TCSD following the wake event
the primary oscillator is shut down and the OSTS bit is     is required when leaving Sleep and Idle modes. This
cleared.                                                    delay is required for the CPU to prepare for execution.
If the IRCF bits are set to a ny non-zero value, or th e    Instruction execution r esumes on t he first c lock c ycle
INTSRC bit is set, the H FINTOSC output is e nabled.        following this delay.
The IOFS bit becomes set, after the HFINTOSC output
becomes s table, a fter an inte rval of T          IOBST    3.5.2       EXIT BY WDT TIME-OUT
(parameter 39, Table 26-10). Clocks to the peripherals      A WDT time-out will cause different actions depending
continue while the HFINTOSC source stabilizes. If the       on which power-managed mode the device is in when
IRCF b its w ere prev iously a t a n on-zero va lue, or     the time-out occurs.
INTSRC was set before the SLEEP instruction was exe-
cuted and the HFINTOSC source was already stable,           If the device is not executing code (all Idle modes and
the I OFS bi t wil l re main set. If the IRCF b its an d    Sleep mode), the time-out will result in an exit from the
INTSRC are all clear, the HFINTOSC output will not be       power-managed m ode (s ee Section 3.2 “Run
enabled, the IOFS bit will remain clear and there will be   Modes” and Section 3.3 “Sleep Mode”). If the device
no indication of the current clock source.                  is ex ecuting co de ( all R un mo des), the t ime-out w ill
                                                            result in a WD T Reset (see Section 23.2 “Watchdog
When a wake event occurs, the peripherals continue to       Timer (WDT)”).
be c locked from t he HFINTOSC mul tiplexer output.
After a de lay of T CSD fol lowing th e w ake eve nt, the   The WDT timer and postscaler are cleared by any one
CPU beg ins ex ecuting cod e bei ng clocked by the          of the following:
HFINTOSC multiplexer. The IDLEN and SCS bits are            • executing a SLEEP instruction
not af fected by the w ake-up. The LFINTOSC s ource         • executing a CLRWDT instruction
will continue to run if either the WDT or th e Fail-Safe    • the loss of the currently selected clock source
Clock Monitor is enabled.                                     when the Fail-Safe Clock Monitor is enabled
                                                            • modifying the IRCF bits in the OSCCON register
3.5      Exiting Idle and Sleep Modes                         when the internal oscillator block is the device
An exit from Sleep mode or an y of the Idle modes is          clock source
triggered by any one of the following:
                                                            3.5.3       EXIT BY RESET
• an interrupt
                                                            Exiting Sleep an d Id le mo des by R eset causes c ode
• a R eset
                                                            execution to r estart a t ad dress 0. See Section 4.0
• a watchdog time-out                                       “Reset” for more details.
This section di scusses the triggers that c ause ex its     The ex it de lay tim e fro m R eset to the s tart o f code
from power-managed modes. The clocking subsystem            execution de pends o n b oth th e c lock s ources b efore
actions are discussed in each of the power-managed          and a fter the wake-up and the ty pe o f os cillator. Ex it
modes ( see Section 3.2 “Run Modes”, Section 3.3            delays are summarized in Table 3-3.
“Sleep Mode” and Section 3.4 “Idle Modes”).
DS41303G-page 48                                                                      2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
3.5.4          EXIT WITHOUT AN OSCILLATOR                         In t hese instances, the primary c lock s ource e ither
               START-UP DELAY                                     does not require an oscillator start-up delay since it is
                                                                  already running (PR I_IDLE), or norm ally does not
Certain e xits from p ower-managed modes d o n ot
                                                                  require an oscillator start-up delay (RC, EC, INTOSC,
invoke the OST at all. There are two cases:
                                                                  and INT OSCIO mod es). However, a fix ed delay of
• PRI_IDLE mode, where the primary clock source                   interval TCSD following the wake event is still required
  is not stopped and                                              when leaving Sleep and Idle modes to allow the CPU
• the primary clock source is not any of the LP, XT,              to prepare for execution. Instruction execution resumes
  HS or HSPLL modes.                                              on the first clock cycle following this delay.
TABLE 3-3:           EXIT DELAY ON WAKE-UP BY RESET FROM SLEEP MODE OR ANY IDLE MODE
                     (BY CLOCK SOURCES)
           Clock Source                       Clock Source                                         Clock Ready Status
                                                                             Exit Delay
          before Wake-up                      after Wake-up                                           Bit (OSCCON)
                                                LP, XT, HS
        Primary Device Clock                     HSPLL                                                    OSTS
                                                                               TCSD(1)
          (PRI_IDLE mode)                        EC, RC
                                              HFINTOSC(2)                                                  IOFS
                                                LP, XT, HS                     TOST(3)
                                                 HSPLL                      TOST + tPLL(3)                OSTS
    T1OSC or LFINTOSC(1)
                                                 EC, RC                        TCSD(1)
                                              HFINTOSC(1)                     TIOBST(4)                    IOFS
                                                LP, XT, HS                     TOST(4)
                                                 HSPLL                      TOST + tPLL(3)                OSTS
              HFINTOSC(2)
                                                 EC, RC                        TCSD(1)
                                              HFINTOSC(1)                       None                       IOFS
                                                LP, XT, HS                     TOST(3)
                  None                           HSPLL                      TOST + tPLL(3)                OSTS
              (Sleep mode)                       EC, RC                        TCSD(1)
                                              HFINTOSC(1)                     TIOBST(4)                    IOFS
Note 1:        TCSD (parameter   38) is a required delay when waking from Sleep and all Idle modes and runs concurrently
               with any other required delays (see Section 3.4 “Idle Modes”). On Reset, HFINTOSC defaults to 1 MHz.
         2:    Includes both the HFINTOSC 16 MHz source and postscaler derived frequencies.
         3:    TOST is the Oscillator Start-up Timer (parameter 32). tPLL is the PLL Lock-out Timer (parameter F12).
         4:    Execution continues during the HFINTOSC stabilization period, TIOBST (parameter 39).
 2010 Microchip Technology Inc.                                                                        DS41303G-page 49
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 50     2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
4.0         RESET                                                    A simplified block diagram of the On-Chip Reset Circuit
                                                                     is shown in Figure 4-1.
The PIC18F2XK20/4XK20 devi                   ces d    ifferentiate
between various kinds of Reset:                                      4.1      RCON Register
a)    Power-on Reset (POR)
                                                                     Device R eset ev ents a re tra cked through the RCON
b)    MCLR Reset during normal operation
                                                                     register (Register 4-1). The lower five bits of the regis-
c)    MCLR Reset during power-managed modes                          ter indicate that a specific Reset event has occurred. In
d)    Watchdog Timer (WDT) Reset (during                             most cases, these bits can only be cleared by the event
      execution)                                                     and must be set by the application after the event. The
e)    Programmable Brown-out Reset (BOR)                             state of these flag bits, taken together, can be read to
f)    RESET Instruction                                              indicate the typ e of Reset tha t jus t oc curred. Thi s i s
                                                                     described in more detail in Section 4.6 “Reset State
g)    Stack Full Reset
                                                                     of Registers”.
h)    Stack Underflow Reset
                                                                     The R CON r egister al so ha s c ontrol bi ts f or s etting
This sec tion di scusses R esets ge nerated by M CLR,                interrupt priority (I PEN) an d s oftware control o f th e
POR and BOR and covers the operation of the various                  BOR (SBO REN). Interrupt p riority i s d iscussed in
start-up timers. S tack R eset events a re covered i n               Section 9.0 “Interrupts”. B OR is co vered i n
Section 5.1.2.4 “Stack Full and Underflow Resets”.                   Section 4.4 “Brown-out Reset (BOR)”.
WDT Resets are covered in Section 23.2 “Watchdog
Timer (WDT)”.
FIGURE 4-1:                   SIMPLIFIED BLOCK DIAGRAM OF ON-CHIP RESET CIRCUIT
              RESET
            Instruction
                  Stack       Stack Full/Underflow Reset
                 Pointer
                              External Reset
                                  MCLRE
     MCLR
                     ( )_IDLE
                       Sleep
                       WDT
                     Time-out
                          VDD         POR
                         Detect
     VDD
                     Brown-out
                       Reset
                                    BOREN                                                          S
                 OST/PWRT
                             OST(2) 1024 Cycles
                                                                                                                  Chip_Reset
                                  10-bit Ripple Counter                                            R         Q
     OSC1
                 32 s
                              PWRT(2) 65.5 ms
            LFINTOSC              11-bit Ripple Counter
                                                                                                                 Enable PWRT
                                                                                                              Enable OST(1)
     Note 1:      See Table 4-2 for time-out situations.
            2:    PWRT and OST counters are reset by POR and BOR. See Sections 4.3 and 4.4.
 2010 Microchip Technology Inc.                                                                             DS41303G-page 51
PIC18F2XK20/4XK20
REGISTER 4-1:            RCON: RESET CONTROL REGISTER
    R/W-0              R/W-1              U-0           R/W-1       R-1                R-1        R/W-0           R/W-0
        IPEN        SBOREN     (1)
                                           —             RI          TO                PD         POR  (2)
                                                                                                                    BOR
bit 7                                                                                                                  bit 0
Legend:
R = Readable bit                     W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR                    ‘1’ = Bit is set           ‘0’ = Bit is cleared           x = Bit is unknown
bit 7              IPEN: Interrupt Priority Enable bit
                   1 = Enable priority levels on interrupts
                   0 = Disable priority levels on interrupts (PIC16CXXX Compatibility mode)
bit 6              SBOREN: BOR Software Enable bit(1)
                   If BOREN<1:0> = 01:
                   1 = BOR is enabled
                   0 = BOR is disabled
                   If BOREN<1:0> = 00, 10 or 11:
                   Bit is disabled and read as ‘0’.
bit 5              Unimplemented: Read as ‘0’
bit 4              RI: RESET Instruction Flag bit
                   1 = The RESET instruction was not executed (set by firmware or Power-on Reset)
                   0 = The RESET instruction was executed causing a dev ice Reset (must be se t in firmware after a
                        code-executed Reset occurs)
bit 3              TO: Watchdog Time-out Flag bit
                   1 = Set by power-up, CLRWDT instruction or SLEEP instruction
                   0 = A WDT time-out occurred
bit 2              PD: Power-down Detection Flag bit
                   1 = Set by power-up or by the CLRWDT instruction
                   0 = Set by execution of the SLEEP instruction
bit 1              POR: Power-on Reset Status bit(2)
                   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(3)
                   1 = A Brown-out Reset has not occurred (set by firmware only)
                   0 = A Brown-out Reset occurred (must be set by firmware after a POR or Brown-out Reset occurs)
Note 1:        When CONFIG2L[2:1] = 01, then the SBOREN Reset state is ‘1’; otherwise, it is ‘0’.
     2:        The actual Reset value of POR is determined by the type of device Reset. See the notes following this
               register and Section 4.6 “Reset State of Registers” for additional information.
         3:    See Table 4-3.
  Note 1: Brown-out Reset is indicated when BOR is ‘0’ and POR is ‘1’ (assuming that both POR and BOR were set
          to ‘1’ by firmware immediately after POR).
          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.
DS41303G-page 52                                                                              2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
4.2      Master Clear (MCLR)                                  FIGURE 4-2:               EXTERNAL POWER-ON
                                                                                        RESET CIRCUIT (FOR
The M CLR pin p rovides a me thod fo r t riggering an
                                                                                        SLOW VDD POWER-UP)
external Reset of the device. A Reset is generated by
holding the pin low. These devices have a noise filter in
the MCLR Reset path which detects and ignores small                 VDD       VDD
pulses.
                                                                                                    PIC® MCU
The MCLR pin is not driven low by any internal Resets,                    D     R
including the WDT.                                                                        R1
                                                                                                   MCLR
In PIC18F2XK20/4XK20 devices, the MCLR input can
be disabled with the MCLRE C onfiguration bit. When                                 C
MCLR is disabled, the pin becomes a digital input. See
Section 10.6 “PORTE, TRISE and LATE Registers”
for more information.
                                                                Note 1:   External Power-on Res et c ircuit is r equired
                                                                          only i f t he V DD power -up slope is too slow.
4.3      Power-on Reset (POR)                                             The diode D helps disc harge t he c apacitor
                                                                          quickly when VDD powers down.
A Power-on R eset pu lse i s generated on-chip
whenever V DD ri ses above a c ertain threshold. This                2:   15 k < R < 40 k is recommended to make
                                                                          sure that the voltage drop across R does not
allows the device to start in th e initialized state when
                                                                          violate the device’s electrical specification.
VDD is adequate for operation.
                                                                     3:   R1  1 k  wil l limit any c urrent fl owing into
To take advantage of th e POR circuitry, tie the MCLR                     MCLR from external capacitor C, in the event
pin through a resistor to V DD. This will eliminate exter-                of M CLR/VPP pi n brea kdown, due t o
nal R C co mponents usually needed to cre ate a                           Electrostatic Dischar ge (ES D) or E lectrical
Power-on Reset delay. A minimum rise rate for VDD is                      Overstress (EOS).
specified (parameter D004). For a s low rise time, see
Figure 4-2.
When the device starts normal operation (i.e., exits the
Reset condition), dev ice op erating p arameters (vo lt-
age, freq uency, tem perature, etc.) mu st be met to
ensure pro per opera tion. If the se conditions are not
met, the device must be held in Reset until the operat-
ing conditions are met.
POR events are captured by the POR bit of the RCON
register. The st ate of the bi t is set to ‘ 0’ w henever a
POR oc curs; it does not change for any oth er R eset
event. POR is not reset to ‘1’ by any hardware event.
To capture multiple events, the user must manually set
the bit to ‘1’ by software following any POR.
 2010 Microchip Technology Inc.                                                                       DS41303G-page 53
PIC18F2XK20/4XK20
4.4       Brown-out Reset (BOR)                                    4.4.2        SOFTWARE ENABLED BOR
PIC18F2XK20/4XK20 devices implement a BO R circuit                 When BOREN<1:0> = 01, the BOR can be enabled or
that provides the user with a number of configuration and          disabled by the user in software. This is done with the
power-saving o ptions. Th e BO R i s c ontrolled by th e           SBOREN co ntrol bi t of t he R CON register. S etting
BORV<1:0> a nd BO REN<1:0> bits of th e CONFIG2L                   SBOREN enables the BOR to fun ction as previously
Configuration re gister. There ar e a to tal of fo ur BO R         described. C learing S BOREN disables th e BO R
configurations which are summarized in Table 4-1.                  entirely. The SBOREN bit operates only in this mode;
                                                                   otherwise it is read as ‘0’.
The BO R th reshold is s et by the BOR V<1:0> bit s. If
BOR is enabled (any values of BOREN<1:0>, except                   Placing the BOR under software control g ives the user
‘00’), any drop of V DD below V BOR (parameter D005)               the additional flexibility of tailoring the application to it s
for gre ater th an TBOR (p arameter 35) w ill reset th e           environment without having to reprogram the device to
device. A Reset may or may not occur if VDD falls below            change BOR config uration. It also allow s the user to
VBOR for l ess th an TBOR. Th e ch ip w ill r emain in             tailor devi ce pow er con sumption in sof tware by
Brown-out Reset until VDD rises above VBOR.                        eliminating the increm ental c urrent that the BOR
                                                                   consumes. While the BOR current is typically very small,
If the Power-up Timer is enabled, it will be invoked after         it may have some impact in low-power applications.
VDD ris es a bove V BOR; it t hen w ill k eep t he c hip in
Reset for an add itional tim e del ay, T PWRT                        Note:      Even when BOR is under software control,
(parameter 33). If VDD dr ops b elow V BOR wh ile the                           the BOR Reset voltage level is still set by
Power-up Timer is running, the chip will go back into a                         the BO RV<1:0> C onfiguration bi ts. It
Brown-out R eset and the Po wer-up Timer w ill be                               cannot be changed by software.
initialized. Once VDD rises above VBOR, the Power-up
Timer will execute the additional time delay.                      4.4.3        DISABLING BOR IN SLEEP MODE
BOR an d the Pow er-on T imer (PWRT) a re                          When BOREN<1 :0> = 10, th e BO R re mains und er
independently co nfigured. Ena bling BO R Reset doe s              hardware co ntrol an d op erates as p reviously
not automatically enable the PWRT.                                 described. Whe never the dev ice enters Sleep m ode,
                                                                   however, the BOR is automatically disabled. When the
The BOR circuit has an output that feeds into the POR
                                                                   device returns to any other operating mo de, BO R is
circuit and rearms the POR within the operating range
                                                                   automatically re-enabled.
of the BOR . T his early r earming of the POR en sures
that the device will remain in Reset in the event that VDD         This mode allows for ap plications to recover from
falls below the operating range of the BOR circuitry.              brown-out s ituations, w hile ac tively ex ecuting c ode,
                                                                   when the device requires BOR protection the most. At
4.4.1       DETECTING BOR                                          the same time, it saves additional power in Sleep mode
When BOR is enabled, the BOR bit always resets to ‘0’              by eliminating the small incremental BOR current.
on an y BOR or PO R ev ent. This makes it d ifficult to
                                                                   4.4.4        MINIMUM BOR ENABLE TIME
determine if a BOR event has occurred just by reading
the state of BOR alone. A more reliable method is to               Enabling t he B OR a lso en ables the Fixe d V oltage
simultaneously check the state of both POR and BOR.                Reference (FVR) when no other peripheral requiring the
This assumes that the POR and BOR bits are reset to                FVR is active. The BOR becomes active only after the
‘1’ b y so ftware i mmediately a fter any POR event. I f           FVR stabi lizes. Therefore, t o ensure B OR p rotection,
BOR is ‘0’ while POR is ‘1’, it can be reliably assumed            the FV R set tling t ime must be con sidered when
that a BOR event has occurred.                                     enabling th e BOR in softw are or when th e BOR is
                                                                   automatically en abled after w aking fr om S leep. If th e
                                                                   BOR is disa bled, in softw are or by r eentering Sleep
                                                                   before the FVR stabilizes, the BOR circuit will not sense
                                                                   a B OR con dition. The FV RST bi t of the C VRCON2
                                                                   register can be used to determine FVR stability.
TABLE 4-1:           BOR CONFIGURATIONS
 BOR Configuration         Status of
                           SBOREN                                          BOR Operation
 BOREN1      BOREN0       (RCON<6>)
      0          0        Unavailable   BOR disabled; must be enabled by reprogramming the Configuration bits.
      0          1         Available    BOR enabled by software; operation controlled by SBOREN.
      1          0        Unavailable   BOR enabled by hardware in Run and Idle modes, disabled during
                                        Sleep mode.
      1          1        Unavailable   BOR enabled by hardware; must be disabled by reprogramming the Configuration bits.
DS41303G-page 54                                                                               2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
4.5      Device Reset Timers                                      The OST time-out is invoked only for XT, LP, HS and
                                                                  HSPLL modes and only on Power-on Reset, or on exit
PIC18F2XK20/4XK20 dev ices inc orporate thre e                    from all power-managed modes that stop the external
separate on -chip timers tha t he lp regu late th e               oscillator.
Power-on Reset process. Th eir main func tion is to
ensure tha t the de vice clock is stable bef ore c ode is         4.5.3       PLL LOCK TIME-OUT
executed. These timers are:
                                                                  With th e PLL ena bled in it s PLL m ode, the tim e-out
• Power-up Timer (PWRT)                                           sequence fo llowing a Pow er-on R eset i s s lightly
• Oscillator Start-up Timer (OST)                                 different from other oscillator modes. A separate timer
• PLL Lock Time-out                                               is used to provide a fixed time-out that is sufficient for
                                                                  the PLL to loc k to the main oscillator frequency. This
4.5.1        POWER-UP TIMER (PWRT)                                PLL lock time-out (TPLL) is typically 2 m s and follows
                                                                  the oscillator start-up time-out.
The Po        wer-up T       imer (P     WRT)     of
PIC18F2XK20/4XK20 devices is an 1 1-bit counter
                                                                  4.5.4       TIME-OUT SEQUENCE
which uses the LFINTOSC source as the clock input.
This yields an        approximate time inter  val of              On power-up, the time-out sequence is as follows:
2048 x 32 s = 65.6 ms. While the PWRT is counting,               1.   After the POR pulse has cleared, PWRT time-out
the device is held in Reset.                                           is invoked (if enabled).
The power-up time delay depends on the LFINTOSC                   2.   Then, the OST is activated.
clock and will vary from chip-to-chip due to temperature          The t otal ti me-out w ill v ary b ased on oscillator
and p rocess v ariation. Se e D C p arameter 33 for               configuration and the status of th e PWRT. Figure 4-3,
details.                                                          Figure 4-4, F igure 4-5, Figure 4-6 and Fi gure 4-7 al l
The PW RT i s enabled b y c learing th e PW RTEN                  depict ti me-out s equences on po wer-up, w ith th e
Configuration bit.                                                Power-up Timer e nabled a nd the device o perating i n
                                                                  HS Os cillator m ode. Fig ures 4-3 th rough 4-6 a lso
4.5.2        OSCILLATOR START-UP TIMER                            apply to de vices o perating i n XT or L P mo des. F or
             (OST)                                                devices in RC mode and with the PWRT disabled, on
The Os cillator Start-up Timer (O ST) provides a 102 4            the other hand, there will be no time-out at all.
oscillator cy cle (fro m O SC1 i nput) de lay af ter th e         Since the time-outs occur from the POR pulse, if MCLR
PWRT delay is over (parameter 33). This ensures that              is kept low long enough, all time-outs will expire, after
the c rystal os cillator o r res onator has st arted an d         which, bri nging M CLR h igh w ill all ow pro gram
stabilized.                                                       execution to begin immediately (F igure 4-5). T his i s
                                                                  useful for testing purposes or to synchronize more than
                                                                  one PIC18FXXK20 device operating in parallel.
TABLE 4-2:         TIME-OUT IN VARIOUS SITUATIONS
       Oscillator                                Power-up(2) and Brown-out                           Exit from
      Configuration                     PWRTEN = 0                     PWRTEN = 1               Power-Managed Mode
HSPLL                      66   ms(1)   + 1024 TOSC + 2   ms(2)   1024 TOSC + 2 ms(2)             1024 TOSC + 2 ms(2)
HS, XT, LP                         66 ms(1) + 1024 TOSC                 1024 TOSC                      1024 TOSC
EC, ECIO                                  66 ms(1)                           —                              —
RC, RCIO                                  66   ms(1)                         —                              —
INTIO1, INTIO2                            66 ms  (1)
                                                                             —                              —
Note 1: 66 ms (65.5 ms) is the nominal Power-up Timer (PWRT) delay.
     2: 2 ms is the nominal time required for the PLL to lock.
 2010 Microchip Technology Inc.                                                                        DS41303G-page 55
PIC18F2XK20/4XK20
FIGURE 4-3:          TIME-OUT SEQUENCE ON POWER-UP (MCLR TIED TO VDD, VDD RISE < TPWRT)
               VDD
              MCLR
     INTERNAL POR
                                         TPWRT
    PWRT TIME-OUT
                                                         TOST
     OST TIME-OUT
   INTERNAL RESET
FIGURE 4-4:          TIME-OUT SEQUENCE ON POWER-UP (MCLR NOT TIED TO VDD): CASE 1
               VDD
              MCLR
      INTERNAL POR
                                                 TPWRT
    PWRT TIME-OUT
                                                                TOST
     OST TIME-OUT
   INTERNAL RESET
FIGURE 4-5:          TIME-OUT SEQUENCE ON POWER-UP (MCLR NOT TIED TO VDD): CASE 2
               VDD
              MCLR
     INTERNAL POR
                                                 TPWRT
    PWRT TIME-OUT
                                                                TOST
     OST TIME-OUT
   INTERNAL RESET
DS41303G-page 56                                                        2010 Microchip Technology Inc.
                                                                      PIC18F2XK20/4XK20
FIGURE 4-6:             SLOW RISE TIME (MCLR TIED TO VDD, VDD RISE > TPWRT)
                                                                        5V
                        VDD                      0V
                      MCLR
             INTERNAL POR
                                                           TPWRT
            PWRT TIME-OUT
                                                                              TOST
             OST TIME-OUT
         INTERNAL RESET
FIGURE 4-7:             TIME-OUT SEQUENCE ON POR W/PLL ENABLED (MCLR TIED TO VDD)
                  VDD
                MCLR
      INTERNAL POR
                                                        TPWRT
     PWRT TIME-OUT
                                                                       TOST
      OST TIME-OUT                                                            TPLL
       PLL TIME-OUT
   INTERNAL RESET
    Note:    TOST = 1024 clock cycles.
             TPLL  2 ms max. First three stages of the PWRT timer.
 2010 Microchip Technology Inc.                                                     DS41303G-page 57
PIC18F2XK20/4XK20
4.6      Reset State of Registers                              Table 4-4 de scribes the R eset st ates fo r all of th e
                                                               Special Function Registers. These are categorized by
Some registers are unaffected by a Reset. Their status         Power-on and Brow n-out R esets, Ma ster C lear an d
is unknown o n PO R and un changed by a ll other               WDT Resets and WDT wake-ups.
Resets. All other registers are forced to a “Reset state”
depending on the type of Reset that occurred.
Most re gisters a re n ot a ffected by a W DT w ake-up,
since t his is vi ewed as th e re sumption of no rmal
operation. Status bits from the RCON register, RI, TO,
PD, PO R and BOR, a re s et or cleared d ifferently i n
different R eset s ituations, as i ndicated in T able 4-3.
These bi ts a re us ed by s oftware to determine th e
nature of the Reset.
TABLE 4-3:         STATUS BITS, THEIR SIGNIFICANCE AND THE INITIALIZATION CONDITION
                   FOR RCON REGISTER
                                       Program                 RCON Register                     STKPTR Register
            Condition
                                       Counter       SBOREN    RI    TO     PD    POR BOR STKFUL            STKUNF
Power-on Reset                          0000h            1     1      1      1     0      0         0           0
RESET Instruction                       0000h           u(2)   0      u      u     u      u         u           u
Brown-out Reset                         0000h           u(2)
                                                               1      1      1     u      0         u           u
MCLR during Power-Managed               0000h           u(2)   u      1      u     u      u         u           u
Run Modes
MCLR during Power-Managed               0000h           u(2)   u      1      0     u      u         u           u
Idle Modes and Sleep Mode
WDT Time-out during Full Power          0000h           u(2)   u      0      u     u      u         u           u
or Power-Managed Run Mode
MCLR during Full Power                  0000h           u(2)   u      u      u     u      u         u           u
Execution
Stack Full Reset (STVREN = 1)           0000h           u(2)   u      u      u     u      u         1           u
Stack Underflow Reset                   0000h           u(2)   u      u      u     u      u         u           1
(STVREN = 1)
Stack Underflow Error (not an           0000h           u(2)   u      u      u     u      u         u           1
actual Reset, STVREN = 0)
WDT Time-out during                     PC + 2          u(2)   u      0      0     u      u         u           u
Power-Managed Idle or Sleep
Modes
Interrupt Exit from                    PC + 2(1)        u(2)   u      u      0     u      u         u           u
Power-Managed Modes
Legend: u = unchanged
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 (008h or 0018h).
     2: Reset state is ‘1’ for SBOREN and unchanged for all other Resets when software BOR is enabled
        (BOREN<1:0> Configuration bits = 01). Otherwise, the Reset state is ‘0’.
DS41303G-page 58                                                                        2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
TABLE 4-4:          INITIALIZATION CONDITIONS FOR ALL REGISTERS
                                                                                   MCLR Resets,
                                                        Power-on Reset,             WDT Reset,             Wake-up via WDT
      Register           Applicable Devices
                                                        Brown-out Reset          RESET Instruction,          or Interrupt
                                                                                   Stack Resets
TOSU                PIC18F2XK20 PIC18F4XK20               ---0 0000                 ---0 0000                ---0 uuuu(3)
TOSH                PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                uuuu uuuu(3)
TOSL                PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                uuuu uuuu(3)
STKPTR              PIC18F2XK20 PIC18F4XK20               00-0 0000                 uu-0 0000                uu-u uuuu(3)
PCLATU              PIC18F2XK20 PIC18F4XK20               ---0 0000                 ---0 0000                ---u uuuu
PCLATH              PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                uuuu uuuu
PCL                 PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                   PC + 2(2)
TBLPTRU             PIC18F2XK20 PIC18F4XK20               --00 0000                 --00 0000                --uu uuuu
TBLPTRH             PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                uuuu uuuu
TBLPTRL             PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                uuuu uuuu
TABLAT              PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                uuuu uuuu
PRODH               PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                uuuu uuuu
PRODL               PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                uuuu uuuu
INTCON              PIC18F2XK20 PIC18F4XK20               0000 000x                 0000 000u                uuuu uuuu(1)
INTCON2             PIC18F2XK20 PIC18F4XK20               1111 -1-1                 1111 -1-1                uuuu -u-u(1)
INTCON3             PIC18F2XK20 PIC18F4XK20               11-0 0-00                 11-0 0-00                uu-u u-uu(1)
INDF0               PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
POSTINC0            PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
POSTDEC0            PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
PREINC0             PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
PLUSW0              PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
FSR0H               PIC18F2XK20 PIC18F4XK20               ---- 0000                 ---- 0000                ---- uuuu
FSR0L               PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                uuuu uuuu
WREG                PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                uuuu uuuu
INDF1               PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
POSTINC1            PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
POSTDEC1            PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
PREINC1             PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
PLUSW1              PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
Legend:      u = unchanged, x = unknown, - = unimplemented bit, read as ‘0’, q = value depends on condition.
             Shaded cells indicate conditions do not apply for the designated device.
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 hardware stack.
        4:   See Table 4-3 for Reset value for specific condition.
        5:   Bits 6 and 7 of PORTA, LATA and TRISA are enabled, depending on the oscillator mode selected. When not enabled as
             PORTA pins, they are disabled and read ‘0’.
        6:   All bits of the ANSELH register initialize to ‘0’ if the PBADEN bit of CONFIG3H is ‘0’.
 2010 Microchip Technology Inc.                                                                             DS41303G-page 59
PIC18F2XK20/4XK20
TABLE 4-4:           INITIALIZATION CONDITIONS FOR ALL REGISTERS (CONTINUED)
                                                                                    MCLR Resets,
                                                         Power-on Reset,             WDT Reset,             Wake-up via WDT
      Register            Applicable Devices
                                                         Brown-out Reset          RESET Instruction,          or Interrupt
                                                                                    Stack Resets
FSR1H                PIC18F2XK20 PIC18F4XK20               ---- 0000                 ---- 0000                 ---- uuuu
FSR1L                PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                 uuuu uuuu
BSR                  PIC18F2XK20 PIC18F4XK20               ---- 0000                 ---- 0000                 ---- uuuu
INDF2                PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
POSTINC2             PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
POSTDEC2             PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
PREINC2              PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
PLUSW2               PIC18F2XK20 PIC18F4XK20                    N/A                      N/A                       N/A
FSR2H                PIC18F2XK20 PIC18F4XK20               ---- 0000                 ---- 0000                 ---- uuuu
FSR2L                PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                 uuuu uuuu
STATUS               PIC18F2XK20 PIC18F4XK20               ---x xxxx                 ---u uuuu                 ---u uuuu
TMR0H                PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
TMR0L                PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                 uuuu uuuu
T0CON                PIC18F2XK20 PIC18F4XK20               1111 1111                 1111 1111                 uuuu uuuu
OSCCON               PIC18F2XK20 PIC18F4XK20               0011 qq00                 0011 qq00                 uuuu uuuu
HLVDCON              PIC18F2XK20 PIC18F4XK20               0-00 0101                 0-00 0101                 u-uu uuuu
WDTCON               PIC18F2XK20 PIC18F4XK20               ---- ---0                 ---- ---0                 ---- ---u
RCON    (4)
                     PIC18F2XK20 PIC18F4XK20               0q-1 11q0                 0u-q qquu                 uu-u qquu
TMR1H                PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                 uuuu uuuu
TMR1L                PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                 uuuu uuuu
T1CON                PIC18F2XK20 PIC18F4XK20               0000 0000                 u0uu uuuu                 uuuu uuuu
TMR2                 PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
PR2                  PIC18F2XK20 PIC18F4XK20               1111 1111                 1111 1111                 1111 1111
T2CON                PIC18F2XK20 PIC18F4XK20               -000 0000                 -000 0000                 -uuu uuuu
SSPBUF               PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                 uuuu uuuu
SSPADD               PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
SSPSTAT              PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
SSPCON1              PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
SSPCON2              PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
Legend:       u = unchanged, x = unknown, - = unimplemented bit, read as ‘0’, q = value depends on condition.
              Shaded cells indicate conditions do not apply for the designated device.
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 hardware stack.
        4:    See Table 4-3 for Reset value for specific condition.
        5:    Bits 6 and 7 of PORTA, LATA and TRISA are enabled, depending on the oscillator mode selected. When not enabled as
              PORTA pins, they are disabled and read ‘0’.
        6:    All bits of the ANSELH register initialize to ‘0’ if the PBADEN bit of CONFIG3H is ‘0’.
DS41303G-page 60                                                                                 2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
TABLE 4-4:          INITIALIZATION CONDITIONS FOR ALL REGISTERS (CONTINUED)
                                                                                   MCLR Resets,
                                                        Power-on Reset,             WDT Reset,             Wake-up via WDT
     Register            Applicable Devices
                                                        Brown-out Reset          RESET Instruction,          or Interrupt
                                                                                   Stack Resets
ADRESH              PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                 uuuu uuuu
ADRESL              PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                 uuuu uuuu
ADCON0              PIC18F2XK20 PIC18F4XK20               --00 0000                 --00 0000                 --uu uuuu
ADCON1              PIC18F2XK20 PIC18F4XK20               --00 0qqq                 --00 0qqq                 --uu uuuu
ADCON2              PIC18F2XK20 PIC18F4XK20               0-00 0000                 0-00 0000                 u-uu uuuu
CCPR1H              PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                 uuuu uuuu
CCPR1L              PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                 uuuu uuuu
CCP1CON             PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
CCPR2H              PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                 uuuu uuuu
CCPR2L              PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                 uuuu uuuu
CCP2CON             PIC18F2XK20 PIC18F4XK20               --00 0000                 --00 0000                 --uu uuuu
PSTRCON             PIC18F2XK20 PIC18F4XK20               ---0 0001                 ---0 0001                 ---u uuuu
BAUDCON             PIC18F2XK20 PIC18F4XK20               0100 0-00                 0100 0-00                 uuuu u-uu
PWM1CON             PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
ECCP1AS             PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
CVRCON              PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
CVRCON2             PIC18F2XK20 PIC18F4XK20               00-- ----                 00-- ----                 uu-- ----
TMR3H               PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                 uuuu uuuu
TMR3L               PIC18F2XK20 PIC18F4XK20               xxxx xxxx                 uuuu uuuu                 uuuu uuuu
T3CON               PIC18F2XK20 PIC18F4XK20               0000 0000                 uuuu uuuu                 uuuu uuuu
SPBRGH              PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
SPBRG               PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
RCREG               PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
TXREG               PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
TXSTA               PIC18F2XK20 PIC18F4XK20               0000 0010                 0000 0010                 uuuu uuuu
RCSTA               PIC18F2XK20 PIC18F4XK20               0000 000x                 0000 000x                 uuuu uuuu
EEADR               PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
EEADRH              PIC18F26K20      PIC18F46K20          ---- --00                 ---- --00                 ---- --uu
EEDATA              PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
EECON2              PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 0000 0000
EECON1              PIC18F2XK20 PIC18F4XK20               xx-0 x000                 uu-0 u000                 uu-0 u000
Legend:      u = unchanged, x = unknown, - = unimplemented bit, read as ‘0’, q = value depends on condition.
             Shaded cells indicate conditions do not apply for the designated device.
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 hardware stack.
        4:   See Table 4-3 for Reset value for specific condition.
        5:   Bits 6 and 7 of PORTA, LATA and TRISA are enabled, depending on the oscillator mode selected. When not enabled as
             PORTA pins, they are disabled and read ‘0’.
        6:   All bits of the ANSELH register initialize to ‘0’ if the PBADEN bit of CONFIG3H is ‘0’.
 2010 Microchip Technology Inc.                                                                             DS41303G-page 61
PIC18F2XK20/4XK20
TABLE 4-4:             INITIALIZATION CONDITIONS FOR ALL REGISTERS (CONTINUED)
                                                                                      MCLR Resets,
                                                           Power-on Reset,             WDT Reset,             Wake-up via WDT
    Register                Applicable Devices
                                                           Brown-out Reset          RESET Instruction,          or Interrupt
                                                                                      Stack Resets
IPR2                   PIC18F2XK20 PIC18F4XK20              1111 1111                 1111 1111                 uuuu uuuu
PIR2                   PIC18F2XK20 PIC18F4XK20              0000 0000                 0000 0000                 uuuu uuuu(1)
PIE2                   PIC18F2XK20 PIC18F4XK20              0000 0000                 0000 0000                 uuuu uuuu
                       PIC18F2XK20 PIC18F4XK20              1111 1111                 1111 1111                 uuuu uuuu
IPR1
                       PIC18F2XK20 PIC18F4XK20              -111 1111                 -111 1111                 -uuu uuuu
                       PIC18F2XK20 PIC18F4XK20              0000 0000                 0000 0000                 uuuu uuuu(1)
PIR1
                       PIC18F2XK20 PIC18F4XK20              -000 0000                 -000 0000                 -uuu uuuu(1)
                       PIC18F2XK20 PIC18F4XK20              0000 0000                 0000 0000                 uuuu uuuu
PIE1
                       PIC18F2XK20 PIC18F4XK20              -000 0000                 -000 0000                 -uuu uuuu
OSCTUNE                PIC18F2XK20 PIC18F4XK20              0000 0000                 0000 0000                 uuuu uuuu
TRISE                  PIC18F2XK20 PIC18F4XK20              ---- -111                 ---- -111                 ---- -uuu
TRISD                  PIC18F2XK20 PIC18F4XK20              1111 1111                 1111 1111                 uuuu uuuu
TRISC                  PIC18F2XK20 PIC18F4XK20              1111 1111                 1111 1111                 uuuu uuuu
TRISB                  PIC18F2XK20 PIC18F4XK20              1111 1111                 1111 1111                 uuuu uuuu
TRISA   (5)
                       PIC18F2XK20 PIC18F4XK20              1111 1111   (5)
                                                                                      1111 1111   (5)
                                                                                                                uuuu uuuu(5)
LATE                   PIC18F2XK20 PIC18F4XK20              ---- -xxx                 ---- -uuu                 ---- -uuu
LATD                   PIC18F2XK20 PIC18F4XK20              xxxx xxxx                 uuuu uuuu                 uuuu uuuu
LATC                   PIC18F2XK20 PIC18F4XK20              xxxx xxxx                 uuuu uuuu                 uuuu uuuu
LATB                   PIC18F2XK20 PIC18F4XK20              xxxx xxxx                 uuuu uuuu                 uuuu uuuu
LATA(5)                PIC18F2XK20 PIC18F4XK20              xxxx xxxx(5)              uuuu uuuu(5)              uuuu uuuu(5)
                       PIC18F2XK20 PIC18F4XK20              ---- x000                 ---- u000                 ---- uuuu
PORTE
                       PIC18F2XK20 PIC18F4XK20              ---- x---                 ---- u---                 ---- u---
PORTD                  PIC18F2XK20 PIC18F4XK20              xxxx xxxx                 uuuu uuuu                 uuuu uuuu
PORTC                  PIC18F2XK20 PIC18F4XK20              xxxx xxxx                 uuuu uuuu                 uuuu uuuu
PORTB                  PIC18F2XK20 PIC18F4XK20              xxx0 0000                 uuu0 0000                 uuuu uuuu
PORTA     (5)
                       PIC18F2XK20 PIC18F4XK20              xx0x 0000   (5)
                                                                                      uu0u 0000   (5)
                                                                                                                uuuu uuuu(5)
ANSELH(6)              PIC18F2XK20 PIC18F4XK20               ---1 1111                 ---1 1111                 ---u uuuu
ANSEL                  PIC18F2XK20 PIC18F4XK20               1111 1111                 1111 1111                 uuuu uuuu
IOCB                   PIC18F2XK20 PIC18F4XK20               0000 ----                 0000 ----                 uuuu ----
WPUB                   PIC18F2XK20 PIC18F4XK20               1111 1111                 1111 1111                 uuuu uuuu
CM1CON0                PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
CM2CON0                PIC18F2XK20 PIC18F4XK20               0000 0000                 0000 0000                 uuuu uuuu
Legend:         u = unchanged, x = unknown, - = unimplemented bit, read as ‘0’, q = value depends on condition.
                Shaded cells indicate conditions do not apply for the designated device.
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 hardware stack.
        4:      See Table 4-3 for Reset value for specific condition.
        5:      Bits 6 and 7 of PORTA, LATA and TRISA are enabled, depending on the oscillator mode selected. When not enabled as
                PORTA pins, they are disabled and read ‘0’.
        6:      All bits of the ANSELH register initialize to ‘0’ if the PBADEN bit of CONFIG3H is ‘0’.
DS41303G-page 62                                                                                   2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
TABLE 4-4:         INITIALIZATION CONDITIONS FOR ALL REGISTERS (CONTINUED)
                                                                                  MCLR Resets,
                                                       Power-on Reset,             WDT Reset,             Wake-up via WDT
     Register           Applicable Devices
                                                       Brown-out Reset          RESET Instruction,          or Interrupt
                                                                                  Stack Resets
CM2CON1            PIC18F2XK20 PIC18F4XK20               0000 ----                 0000 ----                 uuuu ----
SLRCON             PIC18F2XK20 PIC18F4XK20               ---1 1111                 ---1 1111                 ---u uuuu
SSPMSK             PIC18F2XK20 PIC18F4XK20               1111 1111                 1111 1111                 uuuu uuuu
Legend:     u = unchanged, x = unknown, - = unimplemented bit, read as ‘0’, q = value depends on condition.
            Shaded cells indicate conditions do not apply for the designated device.
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 hardware stack.
       4:   See Table 4-3 for Reset value for specific condition.
       5:   Bits 6 and 7 of PORTA, LATA and TRISA are enabled, depending on the oscillator mode selected. When not enabled as
            PORTA pins, they are disabled and read ‘0’.
       6:   All bits of the ANSELH register initialize to ‘0’ if the PBADEN bit of CONFIG3H is ‘0’.
 2010 Microchip Technology Inc.                                                                            DS41303G-page 63
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 64     2010 Microchip Technology Inc.
                                                                        PIC18F2XK20/4XK20
5.0      MEMORY ORGANIZATION                                            5.1      Program Memory Organization
There are three types of m emory in PIC18 Enhanced                      PIC18 m icrocontrollers i mplement a 2 1-bit pro gram
microcontroller devices:                                                counter, which is ca pable of addressing a 2-M byte
                                                                        program memory space. Accessing a location between
• Program Memory
                                                                        the upp er bou ndary of the phy sically im plemented
• Data RAM                                                              memory and the 2-Mbyte address will return all ‘0’s (a
• Data EEPROM                                                           NOP instruction).
As Harvard architecture devices, the data and program                   This family of devices contain the following:
memories use separate busses; this allows for concur-
                                                                        • PIC18F23K20, PIC18F43K20: 8 Kbytes of Flash
rent ac cess of th e tw o m emory spaces. Th e da ta
                                                                          Memory, up to 4,096 single-word instructions
EEPROM, for practical purposes, can be regarded as
a peripheral device, since it is addressed and accessed                 • PIC18F24K20, PIC18F44K20: 16 Kbytes of Flash
through a set of control registers.                                       Memory, up to 8,192 single-word instructions
                                                                        • PIC18F25K20, PIC18F45K20: 32 Kbytes of Flash
Additional detailed information on the operation of the
                                                                          Memory, up to 16,384 single-word instructions
Flash program m emory i s provided i n Section 6.0
“Flash Program Memory”. Dat a EEP ROM i s                               • PIC18F26K20, PIC18F46K20: 64 Kbytes of Flash
discussed s eparately i n Section 7.0 “Data EEPROM                        Memory, up to 37,768 single-word instructions
Memory”.                                                                PIC18 devices have two interrupt vectors. The Reset
                                                                        vector ad dress is a t 000 0h a nd th e in terrupt v ector
                                                                        addresses are at 0008h and 0018h.
                                                                        The p rogram memory m ap for P IC18F2XK20/4XK20
                                                                        devices is shown in Figure 5-1. Memory block details
                                                                        are shown in Figure 23-2.
FIGURE 5-1:            PROGRAM MEMORY MAP AND STACK FOR PIC18F2XK20/4XK20 DEVICES
                                                   PC<20:0>
              CALL,RCALL,RETURN                                                     21
              RETFIE,RETLW
                                                 Stack Level 1
                                                         
                                                         
                                                         
                                                 Stack Level 31
                                                 Reset Vector                                           0000h
                                       High Priority Interrupt Vector                                   0008h
                                        Low Priority Interrupt Vector                                   0018h
                On-Chip
            Program Memory
                        1FFFh          On-Chip
                                   Program Memory
                           2000h
                                                 3FFFh           On-Chip
            PIC18F23K20/                                     Program Memory
                                                 4000h
            43K20
                                                                                                                  User Memory Space
                                   PIC18F24K20/                                       On-Chip
                                                                                  Program Memory
                                   44K20
                                                                         7FFFh
                                                                         8000h
                                                             PIC18F25K20/
                                                             45K20
                                                                                                FFFFh
                                                                                               10000h
                Read ‘0’              Read ‘0’                    Read ‘0’
                                                                                  PIC18F26K20/
                                                                                  46K20
                                                                                         Read ‘0’
                                                                                                        1FFFFFh
                                                                                                        200000h
 2010 Microchip Technology Inc.                                                                                DS41303G-page 65
PIC18F2XK20/4XK20
5.1.1       PROGRAM COUNTER                                      The stack operates as a 31-word by 21-bit RAM and a
                                                                 5-bit Stack P ointer, STKPTR. The stac k spac e is not
The Program Counter (PC) specifies the address of the
                                                                 part of either program or data space. The Stack Pointer
instruction to fetch for execution. The PC is 21 bits wide
                                                                 is readable and writable and the address on the top of
and is contained in three separate 8-bit registers. The
                                                                 the stack is readable and writable through the Top-of-
low byte, known as the PCL register, is both readable
                                                                 Stack (TOS) Special File Registers. Data can also be
and writable. The high byte, or PCH register, contains
                                                                 pushed t o, o r pop ped from the st ack, u sing th ese
the PC<15:8> bits; it is not directly readable or writable.
                                                                 registers.
Updates to the PCH register are performed through the
PCLATH register. The upper byte is called PCU. This              A CALL type instruction causes a push onto the stack;
register contains the P C<20:16> bit s; i t is als o n ot        the Stack Pointer is first incremented and the location
directly rea dable o r writable. Updates to the PC U             pointed to b y th e S tack Poi nter is writte n wi th th e
register are performed through the PCLATU register.              contents of the PC (already pointing to the instruction
                                                                 following the CALL). A RETURN type instruction causes
The contents of PCLATH and PCLATU are transferred
                                                                 a pop f rom th e s tack; th e contents of the l ocation
to the prog ram co unter by any op eration tha t w rites
                                                                 pointed to by th e STKPTR are tran sferred to the PC
PCL. Si milarly, the u pper two bytes o f t he program
                                                                 and then the Stack Pointer is decremented.
counter are transferred to PCLATH and PCLATU by an
operation that reads PCL. This is useful for computed            The S tack Po inter is ini tialized to ‘ 00000’ a fter a ll
offsets t o t he PC (s ee Section 5.1.4.1 “Computed              Resets. There is no RAM associated with the location
GOTO”).                                                          corresponding to a Stack Pointer value of ‘00000’; this
                                                                 is only a Reset value. Status bits indicate if the stack is
The PC addresses bytes in the pro gram memory. To
                                                                 full or has overflowed or has underflowed.
prevent the PC f rom be coming misaligned w ith w ord
instructions, the Least Significant bit of PCL is fixed to
                                                                 5.1.2.1       Top-of-Stack Access
a v alue o f ‘ 0’. Th e PC in crements by 2 to add ress
sequential instructions in the program memory.                   Only the top of the return address stack (TOS) is readable
                                                                 and writable. A set of three registers, TOSU:TOSH:TOSL,
The CALL, RCALL, GOTO a nd program br anch
                                                                 hold the contents of the st ack location pointed to by the
instructions w rite to the program counter directly. For
                                                                 STKPTR regist er (Fig ure 5-2). This allows users to
these in structions, the c ontents o f PC LATH an d
                                                                 implement a sof tware stack if necessary. After a CALL,
PCLATU are not transferred to the program counter.
                                                                 RCALL or inte rrupt, t he softw are can read the pu shed
                                                                 value by reading the TOSU:TOSH:TOSL registers. These
5.1.2       RETURN ADDRESS STACK
                                                                 values can be placed on a user defined software stack. At
The return address stack allows any combination of up            return t ime, t he sof tware can ret urn t hese value s to
to 31 program calls and interrupts to occur. The PC is           TOSU:TOSH:TOSL and do a return.
pushed ont o th e s tack w hen a CALL or RCALL
                                                                 The user must disable the global interrupt enable bits
instruction is executed or an interrupt is Acknowledged.
                                                                 while accessing the stack to prevent inadvertent stack
The PC value is pulled of f the st ack on a RETURN,
                                                                 corruption.
RETLW or a RETFIE instruction. PCLATU and PCLATH
are no t af fected by an y o f th e RETURN or CALL
instructions.
FIGURE 5-2:             RETURN ADDRESS STACK AND ASSOCIATED REGISTERS
                                                       Return Address Stack <20:0>
                                                                           11111
                                                                           11110
                    Top-of-Stack Registers                                 11101              Stack Pointer
               TOSU           TOSH           TOSL                                             STKPTR<4:0>
                00h            1Ah            34h                                               00010
                                                                           00011
                                                Top-of-Stack   001A34h     00010
                                                               000D58h     00001
                                                                           00000
DS41303G-page 66                                                                           2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
5.1.2.2        Return Stack Pointer (STKPTR)                     When the st ack ha s be en po pped en ough tim es to
                                                                 unload the stack, the next pop will return a value of zero
The STKPTR register (Register 5-1) contains the Stack
                                                                 to the PC a nd sets the STKUNF bit, whi le the Stack
Pointer v alue, the STKFUL (s tack ful l) Status b it an d
                                                                 Pointer remains at z ero. The STKUNF bit will remain
the STKUNF (stack underflow) Status bits. The value of
                                                                 set until cleared by software or until a POR occurs.
the S tack Po inter c an b e 0 th rough 31 . Th e S tack
Pointer increments before values are pushed onto the                Note:     Returning a value of zero to the PC on an
stack and decrements after values are popped off the                          underflow ha s the effect of vec toring the
stack. On Reset, the Stack Pointer value will be zero.                        program t o th e R eset vector, w here th e
The user may read and write the Stack Pointer value.                          stack conditions can b e v erified an d
This feature ca n be u sed by a R eal-Time O perating                         appropriate actions can be taken. This is
System (RTOS) for return stack maintenance.                                   not the same as a Reset, as the contents
After the PC is pushed onto the stack 31 times (without                       of the SFRs are not affected.
popping an y values off th e stack), t he STKFUL bi t i s
set. The S TKFUL bi t is cl eared b y so ftware or by a          5.1.2.3         PUSH and POP Instructions
POR.                                                             Since t he Top-of-Stack is re adable and w ritable, th e
The action that takes place when the stack becomes               ability to push values onto the stack and pull values off
full depends on the state of the STVREN (Stack Over-             the stack without disturbing normal program execution
flow R eset Ena ble) C onfiguration bi t. (R efer to             is a de sirable feature. T he PIC18 instruction se t
Section 23.1 “Configuration Bits” for a description of           includes tw o instructions, PUSH and POP, t hat permit
the dev ice C onfiguration bits.) If STVR EN is s et             the T OS to be m anipulated u nder s oftware control.
(default), the 31 st push will pu sh the (PC + 2) v alue         TOSU, TOSH and TOSL can be modified to place data
onto th e st ack, se t the STKFUL bit and res et the             or a return address on the stack.
device. The STKFUL bit will remain set and the Stack             The PUSH instruction places the current PC value onto
Pointer will be set to zero.                                     the stack. This increments the Stack Pointer and loads
If STVREN is cleared, the STKFUL bit will be set on the          the current PC value onto the stack.
31st push and the Stack Pointer will increment to 31.            The POP instruction discards the current TOS by decre-
Any additional pushes will not overwrite the 31st push           menting the Stack Pointer. The previous value pushed
and STKPTR will remain at 31.                                    onto the stack then becomes the TOS value.
REGISTER 5-1:           STKPTR: STACK POINTER REGISTER
     R/C-0 R           /C-0             U-0           R/W-0      R/W-0           R/W-0          R/W-0          R/W-0
  STKFUL(1)       STKUNF(1)              —            SP4         SP3                SP2         SP1             SP0
bit 7                                                                                                                  bit 0
Legend:
R = Readable bit                   W = Writable bit           U = Unimplemented             C = Clearable only bit
-n = Value at POR                  ‘1’ = Bit is set           ‘0’ = Bit is cleared          x = Bit is unknown
bit 7            STKFUL: Stack Full Flag bit(1)
                 1 = Stack became full or overflowed
                 0 = Stack has not become full or overflowed
bit 6            STKUNF: Stack Underflow Flag bit(1)
                 1 = Stack underflow occurred
                 0 = Stack underflow did not occur
bit 5            Unimplemented: Read as ‘0’
bit 4-0          SP<4:0>: Stack Pointer Location bits
Note 1:     Bit 7 and bit 6 are cleared by user software or by a POR.
 2010 Microchip Technology Inc.                                                                        DS41303G-page 67
PIC18F2XK20/4XK20
5.1.2.4        Stack Full and Underflow Resets                  5.1.4        LOOK-UP TABLES IN PROGRAM
Device Resets on stack overflow and stack underflow                          MEMORY
conditions are en abled by se tting the STVR EN bi t in         There may be programming situations that require the
Configuration Register 4L. When STVREN is set, a full           creation of dat a st ructures, or lo ok-up t ables, in
or underflow w ill set the appropriate STKFU L or               program memory. F or P IC18 de vices, l ook-up ta bles
STKUNF bit a nd t hen cau se a de vice R eset. Whe n            can be implemented in two ways:
STVREN is cleared, a full or underflow condition will set
                                                                • Computed GOTO
the appropriate STKFUL or STKUNF bit but not cause
a dev ice R eset. The STKFU L or ST KUNF bi ts a re             • Table Reads
cleared by the user software or a Power-on Reset.
                                                                5.1.4.1        Computed GOTO
5.1.3         FAST REGISTER STACK                               A computed GOTO is accomplished by adding an offset
A fast register stack is provided for the Status, WREG          to the p rogram counter. An e xample is sh own i n
and BSR registers, to provide a “fast return” option for        Example 5-2.
interrupts. The stack for each register is only one level       A loo k-up t able ca n be form ed with an ADDWF PCL
deep and is neither readable nor writable. It is loaded         instruction and a group of RETLW nn instructions. The
with t he c urrent value of t he c orresponding r egister       W register is loaded with an offset into the table before
when the processor vectors for an interrupt. All inter-         executing a call to that table. The first instruction of the
rupt sources will push values into the stack registers.         called routine is the ADDWF PCL instruction. The next
The values in the registers are then loaded back into           instruction executed w ill be one of the RETLW nn
their as sociated re gisters i f th e RETFIE, FAST              instructions that retu rns th e v alue ‘ nn’ t o th e c alling
instruction is used to return from the interrupt.               function.
If both low and high priority interrupts are enabled, the       The of fset va lue (in WREG) s pecifies the num ber of
stack registers cannot be u sed reliably to return from         bytes that the prog ram counter sh ould adv ance and
low priority interrupts. If a high priority interrupt occurs    should be multiples of 2 (LSb = 0).
while servicing a low priority interrupt, the stack register    In thi s m ethod, o nly on e da ta by te may be sto red i n
values s tored by t he l ow pr iority interrupt w ill be        each instruction loc ation and roo m on the retu rn
overwritten. In th ese cases, users must save the key           address stack is required.
registers by software during a low priority interrupt.
If interrupt priority is not used, all interrupts may use the   EXAMPLE 5-2:             COMPUTED GOTO USING
fast register stack fo r ret urns f rom in terrupt. If n o                               AN OFFSET VALUE
interrupts are used, the fast register stack can be used                   MOVF      OFFSET, W
to restore the Status, WREG and BSR registers at the                       CALL      TABLE
end of a subroutine call. To use the fast register stack         ORG       nn00h
for a subroutine call, a CALL label, FAST instruction            TABLE     ADDWF     PCL
must be executed to save the Status, WREG and BSR                          RETLW     nnh
registers to the fas t re gister st ack. A RETURN, FAST                    RETLW     nnh
instruction is then executed to restore these registers                    RETLW     nnh
from the fast register stack.                                              .
                                                                           .
Example 5-1 shows a source code example that uses                          .
the fas t regi ster st ack during a su broutine ca ll an d
return.
                                                                5.1.4.2        Table Reads and Table Writes
EXAMPLE 5-1:             FAST REGISTER STACK                    A better m ethod of storing d ata in pro gram memory
                         CODE EXAMPLE                           allows two bytes of data to be stored in each instruction
CALL SUB1, FAST           ;STATUS, WREG, BSR                    location.
                          ;SAVED IN FAST REGISTER               Look-up table data may be stored two bytes per p ro-
                          ;STACK                                gram word by using table reads and writes. The Table
                                                               Pointer ( TBLPTR) r egister s pecifies the b yte ad dress
          
                                                                and the Table Lat ch (T ABLAT) regi ster con tains the
SUB1     
                                                                data that is read from or w ritten to program memory.
                                                               Data is trans ferred to or from prog ram me mory on e
     RETURN, FAST         ;RESTORE VALUES SAVED                 byte at a time.
                          ;IN FAST REGISTER STACK               Table re ad an d t able w rite o perations are di scussed
                                                                further in Section 6.1 “Table Reads and Table
                                                                Writes”.
DS41303G-page 68                                                                            2010 Microchip Technology Inc.
                                                                         PIC18F2XK20/4XK20
5.2       PIC18 Instruction Cycle                                        5.2.2            INSTRUCTION FLOW/PIPELINING
                                                                         An “Instruction C ycle” co nsists of four Q cy cles: Q1
5.2.1       CLOCKING SCHEME                                              through Q4 . The in struction fetch and ex ecute are
The m icrocontroller clock input, w hether f rom an                      pipelined in such a ma nner that a fetc h t akes one
internal or external source, is internally divided by four               instruction cy cle, w hile the decode and e xecute t ake
to gen erate fou r non -overlapping qua drature c locks                  another in struction cycle. H owever, du e to th e
(Q1, Q2, Q3 and Q4). Internally, the program counter is                  pipelining, each instruction effectively executes in one
incremented on ev ery Q1; the instruction is fet ched                    cycle. If an instruction causes the program counter to
from t he p rogram me mory a nd l atched in to th e                      change (e .g., GOTO), t hen tw o c ycles are required to
instruction regi ster duri ng Q 4. Th e in struction is                  complete the instruction (Example 5-3).
decoded and executed during the following Q1 through                     A fetc h cy cle be gins w ith the Program C ounter (PC )
Q4. The cl ocks an d in struction ex ecution f low a re                  incrementing in Q1.
shown in Figure 5-3.
                                                                         In the execution cycle, the fetched instruction is latched
                                                                         into the Instruction R egister ( IR) in cy cle Q 1. This
                                                                         instruction is the n d ecoded an d ex ecuted d uring th e
                                                                         Q2, Q3 and Q4 cycles. Data memory is read during Q2
                                                                         (operand rea d) and written during Q4 (destination
                                                                         write).
FIGURE 5-3:             CLOCK/INSTRUCTION CYCLE
                        Q1       Q2        Q3    Q4       Q1      Q2     Q3          Q4    Q1       Q2      Q3      Q4
             OSC1
                Q1
                Q2                                                                                                           Internal
                Q3                                                                                                           Phase
                                                                                                                             Clock
                Q4
                PC                    PC                            PC + 2                             PC + 4
      OSC2/CLKOUT
         (RC mode)
                             Execute INST (PC – 2)
                               Fetch INST (PC)                 Execute INST (PC)
                                                               Fetch INST (PC + 2)              Execute INST (PC + 2)
                                                                                                 Fetch INST (PC + 4)
EXAMPLE 5-3:            INSTRUCTION PIPELINE FLOW
                                      TCY0            TCY1          TCY2              TCY3             TCY4                TCY5
 1. MOVLW 55h                      Fetch 1       Execute 1
 2. MOVWF PORTB                                      Fetch 2     Execute 2
 3. BRA    SUB_1                                                   Fetch 3       Execute 3
 4. BSF     PORTA, BIT3 (Forced NOP)                                                 Fetch 4       Flush (NOP)
 5. Instruction @ address SUB_1                                                                   Fetch SUB_1 Execute SUB_1
  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.
 2010 Microchip Technology Inc.                                                                                        DS41303G-page 69
PIC18F2XK20/4XK20
5.2.3       INSTRUCTIONS IN PROGRAM                               The CALL and GOTO ins tructions hav e the abs olute
            MEMORY                                                program memory address             embedded into the
                                                                  instruction. Since instructions are always stored on word
The program m emory is a ddressed in by tes.
                                                                  boundaries, the da ta cont ained in the i nstruction i s a
Instructions are stored as either two bytes or four bytes
                                                                  word address. The word address is written to PC<20:1>,
in program memory. The Least Significant Byte of a n
                                                                  which accesses the des ired b yte a ddress in program
instruction word is always stored in a program memory
                                                                  memory. Instructio n #2 in Figure 5-4 sh ows how the
location with an even address (LSb = 0). To maintain
                                                                  instruction GOTO 0006h i s enc oded in the program
alignment with in struction b oundaries, the PC
                                                                  memory. Program branch instructions, which encode a
increments in steps of 2 and the LSb will always read
                                                                  relative address offset, operate in the same manner. The
‘0’ (see Section 5.1.1 “Program Counter”).
                                                                  offset value stored in a branch instruction represents the
Figure 5-4 shows an example of how instruction words              number of single-word instructions that the PC w ill be
are stored in the program memory.                                 offset by . Section 24.0 “Instruction Set Summary”
                                                                  provides further details of the instruction set.
FIGURE 5-4:             INSTRUCTIONS IN PROGRAM MEMORY
                                                                                        Word Address
                                                              LSB = 1        LSB = 0         
                                 Program Memory                                           000000h
                                 Byte Locations                                         000002h
                                                                                          000004h
                                                                                          000006h
                Instruction 1:   MOVLW       055h              0Fh            55h         000008h
                Instruction 2:   GOTO        0006h             EFh            03h        00000Ah
                                                               F0h            00h        00000Ch
                Instruction 3:   MOVFF       123h, 456h        C1h            23h        00000Eh
                                                               F4h            56h         000010h
                                                                                          000012h
                                                                                          000014h
5.2.4       TWO-WORD INSTRUCTIONS                                 and used by the instruction sequence. If the first word
                                                                  is sk ipped fo r some reason an d the se cond w ord is
The standard PIC18 instruction set has four two-word
                                                                  executed by itself, a NOP is executed instead. This is
instructions: CALL, MOVFF, GOTO a nd LSFR. In al l
                                                                  necessary f or ca ses wh en t he two-word i nstruction is
cases, the second word of th e instruction always has
                                                                  preceded by a conditional instruction that changes the
‘1111’ as its four Most Significant bits; the other 12 bits
                                                                  PC. Example 5-4 shows how this works.
are literal data, usually a data memory address.
The us e of ‘1111’ in the 4 MSbs of an instruction                   Note:     See Section 5.6 “PIC18 Instruction
specifies a sp ecial form of NOP. If th e ins truction i s                     Execution and the Extended Instruc-
executed in proper sequence – i mmediately after the                           tion Set” for information on tw o-word
first w ord – the d ata in the s econd w ord is accessed                       instructions in the extended instruction set.
EXAMPLE 5-4:            TWO-WORD INSTRUCTIONS
 CASE 1:
 Object Code                      Source Code
 0110 0110 0000        0000       TSTFSZ     REG1       ; is RAM location 0?
 1100 0001 0010        0011       MOVFF      REG1, REG2 ; No, skip this word
 1111 0100 0101        0110                             ; Execute this word as a NOP
 0010 0100 0000        0000       ADDWF      REG3       ; continue code
 CASE 2:
 Object Code                      Source Code
 0110 0110 0000        0000       TSTFSZ     REG1       ; is RAM location 0?
 1100 0001 0010        0011       MOVFF      REG1, REG2 ; Yes, execute this word
 1111 0100 0101        0110                             ; 2nd word of instruction
 0010 0100 0000        0000       ADDWF      REG3       ; continue code
DS41303G-page 70                                                                            2010 Microchip Technology Inc.
                                                            PIC18F2XK20/4XK20
5.3       Data Memory Organization                          5.3.1       BANK SELECT REGISTER (BSR)
                                                            Large area s o f da ta m emory req uire an ef ficient
  Note:     The o peration of s ome a spects o f da ta
                                                            addressing sc heme to m ake rap id a ccess to an y
            memory a re c hanged when the PI C18
                                                            address po ssible. I deally, this means that an en tire
            extended in struction set i s en abled. See
                                                            address does not need to be provided for each read or
            Section 5.5 “Data Memory and the
                                                            write operation. For PIC 18 d evices, th is i s accom-
            Extended Instruction Set” f or more
                                                            plished with a RAM banking scheme. This divides the
            information.
                                                            memory space into 16 contiguous banks of 256 bytes.
The data memory in PIC18 devices is implemented as          Depending o n th e i nstruction, each location can b e
static R AM. Each register in the dat a memory has a        addressed directly by its full 12-bit address, or an 8-bit
12-bit address, al lowing up to 409 6 by tes of da ta       low-order address and a 4-bit Bank Pointer.
memory. The memory space is divided into as many as         Most instructions in the PIC18 instruction set make use
16 banks t hat co ntain 2 56 by tes ea ch. Fi gures 5 -5    of the Bank Pointer, known as the Bank Select Register
through 5-7 show the data memory organization for the       (BSR). This SFR holds the 4 Most Significant bits of a
PIC18F2XK20/4XK20 devices.                                  location’s ad dress; the ins truction it self includes the
The data memory contains Special Function Registers         8 Least Significant bits. Only the four lower bits of the
(SFRs) and G eneral Pu rpose Registers (G PRs). Th e        BSR are implemented (BSR<3:0>). The upper four bits
SFRs are used for control and status of the controller      are unu sed; th ey w ill al ways rea d ‘ 0’ and ca nnot be
and peripheral functions, while GPRs are used for data      written to. The BSR can be loaded directly by using the
storage and sc ratchpad op erations i n th e u ser’s        MOVLB instruction.
application. Any read of an unimplemented location will     The va lue of th e BSR ind icates th e ban k i n dat a
read as ‘0’s.                                               memory; the 8 bits in the instruction show the location
The in struction set and a rchitecture all ow op erations   in the bank and can be thought of as an offset from the
across all ba nks. Th e e ntire da ta m emory ma y b e      bank’s l ower b oundary. Th e rel ationship b etween th e
accessed by Direct, Ind irect o r Indexed Add ressing       BSR’s value and the b ank division in data memory is
modes. Addressing modes are discussed later in thi s        shown in Figures 5-5 through 5-7.
subsection.                                                 Since up to 16 registers may share the same low-order
To e nsure t hat c ommonly us ed r egisters (SFRs a nd      address, the user must always be careful to ensure that
select GPRs) can be accessed in a single cycle, PIC18       the proper bank is selected before performing a dat a
devices implement an Access Bank. This is a 256-byte        read or write. For example, writing w hat sh ould be
memory space that provides fast access to SFRs and          program data to an 8-bit address of F9h while the BSR
the lower portion of GPR Bank 0 without using the Bank      is 0Fh will end up resetting the program counter.
Select Register (BSR). Section 5.3.2 “Access Bank”          While any bank can be selected, only those banks that
provides a detailed description of the Access RAM.          are a ctually implemented c an be re ad or written t o.
                                                            Writes to unimplemented ba nks are ign ored, w hile
                                                            reads from unimplemented banks will return ‘0’s. Even
                                                            so, the STATUS register will still be affected as if th e
                                                            operation was successful. The data memory maps in
                                                            Figures 5 -5 th rough 5-7 in dicate w hich b anks a re
                                                            implemented.
                                                            In the co re PIC1 8 in struction se t, on ly the MOVFF
                                                            instruction full y s pecifies the 1 2-bit add ress of th e
                                                            source and target registers. This instruction ignores the
                                                            BSR completely when it executes. All other instructions
                                                            include only the low-order address as an operand and
                                                            must use either the BSR or the Access Bank to locate
                                                            their target registers.
 2010 Microchip Technology Inc.                                                                  DS41303G-page 71
PIC18F2XK20/4XK20
FIGURE 5-5:        DATA MEMORY MAP FOR PIC18F23K20/43K20 DEVICES
                                                             When ‘a’ = 0:
    BSR<3:0>                        Data Memory Map
                                                                 The BSR is ignored an d the
                              00h                     000h       Access Bank is used.
        = 0000                       Access RAM       05Fh
                    Bank 0                                       The first 96 bytes are
                                         GPR          060h
                              FFh                     0FFh       general purpose RAM
                              00h                     100h       (from Bank 0).
        = 0001
                    Bank 1               GPR                     The second 1 60 b ytes ar e
                              FFh                     1FFh       Special Fu nction R egisters
        = 0010                00h                     200h       (from Bank 15).
                    Bank 2
                              FFh                     2FFh   When ‘a’ = 1:
        = 0011                00h                     300h
                    Bank 3                                       The BSR specifies the Bank
                                                                 used by the instruction.
                              FFh                     3FFh
                              00h                     400h
        = 0100      Bank 4
                              FFh                     4FFh
        = 0101                00h                     500h
                    Bank 5
                              FFh                     5FFh
        = 0110                00h                     600h
                    Bank 6
                                                                       Access Bank
                              FFh                     6FFh
        = 0111                00h                     700h                                00h
                    Bank 7                                           Access RAM Low
                                                                                     5Fh
                              FFh                     7FFh           Access RAM High 60h
        = 1000                00h                     800h               (SFRs)
                    Bank 8                                                           FFh
                              FFh                     8FFh
        = 1001                00h       Unused        900h
                    Bank 9             Read 00h
                              FFh                     9FFh
                              00h                     A00h
        = 1010
                    Bank 10
                              FFh                     AFFh
        = 1011                00h                     B00h
                    Bank 11
                              FFh                     BFFh
        = 1100                00h                     C00h
                    Bank 12
                            FFh                       CFFh
        = 1101                                        D00h
                    Bank 13 00h
                              FFh                     DFFh
                              00h                     E00h
        = 1110
                    Bank 14
                              FFh                     EFFh
                              00h       Unused        F00h
        = 1111                                        F5Fh
                    Bank 15
                                         SFR          F60h
                              FFh                     FFFh
DS41303G-page 72                                                    2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
FIGURE 5-6:            DATA MEMORY MAP FOR PIC18F24K20/44K20 DEVICES
                                                                   When ‘a’ = 0:
     BSR<3:0>                            Data Memory Map
                                                                       The BSR is ignored an d the
                                   00h                     000h        Access Bank is used.
         = 0000                           Access RAM       05Fh
                         Bank 0                                        The first 96 bytes are
                                              GPR          060h
                                   FFh                     0FFh        general purpose RAM
                                   00h                     100h        (from Bank 0).
         = 0001
                         Bank 1               GPR                      The second 1 60 b ytes ar e
                                   FFh                     1FFh        Special Fu nction R egisters
         = 0010                    00h                     200h        (from Bank 15).
                         Bank 2               GPR
                                   FFh                     2FFh    When ‘a’ = 1:
         = 0011                    00h                     300h
                         Bank 3                                        The BSR specifies the Bank
                                                                       used by the instruction.
                                   FFh                     3FFh
                                   00h                     400h
         = 0100          Bank 4
                                   FFh                     4FFh
         = 0101                    00h                     500h
                         Bank 5
                                   FFh                     5FFh
         = 0110                    00h                     600h
                         Bank 6
                                                                             Access Bank
                                   FFh                     6FFh
         = 0111                    00h                     700h                                 00h
                         Bank 7                                            Access RAM Low
                                                                                           5Fh
                                   FFh                     7FFh            Access RAM High 60h
         = 1000                    00h                     800h                (SFRs)
                         Bank 8                                                            FFh
                                   FFh                     8FFh
         = 1001                    00h       Unused        900h
                         Bank 9             Read 00h
                                   FFh                     9FFh
                                   00h                     A00h
         = 1010
                         Bank 10
                                   FFh                     AFFh
         = 1011                    00h                     B00h
                         Bank 11
                                   FFh                     BFFh
         = 1100                    00h                     C00h
                         Bank 12
                                 FFh                       CFFh
         = 1101                                            D00h
                         Bank 13 00h
                                   FFh                     DFFh
                                   00h                     E00h
         = 1110
                         Bank 14
                                   FFh                     EFFh
                                   00h       Unused        F00h
         = 1111                                            F5Fh
                         Bank 15
                                              SFR          F60h
                                   FFh                     FFFh
 2010 Microchip Technology Inc.                                                     DS41303G-page 73
PIC18F2XK20/4XK20
FIGURE 5-7:        DATA MEMORY MAP FOR PIC18F25K20/45K20 DEVICES
                                                             When ‘a’ = 0:
    BSR<3:0>                        Data Memory Map
                                                                 The BSR is ignored an d the
                              00h                     000h       Access Bank is used.
        = 0000                       Access RAM       05Fh
                    Bank 0                                       The first 96 bytes are
                                         GPR          060h
                              FFh                     0FFh       general purpose RAM
                              00h                     100h       (from Bank 0).
        = 0001
                    Bank 1               GPR                     The second 1 60 b ytes ar e
                              FFh                     1FFh       Special Fu nction R egisters
        = 0010                00h                     200h       (from Bank 15).
                    Bank 2               GPR
                              FFh                     2FFh   When ‘a’ = 1:
        = 0011                00h                     300h
                    Bank 3                                       The BSR specifies the Bank
                                         GPR
                                                                 used by the instruction.
                              FFh                     3FFh
                              00h                     400h
        = 0100      Bank 4               GPR
                              FFh                     4FFh
        = 0101                00h                     500h
                    Bank 5               GPR
                              FFh                     5FFh
        = 0110                00h                     600h
                    Bank 6
                                                                       Access Bank
                              FFh                     6FFh
        = 0111                00h                     700h                                00h
                    Bank 7                                           Access RAM Low
                                                                                     5Fh
                              FFh                     7FFh           Access RAM High 60h
        = 1000                00h                     800h               (SFRs)
                    Bank 8                                                           FFh
                              FFh                     8FFh
        = 1001                00h                     900h
                    Bank 9
                              FFh                     9FFh
                              00h       Unused        A00h
        = 1010
                    Bank 10            Read 00h
                              FFh                     AFFh
        = 1011                00h                     B00h
                    Bank 11
                              FFh                     BFFh
        = 1100                00h                     C00h
                    Bank 12
                            FFh                       CFFh
        = 1101                                        D00h
                    Bank 13 00h
                              FFh                     DFFh
                              00h                     E00h
        = 1110
                    Bank 14
                              FFh                     EFFh
                              00h       Unused        F00h
        = 1111                                        F5Fh
                    Bank 15
                                         SFR          F60h
                              FFh                     FFFh
DS41303G-page 74                                                    2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
FIGURE 5-8:            DATA MEMORY MAP FOR PIC18F26K20/46K20 DEVICES
                                                                   When ‘a’ = 0:
     BSR<3:0>                            Data Memory Map
                                                                       The BSR is ignored an d the
                                   00h                     000h        Access Bank is used.
         = 0000                            Access RAM      05Fh
                         Bank 0                                        The first 96 bytes are
                                              GPR          060h
                                   FFh                     0FFh        general purpose RAM
                                   00h                     100h        (from Bank 0).
         = 0001
                         Bank 1               GPR                      The second 1 60 b ytes ar e
                                   FFh                     1FFh        Special Fu nction R egisters
         = 0010                    00h                     200h        (from Bank 15).
                         Bank 2               GPR
                                   FFh                     2FFh    When ‘a’ = 1:
         = 0011                    00h                     300h
                         Bank 3                                        The BSR specifies the Bank
                                              GPR
                                                                       used by the instruction.
                                   FFh                     3FFh
                                   00h                     400h
         = 0100          Bank 4               GPR
                                   FFh                     4FFh
         = 0101                    00h                     500h
                         Bank 5               GPR
                                   FFh                     5FFh
         = 0110                    00h                     600h
                         Bank 6               GPR
                                                                             Access Bank
                                   FFh                     6FFh
         = 0111                    00h                     700h                                 00h
                         Bank 7               GPR                          Access RAM Low
                                                                                           5Fh
                                   FFh                     7FFh            Access RAM High 60h
         = 1000                    00h                     800h                (SFRs)
                         Bank 8                                                            FFh
                                              GPR
                                   FFh                     8FFh
         = 1001                    00h                     900h
                         Bank 9               GPR
                                   FFh                     9FFh
                                   00h                     A00h
         = 1010
                         Bank 10              GPR
                                   FFh                     AFFh
         = 1011                    00h                     B00h
                         Bank 11              GPR
                                   FFh                     BFFh
         = 1100                    00h                     C00h
                         Bank 12              GPR
                                 FFh                       CFFh
         = 1101                                            D00h
                         Bank 13 00h          GPR
                                   FFh                     DFFh
                                   00h                     E00h
         = 1110
                         Bank 14              GPR
                                   FFh                     EFFh
                                   00h        GPR          F00h
         = 1111                                            F5Fh
                         Bank 15
                                              SFR          F60h
                                   FFh                     FFFh
 2010 Microchip Technology Inc.                                                     DS41303G-page 75
PIC18F2XK20/4XK20
FIGURE 5-9:             USE OF THE BANK SELECT REGISTER (DIRECT ADDRESSING)
                     BSR(1)                          Data Memory                              From Opcode(2)
        7                             0     000h                        00h          7                              0
        0   0    0   0   0    0   1   1                  Bank 0                       1   1    1   1   1    1   1   1
                                                                        FFh
                                            100h                        00h
                                                         Bank 1
       Bank Select(2)                       200h                        FFh
                                                                        00h
                                                         Bank 2
                                            300h                        FFh
                                                                        00h
                                                         Bank 3
                                                         through
                                                         Bank 13
                                                                        FFh
                                            E00h
                                                                        00h
                                                         Bank 14
                                            F00h                        FFh
                                                                        00h
                                                         Bank 15
                                            FFFh                        FFh
      Note 1:    The Access RAM bit of the instruction can be used to force an override of the selected bank (BSR<3:0>) to
                 the registers of the Access Bank.
            2:   The MOVFF instruction embeds the entire 12-bit address in the instruction.
DS41303G-page 76                                                                               2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
5.3.2        ACCESS BANK                                       5.3.3       GENERAL PURPOSE REGISTER
While the us e of the BSR w ith an em bedded 8-b it                        FILE
address a llows users to ad dress th e e ntire range of        PIC18 devices may have banked memory in the G PR
data memory, it also means that the user must always           area. This is data RAM, which is available for use by all
ensure th at th e co rrect ban k i s s elected. O therwise,    instructions. G PRs st art at the bottom    of B ank 0
data may be read from or written to the wrong location.        (address 000h) and grow upwards towards the bottom of
This can be disastrous if a GPR is the intended target         the SFR area. GPR s are not initialized by a P ower-on
of an op eration, b ut a n SF R is w ritten to i nstead.       Reset and are unchanged on all other Resets.
Verifying an d/or ch anging the BSR for ea ch read or
write to data memory can become very inefficient.              5.3.4       SPECIAL FUNCTION REGISTERS
To streamline access for the most commonly used data           The Special Fun ction Registers (SFR s) are re gisters
memory locations, the data memory is configured with           used by the CPU and peripheral modules for controlling
an Access Bank , w hich all ows us ers to access a             the desired operation of the device. These registers are
mapped block of me mory w ithout sp ecifying a BSR.            implemented as s tatic RAM. SFR s s tart at the to p of
The Access Bank consists of the first 96 bytes of mem-         data memory (FFFh) and extend downward to occupy
ory (00h-5Fh) in Bank 0 and the last 160 bytes of mem-         the t op portion of Bank 1 5 (F 60h to FFF h). A list of
ory (60h-FFh) in Block 15. The lower half is known as          these registers is given in Table 5-1 and Table 5-2.
the “Ac cess RAM” an d is co mposed of GPRs. Thi s             The SFRs c an b e classified i nto t wo sets: th ose
upper hal f is al so w here the dev ice’s SFR s a re           associated w ith the “c ore” de vice functionality (ALU ,
mapped. These two areas are mapped contiguously in             Resets a nd in terrupts) a nd those related to th e
the Ac cess Ba nk and ca n b e a ddressed in a l inear         peripheral functions. The Reset and interrupt registers
fashion by an 8-bit address (Figures 5-5 through 5-7).         are des cribed in their res pective c hapters, w hile th e
The A ccess B ank is used by core P IC18 instructions          ALU’s ST ATUS re gister is de scribed later i n this
that include the Access RAM bit (the ‘a’ parameter in          section. R egisters rela ted to the ope ration o f a
the instruction). When ‘a’ is equal to ‘1’, the instruction    peripheral feature are described in the chapter for that
uses the BSR a nd th e 8 -bit a ddress i ncluded in th e       peripheral.
opcode for the da ta memory address. When ‘a’ is ‘ 0’,         The SF Rs a re ty pically d istributed am ong th e
however, th e in struction i s f orced t o us e t he A ccess   peripherals whose functions they control. Unused SFR
Bank add ress m ap; the cu rrent va lue of th e BSR i s        locations are unimplemented and read as ‘0’s.
ignored entirely.
Using this “forced” addressing allows the instruction to
operate o n a da ta address i n a s ingle cycle, w ithout
updating the BSR first. For 8-bit addresses of 60h and
above, this means that users can evaluate and operate
on SFRs more efficiently. The Access RAM below 60h
is a good place for data values that the user might need
to ac cess ra pidly, s uch a s immediate c omputational
results or co mmon pr ogram variables. Access RAM
also allows for f aster and more code efficient context
saving and switching of variables.
The ma pping of the Access Bank is slightly different
when the extended instruction set is enabled (XINST
Configuration bit = 1). This is discussed in more detail
in Section 5.5.3 “Mapping the Access Bank in
Indexed Literal Offset Mode”.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 77
PIC18F2XK20/4XK20
TABLE 5-1:         SPECIAL FUNCTION REGISTER MAP FOR PIC18F2XK20/4XK20 DEVICES
 Address           Name          Address    Name         Address        Name              Address        Name
      FFFh         TOSU             FD7h    TMR0H             FAFh     SPBRG                  F87h        —(2)
      FFEh         TOSH             FD6h    TMR0L             FAEh     RCREG                  F86h        —(2)
      FFDh         TOSL             FD5h    T0CON            FADh      TXREG                  F85h        —(2)
      FFCh     STKPTR               FD4h     —(2)            FACh       TXSTA                 F84h       PORTE
      FFBh      PCLATU              FD3h   OSCCON             FABh      RCSTA                 F83h      PORTD(3)
      FFAh      PCLATH              FD2h   HLVDCON            FAAh    EEADRH(4)               F82h       PORTC
      FF9h         PCL              FD1h   WDTCON             FA9h     EEADR                  F81h       PORTB
      FF8h     TBLPTRU              FD0h    RCON              FA8h     EEDATA                 F80h       PORTA
      FF7h     TBLPTRH              FCFh    TMR1H             FA7h    EECON2(1)               F7Fh      ANSELH
      FF6h     TBLPTRL              FCEh    TMR1L             FA6h     EECON1                F7Eh        ANSEL
      FF5h      TABLAT              FCDh    T1CON             FA5h       —(2)                F7Dh         IOCB
      FF4h      PRODH               FCCh    TMR2              FA4h       —(2)                F7Ch        WPUB
      FF3h      PRODL               FCBh     PR2              FA3h       —(2)                F7Bh       CM1CON0
      FF2h      INTCON              FCAh    T2CON             FA2h       IPR2                F7Ah       CM2CON0
      FF1h     INTCON2              FC9h   SSPBUF             FA1h       PIR2                 F79h      CM2CON1
      FF0h     INTCON3              FC8h   SSPADD             FA0h       PIE2                 F78h      SLRCON
      FEFh      INDF0(1) F           C7h   SSPSTAT            F9Fh       IPR1                 F77h      SSPMSK
      FEEh POSTINC0        (1)
                                    FC6h   SSPCON1            F9Eh       PIR1                 F76h        —(2)
      FEDh   POSTDEC0(1)            FC5h   SSPCON2            F9Dh       PIE1                 F75h        —(2)
      FECh    PREINC0(1)            FC4h   ADRESH             F9Ch       —(2)                 F74h        —(2)
      FEBh    PLUSW0(1)             FC3h   ADRESL             F9Bh    OSCTUNE                 F73h        —(2)
      FEAh      FSR0H               FC2h   ADCON0             F9Ah       —(2)                 F72h        —(2)
      FE9h         FSR0L            FC1h   ADCON1             F99h       —(2)                 F71h        —(2)
      FE8h         WREG             FC0h   ADCON2             F98h       —(2)                 F70h        —(2)
      FE7h      INDF1(1)            FBFh   CCPR1H             F97h       —(2)                 F6Fh        —(2)
      FE6h POSTINC1(1)              FBEh   CCPR1L             F96h     TRISE(3)              F6Eh         —(2)
      FE5h   POSTDEC1(1)            FBDh   CCP1CON            F95h     TRISD(3)              F6Dh         —(2)
      FE4h    PREINC1(1)            FBCh   CCPR2H             F94h      TRISC                F6Ch         —(2)
      FE3h    PLUSW1(1)             FBBh   CCPR2L             F93h      TRISB                F6Bh         —(2)
      FE2h      FSR1H               FBAh   CCP2CON            F92h      TRISA                F6Ah         —(2)
      FE1h         FSR1L            FB9h   PSTRCON            F91h       — (2)
                                                                                              F69h        —(2)
      FE0h         BSR              FB8h   BAUDCON            F90h       —(2)                 F68h        —(2)
      FDFh      INDF2(1)   F         B7h   PWM1CON            F8Fh       —(2)                 F67h        —(2)
      FDEh POSTINC2(1)              FB6h   ECCP1AS            F8Eh       —(2)                 F66h        —(2)
     FDDh POSTDEC2         (1)
                                    FB5h   CVRCON             F8Dh     LATE   (3)
                                                                                    F65             h     —(2)
     FDCh     PREINC2(1)            FB4h   CVRCON2            F8Ch     LATD(3) F64                  h     —(2)
      FDBh    PLUSW2(1)             FB3h    TMR3H             F8Bh      LATC                  F63h        —(2)
      FDAh      FSR2H               FB2h    TMR3L             F8Ah      LATB                  F62h        —(2)
      FD9h         FSR2L            FB1h    T3CON             F89h       LATA                 F61h        —(2)
      FD8h      STATUS              FB0h   SPBRGH             F88h       —(2)                 F60h        —(2)
Note 1:    This is not a physical register.
     2:    Unimplemented registers are read as ‘0’.
     3:    This register is not available on PIC18F2XK20 devices.
     4:    This register is only implemented in the PIC18F46K20 and PIC18F26K20 devices.
DS41303G-page 78                                                                      2010 Microchip Technology Inc.
                                                                                  PIC18F2XK20/4XK20
TABLE 5-2:             REGISTER FILE SUMMARY (PIC18F2XK20/4XK20)
                                                                                                                                Value on      Details
 File Name       Bit 7          Bit 6         Bit 5         Bit 4         Bit 3         Bit 2         Bit 1          Bit 0
                                                                                                                               POR, BOR      on page:
TOSU               —             —             —        Top-of-Stack Upper Byte (TOS<20:16>)                                   ---0 0000       59, 66
TOSH         Top-of-Stack, High Byte (TOS<15:8>)                                                                               0000 0000       59, 66
TOSL         Top-of-Stack, Low Byte (TOS<7:0>)                                                                                 0000 0000       59, 66
STKPTR         STKFUL        STKUNF            —            SP4           SP3            SP2           SP1           SP0       00-0 0000       59, 67
PCLATU             —             —             —        Holding Register for PC<20:16>                                         ---0 0000       59, 66
PCLATH       Holding Register for PC<15:8>                                                                                     0000 0000       59, 66
PCL          PC, Low Byte (PC<7:0>)                                                                                            0000 0000       59, 66
TBLPTRU            —             —           bit 21     Program Memory Table Pointer Upper Byte (TBLPTR<20:16>)                --00 0000       59, 92
TBLPTRH      Program Memory Table Pointer, High Byte (TBLPTR<15:8>)                                                            0000 0000       59, 92
TBLPTRL      Program Memory Table Pointer, Low Byte (TBLPTR<7:0>)                                                              0000 0000       59, 92
TABLAT       Program Memory Table Latch                                                                                        0000 0000       59, 92
PRODH        Product Register, High Byte                                                                                       xxxx xxxx      59, 105
PRODL        Product Register, Low Byte                                                                                        xxxx xxxx      59, 105
INTCON         GIE/GIEH     PEIE/GIEL       TMR0IE         INT0IE         RBIE         TMR0IF        INT0IF          RBIF      0000 000x      59, 109
INTCON2         RBPU         INTEDG0       INTEDG1       INTEDG2           —          TMR0IP            —           RBIP       1111 -1-1      59, 110
INTCON3         INT2IP        INT1IP           —           INT2IE        INT1IE           —          INT2IF         INT1IF     11-0 0-00      59, 111
INDF0        Uses contents of FSR0 to address data memory – value of FSR0 not changed (not a physical register)                    N/A         59, 84
POSTINC0     Uses contents of FSR0 to address data memory – value of FSR0 post-incremented (not a physical register)               N/A         59, 84
POSTDEC0     Uses contents of FSR0 to address data memory – value of FSR0 post-decremented (not a physical register)               N/A         59, 84
PREINC0      Uses contents of FSR0 to address data memory – value of FSR0 pre-incremented (not a physical register)                N/A         59, 84
PLUSW0       Uses contents of FSR0 to address data memory – value of FSR0 offset by W (not a physical register) –                  N/A         59, 84
FSR0H              —             —             —             —        Indirect Data Memory Address Pointer 0, High Byte        ---- 0000       59, 84
FSR0L        Indirect Data Memory Address Pointer 0, Low Byte                                                                  xxxx xxxx       59, 84
WREG         Working Register                                                                                                  xxxx xxxx         59
INDF1        Uses contents of FSR1 to address data memory – value of FSR1 not changed (not a physical register)                    N/A         59, 84
POSTINC1     Uses contents of FSR1 to address data memory – value of FSR1 post-incremented (not a physical register)               N/A         59, 84
POSTDEC1     Uses contents of FSR1 to address data memory – value of FSR1 post-decremented (not a physical register)               N/A         59, 84
PREINC1      Uses contents of FSR1 to address data memory – value of FSR1 pre-incremented (not a physical register)                N/A         59, 84
PLUSW1       Uses contents of FSR1 to address data memory – value of FSR1 offset by W (not a physical register) – value of         N/A         59, 84
FSR1H              —             —             —             —        Indirect Data Memory Address Pointer 1, High Byte        ---- 0000       60, 84
FSR1L        Indirect Data Memory Address Pointer 1, Low Byte                                                                  xxxx xxxx       60, 84
BSR                —             —             —             —        Bank Select Register                                     ---- 0000       60, 71
INDF2        Uses contents of FSR2 to address data memory – value of FSR2 not changed (not a physical register)                    N/A         60, 84
POSTINC2     Uses contents of FSR2 to address data memory – value of FSR2 post-incremented (not a physical register)               N/A         60, 84
POSTDEC2     Uses contents of FSR2 to address data memory – value of FSR2 post-decremented (not a physical register)               N/A         60, 84
PREINC2      Uses contents of FSR2 to address data memory – value of FSR2 pre-incremented (not a physical register)                N/A         60, 84
PLUSW2       Uses contents of FSR2 to address data memory – value of FSR2 offset by W (not a physical register) – value of         N/A         60, 84
FSR2H              —             —             —             —        Indirect Data Memory Address Pointer 2, High Byte        ---- 0000       60, 84
FSR2L        Indirect Data Memory Address Pointer 2, Low Byte                                                                  xxxx xxxx       60, 84
STATUS             —             —             —             N             OV             Z            DC             C        ---x xxxx       60, 82
Legend:      x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1:      The SBOREN bit is only available when the BOREN<1:0> Configuration bits = 01; otherwise it is disabled and reads as ‘0’. See
             Section 4.4 “Brown-out Reset (BOR)”.
        2:   These registers and/or bits are not implemented on 28-pin devices and are read as ‘0’. Reset values are shown for 40/44-pin devices;
             individual unimplemented bits should be interpreted as ‘-’.
        3:   The PLLEN bit is only available in specific oscillator configuration; otherwise it is disabled and reads as ‘0’. See Section 2.6.2 “PLL in
             HFINTOSC Modes”.
        4:   The RE3 bit is only available when Master Clear Reset is disabled (MCLRE Configuration bit = 0). Otherwise, RE3 reads as ‘0’. This bit is
             read-only.
        5:   RA6/RA7 and their associated latch and direction bits are individually configured as port pins based on various primary oscillator modes.
             When disabled, these bits read as ‘0’.
        6:   All bits of the ANSELH register initialize to ‘0’ if the PBADEN bit of CONFIG3H is ‘0’.
        7:   This register is only implemented in the PIC18F46K20 and PIC18F26K20 devices.
 2010 Microchip Technology Inc.                                                                                                DS41303G-page 79
PIC18F2XK20/4XK20
TABLE 5-2:             REGISTER FILE SUMMARY (PIC18F2XK20/4XK20) (CONTINUED)
                                                                                                                                Value on      Details
 File Name       Bit 7          Bit 6         Bit 5         Bit 4         Bit 3         Bit 2         Bit 1          Bit 0
                                                                                                                               POR, BOR      on page:
TMR0H        Timer0 Register, High Byte                                                                                        0000 0000      60, 157
TMR0L        Timer0 Register, Low Byte                                                                                         xxxx xxxx      60, 157
T0CON          TMR0ON          T08BIT         T0CS         T0SE           PSA          T0PS2         T0PS1          T0PS0      1111 1111      60, 155
OSCCON          IDLEN          IRCF2          IRCF1        IRCF0         OSTS           IOFS          SCS1          SCS0       0011 qq00       29, 60
HLVDCON       VDIRMAG            —            IRVST       HLVDEN        HLVDL3        HLVDL2         HLVDL1        HLVDL0      0-00 0101      60, 293
WDTCON             —             —             —             —             —              —             —         SWDTEN        --- ---0      60, 309
RCON             IPEN       SBOREN(1)          —             RI            TO            PD           POR            BOR       0q-1 11q0      51, 58,
                                                                                                                                               118
TMR1H        Timer1 Register, High Byte                                                                                        xxxx xxxx      60, 165
TMR1L        Timer1 Register, Low Bytes                                                                                        xxxx xxxx      60, 165
T1CON            RD16          T1RUN       T1CKPS1       T1CKPS0       T1OSCEN        T1SYNC        TMR1CS        TMR1ON       0000 0000      60, 159
TMR2         Timer2 Register                                                                                                   0000 0000      60, 168
PR2          Timer2 Period Register                                                                                            1111 1111      60, 168
T2CON              —        T2OUTPS3      T2OUTPS2      T2OUTPS1       T2OUTPS0       TMR2ON        T2CKPS1       T2CKPS0      -000 0000      60, 167
SSPBUF       SSP Receive Buffer/Transmit Register                                                                              xxxx xxxx      60, 201,
                                                                                                                                                202
SSPADD       SSP Address Register in I2C™ Slave Mode. SSP Baud Rate Reload Register in I2C Master Mode.                        0000 0000      60, 202
SSPSTAT          SMP            CKE            D/A            P             S           R/W            UA             BF       0000 0000      60, 194,
                                                                                                                                                204
SSPCON1         WCOL           SSPOV         SSPEN          CKP          SSPM3         SSPM2         SSPM1         SSPM0       0000 0000      60, 195,
                                                                                                                                                205
SSPCON2         GCEN         ACKSTAT         ACKDT        ACKEN          RCEN           PEN           RSEN           SEN       0000 0000      60, 206
ADRESH       A/D Result Register, High Byte                                                                                    xxxx xxxx      61, 277
ADRESL       A/D Result Register, Low Byte                                                                                     xxxx xxxx      61, 277
ADCON0             —             —            CHS3         CHS2          CHS1           CHS0       GO/DONE          ADON       --00 0000      61, 271
ADCON1             —             —           VCFG1        VCFG0            —              —             —             —        --00 ----      59, 272
ADCON2          ADFM             —           ACQT2        ACQT1          ACQT0         ADCS2         ADCS1         ADCS0       0-00 0000      61, 273
CCPR1H       Capture/Compare/PWM Register 1, High Byte                                                                         xxxx xxxx      61, 144
CCPR1L       Capture/Compare/PWM Register 1, Low Byte                                                                          xxxx xxxx      61, 144
CCP1CON P1         M1          P1M0           DC1B1        DC1B0        CCP1M3        CCP1M2        CCP1M1        CCP1M0       0000 0000      61, 173
CCPR2H       Capture/Compare/PWM Register 2, High Byte                                                                         xxxx xxxx      61, 144
CCPR2L       Capture/Compare/PWM Register 2, Low Byte                                                                          xxxx xxxx      61, 144
CCP2CON            —             —           DC2B1         DC2B0        CCP2M3        CCP2M2        CCP2M1        CCP2M0       --00 0000      61, 143
PSTRCON            —             —             —         STRSYNC         STRD           STRC          STRB          STRA       ---0 0001      61, 187
BAUDCON        ABDOVF          RCIDL         DTRXP        CKTXP          BRG16            —           WUE          ABDEN       0100 0-00      61, 248
PWM1CON         PRSEN          PDC6           PDC5         PDC4          PDC3           PDC2          PDC1          PDC0       0000 0000      61, 186
ECCP1AS       ECCPASE        ECCPAS2       ECCPAS1       ECCPAS0        PSSAC1        PSSAC0        PSSBD1         PSSBD0      0000 0000      61, 183
CVRCON          CVREN          CVROE          CVRR        CVRSS          CVR3           CVR2          CVR1          CVR0       0000 0000      61, 291
CVRCON2         FVREN          FVRST           —             —             —              —             —             —        00-- ----      61, 292
TMR3H        Timer3 Register, High Byte                                                                                        xxxx xxxx      61, 172
TMR3L        Timer3 Register, Low Byte                                                                                         xxxx xxxx      61, 172
T3CON            RD16          T3CCP2      T3CKPS1       T3CKPS0        T3CCP1        T3SYNC        TMR3CS        TMR3ON       0000 0000      61, 169
Legend:      x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1:      The SBOREN bit is only available when the BOREN<1:0> Configuration bits = 01; otherwise it is disabled and reads as ‘0’. See
             Section 4.4 “Brown-out Reset (BOR)”.
        2:   These registers and/or bits are not implemented on 28-pin devices and are read as ‘0’. Reset values are shown for 40/44-pin devices;
             individual unimplemented bits should be interpreted as ‘-’.
        3:   The PLLEN bit is only available in specific oscillator configuration; otherwise it is disabled and reads as ‘0’. See Section 2.6.2 “PLL in
             HFINTOSC Modes”.
        4:   The RE3 bit is only available when Master Clear Reset is disabled (MCLRE Configuration bit = 0). Otherwise, RE3 reads as ‘0’. This bit is
             read-only.
        5:   RA6/RA7 and their associated latch and direction bits are individually configured as port pins based on various primary oscillator modes.
             When disabled, these bits read as ‘0’.
        6:   All bits of the ANSELH register initialize to ‘0’ if the PBADEN bit of CONFIG3H is ‘0’.
        7:   This register is only implemented in the PIC18F46K20 and PIC18F26K20 devices.
DS41303G-page 80                                                                                                2010 Microchip Technology Inc.
                                                                                    PIC18F2XK20/4XK20
TABLE 5-2:               REGISTER FILE SUMMARY (PIC18F2XK20/4XK20) (CONTINUED)
                                                                                                                                  Value on      Details
 File Name         Bit 7         Bit 6          Bit 5         Bit 4         Bit 3         Bit 2         Bit 1          Bit 0
                                                                                                                                 POR, BOR      on page:
SPBRGH         EUSART Baud Rate Generator Register, High Byte                                                                    0000 0000      61, 241
SPBRG          EUSART Baud Rate Generator Register, Low Byte                                                                     0000 0000      61, 241
RCREG          EUSART Receive Register                                                                                           0000 0000      61, 238
TXREG          EUSART Transmit Register                                                                                          0000 0000      61, 237
TXSTA             CSRC            TX9          TXEN          SYNC          SENDB         BRGH           TRMT           TX9D      0000 0010      61, 246
RCSTA              SPEN           RX9          SREN          CREN         ADDEN           FERR          OERR           RX9D      0000 000x      61, 247
EEADR            EEADR7        EEADR6        EEADR5         EEADR4        EEADR3        EEADR2        EEADR1         EEADR0      0000 0000 61, 90, 99
EEADRH(7)            —             —             —             —             —              —         EEADR9         EEADR8      ---- --00 61, 90, 99
EEDATA         EEPROM Data Register                                                                                              0000 0000 61, 90, 99
EECON2         EEPROM Control Register 2 (not a physical register)                                                               0000 0000 61, 90, 99
EECON1            EEPGD          CFGS            —           FREE         WRERR          WREN            WR            RD        xx-0 x000 61, 91, 99
IPR2             OSCFIP          C1IP           C2IP          EEIP         BCLIP         HLVDIP        TMR3IP        CCP2IP      1111 1111      62, 117
PIR2             OSCFIF          C1IF           C2IF          EEIF         BCLIF         HLVDIF        TMR3IF        CCP2IF      0000 0000      62, 113
PIE2             OSCFIE          C1IE           C2IE          EEIE         BCLIE         HLVDIE        TMR3IE        CCP2IE      0000 0000      62, 115
IPR1             PSPIP(2)        ADIP          RCIP           TXIP         SSPIP         CCP1IP        TMR2IP        TMR1IP      1111 1111      62, 116
PIR1             PSPIF(2)        ADIF          RCIF           TXIF         SSPIF         CCP1IF        TMR2IF        TMR1IF      0000 0000      62, 112
PIE1             PSPIE(2)        ADIE          RCIE           TXIE         SSPIE         CCP1IE        TMR2IE        TMR1IE      0000 0000      62, 114
OSCTUNE          INTSRC        PLLEN(3)        TUN5          TUN4          TUN3           TUN2          TUN1           TUN0      0q00 0000       33, 62
TRISE(2)            IBF           OBF          IBOV        PSPMODE           —           TRISE2        TRISE1        TRISE0      0000 -111      62, 134
TRISD(2)       PORTD Data Direction Control Register                                                                             1111 1111      62, 130
TRISC          PORTC Data Direction Control Register                                                                             1111 1111      62, 127
TRISB          PORTB Data Direction Control Register                                                                             1111 1111      62, 124
TRISA            TRISA7(5)     TRISA6(5)    Data Direction Control Register for PORTA                                            1111 1111      62, 121
LATE(2)              —             —             —             —             —        PORTE Data Latch Register                  ---- -xxx      62, 133
                                                                                      (Read and Write to Data Latch)
LATD(2)        PORTD Data Latch Register (Read and Write to Data Latch)                                                          xxxx xxxx      62, 130
LATC           PORTC Data Latch Register (Read and Write to Data Latch)                                                          xxxx xxxx      62, 127
LATB           PORTB Data Latch Register (Read and Write to Data Latch)                                                          xxxx xxxx      62, 124
LATA             LATA7(5)      LATA6(5)     PORTA Data Latch Register (Read and Write to Data Latch)                             xxxx xxxx      62, 121
PORTE                —             —             —             —           RE3(4)        RE2(2)         RE1(2)        RE0(2)     ---- x000      62, 133
PORTD(2)           RD7            RD6           RD5           RD4           RD3           RD2            RD1           RD0       xxxx xxxx      62, 130
PORTC              RC7            RC6           RC5           RC4           RC3           RC2            RC1           RC0       xxxx xxxx      62, 127
PORTB              RB7            RB6           RB5           RB4           RB3           RB2            RB1           RB0       xxx0 0000      62, 124
PORTA             RA7(5)         RA6(5)         RA5           RA4           RA3           RA2            RA1           RA0       xx0x 0000      62, 121
ANSELH(6)            —             —             —           ANS12         ANS11         ANS10          ANS9           ANS8      ---1 1111      62, 137
ANSEL             ANS7(2)       ANS6(2)       ANS5(2)        ANS4          ANS3           ANS2          ANS1           ANS0      1111 1111      62, 136
IOCB              IOCB7         IOCB6          IOCB5         IOCB4           —              —             —             —        0000 ----      62, 124
WPUB              WPUB7         WPUB6         WPUB5         WPUB4         WPUB3          WPUB2         WPUB1         WPUB0       1111 1111      62, 124
CM1CON0           C1ON          C1OUT          C1OE          C1POL         C1SP           C1R          C1CH1         C1CH0       0000 0000      62, 284
CM2CON0           C2ON          C2OUT          C2OE          C2POL         C2SP           C2R          C2CH1         C2CH0       0000 0000      62, 285
CM2CON1          MC1OUT        MC2OUT         C1RSEL        C2RSEL           —              —             —             —        0000 ----      63, 287
SLRCON               —             —             —          SLRE(2)       SLRD(2)         SLRC          SLRB           SLRA      ---1 1111      63, 138
SSPMSK             MSK7          MSK6          MSK5          MSK4          MSK3           MSK2          MSK1           MSK0      1111 1111      63, 213
Legend:        x = unknown, u = unchanged, — = unimplemented, q = value depends on condition
Note 1:        The SBOREN bit is only available when the BOREN<1:0> Configuration bits = 01; otherwise it is disabled and reads as ‘0’. See
               Section 4.4 “Brown-out Reset (BOR)”.
          2:   These registers and/or bits are not implemented on 28-pin devices and are read as ‘0’. Reset values are shown for 40/44-pin devices;
               individual unimplemented bits should be interpreted as ‘-’.
          3:   The PLLEN bit is only available in specific oscillator configuration; otherwise it is disabled and reads as ‘0’. See Section 2.6.2 “PLL in
               HFINTOSC Modes”.
          4:   The RE3 bit is only available when Master Clear Reset is disabled (MCLRE Configuration bit = 0). Otherwise, RE3 reads as ‘0’. This bit is
               read-only.
          5:   RA6/RA7 and their associated latch and direction bits are individually configured as port pins based on various primary oscillator modes.
               When disabled, these bits read as ‘0’.
          6:   All bits of the ANSELH register initialize to ‘0’ if the PBADEN bit of CONFIG3H is ‘0’.
          7:   This register is only implemented in the PIC18F46K20 and PIC18F26K20 devices.
 2010 Microchip Technology Inc.                                                                                                  DS41303G-page 81
PIC18F2XK20/4XK20
5.3.5         STATUS REGISTER                                       It is recommended that only BCF, BSF, SWAPF, MOVFF
                                                                    and MOVWF instructions are used to alter the STATUS
The STATUS register, shown in Register 5-2, contains
                                                                    register, because these instructions do not affect the Z,
the arithmetic status of the ALU. As with any other SFR,
                                                                    C, DC, OV or N bits in the STATUS register.
it can be the operand for any instruction.
                                                                    For other instructions that do not affect Status bits, see
If the STATUS register is the destination for an instruc-
                                                                    the ins truction s et s ummaries in T able 24-2 an d
tion that affects the Z, DC, C, OV or N bits, the results
                                                                    Table 24-3.
of the instruction are not written; instead, the STATUS
register is u pdated according to th e ins truction p er-             Note:      The C and DC bits operate as the borrow
formed. Therefore, the result of an instruction with the                         and di git borrow bits, res pectively, in
STATUS re gister as it s d estination may b e d ifferent                         subtraction.
than intended. As an example, CLRF STATUS will set
the Z bit and le ave the rem aining S tatus bit s
unchanged (‘000u u1uu’).
REGISTER 5-2:            STATUS: 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 (1)
                                                                                                                      C(1)
bit 7                                                                                                                        bit 0
Legend:
R = Readable bit                  W = Writable bit              U = Unimplemented bit, read as ‘0’
-n = Value at POR                 ‘1’ = Bit is set              ‘0’ = Bit is cleared             x = Bit is unknown
bit 7-5            Unimplemented: Read as ‘0’
bit 4              N: Negative bit
                   This bit is used for signed arithmetic (two’s complement). It indicates whether the result was negative
                   (ALU MSB = 1).
                   1 = Result was negative
                   0 = Result was positive
bit 3              OV: Overflow bit
                   This bit is used for signed arithmetic (two’s complement). It indicates an overflow of the 7-bit magni-
                   tude which causes the sign bit (bit 7 of the result) to change state.
                   1 = Overflow occurred for signed arithmetic (in this arithmetic operation)
                   0 = No overflow occurred
bit 2              Z: Zero bit
                   1 = The result of an arithmetic or logic operation is zero
                   0 = The result of an arithmetic or logic operation is not zero
bit 1              DC: Digit Carry/Borrow bit (ADDWF, ADDLW,SUBLW,SUBWF instructions)(1)
                   1 = A carry-out from the 4th low-order bit of the result occurred
                   0 = No carry-out from the 4th low-order bit of the result
bit 0              C: Carry/Borrow bit (ADDWF, ADDLW, SUBLW, SUBWF instructions)(1)
                   1 = A carry-out from the Most Significant bit of the result occurred
                   0 = No carry-out from the Most Significant bit of the result occurred
Note 1:       For Borrow, the polarity is reversed. A subtraction is executed by adding the two’s complement of the
              second operand. For rotate (RRF, RLF) instructions, this bit is loaded with either the high-order or low-order
              bit of the source register.
DS41303G-page 82                                                                                2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
5.4         Data Addressing Modes                             The Access RAM bit ‘a’ determines how the address is
                                                              interpreted. Wh en ‘a ’ is ‘1’, th e co ntents of the BSR
    Note:      The execution of so me instructions in the     (Section 5.3.1 “Bank Select Register (BSR)”) a re
               core P IC18 i nstruction set are c hanged      used with the address to determine the complete 12-bit
               when the PIC18 extended instruction set is     address of the register. When ‘a’ is ‘0’, the address is
               enabled. See Section 5.5 “Data Memory          interpreted a s being a register i n t he Access Bank.
               and the Extended Instruction Set” for          Addressing tha t uses the Acc ess R AM is sometimes
               more information.                              also known as Direct Forced Addressing mode.
While the program memory can be ad dressed in only            A few instructions, such as MOVFF, include the entire
one way – through the program counter – information           12-bit ad dress (either s ource or de stination) in the ir
in the data memory space can be addressed in several          opcodes. In these cases, the BSR is ignored entirely.
ways. Fo r mo st ins tructions, t he a ddressing m ode i s    The destination of the operation’s results is determined
fixed. O ther instructions may use up to three modes,         by the destination bit ‘d’. When ‘d’ is ‘1’, the results are
depending on which operands are used and whether or           stored back in the source register, overwriting its origi-
not the extended instruction set is enabled.                  nal contents. When ‘d’ is ‘0’, the results are stored in
The addressing modes are:                                     the W reg ister. Instructions with out the ‘d ’ a rgument
                                                              have a destination that is implicit in the instruction; their
•   Inherent
                                                              destination is either the target register being operated
•   Literal                                                   on or the W register.
•   Direct
•   Indirect                                                  5.4.3        INDIRECT ADDRESSING
An additional addressing mode, Indexed Literal Offset,        Indirect addressing allows the user to access a location
is a vailable w hen the ext ended i nstruction s et i s       in d ata m emory w ithout giving a f ixed address in th e
enabled (XINST Configuration bit = 1). Its operation is       instruction. This is done by using File Select Registers
discussed in greater detail in Section 5.5.1 “Indexed         (FSRs) as pointers to the locations which are to be read
Addressing with Literal Offset”.                              or w ritten. Since the FSRs are themselves located in
                                                              RAM as Special F ile R egisters, th ey ca n al so be
5.4.1          INHERENT AND LITERAL                           directly manipulated un der pro gram co ntrol. Thi s
               ADDRESSING                                     makes FSR s ve ry useful in im plementing dat a s truc-
                                                              tures, such as tables and arrays in data memory.
Many PIC18 control instructions do not need any argu-
ment at all; they either perform an operation that glob-      The re gisters fo r in direct add ressing are a lso
ally affects the device or they operate implicitly on one     implemented with Indirect File Operands (INDFs) that
register. Th is a ddressing m ode i s known as Inh erent      permit automatic manipulation of the pointer value with
Addressing. Examples include SLEEP, RESET and DAW.            auto-incrementing, au to-decrementing o r of fsetting
                                                              with another value. This allows for efficient code, using
Other instructions work in a similar way but require an
                                                              loops, such as the example of clearing an entire RAM
additional explicit argument in th e opc ode. Th is i s
                                                              bank in Example 5-5.
known as Li teral Add ressing mo de b ecause the y
require some literal value as an argument. Examples
include ADDLW and MOVLW, which respectively, add or           EXAMPLE 5-5:             HOW TO CLEAR RAM
move a literal value to the W register. Other examples                                 (BANK 1) USING
include CALL an d GOTO, w hich i nclude a 20-bit                                       INDIRECT ADDRESSING
program memory address.                                                 LFSR       FSR0, 100h ;
                                                              NEXT      CLRF       POSTINC0   ; Clear INDF
5.4.2          DIRECT ADDRESSING                                                              ; register then
                                                                                              ; inc pointer
Direct ad dressing sp ecifies all or part of the so urce                BTFSS      FSR0H, 1   ; All done with
and/or destination address of the operation within the                                        ; Bank1?
opcode it self. The o ptions a re specified by th e                   BRA          NEXT       ; NO, clear next
arguments accompanying the instruction.                       CONTINUE                        ; YES, continue
In the core PIC18 instruction set, bit-oriented and byte-
oriented ins tructions us e s ome v ersion of d irect
addressing by default. All of these instructions include
some 8 -bit literal add ress a s t heir Lea st Sign ificant
Byte. This address specifies either a register address in
one of the banks of data RAM (Section 5.3.3 “General
Purpose Register File”) or a loc ation in the Access
Bank ( Section 5.3.2 “Access Bank”) as the da ta
source for the instruction.
 2010 Microchip Technology Inc.                                                                      DS41303G-page 83
PIC18F2XK20/4XK20
5.4.3.1        FSR Registers and the INDF                            5.4.3.2       FSR Registers and POSTINC,
               Operand                                                             POSTDEC, PREINC and PLUSW
At the core of indirect addressing are three sets of reg-            In addition to the INDF operand, each FSR register pair
isters: FSR0, FSR1 and FSR2. Each represents a pair                  also has four additional indirect operands. Like INDF,
of 8-bit registers, FSRnH and FSRnL. Each FSR pair                   these a re “virtual” re gisters which cannot b e d irectly
holds a 12-bit value, therefore the four upper bits of the           read o r written. Ac cessing thes e re gisters ac tually
FSRnH register are not used. The 12-bit FSR value can                accesses the loc ation to w hich th e as sociated FSR
address the entire range of the data memory in a linear              register pair points, and also performs a specific action
fashion. The FSR register pairs, then, serve as pointers             on the FSR value. They are:
to data memory locations.                                            • POSTDEC: accesses the location to which the
Indirect addressing is ac complished w ith a s et of                   FSR points, then automatically decrements the
Indirect File Operands, INDF0 through INDF2. These                     FSR by 1 afterwards
can be tho ught o f a s “virtual” re gisters: they a re              • POSTINC: accesses the location to which the
mapped in th e SFR sp ace but are no t phy sically                     FSR points, then automatically increments the
implemented. R eading or w riting to a particular IN DF                FSR by 1 afterwards
register actually a ccesses it s co rresponding FSR                  • PREINC: automatically increments the FSR by 1,
register pair. A read from IN DF1, for ex ample, reads                 then uses the location to which the FSR points in
the da ta at th e add ress in dicated by FSR1H:FSR1L.                  the operation
Instructions that u se the IN DF registers as o perands
                                                                     • PLUSW: adds the signed value of the W register
actually use the contents of their corresponding FSR as
                                                                       (range of -127 to 128) to that of the FSR and uses
a pointer to the instruction’s target. The INDF operand
                                                                       the location to which the result points in the
is just a convenient way of using the pointer.
                                                                       operation.
Because indirect addressing uses a full 12-bit address,
                                                                     In thi s c ontext, ac cessing an IN DF reg ister u ses th e
data RAM banking is not necessary. Thus, the current
                                                                     value in the associated FSR register without changing
contents of the BSR and the Access RAM bit have no
                                                                     it. S imilarly, accessing a PLUSW r egister g ives t he
effect on determining the target address.
                                                                     FSR value an offset by that in the W register; however,
                                                                     neither W no r the FSR is act ually changed in th e
                                                                     operation. Ac cessing th e o ther vi rtual re gisters
                                                                     changes the value of the FSR register.
FIGURE 5-10:              INDIRECT ADDRESSING
                                                                                               000h
   Using an instruction with one of the             ADDWF, INDF1, 1                                         Bank 0
   indirect addressing registers as the                                                        100h
   operand....                                                                                              Bank 1
                                                                                               200h
                                                                                                            Bank 2
                                                                                               300h
   ...uses the 12-bit address stored in                FSR1H:FSR1L
   the F SR p air assoc iated wit h that
                                            7                0   7                  0
   register....                                                                                             Bank 3
                                            x x x x 1 1 1 0      1 1 0 0 1 1 0 0                            through
                                                                                                            Bank 13
   ...to det ermine t he data mem ory
   location to be used in that operation.
   In this case, the FSR1 pair contains                                                        E00h
   ECCh. T his means the cont ents of                                                                       Bank 14
   location ECCh will be added to that                                                         F00h
   of the W register and stored back in                                                                     Bank 15
   ECCh.                                                                                       FFFh
                                                                                                        Data Memory
DS41303G-page 84                                                                               2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
Operations on the F SRs w ith PO STDEC, PO STINC              5.5.1       INDEXED ADDRESSING WITH
and PREINC affect the entire register pair; that is, roll-                LITERAL OFFSET
overs of the FSRnL register from FFh to 00h carry over
                                                              Enabling the PIC18 extended instruction set changes
to the FSR nH register. O n the oth er h and, res ults of
                                                              the b ehavior o f i ndirect ad dressing us ing t he FSR2
these operations do not change the value of any flags
                                                              register p air w ithin Access R AM. U nder the prop er
in the STATUS register (e.g., Z, N, OV, etc.).
                                                              conditions, instructions that use the Access Bank – that
The PLUSW register can be used to implement a form            is, mo st bit-oriented and by te-oriented i nstructions –
of i ndexed ad dressing i n t he data m emory spac e. B y     can invoke a f orm of in dexed ad dressing u sing an
manipulating the v alue i n the W regi ster, us ers ca n      offset sp ecified in the       instruction. This special
reach ad dresses tha t are fix ed of fsets from po inter      addressing mode is known as Indexed Addressing with
addresses. In so me applications, this can be used to         Literal Offset, or Indexed Literal Offset mode.
implement s ome powerful pro gram control s tructure,
                                                              When using the     extended ins truction se t, thi s
such as software stacks, inside of data memory.
                                                              addressing mode requires the following:
5.4.3.3       Operations by FSRs on FSRs                      • The use of the Access Bank is forced (‘a’ = 0) and
Indirect addressing operations that target other FSRs         • The file address argument is less than or equal to
or virtual r egisters r epresent s pecial cases. For            5Fh.
example, using a n F SR to po int to on e of the virtual      Under t hese conditions, t he f ile a ddress o f t he
registers will not result in successful operations. As a      instruction is not i nterpreted as the l ower byte of an
specific case, as sume that FSR 0H:FSR0L c ontains            address (used with the BSR in direct addressing), or as
FE7h, the address o f IN DF1. Atte mpts t o rea d th e        an 8-bit address in the Access Bank. Instead, the value
value of the IN DF1 u sing INDF0 as a n o perand w ill        is interpreted as an offset value to an Address Pointer,
return 00h. Attempts to write to INDF1 using INDF0 as         specified by F SR2. Th e of fset an d the co ntents of
the operand will result in a NOP.                             FSR2 are ad ded to ob tain the t arget add ress of th e
On the other hand, using the virtual registers to write to    operation.
an FSR pair may not occur as planned. In these cases,
the value will be written to the FSR pair but without any     5.5.2       INSTRUCTIONS AFFECTED BY
incrementing or decrementing. Thus, w riting t o e ither                  INDEXED LITERAL OFFSET MODE
the INDF2 or POSTDEC2 register will write the same            Any of the core PIC18 instructions that can use direct
value to the FSR2H:FSR2L.                                     addressing a re p otentially affected by th e Indexed
Since the FSRs are physical registers mapped in the           Literal O ffset Ad dressing mo de. Thi s i ncludes al l
SFR space, they can be manipulated through all direct         byte-oriented and bit-oriented instructions, or a lmost
operations. U sers sh ould pro ceed c autiously w hen         one-half of the s tandard PIC 18 instruction se t.
working on these reg isters, p articularly if thei r cod e    Instructions that only use Inherent or Literal Addressing
uses indirect addressing.                                     modes are unaffected.
Similarly, operations by indirect addressing are generally    Additionally, byte-oriented and bit-oriented instructions
permitted on all other SFRs. Users should exercise the        are no t af fected if they do no t us e th e Ac cess Ban k
appropriate caution that they do not inadvertently change     (Access RAM bit is ‘1’), or include a file address of 60h
settings that might affect the operation of the device.       or abo ve. Ins tructions m eeting the se cri teria w ill
                                                              continue to ex ecute as be fore. A co mparison of t he
5.5       Data Memory and the Extended                        different pos sible addressing mo des w hen the
                                                              extended ins truction s et is enabled is s hown in
          Instruction Set                                     Figure 5-11.
Enabling th e PIC18 extended in struction s et (XINST         Those who desire to u se byte-oriented or bit-oriented
Configuration bi t = 1) s ignificantly changes ce rtain       instructions in the Indexed Literal Offset mode should
aspects of da ta m emory and it s add ressing. Specifi-       note the changes to assembler syntax for this mode.
cally, the use of the Access Bank for many of the core        This is des cribed in mo re de tail in Section 24.2.1
PIC18 instructions is different; this is due to th e intro-   “Extended Instruction Syntax”.
duction of a new addressing mode for the data memory
space.
What does not change is just as important. The size of
the data m emory s pace is un changed, as w ell as it s
linear ad dressing. Th e SFR m ap remains th e s ame.
Core PIC18 instructions can still operate in both Direct
and Ind irect Add ressing m ode; inherent and li teral
instructions d o no t cha nge at al l. In direct addressing
with FSR0 and FSR1 also remain unchanged.
 2010 Microchip Technology Inc.                                                                    DS41303G-page 85
PIC18F2XK20/4XK20
FIGURE 5-11:           COMPARING ADDRESSING OPTIONS FOR BIT-ORIENTED AND
                       BYTE-ORIENTED INSTRUCTIONS (EXTENDED INSTRUCTION SET ENABLED)
  EXAMPLE INSTRUCTION: ADDWF, f, d, a (Opcode: 0010 01da ffff ffff)
                                          000h
   When ‘a’ = 0 and f  60h:
                                          060h
   The ins truction ex ecutes in
   Direct Forced mode. ‘f’ is inter-               Bank 0
   preted as a location in the            100h
   Access R AM be tween 0 60h                                                 00h
                                                    Bank 1
   and 0FFh. This is the same as                   through                    60h
   locations F60h to FFFh                          Bank 14
                                                                                    Valid range
   (Bank 15) of data memory.                                                            for ‘f’
   Locations bel ow 60 h are not                                              FFh
                                          F00h                   Access RAM
   available in th is ad dressing
                                                   Bank 15
   mode.
                                          F60h
                                                    SFRs
                                          FFFh
                                                 Data Memory
   When ‘a’ = 0 and f5Fh:              000h
   The instruction ex ecutes in
   Indexed Literal Offset mode. ‘f’       060h
                                                   Bank 0
   is interpreted as an offset to the
                                          100h
   address value in FSR 2. The                                  001001da ffffffff
   two are ad ded toge ther to                      Bank 1
   obtain the address of the target                through
                                                   Bank 14
   register for the instruction. The
   address ca n be an ywhere in                                   FSR2H     FSR2L
   the data memory space.
                                          F00h
   Note that in thi s mo de, the                   Bank 15
   correct syntax is now:                 F60h
   ADDWF [k], d                                     SFRs
   where ‘k’ is the same as ‘f’.          FFFh
                                                 Data Memory
                                                                 BSR
   When ‘a’ = 1 (all values of f):        000h                 00000000
   The ins truction ex ecutes in
                                          060h
   Direct mo de (also kn own as
                                                   Bank 0
   Direct Long mode). ‘f’ is inter-       100h
   preted as a location in one of
   the 1 6 b anks of th e d ata                     Bank 1     001001da ffffffff
   memory s pace. Th e bank is                     through
                                                   Bank 14
   designated by the Bank Select
   Register ( BSR). Th e ad dress
   can be in any implemented              F00h
   bank in the da ta memory                        Bank 15
   space.                                 F60h
                                                    SFRs
                                          FFFh
                                                 Data Memory
DS41303G-page 86                                                   2010 Microchip Technology Inc.
                                                           PIC18F2XK20/4XK20
5.5.3        MAPPING THE ACCESS BANK IN                    Remapping of the Access Bank applies only to opera-
             INDEXED LITERAL OFFSET MODE                   tions using the Indexed Literal Offset mode. Operations
                                                           that use the BSR (Access RAM bit is ‘1’) will continue
The u se of Ind exed Literal O ffset Add ressing m ode
                                                           to use direct addressing as before.
effectively changes how the first 96 locations of Access
RAM (00h to 5Fh) are mapped. Rather than containing
just the contents of the bottom section of Bank 0, this    5.6      PIC18 Instruction Execution and
mode maps the contents from a user defined “window”                 the Extended Instruction Set
that c an be l ocated an ywhere i n th e d ata me mory
                                                           Enabling the ex tended instruction s et a dds eight
space. The value of FSR2 establishes the lower bound-
                                                           additional com mands to the ex isting PIC 18 ins truction
ary of the addresses mapped into the window, while the
                                                           set. The se ins tructions are ex ecuted as desc ribed in
upper bou ndary is def ined by FSR 2 pl us 95 (5F h).
                                                           Section 24.2 “Extended Instruction Set”.
Addresses in the Access RAM above 5Fh are mapped
as pre viously des cribed (se e Section 5.3.2 “Access
Bank”). An example of Access Bank remapping in this
addressing mode is shown in Figure 5-12.
FIGURE 5-12:              REMAPPING THE ACCESS BANK WITH INDEXED LITERAL OFFSET
                          ADDRESSING
   Example Situation:
    ADDWF f, d, a                   000h
    FSR2H:FSR2L = 120h
                                             Bank 0
    Locations i n t he region
    from t he F SR2 point er        100h
    (120h) t o t he point er plus            Bank 1
                                    120h
    05Fh (17Fh) a re m apped                 Window
                                    17Fh                                                                      00h
    to t he bot tom of the
                                             Bank 1
    Access RAM (000h-05Fh).         200h                                                  Bank 1 “Window”
    Special F ile Regist ers at                                                                               5Fh
                                                                                                              60h
    F60h t hrough F FFh are
    mapped t o 60h t hrough                   Bank 2
    FFh, as usual.                                                                              SFRs
                                             through
    Bank 0 addre sses below                  Bank 14
    5Fh can still be addressed                                                                                FFh
    by using the BSR.                                                                      Access Bank
                                    F00h
                                             Bank 15
                                    F60h
                                              SFRs
                                    FFFh
                                           Data Memory
 2010 Microchip Technology Inc.                                                                 DS41303G-page 87
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 88     2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
6.0      FLASH PROGRAM MEMORY                                       A value written to program memory does not need to be
                                                                    a valid in struction. Ex ecuting a pr ogram memory
The Flash program memory is readable, writable and                  location t hat f orms an i nvalid instruction r esults in a
erasable during normal operation over the entire V DD               NOP.
range.
A read from program memory is executed one byte at                  6.1       Table Reads and Table Writes
a time. A w rite to prog ram me mory is ex ecuted on
blocks of 64, 32 or 16 bytes at a time, depending on the            In order to read and w rite program memory, there are
specific device (See Table 6-1). Prog ram m emory i s               two operations that all ow the processor to m ove bytes
erased in blocks of 64 bytes at a time. The difference              between the program memory space and the data RAM:
between the write and erase block sizes requires from               • Table Read (TBLRD)
1 to 4 block writes to res tore the contents of a si ngle           • Table Write (TBLWT)
block erase. A b ulk erase operation cannot be issued
                                                                    The program memory space is 16 bits wide, while the
from user code.
                                                                    data RAM space is 8 bits wide. Table reads and table
                                                                    writes move data between these two memory spaces
TABLE 6-1:         WRITE/ERASE BLOCK SIZES                          through an 8-bit register (TABLAT).
                          Write Block      Erase Block              The t able rea d o peration re trieves o ne b yte of dat a
       Device
                          Size (bytes)     Size (bytes)             directly f rom pr ogram memory and p laces i t i nto th e
PIC18F43K20,                   16               64                  TABLAT register. Figure 6-1 shows the operation of a
PIC18F23K20                                                         table read.
PIC18F24K20,                   32               64                  The table write operation stores one byte of data from the
PIC18F25K20,                                                        TABLAT register into a w rite block holding register. The
PIC18F44K20,                                                        procedure to write the contents of t he holding registers
PIC18F45K20                                                         into program memory is detailed in Section 6.5 “Writing
PIC18F26K20,                   64               64                  to Flash Program Memory”. Fi gure 6-2 shows th e
PIC18F46K20                                                         operation of a table write with program memory and data
                                                                    RAM.
Writing or eras ing pro gram me mory w ill c ease
                                                                    Table operations work with byte entities. Tables contain-
instruction fetches until the operation is complete. The
                                                                    ing data, rather than program instruction s, are not
program memory cannot be accessed during the write
                                                                    required to be word aligned. Therefore, a table can start
or erase, therefore, code cannot execute. An int ernal
                                                                    and e nd at any by te address. If a t able w rite is being
programming timer terminates program memory writes
                                                                    used to w rite executable code into pr ogram memory,
and erases.
                                                                    program instructions will need to be word aligned.
FIGURE 6-1:             TABLE READ OPERATION
                                                            Instruction: TBLRD*
                                                            Program Memory
                  Table Pointer(1)
                                                                                                     Table Latch (8-bit)
        TBLPTRU      TBLPTRH         TBLPTRL
                                                                                                          TABLAT
                                         Program Memory
                                         (TBLPTR)
       Note 1: Table Pointer register points to a byte in program memory.
 2010 Microchip Technology Inc.                                                                           DS41303G-page 89
PIC18F2XK20/4XK20
FIGURE 6-2:              TABLE WRITE OPERATION
                                                            Instruction: TBLWT*
                                                             Program Memory            Holding Registers
                      Table Pointer(1)                                                                         Table Latch (8-bit)
           TBLPTRU       TBLPTRH         TBLPTRL                                                                    TABLAT
                   Program Memory
                   (TBLPTR<MSBs>)
         Note 1: During table writes the Table Pointer does not point directly to Program Memory. The LSBs of TBLPRTL
                 actually point to an address within the write block holding registers. The MSBs of the Table Pointer deter-
                 mine where the write block will eventually be written. The process for writing the holding registers to the
                 program memory array is discussed in Section 6.5 “Writing to Flash Program Memory”.
6.2       Control Registers                                             The FREE bit allows the program memory erase oper-
                                                                        ation. When FREE is set, an erase operation is initiated
Several control registers are us ed in co njunction with                on the next WR command. When FREE is clear, only
the TBLRD and TBLWT instructions. These include the:                    writes are enabled.
•   EECON1 register                                                     The WREN bit, when set, will allow a write operation.
•   EECON2 register                                                     The WREN bit is clear on power-up.
•   TABLAT register                                                     The WRERR bit is set by hardware when the WR bit is
•   TBLPTR registers                                                    set and cleared when the internal programming timer
                                                                        expires and the write operation is complete.
6.2.1        EECON1 AND EECON2 REGISTERS
                                                                          Note:      During normal op eration, the WRERR i s
The EECON1 re gister (Re gister 6-1) is t he control                                 read as ‘1’. This can indicate that a write
register for memory accesses. The EECON2 register is                                 operation was prematurely terminated by
not a ph ysical register; it is us ed ex clusively in th e                           a R eset, or a w     rite ope ration w as
memory w rite and e rase sequences. R eading                                         attempted improperly.
EECON2 will read all ‘0’s.
The EEPGD control bit determines if the access will be                  The WR control bit initiates write operations. The WR
a prog ram or d ata EEPRO M m emory ac cess. Whe n                      bit cannot be cleared, only set, by firmware. Then WR
EEPGD is c lear, any subsequent op erations wil l                       bit is cleared by hardware at the completion of the write
operate on the data EEPROM memory. When EEPGD                           operation.
is set, any subsequent operations will operate on the                     Note:      The EEIF in terrupt fl ag bi t of the PIR 2
program memory.                                                                      register is set when the write is complete.
The CFGS control bit determines if the access will be                                The EEIF fl ag s tays se t unt il c leared b y
to the Configuration/Calibration registers or to program                             firmware.
memory/data EEPROM m emory. When CFGS is s et,
subsequent ope rations w ill operate o n C onfiguration
registers reg ardless of EEPGD (s ee Section 23.0
“Special Features of the CPU”). When CFGS is clear,
memory selection access is determined by EEPGD.
DS41303G-page 90                                                                                    2010 Microchip Technology Inc.
                                                                 PIC18F2XK20/4XK20
REGISTER 6-1:          EECON1: DATA EEPROM CONTROL 1 REGISTER
    R/W-x           R/W-x               U-0 R/W         -0      R/W-x           R/W-0        R/S-0         R/S-0
    EEPGD           CFGS                 —            FREE     WRERR            WREN          WR              RD
bit 7                                                                                                              bit 0
Legend:
R = Readable bit                   W = Writable bit
S = Bit can be set by software, but not cleared              U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set          ‘0’ = Bit is cleared        x = Bit is unknown
bit 7            EEPGD: Flash Program or Data EEPROM Memory Select bit
                 1 = Access Flash program memory
                 0 = Access data EEPROM memory
bit 6            CFGS: Flash Program/Data EEPROM or Configuration Select bit
                 1 = Access Configuration registers
                 0 = Access Flash program or data EEPROM memory
bit 5            Unimplemented: Read as ‘0’
bit 4            FREE: Flash Row (Block) Erase Enable bit
                 1 = Erase the program memory block addressed by TBLPTR on the next WR command
                     (cleared by completion of erase operation)
                 0 = Perform write-only
bit 3            WRERR: Flash Program/Data EEPROM Error Flag bit(1)
                 1 = A write operation is prematurely terminated (any Reset during self-timed programming in normal
                     operation, or an improper write attempt)
                 0 = The write operation completed
bit 2            WREN: Flash Program/Data EEPROM Write Enable bit
                 1 = Allows write cycles to Flash program/data EEPROM
                 0 = Inhibits write cycles to Flash program/data EEPROM
bit 1            WR: Write Control bit
                 1 = Initiates a data EEPROM erase/write cycle or a program memory erase cycle or write cycle.
                     (The operation is self-timed and the bit is cleared by hardware once write is complete.
                     The WR bit can only be set (not cleared) by software.)
                 0 = Write cycle to the EEPROM is complete
bit 0            RD: Read Control bit
                 1 = Initiates an EEPROM read (Read takes one cycle. RD is cleared by hardware. The RD bit can only
                     be set (not cleared) by software. RD bit cannot be set when EEPGD = 1 or CFGS = 1.)
                 0 = Does not initiate an EEPROM read
Note 1:     When a WRERR occurs, the EEPGD and CFGS bits are not cleared. This allows tracing of the
            error condition.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 91
PIC18F2XK20/4XK20
6.2.2        TABLAT – TABLE LATCH REGISTER                            When a TBLRD is executed, all 22 bits of the TBLPTR
                                                                      determine w hich b yte is r ead f rom pr ogram m emory
The Table Latch (TABLAT) is an 8-bit register mapped
                                                                      directly into the TABLAT register.
into the SFR space. The Table Latch register is used to
hold 8-bit data during data transfers between program                 When a TBLWT is executed the byte in the TABLAT reg-
memory and data RAM.                                                  ister is written, not to Flash memory but, to a holding
                                                                      register in preparation for a program memory write. The
6.2.3        TBLPTR – TABLE POINTER                                   holding registers constitute a w rite block which varies
             REGISTER                                                 depending on the device (See Table 6-1).The 3, 4, or 5
                                                                      LSbs of the TBLPTRL register determine which specific
The Table Pointer (TBLPTR) register addresses a byte
                                                                      address within the holding register block is written to.
within the program memory. The TBLPTR is comprised
                                                                      The MS Bs of t he Table P ointer h ave n o eff ect du ring
of t hree S FR registers: T able Pointer U pper Byte,
                                                                      TBLWT operations.
Table Poi nter High Byte and Table Poin ter Lo w By te
(TBLPTRU:TBLPTRH:TBLPTRL). The se thre e re gis-                      When a p rogram memory write is executed the entire
ters join to f orm a 22 -bit w ide po inter. T he lo w-order          holding register block is written to the Flash memory at
21 bits allow the device to a ddress up to 2 Mbytes of                the address determined by the MSbs of the TBLPTR.
program memory space. The 22nd bit allows access to                   The 3, 4, or 5 LSBs are ignored during Flash memory
the device ID, the user ID and the Configuration bits.                writes. Fo r m ore de tail, see Section 6.5 “Writing to
                                                                      Flash Program Memory”.
The Table Poi nter regi ster, TBL PTR, is us ed by th e
TBLRD and TBLWT instructions. These instructions can                  When an e rase o f pro gram m emory is ex ecuted, th e
update the TBLPTR in one of four ways based on the                    16 MSbs o    ft    he     Table Po    inter  register
table op eration. Th ese o perations are sh own i n                   (TBLPTR<21:6>) point to the 64-byte block that will be
Table 6-2. These operations on the TBLPTR affect only                 erased. The Least Significant bits (TBLPTR<5:0>) are
the low-order 21 bits.                                                ignored.
                                                                      Figure 6-3 de scribes t he re levant bo undaries of
6.2.4        TABLE POINTER BOUNDARIES                                 TBLPTR based on Flash program memory operations.
TBLPTR is used in rea ds, writes and erases of the
Flash program memory.
TABLE 6-2:         TABLE POINTER OPERATIONS WITH TBLRD AND TBLWT INSTRUCTIONS
   Example                                               Operation on Table Pointer
TBLRD*
                                                               TBLPTR is not modified
TBLWT*
TBLRD*+
                                                 TBLPTR is incremented after the read/write
TBLWT*+
TBLRD*-
                                                 TBLPTR is decremented after the read/write
TBLWT*-
TBLRD+*
                                                TBLPTR is incremented before the read/write
TBLWT+*
FIGURE 6-3:             TABLE POINTER BOUNDARIES BASED ON OPERATION
        21          TBLPTRU       16   15              TBLPTRH               8    7          TBLPTRL                   0
                                       TABLE ERASE/WRITE                                          TABLE WRITE
                                        TBLPTR<21:n+1>(1)                                        TBLPTR<n:0>(1)
                                                 TABLE READ – TBLPTR<21:0>
     Note 1: n = 3, 4, 5, or 6 for block sizes of 8, 16, 32 or 64 bytes, respectively.
DS41303G-page 92                                                                                2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
6.3      Reading the Flash Program                             The internal program memory is typically organized by
         Memory                                                words. The Least Significant bit of the address selects
                                                               between the high and low bytes of the word. Figure 6-4
The TBLRD in struction ret rieves da ta from pro gram          shows t he i nterface b etween th e in ternal pr ogram
memory and places it into data RAM. Table reads from           memory and the TABLAT.
program memory are performed one byte at a time.
TBLPTR p oints to a byte a ddress i n p rogram space.
Executing TBLRD pl aces the by te pointed to in to
TABLAT. In a ddition, T BLPTR c an b e m odified
automatically for the next table read operation.
FIGURE 6-4:             READS FROM FLASH PROGRAM MEMORY
                                               Program Memory
                                   (Even Byte Address)    (Odd Byte Address)
                                                                      TBLPTR = xxxxx1            TBLPTR = xxxxx0
          Instruction Register                                                            TABLAT
                                    FETCH                              TBLRD
                  (IR)                                                                  Read Register
EXAMPLE 6-1:            READING A FLASH PROGRAM MEMORY WORD
               MOVLW         CODE_ADDR_UPPER             ; Load TBLPTR with the base
               MOVWF         TBLPTRU                     ; address of the word
               MOVLW         CODE_ADDR_HIGH
               MOVWF         TBLPTRH
               MOVLW         CODE_ADDR_LOW
               MOVWF         TBLPTRL
 READ_WORD
               TBLRD*+                                   ; read into TABLAT and increment
               MOVF          TABLAT, W                   ; get data
               MOVWF         WORD_EVEN
               TBLRD*+                                   ; read into TABLAT and increment
               MOVFW         TABLAT, W                   ; get data
               MOVF          WORD_ODD
 2010 Microchip Technology Inc.                                                                   DS41303G-page 93
PIC18F2XK20/4XK20
6.4      Erasing Flash Program Memory                        6.4.1       FLASH PROGRAM MEMORY
                                                                         ERASE SEQUENCE
The minimum erase block is 32 words or 64 bytes. Only
through the use of an external programmer, or through        The sequence of events for erasing a block of internal
ICSP™ control, can larger blocks of program memory           program memory is:
be bulk erased. Word erase in t he Flash array is not        1.   Load T able Poi nter reg ister with address of
supported.                                                        block being erased.
When initiating an erase sequence from the Microcon-         2.   Set the EECON1 register for the erase operation:
troller itself, a block of 64 bytes of program memory is          • set EEPGD bit to point to program memory;
erased. Th e Mo st Si gnificant 16 bi ts of         the           • clear the CFGS bit to access program memory;
TBLPTR<21:6> p oint t o t he block b eing erased. Th e
                                                                  • set WREN bit to enable writes;
TBLPTR<5:0> bits are ignored.
                                                                  • set FREE bit to enable the erase.
The EECON1 register commands the erase operation.
                                                             3.   Disable interrupts.
The EEPGD bit must be set to point to the Flash pro-
gram memory. Th e WR EN bit mu st be set to en able          4.   Write 55h to EECON2.
write operations. The FREE bit is set to select an erase     5.   Write 0AAh to EECON2.
operation.                                                   6.   Set the WR bit. This will begin the block erase
The w rite in itiate s equence fo r EEC ON2, sh own a s           cycle.
steps 4 thro ugh 6 in Section 6.4.1 “Flash Program           7.   The C PU w ill st all for duration of th e erase
Memory Erase Sequence”, is used to guard against                  (about 2 ms using internal timer).
accidental w rites. Thi s is so metimes referred to as a     8.   Re-enable interrupts.
long write.
A long write is necessary for erasing the internal Flash.
Instruction ex ecution is ha lted d uring t he long w rite
cycle. The long write is terminated by the internal pro-
gramming timer.
EXAMPLE 6-2:            ERASING A FLASH PROGRAM MEMORY BLOCK
                         MOVLW     CODE_ADDR_UPPER            ; load TBLPTR with the base
                         MOVWF     TBLPTRU                    ; address of the memory block
                         MOVLW     CODE_ADDR_HIGH
                         MOVWF     TBLPTRH
                         MOVLW     CODE_ADDR_LOW
                         MOVWF     TBLPTRL
          ERASE_BLOCK
                         BSF       EECON1,   EEPGD            ;   point to Flash program memory
                         BCF       EECON1,   CFGS             ;   access Flash program memory
                         BSF       EECON1,   WREN             ;   enable write to memory
                         BSF       EECON1,   FREE             ;   enable block Erase operation
                         BCF       INTCON,   GIE              ;   disable interrupts
      Required           MOVLW     55h
      Sequence           MOVWF     EECON2                     ; write 55h
                         MOVLW     0AAh
                         MOVWF     EECON2                     ; write 0AAh
                         BSF       EECON1,   WR               ; start erase (CPU stall)
                         BSF       INTCON,   GIE              ; re-enable interrupts
DS41303G-page 94                                                                     2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
6.5       Writing to Flash Program Memory                           The long write is necessary for programming the inter-
                                                                    nal Flash. Instruction execution is halted during a long
The p rogramming block s ize is 1 6, 3 2 o r 64 by tes,             write c ycle. The l ong w rite w ill be te rminated b y th e
depending on the device (See Table 6-1). Word or byte               internal programming timer.
programming is not supported.
                                                                    The EEPRO M on-c hip tim er c ontrols the write time.
Table w rites a re us ed i nternally to loa d the hol ding          The write/erase voltages are generated by an on-c hip
registers needed to program the Flash memory. There                 charge pump, rated to operate over the voltage range
are only as many holding registers as there are bytes               of the device.
in a write block (See Table 6-1).
                                                                       Note:     The default value of the holding registers on
Since the Table Latch (TABLAT) is only a s ingle byte,
                                                                                 device Resets and after write operations is
the TBLWT instruction may need to be executed 16, 32
                                                                                 FFh. A w rite of FF h t o a ho lding register
or 64 ti mes, depending on the de vice, fo r e ach p ro-
                                                                                 does not modify that byte. This means that
gramming ope ration. All of the t able w rite operations
                                                                                 individual bytes of program memory may be
will essentially be short writes because only the holding
                                                                                 modified, provided that the change does not
registers are written. After all the holding registers have
                                                                                 attempt to change any bit from a ‘0’ to a ‘1’.
been written, the programming operation of that block
of memory is started by configuring the EECON1 reg-                              When mod ifying in dividual bytes, it is not
ister for a prog ram memory write and performing the                             necessary to lo ad al l holding re gisters
long write sequence.                                                             before executing a long write operation.
FIGURE 6-5:             TABLE WRITES TO FLASH PROGRAM MEMORY
                                                            TABLAT
                                                          Write Register
                        8                           8                           8                                   8
 TBLPTR = xxxx00              TBLPTR = xxxx01             TBLPTR = xxxx02                   TBLPTR = xxxxYY(1)
              Holding Register             Holding Register           Holding Register                     Holding Register
                                                        Program Memory
        Note 1: YY = x7, xF, or 1F for 8, 16 or 32 byte write blocks, respectively.
6.5.1        FLASH PROGRAM MEMORY WRITE                             8.  Disable interrupts.
             SEQUENCE                                               9.  Write 55h to EECON2.
The sequence o f e vents fo r p rogramming an internal              10. Write 0AAh to EECON2.
program memory location should be:                                  11. Set the WR bit. This will begin the write cycle.
1.    Read 64 bytes into RAM.                                       12. The CPU will stall for duration of the write (about
                                                                        2 ms using internal timer).
2.    Update data values in RAM as necessary.
3.    Load Table Pointer register with address being                13. Re-enable interrupts.
      erased.                                                       14. Repeat steps 6 to 13 for each block until all 64
4.    Execute the block erase procedure.                                bytes are written.
5.    Load Table Pointer register with address of first             15. Verify the memory (table read).
      byte being written.                                           This procedure will require about 6 ms to update each
6.    Write the 16, 32 or 64 byte block into the holding            write block of memory. An example of the required code
      registers with auto-increment.                                is given in Example 6-3.
7.    Set the EECON1 register for the write operation:                 Note:     Before s etting the WR bit , the T able
      • set EEPGD bit to point to program memory;                                Pointer add ress nee ds to be w ithin the
      • clear the CFGS bit to access program memory;                             intended address range of the bytes in the
      • set WREN to enable byte writes.                                          holding registers.
 2010 Microchip Technology Inc.                                                                            DS41303G-page 95
PIC18F2XK20/4XK20
EXAMPLE 6-3:         WRITING TO FLASH PROGRAM MEMORY
                       MOVLW     D'64’              ; number of bytes in erase block
                       MOVWF     COUNTER
                       MOVLW     BUFFER_ADDR_HIGH   ; point to buffer
                       MOVWF     FSR0H
                       MOVLW     BUFFER_ADDR_LOW
                       MOVWF     FSR0L
                       MOVLW     CODE_ADDR_UPPER    ; Load TBLPTR with the base
                       MOVWF     TBLPTRU            ; address of the memory block
                       MOVLW     CODE_ADDR_HIGH
                       MOVWF     TBLPTRH
                       MOVLW     CODE_ADDR_LOW
                       MOVWF     TBLPTRL
 READ_BLOCK
                       TBLRD*+                      ;   read into TABLAT, and inc
                       MOVF      TABLAT, W          ;   get data
                       MOVWF     POSTINC0           ;   store data
                       DECFSZ    COUNTER            ;   done?
                       BRA       READ_BLOCK         ;   repeat
 MODIFY_WORD
                       MOVLW     BUFFER_ADDR_HIGH   ; point to buffer
                       MOVWF     FSR0H
                       MOVLW     BUFFER_ADDR_LOW
                       MOVWF     FSR0L
                       MOVLW     NEW_DATA_LOW       ; update buffer word
                       MOVWF     POSTINC0
                       MOVLW     NEW_DATA_HIGH
                       MOVWF     INDF0
 ERASE_BLOCK
                       MOVLW     CODE_ADDR_UPPER    ; load TBLPTR with the base
                       MOVWF     TBLPTRU            ; address of the memory block
                       MOVLW     CODE_ADDR_HIGH
                       MOVWF     TBLPTRH
                       MOVLW     CODE_ADDR_LOW
                       MOVWF     TBLPTRL
                       BSF       EECON1, EEPGD      ;   point to Flash program memory
                       BCF       EECON1, CFGS       ;   access Flash program memory
                       BSF       EECON1, WREN       ;   enable write to memory
                       BSF       EECON1, FREE       ;   enable Erase operation
                       BCF       INTCON, GIE        ;   disable interrupts
                       MOVLW     55h
 Required              MOVWF     EECON2             ; write 55h
 Sequence              MOVLW     0AAh
                       MOVWF     EECON2             ;   write 0AAh
                       BSF       EECON1, WR         ;   start erase (CPU stall)
                       BSF       INTCON, GIE        ;   re-enable interrupts
                       TBLRD*-                      ;   dummy read decrement
                       MOVLW     BUFFER_ADDR_HIGH   ;   point to buffer
                       MOVWF     FSR0H
                       MOVLW     BUFFER_ADDR_LOW
                       MOVWF     FSR0L
 WRITE_BUFFER_BACK
                       MOVLW     BlockSize          ; number of bytes in holding register
                       MOVWF     COUNTER
                       MOVLW     D’64’/BlockSize    ; number of write blocks in 64 bytes
                       MOVWF     COUNTER2
 WRITE_BYTE_TO_HREGS
                       MOVF      POSTINC0, W        ;   get low byte of buffer data
                       MOVWF     TABLAT             ;   present data to table latch
                       TBLWT+*                      ;   write data, perform a short write
                                                    ;   to internal TBLWT holding register.
DS41303G-page 96                                                     2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
EXAMPLE 6-3:               WRITING TO FLASH PROGRAM MEMORY (CONTINUED)
                           DECFSZ     COUNTER                 ; loop until holding registers are full
                           BRA        WRITE_WORD_TO_HREGS
 PROGRAM_MEMORY
                           BSF        EECON1, EEPGD           ;   point to Flash program memory
                           BCF        EECON1, CFGS            ;   access Flash program memory
                           BSF        EECON1, WREN            ;   enable write to memory
                           BCF        INTCON, GIE             ;   disable interrupts
                           MOVLW      55h
        Required           MOVWF      EECON2                  ; write 55h
        Sequence           MOVLW      0AAh
                           MOVWF      EECON2                  ;   write 0AAh
                           BSF        EECON1, WR              ;   start program (CPU stall)
                           DCFSZ      COUNTER2                ;   repeat for remaining write blocks
                           BRA        WRITE_BYTE_TO_HREGS     ;
                           BSF        INTCON, GIE             ;   re-enable interrupts
                           BCF        EECON1, WREN            ;   disable write to memory
6.5.2       WRITE VERIFY                                             6.5.4      PROTECTION AGAINST
Depending o n th e a pplication, good p rogramming                              SPURIOUS WRITES
practice m ay di ctate tha t th e v alue written t o th e            To prot ect against spu rious w rites to Flash pro gram
memory should be v erified against the original value.               memory, the w rite ini tiate sequence must als o be
This s hould b e used in a pplications w here excessive              followed. See Section 23.0 “Special Features of the
writes can stress bits near the specification limit.                 CPU” for more detail.
6.5.3       UNEXPECTED TERMINATION OF                                6.6      Flash Program Operation During
            WRITE OPERATION
                                                                              Code Protection
If a write is terminated by an unplanned event, such as
loss of power or an une xpected R eset, the me mory                  See Section 23.3 “Program Verification and Code
location ju st p rogrammed sh ould be ver ified an d                 Protection” for details on c ode p rotection of Fl ash
reprogrammed if n eeded. If the w rite ope ration i s                program memory.
interrupted by a MCLR Reset or a WDT Time-out Reset
during n ormal op eration, t he WRERR b it w ill be s et
which the user can check to decide whether a rew rite
of the location(s) is needed.
TABLE 6-3:           REGISTERS ASSOCIATED WITH PROGRAM FLASH MEMORY
                                                                                                                  Reset
   Name            Bit 7           Bit 6    Bit 5     Bit 4        Bit 3       Bit 2       Bit 1       Bit 0    Values on
                                                                                                                  page
TBLPTRU             —               —      bit 21   Program Memory Table Pointer Upper Byte (TBLPTR<20:16>)         59
TBPLTRH Program Memory Table Pointer High Byte (TBLPTR<15:8>)                                                        59
TBLPTRL Program Memory Table Pointer Low Byte (TBLPTR<7:0>)                                                          59
TABLAT       Program Memory Table Latch                                                                              59
INTCON       GIE/GIEH PEIE/GIEL TMR0IE               INT0IE       RBIE       TMR0IF       INT0IF       RBIF          59
EECON2       EEPROM Control Register 2 (not a physical register)                                                     61
EECON1        EEPGD            CFGS          —        FREE        WRERR       WREN          WR          RD           61
IPR2          OSCFIP               C1IP     C2IP      EEIP        BCLIP      HLVDIP      TMR3IP       CCP2IP         62
PIR2          OSCFIF               C1IF     C2IF      EEIF        BCLIF      HLVDIF      TMR3IF       CCP2IF         62
PIE2          OSCFIE               C1IE     C2IE      EEIE        BCLIE      HLVDIE      TMR3IE       CCP2IE         62
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used during Flash/EEPROM access.
 2010 Microchip Technology Inc.                                                                         DS41303G-page 97
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 98     2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
7.0       DATA EEPROM MEMORY                                   The EECON1 register (Register 7-1) is the control reg-
                                                               ister for data and program memory access. Control bit
The data EEPROM is a nonvolatile memory array, sep-            EEPGD determines if the access will be to program or
arate from the data RAM and program memory, which              data EEPROM memory. When the EEPGD bit is clear,
is used for long-term storage of program data. It is not       operations wil l ac cess the da ta EEPROM m emory.
directly mapped i n either the re gister fi le or program      When the EEPGD b it is s et, program m emory i s
memory space but is indirectly addressed through the           accessed.
Special Function Reg isters (SF Rs). The EEPROM i s
                                                               Control bit, CFGS, determines if the access will be to
readable and writable during normal operation over the
                                                               the Configuration registers or to program memory/data
entire VDD range.
                                                               EEPROM memory. Whe n the CFGS b it is s et,
Four SFR s are u sed to re ad an d w rite to th e da ta        subsequent operations access Configuration registers.
EEPROM as well as the program memory. They are:                When the CFGS b it is c lear, t he EEPGD bit s elects
•   EECON1                                                     either program Flash or data EEPROM memory.
•   EECON2                                                     The WREN bit, when set, will allow a write operation.
•   EEDATA                                                     On power-up, the WREN bit is clear.
•   EEADR                                                      The WRERR bit is set by hardware when the WR bit is
•   EEADRH                                                     set and cleared when the internal programming timer
                                                               expires and the write operation is complete.
The data EEPROM allows byte read and write. When
interfacing t o th e da ta m emory bl ock, E EDATA ho lds        Note:     During norm al op eration, the WR ERR
the 8-bit data for read/write and the EEADR:EEADRH                         may read a s ‘ 1’. This can indicate that a
register pair hold the address of the EEPROM location                      write o peration w as prematurely t ermi-
being accessed.                                                            nated by a Reset, or a write operation was
The EEPROM data memory is rated for high erase/write                       attempted improperly.
cycle endurance. A by te write automatically erases the        The WR control bit ini tiates write ope rations. The bit
location and w rites the new dat a (er ase-before-write).      can be set but not cleared by software. It is cleared only
The w rite time is controlled by an on-chip time r; it w ill   by hardware at the completion of the write operation.
vary with voltage and temperature as well as from chip-
to-chip. Please refer to parameter D122 (Table 26.10 in          Note:     The EEIF in terrupt fl ag bi t of the PIR 2
Section 26.0 “Electrical Characteristics”) for e xact                      register is set when the write is complete.
limits.                                                                    It must be cleared by software.
                                                               Control bi ts, RD and WR , star t read an d er ase/write
7.1       EEADR and EEADRH Registers
                                                               operations, respectively. These bits are set by firmware
The EEAD R reg ister is us ed to add ress th e da ta           and c leared by ha rdware at the completion of th e
EEPROM for read and write op erations. Th e 8-b it             operation.
range of the register can address a me mory range of           The RD bit cannot be se t when acc essing program
256 bytes (00h to FFh). The EEADRH register expands            memory (EEPGD = 1). Program memory is read using
the ran ge to 1024 by tes by ad ding an additional tw o        table read instructions. See Section 6.1 “Table Reads
address bits.                                                  and Table Writes” regarding table reads.
7.2       EECON1 and EECON2 Registers                          The EEC ON2 regi ster is not a physical regi ster. It i s
                                                               used e xclusively in t he memory w rite a nd erase
Access to th e data EEPROM i s controlled b y two              sequences. Reading EECON2 will read all ‘0’s.
registers: EECON1 and EECON2. These are the same
registers which control access to the program memory
and are used in a s imilar manner fo r the da ta
EEPROM.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 99
PIC18F2XK20/4XK20
REGISTER 7-1:         EECON1: DATA EEPROM CONTROL 1 REGISTER
    R/W-x           R/W-x          U-0 R/W          -0        R/W-x           R/W-0        R/S-0           R/S-0
   EEPGD            CFGS            —             FREE       WRERR            WREN          WR               RD
bit 7                                                                                                             bit 0
Legend:
R = Readable bit              W = Writable bit
S = Bit can be set by software, but not cleared            U = Unimplemented bit, read as ‘0’
-n = Value at POR             ‘1’ = Bit is set             ‘0’ = Bit is cleared         x = Bit is unknown
bit 7           EEPGD: Flash Program or Data EEPROM Memory Select bit
                1 = Access Flash program memory
                0 = Access data EEPROM memory
bit 6           CFGS: Flash Program/Data EEPROM or Configuration Select bit
                1 = Access Configuration registers
                0 = Access Flash program or data EEPROM memory
bit 5           Unimplemented: Read as ‘0’
bit 4           FREE: Flash Row (Block) Erase Enable bit
                1 = Erase the program memory block addressed by TBLPTR on the next WR command
                    (cleared by completion of erase operation)
                0 = Perform write-only
bit 3           WRERR: Flash Program/Data EEPROM Error Flag bit(1)
                1 = A write operation is prematurely terminated (any Reset during self-timed programming in normal
                    operation, or an improper write attempt)
                0 = The write operation completed
bit 2           WREN: Flash Program/Data EEPROM Write Enable bit
                1 = Allows write cycles to Flash program/data EEPROM
                0 = Inhibits write cycles to Flash program/data EEPROM
bit 1           WR: Write Control bit
                1 = Initiates a data EEPROM erase/write cycle or a program memory erase cycle or write cycle.
                    (The operation is self-timed and the bit is cleared by hardware once write is complete.
                    The WR bit can only be set (not cleared) by software.)
                0 = Write cycle to the EEPROM is complete
bit 0           RD: Read Control bit
                1 = Initiates an EEPROM read (Read takes one cycle. RD is cleared by hardware. The RD bit can only
                    be set (not cleared) by software. RD bit cannot be set when EEPGD = 1 or CFGS = 1.)
                0 = Does not initiate an EEPROM read
Note 1:     When a WRERR occurs, the EEPGD and CFGS bits are not cleared. This allows tracing of the
            error condition.
DS41303G-page 100                                                                      2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
7.3       Reading the Data EEPROM                                   Additionally, the WREN bit in EECON1 must be set to
          Memory                                                    enable w rites. Th is mechanism pre vents accidental
                                                                    writes to d ata EEPROM du e to une xpected c ode
To read a da ta me mory lo cation, the us er must w rite            execution (i.e ., run away pro grams). Th e WR EN b it
the address to the EEADR reg ister, clear the EEPGD                 should be kept clear at all times, except when updating
control bit of the EECON1 register and then set control             the EEPROM . Th e WREN b it i s not cleared b y
bit, RD. The data is available on the very next instruc-            hardware.
tion cycle; therefore, the EEDATA register can be read
                                                                    After a write sequence ha s b een ini tiated, EEC ON1,
by the next instruction. EEDATA will hold this value until
                                                                    EEADR and EEDATA cannot be modified. The WR bit
another re ad op eration, or un til it is w ritten to by th e
                                                                    will be inhibited from being set unless the WREN bit is
user (during a write operation).
                                                                    set. Both WR and WREN cannot be set with the same
The basic process is shown in Example 7-1.                          instruction.
                                                                    At the completion of the write cy cle, the WR bit is
7.4       Writing to the Data EEPROM                                cleared by hardware and the EEPROM Interrupt Flag
          Memory                                                    bit, EEIF, is s et. Th e u ser m ay ei ther en able this
                                                                    interrupt o r poll thi s bi t. EEIF m ust be c leared b y
To write an EEPROM data location, the address must
                                                                    software.
first be written to the EEADR register and the data writ-
ten to the EED ATA reg ister. T he s equence i n
Example 7-2 must be followed to initiate the write cycle.           7.5      Write Verify
The write will not begin if this sequence is not exactly            Depending o n th e a pplication, good p rogramming
followed (w rite 55h to EEC ON2, w rite 0 AAh to                    practice m ay di ctate that th e v alue written t o th e
EECON2, then set WR bit) for each byte. It is strongly              memory should be v erified against the original value.
recommended that interrupts b e di sabled du ring thi s             This should be used in ap plications where excessive
code segment.                                                       writes can stress bits near the specification limit.
EXAMPLE 7-1:               DATA EEPROM READ
          MOVLW     DATA_EE_ADDR         ;
          MOVWF     EEADR                ;   Data Memory Address to read
          BCF       EECON1, EEPGD        ;   Point to DATA memory
          BCF       EECON1, CFGS         ;   Access EEPROM
          BSF       EECON1, RD           ;   EEPROM Read
          MOVF      EEDATA, W            ;   W = EEDATA
EXAMPLE 7-2:               DATA EEPROM WRITE
                     MOVLW     DATA_EE_ADDR_LOW         ;
                     MOVWF     EEADR                    ;   Data Memory Address to write
                     MOVLW     DATA_EE_ADDR_HI          ;
                     MOVWF     EEADRH                   ;
                     MOVLW     DATA_EE_DATA             ;
                     MOVWF     EEDATA                   ;   Data Memory Value to write
                     BCF       EECON1, EEPGD            ;   Point to DATA memory
                     BCF       EECON1, CFGS             ;   Access EEPROM
                     BSF       EECON1, WREN             ;   Enable writes
                     BCF       INTCON, GIE              ;   Disable Interrupts
                     MOVLW     55h                      ;
      Required       MOVWF     EECON2                   ;   Write 55h
      Sequence       MOVLW     0AAh                     ;
                     MOVWF     EECON2                   ;   Write 0AAh
                     BSF       EECON1, WR               ;   Set WR bit to begin write
                     BSF       INTCON, GIE              ;   Enable Interrupts
                                                        ; User code execution
                     BCF       EECON1, WREN             ; Disable writes on write complete (EEIF set)
 2010 Microchip Technology Inc.                                                                        DS41303G-page 101
PIC18F2XK20/4XK20
7.6      Operation During Code-Protect                           The write initiate sequence and the WREN bit together
                                                                 help prev ent an ac cidental w rite du ring bro wn-out,
Data EEPROM memory has its own code-protect bits                 power glitch or software malfunction.
in C onfiguration W ords. Ex ternal read an d w rite
operations are disabled if code protection is enabled.
                                                                 7.8       Using the Data EEPROM
The microcontroller itself can both read and write to the
internal data EEPROM, regardless of the state of the             The d ata EE PROM is a             high-endurance, byte
code-protect C onfiguration b it. R efer to Section 23.0         addressable a rray that has bee n optimiz ed for the
“Special Features of the CPU” fo r add itional                   storage of     frequently ch anging information (e.g.,
information.                                                     program variables or other data that are updated often).
                                                                 When variables in one section change frequently, while
                                                                 variables in another section do not change, it is possible
7.7      Protection Against Spurious Write
                                                                 to ex ceed the tot al n umber of w rite cycl es to the
There are c onditions when t he user may n ot w ant t o          EEPROM (s pecification D 124) withou t exceeding the
write to the data EEPROM memory. To protect against              total number of write cycles to a singlebyte (specification
spurious EEPROM write s, v arious mechanisms hav e               D120). If this is the case, then an array refresh must be
been im plemented. On po wer-up, t he WREN bi t i s              performed. For this reas on, va riables that c hange
cleared. In addition, writes to the EEPROM are blocked           infrequently (su ch as con stants, IDs, calibration, etc.)
during the Pow        er-up T imer per iod (TPWRT,               should be stored in Flash program memory.
parameter 33).                                                   A s imple data EEPRO M refre sh routine i s s hown in
                                                                 Example 7-3.
                                                                   Note:     If da ta EEPRO M is onl y us ed to s tore
                                                                             constants and/or data that changes rarely,
                                                                             an array refresh is likely not required. See
                                                                             specification.
EXAMPLE 7-3:           DATA EEPROM REFRESH ROUTINE
          CLRF        EEADR                      ;   Start at address 0
          BCF         EECON1,   CFGS             ;   Set for memory
          BCF         EECON1,   EEPGD            ;   Set for Data EEPROM
          BCF         INTCON,   GIE              ;   Disable interrupts
          BSF         EECON1,   WREN             ;   Enable writes
 Loop                                            ;   Loop to refresh array
          BSF         EECON1, RD                 ;   Read current address
          MOVLW       55h                        ;
          MOVWF       EECON2                     ;   Write 55h
          MOVLW       0AAh                       ;
          MOVWF       EECON2                     ;   Write 0AAh
          BSF         EECON1, WR                 ;   Set WR bit to begin write
          BTFSC       EECON1, WR                 ;   Wait for write to complete
          BRA         $-2
          INCFSZ      EEADR, F                   ; Increment address
          BRA         LOOP                       ; Not zero, do it again
          BCF         EECON1, WREN               ; Disable writes
          BSF         INTCON, GIE                ; Enable interrupts
DS41303G-page 102                                                                          2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
TABLE 7-1:         REGISTERS ASSOCIATED WITH DATA EEPROM MEMORY
                                                                                                   Reset
   Name           Bit 7            Bit 6    Bit 5   Bit 4      Bit 3    Bit 2    Bit 1    Bit 0    Values
                                                                                                  on page
INTCON         GIE/GIEH     PEIE/GIEL      TMR0IE   INT0IE     RBIE    TMR0IF   INT0IF    RBIF       59
EEADR           EEADR7       EEADR6        EEADR5 EEADR4 EEADR3 EEADR2 EEADR1 EEADR0                 61
EEADRH(1)          —                —        —        —         —        —      EEADR9 EEADR8        61
EEDATA        EEPROM Data Register                                                                   61
EECON2        EEPROM Control Register 2 (not a physical register)                                    61
EECON1          EEPGD          CFGS          —      FREE     WRERR     WREN      WR       RD         61
IPR2            OSCFIP         C1IP         C2IP    EEIP      BCLIP    HLVDIP   TMR3IP   CCP2IP      62
PIR2            OSCFIF             C1IF     C2IF    EEIF      BCLIF    HLVDIF   TMR3IF   CCP2IF      62
PIE2            OSCFIE         C1IE         C2IE    EEIE      BCLIE    HLVDIE   TMR3IE   CCP2IE      62
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used during Flash/EEPROM access.
Note 1: PIC18F26K20/PIC18F46K20 only.
 2010 Microchip Technology Inc.                                                          DS41303G-page 103
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 104    2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
8.0       8 x 8 HARDWARE MULTIPLIER                                EXAMPLE 8-1:              8 x 8 UNSIGNED
                                                                                             MULTIPLY ROUTINE
8.1       Introduction                                             MOVF        ARG1, W       ;
                                                                   MULWF       ARG2          ; ARG1 * ARG2 ->
All PIC18 devices include an 8 x 8 hardware multiplier                                       ; PRODH:PRODL
as part of the ALU. The multiplier performs an unsigned
operation and yields a 16-bit result that is stored in the
product register pair, PRODH:PRODL. The multiplier’s               EXAMPLE 8-2:              8 x 8 SIGNED MULTIPLY
operation doe s n ot af fect any fla gs in the ST ATUS                                       ROUTINE
register.
                                                                   MOVF        ARG1, W
Making multiplication a hardware operation allows it to            MULWF       ARG2          ;    ARG1 * ARG2 ->
be completed in a single instruction cycle. This has the                                     ;    PRODH:PRODL
advantages of hig her c omputational th roughput an d              BTFSC       ARG2, SB      ;    Test Sign Bit
reduced c ode s ize f or m ultiplication al gorithms a nd          SUBWF       PRODH, F      ;    PRODH = PRODH
allows the PIC18 devices to be used in many applica-                                         ;            - ARG1
                                                                   MOVF        ARG2, W
tions previously reserved for digital signal processors.
                                                                   BTFSC       ARG1, SB      ; Test Sign Bit
A c omparison of v arious ha rdware an d s oftware
                                                                   SUBWF       PRODH, F      ; PRODH = PRODH
multiply operations, along with the savings in memory                                        ;         - ARG2
and execution time, is shown in Table 8-1.
8.2       Operation
Example 8-1 shows the instruction sequence for an 8 x 8
unsigned multiplication. Only one instruction is required
when o ne of the arguments i s a lready lo aded i n th e
WREG register.
Example 8-2 shows the sequence to do an 8 x 8 signed
multiplication. To account for the sign bits of the argu-
ments, each argument’s Most Significant bit (MSb) is
tested and the appropriate subtractions are done.
TABLE 8-1:           PERFORMANCE COMPARISON FOR VARIOUS MULTIPLY OPERATIONS
                                                         Program                                      Time
                                                                      Cycles
       Routine               Multiply Method             Memory
                                                                      (Max)         @ 40 MHz         @ 10 MHz      @ 4 MHz
                                                         (Words)
                        Without hardware multiply            13        69                6.9 s       27.6 s       69 s
   8 x 8 unsigned
                            Hardware multiply                1             1         100 ns           400 ns        1 s
                        Without hardware multiply            33        91                9.1 s       36.4 s       91 s
      8 x 8 signed
                            Hardware multiply                6             6         600 ns            2.4 s       6 s
                        Without hardware multiply            21        242           24.2 s          96.8 s      242 s
 16 x 16 unsigned
                            Hardware multiply                28        28                2.8 s       11.2 s       28 s
                        Without hardware multiply            52        254           25.4 s          102.6 s     254 s
   16 x 16 signed
                            Hardware multiply                35        40                4.0 s       16.0 s       40 s
 2010 Microchip Technology Inc.                                                                         DS41303G-page 105
PIC18F2XK20/4XK20
Example 8-3 s hows t he sequence t o d o a 1 6 x 1 6          EQUATION 8-2:        16 x 16 SIGNED
unsigned m ultiplication. Equ ation 8-1 sh ows the                                 MULTIPLICATION
algorithm that is used. The 32-bit result is stored in four                        ALGORITHM
registers (RES<3:0>).                                         RES3:RES0 = ARG1H:ARG1L  ARG2H:ARG2L
                                                                        = (ARG1H  ARG2H  216) +
EQUATION 8-1:           16 x 16 UNSIGNED                                  (ARG1H  ARG2L  28) +
                        MULTIPLICATION                                    (ARG1L  ARG2H  28) +
                                                                          (ARG1L  ARG2L) +
                        ALGORITHM
                                                                          (-1  ARG2H<7>  ARG1H:ARG1L  216) +
 RES3:RES0     =    ARG1H:ARG1L  ARG2H:ARG2L
                                                                          (-1  ARG1H<7>  ARG2H:ARG2L  216)
               =    (ARG1H  ARG2H  216) +
                    (ARG1H  ARG2L  28) +
                    (ARG1L  ARG2H  28) +                    EXAMPLE 8-4:         16 x 16 SIGNED
                    (ARG1L  ARG2L)                                                MULTIPLY ROUTINE
                                                                  MOVF     ARG1L, W
EXAMPLE 8-3:            16 x 16 UNSIGNED                          MULWF    ARG2L           ; ARG1L * ARG2L ->
                        MULTIPLY ROUTINE                                                   ; PRODH:PRODL
                                                                  MOVFF    PRODH, RES1     ;
     MOVF      ARG1L, W
                                                                  MOVFF    PRODL, RES0     ;
     MULWF     ARG2L               ; ARG1L * ARG2L->
                                                              ;
                                   ; PRODH:PRODL
                                                                  MOVF     ARG1H, W
     MOVFF     PRODH, RES1         ;
                                                                  MULWF    ARG2H           ; ARG1H * ARG2H ->
     MOVFF     PRODL, RES0         ;
                                                                                           ; PRODH:PRODL
 ;
                                                                  MOVFF    PRODH, RES3     ;
     MOVF      ARG1H, W
                                                                  MOVFF    PRODL, RES2     ;
     MULWF     ARG2H               ; ARG1H * ARG2H->
                                                              ;
                                   ; PRODH:PRODL
                                                                  MOVF     ARG1L, W
     MOVFF     PRODH, RES3         ;
                                                                  MULWF    ARG2H           ;   ARG1L * ARG2H ->
     MOVFF     PRODL, RES2         ;
                                                                                           ;   PRODH:PRODL
 ;
                                                                  MOVF     PRODL, W        ;
     MOVF      ARG1L, W
                                                                  ADDWF    RES1, F         ;   Add cross
     MULWF     ARG2H               ;   ARG1L * ARG2H->
                                                                  MOVF     PRODH, W        ;   products
                                   ;   PRODH:PRODL
                                                                  ADDWFC   RES2, F         ;
     MOVF      PRODL, W            ;
                                                                  CLRF     WREG            ;
     ADDWF     RES1, F             ;   Add cross
                                                                  ADDWFC   RES3, F         ;
     MOVF      PRODH, W            ;   products
                                                              ;
     ADDWFC    RES2, F             ;
                                                                  MOVF     ARG1H, W        ;
     CLRF      WREG                ;
                                                                  MULWF    ARG2L           ;   ARG1H * ARG2L ->
     ADDWFC    RES3, F             ;
                                                                                           ;   PRODH:PRODL
 ;
                                                                  MOVF     PRODL, W        ;
     MOVF      ARG1H, W            ;
                                                                  ADDWF    RES1, F         ;   Add cross
     MULWF     ARG2L               ;   ARG1H * ARG2L->
                                                                  MOVF     PRODH, W        ;   products
                                   ;   PRODH:PRODL
                                                                  ADDWFC   RES2, F         ;
     MOVF      PRODL, W            ;
                                                                  CLRF     WREG            ;
     ADDWF     RES1, F             ;   Add cross
                                                                  ADDWFC   RES3, F         ;
     MOVF      PRODH, W            ;   products
                                                              ;
     ADDWFC    RES2, F             ;
                                                                  BTFSS    ARG2H, 7        ; ARG2H:ARG2L neg?
     CLRF      WREG                ;
                                                                  BRA      SIGN_ARG1       ; no, check ARG1
     ADDWFC    RES3, F             ;
                                                                  MOVF     ARG1L, W        ;
                                                                  SUBWF    RES2            ;
Example 8-4 s hows t he sequence t o d o a 1 6 x 1 6              MOVF     ARG1H, W        ;
signed multiply. Equ ation 8-2 s hows the al gorithm              SUBWFB   RES3
used. The 32 -bit res ult is sto red in four registers        ;
(RES<3:0>). To account for the sign bits of the arg u-        SIGN_ARG1
ments, the MSb for ea ch argument pair is tested and              BTFSS    ARG1H, 7        ; ARG1H:ARG1L neg?
                                                                  BRA      CONT_CODE       ; no, done
the appropriate subtractions are done.
                                                                  MOVF     ARG2L, W        ;
                                                                  SUBWF    RES2            ;
                                                                  MOVF     ARG2H, W        ;
                                                                  SUBWFB   RES3
                                                              ;
                                                              CONT_CODE
                                                                  :
DS41303G-page 106                                                                    2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
9.0       INTERRUPTS                                               9.2       Interrupt Priority
The PIC 18F2XK20/4XK20 dev ices hav e m ultiple                    The interrupt priority feature is enabled by setting the
interrupt sources and an i nterrupt priority feature that          IPEN bit of the RCON register. When interrupt priority
allows m ost in terrupt s ources to b e as signed a hig h          is ena bled the GIE and PEIE global in terrupt en able
priority lev el or a l ow pri ority l evel. T he h igh pri ority   bits of Compatibility mo de are repl aced by the GIEH
interrupt vector is at 0008h and the low priority interrupt        high priority, an d G IEL lo w p riority, gl obal in terrupt
vector is at 00 18h. A high prio rity inte rrupt eve nt w ill      enables. When set, the GIEH bit of the INTCON regis-
interrupt a low priority interrupt that may be in progress.        ter ena bles a ll i nterrupts th at h ave the ir as sociated
                                                                   IPRx register or INTCONx register priority bit set (high
There ar e t en registers w hich a re used to control
                                                                   priority). When clear, the GIEH bit disables all interrupt
interrupt operation. These registers are:
                                                                   sources including those selected as low priority. When
•   RCON                                                           clear, the GIEL bit of the INTCON register disables only
•   INTCON                                                         the int errupts th at hav e the ir as sociated priority bit
•   INTCON2                                                        cleared (low priority). When set, the GIEL bit enables
•   INTCON3                                                        the low priority sources when the GIEH bit is also set.
•   PIR1, PIR2                                                     When th e i nterrupt fl ag, e nable bit a nd appropriate
•   PIE1, PIE2                                                     global interrupt enable bit are all set, the interrupt will
                                                                   vector immediately to address 0008h for high priority,
•   IPR1, IPR2
                                                                   or 001 8h for l ow pri ority, d epending on l evel of th e
It is recommended that the Microchip header files sup-             interrupting s ource’s prio rity bi t. Ind ividual i nterrupts
plied w ith M PLAB® ID E be u sed f or the symbolic b it           can be disabled through their corresponding interrupt
names in t hese registers. T his a llows the a ssembler/           enable bits.
compiler to automatically take care of the placement of
these bits within the specified register.                          9.3       Interrupt Response
In general, interrupt sources have three bits to control
                                                                   When an interrupt is responded to, the global interrupt
their operation. They are:
                                                                   enable bit is cleared to di sable further interrupts. The
• Flag bit to indicate that an interrupt event                     GIE bit is the global interrupt enable when the IPEN bit
  occurred                                                         is cleared. When the IPEN bit is set, enabling interrupt
• Enable bit that allows program execution to                      priority l evels, the GIEH bi t is th e hig h pri ority gl obal
  branch to the interrupt vector address when the                  interrupt en able an d the GIEL bit is the low pri ority
  flag bit is set                                                  global interrupt enable. High priority interrupt sources
• Priority bit to select high priority or low priority             can interrupt a l ow p riority in terrupt. Low priority
                                                                   interrupts a re n ot processed w hile hi gh priority
9.1       Mid-Range Compatibility                                  interrupts are in progress.
                                                                   The return address is pu shed onto the stack and the
When the IPEN bit is cleared (default state), the interrupt        PC is loaded with the interrupt vector address (0008h
priority feature is disabled and interrupts are compatible         or 0018h). Once in th e Interrupt Service Routine, the
with PIC ® microcontroller mid-range devic es. In                  source(s) of the interrupt can be determined by polling
Compatibility mode, the interrupt priority bits of the IPRx        the int errupt flag bits in th e INTCO Nx and PIRx
registers have no ef fect. The P EIE bit of the IN TCON            registers. Th e int errupt fla g bit s m ust be c leared b y
register is the global interrupt enable for the peripherals.       software b efore re -enabling in terrupts to av oid
The PEIE bit disables only the peripheral interrupt                repeating the same interrupt.
sources and ena bles the peripheral in terrupt so urces
when the GIE bit is also set. The GIE bit of the INTCON            The “return f rom in terrupt” instruction, RETFIE, e xits
register is the global in terrupt enable which enables all         the interrupt routine and sets the GIE bit (GIEH or GIEL
non-peripheral interrupt s ources and dis ables all                if priority levels are used), which re-enables interrupts.
interrupt sources, including the peripherals. All interrupts       For external interrupt events, such as the INT pins or
branch to address 0008h in Compatibility mode.                     the PO RTB in terrupt-on-change, the in terrupt l atency
                                                                   will be thre e to four instruction cycles. The exact
                                                                   latency i s t he sa me f or one-cycle o r t wo-cycle
                                                                   instructions. I ndividual in terrupt fl ag bi ts ar e set,
                                                                   regardless of the status of their corresponding enable
                                                                   bits or the global interrupt enable bit.
                                                                     Note:      Do not use the MOVFF instruction to modify
                                                                                any of the interrupt control registers while
                                                                                any in terrupt is enabled. D oing so ma y
                                                                                cause erratic microcontroller behavior.
 2010 Microchip Technology Inc.                                                                           DS41303G-page 107
PIC18F2XK20/4XK20
FIGURE 9-1:                PIC18 INTERRUPT LOGIC
                                                                                                                  Wake-up if in
                                                                                                              Idle or Sleep modes
                                                                   TMR0IF
                                                                   TMR0IE
                                                                   TMR0IP
                                                                      RBIF        (1)
                                                                      RBIE
                                                                      RBIP
                                                                    INT0IF
                                                                    INT0IE
                                                                                                                    Interrupt to CPU
                                                                     INT1IF                                         Vector to Location
                                                                     INT1IE
                                                                     INT1IP                                         0008h
                           SSPIF
                           SSPIE                                     INT2IF
                           SSPIP                                     INT2IE
                                                                     INT2IP
                            ADIF                                                                                GIEH/GIE
                            ADIE
                            ADIP                                         IPEN
                            RCIF                                                    IPEN
                            RCIE
                            RCIP                                                GIEL/PEIE
                                                                                            IPEN
                                            Additional Peripheral Interrupts
   High Priority Interrupt Generation
   Low Priority Interrupt Generation
                         SSPIF
                         SSPIE
                         SSPIP
                                                                                                                    Interrupt to CPU
                                                                    TMR0IF                                          Vector to Location
                                                                    TMR0IE                                          0018h
                  ADIF                                              TMR0IP
                  ADIE
                  ADIP                                                 RBIF
                                                                                 (1)
                                                                       RBIE
                  RCIF                                                 RBIP                             GIEH/GIE
                  RCIE                                                                                  GIEL/PEIE
                  RCIP
                                                                      INT1IF
                                                                      INT1IE
                                                                      INT1IP
                                       Additional Peripheral Interrupts
                                                                     INT2IF
                                                                     INT2IE
                                                                     INT2IP
    Note   1:   The RBIF interrupt also requires the individual pin IOCB enables.
DS41303G-page 108                                                                                   2010 Microchip Technology Inc.
                                                                               PIC18F2XK20/4XK20
9.4           INTCON Registers                                                    Note:       Interrupt flag bits are set when an interrupt
The IN TCON registers are read able and writable                                              condition occurs, regardless of the state of
registers, w hich contain va rious en able, pri ority an d                                    its corresponding enable bit or t he global
flag bits.                                                                                    enable bi t. U ser sof tware should ensure
                                                                                              the appropriate interrupt flag bits are clear
                                                                                              prior to enabling an interrupt. This feature
                                                                                              allows for software polling.
REGISTER 9-1:               INTCON: INTERRUPT 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-x
   GIE/GIEH            PEIE/GIEL          TMR0IE            INT0IE             RBIE               TMR0IF         INT0IF           RBIF
bit 7                                                                                                                                    bit 0
Legend:
R = Readable bit                      W = Writable bit                     U = Unimplemented bit, read as ‘0’
-n = Value at POR                     ‘1’ = Bit is set                     ‘0’ = Bit is cleared              x = Bit is unknown
bit 7                GIE/GIEH: Global Interrupt Enable bit
                     When IPEN = 0:
                     1 = Enables all unmasked interrupts
                     0 = Disables all interrupts including peripherals
                     When IPEN = 1:
                     1 = Enables all high priority interrupts
                     0 = Disables all interrupts including low priority.
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 interrupts
                     0 = Disables all low priority 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(2)
                     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 by software)
                     0 = TMR0 register did not overflow
bit 1                INT0IF: INT0 External Interrupt Flag bit
                     1 = The INT0 external interrupt occurred (must be cleared by software)
                     0 = The INT0 external interrupt did not occur
bit 0                RBIF: RB Port Change Interrupt Flag bit(1)
                     1 = At least one of the RB<7:4> pins changed state (must be cleared by software)
                     0 = None of the RB<7:4> pins have changed state
Note 1:         A mismatch condition will continue to set the RBIF bit. Reading PORTB will end the
                mismatch condition and allow the bit to be cleared.
         2:     RB port change interrupts also require the individual pin IOCB enables.
 2010 Microchip Technology Inc.                                                                                       DS41303G-page 109
PIC18F2XK20/4XK20
REGISTER 9-2:          INTCON2: INTERRUPT CONTROL 2 REGISTER
    R/W-1           R/W-1           R/W-1           R/W-1          U-0                R/W-1          U-0           R/W-1
    RBPU           INTEDG0        INTEDG1          INTEDG2          —             TMR0IP              —              RBIP
bit 7                                                                                                                   bit 0
Legend:
R = Readable bit                W = Writable bit               U = Unimplemented bit, read as ‘0’
-n = Value at POR               ‘1’ = Bit is set               ‘0’ = Bit is cleared             x = Bit is unknown
bit 7            RBPU: PORTB Pull-up Enable bit
                 1 = All PORTB pull-ups are disabled
                 0 = PORTB pull-ups are enabled provided that the pin is an input and the corresponding WPUB bit is
                     set.
bit 6            INTEDG0: External Interrupt 0 Edge Select bit
                 1 = Interrupt on rising edge
                 0 = Interrupt on falling edge
bit 5            INTEDG1: External Interrupt 1 Edge Select bit
                 1 = Interrupt on rising edge
                 0 = Interrupt on falling edge
bit 4            INTEDG2: External Interrupt 2 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
  Note:     Interrupt flag bits are set when an interrupt
            condition occurs, regardless of the state of
            its corresponding enable bit or th e global
            enable b it. U ser s oftware sh ould en sure
            the appropriate interrupt flag bits are clear
            prior to enabling an interrupt. This feature
            allows for software polling.
DS41303G-page 110                                                                              2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
REGISTER 9-3:           INTCON3: INTERRUPT CONTROL 3 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
Legend:
R = Readable bit                   W = Writable bit              U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set              ‘0’ = Bit is cleared         x = Bit is unknown
bit 7             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 by 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 by software)
                  0 = The INT1 external interrupt did not occur
  Note:      Interrupt flag bits are set when an interrupt
             condition occurs, regardless of the state of
             its corresponding enable bit or th e global
             enable b it. U ser s oftware sh ould en sure
             the appropriate interrupt flag bits are clear
             prior to enabling an interrupt. This feature
             allows for software polling.
 2010 Microchip Technology Inc.                                                                      DS41303G-page 111
PIC18F2XK20/4XK20
9.5      PIR Registers                                               Note 1: Interrupt flag bits are set when an interrupt
The PIR registers contain the individual flag bits for the                   condition occurs, regardless of the state of
peripheral interrupts. Due to the n umber of p eripheral                     its corresponding enable bit or the Global
interrupt so urces, the re a re t wo Pe ripheral In terrupt                  Interrupt En able bi t, G IE of t he IN TCON
Request Flag registers (PIR1 and PIR2).                                      register.
                                                                           2: User software should ensure the appropri-
                                                                              ate in terrupt f lag bi ts ar e cl eared p rior to
                                                                              enabling an in terrupt and a fter se rvicing
                                                                              that interrupt.
REGISTER 9-4:           PIR1: PERIPHERAL INTERRUPT REQUEST (FLAG) REGISTER 1
      R/W-0          R/W-0             R-0            R-0        R/W-0               R/W-0         R/W-0            R/W-0
   PSPIF(1)           ADIF            RCIF           TXIF        SSPIF           CCP1IF           TMR2IF           TMR1IF
bit 7                                                                                                                     bit 0
Legend:
R = Readable bit                 W = Writable bit             U = Unimplemented bit, read as ‘0’
-n = Value at POR                ‘1’ = Bit is set             ‘0’ = Bit is cleared             x = Bit is unknown
bit 7            PSPIF: Parallel Slave Port Read/Write Interrupt Flag bit(1)
                 1 = A read or a write operation has taken place (must be cleared by 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 by software)
                  0 = The A/D conversion is not complete or has not been started
bit 5             RCIF: EUSART Receive Interrupt Flag bit
                  1 = The EUSART receive buffer, RCREG, is full (cleared when RCREG is read)
                  0 = The EUSART receive buffer is empty
bit 4             TXIF: EUSART Transmit Interrupt Flag bit
                  1 = The EUSART transmit buffer, TXREG, is empty (cleared when TXREG is written)
                  0 = The EUSART transmit buffer is full
bit 3             SSPIF: Master Synchronous Serial Port Interrupt Flag bit
                  1 = The transmission/reception is complete (must be cleared by software)
                  0 = Waiting to transmit/receive
bit 2            CCP1IF: CCP1 Interrupt Flag bit
                 Capture mode:
                 1 = A TMR1 register capture occurred (must be cleared by software)
                 0 = No TMR1 register capture occurred
                 Compare mode:
                 1 = A TMR1 register compare match occurred (must be cleared by 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 by software)
                  0 = No TMR2 to PR2 match occurred
bit 0             TMR1IF: TMR1 Overflow Interrupt Flag bit
                  1 = TMR1 register overflowed (must be cleared by software)
                  0 = TMR1 register did not overflow
   Note 1: The PSPIF bit is unimplemented on 28-pin devices and will read as ‘0’.
DS41303G-page 112                                                                             2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
REGISTER 9-5:          PIR2: PERIPHERAL INTERRUPT REQUEST (FLAG) REGISTER 2
    R/W-0           R/W-0              R/W-0          R/W-0      R/W-0               R/W-0      R/W-0         R/W-0
   OSCFIF            C1IF              C2IF           EEIF       BCLIF           HLVDIF        TMR3IF        CCP2IF
bit 7                                                                                                             bit 0
Legend:
R = Readable bit                   W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set           ‘0’ = Bit is cleared           x = Bit is unknown
bit 7            OSCFIF: Oscillator Fail Interrupt Flag bit
                 1 = Device oscillator failed, clock input has changed to HFINTOSC (must be cleared by software)
                 0 = Device clock operating
bit 6            C1IF: Comparator C1 Interrupt Flag bit
                 1 = Comparator C1 output has changed (must be cleared by software)
                 0 = Comparator C1 output has not changed
bit 5            C2IF: Comparator C2 Interrupt Flag bit
                 1 = Comparator C2 output has changed (must be cleared by software)
                 0 = Comparator C2 output has not changed
bit 4            EEIF: Data EEPROM/Flash Write Operation Interrupt Flag bit
                 1 = The write operation is complete (must be cleared by software)
                 0 = The write operation is not complete or has not been started
bit 3            BCLIF: Bus Collision Interrupt Flag bit
                 1 = A bus collision occurred (must be cleared by software)
                 0 = No bus collision occurred
bit 2            HLVDIF: Low-Voltage Detect Interrupt Flag bit
                 1 = A low-voltage condition occurred (direction determined by the VDIRMAG bit of the
                     HLVDCON register)
                 0 = A low-voltage condition has not occurred
bit 1            TMR3IF: TMR3 Overflow Interrupt Flag bit
                 1 = TMR3 register overflowed (must be cleared by software)
                 0 = TMR3 register did not overflow
bit 0            CCP2IF: CCP2 Interrupt Flag bit
                 Capture mode:
                 1 = A TMR1 register capture occurred (must be cleared by software)
                 0 = No TMR1 register capture occurred
                 Compare mode:
                 1 = A TMR1 register compare match occurred (must be cleared by software)
                 0 = No TMR1 register compare match occurred
                 PWM mode:
                 Unused in this mode.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 113
PIC18F2XK20/4XK20
9.6      PIE Registers
The PIE registers contain the in dividual enable bits for
the peripheral interrupt s. Due to the number of periph-
eral interrupt sources, there are two Peripheral Interrupt
Enable registers (PIE1 and PIE2). When IPEN = 0, the
PEIE bit must be se t to enable any of thes e peripheral
interrupts.
REGISTER 9-6:           PIE1: PERIPHERAL INTERRUPT ENABLE (FLAG) REGISTER 1
      R/W-0           R/W-0          R/W-0          R/W-0       R/W-0               R/W-0        R/W-0           R/W-0
   PSPIE(1)           ADIE           RCIE           TXIE        SSPIE           CCP1IE          TMR2IE          TMR1IE
bit 7                                                                                                                 bit 0
Legend:
R = Readable bit                 W = Writable bit            U = Unimplemented bit, read as ‘0’
-n = Value at POR                ‘1’ = Bit is set            ‘0’ = Bit is cleared             x = Bit is unknown
bit 7             PSPIE: Parallel Slave Port Read/Write Interrupt Enable bit(1)
                  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: EUSART Receive Interrupt Enable bit
                  1 = Enables the EUSART receive interrupt
                  0 = Disables the EUSART receive interrupt
bit 4             TXIE: EUSART Transmit Interrupt Enable bit
                  1 = Enables the EUSART transmit interrupt
                  0 = Disables the EUSART 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
Note 1:       The PSPIE bit is unimplemented on 28-pin devices and will read as ‘0’.
DS41303G-page 114                                                                            2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
REGISTER 9-7:          PIE2: PERIPHERAL INTERRUPT ENABLE (FLAG) REGISTER 2
    R/W-0           R/W-0              R/W-0          R/W-0      R/W-0               R/W-0      R/W-0         R/W-0
   OSCFIE            C1IE              C2IE           EEIE       BCLIE           HLVDIE        TMR3IE        CCP2IE
bit 7                                                                                                             bit 0
Legend:
R = Readable bit                   W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set           ‘0’ = Bit is cleared           x = Bit is unknown
bit 7            OSCFIE: Oscillator Fail Interrupt Enable bit
                 1 = Enabled
                 0 =D isabled
bit 6            C1IE: Comparator C1 Interrupt Enable bit
                 1 = Enabled
                 0 = Disabled
bit 5            C2IE: Comparator C2 Interrupt Enable bit
                 1 = Enabled
                 0 = Disabled
bit 4            EEIE: Data EEPROM/Flash Write Operation Interrupt Enable bit
                 1 = Enabled
                 0 =D isabled
bit 3            BCLIE: Bus Collision Interrupt Enable bit
                 1 = Enabled
                 0 =D isabled
bit 2            HLVDIE: Low-Voltage Detect Interrupt Enable bit
                 1 = Enabled
                 0 =D isabled
bit 1            TMR3IE: TMR3 Overflow Interrupt Enable bit
                 1 = Enabled
                 0 =D isabled
bit 0            CCP2IE: CCP2 Interrupt Enable bit
                 1 = Enabled
                 0 =D isabled
 2010 Microchip Technology Inc.                                                                     DS41303G-page 115
PIC18F2XK20/4XK20
9.7       IPR Registers
The IPR registers contain the individual priority bits for the
peripheral inte rrupts. D ue t o the n umber of per ipheral
interrupt s ources, there are two Per ipheral Interrupt
Priority registers (IPR1 and IPR2). Using the priority bits
requires that the Interrupt P riority E nable (I PEN) bit be
set.
REGISTER 9-8:            IPR1: PERIPHERAL INTERRUPT PRIORITY REGISTER 1
      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(1)            ADIP            RCIP             TXIP        SSPIP           CCP1IP          TMR2IP          TMR1IP
bit 7                                                                                                                     bit 0
Legend:
R = Readable bit                   W = Writable bit              U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set              ‘0’ = Bit is cleared             x = Bit is unknown
bit 7             PSPIP: Parallel Slave Port Read/Write Interrupt Priority bit(1)
                  1 = High priority
                  0 = Low priority
bit 6             ADIP: A/D Converter Interrupt Priority bit
                  1 = High priority
                  0 = Low priority
bit 5             RCIP: EUSART Receive Interrupt Priority bit
                  1 = High priority
                  0 = Low priority
bit 4             TXIP: EUSART 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
   Note 1: The PSPIF bit is unimplemented on 28-pin devices and will read as ‘0’.
DS41303G-page 116                                                                                2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
REGISTER 9-9:          IPR2: PERIPHERAL INTERRUPT PRIORITY REGISTER 2
    R/W-1           R/W-1              R/W-1          R/W-1       R/W-1               R/W-1      R/W-1         R/W-1
   OSCFIP            C1IP              C2IP           EEIP        BCLIP           HLVDIP        TMR3IP        CCP2IP
bit 7                                                                                                              bit 0
Legend:
R = Readable bit                   W = Writable bit            U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set            ‘0’ = Bit is cleared           x = Bit is unknown
bit 7            OSCFIP: Oscillator Fail Interrupt Priority bit
                 1 = High priority
                 0 = Low priority
bit 6            C1IP: Comparator C1 Interrupt Priority bit
                 1 = High priority
                 0 = Low priority
bit 5            C2IP: Comparator C2 Interrupt Priority bit
                 1 = High priority
                 0 = Low priority
bit 4            EEIP: Data EEPROM/Flash Write Operation Interrupt Priority bit
                 1 = High priority
                 0 = Low priority
bit 3            BCLIP: Bus Collision Interrupt Priority bit
                 1 = High priority
                 0 = Low priority
bit 2            HLVDIP: Low-Voltage Detect Interrupt Priority bit
                 1 = High priority
                 0 = Low priority
bit 1            TMR3IP: TMR3 Overflow Interrupt Priority bit
                 1 = High priority
                 0 = Low priority
bit 0            CCP2IP: CCP2 Interrupt Priority bit
                 1 = High priority
                 0 = Low priority
 2010 Microchip Technology Inc.                                                                      DS41303G-page 117
PIC18F2XK20/4XK20
9.8       RCON Register
The RCON register contains flag bits which are used to
determine the cause of the last Reset or wake-up from
Idle or Sleep modes. RCON also contains the IPEN bit
which enables interrupt priorities.
The operation of the SBOREN bit and the Reset flag
bits is discussed in more detail in Section 4.1 “RCON
Register”.
REGISTER 9-10:        RCON: RESET CONTROL REGISTER
      R/W-0         R/W-1              U-0           R/W-1        R-1               R-1        R/W-0           R/W-0
        IPEN     SBOREN     (1)
                                        —             RI          TO                PD         POR  (1)
                                                                                                                 BOR
bit 7                                                                                                               bit 0
Legend:
R = Readable bit                  W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR                 ‘1’ = Bit is set           ‘0’ = Bit is cleared           x = Bit is unknown
bit 7           IPEN: Interrupt Priority Enable bit
                1 = Enable priority levels on interrupts
                0 = Disable priority levels on interrupts (Mid-Range Compatibility mode)
bit 6           SBOREN: Software BOR Enable bit(1)
                For details of bit operation, see Register 4-1.
bit 5           Unimplemented: Read as ‘0’
bit 4           RI: RESET Instruction Flag bit
                For details of bit operation, see Register 4-1.
bit 3           TO: Watchdog Time-out Flag bit
                For details of bit operation, see Register 4-1.
bit 2           PD: Power-down Detection Flag bit
                For details of bit operation, see Register 4-1
bit 1           POR: Power-on Reset Status bit
                For details of bit operation, see Register 4-1.
bit 0           BOR: Brown-out Reset Status bit
                For details of bit operation, see Register 4-1.
  Note 1: Actual Reset values are determined by device configuration and the nature of the device Reset.
          See Register 4-1 for additional information.
DS41303G-page 118                                                                          2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
9.9       INTn Pin Interrupts                                      9.10     TMR0 Interrupt
External i nterrupts on the R B0/INT0, R B1/INT1 an d              In 8-bit mode (which is the default), an overflow in the
RB2/INT2 pins are edge-triggered. If the corresponding             TMR0 register (FFh  00h) will set flag bit, TMR0IF. In
INTEDGx bit in the INTCON2 register is set (= 1), the              16-bit mode, an overflow in the TMR0H:TMR0L regis-
interrupt is triggered by a rising edge; if the bit is clear,      ter pair (FFFFh 0000h) will set TMR0IF. The interrupt
the tri gger is on the fal ling ed ge. When a va lid edg e         can be enabled/disabled by setting/clearing enable bit,
appears on the R Bx/INTx pin, the corresponding flag               TMR0IE of the INTCO N re gister. I nterrupt priority f or
bit, INTxF, i s set. Th is in terrupt c an be di sabled b y        Timer0 i s determined b y the v alue c ontained in th e
clearing the corresponding enable bit, INTxE. Flag bit,            interrupt priority bit, TMR0IP of the INTCON2 register.
INTxF, mu st be cleared by software in the In terrupt              See Section 12.0 “Timer0 Module” for further details
Service Routine before re-enabling the interrupt.                  on the Timer0 module.
All external interrupts (INT0, INT1 and INT2) can wake-
up the processor from Idle or Sleep modes if bit INTxE             9.11     PORTB Interrupt-on-Change
was set prior to going into those modes. If the Global
                                                                   An input change on PORTB<7:4> sets flag bit, RBIF of
Interrupt E nable bit, G IE, is s et, the pro cessor wil l
                                                                   the IN TCON register. The i nterrupt c an be enabled/
branch to the interrupt vector following wake-up.
                                                                   disabled b y s etting/clearing ena ble bi t, R BIE of th e
Interrupt priority for INT1 and INT2 is determined by the          INTCON r egister. P ins mu st al so be in dividually
value contained in the interrupt priority bits, INT1IP and         enabled w ith t he IOCB re gister. In terrupt priority f or
INT2IP of the INTCON3 register. There is no priority bit           PORTB interrupt-on-change is determined by the value
associated with INT0. It is always a high priority inter-          contained in the interrupt prio rity bit, RBIP of the
rupt source.                                                       INTCON2 register.
                                                                   9.12     Context Saving During Interrupts
                                                                   During inte rrupts, the r eturn PC add ress i s s aved o n
                                                                   the stack. Additionally, the WREG, STATUS and BSR
                                                                   registers a re saved on t he fast return stack. I f a f ast
                                                                   return fro m interrupt i s not us ed (s ee Section 5.1.3
                                                                   “Fast Register Stack”), the user may need to save the
                                                                   WREG, ST ATUS a nd BSR re gisters o n en try to th e
                                                                   Interrupt Serv ice R outine. D epending on the user’s
                                                                   application, other registers may also need to be saved.
                                                                   Example 9-1 saves and restores the WREG, STATUS
                                                                   and BSR registers during an Interrupt Service Routine.
EXAMPLE 9-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_TMEP located anywhere
 ;
 ; USER ISR CODE
 ;
 MOVFF     BSR_TEMP, BSR                                 ; Restore BSR
 MOVF      W_TEMP, W                                     ; Restore WREG
 MOVFF     STATUS_TEMP, STATUS                           ; Restore STATUS
 2010 Microchip Technology Inc.                                                                         DS41303G-page 119
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 120    2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
10.0       I/O PORTS                                                 Reading the PORTA regi ster read s the status of the
                                                                     pins, whereas writing to it, will write to the PORT latch.
Depending on the de vice s elected and fea tures
                                                                     The Data Latch (LATA) register is also memory mapped.
enabled, there are up to five ports available. Some pins
                                                                     Read-modify-write operations on the LATA register read
of the I/O por ts are mu ltiplexed with an alte rnate
                                                                     and write the latched output value for PORTA.
function from the peripheral features on the device. In
general, when a peripheral is enabled, that pin may not              The R A4 pin is mu ltiplexed w ith the T imer0 mo dule
be used as a general purpose I/O pin.                                clock in put and on e o f th e c omparator ou tputs to
                                                                     become t he R A4/T0CKI/C1OUT pin. P ins RA6 a nd
Each port has three registers for it s operation. These
                                                                     RA7 are multiplexed with the main oscillator pins; they
registers are:
                                                                     are enabled as oscillator or I/O pins by the selection of
• TRIS register (data direction register)                            the main o scillator i n t he Configuration register ( see
• PORT register (reads the levels on the pins of the                 Section 23.1 “Configuration Bits” for details). When
  device)                                                            they are not used as port pins, RA6 and RA7 and their
• LAT register (output latch)                                        associated TRIS and LAT bits are read as ‘0’.
The Data Latch (LAT register) is useful for read-modify-             The ot her P ORTA pins ar e mu ltiplexed w ith a nalog
write op erations o n th e va lue tha t the I/O pi ns a re           inputs, t he a nalog VREF+ and VREF- i nputs, and the
driving.                                                             comparator voltage reference output. The operation of
                                                                     pins RA<3:0> and RA5 as analog is selected by setting
A simplified m odel o f a g eneric I/O port, w ithout th e
                                                                     the ANS<4:0> bits in t he ANSEL register which is the
interfaces to other peripherals, is shown in Figure 10-1.
                                                                     default setting after a Power-on Reset.
FIGURE 10-1:               GENERIC I/O PORT                          Pins RA0 through RA5 may also be used as comparator
                                                                     inputs or outputs by setting th e appropriate bits in th e
                           OPERATION
                                                                     CM1CON0 and CM2CON0 registers.
    RD LAT                                                             Note:      On a Power-on Reset, RA5 and RA<3:0>
                                                                                  are configured as analog inputs and read
    Data                                                                          as ‘0’. RA4 is configured as a digital input.
    Bus               D       Q
    WR LAT                                              I/O pin(1)
                                                                     The RA4/T0CKI/C1OUT pin is a Schmitt Trigger input.
    or Port
                      CK
                                                                     All o ther P ORTA pi ns h ave T TL in put l evels a nd f ull
                                                                     CMOS output drivers.
                     Data Latch
                                                                     The TRISA register controls the drivers of the PORTA
                      D     Q                                        pins, even when they are being used as analog inputs.
                                                                     The user should ensure the bits in the TRISA register
    WR TRIS
                      CK                                             are maintained set when using them as analog inputs.
                    TRIS Latch                          Input
                                                        Buffer       EXAMPLE 10-1:            INITIALIZING PORTA
    RD TRIS                                                           CLRF      PORTA     ;   Initialize PORTA by
                                                                                          ;   clearing output
                                                                                          ;   data latches
                                      Q       D
                                                                      CLRF      LATA      ;   Alternate method
                                                                                          ;   to clear output
                                          ENEN                                            ;   data latches
    RD Port                                                           MOVLW     E0h       ;   Configure I/O
                                                                      MOVWF     ANSEL     ;   for digital inputs
                                                                      MOVLW     0CFh      ;   Value used to
   Note 1:    I/O pins have diode protection to VDD and VSS.
                                                                                          ;   initialize data
                                                                                          ;   direction
                                                                      MOVWF     TRISA     ;   Set RA<3:0> as inputs
10.1       PORTA, TRISA and LATA                                                          ;   RA<5:4> as outputs
           Registers
PORTA i s an 8-b it w ide, bidirectional po rt. Th e
corresponding data direction register is TRISA. Setting
a TRISA bit (= 1) will make the corresponding PORTA
pin an input (i.e., disable the output driver). Clearing a
TRISA bi t (= 0) will m ake th e c orresponding PO RTA
pin an output (i.e., enable the output driver and put the
contents of the output latch on the selected pin).
 2010 Microchip Technology Inc.                                                                           DS41303G-page 121
PIC18F2XK20/4XK20
TABLE 10-1:         PORTA I/O SUMMARY
                                     TRIS               I/O
       Pin             Function                I/O                                           Description
                                    Setting            Type
RA0/AN0/C12IN0-           RA0          0        O      DIG     LATA<0> data output; not affected by analog input.
                                       1        I      TTL     PORTA<0> data input; disabled when analog input enabled.
                          AN0          1        I      ANA     ADC input channel 0. Default input configuration on POR; does not
                                                               affect digital output.
                        C12IN0-        1        I      ANA     Comparators C1 and C2 inverting input, channel 0. Analog select is
                                                               shared with ADC.
RA1/AN1/C12IN1-           RA1          0        O      DIG     LATA<1> data output; not affected by analog input.
                                       1        I      TTL     PORTA<1> data input; disabled when analog input enabled.
                          AN1          1        I      ANA     ADC input channel 1. Default input configuration on POR; does not
                                                               affect digital output.
                        C12IN1-        1        I      ANA     Comparators C1 and C2 inverting input, channel 1. Analog select is
                                                               shared with ADC.
RA2/AN2/C2IN+             RA2          0        O      DIG     LATA<2> data output; not affected by analog input. Disabled when
VREF-/CVREF                                                    CVREF output enabled.
                                       1        I      TTL     PORTA<2> data input. Disabled when analog functions enabled;
                                                               disabled when CVREF output enabled.
                          AN2          1        I      ANA     ADC input channel 2. Default input configuration on POR; not affected
                                                               by analog output.
                         C2IN+         1        I      ANA     Comparator C2 non-inverting input. Analog selection is shared with
                                                               ADC.
                         VREF-         1        I      ANA     ADC and comparator voltage reference low input.
                        CVREF          x        O      ANA     Comparator voltage reference output. Enabling this feature disables
                                                               digital I/O.
RA3/AN3/C1IN+/            RA3          0        O      DIG     LATA<3> data output; not affected by analog input.
VREF+                                  1        I      TTL     PORTA<3> data input; disabled when analog input enabled.
                          AN3          1        I      ANA     A/D input channel 3. Default input configuration on POR.
                         C1IN+         1        I      ANA     Comparator C1 non-inverting input. Analog selection is shared with
                                                               ADC.
                         VREF+         1        I      ANA     ADC and comparator voltage reference high input.
RA4/T0CKI/C1OUT           RA4          0        O      DIG     LATA<4> data output.
                                       1        I       ST     PORTA<4> data input; default configuration on POR.
                         T0CKI         1        I       ST     Timer0 clock input.
                        C1OUT          0        O      DIG     Comparator 1 output; takes priority over port data.
RA5/AN4/SS/               RA5          0        O      DIG     LATA<5> data output; not affected by analog input.
HLVDIN/C2OUT                           1        I      TTL     PORTA<5> data input; disabled when analog input enabled.
                          AN4          1        I      ANA     A/D input channel 4. Default configuration on POR.
                          SS           1        I      TTL     Slave select input for SSP (MSSP module).
                        HLVDIN         1        I      ANA     Low-Voltage Detect external trip point input.
                        C2OUT          0        O      DIG     Comparator 2 output; takes priority over port data.
OSC2/CLKOUT/              RA6          0        O      DIG     LATA<6> data output. Enabled in RCIO, INTIO2 and ECIO modes only.
RA6                                    1        I      TTL     PORTA<6> data input. Enabled in RCIO, INTIO2 and ECIO modes
                                                               only.
                         OSC2          x        O      ANA     Main oscillator feedback output connection (XT, HS and LP modes).
                       CLKOUT          x        O      DIG     System cycle clock output (FOSC/4) in RC, INTIO1 and EC Oscillator
                                                               modes.
Legend:      DIG = Digital level output; TTL = TTL input buffer; ST = Schmitt Trigger input buffer; ANA = Analog level input/output;
             x = Don’t care (TRIS bit does not affect port direction or is overridden for this option).
DS41303G-page 122                                                                                     2010 Microchip Technology Inc.
                                                                             PIC18F2XK20/4XK20
TABLE 10-1:          PORTA I/O SUMMARY (CONTINUED)
                                       TRIS                I/O
        Pin             Function                 I/O                                              Description
                                      Setting             Type
OSC1/CLKIN/RA7               RA7         0        O       DIG      LATA<7> data output. Disabled in external oscillator modes.
                                         1        I       TTL      PORTA<7> data input. Disabled in external oscillator modes.
                          OSC1           x        I       ANA      Main oscillator input connection.
                          CLKIN          x        I       ANA      Main clock input connection.
Legend:       DIG = Digital level output; TTL = TTL input buffer; ST = Schmitt Trigger input buffer; ANA = Analog level input/output;
              x = Don’t care (TRIS bit does not affect port direction or is overridden for this option).
TABLE 10-2:          SUMMARY OF REGISTERS ASSOCIATED WITH PORTA
                                                                                                                                  Reset
    Name             Bit 7          Bit 6        Bit 5           Bit 4       Bit 3         Bit 2        Bit 1       Bit 0         Values
                                                                                                                                 on page
PORTA               RA7(1)         RA6(1)        RA5             RA4          RA3          RA2          RA1         RA0            62
LATA              LATA7(1)         LATA6(1)   PORTA Data Latch Register (Read and Write to Data Latch)                             62
TRISA             TRISA7(1) TRISA6(1) PORTA Data Direction Control Register                                                        62
ANSEL              ANS7(2)         ANS6(2)      ANS5(2)         ANS4         ANS3         ANS2          ANS1       ANS0            62
SLRCON                —              —            —         SLRE(2)         SLRD(2)       SLRC          SLRB       SLRA            63
CM1CON0             C1ON           C1OUT        C1OE         C1POL           C1SP          C1R         C1CH1      C1CH0            62
CM2CON0             C2ON           C2OUT        C2OE         C2POL           C2SP          C2R         C2CH1      C2CH0            62
CVRCON             CVREN           CVROE        CVRR         CVRSS           CVR3         CVR2          CVR1       CVR0            61
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used by PORTA.
Note 1: RA<7:6> and their associated latch and data direction bits are enabled as I/O pins based on oscillator
        configuration; otherwise, they are read as ‘0’.
     2: Not implemented on PIC18F2XK20 devices.
 2010 Microchip Technology Inc.                                                                                    DS41303G-page 123
PIC18F2XK20/4XK20
10.2      PORTB, TRISB and LATB                               10.3.2       INTERRUPT-ON-CHANGE
          Registers                                           Four o f the PO RTB p ins (R B<7:4>) a re i ndividually
                                                              configurable as interrupt-on-change pins. C ontrol bits
PORTB is an 8-b it wide, bidirectional port. The corre-
                                                              in the IOCB register enable (when set) or disable (when
sponding da ta dire ction register is TRISB. Setting a
                                                              clear) the interrupt function for each pin.
TRISB bit (= 1) w ill m ake t he c orresponding PO RTB
pin an input (i.e., disable the output driver). Clearing a    When set, the RBIE bit of the INTCON register enables
TRISB bit (= 0) w ill m ake t he c orresponding PO RTB        interrupts on all pins which also have their correspond-
pin an output (i.e., enable the output driver and put the     ing IOCB bit set. When clear, the RBIE bit disables all
contents of the output latch on the selected pin).            interrupt-on-changes.
The D ata Latch reg ister (LA TB) is also me mory             Only pins configured as inputs can cause this interrupt
mapped. R ead-modify-write o perations o n t he LATB          to occur (i.e., any RB<7:4> pin configured as an output
register read a nd w rite th e lat ched ou tput va lue for    is excluded from the interrupt-on-change comparison).
PORTB.                                                        For ena bled in terrupt-on-change pins, th e va lues a re
                                                              compared with the old value latched on the last read of
EXAMPLE 10-2:           INITIALIZING PORTB                    PORTB. T he ‘ mismatch’ outputs of t he la st r ead ar e
CLRF      PORTB  ; Initialize PORTB by                        OR’d together to set the PORTB Change Interrupt flag
                 ; clearing output                            bit (RBIF) in the INTCON register.
                 ; data latches
                                                              This i nterrupt c an wa ke th e device from the Sleep
CLRF      LATB   ; Alternate method
                 ; to clear output                            mode, o r an y o f th e Id le modes. Th e u ser, i n th e
                 ; data latches                               Interrupt Service Routine, can clear the interrupt in the
CLRF      ANSELH ; Set RB<4:0> as                             following manner:
                 ; digital I/O pins                           a)    Any r ead o r w rite of PORTB to c lear t he mis-
                 ;(required if config bit
                                                                    match condition ( except w hen P ORTB i s t he
                 ; PBADEN is set)
                                                                    source or destination of a MOVFF instruction).
MOVLW     0CFh   ; Value used to
                 ; initialize data                            b)    Clear the flag bit, RBIF.
                 ; direction                                  A mismatch condition will continue to set the RBIF flag bit.
MOVWF     TRISB  ; Set RB<3:0> as inputs
                                                              Reading or w riting P ORTB will e nd the mis match
                 ; RB<5:4> as outputs
                                                              condition and allow the RBIF bit to be cleared. The latch
                 ; RB<7:6> as inputs
                                                              holding the last read value is not affected by a MCLR nor
                                                              Brown-out R eset. Afte r ei ther o ne of th ese R esets, th e
10.3      Additional PORTB Pin Functions                      RBIF flag will continue to be set if a mismatch is present.
PORTB pins R B<7:4> h ave an i nterrupt-on-change                  Note:   If a change on th e I/O p in should occur
option. All PORTB pins have a weak pull-up option. An                      when the read operation is being executed
alternate CCP2 peripheral option is available on RB3.                      (start of the Q2 cycle), t hen the RBIF
                                                                           interrupt flag may not get set. Furthermore,
10.3.1      WEAK PULL-UPS                                                  since a read or write on a port affects all bits
Each of the PORTB pins has an individually controlled                      of that port, care must be taken when using
weak internal pull-up. When set, each bit of the WPUB                      multiple pins in Interrupt-on-change mode.
register enables the corresponding pin pull-up. When                       Changes on one pin may not be seen while
cleared, the RBPU bit of the INTCON2 register enables                      servicing changes on another pin.
pull-ups on all pins which also have their corresponding      The i nterrupt-on-change fea ture is rec ommended f or
WPUB bit se t. Whe n se t, the RBPU bit disables al l         wake-up on k ey depression operation and operations
weak pull-ups. The weak pull-up is automatically turned       where PORTB is only used for the interrupt-on-change
off w hen t he p ort pin is co nfigured as a n output. T he   feature. Polling of P ORTB is not recommended while
pull-ups are disabled on a Power-on Reset.                    using the interrupt-on-change feature.
  Note:     On a Power-o n R eset, R B<4:0> are               10.3.3       ALTERNATE CCP2 OPTION
            configured as analog inputs by default and
            read as ‘0’; R B<7:5> are configured as           RB3 can be configured as the alternate peripheral pin
            digital inputs.                                   for the CCP2 module by clearing the CCP2MX Config-
                                                              uration bit of C ONFIG3H. The d efault state of th e
            When the PBADEN Configuration bit is set          CCP2MX Configuration bit is ‘1’ which selects RC1 as
            to ‘1 ’, R B<4:0> w ill al ternatively b e        the CCP2 peripheral pin.
            configured as digital inputs on POR.
DS41303G-page 124                                                                        2010 Microchip Technology Inc.
                                                                         PIC18F2XK20/4XK20
TABLE 10-3:          PORTB I/O SUMMARY
                                     TRIS              I/O
        Pin             Function               I/O                                          Description
                                    Setting           Type
RB0/INT0/FLT0/            RB0          0        O      DIG    LATB<0> data output; not affected by analog input.
AN12
                                       1        I      TTL    PORTB<0> data input; Programmable weak pull-up. Disabled when
                                                              analog input enabled.(1)
                          INT0         1        I      ST     External interrupt 0 input.
                          FLT0         1        I      ST     Enhanced PWM Fault input (ECCP1 module); enabled by software.
                          AN12         1        I     ANA     A/D input channel 12.(1)
RB1/INT1/AN10/            RB1          0        O      DIG    LATB<1> data output; not affected by analog input.
C12IN3-/P1C
                                       1        I      TTL    PORTB<1> data input; Programmable weak pull-up. Disabled when
                                                              analog input enabled.(1)
                          INT1         1        I      ST     External Interrupt 1 input.
                          AN10         1        I     ANA     ADC input channel 10.(1)
                        C12IN3-        1        I     ANA     Comparators C1 and C2 inverting input, channel 3. Analog select is
                                                              shared with ADC.
                          P1C          0        O      DIG    ECCP PWM output (28-pin devices only).
RB2/INT2/AN8/             RB2          0        O      DIG    LATB<2> data output; not affected by analog input.
P1B                                    1        I      TTL    PORTB<2> data input; Programmable weak pull-up. Disabled when
                                                              analog input enabled.(1)
                          INT2         1        I      ST     External interrupt 2 input.
                          AN8          1        I     ANA     ADC input channel 8.(1)
                          P1B          0        O      DIG    ECCP PWM output (28-pin devices only).
RB3/AN9/C12IN2-/          RB3          0        O      DIG    LATB<3> data output; not affected by analog input.
CCP2
                                       1        I      TTL    PORTB<3> data input; Programmable weak pull-up. Disabled when
                                                              analog input enabled.(1)
                          AN9          1        I     ANA     ADC input channel 9.(1)
                        C12IN2-        1        I     ANA     Comparators C1 and C2 inverting input, channel 2. Analog select is
                                                              shared with ADC.
                        CCP2(2)        0        O      DIG    CCP2 compare and PWM output.
                                       1        I      ST     CCP2 capture input
RB4/KBI0/AN11/            RB4          0        O      DIG    LATB<4> data output; not affected by analog input.
P1D
                                       1        I      TTL    PORTB<4> data input; Programmable weak pull-up. Disabled when
                                                              analog input enabled.(1)
                          KBI0         1        I      TTL    Interrupt-on-pin change.
                          AN11         1        I     ANA     ADC input channel 11.(1)
                          P1D          0        O      DIG    ECCP PWM output (28-pin devices only).
RB5/KBI1/PGM              RB5          0        O      DIG    LATB<5> data output.
                                       1        I      TTL    PORTB<5> data input; Programmable weak pull-up.
                          KBI1         1        I      TTL    Interrupt-on-pin change.
                          PGM          x        I      ST     Single-Supply Programming mode entry (ICSP™). Enabled by LVP
                                                              Configuration bit; all other pin functions disabled.
Legend:       DIG = Digital level output; TTL = TTL input buffer; ST = Schmitt Trigger input buffer; ANA = Analog level input/output;
              x = Don’t care (TRIS bit does not affect port direction or is overridden for this option).
Note 1:       Configuration on POR is determined by the PBADEN Configuration bit. Pins are configured as analog inputs by default
              when PBADEN is set and digital inputs when PBADEN is cleared.
       2:     Alternate assignment for CCP2 when the CCP2MX Configuration bit is ‘0’. Default assignment is RC1.
       3:     All other pin functions are disabled when ICSP or ICD are enabled.
 2010 Microchip Technology Inc.                                                                                DS41303G-page 125
PIC18F2XK20/4XK20
TABLE 10-3:          PORTB I/O SUMMARY (CONTINUED)
                                      TRIS               I/O
        Pin             Function               I/O                                               Description
                                     Setting            Type
RB6/KBI2/PGC                 RB6         0      O       DIG      LATB<6> data output.
                                         1      I       TTL      PORTB<6> data input; Programmable weak pull-up.
                           KBI2          1      I       TTL      Interrupt-on-pin change.
                           PGC           x      I       ST       Serial execution (ICSP) clock input for ICSP and ICD operation.(3)
RB7/KBI3/PGD                 RB7         0      O       DIG      LATB<7> data output.
                                         1      I       TTL      PORTB<7> data input; Programmable weak pull-up.
                           KBI3          1      I       TTL      Interrupt-on-pin change.
                           PGD           x      O       DIG      Serial execution data output for ICSP and ICD operation.(3)
                                         x      I       ST       Serial execution data input for ICSP and ICD operation.(3)
Legend:       DIG = Digital level output; TTL = TTL input buffer; ST = Schmitt Trigger input buffer; ANA = Analog level input/output;
              x = Don’t care (TRIS bit does not affect port direction or is overridden for this option).
Note 1:       Configuration on POR is determined by the PBADEN Configuration bit. Pins are configured as analog inputs by default
              when PBADEN is set and digital inputs when PBADEN is cleared.
       2:     Alternate assignment for CCP2 when the CCP2MX Configuration bit is ‘0’. Default assignment is RC1.
       3:     All other pin functions are disabled when ICSP or ICD are enabled.
TABLE 10-4:          SUMMARY OF REGISTERS ASSOCIATED WITH PORTB
                                                                                                                                Reset
   Name              Bit 7          Bit 6       Bit 5           Bit 4       Bit 3           Bit 2       Bit 1      Bit 0        Values
                                                                                                                               on page
PORTB                RB7            RB6          RB5            RB4          RB3            RB2         RB1        RB0           62
LATB             PORTB Data Latch Register (Read and Write to Data Latch)                                                        62
TRISB            PORTB Data Direction Control Register                                                                           62
WPUB               WPUB7           WPUB6       WPUB5           WPUB4       WPUB3        WPUB2         WPUB1      WPUB0           62
IOCB                IOCB7           IOCB6      IOCB5           IOCB4          —              —           —          —            62
SLRCON                —              —              —          SLRE(1)     SLRD(1)       SLRC          SLRB       SLRA           63
INTCON            GIE/GIEH PEIE/GIEL           TMR0IE          INT0IE       RBIE        TMR0IF         INT0IF      RBIF          59
INTCON2             RBPU           INTEDG0 INTEDG1 INTEDG2                    —         TMR0IP           —        RBIP           59
INTCON3            INT2IP          INT1IP           —          INT2IE      INT1IE            —         INT2IF     INT1IF         59
ANSELH                —              —              —          ANS12       ANS11        ANS10          ANS9       ANS8           62
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used by PORTB.
Note 1: Not implemented on PIC18F2XK20 devices.
DS41303G-page 126                                                                                       2010 Microchip Technology Inc.
                                                             PIC18F2XK20/4XK20
10.4      PORTC, TRISC and LATC                              EXAMPLE 10-3:        INITIALIZING PORTC
          Registers                                          CLRF    PORTC   ;   Initialize PORTC by
                                                                             ;   clearing output
PORTC is an 8-bit wide, bidirectional port. The corre-                       ;   data latches
sponding d ata di rection reg ister i s T RISC. Sett ing a   CLRF    LATC    ;   Alternate method
TRISC b it ( = 1) w ill make the corresponding PO RTC                        ;   to clear output
pin an input (i.e., disable the output driver). Clearing a                   ;   data latches
TRISC b it ( = 0) w ill make the corresponding PO RTC        MOVLW   0CFh    ;   Value used to
pin an output (i.e., enable the output driver and put the                    ;   initialize data
                                                                             ;   direction
contents of the output latch on the selected pin).
                                                             MOVWF   TRISC   ;   Set RC<3:0> as inputs
The Data Latc h regi ster (LATC) is als o me mory                            ;   RC<5:4> as outputs
mapped. R ead-modify-write op erations on the LA TC                          ;   RC<7:6> as inputs
register read a nd w rite th e lat ched ou tput va lue for
PORTC.
PORTC is multiplexed with several peripheral functions
(Table 10-5). The pins have Schmitt Trigger input buf-
fers. RC1 is the de fault configuration for the CCP2
peripheral pin. The CCP2 function can be relocated to
the RB3 pin by clearing the CCP2MX bit of Configura-
tion Word C ONFIG3H. T he default st ate of th e
CCP2MX Configuration bit is ‘1’.
When e nabling peripheral f unctions, c are s hould b e
taken in defining TRIS bits for each PORTC pin. The
EUSART and MSSP peripherals override the TRIS bit
to make a pin an output or an input, depending on the
peripheral con figuration. Refer to the co rresponding
peripheral section for additional information.
  Note:     On a Power-on Reset, these pins are con-
            figured as digital inputs.
The c ontents o f the TR ISC re gister a re a ffected b y
peripheral ov errides. Reading TR ISC alw ays returns
the current contents, even though a peripheral device
may be overriding one or more of the pins.
 2010 Microchip Technology Inc.                                                            DS41303G-page 127
PIC18F2XK20/4XK20
TABLE 10-5:        PORTC I/O SUMMARY
                                 TRIS                   I/O
      Pin           Function               I/O                                               Description
                                Setting                Type
RC0/T1OSO/             RC0         0        O          DIG    LATC<0> data output.
T13CKI                             1         I         ST     PORTC<0> data input.
                     T1OSO         x        O          ANA    Timer1 oscillator output; enabled when Timer1 oscillator enabled.
                                                              Disables digital I/O.
                     T13CKI        1         I         ST     Timer1/Timer3 counter input.
RC1/T1OSI/CCP2         RC1         0        O          DIG    LATC<1> data output.
                                   1         I         ST     PORTC<1> data input.
                      T1OSI        x         I         ANA    Timer1 oscillator input; enabled when Timer1 oscillator enabled.
                                                              Disables digital I/O.
                     CCP2(1)       0        O          DIG    CCP2 compare and PWM output; takes priority over port data.
                                   1         I         ST     CCP2 capture input.
RC2/CCP1/P1A           RC2         0        O          DIG    LATC<2> data output.
                                   1         I         ST     PORTC<2> data input.
                      CCP1         0        O          DIG    ECCP1 compare or PWM output; takes priority over port data.
                                   1         I         ST     ECCP1 capture input.
                       P1A         0        O          DIG    ECCP1 Enhanced PWM output, channel A. May be configured for
                                                              tri-state during Enhanced PWM shutdown events. Takes priority over
                                                              port data.
RC3/SCK/SCL            RC3         0        O          DIG    LATC<3> data output.
                                   1         I         ST     PORTC<3> data input.
                       SCK         0        O          DIG    SPI clock output (MSSP module); takes priority over port data.
                                   1         I         ST     SPI clock input (MSSP module).
                       SCL         0        O          DIG    I2C™ clock output (MSSP module); takes priority over port data.
                                   1         I    I C/SMB I2C clock input (MSSP module); input type depends on module setting.
                                                   2
RC4/SDI/SDA            RC4         0        O          DIG    LATC<4> data output.
                                   1         I         ST     PORTC<4> data input.
                       SDI         1         I         ST     SPI data input (MSSP module).
                       SDA         1        O          DIG    I2C data output (MSSP module); takes priority over port data.
                                   1         I    I2C/SMB I2C data input (MSSP module); input type depends on module setting.
RC5/SDO                RC5         0        O          DIG    LATC<5> data output.
                                   1         I         ST     PORTC<5> data input.
                      SDO          0        O          DIG    SPI data output (MSSP module); takes priority over port data.
RC6/TX/CK              RC6         0        O          DIG    LATC<6> data output.
                                   1         I         ST     PORTC<6> data input.
                       TX          1        O          DIG    Asynchronous serial transmit data output (USART module); takes
                                                              priority over port data. User must configure as output.
                       CK          1        O          DIG    Synchronous serial clock output (USART module); takes priority over
                                                              port data.
                                   1         I         ST     Synchronous serial clock input (USART module).
RC7/RX/DT              RC7         0        O          DIG    LATC<7> data output.
                                   1         I         ST     PORTC<7> data input.
                       RX          1         I         ST     Asynchronous serial receive data input (USART module).
                       DT          1        O          DIG    Synchronous serial data output (USART module); takes priority over
                                                              port data.
                                   1         I         ST     Synchronous serial data input (USART module). User must configure
                                                              as an input.
Legend:     DIG = Digital level output; TTL = TTL input buffer; ST = Schmitt Trigger input buffer; ANA = Analog level input/output;
            I2C/SMB = I2C/SMBus input buffer; x = Don’t care (TRIS bit does not affect port direction or is overridden for this option).
Note 1:     Default assignment for CCP2 when the CCP2MX Configuration bit is set. Alternate assignment is RB3.
DS41303G-page 128                                                                                     2010 Microchip Technology Inc.
                                                            PIC18F2XK20/4XK20
TABLE 10-6:       SUMMARY OF REGISTERS ASSOCIATED WITH PORTC
                                                                                                  Reset
    Name          Bit 7       Bit 6     Bit 5     Bit 4     Bit 3      Bit 2    Bit 1    Bit 0    Values
                                                                                                 on page
PORTC              RC7         RC6      RC5       RC4       RC3        RC2      RC1      RC0       62
LATC            PORTC Data Latch Register (Read and Write to Data Latch)                           62
TRISC           PORTC Data Direction Control Register                                              62
T1CON             RD16       T1RUN     T1CKPS1 T1CKPS0 T1OSCEN T1SYNC          TMR1CS TMR1ON       60
T3CON             RD16      T3CCP2 T3CKPS1 T3CKPS0 T3CCP1            T3SYNC    TMR3CS TMR3ON       61
TXSTA             CSRC         TX9      TXEN     SYNC      SENDB      BRGH     TRMT      TX9D      61
RCSTA             SPEN         RX9      SREN     CREN      ADDEN      FERR     OERR     RX9D       61
SSPCON1          WCOL        SSPOV     SSPEN      CKP      SSPM3     SSPM2     SSPM1    SSPM0      60
CCP1CON           P1M1        P1M0     DC1B1    DC1B0     CCP1M3 CCP1M2 CCP1M1 CCP1M0              61
CCP2CON             —              —   DC2B1    DC2B0     CCP2M3 CCP2M2 CCP2M1 CCP2M0              61
ECCP1AS        ECCPASE ECCPAS2 ECCPAS1 ECCPAS0 PSSAC1                PSSAC0    PSSBD1   PSSBD0     61
SLRCON              —              —     —      SLRE(1)    SLRD(1)    SLRC      SLRB     SLRA      63
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used by PORTC.
Note 1: Not implemented on PIC18F2XK20 devices.
 2010 Microchip Technology Inc.                                                         DS41303G-page 129
PIC18F2XK20/4XK20
10.5      PORTD, TRISD and LATD                              PORTD can also be configured as an 8-bit wide micro-
          Registers                                          processor port (Parallel Slave Port) by setting control
                                                             bit, PSPM ODE (TRISE< 4>). I n th is m ode, t he i nput
  Note:     PORTD is onl y av ailable on       40/44-pin     buffers are TT L. Se e Section 10.9 “Parallel Slave
            devices.                                         Port” f or ad ditional i nformation on t he P arallel S lave
                                                             Port (PSP).
PORTD is an 8-bit wide, bidirectional port. The corre-
sponding d ata di rection reg ister i s T RISD. Sett ing a     Note:     When the enhanced PWM mode is used
TRISD b it ( = 1) w ill make the corresponding PO RTD                    with either dual or quad outputs, the PSP
pin an input (i.e., disable the output driver). Clearing a               functions o f POR TD are au tomatically
TRISD b it ( = 0) w ill make the corresponding PO RTD                    disabled.
pin an output (i.e., enable the output driver and put the
contents of the output latch on the selected pin).           EXAMPLE 10-4:            INITIALIZING PORTD
The Data Latc h regi ster (LATD) is als o me mory             CLRF      PORTD     ;   Initialize PORTD by
mapped. R ead-modify-write op erations on the LA TD                               ;   clearing output
register read a nd w rite th e lat ched ou tput va lue for                        ;   data latches
PORTD.                                                        CLRF      LATD      ;   Alternate method
                                                                                  ;   to clear output
All pins on PORTD are implemented with Schmitt Trig-                              ;   data latches
ger input buffers. Each pin is individually configurable      MOVLW     0CFh      ;   Value used to
as an input or output.                                                            ;   initialize data
                                                                                  ;   direction
Three of the PORTD pins are multiplexed with outputs          MOVWF     TRISD     ;   Set RD<3:0> as inputs
P1B, P1C and P1D of the enhanced CCP module. The                                  ;   RD<5:4> as outputs
operation of the se ad ditional PWM out put pi ns is                              ;   RD<7:6> as inputs
covered in gre ater detail in Section 16.0 “Enhanced
Capture/Compare/PWM (ECCP) Module”.
  Note:     On a Pow er-on Reset, thes e pi ns are
            configured as digital inputs.
DS41303G-page 130                                                                       2010 Microchip Technology Inc.
                                                                          PIC18F2XK20/4XK20
TABLE 10-7:         PORTD I/O SUMMARY
                                   TRIS                I/O
       Pin           Function                I/O                                              Description
                                  Setting             Type
RD0/PSP0                RD0          0        O       DIG      LATD<0> data output.
                                     1        I        ST      PORTD<0> data input.
                       PSP0          x        O       DIG      PSP read data output (LATD<0>); takes priority over port data.
                                     x        I       TTL      PSP write data input.
RD1/PSP1                RD1          0        O       DIG      LATD<1> data output.
                                     1        I        ST      PORTD<1> data input.
                       PSP1          x        O       DIG      PSP read data output (LATD<1>); takes priority over port data.
                                     x        I       TTL      PSP write data input.
RD2/PSP2                RD2          0        O       DIG      LATD<2> data output.
                                     1        I        ST      PORTD<2> data input.
                       PSP2          x        O       DIG      PSP read data output (LATD<2>); takes priority over port data.
                                     x        I       TTL      PSP write data input.
RD3/PSP3                RD3          0        O       DIG      LATD<3> data output.
                                     1        I        ST      PORTD<3> data input.
                       PSP3          x        O       DIG      PSP read data output (LATD<3>); takes priority over port data.
                                     x        I       TTL      PSP write data input.
RD4/PSP4                RD4          0        O       DIG      LATD<4> data output.
                                     1        I        ST      PORTD<4> data input.
                       PSP4          x        O       DIG      PSP read data output (LATD<4>); takes priority over port data.
                                     x         I      TTL      PSP write data input.
RD5/PSP5/P1B            RD5          0        O       DIG      LATD<5> data output.
                                     1         I       ST      PORTD<5> data input.
                       PSP5          x        O       DIG      PSP read data output (LATD<5>); takes priority over port data.
                                     x         I      TTL      PSP write data input.
                        P1B          0        O       DIG      ECCP1 Enhanced PWM output, channel B; takes priority over port and
                                                               PSP data. May be configured for tri-state during Enhanced PWM
                                                               shutdown events.
RD6/PSP6/P1C            RD6          0        O       DIG      LATD<6> data output.
                                     1         I       ST      PORTD<6> data input.
                       PSP6          x        O       DIG      PSP read data output (LATD<6>); takes priority over port data.
                                     x         I      TTL      PSP write data input.
                        P1C          0        O       DIG      ECCP1 Enhanced PWM output, channel C; takes priority over port and
                                                               PSP data. May be configured for tri-state during Enhanced PWM
                                                               shutdown events.
RD7/PSP7/P1D            RD7          0        O       DIG      LATD<7> data output.
                                     1         I       ST      PORTD<7> data input.
                       PSP7          x        O       DIG      PSP read data output (LATD<7>); takes priority over port data.
                                     x         I      TTL      PSP write data input.
                        P1D          0        O       DIG      ECCP1 Enhanced PWM output, channel D; takes priority over port and
                                                               PSP data. May be configured for tri-state during Enhanced PWM
                                                               shutdown events.
Legend:      DIG = Digital level output; TTL = TTL input buffer; ST = Schmitt Trigger input buffer; x = Don’t care
             (TRIS bit does not affect port direction or is overridden for this option).
 2010 Microchip Technology Inc.                                                                                     DS41303G-page 131
PIC18F2XK20/4XK20
TABLE 10-8:     SUMMARY OF REGISTERS ASSOCIATED WITH PORTD
                                                                                                      Reset
   Name       Bit 7     Bit 6      Bit 5      Bit 4      Bit 3         Bit 2    Bit 1      Bit 0      Values
                                                                                                     on page
PORTD(1)      RD7        RD6       RD5        RD4        RD3           RD2      RD1         RD0          62
LATD(1)    PORTD Data Latch Register (Read and Write to Data Latch)                                      62
TRISD(1)   PORTD Data Direction Control Register                                                         62
TRISE(1)       IBF       OBF       IBOV    PSPMODE        —           TRISE2   TRISE1     TRISE0         62
CCP1CON       P1M1      P1M0      DC1B1      DC1B0     CCP1M3     CCP1M2       CCP1M1    CCP1M0          61
SLRCON         —          —         —        SLRE(1)    SLRD(1)       SLRC     SLRB        SLRA          63
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used by PORTD.
Note 1: Not implemented on PIC18F2XK20 devices.
DS41303G-page 132                                                                2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
10.6      PORTE, TRISE and LATE                                The fou rth pin of POR TE (MC LR/VPP/RE3) is an inpu t
          Registers                                            only pin. It s oper ation is controlled by the MC LRE
                                                               Configuration bit.     When select ed as a port        pin
Depending o n th e p articular PIC18F2XK20/4XK20               (MCLRE = 0), it functi ons as a digit al input only pin; as
device selected, PO RTE is im plemented in tw o                such, it does not have TRIS or LAT bits associated with its
different ways.                                                operation. Otherwise, it functions as the device’s Master
                                                               Clear input. In either configuration, RE3 also functions as
10.6.1      PORTE IN PIC18F4XK20 DEVICES                       the programming voltage input during programming.
For PIC18F4XK20 devices, PORTE is a 4-bit wide port.             Note:     On a Power-on Reset, RE3 is enabled as
Three pins (RE0/RD/AN5, RE1/WR/AN6 and RE2/CS/                             a d igital input onl y if M aster C lear
AN7) are individually configurable as inputs or outputs.                   functionality is disabled.
These pins have Schmitt Trigger input buffers. When
selected as an analog input, these pins will read as ‘0’s.
                                                               EXAMPLE 10-5:           INITIALIZING PORTE
The co rresponding da ta d irection reg ister is TR ISE.        CLRF     PORTE   ;    Initialize PORTE by
Setting a TRISE bit (= 1) will make the corresponding                            ;    clearing output
PORTE p in an in put ( i.e., d isable t he o utput dr iver).                     ;    data latches
Clearing a TRISE bit (= 0) will make the corresponding          CLRF     LATE    ;    Alternate method
PORTE pin an output (i.e., enable the output driver and                          ;    to clear output
put the contents of the output latch on the selected pin).                       ;    data latches
                                                                MOVLW    1Fh     ;    Configure analog pins
TRISE controls the direction of the RE pins, even when          ANDWF    ANSEL,w ;    for digital only
they are b eing used as analog inputs. The user must            MOVLW    05h     ;    Value used to
make sure to keep the pins configured as inputs when                             ;    initialize data
using them as analog inputs.                                                     ;    direction
                                                                MOVWF    TRISE   ;    Set RE<0> as input
  Note:     On a Power-o n R eset, R E<2:0> are                                  ;    RE<1> as output
            configured as analog inputs.                                         ;    RE<2> as input
The upper four bits of the TR ISE register also control
the operation of the Parallel Slave Port. Their operation      10.6.2      PORTE IN PIC18F2XK20 DEVICES
is explained in Register 10-1.                                 For PIC 18F2XK20 devices, PO RTE is onl y available
The D ata Latch reg ister (LA TE) is also me mory              when M aster C lear f unctionality is di sabled
mapped. R ead-modify-write o perations o n t he LATE           (MCLR = 0). In t hese ca ses, P ORTE is a si ngle b it,
register, rea d an d w rite the latched ou tput va lue for     input only port comprised of RE3 only. The pin operates
PORTE.                                                         as previously described.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 133
PIC18F2XK20/4XK20
REGISTER 10-1:       TRISE: PORTE/PSP CONTROL REGISTER (PIC18F4XK20 DEVICES ONLY)
        R-0         R-0          R/W-0           R/W-0         U-0                R/W-1        R/W-1           R/W-1
        IBF         OBF          IBOV           PSPMODE         —             TRISE2           TRISE1         TRISE0
bit 7                                                                                                               bit 0
Legend:
R = Readable bit             W = Writable bit              U = Unimplemented bit, read as ‘0’
-n = Value at POR            ‘1’ = Bit is set              ‘0’ = Bit is cleared             x = Bit is unknown
bit 7         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 by 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
DS41303G-page 134                                                                          2010 Microchip Technology Inc.
                                                                             PIC18F2XK20/4XK20
TABLE 10-9:         PORTE I/O SUMMARY
                                    TRIS                   I/O
       Pin           Function                 I/O                                                 Description
                                   Setting                Type
RE0/RD/AN5                RE0            0    O           DIG      LATE<0> data output; not affected by analog input.
                                         1     I          ST       PORTE<0> data input; disabled when analog input enabled.
                          RD             1     I          TTL      PSP read enable input (PSP enabled).
                          AN5            1     I          ANA      A/D input channel 5; default input configuration on POR.
RE1/WR/AN6                RE1            0    O           DIG      LATE<1> data output; not affected by analog input.
                                         1     I          ST       PORTE<1> data input; disabled when analog input enabled.
                          WR             1     I          TTL      PSP write enable input (PSP enabled).
                          AN6            1     I          ANA      A/D input channel 6; default input configuration on POR.
RE2/CS/AN7                RE2            0    O           DIG      LATE<2> data output; not affected by analog input.
                                         1     I          ST       PORTE<2> data input; disabled when analog input enabled.
                          CS             1     I          TTL      PSP write enable input (PSP enabled).
                          AN7            1     I          ANA      A/D input channel 7; default input configuration on POR.
MCLR/VPP/                MCLR          —       I          ST       External Master Clear input; enabled when MCLRE Configuration bit is
RE3(1,2)                                                           set.
                          VPP          —       I          ANA      High-voltage detection; used for ICSP™ mode entry detection. Always
                                                                   available, regardless of pin mode.
                          RE3         —(2)     I          ST       PORTE<3> data input; enabled when MCLRE Configuration bit is
                                                                   clear.
Legend:      DIG = Digital level output; TTL = TTL input buffer; ST = Schmitt Trigger input buffer; ANA = Analog level input/output;
             x = Don’t care (TRIS bit does not affect port direction or is overridden for this option).
Note 1:      RE3 is available on both PIC18F2XK20 and PIC18F4XK20 devices. All other PORTE pins are only implemented on
             PIC18F4XK20 devices.
       2:    RE3 does not have a corresponding TRIS bit to control data direction.
TABLE 10-10: SUMMARY OF REGISTERS ASSOCIATED WITH PORTE
                                                                                                                               Reset
   Name           Bit 7          Bit 6        Bit 5              Bit 4       Bit 3        Bit 2         Bit 1       Bit 0      Values
                                                                                                                              on page
PORTE              —              —            —                  —        RE3(1,2)       RE2           RE1         RE0          62
LATE(2)            —              —            —                  —           —        LATE Data Output Register                 62
TRISE(3)           IBF           OBF         IBOV          PSPMODE            —         TRISE2         TRISE1     TRISE0         62
SLRCON             —              —            —            SLRE(3)        SLRD(3)       SLRC           SLRB        SLRA         63
ANSEL           ANS7(3)         ANS6  (3)
                                             ANS5   (3)
                                                                ANS4        ANS3         ANS2           ANS1        ANS0         62
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used by PORTE.
Note 1: Implemented only when Master Clear functionality is disabled (MCLRE Configuration bit = 0).
     2: RE3 is the only PORTE bit implemented on both PIC18F2XK20 and PIC18F4XK20 devices. All other bits
        are implemented only when PORTE is implemented (i.e., PIC18F4XK20 devices).
     3: Unimplemented on PIC18F2XK20 devices.
 2010 Microchip Technology Inc.                                                                                    DS41303G-page 135
PIC18F2XK20/4XK20
10.7      Port Analog Control                                      buffer and cause all reads of that pin to return ‘0’ while
                                                                   allowing analog fu nctions of that pi n to op erate
Some port pins are multiplexed with analog functions               correctly.
such as the Analog-to-Digital Converter and compara-
tors. Whe n th ese I/ O pins a re t o b e us ed as an alog         The st ate of the AN Sx bit s ha s no affect o n dig ital
inputs it is necessary to disable the digital input buffer         output fu nctions. A pi n w ith th e as sociated TR ISx b it
to avoid excessive current caused by improper biasing              clear and AN Sx b it s et w ill st ill ope rate as a dig ital
of the digital input. Individual control of the digital input      output but the in put mo de w ill be analog. This ca n
buffers on pi ns w hich sh are an alog f unctions is p ro-         cause unexpected b ehavior w hen performing rea d-
vided by the ANSEL and ANSELH registers. Setting an                modify-write operations on the affected port.
ANSx bit high will disable the associated digital input
REGISTER 10-2:           ANSEL: ANALOG SELECT REGISTER 1
     R/W-1            R/W-1           R/W-1           R/W-1        R/W-1           R/W-1           R/W-1           R/W-1
   ANS7(1)           ANS6(1)         ANS5(1)           ANS4        ANS3                ANS2         ANS1            ANS0
bit 7                                                                                                                    bit 0
Legend:
R = Readable bit                  W = Writable bit              U = Unimplemented bit, read as ‘0’
-n = Value at POR                 ‘1’ = Bit is set              ‘0’ = Bit is cleared            x = Bit is unknown
bit 7             ANS7: RE2 Analog Select Control bit(1)
                  1 = Digital input buffer of RE2 is disabled
                  0 = Digital input buffer of RE2 is enabled
bit 6             ANS6: RE1 Analog Select Control bit(1)
                  1 = Digital input buffer of RE1 is disabled
                  0 = Digital input buffer of RE1 is enabled
bit 5             ANS5: RE0 Analog Select Control bit(1)
                  1 = Digital input buffer of RE0 is disabled
                  0 = Digital input buffer of RE0 is enabled
bit 4             ANS4: RA5 Analog Select Control bit
                  1 = Digital input buffer of RA5 is disabled
                  0 = Digital input buffer of RA5 is enabled
bit 3             ANS3: RA3 Analog Select Control bit
                  1 = Digital input buffer of RA3 is disabled
                  0 = Digital input buffer of RA3 is enabled
bit 2             ANS2: RA2 Analog Select Control bit
                  1 = Digital input buffer of RA2 is disabled
                  0 = Digital input buffer of RA2 is enabled
bit 1             ANS1: RA1 Analog Select Control bit
                  1 = Digital input buffer of RA1 is disabled
                  0 = Digital input buffer of RA1 is enabled
bit 0             ANS0: RA0 Analog Select Control bit
                  1 = Digital input buffer of RA0 is disabled
                  0 = Digital input buffer of RA0 is enabled
Note 1:      These bits are not implemented on PIC18F2XK20 devices.
DS41303G-page 136                                                                              2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
REGISTER 10-3:          ANSELH: ANALOG SELECT REGISTER 2
        U-0            U-0              U-0           R/W-1(1)     R/W-1(1)        R/W-1(1)     R/W-1(1)      R/W-1(1)
        —              —                 —            ANS12         ANS11           ANS10        ANS9          ANS8
bit 7                                                                                                               bit 0
Legend:
R = Readable bit                   W = Writable bit              U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set              ‘0’ = Bit is cleared         x = Bit is unknown
bit 7-5           Unimplemented: Read as ‘0’
bit 4             ANS12: RB0 Analog Select Control bit
                  1 = Digital input buffer of RB0 is disabled
                  0 = Digital input buffer of RB0 is enabled
bit 3             ANS11: RB4 Analog Select Control bit
                  1 = Digital input buffer of RB4 is disabled
                  0 = Digital input buffer of RB4 is enabled
bit 2             ANS10: RB1 Analog Select Control bit
                  1 = Digital input buffer of RB1 is disabled
                  0 = Digital input buffer of RB1 is enabled
bit 1             ANS9: RB3 Analog Select Control bit
                  1 = Digital input buffer of RB3 is disabled
                  0 = Digital input buffer of RB3 is enabled
bit 0             ANS8: RB2 Analog Select Control bit
                  1 = Digital input buffer of RB2 is disabled
                  0 = Digital input buffer of RB2 is enabled
Note 1:       Default state is determined by the PBADEN bit of CONFIG3H. The default state is ‘0’ When
              PBADEN = ‘0’.
 2010 Microchip Technology Inc.                                                                       DS41303G-page 137
PIC18F2XK20/4XK20
10.8        Port Slew Rate Control
The output slew rate of each port is programmable to
select either the s tandard transition rate or a red uced
transition rate of 0.1 ti mes t he standard to minimize
EMI. The re duced tra nsition time is th e d efault slew
rate for all ports.
REGISTER 10-4:          SLRCON: SLEW RATE CONTROL REGISTER
        U-0            U-0           U-0           R/W-1        R/W-1           R/W-1           R/W-1          R/W-1
        —              —              —            SLRE(1)     SLRD(1)              SLRC        SLRB            SLRA
bit 7                                                                                                                bit 0
Legend:
R = Readable bit                W = Writable bit             U = Unimplemented bit, read as ‘0’
-n = Value at POR               ‘1’ = Bit is set             ‘0’ = Bit is cleared            x = Bit is unknown
bit 7-5           Unimplemented: Read as ‘0’
bit 4             SLRE: PORTE Slew Rate Control bit(1)
                  1 = All outputs on PORTE slew at a limited rate
                  0 = All outputs on PORTE slew at the standard rate
bit 3             SLRD: PORTD Slew Rate Control bit(1)
                  1 = All outputs on PORTD slew at a limited rate
                  0 = All outputs on PORTD slew at the standard rate
bit 2             SLRC: PORTC Slew Rate Control bit
                  1 = All outputs on PORTC slew at a limited rate
                  0 = All outputs on PORTC slew at the standard rate
bit 1             SLRB: PORTB Slew Rate Control bit
                  1 = All outputs on PORTB slew at a limited rate
                  0 = All outputs on PORTB slew at the standard rate
bit 0             SLRA: PORTA Slew Rate Control bit
                  1 = All outputs on PORTA slew at a limited rate(2)
                  0 = All outputs on PORTA slew at the standard rate
Note 1:       These bits are not implemented on PIC18F2XK20 devices.
     2:       The slew rate of RA6 defaults to standard rate when the pin is used as CLKOUT.
DS41303G-page 138                                                                           2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
10.9      Parallel Slave Port                                  The ti ming for t he control s ignals in W rite an d R ead
                                                               modes is sh own in Figure 10-3 and Figure 10-4,
  Note:     The Parallel Slave Port is only available on       respectively.
            PIC18F4XK20 devices.
In addition to its function as a general I/O port, PORTD       FIGURE 10-2:               PORTD AND PORTE
can also operate as an 8-bit wide Parallel Slave Port                                     BLOCK DIAGRAM
(PSP) o r microprocessor po rt. PSP ope ration is                                         (PARALLEL SLAVE PORT)
controlled by th e 4 u pper bi ts o f the TR ISE reg ister
(Register 10-1). Se tting c ontrol b it, PSPM ODE                                   One bit of PORTD
(TRISE<4>), en ables PSP op eration as lon g a s th e
                                                                   Data Bus
enhanced CCP module is not operating in dual output                                 D     Q
or quad output PWM mode. In Slave mode, the port is
                                                                                                                       RDx pin
asynchronously readable and writable by the external                 WR LATD
                                                                     or             CK
world.                                                               WR PORTD
                                                                                   Data Latch               TTL
The P SP ca n di rectly interface to an 8- bit
                                                                                   Q       D
microprocessor data bus. The external microprocessor
can r ead or w rite th e P ORTD lat ch a s an 8 -bit la tch.
                                                                     RD PORTD            ENEN
Setting the control bit, PSPMODE, enables the PORTE
I/O pins to become control inputs for the microprocessor
port. When set, port pin RE0 is the RD input, RE1 is the
WR input and RE2 is the CS (Chip Select) input. For this
                                                                     RD LATD
functionality, the corresponding data direction bits of the
TRISE r egister ( TRISE<2:0>) must be conf igured as
inputs (set) and the ANSEL<7:5> bits must be cleared.              Set Interrupt Flag
                                                                   PSPIF (PIR1<7>)
A write to the PSP occurs when both the CS and WR
lines are first detected low and ends when either are
detected high. The PSPIF and IBF flag bits are both set                                                            PORTE Pins
when the write ends.
                                                                                                         Read
A read from the PSP occurs when both the CS and RD                                                               TTL         RD
lines are first detected low. The data in PORTD is read                                              Chip Select
out and the OBF bit is clear. If the user writes new data                                                     TTL            CS
to PORTD to set OBF, the data is immediately read out;
however, the OBF bit is not set.                                                                         Write
                                                                                                                 TTL         WR
When either the CS or RD lines are detected high, the
PORTD pins return to the input state and the PSPIF bit
is set. User applications should wait for PSPIF to be set          Note:    I/O pins have diode protection to VDD and VSS.
before servicing the PSP; when this happens, the IBF
and OBF bits can be polled and the appropriate action
taken.
 2010 Microchip Technology Inc.                                                                         DS41303G-page 139
PIC18F2XK20/4XK20
FIGURE 10-3:        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
FIGURE 10-4:        PARALLEL SLAVE PORT READ WAVEFORMS
                     Q1   Q2   Q3   Q4   Q1   Q2   Q3    Q4    Q1     Q2      Q3      Q4
            CS
            WR
            RD
    PORTD<7:0>
            IBF
           OBF
         PSPIF
DS41303G-page 140                                               2010 Microchip Technology Inc.
                                                            PIC18F2XK20/4XK20
TABLE 10-11: REGISTERS ASSOCIATED WITH PARALLEL SLAVE PORT
                                                                                                          Reset
  Name         Bit 7         Bit 6     Bit 5      Bit 4     Bit 3        Bit 2      Bit 1       Bit 0     Values
                                                                                                         on page
PORTD(1)        RD7          RD6       RD5        RD4        RD3         RD2        RD1         RD0        62
LATD(1)     PORTD Data Latch Register (Read and Write to Data Latch)                                       62
TRISD(1)    PORTD Data Direction Control Register                                                          62
PORTE            —            —         —           —        RE3        RE2(1)     RE1(1)       RE0(1)     62
LATE(1)          —            —         —           —         —        LATE Data Output bits               62
TRISE(1)        IBF          OBF       IBOV     PSPMODE       —         TRISE2     TRISE1      TRISE0      62
SLRCON           —            —         —       SLRE(1)    SLRD(1)       SLRC       SLRB        SLRA       63
INTCON       GIE/GIEH PEIE/GIEL       TMR0IE     INT0IE     RBIE        TMR0IF     INT0IF       RBIF       59
PIR1         PSPIF    (1)
                             ADIF      RCIF       TXIF      SSPIF       CCP1IF    TMR2IF       TMR1IF      62
PIE1         PSPIE(1)        ADIE      RCIE      TXIE       SSPIE       CCP1IE    TMR2IE       TMR1IE      62
IPR1         PSPIP(1)        ADIP      RCIP      TXIP       SSPIP       CCP1IP    TMR2IP       TMR1IP      62
ANSEL         ANS7(1)       ANS6(1)   ANS5(1)    ANS4       ANS3         ANS2       ANS1        ANS0       62
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used by the Parallel Slave Port.
Note 1: Unimplemented on PIC18F2XK20 devices.
 2010 Microchip Technology Inc.                                                                DS41303G-page 141
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 142    2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
11.0        CAPTURE/COMPARE/PWM                                   The Capture and Compare operations described in this
                                                                  chapter ap ply to b oth s tandard and enhanced C CP
            (CCP) MODULES
                                                                  modules.
PIC18F2XK20/4XK20 dev ices hav e tw o C CP
                                                                    Note: Throughout th is s ection and Section 16.0
Capture/Compare/PWM) mo dules. Each mo dule
                                                                          “Enhanced Capture/Compare/PWM (ECCP)
contains a 16-bit register which can operate as a 16-bit
                                                                          Module”, ref erences to th e re gister a nd bi t
Capture register, a 16-bit Compare register or a PWM
                                                                          names fo r C CP m odules a re r eferred t o
Master/Slave Duty Cycle register.
                                                                          generically by the use of ‘x’ or ‘y’ in place of the
CCP1 is implemented as an enhanced CCP module with                        specific mo dule n umber. T hus, “ CCPxCON”
standard C apture and C ompare mod es an d en hanced                      might refe r to th e c ontrol re gister fo r CCP1 ,
PWM modes. The ECCP implementation is discussed in                        CCP2 o r E CCP1. “CCPxCON” i s u sed
Section 16.0 “Enhanced Capture/Compare/PWM                                throughout th ese se ctions to refe r to th e
(ECCP) Module”. CCP2 is implemented as a standard                         module control register, regardless of whether
CCP module without the enhanced features.                                 the CCP mo dule is a stan dard or en hanced
                                                                          implementation.
REGISTER 11-1:         CCP2CON: STANDARD CAPTURE/COMPARE/PWM CONTROL REGISTER
        U-0           U-0              R/W-0          R/W-0      R/W-0               R/W-0        R/W-0            R/W-0
        —              —              DC2B1           DC2B0    CCP2M3           CCP2M2           CCP2M1          CCP2M0
bit 7                                                                                                                    bit 0
Legend:
R = Readable bit                   W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set           ‘0’ = Bit is cleared            x = Bit is unknown
bit 7-6          Unimplemented: Read as ‘0’
bit 5-4          DC2B<1:0>: PWM Duty Cycle bit 1 and bit 0 for CCP2 Module
                 Capture mode:
                 Unused.
                 Compare mode:
                 Unused.
                 PWM mode:
                 These bits are the two LSbs (bit 1 and bit 0) of the 10-bit PWM duty cycle. The eight MSbs
                 (DC2B<9:2>) of the duty cycle are found in CCPR2L.
bit 3-0          CCP2M<3:0>: CCP2 Mode Select bits
                 0000 = Capture/Compare/PWM disabled (resets CCP2 module)
                 0001 = Reserved
                 0010 = Compare mode, toggle output on match (CCP2IF 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 CCP2 pin low; on compare match, force CCP2 pin high
                        (CCP2IF bit is set)
                 1001 = Compare mode: initialize CCP2 pin high; on compare match, force CCP2 pin low
                        (CCP2IF bit is set)
                 1010 = Compare mode: generate software interrupt on compare match (CCP2IF bit is set,
                        CCP2 pin reflects I/O state)
                 1011 = Compare mode: trigger special event, reset timer, start A/D conversion on
                        CCP2 match (CCP2IF bit is set)
                 11xx =PWM mode
 2010 Microchip Technology Inc.                                                                         DS41303G-page 143
PIC18F2XK20/4XK20
11.1     CCP Module Configuration                               The as signment of a par ticular t imer to a mo dule i s
                                                                determined b y th e T imer-to-CCP en able bi ts in t he
Each Capture/Compare/PWM mo dule is associated                  T3CON re gister (R egister 15-1). Bo th mo dules c an b e
with a con trol register (generically, C CPxCON) and a          active at the same time and can share the same timer
data register (C CPRx). The da ta reg ister, in turn, is        resource if they are configured to operate in the same
comprised of tw o 8-bi t registers: C CPRxL (low by te)         mode (C apture/Compare or PWM ). The in teractions
and C CPRxH (h igh byt e). All regi sters a re bo th            between the two modules are summarized in Figure 11-1
readable and writable.                                          and Figure 11-2. I n A synchronous C ounter mode, t he
                                                                capture operation will not work reliably.
11.1.1         CCP MODULES AND TIMER
               RESOURCES                                        11.1.2      CCP2 PIN ASSIGNMENT
The CCP modules utilize Timers 1, 2 or 3, de pending            The pin assignment for CCP2 (Capture input, Compare
on the mode selected. Timer1 and Timer3 are available           and PWM output) can change, based on device config-
to modules in C apture or Compare modes, w hile                 uration. The CCP2MX Configuration bit determines the
Timer2 is available for modules in PWM mode.                    pin w ith w hich CCP2 i s multiplexed. B y de fault, i t is
                                                                assigned to RC1 (CCP2MX = 1). If the Configuration bit
TABLE 11-1:         CCP MODE – TIMER                            is cleared, CCP2 is multiplexed with RB3.
                    RESOURCE                                    Changing the pin as signment of C CP2 doe s n ot
   CCP/ECCP Mode                 Timer Resource                 automatically change any requirements for configuring
                                                                the port pin. U sers m ust always ve rify that the
         Capture                 Timer1 or Timer3               appropriate TRIS re gister is co nfigured c orrectly f or
         Compare                 Timer1 or Timer3               CCP2 operation, regardless of where it is located.
          PWM                        Timer2
TABLE 11-2:         INTERACTIONS BETWEEN CCP1 AND CCP2 FOR TIMER RESOURCES
CCP1 Mode CCP2 Mode                                                 Interaction
   Capture         Capture    Each module can use TMR1 or TMR3 as the time base. The time base can be different
                              for each CCP.
   Capture         Compare    CCP2 can be configured for the Special Event Trigger to reset TMR1 or TMR3
                              (depending upon which time base is used). Automatic A/D conversions on trigger event
                              can also be done. Operation of CCP1 could be affected if it is using the same timer as a
                              time base.
  Compare          Capture    CCP1 can be configured for the Special Event Trigger to reset TMR1 or TMR3
                              (depending upon which time base is used). Operation of CCP2 could be affected if it is
                              using the same timer as a time base.
  Compare          Compare    Either module can be configured for the Special Event Trigger to reset the time base.
                              Automatic A/D conversions on CCP2 trigger event can be done. Conflicts may occur if
                              both modules are using the same time base.
   Capture           PWM      None
  Compare            PWM      None
   PWM   (1)       Capture    None
   PWM(1)          Compare    None
   PWM   (1)
                     PWM      Both PWMs will have the same frequency and update rate (TMR2 interrupt).
Note 1:        Includes standard and enhanced PWM operation.
DS41303G-page 144                                                                         2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
11.2        Capture Mode                                      EXAMPLE 11-1:      CHANGING BETWEEN
                                                                                 CAPTURE PRESCALERS
In Capture m ode, the CCPRx H:CCPRxL re gister pair
                                                                                 (CCP2 SHOWN)
captures the 16-b it v alue of th e TM R1 or TM R3
registers when an event occurs on the corresponding           CLRF    CCP2CON     ; Turn CCP module off
CCPx pin. An event is defined as one of the following:        MOVLW   NEW_CAPT_PS ; Load WREG with the
                                                                                  ; new prescaler mode
•   every falling edge                                                            ; value and CCP ON
•   every rising edge                                         MOVWF   CCP2CON     ; Load CCP2CON with
•   every 4th rising edge                                                         ; this value
•   every 16th rising edge
The ev ent is sel ected by the m         ode sele ct bit s,
CCPxM<3:0> of the CCPxCON register. When a cap-
ture is made, t he interrupt r equest flag bit, C CPxIF, is
set; it must be cleared by sof tware. If another capture
occurs before the v alue in register CCPRx is read, the
old captured v alue is overw ritten by the new captured
value.
11.2.1       CCP PIN CONFIGURATION
In Capture mode, the appropriate CCPx pin should be
configured as an input by s etting th e co rresponding
TRIS direction bit.
    Note:    If the CCPx pin is configured as an output,
             a w rite t o t he p ort ca n c ause a c apture
             condition.
11.2.2       TIMER1/TIMER3 MODE SELECTION
The timers that are to be used with the capture feature
(Timer1 and/or Timer3) must be running in Timer mode
or Synchronized Counter mode. In Asynchronous Coun-
ter mode, the capture operation may not work. The timer
to be used w ith e ach C CP m odule i s s elected in the
T3CON r egister (se e Section 11.1.1 “CCP Modules
and Timer Resources”).
11.2.3       SOFTWARE INTERRUPT
When th e Capture mode i s changed, a f alse capture
interrupt may be generated. The user should keep the
CCPxIE interrupt enable bit clear to avoid false inter-
rupts. The inte rrupt fla g bit , C CPxIF, sh ould al so be
cleared following any such change in operating mode.
11.2.4       CCP PRESCALER
There are four prescaler settings in Capture mode; they
are specified as part of the operating mode selected by
the m ode select b its (CCPx M<3:0>). W henever th e
CCP module is turned off or Capture mode is disabled,
the prescaler counter is cleared. This means that any
Reset will clear the prescaler counter.
Switching from one capture prescaler to another may
generate an interrupt. Also, the prescaler counter will
not be cleared; therefore, the first capture may be from
a non -zero pre scaler. Ex ample 11-1 sho ws th e
recommended method for switching between capture
prescalers. Thi s ex ample also cl ears the pr escaler
counter and will not generate the “false” interrupt.
 2010 Microchip Technology Inc.                                                           DS41303G-page 145
PIC18F2XK20/4XK20
FIGURE 11-1:          CAPTURE MODE OPERATION BLOCK DIAGRAM
                                                                                  TMR3H     TMR3L
                                                          Set CCP1IF
                                                                       T3CCP2   TMR3
           CCP1 pin                                                             Enable
                        Prescaler              and                               CCPR1H    CCPR1L
                         1, 4, 16          Edge Detect
                                                                                TMR1
                                                                       T3CCP2   Enable
                       CCP1CON<3:0>         4                                     TMR1H     TMR1L
                                                          Set CCP2IF
                                        4
                                Q1:Q4
                                            4
                       CCP2CON<3:0>
                                                                T3CCP1            TMR3H     TMR3L
                                                                T3CCP2
                                                                                TMR3
                                                                                Enable
           CCP2 pin
                        Prescaler              and                               CCPR2H    CCPR2L
                         1, 4, 16          Edge Detect
                                                                                TMR1
                                                                                Enable
                                                                T3CCP2
                                                                                  TMR1H     TMR1L
                                                                T3CCP1
DS41303G-page 146                                                                   2010 Microchip Technology Inc.
                                                                        PIC18F2XK20/4XK20
11.3        Compare Mode                                               11.3.2         TIMER1/TIMER3 MODE SELECTION
In Compare mode, the 16-bit CCPRx register value is                    Timer1 and/or Timer3 must be running in Timer mode
constantly compared against either the TMR1 or TMR3                    or Synchronized Counter mode if the C CP module is
register pair value. When a match occurs, the CCPx pin                 using the compare feature. In As ynchronous Counter
can be:                                                                mode, the compare operation will not work reliably.
•   driven high                                                        11.3.3         SOFTWARE INTERRUPT MODE
•   driven low
                                                                       When the Generate Software Interrupt mode is chosen
•   toggled (high-to-low or low-to-high)                               (CCPxM<3:0> = 1010), the corresponding CCPx pin is
•   remain unchanged (that is, reflects the state of the               not affected. Only the CCPxIF interrupt flag is affected.
    I/O latch)
The action on the pin is based on the value of the mode                11.3.4         SPECIAL EVENT TRIGGER
select bits (CCPxM<3:0>). At the same time, the inter-                 Both CCP modules are equipped with a Special Event
rupt flag bit, CCPxIF, is set.                                         Trigger. This is an internal hardware signal generated
                                                                       in Compare mode to trigger actions by other modules.
11.3.1        CCP PIN CONFIGURATION                                    The Special Event Trigger is enabled by selecting
The user must configure the CCPx pin as an output by                   the C ompare S pecial Ev ent T rigger m ode
clearing the appropriate TRIS bit.                                     (CCPxM<3:0> = 1011).
                                                                       For either CCP module, the Special Event Trigger resets
    Note:     Clearing the CCPxCON register will force
                                                                       the tim er register p air for whichever tim er resource is
              the CCPx compare output latch (depend-
                                                                       currently assigned as the module’s t ime base. This
              ing on device configuration) to the default
                                                                       allows the CCPRx registers to serve as a programmable
              low le vel. Th is is not t he PO RTB or
                                                                       period register for either timer.
              PORTC I/O data latch.
                                                                       The Special Event Trigger for CCP2 can also start an
                                                                       A/D conversion. In order to do this, the A/D converter
                                                                       must already be enabled.
FIGURE 11-2:             COMPARE MODE OPERATION BLOCK DIAGRAM
                                                                         Special Event Trigger
                                                      Set CCP1IF        (Timer1/Timer3 Reset)
                          CCPR1H     CCPR1L
                                                                                                                     CCP1 pin
                                              Compare                          Output            S   Q
                              Comparator
                                               Match                           Logic
                                                                                                 R
                                                                                                             TRIS
                                                                                4                        Output Enable
                                                                           CCP1CON<3:0>
                  0       TMR1H      TMR1L        0
                  1       TMR3H      TMR3L        1                      Special Event Trigger
                                                                   (Timer1/Timer3 Reset, A/D Trigger)
                            T3CCP1
                                                        T3CCP2
                                                            Set CCP2IF                                               CCP2 pin
                                              Compare                           Output           S   Q
                              Comparator
                                               Match                            Logic
                                                                                                 R
                                                                                                             TRIS
                                                                                 4                       Output Enable
                         CCPR2H      CCPR2L
                                                                           CCP2CON<3:0>
 2010 Microchip Technology Inc.                                                                                 DS41303G-page 147
PIC18F2XK20/4XK20
TABLE 11-3:      REGISTERS ASSOCIATED WITH CAPTURE, COMPARE, TIMER1 AND TIMER3
                                                                                                       Reset
   Name         Bit 7          Bit 6    Bit 5    Bit 4     Bit 3     Bit 2      Bit 1       Bit 0      Values
                                                                                                      on page
INTCON        GIE/GIEH PEIE/GIEL TMR0IE         INT0IE     RBIE     TMR0IF     INT0IF       RBIF         59
RCON            IPEN          SBOREN       —      RI       TO         PD        POR         BOR          58
PIR1          PSPIF(1)         ADIF     RCIF     TXIF     SSPIF     CCP1IF     TMR2IF     TMR1IF         62
PIE1          PSPIE     (1)
                               ADIE     RCIE     TXIE     SSPIE     CCP1IE     TMR2IE     TMR1IE         62
IPR1          PSPIP(1)         ADIP     RCIP     TXIP     SSPIP     CCP1IP     TMR2IP     TMR1IP         62
PIR2           OSCFIF          C1IF     C2IF     EEIF     BCLIF     HLVDIF     TMR3IF     CCP2IF         62
PIE2           OSCFIE          C1IE     C2IE     EEIE     BCLIE     HLVDIE     TMR3IE     CCP2IE         62
IPR2           OSCFIP          C1IP     C2IP     EEIP     BCLIP     HLVDIP     TMR3IP     CCP2IP         62
TRISB         PORTB Data Direction Control Register                                                      62
TRISC         PORTC Data Direction Control Register                                                      62
TMR1L         Timer1 Register, Low Byte                                                                  60
TMR1H         Timer1 Register, High Byte                                                                 60
T1CON           RD16          T1RUN    T1CKPS1 T1CKPS0 T1OSCEN T1SYNC         TMR1CS TMR1ON              60
TMR3H         Timer3 Register, High Byte                                                                 61
TMR3L         Timer3 Register, Low Byte                                                                  61
T3CON           RD16          T3CCP2   T3CKPS1 T3CKPS0    T3CCP1    T3SYNC    TMR3CS TMR3ON              61
CCPR1L        Capture/Compare/PWM Register 1, Low Byte                                                   61
CCPR1H        Capture/Compare/PWM Register 1, High Byte                                                  61
CCP1CON         P1M1           P1M0    DC1B1    DC1B0     CCP1M3   CCP1M2     CCP1M1      CCP1M0         61
CCPR2L        Capture/Compare/PWM Register 2, Low Byte                                                   61
CCPR2H        Capture/Compare/PWM Register 2, High Byte                                                  61
CCP2CON             —           —      DC2B1    DC2B0     CCP2M3   CCP2M2     CCP2M1      CCP2M0         61
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used by Capture/Compare, Timer1 or Timer3.
Note 1: Not impemented on PIC18F2XK20 devices.
DS41303G-page 148                                                                2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
11.4        PWM Mode                                                 The PWM outp ut (Figure 11-4) has a tim e bas e
                                                                     (period) and a time that the output stays high (duty
The P WM mo de ge nerates a P ulse-Width Mo dulated                  cycle).
signal on th e C CP2 p in fo r th e C CP mo dule a nd th e
P1A through P1D pins for the ECCP module. Hereafter
                                                                     FIGURE 11-4:          CCP PWM OUTPUT
the modulated output pin will be referred to as the CCPx
pin. T he d uty cycle, p eriod and resolution a re                                Period
determined by the following registers:
•   PR2                                                                      Pulse Width
                                                                                                  TMR2 = PR2
•   T2CON
                                                                                           TMR2 = CCPRxL:DCxB<1:0>
•   CCPRxL
•   CCPxCON                                                                   TMR2 = 0
In Puls e-Width Mo dulation (PW M) m ode, the C CP
module produces up to a 10-bit resolution PWM output
on th e C CPx pi n. Since the CCPx p in is m ultiplexed
with the PORT data latch, the TRIS for that pin must be
cleared to enable the CCPx pin output driver.
    Note:       Clearing the C CPxCON re gister w ill
                relinquish CCPx control of the CCPx pin.
Figure 11.1.1 s hows a simplified bl ock dia gram of
PWM operation.
Figure 11-4 s hows a typical w aveform o f the PW M
signal.
For a step-by-step procedure on how to set up the CCP
module f or P WM op eration, se e Section 11.4.7
“Setup for PWM Operation”.
FIGURE 11-3:                  SIMPLIFIED PWM BLOCK
                              DIAGRAM
                                  DCxB<1:0>
       Duty Cycle Registers
            CCPRxL
       CCPRxH(2) (Slave)
                                                           CCPx
               Comparator                 R   Q
                            (1)           S
              TMR2
                                                    TRIS
        Comparator
                              Clear Timer2,
                              toggle CCPx pin and
                              latch duty cycle
              PR2
    Note 1:     The 8-bit timer TMR2 register is concatenated
                with the 2-bit internal system clock (FOSC), or
                2 bits of the prescaler, to create the 10-bit time
                base.
         2:     In PWM mode, CCPRxH is a read-only register.
 2010 Microchip Technology Inc.                                                                      DS41303G-page 149
PIC18F2XK20/4XK20
11.4.1     PWM PERIOD                                   11.4.2           PWM DUTY CYCLE
The PWM pe riod is specified by the PR 2 register of    The PWM du ty cycle is s pecified by w riting a 1 0-bit
Timer2. The PWM period can be calculated using the      value to multiple re gisters: C CPRxL reg ister an d
formula of Equation 11-1.                               DCxB<1:0> bit s of the C CPxCON reg ister. Th e
                                                        CCPRxL contains the eight MSbs and the DCxB<1:0>
EQUATION 11-1:         PWM PERIOD                       bits of the C CPxCON re gister co ntain the tw o LSbs.
                                                        CCPRxL and D CxB<1:0> bit s of the C CPxCON
      PWM Period =   PR2  + 1   4  T OSC         register can be written to at any time. The duty cycle
                      (TMR2 Prescale Value)             value is not latched into CCPRxH until after the period
                                                        completes (i.e ., a ma tch between PR2 a nd TM R2
     Note: TOSC = 1/FOSC.                               registers occurs). While using the PWM, the CCPRxH
                                                        register is read-only.
When TMR2 is equal to PR2, the following three events   Equation 11-2 is used to ca lculate the PWM                                            pulse
occur on the next increment cycle:                      width.
• TMR2 is cleared                                       Equation 11-3 is used to calculate the PWM duty cycle
• The CCPx pin is set. (Exception: If the PWM duty      ratio.
  cycle = 0%, the pin will not be set.)
• The PWM duty cycle is latched from CCPRxL into        EQUATION 11-2:                       PULSE WIDTH
  CCPRxH.
                                                                 Pulse Width =  CCPRxL:DCxB<1:0>  
  Note:    The Timer2 post scaler ( see Section 14.1
                                                                                        T OSC  (TMR2 Prescale Value)
           “Timer2 Operation”) is not used in t he
           determination of the PWM frequency.
                                                        EQUATION 11-3:                       DUTY CYCLE RATIO
                                                                                  CCPRxL:DCxB<1:0> 
                                                              Duty Cycle Ratio = -----------------------------------------------------------
                                                                                                4  PR2 + 1 
                                                        The CCPR xH re gister a nd a 2 -bit internal lat ch a re
                                                        used to double buffer the PWM duty cycle. This double
                                                        buffering is essential for glitchless PWM operation.
                                                        The 8 -bit timer TMR 2 regis ter i s conc atenated w ith
                                                        either the 2-bit internal system clock (FOSC), or 2 bits of
                                                        the prescaler, to create the 10-bit time base. The system
                                                        clock is used if the Timer2 prescaler is set to 1:1.
                                                        When the 10-bit time base matches the CCPR xH and
                                                        2-bit latch, th en the C CPx pi n is cl eared (see
                                                        Figure 11-3).
DS41303G-page 150                                                                               2010 Microchip Technology Inc.
                                                                 PIC18F2XK20/4XK20
11.4.3      PWM RESOLUTION                                       EQUATION 11-4:                   PWM RESOLUTION
The resolution determines the number of available duty
cycles for a given period. For example, a 10-bit resolution                             log  4  PR2 + 1  
                                                                           Resolution = ------------------------------------------ bits
will result in 1024 discrete duty cycles, whereas an 8-bit                                           log  2 
resolution will result in 256 discrete duty cycles.
The maximum PWM resolution is 10 bits when PR2 is
255. T he res olution i s a fu nction of th e PR 2 reg ister       Note:      If the pulse width value is greater than the
value as shown by Equation 11-4.                                              period th e a ssigned PWM pi n(s) w ill
                                                                              remain unchanged.
TABLE 11-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 rescaler 1, P , 6)         (   4 1 16               4         1                     1                       1                        1
PR2 Value                                FFh             FFh       FFh                  3Fh                     1Fh                       17h
Maximum Resolution (bits)                 10             10         10                    8                       7                       6.58
TABLE 11-5:        EXAMPLE PWM FREQUENCIES AND RESOLUTIONS (FOSC = 20 MHz)
         PWM Frequency               1.22 kHz        4.88 kHz    19.53 kHz         78.12 kHz                156.3 kHz              208.3 kHz
Timer Prescale (1, 4, 16)                16               4          1                     1                        1                      1
PR2 Value                              0xFF            0xFF        0xFF                 0x3F                    0x1F                      0x17
Maximum Resolution (bits)                10              10         10                     8                        7                     6.6
TABLE 11-6:        EXAMPLE PWM FREQUENCIES AND RESOLUTIONS (FOSC = 8 MHz)
         PWM Frequency               1.22 kHz        4.90 kHz    19.61 kHz         76.92 kHz               153.85 kHz              200.0 kHz
Timer Prescale (1, 4, 16)                16               4          1                     1                        1                      1
PR2 Value                              0x65             0x65       0x65                 0x19                    0x0C                      0x09
Maximum Resolution (bits)                8                8          8                     6                        5                      5
 2010 Microchip Technology Inc.                                                                                        DS41303G-page 151
PIC18F2XK20/4XK20
11.4.4       OPERATION IN POWER-MANAGED                         11.4.7      SETUP FOR PWM OPERATION
             MODES                                              The following steps should be taken when configuring
In Sle ep mode, the TM R2 register will no t in crement         the CCP module for PWM operation:
and the state of the module will not change. If the CCPx        1.   Disable the PWM pin (CCPx) output drivers by
pin is driving a value, it will continue to drive that value.        setting the associated TRIS bit.
When the device wakes up, TMR2 will continue from its
                                                                2.   For the ECCP module only: Select the desired
previous state.
                                                                     PWM outputs (P1A through P1D) by setting the
In PRI_IDLE mode, the primary clock will continue to                 appropriate steering bi ts of the P STRCON
clock the C CP m odule w ithout ch ange. In a ll oth er              register.
power-managed modes, the selected power-managed                 3.   Set the PWM period by loading the PR2 register.
mode c lock w ill clock Timer2. Ot her power-managed
                                                                4.   Configure the CCP module for the PWM mode
mode cl ocks will m ost li kely b e dif ferent th an th e
                                                                     by lo ading th e C CPxCON regi ster w ith th e
primary clock frequency.
                                                                     appropriate values.
11.4.5       CHANGES IN SYSTEM CLOCK                            5.   Set the PWM duty cycle by loading the CCPRxL
             FREQUENCY                                               register and CCPx bits of the CCPxCON register.
                                                                6.   Configure and start Timer2:
The PWM frequency is derived from the system clock
frequency. Any changes in the system clock frequency                  • Clear the TMR2IF interrupt flag bit of the
will re sult in ch anges to the PWM freq uency. Se e                    PIR1 register.
Section 2.0 “Oscillator Module (With Fail-Safe                        • Set the Timer2 prescale value by loading the
Clock Monitor)” for additional details.                                 T2CKPS bits of the T2CON register.
                                                                      • Enable Timer2 by setting the TMR2ON bit of
11.4.6       EFFECTS OF RESET                                           the T2CON register.
Any Re set will forc e a ll port s to Inp ut m ode an d th e    7.   Enable PWM output after a new PWM cycle has
CCP registers to their Reset states.                                 started:
                                                                      • Wait until Timer2 overflows (TMR2IF bit of
                                                                        the PIR1 register is set).
                                                                      • Enable the CCPx pin output driver by
                                                                        clearing the associated TRIS bit.
DS41303G-page 152                                                                        2010 Microchip Technology Inc.
                                                          PIC18F2XK20/4XK20
TABLE 11-7:       REGISTERS ASSOCIATED WITH PWM AND TIMER2
                                                                                                   Reset
   Name         Bit 7         Bit 6    Bit 5     Bit 4     Bit 3      Bit 2      Bit 1    Bit 0    Values
                                                                                                  on page
INTCON        GIE/GIEH PEIE/GIEL      TMR0IE     INT0IE    RBIE      TMR0IF     INT0IF    RBIF       59
RCON            IPEN        SBOREN      —            RI     TO         PD        POR      BOR        58
PIR1          PSPIF(1)        ADIF     RCIF      TXIF     SSPIF      CCP1IF    TMR2IF    TMR1IF      62
PIE1          PSPIE   (1)
                              ADIE     RCIE      TXIE     SSPIE      CCP1IE    TMR2IE    TMR1IE      62
IPR1          PSPIP(1)        ADIP     RCIP      TXIP     SSPIP      CCP1IP    TMR2IP    TMR1IP      62
TRISB        PORTB Data Direction Control Register                                                   62
TRISC        PORTC Data Direction Control Register                                                   62
TMR2         Timer2 Register                                                                         60
PR2          Timer2 Period Register                                                                  60
T2CON             —         T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0               60
CCPR1L       Capture/Compare/PWM Register 1, Low Byte                                                61
CCPR1H       Capture/Compare/PWM Register 1, High Byte                                               61
CCP1CON         P1M1         P1M0     DC1B1     DC1B0     CCP1M3    CCP1M2     CCP1M1    CCP1M0      61
CCPR2L       Capture/Compare/PWM Register 2, Low Byte                                                61
CCPR2H       Capture/Compare/PWM Register 2, High Byte                                               61
CCP2CON           —            —      DC2B1     DC2B0     CCP2M3    CCP2M2     CCP2M1    CCP2M0      61
ECCP1AS      ECCPASE ECCPAS2          ECCPAS1   ECCPAS0   PSSAC1    PSSAC0     PSSBD1    PSSBD0      61
PWM1CON        PRSEN         PDC6      PDC5      PDC4      PDC3       PDC2       PDC      PDC0       61
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used by PWM or Timer2.
Note 1: Not implemented on PIC18F2XK20 devices.
 2010 Microchip Technology Inc.                                                         DS41303G-page 153
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 154    2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
12.0      TIMER0 MODULE                                           The T0C ON reg ister (R egister 12-1) controls al l
                                                                  aspects of the mo dule’s op eration, including the
The T imer0 mo dule in corporates the fol lowing fe a-            prescale selection. It is both readable and writable.
tures:
                                                                  A simplified block diagram of the Timer0 module in 8-bit
• Software selectable operation as a timer or coun-               mode is show n in Figure 12-1. Figure 12-2 show s a
  ter in both 8-bit or 16-bit modes                               simplified block diagram of the Timer0 module in 16-bit
• Readable and writable registers                                 mode.
• Dedicated 8-bit, software programmable
  prescaler
• Selectable clock source (internal or external)
• Edge select for external clock
• Interrupt-on-overflow
REGISTER 12-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
Legend:
R = Readable bit                   W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set           ‘0’ = Bit is cleared           x = Bit is unknown
bit 7            TMR0ON: Timer0 On/Off Control bit
                 1 = Enables Timer0
                 0 = Stops Timer0
bit 6            T08BIT: Timer0 8-bit/16-bit Control bit
                 1 = Timer0 is configured as an 8-bit timer/counter
                 0 = Timer0 is configured as a 16-bit timer/counter
bit 5            T0CS: Timer0 Clock Source Select bit
                 1 = Transition on T0CKI pin
                 0 = Internal instruction cycle clock (CLKOUT)
bit 4            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
bit 3            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.
bit 2-0          T0PS<2:0>: 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
 2010 Microchip Technology Inc.                                                                      DS41303G-page 155
PIC18F2XK20/4XK20
12.1     Timer0 Operation                                                    12.2        Timer0 Reads and Writes in
Timer0 can operate as either a timer or a counter; the
                                                                                         16-Bit Mode
mode is se lected w ith the T 0CS bi t of th e T0 CON                        TMR0H is not the actual high byte of Timer0 in 16-bit
register. In T imer mo de (T0 CS = 0), th e module                           mode; it is actually a buffered version of the real high
increments on every clock by default unless a different                      byte of Timer0 w hich i s n either directly readable n or
prescaler va lue is se lected (see Section 12.3                              writable (refer to Figure 12-2). TMR0H is updated with
“Prescaler”). Timer0 incrementing is inhibited for two                       the contents of the high byte of Timer0 during a read of
instruction cycles following a TMR0 register write. The                      TMR0L. This provides the ability to read all 16 bits of
user can work around this by adjusting the value written                     Timer0 without the need to v erify that the read of the
to the TMR0 register to compensate for the anticipated                       high and low b yte w ere val id. Inv alid re ads c ould
missing increments.                                                          otherwise occur due to a rollover between successive
The Counter mode is selected by setting the T0CS bit                         reads of the high and low byte.
(= 1). In this mode, Timer0 increments either on every                       Similarly, a w rite to the high byte of Timer0 must also
rising or falling edge of pin RA4/T0CKI. The increment-                      take place through the TMR0H Buffer register. Writing
ing e dge is de termined b y t he T imer0 So urce Edg e                      to TMR0H does not directly affect Timer0. Instead, the
Select bit, T0SE of the T0CON register; clearing this bit                    high byte of T imer0 i s upd ated w ith the co ntents of
selects th e ris ing ed ge. Restrictions on the ext ernal                    TMR0H when a write occurs to TMR0L. This allows all
clock input are discussed below.                                             16 bits of Timer0 to be updated at once.
An external clock source can be used to drive Timer0;
however, it mu st me et ce rtain requirements ( see
Table 26-11) to ensure that the external clock can be
synchronized w ith th e i nternal ph ase c lock (TOSC).
There i s a d elay between s ynchronization and th e
onset of incrementing the timer/counter.
FIGURE 12-1:               TIMER0 BLOCK DIAGRAM (8-BIT MODE)
                      FOSC/4         0
                                                                0
                                                                          Sync with                                   Set
                                     1                                     Internal                TMR0L              TMR0IF
        T0CKI pin                             Programmable       1          Clocks                                    on Overflow
                                                Prescaler
                    T0SE                                                 (2 TCY Delay)
                    T0CS                                                                                 8
                                                      3
                    T0PS<2:0>
                                                                                                  8
                    PSA                                                                                               Internal Data Bus
        Note:   Upon Reset, Timer0 is enabled in 8-bit mode with clock input from T0CKI max. prescale.
DS41303G-page 156                                                                                             2010 Microchip Technology Inc.
                                                                                 PIC18F2XK20/4XK20
FIGURE 12-2:                  TIMER0 BLOCK DIAGRAM (16-BIT MODE)
                 FOSC/4         0
                                                             0
                                                                     Sync with                                                 Set
                                                                      Internal                                TMR0
                                1                                                             TMR0L          High Byte         TMR0IF
   T0CKI pin                             Programmable        1         Clocks                                                  on Overflow
                                           Prescaler                                                                     8
               T0SE                                                 (2 TCY Delay)
               T0CS                              3                                                                             Read TMR0L
               T0PS<2:0>
                                                                                                                               Write TMR0L
               PSA
                                                                                                               8
                                                                                                    8
                                                                                                             TMR0H
                                                                                                                    8
                                                                                                        8
                                                                                                                               Internal Data Bus
   Note:   Upon Reset, Timer0 is enabled in 8-bit mode with clock input from T0CKI max. prescale.
12.3       Prescaler                                                          12.3.1         SWITCHING PRESCALER
                                                                                             ASSIGNMENT
An 8-bit counter is available as a prescaler for the Timer0
module. The prescaler is not directly readable or writable;                   The pre scaler as signment is fu lly un der s oftware
its v alue i s se t by t he P SA and T 0PS<2:0> b its of t he                 control and can be changed “on-the-fly” during program
T0CON re gister w hich d etermine the pr escaler                              execution.
assignment and prescale ratio.
Clearing the PSA bi t assigns th e prescaler to th e                          12.4        Timer0 Interrupt
Timer0 m odule. When t he prescaler i s assigned,                             The TMR0 interrupt is generated when the TMR0 reg-
prescale va lues from 1:2 through 1:2 56 in integer                           ister overflows from FFh to 00h in 8-bit mode, or from
power-of-2 increments are selectable.                                         FFFFh to 0000h in 16-bit mode. This overflow sets the
When assigned to the Timer0 module, all instructions                          TMR0IF flag bit. The interrupt can be masked by clear-
writing to the TMR0 register (e.g., CLRF TMR0, MOVWF                          ing the TM R0IE bit of the IN TCON register. Befo re
TMR0, BSF TMR0, etc.) clear the prescaler count.                              re-enabling the in terrupt, the TM R0IF bi t m ust b e
                                                                              cleared by software in the Interrupt Service Routine.
  Note:        Writing to T MR0 w hen the prescaler i s
               assigned to Timer0 will clear the prescaler                    Since Timer0 is shut down in Sleep mode, the TMR0
               count b ut will no t c hange the pr escaler                    interrupt cannot awaken the processor from Sleep.
               assignment.
TABLE 12-1:            REGISTERS ASSOCIATED WITH TIMER0
                                                                                                                                         Reset
   Name               Bit 7          Bit 6           Bit 5       Bit 4           Bit 3        Bit 2         Bit 1            Bit 0       Values
                                                                                                                                        on page
TMR0L           Timer0 Register, Low Byte                                                                                                    60
TMR0H           Timer0 Register, High Byte                                                                                                   60
INTCON           GIE/GIEH PEIE/GIEL TMR0IE                       INT0IE          RBIE       TMR0IF          INT0IF           RBIF            59
T0CON            TMR0ON             T08BIT        T0CS           T0SE            PSA        T0PS2           T0PS1            T0PS0           60
TRISA                RA7(1)         RA6(1)           RA5          RA4            RA3          RA2            RA1             RA0             62
Legend: Shaded cells are not used by Timer0.
Note 1: PORTA<7:6> and their direction bits are individually configured as port pins based on various primary
        oscillator modes. When disabled, these bits read as ‘0’.
 2010 Microchip Technology Inc.                                                                                             DS41303G-page 157
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 158    2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
13.0      TIMER1 MODULE                                             A s implified bl ock d iagram of th e T imer1 mo dule i s
                                                                    shown in Figure 13-1. A block diagram of the module’s
The T imer1 timer/counter mo dule inc orporates the                 operation in Read/Write mode is shown in Figure 13-2.
following features:
                                                                    The module incorporates its own low-power oscillator
• Software selectable operation as a 16-bit timer or                to provide an add itional cl ocking op tion. The Timer1
  counter                                                           oscillator can also be used as a low-power clock source
• Readable and writable 8-bit registers (TMR1H                      for the microcontroller in power-managed operation.
  and TMR1L)                                                        Timer1 can also be used to provide R eal-Time C lock
• Selectable internal or external clock source and                  (RTC) functionality to applications with only a minimal
  Timer1 oscillator options                                         addition of external components and code overhead.
• Interrupt-on-overflow                                             Timer1 is controlled through th e T1C ON Control
• Reset on CCP Special Event Trigger                                register (Register 13-1). It al so co ntains th e T imer1
• Device clock status flag (T1RUN)                                  Oscillator En able b it (T 1OSCEN). T imer1 ca n b e
                                                                    enabled or disabled by setting or cl earing control bit,
                                                                    TMR1ON of the T1CON register.
REGISTER 13-1:         T1CON: TIMER1 CONTROL REGISTER
    R/W-0             R-0              R/W-0           R/W-0       R/W-0               R/W-0      R/W-0           R/W-0
        RD16        T1RUN           T1CKPS1           T1CKPS0    T1OSCEN          T1SYNC         TMR1CS         TMR1ON
bit 7                                                                                                                  bit 0
Legend:
R = Readable bit                   W = Writable bit             U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set             ‘0’ = Bit is cleared           x = Bit is unknown
bit 7            RD16: 16-bit Read/Write Mode Enable bit
                 1 = Enables register read/write of TImer1 in one 16-bit operation
                 0 = Enables register read/write of Timer1 in two 8-bit operations
bit 6            T1RUN: Timer1 System Clock Status bit
                 1 = Main system clock is derived from Timer1 oscillator
                 0 = Main system clock is derived from another source
bit 5-4          T1CKPS<1:0>: Timer1 Input Clock Prescale Select bits
                 11 = 1:8 Prescale value
                 10 = 1:4 Prescale value
                 01 = 1:2 Prescale value
                 00 = 1:1 Prescale value
bit 3            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.
bit 2            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.
bit 1            TMR1CS: Timer1 Clock Source Select bit
                 1 = External clock from pin RC0/T1OSO/T13CKI (on the rising edge)
                 0 = Internal clock (FOSC/4)
bit 0            TMR1ON: Timer1 On bit
                 1 = Enables Timer1
                 0 = Stops Timer1
 2010 Microchip Technology Inc.                                                                        DS41303G-page 159
PIC18F2XK20/4XK20
13.1     Timer1 Operation                                                  instruction cycle (FOSC/4). When the bit is set, Timer1
                                                                           increments on ev ery ris ing e dge of e ither th e Timer1
Timer1 can operate in one of the following modes:                          external clock input or the Timer1 oscillator, if enabled.
• Timer                                                                    When the Timer1 oscillator is ena bled, the dig ital
• Synchronous Counter                                                      circuitry a ssociated w ith th e R C1/T1OSI an d
• Asynchronous Counter                                                     RC0/T1OSO/T13CKI pins is disabled. This means the
                                                                           values o f T RISC<1:0> a re i gnored a nd t he p ins ar e
The operating mode is determined by the clock select
                                                                           read as ‘0’.
bit, TMR1CS of the T1CON register. When TMR1CS is
cleared ( = 0), T imer1 inc rements o n ev ery int ernal
FIGURE 13-1:            TIMER1 BLOCK DIAGRAM
                        Timer1 Oscillator                            Timer1 Clock Input
                                                            On/Off                                                   1
   T1OSO/T13CKI                                              1
                                                                          Prescaler            Synchronize
                                                FOSC/4                    1, 2, 4, 8               Detect
                                                                                                                     0
                                                Internal
                                                Clock        0
          T1OSI                                                                  2
                                                                                               Sleep Input
                       T1OSCEN(1)           TMR1CS                                                                                  Timer1
                                                                                                                                    On/Off
                        T1CKPS<1:0>
                        T1SYNC
                        TMR1ON
                                                                                                      TMR1                    Set
                                            Clear TMR1                                 TMR1L                                TMR1IF
                                                                                                     High Byte
                                            (CCP Special Event Trigger)                                                   on Overflow
  Note 1: When enable bit, T1OSCEN, is cleared, the inverter and feedback resistor are turned off to eliminate power drain.
FIGURE 13-2:            TIMER1 BLOCK DIAGRAM (16-BIT READ/WRITE MODE)
                        Timer1 Oscillator                            Timer1 Clock Input
                                                                                                                      1
   T1OSO/T13CKI                                               1
                                                                          Prescaler            Synchronize
                                                 FOSC/4                   1, 2, 4, 8               Detect
                                                                                                                      0
                                                 Internal
                                                 Clock        0
           T1OSI                                                                  2
                                                                                               Sleep Input
                        T1OSCEN(1)          TMR1CS                                                                                      Timer1
                        T1CKPS<1:0>                                                                                                     On/Off
                        T1SYNC
                        TMR1ON
                                                                                                      TMR1                    Set
                                            Clear TMR1                                 TMR1L                                TMR1IF
                                                                                                     High Byte
                                            (CCP Special Event Trigger)                                                   on Overflow
                                                                                                                 8
                                                                                                                      Read TMR1L
                                                                                                                      Write TMR1L
                                                                                                       8
                                                                                          8
                                                                                                     TMR1H
                                                                                                             8
                                                                                               8
                                                                                                                     Internal Data Bus
   Note 1: When enable bit, T1OSCEN, is cleared, the inverter and feedback resistor are turned off to eliminate power drain.
DS41303G-page 160                                                                                       2010 Microchip Technology Inc.
                                                                       PIC18F2XK20/4XK20
13.2      Clock Source Selection                                       13.2.3       READING AND WRITING TIMER1 IN
                                                                                    ASYNCHRONOUS COUNTER
The TM R1CS bi t of the T1CON register is u sed to
                                                                                    MODE
select the clock source. When TMR1CS = 0, the clock
source is FOSC/4. When TMR1CS = 1, the clock source                    Reading TMR1H or TMR1L while the timer is running
is supplied externally.                                                from an external asynchronous clock will ensure a valid
                                                                       read (t aken c are o f in h ardware). Ho wever, the us er
13.2.1      INTERNAL CLOCK SOURCE                                      should keep in mind that reading the 16-bit timer in two
When the i nternal c lock source is selected, the                      8-bit values i tself, p oses c ertain p roblems, s ince the
TMR1H:TMR1L register pair will increment on multiples                  timer may overflow between the reads.
of TCY as determined by the Timer1 prescaler.                          For writes, it is recommended that the user simply stop
                                                                       the tim er and write the desired values. A write
13.2.2      EXTERNAL CLOCK SOURCE                                      contention may occur by writing to the timer registers,
When the external clock source is selected, the Timer1                 while the register is incrementing. This may produce an
module may work as a timer or a counter.                               unpredictable value i n th e TM R1H:TTMR1L reg ister
                                                                       pair.
When cou nting, T imer1 is incremented on the rising
edge of the external clock input T1CKI. In addition, the
Counter mod e clock can be s ynchronized to the
                                                                       13.3      Timer1 Prescaler
microcontroller system clock or run asynchronously.                    Timer1 has four presc aler options allowing 1, 2, 4 or 8
If an ex ternal cl ock os cillator i s n eeded (a nd th e              divisions of the cl ock input. The T1C KPS bit s of the
microcontroller is using the INTOSC without CLKOUT),                   T1CON register control the       prescale counter . The
Timer1 can use the LP oscillator as a clock source.                    prescale c ounter is not direc tly readabl e or w ritable;
                                                                       however, the prescaler counter is cleared upon a write to
  Note:     In C ounter mode, a fall ing ed ge must be                 TMR1H or TMR1L.
            registered by the cou nter prior to th e fir st
            incrementing rising edge af ter one or more
                                                                       13.4      Timer1 Operation in
            of the following conditions (see Figure 13-3):
                                                                                 Asynchronous Counter Mode
           • Timer1 is enabled after POR or BOR
             Reset                                                     If control bit T1SYNC of the T1CON register is set, the
           • A write to TMR1H or TMR1L                                 external clock inp ut is not synchronized. The timer
                                                                       continues to incre ment asy nchronous to the int ernal
           • Timer1 is disabled (TMR1ON = 0)
                                                                       phase clock s. The timer will continue to run during
             when T1CKI is high then Timer1 is
                                                                       Sleep and can gener ate an interr upt on overflow ,
             enabled (TMR1ON = 1) when T1CKI
                                                                       which w ill w ake-up t he processor . H owever, special
             is low.
                                                                       precautions in sof tware are needed to r ead/write the
                                                                       timer ( see Section 13.2.3 “Reading and Writing
                                                                       Timer1 in Asynchronous Counter Mode”).
                                                                          Note 1: When switching from s ynchronous to
                                                                                  asynchronous operation, it is possible to
                                                                                  skip an increment. When switching from
                                                                                  asynchronous to synchronous operation,
                                                                                  it is po ssible t o p roduce an additional
                                                                                  increment.
FIGURE 13-3:             TIMER1 INCREMENTING EDGE
    T1CKI = 1
    when TMR1
    Enabled
    T1CKI = 0
    when TMR1
    Enabled
       Note 1:    Arrows indicate counter increments.
             2:   In Counter mode, a falling edge must be registered by the counter prior to the first incrementing rising edge of
                  the clock.
 2010 Microchip Technology Inc.                                                                               DS41303G-page 161
PIC18F2XK20/4XK20
13.5       Timer1 16-Bit Read/Write Mode                          TABLE 13-1:         CAPACITOR SELECTION FOR
                                                                                      THE TIMER OSCILLATOR
Timer1 can be configured for 16-bit reads and w rites
(see Fig ure 13-2). Whe n th e RD16 c ontrol bi t of th e          Osc Type           Freq            C1            C2
T1CON re gister is se t, th e ad dress for TM R1H i s                  LP           32 kHz         27 pF   (1)
                                                                                                                  27 pF(1)
mapped to a buffer register for the high byte of Timer1.
A read from TMR1L will load the contents of the high                 Note 1: Microchip suggests these values only as a
byte of T imer1 in to th e Timer1 hig h by te buf fer. Thi s                 starting point in va lidating the os cillator
provides the user with the ability to accurately read all                    circuit.
16 bi ts of T imer1 w ithout t he ne ed t o de termine                      2: Higher capacitance increases the stability
whether a read of the high byte, followed by a read of                         of th e o scillator bu t a lso i ncreases th e
the low byte, has become invalid due to a ro llover or                         start-up time.
carry between reads.
                                                                            3: Since each resonator/crystal has its own
Writing to TM R1H does not d irectly affect T imer1.                           characteristics, the us er s hould consult
Instead, the hi gh by te of T imer1 is up dated w ith the                      the res onator/crystal m anufacturer for
contents o f T MR1H when a write oc curs to T MR1L.                            appropriate values of external
This allows all 16 bits of Timer1 to be updated at once.                       components.
The h igh by te of T imer1 i s n ot d irectly re adable or                  4: Capacitor values are for design guidance
writable in thi s mode. All reads and w rites must take                        only.
place through t he T imer1 H igh B yte Buffer register.
Writes to TM R1H do not clear the T imer1 pre scaler.             13.6.1       USING TIMER1 AS A
The prescaler is only cleared on writes to TMR1L.                              CLOCK SOURCE
                                                                  The T imer1 os cillator is al so available a s a cl ock
13.6       Timer1 Oscillator                                      source in power-managed modes. By setting the clock
An on-chip cryst al oscillator circuit is incorporated            select bits, SCS<1:0> of the OSCCON register, to ‘01’,
between pin s T1OSI (input) and T1OSO            ( amplifier      the device switches to SEC_RUN mode; both the CPU
output). It is enab led by se tting the T imer1 Os cillator       and peripherals are clocked from the Timer1 oscillator.
Enable bit, T1O SCEN of the T1C ON regis ter. The                 If the IDLEN bit of the OSCCON register is cleared and
oscillator is a low-power circuit rated for 32 kHz crystals.      a SLEEP i nstruction i s executed, th e d evice e nters
It will continue to run during all power-managed modes.           SEC_IDLE mo de. Additional details are av ailable in
The c ircuit for a typ ical LP os cillator is show n in           Section 3.0 “Power-Managed Modes”.
Figure 13-4. Table 13-1 sh ows the capacitor sele ction           Whenever t he Timer1 os cillator i s p roviding t he c lock
for the Timer1 oscillator.                                        source, the Timer1 system clock status flag, T1RUN of
The user must provide a software time delay to ensure             the T1CON register, is set. This can be used to deter-
proper start-up of the Timer1 oscillator.                         mine the controller’s current clocking mode. It can also
                                                                  indicate which clock source is currently being used by
FIGURE 13-4:              EXTERNAL                                the Fai l-Safe Clo ck Monitor. If the C lock M onitor i s
                                                                  enabled and the Timer1 oscillator fails while providing
                          COMPONENTS FOR THE
                                                                  the c lock, p olling the T1 RUN b it will i ndicate whether
                          TIMER1 LP OSCILLATOR
                                                                  the clock is being provided by the Timer1 oscillator or
            C1                                                    another source.
                                         PIC® MCU
           27 pF
                                   T1OSI
                    XTAL
                    32.768 kHz
                                   T1OSO
            C2
           27 pF
   Note:      See t he Not es wit h Table 13-1 f or addit ional
              information about capacitor selection.
DS41303G-page 162                                                                             2010 Microchip Technology Inc.
                                                                PIC18F2XK20/4XK20
13.6.2       LOW-POWER TIMER1 OPTION                            13.7      Timer1 Interrupt
The Timer1 oscillator can operate at two distinct levels        The TM R1 register p air (T MR1H:TMR1L) i ncrements
of power consumption based on device configuration.             from 00 00h to FFF Fh an d roll s ov er to 0000h. Th e
When the      LPT1OSC C onfiguration bi t of th        e        Timer1 interrupt, if enabled, is generated on overflow,
CONFIG3H register is set, the Timer1 oscillator oper-           which is latched in the TMR1IF interrupt flag bit of the
ates in a low-power mode. When LPT1OSC is not set,              PIR1 register. This interrupt can be enabled or disabled
Timer1 operates at a higher power level. Power con-             by setting or clearing the TMR1IE Interrupt Enable bit
sumption for a p articular mode is relatively constant,         of the PIE1 register.
regardless of the device’s operating mode. The default
Timer1 configuration is the higher power mode.
                                                                13.8      Resetting Timer1 Using the CCP
As th e l ow-power T imer1 m ode te nds t o b e m ore                     Special Event Trigger
sensitive t o i nterference, hi gh no ise en vironments ma y
cause some oscillator instability. The low-power option is,     If either of the CCP modules is configured to use Timer1
therefore, b est suited fo r l ow no ise ap plications w here   and generate a Special Event Trigger in Compare mode
power conservation is an important design consideration.        (CCP1M<3:0> or CCP2M<3:0> = 1011), this signal will
                                                                reset Timer1. The trigger from C CP2 will also start an
13.6.3       TIMER1 OSCILLATOR LAYOUT                           A/D conversion if the A /D module is enabled (see
             CONSIDERATIONS                                     Section 11.3.4 “Special Event Trigger” for m ore
                                                                information).
The T imer1 o scillator c ircuit dra ws v ery li ttle po wer
during operation. Due to the low-power nature of the            The module must be configured as either a timer or a
oscillator, it m ay also be s ensitive to rap idly changing     synchronous counter to take advantage of this feature.
signals in close proximity.                                     When used this way, the CCPRH:CCPRL register pair
                                                                effectively becomes a period register for Timer1.
The oscillator circuit, shown in Figure 13-4, should be
located as c lose as p ossible to t he m icrocontroller.        If Timer1 i s ru nning i n As ynchronous C ounter m ode,
There should be no circuits passing within the oscillator       this Reset operation may not work.
circuit boundaries other than VSS or VDD.                       In th e e vent that a write to T imer1 c oincides wi th a
If a high-speed circuit must be located near the oscilla-       special Ev ent T rigger, the write op eration w ill take
tor (such as the CCP1 pin in Output Compare or PWM              precedence.
mode, or the primary oscillator using the OSC2 pin), a            Note:     The Special Event Triggers from the CCP2
grounded gua rd rin g aro und the oscillator ci rcuit, a s                  module will no t set th e TMR1 IF in terrupt
shown in Figure 13-5, may be helpful when used on a                         flag bit of the PIR1 register.
single-sided PCB or in addition to a ground plane.
FIGURE 13-5:             OSCILLATOR CIRCUIT
                         WITH GROUNDED
                         GUARD RING
                                    VDD
                                     VSS
                                    OSC1
                                    OSC2
                                    RC0
                                    RC1
                                     RC2
     Note: Not drawn to scale.
 2010 Microchip Technology Inc.                                                                    DS41303G-page 163
PIC18F2XK20/4XK20
13.9      Using Timer1 as a Real-Time Clock                       Since t he r egister p air i s 1 6 bits w ide, a 3 2.768 kHz
                                                                  clock source will take 2 seconds to count up to over-
Adding an external LP oscillator to Timer1 (such as the           flow. To force the overflow at the required one-second
one de scribed in Section 13.6 “Timer1 Oscillator”                intervals, it is nec essary to preload it; the simplest
above) gives users the option to include RTC function-            method is to set the MSb of TMR1H with a BSF instruc-
ality to their applications. This is accomplished with an         tion. Note that the TMR1L register is never preloaded
inexpensive watch crystal to provide an accurate time             or al tered; doing so m ay i ntroduce cumulative e rror
base and several lines of application code to calculate           over many cycles.
the time. When operating in Sleep mode and using a
battery or su percapacitor as a p ower so urce, i t c an          For this method to be accurate, Timer1 must operate in
completely el iminate t he n eed for a s eparate R TC             Asynchronous mode and the Timer1 overflow interrupt
device and battery backup.                                        must be e nabled (PIE1< 0> = 1), as sh own i n t he
                                                                  routine, RTCinit. The Timer1 oscillator must also be
The application co de rou tine, RTCisr, sho wn in                 enabled and running at all times.
Example 13-1, demonstrates a s imple m ethod to
increment a c ounter at on e-second intervals using an
Interrupt Serv ice R outine. Inc rementing the TM R1
register pair to overflow triggers the interrupt and calls
the routine, which increments the seconds counter by
one; additional counters fo r m inutes and h ours a re
incremented on overflows of th e les s s ignificant
counters.
EXAMPLE 13-1:            IMPLEMENTING A REAL-TIME CLOCK USING A TIMER1 INTERRUPT SERVICE
 RTCinit
                MOVLW       80h                   ; Preload TMR1 register pair
                MOVWF       TMR1H                 ; for 1 second overflow
                CLRF        TMR1L
                MOVLW       b’00001111’           ; Configure for external clock,
                MOVWF       T1CON                 ; Asynchronous operation, external oscillator
                CLRF        secs                  ; Initialize timekeeping registers
                CLRF        mins                  ;
                MOVLW       .12
                MOVWF       hours
                BSF         PIE1, TMR1IE          ; Enable Timer1 interrupt
                RETURN
 RTCisr
                BSF         TMR1H, 7              ;   Preload for 1 sec overflow
                BCF         PIR1, TMR1IF          ;   Clear interrupt flag
                INCF        secs, F               ;   Increment seconds
                MOVLW       .59                   ;   60 seconds elapsed?
                CPFSGT      secs
                RETURN                            ;   No, done
                CLRF        secs                  ;   Clear seconds
                INCF        mins, F               ;   Increment minutes
                MOVLW       .59                   ;   60 minutes elapsed?
                CPFSGT      mins
                RETURN                            ;   No, done
                CLRF        mins                  ;   clear minutes
                INCF        hours, F              ;   Increment hours
                MOVLW       .23                   ;   24 hours elapsed?
                CPFSGT      hours
                RETURN                            ; No, done
                CLRF        hours                 ; Reset hours
                RETURN                            ; Done
DS41303G-page 164                                                                            2010 Microchip Technology Inc.
                                                            PIC18F2XK20/4XK20
TABLE 13-2:       REGISTERS ASSOCIATED WITH TIMER1 AS A TIMER/COUNTER
                                                                                                      Reset
   Name         Bit 7       Bit 6         Bit 5   Bit 4    Bit 3       Bit 2      Bit 1      Bit 0    Values
                                                                                                     on page
INTCON       GIE/GIEH PEIE/GIEL      TMR0IE       INT0IE   RBIE      TMR0IF      INT0IF      RBIF       59
PIR1          PSPIF(1)      ADIF         RCIF     TXIF     SSPIF     CCP1IF     TMR2IF      TMR1IF      62
PIE1          PSPIE  (1)
                            ADIE         RCIE     TXIE     SSPIE     CCP1IE     TMR2IE      TMR1IE      62
IPR1          PSPIP(1)      ADIP         RCIP     TXIP     SSPIP     CCP1IP     TMR2IP      TMR1IP      62
TMR1L        Timer1 Register, Low Byte                                                                  60
TMR1H        Timer1 Register, High Byte                                                                 60
T1CON          RD16        T1RUN    T1CKPS1 T1CKPS0 T1OSCEN T1SYNC              TMR1CS      TMR1ON      60
Legend: Shaded cells are not used by the Timer1 module.
Note 1: These bits are unimplemented on 28-pin devices; always maintain these bits clear.
 2010 Microchip Technology Inc.                                                             DS41303G-page 165
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 166    2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
14.0        TIMER2 MODULE                                            14.1      Timer2 Operation
The T imer2 m odule tim er i ncorporates t he following              In normal operation, TMR2 is incremented from 00h on
features:                                                            each clock (FOSC/4). A 4-b it counter/prescaler on the
                                                                     clock i nput gi ves direct in put, divide-by-4 and
• 8-bit timer and period registers (TMR2 and PR2,
                                                                     divide-by-16 p rescale o ptions; th ese ar e s elected b y
  respectively)
                                                                     the prescaler control bits, T2CKPS<1:0> of the T2CON
• Readable and writable (both registers)                             register. The value of TMR2 is compared to that of the
• Software programmable prescaler (1:1, 1:4 and                      period regi ster, PR 2, on ea ch clock cycle. When the
  1:16)                                                              two values match, the comparator generates a m atch
• Software programmable postscaler (1:1 through                      signal as the timer output. This signal also resets the
  1:16)                                                              value of TMR2 to 00h on the next cycle and drives the
• Interrupt on TMR2-to-PR2 match                                     output counter/postscaler (see Section 14.2 “Timer2
• Optional use as the shift clock for the MSSP                       Interrupt”).
  module                                                             The TMR2 and PR2 registers are both directly readable
The module is controlled through the T2CON register                  and w ritable. The TM R2 reg ister i s c leared on an y
(Register 14-1), w hich en ables or di sables t he timer             device Reset, w hereas the PR 2 register ini tializes to
and c onfigures the pre scaler and pos tscaler. Timer2               FFh. Both the pre scaler and postscaler co unters are
can be shut off by clearing control bit, TMR2ON of the               cleared on the following events:
T2CON register, to minimize power consumption.                       • a write to the TMR2 register
A simplified block diagram of the module is shown in                 • a write to the T2CON register
Figure 14-1.                                                         • any device Reset (Power-on Reset, MCLR Reset,
                                                                       Watchdog Timer Reset or Brown-out Reset)
                                                                     TMR2 is not cleared when T2CON is written.
REGISTER 14-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
        —         T2OUTPS3          T2OUTPS2          T2OUTPS1   T2OUTPS0          TMR2ON         T2CKPS1         T2CKPS0
bit 7                                                                                                                    bit 0
Legend:
R = Readable bit                   W = Writable bit              U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set              ‘0’ = Bit is cleared           x = Bit is unknown
bit 7            Unimplemented: Read as ‘0’
bit 6-3          T2OUTPS<3:0>: Timer2 Output Postscale Select bits
                 0000 = 1:1 Postscale
                 0001 = 1:2 Postscale
                 •
                 •
                 •
                 1111 = 1:16 Postscale
bit 2            TMR2ON: Timer2 On bit
                 1 = Timer2 is on
                 0 = Timer2 is off
bit 1-0          T2CKPS<1:0>: Timer2 Clock Prescale Select bits
                 00 = Prescaler is 1
                 01 = Prescaler is 4
                 1x = Prescaler is 16
 2010 Microchip Technology Inc.                                                                          DS41303G-page 167
PIC18F2XK20/4XK20
14.2     Timer2 Interrupt                                        14.3        Timer2 Output
Timer2 can also generate an optional device interrupt.           The unscaled output of TMR2 is available primarily to
The Timer2 output si gnal (TM R2-to-PR2 ma tch) pro-             the CCP modules, where it is used as a time base for
vides the input for the 4-bit output counter/postscaler.         operations in PWM mode.
This counter generates the TMR2 match interrupt flag             Timer2 can be optionally used as the shift clock source
which is latched in TMR2IF of the PIR 1 register. The            for the M SSP m odule ope rating in SPI m ode. Add i-
interrupt is enabled by setting the TMR2 Match Inter-            tional information is provided in Section 17.0 “Master
rupt Enable bit, TMR2IE of the PIE1 register.                    Synchronous Serial Port (MSSP) Module”.
A range of 16 postscale options (from 1:1 through 1:16
inclusive) can be selected w ith the postscaler control
bits, T2OUTPS<3:0> of the T2CON register.
FIGURE 14-1:             TIMER2 BLOCK DIAGRAM
                                                   4               1:1 to 1:16
    T2OUTPS<3:0>                                                                                      Set TMR2IF
                                                                   Postscaler
                            2
    T2CKPS<1:0>                                                                                       TMR2 Output
                                                                                                      (to PWM or MSSP)
                                                                         TMR2/PR2
                                                         Reset           Match
                          1:1, 1:4, 1:16
    FOSC/4                                             TMR2       Comparator               PR2
                            Prescaler
                                                          8                                       8
                                                                         8
                          Internal Data Bus
TABLE 14-1:        REGISTERS ASSOCIATED WITH TIMER2 AS A TIMER/COUNTER
                                                                                                                    Reset
 Name         Bit 7        Bit 6           Bit 5         Bit 4   Bit 3           Bit 2    Bit 1          Bit 0      Values
                                                                                                                   on page
INTCON GIE/GIEH PEIE/GIEL              TMR0IE           INT0IE   RBIE         TMR0IF     INT0IF          RBIF        59
PIR1         PSPIF(1)      ADIF            RCIF          TXIF    SSPIF        CCP1IF     TMR2IF        TMR1IF        62
PIE1         PSPIE(1)      ADIE            RCIE          TXIE    SSPIE        CCP1IE     TMR2IE        TMR1IE        62
IPR1         PSPIP (1)
                           ADIP            RCIP          TXIP    SSPIP        CCP1IP     TMR2IP        TMR1IP        62
TMR2      Timer2 Register                                                                                            60
T2CON          —         T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON                      T2CKPS1 T2CKPS0             60
PR2       Timer2 Period Register                                                                                     60
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used by the Timer2 module.
Note 1: These bits are unimplemented on 28-pin devices; always maintain these bits clear.
DS41303G-page 168                                                                          2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
15.0      TIMER3 MODULE                                             A s implified bl ock d iagram of th e T imer3 mo dule i s
                                                                    shown in Figure 15-1. A block diagram of the module’s
The T imer3 mo dule tim er/counter incorporates these               operation in Read/Write mode is shown in Figure 15-2.
features:
                                                                    The Timer3 module is controlled through the T3CON
• Software selectable operation as a 16-bit timer or                register (Register 15-1). It also selects the clock source
  counter                                                           options fo r t he CCP m odules (see Section 11.1.1
• Readable and writable 8-bit registers (TMR3H                      “CCP Modules and Timer Resources” for more
  and TMR3L)                                                        information).
• Selectable clock source (internal or external) with
  device clock or Timer1 oscillator internal options
• Interrupt-on-overflow
• Module Reset on CCP Special Event Trigger
REGISTER 15-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       T3CCP2           T3CKPS1           T3CKPS0     T3CCP1          T3SYNC         TMR3CS          TMR3ON
bit 7                                                                                                                   bit 0
Legend:
R = Readable bit                   W = Writable bit             U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set             ‘0’ = Bit is cleared           x = Bit is unknown
bit 7            RD16: 16-bit Read/Write Mode Enable bit
                 1 = Enables register read/write of Timer3 in one 16-bit operation
                 0 = Enables register read/write of Timer3 in two 8-bit operations
bit 6,3          T3CCP<2:1>: Timer3 and Timer1 to CCPx Enable bits
                 1x = Timer3 is the capture/compare clock source for CCP1 and CP2
                 01 = Timer3 is the capture/compare clock source for CCP2 and
                      Timer1 is the capture/compare clock source for CCP1
                 00 = Timer1 is the capture/compare clock source for CCP1 and CP2
bit 5-4          T3CKPS<1:0>: 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
bit 2            T3SYNC: Timer3 External Clock Input Synchronization Control bit
                 (Not usable if the device 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.
bit 1            TMR3CS: Timer3 Clock Source Select bit
                 1 = External clock input from Timer1 oscillator or T13CKI (on the rising edge after the first
                     falling edge)
                 0 = Internal clock (FOSC/4)
bit 0            TMR3ON: Timer3 On bit
                 1 = Enables Timer3
                 0 = Stops Timer3
 2010 Microchip Technology Inc.                                                                         DS41303G-page 169
PIC18F2XK20/4XK20
15.1     Timer3 Operation                                                    The operating mode is determined by the clock select
                                                                             bit, TMR3CS of the T3CON register. When TMR3CS is
Timer3 can operate in one of three modes:                                    cleared ( = 0), T imer3 inc rements o n ev ery int ernal
• Timer                                                                      instruction cycle (FOSC/4). When the bit is set, Timer3
• Synchronous Counter                                                        increments on every rising edge of the Timer1 external
                                                                             clock input or the Timer1 oscillator, if enabled.
• Asynchronous Counter
                                                                             As with Timer1, the digital circuitry associated with the
                                                                             RC1/T1OSI and RC0/T1OSO/T13CKI pins is disabled
                                                                             when the Timer1 oscillator is enabled. This means the
                                                                             values o f T RISC<1:0> a re i gnored a nd t he p ins ar e
                                                                             read as ‘0’.
FIGURE 15-1:              TIMER3 BLOCK DIAGRAM
                          Timer1 Oscillator                             Timer1 Clock Input
                                                                                                                        1
  T1OSO/T13CKI                                                     1
                                                                             Prescaler             Synchronize
                                                      FOSC/4                 1, 2, 4, 8               Detect            0
                                                      Internal
                                                      Clock        0
           T1OSI                                                                    2
                                                                                                  Sleep Input
                          T1OSCEN(1)            TMR3CS                                                                                  Timer3
                                                                                                                                        On/Off
                          T3CKPS<1:0>
                          T3SYNC
                          TMR3ON
                  CCP1/CCP2 Special Event Trigger                       Clear TMR3                        TMR3                    Set
               CCP1/CCP2 Select from T3CON<6,3>                                           TMR3L          High Byte              TMR3IF
                                                                                                                              on Overflow
  Note 1: When enable bit, T1OSCEN, is cleared, the inverter and feedback resistor are turned off to eliminate power drain.
DS41303G-page 170                                                                                           2010 Microchip Technology Inc.
                                                                               PIC18F2XK20/4XK20
FIGURE 15-2:               TIMER3 BLOCK DIAGRAM (16-BIT READ/WRITE MODE)
                           Timer1 Oscillator                             Timer1 Clock Input
                                                                                                                           1
   T13CKI/T1OSO                                                     1
                                                                              Prescaler             Synchronize
                                                       FOSC/4                 1, 2, 4, 8                Detect             0
                                                       Internal
                                                       Clock        0
            T1OSI                                                                     2
                                                                                                    Sleep Input
                           T1OSCEN(1)            TMR3CS                                                                                   Timer3
                           T3CKPS<1:0>                                                                                                    On/Off
                           T3SYNC
                           TMR3ON
                   CCP1/CCP2 Special Event Trigger                       Clear TMR3                       TMR3                     Set
                CCP1/CCP2 Select from T3CON<6,3>                                           TMR3L         High Byte                TMR3IF
                                                                                                                                on Overflow
                                                                                                                      8
                                                                                                                           Read TMR1L
                                                                                                                           Write TMR1L
                                                                                                           8
                                                                                                8
                                                                                                          TMR3H
                                                                                                                  8
                                                                                                    8
                                                                                                                          Internal Data Bus
   Note 1: When enable bit, T1OSCEN, is cleared, the inverter and feedback resistor are turned off to eliminate power drain.
15.2      Timer3 16-Bit Read/Write Mode                                       15.3         Using the Timer1 Oscillator as the
Timer3 can be configured for 16-bit reads and w rites
                                                                                           Timer3 Clock Source
(see Fig ure 15-2). Whe n th e RD16 c ontrol bi t of th e                     The Timer1 internal oscillator may be used as the clock
T3CON re gister is se t, th e ad dress for TM R3H i s                         source for Timer3. The Timer1 oscillator is enabled by
mapped to a buffer register for the high byte of Timer3.                      setting the T1OSCEN bit of the T1CON register. To use
A read from TMR3L will load the contents of the high                          it as the Timer3 c lock s ource, the TMR3CS bit m ust
byte of Timer3 into the Timer3 High Byte Buffer regis-                        also be set. As pre viously noted, this also configures
ter. This provides the user with the ability to accurately                    Timer3 to i ncrement on e very ri sing e dge of th e
read all 16 bits of Timer1 without having to determine                        oscillator source.
whether a read of the high byte, followed by a read of
                                                                              The T imer1 oscillator is des cribed in Section 13.0
the low by te, has become invalid due to a roll over
                                                                              “Timer1 Module”.
between reads.
A write to the high byte of Timer3 must also take place                       15.4         Timer3 Interrupt
through th e TM R3H Buf fer reg ister. The Timer3 hig h
byte is updated with t he contents of TM R3H w hen a                          The TM R3 register p air (T MR3H:TMR3L) i ncrements
write occurs to TMR3L. This allows a u ser to w rite all                      from 000 0h to FFFF h and ov erflows to 00 00h. The
16 bits to both the high and low bytes of Timer3 at once.                     Timer3 interrupt, if enabled, is g enerated on overflow
The h igh by te of T imer3 i s n ot d irectly re adable or                    and is latched in interrupt flag bit, TMR3IF of the PIR2
writable in thi s mode. All reads and w rites must take                       register. This interrupt can be enabled or disabled by
place through the Timer3 High Byte Buffer register.                           setting or c learing the T imer3 In terrupt Enab le bi t,
                                                                              TMR3IE of the PIE2 register.
Writes to TM R3H do not clear the T imer3 pre scaler.
The prescaler is only cleared on writes to TMR3L.
 2010 Microchip Technology Inc.                                                                                               DS41303G-page 171
PIC18F2XK20/4XK20
15.5      Resetting Timer3 Using the CCP
          Special Event Trigger
If eit her of t he C CP m odules is co nfigured to us e
Timer3 an d to ge nerate a S pecial Ev ent Trigger
in Compare mode (CCP1M<3:0> o r C CP2M<3:0> =
1011), this signal will reset Timer3. It will also start an
A/D conversion if th e A/D module is e nabled (se e
Section 11.3.4 “Special Event Trigger” for m ore
information).
The m odule m ust be con figured as either a ti mer or
synchronous counter to take advantage of this feature.
When used th is wa y, th e CCPR2 H:CCPR2L re gister
pair effectively becomes a period register for Timer3.
If Timer3 i s ru nning in As ynchronous C ounter m ode,
the Reset operation may not work.
In th e e vent that a write to T imer3 c oincides with a
Special Event Trigger from a CCP module, the write will
take precedence.
  Note:     The Special Event Triggers from the CCP2
            module wi ll not s et th e TMR3IF interrupt
            flag bit of the PIR2 register.
TABLE 15-1:        REGISTERS ASSOCIATED WITH TIMER3 AS A TIMER/COUNTER
                                                                                                         Reset
   Name          Bit 7        Bit 6        Bit 5       Bit 4    Bit 3    Bit 2    Bit 1      Bit 0       Values
                                                                                                        on page
INTCON        GIE/GIEH PEIE/GIEL         TMR0IE       INT0IE    RBIE    TMR0IF   INT0IF      RBIF          59
PIR2           OSCFIF         C1IF         C2IF        EEIF    BCLIF    HLVDIF   TMR3IF     CCP2IF         62
PIE2           OSCFIE         C1IE         C2IE        EEIE    BCLIE    HLVDIE   TMR3IE     CCP2IE         62
IPR2           OSCFIP         C1IP         C2IP        EEIP    BCLIP    HLVDIP   TMR3IP     CCP2IP         62
TMR3L         Timer3 Register, Low Byte                                                                    61
TMR3H         Timer3 Register, High Byte                                                                   61
T1CON           RD16        T1RUN       T1CKPS1 T1CKPS0 T1OSCEN T1SYNC           TMR1CS    TMR1ON          60
T3CON           RD16        T3CCP2      T3CKPS1 T3CKPS0        T3CCP1   T3SYNC   TMR3CS    TMR3ON          61
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used by the Timer3 module.
DS41303G-page 172                                                                  2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
16.0       ENHANCED                                               The en hanced fe atures are d iscussed i n d etail i n
                                                                  Section 16.4 “PWM (Enhanced Mode)”. C apture,
           CAPTURE/COMPARE/PWM
                                                                  Compare an d si ngle-output PWM fu nctions of the
           (ECCP) MODULE                                          ECCP mo dule are the same as described fo r the
CCP1 is implemented as a standard CCP module with                 standard CCP module.
enhanced PWM capabilities. These include:                         The control register for th e enhanced CCP module is
•   Provision for 2 or 4 output channels                          shown in Register 16-1. It differs from the C CP2CON
•   Output steering                                               register in t hat the two M ost Sig nificant bit s a re
                                                                  implemented to control PWM functionality.
•   Programmable polarity
•   Programmable dead-band control
•   Automatic shutdown and restart.
REGISTER 16-1:          CCP1CON: ENHANCED CAPTURE/COMPARE/PWM 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
        P1M1          P1M0            DC1B1           DC1B0     CCP1M3           CCP1M2        CCP1M1         CCP1M0
bit 7                                                                                                                 bit 0
Legend:
R = Readable bit                   W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set           ‘0’ = Bit is cleared           x = Bit is unknown
bit 7-6           P1M<1:0>: Enhanced PWM Output Configuration bits
                  If CCP1M<3:2> = 00, 01, 10:
                  xx = P1A assigned as Capture/Compare input/output; P1B, P1C, P1D assigned as port pins
                  If CCP1M<3:2> = 11:
                  00 = Single output: P1A, P1B, P1C and P1D controlled by steering (See Section 16.4.7 “Pulse Steering
                       Mode”).
                  01 = Full-bridge output forward: P1D modulated; P1A active; P1B, P1C inactive
                  10 = Half-bridge output: P1A, P1B modulated with dead-band control; P1C, P1D assigned as port pins
                  11 = Full-bridge output reverse: P1B modulated; P1C active; P1A, P1D inactive
bit 5-4           DC1B<1:0>: PWM Duty Cycle bit 1 and bit 0
                  Capture mode:
                  Unused.
                  Compare mode:
                  Unused.
                  PWM mode:
                  These bits are the two LSbs of the 10-bit PWM duty cycle. The eight MSbs of the duty cycle are found in
                  CCPR1L.
bit 3-0           CCP1M<3:0>: Enhanced CCP Mode Select bits
                  0000 = Capture/Compare/PWM off (resets ECCP module)
                  0001 = Reserved
                  0010 = Compare mode, toggle output on match
                  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 CCP1 pin low, set output on compare match (set CCP1IF)
                  1001 = Compare mode, initialize CCP1 pin high, clear output on compare match (set CCP1IF)
                  1010 = Compare mode, generate software interrupt only, CCP1 pin reverts to I/O state
                  1011 = Compare mode, trigger special event (ECCP resets TMR1 or TMR3, sets CC1IF bit)
                  1100 = PWM mode; P1A, P1C active-high; P1B, P1D active-high
                  1101 = PWM mode; P1A, P1C active-high; P1B, P1D active-low
                  1110 = PWM mode; P1A, P1C active-low; P1B, P1D active-high
                  1111 = PWM mode; P1A, P1C active-low; P1B, P1D active-low
 2010 Microchip Technology Inc.                                                                       DS41303G-page 173
PIC18F2XK20/4XK20
In addition to the expanded range of modes available         16.3    Standard PWM Mode
through the C CP1CON reg ister an d EC CP1AS
register, the ECCP module has two additional registers       When co nfigured i n Si ngle O utput mo de, th e EC CP
associated w ith Enhan ced PWM operation and                 module fun ctions i dentically to th e s tandard C CP
auto-shutdown features. They are:                            module in PW M m ode, as de scribed i n Section 11.4
                                                             “PWM Mode”. This is also sometimes referred to as
• PWM1CON (Dead-band delay)
                                                             “Single CCP” mode, as in Table 16-1.
• PSTRCON (output steering)
16.1     ECCP Outputs and Configuration
The enhanced CCP module may have up to four PWM
outputs, dep ending on the sel ected ope rating m ode.
These out puts, de signated P1A through P1 D, are
multiplexed with I/O pins on PO RTC and PORTD (for
PIC18F4XK20 devices) or PORTB (for PIC18F2XK20
devices). Th e o utputs th at are active depend on th e
CCP ope rating m ode selected. The pi n ass ignments
are summarized in Table 16-1.
To configure the I/O pins as PWM outputs, the proper
PWM mode must be selected by setting the P1M<1:0>
and C CP1M<3:0> bit s. T he a ppropriate TR ISC an d
TRISD direction bits for the port pins must also be set
as outputs.
16.1.1      ECCP MODULES AND TIMER
            RESOURCES
Like the standard CCP modules, the ECCP module can
utilize T imers 1, 2 or 3,     depending on the mode
selected. Timer1 and Timer3 are available for modules
in C apture or C ompare mo des, w hile T imer2 is
available fo r m odules in PWM m ode. In teractions
between the standard and enhanced CCP modules are
identical to those described for standard CCP modules.
Additional d etails on tim er r esources are prov ided i n
Section 11.1.1      “CCP       Modules     and     Timer
Resources”.
16.2     Capture and Compare Modes
Except for the operation of the S pecial Event Trigger
discussed below, the Capture and Compare modes of
the ECCP module are identical in op eration to that of
CCP2. T hese a re di scussed in de tail in Section 11.2
“Capture Mode” a nd Section 11.3 “Compare
Mode”. N o changes are requ ired when mo ving
between 28-pin and 40/44-pin devices.
16.2.1      SPECIAL EVENT TRIGGER
The Special Event Trigger output of ECCP1 resets the
TMR1 or TMR3 register pair, depending on which timer
resource is currently selected. This allows the CCPR1
register to effectively be a 16-bit programmable period
register for Timer1 or Timer3.
DS41303G-page 174                                                                    2010 Microchip Technology Inc.
                                                                                       PIC18F2XK20/4XK20
16.4        PWM (Enhanced Mode)                                                     The PWM outputs are multiplexed with I/O pins and are
                                                                                    designated P1A, P1B, P1C and P1D. The polarity of the
The Enhanced PWM Mode can generate a PWM signal                                     PWM pins is configurable and is selected by setting the
on up to four dif ferent output pins w ith up to 10-bits of                         CCP1M bits in the CCP1CON register appropriately.
resolution. It can do this through four different PWM
output modes:                                                                       Table 16-1 s hows the p            in as signments for e          ach
                                                                                    Enhanced PWM mode.
•   Single PWM
                                                                                    Figure 16-1 s hows an example of a simplified bloc k
•   Half-Bridge PWM
                                                                                    diagram of the Enhanced PWM module.
•   Full-Bridge PWM, Forward mode
•   Full-Bridge PWM, Reverse mode                                                       Note:          To prevent th e generation o f a n
                                                                                                       incomplete w aveform w hen the PWM i s
To select an Enhanced PWM mode, the P1M bits of the                                                    first enabled, the ECCP module waits until
CCP1CON register must be set appropriately.                                                            the star t of a new PWM pe riod be fore
    Note:      The PWM Enhanced mode is available on                                                   generating a PWM signal.
               the En hanced C apture/Compare/PWM
               module (CCP1) only.
FIGURE 16-1:                    EXAMPLE SIMPLIFIED BLOCK DIAGRAM OF THE ENHANCED PWM MODE
                                   DC1B<1:0>             P1M<1:0>                      CCP1M<3:0>
       Duty Cycle Registers
                                                                            2          4
            CCPR1L
                                                                            CCP1/P1A                                           CCP1/P1A
                                                                                                TRIS
       CCPR1H (Slave)
                                                                                   P1B                                         P1B
                                                                           Output               TRIS
               Comparator                        R       Q
                                                                          Controller
                                                                                   P1C                                         P1C
             TMR2         (1)
                                                  S                                             TRIS
                                                                                   P1D                                         P1D
        Comparator
                                Clear Timer2,                                                   TRIS
                                toggle PWM pin and
                                latch duty cycle
            PR2                                                          PWM1CON
        Note    1:   The 8-bit timer TMR2 register is concatenated with the 2-bit internal Q clock, or 2 bits of the prescaler to create the 10-bit
                     time base.
    Note 1: The TRIS register value for each PWM output must be configured appropriately.
            2: Clearing the CCPxCON register will relinquish ECCP control of all PWM output pins.
            3: Any pin not used by an Enhanced PWM mode is available for alternate pin functions.
TABLE 16-1:            EXAMPLE PIN ASSIGNMENTS FOR VARIOUS PWM ENHANCED MODES
ECCP Mode                              P1M<1:0>                CCP1/P1A                     P1B                     P1C                      P1D
Single                                      00                    Yes(1)                   Yes   (1)
                                                                                                                   Yes   (1)
                                                                                                                                            Yes(1)
Half-Bridge                                 10                      Yes                     Yes                      No                       No
Full-Bridge, Forward                        01                      Yes                     Yes                      Yes                     Yes
Full-Bridge, Reverse                        11                      Yes                     Yes                      Yes                     Yes
Note 1:        Outputs are enabled by pulse steering in Single mode. See Register 16-4.
 2010 Microchip Technology Inc.                                                                                                     DS41303G-page 175
PIC18F2XK20/4XK20
FIGURE 16-2:             EXAMPLE PWM (ENHANCED MODE) OUTPUT RELATIONSHIPS (ACTIVE-HIGH
                         STATE)
                                                                       Pulse                              PR2+1
      P1M<1:0>                     Signal               0
                                                                       Width
                                                                                   Period
       00   (Single Output)     P1A Modulated
                                                            Delay(1)             Delay(1)
                                P1A Modulated
       10    (Half-Bridge)      P1B Modulated
                                P1A Active
              (Full-Bridge,     P1B Inactive
       01       Forward)
                                P1C Inactive
                                P1D Modulated
                                P1A Inactive
              (Full-Bridge,     P1B Modulated
       11
                Reverse)
                                P1C Active
                                P1D Inactive
       Relationships:
             • Period = 4 * TOSC * (PR2 + 1) * (TMR2 Prescale Value)
             • Pulse Width = TOSC * (CCPR1L<7:0>:CCP1CON<5:4>) * (TMR2 Prescale Value)
             • Delay = 4 * TOSC * (PWM1CON<6:0>)
         Note 1: Dead-band d elay i s p rogrammed us ing th e P WM1CON re gister ( Section 16.4.6 “Programmable Dead-Band Delay
                      mode”).
DS41303G-page 176                                                                               2010 Microchip Technology Inc.
                                                                          PIC18F2XK20/4XK20
FIGURE 16-3:               EXAMPLE ENHANCED PWM OUTPUT RELATIONSHIPS (ACTIVE-LOW STATE)
                                                                          Pulse                               PR2+1
      P1M<1:0>                        Signal               0
                                                                          Width
                                                                                      Period
       00    (Single Output)      P1A Modulated
                                  P1A Modulated
                                                               Delay(1)             Delay(1)
       10       (Half-Bridge)     P1B Modulated
                                  P1A Active
                (Full-Bridge,     P1B Inactive
       01         Forward)
                                  P1C Inactive
                                  P1D Modulated
                                  P1A Inactive
                (Full-Bridge,     P1B Modulated
       11
                  Reverse)
                                  P1C Active
                                  P1D Inactive
       Relationships:
             • Period = 4 * TOSC * (PR2 + 1) * (TMR2 Prescale Value)
             • Pulse Width = TOSC * (CCPR1L<7:0>:CCP1CON<5:4>) * (TMR2 Prescale Value)
             • Delay = 4 * TOSC * (PWM1CON<6:0>)
         Note    1:   Dead-band delay is p rogrammed u sing th e P WM1CON re gister ( Section 16.4.6 “Programmable Dead-Band Delay
                      mode”).
 2010 Microchip Technology Inc.                                                                               DS41303G-page 177
PIC18F2XK20/4XK20
16.4.1       HALF-BRIDGE MODE                                       Since th e P 1A an d P1B o utputs are mu ltiplexed w ith
                                                                    the PORT data latches, the associated TRIS bits must
In Half-Bridge mode, two pins are used as outputs to
                                                                    be cleared to configure P1A and P1B as outputs.
drive push-pull loads. The PWM output signal is output
on the CCPx/P1A pin, while the complementary PWM
output si gnal i s ou tput on t he P 1B pi n (se e                  FIGURE 16-4:                    EXAMPLE OF
Figure 16-5). This mo de can be us ed for H alf-Bridge                                              HALF-BRIDGE PWM
applications, as shown in Figure 16-5, or for Full-Bridge                                           OUTPUT
applications, w here four po wer s witches a re b eing                                    Period                     Period
modulated with two PWM signals.
                                                                                     Pulse Width
In Half-Bridge mode, the programmable dead-band delay
can be used to preven t shoot -through curr ent in                    P1A(2)
Half-Bridge power devices. The value of t he PDC<6:0>                                td
bits of t he P WM1CON r egister se ts th e numbe r o f                                             td
instruction cycles before the output is driven active. If the         P1B(2)
value is gr eater than t he duty cycle, the corr esponding
output r emains inacti ve dur ing the e ntire cycle. S ee                      (1)                            (1)                  (1)
Section 16.4.6 “Programmable Dead-Band Delay
mode” for more det ails of the d ead-band de lay                      td = Dead-Band Delay
operations.                                                           Note 1:        At this time, the TMR2 register is equal to the
                                                                                     PR2 register.
                                                                               2:    Output signals are shown as active-high.
FIGURE 16-5:             EXAMPLE OF HALF-BRIDGE APPLICATIONS
     Standard Half-Bridge Circuit (“Push-Pull”)
                                                           FET
                                                           Driver                                        +
                                               P1A
                                                                                                          -
                                                                                      Load
                                                           FET
                                                           Driver
                                                                                                          +
                                               P1B
                                                                                                          -
     Half-Bridge Output Driving a Full-Bridge Circuit
                                                                       V+
                                                  FET                                              FET
                                                  Driver                                           Driver
                                 P1A
                                                                      Load
                                                  FET                                              FET
                                                  Driver                                           Driver
                                 P1B
DS41303G-page 178                                                                                        2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
16.4.2      FULL-BRIDGE MODE
In Full-Bridge mode, all four pins are used as outputs.
An ex ample of Full-Bridge application is sh own i n
Figure 16-6.
In the For ward mode, pi n C CP1/P1A is dri ven to it s
active state, pin P1D is modulated, while P1B and P1C
will b e dr iven t o th eir in active stat e as s hown i n
Figure 16-7.
In the R everse mode, P1C is drive n to its active state,
pin P1B is modulated, while P1A and P1D will be driven
to their inactive state as shown Figure 16-7.
P1A, P1B, P1C and P1D outputs are multiplexed with
the PORT data latches. The associated TRIS bits must
be cleared to configure the P1A, P1B, P1C and P1D
pins as outputs.
FIGURE 16-6:            EXAMPLE OF FULL-BRIDGE APPLICATION
                                                                     V+
                                                 FET         QA            QC   FET
                                                 Driver                         Driver
                     P1A
                                                                    Load
                     P1B
                                                 FET                            FET
                                                 Driver                         Driver
                     P1C
                                                             QB            QD
                                                                     V-
                     P1D
 2010 Microchip Technology Inc.                                                         DS41303G-page 179
PIC18F2XK20/4XK20
FIGURE 16-7:              EXAMPLE OF FULL-BRIDGE PWM OUTPUT
   Forward Mode
                                                             Period
        P1A   (2)
                                               Pulse Width
        P1B(2)
        P1C(2)
        P1D(2)
                                   (1)                                              (1)
   Reverse Mode
                                                             Period
                                               Pulse Width
        P1A(2)
        P1B(2)
        P1C(2)
        P1D(2)
                                         (1)                                        (1)
      Note 1:       At this time, the TMR2 register is equal to the PR2 register.
              2:    Output signal is shown as active-high.
DS41303G-page 180                                                                          2010 Microchip Technology Inc.
                                                                       PIC18F2XK20/4XK20
16.4.2.1        Direction Change in Full-Bridge                        The Fu ll-Bridge m ode do es not prov ide d ead-band
                Mode                                                   delay. As one output is modulated at a time, dead-band
                                                                       delay i s generally n ot r equired. T here is a s ituation
In the Full-Bridge mode, the P1M1 bit in the CCP1CON
                                                                       where de ad-band del ay is required. Thi s s ituation
register allows users to cont rol t he f orward/reverse
                                                                       occurs when both of the following conditions are true:
direction. Wh en t he application fir mware cha nges th is
direction control bit, the module will change to the new               1.   The direction of the PWM output changes when
direction on the next PWM cycle.                                            the duty cycle of the output is at or near 100%.
A direction change is initiated in software by changing                2.   The turn off time of the power switch, including
the P1M1 bit of the CCP1CON register. The following                         the po wer d evice and dri ver ci rcuit, i s g reater
sequence occurs prior to the end of the current PWM                         than the turn on time.
period:                                                                Figure 16-9 shows an exa mple of the PW M dir ection
• The modulated outputs (P1B and P1D) are placed                       changing from forward to reverse, at a near 100% duty
  in their inactive state.                                             cycle. In this example, at time t1, the output P1A and
                                                                       P1D be come in active, while ou tput P1 C becomes
• The associated unmodulated outputs (P1A and
                                                                       active. Since the turn off time of the power devices is
  P1C) are switched to drive in the opposite
                                                                       longer th an th e t urn o n t ime, a sho ot-through cu rrent
  direction.
                                                                       will f low t hrough p ower devices QC an d QD ( see
• PWM modulation resumes at the beginning of the                       Figure 16-6) for th e du ration of ‘t ’. The same
  next period.                                                         phenomenon w ill oc cur to power d evices QA an d QB
See Figure 16-8 for an illustration of this sequence.                  for PWM direction change from reverse to forward.
                                                                       If changing PWM direction at high duty cycle is required
                                                                       for an application, two possible solutions for eliminating
                                                                       the shoot-through current are:
                                                                       1.   Reduce PWM dut y cy cle fo r one PWM p eriod
                                                                            before changing directions.
                                                                       2.   Use switch drivers that can drive the switches off
                                                                            faster than they can drive them on.
                                                                       Other opt ions to prev ent sh oot-through cu rrent ma y
                                                                       exist.
FIGURE 16-8:             EXAMPLE OF PWM DIRECTION CHANGE
           Signal                                Period(1)                                     Period
       P1A (Active-High)
       P1B (Active-High)
                                                                               Pulse Width
       P1C (Active-High)
                                                                                   (2)
       P1D (Active-High)
                                   Pulse Width
     Note 1:    The direction bit P1M1 of the CCP1CON register is written any time during the PWM cycle.
           2:   When changing directions, the P1A and P1C signals switch before the end of the current PWM cycle. The
                modulated P1B and P1D signals are inactive at this time. The length of this time is (1/FOSC)  TMR2 prescale
                value.
 2010 Microchip Technology Inc.                                                                               DS41303G-page 181
PIC18F2XK20/4XK20
FIGURE 16-9:             EXAMPLE OF PWM DIRECTION CHANGE AT NEAR 100% DUTY CYCLE
                                                Forward Period                   t1     Reverse Period
                        P1A
                        P1B
                                                                                               PW
                        P1C
                        P1D                          PW
                                                                                      TON
          External Switch C
                                                                                        TOFF
          External Switch D
                  Potential                                                             T = TOFF – TON
     Shoot-Through Current
      Note 1:    All signals are shown as active-high.
            2:   TON is the turn on delay of power switch QC and its driver.
            3:   TOFF is the turn off delay of power switch QD and its driver.
16.4.3      START-UP CONSIDERATIONS
When any PWM mode is us ed, the a pplication
hardware must use the proper external pull-up and/or
pull-down resistors on the PWM output pins.
  Note:     When the microcontroller is released from
            Reset, all of the I/O pins are in      the
            high-impedance state. The e xternal c ir-
            cuits must keep the power switch devices
            in the O ff state until the microcontroller
            drives the I/O pins with the proper signal
            levels or activates the PWM output(s).
The C CP1M<1:0> bi ts of the C CP1CON r egister all ow
the user to choose whether the PWM output signals are
active-high or active-low for each pair of PWM output pins
(P1A/P1C and P1 B/P1D). Th e P WM output p olarities
must be selected before the PWM pin output drivers are
enabled. C hanging t he po larity co nfiguration w hile the
PWM pin output drivers are enable is not recommended
since it may result in damage to the application circuits.
The P1A, P1B, P1C and P1D output latches may not be
in the prop er s tates w hen th e PWM m odule i s
initialized. Enabling the PWM pin output drivers at the
same time as the Enhanced PWM modes may cause
damage to the application circuit. The Enhanced PWM
modes must be enabled in the proper Output mode and
complete a full PWM cycle before enabling the PWM
pin output drivers. The completion of a full PWM cycle
is i ndicated by th e TM R2IF bi t o f th e PIR 1 reg ister
being set as the second PWM period begins.
DS41303G-page 182                                                                               2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
16.4.4        ENHANCED PWM                                         A sh utdown co ndition is in dicated by the ECCPASE
              AUTO-SHUTDOWN MODE                                   (Auto-Shutdown Ev ent S tatus) bit of the ECCP1AS
                                                                   register. If the bit is a ‘0’, the PWM pins are operating
The PWM mode supports an Auto-Shutdown mode that
                                                                   normally. If the bit is a ‘1’, the PWM outputs are in the
will di sable the PWM output s w hen an external
                                                                   shutdown state.
shutdown eve nt occ urs. Auto-Shut down mo de plac es
the PWM output pins into a prede termined state. This              When a shutdown event occurs, two things happen:
mode is used to help prevent the PWM from dam aging                The EC CPASE bit is s et to ‘ 1’. The ECCPASE will
the application.                                                   remain set u ntil cle ared in firm ware o r an auto-rest art
The auto-shutdown sources are s elected usin g the                 occurs (see Section 16.4.5 “Auto-Restart Mode”).
ECCPAS<2:0> bit s of the EC CP1AS register. A                      The enabled PWM pins are as ynchronously placed in
shutdown event may be generated by:                                their sh utdown st ates. The PWM ou tput pins are
•   A ogic
       l ‘0’ on the FLT0 pin                                       grouped into pairs [P1A/P1C] and [P1B/P1D]. The state
•   Comparator C1                                                  of each pi n p air is d etermined by the PSSAC and
                                                                   PSSBD bits of the ECCP1AS register. Each pin pair may
•   Comparator C2
                                                                   be placed into one of three states:
•   Setting the ECCPASE bit in firmware
                                                                   • Drive logic ‘1’
                                                                   • Drive logic ‘0’
                                                                   • Tri-state (high-impedance)
REGISTER 16-2:         ECCP1AS: ENHANCED CAPTURE/COMPARE/PWM AUTO-SHUTDOWN
                       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
    ECCPASE       ECCPAS2           ECCPAS1           ECCPAS0      PSSAC1         PSSAC0         PSSBD1          PSSBD0
bit 7                                                                                                                    bit 0
Legend:
R = Readable bit                   W = Writable bit             U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set             ‘0’ = Bit is cleared           x = Bit is unknown
bit 7            ECCPASE: ECCP Auto-Shutdown Event Status bit
                 1 = A shutdown event has occurred; ECCP outputs are in shutdown state
                 0 = ECCP outputs are operating
bit 6-4          ECCPAS<2:0>: ECCP Auto-shutdown Source Select bits
                 000 = Auto-Shutdown is disabled
                 001 = Comparator C1OUT output is high
                 010 = Comparator C2OUT output is high
                 011 = Either Comparator C1OUT or C2OUT is high
                 100 =VIL on FLT0 pin
                 101 =VIL on FLT0 pin or Comparator C1OUT output is high
                 110 =VIL on FLT0 pin or Comparator C2OUT output is high
                 111 =VIL on FLT0 pin or Comparator C1OUT or Comparator C2OUT is high
bit 3-2          PSSACn: Pins P1A and P1C Shutdown State Control bits
                 00 = Drive pins P1A and P1C to ‘0’
                 01 = Drive pins P1A and P1C to ‘1’
                 1x = Pins P1A and P1C tri-state
bit 1-0          PSSBDn: Pins P1B and P1D Shutdown State Control bits
                 00 = Drive pins P1B and P1D to ‘0’
                 01 = Drive pins P1B and P1D to ‘1’
                 1x = Pins P1B and P1D tri-state
 2010 Microchip Technology Inc.                                                                         DS41303G-page 183
PIC18F2XK20/4XK20
   Note 1: The auto-shutdown c ondition i s a
           level-based si gnal, no t an edg e-based
           signal. As long as the level is present, the
           auto-shutdown will persist.
         2: Writing to th e ECCPASE bi t is di sabled
            while an a uto-shutdown c ondition
            persists.
         3: Once the au to-shutdown c ondition has
            been rem oved an d th e PWM res tarted
            (either thro ugh firmware or au to-restart)
            the PWM signal will always restart at the
            beginning of the next PWM period.
FIGURE 16-10:             PWM AUTO-SHUTDOWN WITH FIRMWARE RESTART (PRSEN = 0)
                                                             PWM Period
         Shutdown Event
            ECCPASE bit
            PWM Activity
                                          Normal PWM
                                                                                      ECCPASE
                                                                                      Cleared by
                         Start of                             Shutdown     Shutdown Firmware PWM
                       PWM Period                            Event Occurs Event Clears           Resumes
16.4.5      AUTO-RESTART MODE
The En hanced PW M can be c onfigured to a utomati-
cally restart the PWM signal once the auto-shutdown
condition has been removed. Auto-restart is enabled by
setting the PRSEN bit in the PWM1CON register.
If auto-restart is enabled, the ECCPASE bit will remain
set as l ong a s the au to-shutdown c ondition i s active.
When the a uto-shutdown c ondition is r emoved, th e
ECCPASE bit will be cleared via hardware and normal
operation will resume.
FIGURE 16-11:             PWM AUTO-SHUTDOWN WITH AUTO-RESTART ENABLED (PRSEN = 1)
                                                             PWM Period
         Shutdown Event
           ECCPASE bit
           PWM Activity
                                         Normal PWM
                         Start of                          Shutdown     Shutdown               PWM
                       PWM Period                         Event Occurs Event Clears           Resumes
DS41303G-page 184                                                                             2010 Microchip Technology Inc.
                                                                PIC18F2XK20/4XK20
16.4.6      PROGRAMMABLE DEAD-BAND                              FIGURE 16-12:                  EXAMPLE OF
            DELAY MODE                                                                         HALF-BRIDGE PWM
In H alf-Bridge a pplications w here al l p ower s witches                                     OUTPUT
are m odulated at th e PW M frequency, the po wer                                    Period                   Period
switches normally require more time to turn off than to
turn on. If both the upper and lower power switches are                         Pulse Width
switched at the sa me ti me (one tu rned on , an d th e          P1A(2)
other turned off), both switches may be on for a short                          td
period of ti me until one switch c ompletely turn s of f.
                                                                                              td
During thi s bri ef i nterval, a v ery hi gh c urrent            P1B(2)
(shoot-through c urrent) will fl ow th rough both po wer
switches, sh orting t he b ridge su pply. To avoid t his                  (1)                          (1)                 (1)
potentially de structive s hoot-through c urrent fro m
flowing during switching, turning on either of the power         td = Dead-Band Delay
switches is normally delayed to allow the other switch
to completely turn off.                                           Note 1:       At this time, the TMR2 register is equal to the
In Half-Bridge mode, a di gitally pro grammable                                 PR2 register.
dead-band d elay i s a vailable to a void s hoot-through                  2:    Output signals are shown as active-high.
current from destroying the bridge power switches. The
delay occurs at the signal transition from the non-active
state to th e ac tive s tate. See F igure 16-12 for
illustration. Th e l ower s even b its of th e a ssociated
PWM1CON reg ister (R egister 16-3) se ts t he d elay
period in t erms o f m icrocontroller instruction cycles
(TCY or 4 TOSC).
FIGURE 16-13:           EXAMPLE OF HALF-BRIDGE APPLICATIONS
                                                                     V+
     Standard Half-Bridge Circuit (“Push-Pull”)
                                                       FET
                                                       Driver                                      +
                                             P1A                                                   V
                                                                                                   -
                                                                                 Load
                                                       FET
                                                       Driver
                                                                                                   +
                                             P1B                                                   V
                                                                                                   -
                                                                     V-
 2010 Microchip Technology Inc.                                                                             DS41303G-page 185
PIC18F2XK20/4XK20
REGISTER 16-3:        PWM1CON: ENHANCED PWM 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
   PRSEN            PDC6        PDC5           PDC4       PDC3                PDC2        PDC1           PDC0
bit 7                                                                                                          bit 0
Legend:
R = Readable bit            W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR           ‘1’ = Bit is set           ‘0’ = Bit is cleared            x = Bit is unknown
bit 7         PRSEN: PWM Restart Enable bit
              1 = Upon au to-shutdown, the ECCPASE bit c lears au tomatically once the shutdown event go es
                  away; the PWM restarts automatically
              0 = Upon auto-shutdown, ECCPASE must be cleared by software to restart the PWM
bit 6-0       PDC<6:0>: PWM Delay Count bits
              PDCn = Number o f F OSC/4 (4 * TOSC) c ycles bet ween the sc heduled time w hen a PWM s ignal
                     should transition active and the actual time it transitions active
DS41303G-page 186                                                                     2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
16.4.7        PULSE STEERING MODE
In Single Output mode, pulse steering allows any of the               Note:     The associated TR IS bits must be set to
PWM pins to be the modulated signal. Additionally, the                          output (‘0’) to enable the pin output driver
same PWM signal can be simultaneously available on                              in order to see the PWM signal on the pin.
multiple pins.
                                                                   While the PWM Steering mode is active, CCP1M<1:0>
Once th e Si ngle O utput m ode is s elected                       bits of the CCP1CON register select the PWM output
(CCP1M<3:2> = 11 and         P1M<1:0>= 00 of t he                  polarity for the P1<D:A> pins.
CCP1CON reg ister), the u ser firm ware can bri ng o ut
                                                                   The PWM auto-shutdown ope ration al so applies to
the same PWM signal to one, two, three or four output
                                                                   PWM Steering mod e as de scribed in Section 16.4.4
pins by setting the a ppropriate STR<D:A> bi ts of t he
                                                                   “Enhanced PWM Auto-shutdown mode”. An
PSTRCON register, as shown in Table 16-1.
                                                                   auto-shutdown ev ent w ill o nly af fect p ins th at h ave
                                                                   PWM outputs enabled.
REGISTER 16-4:          PSTRCON: PULSE STEERING CONTROL REGISTER(1)
        U-0           U-0               U-0            R/W-0 R/W        -0         R/W-0          R/W-0          R/W-1
        —              —                 —            STRSYNC      STRD                STRC       STRB           STRA
bit 7                                                                                                                  bit 0
Legend:
R = Readable bit                   W = Writable bit             U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set             ‘0’ = Bit is cleared          x = Bit is unknown
bit 7-5           Unimplemented: Read as ‘0’
bit 4             STRSYNC: Steering Sync bit
                  1 = Output steering update occurs on next PWM period
                  0 = Output steering update occurs at the beginning of the instruction cycle boundary
bit 3             STRD: Steering Enable bit D
                  1 = P1D pin has the PWM waveform with polarity control from CCPxM<1:0>
                  0 = P1D pin is assigned to port pin
bit 2             STRC: Steering Enable bit C
                  1 = P1C pin has the PWM waveform with polarity control from CCPxM<1:0>
                  0 = P1C pin is assigned to port pin
bit 1             STRB: Steering Enable bit B
                  1 = P1B pin has the PWM waveform with polarity control from CCPxM<1:0>
                  0 = P1B pin is assigned to port pin
bit 0             STRA: Steering Enable bit A
                  1 = P1A pin has the PWM waveform with polarity control from CCPxM<1:0>
                  0 = P1A pin is assigned to port pin
Note 1:       The PWM Steering mode is available only when the CCP1CON register bits CCP1M<3:2> = 11 and
              P1M<1:0> = 00.
 2010 Microchip Technology Inc.                                                                        DS41303G-page 187
PIC18F2XK20/4XK20
FIGURE 16-14:          SIMPLIFIED STEERING
                       BLOCK DIAGRAM
           STRA
     P1A Signal                             P1A pin
      CCP1M1               1
    PORT Data
                           0
                                     TRIS
           STRB
      CCP1M0               1                P1B pin
    PORT Data              0
                                     TRIS
           STRC
                                            P1C pin
      CCP1M1               1
    PORT Data              0
                                     TRIS
           STRD
      CCP1M0               1                P1D pin
   PORT Data               0
                                     TRIS
 Note 1:   Port out puts are configured as show n when
           the CCP 1CON regist er bit s P 1M<1:0> = 00
           and CCP1M<3:2> = 11.
      2:   Single P WM out put requires setting at least
           one of the STRx bits.
DS41303G-page 188                                           2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
16.4.7.1      Steering Synchronization                             Figures 16-15 and 16-16 illustrate the timing diagrams
                                                                   of the PWM ste ering de pending on the STR SYNC
The STRSYNC bit of the PSTRCON register gives the
                                                                   setting.
user two sel ections of w hen the s teering eve nt w ill
happen. Wh en the STR SYNC b it is ‘ 0’, t he steering
event w ill happen a t th e e nd of the in struction th at
writes to t he PST RCON re gister. In thi s c ase, th e
output si gnal at the P 1<D:A> p ins ma y be an
incomplete PWM w aveform. Thi s ope ration is useful
when the user firmware needs to immediately remove
a PWM signal from the pin.
When the STRSYNC b it i s ‘1’, t he e ffective steering
update will happen at the b eginning of th e next PWM
period. In this case, steering on/off the PWM output will
always produce a complete PWM waveform.
FIGURE 16-15:           EXAMPLE OF STEERING EVENT AT END OF INSTRUCTION (STRSYNC = 0)
                              PWM Period
      PWM
     STRn
   P1<D:A>           PORT Data                                                       PORT Data
                                                       P1n = PWM
FIGURE 16-16:           EXAMPLE OF STEERING EVENT AT BEGINNING OF INSTRUCTION
                        (STRSYNC = 1)
       PWM
      STRn
   P1<D:A>                     PORT Data                                                      PORT Data
                                                                   P1n = PWM
 2010 Microchip Technology Inc.                                                                     DS41303G-page 189
PIC18F2XK20/4XK20
16.4.8      OPERATION IN POWER-MANAGED
            MODES
In Sleep mode, all clock sources are disabled. Timer2
will not increment and the state of the module will not
change. If the ECCP pin is driving a value, it w ill con-
tinue to drive that value. When the device wakes up, it
will continue from this state. If Two-Speed Start-ups are
enabled, the initial start-up frequency from HFINTOSC
and the postscaler may not be stable immediately.
In PRI_IDLE mode, the primary clock will continue to
clock th e ECCP module without c hange. In a ll other
power-managed modes, the selected power-managed
mode c lock w ill clock Timer2. Ot her power-managed
mode cl ocks will m ost li kely b e dif ferent th an th e
primary clock frequency.
16.4.8.1      Operation with Fail-Safe
              Clock Monitor
If the Fail-Safe Clock Monitor is enabled, a clock failure
will force the device into the RC_RUN Power-Managed
mode and the OSCFIF bit of the PIR2 register will be
set. The ECCP will then be cl ocked from the internal
oscillator clock s ource, w hich m ay h ave a different
clock frequency than the primary clock.
See the previous section for additional details.
16.4.9      EFFECTS OF A RESET
Both Power-on Reset and subsequent Resets will force
all ports to In put mode and the CCP registers to their
Reset states.
This fo rces the enhanced C CP m odule to res et to a
state compatible with the standard CCP module.
DS41303G-page 190                                             2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
TABLE 16-2:       REGISTERS ASSOCIATED WITH ECCP1 MODULE AND TIMER1 TO TIMER3
                                                                                                           Reset
   Name         Bit 7        Bit 6         Bit 5      Bit 4      Bit 3       Bit 2       Bit 1    Bit 0    Values
                                                                                                          on page
INTCON        GIE/GIEH PEIE/GIEL          TMR0IE      INT0IE     RBIE       TMR0IF      INT0IF    RBIF      59
RCON            IPEN      SBOREN            —           RI        TO          PD         POR      BOR       58
PIR1           PSPIF         ADIF          RCIF       TXIF      SSPIF       CCP1IF     TMR2IF    TMR1IF     62
PIE1           PSPIE         ADIE          RCIE       TXIE      SSPIE       CCP1IE     TMR2IE    TMR1IE     62
IPR1           PSPIP         ADIP          RCIP       TXIP      SSPIP       CCP1IP     TMR2IP    TMR1IP     62
PIR2           OSCFIF        C1IF          C2IF       EEIF      BCLIF       HLVDIF     TMR3IF    CCP2IF     62
PIE2          OSCFIE         C1IE          C2IE       EEIE      BCLIE       HLVDIE     TMR3IE    CCP2IE     62
IPR2          OSCFIP         C1IP          C2IP       EEIP      BCLIP       HLVDIP     TMR3IP    CCP2IP     62
TRISB        PORTB Data Direction Control Register                                                          62
TRISC        PORTC Data Direction Control Register                                                          62
TRISD        PORTD Data Direction Control Register                                                          62
TMR1L        Timer1 Register, Low Byte                                                                      60
TMR1H        Timer1 Register, High Byte                                                                     60
T1CON           RD16       T1RUN         T1CKPS1     T1CKPS0   T1OSCEN     T1SYNC     TMR1CS     TMR1ON     60
TMR2         Timer2 Register                                                                                60
T2CON             —      T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0                         60
PR2          Timer2 Period Register                                                                         60
TMR3L        Timer3 Register, Low Byte                                                                      61
TMR3H        Timer3 Register, High Byte                                                                     61
T3CON           RD16       T3CCP2        T3CKPS1     T3CKPS0   T3CCP1      T3SYNC     TMR3CS     TMR3ON     61
CCPR1L       Capture/Compare/PWM Register 1, Low Byte                                                       61
CCPR1H       Capture/Compare/PWM Register 1, High Byte                                                      61
CCP1CON         P1M1        P1M0          DC1B1      DC1B0     CCP1M3      CCP1M2      CCP1M1    CCP1M0     61
ECCP1AS      ECCPASE ECCPAS2          ECCPAS1      ECCPAS0     PSSAC1      PSSAC0      PSSBD1    PSSBD0     61
PWM1CON        PRSEN        PDC6          PDC5        PDC4       PDC3        PDC2       PDC1      PDC0      61
Legend:    — = unimplemented, read as ‘0’. Shaded cells are not used during ECCP operation.
 2010 Microchip Technology Inc.                                                                 DS41303G-page 191
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 192    2010 Microchip Technology Inc.
                                                            PIC18F2XK20/4XK20
17.0      MASTER SYNCHRONOUS                                17.3      SPI Mode
          SERIAL PORT (MSSP)                                The SPI mode allows 8 bits of data to be synchronously
          MODULE                                            transmitted and rec eived si multaneously. Al l fo ur
                                                            modes of     SPI are     supported. T o ac complish
17.1      Master SSP (MSSP) Module                          communication, typically three pins are used:
          Overview                                          • Serial Data Out – SDO
                                                            • Serial Data In – SDI/SDA
The Master Synchronous Serial Port (MSSP) module is
a serial interface, useful for communicating with other     • Serial Clock – SCK/SCL
peripheral or microcontroller devices. These peripheral     Additionally, a fourth pin may be used when in a Slave
devices may be serial EEPROMs, shift registers, dis-        mode of operation:
play drivers, A/D c onverters, etc . The M SSP m odule      • Slave Select – SS
can operate in one of two modes:
                                                            Figure 17-1 sh ows the block di agram of the             MSSP
• Serial Peripheral Interface (SPI)                         module when operating in SPI mode.
• Inter-Integrated Circuit (I2C)
  - Full Master mode                                        FIGURE 17-1:           MSSP BLOCK DIAGRAM
  - Slave mode (with general address call)                                         (SPI MODE)
The I 2C i nterface s upports the f ollowing modes i n                                                         Internal
hardware:                                                                                                     Data Bus
• Master m ode                                                                 Read                         Write
• Multi-Master mode
                                                                                        SSPBUF Reg
• Slave mode
17.2      Control Registers                                        SDI/SDA
The M SSP m odule ha s seven as sociated re gisters.                                        SSPSR Reg
These include:                                                      SDO             bit 0                    Shift
                                                                                                             Clock
•   SSPSTA – STATUS register
•   SSPCON1 – First Control register
•   SSPCON2 – Second Control register
•   SSPBUF – Transmit/Receive buffer                                 SS           SS Control
•   SSPSR – Shift register (not directly accessible)                                 Enable
•   SSPADD – Address register
                                                                                  Edge
•   SSPMSK – Address Mask register                                                Select
The use of these registers and their individual Configu-
                                                                                                    2
ration bits differ significantly depending on whether the
                                                                                             Clock Select
MSSP module is operated in SPI or I2C mode.
Additional d etails are provided un der the i ndividual                                  SSPM<3:0>
sections.
                                                               SCK/SCL
                                                                                  SMP:CKE 4
                                                                                       2                (
                                                                                                 TMR2 Output
                                                                                                     2
                                                                                                                       )
                                                                                    Edge
                                                                                    Select              Prescaler TOSC
                                                                                                        4, 16, 64
                                                                                        Data to TX/RX in SSPSR
                                                                                        TRIS bit
 2010 Microchip Technology Inc.                                                                   DS41303G-page 193
PIC18F2XK20/4XK20
17.3.1        REGISTERS                                            SSPSR i s the s hift register u sed fo r s hifting da ta i n
                                                                   and out. SSPBUF provides in direct ac cess to th e
The M SSP m odule ha s fo ur reg isters for SPI mode
                                                                   SSPSR regi ster. S SPBUF is the buf fer register to
operation. These are:
                                                                   which d ata bytes a re written, and fro m which data
•   SSPCON1 – Control Register                                     bytes are read.
•   SSPSTAT – STATUS register                                      In receive operations, SSPSR and SSPBUF together
•   SSPBUF – Serial Receive/Transmit Buffer                        create a double-buffered re ceiver. When SSPSR
•   SSPSR – Shift Register (Not directly accessible)               receives a complete byte, it is transferred to SSPBUF
SSPCON1 a nd SSPST AT are the c ontrol a nd ST A-                  and the SSPIF interrupt is set.
TUS registers in SPI mode operation. The SSPCON1                   During   transmission, the       SSPBUF is        n ot
register is re adable a nd w ritable. The l ower 6 bits of         double-buffered. A wri te to SSPBUF wil l write to both
the SSPSTAT are read-only. The upper two bits of the               SSPBUF and SSPSR.
SSPSTAT are read/write.
REGISTER 17-1:           SSPSTAT: MSSP STATUS REGISTER (SPI MODE)
      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
Legend:
R = Readable bit                 W = Writable bit              U = Unimplemented bit, read as ‘0’
-n = Value at POR                ‘1’ = Bit is set              ‘0’ = Bit is cleared            x = Bit is unknown
bit 7             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.
bit 6             CKE: SPI Clock Select bit(1)
                  1 = Output data changes on clock transition from active to idle
                  0 = Output data changes on clock transition from idle to active
bit 5             D/A: Data/Address bit
                  Used in I2C mode only.
bit 4             P: Stop bit
                  Used in I2C mode only. This bit is cleared when the MSSP module is disabled, SSPEN is cleared.
bit 3             S: Start bit
                  Used in I2C mode only.
bit 2             R/W: Read/Write Information bit
                  Used in I2C mode only.
bit 1             UA: Update Address bit
                  Used in I2C mode only.
bit 0             BF: Buffer Full Status bit (Receive mode only)
                  1 = Receive complete, SSPBUF is full
                  0 = Receive not complete, SSPBUF is empty
Note 1:       Polarity of clock state is set by the CKP bit of the SSPCON1 register.
DS41303G-page 194                                                                             2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
REGISTER 17-2:            SSPCON1: MSSP CONTROL 1 REGISTER (SPI MODE)
    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
Legend:
R = Readable bit                   W = Writable bit             U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set             ‘0’ = Bit is cleared           x = Bit is unknown
bit 7              WCOL: Write Collision Detect bit (Transmit mode only)
                   1 = The SSPBUF register is written while it is still transmitting the previous word
                       (must be cleared by software)
                   0 = No collision
bit 6              SSPOV: Receive Overflow Indicator bit(1)
                   SPI Slave mode:
                   1 = A new byte is received while the SSPBUF register is still holding the previous data. In case of over-
                       flow, the data in SSPSR is lost. Overflow can only occur in Slave mode. The user must read the
                       SSPBUF, even if only transmitting data, to avoid setting overflow (must be cleared by software).
                   0 = No overflow
bit 5              SSPEN: Synchronous Serial Port Enable bit(2)
                   1 = Enables serial port and configures SCK, SDO, SDI and SS as serial port pins. When enabled, the
                       SDA and SCL pins must be configured as inputs.
                   0 = Disables serial port and configures these pins as I/O port pins
bit 4              CKP: Clock Polarity Select bit
                   1 = Idle state for clock is a high level
                   0 = Idle state for clock is a low level
bit 3-0            SSPM<3:0>: Synchronous Serial Port Mode Select bits(3)
                   0101 = SPI Slave mode, clock = SCK pin, SS pin control disabled, SS can be used as I/O pin
                   0100 = SPI Slave mode, clock = SCK pin, SS pin control enabled
                   0011 = SPI Master mode, clock = TMR2 output/2
                   0010 = SPI Master mode, clock = FOSC/64
                   0001 = SPI Master mode, clock = FOSC/16
                   0000 = SPI Master mode, clock = FOSC/4
Note 1:        In Master mode, the overflow bit is not set since each new reception (and transmission) is initiated by
               writing to the SSPBUF register.
          2:   When enabled, these pins must be properly configured as input or output.
          3:   Bit combinations not specifically listed here are either reserved or implemented in I2C mode only.
 2010 Microchip Technology Inc.                                                                         DS41303G-page 195
PIC18F2XK20/4XK20
17.3.2      OPERATION                                         When the a pplication software is expecting to r eceive
                                                              valid data, the SSPBUF should be read before the next
When ini tializing th e SPI , se veral options n eed to b e
                                                              byte of data to transfer is written to the SSPBUF. The
specified. This is done by programming the appropriate
                                                              Buffer Full bit, BF of the SSPSTAT register, indicates
control b its (SSPCO N1<5:0> an d SSPST AT<7:6>).
                                                              when SSPBUF has been loaded with the received data
These control bits allow the following to be specified:
                                                              (transmission is complete). When the SSPBUF is read,
• Master mode (SCK is the clock output)                       the BF bit is cleared. This data may be irrelevant if the
• Slave mode (SCK is the clock input)                         SPI is only a transmitter. Generally, the MSSP interrupt
• Clock Polarity (Idle state of SCK)                          is used to d etermine when the transmission/reception
• Data Input Sample Phase (middle or end of data              has c ompleted. The SSPBUF must be rea d and/or
  output time)                                                written. If the interrupt method is not going to be used,
                                                              then software polling can be done to ensure that a write
• Clock Edge (output data on rising/falling edge of
                                                              collision doe s no t oc cur. Exa mple 17-1 sh ows th e
  SCK)
                                                              loading of the SSPBUF (SSPSR) for data transmission.
• Clock Rate (Master mode only)
                                                              The SSPSR is not directly readable or writable and can
• Slave Select mode (Slave mode only)
                                                              only be accessed by addressing the SSPBUF register.
The MSSP consists of a tr ansmit/receive shift register       Additionally, the MSSP STATUS re gister (SSPSTAT)
(SSPSR) and a buffer register (SSPBUF). The SSPSR             indicates the various status conditions.
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. The n, the Buf fer Fu ll de tect bi t, BF of th e
SSPSTAT register, and the interrupt flag bit, SSPIF, are
set. Th is double-buffering of the re ceived da ta
(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
of t he S SPCON1 register, will be se t. U ser so ftware
must clear the WCOL bit so that it can be determined if
the fo llowing w rite(s) to t he SSP BUF reg ister
completed successfully.
EXAMPLE 17-1:           LOADING THE SSPBUF (SSPSR) REGISTER
LOOP      BTFSS     SSPSTAT, BF         ;Has data been received (transmit complete)?
          BRA       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
DS41303G-page 196                                                                      2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
17.3.3      ENABLING SPI I/O                                        17.3.4      TYPICAL CONNECTION
To enable the serial port, SSP Enab le bit, SSPEN of                Figure 17-2 sh ows a typ ical c onnection between tw o
the SSPCON1 register, must be set. To reset or recon-               microcontrollers. The master c ontroller (Proc essor 1)
figure SPI m ode, clear the SSPEN bit , reinitialize the            initiates the data transfer by sending the SCK signal.
SSPCON registers and then s et the SSPEN bi t. This                 Data is shifted out of bo th shift registers on their pro-
configures the SDI, SDO, SCK and SS pins as serial                  grammed clock edge and latched on the opposite edge
port pins. For the pins to behave as the serial port func-          of the clock. Both processors should be programmed to
tion, some mu st hav e the ir data direction bi ts (in the          the same C lock Pol arity (C KP), then bo th controllers
TRIS register) appropriately programmed as follows:                 would se nd an d receive da ta at th e same ti me.
• SDI is automatically controlled by the SPI module                 Whether t he data is m eaningful (o r du mmy data)
                                                                    depends on th e app lication sof tware. This lea ds to
• SDO must have corresponding TRIS bit cleared
                                                                    three scenarios for data transmission:
• SCK (Master mode) must have corresponding
  TRIS bit cleared                                                  • Master sends data–Slave sends dummy data
• SCK (Slave mode) must have corresponding                          • Master sends data–Slave sends data
  TRIS bit set                                                      • Master sends dummy data–Slave sends data
• SS must have corresponding TRIS bit set
Any serial po rt f unction that is n ot desired may b e
overridden by programming the co rresponding da ta
direction (TRIS) register to the opposite value.
FIGURE 17-2:             SPI MASTER/SLAVE CONNECTION
             SPI Master SSPM<3:0> = 00xxb                                        SPI Slave SSPM<3:0> = 010xb
                                                SDO                       SDI
                      Serial Input Buffer                                             Serial Input Buffer
                          (SSPBUF)                                                        (SSPBUF)
                         Shift Register         SDI                      SDO            Shift Register
                           (SSPSR)                                                        (SSPSR)
                   MSb                    LSb                                     MSb                    LSb
                                                         Serial Clock
                                                SCK                      SCK
                       Processor 1                                                         Processor 2
 2010 Microchip Technology Inc.                                                                            DS41303G-page 197
PIC18F2XK20/4XK20
17.3.5      MASTER MODE                                            The c lock p olarity is s elected by ap propriately
                                                                   programming th e C KP bi t of t he SSP CON1 r egister.
The m aster can in itiate the da ta tra nsfer at a ny time
                                                                   This then , w ould gi ve w aveforms f or SPI
because it co ntrols t he SC K. The m aster dete rmines
                                                                   communication as s hown in Fi gure 17-3, Fi gure 17-5
when th e sl ave (Proc essor 2, Fi gure 17-2) is to
                                                                   and Figure 17-6, where the MSB is transmitted first. In
broadcast data by the software protocol.
                                                                   Master m ode, the SPI c lock ra te (bi t rate) i s us er
In Ma ster m ode, th e da ta i s t ransmitted/received a s         programmable to be one of the following:
soon as the SSPBUF register is written to. If the SPI is
                                                                   •   FOSC/4 (or TCY)
only go ing to re ceive, the SD O o utput c ould be di s-
abled (programmed as an input). The SSPSR register                 •   FOSC/16 (or 4 • TCY)
will continue to shift in the signal present on the SDI pin        •   FOSC/64 (or 16 • TCY)
at the pro grammed c lock rat e. As ea ch byte is                  •   Timer2 output/2
received, it will be loaded into the SSPBUF register as
                                                                   This allows a ma ximum data rate ( at 64 M Hz) o f
if a normal rec eived byt e (int errupts and S tatus bit s
                                                                   16.00 Mbps.
appropriately s et). Thi s c ould be u seful in r eceiver
applications as a “Line Activity Monitor” mode.                    Figure 17-3 s hows the waveforms for Ma ster m ode.
                                                                   When the CKE bit is set, the SDO data is valid before
                                                                   there is a clock edge on SCK. The change of the input
                                                                   sample is shown based on the state of the SMP bit. The
                                                                   time when the SSPBUF is loaded w ith the received
                                                                   data is shown.
FIGURE 17-3:            SPI MODE WAVEFORM (MASTER MODE)
     Write to
     SSPBUF
     SCK
     (CKP = 0
     CKE = 0)
     SCK
     (CKP = 1
     CKE = 0)
                                                                                                                     4 Clock
     SCK                                                                                                             Modes
     (CKP = 0
     CKE = 1)
     SCK
     (CKP = 1
     CKE = 1)
     SDO                    bit 7         bit 6   bit 5   bit 4   bit 3      bit 2    bit 1       bit 0
     (CKE = 0)
     SDO                    bit 7         bit 6   bit 5   bit 4   bit 3     bit 2     bit 1       bit 0
     (CKE = 1)
     SDI
     (SMP = 0)            bit 7                                                                 bit 0
     Input
     Sample
     (SMP = 0)
     SDI
     (SMP = 1)
                                  bit 7                                                                 bit 0
     Input
     Sample
     (SMP = 1)
     SSPIF
                                                                                                                Next Q4 Cycle
     SSPSR to                                                                                                   after Q2
     SSPBUF
DS41303G-page 198                                                                               2010 Microchip Technology Inc.
                                                             PIC18F2XK20/4XK20
17.3.6       SLAVE MODE                                      must be high. When the SS pin is low, transmission and
                                                             reception are enabled and the SDO pin is driven. When
In Slave mode, the data is transmitted and received as
                                                             the SS pin goes high, the SDO pin is no longer driven,
the ex ternal cl ock pul ses ap pear on SC K. When the
                                                             even if in the middle of a transmitted byte and becomes
last bit is latched, the SSPIF interrupt flag bit is set.
                                                             a floating o utput. E xternal pu ll-up/pull-down res istors
Before enabling the module in SPI Slave mode, the clock      may be desirable depending on the application.
line must match the proper Idle state. The clock line can
be obser ved by r eading the S CK pin. The Id le st ate is      Note 1: When the SPI is in Slave mode with SS pin
determined by the CKP bit of the SSPCON1 register.                      control enabled (SSPCON<3:0> = 0100),
                                                                        the SPI module will reset if the SS pin is set
While in Slave mode, the external clock is supplied by
                                                                        to VDD.
the external clock source on the SCK pin. This external
clock must meet the minimum high and low times as                     2: When the SPI is used in Slave mode with
specified in the electrical specifications.                              CKE set the SS pin control must also be
                                                                         enabled.
While in Sle ep m ode, the s lave ca n tran smit/receive
data. When a byte is received, the device will wake-up       When the SPI module resets, the bit counter is forced
from Sleep.                                                  to ‘0’. This can be done by either forcing the SS pin to
                                                             a high level or clearing the SSPEN bit.
17.3.7       SLAVE SELECT                                    To emulate two-wire communication, the SDO pin can
             SYNCHRONIZATION                                 be connected to th e SDI pin. When the SPI nee ds to
The SS p in allows a Sy nchronous Slave mode. Th e           operate as a receiver, the SDO pin can be configured
SPI must be in Slave mode with SS pin control enabled        as an input. This disables transmissions from the SDO.
(SSPCON1<3:0> = 04h). The pin must not be driven             The SDI can always be left as an input (SDI function)
low for the SS pin to function as an input. The data latch   since it cannot create a bus conflict.
FIGURE 17-4:            SLAVE SYNCHRONIZATION WAVEFORM
 SS
 SCK
 (CKP = 0
 CKE = 0)
 SCK
 (CKP = 1
 CKE = 0)
 Write to
 SSPBUF
 SDO                                 bit 7   bit 6                          bit 7                         bit 0
 SDI                                                                                                     bit 0
 (SMP = 0)
                                   bit 7                                   bit 7
 Input
 Sample
 (SMP = 0)
 SSPIF
 Interrupt
 Flag
                                                                                                Next Q4 Cycle
 SSPSR to                                                                                       after Q2
 SSPBUF
 2010 Microchip Technology Inc.                                                                   DS41303G-page 199
PIC18F2XK20/4XK20
FIGURE 17-5:        SPI MODE WAVEFORM (SLAVE MODE WITH CKE = 0)
 SS
 Optional
 SCK
 (CKP = 0
 CKE = 0)
 SCK
 (CKP = 1
 CKE = 0)
 Write to
 SSPBUF
 SDO                      bit 7   bit 6   bit 5   bit 4   bit 3   bit 2   bit 1             bit 0
 SDI
 (SMP = 0)               bit 7                                                    bit 0
 Input
 Sample
 (SMP = 0)
 SSPIF
 Interrupt
 Flag
                                                                                             Next Q4 Cycle
 SSPSR to                                                                                    after Q2
 SSPBUF
FIGURE 17-6:        SPI MODE WAVEFORM (SLAVE MODE WITH CKE = 1)
  SS
  Not Optional
  SCK
  (CKP = 0
  CKE = 1)
  SCK
  (CKP = 1
  CKE = 1)
  Write to
  SSPBUF
  SDO                    bit 7    bit 6   bit 5   bit 4   bit 3   bit 2   bit 1     bit 0
  SDI
  (SMP = 0)              bit 7                                                    bit 0
  Input
  Sample
  (SMP = 0)
  SSPIF
  Interrupt
  Flag
                                                                                              Next Q4 Cycle
                                                                                              after Q2
  SSPSR to
  SSPBUF
DS41303G-page 200                                                          2010 Microchip Technology Inc.
                                                                PIC18F2XK20/4XK20
17.3.8      OPERATION IN POWER-MANAGED                         Transmit/Receive Shift reg ister. Wh en all 8 bits h ave
            MODES                                              been received, the M SSP interrupt flag bit will be set
                                                               and if enabled, will wake the device.
In SPI Master mode, module clocks may be operating
at a different speed than when in full power mode; in          17.3.9      EFFECTS OF A RESET
the case of the Sleep mode, all clocks are halted.
                                                               A Reset disables the MSSP module and terminates the
In all Idle modes, a clock is provided to the peripherals.     current transfer.
That clock could be from the primary clock source, the
secondary c lock (Timer1 os cillator at 32 .768 k Hz) or       17.3.10     BUS MODE COMPATIBILITY
the IN TOSC so urce. S ee Section 3.0 “Power-Man-
                                                               Table 17-1 s hows the com patibility between th e
aged Modes” for additional information.
                                                               standard SPI modes and th e st ates of the CKP an d
In most c ases, t he s peed that t he m aster clocks S PI      CKE control bits.
data is n ot important; ho wever, this should b e
evaluated for each system.                                     TABLE 17-1:         SPI BUS MODES
When MSSP interrupts are enabled, after the master                                             Control Bits State
completes sending data, an MSSP interrupt will wake              Standard SPI Mode
the controller:                                                     Terminology                CKP           CKE
• from Sleep, in slave mode                                              0, 0                   0             1
• from Idle, in slave or master mode                                     0, 1                   0             0
If an exit from Sleep or Idle mode is not desired, MSSP                  1, 0                   1             1
interrupts should be disabled.                                           1, 1                   1             0
In SPI master mode, when the Sleep mode is selected,
                                                               There is also an SMP bit which controls when the data
all m odule c locks are ha lted and the tra nsmis-
                                                               is sampled.
sion/reception will remain in that state until the devices
wakes. After the device returns to Run mode, the mod-
ule will resume transmitting and receiving data.
In SPI Slave m ode, the SPI T ransmit/Receive Shi ft
register operates as ynchronously to the de vice. Thi s
allows the device to be placed in any power-managed
mode an d da ta to be s        hifted in to th e SPI
TABLE 17-2:        REGISTERS ASSOCIATED WITH SPI OPERATION
                                                                                                              Reset
   Name          Bit 7        Bit 6        Bit 5       Bit 4    Bit 3      Bit 2       Bit 1         Bit 0    Values
                                                                                                             on page
INTCON         GIE/GIEH PEIE/GIEL TMR0IE              INT0IE    RBIE     TMR0IF       INT0IF         RBIF         59
PIR1           PSPIF   (1)
                              ADIF        RCIF         TXIF    SSPIF     CCP1IF      TMR2IF         TMR1IF        62
PIE1           PSPIE(1)       ADIE        RCIE         TXIE    SSPIE     CCP1IE      TMR2IE         TMR1IE        62
IPR1           PSPIP(1)       ADIP        RCIP         TXIP    SSPIP     CCP1IP      TMR2IP         TMR1IP        62
TRISA         TRISA7(2) TRISA6(2)        TRISA5      TRISA4    TRISA3    TRISA2      TRISA1         TRISA0        62
TRISC           TRISC7       TRISC6      TRISC5      TRISC4    TRISC3    TRISC2      TRISC1         TRISC0        62
SSPBUF        SSP Receive Buffer/Transmit Register                                                                60
SSPCON1         WCOL         SSPOV       SSPEN         CKP     SSPM3     SSPM2       SSPM1          SSPM0         60
SSPSTAT          SMP          CKE          D/A           P       S         R/W          UA            BF          60
Legend: Shaded cells are not used by the MSSP in SPI mode.
Note 1: These bits are unimplemented in 28-pin devices; always maintain these bits clear.
     2: PORTA<7:6> and their direction bits are individually configured as port pins based on various primary
        oscillator modes. When disabled, these bits read as ‘0’.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 201
PIC18F2XK20/4XK20
17.4     I2C Mode                                                17.4.1      REGISTERS
The M SSP m odule in I 2C m ode ful ly im plements al l          The M SSP m odule has        seven reg isters for I2C
master a nd s lave fu nctions (i ncluding general cal l          operation. These are:
support) and provides interrupts on Start and Stop bits          • MSSP Control Register 1 (SSPCON1)
in h ardware t o d etermine a fre e b us (m ulti-master          • MSSP Control Register 2 (SSPCON2)
function). The MSSP module implements the standard
                                                                 • MSSP STATUS register (SSPSTAT)
mode s pecifications as w ell a s 7-bit an d 1 0-bit
addressing.                                                      • Serial Receive/Transmit Buffer Register
                                                                   (SSPBUF)
Two pins are used for data transfer:
                                                                 • MSSP Shift Register (SSPSR) – Not directly
• Serial clock (SCL) – SCK/SCL                                     accessible
• Serial data (SDA) – SDI/SDA                                    • MSSP Address Register (SSPADD)
The user must configure these pins as inputs with the            • MSSP Address Mask (SSPMSK)
corresponding TRIS bits.                                         SSPCON1, SSPCON2 and SSPS TAT ar e the control
                                                                 and S TATUS registers in I2C mod e op eration. The
FIGURE 17-7:            MSSP BLOCK DIAGRAM                       SSPCON1 an d S SPCON2 re gisters a re re adable an d
                        (I2C™ MODE)                              writable. The lower 6 bits of the SSPSTAT are read-only.
                                                                 The upper two bits of the SSPSTAT are read/write.
                                                 Internal
                                                 Data Bus
                                                                 SSPSR is the shift register used for shifting data in or
                                                                 out. SSPBUF is the buffer register to which data bytes
                 Read                         Write
                                                                 are written to or read from.
                            SSPBUF Reg
                                                                 When the SSP is configured in Master mode, the lower
    SCK/SCL                                                      seven bits of SSPADD act as the Baud Rate Generator
                    Shift
                                                                 reload value. When the SSP is configured for I2C slave
                    Clock                                        mode t he SSPADD r egister h olds the sl ave device
                                                                 address. The SSP can be configured t o resp ond to a
                            SSPSR Reg
                                                                 range of a ddresses by qu alifying s elected bits of the
   SDI/SDA           MSb                   LSb
                                                                 address register with the SSPMSK register.
                            SSPMSK Reg                           In receive operations, SSPSR and SSPBUF together
                                                                 create a double-buffered re ceiver. When SSPSR
                            Match Detect          Addr Match     receives a complete byte, it is transferred to SSPBUF
                                                                 and the SSPIF interrupt is set.
                            SSPADD Reg                           During   transmission, the       SSPBUF is        n ot
                                                                 double-buffered. A wri te to SSPBUF wil l write to both
                               Start and           Set, Reset    SSPBUF and SSPSR.
                            Stop bit Detect         S, P bits
                                                 (SSPSTAT Reg)
DS41303G-page 202                                                                         2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
REGISTER 17-3:         SSPADD: MSSP ADDRESS AND BAUD RATE REGISTER (I2C MODE)
    R/W-0 R/W            -0            R/W-0          R/W-0        R/W-0          R/W-0           R/W-0           R/W-0
    ADD7            ADD6               ADD5           ADD4         ADD3               ADD2        ADD1            ADD0
bit 7                                                                                                                  bit 0
Legend:
R = Readable bit                   W = Writable bit            U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set            ‘0’ = Bit is cleared            x = Bit is unknown
Master mode
bit 7-0          ADD<7:0>: Baud Rate Clock Divider bits
                 SCL pin clock period = ((ADD<7:0> + 1) *4)/FOSC
10-Bit Slave mode: Most significant address byte
bit 7-3          Not used: Unused for most significant address byte. Bit state of this register is a don’t care. Bit pattern
                 sent by master is fixed by I2C specification and must be equal to ‘11110’. However, those bits are
                 compared by hardware and are not affected by the value in this register.
bit 2-1          ADD<9:8>: Two most significant bits of 10-bit address
bit 0            Not used: Unused in this mode. Bit state is a “don’t care”.
10-Bit Slave mode: Least significant address byte
bit 7-0          ADD<7:0>: Eight least significant bits of 10-bit address
7-Bit Slave mode
bit 7-1          ADD<7:1>: 7-bit address
bit 0            Not used: Unused in this mode. Bit state is a “don’t care”.
 2010 Microchip Technology Inc.                                                                         DS41303G-page 203
PIC18F2XK20/4XK20
REGISTER 17-4:           SSPSTAT: MSSP STATUS REGISTER (I2C MODE)
    R/W-0 R/W             -0           R-0            R-0            R-0               R-0              R-0             R-0
        SMP            CKE             D/A            P(1)
                                                                     S(1)
                                                                                  R/W   (2, 3)
                                                                                                        UA              BF
bit 7                                                                                                                         bit 0
Legend:
R = Readable bit                  W = Writable bit              U = Unimplemented bit, read as ‘0’
-n = Value at POR                 ‘1’ = Bit is set              ‘0’ = Bit is cleared               x = Bit is unknown
bit 7             SMP: Slew Rate Control bit
                  In 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: SMBus Select bit
                  In Master or Slave mode:
                  1 = Enable SMBus specific inputs
                  0 = Disable SMBus specific inputs
bit 5             D/A: Data/Address bit
                  In Master mode:
                  Reserved.
                  In Slave mode:
                  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(1)
                  1 = Indicates that a Stop bit has been detected last
                  0 = Stop bit was not detected last
bit 3             S: Start bit(1)
                  1 = Indicates that a Start bit has been detected last
                  0 = Start bit was not detected last
bit 2             R/W: Read/Write Information bit (I2C mode only)(2, 3)
                  In Slave mode:
                  1 = Read
                  0 = Write
                  In Master mode:
                  1 = Transmit is in progress
                  0 = Transmit is not in progress
bit 1             UA: Update Address bit (10-bit Slave 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
                  In Transmit mode:
                  1 = SSPBUF is full
                  0 = SSPBUF is empty
                  In Receive mode:
                  1 = SSPBUF is full (does not include the ACK and Stop bits)
                  0 = SSPBUF is empty (does not include the ACK and Stop bits)
Note 1:       This bit is cleared on Reset and when SSPEN is cleared.
     2:       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.
         3:   ORing this bit with SEN, RSEN, PEN, RCEN or ACKEN will indicate if the MSSP is in Active mode.
DS41303G-page 204                                                                                 2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
REGISTER 17-5:         SSPCON1: MSSP CONTROL 1 REGISTER (I2C MODE)
    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
Legend:
R = Readable bit                   W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set           ‘0’ = Bit is cleared         x = Bit is unknown
bit 7            WCOL: Write Collision Detect bit
                 In Master Transmit mode:
                 1 = A write to the SSPBUF register was attempted while the I2C conditions were not valid for a trans-
                      mission to be started (must be cleared by software)
                 0 = No collision
                 In Slave Transmit mode:
                 1 = The SSPBUF register is written while it is still transmitting the previous word (must be cleared by
                      software)
                 0 = No collision
                 In Receive mode (Master or Slave modes):
                 This is a “don’t care” bit.
bit 6            SSPOV: Receive Overflow Indicator bit
                 In Receive mode:
                 1 = A byte is received while the SSPBUF register is still holding the previous byte (must be cleared
                      by software)
                 0 = No overflow
                 In Transmit mode:
                 This is a “don’t care” bit in Transmit mode.
bit 5            SSPEN: Synchronous Serial Port Enable bit
                 1 = Enab les the ser ial port and co nfigures the SDA and SC L pins as the serial port pi ns. When
                     enabled, the SDA and SCL pins must be configured as inputs.
                 0 = Disables serial port and configures these pins as I/O port pins
bit 4            CKP: SCK Release Control bit
                 In Slave mode:
                 1 = Release clock
                 0 = Holds clock low (clock stretch), used to ensure data setup time
                 In Master mode:
                 Unused in this mode.
bit 3-0          SSPM<3:0>: Synchronous Serial Port Mode Select bits
                 1111 = I2C Slave mode, 10-bit address with Start and Stop bit interrupts enabled
                 1110 = I2C Slave mode, 7-bit address with Start and Stop bit interrupts enabled
                 1011 = I2C Firmware Controlled Master mode (Slave Idle)
                 1000 = I2C Master mode, clock = FOSC/(4 * (SSPADD + 1))
                 0111 = I2C Slave mode, 10-bit address
                 0110 = I2C Slave mode, 7-bit address
                 Bit combinations not specifically listed here are either reserved or implemented in SPI mode only.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 205
PIC18F2XK20/4XK20
REGISTER 17-6:         SSPCON2: MSSP CONTROL REGISTER (I2C MODE)
    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     (2)
                                                   ACKEN(1)
                                                                RCEN   (1)
                                                                                 PEN (1)
                                                                                               RSEN   (1)
                                                                                                               SEN(1)
bit 7                                                                                                                bit 0
Legend:
R = Readable bit                W = Writable bit              U = Unimplemented bit, read as ‘0’
-n = Value at POR               ‘1’ = Bit is set              ‘0’ = Bit is cleared           x = Bit is unknown
bit 7            GCEN: General Call Enable bit (Slave mode only)
                 1 = Generate interrupt when a general call address (0000h) is received in the SSPSR
                 0 = General call address disabled
bit 6            ACKSTAT: Acknowledge Status bit (Master Transmit mode only)
                 1 = Acknowledge was not received from slave
                 0 = Acknowledge was received from slave
bit 5            ACKDT: Acknowledge Data bit (Master Receive mode only)(2)
                 1 = Not Acknowledge
                 0 = Acknowledge
bit 4            ACKEN: Acknowledge Sequence Enable bit (Master Receive mode only)(1)
                 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 (Master mode only)(1)
                 1 = Enables Receive mode for I2C
                 0 = Receive Idle
bit 2            PEN: Stop Condition Enable bit (Master mode only)(1)
                 1 = Initiate Stop condition on SDA and SCL pins. Automatically cleared by hardware.
                 0 = Stop condition Idle
bit 1            RSEN: Repeated Start Condition Enable bit (Master mode only)(1)
                 1 = Initiate Repeated Start condition on SDA and SCL pins. Automatically cleared by hardware.
                 0 = Repeated Start condition Idle
bit 0            SEN: Start Condition Enable/Stretch Enable bit(1)
                 In Master mode:
                 1 = Initiate Start condition on SDA and SCL pins. Automatically cleared by hardware.
                 0 = Start condition Idle
                 In Slave mode:
                 1 = Clock stretching is enabled for both slave transmit and slave receive (stretch enabled)
                 0 = Clock stretching is disabled for slave received. Slave transmit clock stretching remains enabled.
Note 1:      For bits ACKEN, RCEN, PEN, RSEN, SEN: If the I2C module is not in the Idle mode, these bits may not
             be set (no spooling) and the SSPBUF may not be written (or writes to the SSPBUF are disabled).
        2:   Value that will be transmitted when the user initiates an Acknowledge sequence at the end of a receive.
DS41303G-page 206                                                                           2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
17.4.2      OPERATION                                         17.4.3.1       Addressing
The M SSP m odule fun ctions are ena bled by s etting         Once the MSSP module has been enabled, it waits for
SSPEN bit of the SSPCON1 register.                            a Start condition to occur. Following the Start condition,
The SSPCON1 re gister all ows c ontrol of t he I 2C           the 8 b its a re shifted i nto th e SSPSR re gister. Al l
operation. Four mode selection bits of the SSPCON1            incoming bits are s ampled with the rising edge of th e
register al low one of the fo llowing I 2C m odes to b e      clock (SCL) line. The value of register SSPSR<7:1> is
selected:                                                     compared t o t he v alue o f t he SSPADD r egister. T he
                                                              address is compared on the falling edge of the eighth
• I2C Master mode, clock = (FOSC/(4 x                         clock (SCL) pulse. If the addresses match and the BF
  (SSPADD + 1))                                               and SSPOV bits are clear, the following events occur:
• I 2C Slave mode (7-bit address)
                                                              1.   The SSPSR reg ister v alue is lo aded in to th e
• I 2C Slave mode (10-bit address)                                 SSPBUF register.
• I 2C Slave mode (7-bit address) with Start and              2.   The Buffer Full bit, BF, is set.
  Stop bit interrupts enabled
                                                              3.   An ACK pulse is generated.
• I 2C Slave mode (10-bit address) with Start and
                                                              4.   MSSP Interrupt Flag bit, SSPIF of the PIR1 reg-
  Stop bit interrupts enabled
                                                                   ister, is set (interrupt is generated, if enabled) on
• I 2C Firmware Controlled Master mode, slave is                   the falling edge of the ninth SCL pulse.
  Idle
                                                              In 10-bit Address mode, tw o address bytes need to be
Selection of a ny I 2C m ode with the SSPEN bi t s et,        received by the sla ve. The fiv e Mos t S ignificant bits
forces the SCL a nd SD A p ins to be op en-drain,             (MSbs) of the first address byte specify if this is a 10-bit
provided these pin s are pro grammed to inp uts by            address. Bit R/W of the SSPSTAT register must specify
setting the app ropriate TR IS bits. T o e nsure proper       a write s o the slave devic e w ill rec eive the sec ond
operation of t he m odule, pul l-up res istors mu st be       address byte. For a 10 -bit address, the firs t byte would
provided externally to the SCL and SDA pins.                  equal ‘11110 A9 A8 0’, where ‘A9’ and ‘A8’ are the two
                                                              MSbs of the address. The sequence of events for 10-bit
17.4.3      SLAVE MODE                                        address is as follow s, w ith steps 7 thr ough 9 for the
In Slave mode, the SCL and SDA pins must be config-           slave-transmitter:
ured as inputs. The M SSP m odule will ov erride the          1.   Receive first (high) byte of address (bits SSPIF,
input s tate w ith th e ou tput da ta when req uired               BF and UA (of the SSPSTAT register are set).
(slave-transmitter).
                                                              2.   Update the SSPADD register with second (low)
The I 2C Slave mode hardware will always generate an               byte of address (clears bit UA and releases the
interrupt on a n address match. T hrough th e m ode                SCL line).
select bits, th e us er ca n al so cho ose to i nterrupt on   3.   Read the SSPBUF register (clears bit BF) and
Start and Stop bits                                                clear flag bit, SSPIF.
When an address is matched, or the data transfer after        4.   Receive s econd ( low) byte of a ddress (bits
an a ddress m atch i s received, th e h ardware                    SSPIF, BF and UA are set). If th e address
automatically w ill g enerate the Ac knowledge (AC K)              matches then the SCL is held until the next step.
pulse and load the SSPBUF register with the received               Otherwise the SCL line is not held.
value currently in the SSPSR register.                        5.   Update the SSPADD register with the first (high)
Any combination of the following conditions will cause             byte of a ddress. (T his w ill c lear bi t U A an d
the MSSP module not to give this ACK pulse:                        release a held SCL line.)
• The Buffer Full bit, BF bit of the SSPSTAT regis-           6.   Read the SSPBUF register (clears bit BF) and
  ter, is set before the transfer is received.                     clear flag bit, SSPIF.
• The overflow bit, SSPOV bit of the SSPCON1                  7.   Receive Repeated Start condition.
  register, is set before the transfer is received.           8.   Receive first (high) byte of address (bits SSPIF
In this c ase, the SSPSR reg ister v alue is not lo aded           and BF are set).
into the SSPBUF, but bit SSPIF of the PIR1 register is        9.   Read the SSPBUF register (clears bit BF) and
set. T he BF b it is c leared b y rea ding th e SSPBUF             clear flag bit, SSPIF.
register, while bit SSPOV is cleared through software.
The SCL clock input must have a minimum high and
low for proper operation. The high and low times of the
I2C s pecification, as w ell a s t he requirement o f th e
MSSP module, are shown in timing parameter 100 and
parameter 101 (See Table 26-19).
 2010 Microchip Technology Inc.                                                                     DS41303G-page 207
PIC18F2XK20/4XK20
17.4.3.2     Reception                                     17.4.3.3      Transmission
When the R/W bit of the address byte is clear and an       When the R/W bit of the inc oming address byte is set
address ma tch oc curs, t he R /W bit of the SSPSTAT       and a n a ddress m atch occurs, t he R/W bi t of t he
register is cleared. The received address is loaded into   SSPSTAT re gister is s et. The rec eived a ddress i s
the SS PBUF re gister and th e SD A line i s held low      loaded into the SSPBUF regi ster. The ACK pu lse will
(ACK).                                                     be sent on the ninth bit and pin SCK/SCL is held low
When the address byte overflow condition exists, then      regardless of SEN        (see Section 17.4.4 “Clock
the no Acknowledge (ACK) pulse is given. An overflow       Stretching” for m ore detail). By s tretching the c lock,
condition is defined as either bit BF bit of the SSPSTAT   the master will be unable to assert another clock pulse
register is s et, or b it S SPOV b it o f th e SSPCON1     until the slave is done preparing the transmit data. The
register is set.                                           transmit data must be loaded into the SSPBUF register
                                                           which al so lo ads th e SSPSR register. T hen pi n
An MSSP interrupt is generated for each data transfer      SCK/SCL should be enabled by setting the CKP bit of
byte. Fl ag bit, SSPIF of the PIR1 register, m ust b e     the SSPCON1 register. The eight data bits are shifted
cleared by software. The SSPSTAT register is used to       out on the falling edge of the SCL input. This ensures
determine the status of the byte.                          that the SDA signal is v alid during the SCL high time
When th e SEN b it of th e SSPCON2 re gister i s set,      (Figure 17-9).
SCK/SCL will be he ld lo w ( clock stretch) following      The ACK pulse from the master-receiver is latched on
each da ta t ransfer. Th e c lock m ust be re leased by    the rising edge of the ninth SCL input pulse. If the SDA
setting th e C KP bit of t he SSPCON1 register. See        line is hi gh (no t AC K), then th e d ata tran sfer i s
Section 17.4.4 “Clock Stretching” for more detail.         complete. In this case, when the ACK is latched by the
                                                           slave, the s lave l ogic is res et (re sets SSPST AT
                                                           register) and the slave monitors for another occurrence
                                                           of the Start bit. If the SDA line was low (ACK), the next
                                                           transmit data must be loaded into the SSPBUF register.
                                                           Again, p in SCK/SCL must be en abled by s etting b it
                                                           CKP.
                                                           An MSSP interrupt is generated for each data transfer
                                                           byte. The SSPIF bit must be cleared by software and
                                                           the SSPSTAT register is used to determine the status
                                                           of the byte. The SSPIF bit is set on the falling edge of
                                                           the ninth clock pulse.
DS41303G-page 208                                                                   2010 Microchip Technology Inc.
                                                                                                                                                                                                                                             FIGURE 17-8:
 2010 Microchip Technology Inc.
                                                                 Receiving Address              R/W = 0                   Receiving Data                  ACK                 Receiving Data                     ACK
                                   SDA               A7   A6    A5     A4    A3      A2    A1         ACK     D7   D6    D5     D4    D3   D2   D1   D0         D7   D6   D5      D4     D3    D2   D1   D0
                                   SCL               1    2     3      4      5      6     7      8       9   1    2     3      4     5    6    7    8    9     1    2    3        4     5     6    7    8        9
                                           S                                                                                                                                                                                   P
                                   SSPIF
                                                                                                                                                                                                                           Bus master
                                   (PIR1<3>)                                                                                                                                                                               terminates
                                                                                                                                                                                                                           transfer
                                   BF (SSPSTAT<0>)
                                                                                                                    Cleared by software
                                                                                                                    SSPBUF is read
                                   SSPOV (SSPCON1<6>)
                                                                                                                                                                                                              SSPOV is set
                                                                                                                                                                                                              because SSPBUF is
                                                                                                                                                                                                              still full. ACK is not sent.
                                   CKP          (CKP does not reset to ‘0’ when SEN = 0)
                                                                                                                                                                                                                                             I2C™ SLAVE MODE TIMING WITH SEN = 0 (RECEPTION, 7-BIT ADDRESS)
DS41303G-page 209
                                                                                                                                                                                                                                                                                                              PIC18F2XK20/4XK20
                                                                                                                                                                                                                                                   FIGURE 17-9:
DS41303G-page 210
                                                                Receiving Address        R/W = 0                                           Transmitting Data                                                Transmitting Data
                                                                                                                                                                           ACK                                                        ACK
                                   SDA               A7   A6   A5   A4   A3    A2   A1             ACK                D7       D6    D5    D4    D3    D2      D1    D0             D7    D6     D5    D4    D3      D2   D1     D0
                                   SCL
                                                     1    2    3    4     5    6    7     8        9                   1        2     3     4     5    6       7      8    9        1      2      3     4     5      6    7      8    9
                                          S
                                                     Data in                                             SCL held low                                                                                                                          P
                                                     sampled                                             while CPU
                                                                                                         responds to SSPIF
                                   SSPIF (PIR1<3>)
                                                                                                                                                                                                                                                                                                          PIC18F2XK20/4XK20
                                   BF (SSPSTAT<0>)
                                                                                                                                 Cleared by software                                           Cleared by software
                                                                                                                                                                   From SSPIF ISR                                             From SSPIF ISR
                                                                                                                             SSPBUF is written by software                                SSPBUF is written by software
                                   CKP
                                                                                                                                                                                         CKP is set by software
                                                                                                                                                                                                                                                   I2C™ SLAVE MODE TIMING (TRANSMISSION, 7-BIT ADDRESS)
                                                                                                                             CKP is set by software
 2010 Microchip Technology Inc.
                                                                                                                                                                                                                                                                                   FIGURE 17-10:
                                                                                                  Clock is held low until                         Clock is held low until
                                                                                                  update of SSPADD has                            update of SSPADD has
                                                                                                  taken place                                     taken place
                                                Receive First Byte of Address                               Receive Second Byte of Address                                  Receive Data Byte                       Receive Data Byte
                                                                                    R/W = 0                                                                                                                                                     ACK
                                    SDA         1     1   1    1    0     A9    A8         ACK         A7       A6   A5   A4    A3   A2   A1    A0 ACK         D7     D6 D5 D4       D3 D2      D1 D0 ACK D7 D6 D5 D4          D3 D2    D1 D0
 2010 Microchip Technology Inc.
                                    SCL         1     2   3    4    5     6     7      8      9             1    2    3     4    5    6     7     8   9         1     2     3    4   5    6     7   8   9   1   2     3    4   5    6   7   8   9
                                            S                                                                                                                                                                                                               P
                                                                                                                                                                                                                                                                  Bus master
                                                                                                                                                                                                                                                                  terminates
                                    SSPIF                                                                                                                                                                                                                         transfer
                                    (PIR1<3>)
                                                                                                                      Cleared by software                                    Cleared by software                      Cleared by software
                                                    Cleared by software
                                    BF (SSPSTAT<0>)
                                                           SSPBUF is written with                           Dummy read of SSPBUF
                                                           contents of SSPSR                                to clear BF flag
                                   SSPOV (SSPCON1<6>)
                                                                                                                                                                                                                                                    SSPOV is set
                                                                                                                                                                                                                                                    because SSPBUF is
                                                                                                                                                                                                                                                    still full. ACK is not sent.
                                    UA (SSPSTAT<1>)
                                                          UA is set indicating that                             Cleared by hardware                                 Cleared by hardware when
                                                          the SSPADD needs to be                                when SSPADD is updated                              SSPADD is updated with high
                                                          updated                                               with low byte of address                            byte of address
                                                                                                                      UA is set indicating that
                                                                                                                      SSPADD needs to be
                                                                                                                      updated
                                   CKP          (CKP does not reset to ‘0’ when SEN = 0)
                                                                                                                                                                                                                                                                                   I2C™ SLAVE MODE TIMING WITH SEN = 0 (RECEPTION, 10-BIT ADDRESS)
DS41303G-page 211
                                                                                                                                                                                                                                                                                                                                                     PIC18F2XK20/4XK20
                                                                                                                                                                                                                                                                               FIGURE 17-11:
DS41303G-page 212
                                                                                                                                                                                                                                                                  Bus master
                                                                                                                                                                                                                                                                  terminates
                                                                                          Clock is held low until                              Clock is held low until                                                                                            transfer
                                                                                          update of SSPADD has                                 update of SSPADD has                                        Clock is held low until
                                                                                          taken place                                          taken place                                                 CKP is set to ‘1’
                                                                               R/W = 0
                                               Receive First Byte of Address                        Receive Second Byte of Address                               Receive First Byte of Address    R/W=1                   Transmitting Data Byte            ACK
                                   SDA         1   1    1   1    0   A9 A8          ACK        A7       A6 A5 A4 A3 A2 A1                 A0   ACK               1       1   1   1   0   A9 A8         ACK         D7 D6 D5          D4 D3 D2 D1 D0
                                   SCL         1   2    3   4    5    6    7    8    9              1     2    3    4    5     6   7       8   9                 1       2   3   4   5   6    7    8   9           1      2    3     4   5      6   7   8    9
                                           S                                                                                                              Sr                                                                                                         P
                                                                                                                                                                                                                                                                                                                                       PIC18F2XK20/4XK20
                                   SSPIF
                                   (PIR1<3>)
                                                                                                        Cleared by software                                    Cleared by software                                            Cleared by software
                                   BF (SSPSTAT<0>)
                                                       SSPBUF is written with                 Dummy read of SSPBUF                                     Dummy read of SSPBUF
                                                       contents of SSPSR                      to clear BF flag                                                                               BF flag is clear      Write of SSPBUF                      Completion of
                                                                                                                                                       to clear BF flag                                            initiates transmit                   data transmission
                                                                                                                                                                                             at the end of the
                                   UA (SSPSTAT<1>)                                                                                                                                           third address sequence                                     clears BF flag
                                                       UA is set indicating that                        Cleared by hardware when                            Cleared by hardware when
                                                       the SSPADD needs to be                           SSPADD is updated with low                          SSPADD is updated with high
                                                       updated                                          byte of address                                     byte of address.
                                                                                                              UA is set indicating that
                                                                                                              SSPADD needs to be
                                                                                                              updated
                                   CKP (SSPCON1<4>)
                                                                                                                                                                                                                       CKP is set by software
                                                                                                                                                                                                              CKP is automatically cleared by hardware, holding SCL low
                                                                                                                                                                                                                                                                               I2C™ SLAVE MODE TIMING (TRANSMISSION, 10-BIT ADDRESS)
 2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
17.4.3.4      SSP Mask Register                                   This register m ust be initiated pri or to se tting
                                                        2         SSPM<3:0> bits to select the I2C Slave mode (7-bit or
An SSP Mask (SS PMSK) register is av ailable in I C
                                                                  10-bit address).
Slave mo de a s a m ask fo r the value h eld in th e
SSPSR reg ister duri ng an         address comparison             The SSP Mask register is active during:
operation. A zero (‘0’) bit in the SSPMSK register has            • 7-bit Address mode: address compare of A<7:1>.
the e ffect of making t he c orresponding b it i n th e
                                                                  • 10-bit Address mode: address compare of A<7:0>
SSPSR register a “don’t care”.
                                                                    only. The SSP mask has no effect during the
This register is res et to al l ‘ 1’s up on an y R eset             reception of the first (high) byte of the address.
condition a nd, therefore, has no ef fect on st andard
SSP operation until written with a mask value.
REGISTER 17-7:         SSPMSK: SSP MASK 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
     MSK7           MSK6               MSK5           MSK4       MSK3                MSK2       MSK1         MSK0(1)
bit 7                                                                                                              bit 0
Legend:
R = Readable bit                   W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set           ‘0’ = Bit is cleared           x = Bit is unknown
bit 7-1          MSK<7:1>: Mask bits
                 1 = The received address bit n is compared to SSPADD<n> to detect I2C address match
                 0 = The received address bit n is not used to detect I2C address match
bit 0            MSK<0>: Mask bit for I2C Slave mode, 10-bit Address(1)
                 I2C Slave mode, 10-bit Address (SSPM<3:0> = 0111):
                 1 = The received address bit 0 is compared to SSPADD<0> to detect I2C address match
                 0 = The received address bit 0 is not used to detect I2C address match
   Note 1: The MSK0 bit is used only in 10-bit slave mode. In all other modes, this bit has no effect.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 213
PIC18F2XK20/4XK20
17.4.4       CLOCK STRETCHING                                      17.4.4.3      Clock Stretching for 7-bit Slave
Both 7 -bit an d 1 0-bit Sl ave m odes implement                                 Transmit Mode
automatic clock stretching during a transmit sequence.             7-bit Slave T ransmit m ode i mplements clock stretch-
The SEN bi t o f th e SSP CON2 register a llows clock              ing by clearing the CKP bit after the falling edge of the
stretching to be enabled during receives. Setting SEN              ninth clock if the BF bit is clear. This occurs regardless
will cause the SC L pin to be hel d l ow a t th e e nd of          of the state of the SEN bit.
each data receive sequence.                                        The user’s ISR must set the CKP bit before transmis-
                                                                   sion is all owed to continue. By hol ding the SC L lin e
17.4.4.1       Clock Stretching for 7-bit Slave                    low, the user has time to service the ISR and load the
               Receive Mode (SEN = 1)                              contents of the SSPBUF before the master device can
In 7-bit Slave Receive mode, on the falling edge of the            initiate ano ther data tran sfer se quence (se e
ninth clock at the end of the ACK sequence if the BF               Figure 17-9).
bit is s et, th e CKP bi t of th e SSPCON1 reg ister i s              Note 1: If the user loads the contents of SSPBUF,
automatically cl eared, fo rcing th e SC L out put to be                      setting the BF bit before the falling edge of
held low. The CKP being cleared to ‘ 0’ will assert the                       the ni nth c lock, the C KP bi t w ill not be
SCL l ine low. T he C KP bi t must be set i n t he us er’s                    cleared and clock stretching will not occur.
ISR before reception is allowed to continue. By holding
the SCL line low, the user has time to service the ISR                      2: The C KP bit can b e s et by software
and read t he contents of th e SSP BUF b efore th e                            regardless of the state of the BF bit.
master dev ice can ini tiate another dat a transfer
sequence. Th is w ill p revent buffer ov erruns fro m              17.4.4.4      Clock Stretching for 10-bit Slave
occurring (see Figure 17-13).                                                    Transmit Mode
   Note 1: If the u ser reads the co ntents of the                 In 10-bit Slave Transmit mode, clock stretching is con-
           SSPBUF b efore the f alling e dge of the                trolled during the first tw o address sequences by the
           ninth cl ock, t hus cl earing th e BF bi t, the         state of the UA bit, just as it is in 10-bit Slave Receive
           CKP bi t w ill not be cleared and clock                 mode. The first two addresses are followed by a third
           stretching will not occur.                              address s equence w hich c ontains the high-order bits
                                                                   of the 10-bit address and the R/W bit set to ‘ 1’. A fter
          2: The C KP bit ca n b e s et by so ftware
                                                                   the third address sequence is performed, the UA bit is
             regardless of the state of the BF bit. The
                                                                   not se t, the mo dule is now c onfigured in T ransmit
             user should be careful to clear the BF bit
                                                                   mode and clock stretching is controlled by the BF flag
             in th e ISR be fore th e n ext re ceive
                                                                   as in 7-bit Slave Transmit mode (see Figure 17-11).
             sequence in order to prevent an overflow
             condition.
17.4.4.2       Clock Stretching for 10-bit Slave
               Receive Mode (SEN = 1)
In 10 -bit Sl ave R eceive m ode du ring th e address
sequence, cl ock s tretching a utomatically t akes p lace
but CKP is not cleared. During this time, if the UA bit is
set a fter th e ni nth clock, cl ock s tretching i s in itiated.
The UA bit is set after receiving the upper byte of the
10-bit address and following the receive of the second
byte of the 10-bit address with the R/W bit cleared to
‘0’. The release of the clock line occurs upon updating
SSPADD. C lock s tretching w ill o ccur o n ea ch d ata
receive sequence as described in 7-bit mode.
  Note:      If the user polls the UA bit and clears it by
             updating the SSPADD register before the
             falling edge of the ninth clock occurs and if
             the user hasn’t cleared the BF bit by read-
             ing the SSPBUF register before that time,
             then the CKP bit will still NOT be asserted
             low. C lock s tretching o n th e ba sis o f the
             state of the BF bi t onl y oc curs du ring a
             data sequence, not an address sequence.
DS41303G-page 214                                                                            2010 Microchip Technology Inc.
                                                                 PIC18F2XK20/4XK20
17.4.4.5      Clock Synchronization and
              the CKP bit
When the CKP bit is cleared, the SCL output is forced
to ‘0’. However, clearing the CKP bit will not assert the
SCL output l ow un til t he S CL output i s already s am-
pled lo w. Th erefore, the C KP b it w ill no t as sert th e
SCL line un til an ex ternal I 2C ma ster de vice h as
already as serted th e SC L li ne. Th e SC L ou tput w ill
remain l ow un til the C KP bit is set and all oth er
devices o n the I 2C b us have de asserted SC L. Thi s
ensures that a write to the CKP bit will not violate the
minimum high ti me req uirement for SC L (se e
Figure 17-12).
FIGURE 17-12:            CLOCK SYNCHRONIZATION TIMING
              Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
    SDA                               DX                                               DX – 1
    SCL
                                                 Master device
    CKP                                          asserts clock
                                                                 Master device
                                                                 deasserts clock
   WR
   SSPCON1
 2010 Microchip Technology Inc.                                                    DS41303G-page 215
                                                                                                                                                                                                                                                                  FIGURE 17-13:
DS41303G-page 216
                                                                                                           Clock is not held low
                                                                                                           because buffer full bit is
                                                                                                           clear prior to falling edge                              Clock is held low until                                               Clock is not held low
                                                                                                           of 9th clock                                             CKP is set to ‘1’                                                     because ACK = 1
                                                               Receiving Address            R/W = 0                             Receiving Data                      ACK                           Receiving Data                     ACK
                                   SDA           A7      A6   A5   A4    A3    A2      A1         ACK          D7     D6      D5      D4     D3   D2   D1   D0                D7       D6     D5      D4    D3     D2   D1   D0
                                   SCL               1   2    3     4     5        6   7      8       9         1      2       3         4   5    6    7     8      9         1         2         3    4     5     6    7    8        9
                                           S                                                                                                                                                                                                       P
                                                                                                                                                                                                                                                                                                                                   PIC18F2XK20/4XK20
                                   SSPIF
                                                                                                                                                                                                                                               Bus master
                                   (PIR1<3>)                                                                                                                                                                                                   terminates
                                                                                                                                                                                                                                               transfer
                                   BF (SSPSTAT<0>)
                                                                                                                        Cleared by software
                                                                                                          SSPBUF is read
                                   SSPOV (SSPCON1<6>)
                                                                                                                                                                                                                                  SSPOV is set
                                                                                                                                                                                                                                  because SSPBUF is
                                                                                                                                                                                                                                  still full. ACK is not sent.
                                   CKP
                                                                                                                                                                                      CKP
                                                                                                             If BF is cleared                                                         written
                                                                                                             prior to the falling                                                     to ‘1’ in
                                                                                                             edge of the 9th clock,                                                   software
                                                                                                             CKP will not be reset                          BF is set after falling
                                                                                                             to ‘0’ and no clock                            edge of the 9th clock,
                                                                                                             stretching will occur                          CKP is reset to ‘0’ and
                                                                                                                                                            clock stretching occurs
                                                                                                                                                                                                                                                                  I2C™ SLAVE MODE TIMING WITH SEN = 1 (RECEPTION, 7-BIT ADDRESS)
 2010 Microchip Technology Inc.
                                                                                                                                                                                                                                                                                                        FIGURE 17-14:
                                                                                                  Clock is held low until                                     Clock is held low until
                                                                                                  update of SSPADD has                                        update of SSPADD has                                                                                        Clock is not held low
                                                                                                                                                                                                             Clock is held low until
                                                                                                  taken place                                                 taken place                                                                                                 because ACK = 1
                                                                                                                                                                                                             CKP is set to ‘1’
                                                    Receive First Byte of Address                                Receive Second Byte of Address                                Receive Data Byte                                           Receive Data Byte
                                                                                    R/W = 0                                                                                                                                                                                ACK
                                                                                                                                                        ACK                                                      ACK
                                    SDA         1     1    1     1     0   A9 A8                       A7       A6    A5   A4   A3   A2     A1     A0               D7 D6 D5 D4          D3 D2      D1 D0                     D7 D6 D5 D4           D3 D2      D1 D0
 2010 Microchip Technology Inc.
                                                                                            ACK
                                    SCL         1     2    3     4    5    6    7       8    9              1     2    3    4    5     6     7      8    9          1     2    3     4    5    6    7     8      9            1        2   3    4   5    6       7   8      9
                                            S                                                                                                                                                                                                                                        P
                                    SSPIF
                                                                                                                                                                                                                                                                                 Bus master
                                    (PIR1<3>)                                                                                                                                                                                                                                    terminates
                                                                                                                      Cleared by software                                       Cleared by software                                        Cleared by software                   transfer
                                                    Cleared by software
                                    BF (SSPSTAT<0>)
                                                               SSPBUF is written with                       Dummy read of SSPBUF                                     Dummy read of SSPBUF
                                                               contents of SSPSR                            to clear BF flag                                         to clear BF flag
                                   SSPOV (SSPCON1<6>)
                                                                                                                                                                                                                                                                         SSPOV is set
                                                                                                                                                                                                                                                                         because SSPBUF is
                                                                                                                                                                                                                                                                         still full. ACK is not sent.
                                    UA (SSPSTAT<1>)
                                                            UA is set indicating that                           Cleared by hardware when                                Cleared by hardware when
                                                            the SSPADD needs to be                              SSPADD is updated with low                              SSPADD is updated with high
                                                            updated                                             byte of address after falling edge                      byte of address after falling edge
                                                                                                                of ninth clock                                          of ninth clock
                                                                                                                       UA is set indicating that
                                                                                                                       SSPADD needs to be
                                                                                                                       updated
                                   CKP
                                                                                                                Note: An updat e of the SSPADD
                                                                                                                      register be fore t he f alling
                                                                                                                      edge of th e n inth clock will                                                                              CKP written to ‘1’
                                                                                                                      have n o ef fect on U A and                                                                                 by software
                                                                                                                      UA will remain set.
                                                                                                                                                                        Note: An update of the SSPADD register before
                                                                                                                                                                              the falling edge of the ninth clock will have
                                                                                                                                                                              no effect on UA and UA will remain set.
                                                                                                                                                                                                                                                                                                        I2C™ SLAVE MODE TIMING WITH SEN = 1 (RECEPTION, 10-BIT ADDRESS)
DS41303G-page 217
                                                                                                                                                                                                                                                                                                                                                                          PIC18F2XK20/4XK20
PIC18F2XK20/4XK20
17.4.5        GENERAL CALL ADDRESS                                     If the ge neral c all a ddress m atches, the SSPSR i s
              SUPPORT                                                  transferred to the SSPBUF, the BF flag bit is set (eighth
                                                                       bit) and on the falling edge of the ninth bit (ACK bit), the
The addressing procedure for the I2C bus is such that
                                                                       SSPIF interrupt flag bit is set.
the f irst b yte af ter the Start condition u sually
determines which device will be the slave addressed by                 When the interrupt is se rviced, th e s ource for th e
the master. The exception is the general call address                  interrupt can be checked by reading the contents of the
which ca n a ddress al l d evices. When th is address i s              SSPBUF. Th e v alue can b e u sed to de termine i f th e
used, a ll devices s hould, in the ory, respond w ith a n              address was device specific or a general call address.
Acknowledge.                                                           In 10-bit mode, the SSPADD is required to be updated
The general c all ad dress is o ne of eight addresses                  for the second half of the address to match and the UA
reserved for sp ecific purp oses by the I 2C pr otocol. It             bit of th e SSPSTAT register is set. If the general call
consists of all ‘0’s with R/W = 0.                                     address is sampled when the GCEN bit is set, while the
                                                                       slave is configured in 10-b it Add ress mo de, then the
The gen eral cal l add ress is recognized w hen the
                                                                       second half of the address is not necessary, the UA bit
GCEN bit of the SSPCON2 is set. Following a Start bit
                                                                       will not be set and the slave will begin receiving data
detect, 8 bit s are shifted in to the SSPSR and the
                                                                       after the Acknowledge (Figure 17-15).
address is c ompared against t he SSPADD. It i s also
compared to the general call address and fixed in hard-
ware.
FIGURE 17-15:           SLAVE MODE GENERAL CALL ADDRESS SEQUENCE
                        (7 OR 10-BIT ADDRESS MODE)
                                                                       Address is compared to General Call Address
                                                                       after ACK, set interrupt
                                                                 R/W = 0               Receiving Data                     ACK
      SDA                         General Call Address                  ACK D7   D6    D5    D4     D3   D2   D1     D0
      SCL
                            1    2    3    4     5       6   7     8    9    1    2     3    4      5    6     7     8    9
                    S
      SSPIF
      BF (SSPSTAT<0>)
                                                                                   Cleared by software
                                                                                   SSPBUF is read
      SSPOV (SSPCON1<6>)                                                                                                      ‘0’
      GCEN (SSPCON2<7>)
                                                                                                                              ‘1’
DS41303G-page 218                                                                                  2010 Microchip Technology Inc.
                                                                               PIC18F2XK20/4XK20
17.4.6      MASTER MODE                                                            Note:       The M SSP m odule, when configured in
Master m ode is en abled b y s etting and cle aring th e                                       I2C Master mode, does not allow queueing
appropriate SSPM bits in SSPCON1 and by setting the                                            of ev ents. Fo r in stance, the user i s not
SSPEN bit. In M aster m ode, the SCL and SDA lines                                             allowed to in itiate a S tart c ondition and
are manipulated by the MSSP hardware.                                                          immediately write the SSPBUF register to
                                                                                               initiate tra nsmission b efore the S tart
Master m ode of ope ration is su pported by in terrupt
                                                                                               condition i s c omplete. In th is ca se, the
generation on the detection of the Start and Stop con-
                                                                                               SSPBUF wil l no t be writte n to an d the
ditions. The Stop (P) and Start (S) bits are cleared from
                                                                                               WCOL bit will be set, indicating that a write
a Reset or when the MSSP module is disabled. Control
                                                                                               to the SSPBUF did not occur.
of the I 2C bus may be taken when the P bit is set, or the
bus is Idle, with both the S and P bits clear.                                 The following events will cause the SSP Interrupt Flag
In Firmware C ontrolled Ma ster mode, us er cod e                              bit, SSPIF, to be set (SSP interrupt, if enabled):
conducts al l I 2C bu s ope rations based on Start and                         •   Start condition
Stop bit conditions.
                                                                               •   Stop condition
Once M aster m ode is e nabled, the             user has si x                  •   Data transfer byte transmitted/received
options.
                                                                               •   Acknowledge transmit
1.   Assert a Start condition on SDA and SCL.                                  •   Repeated Start
2.   Assert a Repeated Start condition on SDA and
     SCL.
3.   Write to the    SSPBUF reg       ister in itiating
     transmission of data/address.
4.   Configure the I2C port to receive data.
5.   Generate an Acknowledge condition at the end
     of a received byte of data.
6.   Generate a Stop condition on SDA and SCL.
FIGURE 17-16:           MSSP BLOCK DIAGRAM (I2C™ MASTER MODE)
                                                                                    Internal                   SSPM<3:0>
                                                                                   Data Bus                    SSPADD<7:0>
                                                Read                       Write
                                                            SSPBUF                                                  Baud
                                                                                                                    Rate
                                                                                                                  Generator
     SDA                                                                           Shift
                                                                                   Clock
                                                                                                                    Clock Arbitrate/WCOL Detect
                              SDA In
                                                            SSPSR
                                                                                                                       (hold off clock source)
                                                    MSb                 LSb
                               Receive Enable
                                                        Start bit, Stop bit,
                                                                                                Clock Cntl
                                                          Acknowledge
                                                            Generate
     SCL
                                                           Start bit Detect
                                                          Stop bit Detect
                                     SCL In            Write Collision Detect              Set/Reset, S, P, WCOL (SSPSTAT)
                                                         Clock Arbitration                 Set SSPIF, BCLIF
                                   Bus Collision        State Counter for                  Reset ACKSTAT, PEN (SSPCON2)
                                                        end of XMIT/RCV
 2010 Microchip Technology Inc.                                                                                                       DS41303G-page 219
PIC18F2XK20/4XK20
17.4.6.1       I2C Master Mode Operation                        A typical transmit sequence would go as follows:
The m aster de vice generates al l o f th e s erial clock       1.  The user generates a Start condition by setting
pulses and the Start and Stop conditions. A transfer is             the SEN bit of the SSPCON2 register.
ended with a S top condition or w ith a R epeated Start         2. SSPIF is s et. Th e M SSP m odule wi ll wa it th e
condition. Since the R epeated Start co ndition is als o            required s tart tim e b efore an y ot her o peration
the beginning of the next serial transfer, the I2C bus will         takes place.
not be released.                                                3. The u ser l oads t he SSPBUF wi th the s lave
In Master T ransmitter mo de, serial da ta is output                address to transmit.
through SDA, while SCL outputs the serial clock. The            4. Address is shifted out the SDA pin until all 8 bits
first byte transmitted contains the slave address of the            are transmitted.
receiving device (7 bits) and the Read/Write (R/W) bit.         5. The MSSP module shifts in the ACK bit from the
In this case, the R/W bit will be logic ‘0’. Serial data is         slave d evice and w rites it s v alue in to th e
transmitted 8 bits at a time. After each byte is transmit-          ACKSTAT bit of the SSPCON2 register.
ted, an A cknowledge bi t is r eceived. S tart a nd S top
                                                                6. The MSSP module generates an interrupt at the
conditions are output to indicate the beginning and the
                                                                    end of the ninth clock cycle by setting the SSPIF
end of a serial transfer.
                                                                    bit.
In Master Receive mode, the first byte transmitted con-         7. The user l oads the SSPBUF wit h e ight bits of
tains th e s lave ad dress of t he t ransmitting device             data.
(7 bits) and the R/W bit. In this case, the R/W bit will be
                                                                8. Data is shifted out the SDA pin until all 8 bits are
logic ‘1’. Thus, the first byte transmitted is a 7-bit slave
                                                                    transmitted.
address fo llowed by a ‘1’ to indicate the re ceive bi t.
Serial data is received via SDA, while SCL outputs the          9. The MSSP module shifts in the ACK bit from the
serial clock. Serial data is received 8 bits at a time. After       slave d evice and w rites it s v alue in to th e
each byte is received, an Acknowledge bit is transmit-              ACKSTAT bit of the SSPCON2 register.
ted. S tart and S top conditions i ndicate t he beginning       10. The MSSP module generates an interrupt at the
and end of transmission.                                            end of the ninth clock cycle by setting the SSPIF
                                                                    bit.
The Bau d R ate G enerator use d for th e SPI mode
operation i s used t o se t t he S CL c lock f requency f or    11. The user generates a Stop condition by setting
either 100 kHz, 400 kHz or 1 MHz I 2C operation. See                the PEN bit of the SSPCON2 register.
Section 17.4.7 “Baud Rate” for more detail.                     12. Interrupt is generated once the Stop condition is
                                                                    complete.
DS41303G-page 220                                                                         2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
17.4.7      BAUD RATE                                             Once th e gi ven op eration is co mplete (i.e .,
   2                                                              transmission of the last data bit is followed by ACK), the
In I C Master mode, the Baud Rate Generator (BRG)
                                                                  internal clock will automatically stop counting and the
reload value i s pl aced in th e SSPADD register
                                                                  SCL pin will remain in its last state.
(Figure 17-17). Wh en a w rite occ urs to SS PBUF, th e
Baud Rate Generator will automatically begin counting.            Table 17-3 de monstrates cl ock rate s ba sed on
The BR G co unts dow n to ‘ 0’ an d stops un til an other         instruction c ycles an d t he BR G v alue l oaded in to
reload has taken pla ce. The BR G co unt is decre-                SSPADD.
mented twice per instruction cycle (TCY) on the Q2 and            The minimum SSPADD value for baud rate generation
Q4 cl ocks. In I 2C Master mode, the BRG is reloaded              is 0x03.
automatically. O ne h alf o f th e SCL p eriod is e qual to
[(SSPADD+1)  2]/FOSC. T herefore SSP ADD =
(FCY/FSCL) -1.
FIGURE 17-17:           BAUD RATE GENERATOR BLOCK DIAGRAM
                                            SSPM<3:0>                   SSPADD<7:0>
                            SSPM<3:0>              Reload      Reload
                                   SCL             Control
                                                      CLKOUT      BRG Down Counter          FOSC/2
TABLE 17-3:         I2C™ CLOCK RATE W/BRG
                                                                                                        FSCL
             FOSC                            FCY                         BRG Value
                                                                                                (2 Rollovers of BRG)
           64 MHz                          16 MHz                           27h                       400 kHz(1)
           64 MHz                          16 MHz                           32h                        313.7 kHz
           64 MHz                          16 MHz                           3Fh                         250 kHz
           40 MHz                          10 MHz                           18h                       400 kHz(1)
           40 MHz                          10 MHz                           1Fh                        312.5 kHz
           40 MHz                          10 MHz                           63h                         100 kHz
           16 MHz                           4 MHz                           09h                       400 kHz(1)
           16 MHz                           4 MHz                           0Ch                         308 kHz
           16 MHz                           4 MHz                           27h                         100 kHz
            4 MHz                           1 MHz                           09h                         100 kHz
Note 1:     The I2C interface does not conform to the 400 kHz I2C specification (which applies to rates greater than
            100 kHz) in all details, but may be used with care where higher rates are required by the application.
 2010 Microchip Technology Inc.                                                                       DS41303G-page 221
PIC18F2XK20/4XK20
17.4.7.1      Clock Arbitration
Clock arbitration occurs w hen the master, during any
receive, tra nsmit or R epeated Start/Stop co ndition,
deasserts the SC L p in ( SCL al lowed to flo at h igh).
When the SC L pin i s al lowed to float hi gh, th e Bau d
Rate Gen erator (BRG) is s uspended fro m c ounting
until the SC L pin is actually sampled high. When the
SCL pin is sampled high, the Baud Rate Generator is
reloaded w ith the contents o f SS PADD<7:0> and
begins counting. This ensures that the SCL high time
will always be at lea st one BRG rollover count in the
event that the clock is held low by an external device
(Figure 17-18).
FIGURE 17-18:          BAUD RATE GENERATOR TIMING WITH CLOCK ARBITRATION
              SDA                   DX                                 DX – 1
                                     SCL deasserted but slave holds              SCL allowed to transition high
                                     SCL low (clock arbitration)
              SCL
                                                             BRG decrements on
                                                             Q2 and Q4 cycles
              BRG
                              03h        02h        01h       00h (hold off)       03h        02h
              Value
                                          SCL is sampled high, reload takes
                                          place and BRG starts its count
              BRG
              Reload
DS41303G-page 222                                                                            2010 Microchip Technology Inc.
                                                                       PIC18F2XK20/4XK20
17.4.8       I2C MASTER MODE START                                        Note:       If a t the be ginning of the Start c ondition,
             CONDITION TIMING                                                         the SD A and SC L pins are already sam-
To in itiate a S tart c ondition, the us er se ts th e S tart                         pled low, or if during the Start condition, the
Enable bi t, SEN bi t of t he SSPCON2 re gister. If th e                              SCL l ine is sa mpled low be fore the SD A
SDA and SCL pins are sampled high, the Baud Rate                                      line is dri ven lo w, a bus col lision oc curs,
Generator is       reloaded w ith the co ntents of                                    the Bus Collision Interrupt Flag, BCLIF, is
SSPADD<6:0> and starts its count. If SCL and SDA are                                  set, the Start condition is aborted and the
both sampled hi gh w hen the B aud Rate Ge nerator                                    I2C module is reset into its Idle state.
times out (TBRG), the SDA pin is driven low. The action
of the SD A being driven low while SCL is high is th e                 17.4.8.1          WCOL Status Flag
Start condition and causes the S bit of the SSPSTAT1                   If the user writes the SSPBUF when a Start sequence
register to be set. Following this, the Baud Rate Gener-               is in progress, the WCOL is set and the contents of the
ator is rel oaded w ith the contents of SSPADD<7:0>                    buffer are unchanged (the write doesn’t occur).
and resumes its count. When the Baud Rate Generator
                                                                          Note:       Because que ueing of ev ents i s n ot
times out (TBRG), the SEN bit of the SSPCON2 register
                                                                                      allowed, w riting to the low er 5 bi ts of
will be aut omatically cleared by hardware; th e Bau d
                                                                                      SSPCON2 i s d isabled unt il the Start
Rate G enerator is s uspended, le aving the SD A lin e
                                                                                      condition is complete.
held low and the Start condition is complete.
FIGURE 17-19:            FIRST START BIT TIMING
                                                                Set S bit (SSPSTAT<3>)
                    Write to SEN bit occurs here
                                                   SDA = 1,
                                                                       At completion of Start bit,
                                                   SCL = 1
                                                                       hardware clears SEN bit
                                                                          and sets SSPIF bit
                                                      TBRG      TBRG            Write to SSPBUF occurs here
                                                                                      1st bit           2nd bit
                                 SDA
                                                                                           TBRG
                                 SCL
                                                                               TBRG
                                                                 S
 2010 Microchip Technology Inc.                                                                                  DS41303G-page 223
PIC18F2XK20/4XK20
17.4.9      I2C MASTER MODE REPEATED                                        Note 1: If R SEN is programmed w hile any other
            START CONDITION TIMING                                                  event is in progress, it will not take effect.
A Repeated Start condition occurs when the RSEN bit                                 2: A bus collision during the Repeated Start
of the SSPCON2 register is programmed high and the                                     condition occurs if:
I2C logic module is in the Idle state. When the RSEN bit
                                                                                        • SDA is sampled low when SCL goes
is set, the SCL pin is asserted low. When the SCL pin
                                                                                          from low-to-high.
is sampled low, the Baud Rate Generator is loaded with
the c ontents of SSPADD<5:0> an d b egins c ounting.                                    • SCL goes low before SDA is
The SDA pin is released (brought high) for one Baud                                       asserted low. This may indicate that
Rate Generator co unt (T BRG). W hen t he B aud Rate                                      another master is attempting to
Generator times out, if SDA is sampled high, the SCL                                      transmit a data ‘1’.
pin w ill b e dea sserted (b rought h igh). Whe n SC L i s
                                                                         Immediately following the SSPIF bit getting set, the user
sampled hig h, the Baud R ate G enerator is relo aded
                                                                         may w rite the SSPBUF w ith the 7-bit add ress i n 7-bit
with the contents of SSPADD<7:0> and begins count-
                                                                         mode or the default first address in 10-bit mode. After the
ing. SDA and SCL must be sampled high for one TBRG.
                                                                         first eight bit s are transmitted and an ACK is received,
This action is then followed by assertion of the SDA pin
                                                                         the u ser may then trans mit an additional eight bi ts of
(SDA = 0) for on e T BRG while SCL is high. Following
                                                                         address (10-bit mode) or eight bits of data (7-bit mode).
this, the RSEN bit of the SSPCON2 reg ister wil l be
automatically cleared and the Baud Rate Generator will                   17.4.9.1        WCOL Status Flag
not be reloaded, leaving the SDA pin held low. As soon
as a S tart condition is detected on the SDA and SCL                     If the user writes the SSPBUF when a Repeated Start
pins, the S bit of the SSPSTAT register will be set. The                 sequence is in pro gress, th e W COL is s et and th e
SSPIF bit will not be set until the Baud Rate Generator                  contents of the buffer are unchanged (the write doesn’t
has timed out.                                                           occur).
                                                                            Note:      Because que ueing of ev ents i s n ot
                                                                                       allowed, w riting of the low er 5 bi ts of
                                                                                       SSPCON2 is disabled until the Repeated
                                                                                       Start condition is complete.
FIGURE 17-20:            REPEAT START CONDITION WAVEFORM
                                                                                     S bit set by hardware
                                           Write to SSPCON2
                                                              SDA = 1,
                                           occurs here.                             At completion of Start bit,
                                           SDA = 1,           SCL = 1
                                                                                    hardware clears RSEN bit
                                           SCL (no change).                            and sets SSPIF
                                                              TBRG   TBRG    TBRG
                            SDA                                                                   1st bit
                    RSEN bit set by hardware
                 on falling edge of ninth clock,                                       Write to SSPBUF occurs here
                                    end of Xmit
                                                                                                     TBRG
                            SCL
                                                                                          TBRG
                                                                            Sr = Repeated Start
DS41303G-page 224                                                                                       2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
17.4.10     I2C MASTER MODE                                    17.4.10.3     ACKSTAT Status Flag
            TRANSMISSION                                       In Transmit mode, the ACKSTAT bit of the SSPCON2
Transmission of a d ata by te, a 7 -bit ad dress or th e       register is cleared when the slave has sent an Acknowl-
other half of a 10-bit address is accomplished by simply       edge (AC K = 0) and i s s et w hen t he sl ave do es no t
writing a value to the SSPBUF register. This action will       Acknowledge (AC K = 1). A slave sends an Acknowl-
set the Buffer Full flag bit, BF and allow the Baud Rate       edge when it has recognized its address (including a
Generator to beg in counting and start the next trans-         general call), or when the slave has properly received
mission. Eac h b it o f a ddress/data w ill be shifted o ut    its data.
onto the SDA pin af ter th e fa lling edg e o f SC L i s
asserted (see da ta ho ld t ime sp ecification                 17.4.11     I2C MASTER MODE RECEPTION
parameter 106). S CL is h eld l ow f or one Baud Rate          Master mode reception is enabled by programming the
Generator rollover count (T BRG). Data should be valid         Receive En able bit, RCEN bit o f t he SSPCON2
before SCL is released high (see data setup time spec-         register.
ification parameter 107). When the SCL pin is released
high, it is held that way for TBRG. The data on the SDA          Note:     The MSSP module must be in an Idle state
pin must remain stable for that duration and some hold                     before the RCEN bit is set or the RCEN bit
time after the next falling edge of SCL. After the eighth                  will be disregarded.
bit is shifted out (the falling edge of the eighth clock),     The Baud Rate Generator begins counting and on each
the B F f lag i s cleared and t he m aster releases S DA.      rollover, t he state of th e SCL pin c hanges
This al lows the sl ave de vice be ing addressed to            (high-to-low/low-to-high) an d dat a is sh ifted in to th e
respond with an ACK bit during the ninth bit time if an        SSPSR. After the falling edge of the eighth clock, the
address match occurred, or if data was received prop-          receive enable flag is automatically cleared, the con-
erly. The status of ACK is written into the ACKDT bit on       tents of th e SSPSR are loaded into the SSPBUF, the
the falling edge of the ninth clock. If the master receives    BF flag bit is set, the SSPIF flag bit is set and the Baud
an Ac knowledge, t he Acknowledge S tatus bi t,                Rate G enerator is s uspended fr om counting, holding
ACKSTAT, is cleared. If not, the bit is set. After the ninth   SCL low. The MSSP is now in Id le state awaiting the
clock, the SSPIF bit is set and the master clock (Baud         next command. When the buffer is re ad by the CPU,
Rate Generator) is suspended until the next data byte          the BF flag bit is au tomatically cleared. The us er can
is loaded into the SSPBUF, leaving SCL low and SDA             then send an Acknowledge bit at the end of reception
unchanged (Figure 17-21).                                      by setting the Acknowledge Sequence Enable, ACKEN
After the write to the SSPBUF, each bit of the address         bit of the SSPCON2 register.
will be shifted out on the falling edge of SC L until all
seven address bits and the R/W bit are completed. On           17.4.11.1     BF Status Flag
the fal ling ed ge of the eighth c lock, the m aster w ill     In receive operation, the BF bit is set when an address
deassert the SD A pin , allowing the sl ave to res pond        or data byte is loaded into SSPBUF from SSPSR. It is
with an Acknowledge. On the falling edge of the ninth          cleared when the SSPBUF register is read.
clock, the master will sample the SDA pin to see if the
address was recognized by a slave. The status of the           17.4.11.2     SSPOV Status Flag
ACK bit is loaded into the ACKSTAT Status bit of the           In receive operation, the SSPOV bit is set when 8 bits
SSPCON2 reg ister. Following the fa lling ed ge of the         are rec eived into the SSPSR and t he BF fl ag bit i s
ninth clock transmission of the address, the SSPIF is          already set from a previous reception.
set, the BF flag is cleared and the Baud Rate Generator
is turned off until another w rite to the SSPBUF takes         17.4.11.3     WCOL Status Flag
place, holding SCL low and allowing SDA to float.
                                                               If the us er writes t he SSPBUF wh en a re ceive i s
17.4.10.1     BF Status Flag                                   already in progress (i.e., SSPSR is still shifting in a data
                                                               byte), the WCOL bit is set and the contents of the buffer
In Transmit mode, the BF bit of the SSPSTAT register           are unchanged (the write doesn’t occur).
is set when the CPU writes to SSPBUF and is cleared
when all 8 bits are shifted out.
17.4.10.2     WCOL Status Flag
If the us er writ es the SSPBUF whe n a t ransmit i s
already in p rogress (i.e., SSPSR i s still shifting out a
data byte), the WCOL is set and the contents of the buf-
fer are unchanged (the write doesn’t occur).
WCOL must be cleared by software.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 225
                                                                                                                                                                                          FIGURE 17-21:
DS41303G-page 226
                                              Write SSPCON2<0> SEN = 1                                                                                                    ACKSTAT in
                                              Start condition begins                                                                                                      SSPCON2 = 1
                                                                                                                    From slave, clear ACKSTAT bit SSPCON2<6>
                                                     SEN = 0
                                                                                                                            Transmitting Data or Second Half
                                                           Transmit Address to Slave        R/W = 0                                                                 ACK
                                                                                                                            of 10-bit Address
                                   SDA                A7   A6    A5    A4   A3   A2    A1         ACK = 0             D7     D6    D5   D4    D3   D2    D1    D0
                                                      SSPBUF written with 7-bit address and R/W
                                                      start transmit
                                   SCL                1     2     3    4     5    6     7    8     9                    1     2     3    4     5     6    7     8    9
                                              S                                                                                                                              P
                                                                                                         SCL held low
                                                                                                         while CPU
                                                                                                       responds to SSPIF
                                                                                                                                                                                                                                                           PIC18F2XK20/4XK20
                                   SSPIF
                                                                                                                              Cleared by software service routine
                                                           Cleared by software                                                from SSP interrupt
                                                                                                                                                                    Cleared by software
                                   BF (SSPSTAT<0>)
                                                      SSPBUF written                                                          SSPBUF is written by software
                                   SEN
                                                      After Start condition, SEN cleared by hardware
                                   PEN
                                   R/W
                                                                                                                                                                                          I 2C™ MASTER MODE WAVEFORM (TRANSMISSION, 7 OR 10-BIT ADDRESS)
 2010 Microchip Technology Inc.
                                                                                                                                                                                                                                                                                FIGURE 17-22:
                                                                                                                                                           Write to SSPCON2<4>
                                                                                                                                                           to start Acknowledge sequence
                                                                                                                                                           SDA = ACKDT (SSPCON2<5>) = 0
                                           Write to SSPCON2<0> (SEN = 1),
                                           begin Start condition                                                                                                      ACK from Master                    Set ACKEN, start Acknowledge sequence
                                                                                                          Master configured as a receiver                             SDA = ACKDT = 0                             SDA = ACKDT = 1
                                                     SEN = 0                                              by programming SSPCON2<3> (RCEN = 1)
 2010 Microchip Technology Inc.
                                                                                                                                                                                                                                           PEN bit = 1
                                                         Write to SSPBUF occurs here,                                                      RCEN cleared                  RCEN = 1, start                      RCEN cleared
                                                                                          ACK from Slave                                                                 next receive                         automatically                written here
                                                         start XMIT                                                                        automatically
                                                              Transmit Address to Slave        R/W = 0              Receiving Data from Slave                                     Receiving Data from Slave
                                   SDA                   A7    A6 A5 A4 A3 A2             A1             ACK   D7 D6 D5 D4 D3 D2 D1                    D0         ACK       D7 D6 D5 D4 D3 D2 D1                        D0      ACK
                                                                                                                                                                                                                                                               Bus master
                                                                                                                                                                                                                              ACK is not sent                  terminates
                                                                                                                                                                                                                                                               transfer
                                                         1     2     3     4    5    6    7     8   9           1    2     3    4    5    6     7      8          9          1     2    3    4     5     6     7    8            9
                                   SCL         S                                                                                                                                                                                                   P
                                                                                                                                                                           Data shifted in on falling edge of CLK        Set SSPIF at end
                                                                                                                                                                                                                         of receive                       Set SSPIF interrupt
                                                                                                                                 Set SSPIF interrupt                                                                                                      at end of Acknow-
                                                                                                                                                                                 Set SSPIF interrupt                                                      ledge sequence
                                                                                                                                 at end of receive
                                                                                                                                                                                 at end of Acknowledge
                                   SSPIF                                                                                                                                         sequence
                                                                                                                                                                                                                                                       Set P bit
                                                                   Cleared by software                         Cleared by software       Cleared by software                       Cleared by software                                                 (SSPSTAT<4>)
                                     SDA = 0, SCL = 1                                                                                                                                                                                Cleared in
                                     while CPU                                                                                                                                                                                       software          and SSPIF
                                     responds to SSPIF
                                   BF
                                   (SSPSTAT<0>)                                                                                                              Last bit is shifted into SSPSR and
                                                                                                                                                             contents are unloaded into SSPBUF
                                   SSPOV
                                                                                                                                                                                                                     SSPOV is set because
                                                                                                                                                                                                                     SSPBUF is still full
                                   ACKEN
                                                                                                                                                                                                                                                                                I 2C™ MASTER MODE WAVEFORM (RECEPTION, 7-BIT ADDRESS)
DS41303G-page 227
                                                                                                                                                                                                                                                                                                                                        PIC18F2XK20/4XK20
PIC18F2XK20/4XK20
17.4.12      ACKNOWLEDGE SEQUENCE                                             17.4.13         STOP CONDITION TIMING
             TIMING                                                           A Stop bit is asserted on th e SDA pin at the end of a
An Ackn owledge seque nce is e nabled by setting the                          receive/transmit by setting the Stop Sequence Enable
Acknowledge Sequence Enable bit, AC KEN bit of the                            bit, PEN bit of the SSPCON2 register. At the end of a
SSPCON2 register. When this bit is set, the SCL pin is                        receive/transmit, t he SCL line is h eld l ow a fter th e
pulled low and the contents of the Acknowledge data bit                       falling edge of the ninth clock. When the PEN bit is set,
are presented on the SDA pin. If the user wishes to gen-                      the master will assert the SDA line low. When the SDA
erate an Ack nowledge, then the AC KDT bit sh ould be                         line is s ampled low, th e Ba ud Rate G enerator i s
cleared. If not, the user should set the ACKDT bit before                     reloaded and counts down to ‘0’. When the Baud Rate
starting an Acknowledge sequence. The Baud R ate                              Generator times out, the SC L pin will be brought high
Generator t hen count s for one rollover period (T BRG)                       and on e T BRG (Bau d R ate Generator rol lover c ount)
and the SC L pin is deasserted (pulled high). When the                        later, the SDA pin will be deasserted. When the SDA
SCL pin is sampled high (cloc k arbitration), the Baud                        pin is sampled high while SCL is high, the P bit of the
Rate G enerator counts for TBRG. The SCL pin is then                          SSPSTAT register is set. A T BRG later, the PEN bit is
pulled low. Following this, the ACKEN bit is automatically                    cleared and the SSPIF bit is set (Figure 17-24).
cleared, the Baud R ate Generator is turned of f and the
MSSP module then goes into Idle mode (Figure 17-23).                          17.4.13.1        WCOL Status Flag
                                                                              If the user writes the SSPBUF when a Stop sequence
17.4.12.1     WCOL Status Flag                                                is i n pro gress, the n th e W COL bit is se t an d th e
If the user writes the SSPBUF when an Acknowledge                             contents of the buffer are unchanged (the write doesn’t
sequence i s i n pro gress, the n WC OL i s s et a nd th e                    occur).
contents of the buffer are unchanged (the write doesn’t
occur).
FIGURE 17-23:              ACKNOWLEDGE SEQUENCE WAVEFORM
                      Acknowledge sequence starts here,                                         ACKEN automatically cleared
                                     write to SSPCON2
                               ACKEN = 1, ACKDT = 0
                                                                      TBRG         TBRG
                      SDA                            D0                      ACK
                      SCL                        8                                  9
                    SSPIF
                                                                                                            Cleared in
                                SSPIF set at                                                                software
                                the end of receive               Cleared in
                                                                 software               SSPIF set at the end
                                                                                        of Acknowledge sequence
            Note: TBRG = one Baud Rate Generator period.
FIGURE 17-24:              STOP CONDITION RECEIVE OR TRANSMIT MODE
                    Write to SSPCON2,                                 SCL = 1 for TBRG, followed by SDA = 1 for TBRG
                               set PEN                                after SDA sampled high. P bit (SSPSTAT<4>) is set.
                    Falling edge of                                              PEN bit (SSPCON2<2>) is cleared by
                    9th clock                                                     hardware and the SSPIF bit is set
                                             TBRG
              SCL
              SDA           ACK
                                                                  P
                                             TBRG         TBRG         TBRG
                                                          SCL brought high after TBRG
                                               SDA asserted low before rising edge of clock
                                               to setup Stop condition
            Note: TBRG = one Baud Rate Generator period.
DS41303G-page 228                                                                                          2010 Microchip Technology Inc.
                                                                      PIC18F2XK20/4XK20
17.4.14        SLEEP OPERATION                                       17.4.17        MULTI -MASTER COMMUNICATION,
                                2
While in Sle ep mode, the I C mo dule can rec eive                                  BUS COLLISION AND BUS
addresses or data and when an address match or com-                                 ARBITRATION
plete by te tran sfer oc curs, w ake t he processor fro m            Multi-Master mode support is achieved by bus arbitra-
Sleep (if the MSSP interrupt is enabled).                            tion. When the master outputs address/data bits onto
                                                                     the SDA pin, arbitration takes place when the master
17.4.15        EFFECTS OF A RESET                                    outputs a ‘1’ on SDA, b y letting SDA f loat h igh an d
A Reset disables the MSSP module and terminates the                  another master asserts a ‘0’. When the SCL pin floats
current transfer.                                                    high, d ata s hould b e s table. I f t he expected d ata o n
                                                                     SDA is a ‘1’ and the data sampled on the SDA pin = 0,
17.4.16        MULTI-MASTER MODE                                     then a bus collision has taken place. The master will set
In Multi-Master mode, the interrupt generation on th e               the Bus C ollision Interrupt Flag, BC LIF and reset the
detection of th e Start and Stop conditions all ows the              I2C port to its Idle state (Figure 17-25).
determination of when the bus is free. The Stop (P) and              If a tran smit w as i n pro gress w hen t he b us c ollision
Start (S) bit s a re cl eared fro m a R eset or w hen th e           occurred, th e t ransmission i s h alted, the BF flag i s
MSSP module is disabled. Control of the I 2C bus may                 cleared, the SDA and SCL lines are deasserted and the
be taken when the P bit of the SSPSTAT register is set,              SSPBUF can be written to. When the user services the
or the bus is Idle, with both the S and P bits clear. When           bus c ollision Interrupt Serv ice R outine and if the I2C
the bus is busy, enabling the SSP interrupt will gener-              bus i s fre e, th e us er c an res ume co mmunication b y
ate the interrupt when the Stop condition occurs.                    asserting a Start condition.
In mu lti-master operation, th e SD A lin e m ust be                 If a Start, Repeated Start, Stop or Acknowledge condi-
monitored for arbitration to see if the signal level is the          tion was in progress when the bus collision occurred, the
expected o utput le vel. Th is check is perf ormed b y               condition is ab orted, the SDA and SCL lines are deas-
hardware with the result placed in the BCLIF bit.                    serted and the respec tive control bits in the SS PCON2
The states where arbitration can be lost are:                        register are cleared. When the user services the bus col-
                                                                     lision Interrupt Service Routine and if the I2C bus is free,
•   Address Transfer                                                 the user can resume communication by asserting a Start
•   Data Transfer                                                    condition.
•   A Start Condition                                                The mast er w ill continu e to monito r the S DA and SC L
•   A Repeated Start Condition                                       pins. If a Stop condition occurs, the SSPIF bit will be set.
•   An Acknowledge Condition                                         A write to the SSPBUF w ill start the tra nsmission of
                                                                     data at t he f irst da ta b it, regardless o f w here th e
                                                                     transmitter left off when the bus collision occurred.
                                                                     In Multi-Master mode, the interrupt generation on th e
                                                                     detection of Start and Stop conditions allows the deter-
                                                                     mination of when the bus is free. Control of the I2C bus
                                                                     can be t aken whe n the P b it is set in the SSPSTAT
                                                                     register, o r th e bus i s Idle and th e S an d P b its a re
                                                                     cleared.
FIGURE 17-25:           BUS COLLISION TIMING FOR TRANSMIT AND ACKNOWLEDGE
                                                                                        Sample SDA. While SCL is high,
                                    Data changes              SDA line pulled low       data doesn’t match what is driven
                                    while SCL = 0             by another source         by the master.
                                                                                        Bus collision has occurred.
                                                       SDA released
                                                         by master
       SDA
       SCL                                                                                    Set bus collision
                                                                                              interrupt (BCLIF)
       BCLIF
 2010 Microchip Technology Inc.                                                                           DS41303G-page 229
PIC18F2XK20/4XK20
17.4.17.1     Bus Collision During a Start                          If the SD A pi n i s s ampled l ow d uring t his c ount, th e
              Condition                                             BRG is res et a nd t he SD A l ine is as serted e arly
                                                                    (Figure 17-28). If, however, a ‘1’ is sampled on the SDA
During a Start condition, a bus collision occurs if:
                                                                    pin, the SDA pin is asserted low at the end of the BRG
a)   SDA or SCL are sampled low at the beginning of                 count. The Baud Rate Generator is then reloaded and
     the Start condition (Figure 17-26).                            counts dow n to 0 ; if the SC L pi n i s s ampled a s ‘ 0’
b)   SCL is sampled low before SDA is asserted low                  during this time, a bu s collision does not occur. At the
     (Figure 17-27).                                                end of the BRG count, the SCL pin is asserted low.
During a Start co ndition, bo th the S DA an d the S CL               Note:      The reason that bus collision is not a factor
pins are monitored.                                                              during a Start condition is that no two bus
If the SDA pin is already low, or the SCL pin is already                         masters can assert a Start condition at the
low, then all of the following occur:                                            exact sa me time. Th erefore, o ne m aster
                                                                                 will a lways as sert SD A b efore t he o ther.
• the Start condition is aborted,
                                                                                 This condition does not cause a bus colli-
• the BCLIF flag is set and                                                      sion be cause th e two m asters m ust b e
• the MSSP module is reset to its Idle state                                     allowed to arbi trate the first add ress fo l-
    (Figure 17-26).                                                              lowing the Start condition. If the address is
The Start condition begins with the SDA and SCL pins                             the sa me, arbitration m ust be al lowed to
deasserted. W hen t he SDA p in is sampled hi gh, th e                           continue i nto th e d ata p ortion, Repeated
Baud Rate G enerator i s loaded f rom SSP ADD<7:0>                               Start or Stop conditions.
and counts down to 0. If the SC L pin is sampled low
while SDA is high, a bus collision occurs because it is
assumed that another master is attempting to drive a
data ‘1’ during the Start condition.
FIGURE 17-26:           BUS COLLISION DURING START CONDITION (SDA ONLY)
                                     SDA goes low before the SEN bit is set.
                                     Set BCLIF,
                                     S bit and SSPIF set because
                                     SDA = 0, SCL = 1.
     SDA
     SCL
                         Set SEN, enable Start                            SEN cleared automatically because of bus collision.
                         condition if SDA = 1, SCL = 1                    SSP module reset into Idle state.
     SEN
                              SDA sampled low before
                              Start condition. Set BCLIF.
                              S bit and SSPIF set because
     BCLIF                    SDA = 0, SCL = 1.
                                                                                    SSPIF and BCLIF are
                                                                                    cleared by software
     SSPIF
                                                                 SSPIF and BCLIF are
                                                                 cleared by software
DS41303G-page 230                                                                              2010 Microchip Technology Inc.
                                                                            PIC18F2XK20/4XK20
FIGURE 17-27:           BUS COLLISION DURING START CONDITION (SCL = 0)
                                                   SDA = 0, SCL = 1
                                                             TBRG           TBRG
               SDA
               SCL            Set SEN, enable Start
                              sequence if SDA = 1, SCL = 1
                                                                                      SCL = 0 before SDA = 0,
                                                                                      bus collision occurs. Set BCLIF.
               SEN
                         SCL = 0 before BRG time-out,
                         bus collision occurs. Set BCLIF.
               BCLIF
                                                                                                 Interrupt cleared
                                                                                                 by software
               S        ‘0’                                                                         ‘0’
               SSPIF    ‘0’                                                                         ‘0’
FIGURE 17-28:           BRG RESET DUE TO SDA ARBITRATION DURING START CONDITION
                                             SDA = 0, SCL = 1
                                                                    Set S          Set SSPIF
                                 Less than TBRG
                                                                        TBRG
                SDA     SDA pulled low by other master.
                        Reset BRG and assert SDA.
                SCL                                            S
                                                                                      SCL pulled low after BRG
                                                                                      time-out
                SEN
                                                             Set SEN, enable START
                                                             sequence if SDA = 1, SCL = 1
                BCLIF                                                                                 ‘0’
                SSPIF
                                                       SDA = 0, SCL = 1,                           Interrupts cleared
                                                       set SSPIF                                   by software
 2010 Microchip Technology Inc.                                                                                 DS41303G-page 231
PIC18F2XK20/4XK20
17.4.17.2       Bus Collision During a Repeated                   If SDA is low, a bus collision has occurred (i.e., another
                Start Condition                                   master is attempting to transmit a data ‘0’, Figure 17-29).
                                                                  If SDA is sampled high, the BRG is reloaded and begins
During a R epeated S tart c ondition, a bus c ollision
                                                                  counting. If SDA goes from high-to-low before the BRG
occurs if:
                                                                  times out, no bus c ollision occurs bec ause no tw o
a)   A low level is sampled on SDA when SCL goes                  masters can assert SDA at exactly the same time.
     from low level to high level.
                                                                  If SCL goes from high-to-low before the BRG times out
b)   SCL go es l ow before SDA i s asserted l ow,                 and SDA has not already been asserted, a bus collision
     indicating th at a nother master is at tempting to           occurs. In t his c ase, another master i s attempting to
     transmit a data ‘1’.                                         transmit a data ‘1’ during the Repeated Start condition,
When the user deasserts SDA and the pin is allowed to             see Figure 17-30.
float high, the BRG is loaded with SSPADD<7:0> and                If, at the end of the BRG time-out, both SCL and SDA
counts down to 0. The SCL pin is then deasserted and              are still high, the SDA pin is driven low and the BRG is
when sampled high, the SDA pin is sampled.                        reloaded and begins counting. At the end of the count,
                                                                  regardless of the status of the SCL pin, the SCL pin is
                                                                  driven low and the R epeated S tart co ndition is
                                                                  complete.
FIGURE 17-29:           BUS COLLISION DURING A REPEATED START CONDITION (CASE 1)
             SDA
             SCL
                                                                 Sample SDA when SCL goes high.
                                                                 If SDA = 0, set BCLIF and release SDA and SCL.
             RSEN
             BCLIF
                                                                                           Cleared by software
             S                                                                                       ‘0’
             SSPIF                                                                                   ‘0’
FIGURE 17-30:           BUS COLLISION DURING REPEATED START CONDITION (CASE 2)
                                                          TBRG                            TBRG
            SDA
            SCL
                                     SCL goes low before SDA,
            BCLIF                    set BCLIF. Release SDA and SCL.
                                                                                                   Interrupt cleared
                                                                                                   by software
            RSEN
            S                                                                                               ‘0’
            SSPIF
DS41303G-page 232                                                                           2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
17.4.17.3      Bus Collision During a Stop                     The S top co ndition beg ins w ith SDA as serted low.
               Condition                                       When SDA is sampled low, the SCL pin is allowed to
                                                               float. When the pin is sampled high (clock arbitration),
Bus collision occurs during a Stop condition if:
                                                               the Baud Rate Generator is loaded with SSPADD<7:0>
a)   After t he SDA p in has b een d easserted an d            and counts down to 0. After the BRG times out, SDA is
     allowed to float high, SDA is sampled low after           sampled. If SDA is sampled low, a bus co llision ha s
     the BRG has timed out.                                    occurred. This is due to an other master attempting to
b)   After the SCL pin is deasserted, SCL is sampled           drive a da ta ‘ 0’ (Fi gure 17-31). If th e SC L pi n i s
     low before SDA goes high.                                 sampled low before SDA is allowed to float high, a bus
                                                               collision occurs. This is another case of another master
                                                               attempting to drive a data ‘0’ (Figure 17-32).
FIGURE 17-31:          BUS COLLISION DURING A STOP CONDITION (CASE 1)
                                         TBRG          TBRG                  TBRG                  SDA sampled
                                                                                                   low after TBRG,
                                                                                                   set BCLIF
        SDA
                                   SDA asserted low
        SCL
        PEN
        BCLIF
        P                                                                                          ‘0’
        SSPIF                                                                                      ‘0’
FIGURE 17-32:          BUS COLLISION DURING A STOP CONDITION (CASE 2)
                                          TBRG          TBRG                   TBRG
         SDA
                                     Assert SDA                            SCL goes low before SDA goes high,
                                                                           set BCLIF
         SCL
         PEN
         BCLIF
         P                                                                                           ‘0’
         SSPIF                                                                                       ‘0’
 2010 Microchip Technology Inc.                                                                   DS41303G-page 233
PIC18F2XK20/4XK20
TABLE 17-4:       SUMMARY OF REGISTERS ASSOCIATED WITH I2C™
                                                                                                                 Reset
    Name          Bit 7       Bit 6       Bit 5       Bit 4       Bit 3          Bit 2    Bit 1       Bit 0    Values on
                                                                                                                 page
IPR1            PSPIP(1)      ADIP        RCIP        TXIP       SSPIP       CCP1IP      TMR2IP     TMR1IP         62
PIR1            PSPIF(1)      ADIF        RCIF        TXIF        SSPIF      CCP1IF      TMR2IF     TMR1IF         62
PIE1            PSPIE(1)      ADIE        RCIE        TXIE       SSPIE       CCP1IE      TMR2IE     TMR1IE         62
IPR2            OSCFIP        C1IP        C2IP        EEIP       BCLIP       HLVDIP      TMR3IP     CCP2IP         62
PIR2            OSCFIF        C1IF        C2IF        EEIF        BCLIF      HLVDIF      TMR3IF     CCP2IF         62
PIE2            OSCFIE        C1IE        C2IE        EEIE       BCLIE       HLVDIE      TMR3IE     CCP2IE         62
SSPADD        SSP Address Register in I2C™ Slave Mode. SSP Baud Rate Reload Register in I2C Master Mode.           60
SSPBUF        SSP Receive Buffer/Transmit Register                                                                 60
SSPCON1          WCOL       SSPOV        SSPEN        CKP        SSPM3       SSPM2       SSPM1      SSPM0          60
SSPCON2          GCEN      ACKSTAT       ACKDT       ACKEN        RCEN           PEN     RSEN         SEN          60
SSPMSK           MSK7        MSK6        MSK5         MSK4        MSK3           MSK2    MSK1        MSK0          63
SSPSTAT           SMP         CKE         D/A           P           S            R/W      UA           BF          60
TRISC           TRISC7      TRISC6      TRISC5       TRISC4      TRISC3      TRISC2      TRISC1     TRISC0         62
Legend:    — = unimplemented, read as ‘0’. Shaded cells are not used by PORTA.
Note 1:    Not implemented on PIC18F2XK20 devices
DS41303G-page 234                                                                          2010 Microchip Technology Inc.
                                   PIC18F2XK20/4XK20
NOTES:
 2010 Microchip Technology Inc.             DS41303G-page 235
PIC18F2XK20/4XK20
DS41303G-page 236    2010 Microchip Technology Inc.
                                                                               PIC18F2XK20/4XK20
18.0      ENHANCED UNIVERSAL                                                   The EUSART module includes the following capabilities:
          SYNCHRONOUS                                                          •   Full-duplex asynchronous transmit and receive
          ASYNCHRONOUS RECEIVER                                                •   Two-character input buffer
          TRANSMITTER (EUSART)                                                 •   One-character output buffer
                                                                               •   Programmable 8-bit or 9-bit character length
The Enhanced Universal Synchronous Asynchronous
                                                                               •   Address detection in 9-bit mode
Receiver Transmitter (EUSART) module is a serial I/O
communications pe ripheral. It co ntains all the cl ock                        •   Input buffer overrun error detection
generators, shift registers and data buffers necessary                         •   Received character framing error detection
to p erform an in put or o utput se rial da ta t ransfer                       •   Half-duplex synchronous master
independent of dev ice p rogram execution. Th e                                •   Half-duplex synchronous slave
EUSART, als o kn own as a Seri al C ommunications                              •   Programmable clock and data polarity
Interface ( SCI), ca n b e co nfigured as a fu ll-duplex
asynchronous s ystem o r ha lf-duplex sy nchronous                             The E USART module i mplements t he following
system. Fu ll-Duplex mo de i s u seful for                                     additional features, making it ideally suited for use in
communications with peripheral systems, such as CRT                            Local Interconnect Network (LIN) bus systems:
terminals and p ersonal c omputers. H alf-Duplex                               • Automatic detection and calibration of the baud rate
Synchronous m ode is i ntended for c ommunications                             • Wake-up on Break reception
with peripheral devices, such as A/D or D/A integrated
                                                                               • 13-bit Break character transmit
circuits, s erial EEPRO Ms or ot her m icrocontrollers.
These devices typically do not have internal clocks for                        Block di agrams of the EU SART tra nsmitter an d
baud rate gen eration an d re quire th e ex ternal cl ock                      receiver are shown in Figure 18-1 and Figure 18-2.
signal provided by a master synchronous device.
FIGURE 18-1:                 EUSART TRANSMIT BLOCK DIAGRAM
                                                                                    Data Bus
                                                                                                           TXIE
                                                                                                                              Interrupt
                                                                        TXREG Register                   TXIF
                                                                                   8
                                                           MSb                                    LSb                               TX/CK pin
                                                                                                                Pin Buffer
                                                            (8)               • ••                 0
                                                                                                                and Control
                                                                  Transmit Shift Register (TSR)
                                       TXEN
                                                                                                  TRMT
  Baud Rate Generator         FOSC
                                            ÷n
                                                                             TX9
  BRG16                                       n
                        +1     Multiplier   x4    x16 x64
                                                                     TX9D
                                SYNC        1 X 0 0    0
    SPBRGH    SPBRG             BRGH        X 1 1 0    0
                               BRG16        X 1 0 1    0
 2010 Microchip Technology Inc.                                                                                         DS41303G-page 237
PIC18F2XK20/4XK20
FIGURE 18-2:                EUSART RECEIVE BLOCK DIAGRAM
                                                                                     CREN                  OERR                  RCIDL
                    RX/DT pin                                                     MSb              RSR Register             LSb
                                       Pin Buffer               Data
                                       and Control              Recovery
                                                                              Stop      (8)   7         •••       1      0 START
      Baud Rate Generator                            FOSC                                         RX9
                                                                ÷n
     BRG16
                        +1                                  n
                                Multiplier   x4   x16 x64
                                 SYNC        1 X 0 0   0
       SPBRGH     SPBRG          BRGH                                                                                              FIFO
                                             X 1 1 0   0                   FERR         RX9D            RCREG Register
                                BRG16        X 1 0 1   0
                                                                                                              8
                                                                                                                      Data Bus
                                                                                                                  RCIF            Interrupt
                                                                                                                  RCIE
The o peration of the EU SART m odule is co ntrolled
through three registers:
• Transmit Status and Control (TXSTA)
• Receive Status and Control (RCSTA)
• Baud Rate Control (BAUDCON)
These r egisters are de tailed in         Register 18-1,
Register 18-2 and Register 18-3, respectively.
For al l mo des o f E USART op eration, t he T RIS co ntrol
bits corresponding to the RX/DT and TX/CK pins should
be se t to ‘1’. The EU SART c ontrol will au tomatically
reconfigure the pin from input to output, as needed.
When the receiver or transmitter section is no t enabled
then the corresponding RX or TX p in may be used for
general purpose input and output.
DS41303G-page 238                                                                                   2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
18.1       EUSART Asynchronous Mode                            18.1.1.2       Transmitting Data
The EU SART tran smits and r eceives data using the            A transmission is initiated by writing a character to the
standard non-r eturn-to-zero ( NRZ) f ormat. NRZ is            TXREG register . If this is the first characte r, or the
implemented w ith two levels: a V OH mar k state w hich        previous character has be en completely flushed f rom
represents a ‘1’ data bit, and a VOL space state which         the TS R, the dat a in t he TXR EG is imm ediately
represents a ‘ 0’ dat a bit. N RZ ref ers to t he fact th at   transferred to the TSR register. If the TSR still contains
consecutively tr ansmitted data bit s of t he same value       all or p art of a previous chara cter, the new characte r
stay at the output level of that bit without returning to a    data is held in the TX REG until the S top bit of the
neutral level betw een each bit t ransmission. A n N RZ        previous character has been t ransmitted. The pe nding
transmission port idles in the mark state. Each character      character in the TXR EG is then transferred to the TSR
transmission consists of one Start bit followed by eig ht      in one T CY immediately f ollowing t he Stop bit
or nine data bit s a nd is alw ays ter minated by one or       transmission. The transmission of the Start bit, data bits
more Stop bits. The Start bit is always a space and the        and S top bit sequence commences imm               ediately
Stop bit s ar e alw ays marks. T he m ost com mon da ta        following the transfer of the dat a to the TSR from the
format is 8 bits. Each transmitted bit persists for a period   TXREG.
of 1/(Baud Rate). An on-chip dedicated 8-bit/16-bit Baud
Rate Generator is used to derive st andard baud rate           18.1.1.3      Transmit Data Polarity
frequencies from the s ystem oscillator. See Table 18-5        The polarity of the transmit data can be controlled with
for examples of baud rate configurations.                      the CKTXP bit of the BAUDCON re gister. The default
The EUSART transmits and receives the LSb first. The           state of this bit is ‘0’ which se lects high t rue tr ansmit
EUSART’s tran smitter and receiver are fun ctionally           idle and data bits. Setting the CKTXP bit to ‘1’ will invert
independent, but share the same data format and baud           the transmit data resulting in low true idle and data bits.
rate. Parity is not supported by the hardware, but can         The C KTXP bit controls transmit data polarity only in
be i mplemented in s oftware a nd stored as th e ninth         Asynchronous mode. In Sy nchronous mo de th e
data bit.                                                      CKTXP bit has a different function.
18.1.1      EUSART ASYNCHRONOUS                                18.1.1.4       Transmit Interrupt Flag
            TRANSMITTER                                        The T XIF inter rupt flag bit of the P IR1 reg ister i s set
                                                               whenever the E USART transmitt er is enabled and no
The EU SART tra nsmitter bl ock dia gram is shown in
                                                               character is b eing held for transmission in the TXREG.
Figure 18-1. The hea rt of the tran smitter is th e s erial
                                                               In other words, the TXIF bit is only clear when the TSR
Transmit Shift R egister (TSR ), w hich is no t directly
                                                               is busy with a character and a new character has been
accessible by software. The TSR obtains its data from
                                                               queued for transmission in the TXR EG. The TXI F flag
the transmit buffer, which is the TXREG register.
                                                               bit i s not clear ed immediately upon w riting TXR EG.
18.1.1.1      Enabling the Transmitter                         TXIF becomes valid in the second instr uction cycle
                                                               following the write execution. Polling TXIF immediately
The EUSART transmitter is enabled for asynchronous             following the TXREG write will return invalid results. The
operations by c onfiguring th e fo llowing th ree co ntrol     TXIF bit is read- only, it cannot be set or cleared by
bits:                                                          software.
• TXEN = 1                                                     The TXIF interrupt can be enabled by setting the TXIE
• SYNC = 0                                                     interrupt enable bit of th e PIE1 re gister. However, the
• SPEN = 1                                                     TXIF flag bit will be set whenever the TXREG is empty,
                                                               regardless of the state of TXIE enable bit.
All ot her E USART c ontrol b its are as sumed to be i n
their default state.                                           To use interrupts when transmitting data, set the TXIE
                                                               bit only w hen there is more da ta to send. Clea r the
Setting the TXEN bit of the TXSTA register enables the
                                                               TXIE interrupt enable bit upon writing the last character
transmitter circuitry of the EUSART. Clearing the SYNC
                                                               of the transmission to the TXREG.
bit of the TX STA regist er configur es the EUSART for
asynchronous op eration. Set ting th e SP EN bit of t he
RCSTA register          enables the      EUSART and
automatically configures the TX/CK I/O pin as an output.
If the TX/CK pin is shared with an analog peripheral the
analog I/O function must be disabled by clearing the
corresponding ANSEL bit.
  Note:     The T XIF t ransmitter in terrupt f lag is s et
            when the TXEN enable bit is set.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 239
PIC18F2XK20/4XK20
18.1.1.5        TSR Status                                          18.1.1.7        Asynchronous Transmission Set-up:
The TR MT bit of the TXST A regi ster indicates the                 1.    Initialize the SPBRGH:SPBRG register pair and
status of the TSR register. This is a read-only bit. The                  the BRGH and BRG16 bits to achieve the desired
TRMT bit is set when the TSR register is empty and is                     baud r ate (s ee Section 18.3 “EUSART Baud
cleared w hen a c haracter is t ransferred t o t he T SR                  Rate Generator (BRG)”).
register from the TXREG. The TRMT bit remains clear                 2.    Set the RX/DT and TX/CK TRIS controls to ‘1’.
until all bits have been shifted out of the TSR register.           3.    Enable the asynchronous serial port by clearing
No interrupt logic is tied to this bit, so the user needs to              the SYNC bit and setting the SPEN bit.
poll this bit to determine the TSR status.
                                                                    4.    If 9-bit transmission is desired, set the TX9 con-
  Note:       The TSR re gister i s n ot m apped i n da ta                trol bit. A set ninth data bit will indicate that the 8
              memory, so it is not available to the user.                 Least Significant data bits are an address when
                                                                          the receiver is set for address detection.
18.1.1.6        Transmitting 9-Bit Characters                       5.    Set th e CKTXP c ontrol bi t i f i nverted t ransmit
The EU SART supports 9-bit character transmissions.                       data polarity is desired.
When the TX9 bi t of the TXSTA reg ister is set the                 6.    Enable the tran smission by setting the TXEN
EUSART will shift 9 bits out for each character transmit-                 control bit. This will cause the TXIF interrupt bit
ted. The TX9D bit of th e TXSTA register is the ninth,                    to be set.
and Most Significant, data bit. When transmitting 9-bit             7.    If interrupts are desired, set the TXIE interrupt
data, the TX9D data bit must be written before writing                    enable b it. An in terrupt w ill oc cur immediately
the 8 Least Significant bits into the TXREG. All nine bits                provided that the GIE and PEIE bits of the INT-
of d ata w ill be t ransferred t o t he T SR sh ift r egister             CON register are also set.
immediately after the TXREG is written.
                                                                    8.    If 9 -bit transmission is selected, the ni nth b it
A special 9-bit Address mode is available for use with                    should be loaded into the TX9D data bit.
multiple r eceivers. S ee Section 18.1.2.8 “Address                 9.    Load 8-bit da ta int o the TXR EG register. Thi s
Detection” for more information on the Address mode.                      will start the transmission.
FIGURE 18-3:             ASYNCHRONOUS TRANSMISSION
    Write to TXREG
                            Word 1
        BRG Output
        (Shift Clock)
 RC4/C2OUT/TX/CK
              pin                       Start bit     bit 0     bit 1                     bit 7/8      Stop bit
                                                                 Word 1
           TXIF bit
    (Transmit Buffer                 1 TCY
   Reg. Empty Flag)
          TRMT bit         Word 1
                           Transmit Shift Reg
     (Transmit Shift
   Reg. Empty Flag)
DS41303G-page 240                                                                                    2010 Microchip Technology Inc.
                                                                                        PIC18F2XK20/4XK20
FIGURE 18-4:                   ASYNCHRONOUS TRANSMISSION (BACK-TO-BACK)
     Write to TXREG
                                       Word 1        Word 2
           BRG Output
           (Shift Clock)
 RC4/C2OUT/TX/CK
              pin                                  Start bit       bit 0           bit 1            bit 7/8   Stop bit     Start bit      bit 0
              TXIF bit             1 TCY                                            Word 1                                      Word 2
 (Interrupt Reg. Flag)
                                                               1 TCY
          TRMT bit                    Word 1                                                                  Word 2
     (Transmit Shift                  Transmit Shift Reg
   Reg. Empty Flag)                                                                                           Transmit Shift Reg
   Note:         This timing diagram shows two consecutive transmissions.
TABLE 18-1:                REGISTERS ASSOCIATED WITH ASYNCHRONOUS TRANSMISSION
                                                                                                                                          Reset
    Name                   Bit 7           Bit 6           Bit 5           Bit 4         Bit 3    Bit 2        Bit 1          Bit 0       Values
                                                                                                                                         on page
INTCON               GIE/GIEH PEIE/GIEL                 TMR0IE             INT0IE        RBIE    TMR0IF       INT0IF         RBIF          59
PIR1                  PSPIF(1)             ADIF            RCIF            TXIF         SSPIF    CCP1IF       TMR2IF       TMR1IF          62
PIE1                 PSPIE(1)              ADIE            RCIE            TXIE         SSPIE    CCP1IE       TMR2IE       TMR1IE          62
IPR1                 PSPIP(1)              ADIP            RCIP            TXIP         SSPIP    CCP1IP       TMR2IP       TMR1IP          62
RCSTA                  SPEN                RX9             SREN            CREN        ADDEN     FERR         OERR           RX9D          61
TXREG               EUSART Transmit Register                                                                                               61
TXSTA                  CSRC                TX9             TXEN            SYNC        SENDB     BRGH         TRMT           TX9D          61
BAUDCON              ABDOVF                RCIDL         DTRXP             CKTXP       BRG16       —           WUE          ABDEN          61
SPBRGH              EUSART Baud Rate Generator Register, High Byte                                                                         61
SPBRG               EUSART Baud Rate Generator Register, Low Byte                                                                          61
Legend: — = unimplemented locations read as ‘0’. Shaded cells are not used for asynchronous transmission.
Note 1: Reserved in PIC18F2XK20 devices; always maintain these bits clear.
 2010 Microchip Technology Inc.                                                                                             DS41303G-page 241
PIC18F2XK20/4XK20
18.1.2      EUSART ASYNCHRONOUS                                18.1.2.2        Receiving Data
            RECEIVER                                           The receiver d ata r ecovery circuit i nitiates character
The As ynchronous m ode w ould typically be used i n           reception on the falling edge of the first bit. The first bit,
RS-232 systems. The receiver block diagram is shown            also known as the Start bit, is always a zero. The data
in Figure 18-2. The data is received on the RX/DT pin          recovery circuit counts one-half bit time to the center of
and drives the data recovery block. The data recovery          the Start bit and verifies that the bit is still a zero. If it is
block is actually a hig h-speed sh ifter operating at 16       not a z ero the n the dat a rec overy ci rcuit a borts
times the baud rate, whereas the serial Receive Shift          character re ception, w ithout g enerating an error, an d
Register (RSR) operates at the bit rate. When all 8 or 9       resumes looking for th e falling edge of t he Start bit. If
bits o f th e character ha ve b een s hifted in , t hey a re   the Start b it z ero v erification s ucceeds the n th e dat a
immediately tran sferred t o a tw           o c haracter       recovery circuit counts a full bit time to the center of the
First-In-First-Out (FI FO) m emory. The FIFO b uffering        next bit. The b it is then sampled by a m ajority detect
allows re ception of tw o c omplete c haracters an d th e      circuit and the resulting ‘0’ or ‘1’ is shifted into the RSR.
start of a third character be fore s oftware must start        This repeats until all data bits have been sampled and
servicing the EU SART rec eiver. The FI FO and R SR            shifted into the RSR. One final bit time is measured and
registers are no t directly ac cessible by software.           the level sampled. This is the Stop bit, which is always
Access to the received data is via the RCREG register.         a ‘ 1’. I f th e d ata r ecovery circuit s amples a ‘0’ i n t he
                                                               Stop bit pos ition the n a f raming erro r is se t for thi s
18.1.2.1      Enabling the Receiver                            character, otherwise the framing error is cleared for this
The EU SART rec eiver i s e nabled for a synchronous           character. Se e Section 18.1.2.5 “Receive Framing
operation by configuring the following three control bits:     Error” for more information on framing errors.
• CREN = 1                                                     Immediately af ter al l dat a bits and the S top bi t have
                                                               been received, the character in the RSR is transferred
• SYNC = 0
                                                               to the EUSART rec eive FIFO and the RC IF in terrupt
• SPEN = 1                                                     flag bit of the PIR1 register is set. The top character in
All ot her E USART c ontrol b its are as sumed to be i n       the FIFO is transferred out of the FIFO by reading the
their default state.                                           RCREG register.
Setting the CREN bit of the RCSTA register enables the           Note:       If the receive FIFO is overrun, no additional
receiver circuitry of the EUSART. Clearing the SYNC bit                      characters will be received until the overrun
of t he TX STA r egister configur es the EUSART for                          condition is cleared. S ee Section 18.1.2.6
asynchronous op eration. Set ting th e SP EN b it of t he                    “Receive Overrun Error” for m             ore
RCSTA register enables t he EUSART. The RX/DT I/O                            information on overrun errors.
pin must be confi gured as an inpu t by set ting t he
corresponding TR IS contr ol bit. If the R X/DT pi n is        18.1.2.3        Receive Data Polarity
shared with an analog peripheral the analog I/O function       The polarity of the receive data can be controlled with
must be disabled by clearing the corresponding ANSEL           the DTRXP bit of the BAUDCON register. The default
bit.                                                           state of this bit is ‘0’ which selects high true receive idle
                                                               and data bits. Setting the DTRXP bit to ‘1’ will invert the
                                                               receive data resulting in low true idle and data bits. The
                                                               DTRXP bit controls receive data polarity only in Asyn-
                                                               chronous mode. In synchronous mode the DTRXP bit
                                                               has a different function.
DS41303G-page 242                                                                           2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
18.1.2.4      Receive Interrupts                               18.1.2.7       Receiving 9-bit Characters
The RCIF interrupt flag bit of the PIR1 register is set        The EUSART supports 9-bit character reception. When
whenever the EUSART receiver is enabled and there is           the RX9 bit of the RCSTA register is set, the EUSART
an un read ch aracter i n th e rec eive FIFO. Th e R CIF       will s hift 9 bits i nto the RSR for e ach c haracter
interrupt flag bit is read-only, it cannot be set or cleared   received. T he RX9D b it of the R CSTA r egister i s the
by software.                                                   ninth an d M ost Sig nificant dat a b it o f th e to p u nread
RCIF inte rrupts are enabled by setting the foll owing         character in the receive FIFO. When reading 9-bit data
bits:                                                          from the receive FIFO buffer, the R X9D data bit must
                                                               be read before reading the 8 Least Significant bits from
• RCIE interrupt enable bit of the PIE1 register               the RCREG.
• PEIE peripheral interrupt enable bit of the INT-
  CON register                                                 18.1.2.8       Address Detection
• GIE global interrupt enable bit of the INTCON                A special Address Detection mode is available for use
  register                                                     when multiple receivers share the same transmission
The RCIF interrupt flag bit will be set when there is an       line, such as in RS-485 systems. Address detection is
unread character in the FIFO, regardless of the state of       enabled by s etting the AD DEN bi t o f th e R CSTA
interrupt enable bits.                                         register.
                                                               Address detection req uires 9 -bit ch aracter rec eption.
18.1.2.5      Receive Framing Error                            When a ddress detection i s enabled, o nly characters
Each ch aracter in the rec eive FIFO b uffer h as a            with t he n inth da ta bit se t w ill be t ransferred t o t he
corresponding framing error Status bit. A framing error        receive FIFO buffer, thereby setting the RCIF interrupt
indicates that a Stop bit was not seen at the expected         bit. All other characters will be ignored.
time. Th e framing error sta tus is ac cessed vi a t he        Upon re ceiving an address c haracter, user s oftware
FERR bi t of t he R CSTA register. T he F ERR bi t             determines if the add ress matches its ow n. U pon
represents the status of the top unread character in the       address ma tch, u ser so ftware mu st disable a ddress
receive F IFO. Therefore, t he F ERR bi t mu st be r ead       detection by clearing the AD DEN bit be fore the nex t
before reading the RCREG.                                      Stop bit occurs. When user software detects the end of
The FERR bit is read-only and only applies to the top          the mes sage, determined by the me ssage protocol
unread character in the receive FIFO. A framing error          used, so ftware pla ces th e rec eiver b ack in to th e
(FERR = 1) does not preclude reception of additional           Address Detection mode by setting the ADDEN bit.
characters. It is not necessary to cl ear the FERR bit.
Reading the next ch aracter from the FIFO bu ffer will
advance the FIFO to th e next character and the next
corresponding framing error.
The FERR bit can be forced clear by clearing the SPEN
bit of the RCSTA reg ister w hich res ets the EU SART.
Clearing the CREN bit of the RCSTA register does not
affect the FERR bit. A framing error by itself does not
generate an interrupt.
  Note:     If al l re ceive c haracters i n th e receive
            FIFO have framing errors, repeated reads
            of the RCREG will not clear the FERR bit.
18.1.2.6      Receive Overrun Error
The receive FIFO buffer can hold two characters. An
overrun error will be generated If a third character, in its
entirety, is received before the FIFO is accessed. When
this ha ppens the OERR b it o f th e R CSTA reg ister i s
set. The characters already in the FIFO buffer can be
read but no additional characters will be received until
the error is cleared. The error must be cleared by either
clearing th e C REN bi t of the RCSTA re gister or b y
resetting the EUSART by clearing the SPEN bit of the
RCSTA register.
 2010 Microchip Technology Inc.                                                                       DS41303G-page 243
PIC18F2XK20/4XK20
18.1.2.9      Asynchronous Reception Set-up:              18.1.2.10       9-bit Address Detection Mode Set-up
1.  Initialize the SPBRGH:SPBRG register pair and         This mode would typically be used in RS-485 systems.
    the B RGH and BRG16 b its t o achieve t he            To set up a n As ynchronous R eception with Address
    desired baud rate (see Section 18.3 “EUSART           Detect Enable:
    Baud Rate Generator (BRG)”).                          1.    Initialize the SPBRGH, SPBRG register pair and
2. Set the RX/DT and TX/CK TRIS controls to ‘1’.                the BR GH and BR G16 bit s to achieve th e
3. Enable the serial po rt by s etting th e SPEN bit            desired baud rate (see Section 18.3 “EUSART
    and the RX/DT pin TRIS bit. The SYNC bit must               Baud Rate Generator (BRG)”).
    be clear for asynchronous operation.                  2.    Set the RX/DT and TX/CK TRIS controls to ‘1’.
4. If interrupts are desired, set the RCIE interrupt      3.    Enable the serial port by setting the SPEN bit.
    enable bit and set the GIE and PEIE bits of the             The S YNC b it must b e clear f or asynchronous
    INTCON register.                                            operation.
5. If 9-bit reception is desired, set the RX9 bit.        4.    If interrupts are desired, set the RCIE interrupt
6. Set th e D TRXP if inverted r eceive p olarity i s           enable bit and set the GIE and PEIE bits of the
    desired.                                                    INTCON register.
7. Enable reception by setting the CREN bit.              5.    Enable 9-bit reception by setting the RX9 bit.
8. The R CIF i nterrupt flag bit w ill b e se t w hen a   6.    Enable address detection by setting the ADDEN
    character is transferred fro m the RSR to the               bit.
    receive buffer. An interrupt w ill be generated if    7.    Set th e D TRXP if i nverted re ceive p olarity i s
    the RCIE interrupt enable bit was also set.                 desired.
9. Read the RCSTA register to get the error flags         8.    Enable reception by setting the CREN bit.
    and, if 9-bit data reception is enabled, the ninth    9.    The R CIF i nterrupt fl ag bit w ill b e se t w hen a
    data bit.                                                   character w ith the ni nth b it se t is tra nsferred
10. Get the rec eived 8 L east S ignificant d ata bits          from the RSR to the receive buffer. An interrupt
    from the receive buffer by reading the RCREG                will be generated if the RCIE interrupt enable bit
    register.                                                   was also set.
11. If an overrun occurred, clear the OERR flag by        10.   Read the RCSTA register to get the error flags.
    clearing the CREN receiver enable bit.                      The ninth data bit will always be set.
                                                          11.   Get the received 8 L east Si gnificant da ta bits
                                                                from the receive buffer by reading the RCREG
                                                                register. Software det ermines if this is th e
                                                                device’s address.
                                                          12.   If an overrun occurred, clear the OERR flag by
                                                                clearing the CREN receiver enable bit.
                                                          13.   If th e de vice h as been addressed, cl ear th e
                                                                ADDEN bi t to al low a ll re ceived da ta in to th e
                                                                receive buffer and generate interrupts.
DS41303G-page 244                                                                     2010 Microchip Technology Inc.
                                                                                   PIC18F2XK20/4XK20
FIGURE 18-5:                    ASYNCHRONOUS RECEPTION
                                Start                                     Start                             Start
     RX/DT pin                  bit   bit 0   bit 1       bit 7/8 Stop     bit    bit 0      bit 7/8 Stop     bit         bit 7/8 Stop
                                                                   bit                                bit                           bit
     Rcv Shift
     Reg
     Rcv Buffer Reg
                                                                         Word 1              Word 2
                                                                         RCREG               RCREG
        RCIDL
     Read Rcv
     Buffer Reg
     RCREG
     RCIF
     (Interrupt Flag)
     OERR bit
     CREN
     Note:        This timing diagram shows three words appearing on the RX input. The RCREG (receive buffer) is read after the third word,
                  causing the OERR (overrun) bit to be set.
TABLE 18-2:             REGISTERS ASSOCIATED WITH ASYNCHRONOUS RECEPTION
                                                                                                                                           Reset
    Name                Bit 7            Bit 6         Bit 5        Bit 4            Bit 3     Bit 2          Bit 1        Bit 0           Values
                                                                                                                                          on page
INTCON            GIE/GIEH PEIE/GIEL                  TMR0IE      INT0IE            RBIE     TMR0IF          INT0IF       RBIF              59
PIR1               PSPIF(1)             ADIF           RCIF         TXIF           SSPIF     CCP1IF         TMR2IF      TMR1IF              62
PIE1              PSPIE(1)              ADIE           RCIE         TXIE           SSPIE     CCP1IE         TMR2IE      TMR1IE              62
IPR1              PSPIP(1)              ADIP           RCIP         TXIP           SSPIP     CCP1IP         TMR2IP      TMR1IP              62
RCSTA               SPEN                 RX9          SREN         CREN           ADDEN       FERR           OERR         RX9D              61
RCREG             EUSART Receive Register                                                                                                   61
TRISC              TRISC7              TRISC6         TRISC5      TRISC4          TRISC3     TRISC2         TRISC1       TRISC0             62
TXSTA               CSRC                 TX9          TXEN         SYNC           SENDB       BRGH           TRMT         TX9D              61
BAUDCON           ABDOVF               RCIDL          DTRXP       CKTXP            BRG16        —             WUE        ABDEN              61
SPBRGH            EUSART Baud Rate Generator Register, High Byte                                                                            61
SPBRG             EUSART Baud Rate Generator Register, Low Byte                                                                             61
Legend: — = unimplemented locations read as ‘0’. Shaded cells are not used for asynchronous reception.
Note 1: Reserved in PIC18F2XK20 devices; always maintain these bits clear.
 2010 Microchip Technology Inc.                                                                                          DS41303G-page 245
PIC18F2XK20/4XK20
18.2       Clock Accuracy with                                        The fir st (preferred) method uses the O      SCTUNE
           Asynchronous Operation                                     register to adjust the H FINTOSC output. Adjusting the
                                                                      value in the OSCTUNE register allows for fine resolution
The factory calibrates the internal oscillator block out-             changes to the s ystem clock source. See Section 2.5
put (HFINTOSC). However, the HFINTOSC frequency                       “Internal Clock Modes” for more information.
may dri ft as V DD or te mperature c hanges, and thi s
                                                                      The other method adjusts the value in the Baud Rate
directly affects the asynchronous baud rate. Two meth-
                                                                      Generator. Th is can be d one auto matically with th e
ods may be used to adjust the baud rate clock, but both
                                                                      Auto-Baud D etect fe ature (s ee Section 18.3.1
require a reference clock source of some kind.
                                                                      “Auto-Baud Detect”). There may not be fine enough
                                                                      resolution when adjusting the Baud Rate Generator to
                                                                      compensate fo r a g radual ch ange i n th e pe ripheral
                                                                      clock frequency.
REGISTER 18-1:             TXSTA: TRANSMIT STATUS AND CONTROL REGISTER
        R/W-0           R/W-0             R/W-0           R/W-0       R/W-0              R/W-0          R-1             R/W-0
        CSRC             TX9            TXEN(1)           SYNC       SENDB               BRGH          TRMT             TX9D
bit 7                                                                                                                          bit 0
Legend:
R = Readable bit                     W = Writable bit             U = Unimplemented bit, read as ‘0’
-n = Value at POR                    ‘1’ = Bit is set             ‘0’ = Bit is cleared             x = Bit is unknown
bit 7               CSRC: Clock Source Select bit
                    Asynchronous mode:
                    Don’t care
                    Synchronous mode:
                    1 = Master mode (clock generated internally from BRG)
                    0 = Slave mode (clock from external source)
bit 6               TX9: 9-bit Transmit Enable bit
                    1 = Selects 9-bit transmission
                    0 = Selects 8-bit transmission
bit 5               TXEN: Transmit Enable bit(1)
                    1 = Transmit enabled
                    0 = Transmit disabled
bit 4               SYNC: EUSART Mode Select bit
                    1 = Synchronous mode
                    0 = Asynchronous mode
bit 3               SENDB: Send Break Character bit
                    Asynchronous mode:
                    1 = Send Sync Break on next transmission (cleared by hardware upon completion)
                    0 = Sync Break transmission completed
                    Synchronous mode:
                    Don’t care
bit 2               BRGH: High Baud Rate Select bit
                    Asynchronous mode:
                    1 = High speed
                    0 = Low speed
                    Synchronous mode:
                    Unused in this mode
bit 1               TRMT: Transmit Shift Register Status bit
                    1 = TSR empty
                    0 = TSR full
bit 0               TX9D: Ninth bit of Transmit Data
                    Can be address/data bit or a parity bit.
Note 1:         SREN/CREN overrides TXEN in Sync mode.
DS41303G-page 246                                                                                 2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
REGISTER 18-2:         RCSTA: RECEIVE STATUS AND CONTROL REGISTER(1)
    R/W-0           R/W-0              R/W-0          R/W-0         R/W-0            R-0        R-0              R-x
     SPEN            RX9               SREN           CREN          ADDEN            FERR      OERR           RX9D
bit 7                                                                                                                  bit 0
Legend:
R = Readable bit                   W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set           ‘0’ = Bit is cleared          x = Bit is unknown
bit 7            SPEN: Serial Port Enable bit
                 1 = Serial port enabled (configures RX/DT and TX/CK pins as serial port pins)
                 0 = Serial port disabled (held in Reset)
bit 6            RX9: 9-bit Receive Enable bit
                 1 = Selects 9-bit reception
                 0 = Selects 8-bit reception
bit 5            SREN: Single Receive Enable bit
                 Asynchronous mode:
                 Don’t care
                 Synchronous mode – Master:
                 1 = Enables single receive
                 0 = Disables single receive
                 This bit is cleared after reception is complete.
                 Synchronous mode – Slave
                 Don’t care
bit 4            CREN: Continuous Receive Enable bit
                 Asynchronous mode:
                 1 = Enables receiver
                 0 = Disables receiver
                 Synchronous mode:
                 1 = Enables continuous receive until enable bit CREN is cleared (CREN overrides SREN)
                 0 = Disables continuous receive
bit 3            ADDEN: Address Detect Enable bit
                 Asynchronous mode 9-bit (RX9 = 1):
                 1 = Enables address detection, enable interrupt and load the receive buffer when RSR<8> is set
                 0 = Disables address detection, all bytes are received and ninth bit can be used as parity bit
                 Asynchronous mode 8-bit (RX9 = 0):
                 Don’t care
bit 2            FERR: Framing Error bit
                 1 = Framing error (can be updated by reading RCREG register and receive next valid byte)
                 0 = No framing error
bit 1            OERR: Overrun Error bit
                 1 = Overrun error (can be cleared by clearing bit CREN)
                 0 = No overrun error
bit 0            RX9D: Ninth bit of Received Data
                 This can be address/data bit or a parity bit and must be calculated by user firmware.
 2010 Microchip Technology Inc.                                                                      DS41303G-page 247
PIC18F2XK20/4XK20
REGISTER 18-3:        BAUDCON: BAUD RATE CONTROL REGISTER
        R/W-0        R-1            R/W-0          R/W-0          R/W-0               U-0           R/W-0           R/W-0
   ABDOVF           RCIDL          DTRXP           CKTXP          BRG16               —             WUE             ABDEN
bit 7                                                                                                                    bit 0
Legend:
R = Readable bit                W = Writable bit               U = Unimplemented bit, read as ‘0’
-n = Value at POR               ‘1’ = Bit is set               ‘0’ = Bit is cleared            x = Bit is unknown
bit 7           ABDOVF: Auto-Baud Detect Overflow bit
                Asynchronous mode:
                1 = Auto-baud timer overflowed
                0 = Auto-baud timer did not overflow
                Synchronous mode:
                Don’t care
bit 6           RCIDL: Receive Idle Flag bit
                Asynchronous mode:
                1 = Receiver is Idle
                0 = Start bit has been detected and the receiver is active
                Synchronous mode:
                Don’t care
bit 5           DTRXP: Data/Receive Polarity Select bit
                Asynchronous mode:
                1 = Receive data (RX) is inverted (active-low)
                0 = Receive data (RX) is not inverted (active-high)
                Synchronous mode:
                1 = Data (DT) is inverted (active-low)
                0 = Data (DT) is not inverted (active-high)
bit 4           CKTXP: Clock/Transmit Polarity Select bit
                Asynchronous mode:
                1 = Idle state for transmit (TX) is low
                0 = Idle state for transmit (TX) is high
                Synchronous mode:
                1 = Data changes on the falling edge of the clock and is sampled on the rising edge of the clock
                0 = Data changes on the rising edge of the clock and is sampled on the falling edge of the clock
bit 3           BRG16: 16-bit Baud Rate Generator bit
                1 = 16-bit Baud Rate Generator is used (SPBRGH:SPBRG)
                0 = 8-bit Baud Rate Generator is used (SPBRG)
bit 2           Unimplemented: Read as ‘0’
bit 1           WUE: Wake-up Enable bit
                Asynchronous mode:
                1 = Re ceiver is waiting for a falling edge. No character will be received but RCIF will be set on the falling
                    edge. WUE will automatically clear on the rising edge.
                0 = Receiver is operating normally
                Synchronous mode:
                Don’t care
bit 0           ABDEN: Auto-Baud Detect Enable bit
                Asynchronous mode:
                1 = Auto-Baud Detect mode is enabled (clears when auto-baud is complete)
                0 = Auto-Baud Detect mode is disabled
                Synchronous mode:
                Don’t care
DS41303G-page 248                                                                             2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
18.3       EUSART Baud Rate Generator                              If the system clock is changed during an active receive
           (BRG)                                                   operation, a receive error or dat a loss may result. To
                                                                   avoid this problem, check the status of the RCIDL bit to
The Baud Rate Generator (BRG) is an 8-bit or 1 6-bit               make sure that the rec eive ope ration is Idl e before
timer that is dedicated to the support of both the                 changing the system clock.
asynchronous and sy nchronous EU SART o peration.
By default, the BRG operates in 8-bit mode. Setting the            EXAMPLE 18-1:                                  CALCULATING BAUD
BRG16 b it o f t he BAUDCON re gister se lects 1 6-bit                                                            RATE ERROR
mode.
                                                                       For a device with FOSC of 16 MHz, desired baud rate
The S PBRGH:SPBRG r egister pair determines the                        of 9600, Asynchronous mode, 8-bit BRG:
period of the     free running baud rate ti mer. In
                                                                                                                         F OS C
Asynchronous m ode the m ultiplier of the baud rate                      Desired Baud Rate = ---------------------------------------------------------------------
                                                                                             64  [SPBRGH:SPBRG] + 1 
period is determined by both the BRGH bit of the TXSTA
register and the BRG16 bit of the BAUDCON register. In                 Solving for SPBRGH:SPBRG:
Synchronous mode, the BRGH bit is ignored.
                                                                                                                            FOSC
                                                                                                            ---------------------------------------------
Table 18-3 contains the fo rmulas fo r dete rmining th e                                                    Desired Baud Rate
                                                                                                        X = --------------------------------------------- – 1
baud rate. Example 18-1 provides a sample calculation                                                                           64
for determining the baud rate and baud rate error.                                                              16000000
                                                                                                                ------------------------
Typical b aud rate s a nd e rror v alues for various                                                                  9600
                                                                                                              = ------------------------ – 1
asynchronous mo des have bee n co mputed for yo ur                                                                       64
convenience and are shown in Table 18-5. It may be                                                            =  25.042  = 25
advantageous to use the high baud rate (BRGH = 1),
or the 16-bit BRG (BRG16 = 1) to reduce the baud rate                                       16000000
                                                                   Calculated Baud Rate = ---------------------------
                                                                                          64  25 + 1 
error. Th e 16 -bit BR G mo de is us ed to achieve sl ow
baud rates for fast oscillator frequencies.                                                                   = 9615
Writing a new value to the SPBRGH, SPBRG register
                                                                                                     Calc. Baud Rate – Desired Baud Rate
pair causes the BRG timer to be reset (or cleared). This                                     Error = --------------------------------------------------------------------------------------------
                                                                                                                            Desired Baud Rate
ensures that the BRG does not wait for a timer overflow
before outputting the new baud rate.                                                                             9615 – 9600 
                                                                                                              = ---------------------------------- = 0.16%
                                                                                                                           9600
TABLE 18-3:        BAUD RATE FORMULAS
             Configuration Bits
                                                        BRG/EUSART Mode                                                      Baud Rate Formula
    SYNC           BRG16             BRGH
       0                0             0                  8-bit/Asynchronous                                                       FOSC/[64 (n+1)]
       0                0             1                  8-bit/Asynchronous
                                                                                                                                  FOSC/[16 (n+1)]
       0                1             0                 16-bit/Asynchronous
       0                1             1                 16-bit/Asynchronous
       1                0             x                  8-bit/Synchronous                                                          FOSC/[4 (n+1)]
       1                1             x                 16-bit/Synchronous
Legend:     x = Don’t care, n = value of SPBRGH, SPBRG register pair
TABLE 18-4:        REGISTERS ASSOCIATED WITH BAUD RATE GENERATOR
                                                                                                                                                            Reset Values
   Name         Bit 7        Bit 6        Bit 5      Bit 4       Bit 3             Bit 2                   Bit 1                     Bit 0
                                                                                                                                                              on page
TXSTA           CSRC         TX9          TXEN      SYNC       SENDB             BRGH                     TRMT                      TX9D                                  61
RCSTA           SPEN         RX9          SREN      CREN       ADDEN              FERR                   OERR                       RX9D                                  61
BAUDCON ABDOVF              RCIDL         DTRXP    CKTXP        BRG16                 —                    WUE                    ABDEN                                   61
SPBRGH        EUSART Baud Rate Generator Register, High Byte                                                                                                              61
SPBRG         EUSART Baud Rate Generator Register, Low Byte                                                                                                               61
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used by the BRG.
 2010 Microchip Technology Inc.                                                                                                                  DS41303G-page 249
PIC18F2XK20/4XK20
TABLE 18-5:         BAUD RATES FOR ASYNCHRONOUS MODES
                                                   SYNC = 0, BRGH = 0, BRG16 = 0
             FOSC = 64.000 MHz              FOSC = 18.432 MHz            FOSC = 16.000 MHz            FOSC = 11.0592 MHz
 BAUD
 RATE                         SPBRG                        SPBRG                        SPBRG                         SPBRG
          Actual     %                   Actual    %                  Actual    %                   Actual    %
                               value                        value                        value                         value
           Rate     Error                 Rate    Error                Rate    Error                 Rate    Error
                             (decimal)                    (decimal)                    (decimal)                     (decimal)
  300       —         —         —         —        —         —          —       —         —           —        —        —
  1200      —         —         —        1200     0.00      239       1202     0.16      207        1200      0.00      143
  2400      —         —         —        2400     0.00      119       2404     0.16      103        2400      0.00      71
  9600     9615      0.16      103       9600     0.00       29       9615     0.16       25        9600      0.00      17
 10417    10417      0.00       95       10286    -1.26      27       10417    0.00       23        10165    -2.42      16
 19.2k    19.23k     0.16       51       19.20k   0.00       14       19.23k   0.16       12        19.20k    0.00       8
 57.6k    58.82k     2.12       16       57.60k   0.00       7          —       —         —         57.60k    0.00       2
 115.2k   111.11k    -3.55      8          —       —         —          —       —         —           —        —        —
                                                   SYNC = 0, BRGH = 0, BRG16 = 0
              FOSC = 8.000 MHz              FOSC = 4.000 MHz             FOSC = 3.6864 MHz              FOSC = 1.000 MHz
 BAUD
 RATE                         SPBRG                        SPBRG                        SPBRG                         SPBRG
          Actual     %                   Actual    %                  Actual    %                   Actual    %
                               value                        value                        value                         value
           Rate     Error                 Rate    Error                Rate    Error                 Rate    Error
                             (decimal)                    (decimal)                    (decimal)                     (decimal)
  300       —         —         —         300     0.16      207        300     0.00      191         300      0.16      51
  1200     1202      0.16      103       1202     0.16       51       1200     0.00       47        1202      0.16      12
  2400     2404      0.16       51       2404     0.16       25       2400     0.00       23          —        —        —
  9600     9615      0.16       12        —        —         —        9600     0.00       5           —        —        —
 10417    10417      0.00       11       10417    0.00       5          —       —         —           —        —        —
 19.2k      —         —         —          —       —         —        19.20k   0.00       2           —        —        —
 57.6k      —         —         —          —       —         —        57.60k   0.00       0           —        —        —
 115.2k     —         —         —         —        —         —          —       —         —           —        —        —
                                                   SYNC = 0, BRGH = 1, BRG16 = 0
 BAUD        FOSC = 64.000 MHz              FOSC = 18.432 MHz            FOSC = 16.000 MHz            FOSC = 11.0592 MHz
 RATE                         SPBRG                        SPBRG                        SPBRG                         SPBRG
          Actual     %                   Actual    %                  Actual    %                   Actual    %
                               value                        value                        value                         value
           Rate     Error                 Rate    Error                Rate    Error                 Rate    Error
                             (decimal)                    (decimal)                    (decimal)                     (decimal)
  300       —         —         —          —       —         —          —       —         —           —        —        —
  1200      —         —         —          —       —         —          —       —         —           —        —        —
  2400      —         —         —          —       —         —          —       —         —           —        —        —
  9600      —         —         —        9600     0.00      119       9615     0.16      103        9600      0.00      71
 10417      —         —         —        10378    -0.37     110       10417    0.00       95        10473     0.53      65
 19.2k    19.23k     0.16      207       19.20k   0.00       59       19.23k   0.16       51        19.20k    0.00      35
 57.6k    57.97k     0.64       68       57.60k   0.00       19       58.82k   2.12       16        57.60k    0.00      11
 115.2k   114.29k    -0.79      34       115.2k   0.00       9        111.1k   -3.55      8         115.2k    0.00       5
DS41303G-page 250                                                                               2010 Microchip Technology Inc.
                                                                      PIC18F2XK20/4XK20
TABLE 18-5:         BAUD RATES FOR ASYNCHRONOUS MODES (CONTINUED)
                                                   SYNC = 0, BRGH = 1, BRG16 = 0
 BAUD         FOSC = 8.000 MHz              FOSC = 4.000 MHz             FOSC = 3.6864 MHz             FOSC = 1.000 MHz
 RATE                       SPBRG                          SPBRG                         SPBRG                          SPBRG
           Actual    %                   Actual    %                  Actual     %                  Actual      %
                             value                          value                         value                          value
            Rate   Error                  Rate    Error                Rate     Error                Rate      Error
                           (decimal)                      (decimal)                     (decimal)                      (decimal)
  300        —        —         —         —        —         —          —        —         —        300        0.16      207
  1200       —        —         —        1202     0.16      207        1200     0.00      191       1202       0.16      51
  2400     2404      0.16      207       2404     0.16      103        2400     0.00       95       2404       0.16       25
  9600     9615      0.16       51       9615     0.16       25        9600     0.00       23         —         —         —
 10417     10417     0.00       47       10417    0.00       23       10473     0.53       21       10417      0.00       5
  19.2k    19231     0.16       25       19.23k   0.16       12       19.2k     0.00       11         —         —         —
  57.6k    55556     -3.55         8       —       —         —        57.60k    0.00       3          —         —         —
 115.2k      —        —         —          —       —         —        115.2k    0.00       1          —         —         —
                                                   SYNC = 0, BRGH = 0, BRG16 = 1
 BAUD         FOSC = 64.000 MHz             FOSC = 18.432 MHz            FOSC = 16.000 MHz            FOSC = 11.0592 MHz
 RATE                        SPBRGH                       SPBRGH                        SPBRGH                         SPBRGH
           Actual    %                   Actual    %                  Actual     %                  Actual      %
                              :SPBRG                       :SPBRG                        :SPBRG                         :SPBRG
            Rate    Error                 Rate    Error                Rate     Error                Rate      Error
                             (decimal)                    (decimal)                     (decimal)                      (decimal)
  300      300.0     0.00     13332      300.0    0.00      3839      300.03    0.01      3332      300.0      0.00      2303
  1200     1200.1    0.01      3332      1200     0.00      959       1200.5    0.04      832       1200       0.00      575
  2400     2399      -0.02     1666      2400     0.00      479        2398     -0.08     416       2400       0.00      287
  9600     9592      -0.08     416       9600     0.00      119        9615     0.16      103       9600       0.00       71
 10417     10417     0.00      383       10378    -0.37     110       10417     0.00       95       10473      0.53       65
  19.2k    19.23k    0.16      207       19.20k   0.00       59       19.23k    0.16       51       19.20k     0.00       35
  57.6k    57.97k    0.64       68       57.60k   0.00       19       58.82k    2.12       16       57.60k     0.00       11
 115.2k   114.29k    -0.79      34       115.2k   0.00       9        111.11k   -3.55      8        115.2k     0.00       5
                                                   SYNC = 0, BRGH = 0, BRG16 = 1
 BAUD         FOSC = 8.000 MHz              FOSC = 4.000 MHz             FOSC = 3.6864 MHz             FOSC = 1.000 MHz
 RATE                        SPBRGH                       SPBRGH                        SPBRGH                         SPBRGH
           Actual    %                   Actual    %                  Actual     %                  Actual      %
                              :SPBRG                       :SPBRG                        :SPBRG                         :SPBRG
            Rate    Error                 Rate    Error                Rate     Error                Rate      Error
                             (decimal)                    (decimal)                     (decimal)                      (decimal)
  300      299.9     -0.02     1666      300.1    0.04      832       300.0     0.00      767       300.5      0.16      207
  1200     1199      -0.08     416       1202     0.16      207        1200     0.00      191       1202       0.16       51
  2400     2404      0.16      207       2404     0.16      103        2400     0.00       95       2404       0.16       25
  9600     9615      0.16       51       9615     0.16       25        9600     0.00       23         —         —         —
 10417     10417     0.00       47       10417    0.00       23       10473     0.53       21       10417      0.00       5
  19.2k    19.23k    0.16       25       19.23k   0.16       12       19.20k    0.00       11         —         —         —
  57.6k    55556     -3.55         8       —       —         —        57.60k    0.00       3          —         —         —
 115.2k      —        —         —          —       —         —        115.2k    0.00       1          —         —         —
 2010 Microchip Technology Inc.                                                                             DS41303G-page 251
PIC18F2XK20/4XK20
TABLE 18-5:         BAUD RATES FOR ASYNCHRONOUS MODES (CONTINUED)
                                         SYNC = 0, BRGH = 1, BRG16 = 1 or SYNC = 1, BRG16 = 1
 BAUD        FOSC = 64.000 MHz               FOSC = 18.432 MHz            FOSC = 16.000 MHz             FOSC = 11.0592 MHz
 RATE                        SPBRGH                        SPBRGH                        SPBRGH                        SPBRGH
          Actual     %                    Actual    %                  Actual     %                   Actual    %
                              :SPBRG                        :SPBRG                        :SPBRG                        :SPBRG
           Rate     Error                  Rate    Error                Rate     Error                 Rate    Error
                             (decimal)                     (decimal)                     (decimal)                     (decimal)
  300      300       0.00     53332       300.0    0.00     15359       300.0    0.00     13332       300.0     0.00     9215
  1200     1200      0.00     13332       1200     0.00      3839      1200.1    0.01     3332        1200      0.00     2303
  2400     2400      0.00      6666        2400    0.00      1919      2399.5    -0.02     1666       2400      0.00     1151
  9600    9598.1     -0.02     1666        9600    0.00      479        9592     -0.08     416         9600     0.00      287
 10417    10417      0.00      1535       10425    0.08      441       10417     0.00      383        10433     0.16      264
 19.2k    19.21k     0.04      832        19.20k   0.00      239       19.23k    0.16      207        19.20k    0.00      143
 57.6k    57.55k     -0.08     277        57.60k   0.00       79       57.97k    0.64       68        57.60k    0.00      47
 115.2k   115.11k    -0.08     138        115.2k   0.00       39       114.29k   -0.79      34        115.2k    0.00      23
                                         SYNC = 0, BRGH = 1, BRG16 = 1 or SYNC = 1, BRG16 = 1
 BAUD         FOSC = 8.000 MHz                FOSC = 4.000 MHz            FOSC = 3.6864 MHz               FOSC = 1.000 MHz
 RATE                        SPBRGH                        SPBRGH                        SPBRGH                        SPBRGH
          Actual     %                    Actual    %                  Actual     %                   Actual    %
                              :SPBRG                        :SPBRG                        :SPBRG                        :SPBRG
           Rate     Error                  Rate    Error                Rate     Error                 Rate    Error
                             (decimal)                     (decimal)                     (decimal)                     (decimal)
  300     300.0      0.00      6666       300.0    0.01      3332      300.0     0.00      3071       300.1     0.04      832
  1200     1200      -0.02     1666        1200    0.04      832        1200     0.00      767         1202     0.16      207
  2400     2401      0.04      832         2398    0.08      416        2400     0.00      383         2404     0.16      103
  9600     9615      0.16      207         9615    0.16      103        9600     0.00       95         9615     0.16      25
 10417    10417      0.00      191        10417    0.00       95       10473     0.53       87        10417     0.00      23
 19.2k    19.23k     0.16      103        19.23k   0.16       51       19.20k    0.00       47        19.23k    0.16      12
 57.6k    57.14k     -0.79      34        58.82k   2.12       16       57.60k    0.00       15          —        —        —
 115.2k   117.6k     2.12       16        111.1k   -3.55      8        115.2k    0.00       7           —        —        —
DS41303G-page 252                                                                                 2010 Microchip Technology Inc.
                                                                               PIC18F2XK20/4XK20
18.3.1        AUTO-BAUD DETECT                                             and SPBRG registers a re clocked at 1/ 8th th e BRG
                                                                           base clock rate. The resulting byte measurement is the
The EUSART m odule s upports a utomatic de tection
                                                                           average bit time when clocked at full speed.
and calibration of the baud rate.
In the Auto-Baud Detect (ABD) mode, the clock to the                            Note 1: If the WUE bit is set with the ABDEN bit,
BRG i s reversed. Rat her than the BRG c locking th e                                   auto-baud detection will occur on the byte
incoming RX signal, the RX signal is timing the BRG.                                    following th e Bre ak character (se e
The Baud Rate Generator is used to time the period of                                   Section 18.3.3     “Auto-Wake-up       on
a received 55h (ASCII “U”) which is the Sync character                                  Break”).
for the LIN bus. The unique feature of this character is                               2: It is up to the user to deter mine that the
that it has five rising edges including the Stop bit edge.                                incoming character baud rate is within the
Setting the ABDEN bit of the BAUDCON register starts                                      range of th e select ed B RG clo ck sour ce.
the au to-baud cal ibration s equence (Fi gure 18.3.2).                                   Some combinations of oscillator frequency
While t he A BD s equence ta kes p lace, t he E USART                                     and EUSART baud rates are not possible.
state machine is held in Idle. On the first rising edge of                             3: During th e auto-baud process,         the
the receive line, after the Start bit, the SPBRG begins                                   auto-baud counter st arts count ing at 1 .
counting up using the BRG counter clock as shown in                                       Upon comple tion of t he aut o-baud
Table 18-6. The fifth rising edge will occur on the RX pin                                sequence, to achieve maximum a ccuracy,
at the en d of the eig hth b it per iod. At that ti me, an                                subtract 1 fr om the SPBRGH:SPBRG
accumulated value t otaling the prop er BR G peri od i s                                  register pair.
left in the SPBRGH:SPBRG register pair, the ABDEN
bit is automatically cleared, and the RCIF interrupt flag                  TABLE 18-6:              BRG COUNTER CLOCK RATES
is set. A read o peration on the RCREG n eeds t o b e
                                                                                                       BRG Base             BRG ABD
performed to clear the RCIF interrupt. RCREG content                           BRG16      BRGH
                                                                                                         Clock               Clock
should be discarded. When calibrating for modes that
do not use the SPBRGH register the us er c an v erify                            0              0        FOSC/64             FOSC/512
that the SPBRG register did not overflow by checking
for 00h in the SPBRGH register.                                                  0              1        FOSC/16             FOSC/128
The BRG auto-baud clock is determined by the BRG16                               1              0        FOSC/16             FOSC/128
and BRGH bits as shown in Table 18-6. During ABD,                                1              1        FOSC/4              FOSC/32
both the SPBRGH and SPBRG registers are used as a                              Note:      During the ABD sequ ence, SP BRG and
16-bit counter, independent of the BR G16 bit setting.                                    SPBRGH registers are both used as a 16-bit
While c alibrating th e b aud rate pe riod, t he SP BRGH                                  counter, independent of BRG16 setting.
FIGURE 18-6:                    AUTOMATIC BAUD RATE CALIBRATION
   BRG Value          XXXXh            0000h                                                                                001Ch
                                                         Edge #1        Edge #2          Edge #3        Edge #4        Edge #5
         RX pin                                 Start   bit 0  bit 1   bit 2  bit 3     bit 4  bit 5   bit 6  bit 7   Stop bit
   BRG Clock
                  Set by User                                                                                             Auto Cleared
    ABDEN bit
         RCIDL
    RCIF bit
    (Interrupt)
        Read
      RCREG
      SPBRG                                              XXh                                                                 1Ch
     SPBRGH                                              XXh                                                                 00h
         Note 1:    The ABD sequence requires the EUSART module to be configured in Asynchronous mode.
 2010 Microchip Technology Inc.                                                                                      DS41303G-page 253
PIC18F2XK20/4XK20
18.3.2      AUTO-BAUD OVERFLOW                                 18.3.3.1       Special Considerations
During the c ourse of a utomatic b aud detection, the          Break Character
ABDOVF bit of the BAUDCON register will be set if the          To av oid c haracter er rors or c haracter fra gments
baud rate counter overflows before the fifth rising edge       during a w ake-up event, the w ake-up character must
is detected on th e RX pin. The ABDOVF bit indicates           be all zeros.
that the counter has exceeded the maximum count that
can fit in the 1 6 bits of the SPBRGH:SPBRG reg ister          When the w ake-up is en abled the fun ction works
pair. After the ABDOVF has been set, the counter con-          independent of the low time on the data stream. If the
tinues to count until the fifth rising edge is detected on     WUE bit i s set a nd a v alid no n-zero character i s
the RX pin. Upon detecting the fifth RX edge, the hard-        received, the low time from the Start bit to the first rising
ware w ill s et th e R CIF int errupt fl ag a nd c lear th e   edge will b e in terpreted as the wake-up e vent. Th e
ABDEN bit of the BAUDCON re gister. The RCIF fl ag             remaining bi ts in the character w ill be received as a
can be su bsequently cl eared b y reading the RCREG.           fragmented character and subsequent characters can
The ABDOVF flag can be cleared by software directly.           result in framing or overrun errors.
To term inate the auto-baud process before the R CIF           Therefore, the initial character in the transmission must
flag is set, clear the ABDEN bit then clear the ABDOVF         be all ‘0’s. Th is must be 10 or mo re bi t times, 13-bit
bit. The ABDOVF bit will remain set if the ABDEN bit is        times recommended for LIN bus, or any number of bit
not cleared first.                                             times for standard RS-232 devices.
                                                               Oscillator Startup Time
18.3.3      AUTO-WAKE-UP ON BREAK
                                                               Oscillator start-up time must be considered, especially
During Slee p m ode, al l c locks to the EU SART a re          in ap plications u sing o scillators w ith lo nger st art-up
suspended. Because of this, the Baud Rate Generator            intervals (i.e., LP, XT o r HS/PL L mode). Th e Sync
is inactive and a proper character reception cannot be         Break (or wake-up s ignal) c haracter m ust b e of
performed. The Auto-Wake-up feat ure al lows the               sufficient l ength, and be fol lowed b y a s ufficient
controller to wake-up due to activity on the RX/DT line.       interval, to allow enough time for the selected oscillator
This feature is available only in Asynchronous mode.           to start and provide proper initialization of the EUSART.
The Au to-Wake-up fea ture is enabled by s etting t he         WUE Bit
WUE bit of the BAUDCON register. Once set, the normal
                                                               The w ake-up eve nt c auses a rec eive in terrupt b y
receive s equence on R X/DT is disabled, and the
                                                               setting the R CIF bi t. The W UE bi t is cleared by
EUSART rem ains in an Idle s tate, m onitoring for a
                                                               hardware by a ris ing edg e on RX/DT. Th e in terrupt
wake-up e vent independent o f th e CPU mode. A
                                                               condition is then cl eared by so ftware by read ing the
wake-up event consists of a high-to-low transition on the
                                                               RCREG register and discarding its contents.
RX/DT line. (This coincides with the start of a Sync Break
or a wake-up signal character for the LIN protocol.)           To ensure that no actual data is lost, check the RCIDL
                                                               bit to verify that a receive operation is not in p rocess
The E USART mod ule generates an R CIF interrupt
                                                               before setting the WUE bit. If a receive operation is not
coincident w ith the w ake-up e vent. The interrupt is
                                                               occurring, the WUE bit ma y the n be s et jus t pri or to
generated synchronously to the Q clocks in normal CPU
                                                               entering the Sleep mode.
operating m odes (Figure 18-7), an d as ynchronously if
the device is in Sleep mode (Figure 18-8). The interrupt
condition is cleared by reading the RCREG register.
The WUE bit is automatically cleared by the low-to-high
transition on the R X line at the end of the Break. This
signals to the user that the Break event is over. At this
point, the EUSART module is in Idl e mode waiting to
receive the next character.
DS41303G-page 254                                                                         2010 Microchip Technology Inc.
                                                                                PIC18F2XK20/4XK20
FIGURE 18-7:                 AUTO-WAKE-UP BIT (WUE) TIMING DURING NORMAL OPERATION
             Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
    OSC1
               Bit set by user                                                                                                   Auto Cleared
   WUE bit
RX/DT Line
     RCIF
                                                                                           Cleared due to User Read of RCREG
  Note 1:    The EUSART remains in Idle while the WUE bit is set.
FIGURE 18-8:                 AUTO-WAKE-UP BIT (WUE) TIMINGS DURING SLEEP
             Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4                  Q1                 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1Q2 Q3 Q4
     OSC1
               Bit Set by User                                                                                                 Auto Cleared
   WUE bit
RX/DT Line                                                                                                          Note 1
      RCIF
                                                                                         Cleared due to User Read of RCREG
                        Sleep Command Executed                   Sleep Ends
  Note 1:    If the wake-up event requires long oscillator warm-up time, the automatic clearing of the WUE bit can occur while the stposc signal is
             still active. This sequence should not depend on the presence of Q clocks.
       2:    The EUSART remains in Idle while the WUE bit is set.
 2010 Microchip Technology Inc.                                                                                             DS41303G-page 255
PIC18F2XK20/4XK20
18.3.4        BREAK CHARACTER SEQUENCE                           When the TXREG becomes empty, as indicated by the
                                                                 TXIF, the next data byte can be written to TXREG.
The EUSART module has the capability of sending the
special Break character sequences that are required by
                                                                 18.3.5      RECEIVING A BREAK CHARACTER
the LIN bus standard. A Break character consists of a
Start bit, followed by 12 ‘0’ bits and a Stop bit.               The Enhanced EUSART module can receive a Break
                                                                 character in two ways.
To send a Break character, set the SENDB and TXEN
bits of the TXSTA register. The Break character trans-           The first method to detect a Break character uses the
mission is then initiated by a write to the TXREG. The           FERR bit of the RCSTA register and the Received data
value of data written to TXREG will be ignored and all           as indicated by RCREG. The Baud Rate Generator is
‘0’s will be transmitted.                                        assumed to have been initialized to the expected baud
                                                                 rate.
The SENDB bit is automatically reset by hardware after
the corresponding Stop bit is sent. This allows the user         A Break character has been received when;
to preload the transmit FIFO with the next transmit byte         • RCIF bit is set
following the Bre ak character (ty pically, th e Syn c           • FERR bit is set
character in the LIN specification).
                                                                 • RCREG = 00h
The TRMT bit of the TXSTA register indicates when the
                                                                 The s econd m ethod uses the Auto -Wake-up fe ature
transmit operation is active or Idle, just as it does during
                                                                 described in    Section 18.3.3 “Auto-Wake-up on
normal transmission. S ee Figure 18-9 for the tim ing of
                                                                 Break”. By ena bling this feature, th e EU SART w ill
the Break character sequence.
                                                                 sample the nex t tw o tran sitions on RX/DT, ca use an
18.3.4.1        Break and Sync Transmit Sequence                 RCIF interrupt, and receive the next data byte followed
                                                                 by another interrupt.
The fol lowing se quence w ill start a m essage fram e
header made up of a Break, followed by an auto-baud              Note tha t fol lowing a Bre ak character, th e us er w ill
Sync by te. Th is sequence is t ypical of a LIN bu s             typically want to enable the Auto-Baud Detect feature.
master.                                                          For both methods, the user can set the ABDEN bit of
                                                                 the BAUDCON register before placing the EUSART in
1.    Configure the EUSART for the desired mode.                 Sleep mode.
2.    Set th e T XEN an d SENDB bi ts to enable th e
      Break sequence.
3.    Load the TXR EG w ith a du mmy ch aracter to
      initiate transmission (the value is ignored).
4.    Write ‘55h’ to TXREG to load the Sync character
      into the transmit FIFO buffer.
5.    After the Break has been sent, the SENDB bit is
      reset by hard ware an d the Sy nc ch aracter is
      then transmitted.
FIGURE 18-9:            SEND BREAK CHARACTER SEQUENCE
     Write to TXREG
                          Dummy Write
        BRG Output
        (Shift Clock)
            TX (pin)                     Start bit     bit 0   bit 1                 bit 11      Stop bit
                                                                Break
             TXIF bit
           (Transmit
      interrupt Flag)
        TRMT bit
   (Transmit Shift
 Reg. Empty Flag)
                                        SENDB Sampled Here                               Auto Cleared
           SENDB
       (send Break
         control bit)
DS41303G-page 256                                                                              2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
18.4      EUSART Synchronous Mode                             18.4.1.2       Clock Polarity
Synchronous serial communications are typically used          A c lock pol arity o ption i s pro vided for M icrowire
in sy stems w ith a single master an d on e or mo re          compatibility. Clock polarity is selected with the CKTXP
slaves. Th e m aster device c ontains t he n ecessary         bit o f th e BAUDCO N re gister. Se tting th e CKTXP b it
circuitry for baud rate generation and supplies the clock     sets the clock Idle state as high. When the CKTXP bit
for all devices in the system. S lave devices can take        is s et, the data c hanges on the fal ling e dge of e ach
advantage o f the master clock by eliminating th e            clock and is sampled on the rising edge of each clock.
internal clock generation circuitry.                          Clearing the CKTXP bit sets the Idle state as low. When
                                                              the C KTXP bit is cl eared, the data changes on the
There are tw o s ignal lines i n Sy nchronous mode: a         rising edge of each clock and is sampled on the falling
bidirectional data line and a clock line. Slaves use the      edge of each clock.
external clock supplied by the master to shift the serial
data in to a nd out of their re spective re ceive an d        18.4.1.3       Synchronous Master Transmission
transmit sh ift regi sters. Sinc e t he d ata lin e i s
                                                              Data is transferred out of the device on the RX/DT pin.
bidirectional, s ynchronous op eration i s h alf-duplex
                                                              The RX/DT and TX/CK pin output drivers are automat-
only. H alf-duplex ref ers to t he f act tha t ma ster an d
                                                              ically e nabled w hen the EU SART i s configured f or
slave de vices ca n receive a nd t ransmit da ta but no t
                                                              synchronous master transmit operation.
both simultaneously. T he EUSART c an o perate as
either a master or slave device.                              A transmission is initiated by writing a character to the
                                                              TXREG register. If the TSR still contains all or part of a
Start an d S top bi ts are not us ed in sy nchronous
                                                              previous character the new character data is held in the
transmissions.
                                                              TXREG until the last bit of the previous character has
18.4.1       SYNCHRONOUS MASTER MODE                          been transmitted. If this is the first character, or the pre-
                                                              vious character has been completely flushed from the
The following bits are used to configure the EUSART           TSR, the data in the TXREG is immediately transferred
for Synchronous Master operation:                             to th e T SR. T he transmission of the c haracter c om-
•   SYNC = 1                                                  mences immediately following the transfer of the data
•   CSRC = 1                                                  to the TSR from the TXREG.
•   SREN = 0 (for transmit); SREN = 1 (for receive)           Each data bit changes on the leading edge of the mas-
•   CREN = 0 (for transmit); CREN = 1 (for receive)           ter clock and remains valid until the subsequent leading
                                                              clock edge.
•   SPEN = 1
Setting the SYNC bit of th e TXSTA register configures          Note:      The TSR reg ister i s no t ma pped i n dat a
the device for synchronous operation. Setting the CSRC                     memory, so it is not available to the user.
bit of th e T XSTA r egister c onfigures th e device a s a
master. Clearing the SREN and CREN bits of the RCSTA          18.4.1.4       Data Polarity
register ensures that the device is in the Transmit mode,     The polarity of th e transmit an d receive da ta ca n be
otherwise the device will be configured to receive. Setting   controlled with the DTRXP bit of the BAUDCON regis-
the S PEN bi t o f th e R CSTA re gister e nables th e        ter. The default state of this bit is ‘0’ which selects high
EUSART. If the RX/DT or TX/CK pins are shared with an         true transmit and receive data. Setting the DTRXP bit
analog pe ripheral th e a nalog I/O fu nctions m ust b e      to ‘1’ will invert the da ta resulting in low true transmit
disabled by clearing the corresponding ANSEL bits.            and receive data.
The TRIS bits corresponding to the RX/DT and TX/CK
pins should be set.
18.4.1.1       Master Clock
Synchronous data transfers use a s eparate clock line,
which is synchronous with the data. A device configured
as a master transmits the clock on the TX /CK line. The
TX/CK pin output driver is automatically enabled when
the EUSART is configured for synchronous transmit or
receive operation. Serial data bits change on the leading
edge to ensure they are valid at the trailing edge of each
clock. One clock cyc le is generated for eac h data bit.
Only as many clock cycles are gene rated as there are
data bits.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 257
PIC18F2XK20/4XK20
18.4.1.5            Synchronous Master Transmission                              4.      Disable Receive mo de by cl earing bi ts S REN
                    Set-up:                                                              and CREN.
1.   Initialize the SPBRGH, SPBRG register pair and                              5.      Enable Transmit mode by setting the TXEN bit.
     the B RGH and BRG16 b its t o achieve t he                                  6.      If 9-bit transmission is desired, set the TX9 bit.
     desired baud rate (see Section 18.3 “EUSART                                 7.      If interrupts are desired, set the TXIE, GIE and
     Baud Rate Generator (BRG)”).                                                        PEIE interrupt enable bits.
2.   Set the RX/DT and TX/CK TRIS controls to ‘1’.                               8.      If 9 -bit transmission is selected, the ni nth b it
3.   Enable t he sy nchronous m aster se rial po rt by                                   should be loaded in the TX9D bit.
     setting bits SYNC, SPEN an d CSRC. Set th e                                 9.      Start tra nsmission b y l oading d ata to th e
     TRIS bi ts corresponding t o th e R X/DT an d                                       TXREG register.
     TX/CK I/O pins.
FIGURE 18-10:                 SYNCHRONOUS TRANSMISSION
 RX/DT
 pin                                 bit 0        bit 1     bit 2                bit 7           bit 0       bit 1                          bit 7
                                                  Word 1                                                 Word 2
TX/CK pin
(SCKP = 0)
TX/CK pin
(SCKP = 1)
 Write to
 TXREG Reg          Write Word 1             Write Word 2
 TXIF bit
 (Interrupt Flag)
TRMT bit
             ‘1’                                                                                                                                    ‘1’
 TXEN bit
     Note:          Sync Master mode, SPBRG = 0, continuous transmission of two 8-bit words.
FIGURE 18-11:                 SYNCHRONOUS TRANSMISSION (THROUGH TXEN)
                          RX/DT pin                         bit 0        bit 1           bit 2                       bit 6        bit 7
                           TX/CK pin
                            Write to
                         TXREG reg
                             TXIF bit
                            TRMT bit
                            TXEN bit
DS41303G-page 258                                                                                                     2010 Microchip Technology Inc.
                                                           PIC18F2XK20/4XK20
TABLE 18-7:       REGISTERS ASSOCIATED WITH SYNCHRONOUS MASTER TRANSMISSION
                                                                                                      Reset
    Name          Bit 7       Bit 6    Bit 5    Bit 4      Bit 3      Bit 2      Bit 1      Bit 0     Values
                                                                                                     on page
INTCON         GIE/GIEH PEIE/GIEL TMR0IE        INT0IE     RBIE     TMR0IF      INT0IF     RBIF          59
PIR1            PSPIF(1)      ADIF     RCIF     TXIF      SSPIF     CCP1IF     TMR2IF     TMR1IF         62
PIE1            PSPIE  (1)
                              ADIE    RCIE      TXIE      SSPIE     CCP1IE     TMR2IE     TMR1IE         62
IPR1            PSPIP(1)      ADIP    RCIP      TXIP      SSPIP     CCP1IP     TMR2IP     TMR1IP         62
RCSTA            SPEN         RX9     SREN      CREN      ADDEN      FERR       OERR       RX9D          61
TRISC           TRISC7       TRISC6   TRISC5   TRISC4     TRISC3    TRISC2     TRISC1     TRISC0         62
TXREG          EUSART Transmit Register                                                                  61
TXSTA            CSRC         TX9     TXEN      SYNC      SENDB      BRGH       TRMT       TX9D          61
BAUDCON        ABDOVF        RCIDL    DTRXP    CKTXP      BRG16        —         WUE      ABDEN          61
SPBRGH         EUSART Baud Rate Generator Register, High Byte                                            61
SPBRG          EUSART Baud Rate Generator Register, Low Byte                                             61
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used for synchronous master transmission.
Note 1: Reserved in PIC18F2XK20 devices; always maintain these bits clear.
 2010 Microchip Technology Inc.                                                            DS41303G-page 259
PIC18F2XK20/4XK20
18.4.1.6      Synchronous Master Reception                    18.4.1.8      Receive Overrun Error
Data i s re ceived at t he R X/DT pi n. T he RX/DT pi n       The receive FIFO buffer can hold two characters. An
output dri ver mu st b e di sabled by s etting th e           overrun error will be generated if a third character, in its
corresponding TR IS bits when th e EU SART i s                entirety, is received before RCREG is read to access
configured for synchronous master receive operation.          the F IFO. W hen th is happens the O ERR bi t o f th e
In Synchronous mode, reception is enabled by setting          RCSTA register is set. Previous data in the FIFO will
either t he S ingle R eceive E nable b it ( SREN of t he      not be overwritten. Th e tw o c haracters in th e FIFO
RCSTA register) or the Continuous Receive Enable bit          buffer can be read, however, no a dditional characters
(CREN of the RCSTA register).                                 will be received until the error is cleared. The OERR bit
                                                              can only be cleared by clearing the overrun condition.
When SREN is set and CREN is clear, only as many              If the overrun error occurred when the SREN bit is set
clock cycles are generated as there are data bits in a        and CREN is clear then the error is cleared by reading
single character. The SREN bit is automatically cleared       RCREG. If the overrun occurred when the CREN bit is
at the completion of one character. When CREN is set,         set then the error condition is cleared by either clearing
clocks are continuously generated unt il C REN is             the CREN bit of the RCSTA register or by clearing the
cleared. If CREN is cleared in the middle of a character      SPEN bit which resets the EUSART.
the CK clock stops immediately and the partial charac-
ter is discarded. If SREN and CREN are both set, then         18.4.1.9      Receiving 9-bit Characters
SREN is cleared at the completion of the first character
                                                              The EUSART supports 9-bit character reception. When
and CREN takes precedence.
                                                              the RX9 bit of the RCSTA register is set the EUSART
To initiate reception, set either SREN or CREN. Data is       will s hift 9-bi ts into the RSR fo r eac h c haracter
sampled at the R X/DT pin on the trailing edge of the         received. T he RX9D b it of the R CSTA r egister i s the
TX/CK c lock pin a nd is s hifted in to the R eceive Shi ft   ninth, and Most Significant, data bit of the top u nread
Register (R SR). W hen a co mplete cha racter i s             character in the receive FIFO. When reading 9-bit data
received in to th e R SR, the R CIF b it is set and th e      from the receive FIFO buffer, the R X9D data bit must
character i s automatically tra nsferred t o t he two         be read before reading the 8 Least Significant bits from
character receive FIFO. The Least Significant eight bits      the RCREG.
of the top character in the receive FIFO are available in
RCREG. The RCIF bit remains set as long as there are          18.4.1.10     Synchronous Master Reception
un-read characters in the receive FIFO.                                     Set-up:
18.4.1.7      Slave Clock                                     1.  Initialize the SPBRGH, SPBRG register pair for
                                                                  the ap propriate ba ud rat e. Set or cl ear th e
Synchronous data transfers use a s eparate clock line,            BRGH and BRG16 bits, as required, to achieve
which is synchronous with the data. A device configured           the desired baud rate.
as a sl ave rece ives the cloc k on the TX/C K l ine. The
                                                              2. Set the RX/DT and TX/CK TRIS controls to ‘1’.
TX/CK pin output driver must be disabled by setting the
associated TRIS bit w hen the device is config ured for       3. Enable th e s ynchronous ma ster se rial po rt b y
synchronous slave transmit or receive operation. Serial           setting b its SYNC, SPEN an d CSRC. Dis able
data bits change on the leading edge to ensure they are           RX/DT and TX/CK output drivers by setting the
valid at the trailing edge of each clock. One data bit is         corresponding TRIS bits.
transferred for eac h cloc k cyc le. Onl y as m any clo ck    4. Ensure bits CREN and SREN are clear.
cycles should be received as there are data bits.             5. If using interrupts, set the GIE and PEIE bits of
                                                                  the INTCON register and set RCIE.
                                                              6. If 9-bit reception is desired, set bit RX9.
                                                              7. Start reception by se tting the SR EN bit or for
                                                                  continuous reception, set the CREN bit.
                                                              8. Interrupt flag bit RCIF will be set when reception
                                                                  of a character i s c omplete. A n i nterrupt w ill be
                                                                  generated if the enable bit RCIE was set.
                                                              9. Read the RCSTA register to get the ninth bit (if
                                                                  enabled) and de termine if an y erro r occurred
                                                                  during reception.
                                                              10. Read t he 8 -bit rec eived da ta by rea ding th e
                                                                  RCREG register.
                                                              11. If an overrun error oc curs, c lear the error by
                                                                  either cl earing the C REN b it of the R CSTA
                                                                  register or by clearing the SPEN bit which resets
                                                                  the EUSART.
DS41303G-page 260                                                                        2010 Microchip Technology Inc.
                                                                               PIC18F2XK20/4XK20
FIGURE 18-12:               SYNCHRONOUS RECEPTION (MASTER MODE, SREN)
    RX/DT
       pin                         bit 0      bit 1       bit 2       bit 3       bit 4      bit 5    bit 6   bit 7
   TX/CK pin
  (SCKP = 0)
   TX/CK pin
  (SCKP = 1)
     Write to
   bit SREN
   SREN bit
   CREN bit ‘0’                                                                                                                 ‘0’
    RCIF bit
  (Interrupt)
      Read
    RXREG
  Note:         Timing diagram demonstrates Sync Master mode with bit SREN = 1 and bit BRGH = 0.
TABLE 18-8:           REGISTERS ASSOCIATED WITH SYNCHRONOUS MASTER RECEPTION
                                                                                                                         Reset
   Name             Bit 7         Bit 6         Bit 5         Bit 4           Bit 3        Bit 2      Bit 1     Bit 0    Values
                                                                                                                        on page
INTCON           GIE/GIEH PEIE/GIEL           TMR0IE         INT0IE           RBIE        TMR0IF     INT0IF     RBIF       59
PIR1             PSPIF(1)         ADIF          RCIF          TXIF            SSPIF       CCP1IF     TMR2IF   TMR1IF       62
PIE1             PSPIE(1)         ADIE          RCIE          TXIE            SSPIE       CCP1IE     TMR2IE   TMR1IE       62
IPR1             PSPIP(1)         ADIP          RCIP          TXIP            SSPIP       CCP1IP     TMR2IP   TMR1IP       62
RCSTA              SPEN           RX9          SREN          CREN             ADDEN       FERR       OERR       RX9D       61
RCREG           EUSART Receive Register                                                                                    61
TXSTA              CSRC           TX9          TXEN          SYNC             SENDB       BRGH       TRMT       TX9D       61
BAUDCON ABDOVF                   RCIDL        DTRXP         CKTXP             BRG16         —         WUE     ABDEN        61
SPBRGH          EUSART Baud Rate Generator Register, High Byte                                                             61
SPBRG           EUSART Baud Rate Generator Register, Low Byte                                                              61
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used for synchronous master reception.
Note 1: Reserved in 28-pin devices; always maintain these bits clear.
 2010 Microchip Technology Inc.                                                                                DS41303G-page 261
PIC18F2XK20/4XK20
18.4.2       SYNCHRONOUS SLAVE MODE                             If tw o words are written to the TXR EG and then the
                                                                SLEEP instruction is executed, the following will occur:
The following bits are used to configure the EUSART
for Synchronous slave operation:                                1.   The firs t c haracter w ill immediately tran sfer to
                                                                     the TSR register and transmit.
•   SYNC = 1
                                                                2.   The second word will remain in TXREG register.
•   CSRC = 0
                                                                3.   The TXIF bit will not be set.
•   SREN = 0 (for transmit); SREN = 1 (for receive)
                                                                4.   After the first character h as been shif ted out of
•   CREN = 0 (for transmit); CREN = 1 (for receive)
                                                                     TSR, the TXREG register will transfer the second
•   SPEN = 1                                                         character to the TSR and the TXIF bit will now be
Setting the SYNC bit of th e TX STA re gister configures             set.
the device for synch ronous operation. C learing th e           5.   If the PEIE a nd TXIE bits are set, the interrupt
CSRC bit of the TXSTA register configures the device as              will wake the device from Sleep and execute the
a slave. Clearing the SREN and CREN bits of the RCSTA                next in struction. If t he GIE b it is a lso s et, th e
register ensures that the device is in the Transmit mode,            program will call the Interrupt Service Routine.
otherwise the device will be configured to receive. Setting
the S PEN bit of the R CSTA r egister ena bles th e             18.4.2.2       Synchronous Slave Transmission
EUSART. If the RX/DT or TX/CK pins are shared with an                          Set-up:
analog pe ripheral t he analog I /O f unctions must b e
                                                                1.   Set the SYNC and SPEN bi ts an d c lear the
disabled by clearing the corresponding ANSEL bits.
                                                                     CSRC bit.
RX/DT and TX/CK pin output drivers must be disabled             2.   Set the RX/DT and TX/CK TRIS controls to ‘1’.
by setting the corresponding TRIS bits.
                                                                3.   Clear the CREN and SREN bits.
18.4.2.1       EUSART Synchronous Slave                         4.   If using interrupts, ensure that the GIE and PEIE
               Transmit                                              bits of the INTCON register are set and set the
                                                                     TXIE bit.
The oper ation of the Synchronous M aster and Sl ave
                                                                5.   If 9-bit transmission is desired, set the TX9 bit.
modes ar     e ident  ical ( see    Section 18.4.1.3
“Synchronous Master Transmission”), except in t he              6.   Enable transmission by setting the TXEN bit.
case of the Sleep mode.                                         7.   If 9-bit transmission is selected, insert the Most
                                                                     Significant bit into the TX9D bit.
                                                                8.   Start tra nsmission by w riting th e L east
                                                                     Significant 8 bits to the TXREG register.
TABLE 18-9:        REGISTERS ASSOCIATED WITH SYNCHRONOUS SLAVE TRANSMISSION
                                                                                                                    Reset
     Name         Bit 7        Bit 6        Bit 5       Bit 4    Bit 3       Bit 2        Bit 1         Bit 0       Values
                                                                                                                   on page
INTCON          GIE/GIEH PEIE/GIEL TMR0IE              INT0IE    RBIE      TMR0IF        INT0IF         RBIF          59
PIR1            PSPIF(1)       ADIF         RCIF        TXIF    SSPIF      CCP1IF        TMR2IF       TMR1IF          62
PIE1            PSPIE  (1)
                               ADIE         RCIE        TXIE    SSPIE      CCP1IE        TMR2IE       TMR1IE          62
IPR1            PSPIP(1)       ADIP         RCIP        TXIP    SSPIP      CCP1IP        TMR2IP       TMR1IP          62
RCSTA             SPEN         RX9         SREN         CREN    ADDEN       FERR          OERR         RX9D           61
TRISC            TRISC7      TRISC6       TRISC5       TRISC4   TRISC3     TRISC2        TRISC1       TRISC0          62
TXREG           EUSART Transmit Register                                                                              61
TXSTA             CSRC          TX9        TXEN         SYNC    SENDB       BRGH          TRMT         TX9D           61
BAUDCON         ABDOVF        RCIDL       DTRXP        CKTXP    BRG16          —          WUE         ABDEN           61
SPBRGH          EUSART Baud Rate Generator Register, High Byte                                                        61
SPBRG           EUSART Baud Rate Generator Register, Low Byte                                                         61
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used for synchronous master transmission.
Note 1: Reserved in PIC18F2XK20 devices; always maintain these bits clear.
DS41303G-page 262                                                                           2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
18.4.2.3      EUSART Synchronous Slave                         18.4.2.4      Synchronous Slave Reception
              Reception                                                      Set-up:
The operation of the Sy nchronous M aster an d S lave          1.   Set the SYNC and SPEN bi ts an d c lear the
modes is ide ntical ( Section 18.4.1.6 “Synchronous                 CSRC bit.
Master Reception”), with the following exceptions:             2.   Set the RX/DT and TX/CK TRIS controls to ‘1’.
• Sleep                                                        3.   If using interrupts, ensure that the GIE and PEIE
• CREN bit is always set, therefore the receiver is                 bits of the INTCON register are set and set the
  never Idle                                                        RCIE bit.
• SREN bit, which is a “don't care” in Slave mode              4.   If 9-bit reception is desired, set the RX9 bit.
A character may be re ceived while in Sleep mode by            5.   Set the CREN bit to enable reception.
setting the CREN bit prior to entering Sleep. Once the         6.   The R CIF bit w ill be s et when r eception is
word is received, the RSR register will transfer the data           complete. An inte rrupt will be g enerated if th e
to the RCREG register. If the RCIE enable bit is set, the           RCIE bit was set.
interrupt g enerated w ill wake th e dev ice from Slee p       7.   If 9-bit mo de is e nabled, re trieve t he M ost
and execute the next instruction. If the GIE bit is also            Significant bit from the RX9D bit of the RCSTA
set, the program will branch to the interrupt vector.               register.
                                                               8.   Retrieve th e 8 L east Si gnificant bit s fro m th e
                                                                    receive FIFO by reading the RCREG register.
                                                               9.   If an overrun error oc curs, cl ear the error by
                                                                    either cl earing the C REN bi t of the R CSTA
                                                                    register or by clearing the SPEN bit which resets
                                                                    the EUSART.
TABLE 18-10: REGISTERS ASSOCIATED WITH SYNCHRONOUS SLAVE RECEPTION
                                                                                                                Reset
    Name          Bit 7       Bit 6        Bit 5       Bit 4   Bit 3        Bit 2        Bit 1       Bit 0      Values
                                                                                                               on page
INTCON         GIE/GIEH PEIE/GIEL TMR0IE              INT0IE   RBIE       TMR0IF        INT0IF       RBIF          59
PIR1            PSPIF(1)      ADIF        RCIF         TXIF    SSPIF      CCP1IF       TMR2IF      TMR1IF          62
PIE1            PSPIE(1)      ADIE        RCIE         TXIE    SSPIE      CCP1IE       TMR2IE      TMR1IE          62
IPR1            PSPIP(1)      ADIP        RCIP         TXIP    SSPIP      CCP1IP       TMR2IP      TMR1IP          62
RCSTA            SPEN         RX9         SREN        CREN     ADDEN       FERR         OERR         RX9D          61
RCREG          EUSART Receive Register                                                                             61
TXSTA            CSRC          TX9        TXEN        SYNC     SENDB       BRGH         TRMT         TX9D          61
BAUDCON        ABDOVF        RCIDL       DTRXP        CKTXP    BRG16          —         WUE         ABDEN          61
SPBRGH         EUSART Baud Rate Generator Register, High Byte                                                      61
SPBRG          EUSART Baud Rate Generator Register, Low Byte                                                       61
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used for synchronous slave reception.
Note 1: Reserved in 28-pin devices; always maintain these bits clear.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 263
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 264    2010 Microchip Technology Inc.
                                                                        PIC18F2XK20/4XK20
19.0     ANALOG-TO-DIGITAL
         CONVERTER (ADC) MODULE
The Ana log-to-Digital C onverter (AD C) allows
conversion of an analog input signal to a 10-bit binary
representation of that signal. This device uses analog
inputs, which are multiplexed into a single sample and
hold ci rcuit. The ou tput of t he sample a nd hold i s
connected to the input of the converter. The converter
generates a 1 0-bit b inary r esult vi a su ccessive
approximation and stores the conversion result into the
ADC result registers (ADRESL and ADRESH).
The AD C volt age reference is software se lectable to
either VDD or a voltage applied to the external reference
pins.
The ADC can generate an interrupt upon completion of
a conversion. This interrupt can be used to wake-up the
device from Sleep.
Figure 19-1 shows the block diagram of the ADC.
FIGURE 19-1:           ADC BLOCK DIAGRAM
                                                            VCFG1 = 0
                                                AVSS
                                    VREF-                   VCFG1 = 1
                                                     AVDD
                                                            VCFG0 = 0
                                        VREF+               VCFG0 = 1
                         AN0                  0000
                         AN1                  0001
                         AN2                  0010
                         AN3                  0011
                         AN4                  0100
                         AN5                  0101
                         AN6                  0110
                         AN7                  0111
                                                                          ADC
                         AN8                  1000
                                                      GO/DONE                                    10
                         AN9                  1001
                       AN10                   1010                                      0 = Left Justify
                                                                                ADFM
                        AN11                  1011                                      1 = Right Justify
                       AN12                   1100           ADON                                10
                               Unused         1101
                                                                    VSS                ADRESH    ADRESL
                               Unused         1110
                         FVR                  1111
                                   CHS<3:0>
 2010 Microchip Technology Inc.                                                                            DS41303G-page 265
PIC18F2XK20/4XK20
19.1      ADC Configuration                                   19.1.4       SELECTING AND CONFIGURING
                                                                           ACQUISITION TIME
When c onfiguring a nd using t he ADC th e following
functions must be considered:                                 The AD CON2 r egister al lows th e u ser to select a n
                                                              acquisition time that occurs each time the GO/DONE
•   Port configuration
                                                              bit is set.
•   Channel selection
                                                              Acquisition time is set with the ACQT<2:0> bits of the
•   ADC voltage reference selection
                                                              ADCON2 register. Acquisition delays cover a range of
•   ADC conversion clock source                               2 to 20 TAD. W hen th e GO/DONE bit is set , the A/D
•   Interrupt control                                         module continues to sample the input for the selected
•   Results formatting                                        acquisition tim e, th en aut omatically begins a co nver-
                                                              sion. Since the acquisition time is programmed, there is
19.1.1       PORT CONFIGURATION                               no need to wait for an acquisition time between select-
The ANSEL, ANSELH, TRISA, TRISB and TRISE reg-                ing a channel and setting the GO/DONE bit.
isters al l con figure th e A/D port pin s. Any port pin      Manual ac       quisition is         selected w      hen
needed as an analog input should have its correspond-         ACQT<2:0> = 000. W hen the G O/DONE bi t is se t,
ing ANSx bit set to disable the digital input buffer and      sampling is stopped and a conversion begins. The user
TRISx bit set to disable the digital output driver. If the    is responsible for ensuring the required acquisition time
TRISx bi t is cleared, th e digital ou tput le vel ( VOH or   has p assed be tween se lecting th e de sired i nput
VOL) will be converted.                                       channel a nd s etting th e GO/DONE bit. This option is
The A/D ope ration is ind ependent of the state of the        also the default Reset state of the ACQT<2:0> bits and
ANSx bits and the TRIS bits.                                  is c ompatible with devices th at d o n ot offer
                                                              programmable acquisition times.
    Note 1: When reading the PORT register, all pins
                                                              In either case, when the conversion is completed, the
            with the ir co rresponding AN Sx bit s et
                                                              GO/DONE bit is cleared, the ADIF flag is set and the
            read as c leared (a l ow level). Ho wever,
                                                              A/D b egins sampling the cur rently s elected c hannel
            analog conversion of pins configured as
                                                              again. When an acquisition time is programmed, there
            digital inputs (AN Sx bi t cl eared an d
                                                              is no indication of when the acquisition time ends and
            TRISx b it s et) will be a       ccurately
                                                              the conversion begins.
            converted.
          2: Analog levels on any pin with the corre-         19.1.5        CONVERSION CLOCK
             sponding ANSx bit cleared may cause the          The source of the conversion clock is software select-
             digital input buffer to consume current out      able via the ADCS bits of the ADCON2 register. There
             of the device’s specification limits.            are seven possible clock options:
          3: The PBADEN bi       t in Confi guration          •   FOSC/2
             Register 3H configures PORTB pin s to
                                                              •   FOSC/4
             reset as a nalog or digital p ins b y
             controlling how the bit s in AN SELH are         •   FOSC/8
             reset.                                           •   FOSC/16
                                                              •   FOSC/32
19.1.2       CHANNEL SELECTION                                •   FOSC/64
The CHS bits of the ADCON0 register determine which           •   FRC (dedicated internal oscillator)
channel is connected to the sample and hold circuit.
                                                              The time to complete one bit conversion is defined as
When changing c hannels, a de lay is required before          TAD. One full 10-bit conversion requires 11 TAD periods
starting th e n ext co nversion. R efer t o Section 19.2      as shown in Figure 19-3.
“ADC Operation” for more information.
                                                              For correct conversion, the appropriate TAD specification
19.1.3       ADC VOLTAGE REFERENCE                            must be met. See A/D conversion re quirements in
                                                              Table 26-25 f or more i nformation. T able 19-1 g ives
The VC FG bits of the      ADCON1 reg ister pro vide          examples of appropriate ADC clock selections.
independent c ontrol of t he positive an d n egative
voltage references. The positive voltage reference can            Note:    Unless using the FRC, any changes in the
be either V DD or an external voltage source. Likewise,                    system c lock f requency w ill ch ange th e
the negative voltage reference can be either VSS or an                     ADC c lock freq uency, w hich may
external voltage source.                                                   adversely affect the ADC result.
DS41303G-page 266                                                                        2010 Microchip Technology Inc.
                                                                          PIC18F2XK20/4XK20
19.1.6       INTERRUPTS                                                   This interrupt ca n be g enerated w hile th e dev ice i s
                                                                          operating or while in Sleep. If the device is in Sleep, the
The ADC module allows for the ability to g enerate an
                                                                          interrupt w ill wake-up the device. Upon w aking from
interrupt up on com pletion of an Anal        og-to-Digital
                                                                          Sleep, t he next instruction fo llowing th e SLEEP
Conversion. T he A DC i nterrupt f lag is t he A DIF bi t in
                                                                          instruction is always executed. If the user is attempting
the PIR1 register. The ADC interrupt enable is the ADIE
                                                                          to w ake-up fro m S leep a nd r esume in -line c ode
bit in the PIE1 register. The ADIF bit must be cleared by
                                                                          execution, the global interrupt must be disabled. If the
software.
                                                                          global interrupt is enabled, execution will switch to the
  Note:      The ADIF b it is set a t th e c ompletion of                 Interrupt Service Routine. Please see Section 19.1.6
             every c onversion, reg ardless o f w hether                  “Interrupts” for more information.
             or not the ADC interrupt is enabled.
TABLE 19-1:           ADC CLOCK PERIOD (TAD) VS. DEVICE OPERATING FREQUENCIES
           ADC Clock Period (TAD)                                              Device Frequency (FOSC)
 ADC Clock Source                ADCS<2:0>             64 MHz                   16 MHz                   4 MHz               1 MHz
         FOSC/2                     000              31.25     ns(2)           125    ns(2)            500    ns(2)          2.0 s
         FOSC/4                     100               62.5     ns(2)           250    ns(2)              1.0 s             4.0 s(3)
         FOSC/8                     001                400   ns(2)             500    ns(2)              2.0 s             8.0 s(3)
         FOSC/16                    101                250 ns(2)                1.0 s                  4.0 s(3)          16.0 s(3)
         FOSC/32                    010                500   ns(2)              2.0 s                  8.0   s(3)        32.0 s(3)
         FOSC/64                    110                  1.0 s                4.0 s(3)               16.0 s(3)          64.0 s(3)
          FRC                       x11               1-4   s(1,4)            1-4   s(1,4)           1-4   s(1,4)       1-4 s(1,4)
Legend:     Shaded cells are outside of recommended range.
Note 1:     The FRC source has a typical TAD time of 1.7 s.
     2:     These values violate the minimum required TAD time.
     3:     For faster conversion times, the selection of another clock source is recommended.
     4:     When the device frequency is greater than 1 MHz, the FRC clock source is only recommended if the
            conversion will be performed during Sleep.
19.1.7       RESULT FORMATTING
The 10-bit A/D conversion result can be supplied in two
formats, left justified or right justified. The ADFM bit of
the ADCON2 register controls the output format.
Figure 19-2 shows the two output formats.
FIGURE 19-2:             10-BIT A/D CONVERSION RESULT FORMAT
                                           ADRESH                                                         ADRESL
         (ADFM = 0)      MSB                                                                  LSB
                         bit 7                                         bit 0         bit 7                                       bit 0
                                                10-bit A/D Result                                     Unimplemented: Read as ‘0’
         (ADFM = 1)                                            MSB                                                               LSB
                         bit 7                                         bit 0         bit 7                                       bit 0
                            Unimplemented: Read as ‘0’                                       10-bit A/D Result
 2010 Microchip Technology Inc.                                                                                       DS41303G-page 267
PIC18F2XK20/4XK20
19.2      ADC Operation                                              Figure 19-3 shows the operation of th e A/D converter
                                                                     after the GO bit has been set and the ACQT<2:0> bits
19.2.1      STARTING A CONVERSION                                    are cleared. A conversion is started after the following
                                                                     instruction to al low entry into SLEEP mode before the
To enable th e AD C module, the AD ON bi t o f th e
                                                                     conversion begins.
ADCON0 register must be set to a ‘1’. Setting the GO/
DONE bit of the ADCON0 register to a ‘1’ will, depend-               Figure 19-4 shows the operation of th e A/D converter
ing on the ACQT bits of the ADCON2 register, either                  after the GO bit has been set and the ACQT<2:0> bits
immediately st art the Anal og-to-Digital c onversion or             are set to ‘010’ which selects a 4 T AD acquisition time
start an ac quisition d elay followed b y t he Analog-to-            before the conversion starts.
Digital conversion.
                                                                       Note:        The GO/DONE bit should not be set in the
                                                                                    same in struction t hat tu rns o n t he A DC.
                                                                                    Refer to Section 19.2.9 “A/D Conver-
                                                                                    sion Procedure”.
FIGURE 19-3:              A/D CONVERSION TAD CYCLES (ACQT<2:0> = 000, TACQ = 0)
         TCY - TAD TAD1 TAD2 TAD3 TAD4 TAD5 TAD6 TAD7 TAD8 TAD9 TAD10 TAD11 2 TAD
                         b9   b8    b7   b6  b5   b4   b3   b2    b1    b0
                 Conversion starts                                                                    Discharge
          Holding capacitor is disconnected from analog input (typically 100 ns)
         Set GO bit
                                                     On the following cycle:
                                                     ADRESH:ADRESL is loaded, GO bit is cleared,
                                                     ADIF bit is set, holding capacitor is connected to analog input.
FIGURE 19-4:              A/D CONVERSION TAD CYCLES (ACQT<2:0> = 010, TACQ = 4 TAD)
          TACQT Cycles                                         TAD Cycles
     1       2        3     4      1     2      3        4      5      6       7        8      9      10     11    2 TAD
                                         b9     b8       b7     b6     b5      b4      b3      b2     b1     b0
           Automatic
           Acquisition          Conversion starts                                                                   Discharge
             Time               (Holding capacitor is disconnected from analog input)
  Set GO bit
  (Holding capacitor continues                 On the following cycle:
  acquiring input)                             ADRESH:ADRESL is loaded, GO bit is cleared,
                                               ADIF bit is set, holding capacitor is connected to analog input.
DS41303G-page 268                                                                                2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
19.2.2      COMPLETION OF A CONVERSION                        19.2.7      ADC OPERATION DURING SLEEP
When the conversion is complete, the ADC module will:         The AD C mod ule ca n ope rate during Sl eep. Thi s
• Clear the GO/DONE bit                                       requires t he A DC cl ock s ource to be se t to th e FRC
                                                              option. Wh en th e F RC cl ock source is se lected, t he
• Set the ADIF flag bit
                                                              ADC waits one additional instruction before starting the
• Update the ADRESH:ADRESL registers with new                 conversion. Th is al lows the SLEEP in struction to b e
  conversion result                                           executed, w hich can reduce system noise during the
                                                              conversion. If the ADC interrupt is enabled, the device
19.2.3      DISCHARGE                                         will w ake-up fro m Sl eep when t he c onversion
The discharge phase is used to initialize the value of        completes. If the ADC interrupt is di sabled, the ADC
the capacitor array. The array is discharged after every      module is tu rned of f a fter the c onversion c ompletes,
sample. T his fe ature h elps t o o ptimize the un ity-gain   although the ADON bit remains set.
amplifier, as th e c ircuit a lways needs to ch arge th e     When the A DC clock source is something other than
capacitor array, rather than charge/discharge based on        FRC, a SLEEP instruction causes the present conver-
previous measure values.                                      sion to be aborted and the AD C module is turned off,
                                                              although the ADON bit remains set.
19.2.4      TERMINATING A CONVERSION
If a conversion must be terminated before completion,         19.2.8      SPECIAL EVENT TRIGGER
the GO/DONE bit ca n b e c leared by so ftware. Th e          The CCP2 Special Event Trigger allows periodic ADC
ADRESH:ADRESL reg isters w ill no t be up dated w ith         measurements w ithout s oftware i ntervention. When
the p artially co mplete Ana log-to-Digital c onversion       this trigger occurs, the GO/DONE bit is set by hardware
sample. Ins tead, th e ADRESH:ADRESL reg ister p air          and the Timer1 or Timer3 counter resets to zero.
will retain the value of the previous conversion.
                                                              Using the S pecial Eve nt T rigger do es not as sure
  Note:     A device Reset forces all registers to their      proper AD C t iming. It is t he user’s res ponsibility to
            Reset st ate. T hus, th e AD C mo dule i s        ensure that the ADC timing requirements are met.
            turned off and any pending conversion is
                                                              See Section 11.3.4 “Special Event Trigger” for more
            terminated.
                                                              information.
19.2.5      DELAY BETWEEN CONVERSIONS
After t he A/D c onversion i s completed o r a borted, a
2 TAD wait is required before the next acquisition can
be s tarted. Af ter t his wai t, th e c urrently s elected
channel is reconnected to the charge holding capacitor
commencing the next acquisition.
19.2.6      ADC OPERATION IN POWER-
            MANAGED MODES
The selection of the automatic acquisition time and A/D
conversion clock is determ ined in p art by the clo ck
source and frequency while in a power-managed mode.
If the A/D is expected to operate while the device is in
a power-managed m ode, th e AC QT<2:0> an d
ADCS<2:0> bits in AD CON2 sh ould be updated in
accordance wi th t he clock s ource t o be u sed in t hat
mode. A fter e ntering the mode, an A /D ac quisition o r
conversion m ay be st arted. O nce s tarted, the device
should co ntinue to be cl ocked by the sa me cl ock
source until the conversion has been completed.
If de sired, the de vice m ay be pl aced into th e
corresponding Idle mode during the conversion. If the
device clock frequency is less than 1 MHz, the A/D FRC
clock source should be selected.
 2010 Microchip Technology Inc.                                                                  DS41303G-page 269
PIC18F2XK20/4XK20
19.2.9       A/D CONVERSION PROCEDURE                       EXAMPLE 19-1:     A/D CONVERSION
This is an exa mple procedure for u sing the AD C to         ;This code block configures the ADC
perform an Analog-to-Digital conversion:                     ;for polling, Vdd and Vss as reference, Frc
                                                             clock and AN0 input.
1.    Configure Port:                                        ;
      • Disable pin output driver (See TRIS register)        ;Conversion start & polling for completion
      • Configure pin as analog                              ; are included.
                                                             ;
2.    Configure the ADC module:                              MOVLW     B’10101111’ ;right justify, Frc,
      • Select ADC conversion clock                          MOVWF     ADCON2       ; & 12 TAD ACQ time
      • Configure voltage reference                          MOVLW     B’00000000’ ;ADC ref = Vdd,Vss
                                                             MOVWF     ADCON1       ;
      • Select ADC input channel
                                                             BSF       TRISA,0      ;Set RA0 to input
      • Select result format                                 BSF       ANSEL,0      ;Set RA0 to analog
      • Select acquisition delay                             MOVLW     B’00000001’ ;AN0, ADC on
      • Turn on ADC module                                   MOVWF     ADCON0       ;
                                                             BSF       ADCON0,GO    ;Start conversion
3.    Configure ADC interrupt (optional):                    ADCPoll:
      • Clear ADC interrupt flag                             BTFSC     ADCON0,GO    ;Is conversion done?
      • Enable ADC interrupt                                 BRA       ADCPoll      ;No, test again
                                                             ; Result is complete - store 2 MSbits in
      • Enable peripheral interrupt
                                                             ; RESULTHI and 8 LSbits in RESULTLO
      • Enable global interrupt(1)                           MOVFF     ADRESH,RESULTHI
4.    Wait the required acquisition time(2).                 MOVFF     ADRESL,RESULTLO
5.    Start conversion by setting the GO/DONE bit.
6.    Wait for ADC conversion to complete by one of
      the following:
      • Polling the GO/DONE bit
      • Waiting for the ADC interrupt (interrupts
         enabled)
7.    Read ADC Result
8.    Clear the ADC interrupt flag (required if interrupt
      is enabled).
     Note 1: The global interrupt can be disabled if the
             user is attempting to wake-up from Sleep
             and resume in-line code execution.
          2: Software delay required if ACQT bits are
             set to zero delay. See Section 19.3 “A/D
             Acquisition Requirements”.
DS41303G-page 270                                                               2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
19.2.10       ADC REGISTER DEFINITIONS
The following registers are used to control the opera-
tion of the ADC.
  Note:       Analog pi n control is pe rformed b y th e
              ANSEL and ANSELH registers. For ANSEL
              and AN SELH registers, see Register 10-2
              and Register 10-3, respectively.
REGISTER 19-1:          ADCON0: A/D CONTROL REGISTER 0
        U-0            U-0             R/W-0          R/W-0      R/W-0           R/W-0       R/W-0           R/W-0
        —              —              CHS3            CHS2       CHS1            CHS0      GO/DONE           ADON
bit 7                                                                                                            bit 0
Legend:
R = Readable bit                   W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set           ‘0’ = Bit is cleared        x = Bit is unknown
bit 7-6           Unimplemented: Read as ‘0’
bit 5-2           CHS<3:0>: Analog Channel Select bits
                  0000 = AN0
                  0001 = AN1
                  0010 = AN2
                  0011 = AN3
                  0100 = AN4
                  0101 = AN5(1)
                  0110 = AN6(1)
                  0111 = AN7(1)
                  1000 = AN8
                  1001 = AN9
                  1010 = AN10
                  1011 = AN11
                  1100 = AN12
                  1101 = Reserved
                  1110 = Reserved
                  1111 = FVR (1.2 Volt Fixed Voltage Reference)(2)
bit 1             GO/DONE: A/D Conversion Status bit
                  1 = A/D conversion cycle in progress. Setting this bit starts an A/D conversion cycle.
                      This bit is automatically cleared by hardware when the A/D conversion has completed.
                  0 = A/D conversion completed/not in progress
bit 0             ADON: ADC Enable bit
                  1 = ADC is enabled
                  0 = ADC is disabled and consumes no operating current
Note 1:       These channels are not implemented on PIC18F2XK20 devices.
     2:       Allow greater than 15 s acquisition time when measuring the Fixed Voltage Reference.
 2010 Microchip Technology Inc.                                                                   DS41303G-page 271
PIC18F2XK20/4XK20
REGISTER 19-2:       ADCON1: A/D CONTROL REGISTER 1
        U-0         U-0         R/W-0          R/W-0          U-0               U-0          U-0             U-0
        —           —          VCFG1           VCFG0          —                 —            —               —
bit 7                                                                                                              bit 0
Legend:
R = Readable bit            W = Writable bit             U = Unimplemented bit, read as ‘0’
-n = Value at POR           ‘1’ = Bit is set             ‘0’ = Bit is cleared           x = Bit is unknown
bit 7-6       Unimplemented: Read as ‘0’
bit 5         VCFG1: Negative Voltage Reference select bit
              1 = Negative voltage reference supplied externally through VREF- pin.
              0 = Negative voltage reference supplied internally by VSS.
bit 4         VCFG0: Positive Voltage Reference select bit
              1 = Positive voltage reference supplied externally through VREF+ pin.
              0 = Positive voltage reference supplied internally by VDD.
bit 3-0       Unimplemented: Read as ‘0’
DS41303G-page 272                                                                      2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
REGISTER 19-3:         ADCON2: A/D CONTROL REGISTER 2
    R/W-0             U-0              R/W-0          R/W-0      R/W-0           R/W-0         R/W-0          R/W-0
    ADFM              —               ACQT2           ACQT1     ACQT0            ADCS2        ADCS1          ADCS0
bit 7                                                                                                              bit 0
Legend:
R = Readable bit                   W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set           ‘0’ = Bit is cleared         x = Bit is unknown
bit 7            ADFM: A/D Conversion Result Format Select bit
                 1 = Right justified
                 0 = Left justified
bit 6            Unimplemented: Read as ‘0’
bit 5-3          ACQT<2:0>: A/D Acquisition time select bits. Acquisition time is the duration that the A/D charge hold-
                 ing capacitor remains connected to A/D channel from the instant the GO/DONE bit is set until conver-
                 sions begins.
                 000 = 0(1)
                 001 = 2 TAD
                 010 = 4 TAD
                 011 = 6 TAD
                 100 = 8 TAD
                 101 = 12 TAD
                 110 = 16 TAD
                 111 = 20 TAD
bit 2-0          ADCS<2:0>: A/D Conversion Clock Select bits
                 000 = FOSC/2
                 001 = FOSC/8
                 010 = FOSC/32
                 011 = FRC(1) (clock derived from a dedicated internal oscillator = 600 kHz nominal)
                 100 = FOSC/4
                 101 = FOSC/16
                 110 = FOSC/64
                 111 = FRC(1) (clock derived from a dedicated internal oscillator = 600 kHz nominal)
Note 1:     When the A/D clock source is selected as FRC then the start of conversion is delayed by one instruction
            cycle after the GO/DONE bit is set to allow the SLEEP instruction to be executed.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 273
PIC18F2XK20/4XK20
REGISTER 19-4:            ADRESH: ADC RESULT REGISTER HIGH (ADRESH) ADFM = 0
        R/W-x          R/W-x            R/W-x          R/W-x       R/W-x              R/W-x          R/W-x            R/W-x
   ADRES9            ADRES8           ADRES7          ADRES6     ADRES5               ADRES4        ADRES3            ADRES2
bit 7                                                                                                                       bit 0
Legend:
R = Readable bit                   W = Writable bit            U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set            ‘0’ = Bit is cleared              x = Bit is unknown
bit 7-0            ADRES<9:2>: ADC Result Register bits
                   Upper 8 bits of 10-bit conversion result
REGISTER 19-5:            ADRESL: ADC RESULT REGISTER LOW (ADRESL) ADFM = 0
        R/W-x          R/W-x            R/W-x          R/W-x       R/W-x              R/W-x          R/W-x            R/W-x
   ADRES1            ADRES0               —              —           —                  —              —                —
bit 7                                                                                                                       bit 0
Legend:
R = Readable bit                   W = Writable bit            U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set            ‘0’ = Bit is cleared              x = Bit is unknown
bit 7-6            ADRES<1:0>: ADC Result Register bits
                   Lower 2 bits of 10-bit conversion result
bit 5-0            Reserved: Do not use.
REGISTER 19-6:            ADRESH: ADC RESULT REGISTER HIGH (ADRESH) ADFM = 1
        R/W-x          R/W-x            R/W-x          R/W-x       R/W-x              R/W-x          R/W-x            R/W-x
          —              —                —              —           —                  —           ADRES9            ADRES8
bit 7                                                                                                                       bit 0
Legend:
R = Readable bit                   W = Writable bit            U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set            ‘0’ = Bit is cleared              x = Bit is unknown
bit 7-2            Reserved: Do not use.
bit 1-0            ADRES<9:8>: ADC Result Register bits
                   Upper 2 bits of 10-bit conversion result
REGISTER 19-7:            ADRESL: ADC RESULT REGISTER LOW (ADRESL) ADFM = 1
        R/W-x          R/W-x            R/W-x          R/W-x       R/W-x              R/W-x          R/W-x            R/W-x
   ADRES7            ADRES6           ADRES5          ADRES4     ADRES3               ADRES2        ADRES1            ADRES0
bit 7                                                                                                                       bit 0
Legend:
R = Readable bit                   W = Writable bit            U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set            ‘0’ = Bit is cleared              x = Bit is unknown
bit 7-0            ADRES<7:0>: ADC Result Register bits
                   Lower 8 bits of 10-bit conversion result
DS41303G-page 274                                                                               2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
19.3      A/D Acquisition Requirements                            an A/D acquisition must be done before the conversion
                                                                  can be s tarted. To calculate the minimum acquisition
For the ADC to meet its specified accuracy, the charge            time, Equation 19-1 may be u sed. T his equat ion
holding cap acitor (C HOLD) must be a llowed to f ully            assumes that 1/2 LSb er ror is used (1024 step s for the
charge to the input c hannel voltage level. The Analog            ADC). The 1/2 LSb error is the maximum error allowed
Input model is show n in Figure 19-5. The sou rce                 for the ADC to meet its specified resolution.
impedance (RS) and the internal sampling switch (RSS)
impedance directly affect the time required to charge the
capacitor CHOLD. The sampling switch (RSS) impedance
varies over t he device volt age (VDD), see Figur e 19-5.
The maximum recommended impedance for analog
sources is 10 k. As the s ource impedance is
decreased, the a cquisition t ime may be decrea sed.
After the analog input channel is selected (or changed),
EQUATION 19-1:           ACQUISITION TIME EXAMPLE
       Assumptions:      Temperature = 50°C and external impedance of 10k  3.0V V DD
               T ACQ = Amplifier Settling Time + Hold Capacitor Charging Time + Temperature Coefficient
                     = T AMP + T C + T COFF
                     = 5µs + T C +   Temperature - 25°C   0.05µs/°C  
       The value for TC can be approximated with the following equations:
              V APPLIE D  1 – ------------ = V CHOL D
                                    1
                                                                          ;[1] VCHOLD charged to within 1/2 lsb
                              2047
                                   –TC
                               ----------
                                 RC
              V APPLIE D  1 – e  = V CHOL D                             ;[2] VCHOLD charge response to VAPPLIED
                                         
                                   – Tc
                                ---------
               V APPLI ED  1 – e  = V APPL IED  1 – ------------ ;combining [1] and [2]
                                  RC                        1
                                                    2047
       Solving for TC:
                T C = – C HOLD  R IC + R SS + R S  ln(1/2047)
                   = – 13.5pF  1k  + 700  + 10k   ln(0.0004885)
                    = 1.20 µs
       Therefore:
             T ACQ = 5µs + 1.20µs +   50°C- 25°C   0.05  s/ °C  
                      = 7.45µs
   Note 1: The reference voltage (VREF) has no effect on the equation, since it cancels itself out.
         2: The charge holding capacitor (CHOLD) is discharged after each conversion.
         3: The maximum recommended impedance for analog sources is 10 k. This is required to meet the pin
            leakage specification.
 2010 Microchip Technology Inc.                                                                      DS41303G-page 275
PIC18F2XK20/4XK20
FIGURE 19-5:                     ANALOG INPUT MODEL
                                                            VDD
                                                                                              Sampling
                                                                                              Switch
                                       Rs     ANx                               RIC  1k      SS Rss
                            VA                 CPIN                            I LEAKAGE(1)                                 CHOLD = 13.5 pF
                                               5 pF
                                                                                                             Discharge      VSS/VREF-
                                                                                                             Switch
                                                                                              3.5V
    Legend: CPIN      = Input Capacitance                                                     3.0V
            I LEAKAGE = Leakage current at the pin due to
                                                                                       VDD
                        various junctions                                                     2.5V
            RIC       = Interconnect Resistance                                               2.0V
            SS        = Sampling Switch                                                       1.5V
            CHOLD     = Sample/Hold Capacitance
                                                                                                       .1      1     10      100
                                                                                                               Rss (k)
    Note 1:   See Section 26.0 “Electrical Characteristics”.
FIGURE 19-6:                     ADC TRANSFER FUNCTION
                                                            Full-Scale Range
                                            3FFh
                                            3FEh
                                            3FDh
                                            3FCh
                     ADC Output Code
                                                                                                1/2 LSB ideal
                                            3FBh
                                                                                                Full-Scale
                                            004h                                                Transition
                                            003h
                                            002h
                                            001h
                                            000h                                                     Analog Input Voltage
                                                      1/2 LSB ideal
                    VSS/VREF-                         Zero-Scale                    VDD/VREF+
                                                      Transition
DS41303G-page 276                                                                                               2010 Microchip Technology Inc.
                                                                 PIC18F2XK20/4XK20
TABLE 19-2:       REGISTERS ASSOCIATED WITH A/D OPERATION
                                                                                                         Reset
  Name          Bit 7         Bit 6       Bit 5       Bit 4      Bit 3      Bit 2    Bit 1      Bit 0    Values
                                                                                                        on page
INTCON       GIE/GIEH PEIE/GIEL          TMR0IE      INT0IE      RBIE     TMR0IF     INT0IF     RBIF       59
PIR1          PSPIF(1)        ADIF        RCIF        TXIF      SSPIF     CCP1IF    TMR2IF    TMR1IF       62
PIE1          PSPIE   (1)
                              ADIE        RCIE        TXIE      SSPIE     CCP1IE    TMR2IE    TMR1IE       62
IPR1          PSPIP(1)        ADIP        RCIP        TXIP      SSPIP     CCP1IP    TMR2IP    TMR1IP       62
PIR2          OSCFIF          C1IF        C2IF        EEIF      BCLIF     HLVDIF    TMR3IF    CCP2IF       62
PIE2          OSCFIE          C1IE        C2IE       EEIE       BCLIE     HLVDIE    TMR3IE    CCP2IE       62
IPR2          OSCFIP          C1IP        C2IP       EEIP       BCLIP     HLVDIP    TMR3IP    CCP2IP       62
ADRESH       A/D Result Register, High Byte                                                                61
ADRESL       A/D Result Register, Low Byte                                                                 61
ADCON0           —             —          CHS3       CHS2       CHS1       CHS0     GO/DONE    ADON        61
ADCON1           —             —         VCFG1      VCFG0         —             —      —         —         61
ADCON2         ADFM            —         ACQT2      ACQT1       ACQT0      ADCS2     ADCS1     ADCS0       61
ANSEL         ANS7(1)        ANS6(1)     ANS5(1)     ANS4       ANS3       ANS2      ANS1      ANS0        62
ANSELH           —             —           —        ANS12       ANS11      ANS10     ANS9      ANS8        62
PORTA          RA7(2)         RA6(2)      RA5         RA4        RA3        RA2       RA1       RA0        62
TRISA        TRISA7(2)      TRISA6(2)   PORTA Data Direction Control Register                              62
PORTB           RB7            RB6        RB5         RB4        RB3        RB2       RB1       RB0        62
TRISB       PORTB Data Direction Control Register                                                          62
LATB        PORTB Data Latch Register (Read and Write to Data Latch)                                       62
PORTE(4)         —             —           —           —        RE3(3)      RE2       RE1       RE0        62
TRISE(4)        IBF           OBF         IBOV     PSPMODE        —       TRISE2    TRISE1    TRISE0       62
LATE(4)          —             —           —           —          —      PORTE Data Latch Register         62
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used for A/D conversion.
Note 1: These bits are unimplemented on PIC18F2XK20 devices; always maintain these bits clear.
     2: PORTA<7:6> and their direction bits are individually configured as port pins based on various primary
        oscillator modes. When disabled, these bits read as ‘0’.
     3: RE3 port bit is available only as an input pin when the MCLRE Configuration bit is ‘0’.
     4: These registers are not implemented on PIC18F2XK20 devices.
 2010 Microchip Technology Inc.                                                               DS41303G-page 277
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 278    2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
20.0       COMPARATOR MODULE                                   FIGURE 20-1:          SINGLE COMPARATOR
Comparators are used to inter face analog circuit s to a
digital circuit by comp aring tw o analog v oltages and             VIN+             +
providing a digital indication of their relative magnitudes.                                            Output
The comparators are very useful mixed signal building               VIN-             –
blocks because t hey pro vide analog functionality
independent of the progr am execution. The An alog
Comparator module includes the following features:
•   Independent comparator control                                   VIN-
•   Programmable input selection                                     VIN+
•   Comparator output is available internally/externally
•   Programmable output polarity
•   Interrupt-on-change
•   Wake-up from Sleep                                          Output
•   Programmable Speed/Power optimization
•   PWM hutdown
            s
                                                                Note:      The b lack a reas of t he output o f the
•   Programmable and fixed voltage reference
                                                                           comparator rep resents th e unc ertainty
20.1       Comparator Overview                                             due to input offsets and response time.
A single comparator is shown in Figure 20-1 along with
the re lationship between the an alog i nput l evels an d
the digital output. When the analog voltage at V IN+ is
less than the analog voltage at VIN-, the output of the
comparator is a dig ital lo w lev el. Whe n th e an alog
voltage at V IN+ is g reater t han th e a nalog voltage at
VIN-, the output of the comparator is a digital high level.
 2010 Microchip Technology Inc.                                                                  DS41303G-page 279
PIC18F2XK20/4XK20
 FIGURE 20-2:           COMPARATOR C1 SIMPLIFIED BLOCK DIAGRAM
                C1CH<1:0>
                              2                                                                                            To
                                                                                  D       Q                          Data Bus
                                                                         Q1
             C12IN0-        0                                                     EN
                                                                                                             RD_CM1CON0
             C12IN1-        1
                             MUX                                                                                     Set C1IF
                                                                                              D       Q
             C12IN2-        2
                                                                  Q3*RD_CM1CON0
                                                                                              EN
             C12IN3-        3                                                                                   To PWM Logic
                                                                                               CL
                                                                               Reset
                                                     C1ON(1)
                        C1R                                                                                      C1OE
                                           C1VIN- -
               C1IN+                                                              C1OUT
                                           C1VIN+ C1
                            0
                             MUX                  +
     FVR                    1                                                                                           C1OUT pin(2)
                0                             C1SP        C1POL
                 MUX
     CVREF           C1VREF
                1
     C1RSEL                     Note 1:    When C1ON = 0, the C1 comparator will produce a ‘0’ output to the XOR Gate.
                                     2:    Output shown for reference only. See I/O port pin block diagram for more detail.
                                     3:    Q1 and Q3 are phases of the four-phase system clock (FOSC).
                                     4:    Q1 is held high during Sleep mode.
FIGURE 20-3:            COMPARATOR C2 SIMPLIFIED BLOCK DIAGRAM
                                                                                                                          To
                                                                              D       Q
                                                                                                                    Data Bus
                                                                       Q1
                                                                              EN
                                                                                                           RD_CM2CON0
                C2CH<1:0>                                                                                           Set C2IF
                                2                                                         D       Q
                                                                Q3*RD_CM2CON0
                                                                                   EN                          To PWM Logic
              C12IN0-         0                     C2ON(1)
                                                                                     CL
                                                                                                             C2OE
              C12IN1-         1                                               NRESET
                               MUX        C2VIN-
              C12IN2-         2                    C2                         C2OUT
                                          C2VIN+
              C12IN3-                                                                                               C2OUT pin(2)
                              3              C2SP
                                                     C2POL
                        C2R
               C2IN+          0
                               MUX
     FVR                      1
                 0
                  MUX
      CVREF      1    C2VREF
                         Note 1:          When C2ON = 0, the C2 comparator will produce a ‘0’ output to the XOR Gate.
      C2RSEL                  2:          Output shown for reference only. See I/O port pin block diagram for more detail.
                              3:          Q1 and Q3 are phases of the four-phase system clock (FOSC).
                              4:          Q1 is held high during Sleep mode.
DS41303G-page 280                                                                                          2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
20.2        Comparator Control
Each comparator has a separate control and Configu-              Note 1: The C xOE bit ov errides the PO RT dat a
ration re gister: C M1CON0 f or C omparator C 1 an d                     latch. Setting the CxON has no impact on
CM2CON0 for Comparator C2. In addition, Compara-                         the port override.
tor C 2 h as a s econd control reg ister, C M2CON1, for                2: The i nternal ou tput of the comparator i s
controlling the in teraction w ith Timer1 and simultane-                  latched w ith e ach i nstruction cycle.
ous reading of both comparator outputs.                                   Unless ot herwise s pecified, ex ternal
The C M1CON0 and CM2CON0 reg isters (s ee Regis-                          outputs are not latched.
ters 20 -1 an d 20-2 , res pectively) c ontain the co ntrol
and Status bits for the following:                            20.2.5       COMPARATOR OUTPUT POLARITY
•   Enable                                                    Inverting t he output of th e c omparator i s functionally
•   Input selection                                           equivalent to s wapping th e comparator i nputs. Th e
                                                              polarity of th e co mparator ou tput ca n be inv erted b y
•   Reference selection
                                                              setting th e C xPOL bit of the C MxCON0 register.
•   Output election
             s                                                Clearing the CxPOL bit results in a non-inverted output.
•   Output polarity
                                                              Table 20-1 sh ows the output st ate ve rsus input
•   Speed selection                                           conditions, including polarity control.
20.2.1       COMPARATOR ENABLE                                TABLE 20-1:         COMPARATOR OUTPUT
                                                                                  STATE VS. INPUT
Setting the CxON bit of the CMxCON0 register enables
                                                                                  CONDITIONS
the c omparator fo r ope ration. Clearing the C xON b it
disables the comparator resulting in minimum current            Input Condition         CxPOL             CxOUT
consumption.                                                    CxVIN- > CxVIN+            0                 0
20.2.2       COMPARATOR INPUT SELECTION                         CxVIN- < CxVIN+            0                 1
The C xCH<1:0> bits of the C MxCON0 register direct             CxVIN- > CxVIN+            1                 1
one o f fo ur a nalog input p ins to the co mparator            CxVIN- < CxVIN+            1                 0
inverting input.
                                                              20.2.6       COMPARATOR SPEED SELECTION
    Note:    To use CxIN+ and C12INx- pins as analog
             inputs, the appropriate bits must be set in      The t rade-off be tween s peed o r po wer c an be opt i-
             the ANSEL register and the corresponding         mized during program execution with the CxSP control
             TRIS bits must also be set to disable the        bit. The default state for this bit is ‘1’ which selects the
             output drivers.                                  normal s peed m ode. D evice pow er con sumption ca n
                                                              be optimized at the cost of slower comparator propaga-
20.2.3       COMPARATOR REFERENCE                             tion delay by clearing the CxSP bit to ‘0’.
             SELECTION
                                                              20.3      Comparator Response Time
Setting the CxR bit of the CMxCON0 register directs an
internal voltage reference or an analog input pin to the      The comparator output is indeterminate for a period of
non-inverting i nput of th      e co mparator. See            time after the change of an input source or the selection
Section 21.0 “VOLTAGE REFERENCES” for m              ore      of a new reference voltage. This period is referred to as
information on the Internal Voltage Reference module.         the re sponse time. The res ponse t ime o f th e
                                                              comparator differs from the settling time of the voltage
20.2.4       COMPARATOR OUTPUT                                reference. T herefore, bo th o f t hese t imes m ust be
             SELECTION                                        considered when determining the total response time
The o utput o f th e c omparator can be m onitored b y        to a comparator input change. See the Comparator and
reading either the CxOUT bit of the CMxCON0 register          Voltage R eference S pecifications i n Section 26.0
or the MCxOUT bit of the CM2CON1 register. In order           “Electrical Characteristics” for more details.
to make the output available for an external connection,
the following conditions must be true:
• CxOE bit of the CMxCON0 register must be set
• Corresponding TRIS bit must be cleared
• CxON bit of the CMxCON0 register must be set
 2010 Microchip Technology Inc.                                                                    DS41303G-page 281
PIC18F2XK20/4XK20
20.4      Comparator Interrupt Operation                          20.4.1        PRESETTING THE MISMATCH
                                                                                LATCHES
The co mparator inte rrupt flag can be set w henever
there is a change in the output value of the comparator.          The comparator mismatch latches can be preset to the
Changes are recognized by m eans of a mi smatch                   desired state befo re the comparators are enabled.
circuit which consists of two latches and an exclusive-           When the comparator is off the CxPOL bit controls the
or gate (see Figure 20-2 and Figure 20-3). One latch is           CxOUT level. Set the CxPOL bit to the desired CxOUT
updated w ith t he comparator output l evel when th e             non-interrupt level while the CxON bit is cleared. Then,
CMxCON0 register is read. This latch retains the value            configure the desired CxPOL level in the same instruc-
until the ne xt re ad of th e C MxCON0 register or the            tion that the CxON bit is set. Since all register writes are
occurrence of a Reset. The other latch of the mismatch            performed as a R ead-Modify-Write, the m ismatch
circuit is up dated on every Q1 system cl ock. A                  latches w ill be c leared du ring t he instruction R ead
mismatch co ndition w ill oc cur w hen a co mparator              phase and the ac tual co nfiguration of the CxON an d
output change is clocked through the second latch on              CxPOL bits will be occur in the final Write phase.
the Q 1 cl ock c ycle. At thi s po int the tw o mi smatch
latches have opposite output levels which is detected             FIGURE 20-4:               COMPARATOR
by th e ex clusive-or ga te an d fe d to th e in terrupt                                     INTERRUPT TIMING W/O
circuitry. The mi smatch con dition persists unti l either                                   CMxCON0 READ
the CMxCON0 re gister i s read o r t he comparator
output returns to the previous state.                              Q1
                                                                   Q3
   Note 1: A w rite operation to the C       MxCON0
                                                                   CxIN+               TRT
           register w ill als o clear the mism atch
           condition because all writes include a read             CxOUT
           operation at the beginning of the write                 Set CxIF (edge)
           cycle.                                                  CxIF
          2: Comparator interrupts will operate correctly                                             reset by software
             regardless of the state of CxOE.
The comparator interrupt is set by the mismatch edge              FIGURE 20-5:               COMPARATOR
and not the mismatch level. This means that the inter-                                       INTERRUPT TIMING WITH
rupt fl ag ca n be res et without t he a dditional s tep of                                  CMxCON0 READ
reading or writing the CMxCON0 register to c lear the
mismatch registers. When the mismatch registers are                 Q1
cleared, an interrupt will occur upon the comparator’s              Q3
return to the previous state, otherwise no interrupt will           CxIN+              TRT
be generated.                                                       CxOUT
Software will need to maintain informatio n about the               Set CxIF (edge)
status of the co mparator output, as r ead from the                 CxIF
CMxCON0 register, or CM2CON1 register, to determine                         cleared by CMxCON0 read            reset by software
the actual change that has oc curred. See Figures 20-4
and 20-5.
The C xIF bi t of t he PI R2 reg ister is th e co mparator
interrupt fl ag. This bit m ust b e r eset b y software b y          Note 1: If a change in the C MxCON0 register
clearing it to ‘0’. Since it is also possible to write a ‘1’ to              (CxOUT) should occur when a read oper-
this register, an interrupt can be generated.                                ation is bei ng ex ecuted (st art of the Q 2
In mi d-range C ompatibility mode th e C xIE b it of th e                    cycle), then the CxIF interrupt flag of the
PIE2 register and the PEIE and GIE bits of the INTCON                        PIR2 register may not get set.
register must all be set to enable comparator interrupts.                    2: When either comparator is fir st enabled,
If any o f t hese bits are c leared, t he interrupt i s not                     bias cir cuitry i n the Comparator module
enabled, although the CxIF bit of the PIR2 register will                        may cause an invalid o utput from the
still be set if an interrupt condition occurs.                                  comparator until the bias circuitry is stable.
                                                                                Allow about 1 s for bias settling then clear
                                                                                the mismatch condition and interrupt flags
                                                                                before enabling comparator interrupts.
DS41303G-page 282                                                                             2010 Microchip Technology Inc.
                                                             PIC18F2XK20/4XK20
20.5     Operation During Sleep
The comparator, if enabled before entering Sleep mode,
remains ac tive d uring Sleep. Th e addition al current
consumed by the comparator is shown separately in the
Section 26.0 “Electrical Characteristics”. If        the
comparator is not used to w ake the dev ice, po wer
consumption can be minimized while in Sleep mode by
turning off the comparator. Each comparator is turned off
by clearing the CxON bit of the CMxCON0 register.
A ch ange to the comparator out put can w ake-up the
device from Sleep. To enable the comparator to wake
the device from Sleep, the CxIE bit of the PIE2 register
and the PEIE bit of the INTCON register must be set.
The instruction following the SLEEP instruction always
executes following a wake from Sleep. If the GIE bit of
the I NTCON register is a lso s et, the de vice will the n
execute the Interrupt Service Routine.
20.6     Effects of a Reset
A device Reset forces the CMxCON0 and CM2CON1
registers to the ir R eset st ates. Th is forc es bo th
comparators and the vo ltage ref erences to the ir Of f
states.
 2010 Microchip Technology Inc.                                       DS41303G-page 283
PIC18F2XK20/4XK20
REGISTER 20-1:        CM1CON0: COMPARATOR 1 CONTROL REGISTER 0
    R/W-0            R-0          R/W-0          R/W-0        R/W-0           R/W-0          R/W-0          R/W-0
    C1ON           C1OUT          C1OE           C1POL        C1SP                C1R        C1CH1          C1CH0
bit 7                                                                                                             bit 0
Legend:
R = Readable bit              W = Writable bit             U = Unimplemented bit, read as ‘0’
-n = Value at POR             ‘1’ = Bit is set             ‘0’ = Bit is cleared           x = Bit is unknown
bit 7           C1ON: Comparator C1 Enable bit
                1 = Comparator C1 is enabled
                0 = Comparator C1 is disabled
bit 6           C1OUT: Comparator C1 Output bit
                If C1POL = 1 (inverted polarity):
                C1OUT = 0 when C1VIN+ > C1VIN-
                C1OUT = 1 when C1VIN+ < C1VIN-
                If C1POL = 0 (non-inverted polarity):
                C1OUT = 1 when C1VIN+ > C1VIN-
                C1OUT = 0 when C1VIN+ < C1VIN-
bit 5           C1OE: Comparator C1 Output Enable bit
                1 = C1OUT is present on the C1OUT pin(1)
                0 = C1OUT is internal only
bit 4           C1POL: Comparator C1 Output Polarity Select bit
                1 = C1OUT logic is inverted
                0 = C1OUT logic is not inverted
bit 3           C1SP: Comparator C1 Speed/Power Select bit
                1 = C1 operates in normal power, higher speed mode
                0 = C1 operates in low-power, low-speed mode
bit 2           C1R: Comparator C1 Reference Select bit (non-inverting input)
                1 = C1VIN+ connects to C1VREF output
                0 = C1VIN+ connects to C1IN+ pin
bit 1-0         C1CH<1:0>: Comparator C1 Channel Select bit
                00 = C12IN0- pin of C1 connects to C1VIN-
                01 = C12IN1- pin of C1 connects to C1VIN-
                10 = C12IN2- pin of C1 connects to C1VIN-
                11 = C12IN3- pin of C1 connects to C1VIN-
Note 1:     Comparator output requires the following three conditions: C1OE = 1, C1ON = 1 and corresponding port
            TRIS bit = 0.
DS41303G-page 284                                                                        2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
REGISTER 20-2:         CM2CON0: COMPARATOR 2 CONTROL REGISTER 0
    R/W-0             R-0              R/W-0          R/W-0      R/W-0           R/W-0        R/W-0         R/W-0
    C2ON           C2OUT               C2OE           C2POL      C2SP                C2R     C2CH1         C2CH0
bit 7                                                                                                           bit 0
Legend:
R = Readable bit                   W = Writable bit           U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set           ‘0’ = Bit is cleared         x = Bit is unknown
bit 7            C2ON: Comparator C2 Enable bit
                 1 = Comparator C2 is enabled
                 0 = Comparator C2 is disabled
bit 6            C2OUT: Comparator C2 Output bit
                 If C2POL = 1 (inverted polarity):
                 C2OUT = 0 when C2VIN+ > C2VIN-
                 C2OUT = 1 when C2VIN+ < C2VIN-
                 If C2POL = 0 (non-inverted polarity):
                 C2OUT = 1 when C2VIN+ > C2VIN-
                 C2OUT = 0 when C2VIN+ < C2VIN-
bit 5            C2OE: Comparator C2 Output Enable bit
                 1 = C2OUT is present on C2OUT pin(1)
                 0 = C2OUT is internal only
bit 4            C2POL: Comparator C2 Output Polarity Select bit
                 1 = C2OUT logic is inverted
                 0 = C2OUT logic is not inverted
bit 3            C2SP: Comparator C2 Speed/Power Select bit
                 1 = C2 operates in normal power, higher speed mode
                 0 = C2 operates in low-power, low-speed mode
bit 2            C2R: Comparator C2 Reference Select bits (non-inverting input)
                 1 = C2VIN+ connects to C2VREF
                 0 = C2VIN+ connects to C2IN+ pin
bit 1-0          C2CH<1:0>: Comparator C2 Channel Select bits
                 00 = C12IN0- pin of C2 connects to C2VIN-
                 01 = C12IN1- pin of C2 connects to C2VIN-
                 10 = C12IN2- pin of C2 connects to C2VIN-
                 11 = C12IN3- pin of C2 connects to C2VIN-
Note 1:     Comparator output requires the following three conditions: C2OE = 1, C2ON = 1 and corresponding port
            TRIS bit = 0.
 2010 Microchip Technology Inc.                                                                    DS41303G-page 285
PIC18F2XK20/4XK20
20.7     Analog Input Connection
         Considerations                                        Note 1: When re ading a PORT register, all pins
                                                                       configured as analog inputs will read as a
A simplified c ircuit fo r an a nalog input is s hown i n
                                                                       ‘0’. Pins c onfigured as d igital i nputs w ill
Figure 20-6. Si nce the an alog in put p ins share the ir
                                                                       convert as an analog input, according to
connection w ith a di gital input, they hav e rev erse
                                                                       the input specification.
biased ESD prot ection dio des to V DD an d V SS. Th e
analog input, therefore, must be between VSS and VDD.                  2: Analog le vels on any pi n d efined as a
If the input voltage deviates from this range by more                     digital input, may cause the input buffer to
than 0.6V in ei ther di rection, o ne of t he diodes i s                  consume more current than is specified.
forward biased and a latch-up may occur.
A maximum source impedance of 10 k is recommended
for the anal og sources. Also, any exter nal componen t
connected to an analog input pin, such as a capacitor or
a Zener diode, should h ave very lit tle leakage current to
minimize inaccuracies introduced.
FIGURE 20-6:             ANALOG INPUT MODEL
                                                VDD
              Rs < 10K                                                   RIC
                             AIN
                                   CPIN                          ILEAKAGE(1)
           VA
                                   5 pF
                                                                 Vss
          Legend: CPIN     = Input Capacitance
                  ILEAKAGE = Leakage Current at the pin due to various junctions
                  RIC      = Interconnect Resistance
                  RS       = Source Impedance
                  VA       = Analog Voltage
            Note 1: See Section 26.0 “Electrical Characteristics”.
DS41303G-page 286                                                                      2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
20.8      Additional Comparator Features                          20.8.2       INTERNAL REFERENCE
                                                                               SELECTION
There are two additional comparator features:
                                                                  There are t wo internal voltage references available to
• Simultaneous read of comparator outputs
                                                                  the non-inverting in put of eac h co mparator. On e of
• Internal reference selection                                    these is the 1.2V Fixed Voltage Reference (FVR) and
                                                                  the other is the variable Comparator Voltage Reference
20.8.1        SIMULTANEOUS COMPARATOR                             (CVREF). T he C xRSEL b it o f th e C M2CON reg ister
              OUTPUT READ                                         determines which of these references is routed to the
The M C1OUT an d M C2OUT bi ts of t he C M2CON1                   Comparator Voltage refe rence out put (CXVREF). F ur-
register are mirror copies of both comparator outputs.            ther routing to the comparator is accomplished by the
The ability to read both outputs simultaneously from a            CxR b it of t he C MxCON0 r egister. S ee Section 21.1
single r egister e liminates t he t iming sk ew of r eading       “Comparator Voltage Reference” a nd Figure 20-2
separate registers.                                               and Figure 20-3 for more detail.
   Note 1: Obtaining the status of C1OUT or C2OUT
           by reading CM2CON1 does not affect the
           comparator interrupt mismatch registers.
REGISTER 20-3:          CM2CON1: COMPARATOR 2 CONTROL REGISTER 1
        R-0           R-0              R/W-0          R/W-0         U-0               U-0       U-0              U-0
   MC1OUT          MC2OUT            C1RSEL           C2RSEL        —                 —          —               —
bit 7                                                                                                                  bit 0
Legend:
R = Readable bit                   W = Writable bit            U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set            ‘0’ = Bit is cleared         x = Bit is unknown
bit 7            MC1OUT: Mirror Copy of C1OUT bit
bit 6            MC2OUT: Mirror Copy of C2OUT bit
bit 5            C1RSEL: Comparator C1 Reference Select bit
                 1 = CVREF routed to C1VREF input
                 0 = FVR (1.2 Volt fixed voltage reference) routed to C1VREF input
bit 4            C2RSEL: Comparator C2 Reference Select bit
                 1 = CVREF routed to C2VREF input
                 0 = FVR (1.2 Volt fixed voltage reference) routed to C2VREF input
bit 3-0          Unimplemented: Read as ‘0’
 2010 Microchip Technology Inc.                                                                      DS41303G-page 287
PIC18F2XK20/4XK20
TABLE 20-2:     REGISTERS ASSOCIATED WITH COMPARATOR MODULE
                                                                                                           Reset
   Name         Bit 7       Bit 6      Bit 5       Bit 4      Bit 3      Bit 2      Bit 1       Bit 0      Values
                                                                                                          on page
CM1CON0        C1ON       C1OUT        C1OE      C1POL       C1SP        C1R       C1CH1       C1CH0         62
CM2CON0        C2ON       C2OUT        C2OE      C2POL       C2SP        C2R       C2CH1       C2CH0         62
CM2CON1       MC1OUT     MC2OUT       C1RSEL     C2RSEL        —          —           —          —           63
CVRCON        CVREN       CVROE        CVRR      CVRSS       CVR3        CVR2       CVR1       CVR0          61
CVRCON2       FVREN        FVRST         —          —          —          —           —          —           61
INTCON       GIE/GIEH PEIE/GIEL       TMR0IE      INT0IE      RBIE     TMR0IF      INT0IF       RBIF         59
PIR2          OSCFIF        C1IF       C2IF        EEIF      BCLIF      HLVDIF     TMR3IF     CCP2IF         62
PIE2          OSCFIE        C1IE       C2IE        EEIE      BCLIE      HLVDIE     TMR3IE     CCP2IE         62
IPR2          OSCFIP        C1IP       C2IP        EEIP      BCLIP      HLVDIP     TMR3IP     CCP2IP         62
PORTA          RA7(1)      RA6(1)       RA5        RA4        RA3        RA2         RA1        RA0          62
LATA          LATA7(1)    LATA6(1)   PORTA Data Latch Register (Read and Write to Data Latch)                62
TRISA        TRISA7(1)   TRISA6(1) PORTA Data Direction Control Register                                     62
Legend: — = unimplemented, read as ‘0’. Shaded cells are unused by the comparator module.
Note 1: PORTA<7:6> and their direction and latch bits are individually configured as port pins based on various
        primary oscillator modes. When disabled, these bits read as ‘0’.
DS41303G-page 288                                                                    2010 Microchip Technology Inc.
                                                            PIC18F2XK20/4XK20
21.0       VOLTAGE REFERENCES                               21.1.3       OUTPUT CLAMPED TO VSS
There are tw o in dependent v oltage ref erences            The CV REF output voltage can be s et to Vs s w ith no
available:                                                  power consumption by c onfiguring C VRCON a s
                                                            follows:
• Programmable Comparator Voltage Reference
                                                            • CVREN = 0
• 1.2V Fixed Voltage Reference
                                                            • CVRR = 1
21.1       Comparator Voltage Reference                     • CVR<3:0> = 0000
                                                            This allows th e c omparator to dete ct a zero -crossing
The C omparator V oltage R eference module pr ovides        while not consuming additional CVREF module current.
an internally generated voltage reference for the com-
parators. The following features are available:             21.1.4       OUTPUT RATIOMETRIC TO VDD
•   Independent from Comparator operation                   The comparator vo ltage re ference is V DD derived and
•   Two 16-level voltage ranges                             therefore, the CVREF output changes with fluctuations in
•   Output clamped to VSS                                   VDD. The tested absolute accuracy of the Comparator
•   Ratiometric with VDD                                    Voltage R eference can be fo und in Section 26.0
                                                            “Electrical Characteristics”.
•   1.2 Fixed Reference Voltage (FVR)
The C VRCON re gister (Register 21-1) co ntrols th e        21.1.5       VOLTAGE REFERENCE OUTPUT
Voltage Reference module shown in Figure 21-1.
                                                            The CV REF voltage refe rence c an be output to th e
                                                            device CVREF pin by setting the CVROE bit of the CVR-
21.1.1        INDEPENDENT OPERATION
                                                            CON register to ‘1’. Selecting the reference voltage for
The comparator v oltage re ference i s i ndependent of      output on the C VREF pi n a utomatically overrides t he
the comparator configuration. Setting the CVREN bit of      digital output buffer and digital input threshold detector
the CVRCON register will enable the voltage reference       functions o f that pin. R eading the C VREF pi n w hen it
by allowing current to flow in the CVREF voltage divider.   has been configured for refe rence voltage output will
When both the CVREN bit is cleared, current flow in the     always return a ‘0’.
CVREF voltage divider is disabled minimizing the power
                                                            Due to the limited current drive capability, a buffer must
drain of the voltage reference peripheral.
                                                            be us ed o n th e v oltage refer ence o utput for external
21.1.2        OUTPUT VOLTAGE SELECTION                      connections to CVREF. Figure 21-2 shows an example
                                                            buffering technique.
The CVREF voltage ref erence has 2 ran ges w ith 16
voltage lev els in eac h ra nge. R ange se lection i s      21.1.6       OPERATION DURING SLEEP
controlled by the C VRR bit of th e C VRCON regi ster.
                                                            When the de vice w akes up from Sl eep th rough a n
The 1 6 le vels are set w ith the C VR<3:0> bi ts of th e
                                                            interrupt or a Watchdog Timer time-out, the contents of
CVRCON register.
                                                            the C VRCON re gister ar e n ot affected. To m inimize
The C VREF output vol tage is det ermined by th e           current co nsumption in S leep mo de, t he vo ltage
following equations:                                        reference should be disabled.
EQUATION 21-1:           CVREF OUTPUT VOLTAGE               21.1.7       EFFECTS OF A RESET
    CV RR = 1 (low range):                                  A device Reset affects the following:
       CVREF = (CVRSRC/24) X CVR<3:0> + VREF-               •   Comparator voltage reference is disabled
                                                            •   Fixed voltage reference is disabled
    CV RR = 0 (high range):
                                                            •   CVREF is removed from the CVREF pin
      CVREF = (CVRSRC/32) X (8 + CVR<3:0>) + VREF-          •   The high-voltage range is selected
    CV RSRC = V DD or [(VREF+) - (VREF-)]                   •   The CVR<3:0> range select bits are cleared
    Note: VREF- is 0 when CVRSS = 0
The full range of VSS to VDD cannot be realized due to
the construction of the module. See Figure 21-1.
 2010 Microchip Technology Inc.                                                                 DS41303G-page 289
PIC18F2XK20/4XK20
21.2    FVR Reference Module                                     21.2.1       FVR STABILIZATION PERIOD
The FVR reference is a stable fixed voltage reference,           When the Fixed Voltage Reference module is enabled, it
independent of VDD, with a nominal output voltage of             will require some time for the reference and its amplifier
1.2V. Thi s refe rence ca n be en abled by setting the           circuits to st abilize. T he u ser pr ogram m ust in clude a
FVREN bit of the CVRCO N2 register to ‘ 1’. The FVR              small del ay ro utine t o allow the mod ule to set tle. Th e
defaults to on when any one or more of the HFINTOSC,             FVRST stable bit of the CVRCON2 register also indicates
HLVD, or BOR functions are enabled. The FVR voltage              that the FVR reference has been operating long enough
reference can be routed to the comparators or an ADC             to be s table. Se e Section 26.0 “Electrical
input channel.                                                   Characteristics” for the minimum delay requirement.
FIGURE 21-1:            VOLTAGE REFERENCE BLOCK DIAGRAM
                              CVRSS = 1
                VREF+
                 VDD
                             CVRSS = 0                 8R
                                                                              CVR<3:0>
                    CVREN                               R
                                                                                  16-to-1 MUX
                                            16 Steps
                                                                                                       CVREF
                                                        R
                                                        R
                                    CVRR
                                                                  8R
                                           CVRSS = 1
                VREF-
                                           CVRSS = 0
                                                                                          FVR
                                                                 1.2 Volt Fixed
                                           FVREN                   Reference
                         From HVLD and                                                     FVRST
                                                            EN
                            BOR circuits
DS41303G-page 290                                                                                2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
FIGURE 21-2:              VOLTAGE REFERENCE OUTPUT BUFFER EXAMPLE
                      PIC18F2XK20/4XK20
                       CVREF
                                      R(1)
                       Module
                                                                               +
                                     Voltage     CVREF                                         Buffered CVREF Output
                                                                               –
                                    Reference
                                     Output
                                   Impedance
          Note 1:     R is dependent upon the voltage reference Configuration bits, CVR<3:0> and CVRR.
REGISTER 21-1:            CVRCON: COMPARATOR VOLTAGE REFERENCE 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
    CVREN            CVROE   (1)
                                      CVRR            CVRSS          CVR3               CVR2         CVR1          CVR0
bit 7                                                                                                                  bit 0
Legend:
R = Readable bit                   W = Writable bit              U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set              ‘0’ = Bit is cleared            x = Bit is unknown
bit 7               CVREN: Comparator Voltage Reference Enable bit
                    1 =CVREF circuit powered on
                    0 =CVREF circuit powered down
bit 6               CVROE: Comparator VREF Output Enable bit(1)
                    1 =CVREF voltage level is also output on the CVREF pin
                    0 =CVREF voltage is disconnected from the CVREF pin
bit 5               CVRR: Comparator VREF Range Selection bit
                    1 = 0 to 0.667 CVRSRC, with CVRSRC/24 step size (low range)
                    0 =0 .25 CVRSRC to 0.75 CVRSRC, with CVRSRC/32 step size (high range)
bit 4               CVRSS: Comparator VREF Source Selection bit
                    1 = Comparator reference source, CVRSRC = (VREF+) – (VREF-)
                    0 = Comparator reference source, CVRSRC = VDD – VSS
bit 3-0             CVR<3:0>: Comparator VREF Value Selection bits (0  (CVR<3:0>)  15)
                    When CVRR = 1:
                    CVREF = ((CVR<3:0>)/24)  (CVRSRC) + VREF-
                    When CVRR = 0:
                    CVREF = (CVRSRC/4) + ((CVR<3:0>)/32)  (CVRSRC) + VREF-
Note 1:      CVROE overrides the TRISA<2> bit setting.
 2010 Microchip Technology Inc.                                                                           DS41303G-page 291
PIC18F2XK20/4XK20
REGISTER 21-2:         CVRCON2: COMPARATOR VOLTAGE REFERENCE CONTROL 2 REGISTER
    R/W-0             R-0           U-0           U-0           U-0               U-0           U-0             U-0
   FVREN            FVRST           —             —              —                 —            —                —
bit 7                                                                                                                 bit 0
Legend:
R = Readable bit             W = Writable bit              U = Unimplemented bit, read as ‘0’
-n = Value at POR            ‘1’ = Bit is set              ‘0’ = Bit is cleared            x = Bit is unknown
bit 7          FVREN: Fixed Voltage Reference Enable bit
               1 = FVR circuit powered on
               0 = FVR circuit not enabled by FVREN. Other peripherals may enable FVR.
bit 6          FVRST: Fixed Voltage Stable Status bit
               1 = FVR is stable and can be used.
               0 = FVR is not stable and should not be used.
bit 5-0        Unimplemented: Read as ‘0’.
TABLE 21-1:        REGISTERS ASSOCIATED WITH COMPARATOR VOLTAGE REFERENCE
                                                                                                                 Reset
   Name            Bit 7    Bit 6         Bit 5    Bit 4       Bit 3       Bit 2        Bit 1         Bit 0      Values
                                                                                                                on page
CVRCON        CVREN         CVROE         CVRR    CVRSS      CVR3         CVR2          CVR1        CVR0          62
CVRCON2        FVREN        FVRST          —        —           —           —            —             —          61
CM1CON0        C1ON         C1OUT         C1OE    C1POL      C1SP          C1R          C1CH1     C1CH0           62
CM2CON0        C2ON         C2OUT         C2OE    C2POL      C2SP          C2R          C2CH1     C2CH0           62
CM2CON1       MC1OUT MC2OUT C1RSEL C2RSEL                       —           —            —             —          63
TRISA         TRISA7(1) TRISA6(1) PORTA Data Direction Control Register                                           62
Legend: Shaded cells are not used with the comparator voltage reference.
Note 1: PORTA pins are enabled based on oscillator configuration.
DS41303G-page 292                                                                         2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
22.0      HIGH/LOW-VOLTAGE                                          The block d iagram fo r th e HLVD module is s hown i n
                                                                    Figure 22-1.
          DETECT (HLVD)
                                                                    The m odule is en abled by setting th e H LVDEN bi t.
PIC18F2XK20/4XK20 devices have a High/Low-Voltage                   Each t ime th at th e H LVD m odule i s e nabled, th e c ir-
Detect module (HLVD). This is a programmab le circuit               cuitry requires some time to stabilize. The IRVST bit is
that allows the user to specify both a device voltage trip          a read-only bit and is used to indicate when the circuit
point and the di rection of c hange from that point. If the         is s table. T he m odule ca n on ly gen erate an in terrupt
device ex periences an excursion p ast the trip point in            after the circuit is stable and IRVST is set.
that direction, an interrupt flag is set. If the interrupt is
enabled, the program execution will branch to the inter-            The VDIRMAG bit determines the overall operation of
rupt vector address and the software can then respond               the m odule. W hen VD IRMAG is c leared, t he module
to the interrupt.                                                   monitors for drops in V DD below a pre determined set
                                                                    point. When the bit is set, the module monitors for rises
The High/Low-Voltage D etect C ontrol register                      in VDD above the set point.
(Register 22-1) completely controls the operation of the
HLVD m odule. This a llows the circuitry to be “t urned
off” by the us   er under software control, w hich
minimizes the current consumption for the device.
REGISTER 22-1:           HLVDCON: HIGH/LOW-VOLTAGE DETECT CONTROL REGISTER
     R/W-0             U-0              R-0           R/W-0         R/W-0          R/W-1            R/W-0           R/W-1
  VDIRMAG               —             IRVST           HLVDEN     HLVDL3(1)       HLVDL2(1)       HLVDL1(1)       HLVDL0(1)
bit 7                                                                                                                     bit 0
Legend:
R = Readable bit                   W = Writable bit             U = Unimplemented               C = Clearable only bit
-n = Value at POR                  ‘1’ = Bit is set             ‘0’ = Bit is cleared            x = Bit is unknown
bit 7             VDIRMAG: Voltage Direction Magnitude Select bit
                  1 = Event occurs when voltage equals or exceeds trip point (HLVDL<3:0>)
                  0 = Event occurs when voltage equals or falls below trip point (HLVDL<3:0>)
bit 6             Unimplemented: Read as ‘0’
bit 5             IRVST: Internal Reference Voltage Stable Flag bit
                  1 = Indicates that the voltage detect logic will generate the interrupt flag at the specified voltage range
                  0 = Indicates that the voltage detect logic will not generate the interrupt flag at the specified voltage
                      range and the HLVD interrupt should not be enabled
bit 4             HLVDEN: High/Low-Voltage Detect Power Enable bit
                  1 = HLVD enabled
                  0 = HLVD disabled
bit 3-0           HLVDL<3:0>: Voltage Detection Limit bits(1)
                  1111 = External analog input is used (input comes from the HLVDIN pin)
                  1110 = Maximum setting
                  .
                  .
                  .
                  0000 = Minimum setting
Note 1:      See Table 26-4 for specifications.
 2010 Microchip Technology Inc.                                                                          DS41303G-page 293
PIC18F2XK20/4XK20
22.1      Operation                                                       The trip point voltage is software programmable to any
                                                                          one o f 16 va lues. The tri p po int is se lected b y
When the HLVD module is enabled, a comparator uses                        programming th e H LVDL<3:0> bi ts of the HLVDCON
an int ernally gen erated re ference vol tage as the s et                 register.
point. Th e s et po int is co mpared w ith t he t rip p oint,
where eac h no de in the resistor divider represents a                    The HLVD module has an additional feature that allows
trip point voltage. The “trip point” voltage is the voltage               the user to supply the trip voltage to the module from
level at which the device detects a high or low-voltage                   an e xternal s ource. Th is m ode is e nabled w hen bits
event, depending on the configuration of the module.                      HLVDL<3:0> are se t to ‘1111’. In thi s st ate, the
When the supply voltage is equal to the trip point, the                   comparator input is multiplexed from the external input
voltage tapped off of th e resistor array is equal to the                 pin, H LVDIN. T his gi ves us ers fl exibility because it
internal re ference v oltage g enerated by th e voltage                   allows them to configure the High/Low-Voltage Detect
reference module. The comparator then generates an                        interrupt to occur at any voltage in the valid operating
interrupt signal by setting the HLVDIF bit.                               range.
FIGURE 22-1:             HLVD MODULE BLOCK DIAGRAM (WITH EXTERNAL INPUT)
               Externally Generated
                    Trip Point
         VDD
                                                VDD                      HLVDL<3:0>           HLVDCON
                                                                                              Register
  HLVDIN                                                                              HLVDEN          VDIRMAG
                    HLVDIN
                                                                                                                       Set
                                                                16-to-1 MUX
                                                                                                                     HLVDIF
                                 HLVDEN
                                                                               Internal Voltage
                                  BOREN                                           Reference
DS41303G-page 294                                                                                  2010 Microchip Technology Inc.
                                                                      PIC18F2XK20/4XK20
22.2     HLVD Setup                                                   Depending on the application, the HLVD module does
                                                                      not need to be operating constantly. To decrease the
The following st eps are ne eded t o set up the H LVD                 current requirements, the H LVD cir cuitry may only
module:                                                               need to be enabled for short periods where the voltage
1.   Write t he value t o the H LVDL<3:0> bi ts t hat                 is ch ecked. Af ter doi ng th e c heck, the H LVD mo dule
     selects the desired HLVD trip point.                             may be disabled.
2.   Set the VD IRMAG bit to dete ct high vol tage
     (VDIRMAG = 1) or low voltage (VDIRMAG = 0).                      22.4      HLVD Start-up Time
3.   Enable the H LVD mo dule by se tting the                         The int ernal refer ence vo ltage of the HLVD module,
     HLVDEN bit.                                                      specified in el ectrical specification p arameter D 420,
4.   Clear th e H LVD i nterrupt fl ag bi t of th e PIR 2             may be us ed by o ther in ternal circuitry, such as th e
     register, w hich ma y have b een s et f rom a                    Programmable Brown-out Reset. If the HLVD or other
     previous interrupt.                                              circuits u sing the voltage r eference a re d isabled to
5.   Enable t he H LVD i nterrupt i f i nterrupts ar e                lower the device’s current consumption, the reference
     desired by s etting th e HLVDIE bit o f th e PIE2                voltage circuit will require time to become stable before
     register, and the GIE and PEIE bits of the INT-                  a lo w or hig h-voltage condition ca n be reliably
     CON register. An interrupt will not be generated                 detected. This start-up time, TIRVST, is an interval that
     until the IRVST bit is set.                                      is independent of device clock speed. It is specified in
                                                                      electrical specification parameter 36.
22.3     Current Consumption                                          The HLVD interrupt flag is not enabled until T IRVST has
                                                                      expired an d a s table r eference v oltage i s r eached. F or
When the mo dule i s e nabled, th e H LVD co mparator
                                                                      this r eason, brief e xcursions beyond t he s et point may
and voltage divider are enabled and will consume static
                                                                      not be detected during this interval. Refer to Figure 22-2
current. The total current consumption, when enabled,
                                                                      or Figure 22-3.
is specified in electrical specification parameter D024B.
FIGURE 22-2:            LOW-VOLTAGE DETECT OPERATION (VDIRMAG = 0)
     CASE 1:
                                                             HLVDIF may not be set
                  VDD
                                                                                                            VHLVD
               HLVDIF
         Enable HLVD
                                                           TIVRST
                IRVST
                                                                                                 HLVDIF cleared by software
                                                     Internal Reference is stable
     CASE 2:
                  VDD
                                                                                                            VHLVD
               HLVDIF
         Enable HLVD
                                                           TIVRST
                IRVST
                            Internal Reference is stable
                                                                                        HLVDIF cleared by software
                                                                     HLVDIF cleared by software,
                                                                     HLVDIF remains set since HLVD condition still exists
 2010 Microchip Technology Inc.                                                                             DS41303G-page 295
PIC18F2XK20/4XK20
FIGURE 22-3:           HIGH-VOLTAGE DETECT OPERATION (VDIRMAG = 1)
    CASE 1:
                         HLVDIF may not be set
                                                                                                        VHLVD
                 VDD
              HLVDIF
       Enable HLVD
               IRVST                                    TIVRST
                                                                                             HLVDIF cleared by software
                                                  Internal Reference is stable
    CASE 2:
                                                                                                        VHLVD
                VDD
              HLVDIF
       Enable HLVD
              IRVST                                     TIVRST
                         Internal Reference is stable
                                                                                    HLVDIF cleared by software
                                                                 HLVDIF cleared by software,
                                                                 HLVDIF remains set since HLVD condition still exists
DS41303G-page 296                                                                            2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
22.5      Applications                                             FIGURE 22-4:             TYPICAL LOW-VOLTAGE
                                                                                            DETECT APPLICATION
In many applications, the ability to detect a drop below,
or ris e ab ove, a p articular t hreshold i s d esirable. For
example, the H LVD m odule c ould be periodically
enabled to detect Universal Serial Bus (USB) attach or
detach. This assumes the device is powered by a lower
voltage source than the USB when detached. An attach                      VA
would indicate a high-voltage detect from, for example,                   VB
3.3V to 5V (th e voltage on USB) and vice versa for a
                                                                     Voltage
detach. This feature could save a design a few extra
components and an attach signal (input pin).
For general battery applications, Figure 22-4 shows a
possible voltage curve. Over time, the device voltage
decreases. When the device voltage reaches voltage
VA, the HLVD logic generates an interrupt at time TA.
The interrupt c ould c ause the e xecution of an ISR,                                        Time    TA     TB
which w ould a llow the a pplication t o pe rform
“housekeeping t asks” an d pe rform a co ntrolled                              Legend: VA = HLVD trip point
shutdown before the device vol tage ex its the v alid                                  VB = Minimum valid device
operating range at TB. The HLVD, thus, would give the                                       operating voltage
application a ti me window, repre sented by        the
difference between TA and TB, to safely exit.
TABLE 22-1:         REGISTERS ASSOCIATED WITH HIGH/LOW-VOLTAGE DETECT MODULE
                                                                                                                   Reset
    Name           Bit 7         Bit 6        Bit 5        Bit 4    Bit 3          Bit 2     Bit 1        Bit 0    Values
                                                                                                                  on Page
HLVDCON         VDIRMAG            —         IRVST       HLVDEN    HLVDL3        HLVDL2    HLVDL1     HLVDL0        60
INTCON          GIE/GIEH PEIE/GIEL          TMR0IE        INT0IE    RBIE         TMR0IF     INT0IF        RBIF      59
PIR2             OSCFIF          C1IF         C2IF         EEIF    BCLIF          HLVDIF    TMR3IF    CCP2IF        62
PIE2             OSCFIE          C1IE         C2IE         EEIE    BCLIE         HLVDIE    TMR3IE     CCP2IE        62
IPR2             OSCFIP          C1IP         C2IP         EEIP    BCLIP         HLVDIP    TMR3IP     CCP2IP        62
Legend: — = unimplemented, read as ‘0’. Shaded cells are unused by the HLVD module.
 2010 Microchip Technology Inc.                                                                       DS41303G-page 297
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 298    2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
23.0     SPECIAL FEATURES OF
         THE CPU
PIC18F2XK20/4XK20 devices inc lude several f eatures
intended to maximize reliability and minimize cost through
elimination of external components. These are:
• Oscillator Selection
• Resets:
  - Power-on Reset (POR)
  - Power-up Timer (PWRT)
  - Oscillator Start-up Timer (OST)
  - Brown-out Reset (BOR)
• Interrupts
• Watchdog Timer (WDT)
• Code Protection
• ID Locations
• In-Circuit Serial Programming™
The o scillator ca n b e c onfigured f or th e a pplication
depending on frequency, power, accuracy and cost. All
of th e o ptions a re discussed in de tail i n Section 2.0
“Oscillator Module (With Fail-Safe Clock Monitor)”.
A complete discussion of device Resets and interrupts
is available in previous sections of this data sheet.
In additio n to their Pow er-up and Os cillator S tart-up
Timers provided for R esets, PIC 18F2XK20/4XK20
devices have a W atchdog T imer, w hich is either
permanently enabled v ia th e C onfiguration bit s or
software controlled (if configured as disabled).
The inclusion of an internal RC oscillator also provides
the ad ditional b enefits of a Fai l-Safe C lock Mo nitor
(FSCM) and Two-Speed Start-up. FSCM provides for
background mo nitoring o f the peri pheral cl ock an d
automatic s witchover in the ev ent o f i ts failure. Two-
Speed S tart-up ena bles c ode to be exe cuted alm ost
immediately on start-up, while the primary clock source
completes its start-up delays.
All of thes e fe atures are e nabled an d c onfigured b y
setting the appropriate Configuration register bits.
 2010 Microchip Technology Inc.                                        DS41303G-page 299
PIC18F2XK20/4XK20
23.1      Configuration Bits
The C onfiguration bit s ca n be prog rammed (read as
‘0’) or left unprogrammed (read as ‘1’) to select various
device configurations. These bits are mapped starting
at program memory location 300000h.
The user will not e tha t ad dress 300000h is be yond t he
user program memor y sp ace. In fact, it b elongs to t he
configuration memory space (300000h-3FFFFFh), which
can only be accessed using table reads and table writes.
Programming the Configuration registers is done in a
manner similar to programming the Flash memory. The
WR bit in the EECON1 register starts a self-timed write
to the Configuration register. In normal operation mode,
a TBLWT in struction with the TBLP TR po inting to th e
Configuration register sets up the address and the data
for the Configuration register write. Setting the WR bit
starts a lo ng write to the Configuration re gister. Th e
Configuration registers are written a byte at a time. To
write or erase a configuration cell, a TBLWT instruction
can write a ‘1’ or a ‘0’ into the cell. For additional details
on Flash programming, refer to Section 6.5 “Writing
to Flash Program Memory”.
TABLE 23-1:         CONFIGURATION BITS AND DEVICE IDs
                                                                                                                 Default/
       File Name           Bit 7      Bit 6      Bit 5      Bit 4    Bit 3      Bit 2      Bit 1     Bit 0    Unprogrammed
                                                                                                                  Value
300001h     CONFIG1H       IESO     FCMEN         —          —      FOSC3      FOSC2      FOSC1     FOSC0       00-- 0111
300002h     CONFIG2L         —         —          —       BORV1     BORV0      BOREN1     BOREN0 PWRTEN         ---1 1111
300003h     CONFIG2H         —         —          —       WDTPS3    WDTPS2     WDTPS1 WDTPS0        WDTEN       ---1 1111
300005h     CONFIG3H MCLRE             —          —          —      HFOFST LPT1OSC PBADEN          CCP2MX       1--- 1011
300006h     CONFIG4L      DEBUG      XINST        —          —         —         LVP        —      STVREN       10-- -1-1
300008h     CONFIG5L         —         —          —          —       CP3(1)     CP2(1)     CP1        CP0       ---- 1111
300009h     CONFIG5H       CPD        CPB         —          —         —          —         —          —        11-- ----
30000Ah     CONFIG6L         —         —          —          —      WRT3(1)    WRT2(1)    WRT1       WRT0       ---- 1111
30000Bh     CONFIG6H      WRTD       WRTB       WRTC         —         —          —         —          —        111- ----
30000Ch     CONFIG7L         —         —          —          —      EBTR3(1)   EBTR2(1)   EBTR1     EBTR0       ---- 1111
30000Dh     CONFIG7H         —       EBTRB        —          —         —          —         —          —        -1-- ----
3FFFFEh DEVID1(2)          DEV2       DEV1      DEV0       REV4      REV3       REV2       REV1      REV0       qqqq qqqq(2)
3FFFFFh     DEVID2  (2)
                          DEV10       DEV9      DEV8       DEV7      DEV6       DEV5       DEV4      DEV3       0000 1100
Legend:     x = unknown, u = unchanged, – = unimplemented, q = value depends on condition.
            Shaded cells are unimplemented, read as ‘0’.
Note 1:     Implemented but not used in PIC18FX3K20 and PIC18FX4K20 devices; maintain this bit set.
     2:     See Register 23-12 for DEVID1 values. DEVID registers are read-only and cannot be programmed by the user.
DS41303G-page 300                                                                              2010 Microchip Technology Inc.
                                                                 PIC18F2XK20/4XK20
REGISTER 23-1:         CONFIG1H: CONFIGURATION REGISTER 1 HIGH
     R/P-0          R/P-0              U-0          U-0          R/P-0        R/P-1          R/P-1       R/P-1
        IESO       FCMEN               —             —          FOSC3        FOSC2          FOSC1        FOSC0
bit 7                                                                                                         bit 0
Legend:
R = Readable bit                   P = Programmable bit      U = Unimplemented bit, read as ‘0’
-n = Value when device is unprogrammed                       x = Bit is unknown
bit 7            IESO: Internal/External Oscillator Switchover bit
                 1 = Oscillator Switchover mode enabled
                 0 = Oscillator Switchover mode disabled
bit 6            FCMEN: Fail-Safe Clock Monitor Enable bit
                 1 = Fail-Safe Clock Monitor enabled
                 0 = Fail-Safe Clock Monitor disabled
bit 5-4          Unimplemented: Read as ‘0’
bit 3-0          FOSC<3:0>: Oscillator Selection bits
                 11xx = External RC oscillator, CLKOUT function on RA6
                 101x = External RC oscillator, CLKOUT function on RA6
                 1001 = Internal oscillator block, CLKOUT function on RA6, port function on RA7
                 1000 = Internal oscillator block, port function on RA6 and RA7
                 0111 = External RC oscillator, port function on RA6
                 0110 = HS oscillator, PLL enabled (Clock Frequency = 4 x FOSC1)
                 0101 = EC oscillator, port function on RA6
                 0100 = EC oscillator, CLKOUT function on RA6
                 0011 = External RC oscillator, CLKOUT function on RA6
                 0010 = HS oscillator
                 0001 = XT oscillator
                 0000 = LP oscillator
 2010 Microchip Technology Inc.                                                                  DS41303G-page 301
PIC18F2XK20/4XK20
REGISTER 23-2:              CONFIG2L: CONFIGURATION REGISTER 2 LOW
          U-0             U-0              U-0            R/P-1           R/P-1              R/P-1           R/P-1          R/P-1
          —                —               —            BORV1(1)         BORV0(1)          BOREN1(2)       BOREN0(2)     PWRTEN(2)
bit 7                                                                                                                               bit 0
Legend:
R = Readable bit                     P = Programmable bit             U = Unimplemented bit, read as ‘0’
-n = Value when device is unprogrammed                                x = Bit is unknown
bit 7-5              Unimplemented: Read as ‘0’
bit 4-3              BORV<1:0>: Brown-out Reset Voltage bits(1)
                     11 = VBOR set to 1.8V nominal
                     10 = VBOR set to 2.2V nominal
                     01 = VBOR set to 2.7V nominal
                     00 = VBOR set to 3.0V nominal
bit 2-1              BOREN<1:0>: Brown-out Reset Enable bits(2)
                     11 = Brown-out Reset enabled in hardware only (SBOREN is disabled)
                     10 = Brown-out Reset enabled in hardware only and disabled in Sleep mode
                          (SBOREN is disabled)
                     01 = Brown-out Reset enabled and controlled by software (SBOREN is enabled)
                     00 = Brown-out Reset disabled in hardware and software
bit 0                PWRTEN: Power-up Timer Enable bit(2)
                     1 = PWRT disabled
                     0 = PWRT enabled
Note      1:    See Section 26.1 “DC Characteristics: Supply Voltage” for specifications.
          2:    The Power-up Timer is decoupled from Brown-out Reset, allowing these features to be independently controlled.
REGISTER 23-3:              CONFIG2H: CONFIGURATION REGISTER 2 HIGH
          U-0             U-0              U-0            R/P-1           R/P-1              R/P-1           R/P-1          R/P-1
          —                —               —            WDTPS3           WDTPS2            WDTPS1          WDTPS0          WDTEN
bit 7                                                                                                                               bit 0
Legend:
R = Readable bit                     P = Programmable bit             U = Unimplemented bit, read as ‘0’
-n = Value when device is unprogrammed                                x = Bit is unknown
bit 7-5              Unimplemented: Read as ‘0’
bit 4-1              WDTPS<3:0>: Watchdog Timer Postscale Select bits
                     1111 = 1:32,768
                     1110 = 1:16,384
                     1101 = 1:8,192
                     1100 = 1:4,096
                     1011 = 1:2,048
                     1010 = 1:1,024
                     1001 = 1:512
                     1000 = 1:256
                     0111 = 1:128
                     0110 = 1:64
                     0101 = 1:32
                     0100 = 1:16
                     0011 = 1:8
                     0010 = 1:4
                     0001 = 1:2
                     0000 = 1:1
bit 0                WDTEN: Watchdog Timer Enable bit
                     1 = WDT is always enabled. SWDTEN bit has no effect
                     0 = WDT is controlled by SWDTEN bit of the WDTCON register
DS41303G-page 302                                                                                       2010 Microchip Technology Inc.
                                                                       PIC18F2XK20/4XK20
REGISTER 23-4:             CONFIG3H: CONFIGURATION REGISTER 3 HIGH
        R/P-1            U-0            U-0              U-0           R/P-1             R/P-0            R/P-1         R/P-1
    MCLRE                 —              —                —           HFOFST         LPT1OSC             PBADEN        CCP2MX
bit 7                                                                                                                        bit 0
Legend:
R = Readable bit                   P = Programmable bit             U = Unimplemented bit, read as ‘0’
-n = Value when device is unprogrammed                              x = Bit is unknown
bit 7               MCLRE: MCLR Pin Enable bit
                    1 = MCLR pin enabled; RE3 input pin disabled
                    0 = RE3 input pin enabled; MCLR disabled
bit 6-4             Unimplemented: Read as ‘0’
bit 3               HFOFST: HFINTOSC Fast Start-up
                    1 = HFINTOSC starts clocking the CPU without waiting for the oscillator to stabilize.
                    0 = The system clock is held off until the HFINTOSC is stable.
bit 2               LPT1OSC: Low-Power Timer1 Oscillator Enable bit
                    1 = Timer1 configured for low-power operation
                    0 = Timer1 configured for higher power operation
bit 1               PBADEN: PORTB A/D Enable bit
                    (Affects ANSELH Reset state. ANSELH controls PORTB<4:0> pin configuration.)
                    1 = PORTB<4:0> pins are configured as analog input channels on Reset
                    0 = PORTB<4:0> pins are configured as digital I/O on Reset
bit 0               CCP2MX: CCP2 MUX bit
                    1 = CCP2 input/output is multiplexed with RC1
                    0 = CCP2 input/output is multiplexed with RB3
REGISTER 23-5:             CONFIG4L: CONFIGURATION REGISTER 4 LOW
        R/P-1           R/P-0           U-0              U-0             U-0             R/P-1             U-0          R/P-1
    DEBUG               XINST            —                —              —               LVP   (1)
                                                                                                           —           STVREN
bit 7                                                                                                                        bit 0
Legend:
R = Readable bit                   P = Programmable bit             U = Unimplemented bit, read as ‘0’
-n = Value when device is unprogrammed                              x = Bit is unknown
bit 7               DEBUG: Background Debugger Enable bit
                    1 = Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
                    0 = Background debugger enabled, RB6 and RB7 are dedicated to In-Circuit Debug
bit 6               XINST: Extended Instruction Set Enable bit
                    1 = Instruction set extension and Indexed Addressing mode enabled
                    0 = Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
bit 5-3             Unimplemented: Read as ‘0’
bit 2               LVP: Single-Supply ICSP Enable bit
                    1 = Single-Supply ICSP enabled
                    0 = Single-Supply ICSP disabled
bit 1               Unimplemented: Read as ‘0’
bit 0               STVREN: Stack Full/Underflow Reset Enable bit
                    1 = Stack full/underflow will cause Reset
                    0 = Stack full/underflow will not cause Reset
Note 1:         Can only be changed by a programmer in high-voltage programming mode.
 2010 Microchip Technology Inc.                                                                                 DS41303G-page 303
PIC18F2XK20/4XK20
REGISTER 23-6:          CONFIG5L: CONFIGURATION REGISTER 5 LOW
        U-0           U-0           U-0            U-0      R/C-1          R/C-1             R/C-1           R/C-1
        —              —             —             —        CP3   (1)
                                                                          CP2     (1)
                                                                                              CP1             CP0
bit 7                                                                                                                bit 0
Legend:
R = Readable bit                                         U = Unimplemented bit, read as ‘0’
-n = Value when device is unprogrammed                   C = Clearable only bit
bit 7-4           Unimplemented: Read as ‘0’
bit 3             CP3: Code Protection bit(1)
                  1 = Block 3 not code-protected
                  0 = Block 3 code-protected
bit 2             CP2: Code Protection bit(1)
                  1 = Block 2 not code-protected
                  0 = Block 2 code-protected
bit 1             CP1: Code Protection bit
                  1 = Block 1 not code-protected
                  0 = Block 1 code-protected
bit 0             CP0: Code Protection bit
                  1 = Block 0 not code-protected
                  0 = Block 0 code-protected
Note 1:       Implemented, but not used in PIC18FX3K20 and PIC18FX4K20 devices.
REGISTER 23-7:          CONFIG5H: CONFIGURATION REGISTER 5 HIGH
    R/C-1            R/C-1          U-0            U-0       U-0            U-0                U-0            U-0
        CPD           CPB            —             —          —              —                 —               —
bit 7                                                                                                                bit 0
Legend:
R = Readable bit                                         U = Unimplemented bit, read as ‘0’
-n = Value when device is unprogrammed                   C = Clearable only bit
bit 7             CPD: Data EEPROM Code Protection bit
                  1 = Data EEPROM not code-protected
                  0 = Data EEPROM code-protected
bit 6             CPB: Boot Block Code Protection bit
                  1 = Boot Block not code-protected
                  0 = Boot Block code-protected
bit 5-0           Unimplemented: Read as ‘0’
DS41303G-page 304                                                                        2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
REGISTER 23-8:           CONFIG6L: CONFIGURATION REGISTER 6 LOW
        U-0            U-0            U-0             U-0          R/C-1           R/C-1          R/C-1          R/C-1
        —               —              —              —           WRT3(1)        WRT2(1)          WRT1          WRT0
bit 7                                                                                                                    bit 0
Legend:
R = Readable bit                                                U = Unimplemented bit, read as ‘0’
-n = Value when device is unprogrammed                          C = Clearable only bit
bit 7-4           Unimplemented: Read as ‘0’
bit 3             WRT3: Write Protection bit(1)
                  1 = Block 3 not write-protected
                  0 = Block 3 write-protected
bit 2             WRT2: Write Protection bit(1)
                  1 = Block 2 not write-protected
                  0 = Block 2 write-protected
bit 1             WRT1: Write Protection bit
                  1 = Block 1 not write-protected
                  0 = Block 1 write-protected
bit 0             WRT0: Write Protection bit
                  1 = Block 0 not write-protected
                  0 = Block 0 write-protected
Note 1:       Implemented, but not used in PIC18FX3K20 and PIC18FX4K20 devices.
REGISTER 23-9:           CONFIG6H: CONFIGURATION REGISTER 6 HIGH
     R/C-1            R/C-1           R-1             U-0            U-0            U-0            U-0           U-0
    WRTD              WRTB          WRTC(1)           —              —              —               —             —
bit 7                                                                                                                  bit 0
Legend:
R = Readable bit                                                U = Unimplemented bit, read as ‘0’
-n = Value when device is unprogrammed                          C = Clearable only bit
bit 7             WRTD: Data EEPROM Write Protection bit
                  1 = Data EEPROM not write-protected
                  0 = Data EEPROM write-protected
bit 6             WRTB: Boot Block Write Protection bit
                  1 = Boot Block not write-protected
                  0 = Boot Block write-protected
bit 5             WRTC: Configuration Register Write Protection bit(1)
                  1 = Configuration registers not write-protected
                  0 = Configuration registers write-protected
bit 4-0           Unimplemented: Read as ‘0’
Note 1:       This bit is read-only in normal execution mode; it can be written only in Program mode.
 2010 Microchip Technology Inc.                                                                         DS41303G-page 305
PIC18F2XK20/4XK20
REGISTER 23-10: CONFIG7L: CONFIGURATION REGISTER 7 LOW
        U-0           U-0            U-0           U-0           R/C-1         R/C-1            R/C-1           R/C-1
        —              —             —              —          EBTR3(1)      EBTR2(1)           EBTR1          EBTR0
bit 7                                                                                                                  bit 0
Legend:
R = Readable bit                                             U = Unimplemented bit, read as ‘0’
-n = Value when device is unprogrammed                       C = Clearable only bit
bit 7-4           Unimplemented: Read as ‘0’
bit 3             EBTR3: Table Read Protection bit(1)
                  1 = Block 3 not protected from table reads executed in other blocks
                  0 = Block 3 protected from table reads executed in other blocks
bit 2             EBTR2: Table Read Protection bit(1)
                  1 = Block 2 not protected from table reads executed in other blocks
                  0 = Block 2 protected from table reads executed in other blocks
bit 1             EBTR1: Table Read Protection bit
                  1 = Block 1 not protected from table reads executed in other blocks
                  0 = Block 1 protected from table reads executed in other blocks
bit 0             EBTR0: Table Read Protection bit
                  1 = Block 0 not protected from table reads executed in other blocks
                  0 = Block 0 protected from table reads executed in other blocks
Note 1:       Implemented, but not used in PIC18FX3K20 and PIC18FX4K20 devices.
REGISTER 23-11: CONFIG7H: CONFIGURATION REGISTER 7 HIGH
        U-0          R/C-1           U-0           U-0            U-0           U-0               U-0            U-0
        —           EBTRB            —              —             —              —                —              —
bit 7                                                                                                                  bit 0
Legend:
R = Readable bit                                             U = Unimplemented bit, read as ‘0’
-n = Value when device is unprogrammed                       C = Clearable only bit
bit 7             Unimplemented: Read as ‘0’
bit 6             EBTRB: Boot Block Table Read Protection bit
                  1 = Boot Block not protected from table reads executed in other blocks
                  0 = Boot Block protected from table reads executed in other blocks
bit 5-0           Unimplemented: Read as ‘0’
DS41303G-page 306                                                                           2010 Microchip Technology Inc.
                                                                 PIC18F2XK20/4XK20
REGISTER 23-12: DEVID1: DEVICE ID REGISTER 1 FOR PIC18F2XK20/4XK20
        R              R             R              R              R             R                R            R
     DEV2           DEV1           DEV0           REV4           REV3          REV2           REV1           REV0
bit 7                                                                                                              bit 0
Legend:
R = Readable bit                                             U = Unimplemented bit, read as ‘0’
-n = Value when device is unprogrammed                       C = Clearable only bit
bit 7-5          DEV<2:0>: Device ID bits
                 000 = PIC18F46K20
                 001 = PIC18F26K20
                 010 = PIC18F45K20
                 011 = PIC18F25K20
                 100 = PIC18F44K20
                 101 = PIC18F24K20
                 110 = PIC18F43K20
                 111 = PIC18F23K20
bit 4-0          REV<4:0>: Revision ID bits
                 These bits are used to indicate the device revision.
REGISTER 23-13: DEVID2: DEVICE ID REGISTER 2 FOR PIC18F2XK20/4XK20
        R              R             R              R              R             R                R            R
    DEV10           DEV9           DEV8           DEV7           DEV6          DEV5           DEV4           DEV3
bit 7                                                                                                              bit 0
Legend:
R = Readable bit                                             U = Unimplemented bit, read as ‘0’
-n = Value when device is unprogrammed                       C = Clearable only bit
bit 7-0          DEV<10:3>: Device ID bits
                 These bits are used with the DEV<2:0> bits in the Device ID Register 1 to identify the
                 part number.
                 0010 0000 = PIC18F2XK20/4XK20 devices
Note 1:     These values for DEV<10:3> may be shared with other devices. The specific device is always identified
            by using the entire DEV<10:0> bit sequence.
 2010 Microchip Technology Inc.                                                                      DS41303G-page 307
PIC18F2XK20/4XK20
23.2      Watchdog Timer (WDT)
For PIC18F2XK20/4XK20 devices, the WDT is driven
by the LFINTOSC source. When the WDT is enabled,
the cl ock source is als o ena bled. Th e nominal WD T
period is 4 ms and has the same stability as the LFIN-
TOSC oscillator.
The 4 ms period of the WDT is multiplied by a 16-bit
postscaler. Any output of the WD T po stscaler is
selected by a multiplexer, controlled by bits in Configu-
ration Register 2H. Available periods range from 4 ms
to 13 1.072 seconds (2 .18 minutes). Th e W DT an d
postscaler are cleared when any of the following events
occur: a SLEEP or CLRWDT instruction is executed, the
IRCF bits of the O SCCON register are changed or a
clock failure has occurred.
   Note 1: The CLRWDT an d SLEEP in structions
           clear th e W DT a nd postscaler counts
           when executed.
          2: Changing t he s etting o f t he I RCF b its o f
             the O SCCON re gister clears t he WDT
             and postscaler counts.
          3: When a CLRWDT instruction is executed,
             the postscaler count will be cleared.
FIGURE 23-1:               WDT BLOCK DIAGRAM
              SWDTEN             Enable WDT
               WDTEN
                                           WDT Counter
       LFINTOSC Source                        128                                                       Wake-up
                                                                                                         from Power
                                                                                                         Managed Modes
  Change on IRCF bits
                                                         Programmable Postscaler   Reset                 WDT
                CLRWDT
                                                              1:1 to 1:32,768                            Reset
       All Device Resets
          WDTPS<3:0>                                 4
                  Sleep
DS41303G-page 308                                                                           2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
23.2.1        CONTROL REGISTER
Register 23-14 shows the WDTCON register. This is a
readable and writable register which contains a control
bit tha t al lows sof tware to ov erride th e WD T en able
Configuration bit, but only if the Configuration bit has
disabled the WDT.
REGISTER 23-14: WDTCON: WATCHDOG TIMER CONTROL REGISTER
        U-0             U-0             U-0           U-0          U-0                U-0           U-0             R/W-0
        —               —                —            —             —                 —             —             SWDTEN(1)
bit 7                                                                                                                   bit 0
Legend:
R = Readable bit                   W = Writable bit            U = Unimplemented bit, read as ‘0’
-n = Value at POR                  ‘1’ = Bit is set            ‘0’ = Bit is cleared            x = Bit is unknown
bit 7-1          Unimplemented: Read as ‘0’
bit 0            SWDTEN: Software Enable or Disable the Watchdog Timer bit(1)
                 1 = WDT is turned on
                 0 = WDT is turned off (Reset value)
   Note 1: This bit has no effect if the Configuration bit, WDTEN, is enabled.
TABLE 23-2:        SUMMARY OF WATCHDOG TIMER REGISTERS
                                                                                                                     Reset
    Name          Bit 7        Bit 6          Bit 5    Bit 4       Bit 3        Bit 2       Bit 1         Bit 0      Values
                                                                                                                    on page
RCON              IPEN        SBOREN           —          RI        TO           PD         POR           BOR         58
WDTCON              —           —              —          —         —            —           —       SWDTEN           60
CONFIG2H                                              WDTPS3 WDTPS2 WDTPS1 WDTPS0                    WDTEN            302
Legend: — = unimplemented, read as ‘0’. Shaded cells are not used by the Watchdog Timer.
 2010 Microchip Technology Inc.                                                                          DS41303G-page 309
PIC18F2XK20/4XK20
23.3     Program Verification and                               Each of the blocks has three code protection bits asso-
         Code Protection                                        ciated with them. They are:
                                                                • Code-Protect bit (CPn)
The ov erall s tructure of the cod e pro tection on th e
PIC18 F lash d evices differs s ignificantly f rom oth er       • Write-Protect bit (WRTn)
PIC® microcontroller devices.                                   • External Block Table Read bit (EBTRn)
The user program memory is divided into three or five           Figure 23-2 shows the program memory organization
blocks, dep ending on the device. On e of the se is a           for 8, 16 and 32-Kbyte devices and the specific code
Boot Block of 0.5K o r 2K b ytes, d epending on th e            protection bit associated with eac h blo ck. The ac tual
device. Th e rem ainder of the memory is di vided in to         locations of the bits are summarized in Table 23-3.
individual blocks on binary boundaries.
FIGURE 23-2:           CODE-PROTECTED PROGRAM MEMORY FOR PIC18F2XK20/4XK20
                                      MEMORY SIZE/DEVICE
                                                                                               Block Code Protection
            8 Kbytes              16 Kbytes             32 Kbytes          64 Kbytes               Controlled By:
         (PIC18FX3K20)         (PIC18FX4K20)         (PIC18FX5K20)      (PIC18FX6K20)
            Boot Block             Boot Block           Boot Block         Boot Block
                                                                                                CPB, WRTB, EBTRB
           (000h-1FFh)            (000h-7FFh)          (000h-7FFh)        (000h-7FFh)
             Block 0               Block 0               Block 0            Block 0
                                                                                                CP0, WRT0, EBTR0
           (200h-FFFh)          (800h-1FFFh)          (800h-1FFFh)       (800h-3FFFh)
              Block 1               Block 1               Block 1            Block 1
                                                                                                CP1, WRT1, EBTR1
          (1000h-1FFFh)         (2000h-3FFFh)         (2000h-3FFFh)      (4000h-7FFFh)
                                                          Block 2            Block 2
                                                                                                CP2, WRT2, EBTR2
                                                      (4000h-5FFFh)      (8000h-BFFFh)
                                                          Block 3           Block 3
                                                                                                CP3, WRT3, EBTR3
                                                      (6000h-7FFFh)      (C000h-FFFFh)
         Unimplemented         Unimplemented
            Read ‘0’s             Read ‘0’s
        (2000h-1FFFFFh)       (4000h-1FFFFFh)
                                                     Unimplemented    Unimplemented               (Unimplemented
                                                        Read ‘0’s        Read ‘0’s                 Memory Space)
                                                    (8000h-1FFFFFh) (10000h-1FFFFFh)
TABLE 23-3:        SUMMARY OF CODE PROTECTION REGISTERS
       File Name             Bit 7      Bit 6       Bit 5     Bit 4       Bit 3        Bit 2        Bit 1      Bit 0
300008h      CONFIG5L         —          —           —         —         CP3(1)       CP2(1)        CP1        CP0
300009h      CONFIG5H        CPD        CPB          —         —            —           —            —          —
30000Ah      CONFIG6L         —          —           —         —        WRT3(1)      WRT2(1)       WRT1       WRT0
30000Bh      CONFIG6H       WRTD       WRTB        WRTC        —            —           —            —          —
30000Ch      CONFIG7L         —          —           —         —        EBTR3(1)     EBTR2(1)      EBTR1      EBTR0
30000Dh      CONFIG7H         —        EBTRB         —         —            —           —            —          —
Legend: Shaded cells are unimplemented.
Note 1: Implemented, but not used in PIC18FX3K20 and PIC18FX4K20 devices.
DS41303G-page 310                                                                        2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
23.3.1      PROGRAM MEMORY                                         instruction that executes from a locatio n outside of that
            CODE PROTECTION                                        block is not allowed to read and will result in reading ‘0’s.
                                                                   Figures 23-3 through 23-5 illustrate table write and table
The program memory may be read to or written from
                                                                   read protection.
any location us ing the t able rea d a nd t able w rite
instructions. The de vice ID ma y b e re ad with t able              Note:      Code protection bits may only be written to
reads. Th e C onfiguration regi sters ma y b e rea d an d                       a ‘0’ f rom a ‘1’ state. It is not possible to
written with the table read and table write instructions.                       write a ‘1’ to a bit in the ‘0’ state. Code pro-
In normal execution mode, the CPn bits have no direct                           tection bits are only set to ‘1’ by a full chip
effect. CPn bits inhibit external reads and writes. A block                     erase or block erase function. The full chip
of user memory may be protected from table writes if the                        erase and block erase functions can only
WRTn C onfiguration bit is ‘ 0’. The EBTR n b its control                       be in itiated via ICSP or an ex ternal
table reads. For a block of user memory with the EBTRn                          programmer.
bit cleared to ‘0’, a table READ instruction that executes
from w ithin that block is allow ed to read. A t able read
FIGURE 23-3:            TABLE WRITE (WRTn) DISALLOWED
            Register Values                         Program Memory                      Configuration Bit Settings
                                                                       000000h
                                                                                            WRTB, EBTRB = 11
                                                                       0007FFh
                                                                       000800h
       TBLPTR = 0008FFh
                                                                                             WRT0, EBTR0 = 01
             PC = 001FFEh                                 TBLWT*       001FFFh
                                                                       002000h
                                                                                             WRT1, EBTR1 = 11
                                                                       003FFFh
                                                                       004000h
             PC = 005FFEh                                 TBLWT*                             WRT2, EBTR2 = 11
                                                                       005FFFh
                                                                       006000h
                                                                                             WRT3, EBTR3 = 11
                                                                       007FFFh
       Results: All table writes disabled to Blockn whenever WRTn = 0.
 2010 Microchip Technology Inc.                                                                          DS41303G-page 311
PIC18F2XK20/4XK20
FIGURE 23-4:         EXTERNAL BLOCK TABLE READ (EBTRn) DISALLOWED
           Register Values                  Program Memory                    Configuration Bit Settings
                                                               000000h
                                                                                  WRTB, EBTRB = 11
                                                               0007FFh
                                                               000800h
        TBLPTR = 0008FFh
                                                                                  WRT0, EBTR0 = 10
                                                               001FFFh
                                                               002000h
              PC = 003FFEh                       TBLRD*                           WRT1, EBTR1 = 11
                                                               003FFFh
                                                               004000h
                                                                                  WRT2, EBTR2 = 11
                                                               005FFFh
                                                               006000h
                                                                                  WRT3, EBTR3 = 11
                                                               007FFFh
        Results: All table reads from external blocks to Blockn are disabled whenever EBTRn = 0.
                 TABLAT register returns a value of ‘0’.
FIGURE 23-5:         EXTERNAL BLOCK TABLE READ (EBTRn) ALLOWED
         Register Values                  Program Memory                      Configuration Bit Settings
                                                             000000h
                                                                                  WRTB, EBTRB = 11
                                                             0007FFh
                                                             000800h
       TBLPTR = 0008FFh                                                           WRT0, EBTR0 = 10
            PC = 001FFEh                       TBLRD*        001FFFh
                                                             002000h
                                                                                  WRT1, EBTR1 = 11
                                                             003FFFh
                                                             004000h
                                                                                  WRT2, EBTR2 = 11
                                                             005FFFh
                                                             006000h
                                                                                  WRT3, EBTR3 = 11
                                                             007FFFh
       Results: Table reads permitted within Blockn, even when EBTRBn = 0.
                TABLAT register returns the value of the data at the location TBLPTR.
DS41303G-page 312                                                                    2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
23.3.2       DATA EEPROM                                       To use the In-Circuit D ebugger function of the micro-
             CODE PROTECTION                                   controller, the design must implement In-Circuit Serial
                                                               Programming connections to the following pins:
The en tire dat a EEPROM is pro tected from ex ternal
reads a nd writes by tw o bi ts: C PD a nd WRTD. C PD          •   MCLR/VPP/RE3
inhibits ex ternal rea ds and write s of dat a EEPRO M.        •   VDD
WRTD inhibits int ernal and external writes to da ta           •   VSS
EEPROM. The CPU can always read data EEPROM                    •   RB7
under normal operation, regardless of the protection bit
                                                               •   RB6
settings.
                                                               This will in terface to the In- Circuit D ebugger mo dule
23.3.3       CONFIGURATION REGISTER                            available from Microchip or one of the third party devel-
             PROTECTION                                        opment tool companies.
The Configuration re gisters can b e w rite-protected.
The WRTC bit controls protection of the Configuration          23.7     Single-Supply ICSP Programming
registers. In no rmal execution mode, the WRTC bit is          The LVP Configuration bit enables Single-Supply ICSP
readable only. WRTC can only be written via ICSP or            Programming (formerly kn own a s Low -Voltage IC SP
an external programmer.                                        Programming or L VP). When Sing le-Supply Program-
                                                               ming is enabled, the microcontroller can be programmed
23.4      ID Locations                                         without requiring high vol tage being applied to the
                                                               MCLR/VPP/RE3 pin, but the RB5/KBI1/PGM pin is then
Eight m emory l ocations (200000h-200007h) a re
                                                               dedicated to controlling Program mode entry and is not
designated as ID locations, where the user can store
                                                               available as a general purpose I/O pin.
checksum or other code identification numbers. These
locations are both readable and writable during normal         While programming, using Single-Supply Programming
execution through the TBLRD and TBLWT instructions             mode, V DD is applied to the MCLR/VPP/RE3 pin as in
or during program/verify. The ID locations can be read         normal execution mode. To enter Programming mode,
when the device is code-protected.                             VDD is applied to the PGM pin.
                                                                   Note 1: High-voltage prog ramming i s al ways
23.5        In-Circuit Serial Programming                                  available, regardless of the state of th e
PIC18F2XK20/4XK20 dev ices can be s                  erially               LVP bit or the PGM pin, by applying VIHH
programmed while in the end application circuit. This is                   to the MCLR pin.
simply done with two lines for clock and data and three                 2: By def ault, Sin gle-Supply IC SP i s
other li nes fo r po wer, ground and th e p rogramming                     enabled i n unprogrammed d evices (as
voltage. This allows customers to manufacture boards                       supplied fro m M icrochip) an d era sed
with un programmed d evices and the n pro gram th e                        devices.
microcontroller j ust be fore sh ipping th e pro duct. This             3: When Si ngle-Supply Prog ramming i s
also al lows the m ost rec ent firm ware or a custom                       enabled, th e RB5 p in c an no lo nger b e
firmware to be programmed.                                                 used as a general purpose I/O pin.
                                                                        4: When LVP is enabled, externally pull the
23.6      In-Circuit Debugger
                                                                           PGM pin to VSS to allow normal program
When the DEBUG Configuration bit is programmed to                          execution.
a ‘0’, the In-Circuit Debugger functionality is enabled.       If Single-Supply ICSP Programming mode will not be
This function allows simple debugging functions when           used, the LVP bit can be cleared. RB5/KBI1/PGM then
used with MPLAB® IDE. When the microcontroller has             becomes available as the digital I/O pin, RB5. The LVP
this feature enabled, some resources are not available         bit m ay b e se t or c leared o nly w hen us ing standard
for general use. Table 23-4 shows which resources are          high-voltage programming (VIHH applied to the MCLR/
required by the background debugger.                           VPP/RE3 pin). Once LVP has been disabled, only the
                                                               standard high-voltage pro gramming is av ailable an d
TABLE 23-4:        DEBUGGER RESOURCES                          must be used to program the device.
I/O pins:                       RB6, RB7                       Memory that is not code-protected can be erased using
Stack:                          2 levels                       either a block erase, or erased row by row, then written
Program Memory:                 512 bytes                      at any specified VDD. If code-protected memory is to be
                                                               erased, a block erase is required.
Data Memory:                    10 bytes
 2010 Microchip Technology Inc.                                                                   DS41303G-page 313
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 314    2010 Microchip Technology Inc.
                                                                PIC18F2XK20/4XK20
24.0        INSTRUCTION SET SUMMARY                             The literal instructions may use some of the following
                                                                operands:
PIC18F2XK20/4XK20 devices incorporate the standard
                                                                • A literal value to be loaded into a file register
set of 75 PIC18 core instructions, as well as an extended
                                                                  (specified by ‘k’)
set of 8 new instructions, for the optimization of code that
is r ecursive or that utili zes a sof tware st ack. The         • The desired FSR register to load the literal value
extended set is discussed later in this section.                  into (specified by ‘f’)
                                                                • No operand required
24.1        Standard Instruction Set                              (specified by ‘—’)
                                                                The control instructions may use some of the following
The st andard PIC 18 ins truction s et ad ds many
                                                                operands:
enhancements to th e p revious PIC® M CU instruction
sets, w hile m aintaining a n e asy migration from t hese       • A program memory address (specified by ‘n’)
PIC® MCU instruction sets. Most instructions are a sin-         • The mode of the CALL or RETURN instructions
gle program memory word (16 bits), but there are four             (specified by ‘s’)
instructions th at re quire tw o pr ogram m emory loca-         • The mode of the table read and table write
tions.                                                            instructions (specified by ‘m’)
Each si ngle-word in struction is a 16-bit word d ivided        • No operand required
into an opcode, which specifies the instruction type and          (specified by ‘—’)
one or m ore op erands, which furth er sp ecify the             All i nstructions are a s ingle word, e xcept fo r fo ur
operation of the instruction.                                   double-word i nstructions. The se in structions w ere
The instruction set is highly orthogonal and is grouped         made double-word to contain the required information
into four basic categories:                                     in 32 bits. In the second word, the 4 MSbs are ‘1’s. If
•    Byte-oriented operations                                   this second w ord is ex ecuted as a n ins truction (b y
                                                                itself), it will execute as a NOP.
•    Bit-oriented operations
•    Literal operations                                         All sin gle-word instructions are ex ecuted in a si ngle
                                                                instruction cycle, unless a conditional test is true or the
•    Control operations
                                                                program counter is changed as a result of the instruc-
The PIC18 instruction set summary in Table 24-2 lists           tion. In these cases, the execution takes two instruction
byte-oriented, bit-oriented, literal a nd control               cycles, with the additional instruction cycle(s) executed
operations. T able 24-1 sh ows the o pcode fiel d               as a NOP.
descriptions.
                                                                The double-word instructions execute in two instruction
Most byte-oriented instructions have three operands:            cycles.
1.     The file register (specified by ‘f’)                     One instruction cycle consists of four oscillator periods.
2.     The destination of the result (specified by ‘d’)         Thus, for an oscillator frequency of 4 MHz, the normal
3.     The accessed memory (specified by ‘a’)                   instruction execution time is 1 s. If a conditional test is
                                                                true, or the program counter is changed as a result of
The f ile reg ister d esignator ‘f’ s pecifies w hich fil e     an i nstruction, t he i nstruction execution time i s 2 s.
register is to be used by the instruction. The destination      Two-word branch instructions (if true) would take 3 s.
designator ‘d’ specifies where the result of the opera-
tion is to be placed. If ‘d’ is zero, the result is placed in   Figure 24-1 shows the general formats that the instruc-
the WREG register. If ‘d’ is one, the result is placed in       tions can have. All examples use the convention ‘nnh’
the file register specified in the instruction.                 to represent a hexadecimal number.
All bit-oriented instructions have three operands:              The I nstruction Se t Sum mary, shown in Table 24-2,
                                                                lists th e st andard in structions r ecognized by th e
1.     The file register (specified by ‘f’)                     Microchip Assembler (MPASMTM).
2.     The bit in the file register (specified by ‘b’)
                                                                Section 24.1.1 “Standard Instruction Set” pr ovides
3.     The accessed memory (specified by ‘a’)                   a description of each instruction.
The bit field designator ‘b’ selects the number of the bit
affected b y th e op eration, w hile the file reg ister
designator ‘f’ represents the number of the file in which
the bit is located.
 2010 Microchip Technology Inc.                                                                      DS41303G-page 315
PIC18F2XK20/4XK20
TABLE 24-1:       OPCODE FIELD DESCRIPTIONS
          Field                                                           Description
a                   RAM access bit
                    a = 0: RAM location in Access RAM (BSR register is ignored)
                    a = 1: RAM bank is specified by BSR register
bbb                 Bit address within an 8-bit file register (0 to 7).
BSR                 Bank Select Register. Used to select the current RAM bank.
C, DC, Z, OV, N     ALU Status bits: Carry, Digit Carry, Zero, Overflow, Negative.
d                   Destination select bit
                    d = 0: store result in WREG
                    d = 1: store result in file register f
dest                Destination: either the WREG register or the specified register file location.
f                   8-bit Register file address (00h to FFh) or 2-bit FSR designator (0h to 3h).
fs                  12-bit Register file address (000h to FFFh). This is the source address.
fd                  12-bit Register file address (000h to FFFh). This is the destination address.
GIE                 Global Interrupt Enable bit.
k                   Literal field, constant data or label (may be either an 8-bit, 12-bit or a 20-bit value).
label               Label name.
mm                  The mode of the TBLPTR register for the table read and table write instructions.
                    Only used with table read and table write instructions:
*                        No change to register (such as TBLPTR with table reads and writes)
*+                       Post-Increment register (such as TBLPTR with table reads and writes)
*-                       Post-Decrement register (such as TBLPTR with table reads and writes)
+*                       Pre-Increment register (such as TBLPTR with table reads and writes)
n                   The relative address (2’s complement number) for relative branch instructions or the direct address for
                    CALL/BRANCH and RETURN instructions.
PC                  Program Counter.
PCL                 Program Counter Low Byte.
PCH                 Program Counter High Byte.
PCLATH              Program Counter High Byte Latch.
PCLATU              Program Counter Upper Byte Latch.
PD                  Power-down bit.
PRODH               Product of Multiply High Byte.
PRODL               Product of Multiply Low Byte.
s                   Fast Call/Return mode select bit
                    s = 0: do not update into/from shadow registers
                    s = 1: certain registers loaded into/from shadow registers (Fast mode)
TBLPTR              21-bit Table Pointer (points to a Program Memory location).
TABLAT              8-bit Table Latch.
TO                  Time-out bit.
TOS                 Top-of-Stack.
u                   Unused or unchanged.
WDT                 Watchdog Timer.
WREG                Working register (accumulator).
x                   Don’t care (‘0’ or ‘1’). The assembler will generate code with x = 0. It is the recommended form of use for
                    compatibility with all Microchip software tools.
zs                  7-bit offset value for indirect addressing of register files (source).
zd                  7-bit offset value for indirect addressing of register files (destination).
{     }             Optional argument.
[text]              Indicates an indexed address.
(text)              The contents of text.
[expr]<n>           Specifies bit n of the register indicated by the pointer expr.
                   Assigned to.
< >                 Register bit field.
                   In the set of.
italics             User defined term (font is Courier).
DS41303G-page 316                                                                                    2010 Microchip Technology Inc.
                                                                                     PIC18F2XK20/4XK20
FIGURE 24-1:           GENERAL FORMAT FOR INSTRUCTIONS
                  Byte-oriented file register operations                                 Example Instruction
                     15          10  9 8 7                                         0
                            OPCODE d   a                      f (FILE #)                ADDWF MYREG, W, B
                           d = 0 for result destination to be WREG register
                           d = 1 for result destination to be file register (f)
                           a = 0 to force Access Bank
                           a = 1 for BSR to select bank
                           f = 8-bit file register address
                  Byte to Byte move operations (2-word)
                     15    12 11                                             0
                      OPCODE                      f (Source FILE #)                     MOVFF MYREG1, MYREG2
                     15         12 11                                        0
                          1111                  f (Destination FILE #)
                           f = 12-bit file register address
                  Bit-oriented file register operations
                     15        12 11         9 8 7                               0
                      OPCODE b (BIT #) a                  f (FILE #)                    BSF MYREG, bit, B
                           b = 3-bit position of bit in file register (f)
                           a = 0 to force Access Bank
                           a = 1 for BSR to select bank
                           f = 8-bit file register address
                  Literal operations
                     15                       8     7                            0
                            OPCODE                        k (literal)                   MOVLW 7Fh
                          k = 8-bit immediate value
                   Control operations
                   CALL, GOTO and Branch operations
                     15                             8 7                        0
                                 OPCODE                     n<7:0> (literal)            GOTO Label
                     15              12 11                                   0
                           1111                      n<19:8> (literal)
                          n = 20-bit immediate value
                     15                             8 7                          0
                               OPCODE               S     n<7:0> (literal)              CALL MYFUNC
                     15              12 11                                       0
                             1111                    n<19:8> (literal)
                                   S = Fast bit
                     15                  11 10                                   0
                      OPCODE                      n<10:0> (literal)                     BRA MYFUNC
                     15                        8 7                               0
                       OPCODE                       n<7:0> (literal)                    BC MYFUNC
 2010 Microchip Technology Inc.                                                                               DS41303G-page 317
PIC18F2XK20/4XK20
TABLE 24-2:          PIC18FXXXX INSTRUCTION SET
   Mnemonic,                                                            16-Bit Instruction Word              Status
                                Description               Cycles                                                              Notes
   Operands                                                           MSb                        LSb        Affected
BYTE-ORIENTED OPERATIONS
ADDWF      f, d, a   Add WREG and f                      1            0010 01da0       ffff     ffff    C, DC, Z, OV, N     1, 2
ADDWFC     f, d, a   Add WREG and CARRY bit to f         1            0010 0da         ffff     ffff    C, DC, Z, OV, N     1, 2
ANDWF      f, d, a   AND WREG with f                     1            0001 01da        ffff     ffff    Z, N                1,2
CLRF       f, a      Clear f                             1            0110 101a        ffff     ffff    Z                   2
COMF       f, d, a   Complement f                        1            0001 11da        ffff     ffff    Z, N                1, 2
CPFSEQ     f, a      Compare f with WREG, skip =         1 (2 or 3)   0110 001a        ffff     ffff    None                4
CPFSGT     f, a      Compare f with WREG, skip >         1 (2 or 3)   0110 010a        ffff     ffff    None                4
CPFSLT     f, a      Compare f with WREG, skip <         1 (2 or 3)   0110 000a        ffff     ffff    None                1, 2
DECF       f, d, a   Decrement f                         1            0000 01da        ffff     ffff    C, DC, Z, OV, N     1, 2, 3, 4
DECFSZ     f, d, a   Decrement f, Skip if 0              1 (2 or 3)   0010 11da        ffff     ffff    None                1, 2, 3, 4
DCFSNZ     f, d, a   Decrement f, Skip if Not 0          1 (2 or 3)   0100 11da        ffff     ffff    None                1, 2
INCF       f, d, a   Increment f                         1            0010 10da        ffff     ffff    C, DC, Z, OV, N     1, 2, 3, 4
INCFSZ     f, d, a   Increment f, Skip if 0              1 (2 or 3)   0011 11da        ffff     ffff    None                4
INFSNZ     f, d, a   Increment f, Skip if Not 0          1 (2 or 3)   0100 10da        ffff     ffff    None                1, 2
IORWF      f, d, a   Inclusive OR WREG with f            1            0001 00da        ffff     ffff    Z, N                1, 2
MOVF       f, d, a   Move f                              1            0101 00da        ffff     ffff    Z, N                1
MOVFF      fs, fd    Move fs (source) to 1st word        2            1100 ffff        ffff     ffff    None
                             fd (destination) 2nd word                1111 ffff        ffff     ffff
MOVWF      f, a      Move WREG to f                      1            0110 111a        ffff     ffff    None
MULWF      f, a      Multiply WREG with f                1            0000 001a        ffff     ffff    None                1, 2
NEGF       f, a      Negate f                            1            0110 110a        ffff     ffff    C, DC, Z, OV, N
RLCF       f, d, a   Rotate Left f through Carry         1            0011 01da        ffff     ffff    C, Z, N             1, 2
RLNCF      f, d, a   Rotate Left f (No Carry)            1            0100 01da        ffff     ffff    Z, N
RRCF       f, d, a   Rotate Right f through Carry        1            0011 00da        ffff     ffff    C, Z, N
RRNCF      f, d, a   Rotate Right f (No Carry)           1            0100 00da        ffff     ffff    Z, N
SETF       f, a      Set f                               1            0110 100a        ffff     ffff    None                1, 2
SUBFWB     f, d, a   Subtract f from WREG with           1            0101 01da        ffff     ffff    C, DC, Z, OV, N
                         borrow
SUBWF      f, d, a   Subtract WREG from f                1            0101   11da      ffff     ffff C, DC, Z, OV, N        1, 2
SUBWFB     f, d, a   Subtract WREG from f with           1            0101   10da      ffff     ffff C, DC, Z, OV, N
                         borrow
SWAPF      f, d, a   Swap nibbles in f                   1            0011   10da      ffff     ffff None                   4
TSTFSZ     f, a      Test f, skip if 0                   1 (2 or 3)   0110   011a      ffff     ffff None                   1, 2
XORWF      f, d, a   Exclusive OR WREG with f            1            0001   10da      ffff     ffff Z, N
Note 1:    When a PORT register is modified as a function of itself (e.g., MOVF PORTB, 1, 0), the value used will be that value
           present on the pins themselves. For example, if the data latch is ‘1’ for a pin configured as input and is driven low by an
           external device, the data will be written back with a ‘0’.
      2:   If this instruction is executed on the TMR0 register (and where applicable, ‘d’ = 1), the prescaler will be cleared if
           assigned.
      3:   If Program Counter (PC) is modified or a conditional test is true, the instruction requires two cycles. The second cycle is
           executed as a NOP.
      4:   Some instructions are two-word instructions. The second word of these instructions will be executed as a NOP unless the
           first word of the instruction retrieves the information embedded in these 16 bits. This ensures that all program memory
           locations have a valid instruction.
DS41303G-page 318                                                                                   2010 Microchip Technology Inc.
                                                                        PIC18F2XK20/4XK20
TABLE 24-2:           PIC18FXXXX INSTRUCTION SET (CONTINUED)
    Mnemonic,                                                            16-Bit Instruction Word              Status
                                  Description              Cycles                                                                Notes
    Operands                                                           MSb                        LSb        Affected
BIT-ORIENTED OPERATIONS
BCF         f, b, a   Bit Clear f                         1            1001   bbba      ffff     ffff    None                1, 2
BSF         f, b, a   Bit Set f                           1            1000   bbba      ffff     ffff    None                1, 2
BTFSC       f, b, a   Bit Test f, Skip if Clear           1 (2 or 3)   1011   bbba      ffff     ffff    None                3, 4
BTFSS       f, b, a   Bit Test f, Skip if Set             1 (2 or 3)   1010   bbba      ffff     ffff    None                3, 4
BTG         f, d, a   Bit Toggle f                        1            0111   bbba      ffff     ffff    None                1, 2
CONTROL OPERATIONS
BC          n         Branch if Carry                     1 (2)        1110   0010      nnnn     nnnn    None
BN          n         Branch if Negative                  1 (2)        1110   0110      nnnn     nnnn    None
BNC         n         Branch if Not Carry                 1 (2)        1110   0011      nnnn     nnnn    None
BNN         n         Branch if Not Negative              1 (2)        1110   0111      nnnn     nnnn    None
BNOV        n         Branch if Not Overflow              1 (2)        1110   0101      nnnn     nnnn    None
BNZ         n         Branch if Not Zero                  1 (2)        1110   0001      nnnn     nnnn    None
BOV         n         Branch if Overflow                  1 (2)        1110   0100      nnnn     nnnn    None
BRA         n         Branch Unconditionally              2            1101   0nnn      nnnn     nnnn    None
BZ          n         Branch if Zero                      1 (2)        1110   0000      nnnn     nnnn    None
CALL        n, s      Call subroutine 1st word            2            1110   110s      kkkk     kkkk    None
                                       2nd word                        1111   kkkk      kkkk     kkkk
CLRWDT      —         Clear Watchdog Timer                1            0000   0000      0000     0100    TO, PD
DAW         —         Decimal Adjust WREG                 1            0000   0000      0000     0111    C
GOTO        n         Go to address 1st word              2            1110   1111      kkkk     kkkk    None
                                       2nd word                        1111   kkkk      kkkk     kkkk
NOP         —         No Operation                        1            0000   0000      0000     0000 None
NOP         —         No Operation                        1            1111   xxxx      xxxx     xxxx None                   4
POP         —         Pop top of return stack (TOS)       1            0000   0000      0000     0110 None
PUSH        —         Push top of return stack (TOS)      1            0000   0000      0000     0101 None
RCALL       n         Relative Call                       2            1101   1nnn      nnnn     nnnn None
RESET                 Software device Reset               1            0000   0000      1111     1111 All
RETFIE      s         Return from interrupt enable        2            0000   0000      0001     000s GIE/GIEH,
                                                                                                      PEIE/GIEL
RETLW       k         Return with literal in WREG         2            0000   1100      kkkk     kkkk None
RETURN      s         Return from Subroutine              2            0000   0000      0001     001s None
SLEEP       —         Go into Standby mode                1            0000   0000      0000     0011 TO, PD
Note 1:     When a PORT register is modified as a function of itself (e.g., MOVF PORTB, 1, 0), the value used will be that value
            present on the pins themselves. For example, if the data latch is ‘1’ for a pin configured as input and is driven low by an
            external device, the data will be written back with a ‘0’.
       2:   If this instruction is executed on the TMR0 register (and where applicable, ‘d’ = 1), the prescaler will be cleared if
            assigned.
       3:   If Program Counter (PC) is modified or a conditional test is true, the instruction requires two cycles. The second cycle is
            executed as a NOP.
       4:   Some instructions are two-word instructions. The second word of these instructions will be executed as a NOP unless the
            first word of the instruction retrieves the information embedded in these 16 bits. This ensures that all program memory
            locations have a valid instruction.
 2010 Microchip Technology Inc.                                                                                  DS41303G-page 319
PIC18F2XK20/4XK20
TABLE 24-2:       PIC18FXXXX INSTRUCTION SET (CONTINUED)
   Mnemonic,                                                            16-Bit Instruction Word              Status
                               Description                Cycles                                                              Notes
   Operands                                                          MSb                         LSb        Affected
LITERAL OPERATIONS
ADDLW      k        Add literal and WREG                 1          0000    1111     kkkk      kkkk     C, DC, Z, OV, N
ANDLW      k        AND literal with WREG                1          0000    1011     kkkk      kkkk     Z, N
IORLW      k        Inclusive OR literal with WREG       1          0000    1001     kkkk      kkkk     Z, N
LFSR       f, k     Move literal (12-bit) 2nd word       2          1110    1110     00ff      kkkk     None
                        to FSR(f)          1st word                 1111    0000     kkkk      kkkk
MOVLB      k        Move literal to BSR<3:0>             1          0000    0001     0000      kkkk     None
MOVLW      k        Move literal to WREG                 1          0000    1110     kkkk      kkkk     None
MULLW      k        Multiply literal with WREG           1          0000    1101     kkkk      kkkk     None
RETLW      k        Return with literal in WREG          2          0000    1100     kkkk      kkkk     None
SUBLW      k        Subtract WREG from literal           1          0000    1000     kkkk      kkkk     C, DC, Z, OV, N
XORLW      k        Exclusive OR literal with WREG       1          0000    1010     kkkk      kkkk     Z, N
DATA MEMORY  PROGRAM MEMORY OPERATIONS
TBLRD*              Table Read                           2          0000    0000     0000      1000     None
TBLRD*+             Table Read with post-increment                  0000    0000     0000      1001     None
TBLRD*-             Table Read with post-decrement                  0000    0000     0000      1010     None
TBLRD+*             Table Read with pre-increment                   0000    0000     0000      1011     None
TBLWT*              Table Write                          2          0000    0000     0000      1100     None
TBLWT*+             Table Write with post-increment                 0000    0000     0000      1101     None
TBLWT*-             Table Write with post-decrement                 0000    0000     0000      1110     None
TBLWT+*             Table Write with pre-increment                  0000    0000     0000      1111     None
Note 1:    When a PORT register is modified as a function of itself (e.g., MOVF PORTB, 1, 0), the value used will be that value
           present on the pins themselves. For example, if the data latch is ‘1’ for a pin configured as input and is driven low by an
           external device, the data will be written back with a ‘0’.
      2:   If this instruction is executed on the TMR0 register (and where applicable, ‘d’ = 1), the prescaler will be cleared if
           assigned.
      3:   If Program Counter (PC) is modified or a conditional test is true, the instruction requires two cycles. The second cycle is
           executed as a NOP.
      4:   Some instructions are two-word instructions. The second word of these instructions will be executed as a NOP unless the
           first word of the instruction retrieves the information embedded in these 16 bits. This ensures that all program memory
           locations have a valid instruction.
DS41303G-page 320                                                                                   2010 Microchip Technology Inc.
                                                                        PIC18F2XK20/4XK20
24.1.1           STANDARD INSTRUCTION SET
ADDLW                   ADD literal to W                                ADDWF                     ADD W to f
Syntax:                 ADDLW         k                                 Syntax:                   ADDWF         f {,d {,a}}
Operands:               0  k  255                                     Operands:                 0  f  255
Operation:              (W) + k  W                                                               d  [0,1]
                                                                                                  a  [0,1]
Status Affected:        N, OV, C, DC, Z
                                                                        Operation:                (W) + (f)  dest
Encoding:                    0000         1111    kkkk      kkkk
                                                                        Status Affected:          N, OV, C, DC, Z
Description:            The contents of W are added to the
                                                                        Encoding:                     0010      01da          ffff    ffff
                        8-bit literal ‘k’ and the result is placed in
                        W.                                              Description:              Add W to register ‘f’. If ‘d’ is ‘0’, the
                                                                                                  result is stored in W. If ‘d’ is ‘1’, the
Words:                  1
                                                                                                  result is stored back in register ‘f’
Cycles:                 1                                                                         (default).
Q Cycle Activity:                                                                                 If ‘a’ is ‘0’, the Access Bank is selected.
                                                                                                  If ‘a’ is ‘1’, the BSR is used to select the
             Q1              Q2              Q3            Q4
                                                                                                  GPR bank.
          Decode           Read            Process     Write to W                                 If ‘a’ is ‘0’ and the extended instruction
                        literal ‘k’         Data                                                  set is enabled, this instruction operates
                                                                                                  in Indexed Literal Offset Addressing
                                                                                                  mode whenever f 95 (5Fh). See
Example:                ADDLW         15h                                                         Section 24.2.3 “Byte-Oriented and
     Before Instruction                                                                           Bit-Oriented Instructions in Indexed
           W     = 10h                                                                            Literal Offset Mode” for details.
     After Instruction                                                  Words:                    1
            W=         25h                                              Cycles:                   1
                                                                        Q Cycle Activity:
                                                                                     Q1               Q2              Q3             Q4
                                                                                  Decode        Read              Process         Write to
                                                                                              register ‘f’         Data          destination
                                                                        Example:                  ADDWF         REG, 0, 0
                                                                             Before Instruction
                                                                                   W          =       17h
                                                                                   REG        =       0C2h
                                                                             After Instruction
                                                                                    W        =        0D9h
                                                                                    REG      =        0C2h
  Note:          All PIC18 instructions may take an optional label argument preceding the instruction mnemonic for use in
                 symbolic addressing. If a label is used, the instruction format then becomes: {label} instruction argument(s).
 2010 Microchip Technology Inc.                                                                                       DS41303G-page 321
PIC18F2XK20/4XK20
ADDWFC                ADD W and CARRY bit to f                         ANDLW                     AND literal with W
Syntax:               ADDWFC          f {,d {,a}}                      Syntax:                   ANDLW       k
Operands:             0  f  255                                      Operands:                 0  k  255
                      d [0,1]
                                                                       Operation:                (W) .AND. k  W
                      a [0,1]
                                                                       Status Affected:          N, Z
Operation:            (W) + (f) + (C)  dest
                                                                       Encoding:                     0000        1011     kkkk       kkkk
Status Affected:      N,OV, C, DC, Z
                                                                       Description:              The contents of W are AND’ed with the
Encoding:                  0010      00da       ffff       ffff                                  8-bit literal ‘k’. The result is placed in W.
Description:          Add W, the CARRY flag and data mem-
                                                                       Words:                    1
                      ory location ‘f’. If ‘d’ is ‘0’, the result is
                      placed in W. If ‘d’ is ‘1’, the result is        Cycles:                   1
                      placed in data memory location ‘f’.              Q Cycle Activity:
                      If ‘a’ is ‘0’, the Access Bank is selected.
                                                                                    Q1               Q2             Q3              Q4
                      If ‘a’ is ‘1’, the BSR is used to select the
                      GPR bank.                                                  Decode     Read literal          Process       Write to W
                      If ‘a’ is ‘0’ and the extended instruction                               ‘k’                 Data
                      set is enabled, this instruction operates
                      in Indexed Literal Offset Addressing             Example:                  ANDLW           05Fh
                      mode whenever f 95 (5Fh). See
                      Section 24.2.3 “Byte-Oriented and                     Before Instruction
                      Bit-Oriented Instructions in Indexed                        W          =       A3h
                      Literal Offset Mode” for details.                     After Instruction
Words:                1                                                            W=                03h
Cycles:               1
Q Cycle Activity:
             Q1            Q2            Q3              Q4
          Decode        Read          Process         Write to
                      register ‘f’     Data          destination
Example:              ADDWFC          REG, 0, 1
     Before Instruction
           CARRY bit =      1
           REG         =    02h
           W           =    4Dh
     After Instruction
           CARRY bit =      0
           REG         =    02h
           W           =    50h
DS41303G-page 322                                                                                        2010 Microchip Technology Inc.
                                                                              PIC18F2XK20/4XK20
ANDWF                     AND W with f                                        BC                     Branch if Carry
Syntax:                   ANDWF          f {,d {,a}}                          Syntax:                BC     n
Operands:                 0  f  255                                         Operands:              -128  n  127
                          d [0,1]
                                                                              Operation:             if CARRY bit is ‘1’
                          a [0,1]
                                                                                                     (PC) + 2 + 2n  PC
Operation:                (W) .AND. (f)  dest
                                                                              Status Affected:       None
Status Affected:          N, Z
                                                                              Encoding:                  1110      0010       nnnn      nnnn
Encoding:                     0001       01da          ffff       ffff        Description:           If the CARRY bit is ‘1’, then the program
Description:              The contents of W are AND’ed with                                          will branch.
                          register ‘f’. If ‘d’ is ‘0’, the result is stored                          The 2’s complement number ‘2n’ is
                          in W. If ‘d’ is ‘1’, the result is stored back                             added to the PC. Since the PC will have
                          in register ‘f’ (default).                                                 incremented to fetch the next
                          If ‘a’ is ‘0’, the Access Bank is selected.                                instruction, the new address will be
                          If ‘a’ is ‘1’, the BSR is used to select the                               PC + 2 + 2n. This instruction is then a
                          GPR bank.                                                                  two-cycle instruction.
                          If ‘a’ is ‘0’ and the extended instruction          Words:                 1
                          set is enabled, this instruction operates
                          in Indexed Literal Offset Addressing                Cycles:                1(2)
                          mode whenever f 95 (5Fh). See                     Q Cycle Activity:
                          Section 24.2.3 “Byte-Oriented and                   If Jump:
                          Bit-Oriented Instructions in Indexed
                                                                                           Q1            Q2              Q3             Q4
                          Literal Offset Mode” for details.
                                                                                        Decode      Read literal    Process      Write to PC
Words:                    1                                                                            ‘n’           Data
Cycles:                   1                                                                No           No             No               No
                                                                                        operation    operation      operation        operation
Q Cycle Activity:
                                                                              If No Jump:
             Q1               Q2               Q3               Q4
                                                                                           Q1            Q2              Q3             Q4
          Decode        Read                Process          Write to
                                                                                        Decode      Read literal    Process             No
                      register ‘f’           Data           destination
                                                                                                       ‘n’           Data            operation
Example:                  ANDWF          REG, 0, 0
                                                                              Example:               HERE           BC    5
     Before Instruction
                                                                                   Before Instruction
           W          =       17h                                                        PC            =   address (HERE)
           REG        =       C2h
                                                                                   After Instruction
     After Instruction
                                                                                         If CARRY      =   1;
            W        =        02h                                                             PC      = addres s (HERE + 12)
            REG      =        C2h                                                        If CARRY      =   0;
                                                                                              PC      = addres s (HERE + 2)
 2010 Microchip Technology Inc.                                                                                         DS41303G-page 323
PIC18F2XK20/4XK20
BCF                 Bit Clear f                                       BN                     Branch if Negative
Syntax:             BCF        f, b {,a}                              Syntax:                BN     n
Operands:           0  f  255                                       Operands:              -128  n  127
                    0b7
                                                                      Operation:             if NEGATIVE bit is ‘1’
                    a [0,1]
                                                                                             (PC) + 2 + 2n  PC
Operation:          0  f<b>
                                                                      Status Affected:       None
Status Affected:    None
                                                                      Encoding:                  1110      0110       nnnn      nnnn
Encoding:                 1001      bbba        ffff        ffff      Description:           If the NEGATIVE bit is ‘1’, then the
Description:        Bit ‘b’ in register ‘f’ is cleared.                                      program will branch.
                    If ‘a’ is ‘0’, the Access Bank is selected.                              The 2’s complement number ‘2n’ is
                    If ‘a’ is ‘1’, the BSR is used to select the                             added to the PC. Since the PC will have
                    GPR bank.                                                                incremented to fetch the next
                    If ‘a’ is ‘0’ and the extended instruction                               instruction, the new address will be
                    set is enabled, this instruction operates                                PC + 2 + 2n. This instruction is then a
                    in Indexed Literal Offset Addressing                                     two-cycle instruction.
                    mode whenever f 95 (5Fh). See                   Words:                 1
                    Section 24.2.3 “Byte-Oriented and
                    Bit-Oriented Instructions in Indexed              Cycles:                1(2)
                    Literal Offset Mode” for details.                 Q Cycle Activity:
Words:              1                                                 If Jump:
                                                                                   Q1            Q2              Q3             Q4
Cycles:             1
                                                                                Decode      Read literal    Process      Write to PC
Q Cycle Activity:                                                                              ‘n’           Data
             Q1           Q2               Q3              Q4                      No           No             No               No
          Decode      Read             Process           Write                  operation    operation      operation        operation
                    register ‘f’        Data           register ‘f’   If No Jump:
                                                                                   Q1            Q2              Q3             Q4
Example:            BCF            FLAG_REG,      7, 0                          Decode      Read literal    Process             No
     Before Instruction                                                                        ‘n’           Data            operation
           FLAG_REG =            C7h
     After Instruction                                                Example:               HERE           BN    Jump
           FLAG_REG =            47h
                                                                           Before Instruction
                                                                                 PC            =   address (HERE)
                                                                           After Instruction
                                                                                 If NEGATIVE =     1;
                                                                                      PC      = addres s (Jump)
                                                                                 If NEGATIVE =     0;
                                                                                      PC      = addres s (HERE + 2)
DS41303G-page 324                                                                                    2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
BNC                    Branch if Not Carry                         BNN                    Branch if Not Negative
Syntax:                BNC      n                                  Syntax:                BNN      n
Operands:              -128  n  127                              Operands:              -128  n  127
Operation:             if CARRY bit is ‘0’                         Operation:             if NEGATIVE bit is ‘0’
                       (PC) + 2 + 2n  PC                                                 (PC) + 2 + 2n  PC
Status Affected:       None                                        Status Affected:       None
Encoding:                  1110      0011       nnnn      nnnn     Encoding:                  1110      0111       nnnn      nnnn
Description:           If the CARRY bit is ‘0’, then the program   Description:           If the NEGATIVE bit is ‘0’, then the
                       will branch.                                                       program will branch.
                       The 2’s complement number ‘2n’ is                                  The 2’s complement number ‘2n’ is
                       added to the PC. Since the PC will have                            added to the PC. Since the PC will have
                       incremented to fetch the next                                      incremented to fetch the next
                       instruction, the new address will be                               instruction, the new address will be
                       PC + 2 + 2n. This instruction is then a                            PC + 2 + 2n. This instruction is then a
                       two-cycle instruction.                                             two-cycle instruction.
Words:                 1                                           Words:                 1
Cycles:                1(2)                                        Cycles:                1(2)
Q Cycle Activity:                                                  Q Cycle Activity:
If Jump:                                                           If Jump:
             Q1            Q2              Q3             Q4                    Q1            Q2            Q3               Q4
          Decode      Read literal    Process      Write to PC               Decode      Read literal    Process      Write to PC
                         ‘n’           Data                                                 ‘n’           Data
             No           No             No               No                    No           No             No               No
          operation    operation      operation        operation             operation    operation      operation        operation
If No Jump:                                                        If No Jump:
             Q1            Q2              Q3             Q4                    Q1            Q2            Q3               Q4
          Decode      Read literal    Process             No                 Decode      Read literal    Process             No
                         ‘n’           Data            operation                            ‘n’           Data            operation
Example:               HERE          BNC    Jump                   Example:               HERE          BNN    Jump
     Before Instruction                                                 Before Instruction
           PC            =   address (HERE)                                   PC            =   address (HERE)
     After Instruction                                                  After Instruction
           If CARRY      =   0;                                               If NEGATIVE =     0;
                PC      = addres s (Jump)                                          PC      = addres s (Jump)
           If CARRY      =   1;                                               If NEGATIVE =     1;
                PC      = addres s (HERE + 2)                                      PC      = addres s (HERE + 2)
 2010 Microchip Technology Inc.                                                                              DS41303G-page 325
PIC18F2XK20/4XK20
BNOV                   Branch if Not Overflow                     BNZ                    Branch if Not Zero
Syntax:                BNOV       n                               Syntax:                BNZ      n
Operands:              -128  n  127                             Operands:              -128  n  127
Operation:             if OVERFLOW bit is ‘0’                     Operation:             if ZERO bit is ‘0’
                       (PC) + 2 + 2n  PC                                                (PC) + 2 + 2n  PC
Status Affected:       None                                       Status Affected:       None
Encoding:                  1110       0101     nnnn      nnnn     Encoding:                  1110      0001     nnnn      nnnn
Description:           If the OVERFLOW bit is ‘0’, then the       Description:           If the ZERO bit is ‘0’, then the program
                       program will branch.                                              will branch.
                       The 2’s complement number ‘2n’ is                                 The 2’s complement number ‘2n’ is
                       added to the PC. Since the PC will have                           added to the PC. Since the PC will have
                       incremented to fetch the next                                     incremented to fetch the next
                       instruction, the new address will be                              instruction, the new address will be
                       PC + 2 + 2n. This instruction is then a                           PC + 2 + 2n. This instruction is then a
                       two-cycle instruction.                                            two-cycle instruction.
Words:                 1                                          Words:                 1
Cycles:                1(2)                                       Cycles:                1(2)
Q Cycle Activity:                                                 Q Cycle Activity:
If Jump:                                                          If Jump:
             Q1            Q2             Q3             Q4                    Q1            Q2            Q3             Q4
          Decode      Read literal     Process     Write to PC              Decode      Read literal    Process      Write to PC
                         ‘n’            Data                                               ‘n’           Data
             No           No              No             No                    No           No             No             No
          operation    operation       operation      operation             operation    operation      operation      operation
If No Jump:                                                       If No Jump:
             Q1            Q2             Q3             Q4                    Q1            Q2            Q3             Q4
          Decode      Read literal     Process           No                 Decode      Read literal    Process           No
                         ‘n’            Data          operation                            ‘n’           Data          operation
Example:               HERE           BNOV Jump                   Example:               HERE          BNZ    Jump
     Before Instruction                                                Before Instruction
           PC            =   address (HERE)                                  PC            =   address (HERE)
     After Instruction                                                 After Instruction
           If OVERFLOW =    0;                                               If ZERO       =   0;
                PC      = addres s (Jump)                                         PC      = addres s (Jump)
           If OVERFLOW =    1;                                               If ZERO       =   1;
                PC      = addres s (HERE + 2)                                     PC      = addres s (HERE + 2)
DS41303G-page 326                                                                                2010 Microchip Technology Inc.
                                                                          PIC18F2XK20/4XK20
BRA                   Unconditional Branch                                BSF                   Bit Set f
Syntax:               BRA      n                                          Syntax:               BSF      f, b {,a}
Operands:             -1024  n  1023                                    Operands:             0  f  255
                                                                                                0b7
Operation:            (PC) + 2 + 2n  PC
                                                                                                a [0,1]
Status Affected:      None
                                                                          Operation:            1  f<b>
Encoding:                  1101          0nnn        nnnn       nnnn
                                                                          Status Affected:      None
Description:          Add the 2’s complement number ‘2n’ to
                      the PC. Since the PC will have incre-               Encoding:                 1000       bbba         ffff        ffff
                      mented to fetch the next instruction, the           Description:          Bit ‘b’ in register ‘f’ is set.
                      new address will be PC + 2 + 2n. This                                     If ‘a’ is ‘0’, the Access Bank is selected.
                      instruction is a two-cycle instruction.                                   If ‘a’ is ‘1’, the BSR is used to select the
                                                                                                GPR bank.
Words:                1
                                                                                                If ‘a’ is ‘0’ and the extended instruction
Cycles:               2                                                                         set is enabled, this instruction operates
Q Cycle Activity:                                                                               in Indexed Literal Offset Addressing
                                                                                                mode whenever f 95 (5Fh). See
             Q1               Q2                Q3              Q4
                                                                                                Section 24.2.3 “Byte-Oriented and
          Decode          Read literal     Process          Write to PC                         Bit-Oriented Instructions in Indexed
                             ‘n’            Data                                                Literal Offset Mode” for details.
             No               No              No               No
                                                                          Words:                1
          operation        operation       operation        operation
                                                                          Cycles:               1
                                                                          Q Cycle Activity:
Example:                   HERE           BRA    Jump
                                                                                       Q1           Q2                 Q3              Q4
     Before Instruction
                                                                                    Decode       Read                Process         Write
           PC            =   address (HERE)
                                                                                               register ‘f’           Data         register ‘f’
     After Instruction
           PC           = addres s (Jump)
                                                                          Example:              BSF           FLAG_REG, 7, 1
                                                                               Before Instruction
                                                                                     FLAG_REG       =      0Ah
                                                                               After Instruction
                                                                                     FLAG_REG       =      8Ah
 2010 Microchip Technology Inc.                                                                                       DS41303G-page 327
PIC18F2XK20/4XK20
BTFSC                  Bit Test File, Skip if Clear                       BTFSS                  Bit Test File, Skip if Set
Syntax:                BTFSC f, b {,a}                                    Syntax:                BTFSS f, b {,a}
Operands:              0  f  255                                        Operands:              0  f  255
                       0b7                                                                     0b<7
                       a [0,1]                                                                 a [0,1]
Operation:             skip if (f<b>) = 0                                 Operation:             skip if (f<b>) = 1
Status Affected:       None                                               Status Affected:       None
Encoding:                  1011         bbba        ffff       ffff       Encoding:                   1010          bbba         ffff      ffff
Description:           If bit ‘b’ in register ‘f’ is ‘0’, then the next   Description:           If bit ‘b’ in register ‘f’ is ‘1’, then the next
                       instruction is skipped. If bit ‘b’ is ‘0’, then                           instruction is skipped. If bit ‘b’ is ‘1’, then
                       the next instruction fetched during the                                   the next instruction fetched during the
                       current instruction execution is discarded                                current instruction execution is discarded
                       and a NOP is executed instead, making                                     and a NOP is executed instead, making
                       this a two-cycle instruction.                                             this a two-cycle instruction.
                       If ‘a’ is ‘0’, the Access Bank is selected. If                            If ‘a’ is ‘0’, the Access Bank is selected. If
                       ‘a’ is ‘1’, the BSR is used to select the                                 ‘a’ is ‘1’, the BSR is used to select the
                       GPR bank.                                                                 GPR bank.
                       If ‘a’ is ‘0’ and the extended instruction                                If ‘a’ is ‘0’ and the extended instruction
                       set is enabled, this instruction operates in                              set is enabled, this instruction operates
                       Indexed Literal Offset Addressing                                         in Indexed Literal Offset Addressing
                       mode whenever f 95 (5Fh).                                               mode whenever f 95 (5Fh).
                       See Section 24.2.3 “Byte-Oriented and                                     See Section 24.2.3 “Byte-Oriented and
                       Bit-Oriented Instructions in Indexed                                      Bit-Oriented Instructions in Indexed
                       Literal Offset Mode” for details.                                         Literal Offset Mode” for details.
Words:                 1                                                  Words:                 1
Cycles:                1(2)                                               Cycles:                1(2)
                       Note: 3 cycles if skip and followed                                       Note:        3 cycles if skip and followed
                             by a 2-word instruction.                                                         by a 2-word instruction.
Q Cycle Activity:                                                         Q Cycle Activity:
              Q1           Q2                 Q3              Q4                        Q1               Q2                 Q3             Q4
           Decode        Read             Process             No                     Decode            Read            Process             No
                       register ‘f’        Data            operation                                 register ‘f’       Data            operation
If skip:                                                                  If skip:
              Q1           Q2                 Q3              Q4                        Q1               Q2                Q3              Q4
              No          No                No                No                        No              No               No                No
           operation   operation         operation         operation                 operation       operation        operation         operation
If skip and followed by 2-word instruction:                               If skip and followed by 2-word instruction:
              Q1           Q2                 Q3              Q4                        Q1               Q2                Q3              Q4
              No          No                No                No                        No              No               No                No
           operation   operation         operation         operation                 operation       operation        operation         operation
              No          No                No                No                        No              No               No                No
           operation   operation         operation         operation                 operation       operation        operation         operation
Example:               HERE           BTFSC        FLAG, 1, 0             Example:                   HERE           BTFSS        FLAG, 1, 0
                       FALSE          :                                                              FALSE          :
                       TRUE           :                                                              TRUE           :
     Before Instruction                                                        Before Instruction
           PC            =   address (HERE)                                          PC           = addres             s (HERE)
     After Instruction                                                         After Instruction
           If FLAG<1>    =   0;                                                      If FLAG<1>    =   0;
                PC      = addres s (TRUE)                                                 PC      = addres             s (FALSE)
           If FLAG<1>    =   1;                                                      If FLAG<1>    =   1;
                PC      = addres s (FALSE)                                                PC      = addres             s (TRUE)
DS41303G-page 328                                                                                           2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
BTG                 Bit Toggle f                                   BOV                    Branch if Overflow
Syntax:             BTG f, b {,a}                                  Syntax:                BOV      n
Operands:           0  f  255                                    Operands:              -128  n  127
                    0b<7
                                                                   Operation:             if OVERFLOW bit is ‘1’
                    a [0,1]
                                                                                          (PC) + 2 + 2n  PC
Operation:          (f<b>)  f<b>
                                                                   Status Affected:       None
Status Affected:    None
                                                                   Encoding:                  1110      0100     nnnn      nnnn
Encoding:               0111         bbba       ffff     ffff
                                                                   Description:           If the OVERFLOW bit is ‘1’, then the
Description:        Bit ‘b’ in data memory location ‘f’ is                                program will branch.
                    inverted.                                                             The 2’s complement number ‘2n’ is
                    If ‘a’ is ‘0’, the Access Bank is selected.                           added to the PC. Since the PC will have
                    If ‘a’ is ‘1’, the BSR is used to select the                          incremented to fetch the next
                    GPR bank.                                                             instruction, the new address will be
                    If ‘a’ is ‘0’ and the extended instruction                            PC + 2 + 2n. This instruction is then a
                    set is enabled, this instruction operates                             two-cycle instruction.
                    in Indexed Literal Offset Addressing
                                                                   Words:                 1
                    mode whenever f 95 (5Fh). See
                    Section 24.2.3 “Byte-Oriented and              Cycles:                1(2)
                    Bit-Oriented Instructions in Indexed           Q Cycle Activity:
                    Literal Offset Mode” for details.              If Jump:
Words:              1                                                           Q1            Q2            Q3             Q4
Cycles:             1                                                        Decode      Read literal    Process      Write to PC
                                                                                            ‘n’           Data
Q Cycle Activity:
                                                                                No           No             No             No
             Q1         Q2              Q3              Q4                   operation    operation      operation      operation
          Decode      Read            Process         Write        If No Jump:
                    register ‘f’       Data         register ‘f’
                                                                                Q1            Q2            Q3             Q4
                                                                             Decode      Read literal    Process           No
Example:            BTG            PORTC,    4, 0                                           ‘n’           Data          operation
     Before Instruction:
           PORTC =       0111 0101 [75h]
                                                                   Example:               HERE          BOV    Jump
     After Instruction:
           PORTC =       0110 0101 [65h]                                Before Instruction
                                                                              PC            =   address (HERE)
                                                                        After Instruction
                                                                              If OVERFLOW =    1;
                                                                                   PC      = addres s (Jump)
                                                                              If OVERFLOW =    0;
                                                                                   PC      = addres s (HERE + 2)
 2010 Microchip Technology Inc.                                                                              DS41303G-page 329
PIC18F2XK20/4XK20
BZ                     Branch if Zero                              CALL                   Subroutine Call
Syntax:                BZ     n                                    Syntax:                CALL k {,s}
Operands:              -128  n  127                              Operands:              0  k  1048575
                                                                                          s [0,1]
Operation:             if ZERO bit is ‘1’
                       (PC) + 2 + 2n  PC                          Operation:             (PC) + 4  TOS,
                                                                                          k  PC<20:1>,
Status Affected:       None
                                                                                          if s = 1
Encoding:                  1110      0000       nnnn      nnnn                            (W)  WS,
Description:           If the ZERO bit is ‘1’, then the program                           (Status)  STATUSS,
                       will branch.                                                       (BSR)  BSRS
                       The 2’s complement number ‘2n’ is           Status Affected:       None
                       added to the PC. Since the PC will
                                                                   Encoding:
                       have incremented to fetch the next
                                                                   1st word (k<7:0>)          1110    110s       k7kkk     kkkk0
                       instruction, the new address will be
                       PC + 2 + 2n. This instruction is then a     2nd word(k<19:8>)          1111   k19kkk      kkkk      kkkk8
                       two-cycle instruction.                      Description:           Subroutine call of entire 2-Mbyte
                                                                                          memory range. First, return address
Words:                 1
                                                                                          (PC + 4) is pushed onto the return
Cycles:                1(2)                                                               stack. If ‘s’ = 1, the W, Status and BSR
Q Cycle Activity:                                                                         registers are also pushed into their
If Jump:                                                                                  respective shadow registers, WS,
                                                                                          STATUSS and BSRS. If ‘s’ = 0, no
             Q1             Q2             Q3             Q4
                                                                                          update occurs (default). Then, the
          Decode      Read literal    Process      Write to PC                            20-bit value ‘k’ is loaded into PC<20:1>.
                         ‘n’           Data                                               CALL is a two-cycle instruction.
             No           No             No               No
                                                                   Words:                 2
          operation    operation      operation        operation
If No Jump:                                                        Cycles:                2
             Q1             Q2             Q3             Q4       Q Cycle Activity:
          Decode      Read literal    Process             No                    Q1            Q2            Q3            Q4
                         ‘n’           Data            operation             Decode      Read literal PUSH PC to      Read literal
                                                                                          ‘k’<7:0>,     stack          ‘k’<19:8>,
Example:               HERE           BZ    Jump                                                                      Write to PC
                                                                                No          No             No             No
     Before Instruction
           PC            =   address (HERE)                                  operation   operation      operation      operation
     After Instruction
           If ZERO       =   1;                                    Example:               HERE        CALL       THERE, 1
                PC      = addres s (Jump)
           If ZERO       =   0;                                         Before Instruction
                PC      = addres s (HERE + 2)                                 PC         =    address (HERE)
                                                                        After Instruction
                                                                              PC         =    address (THERE)
                                                                              TOS        =    address (HERE + 4)
                                                                              WS         =    W
                                                                              BSRS       =    BSR
                                                                              STATUSS  = S     tatus
DS41303G-page 330                                                                               2010 Microchip Technology Inc.
                                                                       PIC18F2XK20/4XK20
CLRF                  Clear f                                          CLRWDT              Clear Watchdog Timer
Syntax:               CLRF       f {,a}                                Syntax:             CLRWDT
Operands:             0  f  255                                      Operands:           None
                      a [0,1]
                                                                       Operation:          000h  WDT,
Operation:            000h  f                                                             000h  WDT postscaler,
                      1Z                                                                  1  TO,
                                                                                           1  PD
Status Affected:      Z
                                                                       Status Affected:    TO, PD
Encoding:                 0110        101a       ffff        ffff
                                                                       Encoding:               0000       0000      0000      0100
Description:          Clears the contents of the specified
                      register.                                        Description:        CLRWDT instruction resets the
                      If ‘a’ is ‘0’, the Access Bank is selected.                          Watchdog Timer. It also resets the
                      If ‘a’ is ‘1’, the BSR is used to select the                         postscaler of the WDT. Status bits, TO
                      GPR bank.                                                            and PD, are set.
                      If ‘a’ is ‘0’ and the extended instruction       Words:              1
                      set is enabled, this instruction operates
                      in Indexed Literal Offset Addressing             Cycles:             1
                      mode whenever f 95 (5Fh). See                  Q Cycle Activity:
                      Section 24.2.3 “Byte-Oriented and
                                                                                    Q1         Q2              Q3             Q4
                      Bit-Oriented Instructions in Indexed
                      Literal Offset Mode” for details.                          Decode       No           Process            No
                                                                                           operation        Data           operation
Words:                1
Cycles:               1
                                                                       Example:            CLRWDT
Q Cycle Activity:                                                           Before Instruction
             Q1           Q2                Q3              Q4                    WDT Counter         =    ?
          Decode       Read               Process         Write             After Instruction
                     register ‘f’          Data         register ‘f’              WDT Counter         =    00h
                                                                                  WDT Postscaler      =    0
                                                                                  TO                  =    1
Example:              CLRF             FLAG_REG, 1                                PD                  =    1
     Before Instruction
           FLAG_REG       =      5Ah
     After Instruction
           FLAG_REG       =      00h
 2010 Microchip Technology Inc.                                                                                 DS41303G-page 331
PIC18F2XK20/4XK20
COMF                  Complement f                                   CPFSEQ                  Compare f with W, skip if f = W
Syntax:               COMF          f {,d {,a}}                      Syntax:                 CPFSEQ        f {,a}
Operands:             0  f  255                                    Operands:               0  f  255
                      d  [0,1]                                                              a  [0,1]
                      a  [0,1]                                      Operation:              (f) – (W),
                                                                                             skip if (f) = (W)
Operation:            (f)  dest
                                                                                             (unsigned comparison)
Status Affected:      N, Z
                                                                     Status Affected:        None
Encoding:                 0001         11da       ffff    ffff       Encoding:                   0110      001a          ffff      ffff
Description:          The contents of register ‘f’ are               Description:            Compares the contents of data memory
                      complemented. If ‘d’ is ‘0’, the result is                             location ‘f’ to the contents of W by
                      stored in W. If ‘d’ is ‘1’, the result is                              performing an unsigned subtraction.
                      stored back in register ‘f’ (default).                                 If ‘f’ = W, then the fetched instruction is
                      If ‘a’ is ‘0’, the Access Bank is selected.                            discarded and a NOP is executed
                      If ‘a’ is ‘1’, the BSR is used to select the                           instead, making this a two-cycle
                      GPR bank.                                                              instruction.
                      If ‘a’ is ‘0’ and the extended instruction                             If ‘a’ is ‘0’, the Access Bank is selected.
                      set is enabled, this instruction operates                              If ‘a’ is ‘1’, the BSR is used to select the
                      in Indexed Literal Offset Addressing                                   GPR bank.
                      mode whenever f 95 (5Fh). See                                        If ‘a’ is ‘0’ and the extended instruction
                      Section 24.2.3 “Byte-Oriented and                                      set is enabled, this instruction operates
                      Bit-Oriented Instructions in Indexed                                   in Indexed Literal Offset Addressing
                      Literal Offset Mode” for details.                                      mode whenever f 95 (5Fh). See
Words:                1                                                                      Section 24.2.3 “Byte-Oriented and
                                                                                             Bit-Oriented Instructions in Indexed
Cycles:               1
                                                                                             Literal Offset Mode” for details.
Q Cycle Activity:                                                    Words:                  1
             Q1           Q2                 Q3          Q4          Cycles:                 1(2)
          Decode       Read               Process     Write to                               Note: 3 cycles if skip and followed
                     register ‘f’          Data      destination                                   by a 2-word instruction.
                                                                     Q Cycle Activity:
Example:              COMF             REG, 0, 0                                  Q1             Q2                 Q3             Q4
     Before Instruction                                                         Decode        Read             Process             No
           REG        =   13h                                                               register ‘f’        Data            operation
     After Instruction                                               If skip:
           REG        =   13h                                                   Q1              Q2             Q3                  Q4
           W          =   ECh                                                   No              No             No                  No
                                                                             operation       operation     operation            operation
                                                                     If skip and followed   by 2-word instruction:
                                                                                Q1              Q2             Q3                  Q4
                                                                                No              No             No                  No
                                                                             operation       operation     operation            operation
                                                                                No              No             No                  No
                                                                             operation       operation     operation            operation
                                                                     Example:                HERE          CPFSEQ REG, 0
                                                                                             NEQUAL        :
                                                                                             EQUAL         :
                                                                          Before Instruction
                                                                                PC Address       =      HERE
                                                                                W                =      ?
                                                                                REG              =      ?
                                                                          After Instruction
                                                                                 If REG          =      W;
                                                                                     =PC                Address (EQUAL)
                                                                                 If REG           W;
                                                                                     =PC                Address (NEQUAL)
DS41303G-page 332                                                                                  2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
CPFSGT                Compare f with W, skip if f > W                CPFSLT                 Compare f with W, skip if f < W
Syntax:               CPFSGT         f {,a}                          Syntax:                CPFSLT         f {,a}
Operands:             0  f  255                                    Operands:              0  f  255
                      a  [0,1]                                                             a  [0,1]
Operation:            (f) –W),                                     Operation:             (f) –W),
                      skip if (f) > (W)                                                     skip if (f) < (W)
                      (unsigned comparison)                                                 (unsigned comparison)
Status Affected:      None
                                                                     Status Affected:       None
Encoding:                 0110       010a     ffff        ffff
                                                                     Encoding:                  0110        000a         ffff      ffff
Description:          Compares the contents of data memory
                      location ‘f’ to the contents of the W by       Description:           Compares the contents of data memory
                      performing an unsigned subtraction.                                   location ‘f’ to the contents of W by
                                                                                            performing an unsigned subtraction.
                      If the contents of ‘f’ are greater than the
                      contents of WREG, then the fetched                                    If the contents of ‘f’ are less than the
                      instruction is discarded and a NOP is                                 contents of W, then the fetched
                                                                                            instruction is discarded and a NOP is
                      executed instead, making this a
                      two-cycle instruction.                                                executed instead, making this a
                      If ‘a’ is ‘0’, the Access Bank is selected.                           two-cycle instruction.
                                                                                            If ‘a’ is ‘0’, the Access Bank is selected.
                      If ‘a’ is ‘1’, the BSR is used to select the
                      GPR bank.                                                             If ‘a’ is ‘1’, the BSR is used to select the
                      If ‘a’ is ‘0’ and the extended instruction                            GPR bank.
                      set is enabled, this instruction operates      Words:                 1
                      in Indexed Literal Offset Addressing
                                                                     Cycles:                1(2)
                      mode whenever f 95 (5Fh). See
                                                                                            Note:      3 cycles if skip and followed
                      Section 24.2.3 “Byte-Oriented and
                                                                                                       by a 2-word instruction.
                      Bit-Oriented Instructions in Indexed
                      Literal Offset Mode” for details.              Q Cycle Activity:
Words:                1                                                            Q1           Q2                  Q3             Q4
Cycles:               1(2)                                                      Decode        Read             Process             No
                      Note: 3 cycles if skip and followed                                   register ‘f’        Data            operation
                            by a 2-word instruction.                 If skip:
Q Cycle Activity:                                                                  Q1           Q2                  Q3             Q4
             Q1          Q2               Q3            Q4                         No          No                No                No
           Decode       Read            Process         No                      operation   operation         operation         operation
                      register ‘f’       Data        operation       If skip and followed by 2-word instruction:
If skip:                                                                           Q1           Q2                  Q3             Q4
           Q1            Q2             Q3              Q4                         No          No                No                No
           No            No             No              No                      operation   operation         operation         operation
        operation     operation     operation        operation                     No          No                No                No
If skip and followed by 2-word instruction:                                     operation   operation         operation         operation
           Q1            Q2             Q3              Q4
           No            No             No              No
                                                                     Example:               HERE           CPFSLT REG, 1
        operation     operation     operation        operation                              NLESS          :
           No            No             No              No                                  LESS           :
        operation     operation     operation        operation
                                                                        Before Instruction
                                                                        =     PC                 Address (HERE)
Example:              HERE             CPFSGT REG, 0                          W                  =       ?
                      NGREATER         :                                After Instruction
                      GREATER          :
                                                                         If REG                  <    W;
   Before Instruction                                                    PC                     = Addr ess (LESS)
   =     PC                Address (HERE)                                If REG                   W;
         W                 =       ?                                    =PC                           Address (NLESS)
   After Instruction
            If REG          W;
                =PC             Address (GREATER)
            If REG          W;
                 PC       = Addr ess (NGREATER)
 2010 Microchip Technology Inc.                                                                                    DS41303G-page 333
PIC18F2XK20/4XK20
DAW                       Decimal Adjust W Register                    DECF                  Decrement f
Syntax:                   DAW                                          Syntax:               DECF f {,d {,a}}
Operands:                 None                                         Operands:             0  f  255
                                                                                             d  [0,1]
Operation:                If [W<3:0> > 9] or [DC = 1] then
                                                                                             a  [0,1]
                          (W<3:0>) + 6  W<3:0>;
                          else                                         Operation:            (f) – 1  dest
                          (W<3:0>)  W<3:0>;                           Status Affected:      C, DC, N, OV, Z
                          If [W<7:4> + DC > 9] or [C = 1] then         Encoding:                 0000       01da       ffff     ffff
                          (W<7:4>) + 6 + DC  W<7:4>;                 Description:         Decrement register ‘f’. If ‘d’ is ‘0’, the
                          else                                                              result is stored in W. If ‘d’ is ‘1’, the
                          (W<7:4>) + DC  W<7:4>                                            result is stored back in register ‘f’
Status Affected:          C                                                                 (default).
                                                                                            If ‘a’ is ‘0’, the Access Bank is selected.
Encoding:                     0000     0000      0000        0111
                                                                                            If ‘a’ is ‘1’, the BSR is used to select the
Description:              DAW adjusts the eight-bit value in W,                             GPR bank.
                          resulting from the earlier addition of two                        If ‘a’ is ‘0’ and the extended instruction
                          variables (each in packed BCD format)                             set is enabled, this instruction operates
                          and produces a correct packed BCD                                 in Indexed Literal Offset Addressing
                          result.                                                           mode whenever f 95 (5Fh). See
Words:                    1                                                                 Section 24.2.3 “Byte-Oriented and
                                                                                            Bit-Oriented Instructions in Indexed
Cycles:                   1                                                                 Literal Offset Mode” for details.
Q Cycle Activity:                                                      Words:                1
             Q1               Q2            Q3             Q4          Cycles:               1
          Decode        Read             Process          Write
                                                                       Q Cycle Activity:
                      register W          Data             W
Example1:                                                                           Q1           Q2               Q3           Q4
                          DAW                                                    Decode       Read            Process      Write to
                                                                                            register ‘f’       Data       destination
     Before Instruction
           W          =       A5h
                                                                       Example:              DECF          CNT,    1, 0
           C          =       0
           DC         =       0                                             Before Instruction
     After Instruction                                                            CNT        =   01h
         W           =        05h                                                 Z          =   0
         C           =        1                                             After Instruction
         DC          =        0                                                   CNT        =   00h
Example 2:                                                                        Z          =   1
     Before Instruction
           W          =       CEh
           C          =       0
           DC         =       0
     After Instruction
            W        =        34h
            C        =        1
            DC       =        0
DS41303G-page 334                                                                                  2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
DECFSZ                Decrement f, skip if 0                         DCFSNZ                 Decrement f, skip if not 0
Syntax:               DECFSZ f {,d {,a}}                             Syntax:                DCFSNZ         f {,d {,a}}
Operands:             0  f  255                                    Operands:              0  f  255
                      d  [0,1]                                                             d  [0,1]
                      a  [0,1]                                                             a  [0,1]
Operation:           (f) – 1  dest,                                 Operation:             (f) – 1  dest,
                     skip if result = 0                                                     skip if result  0
Status Affected:      None                                           Status Affected:       None
Encoding:                 0010      11da       ffff       ffff       Encoding:                  0100       11da          ffff       ffff
Description:          The contents of register ‘f’ are               Description:           The contents of register ‘f’ are
                      decremented. If ‘d’ is ‘0’, the result is                             decremented. If ‘d’ is ‘0’, the result is
                      placed in W. If ‘d’ is ‘1’, the result is                             placed in W. If ‘d’ is ‘1’, the result is
                      placed back in register ‘f’ (default).                                placed back in register ‘f’ (default).
                      If the result is ‘0’, the next instruction,                           If the result is not ‘0’, the next
                      which is already fetched, is discarded                                instruction, which is already fetched, is
                      and a NOP is executed instead, making                                 discarded and a NOP is executed
                      it a two-cycle instruction.                                           instead, making it a two-cycle
                      If ‘a’ is ‘0’, the Access Bank is selected.                           instruction.
                      If ‘a’ is ‘1’, the BSR is used to select the                          If ‘a’ is ‘0’, the Access Bank is selected.
                      GPR bank.                                                             If ‘a’ is ‘1’, the BSR is used to select the
                      If ‘a’ is ‘0’ and the extended instruction                            GPR bank.
                      set is enabled, this instruction operates                             If ‘a’ is ‘0’ and the extended instruction
                      in Indexed Literal Offset Addressing                                  set is enabled, this instruction operates
                      mode whenever f 95 (5Fh). See                                       in Indexed Literal Offset Addressing
                      Section 24.2.3 “Byte-Oriented and                                     mode whenever f 95 (5Fh). See
                      Bit-Oriented Instructions in Indexed                                  Section 24.2.3 “Byte-Oriented and
                      Literal Offset Mode” for details.                                     Bit-Oriented Instructions in Indexed
Words:                1                                                                     Literal Offset Mode” for details.
                                                                     Words:                 1
Cycles:               1(2)
                      Note: 3 cycles if skip and followed            Cycles:                1(2)
                            by a 2-word instruction.                                        Note:      3 cycles if skip and followed
Q Cycle Activity:                                                                                      by a 2-word instruction.
             Q1           Q2              Q3             Q4          Q Cycle Activity:
           Decode      Read           Process          Write to                    Q1           Q2               Q3                 Q4
                     register ‘f’      Data           destination               Decode        Read            Process            Write to
If skip:                                                                                    register ‘f’       Data             destination
            Q1            Q2              Q3             Q4          If skip:
            No          No              No               No                        Q1           Q2               Q3                 Q4
         operation   operation       operation        operation                    No          No               No                 No
If skip and followed by 2-word instruction:                                     operation   operation        operation          operation
            Q1            Q2              Q3             Q4          If skip and followed by 2-word instruction:
            No          No              No               No                        Q1           Q2               Q3                 Q4
         operation   operation       operation        operation                    No          No               No                 No
            No          No              No               No                     operation   operation        operation          operation
         operation   operation       operation        operation                    No          No               No                 No
                                                                                operation   operation        operation          operation
Example:              HERE           DECFSZ        CNT, 1, 1
                                     GOTO          LOOP              Example:               HERE           DCFSNZ        TEMP, 1, 0
                      CONTINUE                                                              ZERO           :
                                                                                            NZERO          :
     Before Instruction
         = PC             Address (HERE)                                  Before Instruction
     After Instruction                                                          TEMP                   =     ?
           CNT        =   CNT - 1                                         After Instruction
           If CNT     =   0;                                                    TEMP                   =     TEMP – 1,
                PC =      Address (CONTINUE)                                    If TEMP                =     0;
           If CNT        0;                                                  =      PC                      Address (ZERO)
                PC =      Address (HERE + 2)                                    If TEMP                     0;
                                                                              =      PC                      Address (NZERO)
 2010 Microchip Technology Inc.                                                                                  DS41303G-page 335
PIC18F2XK20/4XK20
GOTO                   Unconditional Branch                       INCF                  Increment f
Syntax:                GOTO k                                     Syntax:               INCF       f {,d {,a}}
Operands:              0  k  1048575                            Operands:             0  f  255
                                                                                        d  [0,1]
Operation:             k  PC<20:1>
                                                                                        a  [0,1]
Status Affected:       None
                                                                  Operation:            (f) + 1  dest
Encoding:
                                                                  Status Affected:      C, DC, N, OV, Z
1st word (k<7:0>)          1110       1111     k7kkk   kkkk0
2nd word(k<19:8>)          1111      k19kkk    kkkk    kkkk8      Encoding:                 0010        10da          ffff   ffff
Description:           GOTO allows an unconditional branch        Description:          The contents of register ‘f’ are
                       anywhere within entire                                           incremented. If ‘d’ is ‘0’, the result is
                       2-Mbyte memory range. The 20-bit                                 placed in W. If ‘d’ is ‘1’, the result is
                       value ‘k’ is loaded into PC<20:1>.                               placed back in register ‘f’ (default).
                       GOTO is always a two-cycle                                       If ‘a’ is ‘0’, the Access Bank is selected.
                       instruction.                                                     If ‘a’ is ‘1’, the BSR is used to select the
                                                                                        GPR bank.
Words:                 2
                                                                                        If ‘a’ is ‘0’ and the extended instruction
Cycles:                2                                                                set is enabled, this instruction operates
Q Cycle Activity:                                                                       in Indexed Literal Offset Addressing
                                                                                        mode whenever f 95 (5Fh). See
             Q1            Q2             Q3           Q4
                                                                                        Section 24.2.3 “Byte-Oriented and
          Decode      Read literal        No       Read literal                         Bit-Oriented Instructions in Indexed
                       ‘k’<7:0>,       operation    ‘k’<19:8>,                          Literal Offset Mode” for details.
                                                   Write to PC
                                                                  Words:                1
             No           No              No           No
          operation    operation       operation    operation     Cycles:               1
                                                                  Q Cycle Activity:
Example:               GOTO THERE                                              Q1           Q2                   Q3          Q4
     After Instruction                                                      Decode       Read              Process        Write to
           PC =       Address (THERE)                                                  register ‘f’         Data         destination
                                                                  Example:              INCF            CNT, 1, 0
                                                                       Before Instruction
                                                                             CNT        =    FFh
                                                                             Z          =    0
                                                                             C          =    ?
                                                                             DC         =    ?
                                                                       After Instruction
                                                                             CNT        =    00h
                                                                             Z          =    1
                                                                             C          =    1
                                                                             DC         =    1
DS41303G-page 336                                                                              2010 Microchip Technology Inc.
                                                                       PIC18F2XK20/4XK20
INCFSZ                 Increment f, skip if 0                          INFSNZ                 Increment f, skip if not 0
Syntax:                INCFSZ         f {,d {,a}}                      Syntax:                INFSNZ         f {,d {,a}}
Operands:              0  f  255                                     Operands:              0  f  255
                       d  [0,1]                                                              d  [0,1]
                       a  [0,1]                                                              a  [0,1]
                                                                       Operation:             (f) + 1  dest,
Operation:             (f) + 1  dest,
                                                                                              skip if result  0
                       skip if result = 0
                                                                       Status Affected:       None
Status Affected:       None
                                                                       Encoding:                  0100         10da        ffff       ffff
Encoding:                  0011         11da        ffff      ffff
                                                                       Description:           The contents of register ‘f’ are
Description:           The contents of register ‘f’ are                                       incremented. If ‘d’ is ‘0’, the result is
                       incremented. If ‘d’ is ‘0’, the result is                              placed in W. If ‘d’ is ‘1’, the result is
                       placed in W. If ‘d’ is ‘1’, the result is                              placed back in register ‘f’ (default).
                       placed back in register ‘f’ (default).                                 If the result is not ‘0’, the next
                       If the result is ‘0’, the next instruction,                            instruction, which is already fetched, is
                       which is already fetched, is discarded                                 discarded and a NOP is executed
                       and a NOP is executed instead, making                                  instead, making it a two-cycle
                       it a two-cycle instruction.                                            instruction.
                       If ‘a’ is ‘0’, the Access Bank is selected.                            If ‘a’ is ‘0’, the Access Bank is selected.
                       If ‘a’ is ‘1’, the BSR is used to select the                           If ‘a’ is ‘1’, the BSR is used to select the
                       GPR bank.                                                              GPR bank.
                       If ‘a’ is ‘0’ and the extended instruction                             If ‘a’ is ‘0’ and the extended instruction
                       set is enabled, this instruction operates                              set is enabled, this instruction operates
                       in Indexed Literal Offset Addressing                                   in Indexed Literal Offset Addressing
                       mode whenever f 95 (5Fh). See                                        mode whenever f 95 (5Fh). See
                       Section 24.2.3 “Byte-Oriented and                                      Section 24.2.3 “Byte-Oriented and
                       Bit-Oriented Instructions in Indexed                                   Bit-Oriented Instructions in Indexed
                       Literal Offset Mode” for details.                                      Literal Offset Mode” for details.
Words:                 1                                               Words:                 1
Cycles:                1(2)                                            Cycles:                1(2)
                       Note: 3 cycles if skip and followed                                    Note:       3 cycles if skip and followed
                             by a 2-word instruction.                                                     by a 2-word instruction.
Q Cycle Activity:                                                      Q Cycle Activity:
              Q1           Q2                 Q3              Q4                     Q1           Q2                 Q3              Q4
           Decode        Read             Process       Write to                  Decode        Read             Process        Write to
                       register ‘f’        Data        destination                            register ‘f’        Data         destination
If skip:                                                               If skip:
              Q1           Q2                 Q3              Q4                     Q1           Q2                 Q3              Q4
              No          No                 No               No                     No          No                 No               No
           operation   operation          operation        operation              operation   operation          operation        operation
If skip and followed by 2-word instruction:                            If skip and followed by 2-word instruction:
              Q1           Q2                 Q3              Q4                     Q1           Q2                 Q3              Q4
              No          No                 No               No                 No              No                No                No
           operation   operation          operation        operation          operation       operation         operation         operation
              No          No                 No               No                 No              No                No                No
           operation   operation          operation        operation          operation       operation         operation         operation
Example:               HERE           INCFSZ        CNT, 1, 0          Example:               HERE           INFSNZ        REG, 1, 0
                       NZERO          :                                                       ZERO
                       ZERO           :                                                       NZERO
     Before Instruction                                                     Before Instruction
         = PC           Address (HERE)                                          = PC              Address (HERE)
     After Instruction                                                      After Instruction
           CNT        = CNT + 1                                                   REG        =    REG + 1
           If CNT     = 0;                                                        If REG         0;
           PC       = Addr ess (ZERO)                                           = PC              Address (NZERO)
           If CNT      0;                                                        If REG     =    0;
         = PC           Address (NZERO)                                         = PC              Address (ZERO)
 2010 Microchip Technology Inc.                                                                                     DS41303G-page 337
PIC18F2XK20/4XK20
IORLW                     Inclusive OR literal with W                      IORWF                 Inclusive OR W with f
Syntax:                   IORLW k                                          Syntax:               IORWF         f {,d {,a}}
Operands:                 0  k  255                                      Operands:             0  f  255
                                                                                                 d  [0,1]
Operation:                (W) .OR. k  W
                                                                                                 a  [0,1]
Status Affected:          N, Z
                                                                           Operation:           (W) .OR. (f)  dest
Encoding:                     0000      1001        kkkk       kkkk
                                                                           Status Affected:      N, Z
Description:              The contents of W are ORed with the
                          eight-bit literal ‘k’. The result is placed in   Encoding:                 0001        00da        ffff     ffff
                          W.                                               Description:          Inclusive OR W with register ‘f’. If ‘d’ is
                                                                                                 ‘0’, the result is placed in W. If ‘d’ is ‘1’,
Words:                    1
                                                                                                 the result is placed back in register ‘f’
Cycles:                   1                                                                      (default).
Q Cycle Activity:                                                                                If ‘a’ is ‘0’, the Access Bank is selected.
                                                                                                 If ‘a’ is ‘1’, the BSR is used to select the
             Q1               Q2               Q3             Q4
                                                                                                 GPR bank.
          Decode             Read         Process         Write to W                             If ‘a’ is ‘0’ and the extended instruction
                          literal ‘k’      Data                                                  set is enabled, this instruction operates
                                                                                                 in Indexed Literal Offset Addressing
Example:                  IORLW          35h                                                     mode whenever f 95 (5Fh). See
                                                                                                 Section 24.2.3 “Byte-Oriented and
     Before Instruction
                                                                                                 Bit-Oriented Instructions in Indexed
           W          =       9Ah                                                                Literal Offset Mode” for details.
     After Instruction
                                                                           Words:                1
            W        =        BFh
                                                                           Cycles:               1
                                                                           Q Cycle Activity:
                                                                                        Q1           Q2                Q3            Q4
                                                                                     Decode       Read             Process       Write to
                                                                                                register ‘f’        Data        destination
                                                                           Example:              IORWF         RESULT, 0, 1
                                                                                Before Instruction
                                                                                      RESULT =       13h
                                                                                      W          =   91h
                                                                                After Instruction
                                                                                      RESULT =       13h
                                                                                      W          =   93h
DS41303G-page 338                                                                                        2010 Microchip Technology Inc.
                                                                       PIC18F2XK20/4XK20
LFSR                     Load FSR                                      MOVF                  Move f
Syntax:                  LFSR f, k                                     Syntax:               MOVF       f {,d {,a}}
Operands:                0f2                                         Operands:             0  f  255
                         0  k  4095                                                        d  [0,1]
                                                                                             a  [0,1]
Operation:               k  FSRf
                                                                       Operation:            f  dest
Status Affected:         None
                                                                       Status Affected:      N, Z
Encoding:                    1110     1110       00ff       k11kkk
                             1111     0000       k7kkk       kkkk      Encoding:                 0101        00da        ffff      ffff
Description:             The 12-bit literal ‘k’ is loaded into the     Description:          The contents of register ‘f’ are moved to
                         File Select Register pointed to by ‘f’.                             a destination dependent upon the
Words:                   2                                                                   status of ‘d’. If ‘d’ is ‘0’, the result is
                                                                                             placed in W. If ‘d’ is ‘1’, the result is
Cycles:                  2                                                                   placed back in register ‘f’ (default).
Q Cycle Activity:                                                                            Location ‘f’ can be anywhere in the
                                                                                             256-byte bank.
             Q1              Q2             Q3              Q4
                                                                                             If ‘a’ is ‘0’, the Access Bank is selected.
          Decode     Read literal         Process           Write                            If ‘a’ is ‘1’, the BSR is used to select the
                      ‘k’ MSB              Data          literal ‘k’                         GPR bank.
                                                          MSB to                             If ‘a’ is ‘0’ and the extended instruction
                                                          FSRfH                              set is enabled, this instruction operates
          Decode     Read literal         Process     Write literal                          in Indexed Literal Offset Addressing
                      ‘k’ LSB              Data       ‘k’ to FSRfL                           mode whenever f 95 (5Fh). See
                                                                                             Section 24.2.3 “Byte-Oriented and
                                                                                             Bit-Oriented Instructions in Indexed
Example:                 LFSR 2, 3ABh
                                                                                             Literal Offset Mode” for details.
     After Instruction
                                                                       Words:                1
           FSR2H
             =                      03h
           FSR2L             =      ABh                                Cycles:               1
                                                                       Q Cycle Activity:
                                                                                    Q1           Q2               Q3              Q4
                                                                                 Decode       Read            Process           Write W
                                                                                            register ‘f’       Data
                                                                       Example:              MOVF          REG, 0, 0
                                                                            Before Instruction
                                                                                  REG            =      22h
                                                                                  W              =      FFh
                                                                            After Instruction
                                                                                  REG            =      22h
                                                                                  W              =      22h
 2010 Microchip Technology Inc.                                                                                      DS41303G-page 339
PIC18F2XK20/4XK20
MOVFF                 Move f to f                                     MOVLB               Move literal to low nibble in BSR
Syntax:               MOVFF fs,fd                                     Syntax:             MOVLW k
Operands:             0  fs  4095                                   Operands:           0  k  255
                      0  fd  4095
                                                                      Operation:          k  BSR
Operation:            (fs)  fd                                       Status Affected:    None
Status Affected:      None
                                                                      Encoding:               0000        0001         kkkk    kkkk
Encoding:
                                                                      Description:        The eight-bit literal ‘k’ is loaded into the
1st word (source)         1100       ffff       ffff       ffffs
                                                                                          Bank Select Register (BSR). The value
2nd word (destin.)        1111       ffff       ffff       ffffd
                                                                                          of BSR<7:4> always remains ‘0’,
Description:          The contents of source register ‘fs’ are                            regardless of the value of k7:k4.
                      moved to destination register ‘fd’.
                                                                      Words:              1
                      Location of source ‘fs’ can be anywhere
                      in the 4096-byte data space (000h to            Cycles:             1
                      FFFh) and location of destination ‘fd’          Q Cycle Activity:
                      can also be anywhere from 000h to
                                                                                   Q1         Q2                  Q3          Q4
                      FFFh.
                      Either source or destination can be W                     Decode       Read             Process     Write literal
                      (a useful special situation).                                       literal ‘k’          Data       ‘k’ to BSR
                      MOVFF is particularly useful for
                      transferring a data memory location to a        Example:            MOVLB               5
                      peripheral register (such as the transmit
                                                                           Before Instruction
                      buffer or an I/O port).
                                                                                 BSR Register =         02h
                      The MOVFF instruction cannot use the
                                                                           After Instruction
                      PCL, TOSU, TOSH or TOSL as the
                                                                                 BSR Register =         05h
                      destination register.
Words:                2
Cycles:               2 (3)
Q Cycle Activity:
             Q1           Q2               Q3              Q4
          Decode       Read             Process           No
                     register ‘f’        Data          operation
                        (src)
          Decode        No                 No            Write
                     operation          operation      register ‘f’
                     No dummy                            (dest)
                        read
Example:              MOVFF         REG1, REG2
     Before Instruction
           REG1           =       33h
           REG2           =       11h
     After Instruction
           REG1           =       33h
           REG2           =       33h
DS41303G-page 340                                                                                2010 Microchip Technology Inc.
                                                                       PIC18F2XK20/4XK20
MOVLW                    Move literal to W                             MOVWF                     Move W to f
Syntax:                  MOVLW k                                       Syntax:                   MOVWF         f {,a}
Operands:                0  k  255                                   Operands:                 0  f  255
                                                                                                 a  [0,1]
Operation:               kW
                                                                       Operation:                (W)  f
Status Affected:         None
                                                                       Status Affected:          None
Encoding:                    0000      1110      kkkk       kkkk
                                                                       Encoding:                     0110      111a          ffff        ffff
Description:             The eight-bit literal ‘k’ is loaded into W.
                                                                       Description:              Move data from W to register ‘f’.
Words:                   1
                                                                                                 Location ‘f’ can be anywhere in the
Cycles:                  1                                                                       256-byte bank.
Q Cycle Activity:                                                                                If ‘a’ is ‘0’, the Access Bank is selected.
                                                                                                 If ‘a’ is ‘1’, the BSR is used to select the
             Q1              Q2            Q3              Q4
                                                                                                 GPR bank.
          Decode            Read         Process       Write to W                                If ‘a’ is ‘0’ and the extended instruction
                         literal ‘k’      Data                                                   set is enabled, this instruction operates
                                                                                                 in Indexed Literal Offset Addressing
Example:                 MOVLW         5Ah                                                       mode whenever f 95 (5Fh). See
                                                                                                 Section 24.2.3 “Byte-Oriented and
     After Instruction
                                                                                                 Bit-Oriented Instructions in Indexed
            W        =       5Ah                                                                 Literal Offset Mode” for details.
                                                                       Words:                    1
                                                                       Cycles:                   1
                                                                       Q Cycle Activity:
                                                                                    Q1               Q2                 Q3              Q4
                                                                                 Decode        Read               Process             Write
                                                                                             register ‘f’          Data             register ‘f’
                                                                       Example:                  MOVWF         REG, 0
                                                                            Before Instruction
                                                                                  W          =        4Fh
                                                                                  REG        =        FFh
                                                                            After Instruction
                                                                                   W        =         4Fh
                                                                                   REG      =         4Fh
 2010 Microchip Technology Inc.                                                                                        DS41303G-page 341
PIC18F2XK20/4XK20
MULLW                    Multiply literal with W                       MULWF                     Multiply W with f
Syntax:                  MULLW          k                              Syntax:                   MULWF         f {,a}
Operands:                0  k  255                                   Operands:                 0  f  255
                                                                                                 a  [0,1]
Operation:               (W) x k  PRODH:PRODL
                                                                       Operation:                (W) x (f)  PRODH:PRODL
Status Affected:         None
                                                                       Status Affected:          None
Encoding:                    0000        1101       kkkk      kkkk
                                                                       Encoding:                     0000      001a      ffff      ffff
Description:             An unsigned multiplication is carried
                         out between the contents of W and the         Description:              An unsigned multiplication is carried
                         8-bit literal ‘k’. The 16-bit result is                                 out between the contents of W and the
                         placed in the PRODH:PRODL register                                      register file location ‘f’. The 16-bit
                         pair. PRODH contains the high byte.                                     result is stored in the PRODH:PRODL
                         W is unchanged.                                                         register pair. PRODH contains the
                         None of the Status flags are affected.                                  high byte. Both W and ‘f’ are
                         Note that neither overflow nor carry is                                 unchanged.
                         possible in this operation. A zero result                               None of the Status flags are affected.
                         is possible but not detected.                                           Note that neither overflow nor carry is
Words:                   1                                                                       possible in this operation. A zero
                                                                                                 result is possible but not detected.
Cycles:                  1                                                                       If ‘a’ is ‘0’, the Access Bank is
Q Cycle Activity:                                                                                selected. If ‘a’ is ‘1’, the BSR is used
                                                                                                 to select the GPR bank.
             Q1              Q2                Q3            Q4
                                                                                                 If ‘a’ is ‘0’ and the extended instruction
          Decode            Read             Process         Write                               set is enabled, this instruction
                         literal ‘k’          Data         registers                             operates in Indexed Literal Offset
                                                           PRODH:                                Addressing mode whenever
                                                            PRODL                                f 95 (5Fh). See Section 24.2.3
                                                                                                 “Byte-Oriented and Bit-Oriented
Example:                  MULLW          0C4h                                                    Instructions in Indexed Literal Offset
                                                                                                 Mode” for details.
     Before Instruction
                                                                       Words:                    1
           W                 =         E2h
           PRODH             =         ?                               Cycles:                   1
           PRODL             =         ?
     After Instruction                                                 Q Cycle Activity:
            W                =         E2h                                          Q1               Q2             Q3            Q4
            PRODH            =         ADh                                       Decode           Read            Process         Write
            PRODL            =         08h                                                      register ‘f’       Data         registers
                                                                                                                                PRODH:
                                                                                                                                 PRODL
                                                                       Example:                   MULWF        REG, 1
                                                                            Before Instruction
                                                                                  W                  =      C4h
                                                                                  REG                =      B5h
                                                                                  PRODH              =      ?
                                                                                  PRODL              =      ?
                                                                            After Instruction
                                                                                   W                 =      C4h
                                                                                   REG               =      B5h
                                                                                   PRODH             =      8Ah
                                                                                   PRODL             =      94h
DS41303G-page 342                                                                                      2010 Microchip Technology Inc.
                                                                       PIC18F2XK20/4XK20
NEGF                 Negate f                                          NOP                   No Operation
Syntax:              NEGF        f {,a}                                Syntax:               NOP
Operands:            0  f  255                                       Operands:             None
                     a  [0,1]
                                                                       Operation:            No operation
Operation:           (f)+1f
                                                                       Status Affected:      None
Status Affected:     N, OV, C, DC, Z
                                                                       Encoding:                 0000    0000        0000      0000
Encoding:                 0110       110a        ffff        ffff                                1111    xxxx        xxxx      xxxx
Description:         Location ‘f’ is negated using two’s               Description:          No operation.
                     complement. The result is placed in the
                                                                       Words:                1
                     data memory location ‘f’.
                     If ‘a’ is ‘0’, the Access Bank is selected.       Cycles:               1
                     If ‘a’ is ‘1’, the BSR is used to select the      Q Cycle Activity:
                     GPR bank.
                                                                                    Q1           Q2             Q3             Q4
                     If ‘a’ is ‘0’ and the extended instruction
                     set is enabled, this instruction operates                   Decode No                      No             No
                     in Indexed Literal Offset Addressing                                    operation       operation      operation
                     mode whenever f 95 (5Fh). See
                     Section 24.2.3 “Byte-Oriented and                 Example:
                     Bit-Oriented Instructions in Indexed
                                                                       None.
                     Literal Offset Mode” for details.
Words:               1
Cycles:              1
Q Cycle Activity:
             Q1           Q2                Q3              Q4
          Decode       Read               Process         Write
                     register ‘f’          Data         register ‘f’
Example:              NEGF          REG, 1
     Before Instruction
           REG        =   0011 1010 [3Ah]
     After Instruction
           REG        =   1100 0110 [C6h]
 2010 Microchip Technology Inc.                                                                                DS41303G-page 343
PIC18F2XK20/4XK20
POP                      Pop Top of Return Stack                   PUSH                  Push Top of Return Stack
Syntax:                  POP                                       Syntax:               PUSH
Operands:                None                                      Operands:             None
Operation:               (TOS)  bit bucket                        Operation:            (PC + 2)  TOS
Status Affected:         None                                      Status Affected:      None
Encoding:                    0000    0000       0000      0110     Encoding:                 0000     0000      0000      0101
Description:             The TOS value is pulled off the return    Description:          The PC + 2 is pushed onto the top of
                         stack and is discarded. The TOS value                           the return stack. The previous TOS
                         then becomes the previous value that                            value is pushed down on the stack.
                         was pushed onto the return stack.                               This instruction allows implementing a
                         This instruction is provided to enable                          software stack by modifying TOS and
                         the user to properly manage the return                          then pushing it onto the return stack.
                         stack to incorporate a software stack.
                                                                   Words:                1
Words:                   1
                                                                   Cycles:               1
Cycles:                  1
                                                                   Q Cycle Activity:
Q Cycle Activity:                                                               Q1           Q2            Q3             Q4
             Q1              Q2            Q3             Q4                 Decode       PUSH            No              No
          Decode            No        POP TOS             No                           PC + 2 onto     operation       operation
                         operation     value           operation                       return stack
Example:                 POP                                       Example:              PUSH
                         GOTO        NEW
                                                                        Before Instruction
     Before Instruction                                                      TOS                       =     345Ah
          TOS                         =     0031A2h                          PC                        =     0124h
          Stack (1 level down)        =     014332h
                                                                        After Instruction
     After Instruction                                                        PC                       =     0126h
           TOS                        =     014332h                           TOS                      =     0126h
           PC                         =     NEW                               Stack (1 level down)     =     345Ah
DS41303G-page 344                                                                              2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
RCALL                  Relative Call                               RESET                     Reset
Syntax:                RCALL       n                               Syntax:                   RESET
Operands:              -1024  n  1023                            Operands:                 None
Operation:             (PC) + 2  TOS,                             Operation:                Reset all registers and flags that are
                       (PC) + 2 + 2n  PC                                                    affected by a MCLR Reset.
Status Affected:       None                                        Status Affected:          All
Encoding:                  1101        1nnn     nnnn      nnnn     Encoding:                     0000     0000        1111      1111
Description:           Subroutine call with a jump up to 1K        Description:              This instruction provides a way to
                       from the current location. First, return                              execute a MCLR Reset by software.
                       address (PC + 2) is pushed onto the         Words:                    1
                       stack. Then, add the 2’s complement
                       number ‘2n’ to the PC. Since the PC will    Cycles:                   1
                       have incremented to fetch the next          Q Cycle Activity:
                       instruction, the new address will be
                                                                                Q1                 Q2            Q3             Q4
                       PC + 2 + 2n. This instruction is a
                       two-cycle instruction.                                Decode              Start         No               No
                                                                                                 Reset      operation        operation
Words:                 1
Cycles:                2                                           Example:                  RESET
Q Cycle Activity:                                                       After Instruction
             Q1            Q2              Q3             Q4                  Registers =          Reset Value
          Decode      Read literal       Process    Write to PC               Flags*     =         Reset Value
                         ‘n’              Data
                      PUSH PC to
                        stack
             No           No               No             No
          operation    operation        operation      operation
Example:               HERE            RCALL Jump
     Before Instruction
           PC =       Address (HERE)
     After Instruction
           PC =       Address (Jump)
           TOS =      Address (HERE + 2)
 2010 Microchip Technology Inc.                                                                                 DS41303G-page 345
PIC18F2XK20/4XK20
RETFIE                Return from Interrupt                          RETLW                 Return literal to W
Syntax:               RETFIE {s}                                     Syntax:               RETLW k
Operands:             s  [0,1]                                      Operands:             0  k  255
Operation:            (TOS)  PC,                                    Operation:            k  W,
                      1  GIE/GIEH or PEIE/GIEL,                                           (TOS)  PC,
                      if s = 1                                                             PCLATU, PCLATH are unchanged
                      (WS)  W,                                      Status Affected:      None
                      (STATUSS)  Status,
                      (BSRS)  BSR,                                  Encoding:                 0000      1100      kkkk       kkkk
                      PCLATU, PCLATH are unchanged.                  Description:          W is loaded with the eight-bit literal ‘k’.
Status Affected:      GIE/GIEH, PEIE/GIEL.                                                 The program counter is loaded from the
                                                                                           top of the stack (the return address).
Encoding:                 0000        0000      0001      000s
                                                                                           The high address latch (PCLATH)
Description:          Return from interrupt. Stack is popped                               remains unchanged.
                      and Top-of-Stack (TOS) is loaded into          Words:                1
                      the PC. Interrupts are enabled by
                      setting either the high or low priority        Cycles:               2
                      global interrupt enable bit. If ‘s’ = 1, the   Q Cycle Activity:
                      contents of the shadow registers, WS,
                                                                                  Q1            Q2            Q3             Q4
                      STATUSS and BSRS, are loaded into
                      their corresponding registers, W,                        Decode         Read        Process         POP PC
                      Status and BSR. If ‘s’ = 0, no update of                             literal ‘k’     Data         from stack,
                      these registers occurs (default).                                                                 Write to W
                                                                                  No          No             No              No
Words:                1
                                                                               operation   operation      operation       operation
Cycles:               2
Q Cycle Activity:                                                    Example:
             Q1           Q2               Q3             Q4
          Decode         No               No          POP PC             CALL TABLE ;          W contains table
                      operation        operation     from stack                     ;          offset value
                                                                                    ;          W now has
                                                    Set GIEH or
                                                                                    ;          table value
                                                       GIEL
                                                                        :
             No          No               No              No         TABLE
          operation   operation        operation       operation         ADDWF PCL ;           W = offset
                                                                         RETLW k0   ;          Begin table
Example:              RETFIE      1                                      RETLW k1   ;
                                                                        :
     After Interrupt
                                                                        :
           PC                          =     TOS
           W                           =     WS                          RETLW kn   ;          End of table
           BSR                         =     BSRS
           Status                      =     STATUSS
           GIE/GIEH, PEIE/GIEL         =     1                            Before Instruction
                                                                                W          =    07h
                                                                          After Instruction
                                                                                W          =    value of kn
DS41303G-page 346                                                                                 2010 Microchip Technology Inc.
                                                                PIC18F2XK20/4XK20
RETURN                Return from Subroutine                    RLCF                  Rotate Left f through Carry
Syntax:               RETURN {s}                                Syntax:                   RLCF        f {,d {,a}}
Operands:             s  [0,1]                                 Operands:             0  f  255
                                                                                      d  [0,1]
Operation:            (TOS)  PC,
                                                                                      a  [0,1]
                      if s = 1
                      (WS)  W,                                 Operation:            (f<n>)  dest<n + 1>,
                      (STATUSS)  Status,                                             (f<7>)  C,
                      (BSRS)  BSR,                                                   (C)  dest<0>
                      PCLATU, PCLATH are unchanged
                                                                Status Affected:      C, N, Z
Status Affected:      None                                      Encoding:                  0011         01da           ffff      ffff
Encoding:                  0000    0000     0001       001s
                                                                Description:          The contents of register ‘f’ are rotated
Description:          Return from subroutine. The stack is                            one bit to the left through the CARRY
                      popped and the top of the stack (TOS)                           flag. If ‘d’ is ‘0’, the result is placed in
                      is loaded into the program counter. If                          W. If ‘d’ is ‘1’, the result is stored back
                      ‘s’= 1, the contents of the shadow                              in register ‘f’ (default).
                      registers, WS, STATUSS and BSRS,                                If ‘a’ is ‘0’, the Access Bank is
                      are loaded into their corresponding                             selected. If ‘a’ is ‘1’, the BSR is used to
                      registers, W, Status and BSR. If                                select the GPR bank.
                      ‘s’ = 0, no update of these registers                           If ‘a’ is ‘0’ and the extended instruction
                      occurs (default).                                               set is enabled, this instruction
                                                                                      operates in Indexed Literal Offset
Words:                1
                                                                                      Addressing mode whenever
Cycles:               2                                                               f 95 (5Fh). See Section 24.2.3
Q Cycle Activity:                                                                     “Byte-Oriented and Bit-Oriented
                                                                                      Instructions in Indexed Literal Offset
             Q1             Q2         Q3             Q4
                                                                                      Mode” for details.
          Decode         No         Process         POP PC
                      operation      Data          from stack                                     C                 register f
             No          No            No             No
          operation   operation     operation      operation    Words:                1
                                                                Cycles:               1
                                                                Q Cycle Activity:
Example:                  RETURN                                             Q1            Q2                 Q3                 Q4
     After Instruction:                                                   Decode       Read                Process            Write to
           PC = TOS                                                                  register ‘f’           Data             destination
                                                                Example:                  RLCF              REG, 0, 0
                                                                     Before Instruction
                                                                           REG        =    1110 0110
                                                                           C          =    0
                                                                     After Instruction
                                                                           REG        =    1110 0110
                                                                           W          =    1100 1100
                                                                           C          =    1
 2010 Microchip Technology Inc.                                                                               DS41303G-page 347
PIC18F2XK20/4XK20
RLNCF                 Rotate Left f (No Carry)                         RRCF                  Rotate Right f through Carry
Syntax:                   RLNCF     f {,d {,a}}                        Syntax:               RRCF       f {,d {,a}}
Operands:             0  f  255                                      Operands:             0  f  255
                      d  [0,1]                                                              d  [0,1]
                      a  [0,1]                                                              a  [0,1]
Operation:            (f<n>)  dest<n + 1>,                            Operation:            (f<n>)  dest<n – 1>,
                      (f<7>)  dest<0>                                                       (f<0>)  C,
                                                                                             (C)  dest<7>
Status Affected:      N, Z
                                                                       Status Affected:      C, N, Z
Encoding:                  0100      01da         ffff     ffff
                                                                       Encoding:                 0011       00da          ffff         ffff
Description:          The contents of register ‘f’ are rotated
                      one bit to the left. If ‘d’ is ‘0’, the result   Description:          The contents of register ‘f’ are rotated
                      is placed in W. If ‘d’ is ‘1’, the result is                           one bit to the right through the CARRY
                      stored back in register ‘f’ (default).                                 flag. If ‘d’ is ‘0’, the result is placed in W.
                      If ‘a’ is ‘0’, the Access Bank is selected.                            If ‘d’ is ‘1’, the result is placed back in
                      If ‘a’ is ‘1’, the BSR is used to select the                           register ‘f’ (default).
                      GPR bank.                                                              If ‘a’ is ‘0’, the Access Bank is selected.
                      If ‘a’ is ‘0’ and the extended instruction                             If ‘a’ is ‘1’, the BSR is used to select the
                      set is enabled, this instruction operates                              GPR bank.
                      in Indexed Literal Offset Addressing                                   If ‘a’ is ‘0’ and the extended instruction
                      mode whenever f 95 (5Fh). See                                        set is enabled, this instruction operates
                      Section 24.2.3 “Byte-Oriented and                                      in Indexed Literal Offset Addressing
                      Bit-Oriented Instructions in Indexed                                   mode whenever f 95 (5Fh). See
                      Literal Offset Mode” for details.                                      Section 24.2.3 “Byte-Oriented and
                                                                                             Bit-Oriented Instructions in Indexed
                                          register f
                                                                                             Literal Offset Mode” for details.
Words:                1                                                                                 C             register f
Cycles:               1
                                                                       Words:                1
Q Cycle Activity:
                                                                       Cycles:               1
             Q1            Q2             Q3              Q4
          Decode       Read            Process          Write to       Q Cycle Activity:
                     register ‘f’       Data           destination                  Q1           Q2               Q3                   Q4
                                                                                 Decode       Read             Process              Write to
Example:                  RLNCF         REG, 1, 0                                           register ‘f’        Data               destination
     Before Instruction
           REG        =    1010 1011                                   Example:              RRCF             REG, 0, 0
     After Instruction                                                      Before Instruction
           REG        =    0101 0111                                              REG        =   1110 0110
                                                                                  C          =   0
                                                                            After Instruction
                                                                                  REG        =   1110 0110
                                                                                  W          =   0111 0011
                                                                                  C          =   0
DS41303G-page 348                                                                                  2010 Microchip Technology Inc.
                                                                            PIC18F2XK20/4XK20
RRNCF                     Rotate Right f (No Carry)                         SETF                  Set f
Syntax:                   RRNCF       f {,d {,a}}                           Syntax:               SETF       f {,a}
Operands:                 0  f  255                                       Operands:             0  f  255
                          d  [0,1]                                                               a [0,1]
                          a  [0,1]
                                                                            Operation:            FFh  f
Operation:                (f<n>)  dest<n – 1>,
                                                                            Status Affected:      None
                          (f<0>)  dest<7>
                                                                            Encoding:                 0110        100a       ffff        ffff
Status Affected:          N, Z
                                                                            Description:          The contents of the specified register
Encoding:                     0100       00da       ffff         ffff
                                                                                                  are set to FFh.
Description:              The contents of register ‘f’ are rotated                                If ‘a’ is ‘0’, the Access Bank is selected.
                          one bit to the right. If ‘d’ is ‘0’, the result                         If ‘a’ is ‘1’, the BSR is used to select the
                          is placed in W. If ‘d’ is ‘1’, the result is                            GPR bank.
                          placed back in register ‘f’ (default).                                  If ‘a’ is ‘0’ and the extended instruction
                          If ‘a’ is ‘0’, the Access Bank will be                                  set is enabled, this instruction operates
                          selected (default), overriding the BSR                                  in Indexed Literal Offset Addressing
                          value. If ‘a’ is ‘1’, then the bank will be                             mode whenever f 95 (5Fh). See
                          selected as per the BSR value.                                          Section 24.2.3 “Byte-Oriented and
                          If ‘a’ is ‘0’ and the extended instruction                              Bit-Oriented Instructions in Indexed
                          set is enabled, this instruction operates                               Literal Offset Mode” for details.
                          in Indexed Literal Offset Addressing              Words:                1
                          mode whenever f 95 (5Fh). See
                          Section 24.2.3 “Byte-Oriented and                 Cycles:               1
                          Bit-Oriented Instructions in Indexed              Q Cycle Activity:
                          Literal Offset Mode” for details.
                                                                                         Q1           Q2                Q3              Q4
                                                register f                            Decode       Read               Process         Write
                                                                                                 register ‘f’          Data         register ‘f’
Words:                    1
Cycles:                   1                                                 Example:              SETF                 REG, 1
Q Cycle Activity:                                                                Before Instruction
             Q1               Q2              Q3                Q4                     REG            =      5Ah
                                                                                 After Instruction
          Decode        Read               Process            Write to
                                                                                       REG            =      FFh
                      register ‘f’          Data             destination
Example 1:                RRNCF         REG, 1, 0
     Before Instruction
           REG        =       1101 0111
     After Instruction
           REG        =       1110 1011
Example 2:                RRNCF         REG, 0, 0
     Before Instruction
           W          =       ?
           REG        =       1101 0111
     After Instruction
            W        =        1110 1011
            REG      =        1101 0111
 2010 Microchip Technology Inc.                                                                                        DS41303G-page 349
PIC18F2XK20/4XK20
SLEEP                     Enter Sleep mode                        SUBFWB                Subtract f from W with borrow
Syntax:                   SLEEP                                   Syntax:               SUBFWB        f {,d {,a}}
Operands:                 None                                    Operands:             0 f 255
                                                                                        d  [0,1]
Operation:                00h  WDT,
                                                                                        a  [0,1]
                          0  WDT postscaler,
                          1  TO,                                 Operation:            (W) – (f) – (C) dest
                          0  PD                                  Status Affected:      N, OV, C, DC, Z
Status Affected:          TO, PD
                                                                  Encoding:                 0101      01da      ffff       ffff
Encoding:                     0000   0000     0000      0011
                                                                  Description:          Subtract register ‘f’ and CARRY flag
Description:              The Power-down Status bit (PD) is                             (borrow) from W (2’s complement
                          cleared. The Time-out Status bit (TO)                         method). If ‘d’ is ‘0’, the result is stored
                          is set. Watchdog Timer and its                                in W. If ‘d’ is ‘1’, the result is stored in
                          postscaler are cleared.                                       register ‘f’ (default).
                          The processor is put into Sleep mode                          If ‘a’ is ‘0’, the Access Bank is
                          with the oscillator stopped.                                  selected. If ‘a’ is ‘1’, the BSR is used
Words:                    1                                                             to select the GPR bank.
                                                                                        If ‘a’ is ‘0’ and the extended instruction
Cycles:                   1                                                             set is enabled, this instruction
Q Cycle Activity:                                                                       operates in Indexed Literal Offset
                                                                                        Addressing mode whenever
             Q1               Q2         Q3            Q4
                                                                                        f 95 (5Fh). See Section 24.2.3
          Decode         No            Process        Go to                             “Byte-Oriented and Bit-Oriented
                      operation         Data          Sleep                             Instructions in Indexed Literal Offset
                                                                                        Mode” for details.
Example:                  SLEEP                                   Words:                1
     Before Instruction                                           Cycles:               1
          TO =       ?
                                                                  Q Cycle Activity:
          PD =       ?
     After Instruction                                                         Q1           Q2            Q3               Q4
           TO =1              †                                             Decode      Read           Process         Write to
           PD =       0                                                               register ‘f’      Data          destination
                                                                  Example 1:             SUBFWB    REG, 1, 0
† If WDT causes wake-up, this bit is cleared.
                                                                      Before Instruction
                                                                            REG        =   3
                                                                            W          =   2
                                                                            C          =   1
                                                                      After Instruction
                                                                            REG        =   FF
                                                                            W          =   2
                                                                            C          =   0
                                                                            Z          =   0
                                                                            N          =   1 ; result is negative
                                                                  Example 2:             SUBFWB    REG, 0, 0
                                                                      Before Instruction
                                                                            REG        =   2
                                                                            W          =   5
                                                                            C          =   1
                                                                      After Instruction
                                                                            REG        =   2
                                                                            W          =   3
                                                                            C          =   1
                                                                            Z          =   0
                                                                            N          =   0 ; result is positive
                                                                  Example 3:             SUBFWB    REG, 1, 0
                                                                      Before Instruction
                                                                            REG        =   1
                                                                            W          =   2
                                                                            C          =   0
                                                                      After Instruction
                                                                            REG        =   0
                                                                            W          =   2
                                                                            C          =   1
                                                                            Z          =   1 ; result is zero
                                                                            N          =   0
DS41303G-page 350                                                                             2010 Microchip Technology Inc.
                                                                      PIC18F2XK20/4XK20
SUBLW                     Subtract W from literal                     SUBWF                     Subtract W from f
Syntax:                   SUBLW k                                     Syntax:                   SUBWF         f {,d {,a}}
Operands:                 0 k 255                                 Operands:                 0 f 255
                                                                                                d  [0,1]
Operation:                k – (W) W
                                                                                                a  [0,1]
Status Affected:          N, OV, C, DC, Z
                                                                      Operation:                (f) – (W) dest
Encoding:                     0000      1000     kkkk        kkkk
                                                                      Status Affected:          N, OV, C, DC, Z
Description               W is subtracted from the eight-bit
                          literal ‘k’. The result is placed in W.     Encoding:                     0101       11da         ffff      ffff
                                                                      Description:              Subtract W from register ‘f’ (2’s
Words:                    1
                                                                                                complement method). If ‘d’ is ‘0’, the
Cycles:                   1                                                                     result is stored in W. If ‘d’ is ‘1’, the
Q Cycle Activity:                                                                               result is stored back in register ‘f’
                                                                                                (default).
             Q1               Q2            Q3              Q4
                                                                                                If ‘a’ is ‘0’, the Access Bank is
          Decode         Read            Process         Write to W                             selected. If ‘a’ is ‘1’, the BSR is used
                      literal ‘k’         Data                                                  to select the GPR bank.
                                                                                                If ‘a’ is ‘0’ and the extended instruction
Example 1:                SUBLW      02h
                                                                                                set is enabled, this instruction
     Before Instruction                                                                         operates in Indexed Literal Offset
           W          =       01h                                                               Addressing mode whenever
           C          =       ?
                                                                                                f 95 (5Fh). See Section 24.2.3
     After Instruction
           W          =       01h                                                               “Byte-Oriented and Bit-Oriented
           C          =       1   ; result is positive                                          Instructions in Indexed Literal Offset
           Z          =       0                                                                 Mode” for details.
           N          =       0
                                                                      Words:                    1
Example 2:                SUBLW      02h
                                                                      Cycles:                   1
     Before Instruction
           W          =       02h                                     Q Cycle Activity:
           C          =       ?
                                                                                   Q1               Q2              Q3                Q4
     After Instruction
           W          =       00h                                               Decode       Read                Process           Write to
           C          =       1   ; result is zero                                         register ‘f’           Data            destination
           Z          =       1
           N          =       0                                       Example 1:                SUBWF         REG, 1, 0
Example 3:                SUBLW      02h                                   Before Instruction
                                                                                 REG        =       3
     Before Instruction                                                          W          =       2
           W          =       03h                                                C          =       ?
           C          =       ?                                            After Instruction
     After Instruction                                                           REG        =       1
           W          =       FFh ; (2’s complement)                             W          =       2
           C          =       0   ; result is negative                           C          =       1      ; result is positive
           Z          =       0                                                  Z          =       0
           N          =       1                                                  N          =       0
                                                                      Example 2:                SUBWF         REG, 0, 0
                                                                           Before Instruction
                                                                                 REG        = 2
                                                                                 W          = 2
                                                                                 C          = ?
                                                                           After Instruction
                                                                                 REG        = 2
                                                                                 W          = 0
                                                                                 C          = 1 ; esult is r ero                  z
                                                                                 Z          = 1
                                                                                 N          = 0
                                                                      Example 3:                SUBWF         REG, 1, 0
                                                                           Before Instruction
                                                                                 REG        =       1
                                                                                 W          =       2
                                                                                 C          =       ?
                                                                           After Instruction
                                                                                 REG        =       FFh ;(2’s complement)
                                                                                 W          =       2
                                                                                 C          =       0   ; result is negative
                                                                                 Z          =       0
                                                                                 N          =       1
 2010 Microchip Technology Inc.                                                                                     DS41303G-page 351
PIC18F2XK20/4XK20
SUBWFB               Subtract W from f with Borrow                     SWAPF                 Swap f
Syntax:              SUBWFB         f {,d {,a}}                        Syntax:               SWAPF f {,d {,a}}
Operands:            0  f  255                                       Operands:             0  f  255
                     d  [0,1]                                                               d  [0,1]
                     a  [0,1]                                                               a  [0,1]
Operation:           (f) – (W) – (C) dest                            Operation:            (f<3:0>)  dest<7:4>,
Status Affected:     N, OV, C, DC, Z                                                         (f<7:4>)  dest<3:0>
Encoding:                 0101      10da          ffff       ffff      Status Affected:      None
Description:         Subtract W and the CARRY flag                     Encoding:                 0011       10da     ffff        ffff
                     (borrow) from register ‘f’ (2’s comple-
                     ment method). If ‘d’ is ‘0’, the result is        Description:          The upper and lower nibbles of register
                     stored in W. If ‘d’ is ‘1’, the result is                               ‘f’ are exchanged. If ‘d’ is ‘0’, the result
                     stored back in register ‘f’ (default).                                  is placed in W. If ‘d’ is ‘1’, the result is
                     If ‘a’ is ‘0’, the Access Bank is selected.                             placed in register ‘f’ (default).
                     If ‘a’ is ‘1’, the BSR is used to select the                            If ‘a’ is ‘0’, the Access Bank is selected.
                     GPR bank.                                                               If ‘a’ is ‘1’, the BSR is used to select the
                     If ‘a’ is ‘0’ and the extended instruction                              GPR bank.
                     set is enabled, this instruction operates                               If ‘a’ is ‘0’ and the extended instruction
                     in Indexed Literal Offset Addressing                                    set is enabled, this instruction operates
                     mode whenever f 95 (5Fh). See                                         in Indexed Literal Offset Addressing
                     Section 24.2.3 “Byte-Oriented and                                       mode whenever f 95 (5Fh). See
                     Bit-Oriented Instructions in Indexed                                    Section 24.2.3 “Byte-Oriented and
                     Literal Offset Mode” for details.                                       Bit-Oriented Instructions in Indexed
                                                                                             Literal Offset Mode” for details.
Words:               1
                                                                       Words:                1
Cycles:              1
                                                                       Cycles:               1
Q Cycle Activity:
            Q1          Q2              Q3                   Q4        Q Cycle Activity:
          Decode       Read           Process             Write to                  Q1           Q2             Q3              Q4
                     register ‘f’      Data              destination             Decode       Read            Process       Write to
Example 1:                SUBWFB    REG, 1, 0                                               register ‘f’       Data        destination
     Before Instruction
           REG        =    19h       (0001 1001)                       Example:              SWAPF         REG, 1, 0
           W          =    0Dh       (0000 1101)
           C          =    1                                                Before Instruction
     After Instruction                                                            REG        =   53h
           REG        =    0Ch       (0000 1100)                            After Instruction
           W          =    0Dh       (0000 1101)
           C          =    1                                                      REG        =   35h
           Z          =    0
           N          =    0         ; result is positive
Example 2:                SUBWFB REG, 0, 0
     Before Instruction
           REG        =    1Bh       (0001 1011)
           W          =    1Ah       (0001 1010)
           C          =    0
     After Instruction
           REG        =    1Bh       (0001 1011)
           W          =    00h
           C          =    1
           Z          =    1         ; result is zero
           N          =    0
Example 3:                SUBWFB    REG, 1, 0
     Before Instruction
           REG        =    03h       (0000 0011)
           W          =    0Eh       (0000 1110)
           C          =    1
     After Instruction
           REG        =    F5h       (1111 0101)
                                     ; [2’s comp]
            W       =      0Eh       (0000 1110)
            C       =      0
            Z       =      0
            N       =      1         ; result is negative
DS41303G-page 352                                                                                  2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
TBLRD             Table Read                                        TBLRD            Table Read (Continued)
Syntax:           TBLRD ( *; *+; *-; +*)                            Example1:        TBLRD   *+ ;
Operands:         None                                                  Before Instruction
                                                                              TABLAT             =   55h
Operation:        if TBLRD *,                                                 TBLPTR             =   00A356h
                  (Prog Mem (TBLPTR))  TABLAT;                               MEMORY (00A356h)   =   34h
                  TBLPTR – No Change;                                   After Instruction
                  if TBLRD *+,                                                TABLAT             =   34h
                  (Prog Mem (TBLPTR))  TABLAT;                               TBLPTR             =   00A357h
                  (TBLPTR) + 1  TBLPTR;
                                                                    Example2:        TBLRD   +* ;
                  if TBLRD *-,
                  (Prog Mem (TBLPTR))  TABLAT;                         Before Instruction
                  (TBLPTR) – 1  TBLPTR;                                      TABLAT             =   AAh
                                                                              TBLPTR             =   01A357h
                  if TBLRD +*,                                                MEMORY (01A357h)   =   12h
                  (TBLPTR) + 1  TBLPTR;                                      MEMORY (01A358h)   =   34h
                  (Prog Mem (TBLPTR))  TABLAT;                         After Instruction
Status Affected: None                                                         TABLAT             =   34h
                                                                              TBLPTR             =   01A358h
Encoding:              0000         0000    0000       10nn
                                                      nn=0 *
                                                        =1 *+
                                                        =2 *-
                                                        =3 +*
Description:      This instruction is used to read the contents
                  of Program Memory (P.M.). To address the
                  program memory, a pointer called Table
                  Pointer (TBLPTR) is used.
                  The TBLPTR (a 21-bit pointer) points to
                  each byte in the program memory. TBLPTR
                  has a 2-Mbyte address range.
                       TBLPTR[0] = 0: Least Significant Byte
                                          of Program Memory
                                          Word
                       TBLPTR[0] = 1: Most Significant Byte
                                          of Program Memory
                                          Word
                  The TBLRD instruction can modify the value
                  of TBLPTR as follows:
                  • no change
                  • post-increment
                  • post-decrement
                  • pre-increment
Words:            1
Cycles:           2
Q Cycle Activity:
          Q1               Q2              Q3           Q4
         Decode            No             No            No
                        operation      operation     operation
         No            No operation       No        No operation
      operation       (Read Program    operation   (Write TABLAT)
                         Memory)
 2010 Microchip Technology Inc.                                                                     DS41303G-page 353
PIC18F2XK20/4XK20
TBLWT               Table Write                                 TBLWT            Table Write (Continued)
Syntax:             TBLWT ( *; *+; *-; +*)                      Example1:        TBLWT *+;
Operands:           None
                                                                   Before Instruction
Operation:          if TBLWT*,                                     =     TABLAT                         55h
                    (TABLAT)  Holding Register;                         TBLPTR                     =   00A356h
                    TBLPTR – No Change;                                  HOLDING REGISTER
                                                                          (00A356h)                 =   FFh
                    if TBLWT*+,
                                                                   After Instructions (table write completion)
                    (TABLAT)  Holding Register;
                                                                         TABLAT                     =   55h
                    (TBLPTR) + 1  TBLPTR;                               TBLPTR                     =   00A357h
                    if TBLWT*-,                                          HOLDING REGISTER
                    (TABLAT)  Holding Register;                          (00A356h)                 =   55h
                    (TBLPTR) – 1  TBLPTR;                      Example 2:       TBLWT +*;
                    if TBLWT+*,
                    (TBLPTR) + 1  TBLPTR;                          Before Instruction
                    (TABLAT)  Holding Register;                          TABLAT                     =   34h
                                                                          TBLPTR                     =   01389Ah
Status Affected:    None                                                  HOLDING REGISTER
                                                                           (01389Ah)                 =   FFh
Encoding:               0000     0000        0000     11nn                HOLDING REGISTER
                                                    nn=0 *                 (01389Bh)                 =   FFh
                                                      =1 *+         After Instruction (table write completion)
                                                      =2 *-               TABLAT                     =   34h
                                                      =3 +*               TBLPTR                     =   01389Bh
                                                                          HOLDING REGISTER
Description:        This instruction uses the 3 LSBs of                    (01389Ah)                 =   FFh
                    TBLPTR to determine which of the                      HOLDING REGISTER
                    8 holding registers the TABLAT is written              (01389Bh)                 =   34h
                    to. The holding registers are used to
                    program the contents of Program
                    Memory (P.M.). (Refer to Section 6.0
                    “Flash Program Memory” for additional
                    details on programming Flash memory.)
                    The TBLPTR (a 21-bit pointer) points to
                    each byte in the program memory.
                    TBLPTR has a 2-MByte address range.
                    The LSb of the TBLPTR selects which
                    byte of the program memory location to
                    access.
                         TBLPTR[0] = 0: Least Significant
                                            Byte of Program
                                            Memory Word
                         TBLPTR[0] = 1: Most Significant
                                            Byte of Program
                                            Memory Word
                    The TBLWT instruction can modify the
                    value of TBLPTR as follows:
                    • no change
                    • post-increment
                    • post-decrement
                    • pre-increment
Words:              1
Cycles:             2
Q Cycle Activity:
                        Q1        Q2         Q3       Q4
                     Decode       No        No        No
                               operation operation operation
                       No        No        No        No
                    operation operation operation operation
                               (Read              (Write to
                              TABLAT)              Holding
                                                  Register )
DS41303G-page 354                                                                         2010 Microchip Technology Inc.
                                                                      PIC18F2XK20/4XK20
TSTFSZ                 Test f, skip if 0                              XORLW                     Exclusive OR literal with W
Syntax:                TSTFSZ f {,a}                                  Syntax:                   XORLW k
Operands:              0  f  255                                    Operands:                 0 k 255
                       a  [0,1]
                                                                      Operation:                (W) .XOR. k W
Operation:             skip if f = 0
                                                                      Status Affected:          N, Z
Status Affected:       None
                                                                      Encoding:                     0000      1010      kkkk       kkkk
Encoding:                  0110        011a     ffff       ffff
                                                                      Description:              The contents of W are XORed with
Description:           If ‘f’ = 0, the next instruction fetched                                 the 8-bit literal ‘k’. The result is placed
                       during the current instruction execution                                 in W.
                       is discarded and a NOP is executed,
                                                                      Words:                    1
                       making this a two-cycle instruction.
                       If ‘a’ is ‘0’, the Access Bank is selected.    Cycles:                   1
                       If ‘a’ is ‘1’, the BSR is used to select the   Q Cycle Activity:
                       GPR bank.
                                                                                   Q1               Q2            Q3              Q4
                       If ‘a’ is ‘0’ and the extended instruction
                       set is enabled, this instruction operates                Decode             Read        Process        Write to W
                       in Indexed Literal Offset Addressing                                     literal ‘k’     Data
                       mode whenever f 95 (5Fh). See
                       Section 24.2.3 “Byte-Oriented and              Example:                  XORLW         0AFh
                       Bit-Oriented Instructions in Indexed
                       Literal Offset Mode” for details.                   Before Instruction
                                                                                 W          =       B5h
Words:                 1
                                                                           After Instruction
Cycles:                1(2)
                                                                                  W        =        1Ah
                       Note: 3 cycles if skip and followed
                             by a 2-word instruction.
Q Cycle Activity:
              Q1           Q2              Q3             Q4
           Decode        Read           Process           No
                       register ‘f’      Data          operation
If skip:
              Q1           Q2              Q3             Q4
              No          No               No             No
           operation   operation        operation      operation
If skip and followed by 2-word instruction:
              Q1           Q2              Q3             Q4
              No          No               No             No
           operation   operation        operation      operation
              No          No               No             No
           operation   operation        operation      operation
Example:               HERE           TSTFSZ    CNT, 1
                       NZERO          :
                       ZERO           :
   Before Instruction
   =     PC                       Address (HERE)
   After Instruction
         If CNT            =      00h,
   =     PC                       Address (ZERO)
         If CNT                  00h,
   =     PC                       Address (NZERO)
 2010 Microchip Technology Inc.                                                                                     DS41303G-page 355
PIC18F2XK20/4XK20
XORWF                 Exclusive OR W with f
Syntax:               XORWF         f {,d {,a}}
Operands:             0  f  255
                      d  [0,1]
                      a  [0,1]
Operation:           (W) .XOR. (f) dest
Status Affected:      N, Z
Encoding:                 0001       10da         ffff        ffff
Description:          Exclusive OR the contents of W with
                      register ‘f’. If ‘d’ is ‘0’, the result is stored
                      in W. If ‘d’ is ‘1’, the result is stored back
                      in the register ‘f’ (default).
                      If ‘a’ is ‘0’, the Access Bank is selected.
                      If ‘a’ is ‘1’, the BSR is used to select the
                      GPR bank.
                      If ‘a’ is ‘0’ and the extended instruction
                      set is enabled, this instruction operates
                      in Indexed Literal Offset Addressing
                      mode whenever f 95 (5Fh). See
                      Section 24.2.3 “Byte-Oriented and
                      Bit-Oriented Instructions in Indexed
                      Literal Offset Mode” for details.
Words:                1
Cycles:               1
Q Cycle Activity:
             Q1           Q2               Q3               Q4
          Decode       Read             Process          Write to
                     register ‘f’        Data           destination
Example:              XORWF         REG, 1, 0
     Before Instruction
           REG        =   AFh
           W          =   B5h
     After Instruction
           REG        =   1Ah
           W          =   B5h
DS41303G-page 356                                                          2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
24.2     Extended Instruction Set                                  A summary of the instructions in the extended instruc-
                                                                   tion set is provided in Table 24-3. Detailed descriptions
In addition to the standard 75 instructions of the PIC18           are provided in Section 24.2.2 “Extended Instruction
instruction s et, PIC 18F2XK20/4XK20 de vices also                 Set”. The opcode field descriptions in Table 24-1 apply
provide an op tional ex tension to t he core C PU                  to bo th the standard and ex tended PIC 18 i nstruction
functionality. Th e add ed fe atures include eig ht                sets.
additional in structions that au gment in direct an d
indexed addressing operations and the implementation                 Note:     The in struction se t ex tension an d th e
of Indexed Literal Offset Addressing mode for many of                          Indexed Literal Of fset Addre ssing mode
the standard PIC18 instructions.                                               were designed for optimizing applications
                                                                               written in C; the user may likely never use
The additional features of the extended instruction set
                                                                               these i nstructions directly i n assembler.
are disabled by default. To enable them, users must set
                                                                               The s yntax for th ese co mmands i s p ro-
the XINST Configuration bit.
                                                                               vided as a reference for users who may be
The in structions in th e ext ended s et ca n all be                           reviewing co de that ha s be en ge nerated
classified as literal operations, which either manipulate                      by a compiler.
the F ile Sel ect R egisters, or use th em for i ndexed
addressing. T wo of the       instructions, ADDFSR an d            24.2.1      EXTENDED INSTRUCTION SYNTAX
SUBFSR, each have an additional special instantiation
                                                                   Most of the ex tended instructions us e i ndexed
for u sing F SR2. These versions ( ADDULNK an d
                                                                   arguments, using one of the File Select Registers and
SUBULNK) allow for automatic return after execution.
                                                                   some offset to specify a source or destination register.
The extended instructions are specifically implemented             When an argument for an instruction serves as part of
to optimize re-entrant program code (that is, code that            indexed addressing, it is enclosed in s quare brackets
is r ecursive o r t hat uses a s oftware stack) written in         (“[ ]”). This is done to indicate that the argument is used
high-level la nguages, particularly C . Am ong oth er              as an index or offset. MPASM™ Assembler will flag an
things, th ey allow users w orking i n high-level                  error if it determines that an index or offset value is not
languages to perform ce rtain ope rations on da ta                 bracketed.
structures more efficiently. These include:
                                                                   When the extended instruction set is enabled, brackets
• dynamic allocation and deallocation of software                  are als o us ed to indicate ind ex arguments in byt e-
  stack space when entering and leaving                            oriented and bit-oriented instructions. This is in addition
  subroutines                                                      to other changes in their syntax. For more details, see
• function pointer invocation                                      Section 24.2.3.1 “Extended Instruction Syntax with
• software Stack Pointer manipulation                              Standard PIC18 Commands”.
• manipulation of variables located in a software                    Note:     In the p ast, sq uare brackets h ave bee n
  stack                                                                        used to denote optional arguments in the
                                                                               PIC18 and earlier instruction sets. In this
                                                                               text and goi ng forw ard, o ptional
                                                                               arguments are denoted by braces (“{ }”).
TABLE 24-3:          EXTENSIONS TO THE PIC18 INSTRUCTION SET
     Mnemonic,                                                              16-Bit Instruction Word             Status
                                   Description               Cycles
     Operands                                                            MSb                       LSb         Affected
ADDFSR        f, k     Add literal to FSR                      1        1110     1000      ffkk    kkkk          None
ADDULNK       k        Add literal to FSR2 and return          2        1110     1000      11kk    kkkk          None
CALLW                  Call subroutine using WREG              2        0000     0000      0001    0100          None
MOVSF         zs, fd   Move zs (source) to 1st word            2        1110     1011     0zzz     zzzz          None
                          fd (destination)    2nd word                  1111     ffff     ffff     ffff
MOVSS         zs, zd   Move zs (source) to 1st word            2        1110     1011     1zzz     zzzz          None
                          zd (destination)    2nd word                  1111     xxxx     xzzz     zzzz
PUSHL         k        Store literal at FSR2,                  1        1110     1010     kkkk     kkkk          None
                         decrement FSR2
SUBFSR        f, k     Subtract literal from FSR               1        1110     1001     ffkk     kkkk          None
SUBULNK       k        Subtract literal from FSR2 and          2        1110     1001     11kk     kkkk          None
                         return
 2010 Microchip Technology Inc.                                                                          DS41303G-page 357
PIC18F2XK20/4XK20
24.2.2         EXTENDED INSTRUCTION SET
ADDFSR                     Add Literal to FSR                         ADDULNK                    Add Literal to FSR2 and Return
Syntax:                    ADDFSR f, k                                Syntax:                    ADDULNK k
Operands:                  0  k  63                                 Operands:                  0  k  63
                           f  [ 0, 1, 2 ]                            Operation:                 FSR2 + k  FSR2,
Operation:                 FSR(f) + k  FSR(f)                                                   (TOS) PC
Status Affected:           None                                       Status Affected:           None
Encoding:                   1110        1000        ffkk     kkkk     Encoding:                   1110        1000     11kk      kkkk
Description:               The 6-bit literal ‘k’ is added to the      Description:               The 6-bit literal ‘k’ is added to the
                           contents of the FSR specified by ‘f’.                                 contents of FSR2. A RETURN is then
Words:                     1                                                                     executed by loading the PC with the
Cycles:                    1                                                                     TOS.
                                                                                                 The instruction takes two cycles to
Q Cycle Activity:
                                                                                                 execute; a NOP is performed during
             Q1                Q2              Q3            Q4
                                                                                                 the second cycle.
          Decode             Read            Process       Write to                              This may be thought of as a special
                          literal ‘k’         Data          FSR                                  case of the ADDFSR instruction,
                                                                                                 where f = 3 (binary ‘11’); it operates
                                                                                                 only on FSR2.
Example:                  ADDFSR 2, 23h                               Words:                     1
     Before Instruction                                               Cycles:                    2
          FSR2       =         03FFh
     After Instruction
                                                                      Q Cycle Activity:
           FSR2       =        0422h
                                                                                   Q1                Q2           Q3             Q4
                                                                                Decode             Read        Process        Write to
                                                                                                literal ‘k’     Data           FSR
                                                                                 No           No                 No             No
                                                                               Operation    Operation          Operation      Operation
                                                                      Example:                  ADDULNK 23h
                                                                           Before Instruction
                                                                                FSR2       =         03FFh
                                                                                PC         =         0100h
                                                                           After Instruction
                                                                                 FSR2       =        0422h
                                                                                 PC         =        (TOS)
  Note:        All PIC18 instructions may take an optional label argument preceding the instruction mnemonic for use in
               symbolic addressing. If a label is used, the instruction syntax then becomes: {label} instruction argument(s).
DS41303G-page 358                                                                                      2010 Microchip Technology Inc.
                                                                PIC18F2XK20/4XK20
CALLW                 Subroutine Call Using WREG                MOVSF                 Move Indexed to f
Syntax:               CALLW                                     Syntax:               MOVSF [zs], fd
Operands:             None                                      Operands:             0  zs  127
                                                                                      0  fd  4095
Operation:            (PC + 2)  TOS,
                      (W)  PCL,                                Operation:            ((FSR2) + zs)  fd
                      (PCLATH)  PCH,
                                                                Status Affected:      None
                      (PCLATU)  PCU
                                                                Encoding:
Status Affected:      None
                                                                1st word (source)         1110      1011       0zzz       zzzzs
Encoding:                 0000    0000      0001      0100      2nd word (destin.)        1111      ffff       ffff       ffffd
Description           First, the return address (PC + 2) is     Description:          The contents of the source register are
                      pushed onto the return stack. Next, the                         moved to destination register ‘fd’. The
                      contents of W are written to PCL; the                           actual address of the source register is
                      existing value is discarded. Then, the                          determined by adding the 7-bit literal
                      contents of PCLATH and PCLATU are                               offset ‘zs’ in the first word to the value of
                      latched into PCH and PCU,                                       FSR2. The address of the destination
                      respectively. The second cycle is                               register is specified by the 12-bit literal
                      executed as a NOP instruction while the                         ‘fd’ in the second word. Both addresses
                      new next instruction is fetched.                                can be anywhere in the 4096-byte data
                      Unlike CALL, there is no option to                              space (000h to FFFh).
                      update W, Status or BSR.                                        The MOVSF instruction cannot use the
                                                                                      PCL, TOSU, TOSH or TOSL as the
Words:                1
                                                                                      destination register.
Cycles:               2                                                               If the resultant source address points to
Q Cycle Activity:                                                                     an indirect addressing register, the
                                                                                      value returned will be 00h.
             Q1           Q2          Q3              Q4
          Decode       Read       PUSH PC to          No        Words:                2
                       WREG         stack          operation    Cycles:               2
             No          No           No              No        Q Cycle Activity:
          operation   operation    operation       operation
                                                                             Q1           Q2              Q3              Q4
                                                                          Decode      Determine   Determine            Read
Example:              HERE        CALLW                                              source addr source addr         source reg
                                                                          Decode         No               No            Write
     Before Instruction
           PC         = address (HERE)                                                operation        operation      register ‘f’
           PCLATH =     10h                                                          No dummy                           (dest)
           PCLATU =     00h                                                            read
           W          = 06h
     After Instruction
           PC         = 001006h
           TOS        = address (HERE + 2)                      Example:              MOVSF       [05h], REG2
           PCLATH =     10h                                          Before Instruction
           PCLATU= 00h                                                     FSR2           =      80h
           W          = 06h
                                                                           Contents
                                                                           of 85h         =      33h
                                                                           REG2           =      11h
                                                                     After Instruction
                                                                           FSR2           =      80h
                                                                           Contents
                                                                           of 85h         =      33h
                                                                           REG2           =      33h
 2010 Microchip Technology Inc.                                                                          DS41303G-page 359
PIC18F2XK20/4XK20
MOVSS                 Move Indexed to Indexed                     PUSHL               Store Literal at FSR2, Decrement FSR2
Syntax:               MOVSS [zs], [zd]                            Syntax:             PUSHL k
Operands:             0  zs  127                                Operands:           0k  255
                      0  zd  127
                                                                  Operation:          k  (FSR2),
Operation:            ((FSR2) + zs)  ((FSR2) + zd)                                   FSR2 – 1  FSR2
Status Affected:      None
                                                                  Status Affected:    None
Encoding:
                                                                  Encoding:               1111        1010        kkkk       kkkk
1st word (source)         1110         1011    1zzz    zzzzs
2nd word (dest.)          1111         xxxx    xzzz    zzzzd      Description:        The 8-bit literal ‘k’ is written to the data
                                                                                      memory address specified by FSR2. FSR2
Description           The contents of the source register are
                      moved to the destination register. The                          is decremented by 1 after the operation.
                      addresses of the source and destination                         This instruction allows users to push values
                                                                                      onto a software stack.
                      registers are determined by adding the
                      7-bit literal offsets ‘zs’ or ‘zd’,         Words:              1
                      respectively, to the value of FSR2. Both
                                                                  Cycles:             1
                      registers can be located anywhere in
                      the 4096-byte data memory space             Q Cycle Activity:
                      (000h to FFFh).                                          Q1            Q2              Q3             Q4
                      The MOVSS instruction cannot use the                  Decode         Read ‘k’      Process          Write to
                      PCL, TOSU, TOSH or TOSL as the                                                       data          destination
                      destination register.
                      If the resultant source address points to
                      an indirect addressing register, the        Example:                PUSHL 08h
                      value returned will be 00h. If the
                      resultant destination address points to          Before Instruction
                      an indirect addressing register, the                  FSR2H:FSR2L                  =    01ECh
                                                                            Memory (01ECh)               =    00h
                      instruction will execute as a NOP.
Words:                2                                                After Instruction
Cycles:               2                                                      FSR2H:FSR2L                 =    01EBh
                                                                             Memory (01ECh)              =    08h
Q Cycle Activity:
             Q1           Q2              Q3          Q4
          Decode     Determine   Determine           Read
                    source addr source addr        source reg
          Decode     Determine         Determine      Write
                     dest addr         dest addr   to dest reg
Example:              MOVSS [05h], [06h]
     Before Instruction
           FSR2           =      80h
           Contents
           of 85h         =      33h
           Contents
           of 86h         =      11h
     After Instruction
           FSR2           =      80h
           Contents
           of 85h         =      33h
           Contents
           of 86h         =      33h
DS41303G-page 360                                                                                 2010 Microchip Technology Inc.
                                                                        PIC18F2XK20/4XK20
SUBFSR                    Subtract Literal from FSR                     SUBULNK            Subtract Literal from FSR2 and Return
Syntax:                   SUBFSR f, k                                   Syntax:            SUBULNK k
Operands:                 0  k  63                                    Operands:          0  k  63
                          f  [ 0, 1, 2 ]                               Operation:         FSR2 – k  FSR2
Operation:                FSR(f) – k  FSRf                                                (TOS) PC
Status Affected:          None                                          Status Affected: None
Encoding:                  1110        1001        ffkk      kkkk       Encoding:              1110        1001        11kk      kkkk
Description:              The 6-bit literal ‘k’ is subtracted from      Description:       The 6-bit literal ‘k’ is subtracted from the
                          the contents of the FSR specified by                             contents of the FSR2. A RETURN is then
                          ‘f’.                                                             executed by loading the PC with the TOS.
Words:                    1                                                                The instruction takes two cycles to
                                                                                           execute; a NOP is performed during the
Cycles:                   1
                                                                                           second cycle.
Q Cycle Activity:
                                                                                           This may be thought of as a special case of
             Q1               Q2              Q3             Q4                            the SUBFSR instruction, where f = 3 (binary
          Decode        Read                Process        Write to                        ‘11’); it operates only on FSR2.
                      register ‘f’           Data         destination   Words:             1
                                                                        Cycles:            2
                                                                        Q Cycle Activity:
Example:                  SUBFSR 2, 23h
     Before Instruction                                                              Q1               Q2             Q3           Q4
          FSR2       =        03FFh                                               Decode          Read            Process      Write to
                                                                                                register ‘f’       Data       destination
     After Instruction
           FSR2       =       03DCh                                                No             No                No          No
                                                                                 Operation      Operation         Operation   Operation
                                                                        Example:                  SUBULNK 23h
                                                                             Before Instruction
                                                                                  FSR2       =        03FFh
                                                                                  PC         =        0100h
                                                                             After Instruction
                                                                                   FSR2       =       03DCh
                                                                                   PC         =       (TOS)
 2010 Microchip Technology Inc.                                                                                     DS41303G-page 361
PIC18F2XK20/4XK20
24.2.3       BYTE-ORIENTED AND                                  24.2.3.1       Extended Instruction Syntax with
             BIT-ORIENTED INSTRUCTIONS IN                                      Standard PIC18 Commands
             INDEXED LITERAL OFFSET MODE                        When the extended instruction set is enabled, the file
  Note:     Enabling th e PIC 18 i nstruction s et              register argument, ‘f’, in the standard byte-oriented and
            extension m ay c ause legacy applications           bit-oriented commands is replaced with the literal offset
            to behave erratically or fail entirely.             value, ‘k’. As already noted, this occurs only when ‘f’ is
                                                                less than or equal to 5Fh. When an offset value is used,
In addition to eight new commands in the extended set,          it must be indicated by square brackets (“[ ]”). As with
enabling th e ex tended in struction se t al so e nables        the extended instructions, the use of brackets indicates
Indexed Literal Offset Addressing mode (Section 5.5.1           to the compiler that the value is to be interpreted as an
“Indexed Addressing with Literal Offset”). This has             index o r an of fset. O mitting the brackets, or using a
a significant impact on the way that many commands of           value greater than 5Fh within brackets, will generate an
the standard PIC18 instruction set are interpreted.             error in the MPASM Assembler.
When th e e xtended set i s disabled, addresses                 If the index argument is properly bracketed for Indexed
embedded in op codes a re t reated as li teral memory           Literal Offset Addressing, the Access RAM argument is
locations: either as a location in the Access Bank (‘a’ =       never specified; it will automatically be assumed to be
0), or in a GPR bank designated by the BSR (‘a’ = 1).           ‘0’. This is in contrast to standard operation (extended
When the extended instruction set is enabled and ‘a’ =          instruction set disabled) when ‘a’ is set on the basis of
0, however, a file register argument of 5Fh or less is          the t arget a ddress. Declaring the Ac cess R AM bi t i n
interpreted as an offset from the pointer value in FSR2         this mo de will al so generate a n er ror i n th e M PASM
and not as a literal address. For practical purposes, this      Assembler.
means that all instructions that use the Access RAM bit
as an argu ment – that is , all byt e-oriented and bit-         The destination argument, ‘d’, functions as before.
oriented instructions, or almost half of the core PIC18         In the la test ve rsions of the MPASM™ a ssembler,
instructions – m ay behave differently w hen the                language support for the extended instruction set must
extended instruction set is enabled.                            be ex plicitly in voked. Th is i s d one w ith eith er th e
When the content of FSR2 is 00h, the boundaries of the          command lin e option, /y, or t he PE di rective i n th e
Access RAM are essentially remapped to their original           source listing.
values. Thi s m ay be us eful in creating bac kward
compatible code. If th is te chnique i s used, it m ay b e      24.2.4       CONSIDERATIONS WHEN
necessary to save t he v alue o f FSR 2 and res tore it                      ENABLING THE EXTENDED
when moving back and forth between C and assembly                            INSTRUCTION SET
routines in ord er to pre serve the Stack Pointer. Users        It is important to note that the extensions to the instruc-
must also keep in mind the syntax requirements of the           tion set may not be beneficial to all users. In particular,
extended i nstruction s et (see Section 24.2.3.1                users w ho are not w riting code tha t use s a s oftware
“Extended Instruction Syntax with Standard PIC18                stack may not benefit from using the extensions to the
Commands”).                                                     instruction set.
Although the Indexed Literal Offset Addressing mode             Additionally, th e In dexed Li teral O ffset Addr essing
can b e v ery useful for dy namic s tack a nd po inter          mode ma y c reate i ssues w ith le gacy applications
manipulation, it c an also be very annoying if a simple         written to th e PIC1 8 as sembler. Thi s i s b ecause
arithmetic ope ration i s c arried out o n th e w rong          instructions in the legacy code may attempt to address
register. U sers who a re a ccustomed to th e PI C18            registers in the Access Bank below 5Fh. Since these
programming m ust ke ep i n m ind th at, w hen th e             addresses are int erpreted as li teral of fsets to FSR2
extended instruction set is enabled, register addresses         when the ins truction s et ex tension is ena bled, th e
of 5Fh or le ss are use d for Ind exed Li teral Of fset         application ma y rea d or w rite to the w rong dat a
Addressing.                                                     addresses.
Representative examples of typical byte-oriented and            When po rting a n a pplication to t he PIC18F2XK20/
bit-oriented i nstructions i n t he I ndexed Li teral O ffset   4XK20, it is very important to consider the type of code.
Addressing mode are provided on the following page to           A large, re-entrant application that is written in ‘C’ and
show ho w execution is af fected. The operand c ondi-           would ben efit fro m efficient c ompilation will do w ell
tions s hown in t he e xamples are app licable t o al l         when us ing th e in struction set extensions. Leg acy
instructions of these types.                                    applications that heavily use the Access Bank will most
                                                                likely no t be nefit f rom us ing th e e xtended i nstruction
                                                                set.
DS41303G-page 362                                                                          2010 Microchip Technology Inc.
                                                                            PIC18F2XK20/4XK20
                         ADD W to Indexed                                                          Bit Set Indexed
ADDWF                                                                       BSF
                         (Indexed Literal Offset mode)                                             (Indexed Literal Offset mode)
Syntax:                  ADDWF          [k] {,d}                            Syntax:                BSF [k], b
Operands:                0  k  95                                         Operands:              0  f  95
                         d  [0,1]                                                                 0b7
Operation:               (W) + ((FSR2) + k)  dest                          Operation:             1  ((FSR2) + k)<b>
Status Affected:         N, OV, C, DC, Z                                    Status Affected:       None
Encoding:                    0010        01d0       kkkk        kkkk        Encoding:                  1000        bbb0      kkkk      kkkk
Description:             The contents of W are added to the                 Description:           Bit ‘b’ of the register indicated by FSR2,
                         contents of the register indicated by                                     offset by the value ‘k’, is set.
                         FSR2, offset by the value ‘k’.
                                                                            Words:                 1
                         If ‘d’ is ‘0’, the result is stored in W. If ‘d’
                         is ‘1’, the result is stored back in               Cycles:                1
                         register ‘f’ (default).                            Q Cycle Activity:
Words:                   1                                                               Q1            Q2              Q3             Q4
Cycles:                  1                                                            Decode        Read            Process       Write to
                                                                                                  register ‘f’       Data        destination
Q Cycle Activity:
             Q1              Q2               Q3               Q4
                                                                            Example:              BSF             [FLAG_OFST], 7
          Decode         Read ‘k’          Process         Write to
                                                                                  Before Instruction
                                            Data          destination
                                                                                        FLAG_OFST             =     0Ah
                                                                                        FSR2                  =     0A00h
Example:                 ADDWF          [OFST] , 0                                      Contents
                                                                                        of 0A0Ah              =     55h
     Before Instruction
                                                                                  After Instruction
           W                        =     17h                                           Contents
           OFST                     =     2Ch                                           of 0A0Ah              =     D5h
           FSR2                     =     0A00h
           Contents
           of 0A2Ch                 =     20h
     After Instruction
            W                       =     37h
            Contents
                                                                                                   Set Indexed
                                                                            SETF
            of 0A2Ch                =     20h                                                      (Indexed Literal Offset mode)
                                                                            Syntax:                SETF [k]
                                                                            Operands:              0  k  95
                                                                            Operation:             FFh  ((FSR2) + k)
                                                                            Status Affected:       None
                                                                            Encoding:                  0110        1000      kkkk      kkkk
                                                                            Description:           The contents of the register indicated by
                                                                                                   FSR2, offset by ‘k’, are set to FFh.
                                                                            Words:                 1
                                                                            Cycles:                1
                                                                            Q Cycle Activity:
                                                                                         Q1            Q2              Q3             Q4
                                                                                      Decode       Read ‘k’          Process         Write
                                                                                                                      Data          register
                                                                            Example:               SETF           [OFST]
                                                                                  Before Instruction
                                                                                        OFST            =     2Ch
                                                                                        FSR2            =     0A00h
                                                                                        Contents
                                                                                        of 0A2Ch        =     00h
                                                                                  After Instruction
                                                                                        Contents
                                                                                        of 0A2Ch        =     FFh
 2010 Microchip Technology Inc.                                                                                          DS41303G-page 363
PIC18F2XK20/4XK20
24.2.5      SPECIAL CONSIDERATIONS WITH
            MICROCHIP MPLAB® IDE TOOLS
The latest versions of Microchip’s software tools have
been designed to fully support the extended instruction
set of the PIC18F2XK20/4XK20 family of devices. This
includes t he M PLAB C 18 C c ompiler, MP ASM
assembly la nguage an d M PLAB I ntegrated
Development Environment (IDE).
When se lecting a t arget device f or s oftware
development, MPLAB IDE will automatically set default
Configuration bits for that device. The default setting for
the XIN ST C onfiguration b it is ‘0’, dis abling th e
extended i nstruction s et a nd Ind exed L iteral Offset
Addressing mode. For proper execution of applications
developed to take adv antage of the             extended
instruction se t, X INST m ust be se t du ring
programming.
To d evelop s oftware for the extended in struction se t,
the user must enable support for the instructions and
the Indexed Addressing mode in their language tool(s).
Depending on the environment being used, this may be
done in several ways:
• A menu option, or dialog box within the
  environment, that allows the user to configure the
  language tool and its settings for the project
• A command line option
• A directive in the source code
These options vary betw een dif ferent com pilers,
assemblers and development environments. Users are
encouraged to review the documentation accompanying
their dev elopment system s for the appropriate
information.
DS41303G-page 364                                              2010 Microchip Technology Inc.
                                                           PIC18F2XK20/4XK20
25.0     DEVELOPMENT SUPPORT                               25.1     MPLAB Integrated Development
                                                                    Environment Software
The P IC® microcontrollers a nd d sPIC® di gital signal
controllers are supported with a f ull range of software   The MPLAB IDE software brings an ease of s oftware
and hardware development tools:                            development pre viously unseen in the 8/1 6/32-bit
• Integrated Development Environment                       microcontroller market. The MPLAB IDE is a Windows®
                                                           operating system-based application that contains:
  - MPLAB® IDE Software
• Compilers/Assemblers/Linkers                             • A single graphical interface to all debugging tools
  - MPLAB C Compiler for Various Device                      - Simulator
     Families                                                - Programmer (sold separately)
  - HI-TECH C for Various Device Families                    - In-Circuit Emulator (sold separately)
  - MPASMTM Assembler                                        - In-Circuit Debugger (sold separately)
  - MPLINKTM Object Linker/                                • A full-featured editor with color-coded context
     MPLIBTM Object Librarian                              • A multiple project manager
  - MPLAB Assembler/Linker/Librarian for                   • Customizable data windows with direct edit of
     Various Device Families                                 contents
• Simulators                                               • High-level source code debugging
  - MPLAB SIM Software Simulator                           • Mouse over variable inspection
• Emulators                                                • Drag and drop variables from source to watch
  - MPLAB REAL ICE™ In-Circuit Emulator                      windows
• In-Circuit Debuggers                                     • Extensive on-line help
  - MPLAB ICD 3                                            • Integration of select third party tools, such as
  - PICkit™ 3 Debug Express                                  IAR C Compilers
• Device Programmers                                       The MPLAB IDE allows you to:
  - PICkit™ 2 Programmer                                   • Edit your source files (either C or assembly)
  - MPLAB PM3 Device Programmer                            • One-touch compile or assemble, and download to
• Low-Cost Demonstration/Development Boards,                 emulator and simulator tools (automatically
  Evaluation Kits, and Starter Kits                          updates all project information)
                                                           • Debug using:
                                                             - Source files (C or assembly)
                                                             - Mixed C and assembly
                                                             - Machine code
                                                           MPLAB IDE s upports multiple d ebugging to ols i n a
                                                           single dev elopment p aradigm, from th e co st-effective
                                                           simulators, t hrough low-cost i n-circuit de buggers, to
                                                           full-featured emu lators. Thi s el iminates the learning
                                                           curve when upgrading to tools with increased flexibility
                                                           and power.
 2010 Microchip Technology Inc.                                                               DS41303G-page 365
PIC18F2XK20/4XK20
25.2     MPLAB C Compilers for Various                       25.5       MPLINK Object Linker/
         Device Families                                                MPLIB Object Librarian
The M PLAB C C ompiler co de development sy stems            The M PLINK O bject L inker c ombines relocatable
are complete ANSI C compilers for Microchip’s PIC18,         objects c reated b y t he MPASM Assembler an d th e
PIC24 and PIC32 families of microcontrollers and the         MPLAB C18 C Compiler. It can link relocatable objects
dsPIC30 and dsPIC33 families of digital signal control-      from p recompiled l ibraries, using d irectives f rom a
lers. T hese compilers p rovide p owerful integration        linker script.
capabilities, s uperior co de o ptimization an d ea se of    The MPLIB Object Librarian manages the creation and
use.                                                         modification of library files of precompiled code. When
For easy source level debugging, the compilers provide       a routine from a library is called from a source file, only
symbol information that is optimized to the MPLAB IDE        the modules that contain that routine will be linked in
debugger.                                                    with the ap plication. This all ows la rge li braries to be
                                                             used efficiently in many different applications.
25.3     HI-TECH C for Various Device                        The object linker/library features include:
         Families                                            • Efficient linking of single libraries instead of many
The HI-TECH C Compiler code development systems                smaller files
are co mplete AN SI C com pilers for Microchip’s PIC         • Enhanced code maintainability by grouping
family of microcontrollers and the dsPIC family of digital     related modules together
signal controllers. T hese c ompilers p rovide po werful     • Flexible creation of libraries with easy module
integration c apabilities, o mniscient code ge neration        listing, replacement, deletion and extraction
and ease of use.
For easy source level debugging, the compilers provide       25.6       MPLAB Assembler, Linker and
symbol information that is optimized to the MPLAB IDE                   Librarian for Various Device
debugger.                                                               Families
The compilers include a macro assembler, linker, pre-
                                                             MPLAB As sembler p roduces re locatable m achine
processor, and one-step driver, and can run on multiple
                                                             code from sy mbolic as sembly la nguage for PIC24,
platforms.
                                                             PIC32 an d ds PIC de vices. MP LAB C Compiler us es
                                                             the assembler to produce its object file. The assembler
25.4     MPASM Assembler                                     generates rel ocatable obj ect fi les tha t ca n th en b e
The MP ASM Assembler is a full -featured, un iversal         archived or linked with other relocatable object files and
macro assembler for PIC10/12/16/18 MCUs.                     archives to create an executable file. Notable features
                                                             of the assembler include:
The M PASM As sembler g enerates re locatable ob ject
files for the MPLINK Object Linker, Intel® standard HEX      •   Support for the entire device instruction set
files, M AP file s to det ail memory us age and symbol       •   Support for fixed-point and floating-point data
reference, absolute LST files that contain source lines      •   Command line interface
and g enerated m achine c ode and C OFF fil es for           •   Rich directive set
debugging.
                                                             •   Flexible macro language
The MPASM Assembler features include:                        •   MPLAB IDE compatibility
• Integration into MPLAB IDE projects
• User-defined macros to streamline
  assembly code
• Conditional assembly for multi-purpose
  source files
• Directives that allow complete control over the
  assembly process
DS41303G-page 366                                                                       2010 Microchip Technology Inc.
                                                             PIC18F2XK20/4XK20
25.7     MPLAB SIM Software Simulator                        25.9     MPLAB ICD 3 In-Circuit Debugger
The M PLAB SIM Sof tware Sim ulator al lows c ode
                                                                      System
development in a P C-hosted en vironment by si mulat-        MPLAB IC D 3 In-C ircuit D ebugger System is Micro-
ing the PIC MCUs and dsPIC® DSCs on an instruction           chip's m ost cost e ffective h igh-speed ha rdware
level. On any given instruction, the data areas can be       debugger/programmer for Microchip Flash Digital Sig-
examined or modified and stimuli can be applied from         nal Con troller (DSC) an d m icrocontroller (MCU)
a comprehensive stimulus controller. Registers can be        devices. It debugs and programs PIC® Flash microcon-
logged to files for further run-time analysis. The trace     trollers and dsPIC® DSCs with the powerful, yet easy-
buffer and logic analyzer display extend the po wer of       to-use graphical user int erface of MPL AB Integrated
the s imulator t o rec ord and trac k p rogram exe cution,   Development Environment (IDE).
actions on I/O, most peripherals and internal registers.
                                                             The MPLAB ICD 3 In-Circuit D ebugger probe is con-
The M PLAB SIM So ftware Simulator ful ly supports           nected to the design engineer's PC using a high-speed
symbolic de bugging u sing the MPL AB C Compilers,           USB 2.0 interface and is connected to the target with a
and t he M PASM a nd M PLAB Ass emblers. The so ft-          connector compatible with the MPLAB ICD 2 or MPLAB
ware s imulator o ffers the fl exibility to develop an d     REAL ICE systems (RJ-11). MPLAB ICD 3 supports all
debug c ode o utside of the ha rdware l aboratory e nvi-     MPLAB ICD 2 headers.
ronment, making it an excellent, economical software
development tool.                                            25.10 PICkit 3 In-Circuit Debugger/
                                                                   Programmer and
25.8     MPLAB REAL ICE In-Circuit
                                                                   PICkit 3 Debug Express
         Emulator System
                                                             The MPLAB PICkit 3 allows debugging and program-
MPLAB REAL IC E In-C ircuit Emulator Sy stem is              ming of PIC ® and dsPIC® Flash microcontrollers at a
Microchip’s next generation high-spee d emulator for         most affordable price point using the powerful graphical
Microchip Flash DSC and MCU devices. It debugs and           user interface of the MPLAB Integrated Development
programs PIC ® Flash MCUs and ds PIC® Flash D SCs            Environment (IDE). The MPLAB PICkit 3 is connected
with the easy-to-use, powerful graphical user interface of   to the de sign en gineer's PC us ing a full speed U SB
the MPLAB Integrated Development Environment (IDE),          interface a nd can b e connected t o t he target via a n
included with each kit.                                      Microchip de bug (R J-11) co nnector (c ompatible w ith
The emulator is connected to the design engineer’s PC        MPLAB ICD 3 and MPLAB REAL ICE). The connector
using a high-speed USB 2.0 interface and is connected        uses tw o device I/O pins and the reset line to im ple-
to the target with either a connector compatible with in-    ment i n-circuit d ebugging a nd In-Circuit Se rial Pro-
circuit debugger systems (RJ11) or with the new high-        gramming™.
speed, noise tolerant, Low -Voltage D ifferential S ignal    The PICkit 3 Debug Express include the PICkit 3, demo
(LVDS) interconnection (CAT5).                               board and microcontroller, hookup cables and CDROM
The emulator is field upgradable through future firmware     with user’s g uide, lessons, t utorial, c ompiler and
downloads in MPLAB ID E. In upc oming rele ases of           MPLAB IDE software.
MPLAB I DE, new devices will be supported, and new
features will be added. MPLAB REAL ICE offers signifi-
cant adva ntages o ver com petitive emula tors incl uding
low-cost, fu ll-speed em ulation, run-tim e v ariable
watches, trace analysis, complex breakpoints, a rugge-
dized probe interface and long (up tothree meters) inter-
connection cables.
 2010 Microchip Technology Inc.                                                                 DS41303G-page 367
PIC18F2XK20/4XK20
25.11 PICkit 2 Development                                  25.13 Demonstration/Development
      Programmer/Debugger and                                     Boards, Evaluation Kits, and
      PICkit 2 Debug Express                                      Starter Kits
The PICkit™ 2 Development Programmer/Debugger is            A w ide v ariety of d emonstration, de velopment and
a low-cost development tool with an easy to use inter-      evaluation bo ards f or va rious P IC MC Us a nd dsP IC
face for programming and debugging Microchip’s Flash        DSCs allows quick application development on fully func-
families of mi crocontrollers. T he f ull f eatured         tional systems. Most boards include prototyping areas for
Windows® prog ramming in terface supports baseline          adding custom circuitry and provide application firmware
(PIC10F, P IC12F5xx, P IC16F5xx), mi drange                 and source code for examination and modification.
(PIC12F6xx, P IC16F), P IC18F, PIC24, ds PIC30,             The boards support a variety of features, including LEDs,
dsPIC33, and PIC32 families of 8-bit, 16-bit, and 32-bit    temperature se nsors, sw itches, s peakers, R S-232
microcontrollers, and many Microchip Serial EEPROM          interfaces, LCD displays, potentiometers and additional
products. With Microchip’s powerful MPLAB Integrated        EEPROM memory.
Development En vironment (I DE) the PIC kit™ 2
enables in-circuit debugging on most PIC® m icrocon-        The de monstration and dev elopment bo ards c an b e
trollers. In -Circuit-Debugging runs, h alts a nd si ngle   used in teaching environments, for prototyping custom
steps th e pro gram w hile t he PIC m icrocontroller i s    circuits and for le arning about various microcontroller
embedded in the application. When halted at a break-        applications.
point, the file registers can be examined and modified.     In addition to the PICDEM™ and dsPICDEM™ demon-
The PICkit 2 Debug Express include the PICkit 2, demo       stration/development board series of circuits, Microchip
board and microcontroller, hookup cables and CDROM          has a line of evaluation kits and demonstration software
with user’s gui de, lessons, tut orial, co mpiler and       for ana log f ilter de sign, K EELOQ® security I Cs, CAN,
MPLAB IDE software.                                         IrDA®, P owerSmart b attery management, S EEVAL®
                                                            evaluation system, Sigma-Delta A DC, fl ow ra te
                                                            sensing, plus many more.
25.12 MPLAB PM3 Device Programmer
                                                            Also a vailable are st arter k its th at c ontain eve rything
The MPLAB PM3 D evice Programmer is a universal,            needed to experience the specified device. This usually
CE compliant device programmer with programmable            includes a single application and debug capability, all
voltage ve rification at V DDMIN an d V DDMAX for           on one board.
maximum rel iability. It fea tures a l arge LC D d isplay
(128 x 64) for menus and error messages and a modu-         Check th e M icrochip w eb p age (www.microchip.com)
lar, de tachable socket assembly to su pport var ious       for th e c omplete l ist o f de monstration, de velopment
package types. The ICSP™ cable assembly is included         and evaluation kits.
as a standard item. In Stand-Alone mode, the MPLAB
PM3 Device Programmer can read, verify and program
PIC devices without a PC connection. It c an also set
code p rotection in th is mode. Th e MPLAB PM 3
connects to the host PC via an RS-232 or USB cable.
The MPLAB PM3 has high-speed communications and
optimized al gorithms fo r qu ick programming of large
memory devices and incorporates an MMC card for file
storage and data applications.
DS41303G-page 368                                                                      2010 Microchip Technology Inc.
                                                                                           PIC18F2XK20/4XK20
26.0         ELECTRICAL CHARACTERISTICS
Absolute Maximum Ratings (†)
Ambient temperature under bias.............................................................................................................-40°C to +125°C
Storage temperature .............................................................................................................................. -65°C to +150°C
Voltage on any pin with respect to VSS (except VDD, and MCLR) .................................................. -0.3V to (VDD + 0.3V)
Voltage on VDD with respect to VSS ......................................................................................................... -0.3V to +4.5V
Voltage on MCLR with respect to VSS (Note 2) ............................................................................................0V to +11.0V
Total power dissipation (Note 1) ...............................................................................................................................1.0W
Maximum current out of VSS pin (-40°C to +85°C) .............................................................................................. 300 mA
Maximum current out of VSS pin (+85°C to +125°C)............................................................................................ 125 mA
Maximum current into VDD pin (-40°C to +85°C) ................................................................................................ 200 mA
Maximum current into VDD pin (+85°C to +125°C) ................................................................................................85 mA
Input clamp current, IIK (VI < 0 or VI > VDD) 20 mA
Output clamp current, IOK (VO < 0 or VO > VDD)  20 mA
Maximum output current sunk by any I/O pin..........................................................................................................25 mA
Maximum output current sourced by any I/O pin ....................................................................................................25 mA
Maximum current sunk byall ports (-40°C to +85°C)........................................................................................... 200 mA
Maximum current sunk byall ports (+85°C to +125°C)......................................................................................... 110 mA
Maximum current sourced by all ports (-40°C to +85°C) ......................................................................................185 mA
Maximum current sourced by all ports (+85°C to +125°C) .....................................................................................70 mA
   Note 1: Power dissipation is calculated as follows:
           Pdis = VDD x {IDD –  IOH} +  {(VDD – VOH) x IOH} + (VOL x IOL)
           2: Voltage spikes be low V SS a t t he M CLR/VPP/RE3 pin, inducing currents greater than 80 mA, may cause
              latch-up. Th us, a se ries resistor of 50 -100 sh ould be used when applying a “lo w” le vel to th e
              MCLR/VPP/RE3 pin, rather than pulling this pin directly to VSS.
 † NOTICE: Stresses above those listed under “Absolute Maximum Ratings” may cause permanent damage to the
 device. This is a stress rating only and functional operation of the device at those or any other conditions above those
 indicated in the operation listings of this specification is not implied. Exposure to maximum rating conditions for
 extended periods may affect device reliability.
 2010 Microchip Technology Inc.                                                                                                              DS41303G-page 369
PIC18F2XK20/4XK20
FIGURE 26-1:               PIC18F2XK20/4XK20 VOLTAGE-FREQUENCY GRAPH (EXTENDED)
                   3.5V
                   3.0V
                   2.7V
         Voltage
                   2.0V
                   1.8V
                                    10    16   20        30 32       40      48 50        60    64
                                                    Frequency (MHz)
       Note:        Maximum Frequency 16 MHz, 1.8V to 2.0V, -40°C to +125°C
                    Maximum Frequency 20 MHz, 2.0V to 3.0V, -40°C to +125°C
                    Maximum Frequency 48 MHz, 3.0V to 3.6V, -40°C to +125°C
FIGURE 26-2:               PIC18F2XK20/4XK20 VOLTAGE-FREQUENCY GRAPH (INDUSTRIAL)
                   3.5V
                   3.0V
                   2.7V
         Voltage
                   2.0V
                   1.8V
                                    10    16   20        30 32        40       50         60    64
                                                    Frequency (MHz)
            Note:         Maximum Frequency 16 MHz, 1.8V to 2.0V, -40°C to +85°C
                          Maximum Frequency 20 MHz, 2.0V to 3.0V, -40°C to +85°C
                          Maximum Frequency 64 MHz, 3.0V to 3.6V, -40°C to +85°C
DS41303G-page 370                                                                     2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
26.1        DC Characteristics: Supply Voltage, PIC18F2XK20/4XK20
                                              Standard Operating Conditions (unless otherwise stated)
PIC18F2XK20/4XK20
                                              Operating temperature  -40°C  TA  +125°C
Param
      Symbol              Characteristic       Min     Typ     Max     Units                 Conditions
 No.
D001        VDD       Supply Voltage            1.8     —      3.6      V
D002        VDR       RAM Data Retention        1.5     —          —    V
                      Voltage(1)
D003        VPOR      VDD Start Voltage         —       —      0.7      V      See section on Power-on Reset for details
                      to ensure internal
                      Power-on Reset signal
D004        SVDD      VDD Rise Rate            0.05     —          —   V/ms See section on Power-on Reset for details
                      to ensure internal
                      Power-on Reset signal
D005        VBOR      Brown-out Reset Voltage
                      BORV<1:0> = 11(2)        1.72    1.82    1.95     V
                      BORV<1:0> = 10           2.15    2.27    2.40     V
                      BORV<1:0> = 01           2.65    2.75    2.90     V
                      BORV<1:0> = 00(3)        2.98    3.08    3.25     V
Note 1:      This is the limit to which VDD can be lowered in Sleep mode, or during a device Reset, without losing RAM
             data.
       2:    With BOR enabled, operation is supported until a BOR occurs. This is valid although VDD may be below the
             minimum rated supply voltage.
       3:    With BOR enabled, full-speed operation (FOSC = 64 MHZ) is supported until a BOR occurs. This is valid
             although VDD may be below the minimum voltage for this frequency.
26.2        DC Characteristics: Power-Down Current, PIC18F2XK20/4XK20
                                              Standard Operating Conditions (unless otherwise stated)
PIC18F2XK20/4XK20
                                              Operating temperature  -40°C  TA  +125°C
  Param
                   Device Characteristics      Typ    Max Units                         Conditions
   No.
D006         Power-down Current (IPD)(1)       0.05   1.0     A          40°C -
                                               0.05   1.0     A        +25°C
                                                                                          VDD = 1.8V, (Sleep mode)
                                               0.6    3.0     A        +85°C
                                                4     20      A        +125°C
D007                                           0.1    1.0     A         -40°C
                                               0.1    1.0     A        +25°C
                                                                                          VDD = 3.0V, (Sleep mode)
                                               0.7    3.0     A        +85°C
                                                5     20      A        +125°C
Note 1:      The power-down current in Sleep mode does not depend on the oscillator type. Power-down current is
             measured with the part in Sleep mode, with all I/O pins in high-impedance state and tied to VDD or VSS and
             all features that add delta current disabled (such as WDT, Timer1 Oscillator, BOR, etc.).
 2010 Microchip Technology Inc.                                                                     DS41303G-page 371
PIC18F2XK20/4XK20
26.3     DC Characteristics: RC Run Supply Current, PIC18F2XK20/4XK20
                                         Standard Operating Conditions (unless otherwise stated)
PIC18F2XK20/4XK20
                                         Operating temperature  -40°C  TA  +125°C
 Param
             Device Characteristics      Typ    Max Units                          Conditions
  No.
D008        Supply Current (IDD)(1, 2)    5.5    9     A          -40°C
                                          6.0   10     A         +25°C
                                                                                 VDD = 1.8V
                                          6.5   14     A         +85°C
                                          9.0   30     A         +125°C                           FOSC = 31 kHz
                                                                                                  (RC_RUN mode,
D008A                                    10.0   15     A          -40°C                         LFINTOSC source)
                                         10.5   16     A         +25°C
                                                                                 VDD = 3.0V
                                         11.0   20     A         +85°C
                                         14.0   40     A         +125°C
D009                                     0.40   0.50   mA    -40°C TO +125°C     VDD = 1.8V        FOSC = 1 MHz
                                                                                                  (RC_RUN mode,
D009A                                    0.60   0.80   mA    -40°C TO +125°C     VDD = 3.0V      HF-INTOSC source)
D010                                      2.2   3.0    mA    -40°C TO +125°C     VDD = 1.8V        FOSC = 16 MHz
                                                                                                  (RC_RUN mode,
D010A                                     3.8   4.4    mA    -40°C TO +125°C     VDD = 3.0V      HF-INTOSC source)
Note 1:      The supply current is mainly a function of operating voltage, frequency and mode. Other factors, such as
             I/O pin loading and switching rate, oscillator type and circuit, internal code execution pattern and
             temperature, also have an impact on the current consumption.
       2:    The test conditions for all IDD measurements in active operation mode are:
                       All I/O pins set as outputs driven to Vss;
                       MCLR = VDD;
                       OSC1 = external square wave, from rail-to-rail (PRI_RUN and PRI_IDLE only).
DS41303G-page 372                                                                        2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
26.4     DC Characteristics: RC Idle Supply Current, PIC18F2XK20/4XK20
                                         Standard Operating Conditions (unless otherwise stated)
PIC18F2XK20/4XK20
                                         Operating temperature  -40°C  TA  +125°C
 Param
             Device Characteristics      Typ    Max Units                          Conditions
  No.
D011        Supply Current (IDD)(1, 2)    2.0    5     A         -40°C
                                          2.0    5     A         +25°C
                                                                                 VDD = 1.8V
                                          2.5    9     A         +85°C
                                          5.0   25     A        +125°C                           FOSC = 31 kHz
                                                                                                 (RC_IDLE mode,
D011A                                     3.5    8     A         -40°C                         LFINTOSC source)
                                          3.5    8     A         +25°C
                                                                                 VDD = 3.0V
                                          4.0   12     A         +85°C
                                          7.0   30     A        +125°C
D012                                     0.30   0.40   mA    -40°C to +125°C     VDD = 1.8V       FOSC = 1 MHz
                                                                                                 (RC_IDLE mode,
D012A                                    0.40   0.60   mA    -40°C to +125°C     VDD = 3.0V     HF-INTOSC source)
D013                                      1.0   1.2    mA    -40°C to +125°C     VDD = 1.8V       FOSC = 16 MHz
                                                                                                 (RC_IDLE mode,
D013A                                     1.6   2.0    mA    -40°C to +125°C     VDD = 3.0V     HF-INTOSC source)
Note 1:     The supply current is mainly a function of operating voltage, frequency and mode. Other factors, such as
            I/O pin loading and switching rate, oscillator type and circuit, internal code execution pattern and
            temperature, also have an impact on the current consumption.
       2:   The test conditions for all IDD measurements in active operation mode are:
                      All I/O pins set as outputs driven to Vss;
                      MCLR = VDD;
                      OSC1 = external square wave, from rail-to-rail (PRI_RUN and PRI_IDLE only).
 2010 Microchip Technology Inc.                                                                  DS41303G-page 373
PIC18F2XK20/4XK20
26.5     DC Characteristics: Primary Run Supply Current, PIC18F2XK20/4XK20
PIC18F2XK20/4XK20                        Standard Operating Conditions (unless otherwise stated)
                                         Operating temperature  -40°C  TA  +125°C
 Param
             Device Characteristics      Typ    Max Units                          Conditions
  No.
D014        Supply Current (IDD)(1, 2)   0.25   0.45   mA    -40°C to +125°C     VDD = 1.8V        FOSC = 1 MHz
D014A                                                                                               (PRI_RUN,
                                         0.50   0.75   mA    -40°C to +125°C     VDD = 3.0V        EC oscillator)
D015                                      2.7   3.2    mA    -40°C to +125°C      VDD = 2V        FOSC = 20 MHz
D015A                                                                                               (PRI_RUN,
                                          4.3   5.0    mA    -40°C to +125°C     VDD = 3.0V        EC oscillator)
D016                                                                                              FOSC = 64 MHz
                                         12.2   14.0   mA     -40°C to +85°C     VDD = 3.0V         (PRI_RUN,
                                                                                                   EC oscillator)
D017                                      2.1   2.9    mA    -40°C to +125°C     VDD = 1.8V        FOSC = 4 MHz
D017A                                                                                             16 MHz Internal
                                          4.2   5.0    mA    -40°C to +125°C     VDD = 3.0V     (PRI_RUN HS+PLL)
D018                                                                                              FOSC = 16 MHz
                                         12.2   15.0   mA     -40°C to +85°C     VDD = 3.0V       64 MHz Internal
                                                                                                (PRI_RUN HS+PLL)
Note 1:     The supply current is mainly a function of operating voltage, frequency and mode. Other factors, such as
            I/O pin loading and switching rate, oscillator type and circuit, internal code execution pattern and
            temperature, also have an impact on the current consumption.
       2:   The test conditions for all IDD measurements in active operation mode are:
                      All I/O pins set as outputs driven to Vss;
                      MCLR = VDD;
                      OSC1 = external square wave, from rail-to-rail (PRI_RUN and PRI_IDLE only).
26.6     DC Characteristics: Primary Idle Supply Current, PIC18F2XK20/4XK20
                                         Standard Operating Conditions (unless otherwise stated)
PIC18F2XK20/4XK20
                                         Operating temperature  -40°C  TA  +125°C
 Param
             Device Characteristics      Typ    Max Units                          Conditions
  No.
D019        Supply Current (IDD)(1, 2)   0.05   0.07   mA    -40°C to +125°C     VDD = 1.8V        FOSC = 1 MHz
D019A                                                                                            (PRI_IDLE mode,
                                         0.09   0.15   mA    -40°C to +125°C     VDD = 3.0V        EC oscillator)
D020                                      1.2   1.6    mA    -40°C to +125°C     VDD = 2.0V        FOSC = 20 MHz
D020A                                                                                             (PRI_IDLEmode,
                                          1.8   2.5    mA    -40°C to +125°C     VDD = 3.0V         EC oscillator)
D021                                                                                               FOSC = 64 MHz
                                          5.6   7.0    mA     -40°C to +85°C     VDD = 3.0V       (PRI_IDLEmode,
                                                                                                    EC oscillator)
Note 1:     The supply current is mainly a function of operating voltage, frequency and mode. Other factors, such as
            I/O pin loading and switching rate, oscillator type and circuit, internal code execution pattern and
            temperature, also have an impact on the current consumption.
       2:   The test conditions for all IDD measurements in active operation mode are:
                      All I/O pins set as outputs driven to Vss;
                      MCLR = VDD;
                      OSC1 = external square wave, from rail-to-rail (PRI_RUN and PRI_IDLE only).
DS41303G-page 374                                                                       2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
26.7     DC Characteristics: Secondary Oscillator Supply Current, PIC18F2XK20/4XK20
                                         Standard Operating Conditions (unless otherwise stated)
PIC18F2XK20/4XK20
                                         Operating temperature  -40°C  TA  +125°C
 Param
             Device Characteristics      Typ    Max Units                          Conditions
  No.
D022        Supply Current (IDD)(1, 2)    5.5    9     A         -40°C
                                          5.5   10     A         +25°C          VDD = 1.8V
                                          6.5   14     A         +85°C                           FOSC = 32 kHz(3)
                                                                                                 (SEC_RUN mode,
D022A                                    10.0   15     A         -40°C                           Timer1 as clock)
                                         10.0   16     A         +25°C          VDD = 3.0V
                                         11.0   20     A         +85°C
D023                                      2.0    5     A         -40°C
                                          2.0    5     A         +25°C          VDD = 1.8V
                                          2.5    9     A         +85°C                           FOSC = 32 kHz(3)
                                                                                                 (SEC_IDLE mode,
D023A                                     3.5    8     A         -40°C                           Timer1 as clock)
                                          3.5    8     A         +25°C          VDD = 3.0V
                                          4.0   12     A         +85°C
Note 1:     The supply current is mainly a function of operating voltage, frequency and mode. Other factors, such as
            I/O pin loading and switching rate, oscillator type and circuit, internal code execution pattern and
            temperature, also have an impact on the current consumption.
       2:   The test conditions for all IDD measurements in active operation mode are:
                      All I/O pins set as outputs driven to Vss;
                      MCLR = VDD;
                      OSC1 = external square wave, from rail-to-rail (PRI_RUN and PRI_IDLE only).
       3:   Low-Power mode on T1 osc. Low-Power mode is limited to 85°C.
 2010 Microchip Technology Inc.                                                                  DS41303G-page 375
PIC18F2XK20/4XK20
26.8          DC Characteristics: Peripheral Supply Current, PIC18F2XK20/4XK20
                                              Standard Operating Conditions (unless otherwise stated)
PIC18F2XK20/4XK20
                                              Operating temperature  -40°C  TA  +125°C
 Param                                                     Unit
                Device Characteristics        Typ    Max                               Conditions
  No.                                                       s
               Module Differential Currents
D024                     Watchdog Timer        0.7   2.0   A     -40°C to +125°C    VDD = 1.8V
(IWDT)                                        1.1   3.0   A     -40°C to +125°C    VDD = 3.0V
D024A                 Brown-out Reset(2)       21    50    A     -40C to +125C    VDD = 2.0V
(IBOR)                                        25    60    A     -40C to +125C    VDD = 3.3V
                                                     —                                                  Sleep mode,
                                               0           A     -40C to +125C    VDD = 3.3V
                                                                                                      BOREN<1:0> = 10
D024B          High/Low-Voltage Detect(2)
                                               13    30    A     -40C to +125C   VDD = 1.8-3.0V
(IHLVD)
D025                    Timer1 Oscillator      0.5   2.0   A         -40C
(IOSCB)                                       0.5   2.0   A         +25C          VDD = 1.8V       32 kHz on Timer1(1)
LP
                                               0.7   2.0   A         +85C
                                               0.7   3.0   A         -40C
                                               0.7   3.0   A         +25C          VDD = 3.0V       32 kHz on Timer1(1)
                                               0.9   3.0   A         +85C
D025A                   Timer1 Oscillator      11    30    A         -40C
(IOSCB)                                       13    33    A         +25C          VDD = 1.8V       32 kHz on Timer1(3)
HP
                                               15    35    A         +85C
                                               14    33    A         -40C
                                               17    37    A         +25C          VDD = 3.0V       32 kHz on Timer1(3)
                                               19    40    A         +85C
D026                     A/D Converter(4)     200    290   A     -40C to +125C    VDD = 1.8V
(IAD)                                                                                               A/D on, not converting
                                              260    425   A     -40C to +125C    VDD = 3.0V
IFRC                                          2      5    A     -40C to +125C    VDD = 1.8V         Adder for FRC
                                               11    18    A     -40C to +125C    VDD = 3.0V
D027                        Comparators        5     15    A     -40C to +125C   VDD = 1.8-3.0V         LP mode
(ICOMP)                                       40    90    A     -40C to +125C   VDD = 1.8-3.0V         HP mode
D028                               CVREF       18    40    A     -40C to +125C    VDD = 1.8V
(ICVREF)                                      32    60    A     -40C to +125C    VDD = 3.0V
Note 1:        Low-Power mode on T1 osc. Low-Power mode is limited to 85°C.
     2:        BOR and HLVD enable internal band gap reference. With both modules enabled, current consumption will be
               less than the sum of both specifications.
         3:    High-Power mode in T1 osc.
         4:    A/D converter differential currents apply only in RUN mode. In SLEEP or IDLE mode both the ADC and the FRC
               turn off as soon as conversion (if any) is complete.
DS41303G-page 376                                                                           2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
26.9        DC Characteristics: Input/Output Characteristics, PIC18F2XK20/4XK20
                                                Standard Operating Conditions (unless otherwise stated)
DC CHARACTERISTICS
                                                Operating temperature -40°C TA  +125°C
 Param
       Symbol            Characteristic              Min             Typ†           Max      Units      Conditions
  No.
            VIL     Input Low Voltage
                    I/O ports:
D030                    with TTL buffer              VSS               —          0.15 DD       VV
D031                    with Schmitt Trigger         VSS               —           0.2 DD       VV
D032                MCLR                             VSS               —           0.2 DD       VV
D033                OSC1                             VSS               —           0.3 DD       VV   HS, HSPLL modes
D033A               OSC1                             VSS               —           0.2 VDD      V    RC, EC modes(1)
D033B               OSC1                             VSS               —           0.3 VDD      V    XT, LP modes
D034                T13CKI                           VSS               —           0.3 VDD      V
            VIH     Input High Voltage
                    I/O ports:
D040                    with TTL buffer         0.25 VDD + 0.8V        —             VDD        V
D041        VIH         with Schmitt Trigger:      0.8 VDD             —             VDD        V    2.4V < VDD < 3.6V
                                                   0.9 VDD             —             VDD        V    VDD < 2.4V
D042        VIH     MCLR                           0.8 VDD             —             VDD        V    2.4V < VDD < 3.6V
                                                   0.9 VDD             —             VDD        V    VDD < 2.4V
D043                OSC1                           0.7 VDD             —             VDD        V    HS, HSPLL modes
D043A               OSC1                           0.8 VDD             —             VDD        V    EC mode
D043B               OSC1                           0.9 VDD             —             VDD        V    RC mode(1)
D043C               OSC1                             1.6               —             VDD        V    XT, LP modes
D044                T13CKI                           1.6               —             VDD        V
            IIL     Input Leakage I/O and                                                            VSS VPIN VDD,
                    MCLR(2,3)                                                                        Pin at
                                                                                                     high-impedance
D060                I/O ports                         —                 5             50       nA    +25°C
                                                      —                10            100       nA    +60°C
                                                      —                30            200       nA    +85°C
                                                      —               100           1000       nA    +125°C
                    Input Leakage RA2
D061        IIL                                       —                10            100       nA    +25°C
                                                      —                35            250       nA    +60°C
                                                      —               200            750       nA    +85°C
                                                      —               400           2000       nA    +125°C
                    Input Leakage RA3
D062        IIL                                       —                10             80       nA    +25°C
                                                      —                25            200       nA    +60°C
                                                      —                70            500       nA    +85°C
                                                      —               300           1500       nA    +125°C
Note 1:       In RC oscillator configuration, the OSC1/CLKIN pin is a Schmitt Trigger input. It is not recommended that
              the PIC® device be driven with an external clock while in RC mode.
       2:     The leakage current on the MCLR pin is strongly dependent on the applied voltage level. The specified
              levels represent normal operating conditions. Higher leakage current may be measured at different input
              voltages.
       3:     Negative current is defined as current sourced by the pin.
       4:     Parameter is characterized but not tested.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 377
PIC18F2XK20/4XK20
26.9        DC Characteristics: Input/Output Characteristics, PIC18F2XK20/4XK20 (Continued)
                                              Standard Operating Conditions (unless otherwise stated)
DC CHARACTERISTICS
                                              Operating temperature -40°C TA  +125°C
Param
      Symbol            Characteristic              Min             Typ†           Max        Units      Conditions
 No.
            IPU     Weak Pull-up Current
D070        IPURB   PORTB weak pull-up              50                90            400        A     VDD = 3.0V, VPIN =
                    current                                                                           VSS
Note 1:      In RC oscillator configuration, the OSC1/CLKIN pin is a Schmitt Trigger input. It is not recommended that
             the PIC® device be driven with an external clock while in RC mode.
       2:    The leakage current on the MCLR pin is strongly dependent on the applied voltage level. The specified
             levels represent normal operating conditions. Higher leakage current may be measured at different input
             voltages.
       3:    Negative current is defined as current sourced by the pin.
       4:    Parameter is characterized but not tested.
DS41303G-page 378                                                                          2010 Microchip Technology Inc.
                                                                 PIC18F2XK20/4XK20
26.9        DC Characteristics: Input/Output Characteristics, PIC18F2XK20/4XK20 (Continued)
                                              Standard Operating Conditions (unless otherwise stated)
DC CHARACTERISTICS
                                              Operating temperature -40°C TA  +125°C
 Param
       Symbol           Characteristic              Min             Typ†           Max      Units      Conditions
  No.
            VOL    Output Low Voltage
D080               I/O ports                         —                —             0.6        V    IOL = 8.5 mA, VDD
                                                                                                    = 3.0V,
                                                                                                    -40C to +85C
D083               OSC2/CLKOUT                       —                —             0.6        V    IOL = 1.6 mA, VDD
                   (RC, RCIO, EC, ECIO                                                              = 3.0V,
                   modes)                                                                           -40C to +85C
            VOH    Output High Voltage(3)
D090               I/O ports                     VDD – 0.7            —             —          V    IOH = -3.0 mA, VDD
                                                                                                    = 3.0V,
                                                                                                    -40C to +85C
D092               OSC2/CLKOUT                   VDD – 0.7            —             —          V    IOH = -1.3 mA, VDD
                   (RC, RCIO, EC, ECIO                                                              = 3.0V,
                   modes)                                                                           -40C to +85C
                   Capacitive Loading
                   Specs
                   on Output Pins
D100(4) COSC2      OSC2 pin                          —                —             15        pF    In XT, HS and LP
                                                                                                    modes when exter-
                                                                                                    nal clock is used to
                                                                                                    drive OSC1
D101        CIO    All I/O pins and OSC2             —                —             50        pF    To meet the AC
                   (in RC mode)                                                                     Timing
                                                                                                    Specifications
D102        CB     SCL, SDA                          —                —             400       pF    I2C™ Specification
Note 1:      In RC oscillator configuration, the OSC1/CLKIN pin is a Schmitt Trigger input. It is not recommended that
             the PIC® device be driven with an external clock while in RC mode.
       2:    The leakage current on the MCLR pin is strongly dependent on the applied voltage level. The specified
             levels represent normal operating conditions. Higher leakage current may be measured at different input
             voltages.
       3:    Negative current is defined as current sourced by the pin.
       4:    Parameter is characterized but not tested.
 2010 Microchip Technology Inc.                                                                    DS41303G-page 379
PIC18F2XK20/4XK20
26.10 Memory Programming Requirements
                                                  Standard Operating Conditions (unless otherwise stated)
DC CHARACTERISTICS
                                                  Operating temperature -40°C  TA  +125°C
Param
         Sym             Characteristic              Min       Typ†      Max     Units            Conditions
 No.
                Internal Program Memory
                Programming Specifications(1)
D110    VPP     Voltage on MCLR/VPP/RE3 pin       VDD + 4.5      —        9        V      (Note 3, Note 4)
D113    IDDP    Supply Current during                 —          —        10      mA
                Programming
                Data EEPROM Memory
D120    ED      Byte Endurance                      100K         —        —      E/W      -40C to +85C
D121    VDRW    VDD for Read/Write                   1.8         —       3.6       V      Using EECON to
                                                                                          read/write
D122    TDEW    Erase/Write Cycle Time                —          4        —       ms
D123    TRETD Characteristic Retention                40         —        —      Year     Provided no other
                                                                                          specifications are violated
D124    TREF    Number of Total Erase/Write          1M        10M        —      E/W      -40°C to +85°C
                Cycles before Refresh(2)
                Program Flash Memory
D130    EP      Cell Endurance                       10K         —        —      E/W      -40C to +85C (NOTE 5)
D131    VPR     VDD for Read                         1.8         —       3.6       V
D132    VIW     VDD for Row Erase or Write           2.2         —       3.6       V
D133    TIW     Self-timed Write Cycle Time           —          2        —       ms
D134    TRETD Characteristic Retention                40         —        —      Year     Provided no other
                                                                                          specifications are violated
      † Data in “Typ” column is at 3.0V, 25°C unless otherwise stated. These parameters are for design guidance
        only and are not tested.
Note 1: These specifications are for programming the on-chip program memory through the use of table write
        instructions.
     2: Refer to Section 7.8 “Using the Data EEPROM” for a more detailed discussion on data EEPROM
        endurance.
     3: Required only if single-supply programming is disabled.
     4: The MPLAB ICD 2 does not support variable VPP output. Circuitry to limit the ICD 2 VPP voltage must be
        placed between the ICD 2 and target system when programming or debugging with the ICD 2.
     5: Self-write and Block Erase.
DS41303G-page 380                                                                       2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
26.11 Analog Characteristics
TABLE 26-1:          COMPARATOR SPECIFICATIONS
Operating Conditions: 1.8V < VDD < 3.6V, -40°C < TA < +125°C (unless otherwise stated).
   Param
                  Sym                Characteristics        Min      Typ            Max         Units        Comments
    No.
CM01          VIOFF       Input Offset Voltage                —          10          50           mV     VREF = VDD/2,
                                                                                                         High Power Mode
                                                              —          12          80           mV     VREF = VDD/2,
                                                                                                         Low Power Mode
CM02          VICM        Input Common-mode Voltage         VSS          —          VDD            V
CM04          TRESP       Response Time                       —      200            400           ns     High Power Mode
                                                              —      300            600           ns     Low Power Mode
CM05          TMC2OV      Comparator Mode Change to           —          —           10           s
                          Output Valid*
      *     These parameters are characterized but not tested.
Note 1:     Response time measured with one comparator input at VDD/2, while the other input transitions
            from VSS to VDD.
TABLE 26-2:          CVREF VOLTAGE REFERENCE SPECIFICATIONS
Operating Conditions: 1.8V < VDD < 3.6V, -40°C < TA < +125°C (unless otherwise stated).
  Param
               Sym               Characteristics          Min      Typ        Max         Units            Comments
   No.
CV01*        CLSB         Step Size(2)                     —      VDD/24       —           V       Low Range (VRR = 1)
                                                           —      VDD/32       —           V       High Range (VRR = 0)
CV02*        CACC         Absolute Accuracy                —        —         1/2       LSb
CV03*        CR           Unit Resistor Value (R)          —        3k         —           
CV04*        CST          Settling   Time(1)               —       7.5         10          s
     *      These parameters are characterized but not tested.
Note 1:     Settling time measured while CVRR = 1 and CVR3:CVR0 transitions from ‘0000’ to ‘1111’.
     2:     See Section 21.1 “Comparator Voltage Reference” for more information.
TABLE 26-3:          FIXED VOLTAGE REFERENCE (FVR) SPECIFICATIONS
Operating Conditions: 1.8V < VDD < 3.6V, -40°C < TA < +125°C (unless otherwise stated).
                                                        Standard Operating Conditions (unless otherwise stated)
VR Voltage Reference Specifications
                                                        Operating temperature  -40°C  TA  +125°C
 Param
             Sym               Characteristics           Min       Typ        Max          Units            Comments
  No.
VR01        VROUT       VR voltage output                1.15     1.20        1.25          V          -40°C to +85°C
                                                         1.10     1.20        1.30          V          +85°C to +125°C
VR02*       TCVOUT      Voltage drift temperature         —        <50         —          ppm/C -40°C to +40°C (See
                        coefficient                                                              Figure 27-34)
VR03*       VROUT/     Voltage drift with respect to     —       <2000        —           V/V        25°C, 2.0 to 3.3V (See
            VDD        VDD regulation                                                                 Figure 27-33)
VR04*       TSTABLE     Settling Time                     —        25         100           s         0 to 125°C
        *   These parameters are characterized but not tested.
 2010 Microchip Technology Inc.                                                                           DS41303G-page 381
PIC18F2XK20/4XK20
FIGURE 26-3:         HIGH/LOW-VOLTAGE DETECT CHARACTERISTICS
                         VDD
                                                                                   (HLVDIF can be
                                 VHLVD                                             cleared by software)
           (HLVDIF set by hardware)
                    HLVDIF
TABLE 26-4:     HIGH/LOW-VOLTAGE DETECT CHARACTERISTICS
Standard Operating Conditions (unless otherwise stated)
Operating temperature -40°C  TA  +125°C
Param
      Symbol                   Characteristic                  Min     Typ†    Max     Units        Conditions
 No.
D420             HLVD Voltage on      HLVDL<3:0> = 0000        1.70    1.85    2.00      V
                 VDD Transition       HLVDL<3:0> = 0001        1.80    1.95    2.10      V
                 High-to-Low
                                      HLVDL<3:0> = 0010        1.91    2.06    2.21      V
                                      HLVDL<3:0> = 0011        2.02    2.17    2.32      V
                                      HLVDL<3:0> = 0100        2.15    2.30    2.45      V
                                      HLVDL<3:0> = 0101        2.22    2.37    2.52      V
                                      HLVDL<3:0> = 0110        2.38    2.53    2.68      V
                                      HLVDL<3:0> = 0111        2.46    2.61    2.76      V
                                      HLVDL<3:0> = 1000        2.55    2.70    2.85      V
                                      HLVDL<3:0> = 1001        2.65    2.80    2.95      V
                                      HLVDL<3:0> = 1010        2.75    2.90    3.05      V
                                      HLVDL<3:0> = 1011        2.87    3.02    3.17      V
                                      HLVDL<3:0> = 1100        2.98    3.13    3.28      V
                                      HLVDL<3:0> = 1101        3.26    3.41    3.56      V
                                      HLVDL<3:0> = 1110        3.42    3.57    3.72      V
       † Production tested at TAMB = 25°C. Specifications over temperature limits ensured by characterization.
DS41303G-page 382                                                                      2010 Microchip Technology Inc.
                                                         PIC18F2XK20/4XK20
26.12 AC (Timing) Characteristics
26.12.1     TIMING PARAMETER SYMBOLOGY
The tim ing p arameter symbols have bee n cr eated
using one of the following formats:
1. TppS2ppS                                          3. TCC:ST (I    2
                                                                       C™ specifications only)
2. TppS                                              4. Ts          (I2C specifications only)
T
    F          Frequency                                 T          Time
Lowercase letters (pp) and their meanings:
pp
    cc         CCP1                                      osc        OSC1
    ck         CLKOUT                                    rd         RD
    cs         CS                                        rw         RD or WR
    di         SDI                                       sc         SCK
    do         SDO                                       ss         SS
    dt         Data in                                   t0         T0CKI
    io         I/O port                                  t1         T13CKI
    mc         MCLR                                      wr         WR
Uppercase letters and their meanings:
S
    F          Fall                                      P          Period
    H          High                                      R          Rise
    I          Invalid (High-impedance)                  V          Valid
    L          Low                                       Z          High-impedance
I2C only
    AA         output access                             High       High
    BUF        Bus free                                  Low        Low
TCC:ST (I2C specifications only)
CC
    HD         Hold                                      SU         Setup
ST
    DAT        DATA input hold                           STO        Stop condition
    STA        Start condition
 2010 Microchip Technology Inc.                                                           DS41303G-page 383
PIC18F2XK20/4XK20
26.12.2     TIMING CONDITIONS
The temperature and voltages specified in Table 26-5
apply to all timing sp ecifications unl ess oth erwise
noted. Figure 26-4 specifies the load conditions for the
timing specifications.
TABLE 26-5:       TEMPERATURE AND VOLTAGE SPECIFICATIONS – AC
                                 Standard Operating Conditions (unless otherwise stated)
                                 Operating temperature     -40°C  TA +125°C
AC CHARACTERISTICS
                                 Operating voltage VDD range as described in DC spec Section 26.1 and
                                 Section 26.9.
FIGURE 26-4:           LOAD CONDITIONS FOR DEVICE TIMING SPECIFICATIONS
                         Load Condition 1                                     Load Condition 2
                                       VDD/2
                                              RL                        Pin                     CL
                                                                                        VSS
                                               CL
                        Pin
                                                       RL = 464
                                        VSS            CL = 50 pF       for all pins except OSC2/CLKOUT
                                                                        and including D and E outputs as ports
26.12.3     TIMING DIAGRAMS AND SPECIFICATIONS
FIGURE 26-5:           EXTERNAL CLOCK TIMING (ALL MODES EXCEPT PLL)
                        Q4               Q1                Q2           Q3              Q4                Q1
      OSC1
                                          1                         3         3          4           4
                                                                2
   CLKOUT
DS41303G-page 384                                                                             2010 Microchip Technology Inc.
                                                                 PIC18F2XK20/4XK20
TABLE 26-6:        EXTERNAL CLOCK TIMING REQUIREMENTS
 Param.
             Symbol           Characteristic            Min          Max       Units             Conditions
  No.
1A         FOSC        External CLKIN                   DC            48       MHz     EC, ECIO Oscillator mode,
                       Frequency(1)                                                    (Extended Range Devices)
                                                        DC            64       MHz     EC, ECIO Oscillator mode,
                                                                                       (Industrial Range Devices)
                       Oscillator Frequency(1)          DC            4        MHz     RC Oscillator mode
                                                        0.1           4        MHz     XT Oscillator mode
                                                         4            25       MHz     HS Oscillator mode
                                                         4            16       MHz     HS + PLL Oscillator mode,
                                                                                       (Industrial Range Devices)
                                                         4            12       MHz     HS + PLL Oscillator mode,
                                                                                       (Extended Range Devices)
                                                         5           200        kHz    LP Oscillator mode
1          TOSC        External CLKIN Period(1)         20.8          —         ns     EC, ECIO, Oscillator mode
                                                                                       (Extended Range Devices)
                                                        15.6          —         ns     EC, ECIO, Oscillator mode,
                                                                                       (Industrial Range Devices)
                       Oscillator Period(1)             250           —         ns     RC Oscillator mode
                                                        250        10,000       ns     XT Oscillator mode
                                                         40          250        ns     HS Oscillator mode
                                                        62.5         250        ns     HS + PLL Oscillator mode,
                                                                                       (Industrial range devices)
                                                        83.3         250        ns     HS + PLL Oscillator mode,
                                                                                       (Extended Range Devices)
                                                         5           200        s     LP Oscillator mode
2          TCY         Instruction Cycle   Time(1)      62.5          —         ns     TCY = 4/FOSC
3          TOSL,       External Clock in (OSC1)          30           —         ns     XT Oscillator mode
           TOSH        High or Low Time                 2.5           —         s     LP Oscillator mode
                                                         10           —         ns     HS Oscillator mode
4          TOSR,       External Clock in (OSC1)          —            20        ns     XT Oscillator mode
           TOSF        Rise or Fall Time                 —            50        ns     LP Oscillator mode
                                                         —           7.5        ns     HS Oscillator mode
Note 1:    Instruction cycle period (TCY) equals four times the input oscillator time base period for all configurations
           except PLL. All specified values are based on characterization data for that particular oscillator type under
           standard operating conditions with the device executing code. Exceeding these specified limits may result
           in an unstable oscillator operation and/or higher than expected current consumption. All devices are tested
           to operate at “min.” values with an external clock applied to the OSC1/CLKIN pin. When an external clock
           input is used, the “max.” cycle time limit is “DC” (no clock) for all devices.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 385
PIC18F2XK20/4XK20
TABLE 26-7:      PLL CLOCK TIMING SPECIFICATIONS (VDD = 1.8V TO 3.6V)
 Param
           Sym             Characteristic                Min     Typ†         Max        Units           Conditions
  No.
F10       FOSC Oscillator Frequency Range                 4          —           4       MHz VDD = 1.8-2.0V
                                                          4          —           5       MHz VDD = 2.0-3.0V
                                                          4          —        16         MHz VDD = 3.0-3.6V,
                                                                                             Industrial Range Devices
                                                          4          —        12         MHz VDD = 3.0-3.6V,
                                                                                             Extended Range Devices
F11       FSYS   On-Chip VCO System Frequency            16          —        16         MHz VDD = 1.8-2.0V
                                                         16          —        20         MHz VDD = 2.0-3.0V
                                                         16          —        64         MHz VDD = 3.0-3.6V,
                                                                                             Industrial Range Devices
                                                         16          —        48         MHz VDD = 3.0-3.6V,
                                                                                             Extended Range Devices
F12       trc    PLL Start-up Time (Lock Time)           —           —           2        ms
F13       CLK   CLKOUT Stability (Jitter)               -2          —        +2          %
TABLE 26-8:      AC CHARACTERISTICS: INTERNAL OSCILLATORS ACCURACY
                                     PIC18F2XK20/4XK20
                                        Standard Operating Conditions (unless otherwise stated)
PIC18F2XK20/4XK20
                                        Operating temperature    -40°C  TA  +125°C
Param
                                             Min   Typ         Max       Units                    Conditions
 No.
OA1      HFINTOSC Accuracy @ Freq = 16 MHz, 8 MHz, 4 MHz, 2 MHz, 1 MHz, 500 kHz, 250 kHz(1)
                                             -2     0          +2         %           +0°C to +70°C        VDD = 1.8-3.6V
                                             -3    —           +2         %          +70°C to +85°C        VDD = 1.8-3.6V
                                             -5    —           +5         %          -40°C to 0°C and      VDD = 1.8-3.6V
                                                                                      +85°C to 125°C
OA2      LFINTOSC Accuracy @ Freq = 31.25 kHz
                                             -15   —           +15        %          -40°C to +125°C       VDD = 1.8-3.6V
Note 1:    Frequency calibrated at 25°C. OSCTUNE register can be used to compensate for temperature drift.
DS41303G-page 386                                                                              2010 Microchip Technology Inc.
                                                                           PIC18F2XK20/4XK20
FIGURE 26-6:           CLKOUT AND I/O TIMING
                            Q4                               Q1                      Q2                           Q3
        OSC1
                                              10                                                       11
      CLKOUT
                                               13                                                         12
                                                        14            19    18
                                                                                                                16
       I/O pin
       (Input)
                                                   17                                 15
       I/O pin         Old Value                                                                                New Value
      (Output)
                                                     20, 21
        Note:    Refer to Figure 26-4 for load conditions.
TABLE 26-9:         CLKOUT AND I/O TIMING REQUIREMENTS
Param
           Symbol                   Characteristic                           Min           Typ      Max         Units Conditions
 No.
10       TosH2ckL OSC1  to CLKOUT  —                                                     75        200          ns    (Note 1)
11       TosH2ckH OSC1  to CLKOUT  —                                                     75        200          ns    (Note 1)
12       TckR        CLKOUT Rise Time                                         —            35        100          ns    (Note 1)
13       TckF        CLKOUT Fall Time                                         —            35        100          ns    (Note 1)
14       TckL2ioV    CLKOUT  to Port Out Valid                               —            —     0.5 TCY + 20     ns    (Note 1)
15       TioV2ckH Port In Valid before CLKOUT  0.                         25 TCY + 25     —         —            ns    (Note 1)
16       TckH2ioI    Port In Hold after CLKOUT                   0           —                      —            ns    (Note 1)
17       TosH2ioV OSC1  (Q1 cycle) to Port Out Valid                         —            50        150          ns
18       TosH2ioI    OSC1  (Q2 cycle) to Port Input Invalid                 100           —         —            ns
                     (I/O in hold time)
19       TioV2osH Port Input Valid to OSC1 (I/O in setup                       0         —         —            ns
                  time)
20       TioR        Port Output Rise Time                                    —            10        25           ns
21       TioF        Port Output Fall Time                                    —            10        25           ns
22†      TINP        INTx pin High or Low Time                                20           —         —            ns
23†      TRBP        RB<7:4> Change KBIx High or Low Time                    TCY           —         —            ns
      † These parameters are asynchronous events not related to any internal clock edges.
Note 1: Measurements are taken in RC mode, where CLKOUT output is 4 x TOSC.
 2010 Microchip Technology Inc.                                                                                DS41303G-page 387
PIC18F2XK20/4XK20
FIGURE 26-7:                RESET, WATCHDOG TIMER, OSCILLATOR START-UP TIMER AND
                            POWER-UP TIMER TIMING
          VDD
        MCLR
                                                                              30
       Internal
          POR
                                 33
       PWRT
     Time-out                                32
        OSC
     Time-out
       Internal
         Reset
     Watchdog
        Timer
        Reset                                                                                 31
                                                                         34                                 34
      I/O pins
     Note:        Refer to Figure 26-4 for load conditions.
FIGURE 26-8:                BROWN-OUT RESET TIMING
                   VDD                                    BVDD
                                                                                   35
                                                                                                                 VBGAP = 1.2V
              VIVRST
      Enable Internal
  Reference Voltage
  Internal Reference
       Voltage Stable                                    36
TABLE 26-10: RESET, WATCHDOG TIMER, OSCILLATOR START-UP TIMER, POWER-UP TIMER
             AND BROWN-OUT RESET REQUIREMENTS
Param.
       Symbol                      Characteristic                  Min        Typ       Max    Units         Conditions
 No.
30       TmcL         MCLR Pulse Width (low)                        2         —         —          s
31       TWDT         Watchdog Timer Time-out Period               3.5        4.1       4.7        ms   1:1 prescaler
                      (no postscaler)
32       TOST         Oscillation Start-up Timer Period          1024 TOSC — 1024 TOSC             —    TOSC = OSC1 period
33       TPWRT        Power-up Timer Period                        54.8    64.4 74.1               ms
34       TIOZ         I/O High-Impedance from MCLR                 —           2        —          s
                      Low or Watchdog Timer Reset
35       TBOR         Brown-out Reset Pulse Width                  200         —        —          s   VDD  BVDD (see D005)
36       TIVRST       Internal Reference Voltage Stable             —          25       35         s
37       THLVD        High/Low-Voltage Detect Pulse Width          200         —        —          s   VDD  VHLVD
38       TCSD         CPU Start-up Time                             5          —        10         s
39       TIOBST       Time for HF-INTOSC to Stabilize               —         0.25       1         ms
DS41303G-page 388                                                                               2010 Microchip Technology Inc.
                                                                      PIC18F2XK20/4XK20
FIGURE 26-9:             TIMER0 AND TIMER1 EXTERNAL CLOCK TIMINGS
                 T0CKI
                                                     40                  41
                                                               42
        T1OSO/T13CKI
                                                     45                  46
                                                                47                            48
               TMR0 or
                 TMR1
       Note:    Refer to Figure 26-4 for load conditions.
TABLE 26-11: TIMER0 AND TIMER1 EXTERNAL CLOCK REQUIREMENTS
Param
          Symbol                      Characteristic                          Min       Max     Units Conditions
 No.
40      Tt0H         T0CKI High Pulse Width            No prescaler     0.5 TCY + 20     —         ns
                                                       With prescaler         10         —         ns
41      Tt0L         T0CKI Low Pulse Width             No prescaler     0.5 TCY + 20     —         ns
                                                       With prescaler         10         —         ns
42      Tt0P         T0CKI Period                      No prescaler      TCY + 10        —         ns
                                                       With prescaler    Greater of:     —         ns    N = prescale
                                                                          20 ns or                       value
                                                                        (TCY + 40)/N                     (1, 2, 4,..., 256)
45      Tt1H         T13CKI         Synchronous, no prescaler           0.5 TCY + 20     —         ns
                     High Time      Synchronous,                              10         —         ns
                                    with prescaler
                                    Asynchronous                              30         —         ns
46      Tt1L         T13CKI Low Synchronous, no prescaler               0.5 TCY + 5      —         ns
                     Time       Synchronous,                                  10         —         ns
                                with prescaler
                                    Asynchronous                              30         —         ns
47      Tt1P         T13CKI       Synchronous                            Greater of:     —         ns    N = prescale
                     Input Period                                         20 ns or                       value (1, 2, 4, 8)
                                                                        (TCY + 40)/N
                                    Asynchronous                              60         —         ns
        Ft1          T13CKI Clock Input Frequency Range                       DC        50         kHz
48      Tcke2tmrI Delay from External T13CKI Clock Edge to                2 TOSC       7 TOSC      —
                  Timer Increment
 2010 Microchip Technology Inc.                                                                         DS41303G-page 389
PIC18F2XK20/4XK20
FIGURE 26-10:       CAPTURE/COMPARE/PWM TIMINGS (ALL CCP MODULES)
                         CCPx
                (Capture Mode)
                                                            50              51
                                                                 52
                        CCPx
        (Compare or PWM Mode)
                                                   53            54
        Note:   Refer to Figure 26-4 for load conditions.
TABLE 26-12: CAPTURE/COMPARE/PWM REQUIREMENTS (ALL CCP MODULES)
Param
      Symbol                      Characteristic                      Min        Max     Units     Conditions
 No.
50      TccL    CCPx Input Low No prescaler                      0.5 TCY + 20    —        ns
                Time           With                                   10         —        ns
                               prescaler
51      TccH    CCPx Input           No prescaler                0.5 TCY + 20    —        ns
                High Time            With                             10         —        ns
                                     prescaler
52      TccP    CCPx Input Period                                3 TCY + 40      —        ns     N    rescale
                                                                                                           = p
                                                                     N                           value (1, 4 or 16)
53      TccR    CCPx Output Fall Time                                 —          25       ns
54      TccF    CCPx Output Fall Time                                 —          25       ns
DS41303G-page 390                                                                   2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
FIGURE 26-11:            PARALLEL SLAVE PORT TIMING (PIC18F4XK20)
        RE2/CS
       RE0/RD
       RE1/WR
                                                       65
      RD7:RD0
                                                                                 62
                                         64
                                                                                           63
      Note:      Refer to Figure 26-4 for load conditions.
TABLE 26-13: PARALLEL SLAVE PORT REQUIREMENTS (PIC18F4XK20)
Param.
              Symbol                          Characteristic               Min   Max      Units    Conditions
 No.
62        TdtV2wrH        Data In Valid before WR  or CS                 20     —        ns
                          (setup time)
63        TwrH2dtI        WR  or CS  to Data–In Invalid (hold time)      20     —        ns
64        TrdL2dtV        RD  and CS  to Data–Out Valid                  —      80       ns
65        TrdH2dtI        RD  or CS  to Data–Out Invalid                 10     30       ns
66        TibfINH         Inhibit of the IBF Flag bit being Cleared from   —     3 CY T
                          WR  or CS 
 2010 Microchip Technology Inc.                                                                  DS41303G-page 391
PIC18F2XK20/4XK20
FIGURE 26-12:             EXAMPLE SPI MASTER MODE TIMING (CKE = 0)
      SS
                           70
      SCK
      (CKP = 0)
                                     71          72
                                                                                      78         79
      SCK
      (CKP = 1)
                                                                                      79         78
                                   80
      SDO                                      MSb                  bit 6 - - - - - -1          LSb
                                                           75, 76
      SDI                                  MSb In                    bit 6 - - - -1                  LSb In
                                                74
                                          73
      Note:    Refer to Figure 26-4 for load conditions.
TABLE 26-14: EXAMPLE SPI MODE REQUIREMENTS (MASTER MODE, CKE = 0)
Param
              Symbol                           Characteristic                                  Min             Max Units       Conditions
 No.
70          TssL2scH,     SS  to SCK  or SCK  Input                                         TCY               —      ns
            TssL2scL
71          TscH          SCK Input High Time                   Continuous                 1.25 TCY + 30         —      ns
71A                       (Slave mode)                          Single Byte                     40               —      ns   (Note 1)
72          TscL          SCK Input Low Time                    Continuous                 1.25 TCY + 30         —      ns
72A                       (Slave mode)                          Single Byte                     40               —      ns   (Note 1)
73          TdiV2scH,     Setup Time of SDI Data Input to SCK Edge                             100               —      ns
            TdiV2scL
73A         Tb2b          Last Clock Edge of Byte 1 to the 1st Clock Edge                  1.5 TCY + 40          —      ns   (Note 2)
                          of Byte 2
74          TscH2diL,     Hold Time of SDI Data Input to SCK Edge                              100               —      ns
            TscL2diL
75          TdoR          SDO Data Output Rise Time                                             —               25      ns
76          TdoF          SDO Data Output Fall Time                                             —               25      ns
78          TscR          SCK Output Rise Time                                                  —               25      ns
                          (Master mode)
79          TscF          SCK Output Fall Time (Master mode)                                    —               25      ns
80          TscH2doV,     SDO Data Output Valid after SCK Edge                                  —               50      ns
            TscL2doV
Note 1:       Requires the use of Parameter #73A.
     2:       Only if Parameter #71A and #72A are used.
DS41303G-page 392                                                                                              2010 Microchip Technology Inc.
                                                                             PIC18F2XK20/4XK20
FIGURE 26-13:             EXAMPLE SPI MASTER MODE TIMING (CKE = 1)
      SS
                            81
     SCK
     (CKP = 0)
                                     71            72
                                                                                          79
                              73
     SCK
     (CKP = 1)
                                              80
                                                                                          78
      SDO                          MSb                  bit 6 - - - - - -1       LSb
                                              75, 76
     SDI                         MSb In                   bit 6 - - - -1         LSb In
                                     74
     Note:    Refer to Figure 26-4 for load conditions.
TABLE 26-15: EXAMPLE SPI MODE REQUIREMENTS (MASTER MODE, CKE = 1)
Param.
              Symbol                          Characteristic                              Min       Max Units   Conditions
 No.
71           TscH          SCK Input High Time                     Continuous       1.25 TCY + 30   —    ns
71A                        (Slave mode)                            Single Byte            40        —    ns     (Note 1)
72           TscL          SCK Input Low Time                      Continuous       1.25 TCY + 30   —    ns
72A                        (Slave mode)                            Single Byte            40        —    ns     (Note 1)
73           TdiV2scH,     Setup Time of SDI Data Input to SCK Edge                       100       —    ns
             TdiV2scL
73A          Tb2b          Last Clock Edge of Byte 1 to the 1st Clock Edge          1.5 TCY + 40    —    ns     (Note 2)
                           of Byte 2
74           TscH2diL,     Hold Time of SDI Data Input to SCK Edge                        100       —    ns
             TscL2diL
75           TdoR          SDO Data Output Rise Time                                      —         25   ns
76           TdoF          SDO Data Output Fall Time                                      —         25   ns
78           TscR          SCK Output Rise Time                                           —         25   ns
                           (Master mode)
79           TscF          SCK Output Fall Time (Master mode)                             —         25   ns
80           TscH2doV,     SDO Data Output Valid after SCK Edge                           —         50   ns
             TscL2doV
81           TdoV2scH,     SDO Data Output Setup to SCK Edge                              TCY       —    ns
             TdoV2scL
Note 1:       Requires the use of Parameter #73A.
     2:       Only if Parameter #71A and #72A are used.
 2010 Microchip Technology Inc.                                                                          DS41303G-page 393
PIC18F2XK20/4XK20
FIGURE 26-14:               EXAMPLE SPI SLAVE MODE TIMING (CKE = 0)
      SS
                             70
      SCK
      (CKP = 0)                                                                                  83
                                       71          72
                                                                                     78    79
      SCK
      (CKP = 1)
                                                                                     79    78
                                     80
      SDO                                        MSb                bit 6 - - - - - -1          LSb
                                                           75, 76                                        77
      SDI                                     MSb In                bit 6 - - - -1          LSb In
                                                  74
                                            73
      Note:        Refer to Figure 26-4 for load conditions.
TABLE 26-16: EXAMPLE SPI MODE REQUIREMENTS (SLAVE MODE TIMING, CKE = 0)
Param
              Symbol                              Characteristic                                Min           Max Units Conditions
 No.
70          TssL2scH, SS  to SCK  or SCK  Input                                              TCY           —     ns
            TssL2scL
71          TscH          SCK Input High Time                             Continuous      1.25 TCY + 30       —     ns
71A                       (Slave mode)                                    Single Byte           40            —     ns    (Note 1)
72          TscL          SCK Input Low Time                              Continuous      1.25 TCY + 30       —     ns
72A                       (Slave mode)                                    Single Byte           40            —     ns    (Note 1)
73          TdiV2scH, Setup Time of SDI Data Input to SCK Edge                                  100           —     ns
            TdiV2scL
73A         Tb2b          Last Clock Edge of Byte 1 to the First Clock Edge of Byte 2 1.5 TCY + 40            —     ns    (Note 2)
74          TscH2diL, Hold Time of SDI Data Input to SCK Edge                                   100           —     ns
            TscL2diL
75          TdoR          SDO Data Output Rise Time                                             —             25    ns
76          TdoF          SDO Data Output Fall Time                                             —             25    ns
77          TssH2doZ SS to SDO Output High-Impedance                                           10            50    ns
78          TscR          SCK Output Rise Time (Master mode)                                    —             25    ns
79          TscF          SCK Output Fall Time (Master mode)                                    —             25    ns
80          TscH2doV SDO Data Output Valid after SCK Edge                                       —             50    ns
            ,
            TscL2doV
83          TscH2ssH SS  after SCK edge                                                  1.5 TCY + 40        —     ns
            ,
            TscL2ssH
Note 1:       Requires the use of Parameter #73A.
     2:       Only if Parameter #71A and #72A are used.
DS41303G-page 394                                                                                      2010 Microchip Technology Inc.
                                                                                  PIC18F2XK20/4XK20
FIGURE 26-15:              EXAMPLE SPI SLAVE MODE TIMING (CKE = 1)
                          82
      SS
                             70
      SCK                                                                                             83
      (CKP = 0)
                                       71          72
      SCK
      (CKP = 1)
                                                                             80
      SDO                             MSb               bit 6 - - - - - -1             LSb
                                               75, 76                                                          77
      SDI
                                   MSb In               bit 6 - - - -1                 LSb In
                                        74
     Note:     Refer to Figure 26-4 for load conditions.
TABLE 26-17: EXAMPLE SPI SLAVE MODE REQUIREMENTS (CKE = 1)
Param
             Symbol                             Characteristic                                      Min         Max Units Conditions
 No.
70          TssL2scH, SS  to SCK  or SCK  Input                                                  TCY             —      ns
            TssL2scL
71          TscH        SCK Input High Time                              Continuous             1.25 TCY + 30       —      ns
71A                     (Slave mode)                                     Single Byte                 40             —      ns   (Note 1)
72          TscL        SCK Input Low Time                               Continuous             1.25 TCY + 30       —      ns
72A                     (Slave mode)                                     Single Byte                 40             —      ns   (Note 1)
73A         Tb2b        Last Clock Edge of Byte 1 to the First Clock Edge of Byte 2 1.5 TCY + 40                    —      ns   (Note 2)
74          TscH2diL, Hold Time of SDI Data Input to SCK Edge                                       100             —      ns
            TscL2diL
75          TdoR        SDO Data Output Rise Time                                                    —              25     ns
76          TdoF        SDO Data Output Fall Time                                                    —              25     ns
77          TssH2doZ SS to SDO Output High-Impedance                                                10             50     ns
78          TscR        SCK Output Rise Time                                                         —              25     ns
                        (Master mode)
79          TscF        SCK Output Fall Time (Master mode)                                           —              25     ns
80          TscH2doV, SDO Data Output Valid after SCK Edge                                           —              50     ns
            TscL2doV
82          TssL2doV SDO Data Output Valid after SS  Edge                                           —              50     ns
83          TscH2ssH SS  after SCK Edge                                                        1.5 TCY + 40        —      ns
            ,
            TscL2ssH
Note 1:       Requires the use of Parameter #73A.
     2:       Only if Parameter #71A and #72A are used.
 2010 Microchip Technology Inc.                                                                                         DS41303G-page 395
PIC18F2XK20/4XK20
FIGURE 26-16:            I2C™ BUS START/STOP BITS TIMING
  SCL
                                      91                                                                       93
                    90                                                                       92
  SDA
                           Start                                                                   Stop
                         Condition                                                                Condition
  Note:   Refer to Figure 26-4 for load conditions.
TABLE 26-18: I2C™ BUS START/STOP BITS REQUIREMENTS (SLAVE MODE)
Param.
       Symbol                          Characteristic                      Min   Max   Units                    Conditions
 No.
90        TSU:STA     Start Condition            100 kHz mode             4700   —      ns         Only relevant for Repeated
                      Setup Time                 400 kHz mode              600   —                 Start condition
91        THD:STA     Start Condition            100 kHz mode             4000   —      ns        After this period, the first
                      Hold Time                  400 kHz mode              600   —                clock pulse is generated
92        TSU:STO     Stop Condition             100 kHz mode             4700   —      ns
                      Setup Time                 400 kHz mode              600   —
93        THD:STO Stop Condition                 100 kHz mode             4000   —      ns
                      Hold Time                  400 kHz mode              600   —
FIGURE 26-17:            I2C™ BUS DATA TIMING
                               103                      100                                              102
                                                                    101
          SCL
                          90
                                                              106         107
                                 91                                                                 92
          SDA
          In
                                                                                                                110
                                           109                      109
          SDA
          Out
          Note:   Refer to Figure 26-4 for load conditions.
DS41303G-page 396                                                                               2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
TABLE 26-19: I2C™ BUS DATA REQUIREMENTS (SLAVE MODE)
Param.
       Symbol                   Characteristic                  Min        Max    Units              Conditions
 No.
100         THIGH   Clock High Time      100 kHz mode           4.0         —       s    PIC18FXXXX must operate
                                                                                          at a minimum of 1.5 MHz
                                         400 kHz mode           0.6         —       s    PIC18FXXXX must operate
                                                                                          at a minimum of 10 MHz
                                         SSP Module           1.5 TCY       —
101         TLOW    Clock Low Time       100 kHz mode           4.7         —       s    PIC18FXXXX must operate
                                                                                          at a minimum of 1.5 MHz
                                         400 kHz mode           1.3         —       s    PIC18FXXXX must operate
                                                                                          at a minimum of 10 MHz
                                         SSP Module           1.5 TCY       —
102         TR      SDA and SCL Rise 100 kHz mode                —        1000      ns
                    Time             400 kHz mode           20 + 0.1 CB    300      ns    CB is specified to be from
                                                                                          10 to 400 pF
103         TF      SDA and SCL Fall     100 kHz mode            —         300      ns
                    Time                 400 kHz mode       20 + 0.1 CB    300      ns    CB is specified to be from
                                                                                          10 to 400 pF
90          TSU:STA Start Condition      100 kHz mode           4.7         —       s    Only relevant for Repeated
                    Setup Time           400 kHz mode           0.6         —       s    Start condition
91          THD:STA Start Condition      100 kHz mode           4.0         —       s    After this period, the first
                    Hold Time            400 kHz mode           0.6         —       s    clock pulse is generated
106         THD:DAT Data Input Hold      100 kHz mode            0          —       ns
                    Time                 400 kHz mode            0         0.9      s
107         TSU:DAT Data Input Setup     100 kHz mode           250         —       ns    (Note 2)
                    Time                 400 kHz mode           100         —       ns
92          TSU:STO Stop Condition       100 kHz mode           4.7         —       s
                    Setup Time           400 kHz mode           0.6         —       s
109         TAA     Output Valid from    100 kHz mode            —        3500      ns    (Note 1)
                    Clock                400 kHz mode            —          —       ns
110         TBUF    Bus Free Time        100 kHz mode           4.7         —       s    Time the bus must be free
                                         400 kHz mode           1.3         —       s    before a new transmission
                                                                                          can start
D102        CB      Bus Capacitive Loading                       —         400      pF
Note 1:      As a transmitter, the device must provide this internal minimum delay time to bridge the undefined region
             (min. 300 ns) of the falling edge of SCL to avoid unintended generation of Start or Stop conditions.
       2:    A fast mode I2C bus device can be used in a standard mode I2C bus system but the requirement,
             TSU:DAT  250 ns, must then be met. This will automatically be the case if the device does not stretch the
             LOW period of the SCL signal. If such a device does stretch the LOW period of the SCL signal, it must
             output the next data bit to the SDA line, TR max. + TSU:DAT = 1000 + 250 = 1250 ns (according to the
             standard mode I2C bus specification), before the SCL line is released.
 2010 Microchip Technology Inc.                                                                      DS41303G-page 397
PIC18F2XK20/4XK20
FIGURE 26-18:             MASTER SSP I2C™ BUS START/STOP BITS TIMING WAVEFORMS
     SCL
                                         91                                                                    93
                         90                                                                   92
     SDA
                             Start                                                                  Stop
                           Condition                                                               Condition
     Note:   Refer to Figure 26-4 for load conditions.
TABLE 26-20: MASTER SSP I2C™ BUS START/STOP BITS REQUIREMENTS
Param.
       Symbol                       Characteristic                         Min          Max    Units                Conditions
 No.
90         TSU:STA     Start Condition              100 kHz mode     2(TOSC)(BRG + 1)   —          ns    Only relevant for
                       Setup Time                   400 kHz mode     2(TOSC)(BRG + 1)   —                Repeated Start
                                                                                                         condition
                                                    1 MHz mode(1)    2(TOSC)(BRG + 1)   —
91         THD:STA Start Condition                  100 kHz mode     2(TOSC)(BRG + 1)   —          ns    After this period, the
                       Hold Time                    400 kHz mode     2(TOSC)(BRG + 1)   —                first clock pulse is
                                                                                                         generated
                                                    1 MHz mode(1)    2(TOSC)(BRG + 1)   —
92         TSU:STO Stop Condition                   100 kHz mode     2(TOSC)(BRG + 1)   —          ns
                       Setup Time                   400 kHz mode     2(TOSC)(BRG + 1)   —
                                                    1 MHz mode(1)    2(TOSC)(BRG + 1)   —
93         THD:STO Stop Condition                   100 kHz mode     2(TOSC)(BRG + 1)   —          ns
                       Hold Time                    400 kHz mode     2(TOSC)(BRG + 1)   —
                                                    1 MHz mode(1)    2(TOSC)(BRG + 1)   —
Note 1: Maximum pin capacitance = 10 pF for all I2C pins.
FIGURE 26-19:             MASTER SSP I2C™ BUS DATA TIMING
                                   103                     100                                     102
                                                                     101
               SCL
                              90                             106
                                     91                                     107               92
               SDA
               In
                                              109                    109                                 110
              SDA
              Out
               Note:     Refer to Figure 26-4 for load conditions.
DS41303G-page 398                                                                              2010 Microchip Technology Inc.
                                                                 PIC18F2XK20/4XK20
TABLE 26-21: MASTER SSP I2C™ BUS DATA REQUIREMENTS
Param.
       Symbol                 Characteristic                     Min            Max    Units           Conditions
 No.
100       THIGH     Clock High Time 100 kHz mode           2(TOSC)(BRG + 1)      —      ms
                                      400 kHz mode         2(TOSC)(BRG   + 1)    —      ms
                                      1 MHz    mode(1)     2(TOSC)(BRG + 1)      —      ms
101       TLOW      Clock Low Time 100 kHz mode            2(TOSC)(BRG + 1)      —      ms
                                      400 kHz mode         2(TOSC)(BRG + 1)      —      ms
                                      1 MHz    mode(1)     2(TOSC)(BRG + 1)      —      ms
102       TR        SDA and SCL       100 kHz mode               —              1000    ns     CB is specified to be from
                    Rise Time         400 kHz mode           20 + 0.1 CB        300     ns     10 to 400 pF
                                      1 MHz mode(1) —                           300     ns
103       TF        SDA and SCL       100 kHz mode               —              300     ns     CB is specified to be from
                    Fall Time         400 kHz mode           20 + 0.1 CB 30       0     ns     10 to 400 pF
                                      1 MHz mode(1)              —              100     ns
90        TSU:STA   Start Condition   100 kHz mode         2(TOSC)(BRG + 1)      —      ms     Only relevant for
                    Setup Time        400 kHz mode         2(TOSC)(BRG   + 1)    —      ms     Repeated Start
                                                                                               condition
                                      1 MHz mode(1) 2(T OSC)(BRG + 1)            —      ms
91        THD:STA Start Condition     100 kHz mode         2(TOSC)(BRG + 1)      —      ms     After this period, the first
                  Hold Time           400 kHz mode         2(TOSC)(BRG + 1)      —      ms     clock pulse is generated
                                      1 MHz mode(1) 2(T OSC)(BRG + 1)            —      ms
106       THD:DAT Data Input          100 kHz mode                0              —      ns
                  Hold Time           400 kHz mode                0             0.9     ms
107       TSU:DAT   Data Input        100 kHz mode               250             —      ns     (Note 2)
                    Setup Time        400 kHz mode               100             —      ns
92        TSU:STO Stop Condition      100 kHz mode         2(TOSC)(BRG + 1)      —      ms
                  Setup Time          400 kHz mode         2(TOSC)(BRG + 1)      —      ms
                                      1 MHz mode(1) 2(T OSC)(BRG + 1)            —      ms
109       TAA       Output Valid      100 kHz mode               —              3500    ns
                    from Clock        400 kHz mode               —              1000    ns
                                      1 MHz    mode(1)             —              —     ns
110       TBUF      Bus Free Time     100 kHz mode               4.7             —      ms     Time the bus must be free
                                      400 kHz mode               1.3             —      ms     before a new transmission
                                                                                               can start
D102      CB        Bus Capacitive Loading                       —              400     pF
Note 1:    Maximum pin capacitance = 10 pF for all   I2C pins.
     2:    A fast mode I2C bus device can be used in a standard mode I2C bus system, but parameter 107  250 ns
           must then be met. This will automatically be the case if the device does not stretch the LOW period of the
           SCL signal. If such a device does stretch the LOW period of the SCL signal, it must output the next data bit
           to the SDA line, parameter 102 + parameter 107 = 1000 + 250 = 1250 ns (for 100 kHz mode), before the
           SCL line is released.
 2010 Microchip Technology Inc.                                                                      DS41303G-page 399
PIC18F2XK20/4XK20
FIGURE 26-20:           EUSART SYNCHRONOUS TRANSMISSION (MASTER/SLAVE) TIMING
  RC6/TX/CK
         pin                            121                   121
 RC7/RX/DT
        pin
                                  120
                                                                               122
  Note:     Refer to Figure 26-4 for load conditions.
TABLE 26-22: EUSART SYNCHRONOUS TRANSMISSION REQUIREMENTS
Param
           Symbol                        Characteristic                        Min    Max     Units    Conditions
 No.
120       TckH2dtV SYNC XMIT (MASTER & SLAVE)
                   Clock High to Data Out Valid                                —       40      ns
121       Tckrf        Clock Out Rise Time and Fall Time                       —       20      ns
                       (Master mode)
122       Tdtrf        Data Out Rise Time and Fall Time                        —       20      ns
FIGURE 26-21:           EUSART SYNCHRONOUS RECEIVE (MASTER/SLAVE) TIMING
          RC6/TX/CK
                 pin                          125
         RC7/RX/DT
                pin
                                                                    126
          Note:   Refer to Figure 26-4 for load conditions.
TABLE 26-23: EUSART SYNCHRONOUS RECEIVE REQUIREMENTS
Param.
            Symbol                   Characteristic                   Min      Max   Units       Conditions
 No.
125        TdtV2ckl    SYNC RCV (MASTER & SLAVE)
                       Data Setup before CK  (DT setup time)             10   —      ns
126        TckL2dtl    Data Hold after CK  (DT hold time)                15   —      ns
DS41303G-page 400                                                                     2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
TABLE 26-24: A/D CONVERTER CHARACTERISTICS: PIC18F2XK20/4XK20
Param
      Symbol              Characteristic              Min        Typ        Max       Units       Conditions
 No.
A01     NR        Resolution                          —          —           10        bits -40°C to +85°C, VREF
                                                                                             2.0V
A03     EIL       Integral Linearity Error            —         ±0.5         ±1       LSb -40°C to +85°C, VREF
                                                                                           2.0V
A04     EDL       Differential Linearity Error        —         ±0.4         ±1       LSb -40°C to +85°C, VREF
                                                                                           2.0V
A06     EOFF      Offset Error                        —          0.4         ±2       LSb -40°C to +85°C, VREF
                                                                                           2.0V
A07     EGN       Gain Error                          —          0.3         ±2       LSb -40°C to +85°C, VREF
                                                                                           2.0V
A08     ETOTL     Total Error                         —           1          ±3       LSb -40°C to +85°C, VREF
                                                                                           2.0V
A20     VREF     Reference Voltage Range             1.8        —           —          V     ABsolute Minimum
                  (VREFH – VREFL)                     2.0        —           —          V     Minimum for 1LSb
                                                                                              Accuracy
A21     VREFH     Reference Voltage High            VDD/2        —       VDD + 0.3      V
A22     VREFL     Reference Voltage Low           VSS – 0.3V     —         VDD/2        V
A25     VAIN      Analog Input Voltage               VREFL       —         VREFH        V
A30     ZAIN      Recommended Impedance of            —          —           3         k        -40°C to +85°C
                  Analog Voltage Source
Note 1:     The A/D conversion result never decreases with an increase in the input voltage and has no missing
            codes.
       2:   VREFH current is from RA3/AN3/VREF+ pin or VDD, whichever is selected as the VREFH source.
            VREFL current is from RA2/AN2/VREF-/CVREF pin or VSS, whichever is selected as the VREFL source.
 2010 Microchip Technology Inc.                                                                  DS41303G-page 401
PIC18F2XK20/4XK20
FIGURE 26-22:                A/D CONVERSION TIMING
           BSF ADCON0, GO
                                        (Note 2)
                                                                                 131
              Q4
                                                                                 130
       A/D CLK         132
      A/D DATA                                9        8       7       .. .     ...       2          1            0
           ADRES                                           OLD_DATA                                                         NEW_DATA
             ADIF                                                                                                                   TCY
              GO                                                                                                             DONE
                                                                       SAMPLING STOPPED
       SAMPLE
      Note    1:    If the A/D clock source is selected as RC, a time of TCY is added before the A/D clock starts.
                    This allows the SLEEP instruction to be executed.
              2:    This is a minimal RC delay (typically 100 ns), which also disconnects the holding capacitor from the analog input.
TABLE 26-25: A/D CONVERSION REQUIREMENTS
Param
      Symbol                            Characteristic                            Min          Max        Units              Conditions
 No.
130     TAD           A/D Clock Period                                             0.7        25.0(1)       s        TOSC based,
                                                                                                                      -40C to +85C
                                                                                   0.7         4.0(1)       s        TOSC based,
                                                                                                                      +85C to +125C
                                                                                   1.0          4.0         s        FRC mode, VDD2.0V
131     TCNV          Conversion Time                                              12           12         TAD
                      (not including acquisition time) (Note 2)
132     TACQ          Acquisition Time (Note 3)                                    1.4          —           s        VDD = 3V, Rs = 50
135     TSWC          Switching Time from Convert  Sample                         —          (Note 4)
136     TDIS          Discharge Time                                                2            2         TAD
Legend:      TBD = To Be Determined
Note 1:      The time of the A/D clock period is dependent on the device frequency and the TAD clock divider.
     2:      ADRES register may be read on the following TCY cycle.
     3:      The time for the holding capacitor to acquire the “New” input voltage when the voltage changes full scale
             after the conversion (VDD to VSS or VSS to VDD). The source impedance (RS) on the input channels is 50
             .
      4:     On the following cycle of the device clock.
DS41303G-page 402                                                                                                 2010 Microchip Technology Inc.
                                                                           PIC18F2XK20/4XK20
27.0                DC AND AC CHARACTERISTICS GRAPHS AND TABLES
FIGURE 27-1:                  PIC18F4XK20/PIC18F2XK20 TYPICAL BASE IPD
                   10
                                                                                     125°C
                                                                                     85°C
   IPD (uA)
                  0.1
                                                                                     40°C
                                  Limited Accuracy                                   25°C
                                                                                     -40°C
                 0.01
                        1.8   2           2.2        2.4   2.6             2.8   3           3.2    3.4         3.6
                                                                 VDD (V)
FIGURE 27-2:                  PIC184XK20/PIC18F2XK20 MAXIMUM BASE IPD
                 100
                                                                                      125°C
      IPD (uA)
                   10
                                                                                     85°C
                                                                                     40°C
                    1                                                                25°C
                        1.8   2           2.2        2.4   2.6             2.8   3            3.2   3.4          3.6
                                                                 VDD (V)
 2010 Microchip Technology Inc.                                                                          DS41303G-page 403
PIC18F2XK20/4XK20
FIGURE 27-3:                PIC18F4XK20/PIC18F2XK20 TYPICAL RC_RUN 31 KHZ IDD
                 16
                 14                                                         125°C
                 12
                                                                            85°C
                                                                             25°C
    IDD (uA)
                 10                                                         -40°C
                  4
                      1.8   2     2.2     2.4    2.6              2.8   3           3.2        3.4        3.6
                                                       VDD (V)
FIGURE 27-4:                PIC18F4XK20/PIC18F2XK20 MAXIMUM RC_RUN 31 KHZ IDD
                 45
                                                                             125°C
                 40
                 35
                 30
      IDD (uA)
                 25
                 20                                                         85°C
                                                                            25°C
                 15                                                            -40°C
                 10
                  5
                      1.8   2      2.2    2.4     2.6             2.8   3            3.2       3.4        3.6
                                                        VDD (V)
DS41303G-page 404                                                                     2010 Microchip Technology Inc.
                                                                           PIC18F2XK20/4XK20
FIGURE 27-5:                          PIC18F4XK20/PIC18F2XK20 TYPICAL RC_RUN IDD
              5.0
              4.5
              4.0                                                                          16 MHz
              3.5
              3.0
  IDD (mA)
              2.5
                                                                                             8 MHz
              2.0
              1.5
                                                                                            4 M Hz
              1.0
                                                                                            1 MHz
              0.5
              0.0
                            1.8   2         2.2     2.4    2.6              2.8       3              3.2    3.4       3.6
                                                                 VDD (V)
FIGURE 27-6:                          PIC18F4XK20/PIC18F2XK20 MAXIMUM RC_RUN IDD
                                                                                          16 MHz
                        4
             IDD (mA)
                        3                                                                  8 MHz
                                                                                           4 MHz
                        1
                                                                                          1 MHz
                        0
                            1.8   2        2.2     2.4     2.6             2.8    3                 3.2    3.4       3.6
                                                                 VDD (V)
 2010 Microchip Technology Inc.                                                                            DS41303G-page 405
PIC18F2XK20/4XK20
FIGURE 27-7:                     PIC18F4XK20/PIC18F2XK20 TYPICAL RC_IDLE 31 KHZ IDD
                                                                                   125°C
               5
    IDD (uA)
               4                                                                 85°C
                                                                                 25°C
                                                                                    -40°C
               3
               1
                   1.8       2         2.2     2.4    2.6              2.8   3             3.2        3.4        3.6
                                                            VDD (V)
FIGURE 27-8:                     PIC18F4XK20/PIC18F2XK20 MAXIMUM RC_IDLE 31 KHZ IDD
               35
                                                                                   125°C
               30
               25
               20
    IDD (uA)
               15
                                                                                  85°C
               10
                                                                                 25°C
                                                                                    -40°C
                   5
                   0
                       1.8       2      2.2    2.4     2.6             2.8   3             3.2        3.4        3.6
                                                             VDD (V)
DS41303G-page 406                                                                            2010 Microchip Technology Inc.
                                                                   PIC18F2XK20/4XK20
FIGURE 27-9:                 PIC18F4XK20/PIC18F2XK20 TYPICAL RC_IDLE IDD
                2.5
                2.0
                                                                             16 MHz
                1.5
     IDD (mA)
                                                                              8 MHz
                1.0
                                                                             4 MHz
                0.5
                                                                             1 MHz
                0.0
                       1.8       2   2.2   2.4     2.6             2.8   3            3.2   3.4       3.6
                                                         VDD (V)
FIGURE 27-10:                PIC18F4XK20/PIC18F2XK20 MAXIMUM RC_IDLE IDD
                3.0
                2.5
                                                                             16 MHz
                2.0
     IDD (mA)
                1.5
                                                                              8 MHz
                1.0
                                                                             4 MHz
                                                                             1 MHz
                0.5
                0.0
                      1.8    2       2.2   2.4     2.6             2.8   3            3.2    3.4       3.6
                                                         VDD (V)
 2010 Microchip Technology Inc.                                                              DS41303G-page 407
PIC18F2XK20/4XK20
FIGURE 27-11:              PIC18F4XK20/PIC18F2XK20 TYPICAL PRI_RUN IDD (EC)
                16
                14
                                                                           64 MHz
                12
                10
                                                                           40 MHz
     IDD (mA)
                                                                           20 MHz
                 4
                                                                           16 MHz
                                                                            10 MHz
                 2
                                                                            4 MHz
                 0
                     1.8   2      2.2     2.4    2.6             2.8   3            3.2       3.4         3.6
                                                       VDD (V)
FIGURE 27-12:              PIC18F4XK20/PIC18F2XK20 MAXIMUM PRI_RUN IDD (EC)
                18
                16
                                                                           64 MHz
                14
                12
                10                                                         40 MHz
    IDD (mA)
                 6
                                                                           20 MHz
                                                                           16 MHz
                 4
                                                                           10 MHz
                 2
                                                                           4 MHz
                 0
                     1.8   2      2.2    2.4     2.6             2.8   3            3.2       3.4        3.6
                                                       VDD (V)
DS41303G-page 408                                                                    2010 Microchip Technology Inc.
                                                                         PIC18F2XK20/4XK20
FIGURE 27-13:              PIC18F4XK20/PIC18F2XK20 TYPICAL PRI_RUN IDD (HS + PLL)
                16
                14
                                                                                      64 MHz
                12                                                                 (16 MHz Input)
                10
                                                                                         40 MHz
                                                                                    (10 MHz Input)
     IDD (mA)
                 4
                                                  16 MHz
                                               (4 MHz Input)
                 2
                 0
                     1.8   2       2.2   2.4             2.6             2.8   3           3.2       3.4      3.6
                                                               VDD (V)
FIGURE 27-14:              PIC18F4XK20/PIC18F2XK20 MAXIMUM PRI_RUN IDD (HS + PLL)
                20
                18
                16                                                                   64 MHz
                                                                                    (16 MHz Input)
                14
                12
                                                                                      40 MHz
     IDD (mA)
                10                                                                  (10 MHz Input)
                                                                16 MHz
                 4                                             (4 MHz Input)
                 0
                     1.8   2       2.2   2.4             2.6             2.8   3           3.2       3.4      3.6
                                                               VDD (V)
 2010 Microchip Technology Inc.                                                                      DS41303G-page 409
PIC18F2XK20/4XK20
FIGURE 27-15:                   PIC18F4XK20/PIC18F2XK20 TYPICAL PRI_IDLE IDD (EC)
                  6
                                                                                64 MHz
                  4
                                                                                40 MHz
    IDD (mA)
                  2                                                             20 MHz
                                                                                16 MHz
                  1                                                             10 MHz
                                                                                 4 MHz
                  0
                      1.8   2         2.2     2.4     2.6             2.8   3            3.2       3.4         3.6
                                                            VDD (V)
FIGURE 27-16:                   PIC18F4XK20/PIC18F2XK20 MAXIMUM PRI_IDLE IDD (EC)
                                                                                64 MHz
                  7
                  5
       IDD (mA)
                                                                                 40 MHz
                  4
                  3
                                                                                 20 MHz
                  2                                                              16 MHz
                                                                                 10 MHz
                  1
                                                                                 4 MHz
                  0
                      1.8   2         2.2     2.4     2.6             2.8   3             3.2       3.4         3.6
                                                            VDD (V)
DS41303G-page 410                                                                          2010 Microchip Technology Inc.
                                                                     PIC18F2XK20/4XK20
FIGURE 27-17:               PIC18F4XK20/PIC18F2XK20 IWDT – Delta IPD for Watchdog Timer, -40°C to
                            +125°C
                4.0
                3.5
                                                                               Max.
                3.0
                2.5
    IPD (uA)
                2.0
                1.5
                                                                               Typ.
                1.0
                0.5
                0.0
                      1.8   2       2.2     2.4      2.6             2.8   3          3.2          3.4         3.6
                                                           VDD (V)
FIGURE 27-18:               PIC18F4XK20/PIC18F2XK20 IBOR and IHLVD – Delta IPD for Brownout Reset
                            and High/Low Voltage Detect, -40°C to +125°C
                70
                60                                                                          Max. BOR
                50
                40
    IPD (uA)
                30                                                                          Max. HLVD
                                                                                            Typ. BOR
                20
                                                                                            Typ. HLVD
                10
                 0
                      1.8   2       2.2     2.4     2.6              2.8   3          3.2          3.4         3.6
                                                           VDD (V)
 2010 Microchip Technology Inc.                                                                       DS41303G-page 411
PIC18F2XK20/4XK20
FIGURE 27-19:                PIC18F4XK20/PIC18F2XK20 IOCSB – Delta IPD for Low Power Timer1 Oscillator
                 3.5
                 3.0                                                                    Max.
                                                                                -40°C to +85°C
                 2.5
                 2.0
   IPD (uA)
                 1.5
                 1.0
                                                                               Typ. 85°C
                                                                               Typ. 25°C
                 0.5
                 0.0
                       1.8   2      2.2     2.4      2.6             2.8   3             3.2        3.4        3.6
                                                           VDD (V)
FIGURE 27-20:                PIC18F4XK20/PIC18F2XK20 IOCSB – Typical Delta IPD for High Power Timer1
                             Oscillator
                  20
                                                                                85°C
                  18
                                                                                 25°C
                  16
     IPD (uA)
                  14                                                             -40°C
                  12
                  10
                       1.8   2      2.2      2.4     2.6             2.8   3             3.2         3.4        3.6
                                                           VDD (V)
DS41303G-page 412                                                                           2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
FIGURE 27-21:               PIC18F4XK20/PIC18F2XK20 IOCSB – Maximum Delta IPD for High Power Timer1
                            Oscillator
                 42
                 40                                                                 85°C
                 38
                                                                                    25°C
                 36
     IPD (uA)
                 34
                                                                                    -40°C
                 32
                 30
                 28
                      1.8       2    2.2     2.4     2.6              2.8       3           3.2    3.4      3.6
                                                           VDD (V)
FIGURE 27-22:               PIC18F4XK20/PIC18F2XK20 ICVREF – Delta IPD for Comparator Voltage
                            Reference, -40°C to +125°C
             80
             70
                                                                                    Max.
             60
             50
     (uA)
             40
    IPD
                                                                                    Typ.
             30
             20
             10
                 0
                     1.8    2       2.2     2.4     2.6              2.8    3              3.2    3.4      3.6
                                                          VDD (V)
 2010 Microchip Technology Inc.                                                                   DS41303G-page 413
PIC18F2XK20/4XK20
FIGURE 27-23:               PIC18F4XK20/PIC18F2XK20 IAD – Typical Delta IDD for ADC, 25°C to +125°C
                            (Run Mode, ADC on, but not converting)
                340
                320                                                                  125°C
                300                                                                  85°C
                280
      (uA)
                                                                                     25°C
                260
    IDD
                240
                220
                200
                180
                      1.8    2      2.2      2.4     2.6             2.8   3   3.2           3.4     3.6
                                                           VDD (V)
FIGURE 27-24:               PIC18F4XK20/PIC18F2XK20 IAD – Maximum Delta IDD for ADC, 25°C to +125°C
                            (Run Mode, ADC on, but not converting)
                440
                                                                                     125°C
                420
                                                                                     85°C
                400
                380
                                                                                     25°C
                360
                340
    IDD (uA)
                320
                300
                280
                260
                240
                220
                      1.8    2      2.2      2.4     2.6             2.8   3   3.2           3.4     3.6
                                                           VDD (V)
DS41303G-page 414                                                               2010 Microchip Technology Inc.
                                                                    PIC18F2XK20/4XK20
FIGURE 27-25:               PIC18F4XK20/PIC18F2XK20 ICOMP – Typical Delta IPD for Comparator in Low
                            Power Mode, -40°C to +125°C
                7.0
                                                                                    125°C
                6.5
                                                                                    85°C
                6.0
                5.5
    IPD (uA)
                                                                                    25°C
                5.0
                4.5
                                                                                    -40°C
                4.0
                3.5
                      1.8   2       2.2     2.4     2.6             2.8   3   3.2           3.4      3.6
                                                          VDD (V)
FIGURE 27-26:               PIC18F4XK20/PIC18F2XK20 ICOMP – Maximum Delta IPD for Comparator in
                            Low Power Mode, -40°C to +125°C
                16
                                                                                    125°C
                15
                                                                                    85°C
                14
    IPD (uA)
                13                                                                   25°C
                12
                                                                                    -40°C
                11
                10
                      1.8   2      2.2     2.4      2.6             2.8   3   3.2           3.4      3.6
                                                          VDD (V)
 2010 Microchip Technology Inc.                                                             DS41303G-page 415
PIC18F2XK20/4XK20
FIGURE 27-27:                PIC18F4XK20/PIC18F2XK20 ICOMP – Typical Delta IPD for Comparator in High
                             Power Mode, -40°C to +125°C
                 55
                 50                                                                      125°C
                                                                                          85°C
                 45
     IPD (uA)
                                                                                         25°C
                 40
                 35                                                                     -40°C
                 30
                       1.8   2       2.2     2.4      2.6              2.8   3    3.2             3.4    3.6
                                                            VDD (V)
FIGURE 27-28:                PIC18F4XK20/PIC18F2XK20 ICOMP – Maximum Delta IPD for Comparator in
                             High Power Mode, -40°C to +125°C
                 95
                                                                                       125°C
                 90
                 85                                                                    85°C
                 80
   IPD (uA)
                                                                                        25°C
                 75
                 70
                                                                                        -40°C
                 65
                 60
                      1.8    2      2.2     2.4      2.6              2.8    3   3.2             3.4    3.6
                                                           VDD (V)
DS41303G-page 416                                                                  2010 Microchip Technology Inc.
                                                                                           PIC18F2XK20/4XK20
FIGURE 27-29:                                             PIC18F4XK20/PIC18F2XK20 COMPARATOR OFFSET (LOW POWER, VDD = 1.8V)
                                           70
                                           60
                                                                                                                     -40°C 3 sigma
                                           50
                                                                                                                     25°C 3 sigma
     Abs. Offset (mV)
                                                                                                                      85°C 3 sigma
                                           40
                                                                                                                                            a
                                                                                                                                     sigm
                                                                                                                             C3
                                                                                                                      125
                                                                                                                         °
                                           30
                                                                                                                                Typical
                                           20
                                           10
                                            0
                                                0.0       0.2    0.4    0.6    0.8           1.0       1.2    1.4    1.6                   1.8
                                                                                      VREF (V)
FIGURE 27-30:                                             PIC18F4XK20/PIC18F2XK20 COMPARATOR OFFSET (LOW POWER, VDD = 3.6V)
                                           70
                                                                                                                      -40°C 3 sigma
                                           60
                                                                                                                                             a
                                                                                                                                       igm
                                                                                                                                     3s
                                                                                                                                °C
                                           50                                                                              25
                        Abs. Offset (mV)
                                                                                                                                  a
                                                                                                                                 m
                                                                                                                                sig
                                           40
                                                                                                                            3
                                                                                                                           °C
                                                                                                                                        a
                                                                                                                                       m
                                                                                                                      85
                                                                                                                                     sig
                                                                                                                                 3
                                                                                                                                C
                                           30
                                                                                                                             5°
                                                                                                                                     Typical
                                                                                                                           12
                                           20
                                           10
                                                0
                                                    0.0    0.4    0.8    1.2    1.6              2.0    2.4    2.8    3.2                   3.6
                                                                                      VREF (V)
 2010 Microchip Technology Inc.                                                                                       DS41303G-page 417
PIC18F2XK20/4XK20
FIGURE 27-31:                              PIC18F4XK20/PIC18F2XK20 COMPARATOR OFFSET (HIGH POWER, VDD = 1.8V)
                            45
                            40
                            35                                                                             -40°C 3 sigma
                                                                                                            25°C 3 sigma
                            30
                                                                                                            ma
                                                                                                       3 sig
     Abs. Offset (mV)
                                                                                                85°C               igma
                                                                                                                C3s
                            25                                                                              125°
                            20
                                                                                                                    Typical
                            15
                            10
                             0
                                 0.0       0.2    0.4    0.6     0.8              1.0   1.2   1.4          1.6                  1.8
                                                                       VREF (V)
FIGURE 27-32:                              PIC18F4XK20/PIC18F2XK20 COMPARATOR OFFSET (HIGH POWER, VDD = 3.6V)
                            45
                                                                                                           -40°C 3 sigma
                            40
                            35                                                                               25°C 3 sigma
                                                                                                                             a
                                                                                                                        sigm
                            30                                                                                  C3
                                                                                                            85°
         Abs. Offset (mV)
                                                                                                                                a
                                                                                                                          igm
                            25                                                                                          3s
                                                                                                                  5°C
                                                                                                             12
                            20
                                                                                                                    Typical
                            15
                            10
                                     0.0    0.4    0.8    1.2    1.6              2.0   2.4   2.8          3.2                  3.6
                                                                       VREF (V)
DS41303G-page 418                                                                               2010 Microchip Technology Inc.
                                                               PIC18F2XK20/4XK20
FIGURE 27-33:                PIC18F4XK20/PIC18F2XK20 TYPICAL FIXED VOLTAGE REFERENCE
              1.205
              1.200                                                                    25°C
                                                                                       -40°C
                                                                                       85°C
              1.195
    FVR (V)
              1.190
              1.185
                                                                                       125°C
              1.180
              1.175
                       1.8    2      2.2    2.4    2.6             2.8           3             3.2         3.4      3.6
                                                         VDD (V)
FIGURE 27-34:                PIC18F4XK20/PIC18F2XK20 TYPICAL FIXED VOLTAGE REFERENCE (MAX./
                             MIN. = 1.2V +/- 50MV FROM -40°C TO +85°C)
              1.205
              1.200                                                           3.6V
                                                                                2.0V
              1.195
    FVR (V)
              1.190
                                                                               1.8V
              1.185
              1.180
              1.175
                      -40    -20       0      20          40             60            80            100          120
                                                         Temp. (°C)
 2010 Microchip Technology Inc.                                                                             DS41303G-page 419
PIC18F2XK20/4XK20
FIGURE 27-35:              PIC18F4XK20/PIC18F2XK20 TTL BUFFER VIH
              1.8
                                                                                    Min.
              1.6
              1.4
              1.2
    VIH (V)
                                                                                   -40°C
                                                                                   25°C
              1.0
                                                                               85°C
                                                                                125°C
              0.8
              0.6
              0.4
                    1.8   2.0    2.2     2.4     2.6             2.8   3.0   3.2           3.4     3.6
                                                       VDD (V)
FIGURE 27-36:              PIC18F4XK20/PIC18F2XK20 SCHMITT TRIGGER BUFFER VIH
              3.0
              2.8
                                                                                    Min.
              2.6
              2.4
              2.2
                                                                               -40°C
    VIH (V)
              2.0                                                                   25°C
                                                                                       125°C
                                                                               85°C
              1.8
              1.6
              1.4
              1.2
              1.0
                    1.8   2.0    2.2     2.4     2.6             2.8   3.0   3.2           3.4     3.6
                                                       VDD (V)
DS41303G-page 420                                                             2010 Microchip Technology Inc.
                                                                  PIC18F2XK20/4XK20
FIGURE 27-37:               PIC18F4XK20/PIC18F2XK20 TTL BUFFER VIL
               1.2
                                                                                    -40°C
               1.0                                                                  25°C
                                                                                85°C
                                                                                    125°C
               0.8
     VIL (V)
               0.6
                                                                                     Max.
               0.4
               0.2
               0.0
                     1.8   2.0     2.2    2.4     2.6             2.8   3.0   3.2           3.4       3.6
                                                        VDD (V)
FIGURE 27-38:               PIC18F4XK20/PIC18F2XK20 SCHMITT TRIGGER BUFFER VIL
               1.6
               1.4                                                             -40°C
                                                                                     25°C
                                                                               85°C 125°C
               1.2
               1.0
     VIL (V)
               0.8
                                                                                     Max.
               0.6
               0.4
               0.2
                     1.8   2.0     2.2    2.4     2.6             2.8   3.0   3.2           3.4       3.6
                                                        VDD (V)
 2010 Microchip Technology Inc.                                                             DS41303G-page 421
PIC18F2XK20/4XK20
FIGURE 27-39:                 PIC18F4XK20/PIC18F2XK20 VOH VS. IOH (-40°C TO +125°C)
               3.6
               2.4
                                                         Typ. 3.0V
     VOH (V)
               1.8
                                                                                               Typ. 3.6V
                                             Min. 3.0V
               1.2
                             Typ. 1.8V
               0.6
                                                                           Min. 3.6V
                         Min. 1.8V
                 0
                     0                   5                           10                   15                20                   25
                                                                          IOH (mA)
FIGURE 27-40:                 PIC18F4XK20/PIC18F2XK20 VOL VS. IOL (-40°C TO +125°C)
               1.8
                                                                          Max. 1.8V
                                                                                                                 Max. 3.0V
               1.5
                                                                                                                  Max. 3.6V
               1.2
    VOL (V)
               0.9
               0.6                                                                     1.8V
                                                                                                                 3.0V
                                                                                                                        3.6V
               0.3
                 0
                     0                   5                           10                   15                20                  25
                                                                          IOL (mA)
DS41303G-page 422                                                                                           2010 Microchip Technology Inc.
                                                                           PIC18F2XK20/4XK20
FIGURE 27-41:                             PIC18F4XK20/PIC18F2XK20 PIN INPUT LEAKAGE
                         1000
                                                                                                      RA2 Max.
                                                                                           RA3 Max.
                                                                                                      I/O Ports Max.
                          100
                                                                                                          RA2 Typ.
    Input Leakage (nA)
                                                                                               RA3 Typ.
                                                                                                     I/O Ports Typ.
                           10
                            1
                                25   30      35    40   45    50      55        60   65   70         75         80     85
                                                                   Temp. (°C)
 2010 Microchip Technology Inc.                                                                              DS41303G-page 423
PIC18F2XK20/4XK20
FIGURE 27-42:                            PIC18F4XK20/PIC18F2XK20 TYPICAL HF-INTOSC FREQUENCY
                           16.08
                           16.00                                                                         25°C
                           15.92
    Frequency (MHz)
                                                                                                         85°C
                           15.84                                                                         -40°C
                           15.76
                                                                                                         125°C
                           15.68
                                   1.8    2     2.2       2.4        2.6                2.8          3           3.2          3.4      3.6
                                                                           VDD (V)
FIGURE 27-43:                            PIC18F4XK20/PIC18F2XK20 TYPICAL HF-INTOSC FREQUENCY
                           16.80
                           16.64
                           16.48
                           16.32                                                               Max
                           16.16
         Frequency (MHz)
                           16.00                                                 3.0V
                           15.84
                           15.68                                                               Min
                           15.52
                           15.36
                           15.20
                                   -40    -20         0         20          40                60          80            100         120
                                                                           Temp. (°C)
DS41303G-page 424                                                                                                 2010 Microchip Technology Inc.
                                                                                   PIC18F2XK20/4XK20
FIGURE 27-44:                              PIC18F4XK20/PIC18F2XK20 TYPICAL LF-INTOSC FREQUENCY (MAX./MIN. =
                                           31.25 KHZ +/-15%)
                             33.25
                             32.25
                             31.25
    Frequency (kHz)
                                                                                                                       25°C
                                                                                                                       -40°C
                             30.25                                                                                     85°C
                             29.25
                                                                                                                       125°C
                             28.25
                                     1.8   2      2.2       2.4        2.6             2.8           3           3.2            3.4     3.6
                                                                             VDD (V)
FIGURE 27-45:                              PIC18F4XK20/PIC18F2XK20 TYPICAL LF-INTOSC FREQUENCY (MAX./MIN. =
                                           31.25 KHZ +/-15%)
                             33.25
                             32.25
                                                                                                    1.8V
                             31.25
           Frequency (kHz)
                                                                                                    2.5V
                                                                                                  3.6V   3.0V
                             30.25
                             29.25
                             28.25
                                     -40    -20         0         20          40             60             80            100         120
                                                                             Temp. (°C)
 2010 Microchip Technology Inc.                                                                                                DS41303G-page 425
PIC18F2XK20/4XK20
NOTES:
DS41303G-page 426    2010 Microchip Technology Inc.
                                                                 PIC18F2XK20/4XK20
28.0     PACKAGING INFORMATION
28.1     Package Marking Information
       28-Lead PDIP                                                Example
                 XXXXXXXXXXXXXXXXX                                               PIC18F25K20-E/SP
                 XXXXXXXXXXXXXXXXX                                               e3
                    YYWWNNN                                                           0810017
       28-Lead SOIC (7.50 mm)                                      Example
         XXXXXXXXXXXXXXXXXXXX                                               PIC18F25K20-E/SO e3
         XXXXXXXXXXXXXXXXXXXX                                                    0810017
         XXXXXXXXXXXXXXXXXXXX
                YYWWNNN
       40-Lead PDIP                                                Example
                XXXXXXXXXXXXXXXXXX                                               PIC18F45K20-E/P e3
                XXXXXXXXXXXXXXXXXX                                                  0810017
                XXXXXXXXXXXXXXXXXX
                   YYWWNNN
                Legend: XX...X     Customer-specific information
                        Y          Year code (last digit of calendar year)
                        YY         Year code (last 2 digits of calendar year)
                        WW         Week code (week of January 1 is week ‘01’)
                        NNN        Alphanumeric traceability code
                            e3     Pb-free JEDEC designator for Matte Tin (Sn)
                           *       This package is Pb-free. The Pb-free JEDEC designator ( e3 )
                                   can be found on the outer packaging for this package.
                Note:   In the event the full Microchip part number cannot be marked on one line, it will
                        be ca rried over to the next line, thus lim iting the nu mber of av ailable
                        characters for customer-specific information.
 2010 Microchip Technology Inc.                                                                     DS41303G-page 427
PIC18F2XK20/4XK20
Package Marking Information (Continued)
             28-Lead SSOP                 Example
               XXXXXXXXXXXXXXX               PIC18F25K20-E/SS
               XXXXXXXXXXXXXXX               e3
               XXXXXXXXXXXXXXX
                      YYWWNNN                       0810017
             28-Lead QFN                  Example
               XXXXXXXX                      18F24K20
               XXXXXXXX                      -E/ML e3
               YYWWNNN                       0810017
             44-Lead QFN                  Example
               XXXXXXXXXX                    PIC18F45K20
               XXXXXXXXXX                    -E/ML e3
               XXXXXXXXXX                      0810017
                YYWWNNN
             44-Lead TQFP                 Example
               XXXXXXXXXX                    PIC18F44K20
               XXXXXXXXXX                    -E/PT e3
               XXXXXXXXXX                         0810017
                 YYWWNNN
             28-Lead UQFN                 Example
                     XXXXX                        PIC18
                    XXXXXX                        F23K20
                    XXXXXX                        -E/MV e3
                    YWWNNN                        810017
DS41303G-page 428                                      2010 Microchip Technology Inc.
                                                                         PIC18F2XK20/4XK20
28.2      Package Details
The following sections give the technical details of the packages.
/HDG6NLQQ\3ODVWLF'XDO,Q/LQH63±PLO%RG\>63',3@
  1RWH     )RUWKHPRVWFXUUHQWSDFNDJHGUDZLQJVSOHDVHVHHWKH0LFURFKLS3DFNDJLQJ6SHFLILFDWLRQORFDWHGDW
            KWWSZZZPLFURFKLSFRPSDFNDJLQJ
 NOTE 1
                                                                           E1
            1    2 3
   A                                                                      A2
                                                                                   L                                c
 A1                        b1
                           b                                         e                              eB
                                                               8QLWV                   ,1&+(6
                                                   'LPHQVLRQ/LPLWV       0,1           120           0$;
                   1XPEHURI3LQV                                1                       
                   3LWFK                                         H                     %6&
                   7RSWR6HDWLQJ3ODQH                          $          ±             ±            
                   0ROGHG3DFNDJH7KLFNQHVV                     $                             
                   %DVHWR6HDWLQJ3ODQH                        $                    ±              ±
                   6KRXOGHUWR6KRXOGHU:LGWK                    (                             
                   0ROGHG3DFNDJH:LGWK                         (                             
                   2YHUDOO/HQJWK                                '                          
                   7LSWR6HDWLQJ3ODQH                          /                             
                   /HDG7KLFNQHVV                                F                             
                   8SSHU/HDG:LGWK                             E                             
                   /RZHU/HDG:LGWK                              E                             
                   2YHUDOO5RZ6SDFLQJ                       H%          ±             ±            
1RWHV
 3LQYLVXDOLQGH[IHDWXUHPD\YDU\EXWPXVWEHORFDWHGZLWKLQWKHKDWFKHGDUHD
 6LJQLILFDQW&KDUDFWHULVWLF
 'LPHQVLRQV'DQG(GRQRWLQFOXGHPROGIODVKRUSURWUXVLRQV0ROGIODVKRUSURWUXVLRQVVKDOOQRWH[FHHGSHUVLGH
 'LPHQVLRQLQJDQGWROHUDQFLQJSHU$60(<0
       %6& %DVLF'LPHQVLRQ7KHRUHWLFDOO\H[DFWYDOXHVKRZQZLWKRXWWROHUDQFHV
                                                                                          0LFURFKLS 7HFKQRORJ\ 'UDZLQJ &%
 2010 Microchip Technology Inc.                                                                               DS41303G-page 429
PIC18F2XK20/4XK20
    /HDG3ODVWLF6PDOO2XWOLQH62±:LGHPP%RG\>62,&@
      1RWH     )RUWKHPRVWFXUUHQWSDFNDJHGUDZLQJVSOHDVHVHHWKH0LFURFKLS3DFNDJLQJ6SHFLILFDWLRQORFDWHGDW
                KWWSZZZPLFURFKLSFRPSDFNDJLQJ
                                               D
                                N
                                                                            E
                                                                   E1
                NOTE 1
                                1 2 3
                                                          e
                                        b
                                                                                                          h
                                                                        α
                                                                                              h
                                                                                φ                                          c
                    A                                              A2
                                                                                        L
                    A1                                                                 L1                        β
                                                                  8QLWV                     0,//,0(7(56
                                                       'LPHQVLRQ/LPLWV         0,1               120           0$;
                        1XPEHURI3LQV                              1                             
                        3LWFK                                       H                        %6&
                        2YHUDOO+HLJKW                              $            ±                 ±            
                        0ROGHG3DFNDJH7KLFNQHVV                   $                          ±             ±
                        6WDQGRII                                $                          ±            
                        2YHUDOO:LGWK                               (                        %6&
                        0ROGHG3DFNDJH:LGWK                       (                        %6&
                        2YHUDOO/HQJWK                              '                        %6&
                        &KDPIHURSWLRQDO                          K                          ±            
                        )RRW/HQJWK                                 /                          ±            
                        )RRWSULQW                                  /                         5()
                        )RRW$QJOH7RS                                                          ±             
                        /HDG7KLFNQHVV                              F                          ±            
                        /HDG:LGWK                                  E                          ±            
                        0ROG'UDIW$QJOH7RS                                                    ±            
                        0ROG'UDIW$QJOH%RWWRP                                                 ±            
    1RWHV
     3LQYLVXDOLQGH[IHDWXUHPD\YDU\EXWPXVWEHORFDWHGZLWKLQWKHKDWFKHGDUHD
     6LJQLILFDQW&KDUDFWHULVWLF
     'LPHQVLRQV'DQG(GRQRWLQFOXGHPROGIODVKRUSURWUXVLRQV0ROGIODVKRUSURWUXVLRQVVKDOOQRWH[FHHGPPSHUVLGH
     'LPHQVLRQLQJDQGWROHUDQFLQJSHU$60(<0
           %6& %DVLF'LPHQVLRQ7KHRUHWLFDOO\H[DFWYDOXHVKRZQZLWKRXWWROHUDQFHV
           5() 5HIHUHQFH'LPHQVLRQXVXDOO\ZLWKRXWWROHUDQFHIRULQIRUPDWLRQSXUSRVHVRQO\
                                                                                     0LFURFKLS 7HFKQRORJ\ 'UDZLQJ &%
DS41303G-page 430                                                                                       2010 Microchip Technology Inc.
                                                                              PIC18F2XK20/4XK20
/HDG3ODVWLF'XDO,Q/LQH3±PLO%RG\>3',3@
  1RWH      )RUWKHPRVWFXUUHQWSDFNDJHGUDZLQJVSOHDVHVHHWKH0LFURFKLS3DFNDJLQJ6SHFLILFDWLRQORFDWHGDW
             KWWSZZZPLFURFKLSFRPSDFNDJLQJ
NOTE 1
                                                                              E1
             1 2 3
  A                                                                      A2
                                                                                  L                                  c
                                      b1
  A1
                                      b                              e                              eB
                                                               8QLWV                  ,1&+(6
                                                   'LPHQVLRQ/LPLWV       0,1           120           0$;
                   1XPEHURI3LQV                                1                       
                   3LWFK                                         H                    %6&
                   7RSWR6HDWLQJ3ODQH                          $            ±           ±            
                   0ROGHG3DFNDJH7KLFNQHVV                     $                    ±            
                   %DVHWR6HDWLQJ3ODQH                        $                    ±              ±
                   6KRXOGHUWR6KRXOGHU:LGWK                    (                    ±            
                   0ROGHG3DFNDJH:LGWK                         (                    ±            
                   2YHUDOO/HQJWK                                '                   ±           
                   7LSWR6HDWLQJ3ODQH                          /                    ±            
                   /HDG7KLFNQHVV                                F                    ±            
                   8SSHU/HDG:LGWK                             E                    ±            
                   /RZHU/HDG:LGWK                              E                    ±            
                   2YHUDOO5RZ6SDFLQJ                       H%            ±           ±            
1RWHV
 3LQYLVXDOLQGH[IHDWXUHPD\YDU\EXWPXVWEHORFDWHGZLWKLQWKHKDWFKHGDUHD
 6LJQLILFDQW&KDUDFWHULVWLF
 'LPHQVLRQV'DQG(GRQRWLQFOXGHPROGIODVKRUSURWUXVLRQV0ROGIODVKRUSURWUXVLRQVVKDOOQRWH[FHHGSHUVLGH
 'LPHQVLRQLQJDQGWROHUDQFLQJSHU$60(<0
       %6& %DVLF'LPHQVLRQ7KHRUHWLFDOO\H[DFWYDOXHVKRZQZLWKRXWWROHUDQFHV
                                                                                          0LFURFKLS 7HFKQRORJ\ 'UDZLQJ &%
       2010 Microchip Technology Inc.                                                                              DS41303G-page 431
PIC18F2XK20/4XK20
    /HDG3ODVWLF6KULQN6PDOO2XWOLQH66±PP%RG\>6623@
      1RWH       )RUWKHPRVWFXUUHQWSDFNDJHGUDZLQJVSOHDVHVHHWKH0LFURFKLS3DFNDJLQJ6SHFLILFDWLRQORFDWHGDW
                  KWWSZZZPLFURFKLSFRPSDFNDJLQJ
                                           D
                          N
                                                                        E
                                                                 E1
                          1 2
                                   b
                    NOTE 1
                                                          e
                                                                              c
              A                                                         A2
                                                                                                                     φ
               A1
                                                                                      L1                                 L
                                                                  8QLWV               0,//,0(7(56
                                                       'LPHQVLRQ/LPLWV      0,1           120            0$;
                       1XPEHURI3LQV                               1                       
                       3LWFK                                        H                    %6&
                       2YHUDOO+HLJKW                               $          ±             ±            
                       0ROGHG3DFNDJH7KLFNQHVV                    $                             
                       6WDQGRII                                   $                    ±             ±
                       2YHUDOO:LGWK                                (                             
                       0ROGHG3DFNDJH:LGWK                        (                             
                       2YHUDOO/HQJWK                               '                           
                       )RRW/HQJWK                                  /                             
                       )RRWSULQW                                   /                    5()
                       /HDG7KLFNQHVV                               F                    ±            
                       )RRW$QJOH                                                                     
                       /HDG:LGWK                                   E                    ±            
    1RWHV
     3LQYLVXDOLQGH[IHDWXUHPD\YDU\EXWPXVWEHORFDWHGZLWKLQWKHKDWFKHGDUHD
     'LPHQVLRQV'DQG(GRQRWLQFOXGHPROGIODVKRUSURWUXVLRQV0ROGIODVKRUSURWUXVLRQVVKDOOQRWH[FHHGPPSHUVLGH
     'LPHQVLRQLQJDQGWROHUDQFLQJSHU$60(<0
           %6& %DVLF'LPHQVLRQ7KHRUHWLFDOO\H[DFWYDOXHVKRZQZLWKRXWWROHUDQFHV
           5() 5HIHUHQFH'LPHQVLRQXVXDOO\ZLWKRXWWROHUDQFHIRULQIRUPDWLRQSXUSRVHVRQO\
                                                                                             0LFURFKLS 7HFKQRORJ\ 'UDZLQJ &%
DS41303G-page 432                                                                                 2010 Microchip Technology Inc.
                                                                              PIC18F2XK20/4XK20
/HDG3ODVWLF4XDG)ODW1R/HDG3DFNDJH0/±[PP%RG\>4)1@
ZLWKPP&RQWDFW/HQJWK
  1RWH      )RUWKHPRVWFXUUHQWSDFNDJHGUDZLQJVSOHDVHVHHWKH0LFURFKLS3DFNDJLQJ6SHFLILFDWLRQORFDWHGDW
             KWWSZZZPLFURFKLSFRPSDFNDJLQJ
                               D                                                         D2
                                                         EXPOSED
                                                             PAD
                                                         E
                                                                                                               b
                                                                  E2
                                                   2                     2
                                                   1                     1                                         K
                                           N                                    N
                                                             NOTE 1                                      L
                          TOP VIEW                                                  BOTTOM VIEW
        A3                                          A1
                                                                 8QLWV              0,//,0(7(56
                                                  'LPHQVLRQ/LPLWV           0,1       120         0$;
                  1XPEHURI3LQV                                  1                     
                  3LWFK                                           H                  %6&
                  2YHUDOO+HLJKW                                  $                         
                  6WDQGRII                                      $                         
                  &RQWDFW7KLFNQHVV                              $                   5()
                  2YHUDOO:LGWK                                   (                  %6&
                  ([SRVHG3DG:LGWK                              (                         
                  2YHUDOO/HQJWK                                  '                  %6&
                  ([SRVHG3DG/HQJWK                             '                         
                  &RQWDFW:LGWK                                   E                         
                  &RQWDFW/HQJWK                                  /                         
                  &RQWDFWWR([SRVHG3DG                          .                  ±           ±
1RWHV
 3LQYLVXDOLQGH[IHDWXUHPD\YDU\EXWPXVWEHORFDWHGZLWKLQWKHKDWFKHGDUHD
 3DFNDJHLVVDZVLQJXODWHG
 'LPHQVLRQLQJDQGWROHUDQFLQJSHU$60(<0
       %6& %DVLF'LPHQVLRQ7KHRUHWLFDOO\H[DFWYDOXHVKRZQZLWKRXWWROHUDQFHV
       5() 5HIHUHQFH'LPHQVLRQXVXDOO\ZLWKRXWWROHUDQFHIRULQIRUPDWLRQSXUSRVHVRQO\
                                                                                         0LFURFKLS 7HFKQRORJ\ 'UDZLQJ &%
     2010 Microchip Technology Inc.                                                                           DS41303G-page 433
PIC18F2XK20/4XK20
/HDG3ODVWLF4XDG)ODW1R/HDG3DFNDJH0/±[PP%RG\>4)1@
ZLWKPP&RQWDFW/HQJWK
  1RWH   )RUWKHPRVWFXUUHQWSDFNDJHGUDZLQJVSOHDVHVHHWKH0LFURFKLS3DFNDJLQJ6SHFLILFDWLRQORFDWHGDW
          KWWSZZZPLFURFKLSFRPSDFNDJLQJ
DS41303G-page 434                                                                    2010 Microchip Technology Inc.
                                                              PIC18F2XK20/4XK20
  Note:     For the most current package drawings, please see the Microchip Packaging Specification located at
            http://www.microchip.com/packaging
 2010 Microchip Technology Inc.                                                                DS41303G-page 435
PIC18F2XK20/4XK20
  Note:   For the most current package drawings, please see the Microchip Packaging Specification located at
          http://www.microchip.com/packaging
DS41303G-page 436                                                                    2010 Microchip Technology Inc.
                                                                            PIC18F2XK20/4XK20
/HDG3ODVWLF4XDG)ODW1R/HDG3DFNDJH0/±[PP%RG\>4)1@
   1RWH        )RUWKHPRVWFXUUHQWSDFNDJHGUDZLQJVSOHDVHVHHWKH0LFURFKLS3DFNDJLQJ6SHFLILFDWLRQORFDWHGDW
                KWWSZZZPLFURFKLSFRPSDFNDJLQJ
                                      D                                                         D2
                                                           EXPOSED
                                                               PAD
                                                                       E2
                                                                                                                      b
                                                      2                     2
                                                      1                     1
                                                N                                 N                                  K
                                                              NOTE 1                                  L
                                 TOP VIEW                                                BOTTOM VIEW
           A3                                     A1
                                                                  8QLWV               0,//,0(7(56
                                                    'LPHQVLRQ/LPLWV        0,1            120            0$;
                     1XPEHURI3LQV                                1                        
                     3LWFK                                         H                     %6&
                     2YHUDOO+HLJKW                                $                              
                     6WDQGRII                                    $                              
                     &RQWDFW7KLFNQHVV                            $                     5()
                     2YHUDOO:LGWK                                 (                     %6&
                     ([SRVHG3DG:LGWK                            (                              
                     2YHUDOO/HQJWK                                '                     %6&
                     ([SRVHG3DG/HQJWK                           '                              
                     &RQWDFW:LGWK                                 E                              
                     &RQWDFW/HQJWK                                /                              
                     &RQWDFWWR([SRVHG3DG                        .                    ±              ±
1RWHV
 3LQYLVXDOLQGH[IHDWXUHPD\YDU\EXWPXVWEHORFDWHGZLWKLQWKHKDWFKHGDUHD
 3DFNDJHLVVDZVLQJXODWHG
 'LPHQVLRQLQJDQGWROHUDQFLQJSHU$60(<0
       %6& %DVLF'LPHQVLRQ7KHRUHWLFDOO\H[DFWYDOXHVKRZQZLWKRXWWROHUDQFHV
       5() 5HIHUHQFH'LPHQVLRQXVXDOO\ZLWKRXWWROHUDQFHIRULQIRUPDWLRQSXUSRVHVRQO\
                                                                                      0LFURFKLS 7HFKQRORJ\ 'UDZLQJ &%
 2010 Microchip Technology Inc.                                                                                 DS41303G-page 437
PIC18F2XK20/4XK20
/HDG3ODVWLF4XDG)ODW1R/HDG3DFNDJH0/±[PP%RG\>4)1@
  1RWH   )RUWKHPRVWFXUUHQWSDFNDJHGUDZLQJVSOHDVHVHHWKH0LFURFKLS3DFNDJLQJ6SHFLILFDWLRQORFDWHGDW
          KWWSZZZPLFURFKLSFRPSDFNDJLQJ
DS41303G-page 438                                                                    2010 Microchip Technology Inc.
                                                                           PIC18F2XK20/4XK20
/HDG3ODVWLF7KLQ4XDG)ODWSDFN37±[[PP%RG\PP>74)3@
   1RWH    )RUWKHPRVWFXUUHQWSDFNDJHGUDZLQJVSOHDVHVHHWKH0LFURFKLS3DFNDJLQJ6SHFLILFDWLRQORFDWHGDW
            KWWSZZZPLFURFKLSFRPSDFNDJLQJ
                                          D
                                              D1
                                                                       E
                    e
                                                              E1
                            N
                    b
                 NOTE 1           1 2 3
                                                                  NOTE 2
                                                                                A                       α
                c                                             φ
                        β                                                  A1                                      A2
                                                                  L                       L1
                                                              8QLWV                     0,//,0(7(56
                                                   'LPHQVLRQ/LPLWV             0,1            120          0$;
                    1XPEHURI/HDGV                               1                            
                    /HDG3LWFK                                    H                        %6&
                    2YHUDOO+HLJKW                                $                 ±           ±           
                    0ROGHG3DFNDJH7KLFNQHVV                      $                                
                    6WDQGRII                                    $                        ±           
                    )RRW/HQJWK                                   /                                 
                    )RRWSULQW                                     /                       5()
                    )RRW$QJOH                                                                        
                    2YHUDOO:LGWK                                 (                       %6&
                    2YHUDOO/HQJWK                                '                       %6&
                    0ROGHG3DFNDJH:LGWK                          (                      %6&
                    0ROGHG3DFNDJH/HQJWK                         '                      %6&
                    /HDG7KLFNQHVV                                F                         ±           
                    /HDG:LGWK                                    E                                 
                    0ROG'UDIW$QJOH7RS                                                             
                    0ROG'UDIW$QJOH%RWWRP                                                          
1RWHV
 3LQYLVXDOLQGH[IHDWXUHPD\YDU\EXWPXVWEHORFDWHGZLWKLQWKHKDWFKHGDUHD
 &KDPIHUVDWFRUQHUVDUHRSWLRQDOVL]HPD\YDU\
 'LPHQVLRQV'DQG(GRQRWLQFOXGHPROGIODVKRUSURWUXVLRQV0ROGIODVKRUSURWUXVLRQVVKDOOQRWH[FHHGPPSHUVLGH
 'LPHQVLRQLQJDQGWROHUDQFLQJSHU$60(<0
       %6& %DVLF'LPHQVLRQ7KHRUHWLFDOO\H[DFWYDOXHVKRZQZLWKRXWWROHUDQFHV
       5() 5HIHUHQFH'LPHQVLRQXVXDOO\ZLWKRXWWROHUDQFHIRULQIRUPDWLRQSXUSRVHVRQO\
                                                                                        0LFURFKLS 7HFKQRORJ\ 'UDZLQJ &%
 2010 Microchip Technology Inc.                                                                                   DS41303G-page 439
PIC18F2XK20/4XK20
/HDG3ODVWLF7KLQ4XDG)ODWSDFN37±[[PP%RG\PP>74)3@
  1RWH   )RUWKHPRVWFXUUHQWSDFNDJHGUDZLQJVSOHDVHVHHWKH0LFURFKLS3DFNDJLQJ6SHFLILFDWLRQORFDWHGDW
          KWWSZZZPLFURFKLSFRPSDFNDJLQJ
DS41303G-page 440                                                                    2010 Microchip Technology Inc.
                                                                PIC18F2XK20/4XK20
APPENDIX A:              REVISION HISTORY                       Revision E (04/2009)
                                                                Revised dat a s heet ti tle; R evised Power-Managed
Revision A (07/2006)
                                                                Modes, Perip heral H ighlights, and Anal og F eatures;
Original data sheet for PIC18F2XK20/4XK20 devices.              Revised 26.2, DC Char. table.
Revision B (03/2007)                                            Revision F (09/2009)
Added     part n   umbers PIC   18F26K20 an d                   Changed t he v alues i n th e “Ex treme Low-Power
PIC18F46K20; R eplaced D evelopment Support                     Management with nanoWatt XLP” section; Added new
Section; Replaced Package Drawings.                             Note 2 to Pi n D iagrams; U pdated Electrical
                                                                Characteristics section; Add ed ch arts to the    DS
                                                                Characteristics se ction; Removed Prel iminary la bel;
Revision C (10/2007)                                            Added UQFN to Pi n D iagrams; Added the 2 8-pin
Revised Table 1, DIL Pins 34 and 35; Table 2, Pins 22           UQFN to Table 3-1; Updated MSSP section (Register
and 24; Table 1-2, Pins RB1 and RB3; Table 1-3, Pins            17-3; c hanging SSP ADD<6:0> to SSP ADD<7:0>);
RB1 and RB3; Revised Sections 4.3, 4.4, 4.4.1, 4.4.2,           Updated th e D evelopment Sup port sec tion d eleting
4.4.4; R evised Table 4- 3, Note 2; R evised Table 6- 1;        section 25. 7; Ad ded the 2 8-Lead U QFN p ackage
Revise Section 7 .8: Rev ised S ection 9. 2; Revised            marking diagrams and the 28-Lead Plastic Ultra Thin
Examples 1 0-1 a nd 1 0-2; Revised T able 10-3 , Pin s          Quad Flat, No Lead Package (MV) - 4X4X0.5 mm Body
RB1 and R B3; R evised Sec tions 12. 2 thro ugh 12. 5;          (UQFN) p ackage to Pac kaging In formation s ection;
Revised Register 16-1, bit 3-0; Revised Sections 16.1,          Other minor corrections.
16.2, 16.4.4; R evised R egister 16-2, bit 6-4; R evised
Table 1 6-2, Note 2 ; R evised R egister 1 7-1, bit 6;          Revision G (01/2010)
Revised Register 17- 3; R evised Table 17 -4; R evised          Updated Fi gure 9-1 ; R eviewed Section 26 (Ele ctrical
Register 19-1, added N ote 2; R evised R egister 20-3,          Characteristics); Add ed Fi gures 27 -29, 27-30, 27-3 1
bits 5 and 4; Revised Register 23-4, bit 1; Revised Reg-        and 27-32 to Section 27 (D C and AC C haracteristics
ister 23-12, bit 7-5; Revised Section 23.3; Revised Sec-        Graphs and Tables); R eviewed Produ ct Iden tification
tion 24 .1.1, instruction set des criptions; Rev ised           System section.
Section 26.0, voltage on MCLR; Revised DC Charac-
teristics 2 6.2, 26.3 , 26 .4 26 .5, 2 6.6, 26. 7, 26 .8 an d
26.10; Revised Tables 26-1, 26-6, 26-7, 26-9, 26-23.
Revision D (08/2008)
Update to Peripher al Highlights (USART m odule);
Deleted Section 2.2.6 (Oscillator Transitions); Revised
Sections 2.5.3, 2.9; Added Section 2.9.3 (Clock Switch
Timing); Deleted Section 2.10.4 (Clock Switching Tim-
ing); Replaced BAUDCTL with BAUDCON throughout;
Revised T able 5-2 ( PLUSW0, P LUSW1, PLU SW2);
Add Note 1 to Table 7-1 (EEADRH); Revised Section
6.4.4 and Register 16-2 (FLT0 pin); Revised Registers
17-2 and 17-5 ( SSPEN); R evised R egister 17 -6
(SEN); Added new p aragraph after Figure 18- 2;
Revised Note, Section 18.1. 1; Deleted Note, S ection
18.1.2; Added new Note 2, Sections 18.1.2.9 and
18.1.2.10; R evised N ote 1, Se ction 18.3.1; A dded
Section 18.3.2; R evised Sect ion 18.3.5; Added new
Note 2, Sections 18.4. 1.5, 18.4.1. 10, 18.4.2. 2,
18.4.2.4; Revised Register 21-1 (CVR); Revised Note
1, Registers 23-6, 23.8, 23-10, Table 23-3; Added new
Figure 26-1; Revised 26.2, 26.6, 26.7 (Note 3), 26.8,
26.9, 26.10; Revised Tables 26-1, 26-2, 26-3, 26-6, 26-
7, 26-8, 26-25; Updated Package Drawings.
 2010 Microchip Technology Inc.                                                                   DS41303G-page 441
PIC18F2XK20/4XK20
APPENDIX B:                  DEVICE
                             DIFFERENCES
The differences between the devices listed in this data
sheet are shown in Table B-1.
TABLE B-1:             DEVICE DIFFERENCES
       Features            PIC18F23K20 PIC18F24K20 PIC18F25K20 PIC18F26K20 PIC18F43K20 PIC18F44K20 PIC18F45K20 PIC18F46K20
Program Memory                 8192          16384           32768          65536            8192          16384           32768          65536
(Bytes)
Program Memory                 4096           8192           16384          32768            4096           8192           16384          32768
(Instructions)
Interrupt ources       S        19             19              19             19              20             20             20              20
I/O Ports                  Ports A, B, C, Ports A, B, C, Ports A, B, C, Ports A, B, C,   Ports A, B, C, Ports A, B, C, Ports A, B, C, Ports A, B, C,
                                (E)            (E)            (E)            (E)             D, E           D, E           D, E           D, E
Capture/Compare/PWM              1              1              1              1               1               1              1              1
Modules
Enhanced                         1              1              1              1               1               1              1              1
Capture/Compare/PWM
Modules
Parallel                        No             No             No              No             Yes             Yes            Yes            Yes
Communications (PSP)
10-bit Analog-to-Digital      11 input       11 input       11 input        11 input       14 input       14 input       14 input        14 input
Module                       channels       channels       channels        channels        channels       channels       channels        channels
Packages                   28-pin PDIP    28-pin PDIP    28-pin PDIP     28-pin PDIP     40-pin PDIP    40-pin PDIP    40-pin PDIP     40-pin PDIP
                           28-pin SOIC    28-pin SOIC    28-pin SOIC     28-pin SOIC     44-pin TQFP    44-pin TQFP    44-pin TQFP     44-pin TQFP
                           28-pin SSOP    28-pin SSOP    28-pin SSOP     28-pin SSOP      44-pin QFN     44-pin QFN     44-pin QFN      44-pin QFN
                            28-pin QFN     28-pin QFN     28-pin QFN      28-pin QFN
                           28-pin UQFN
DS41303G-page 442                                                                                              2010 Microchip Technology Inc.
                                                                                             PIC18F2XK20/4XK20
INDEX
A                                                                                            B
A/D                                                                                          Bank Select Register (BSR) .............................................. 71
    Analog Port Pins, Configuring .................................. 277                     Baud Rate Generator ...................................................... 221
    Associated Registers ............................................... 277                 BAUDCON Register ........................................................ 248
    Conversions .. ........................................................... 268           BC .................................................................................... 323
    Converter Characteristics ........................................ 401                   BCF .. ............................................................................... 324
    Discharge ................................................................. 269          BF ... ................................................................................. 225
    Selecting and Configuring Acquisition Time ............ 266                              BF Status Flag ................................................................. 225
    Special Event Trigger (ECCP) ................................. 174                       Block Diagrams
Absolute Maximum Ratings ............................................. 369                        ADC .. ....................................................................... 265
AC (Timing) Characteristics ............................................. 383                     ADC Transfer Function ............................................ 276
    Load Conditions for Device Timing Specifications ... 384                                      Analog Input Model .......................................... 276, 286
    Parameter Symbology ............................................. 383                         Baud Rate Generator .............................................. 221
    Temperature and Voltage Specifications . ................ 384                                 Capture Mode Operation ......................................... 146
    Timing Conditions .................................................... 384                    CCP PWM ............................................................... 149
AC Characteristics                                                                                Clock Source ............................................................. 27
    Internal RC Accuracy ............................................... 386                      Comparator 1 ........................................................... 280
Access Bank                                                                                       Comparator 2 ........................................................... 280
    Mapping with Indexed Literal Offset Mode ................. 87                                 Comparator Voltage Reference ............................... 290
ACKSTAT . ....................................................................... 225             Compare Mode Operation ....................................... 147
ACKSTAT Status Flag ..................................................... 225                     Crystal Operation ....................................................... 31
ADC . ................................................................................ 265        EUSART Receive .................................................... 238
    Acquisition Requirements ........................................ 275                         EUSART Transmit ................................................... 237
    Block Diagram .......................................................... 265                  External POR Circuit (Slow VDD Power-up) .............. 53
    Calculating Acquisition Time .................................... 275                         External RC Mode ..................................................... 32
    Channel Selection .................................................... 266                    Fail-Safe Clock Monitor (FSCM) ................................ 40
    Configuration ............................................................ 266                Generic I/O Port ....................................................... 121
    Conversion Clock ..................................................... 266                    High/Low-Voltage Detect with External Input .......... 294
    Conversion Procedure ............................................. 270                        Interrupt Logic .......................................................... 108
    Internal Sampling Switch (RSS) IMPEDANCE ... .......... 275                                   MSSP (I2C Master Mode) ........................................ 219
    Interrupts .................................................................. 267             MSSP (I2C Mode) .................................................... 202
    Operation .. ............................................................... 268              MSSP (SPI Mode) ................................................... 193
    Operation During Sleep ........................................... 269                        On-Chip Reset Circuit ................................................ 51
    Port Configuration .................................................... 266                   PIC18F2XK20 ............................................................ 14
    Power Management ................................................. 269                        PIC18F4XK20 ............................................................ 15
    Reference Voltage (VREF) ........................................ 266                         PLL (HS Mode) .......................................................... 35
    Result Formatting ..................................................... 267                   PORTD and PORTE (Parallel Slave Port) ............... 139
    Source Impedance ................................................... 275                      PWM (Enhanced) .................................................... 175
    Special Event Trigger ............................................... 269                     Reads from Flash Program Memory ......................... 93
    Starting an A/D Conversion ..................................... 267                          Resonator Operation ................................................. 31
ADCON0 Register ............................................................ 271                  Table Read Operation ............................................... 89
ADCON1 Register ............................................................ 272                  Table Write Operation ............................................... 90
ADCON2 Register ............................................................ 273                  Table Writes to Flash Program Memory .................... 95
ADDFSR . ......................................................................... 358            Timer0 in 16-Bit Mode ............................................. 157
ADDLW ... ......................................................................... 321           Timer0 in 8-Bit Mode ............................................... 156
ADDULNK . ....................................................................... 358             Timer1 .. ................................................................... 160
ADDWF ... ......................................................................... 321           Timer1 (16-Bit Read/Write Mode) ............................ 160
ADDWFC .. ....................................................................... 322             Timer2 .. ................................................................... 168
ADRESH Register (ADFM = 0) ........................................ 274                           Timer3 .. ................................................................... 170
ADRESH Register (ADFM = 1) ........................................ 274                           Timer3 (16-Bit Read/Write Mode) ............................ 171
ADRESL Register (ADFM = 0) ......................................... 274                          Voltage Reference Output Buffer Example ............. 291
ADRESL Register (ADFM = 1) ......................................... 274                          Watchdog Timer ...................................................... 308
Analog Input Connection Considerations ......................... 286                         BN .................................................................................... 324
Analog-to-Digital Converter. See ADC                                                         BNC .. ............................................................................... 325
ANDLW ... ......................................................................... 322      BNN .. ............................................................................... 325
ANDWF ... ......................................................................... 323      BNOV . ............................................................................. 326
ANSEL (PORT Analog Control) ....................................... 136                      BNZ .. ............................................................................... 326
ANSEL Register ............................................................... 136           BOR. See Brown-out Reset.
ANSELH Register ............................................................ 137             BOV .. ............................................................................... 329
Assembler                                                                                    BRA .. ............................................................................... 327
    MPASM Assembler .................................................. 366                   Break Character (12-bit) Transmit and Receive .............. 256
                                                                                             BRG. See Baud Rate Generator.
                                                                                             Brown-out Reset (BOR) ..................................................... 54
 2010 Microchip Technology Inc.                                                                                                                         DS41303G-page 443
PIC18F2XK20/4XK20
     Detecting . ................................................................... 54        CM1CON0 Register ......................................................... 284
     Disabling in Sleep Mode ............................................ 54                   CM2CON0 Register ......................................................... 285
     Minimun Enable Time ................................................ 54                   CM2CON1 Register ......................................................... 287
     Software Enabled ....................................................... 54               Code Examples
BSF .. ................................................................................ 327        16 x 16 Signed Multiply Routine .............................. 106
BTFSC . ............................................................................ 328           16 x 16 Unsigned Multiply Routine .......................... 106
BTFSS .............................................................................. 328           8 x 8 Signed Multiply Routine .................................. 105
BTG .................................................................................. 329         8 x 8 Unsigned Multiply Routine .............................. 105
BZ ..................................................................................... 330       A/D Conversion ........................................................ 270
                                                                                                   Changing Between Capture Prescalers ................... 145
C                                                                                                  Clearing RAM Using Indirect Addressing .................. 83
C Compilers                                                                                        Computed GOTO Using an Offset Value ................... 68
     MPLAB C18 ............................................................. 366                   Data EEPROM Read ............................................... 101
CALL .. .............................................................................. 330         Data EEPROM Refresh Routine .............................. 102
CALLW ............................................................................. 359            Data EEPROM Write ............................................... 101
Capture (CCP Module) ..................................................... 145                     Erasing a Flash Program Memory Row ..................... 94
     Associated Registers ............................................... 148                      Fast Register Stack ................................................... 68
     CCP Pin Configuration ............................................. 145                       Implementing a Timer1 Real-Time Clock ................ 164
     CCPRxH:CCPRxL Registers ................................... 145                               Initializing PORTA .................................................... 121
     Prescaler . ................................................................. 145             Initializing PORTB .................................................... 124
     Software Interrupt .................................................... 145                   Initializing PORTC ................................................... 127
     Timer1/Timer3 Mode Selection ................................ 145                             Initializing PORTD ................................................... 130
Capture (ECCP Module) .................................................. 174                       Initializing PORTE .................................................... 133
Capture/Compare/PWM (CCP) ........................................ 143                             Loading the SSPBUF (SSPSR) Register ................. 196
     Capture Mode. See Capture.                                                                    Reading a Flash Program Memory Word .................. 93
     CCP Mode and Timer Resources ............................ 144                                 Saving Status, WREG and BSR Registers
     CCPRxH Register .................................................... 144                             in RAM ............................................................. 119
     CCPRxL Register ..................................................... 144                     Writing to Flash Program Memory ....................... 96–97
     Compare Mode. See Compare.                                                                Code Protection ............................................................... 299
     Interaction of Two CCP Modules ............................. 144                          COMF .. ............................................................................ 332
     Module Configuration ............................................... 144                  Comparator
     PWM Mode .............................................................. 149                   Associated Registers ............................................... 288
            Duty Cycle ........................................................ 150                Operation .. ............................................................... 279
            Effects of Reset ................................................ 152                  Operation During Sleep ........................................... 283
            Example PWM Frequencies & Resolutions                                                  Response Time ........................................................ 281
                    Fosc=20 MHZ .......................................... 151                 Comparator Module ......................................................... 279
                    Fosc=40 MHZ .......................................... 151                     C1 Output State Versus Input Conditions ................ 281
                    Fosc=8 MHZ ............................................ 151                Comparator Specifications ............................................... 381
            Operation in Sleep Mode ................................. 152                      Comparator Voltage Reference (CVREF)
            Setup for Operation .......................................... 152                     Associated Registers ............................................... 292
            System Clock Frequency Changes .................. 152                                  Effects of a Reset ............................................ 283, 289
     PWM Period ............................................................. 150                  Operation During Sleep ........................................... 289
     Setup for PWM Operation ........................................ 152                          Overview .................................................................. 289
CCP1CON Register ......................................................... 173                 Comparator Voltage Reference (CVREF)
CCP2CON Register ......................................................... 143                     Response Time ........................................................ 281
Clock Accuracy with Asynchronous Operation ................ 246                                Comparators
Clock Sources                                                                                      Effects of a Reset .................................................... 283
     Associated registers ................................................... 41               Compare (CCP Module) .................................................. 147
     External Modes .......................................................... 30                  Associated Registers ............................................... 148
            EC ... ................................................................... 30          CCPRx Register ...................................................... 147
            HS ... ................................................................... 31          Pin Configuration ..................................................... 147
            LP ....................................................................... 31          Software Interrupt .................................................... 147
            OST .................................................................... 30            Special Event Trigger ...................................... 147, 172
            RC ...................................................................... 32           Timer1/Timer3 Mode Selection ................................ 147
            XT ... ................................................................... 31      Compare (ECCP Module) ................................................ 174
     Internal Modes ........................................................... 32                 Special Event Trigger .............................................. 174
            Frequency Selection .......................................... 34                  Computed GOTO ............................................................... 68
            HFINTOSC ......................................................... 32              CONFIG1H Register ........................................................ 301
            INTOSC .. ........................................................... 32           CONFIG2H Register ........................................................ 302
            INTOSCIO .......................................................... 32             CONFIG2L Register ........................................................ 302
            LFINTOSC .. ....................................................... 34             CONFIG3H Register ........................................................ 303
     Selecting the 31 kHz Source ...................................... 28                     CONFIG4L Register ........................................................ 303
     Selection Using OSCCON Register ........................... 28                            CONFIG5H Register ........................................................ 304
Clock Switching .................................................................. 37          CONFIG5L Register ........................................................ 304
CLRF ................................................................................ 331      CONFIG6H Register ........................................................ 305
CLRWDT .......................................................................... 331
DS41303G-page 444                                                                                                                     2010 Microchip Technology Inc.
                                                                                            PIC18F2XK20/4XK20
CONFIG6L Register ......................................................... 305             Device Reset Timers ......................................................... 55
CONFIG7H Register ........................................................ 306                   PLL Lock Time-out .................................................... 55
CONFIG7L Register ......................................................... 306                  Power-up Timer (PWRT) ........................................... 55
Configuration Bits ............................................................. 300             Time-out Sequence ................................................... 55
Configuration Register Protection .................................... 313                  DEVID1 Register ............................................................. 307
Context Saving During Interrupts ..................................... 119                  DEVID2 Register ............................................................. 307
CPFSEQ . ......................................................................... 332      Direct Addressing .............................................................. 84
CPFSGT . ......................................................................... 333
CPFSLT .. ......................................................................... 333     E
Customer Change Notification Service ............................ 453                       ECCPAS Register ............................................................ 183
Customer Notification Service .......................................... 453                EECON1 Register ...................................................... 91, 100
Customer Support ............................................................ 453           Effect on Standard PIC Instructions ................................. 362
CVREF Voltage Reference Specifications ........................ 381                         Effects of Power Managed Modes on Various
                                                                                                 Clock Sources ........................................................... 36
D                                                                                           Effects of Reset
Data Addressing Modes ..................................................... 83                   PWM mode .............................................................. 152
     Comparing Addressing Modes with the                                                    Electrical Characteristics ................................................. 369
           Extended Instruction Set Enabled ..................... 86                        Enhanced Capture/Compare/PWM (ECCP) .................... 173
     Direct .......................................................................... 83        Associated Registers ............................................... 191
     Indexed Literal Offset ................................................. 85                 Capture and Compare Modes ................................. 174
           Instructions Affected .......................................... 85                   Capture Mode. See Capture (ECCP Module).
     Indirect .. ..................................................................... 83        Enhanced PWM Mode ............................................. 175
     Inherent and Literal .................................................... 83                        Auto-Restart .. .................................................. 184
Data EEPROM                                                                                              Auto-shutdown .. .............................................. 183
     Code Protection ....................................................... 313                         Direction Change in Full-Bridge
Data EEPROM Memory ..................................................... 99                                      Output Mode ............................................ 181
     Associated Registers ............................................... 103                            Full-Bridge Application ..................................... 179
     EEADR and EEADRH Registers ............................... 99                                       Full-Bridge Mode ............................................. 179
     EECON1 and EECON2 Registers ............................. 99                                        Half-Bridge Application .................................... 178
     Operation During Code-Protect ............................... 102                                   Half-Bridge Application Examples ................... 185
     Protection Against Spurious Write ........................... 102                                   Half-Bridge Mode ............................................. 178
     Reading .................................................................... 101                    Output Relationships (Active-High and
     Using ........................................................................ 102                          Active-Low) .............................................. 176
     Write Verify .............................................................. 101                     Output Relationships Diagram ......................... 177
     Writing ...................................................................... 101                  Programmable Dead Band Delay .................... 185
Data Memory ..................................................................... 71                     Shoot-through Current ..................................... 185
     Access Bank .............................................................. 77                       Start-up Considerations ................................... 182
     and the Extended Instruction Set ............................... 85                         Outputs and Configuration ....................................... 174
     Bank Select Register (BSR) ....................................... 71                       Standard PWM Mode .............................................. 174
     General Purpose Registers ........................................ 77                       Timer Resources ..................................................... 174
     Map for PIC18F23K20/43K20 .................................... 72                      Enhanced Universal Synchronous Asynchronous
     Map for PIC18F24K20/44K20 .................................... 73                           Receiver Transmitter (EUSART) ............................. 237
     Map for PIC18F25K20/45K20 .............................. 74, 75                        Errata .. ............................................................................... 10
     Special Function Registers ........................................ 77                 EUSART . ......................................................................... 237
DAW ................................................................................. 334        Asynchronous Mode ................................................ 239
DC and AC Characteristics                                                                                12-bit Break Transmit and Receive ................. 256
     Graphs and Tables .................................................. 403                            Associated Registers, Receive ........................ 245
DC Characteristics                                                                                       Associated Registers, Transmit ....................... 241
     Input/Output . ............................................................ 377                     Auto-Wake-up on Break .................................. 254
     Peripheral Supply Current ........................................ 376                              Baud Rate Generator (BRG) ........................... 249
     Power-Down Current ............................................... 371                              Clock Accuracy ................................................ 246
     Primary Idle Supply Current ..................................... 374                               Receiver .. ........................................................ 242
     Primary Run Supply Current .................................... 374                                 Setting up 9-bit Mode with Address Detect ..... 244
     RC Idle Supply Current ............................................ 373                             Transmitter .. .................................................... 239
     RC Run Supply Current ........................................... 372                       Baud Rate Generator (BRG)
     Secondary Oscillator Supply Current ....................... 375                                     Associated Registers ....................................... 249
     Supply Voltage ......................................................... 371                        Auto Baud Rate Detect .................................... 253
DCFSNZ . ......................................................................... 335                   Baud Rate Error, Calculating ........................... 249
DECF . .............................................................................. 334                Baud Rates, Asynchronous Modes ................. 250
DECFSZ ........................................................................... 335                   Formulas .......................................................... 249
Development Support ...................................................... 365                           High Baud Rate Select (BRGH Bit) ................. 249
Device Differences ........................................................... 442               Clock polarity
Device Overview ................................................................ 11                      Synchronous Mode .......................................... 257
     Details on Individual Family Members ....................... 12                             Data polarity
     New Core Features .................................................... 11                           Asychronous Receive ...................................... 242
     Other Special Features .............................................. 12                            Asychronous Transmit ..................................... 239
 2010 Microchip Technology Inc.                                                                                                                       DS41303G-page 445
PIC18F2XK20/4XK20
          Synchronous Mode .......................................... 257                     Characteristics .. ....................................................... 382
    Interrupts                                                                                Current Consumption ............................................... 295
          Asychronous Receive ...................................... 243                      Effects of a Reset .................................................... 297
          Asychronous Transmit ..................................... 239                      Operation .. ............................................................... 294
    Synchronous Master Mode .............................. 257, 262                                During Sleep .................................................... 297
          Associated Registers, Receive ........................ 261                          Setup .. ..................................................................... 295
          Associated Registers, Transmit ............... 259, 262                             Start-up Time ........................................................... 295
          Reception ......................................................... 260             Typical Application ................................................... 297
          Transmission .................................................... 257            HLVD. See High/Low-Voltage Detect. ............................. 293
    Synchronous Slave Mode                                                                 HLVDCON Register ......................................................... 293
          Associated Registers, Receive ........................ 263
          Reception ......................................................... 263          I
          Transmission .................................................... 262            I/O Ports ........................................................................... 121
Extended Instruction Set                                                                   I2C
    ADDFSR . ................................................................. 358                Associated Registers ............................................... 235
    ADDULNK . ............................................................... 358          I2C Mode (MSSP)
    and Using MPLAB Tools .......................................... 364                          Acknowledge Sequence Timing .............................. 228
    CALLW ..................................................................... 359               Baud Rate Generator .............................................. 221
    Considerations for Use ............................................ 362                       Bus Collision
    MOVSF ... ................................................................. 359                     During a Repeated Start Condition .................. 232
    MOVSS ... ................................................................. 360                     During a Stop Condition .................................. 234
    PUSHL . .................................................................... 360              Clock Arbitration ...................................................... 222
    SUBFSR . ................................................................. 361                Clock Stretching ....................................................... 214
    SUBULNK . ............................................................... 361                       10-Bit Slave Receive Mode (SEN = 1) ............ 214
    Syntax .. .................................................................... 357                  10-Bit Slave Transmit Mode ............................ 214
                                                                                                        7-Bit Slave Receive Mode (SEN = 1) .............. 214
F                                                                                                       7-Bit Slave Transmit Mode .............................. 214
Fail-Safe Clock Monitor .............................................. 40, 299                    Clock Synchronization and the CKP bit (SEN = 1) .. 215
     Fail-Safe Condition Clearing ...................................... 40                       Effects of a Reset .................................................... 229
     Fail-Safe Detection .................................................... 40                  General Call Address Support ................................. 218
     Fail-Safe Operation .................................................... 40                  I2C Clock Rate w/BRG ............................................. 221
     Reset or Wake-up from Sleep .................................... 40                          Master Mode ............................................................ 219
Fast Register Stack ............................................................ 68                     Operation ......................................................... 220
Firmware Instructions ....................................................... 315                       Reception . ....................................................... 225
Flash Program Memory ...................................................... 89                          Repeated Start Condition Timing .................... 224
     Associated Registers ................................................. 97                          Start Condition Timing ..................................... 223
     Control Registers ....................................................... 90                       Transmission .. ................................................. 225
          EECON1 and EECON2 ..................................... 90                              Multi-Master Communication, Bus Collision
          TABLAT (Table Latch) Register ......................... 92                                    and Arbitration ................................................. 229
          TBLPTR (Table Pointer) Register ...................... 92                               Multi-Master Mode ................................................... 229
     Erase Sequence ........................................................ 94                   Operation .. ............................................................... 207
     Erasing ....................................................................... 94           Read/Write Bit Information (R/W Bit) ............... 207, 208
     Operation During Code-Protect ................................. 97                           Registers .. ............................................................... 202
     Reading ...................................................................... 93            Serial Clock (RC3/SCK/SCL) ................................... 208
     Table Pointer                                                                                Slave Mode .............................................................. 207
          Boundaries Based on Operation ........................ 92                                     Addressing ....................................................... 207
     Table Pointer Boundaries .......................................... 92                             Reception . ....................................................... 208
     Table Reads and Table Writes .................................. 89                                 Transmission .. ................................................. 208
     Write Sequence ......................................................... 95                  Sleep Operation ....................................................... 229
     Writing To ................................................................... 95            Stop Condition Timing ............................................. 228
          Protection Against Spurious Writes ................... 97                        ID Locations ............................................................. 299, 313
          Unexpected Termination .................................... 97                   INCF .. .............................................................................. 336
          Write Verify ........................................................ 97         INCFSZ ............................................................................ 337
                                                                                           In-Circuit Debugger .......................................................... 313
G                                                                                          In-Circuit Serial Programming (ICSP) ...................... 299, 313
General Call Address Support ......................................... 218                 Indexed Literal Offset Addressing
GOTO ............................................................................... 336          and Standard PIC18 Instructions ............................. 362
                                                                                           Indexed Literal Offset Mode ............................................. 362
H                                                                                          Indirect Addressing ............................................................ 84
Hardware Multiplier .......................................................... 105         INFSNZ ............................................................................ 337
     Introduction . ............................................................. 105      Initialization Conditions for all Registers ...................... 59–62
     Operation .. ............................................................... 105      Instruction Cycle ................................................................ 69
     Performance Comparison ........................................ 105                          Clocking Scheme ....................................................... 69
High/Low-Voltage Detect ................................................. 293              Instruction Flow/Pipelining ................................................. 69
     Applications .............................................................. 297       Instruction Set .................................................................. 315
     Associated Registers ............................................... 297                     ADDLW .................................................................... 321
DS41303G-page 446                                                                                                                  2010 Microchip Technology Inc.
                                                                                           PIC18F2XK20/4XK20
    ADDWF .................................................................... 321               SUBLW .................................................................... 351
    ADDWF (Indexed Literal Offset Mode) .................... 363                                 SUBWF .................................................................... 351
    ADDWFC .. ............................................................... 322                SUBWFB .. ............................................................... 352
    ANDLW . ................................................................... 322              SWAPF .................................................................... 352
    ANDWF .................................................................... 323               TBLRD ..................................................................... 353
    BC ... ......................................................................... 323         TBLWT . ................................................................... 354
    BCF .......................................................................... 324           TSTFSZ .. ................................................................. 355
    BN ... ......................................................................... 324         XORLW .. ................................................................. 355
    BNC .. ....................................................................... 325           XORWF .. ................................................................. 356
    BNN .. ....................................................................... 325     INTCON Register ............................................................. 109
    BNOV ....................................................................... 326       INTCON Registers ................................................... 109–111
    BNZ .......................................................................... 326     INTCON2 Register ........................................................... 110
    BOV .. ....................................................................... 329     INTCON3 Register ........................................................... 111
    BRA .......................................................................... 327     Inter-Integrated Circuit. See I2C.
    BSF . ......................................................................... 327    Internal Oscillator Block
    BSF (Indexed Literal Offset Mode) .......................... 363                             HFINTOSC Frequency Drift ....................................... 34
    BTFSC .. ................................................................... 328             PLL in HFINTOSC Modes ......................................... 35
    BTFSS .. ................................................................... 328       Internal RC Oscillator
    BTG .......................................................................... 329           Use with WDT .......................................................... 308
    BZ ... ......................................................................... 330   Internal Sampling Switch (RSS) IMPEDANCE ... .................. 275
    CALL . ....................................................................... 330     Internet Address .............................................................. 453
    CLRF ........................................................................ 331      Interrupt Sources ............................................................. 299
    CLRWDT .................................................................. 331                ADC .. ....................................................................... 267
    COMF . ..................................................................... 332             Capture Complete (CCP) ........................................ 145
    CPFSEQ . ................................................................. 332               Compare Complete (CCP) ...................................... 147
    CPFSGT . ................................................................. 333               Interrupt-on-Change (RB7:RB4) .............................. 124
    CPFSLT .. ................................................................. 333              INTn Pin ................................................................... 119
    DAW ......................................................................... 334            PORTB, Interrupt-on-Change .................................. 119
    DCFSNZ . ................................................................. 335               TMR0 ....................................................................... 119
    DECF .. ..................................................................... 334            TMR0 Overflow ........................................................ 157
    DECFSZ ................................................................... 335               TMR1 Overflow ........................................................ 159
    Extended Instruction Set .......................................... 357                      TMR3 Overflow ................................................ 169, 171
    General Format ........................................................ 317            Interrupts .. ....................................................................... 107
    GOTO . ..................................................................... 336       IORLW .. ........................................................................... 338
    INCF ......................................................................... 336     IORWF ............................................................................. 338
    INCFSZ . ................................................................... 337       IPR Registers ................................................................... 116
    INFSNZ . ................................................................... 337       IPR1 Register .................................................................. 116
    IORLW .. ................................................................... 338       IPR2 Register .................................................................. 117
    IORWF .. ................................................................... 338
    LFSR ........................................................................ 339      L
    MOVF ....................................................................... 339       LFSR .. ............................................................................. 339
    MOVFF . ................................................................... 340        Low-Voltage ICSP Programming. See Single-Supply
    MOVLB . ................................................................... 340             ICSP Programming
    MOVLW .. ................................................................. 341
    MOVWF .. ................................................................. 341
                                                                                           M
    MULLW . ................................................................... 342        Master Clear (MCLR) ......................................................... 53
    MULWF .................................................................... 342         Master Synchronous Serial Port (MSSP). See MSSP.
    NEGF .. ..................................................................... 343      Memory Organization ........................................................ 65
    NOP .. ....................................................................... 343          Data Memory ............................................................. 71
    Opcode Field Descriptions ....................................... 316                       Program Memory ....................................................... 65
    POP .. ....................................................................... 344     Microchip Internet Web Site ............................................. 453
    PUSH .. ..................................................................... 344      MOVF . ............................................................................. 339
    RCALL .. ................................................................... 345       MOVFF . ........................................................................... 340
    RESET .. ................................................................... 345       MOVLB . ........................................................................... 340
    RETFIE . ................................................................... 346       MOVLW .. ......................................................................... 341
    RETLW . ................................................................... 346        MOVSF . ........................................................................... 359
    RETURN . ................................................................. 347         MOVSS ............................................................................ 360
    RLCF ........................................................................ 347      MOVWF .. ......................................................................... 341
    RLNCF .. ................................................................... 348       MPLAB ASM30 Assembler, Linker, Librarian .................. 366
    RRCF .. ..................................................................... 348      MPLAB Integrated Development Environment
    RRNCF . ................................................................... 349             Software . ................................................................. 365
    SETF ........................................................................ 349      MPLAB PM3 Device Programmer ................................... 368
    SETF (Indexed Literal Offset Mode) ........................ 363                        MPLAB REAL ICE In-Circuit Emulator System ............... 367
    SLEEP .. ................................................................... 350       MPLINK Object Linker/MPLIB Object Librarian ............... 366
    SUBFWB .................................................................. 350          MSSP
                                                                                                ACK Pulse ....................................................... 207, 208
 2010 Microchip Technology Inc.                                                                                                                   DS41303G-page 447
PIC18F2XK20/4XK20
   Control Registers (general) ...................................... 193                        RB1/INT1/AN10/C12IN3- ........................................... 22
   I2C Mode. See I2C Mode.                                                                       RB1/INT1/AN10/P1C/C12IN3- ................................... 18
   Module Overview ..................................................... 193                     RB2/INT2/AN8 .. ......................................................... 22
   SPI Master/Slave Connection .................................. 197                            RB2/INT2/AN8/P1B .. ................................................. 18
   SPI Mode. See SPI Mode.                                                                       RB3/AN9/CCP2/C12IN2- ..................................... 18, 22
   SSPBUF Register .................................................... 198                      RB4/KBI0/AN11 ... ...................................................... 22
   SSPSR Register ...................................................... 198                     RB4/KBI0/AN11/P1D .. ............................................... 18
MULLW .. .......................................................................... 342          RB5/KBI1/PGM .................................................... 18, 22
MULWF .. .......................................................................... 342          RB6/KBI2/PGC . ................................................... 18, 22
                                                                                                 RB7/KBI3/PGD . ................................................... 18, 22
N                                                                                                RC0/T1OSO/T13CKI . .......................................... 19, 23
NEGF . .............................................................................. 343        RC1/T1OSI/CCP2 ................................................ 19, 23
NOP . ................................................................................ 343       RC2/CCP1/P1A ... ................................................ 19, 23
                                                                                                 RC3/SCK/SCL .. ................................................... 19, 23
O                                                                                                RC4/SDI/SDA . ..................................................... 19, 23
OSCCON Register ............................................................. 29                 RC5/SDO ............................................................. 19, 23
Oscillator Configuration                                                                         RC6/TX/CK . ......................................................... 19, 23
     EC .. ............................................................................ 27       RC7/RX/DT .......................................................... 19, 23
     ECIO .. ........................................................................ 27         RD0/PSP0 .. ............................................................... 24
     HS .. ............................................................................ 27       RD1/PSP1 .. ............................................................... 24
     HSPLL ........................................................................ 27           RD2/PSP2 .. ............................................................... 24
     INTOSC .. ................................................................... 27            RD3/PSP3 .. ............................................................... 24
     INTOSCIO .................................................................. 27              RD4/PSP4 .. ............................................................... 24
     LP ............................................................................... 27       RD5/PSP5/P1B ... ...................................................... 24
     RC .............................................................................. 27        RD6/PSP6/P1C ... ...................................................... 24
     RCIO .. ........................................................................ 27         RD7/PSP7/P1D ... ...................................................... 24
     XT .. ............................................................................ 27       RE0/RD/AN5 .............................................................. 25
Oscillator Module ............................................................... 27             RE1/WR/AN6 ............................................................. 25
     HFINTOSC ................................................................. 27               RE2/CS/AN7 .............................................................. 25
     LFINTOSC .. ............................................................... 27              VDD .. .................................................................... 19, 25
Oscillator Selection .......................................................... 299              VSS .. .................................................................... 19, 25
Oscillator Start-up Timer (OST) ................................... 36, 55                   Pinout I/O Descriptions
Oscillator Switching                                                                             PIC18F2XK20 ............................................................ 16
     Fail-Safe Clock Monitor .............................................. 40                   PIC18F4XK20 ............................................................ 20
     Two-Speed Clock Start-up ......................................... 38                   PIR Registers ................................................................... 112
Oscillator, Timer1 ..................................................... 159, 171            PIR1 Register .................................................................. 112
Oscillator, Timer3 ............................................................. 169         PIR2 Register .................................................................. 113
OSCTUNE Register ........................................................... 33              PLL Frequency Multiplier ................................................... 35
                                                                                                 HSPLL Oscillator Mode ............................................. 35
P
                                                                                             POP . ................................................................................ 344
P1A/P1B/P1C/P1D.See Enhanced Capture/                                                        POR. See Power-on Reset.
     Compare/PWM (ECCP) ........................................... 175                      PORTA
Packaging Information ..................................................... 427                  Associated Registers ............................................... 123
     Marking ... ................................................................. 427           LATA Register ......................................................... 121
Parallel Slave Port (PSP) ......................................... 130, 139                     PORTA Register ...................................................... 121
     Associated Registers ............................................... 141                    TRISA Register ........................................................ 121
     CS (Chip Select) ...................................................... 139             PORTB
     PORTD ... ................................................................. 139             Associated Registers ............................................... 126
     RD (Read Input) ....................................................... 139                 LATB Register ......................................................... 124
     Select (PSPMODE Bit) .................................... 130, 139                          PORTB Register ...................................................... 124
     WR (Write Input) ...................................................... 139                 TRISB Register ........................................................ 124
PIE Registers ................................................................... 114        PORTC
PIE1 Register ................................................................... 114            Associated Registers ............................................... 129
PIE2 Register ................................................................... 115            LATC Register ......................................................... 127
Pin Functions                                                                                    PORTC Register ...................................................... 127
     MCLR/VPP/RE3 .................................................... 16, 20                    RC3/SCK/SCL Pin ................................................... 208
     OSC1/CLKI/RA7 . ................................................. 16, 20                    TRISC Register ........................................................ 127
     OSC2/CLKO/RA6 . ............................................... 16, 20                  PORTD
     RA0/AN0/C12IN0- ................................................ 17, 21                     Associated Registers ............................................... 132
     RA1/AN1/C12IN0- ...................................................... 21                   LATD Register ......................................................... 130
     RA1/AN1/C12IN1- ...................................................... 17                   Parallel Slave Port (PSP) Function .......................... 130
     RA2/AN2/VREF-/CVREF/C2IN+ ............................. 17, 21                              PORTD Register ...................................................... 130
     RA3/AN3/VREF+/C1IN+ ........................................ 17, 21                         TRISD Register ........................................................ 130
     RA4/T0CKI/C1OUT .............................................. 17, 21                   PORTE
     RA5/AN4/SS/HLVDIN/C2OUT . ............................ 17, 21                               Associated Registers ............................................... 135
     RB0/INT0/FLT0/AN12 .......................................... 18, 22
DS41303G-page 448                                                                                                                    2010 Microchip Technology Inc.
                                                                                            PIC18F2XK20/4XK20
     LATE Register .......................................................... 133           PWM1CON Register ........................................................ 186
     PORTE Register ...................................................... 133
     PSP Mode Select (PSPMODE Bit) .......................... 130                           R
     TRISE Register ........................................................ 133            RAM. See Data Memory.
Power Managed Modes ..................................................... 43                RC_IDLE Mode .................................................................. 48
     and A/D Operation ................................................... 269              RCALL .. ........................................................................... 345
     and PWM Operation ................................................ 190                 RCON Register .......................................................... 52, 118
     and SPI Operation ................................................... 201                  Bit Status During Initialization .................................... 58
     Clock Transitions and Status Indicators ..................... 44                       RCREG ............................................................................ 244
     Effects on Clock Sources ........................................... 36                RCSTA Register .............................................................. 247
     Entering ...................................................................... 43     Reader Response ............................................................ 454
     Exiting Idle and Sleep Modes .................................... 48                   Register
           by Interrupt ......................................................... 48            RCREG Register ..................................................... 253
           by Reset ............................................................. 48        Register File ....................................................................... 77
           by WDT Time-out ............................................... 48               Register File Summary ................................................ 79–81
           Without a Start-up Delay .................................... 49                 Registers
     Idle Modes ................................................................. 45            ADCON0 (ADC Control 0) ....................................... 271
           PRI_IDLE .. ......................................................... 47             ADCON1 (ADC Control 1) ....................................... 272
           RC_IDLE ............................................................ 48              ADCON2 (ADC Control 2) ....................................... 273
           SEC_IDLE ... ...................................................... 47               ADRESH (ADC Result High) with ADFM = 0) ......... 274
     Multiple Sleep Functions ............................................ 44                   ADRESH (ADC Result High) with ADFM = 1) ......... 274
     Run Modes ................................................................. 44             ADRESL (ADC Result Low) with ADFM = 0) ........... 274
           PRI_RUN .. ......................................................... 44              ADRESL (ADC Result Low) with ADFM = 1) ........... 274
           SEC_RUN .......................................................... 44                ANSEL (Analog Select 1) ........................................ 136
     Selecting . ................................................................... 43         ANSEL (PORT Analog Control) ............................... 136
     Sleep Mode ................................................................ 45             ANSELH (Analog Select 2) ...................................... 137
     Summary (table) ........................................................ 43                ANSELH (PORT Analog Control) ............................ 137
Power-on Reset (POR) ...................................................... 53                  BAUDCON (Baud Rate Control) .............................. 248
     Power-up Timer (PWRT) ........................................... 55                       BAUDCON (EUSART Baud Rate Control) .............. 248
     Time-out Sequence .................................................... 55                  CCP1CON (Enhanced Capture/Compare/PWM
Power-up Delays ................................................................ 36                   Control) ............................................................ 173
Power-up Timer (PWRT) ................................................... 36                    CCP2CON (Standard Capture/Compare/PWM
Prescaler, Timer0 ............................................................. 157                   Control) ............................................................ 143
PRI_IDLE Mode ................................................................. 47              CM1CON0 (C1 Control) .......................................... 284
PRI_RUN Mode ................................................................. 44               CM2CON0 (C2 Control) .......................................... 285
Program Counter ............................................................... 66              CM2CON1 (C2 Control) .......................................... 287
     PCL, PCH and PCU Registers ................................... 66                          CONFIG1H (Configuration 1 High) .......................... 301
     PCLATH and PCLATU Registers .............................. 66                              CONFIG2H (Configuration 2 High) .......................... 302
Program Memory                                                                                  CONFIG2L (Configuration 2 Low) ........................... 302
     and Extended Instruction Set ..................................... 87                      CONFIG3H (Configuration 3 High) .......................... 303
     Code Protection ....................................................... 311                CONFIG4L (Configuration 4 Low) ........................... 303
     Instructions ................................................................. 70          CONFIG5H (Configuration 5 High) .......................... 304
           Two-Word . ......................................................... 70              CONFIG5L (Configuration 5 Low) ........................... 304
     Interrupt Vector .......................................................... 65             CONFIG6H (Configuration 6 High) .......................... 305
     Look-up Tables .......................................................... 68               CONFIG6L (Configuration 6 Low) ........................... 305
     Map and Stack (diagram) ........................................... 65                     CONFIG7H (Configuration 7 High) .......................... 306
     Reset Vector .............................................................. 65             CONFIG7L (Configuration 7 Low) ........................... 306
Program Verification and Code Protection ....................... 310                            CVRCON (Comparator Voltage Reference
     Associated Registers ............................................... 310                         Control CVRCON Register .............................. 291
Programming, Device Instructions ................................... 315                        CVRCON2 (Comparator Voltage Reference
PSP. See Parallel Slave Port.                                                                         Control 2) CVRCON2 Register ........................ 292
PSTRCON Register ......................................................... 187                  DEVID1 (Device ID 1) .............................................. 307
Pulse Steering .................................................................. 187           DEVID2 (Device ID 2) .............................................. 307
PUSH . .............................................................................. 344       ECCPAS (Enhanced CCP Auto-shutdown
PUSH and POP Instructions .............................................. 67                           Control) ............................................................ 183
PUSHL . ............................................................................ 360        EECON1 (Data EEPROM Control 1) ................. 91, 100
PWM (CCP Module)                                                                                HLVDCON (High/Low-Voltage Detect Control) ....... 293
     Associated Registers ............................................... 153                   INTCON (Interrupt Control) ..................................... 109
PWM (ECCP Module)                                                                               INTCON2 (Interrupt Control 2) ................................ 110
     Effects of a Reset ..................................................... 190               INTCON3 (Interrupt Control 3) ................................ 111
     Operation in Power Managed Modes ...................... 190                                IPR1 (Peripheral Interrupt Priority 1) ....................... 116
     Operation with Fail-Safe Clock Monitor ................... 190                             IPR2 (Peripheral Interrupt Priority 2) ....................... 117
     Pulse Steering .......................................................... 187              OSCCON (Oscillator Control) .................................... 29
     Steering Synchronization ......................................... 189                     OSCTUNE (Oscillator Tuning) ................................... 33
PWM Mode. See Enhanced Capture/Compare/PWM ..... 175                                            PIE1 (Peripheral Interrupt Enable 1) ....................... 114
                                                                                                PIE2 (Peripheral Interrupt Enable 2) ....................... 115
 2010 Microchip Technology Inc.                                                                                                                    DS41303G-page 449
PIC18F2XK20/4XK20
     PIR1 (Peripheral Interrupt Request 1) ..................... 112                           Special Event Trigger ...................................................... 269
     PIR2 (Peripheral Interrupt Request 2) ..................... 113                           Special Event Trigger. See Compare (ECCP Mode).
     PSTRCON (Pulse Steering Control) ........................ 187                             Special Event Trigger. See Compare (ECCP Module).
     PWM1CON (Enhanced PWM Control) .................... 186                                   Special Features of the CPU ........................................... 299
     RCON (Reset Control) ....................................... 52, 118                      Special Function Registers ................................................ 77
     RCON (Reset control) .............................................. 118                         Map ............................................................................ 78
     RCSTA (Receive Status and Control) ...................... 247                             SPI Mode (MSSP)
     SLRCON (PORT Slew Rate Control) ....................... 138                                     Associated Registers ............................................... 201
     SSPADD (MSSP Address and Baud Rate,                                                             Bus Mode Compatibility ........................................... 201
            SPI Mode) ........................................................ 203                   Effects of a Reset .................................................... 201
     SSPCON1 (MSSP Control 1, I2C Mode) ................. 205                                        Enabling SPI I/O ...................................................... 197
     SSPCON1 (MSSP Control 1, SPI Mode) ................. 195                                        Master Mode ............................................................ 198
     SSPCON2 (MSSP Control 2, I2C Mode) ................. 206                                        Master/Slave Connection ......................................... 197
     SSPMSK (SSP Mask) .............................................. 213                            Operation .. ............................................................... 196
     SSPSTAT (MSSP Status, SPI Mode) .............. 194, 204                                         Operation in Power Managed Modes ...................... 201
     STATUS ..................................................................... 82                 Serial Clock .............................................................. 193
     STKPTR (Stack Pointer) ............................................ 67                          Serial Data In ........................................................... 193
     T0CON (Timer0 Control) .......................................... 155                           Serial Data Out ........................................................ 193
     T1CON (Timer1 Control) .......................................... 159                           Slave Mode .............................................................. 199
     T2CON (Timer2 Control) .......................................... 167                           Slave Select ............................................................. 193
     T3CON (Timer3 Control) .......................................... 169                           Slave Select Synchronization .................................. 199
     TRISE (PORTE/PSP Control) .................................. 134                                SPI Clock ................................................................. 198
     TXSTA (Transmit Status and Control) ..................... 246                                   Typical Connection .................................................. 197
     WDTCON (Watchdog Timer Control) ....................... 309                               SS .. .................................................................................. 193
RESET . ............................................................................ 345       SSPADD Register ............................................................ 203
Reset State of Registers .................................................... 58               SSPCON1 Register ................................................. 195, 205
Resets .. ...................................................................... 51, 299       SSPCON2 Register ......................................................... 206
     Brown-out Reset (BOR) ........................................... 299                     SSPMSK Register ........................................................... 213
     Oscillator Start-up Timer (OST) ............................... 299                       SSPOV ... ......................................................................... 225
     Power-on Reset (POR) ............................................ 299                     SSPOV Status Flag ......................................................... 225
     Power-up Timer (PWRT) ......................................... 299                       SSPSTAT Register .................................................. 194, 204
RETFIE .. .......................................................................... 346             R/W Bit ............................................................ 207, 208
RETLW ............................................................................. 346        Stack Full/Underflow Resets .............................................. 68
RETURN .. ........................................................................ 347         Standard Instructions ....................................................... 315
Return Address Stack ........................................................ 66               STATUS Register .............................................................. 82
Return Stack Pointer (STKPTR) ........................................ 67                      STKPTR Register .............................................................. 67
Revision History ............................................................... 441           SUBFSR .. ........................................................................ 361
RLCF ................................................................................ 347      SUBFWB .. ....................................................................... 350
RLNCF . ............................................................................ 348       SUBLW ... ......................................................................... 351
RRCF . .............................................................................. 348      SUBULNK .. ...................................................................... 361
RRNCF ............................................................................. 349        SUBWF ............................................................................ 351
                                                                                               SUBWFB .. ....................................................................... 352
S                                                                                              SWAPF ... ......................................................................... 352
SCK .................................................................................. 193
SDI . .................................................................................. 193   T
SDO . ................................................................................ 193     T0CON Register .............................................................. 155
SEC_IDLE Mode ................................................................ 47              T1CON Register .............................................................. 159
SEC_RUN Mode ................................................................ 44               T2CON Register .............................................................. 167
Serial Clock, SCK ............................................................. 193            T3CON Register .............................................................. 169
Serial Data In (SDI) .......................................................... 193            Table Pointer Operations (table) ........................................ 92
Serial Data Out (SDO) ..................................................... 193                Table Reads/Table Writes ................................................. 68
Serial Peripheral Interface. See SPI Mode.                                                     TBLRD . ............................................................................ 353
SETF .. .............................................................................. 349     TBLWT ............................................................................. 354
Shoot-through Current ..................................................... 185                Time-out in Various Situations (table) ................................ 55
Single-Supply ICSP Programming.                                                                Timer0 .............................................................................. 155
Slave Select (SS) .. ........................................................... 193                Associated Registers ............................................... 157
Slave Select Synchronization ........................................... 199                        Operation .. ............................................................... 156
SLEEP .............................................................................. 350            Overflow Interrupt .................................................... 157
Sleep                                                                                               Prescaler .. ............................................................... 157
     OSC1 and OSC2 Pin States ...................................... 36                             Prescaler Assignment (PSA Bit) .............................. 157
Sleep Mode ........................................................................ 45              Prescaler Select (T0PS2:T0PS0 Bits) ..................... 157
Slew Rate ......................................................................... 138             Prescaler. See Prescaler, Timer0.
SLRCON Register ............................................................ 138                    Reads and Writes in 16-Bit Mode ............................ 156
Software Simulator (MPLAB SIM) .................................... 367                             Source Edge Select (T0SE Bit) ............................... 156
SPBRG ............................................................................. 249             Source Select (T0CS Bit) ......................................... 156
SPBRGH .. ........................................................................ 249              Switching Prescaler Assignment ............................. 157
DS41303G-page 450                                                                                                                       2010 Microchip Technology Inc.
                                                                                             PIC18F2XK20/4XK20
Timer1 .. ............................................................................ 159        Full-Bridge PWM Output .......................................... 180
     16-Bit Read/Write Mode ........................................... 162                       Half-Bridge PWM Output ................................. 178, 185
     Associated Registers ............................................... 165                     High/Low-Voltage Detect Characteristics ................ 382
     Asynchronous Counter Mode .................................. 161                             High/Low-Voltage Detect Operation
            Reading and Writing ........................................ 161                           (VDIRMAG = 0) ............................................... 295
     Interrupt .................................................................... 163           High/Low-Voltage Detect Operation
     Operation .. ............................................................... 160                  (VDIRMAG = 1) ............................................... 296
     Oscillator . ......................................................... 159, 162              I2C Bus Data ............................................................ 396
     Oscillator Layout Considerations ............................. 163                           I2C Bus Start/Stop Bits ............................................ 396
     Overflow Interrupt .................................................... 159                  I2C Master Mode (7 or 10-Bit Transmission) ........... 226
     Prescaler .................................................................. 161             I2C Master Mode (7-Bit Reception) ......................... 227
     Resetting, Using the CCP Special Event Trigger ..... 163                                     I2C Slave Mode (10-Bit Reception, SEN = 0) .......... 211
     Special Event Trigger (ECCP) ................................. 174                           I2C Slave Mode (10-Bit Reception, SEN = 1) .......... 217
     TMR1H Register ...................................................... 159                    I2C Slave Mode (10-Bit Transmission) .................... 212
     TMR1L Register ....................................................... 159                   I2C Slave Mode (7-bit Reception, SEN = 0) ............ 209
     Use as a Real-Time Clock ....................................... 164                         I2C Slave Mode (7-Bit Reception, SEN = 1) ............ 216
Timer2 .. ............................................................................ 167        I2C Slave Mode (7-Bit Transmission) ...................... 210
     Associated Registers ............................................... 168                     I2C Slave Mode General Call Address
     Interrupt .................................................................... 168                Sequence (7 or 10-Bit Address Mode) ............ 218
     Operation .. ............................................................... 167             I2C Stop Condition Receive or Transmit Mode ........ 228
     Output . ..................................................................... 168           Internal Oscillator Switch Timing ............................... 39
Timer3 .. ............................................................................ 169        Master SSP I2C Bus Data ....................................... 398
     16-Bit Read/Write Mode ........................................... 171                       Master SSP I2C Bus Start/Stop Bits ........................ 398
     Associated Registers ............................................... 172                     Parallel Slave Port (PIC18F4XK20) ......................... 391
     Operation .. ............................................................... 170             Parallel Slave Port (PSP) Read ............................... 140
     Oscillator . ......................................................... 169, 171              Parallel Slave Port (PSP) Write ............................... 140
     Overflow Interrupt ............................................ 169, 171                     PWM Auto-shutdown
     Special Event Trigger (CCP) .................................... 172                              Auto-restart Enabled ........................................ 184
     TMR3H Register ...................................................... 169                         Firmware Restart ............................................. 184
     TMR3L Register ....................................................... 169                   PWM Direction Change ........................................... 181
Timing Diagrams                                                                                   PWM Direction Change at Near 100% Duty Cycle .. 182
     A/D Conversion ........................................................ 402                  PWM Output (Active-High) ...................................... 176
     Acknowledge Sequence .......................................... 228                          PWM Output (Active-Low) ....................................... 177
     Asynchronous Reception ......................................... 245                         Repeat Start Condition ............................................ 224
     Asynchronous Transmission .................................... 240                           Reset, Watchdog Timer (WDT), Oscillator Start-up
     Asynchronous Transmission (Back to Back) ........... 241                                           Timer (OST), Power-up Timer (PWRT) .......... 388
     Auto Wake-up Bit (WUE) During Normal                                                         Send Break Character Sequence ............................ 256
            Operation .. ....................................................... 255              Slave Synchronization ............................................. 199
     Auto Wake-up Bit (WUE) During Sleep ................... 255                                  Slow Rise Time (MCLR Tied to VDD,
     Automatic Baud Rate Calculator .............................. 254                                 VDD Rise > TPWRT) . ........................................... 57
     Baud Rate Generator with Clock Arbitration ............ 222                                  SPI Mode (Master Mode) ........................................ 198
     BRG Reset Due to SDA Arbitration During                                                      SPI Mode (Slave Mode, CKE = 0) ........................... 200
            Start Condition ................................................. 231                 SPI Mode (Slave Mode, CKE = 1) ........................... 200
     Brown-out Reset (BOR) ........................................... 388                        Synchronous Reception (Master Mode, SREN) ...... 261
     Bus Collision During a Repeated Start Condition                                              Synchronous Transmission ..................................... 258
            (Case 1) ........................................................... 232              Synchronous Transmission (Through TXEN) .......... 258
     Bus Collision During a Repeated Start Condition                                              Time-out Sequence on POR w/PLL Enabled
            (Case 2) ........................................................... 233                   (MCLR Tied to VDD) .. ........................................ 57
     Bus Collision During a Start Condition (SCL = 0) .... 231                                    Time-out Sequence on Power-up (MCLR
     Bus Collision During a Stop Condition (Case 1) ...... 234                                         Not Tied to VDD, Case 1) ................................... 56
     Bus Collision During a Stop Condition (Case 2) ...... 234                                    Time-out Sequence on Power-up (MCLR
     Bus Collision During Start Condition (SDA only) ..... 230                                         Not Tied to VDD, Case 2) ................................... 56
     Bus Collision for Transmit and Acknowledge ........... 229                                   Time-out Sequence on Power-up (MCLR
     Capture/Compare/PWM (CCP) ................................ 390                                    Tied to VDD, VDD Rise < TPWRT) ... .................... 56
     CLKO and I/O .......................................................... 387                  Timer0 and Timer1 External Clock .......................... 389
     Clock Synchronization ............................................. 215                      Timer1 Incrementing Edge ...................................... 161
     Clock/Instruction Cycle .............................................. 69                    Transition for Entry to Sleep Mode ............................ 46
     Comparator Output .................................................. 279                     Transition for Wake from Sleep (HSPLL) .................. 46
     Example SPI Master Mode (CKE = 0) ..................... 392                                  Transition Timing for Entry to Idle Mode .................... 47
     Example SPI Master Mode (CKE = 1) ..................... 393                                  Transition Timing for Wake from Idle to
     Example SPI Slave Mode (CKE = 0) ....................... 394                                      Run Mode .......................................................... 47
     Example SPI Slave Mode (CKE = 1) ....................... 395                                 USART Synchronous Receive (Master/Slave) ........ 400
     External Clock (All Modes except PLL) .................... 384                               USART Synchronous Transmission
     Fail-Safe Clock Monitor (FSCM) ................................ 41                                (Master/Slave) .. ............................................... 400
     First Start Bit Timing ................................................ 223             Timing Diagrams and Specifications ............................... 384
 2010 Microchip Technology Inc.                                                                                                                  DS41303G-page 451
PIC18F2XK20/4XK20
    A/D Conversion Requirements ................................ 402
    Capture/Compare/PWM Requirements ................... 390
    CLKO and I/O Requirements ................................... 387
    Example SPI Mode Requirements
          (Master Mode, CKE = 0) .................................. 392
          (Master Mode, CKE = 1) .................................. 393
          (Slave Mode, CKE = 0) .................................... 394
          (Slave Mode, CKE = 1) .................................... 395
    External Clock Requirements .................................. 385
    I2C Bus Data Requirements (Slave Mode) .............. 397
    I2C Bus Start/Stop Bits Requirements
          (Slave Mode) .................................................... 396
    Master SSP I2C Bus Data Requirements ................ 399
    Master SSP I2C Bus Start/Stop Bits
          Requirements ................................................... 398
    Parallel Slave Port Requirements (PIC18F4X20) .... 391
    PLL Clock ................................................................. 386
    Reset, Watchdog Timer, Oscillator Start-up Timer,
          Power-up Timer and Brown-out Reset
          Requirements ................................................... 388
    Timer0 and Timer1 External Clock Requirements ... 389
    USART Synchronous Receive Requirements ......... 400
    USART Synchronous Transmission
          Requirements ................................................... 400
Top-of-Stack Access .......................................................... 66
TRISE Register ................................................................ 134
    PSPMODE Bit .......................................................... 130
TSTFSZ ............................................................................ 355
Two-Speed Clock Start-up Mode ....................................... 38
Two-Speed Start-up ......................................................... 299
Two-Word Instructions
    Example Cases .......................................................... 70
TXREG ............................................................................. 239
TXSTA Register ............................................................... 246
    BRGH Bit ................................................................. 249
V
Voltage Reference (VR)
     Specifications ........................................................... 381
Voltage Reference. See Comparator Voltage
     Reference (CVREF)
Voltage References
     Fixed Voltage Reference (FVR) ............................... 290
     VR Stabilization ........................................................ 290
VREF. SEE ADC Reference Voltage
W
Wake-up on Break ........................................................... 254
Watchdog Timer (WDT) ........................................... 299, 308
    Associated Registers ............................................... 309
    Control Register ....................................................... 309
    Programming Considerations .................................. 308
WCOL ...................................................... 223, 224, 225, 228
WCOL Status Flag ................................... 223, 224, 225, 228
WDTCON Register ........................................................... 309
WWW Address ................................................................. 453
WWW, On-Line Support ..................................................... 10
X
XORLW .. .......................................................................... 355
XORWF ............................................................................ 356
DS41303G-page 452                                                                          2010 Microchip Technology Inc.
                                                            PIC18F2XK20/4XK20
THE MICROCHIP WEB SITE                                      CUSTOMER SUPPORT
Microchip provides online support via our WWW site at       Users of Microchip p roducts c an rec eive as sistance
www.microchip.com. This web site is used as a means         through several channels:
to m ake fi les an d i nformation e asily av ailable to     •   Distributor or Representative
customers. Accessible by using your favorite Internet
                                                            •   Local Sales Office
browser, th e w eb si te c ontains the        following
information:                                                •   Field Application Engineer (FAE)
                                                            •   Technical Support
• Product Support – Data sheets and errata,
  application notes and sample programs, design             •   Development Systems Information Line
  resources, user’s guides and hardware support             Customers sh ould con tact the ir dis tributor,
  documents, latest software releases and archived          representative o r fi eld application en gineer (FAE) f or
  software                                                  support. Local sales offices are also available to help
• General Technical Support – Frequently Asked              customers. A lis ting of s ales o ffices an d lo cations i s
  Questions (FAQ), technical support requests,              included in the back of this document.
  online discussion groups, Microchip consultant            Technical support is available through the web site
  program member listing                                    at: http://support.microchip.com
• Business of Microchip – Product selector and
  ordering guides, latest Microchip press releases,
  listing of seminars and events, listings of
  Microchip sales offices, distributors and factory
  representatives
CUSTOMER CHANGE NOTIFICATION
SERVICE
Microchip’s c ustomer notification s ervice h elps keep
customers current on Microchip products. Subscribers
will r eceive e-mail notification w henever t here are
changes, upd ates, rev isions or errat a related to a
specified product family or development tool of interest.
To register, access t he Microchip w eb s ite a t
www.microchip.com, c lick o n Customer C hange
Notification and follow the registration instructions.
 2010 Microchip Technology Inc.                                                                  DS41303G-page 453
PIC18F2XK20/4XK20
READER RESPONSE
It is our intention to provide you with the best documentation possible to ensure successful use of your Microchip prod-
uct. If you wish to provide your comments on organization, clarity, subject matter, and ways in which our documentation
can better serve you, please FAX your comments to the Technical Publications Manager at (480) 792-4150.
Please list the following information, and use this outline to provide us with your comments about this document.
    To:     Technical Publications Manager                                Total Pages Sent ________
    RE:     Reader Response
    From: Name
            Company
            Address
            City / State / ZIP / Country
            Telephone: (_______) _________ - _________                 FAX: (______) _________ - _________
    Application (optional):
    Would you like a reply?      Y         N
             PIC18F2XK20/4XK20
    Device: Lite                                  rature Number: DS41303G
    Questions:
    1. What are the best features of this document?
    2. How does this document meet your hardware and software development needs?
    3. Do you find the organization of this document easy to follow? If not, why?
    4. What additions to the document do you think would enhance the structure and subject?
    5. What deletions from the document could be made without affecting the overall usefulness?
    6. Is there any incorrect or misleading information (what and where)?
    7. How would you improve this document?
DS41303G-page 454                                                                        2010 Microchip Technology Inc.
                                                                             PIC18F2XK20/4XK20
PRODUCT IDENTIFICATION SYSTEM
To order or obtain information, e.g., on pricing or delivery, refer to the factory or the listed sales office.
       PART NO.              X              /XX          XXX
                                                                                        Examples:
         Device       Temperature        Package        Pattern                         a)    PIC18F45K20-E/P 301 = Extended temp.,
                        Range                                                                 PDIP package, QTP pattern #301.
                                                                                        b)    PIC18F23K20-I/SO = Industrial temp., SOIC
                                                                                              package.
                                                                                        c)    PIC18F44K20-E/P = Extended temp., PDIP
  Device:               PIC18F23K20(1), PIC18F24K20(1), PIC18F25K20(1),                       package.
                        PIC18F26K20(1), PIC18F43K20(1), PIC18F44K20(1),
                        PIC18F45K20(1), PIC18F46K20(1)                                  d)    PIC18F46K20T-I/TP = Industrial temp., TQFP
                                                                                              package, tape and reel.
  Temperature           E        =40C -to +125C    (Extended)
  Range:                I        =40C to
                                        - +85C      (Industrial)
  Package:              ML    =    QFN
                        MV    =    UQFN
                        P     =    PDIP
                        PT    =    TQFP (Thin Quad Flatpack)
                        SO    =    SOIC
                        SP    =    Skinny Plastic DIP                                   Note 1:    T    = Part number appended with T
                        SS    =    SSOP                                                                   indicates tape and reel. P and SP
                                                                                                          package options not available in tape
                                                                                                          and reel.
  Pattern:              QTP, SQTP, Code or Special Requirements
                        (blank otherwise)
 2010 Microchip Technology Inc.                                                                                         DS41303G-page 455
                               WORLDWIDE SALES AND SERVICE
AMERICAS                        ASIA/PACIFIC                 ASIA/PACIFIC                  EUROPE
Corporate Office                Asia Pacific Office          India - Bangalore             Austria - Wels
2355 West Chandler Blvd.        Suites 3707-14, 37th Floor   Tel: 91-80-3090-4444          Tel: 43-7242-2244-39
Chandler, AZ 85224-6199         Tower 6, The Gateway         Fax: 91-80-3090-4123          Fax: 43-7242-2244-393
Tel: 480-792-7200               Harbour City, Kowloon        India - New Delhi             Denmark - Copenhagen
Fax: 480-792-7277               Hong Kong                                                  Tel: 45-4450-2828
                                                             Tel: 91-11-4160-8631
Technical Support:              Tel: 852-2401-1200                                         Fax: 45-4485-2829
                                                             Fax: 91-11-4160-8632
http://support.microchip.com
                                Fax: 852-2401-3431                                         France - Paris
Web Address:                                                 India - Pune
                                Australia - Sydney           Tel: 91-20-2566-1512          Tel: 33-1-69-53-63-20
www.microchip.com
                                Tel: 61-2-9868-6733          Fax: 91-20-2566-1513          Fax: 33-1-69-30-90-79
Atlanta                         Fax: 61-2-9868-6755                                        Germany - Munich
Duluth, GA                                                   Japan - Yokohama
                                China - Beijing                                            Tel: 49-89-627-144-0
Tel: 678-957-9614                                            Tel: 81-45-471- 6166
                                Tel: 86-10-8528-2100         Fax: 81-45-471-6122
                                                                                           Fax: 49-89-627-144-44
Fax: 678-957-1455
                                Fax: 86-10-8528-2104                                       Italy - Milan
Boston                                                       Korea - Daegu
                                China - Chengdu                                            Tel: 39-0331-742611
Westborough, MA                                              Tel: 82-53-744-4301
                                Tel: 86-28-8665-5511                                       Fax: 39-0331-466781
Tel: 774-760-0087                                            Fax: 82-53-744-4302
                                Fax: 86-28-8665-7889
Fax: 774-760-0088                                            Korea - Seoul
                                                                                           Netherlands - Drunen
                                China - Chongqing            Tel: 82-2-554-7200            Tel: 31-416-690399
Chicago
                                Tel: 86-23-8980-9588         Fax: 82-2-558-5932 or         Fax: 31-416-690340
Itasca, IL
Tel: 630-285-0071               Fax: 86-23-8980-9500         82-2-558-5934                 Spain - Madrid
Fax: 630-285-0075               China - Hong Kong SAR                                      Tel: 34-91-708-08-90
                                                             Malaysia - Kuala Lumpur
                                Tel: 852-2401-1200                                         Fax: 34-91-708-08-91
Cleveland                                                    Tel: 60-3-6201-9857
Independence, OH                Fax: 852-2401-3431           Fax: 60-3-6201-9859           UK - Wokingham
Tel: 216-447-0464               China - Nanjing                                            Tel: 44-118-921-5869
                                                             Malaysia - Penang
Fax: 216-447-0643               Tel: 86-25-8473-2460                                       Fax: 44-118-921-5820
                                                             Tel: 60-4-227-8870
Dallas                          Fax: 86-25-8473-2470         Fax: 60-4-227-4068
Addison, TX                     China - Qingdao              Philippines - Manila
Tel: 972-818-7423               Tel: 86-532-8502-7355        Tel: 63-2-634-9065
Fax: 972-818-2924               Fax: 86-532-8502-7205        Fax: 63-2-634-9069
Detroit                         China - Shanghai             Singapore
Farmington Hills, MI            Tel: 86-21-5407-5533         Tel: 65-6334-8870
Tel: 248-538-2250               Fax: 86-21-5407-5066         Fax: 65-6334-8850
Fax: 248-538-2260
                                China - Shenyang             Taiwan - Hsin Chu
Kokomo                          Tel: 86-24-2334-2829         Tel: 886-3-6578-300
Kokomo, IN
                                Fax: 86-24-2334-2393         Fax: 886-3-6578-370
Tel: 765-864-8360
Fax: 765-864-8387               China - Shenzhen             Taiwan - Kaohsiung
                                Tel: 86-755-8203-2660        Tel: 886-7-536-4818
Los Angeles
                                Fax: 86-755-8203-1760        Fax: 886-7-536-4803
Mission Viejo, CA
Tel: 949-462-9523               China - Wuhan                Taiwan - Taipei
Fax: 949-462-9608               Tel: 86-27-5980-5300         Tel: 886-2-2500-6610
                                Fax: 86-27-5980-5118         Fax: 886-2-2508-0102
Santa Clara
Santa Clara, CA                 China - Xian                 Thailand - Bangkok
Tel: 408-961-6444               Tel: 86-29-8833-7252         Tel: 66-2-694-1351
Fax: 408-961-6445               Fax: 86-29-8833-7256         Fax: 66-2-694-1350
Toronto                         China - Xiamen
Mississauga, Ontario,           Tel: 86-592-2388138
Canada                          Fax: 86-592-2388130
Tel: 905-673-0699               China - Zhuhai
Fax: 905-673-6509               Tel: 86-756-3210040
                                Fax: 86-756-3210049
                                                                                                            01/05/10
DS41303G-page 456                                                                       2010 Microchip Technology Inc.