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

产品描述

搜索
 

PIC18F4610-E/SP

器件型号:PIC18F4610-E/SP
器件类别:半导体    嵌入式处理器和控制器   
厂商名称:Microchip
厂商官网:https://www.microchip.com
下载文档

器件描述

16-BIT, FLASH, 40 MHz, MICROCONTROLLER, PDSO28

16位, FLASH, 40 MHz, 单片机, PDSO28

参数
PIC18F4610-E/SP功能数量 1
PIC18F4610-E/SP端子数量 28
PIC18F4610-E/SP最大工作温度 85 Cel
PIC18F4610-E/SP最小工作温度 -40 Cel
PIC18F4610-E/SP最大供电/工作电压 5.5 V
PIC18F4610-E/SP最小供电/工作电压 4.2 V
PIC18F4610-E/SP额定供电电压 5 V
PIC18F4610-E/SP外部数据总线宽度 8
PIC18F4610-E/SP输入输出总线数量 25
PIC18F4610-E/SP线速度 40 MHz
PIC18F4610-E/SP加工封装描述 7.50 MM, LEAD FREE, PLASTIC, SOIC-28
PIC18F4610-E/SP无铅 Yes
PIC18F4610-E/SP欧盟RoHS规范 Yes
PIC18F4610-E/SP中国RoHS规范 Yes
PIC18F4610-E/SP状态 ACTIVE
PIC18F4610-E/SP包装形状 RECTANGULAR
PIC18F4610-E/SP包装尺寸 SMALL OUTLINE
PIC18F4610-E/SP表面贴装 Yes
PIC18F4610-E/SP端子形式 GULL WING
PIC18F4610-E/SP端子间距 1.27 mm
PIC18F4610-E/SP端子涂层 MATTE TIN
PIC18F4610-E/SP端子位置 DUAL
PIC18F4610-E/SP包装材料 PLASTIC/EPOXY
PIC18F4610-E/SP温度等级 INDUSTRIAL
PIC18F4610-E/SPADC通道 Yes
PIC18F4610-E/SP地址总线宽度 20
PIC18F4610-E/SP位数 16
PIC18F4610-E/SP最大FCLK时钟频率 40 MHz
PIC18F4610-E/SP微处理器类型 MICROCONTROLLER
PIC18F4610-E/SPPWM通道 Yes
PIC18F4610-E/SPROM编程 FLASH

PIC18F4610-E/SP器件文档内容

       PIC18F2X1X/4X1X

28/40/44-Pin Flash Microcontrollers with
  10-Bit A/D and nanoWatt Technology

Power-Managed Modes:                                   Flexible Oscillator Structure:

Run: CPU On, Peripherals On                           Four Crystal modes, Up to 40 MHz
Idle: CPU Off, Peripherals On                         4x Phase Lock Loop (PLL) Available for Crystal
Sleep: CPU Off, Peripherals Off
Idle mode Currents Down to 3.0 A Typical                and Internal Oscillators
Sleep mode Currents Down to 20 nA Typical             Two External RC modes, Up to 4 MHz
Timer1 Oscillator: 1.8 A, 32 kHz, 2V                  Two External Clock modes, Up to 40 MHz
Watchdog Timer: 2.1 A                                 Internal Oscillator Block:
Two-Speed Oscillator Start-up
                                                          - 8 user-selectable frequencies, from 31 kHz to
Peripheral Highlights:                                       8 MHz

High-Current Sink/Source 25 mA/25 mA                    - Provides a complete range of clock speeds
Up to 2 Capture/Compare/PWM (CCP) modules,                 from 31 kHz to 32 MHz when used with PLL

   One with Auto-Shutdown (28-pin devices)                - User-tunable to compensate for frequency drift
Enhanced Capture/Compare/PWM (ECCP)                   Secondary Oscillator using Timer1 @ 32 kHz
                                                       Fail-Safe Clock Monitor:
   module (40/44-pin devices only):
   - One, two or four PWM outputs                         - Allows for safe shutdown if peripheral clock stops
   - Selectable polarity
   - Programmable dead time                            Special Microcontroller Features:
   - Auto-shutdown and auto-restart
Master Synchronous Serial Port (MSSP) module          C Compiler Optimized Architecture:
   Supporting 3-Wire SPI (all 4 modes) and I2CTM          - Optional extended instruction set designed to
   Master and Slave modes                                    optimize re-entrant code
Enhanced Addressable USART module:
   - Supports RS-485, RS-232 and LIN 1.2                100,000 Erase/Write Cycle Flash Program
   - RS-232 operation using internal oscillator           Memory Typical

      block (no external crystal required)             Three Programmable External Interrupts
   - Auto-wake-up on Start bit                         Four Input Change Interrupts
   - Auto-Baud Detect                                  Priority Levels for Interrupts
10-Bit, Up to 13-Channel Analog-to-Digital            8 x 8 Single-Cycle Hardware Multiplier
   Converter module (A/D):                              Extended Watchdog Timer (WDT):
   - Auto-acquisition capability
   - Conversion available during Sleep                    - Programmable period from 4 ms to 131s
Dual Analog Comparators with Input Multiplexing       Single-Supply 5V In-Circuit Serial
Programmable 16-Level High/Low-Voltage
   Detection (HLVD) module:                               ProgrammingTM (ICSPTM) via Two Pins
   - Supports interrupt on High/Low-Voltage Detection   In-Circuit Debug (ICD) via Two Pins
                                                       Wide Operating Voltage Range: 2.0V to 5.5V
                                                       Programmable Brown-out Reset (BOR) with

                                                          Software Enable Option

2009 Microchip Technology Inc.                       DS39636D-page 3
PIC18F2X1X/4X1X

            Program Memory      Data                              MSSP     EUSART
                              Memory
Device  Flash # Single-Word            I/O  10-Bit CCP/ECCP                        Comp.  Timers
        (bytes) Instructions   SRAM                                                       8/16-Bit
                              (bytes)       A/D (ch)  (PWM)       Master
                                                                   I2CTM
                                                             SPI

PIC18F2410 16K   8192         768      25   10        2/0    Y          Y  1       2      1/3

PIC18F2510 32K   16384        1536     25   10        2/0    Y          Y  1       2      1/3

PIC18F2515 48K   24576        3968     25   10        2/0    Y          Y  1       2      1/3

PIC18F2610 64K   32768        3968     25   10        2/0    Y          Y  1       2      1/3

PIC18F4410 16K   8192         768      36   13        1/1    Y          Y  1       2      1/3

PIC18F4510 32K   16384        1536     36   13        1/1    Y          Y  1       2      1/3

PIC18F4515 48K   24576        3968     36   13        1/1    Y          Y  1       2      1/3

PIC18F4610 64K   32768        3968     36   13        1/1    Y          Y  1       2      1/3

DS39636D-page 4                                                    2009 Microchip Technology Inc.
                                                                                                 PIC18F2X1X/4X1X

Pin Diagrams

28-pin SPDIP, SOIC

                                  MCLR/VPP/RE3           1               28                          RB7/KBI3/PGD

                                  RA0/AN0                2               27                          RB6//KBI2/PGC

                                  RA1/AN1                3               26                          RB5/KBI1/PGM

              RA2/AN2/VREF-/CVREF                        4               25                          RB4/KBI0/AN11

                                  RA3/AN3/VREF+          5   PIC18F2X1X  24                          RB3/AN9/CCP2(1)

                    RA4/T0CKI/C1OUT                      6               23                          RB2/INT2/AN8

              RA5/AN4/SS/HLVDIN/C2OUT                    7               22                          RB1/INT1/AN10

                                  VSS                    8               21                          RB0/INT0/FLT0/AN12

                                  OSC1/CLKI/RA7          9               20                          VDD

                    OSC2/CLKO/RA6                     10                 19                          VSS

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

                    RC1/T1OSI/CCP2(1)                 12                 17                          RC6/TX/CK

                                  RC2/CCP1            13                 16                          RC5/SDO

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

28-pin QFN                                                   RA1/AN1
                                                                RA0/AN0
                                                                     MCLR/VPP/RE3
                                                                        RB7/KBI3/PGD
                                                                            RB6/KBI2/PGC
                                                                                RB5/KBI1/PGM
                                                                                   RB4KBI0/AN11

                                                             28 27 26 25 24 23 22

                       RA2/AN2/VREF-/CVREF               1                                       21  RB3/AN9/CCP2(1)
                                RA3/AN3/VREF+                                                        RB2/INT2/AN8
                                                         2                                       20  RB1/INT1/AN10
                            RA4/T0CKI/C1OUT                                                          RB0/INT0/FLT0/AN12
              RA5/AN4/SS/HLVDIN/C2OUT                    3 PIC18F2410 19                             VDD
                                                                                                     VSS
                                                 VSS     4 PIC18F2510 18                             RC7/RX/DT
                                OSC1/CLKI/RA7            5                                       17
                              OSC2/CLKO/RA6
                                                         6                                       16

                                                         7                                       15

                                                             8 9 10 11 12 13 14

                                                             RC0/T1OSO/T13CKI
                                                                RC1/T1OSI/CCP2(1)

                                                                    RC2/CCP1
                                                                        RC3/SCK/SCL
                                                                            RC4/SDI/SDA

                                                                                RC5/SDO
                                                                                   RC6/TX/CK

40-pin PDIP

                                  MCLR/VPP/RE3           1               40                          RB7/KBI3/PGD

                                  RA0/AN0                2               39                          RB6/KBI2/PGC

                                  RA1/AN1                3               38                          RB5/KBI1/PGM

              RA2/AN2/VREF-/CVREF                        4               37                          RB4/KBI0/AN11

                                  RA3/AN3/VREF+          5               36                          RB3/AN9/CCP2(1)

                    RA4/T0CKI/C1OUT                      6               35                          RB2/INT2/AN8

              RA5/AN4/SS/HLVDIN/C2OUT                    7               34                          RB1/INT1/AN10

                                  RE0/RD/AN5             8   PIC18F4X1X  33                          RB0/INT0/FLT0/AN12

                                  RE1/WR/AN6             9               32                          VDD

                                  RE2/CS/AN7             10              31                          VSS

                                  VDD                    11              30                          RD7/PSP7/P1D

                                  VSS                    12              29                          RD6/PSP6/P1C

                    OSC1/CLKI/RA7                        13              28                          RD5/PSP5/P1B

                    OSC2/CLKO/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

Note 1: RB3 is the alternate pin for CCP2 multiplexing.

2009 Microchip Technology Inc.                                                                                         DS39636D-page 5
PIC18F2X1X/4X1X                                                                                                                                           RC1/T1OSI/CCP2(1)

Pin Diagrams (Cont.'d)

               44-pin TQFP

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

                                 44              43       42             41            40            39            38            37           36            35                   34                NC
                                                                                                                                                                                                   RC0/T1OSO/T13CKI
             RC7/RX/DT       1                                                                                                                                                   33                OSC2/CLKO/RA6
                                                                                                                                                                                                   OSC1/CLKI/RA7
              RD4/PSP4       2                                                                                                                                                   32                VSS
        RD5/PSP5/P1B                                                                                                                                                                               VDD
        RD6/PSP6/P1C         3                                                                                                                                                   31                RE2/CS/AN7
        RD7/PSP7/P1D                                                                                                                                                                               RE1/WR/AN6
                             4                                                                                                                                                   30                RE0/RD/AN5
                        VSS                                                                                                                                                                        RA5/AN4/SS/HLVDIN/C2OUT
                       VDD   5                                                                                                                                                   29                RA4/T0CKI/C1OUT
RB0/INT0/FLT0/AN12
                             6 PIC18F4X1X 28
       RB1/INT1/AN10
         RB2/INT2/AN8        7                                                                                                                                                   27

    RB3/AN9/CCP2(1)          8                                                                                                                                                   26

                             9                                                                                                                                                   25

                             10                                                                                                                                                  24

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

                                 NC              NC       RB4/KBI0/AN11  RB5/KBI1/PGM  RB6/KBI2/PGC  RB7/KBI3/PGD  MCLR/VPP/RE3  RA0/AN0      RA1/AN1       RA2/AN2/VREF-/CVREF  RA3/AN3/VREF+

44-pin QFN                       RC6/TX/CK       RC5/SDO  RC4/SDI/SDA    RD3/PSP3      RD2/PSP2      RD1/PSP1      RD0/PSP0      RC3/SCK/SCL  RC2/CCP1/P1A  RC1/T1OSI/CCP2(1)    RC0/T1OSO/T13CKI

                                 44              43       42             41            40            39            38            37           36            35                   34

             RC7/RX/DT       1                                                                                                                                                       33            OSC2/CLKO/RA6
              RD4/PSP4                                                                                                                                                                             OSC1/CLKI/RA7
        RD5/PSP5/P1B         2                                                                                                                                                       32            VSS
        RD6/PSP6/P1C                                                                                                                                                                               VSS
        RD7/PSP7/P1D         3                                                                                                                                                       31            VDD
                                                                                                                                                                                                   VDD
                        VSS  4                                                                                                                                                       30
                       VDD                                                                                                                                                                         RE2/CS/AN7
                       VDD   5                                                          29                                                                                                         RE1/WR/AN6
RB0/INT0/FLT0/AN12           6                                                                                                                                                                     RE0/RD/AN5
       RB1/INT1/AN10                                      PIC18F4X1X 28                                                                                                                            RA5/AN4/SS/HLVDIN/C2OUT
         RB2/INT2/AN8                                                                                                                                                                              RA4/T0CKI/C1OUT
                             7                                                                                                                                                       27

                             8                                                                                                                                                       26

                             9                                                                                                                                                       25

                             10                                                                                                                                                      24

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

                                RB3/AN9/CCP2(1)  NC       RB4/KBI0/AN11  RB5/KBI1/PGM  RB6/KBI2/PGC  RB7/KBI3/PGD  MCLR/VPP/RE3  RA0/AN0      RA1/AN1       RA2/AN2/VREF-/CVREF  RA3/AN3/VREF+

                    Note 1: RB3 is the alternate pin for CCP2 multiplexing.                                                                                                                         2009 Microchip Technology Inc.
DS39636D-page 6
                                      PIC18F2X1X/4X1X

Table of Contents

1.0 Device Overview .......................................................................................................................................................................... 9
2.0 Oscillator Configurations ............................................................................................................................................................ 25
3.0 Power-Managed Modes ............................................................................................................................................................. 35
4.0 Reset .......................................................................................................................................................................................... 43
5.0 Memory Organization ................................................................................................................................................................. 55
6.0 Flash Program Memory.............................................................................................................................................................. 77
7.0 8 x 8 Hardware Multiplier............................................................................................................................................................ 81
8.0 Interrupts .................................................................................................................................................................................... 83
9.0 I/O Ports ..................................................................................................................................................................................... 97
10.0 Timer0 Module ......................................................................................................................................................................... 115
11.0 Timer1 Module ......................................................................................................................................................................... 119
12.0 Timer2 Module ......................................................................................................................................................................... 125
13.0 Timer3 Module ......................................................................................................................................................................... 127
14.0 Capture/Compare/PWM (CCP) Modules ................................................................................................................................. 131
15.0 Enhanced Capture/Compare/PWM (ECCP) Module................................................................................................................ 139
16.0 Master Synchronous Serial Port (MSSP) Module .................................................................................................................... 153
17.0 Enhanced Universal Synchronous Receiver Transmitter (EUSART)....................................................................................... 193
18.0 10-Bit Analog-to-Digital Converter (A/D) Module ..................................................................................................................... 213
19.0 Comparator Module.................................................................................................................................................................. 223
20.0 Comparator Voltage Reference Module................................................................................................................................... 229
21.0 High/Low-Voltage Detect (HLVD)............................................................................................................................................. 233
22.0 Special Features of the CPU.................................................................................................................................................... 239
23.0 Instruction Set Summary .......................................................................................................................................................... 259
24.0 Development Support............................................................................................................................................................... 309
25.0 Electrical Characteristics .......................................................................................................................................................... 313
26.0 DC and AC Characteristics Graphs And Tables ...................................................................................................................... 351
27.0 Packaging Information.............................................................................................................................................................. 353
Appendix A: Revision History............................................................................................................................................................. 361
Appendix B: Device Differences ........................................................................................................................................................ 361
Appendix C: Conversion Considerations ........................................................................................................................................... 362
Appendix D: Migration From Baseline to Enhanced Devices ............................................................................................................ 362
Appendix E: Migration From Mid-Range to Enhanced Devices ......................................................................................................... 363
Appendix F: Migration From High-End to Enhanced Devices............................................................................................................ 363
Index ................................................................................................................................................................................................. 365
The Microchip Web Site ..................................................................................................................................................................... 375
Customer Change Notification Service .............................................................................................................................................. 375
Customer Support .............................................................................................................................................................................. 375
Reader Response .............................................................................................................................................................................. 376
PIC18F2X1X/4X1X Product Identification System............................................................................................................................. 377

2009 Microchip Technology Inc.  DS39636D-page 7
PIC18F2X1X/4X1X

                                    TO OUR VALUED CUSTOMERS

  It is our intention to provide our valued customers with the best documentation possible to ensure successful use of your Microchip
  products. To this end, we will continue to improve our publications to better suit your needs. Our publications will be refined and
  enhanced as new volumes and updates are introduced.
  If you have any questions or comments regarding this publication, please contact the Marketing Communications Department via
  E-mail at docerrors@microchip.com 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)
  When contacting a sales office, please specify which device, revision of silicon and data sheet (include literature number) you are
  using.

Customer Notification System

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

DS39636D-page 8   2009 Microchip Technology Inc.
                                                                PIC18F2X1X/4X1X

1.0 DEVICE OVERVIEW                                      1.1.2  MULTIPLE OSCILLATOR OPTIONS
                                                                AND FEATURES
This document contains device specific information for
the following devices:                                   All of the devices in the PIC18F2X1X/4X1X family offer
                                                         ten different oscillator options, allowing users a wide
PIC18F2410   PIC18LF2410                              range of choices in developing application hardware.
PIC18F2510   PIC18LF2510                              These include:
PIC18F2515   PIC18LF2515
                                                          Four Crystal modes, using crystals or ceramic
PIC18F2610   PIC18LF2610                                 resonators
PIC18F4410   PIC18LF4410
PIC18F4510   PIC18LF4510                               Two External Clock modes, offering the option of
PIC18F4515   PIC18LF4515                                 using two pins (oscillator input and a divide-by-4
PIC18F4610   PIC18LF4610                                 clock output) or one pin (oscillator input, with the
                                                            second pin reassigned as general I/O)
This family offers the advantages of all PIC18
microcontrollers namely, high computational             Two External RC Oscillator modes with the same
performance at an economical price with the addition      pin options as the External Clock modes
of high-endurance, Flash program memory. On top of
these features, the PIC18F2X1X/4X1X family introduces    An internal oscillator block which provides an
design enhancements that make these microcontrollers        8 MHz clock and an INTRC source (approxi-
a logical choice for many high-performance, power           mately 31 kHz), as well as a range of 6 user
sensitive applications.                                     selectable clock frequencies, between 125 kHz to
                                                            4 MHz, for a total of 8 clock frequencies. This
1.1 New Core Features                                       option frees the two oscillator pins for use as
                                                            additional general purpose I/O.
1.1.1 nanoWatt TECHNOLOGY
                                                          A Phase Lock Loop (PLL) frequency multiplier,
All of the devices in the PIC18F2X1X/4X1X family            available to both the high-speed crystal and Inter-
incorporate a range of features that can significantly      nal Oscillator modes, which allows clock speeds of
reduce power consumption during operation. Key              up to 40 MHz. Used with the internal oscillator, the
items include:                                              PLL gives users a complete selection of clock
                                                            speeds, from 31 kHz to 32 MHz all without using
Alternate Run Modes: By clocking the controller           an external crystal or clock circuit.
   from the Timer1 source or the internal oscillator
   block, power consumption during code execution        Besides its availability as a clock source, the internal
   can be reduced by as much as 90%.                     oscillator block provides a stable reference source that
                                                         gives the family additional features for robust
Multiple Idle Modes: The controller can also run       operation:
   with its CPU core disabled but the peripherals still
   active. In these states, power consumption can be      Fail-Safe Clock Monitor: This option constantly
   reduced even further, to as little as 4% of normal       monitors the main clock source against a
   operation requirements.                                  reference signal provided by the internal
                                                            oscillator. If a clock failure occurs, the controller is
On-the-fly Mode Switching: The power-                     switched to the internal oscillator block, allowing
   managed modes are invoked by user code during            for continued low-speed operation or a safe
   operation, allowing the user to incorporate power-       application shutdown.
   saving ideas into their application's software
   design.                                                Two-Speed Start-up: This option allows the
                                                            internal oscillator to serve as the clock source
Lower Consumption in Key Modules: The                     from Power-on Reset, or wake-up from Sleep
   power requirements for both Timer1 and the               mode, until the primary clock source is available.
   Watchdog Timer have been minimized. See
   Section 25.0 "Electrical Characteristics" for
   values.

2009 Microchip Technology Inc.                                DS39636D-page 9
PIC18F2X1X/4X1X                                         1.3 Details on Individual Family
                                                                 Members
1.2 Other Special Features
                                                        Devices in the PIC18F2X1X/4X1X family are available
Memory Endurance: The Flash cells for program         in 28-pin and 40/44-pin packages. Block diagrams for
   memory are rated to 100,000 erase/write cycles.      the two groups are shown in Figure 1-1 and Figure 1-2.
   Data retention without refresh is conservatively
   estimated to be greater than 40 years.               The devices are differentiated from each other in five
                                                        ways:
Extended Instruction Set: The PIC18F2X1X/
   4X1X family introduces an optional extension to      1. Flash program memory
   the PIC18 instruction set, which adds 8 new                16 Kbytes for PIC18F2410/4410 devices
   instructions and an Indexed Addressing mode.                32 Kbytes for PIC18F2510/4510 devices
   This extension, enabled as a device configuration          48 Kbytes for PIC18F2515/4515 devices
   option, has been specifically designed to optimize          64 Kbytes for PIC18F2610/4610 devices
   re-entrant application code originally developed in
   high-level languages, such as C.                     2. A/D channels (10 for 28-pin devices, 13 for
                                                              40/44-pin devices).
Enhanced CCP Module: In PWM mode, this
   module provides 1, 2 or 4 modulated outputs for      3. I/O ports (3 bidirectional ports on 28-pin devices,
   controlling half-bridge and full-bridge drivers.           5 bidirectional ports on 40/44-pin devices).
   Other features include Auto-Shutdown, for
   disabling PWM outputs on interrupt or other select   4. CCP and Enhanced CCP implementation (28-pin
   conditions and Auto-Restart, to reactivate outputs         devices have 2 standard CCP modules; 40/44-pin
   once the condition has cleared.                            devices have one standard CCP module and one
                                                              ECCP module).
Enhanced Addressable USART: This serial
   communication module is capable of standard          5. Parallel Slave Port (present only on 40/44-pin
   RS-232 operation and provides support for the LIN          devices).
   bus protocol. Other enhancements include auto-
   matic baud rate detection and a 16-bit Baud Rate     All other features for devices in this family are identical.
   Generator for improved resolution. When the          These are summarized in Table 1-1.
   microcontroller is using the internal oscillator
   block, the USART provides stable operation for       The pinouts for all devices are listed in Table 1-3 and
   applications that talk to the outside world without  Table 1-4.
   using an external crystal (or its accompanying
   power requirement).                                  Like all Microchip PIC18 devices, members of the
                                                        PIC18F2X1X/4X1X family are available as both
10-bit A/D Converter: This module incorporates        standard and low-voltage devices. Standard devices
   programmable acquisition time, allowing for a        with Flash memory, designated with an "F" in the part
   channel to be selected and a conversion to be        number (such as PIC18F2610), accommodate an
   initiated without waiting for a sampling period and  operating VDD range of 4.2V to 5.5V. Low-voltage
   thus, reduce code overhead.                          parts, designated by "LF" (such as PIC18LF2610),
                                                        function over an extended VDD range of 2.0V to 5.5V.
Extended Watchdog Timer (WDT): This
   enhanced version incorporates a 16-bit prescaler,
   allowing an extended time-out range that is stable
   across operating voltage and temperature. See
   Section 25.0 "Electrical Characteristics" for
   time-out periods.

DS39636D-page 10                                        2009 Microchip Technology Inc.
                                                                        PIC18F2X1X/4X1X

TABLE 1-1: DEVICE FEATURES (PIC18F2410/2415/2510/2515/2610)

           Features               PIC18F2410          PIC18F2510          PIC18F2515          PIC18F2610

Operating Frequency               DC 40 MHz         DC 40 MHz         DC 40 MHz         DC 40 MHz

Program Memory (Bytes)            16384               32768               49152               65536

Program Memory                    8192                16384               24576               32768
(Instructions)

Data Memory (Bytes)               768                 1536                3968                3968

Interrupt Sources                 18                  18                  18                  18

I/O Ports                         Ports A, B, C, (E)  Ports A, B, C, (E)  Ports A, B, C, (E)  Ports A, B, C, (E)

Timers                            4                   4                   4                   4

Capture/Compare/PWM Modules       2                   2                   2                   2

Enhanced                          0                   0                   0                   0

Capture/Compare/PWM Modules

Serial Communications                    MSSP,               MSSP,               MSSP,               MSSP,
                                  Enhanced USART      Enhanced USART      Enhanced USART      Enhanced USART

Parallel Communications (PSP)     No                  No                  No                  No

10-bit Analog-to-Digital Module   10 Input Channels   10 Input Channels   10 Input Channels   10 Input Channels

Resets (and Delays)                   POR, BOR,           POR, BOR,           POR, BOR,           POR, BOR,
                                  RESET Instruction,  RESET Instruction,  RESET Instruction,  RESET Instruction,

                                       Stack Full,         Stack Full,         Stack Full,         Stack Full,
                                   Stack Underflow     Stack Underflow     Stack Underflow     Stack Underflow
                                    (PWRT, OST),        (PWRT, OST),        (PWRT, OST),        (PWRT, OST),
                                  MCLR (optional),    MCLR (optional),    MCLR (optional),    MCLR (optional),

                                          WDT                  WDT                WDT                 WDT

Programmable                      Yes                 Yes                 Yes                 Yes

High/Low-Voltage Detect

Programmable                      Yes                 Yes                 Yes                 Yes
Brown-out Reset

Instruction Set                   75 Instructions;    75 Instructions;    75 Instructions;    75 Instructions;

                                  83 with Extended    83 with Extended    83 with Extended    83 with Extended

                                  Instruction Set enabled Instruction Set enabled Instruction Set enabled Instruction Set enabled

Packages                          28-pin SPDIP        28-pin SPDIP        28-pin SPDIP        28-pin SPDIP
                                  28-pin SOIC         28-pin SOIC         28-pin SOIC         28-pin SOIC
                                   28-pin QFN          28-pin QFN

2009 Microchip Technology Inc.                                                              DS39636D-page 11
PIC18F2X1X/4X1X

TABLE 1-2: DEVICE FEATURES (PIC18F4410/4415/4510/4515/4610)

           Features              PIC18F4410           PIC18F4510           PIC18F4515           PIC18F4610

Operating Frequency              DC 40 MHz          DC 40 MHz          DC 40 MHz          DC 40 MHz

Program Memory (Bytes)           16384                32768                49152                65536

Program Memory                   8192                 16384                24576                32768
(Instructions)

Data Memory (Bytes)              768                  1536                 3968                 3968

Interrupt Sources                19                   19                   19                   19

I/O Ports                        Ports A, B, C, D, E  Ports A, B, C, D, E  Ports A, B, C, D, E  Ports A, B, C, D, E

Timers                           4                    4                    4                    4

Capture/Compare/PWM Modules      1                    1                    1                    1

Enhanced                         1                    1                    1                    1

Capture/Compare/PWM Modules

Serial Communications                   MSSP,                MSSP,                MSSP,                MSSP,
                                 Enhanced USART       Enhanced USART       Enhanced USART       Enhanced USART

Parallel Communications (PSP)    Yes                  Yes                  Yes                  Yes

10-Bit Analog-to-Digital Module  13 Input Channels    13 Input Channels    13 Input Channels    13 Input Channels

Resets (and Delays)                  POR, BOR,            POR, BOR,            POR, BOR,            POR, BOR,
                                 RESET Instruction,   RESET Instruction,   RESET Instruction,   RESET Instruction,

                                      Stack Full,          Stack Full,          Stack Full,          Stack Full,
                                  Stack Underflow      Stack Underflow      Stack Underflow      Stack Underflow
                                   (PWRT, OST),         (PWRT, OST),         (PWRT, OST),         (PWRT, OST),
                                 MCLR (optional),     MCLR (optional),     MCLR (optional),     MCLR (optional),

                                         WDT                  WDT                   WDT                 WDT

Programmable                     Yes                  Yes                  Yes                  Yes

High/Low-Voltage Detect

Programmable                     Yes                  Yes                  Yes                  Yes
Brown-out Reset

Instruction Set                  75 Instructions;     75 Instructions;     75 Instructions;     75 Instructions;

                                 83 with Extended     83 with Extended     83 with Extended     83 with Extended

                                 Instruction Set enabled Instruction Set enabled Instruction Set enabled Instruction Set enabled

Packages                         40-pin PDIP          40-pin PDIP          40-pin PDIP          40-pin PDIP
                                 44-pin QFN           44-pin QFN           44-pin QFN           44-pin QFN
                                 44-pin TQFP          44-pin TQFP          44-pin TQFP          44-pin TQFP

DS39636D-page 12                                                                2009 Microchip Technology Inc.
                                                                                              PIC18F2X1X/4X1X

FIGURE 1-1:             PIC18F2410/2415/2510/2515/2610 (28-PIN) BLOCK DIAGRAM

                                                  Data Bus<8>

Table Pointer<21>

                                        88                                     Data Latch             PORTA

inc/dec logic           PCLATU PCLATH                                        Data Memory                     RA0/AN0
                                                                               (.7, 1.5, 3.9
      21                PCU PCH PCL                                                                          RA1/AN1
                    20   Program Counter                                         Kbytes)
                                                                                                             RA2/AN2/VREF-/CVREF
                                                                             Address Latch
                                                                                                             RA3/AN3/VREF+
                                                                                        12
                                                                          Data Address<12>                   RA4/T0CKI/C1OUT

                                                                                                             RA5/AN4/SS/HLVDIN/C2OUT
                                                                                                             OSC2/CLKO(3)/RA6
                                                                                                             OSC1/CLKI(3)/RA7

Address Latch           31 Level Stack                                 4          12       4
                           STKPTR                                  BSR                Access
Program Memory                                                               FSR0      Bank
   (16/32/48/64                                                              FSR1                     PORTB
      Kbytes)                                                                FSR2            12

   Data Latch

                   8                                                         inc/dec                         RB0/INT0/FLT0/AN12
                             Table Latch                                      logic                          RB1/INT1/AN10
                                                                                                             RB2/INT2/AN8
                                       ROM Latch                             Address                         RB3/AN9/CCP2(1)
Instruction Bus <16>                                                         Decode                          RB4/KBI0/AN11
                                                                                                             RB5/KBI1/PGM
                                      IR                                                                     RB6/KBI2/PGC
                                                                                                             RB7/KBI3/PGD

                         Instruction              State Machine                                 8
                        Decode and                Control Signals            PRODH PRODL

                           Control

                                                                         3   8 x 8 Multiply           PORTC  RC0/T1OSO/T13CKI
                                                                                                   8  PORTE  RC1/T1OSI/CCP2(1)
                                                                   BITOP                                     RC2/CCP1
                                                                          8     W                8           RC3/SCK/SCL
                                                                                                             RC4/SDI/SDA
                                                                                      8                      RC5/SDO
                                                                                                             RC6/TX/CK
OSC1(3)          Internal                            Power-up                8                   8           RC7/RX/DT
OSC2(3)        Oscillator                              Timer
T1OSI                                                                        ALU<8>                          MCLR/VPP/RE3(2)
T1OSO             Block                              Oscillator
MCLR(2)                                           Start-up Timer                      8
VDD, VSS         INTRC
               Oscillator                            Power-on      Precision
                                                       Reset       Band Gap
                 8 MHz                                             Reference
               Oscillator                           Watchdog
                                                       Timer
             Single-Supply
             Programming                            Brown-out
                                                       Reset
                In-Circuit
               Debugger                              Fail-Safe
                                                  Clock Monitor

BOR                         Timer0                Timer1           Timer2             Timer3
HLVD

Comparator   CCP1           CCP2                  MSSP             EUSART              ADC
                                                                                      10-bit

Note 1:      CCP2 is multiplexed with RC1 when Configuration bit, CCP2MX, is set, or RB3 when CCP2MX is not set.
         2:
         3:  RE3 is only available when MCLR functionality is disabled.

             OSC1/CLKI and OSC2/CLKO 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 Configurations" for additional information.

2009 Microchip Technology Inc.                                                                             DS39636D-page 13
PIC18F2X1X/4X1X

FIGURE 1-2:                PIC18F4410/4415/4510/4515/4610 (40/44-PIN) BLOCK DIAGRAM

                                                   Data Bus<8>                                        PORTA
                                                                                                      PORTB
Table Pointer<21>                             88                               Data Latch             PORTC  RA0/AN0
                                                                                                      PORTD  RA1/AN1
   inc/dec logic               PCLATU PCLATH                                 Data Memory              PORTE  RA2/AN2/VREF-/CVREF
         21                                                                   (.7, 1.5, 3.9                  RA3/AN3/VREF+
                       20     PCU PCH PCL                                                                    RA4/T0CKI/C1OUT
                               Program Counter                                   Kbytes)                     RA5/AN4/SS/HLVDIN/C2OUT
Address Latch                                                                                               OSC2/CLKO(3)/RA6
Program Memory                   31 Level Stack                              Address Latch                   OSC1/CLKI(3)/RA7
                                    STKPTR
   (16/32/48/64                                                                          12                  RB0/INT0/FLT0/AN12
      Kbytes)              Table Latch                                     Data Address<12>                  RB1/INT1/AN10
                                                                                                             RB2/INT2/AN8
   Data Latch                                                           4         12       4                 RB3/AN9/CCP2(1)
                                                                    BSR               Access                 RB4/KBI0/AN11
                       8                                                     FSR0      Bank                  RB5/KBI1/PGM
                                                                             FSR1                            RB6/KBI2/PGC
                                                                             FSR2            12              RB7/KBI3/PGD

                                                                             inc/dec                         RC0/T1OSO/T13CKI
                                                                              logic                          RC1/T1OSI/CCP2(1)
                                                                                                             RC2/CCP1/P1A
                                        ROM Latch                            Address                         RC3/SCK/SCL
Instruction Bus <16>                                                         Decode                          RC4/SDI/SDA
                                                                                                             RC5/SDO
                                             IR                                                              RC6/TX/CK
                                                                                                             RC7/RX/DT
                            Instruction            State Machine                                8
                           Decode and              Control Signals           PRODH PRODL                     RD0/PSP0:RD4/PSP4
                                                                                                             RD5/PSP5/P1B
                              Control                                                                        RD6/PSP6/P1C
                                                                                                             RD7/PSP7/P1D
                                                                         3   8 x 8 Multiply
                                                                                                   8         RE0/RD/AN5
                                                                    BITOP                                    RE1/WR/AN6
                                                                          8     W                8           RE2/CS/AN7
                                                                                                             MCLR/VPP/RE3(2)
                                                                                      8

OSC1(3)          Internal                             Power-up               8                   8
OSC2(3)        Oscillator                               Timer
T1OSI                                                                        ALU<8>
T1OSO             Block                               Oscillator
MCLR(2)                                            Start-up Timer                     8
VDD, VSS         INTRC
                Oscillator                           Power-on       Precision
                                                        Reset       Band Gap
                 8 MHz                                              Reference
               Oscillator                            Watchdog
                                                        Timer
             Single-Supply
             Programming                             Brown-out
                                                        Reset
                In-Circuit
               Debugger                               Fail-Safe
                                                   Clock Monitor

BOR                         Timer0                 Timer1           Timer2            Timer3
HLVD

Comparator        ECCP1     CCP2                   MSSP             EUSART            ADC
                                                                                      10-bit

Note 1:      CCP2 is multiplexed with RC1 when Configuration bit, CCP2MX, is set, or RB3 when CCP2MX is not set.
         2:
         3:  RE3 is only available when MCLR functionality is disabled.

             OSC1/CLKI and OSC2/CLKO 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 Configurations" for additional information.

DS39636D-page 14                                                                                       2009 Microchip Technology Inc.
                                                           PIC18F2X1X/4X1X

TABLE 1-3: PIC18F2410/2415/2510/2515/2610 PINOUT I/O DESCRIPTIONS

               Pin Number

Pin Name                               Pin Buffer                        Description

               SPDIP,             QFN  Type  Type
                SOIC

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

                                       P           Programming voltage input.

                                       I ST Digital input.

OSC1/CLKI/RA7  9                  6                Oscillator crystal or external clock input.
    OSC1
    CLKI                               I ST        Oscillator crystal input or external clock source input.

    RA7                                            ST buffer when configured in RC mode; CMOS otherwise.

                                       I CMOS External clock source input. Always associated with pin

                                                   function OSC1. (See related OSC1/CLKI, OSC2/CLKO

                                                   pins.)

                                       I/O TTL     General purpose I/O pin.

OSC2/CLKO/RA6  10                 7                Oscillator crystal or clock output.
    OSC2
                                       O--         Oscillator crystal output. Connects to crystal or
    CLKO
                                                   resonator in Crystal Oscillator mode.
    RA6
                                       O--         In RC mode, OSC2 pin outputs CLKO, which has 1/4 the

                                                   frequency of OSC1 and denotes the instruction cycle rate.

                                       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.

2009 Microchip Technology Inc.                                                                DS39636D-page 15
PIC18F2X1X/4X1X

TABLE 1-3: PIC18F2410/2415/2510/2515/2610 PINOUT I/O DESCRIPTIONS (CONTINUED)

                     Pin Number

     Pin Name                       Pin Buffer                        Description

                     SPDIP,  QFN    Type  Type
                      SOIC

                                                PORTA is a bidirectional I/O port.

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

                                    I Analog Analog input 0.

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

                                    I Analog Analog input 1.

RA2/AN2/VREF-/CVREF  4       1
                                    I/O TTL Digital I/O.
RA2                                   I Analog Analog input 2.
                                      I Analog A/D reference voltage (low) input.
AN2                                  O Analog Comparator reference voltage output.

VREF-

CVREF

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

                                    I Analog A/D reference voltage (high) input.

RA4/T0CKI/C1OUT      6       3
    RA4
    T0CKI                           I/O ST Digital I/O.
    C1OUT
                                    I ST Timer0 external clock input.

                                    O--         Comparator 1 output.

RA5/AN4/SS/HLVDIN/   7       4

C2OUT

RA5                                 I/O TTL Digital I/O.

AN4                                 I Analog Analog input 4.

SS                                  I TTL SPI slave select input.

HLVDIN                              I Analog High/Low-Voltage Detect input.

C2OUT                               O--         Comparator 2 output.

RA6                                             See the OSC2/CLKO/RA6 pin.

RA7                                             See the OSC1/CLKI/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.

DS39636D-page 16                                                             2009 Microchip Technology Inc.
                                                                 PIC18F2X1X/4X1X

TABLE 1-3: PIC18F2410/2415/2510/2515/2610 PINOUT I/O DESCRIPTIONS (CONTINUED)

                    Pin Number

Pin Name                               Pin Buffer                         Description

                    SPDIP,        QFN  Type  Type
                     SOIC

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

RB0/INT0/FLT0/AN12  21 18
    RB0
    INT0                               I/O TTL     Digital I/O.
    FLT0
    AN12                               I ST        External interrupt 0.

                                       I ST        PWM Fault input for CCP1.

                                       I Analog Analog input 12.

RB1/INT1/AN10       22 19
    RB1                                I/O TTL Digital I/O.
    INT1                                I ST External interrupt 1.
    AN10                                I Analog Analog input 10.

RB2/INT2/AN8        23 20
    RB2                                I/O TTL Digital I/O.
    INT2                                I ST External interrupt 2.
    AN8                                 I Analog Analog input 8.

RB3/AN9/CCP2        24 21
                                       I/O TTL Digital I/O.
    RB3                                 I Analog Analog input 9.
                                       I/O ST Capture 2 input/Compare 2 output/PWM 2 output.
    AN9
    CCP2(1)

RB4/KBI0/AN11       25 22
    RB4                                I/O TTL Digital I/O.
    KBI0                                I TTL Interrupt-on-change pin.
    AN11                                I Analog Analog input 11.

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 ICSPTM 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.

2009 Microchip Technology Inc.                                                       DS39636D-page 17
PIC18F2X1X/4X1X

TABLE 1-3: PIC18F2410/2415/2510/2515/2610 PINOUT I/O DESCRIPTIONS (CONTINUED)

                     Pin Number

     Pin Name                       Pin Buffer                   Description

                     SPDIP,  QFN    Type  Type
                      SOIC

                                                PORTC is a bidirectional I/O port.

RC0/T1OSO/T13CKI     11      8
    RC0
    T1OSO                           I/O ST Digital I/O.
    T13CKI
                                    O--         Timer1 oscillator output.

                                    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(2)
                                    I/O ST Capture 2 input/Compare 2 output/PWM 2 output.

RC2/CCP1             13 10
    RC2                                 I/O ST Digital I/O.
    CCP1                                I/O ST Capture 1 input/Compare 1 output/PWM 1 output.

RC3/SCK/SCL          14 11                      Digital I/O.
    RC3                                 I/O ST
    SCK                                 I/O ST  Synchronous serial clock input/output for SPI mode.
    SCL                                 I/O ST  Synchronous serial clock input/output for I2CTM mode.

RC4/SDI/SDA          15 12                      Digital I/O.
    RC4                                 I/O ST
    SDI                                  I ST   SPI data in.
    SDA                                 I/O ST  I2C data I/O.

RC5/SDO              16 13                      Digital I/O.
    RC5                                 I/O ST  SPI data out.
    SDO                                  O--

RC6/TX/CK            17 14                      Digital I/O.
    RC6                                 I/O ST  EUSART asynchronous transmit.
    TX                                   O--    EUSART synchronous clock (see related RX/DT).
    CK                                  I/O ST

RC7/RX/DT            18 15                      Digital I/O.
    RC7                                 I/O ST  EUSART asynchronous receive.
    RX                                   I ST   EUSART synchronous data (see related TX/CK).
    DT                                  I/O ST

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.

DS39636D-page 18                                                             2009 Microchip Technology Inc.
                                                PIC18F2X1X/4X1X

TABLE 1-4: PIC18F4410/4415/4510/4515/4610 PINOUT I/O DESCRIPTIONS

               Pin Number           Pin Buffer

Pin Name       PDIP QFN TQFP Type Type                                       Description

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

                                    P           Programming voltage input.

                                    I  ST       Digital input.

OSC1/CLKI/RA7  13 32 30                         Oscillator crystal or external clock input.
    OSC1
                                    I  ST       Oscillator crystal input or external clock source input.
    CLKI
                                                ST buffer when configured in RC mode;
    RA7
                                                analog otherwise.

                                    I CMOS External clock source input. Always associated with

                                                pin function OSC1. (See related OSC1/CLKI,

                                                OSC2/CLKO pins.)

                                    I/O TTL General purpose I/O pin.

OSC2/CLKO/RA6  14 33 31                         Oscillator crystal or clock output.
    OSC2
    CLKO                            O  --       Oscillator crystal output. Connects to crystal

    RA6                                         or resonator in Crystal Oscillator mode.

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

                                                has 1/4 the frequency of OSC1 and denotes

                                                the instruction cycle rate.

                                    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.

2009 Microchip Technology Inc.                                                          DS39636D-page 19
PIC18F2X1X/4X1X

TABLE 1-4: PIC18F4410/4415/4510/4515/4610 PINOUT I/O DESCRIPTIONS (CONTINUED)

                       Pin Number   Pin Buffer

     Pin Name     PDIP QFN TQFP Type Type                                    Description

RA0/AN0                                                              PORTA is a bidirectional I/O port.
    RA0
    AN0              2 19 19
                                                  I/O TTL Digital I/O.
                                                   I Analog Analog input 0.

RA1/AN1              3 20 20
    RA1                                           I/O TTL Digital I/O.
    AN1                                            I Analog Analog input 1.

RA2/AN2/VREF-/CVREF 4  21 21
    RA2                                   I/O TTL Digital I/O.
    AN2                                     I Analog Analog input 2.
    VREF-                                   I Analog A/D reference voltage (low) input.
    CVREF                                  O Analog Comparator reference voltage output.

RA3/AN3/VREF+        5 22 22
    RA3                                           I/O TTL Digital I/O.
    AN3                                            I Analog Analog input 3.
    VREF+                                          I Analog A/D reference voltage (high) input.

RA4/T0CKI/C1OUT      6 23 23
    RA4
    T0CKI                           I/O ST              Digital I/O.
    C1OUT
                                    I  ST               Timer0 external clock input.

                                    O  --               Comparator 1 output.

RA5/AN4/SS/HLVDIN/ 7   24 24
C2OUT
                                    I/O TTL             Digital I/O.
    RA5                                                 Analog input 4.
    AN4                             I Analog            SPI slave select input.
    SS                                                  High/Low-Voltage Detect input.
    HLVDIN                          I TTL               Comparator 2 output.
    C2OUT
                                    I Analog

                                    O  --

RA6                                                     See the OSC2/CLKO/RA6 pin.

RA7                                                     See the OSC1/CLKI/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.

DS39636D-page 20                                                             2009 Microchip Technology Inc.
                                                   PIC18F2X1X/4X1X

TABLE 1-4: PIC18F4410/4415/4510/4515/4610 PINOUT I/O DESCRIPTIONS (CONTINUED)

               Pin Number              Pin Buffer

Pin Name       PDIP QFN TQFP Type Type                                       Description

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

RB0/INT0/FLT0/AN12 33 9             8
    RB0
    INT0                               I/O TTL Digital I/O.
    FLT0
    AN12                               I  ST       External interrupt 0.

                                       I  ST       PWM Fault input for Enhanced CCP1.

                                       I Analog Analog input 12.

RB1/INT1/AN10  34 10                9
    RB1
    INT1                               I/O TTL Digital I/O.
    AN10
                                       I  ST       External interrupt 1.

                                       I Analog Analog input 10.

RB2/INT2/AN8   35 11 10
    RB2
    INT2                               I/O TTL Digital I/O.
    AN8
                                       I  ST       External interrupt 2.

                                       I Analog Analog input 8.

RB3/AN9/CCP2   36 12 11

    RB3                                I/O TTL Digital I/O.

    AN9                                I Analog Analog input 9.
    CCP2(1)
                                       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.

RB5/KBI1/PGM   38 15 15
    RB5
    KBI1                               I/O TTL Digital I/O.
    PGM
                                       I TTL Interrupt-on-change pin.

                                       I/O ST      Low-Voltage ICSPTM Programming enable pin.

RB6/KBI2/PGC   39 16 16
    RB6
    KBI2                               I/O TTL Digital I/O.
    PGC
                                       I TTL Interrupt-on-change pin.

                                       I/O ST      In-Circuit Debugger and ICSP programming

                                                   clock pin.

RB7/KBI3/PGD   40 17 17
    RB7
    KBI3                               I/O TTL Digital I/O.
    PGD
                                       I TTL Interrupt-on-change pin.

                                       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.

2009 Microchip Technology Inc.                                                          DS39636D-page 21
PIC18F2X1X/4X1X

TABLE 1-4: PIC18F4410/4415/4510/4515/4610 PINOUT I/O DESCRIPTIONS (CONTINUED)

                     Pin Number        Pin Buffer

Pin Name          PDIP QFN TQFP Type Type                                    Description

                                                          PORTC is a bidirectional I/O port.

RC0/T1OSO/T13CKI 15 34 32

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

T13CKI                                 I  ST

RC1/T1OSI/CCP2       16 35 35

    RC1                                I/O ST             Digital I/O.

    T1OSI                              I CMOS Timer1 oscillator input.
    CCP2(2)
                                       I/O ST             Capture 2 input/Compare 2 output/PWM 2 output.

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

                                       O  --

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

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

RC4/SDI/SDA          23 42 42
    RC4
    SDI                                I/O ST             Digital I/O.
    SDA
                                       I  ST              SPI data in.
                                                          I2C data I/O.
                                       I/O ST

RC5/SDO              24 43 43
    RC5
    SDO                                I/O ST             Digital I/O.
                                                          SPI data out.
                                       O  --

RC6/TX/CK            25 44 44
    RC6
    TX                                 I/O ST             Digital I/O.
    CK                                                    EUSART asynchronous transmit.
                                       O  --              EUSART synchronous clock (see related RX/DT).

                                       I/O ST

RC7/RX/DT            26 1           1
    RC7
    RX                                 I/O ST             Digital I/O.
    DT                                                    EUSART asynchronous receive.
                                       I  ST              EUSART synchronous data (see related TX/CK).

                                       I/O ST

Legend: TTL = TTL compatible input            CMOS = CMOS compatible input or output

         ST = Schmitt Trigger input with CMOS levels I    = Input

         O = Output                           P           = Power

Note 1: Default assignment for CCP2 when Configuration bit, CCP2MX, is set.

2: Alternate assignment for CCP2 when Configuration bit, CCP2MX, is cleared.

DS39636D-page 22                                                             2009 Microchip Technology Inc.
                                                   PIC18F2X1X/4X1X

TABLE 1-4: PIC18F4410/4415/4510/4515/4610 PINOUT I/O DESCRIPTIONS (CONTINUED)

              Pin Number               Pin Buffer

Pin Name      PDIP QFN TQFP Type Type                                        Description

                                                   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
    PSP0                               I/O ST      Digital I/O.

                                       I/O TTL Parallel Slave Port data.

RD1/PSP1      20 39 39
    RD1
    PSP1                               I/O ST      Digital I/O.

                                       I/O TTL Parallel Slave Port data.

RD2/PSP2      21 40 40
    RD2
    PSP2                               I/O ST      Digital I/O.

                                       I/O TTL Parallel Slave Port data.

RD3/PSP3      22 41 41
    RD3
    PSP3                               I/O ST      Digital I/O.

                                       I/O TTL Parallel Slave Port data.

RD4/PSP4      27 2                  2
    RD4
    PSP4                               I/O ST      Digital I/O.

                                       I/O TTL Parallel Slave Port data.

RD5/PSP5/P1B  28 3                  3
    RD5
    PSP5                               I/O ST      Digital I/O.
    P1B
                                       I/O TTL Parallel Slave Port data.

                                       O  --       Enhanced CCP1 output.

RD6/PSP6/P1C  29 4                  4
    RD6
    PSP6                               I/O ST      Digital I/O.
    P1C
                                       I/O TTL Parallel Slave Port data.

                                       O  --       Enhanced CCP1 output.

RD7/PSP7/P1D  30 5                  5
    RD7
    PSP7                               I/O ST      Digital I/O.
    P1D
                                       I/O TTL Parallel Slave Port data.

                                       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.

2009 Microchip Technology Inc.                                                          DS39636D-page 23
PIC18F2X1X/4X1X

TABLE 1-4: PIC18F4410/4415/4510/4515/4610 PINOUT I/O DESCRIPTIONS (CONTINUED)

                  Pin Number                Pin Buffer

     Pin Name     PDIP QFN TQFP Type Type                                    Description

                                                        PORTE is a bidirectional I/O port.

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

    AN5                                     I TTL Read control for Parallel Slave Port

                                                        (see also WR and CS pins).

                                            I Analog Analog input 5.

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

    AN6                                     I TTL Write control for Parallel Slave Port

                                                        (see CS and RD pins).

                                            I Analog Analog input 6.

RE2/CS/AN7        10 27 27
    RE2
    CS                                      I/O ST      Digital I/O.

    AN7                                     I TTL Chip select control for Parallel Slave Port

                                                        (see related RD and WR).

                                            I Analog Analog input 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.

DS39636D-page 24                                                             2009 Microchip Technology Inc.
                                                          PIC18F2X1X/4X1X

2.0 OSCILLATOR                                            FIGURE 2-1:         CRYSTAL/CERAMIC
         CONFIGURATIONS                                                       RESONATOR OPERATION
                                                                              (XT, LP, HS OR HSPLL
2.1 Oscillator Types                                                          CONFIGURATION)

PIC18F2X1X/4X1X devices can be operated in ten            C1(1)        OSC1
different oscillator modes. The user can program the
Configuration bits, FOSC3:FOSC0, in Configuration                XTAL         RF(3)              To
Register 1H to select one of these ten modes:                                                    Internal
                                                                                                 Logic

1. LP  Low-Power Crystal                                         RS(2)                Sleep
2. XT  Crystal/Resonator
3. HS  High-Speed Crystal/Resonator                       C2(1)        OSC2          PIC18FXXXX

4. HSPLL High-Speed Crystal/Resonator                     Note 1: See Table 2-1 and Table 2-2 for initial values of
                  with PLL enabled                                      C1 and C2.

5. RC  External Resistor/Capacitor with                           2: A series resistor (RS) may be required for AT
       FOSC/4 output on RA6                                             strip cut crystals.

6. RCIO External Resistor/Capacitor with I/O                      3: RF varies with the oscillator mode chosen.
                  on RA6

7. INTIO1 Internal Oscillator with FOSC/4 output          TABLE 2-1: CAPACITOR SELECTION FOR
                  on RA6 and I/O on RA7                                        CERAMIC RESONATORS

8. INTIO2 Internal Oscillator with I/O on RA6
                  and RA7

9. EC  External Clock with FOSC/4 output                         Typical Capacitor Values Used:

10. ECIO External Clock with I/O on RA6                   Mode         Freq   OSC1               OSC2

2.2 Crystal Oscillator/Ceramic                            XT     3.58 MHz     15 pF              15 pF
         Resonators                                                           15 pF              15 pF
                                                                 4.19 MHz     30 pF              30 pF
                                                                              50 pF              50 pF
                                                                       4 MHz

In XT, LP, HS or HSPLL Oscillator modes, a crystal or                  4 MHz
ceramic resonator is connected to the OSC1 and
OSC2 pins to establish oscillation. Figure 2-1 shows      Capacitor values are for design guidance only.
the pin connections.
                                                          Different capacitor values may be required to produce
The oscillator design requires the use of a parallel cut  acceptable oscillator operation. The user should test
crystal.                                                  the performance of the oscillator over the expected
                                                          VDD and temperature range for the application.

Note:  Use of a series cut crystal may give a             See the notes following Table 2-2 for additional
       frequency out of the crystal manufacturer's        information.
       specifications.

                                                          Note:  When using resonators with frequencies
                                                                 above 3.5 MHz, the use of HS mode,
                                                                 rather than XT mode, is recommended.
                                                                 HS mode may be used at any VDD for
                                                                 which the controller is rated. If HS is
                                                                 selected, it is possible that the gain of the
                                                                 oscillator will overdrive the resonator.
                                                                 Therefore, a series resistor should be
                                                                 placed between the OSC2 pin and the
                                                                 resonator. As a good starting point, the
                                                                 recommended value of RS is 330.

2009 Microchip Technology Inc.                                                     DS39636D-page 25
PIC18F2X1X/4X1X

TABLE 2-2: CAPACITOR SELECTION FOR                        An external clock source may also be connected to the
                     CRYSTAL OSCILLATOR                   OSC1 pin in the HS mode, as shown in Figure 2-2.

          Crystal  Typical Capacitor Values               FIGURE 2-2:             EXTERNAL CLOCK INPUT
           Freq                Tested:                                            OPERATION
Osc Type                                                                          (HS OSCILLATOR
                                                                                  CONFIGURATION)
                   C1     C2

LP        32 kHz   30 pF  30 pF

XT        1 MHz    15 pF  15 pF

          4 MHz    15 pF  15 pF                           Clock from              OSC1
                                                          Ext. System
HS        4 MHz    15 pF  15 pF                                                           PIC18FXXXX
                          15 pF                                             Open
          10 MHz   15 pF  15 pF                                                   OSC2 (HS Mode)
                          15 pF
          20 MHz   15 pF

          25 MHz   15 pF

Capacitor values are for design guidance only.

Different capacitor values may be required to produce     2.3 External Clock Input
acceptable oscillator operation. The user should test
the performance of the oscillator over the expected       The EC and ECIO Oscillator modes require an external
VDD and temperature range for the application.            clock source to be connected to the OSC1 pin. There is
                                                          no oscillator start-up time required after a Power-on
See the notes following this table for additional         Reset or after an exit from Sleep mode.
information.
                                                          In the EC Oscillator mode, the oscillator frequency
Note 1: Higher capacitance increases the stability        divided by 4 is available on the OSC2 pin. This signal
            of the oscillator but also increases the      may be used for test purposes or to synchronize other
            start-up time.                                logic. Figure 2-3 shows the pin connections for the EC
                                                          Oscillator mode.
       2: When operating below 3V VDD, or when
            using certain ceramic resonators at any       FIGURE 2-3:             EXTERNAL CLOCK
            voltage, it may be necessary to use the                               INPUT OPERATION
            HS mode or switch to a crystal oscillator.                            (EC CONFIGURATION)

       3: Since each resonator/crystal has its own        Clock from              OSC1/CLKI
            characteristics, the user should consult      Ext. System
            the resonator/crystal manufacturer for                                        PIC18FXXXX
            appropriate values of external                                FOSC/4
            components.                                                           OSC2/CLKO

       4: Rs may be required to avoid overdriving         The ECIO Oscillator mode functions like the EC mode,
            crystals with low drive level specification.  except that the OSC2 pin becomes an additional
                                                          general purpose I/O pin. The I/O pin becomes bit 6 of
       5: Always verify oscillator performance over       PORTA (RA6). Figure 2-4 shows the pin connections
            the VDD and temperature range that is         for the ECIO Oscillator mode.
            expected for the application.

                                                          FIGURE 2-4:             EXTERNAL CLOCK
                                                                                  INPUT OPERATION
                                                                                  (ECIO CONFIGURATION)

                                                          Clock from              OSC1/CLKI
                                                          Ext. System
                                                                                          PIC18FXXXX
                                                                            RA6
                                                                                  I/O (OSC2)

DS39636D-page 26                                                                   2009 Microchip Technology Inc.
                                                            PIC18F2X1X/4X1X

2.4 RC Oscillator                                           2.5 PLL Frequency Multiplier

For timing insensitive applications, the "RC" and           A Phase Locked Loop (PLL) circuit is provided as an
"RCIO" device options offer additional cost savings.        option for users who wish to use a lower frequency
The actual oscillator frequency is a function of several    oscillator circuit or to clock the device up to its highest
factors:                                                    rated frequency from a crystal oscillator. This may be
                                                            useful for customers who are concerned with EMI due
supply voltage                                            to high-frequency crystals or users who require higher
values of the external resistor (REXT) and                clock speeds from an internal oscillator.

   capacitor (CEXT)                                         2.5.1 HSPLL OSCILLATOR MODE
operating temperature
                                                            The HSPLL mode makes use of the HS mode oscillator
Given the same device, operating voltage and tempera-       for frequencies up to 10 MHz. A PLL then multiplies the
ture and component values, there will also be unit-to-unit  oscillator output frequency by 4 to produce an internal
frequency variations. These are due to factors such as:     clock frequency up to 40 MHz. The PLLEN bit is not
                                                            available in this oscillator mode.
normal manufacturing variation
difference in lead frame capacitance between              The PLL is only available to the crystal oscillator when
                                                            the FOSC3:FOSC0 Configuration bits are programmed
   package types (especially for low CEXT values)           for HSPLL mode (= 0110).
variations within the tolerance of limits of REXT
                                                            FIGURE 2-7:          PLL BLOCK DIAGRAM
   and CEXT                                                                      (HS MODE)

In the RC Oscillator mode, the oscillator frequency           HS Oscillator Enable
divided by 4 is available on the OSC2 pin. This signal                     PLL Enable
may be used for test purposes or to synchronize other
logic. Figure 2-5 shows how the R/C combination is          (from Configuration Register 1H)
connected.

FIGURE 2-5:   RC OSCILLATOR MODE

         VDD                                                OSC2

REXT                                                                    HS Mode  FIN      Phase
                                                            OSC1 Crystal         FOUT  Comparator

              OSC1                   Internal                               Osc
                                      Clock

CEXT                                 PIC18FXXXX                                        Loop
VSS                                                                                    Filter

                          OSC2/CLKO
              FOSC/4

Recommended values: 3 k  REXT  100 k                                             4    VCO              SYSCLK
                                CEXT > 20 pF
                                                                                                   MUX

The RCIO Oscillator mode (Figure 2-6) functions like        2.5.2 PLL AND INTOSC
the RC mode, except that the OSC2 pin becomes an
additional general purpose I/O pin. The I/O pin             The PLL is also available to the internal oscillator block
becomes bit 6 of PORTA (RA6).                               in selected oscillator modes. In this configuration, the
                                                            PLL is enabled in software and generates a clock
FIGURE 2-6:   RCIO OSCILLATOR MODE                          output of up to 32 MHz. The operation of INTOSC with
                                                            the PLL is described in Section 2.6.4 "PLL in INTOSC
         VDD                                                Modes".

REXT

              OSC1                   Internal
                                      Clock

CEXT                                 PIC18FXXXX
VSS

      RA6     I/O (OSC2)

Recommended values: 3 k  REXT  100 k
                                CEXT > 20 pF

2009 Microchip Technology Inc.                                                               DS39636D-page 27
PIC18F2X1X/4X1X                                             When the OSCTUNE register is modified, the INTOSC
                                                            frequency will begin shifting to the new frequency. The
2.6 Internal Oscillator Block                               INTRC clock will reach the new frequency within
                                                            8 clock cycles (approximately 8 * 32 s = 256 s). The
The PIC18F2X1X/4X1X devices include an internal             INTOSC clock will stabilize within 1 ms. Code execu-
oscillator block which generates two different clock        tion continues during this shift. There is no indication
signals; either can be used as the microcontroller's        that the shift has occurred.
clock source. This may eliminate the need for external
oscillator circuits on the OSC1 and/or OSC2 pins.           The OSCTUNE register also implements the INTSRC
                                                            and PLLEN bits, which control certain features of the
The main output (INTOSC) is an 8 MHz clock source,          internal oscillator block. The INTSRC bit allows users
which can be used to directly drive the device clock. It    to select which internal oscillator provides the clock
also drives a postscaler, which can provide a range of      source when the 31 kHz frequency option is selected.
clock frequencies from 31 kHz to 4 MHz. The INTOSC          This is covered in greater detail in Section 2.7.1
output is enabled when a clock frequency from 125 kHz       "Oscillator Control Register".
to 8 MHz is selected.
                                                            The PLLEN bit controls the operation of the frequency
The other clock source is the internal RC oscillator        multiplier, PLL, in Internal Oscillator modes.
(INTRC), which provides a nominal 31 kHz output.
INTRC is enabled if it is selected as the device clock      2.6.4 PLL IN INTOSC MODES
source; it is also enabled automatically when any of the
following are enabled:                                      The 4x frequency multiplier can be used with the
                                                            internal oscillator block to produce faster device clock
Power-up Timer                                            speeds than are normally possible with an internal
Fail-Safe Clock Monitor                                   oscillator. When enabled, the PLL produces a clock
Watchdog Timer                                            speed of up to 32 MHz.
Two-Speed Start-up
                                                            Unlike HSPLL mode, the PLL is controlled through
These features are discussed in greater detail in           software. The control bit, PLLEN (OSCTUNE<6>), is
Section 22.0 "Special Features of the CPU".                 used to enable or disable its operation.

The clock source frequency (INTOSC direct, INTRC            The PLL is available when the device is configured to
direct or INTOSC postscaler) is selected by configuring     use the internal oscillator block as its primary clock
the IRCF bits of the OSCCON register (page 32).             source (FOSC3:FOSC0 = 1001 or 1000). Additionally,
                                                            the PLL will only function when the selected output fre-
2.6.1 INTIO MODES                                           quency is either 4 MHz or 8 MHz (OSCCON<6:4> = 111
                                                            or 110). If both of these conditions are not met, the PLL
Using the internal oscillator as the clock source elimi-    is disabled.
nates the need for up to two external oscillator pins,
which can then be used for digital I/O. Two distinct        The PLLEN control bit is only functional in those
configurations are available:                               internal Oscillator modes where the PLL is available. In
                                                            all other modes, it is forced to `0' and is effectively
In INTIO1 mode, the OSC2 pin outputs FOSC/4,              unavailable.
   while OSC1 functions as RA7 for digital input and
   output.                                                  2.6.5 INTOSC FREQUENCY DRIFT

In INTIO2 mode, OSC1 functions as RA7 and                 The factory calibrates the internal oscillator block
   OSC2 functions as RA6, both for digital input and        output (INTOSC) for 8 MHz. However, this frequency
   output.                                                  may drift as VDD or temperature changes, which can
                                                            affect the controller operation in a variety of ways. It is
2.6.2 INTOSC OUTPUT FREQUENCY                               possible to adjust the INTOSC frequency by modifying
                                                            the value in the OSCTUNE register. This has no effect
The internal oscillator block is calibrated at the factory  on the INTRC clock source frequency.
to produce an INTOSC output frequency of 8.0 MHz.
                                                            Tuning the INTOSC source requires knowing when to
The INTRC oscillator operates independently of the          make the adjustment, in which direction it should be
INTOSC source. Any changes in INTOSC across                 made and in some cases, how large a change is
voltage and temperature are not necessarily reflected       needed. Three compensation techniques are
by changes in INTRC and vice versa.                         discussed in Section 2.6.5.1 "Compensating with
                                                            the USART", Section 2.6.5.2 "Compensating with
2.6.3 OSCTUNE REGISTER                                      the Timers" and Section 2.6.5.3 "Compensating
                                                            with the CCP Module in Capture Mode", but other
The internal oscillator's output has been calibrated at     techniques may be used.
the factory but can be adjusted in the user's applica-
tion. This is done by writing to the OSCTUNE register
(Register 2-1). The tuning sensitivity is constant
throughout the tuning range.

DS39636D-page 28                                             2009 Microchip Technology Inc.
                                                                  PIC18F2X1X/4X1X

REGISTER 2-1:  OSCTUNE: OSCILLATOR TUNING REGISTER

                  R/W-0 R/W-0(1)     U-0                   R/W-0    R/W-0  R/W-0  R/W-0             R/W-0
                                                           TUN4     TUN3   TUN2   TUN1              TUN0
                  INTSRC PLLEN(1)    --
                                                                                                         bit 0
               bit 7

bit 7          INTSRC: Internal Oscillator Low-Frequency Source Select bit
bit 6
               1 = 31.25 kHz device clock derived from 8 MHz INTOSC source (divide-by-256 enabled)
bit 5          0 = 31 kHz device clock derived directly from INTRC internal oscillator
bit 4-0        PLLEN: Frequency Multiplier PLL for INTOSC Enable bit(1)

               1 = PLL enabled for INTOSC (4 MHz and 8 MHz only)
               0 = PLL disabled

                  Note 1: Available only in certain oscillator configurations; otherwise, this bit is unavailable
                              and reads as `0'. See Section 2.6.4 "PLL in INTOSC Modes" for details.

               Unimplemented: Read as `0'

               TUN4:TUN0: Frequency Tuning bits

               01111 = Maximum frequency

                                 

                                 

               00001
               00000 = Center frequency. Oscillator module is running at the calibrated frequency.

               11111

                                 

                                 

               10000 = Minimum frequency

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

2.6.5.1 Compensating with the USART                        2.6.5.3  Compensating with the CCP Module
                                                                    in Capture Mode
An adjustment may be required when the USART
begins to generate framing errors or receives data with    A CCP module can use free running Timer1 (or
errors while in Asynchronous mode. Framing errors          Timer3), clocked by the internal oscillator block and an
indicate that the device clock frequency is too high; to   external event with a known period (i.e., AC power
adjust for this, decrement the value in OSCTUNE to         frequency). The time of the first event is captured in the
reduce the clock frequency. On the other hand, errors      CCPRxH:CCPRxL registers and is recorded for use
in data may suggest that the clock speed is too low; to    later. When the second event causes a capture, the
compensate, increment OSCTUNE to increase the              time of the first event is subtracted from the time of the
clock frequency.                                           second event. Since the period of the external event is
                                                           known, the time difference between events can be
2.6.5.2 Compensating with the Timers                       calculated.

This technique compares device clock speed to some         If the measured time is much greater than the calcu-
reference clock. Two timers may be used; one timer is      lated time, the internal oscillator block is running too
clocked by the peripheral clock, while the other is        fast; to compensate, decrement the OSCTUNE register.
clocked by a fixed reference source, such as the           If the measured time is much less than the calculated
Timer1 oscillator.                                         time, the internal oscillator block is running too slow; to
                                                           compensate, increment the OSCTUNE register.
Both timers are cleared, but the timer clocked by the
reference generates interrupts. When an interrupt
occurs, the internally clocked timer is read and both
timers are cleared. If the internally clocked timer value
is greater than expected, then the internal oscillator
block is running too fast. To adjust for this, decrement
the OSCTUNE register.

2009 Microchip Technology Inc.                                                  DS39636D-page 29
PIC18F2X1X/4X1X

2.7 Clock Sources and Oscillator                           The secondary oscillators are those external sources
         Switching                                         not connected to the OSC1 or OSC2 pins. These
                                                           sources may continue to operate even after the
Like previous PIC18 devices, the PIC18F2X1X/4X1X           controller is placed in a power-managed mode.
family includes a feature that allows the device clock
source to be switched from the main oscillator to an       PIC18F2X1X/4X1X devices offer the Timer1 oscillator
alternate low-frequency clock source. PIC18F2X1X/          as a secondary oscillator. This oscillator, in all power-
4X1X devices offer two alternate clock sources. When       managed modes, is often the time base for functions
an alternate clock source is enabled, the various          such as a real-time clock.
power-managed operating modes are available.
                                                           Most often, a 32.768 kHz watch crystal is connected
Essentially, there are three clock sources for these       between the RC0/T1OSO/T13CKI and RC1/T1OSI
devices:                                                   pins. Like the LP mode oscillator circuit, loading
                                                           capacitors are also connected from each pin to ground.
Primary oscillators
Secondary oscillators                                    The Timer1 oscillator is discussed in greater detail in
Internal oscillator block                                Section 11.3 "Timer1 Oscillator".

The primary oscillators include the External Crystal       In addition to being a primary clock source, the internal
and Resonator modes, the External RC modes, the            oscillator block is available as a power-managed
External Clock modes and the internal oscillator block.    mode clock source. The INTRC source is also used as
The particular mode is defined by the FOSC3:FOSC0          the clock source for several special features, such as
Configuration bits. The details of these modes are         the WDT and Fail-Safe Clock Monitor.
covered earlier in this chapter.
                                                           The clock sources for the PIC18F2X1X/4X1X devices
                                                           are shown in Figure 2-8. See Section 22.0 "Special
                                                           Features of the CPU" for Configuration register details.

FIGURE 2-8:       PIC18F2X1X/4X1X CLOCK DIAGRAM

                                                           PIC18F2X1X/4X1X

             Primary Oscillator                                                     LP, XT, HS, RC, EC

  OSC2                        Sleep                        4 x PLL HSPLL, INTOSC/PLL                                                     Peripherals
  OSC1                                                                                       T1OSC
T1OSO                                          OSCTUNE<6>
T1OSI       Secondary Oscillator
                                           Postscaler
                  T1OSCEN                                                        MUXOSCCON<6:4>Internal Oscillator
                  Enable                                                                                                     MUX
                                                                8 MHz
                  Oscillator                                               111

                  OSCCON<6:4>                                   4 MHz                                                                    CPU
                                                                           110
                   Internal                                                                                                              IDLEN
                  Oscillator                                    2 MHz
                                                                           101                                                  Clock
                    Block                                                                                                       Control
                                                                1 MHz
                    8 MHz          8 MHz                     500 kHz 100            FOSC3:FOSC0 OSCCON<1:0>
                    Source       (INTOSC)
                                                                           011                      Clock Source Option
                    INTRC                                    250 kHz                                for other Modules
                    Source
                                                                           010
                  31 kHz (INTRC)                             125 kHz

                                                                           001
                                                           1 31 kHz 000
                                                           0

                                                                        OSCTUNE<7>

                                                                                    WDT, PWRT, FSCM
                                                                                    and Two-Speed Start-up

DS39636D-page 30                                                                     2009 Microchip Technology Inc.
2.7.1 OSCILLATOR CONTROL REGISTER                               PIC18F2X1X/4X1X

The OSCCON register (Register 2-2) controls several          The IDLEN bit determines if the device goes into Sleep
aspects of the device clock's operation, both in full        mode or one of the Idle modes when the SLEEP
power operation and in power-managed modes.                  instruction is executed.

The System Clock Select bits, SCS1:SCS0, select the          The use of the flag and control bits in the OSCCON
clock source. The available clock sources are the            register is discussed in more detail in Section 3.0
primary clock (defined by the FOSC3:FOSC0 Configu-           "Power-Managed Modes".
ration bits), the secondary clock (Timer1 oscillator) and
the internal oscillator block. The clock source changes          Note 1: The Timer1 oscillator must be enabled to
immediately after one or more of the bits is written to,                     select the secondary clock source. The
following a brief clock transition interval. The SCS bits                    Timer1 oscillator is enabled by setting the
are cleared on all forms of Reset.                                           T1OSCEN bit in the Timer1 Control regis-
                                                                             ter (T1CON<3>). If the Timer1 oscillator
The Internal Oscillator Frequency Select bits                                is not enabled, then any attempt to select
(IRCF2:IRCF0) select the frequency output of the                             a secondary clock source will be ignored.
internal oscillator block to drive the device clock. The
choices are the INTRC source, the INTOSC source                         2: It is recommended that the Timer1
(8 MHz) or one of the frequencies derived from the                           oscillator be operating and stable before
INTOSC postscaler (31.25 kHz to 4 MHz). If the                               selecting the secondary clock source or a
internal oscillator block is supplying the device clock,                     very long delay may occur while the
changing the states of these bits will have an immedi-                       Timer1 oscillator starts.
ate change on the internal oscillator's output. On
device Resets, the default output frequency of the           2.7.2 OSCILLATOR TRANSITIONS
internal oscillator block is set at 1 MHz.
                                                             PIC18F2X1X/4X1X devices contain circuitry to prevent
When a nominal output frequency of 31 kHz is selected        clock "glitches" when switching between clock sources.
(IRCF2:IRCF0 = 000), users may choose which inter-           A short pause in the device clock occurs during the
nal oscillator acts as the source. This is done with the     clock switch. The length of this pause is the sum of two
INTSRC bit in the OSCTUNE register (OSCTUNE<7>).             cycles of the old clock source and three to four cycles
Setting this bit selects INTOSC as a 31.25 kHz clock         of the new clock source. This formula assumes that the
source by enabling the divide-by-256 output of the           new clock source is stable.
INTOSC postscaler. Clearing INTSRC selects INTRC
(nominally 31 kHz) as the clock source.                      Clock transitions are discussed in greater detail in
                                                             Section 3.1.2 "Entering Power-Managed Modes".
This option allows users to select the tunable and more
precise INTOSC as a clock source, while maintaining
power savings with a very low clock speed. Regardless
of the setting of INTSRC, INTRC always remains the
clock source for features such as the Watchdog Timer
and the Fail-Safe Clock Monitor.

The OSTS, IOFS and T1RUN bits indicate which clock
source is currently providing the device clock. The
OSTS bit indicates that the Oscillator Start-up Timer
has timed out and the primary clock is providing the
device clock in Primary Clock modes. The IOFS bit
indicates when the internal oscillator block has stabi-
lized and is providing the device clock in RC Clock
modes. The T1RUN bit (T1CON<6>) indicates when
the Timer1 oscillator is providing the device clock in
Secondary Clock modes. In power-managed modes,
only one of these three bits will be set at any time. If
none of these bits are set, the INTRC is providing the
clock or the internal oscillator block has just started and
is not yet stable.

2009 Microchip Technology Inc.                             DS39636D-page 31
PIC18F2X1X/4X1X

REGISTER 2-2:     OSCCON: OSCILLATOR CONTROL REGISTER

                  R/W-0 R/W-1 R/W-0 R/W-0              R(1)                R-0         R/W-0          R/W-0
                                                                          IOFS         SCS1           SCS0
                  IDLEN IRCF2 IRCF1 IRCF0 OSTS
                                                                                                           bit 0
                  bit 7

bit 7             IDLEN: Idle Enable bit
bit 6-4
                  1 = Device enters Idle mode on SLEEP instruction
bit 3             0 = Device enters Sleep mode on SLEEP instruction
bit 2
bit 1-0           IRCF2:IRCF0: Internal Oscillator Frequency Select bits

                  111 = 8 MHz (INTOSC drives clock directly)
                  110 = 4 MHz
                  101 = 2 MHz
                  100 = 1 MHz(3)
                  011 = 500 kHz
                  010 = 250 kHz
                  001 = 125 kHz
                  000 = 31 kHz (from either INTOSC/256 or INTRC directly)(2)
                  OSTS: Oscillator Start-up Time-out Status bit(1)

                  1 = Oscillator start-up time-out timer has expired; primary oscillator is running
                  0 = Oscillator start-up time-out timer is running; primary oscillator is not ready

                  IOFS: INTOSC Frequency Stable bit

                  1 = INTOSC frequency is stable
                  0 = INTOSC frequency is not stable

                  SCS1:SCS0: System Clock Select bits

                  1x = Internal oscillator block
                  01 = Secondary (Timer1) oscillator
                  00 = Primary oscillator

                  Note 1: Reset state depends on state of the IESO Configuration bit.

                         2: Source selected by the INTSRC bit (OSCTUNE<7>), see text.

                         3: Default output frequency of INTOSC on Reset.

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

DS39636D-page 32                                                          2009 Microchip Technology Inc.
                                                              PIC18F2X1X/4X1X

2.8 Effects of Power-Managed Modes                           time clock. Other features may be operating that do not
         on the Various Clock Sources                        require a device clock source (i.e., SSP slave, PSP,
                                                             INTn pins and others). Peripherals that may add
When PRI_IDLE mode is selected, the designated               significant current consumption are listed in
primary oscillator continues to run without interruption.    Section 25.2 "DC Characteristics".
For all other power-managed modes, the oscillator
using the OSC1 pin is disabled. The OSC1 pin (and            2.9 Power-up Delays
OSC2 pin, if used by the oscillator) will stop oscillating.
                                                             Power-up delays are controlled by two timers, so that
In Secondary Clock modes (SEC_RUN and                        no external Reset circuitry is required for most applica-
SEC_IDLE), the Timer1 oscillator is operating and            tions. The delays ensure that the device is kept in
providing the device clock. The Timer1 oscillator may        Reset until the device power supply is stable under nor-
also run in all power-managed modes if required to           mal circumstances and the primary clock is operating
clock Timer1 or Timer3.                                      and stable. For additional information on power-up
                                                             delays, see Section 4.5 "Device Reset Timers".
In Internal Oscillator modes (RC_RUN and RC_IDLE),
the internal oscillator block provides the device clock      The first timer is the Power-up Timer (PWRT), which
source. The 31 kHz INTRC output can be used directly         provides a fixed delay on power-up (parameter 33,
to provide the clock and may be enabled to support           Table 25-10). It is enabled by clearing (= 0) the
various special features, regardless of the power-           PWRTEN Configuration bit.
managed mode (see Section 22.2 "Watchdog Timer
(WDT)", Section 22.3 "Two-Speed Start-up" and                The second timer is the Oscillator Start-up Timer
Section 22.4 "Fail-Safe Clock Monitor" for more              (OST), intended to keep the chip in Reset until the
information on WDT, Fail-Safe Clock Monitor and Two-         crystal oscillator is stable (LP, XT and HS modes). The
Speed Start-up). The INTOSC output at 8 MHz may be           OST does this by counting 1024 oscillator cycles
used directly to clock the device or may be divided          before allowing the oscillator to clock the device.
down by the postscaler. The INTOSC output is disabled
if the clock is provided directly from the INTRC output.     When the HSPLL Oscillator mode is selected, the
                                                             device is kept in Reset for an additional 2 ms, following
If the Sleep mode is selected, all clock sources are         the HS mode OST delay, so the PLL can lock to the
stopped. Since all the transistor switching currents         incoming clock frequency.
have been stopped, Sleep mode achieves the lowest
current consumption of the device (only leakage              There is a delay of interval TCSD (parameter 38,
currents).                                                   Table 25-10), following POR, while the controller
                                                             becomes ready to execute instructions. This delay runs
Enabling any on-chip feature that will operate during        concurrently with any other delays. This may be the
Sleep will increase the current consumed during Sleep.       only delay that occurs when any of the EC, RC or INTIO
The INTRC is required to support WDT operation. The          modes are used as the primary clock source.
Timer1 oscillator may be operating to support a real-

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

    Oscillator Mode               OSC1 Pin                    OSC2 Pin

RC, INTIO1           Floating, external resistor should pull high At logic low (clock/4 output)

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

INTIO2               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 and HS        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.

2009 Microchip Technology Inc.                                                       DS39636D-page 33
PIC18F2X1X/4X1X

NOTES:

DS39636D-page 34   2009 Microchip Technology Inc.
                                                                        PIC18F2X1X/4X1X

3.0 POWER-MANAGED MODES                                          3.1.1 CLOCK SOURCES

PIC18F2X1X/4X1X devices offer a total of seven oper-             The SCS1:SCS0 bits allow the selection of one of three
ating modes for more efficient power management.                 clock sources for power-managed modes. They are:
These modes provide a variety of options for selective
power conservation in applications where resources                the primary clock, as defined by the
may be limited (i.e., battery-powered devices).                     FOSC3:FOSC0 Configuration bits

There are three categories of power-managed modes:                the secondary clock (the Timer1 oscillator)
                                                                  the internal oscillator block (for RC modes)
Run modes
Idle modes                                                     3.1.2  ENTERING POWER-MANAGED
Sleep mode                                                            MODES

These categories define which portions of the device             Switching from one power-managed mode to another
are clocked and sometimes, what speed. The Run and               begins by loading the OSCCON register. The
Idle modes may use any of the three available clock              SCS1:SCS0 bits select the clock source and determine
sources (primary, secondary or internal oscillator               which Run or Idle mode is to be used. Changing these
block); the Sleep mode does not use a clock source.              bits causes an immediate switch to the new clock
                                                                 source, assuming that it is running. The switch may
The power-managed modes include several power-                   also be subject to clock transition delays. These are
saving features offered on previous PIC devices. One            discussed in Section 3.1.3 "Clock Transitions and
is the clock switching feature, offered in other PIC18           Status Indicators" and subsequent sections.
devices, allowing the controller to use the Timer1 oscil-
lator in place of the primary oscillator. Also included is       Entry to the power-managed Idle or Sleep modes is
the Sleep mode, offered by all PIC devices, where all            triggered by the execution of a SLEEP instruction. The
device clocks are stopped.                                       actual mode that results depends on the status of the
                                                                 IDLEN bit.
3.1 Selecting Power-Managed Modes
                                                                 Depending on the current mode and the mode being
Selecting a power-managed mode requires two                      switched to, a change to a power-managed mode does
decisions: if the CPU is to be clocked or not and the            not always require setting all of these bits. Many
selection of a clock source. The IDLEN bit                       transitions may be done by changing the oscillator select
(OSCCON<7>) controls CPU clocking, while the                     bits, or changing the IDLEN bit, prior to issuing a SLEEP
SCS1:SCS0 bits (OSCCON<1:0>) select the clock                    instruction. If the IDLEN bit is already configured
source. The individual modes, bit settings, clock sources        correctly, it may only be necessary to perform a SLEEP
and affected modules are summarized in Table 3-1.                instruction to switch to the desired mode.

TABLE 3-1: POWER-MANAGED MODES

          OSCCON Bits                  Module Clocking
                                       CPU Peripherals
Mode      IDLEN(1) SCS1:SCS0                                            Available Clock and Oscillator Source

          <7>  <1:0>

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 INTOSC and INTOSC postscaler, as well as the INTRC source.

2009 Microchip Technology Inc.                                                                   DS39636D-page 35
PIC18F2X1X/4X1X

3.1.3  CLOCK TRANSITIONS AND                                3.2 Run Modes
       STATUS INDICATORS
                                                            In the Run modes, clocks to both the core and
The length of the transition between clock sources is       peripherals are active. The difference between these
the sum of two cycles of the old clock source and three     modes is the clock source.
to four cycles of the new clock source. This formula
assumes that the new clock source is stable.                3.2.1 PRI_RUN MODE

Three bits indicate the current clock source and its        The PRI_RUN mode is the normal, full power execution
status. They are:                                           mode of the microcontroller. This is also the default
                                                            mode upon a device Reset, unless Two-Speed Start-up
OSTS (OSCCON<3>)                                          is enabled (see Section 22.3 "Two-Speed Start-up"
IOFS (OSCCON<2>)                                          for details). In this mode, the OSTS bit is set. The IOFS
T1RUN (T1CON<6>)                                          bit may be set if the internal oscillator block is the
                                                            primary clock source (see Section 2.7.1 "Oscillator
In general, only one of these bits will be set while in a   Control Register").
given power-managed mode. When the OSTS bit is
set, the primary clock is providing the device clock.       3.2.2 SEC_RUN MODE
When the IOFS bit is set, the INTOSC output is
providing a stable 8 MHz clock source to a divider that     The SEC_RUN mode is the compatible mode to the
actually drives the device clock. When the T1RUN bit is     "clock switching" feature offered in other PIC18
set, the Timer1 oscillator is providing the clock. If none  devices. In this mode, the CPU and peripherals are
of these bits are set, then either the INTRC clock          clocked from the Timer1 oscillator. This gives users the
source is clocking the device, or the INTOSC source is      option of lower power consumption while still using a
not yet stable.                                             high accuracy clock source.

If the internal oscillator block is configured as the       SEC_RUN mode is entered by setting the SCS1:SCS0
primary clock source by the FOSC3:FOSC0 Configura-          bits to `01'. The device clock source is switched to the
tion bits, then both the OSTS and IOFS bits may be set      Timer1 oscillator (see Figure 3-1), the primary oscilla-
when in PRI_RUN or PRI_IDLE modes. This indicates           tor is shut down, the T1RUN bit (T1CON<6>) is set and
that the primary clock (INTOSC output) is generating a      the OSTS bit is cleared.
stable 8 MHz output. Entering another power-managed
RC mode at the same frequency would clear the OSTS          Note:  The Timer1 oscillator should already be
bit.                                                               running prior to entering SEC_RUN mode.
                                                                   If the T1OSCEN bit is not set when the
Note 1: Caution should be used when modifying a                    SCS1:SCS0 bits are set to `01', entry to
            single IRCF bit. If VDD is less than 3V, it is         SEC_RUN mode will not occur. If the
            possible to select a higher clock speed                Timer1 oscillator is enabled but not yet
            than is supported by the low VDD.                      running, device clocks will be delayed until
            Improper device operation may result if                the oscillator has started. In such situa-
            the VDD/FOSC specifications are violated.              tions, initial oscillator operation is far from
                                                                   stable and unpredictable operation may
       2: Executing a SLEEP instruction does not                   result.
            necessarily place the device into Sleep
            mode. It acts as the trigger to place the       On transitions from SEC_RUN mode to PRI_RUN, the
            controller into either the Sleep mode or        peripherals and CPU continue to be clocked from the
            one of the Idle modes, depending on the         Timer1 oscillator while the primary clock is started.
            setting of the IDLEN bit.                       When the primary clock becomes ready, a clock switch
                                                            back to the primary clock occurs (see Figure 3-2).
3.1.4 MULTIPLE SLEEP COMMANDS                               When the clock switch is complete, the T1RUN bit is
                                                            cleared, the OSTS bit is set and the primary clock is
The power-managed mode that is invoked with the             providing the clock. The IDLEN and SCS bits are not
SLEEP instruction is determined by the setting of the       affected by the wake-up; the Timer1 oscillator
IDLEN bit at the time the instruction is executed. If       continues to run.
another SLEEP instruction is executed, the device will
enter the power-managed mode specified by IDLEN at
that time. If IDLEN has changed, the device will enter
the new power-managed mode specified by the new
setting.

DS39636D-page 36                                                    2009 Microchip Technology Inc.
                                                                        PIC18F2X1X/4X1X

FIGURE 3-1:  TRANSITION TIMING FOR ENTRY TO SEC_RUN MODE

             Q1 Q2 Q3 Q4 Q1                                                    Q2 Q3 Q4 Q1 Q2 Q3

T1OSI                                 123                        n-1 n
OSC1
                                               Clock Transition(1)

CPU
Clock

Peripheral
      Clock

Program      PC                                             PC + 2                            PC + 4
Counter

Note 1: Clock transition typically occurs within 2-4 TOSC.

FIGURE 3-2:  TRANSITION TIMING FROM SEC_RUN MODE TO PRI_RUN MODE (HSPLL)

                                  Q1           Q2  Q3            Q4 Q1                        Q2 Q3 Q4 Q1 Q2 Q3

      T1OSI                           TOST(1)      TPLL(1)
      OSC1
                                                                    1 2 n-1 n
PLL Clock
     Output                                                                Clock (2)
                                                                        Transition
CPU Clock

Peripheral
      Clock

Program                               PC                                              PC + 2  PC + 4
Counter

             SCS1:SCS0 bits changed                OSTS bit set

Note 1: TOST = 1024 TOSC; TPLL = 2 ms (approx). These intervals are not shown to scale.
        2: Clock transition typically occurs within 2-4 TOSC.

3.2.3 RC_RUN MODE                                                   This mode is entered by setting SCS1 to `1'. Although
                                                                    it is ignored, it is recommended that SCS0 also be
In RC_RUN mode, the CPU and peripherals are                         cleared; this is to maintain software compatibility with
clocked from the internal oscillator block using the                future devices. When the clock source is switched to
INTOSC multiplexer. In this mode, the primary clock is              the INTOSC multiplexer (see Figure 3-3), the primary
shut down. When using the INTRC source, this mode                   oscillator is shut down and the OSTS bit is cleared. The
provides the best power conservation of all the Run                 IRCF bits may be modified at any time to immediately
modes, while still executing code. It works well for user           change the clock speed.
applications which are not highly timing sensitive or do
not require high-speed clocks at all times.                             Note:  Caution should be used when modifying a
                                                                               single IRCF bit. If VDD is less than 3V, it is
If the primary clock source is the internal oscillator                         possible to select a higher clock speed
block (either INTRC or INTOSC), there are no                                   than is supported by the low VDD.
distinguishable differences between PRI_RUN and                                Improper device operation may result if
RC_RUN modes during execution. However, a clock                                the VDD/FOSC specifications are violated.
switch delay will occur during entry to and exit from
RC_RUN mode. Therefore, if the primary clock source
is the internal oscillator block, the use of RC_RUN
mode is not recommended.

2009 Microchip Technology Inc.                                                              DS39636D-page 37
PIC18F2X1X/4X1X

If the IRCF bits and the INTSRC bit are all clear, the                        On transitions from RC_RUN mode to PRI_RUN mode,
INTOSC output is not enabled and the IOFS bit will                            the device continues to be clocked from the INTOSC
remain clear; there will be no indication of the current                      multiplexer while the primary clock is started. When the
clock source. The INTRC source is providing the                               primary clock becomes ready, a clock switch to the
device clocks.                                                                primary clock occurs (see Figure 3-4). When the clock
                                                                              switch is complete, the IOFS bit is cleared, the OSTS
If the IRCF bits are changed from all clear (thus,                            bit is set and the primary clock is providing the device
enabling the INTOSC output) or if INTSRC is set, the                          clock. The IDLEN and SCS bits are not affected by the
IOFS bit becomes set after the INTOSC output                                  switch. The INTRC source will continue to run if either
becomes stable. Clocks to the device continue while                           the WDT or the Fail-Safe Clock Monitor is enabled.
the INTOSC source stabilizes after an interval of
TIOBST.

If the IRCF bits were previously at a non-zero value, or
if INTSRC was set before setting SCS1 and the
INTOSC source was already stable, the IOFS bit will
remain set.

FIGURE 3-3:           TRANSITION TIMING TO RC_RUN MODE

                  Q1 Q2 Q3 Q4 Q1                                                  Q2 Q3 Q4 Q1 Q2 Q3
                                                                                                                          PC + 4
INTRC                 123                                 n-1 n
OSC1
                                                                         (1)

                                              Clock Transition

CPU
Clock

Peripheral
      Clock

Program           PC                                      PC + 2
Counter

Note 1: Clock transition typically occurs within 2-4 TOSC.

FIGURE 3-4:       TRANSITION TIMING FROM RC_RUN MODE TO PRI_RUN MODE

                      Q1                  Q2  Q3          Q4                  Q1                          Q2 Q3 Q4 Q1 Q2 Q3

   INTOSC                 TOST(1)             TPLL(1)
Multiplexer
                                                                              1 2 n-1 n
      OSC1                                                                           Clock (2)

PLL Clock                                                                         Transition
     Output
                                                                                                  PC + 2
CPU Clock

Peripheral
      Clock

Program                                   PC                                                              PC + 4
Counter

                  SCS1:SCS0 bits changed      OSTS bit set

Note 1: TOST = 1024 TOSC; TPLL = 2 ms (approx). These intervals are not shown to scale.
        2: Clock transition typically occurs within 2-4 TOSC.

DS39636D-page 38                                                                                           2009 Microchip Technology Inc.
                                                                     PIC18F2X1X/4X1X

3.3 Sleep Mode                                                       3.4 Idle Modes

The power-managed Sleep mode in the PIC18F2X1X/                      The Idle modes allow the controller's CPU to be
4X1X devices is identical to the legacy Sleep mode                   selectively shut down while the peripherals continue to
offered in all other PIC devices. It is entered by clearing          operate. Selecting a particular Idle mode allows users
the IDLEN bit (the default state on device Reset) and                to further manage power consumption.
executing the SLEEP instruction. This shuts down the
selected oscillator (Figure 3-5). All clock source status            If the IDLEN bit is set to a `1' when a SLEEP instruction is
bits are cleared.                                                    executed, the peripherals will be clocked from the clock
                                                                     source selected using the SCS1:SCS0 bits; however, the
Entering the Sleep mode from any other mode does not                 CPU will not be clocked. The clock source status bits are
require a clock switch. This is because no clocks are                not affected. Setting IDLEN and executing a SLEEP
needed once the controller has entered Sleep. If the                 instruction provides a quick method of switching from a
WDT is selected, the INTRC source will continue to                   given Run mode to its corresponding Idle mode.
operate. If the Timer1 oscillator is enabled, it will also
continue to run.                                                     If the WDT is selected, the INTRC source will continue
                                                                     to operate. If the Timer1 oscillator is enabled, it will also
When a wake event occurs in Sleep mode (by interrupt,                continue to run.
Reset or WDT time-out), the device will not be clocked
until the clock source selected by the SCS1:SCS0 bits                Since the CPU is not executing instructions, the only
becomes ready (see Figure 3-6), or it will be clocked                exits from any of the Idle modes are by interrupt, WDT
from the internal oscillator block if either the Two-Speed           time-out or a Reset. When a wake event occurs, CPU
Start-up or the Fail-Safe Clock Monitor are enabled                  execution is delayed by an interval of TCSD
(see Section 22.0 "Special Features of the CPU"). In                 (parameter 38, Table 25-10) while it becomes ready to
either case, the OSTS bit is set when the primary clock              execute code. When the CPU begins executing code,
is providing the device clocks. The IDLEN and SCS bits               it resumes with the same clock source for the current
are not affected by the wake-up.                                     Idle mode. For example, when waking from RC_IDLE
                                                                     mode, the internal oscillator block will 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 any Idle mode or the Sleep mode, a WDT time-
                                                                     out will result in a WDT wake-up to the Run mode
                                                                     currently specified by the SCS1:SCS0 bits.

FIGURE 3-5:      TRANSITION TIMING FOR ENTRY TO SLEEP MODE

            Q1 Q2 Q3 Q4 Q1
OSC1

       CPU
      Clock

Peripheral
      Clock

Sleep

Program      PC                                              PC + 2
Counter

FIGURE 3-6:      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

Note 1: TOST = 1024 TOSC; TPLL = 2 ms (approx). These intervals are not shown to scale.

2009 Microchip Technology Inc.                                                                 DS39636D-page 39
PIC18F2X1X/4X1X

3.4.1 PRI_IDLE MODE                                        3.4.2 SEC_IDLE MODE

This mode is unique among the three low-power Idle         In SEC_IDLE mode, the CPU is disabled but the
modes, in that it does not disable the primary device      peripherals continue to be clocked from the Timer1
clock. For timing sensitive applications, this allows for  oscillator. This mode is entered from SEC_RUN by
the fastest resumption of device operation with its more   setting the IDLEN bit and executing a SLEEP
accurate primary clock source, since the clock source      instruction. If the device is in another Run mode, set
does not have to "warm up" or transition from another      IDLEN first, then set SCS1:SCS0 to `01' and execute
oscillator.                                                SLEEP. When the clock source is switched to the
                                                           Timer1 oscillator, the primary oscillator is shut down,
PRI_IDLE mode is entered from PRI_RUN mode by              the OSTS bit is cleared and the T1RUN bit is set.
setting the IDLEN bit and executing a SLEEP instruc-
tion. If the device is in another Run mode, set IDLEN      When a wake event occurs, the peripherals continue to
first, then clear the SCS bits and execute 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 the FOSC3:FOSC0 Configuration bits. The OSTS            IDLEN and SCS bits are not affected by the wake-up;
bit remains set (see Figure 3-7).                          the Timer1 oscillator continues to run (see Figure 3-8).

When a wake event occurs, the CPU is clocked from the                             Note:  The Timer1 oscillator should already be
primary clock source. A delay of interval TCSD is                                        running prior to entering SEC_IDLE mode.
required between the wake event and when code                                            If the T1OSCEN bit is not set when the
execution starts. This is required to allow the CPU to                                   SLEEP instruction is executed, the SLEEP
become ready to execute instructions. After the wake-                                    instruction will be ignored and entry to
up, the OSTS bit remains set. The IDLEN and SCS bits                                     SEC_IDLE mode will not occur. If the
are not affected by the wake-up (see Figure 3-8).                                        Timer1 oscillator is enabled but not yet
                                                                                         running, peripheral clocks will be delayed
                                                                                         until the oscillator has started. In such
                                                                                         situations, initial oscillator operation is far
                                                                                         from stable and unpredictable operation
                                                                                         may result.

FIGURE 3-7:                   TRANSITION TIMING FOR ENTRY TO IDLE MODE

                  Q1          Q2      Q3  Q4  Q1

OSC1

CPU Clock

Peripheral
      Clock

Program                           PC                                                     PC + 2
Counter

FIGURE 3-8:                   TRANSITION TIMING FOR WAKE FROM IDLE TO RUN MODE

                          Q1                                                                     Q2  Q3  Q4

      OSC1                                TCSD
                                                                              PC
CPU Clock

Peripheral
       Clock

   Program
   Counter

                              Wake Event

DS39636D-page 40                                                                                     2009 Microchip Technology Inc.
3.4.3 RC_IDLE MODE                                              PIC18F2X1X/4X1X

In RC_IDLE mode, the CPU is disabled but the periph-         On all exits from Idle or Sleep modes by interrupt, code
erals continue to be clocked from the internal oscillator    execution branches to the interrupt vector if the GIE/
block using the INTOSC multiplexer. This mode allows         GIEH bit (INTCON<7>) is set. Otherwise, code execu-
for controllable power conservation during Idle periods.     tion continues or resumes without branching (see
                                                             Section 8.0 "Interrupts").
From RC_RUN, this mode is entered by setting the
IDLEN bit and executing a SLEEP instruction. If the          A fixed delay of interval TCSD following the wake event
device is in another Run mode, first set IDLEN, then set     is required when leaving Sleep and Idle modes. This
the SCS1 bit and execute SLEEP. Although its value is        delay is required for the CPU to prepare for execution.
ignored, it is recommended that SCS0 also be cleared;        Instruction execution resumes on the first clock cycle
this is to maintain software compatibility with future       following this delay.
devices. The INTOSC multiplexer may be used to
select a higher clock frequency by modifying the IRCF        3.5.2 EXIT BY WDT TIME-OUT
bits before executing the SLEEP instruction. When the
clock source is switched to the INTOSC multiplexer, the      A WDT time-out will cause different actions depending
primary oscillator is shut down and the OSTS bit is          on which power-managed mode the device is in when
cleared.                                                     the time-out occurs.

If the IRCF bits are set to any non-zero value, or the       If the device is not executing code (all Idle modes and
INTSRC bit is set, the INTOSC output is enabled. The         Sleep mode), the time-out will result in an exit from the
IOFS bit becomes set, after the INTOSC output                powe-managed mode (see Section 3.2 "Run Modes"
becomes stable, after an interval of TIOBST                  and Section 3.3 "Sleep Mode"). If the device is
(parameter 39, Table 25-10). Clocks to the peripherals       executing code (all Run modes), the time-out will result
continue while the INTOSC source stabilizes. If the          in a WDT Reset (see Section 22.2 "Watchdog Timer
IRCF bits were previously at a non-zero value, or            (WDT)").
INTSRC was set before the SLEEP instruction was exe-
cuted and the INTOSC source was already stable, the          The WDT timer and postscaler are cleared by
IOFS bit will remain set. If the IRCF bits and INTSRC        executing a SLEEP or CLRWDT instruction, the loss of a
are all clear, the INTOSC output will not be enabled, the    currently selected clock source (if the Fail-Safe Clock
IOFS bit will remain clear and there will be no indication   Monitor is enabled) and modifying the IRCF bits in the
of the current clock source.                                 OSCCON register if the internal oscillator block is the
                                                             device clock source.
When a wake event occurs, the peripherals continue to
be clocked from the INTOSC multiplexer. After a delay        3.5.3 EXIT BY RESET
of TCSD following the wake event, the CPU begins
executing code being clocked by the INTOSC multi-            Normally, the device is held in Reset by the Oscillator
plexer. The IDLEN and SCS bits are not affected by the       Start-up Timer (OST) until the primary clock becomes
wake-up. The INTRC source will continue to run if            ready. At that time, the OSTS bit is set and the device
either the WDT or the Fail-Safe Clock Monitor is             begins executing code. If the internal oscillator block is
enabled.                                                     the new clock source, the IOFS bit is set instead.

3.5 Exiting Idle and Sleep Modes                             The exit delay time from Reset to the start of code
                                                             execution depends on both the clock sources before
An exit from Sleep mode or any of the Idle modes is          and after the wake-up and the type of oscillator if the
triggered by an interrupt, a Reset or a WDT time-out.        new clock source is the primary clock. Exit delays are
This section discusses the triggers that cause exits         summarized in Table 3-2.
from power-managed modes. The clocking subsystem
actions are discussed in each of the power-managed           Code execution can begin before the primary clock
modes (see Section 3.2 "Run Modes", Section 3.3              becomes ready. If either the Two-Speed Start-up (see
"Sleep Mode" and Section 3.4 "Idle Modes").                  Section 22.3 "Two-Speed Start-up") or Fail-Safe
                                                             Clock Monitor (see Section 22.4 "Fail-Safe Clock
3.5.1 EXIT BY INTERRUPT                                      Monitor") is enabled, the device may begin execution
                                                             as soon as the Reset source has cleared. Execution is
Any of the available interrupt sources can cause the         clocked by the INTOSC multiplexer driven by the
device to exit from an Idle mode or the Sleep mode to        internal oscillator block. Execution is clocked by the
a Run mode. To enable this functionality, an interrupt       internal oscillator block until either the primary clock
source must be enabled by setting its enable bit in one      becomes ready or a power-managed mode is entered
of the INTCON or PIE registers. The exit sequence is         before the primary clock becomes ready; the primary
initiated when the corresponding interrupt flag bit is set.  clock is then shut down.

2009 Microchip Technology Inc.                             DS39636D-page 41
PIC18F2X1X/4X1X

3.5.4       EXIT WITHOUT AN OSCILLATOR                In these instances, the primary clock source either
            START-UP DELAY                            does not require an oscillator start-up delay since it is
                                                      already running (PRI_IDLE), or normally does not
Certain exits from power-managed modes do not         require an oscillator start-up delay (RC, EC and INTIO
invoke the OST at all. There are two cases:           Oscillator modes). However, a fixed delay of interval
                                                      TCSD following the wake event is still required when
PRI_IDLE mode, where the primary clock source       leaving Sleep and Idle modes to allow the CPU to
   is not stopped; and                                prepare for execution. Instruction execution resumes
                                                      on the first clock cycle following this delay.
the primary clock source is not any of the LP, XT,
   HS or HSPLL modes.

TABLE 3-2: EXIT DELAY ON WAKE-UP BY RESET FROM SLEEP MODE OR ANY IDLE MODE
                     (BY CLOCK SOURCES)

        Clock Source         Clock Source             Exit Delay     Clock Ready Status
       before Wake-up        after Wake-up                               bit (OSCCON)

                             LP, XT, HS

       Primary Device Clock    HSPLL                  TCSD(2)        OSTS
         (PRI_IDLE mode)
                               EC, RC                                  --
                              INTRC(1)                               IOFS
                             INTOSC(3)

       T1OSC or INTRC(1)     LP, XT, HS                  TOST(4)     OSTS
                               HSPLL                  TOST + trc(4)  IOFS
                               EC, RC
                                                         TCSD(2)
                             INTOSC(2)                 TIOBST(5)

            INTOSC(3)        LP, XT, HS                  TOST(5)     OSTS
                               HSPLL                  TOST + trc(4)  IOFS
                               EC, RC
                                                         TCSD(2)
                             INTOSC(2)
                                                          None

                 None        LP, XT, HS                  TOST(4)     OSTS
            (Sleep mode)       HSPLL                  TOST + trc(4)  IOFS
                               EC, RC
                                                         TCSD(2)
                             INTOSC(2)                 TIOBST(5)

Note 1:     In this instance, refers specifically to the 31 kHz INTRC clock source.
        2:  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, INTOSC defaults to 1 MHz.
        3:  Includes both the INTOSC 8 MHz source and postscaler derived frequencies.

       4: TOST is the Oscillator Start-up Timer (parameter 32). trc is the PLL Lock-out Timer (parameter F12); it is
             also designated as TPLL.

       5: Execution continues during TIOBST (parameter 39), the INTOSC stabilization period.

DS39636D-page 42                                                      2009 Microchip Technology Inc.
                                                     PIC18F2X1X/4X1X

4.0 RESET                                            A simplified block diagram of the On-Chip Reset Circuit
                                                     is shown in Figure 4-1.
The PIC18F2X1X/4X1X devices differentiate between
various kinds of Reset:                              4.1 RCON Register

a) Power-on Reset (POR)                              Device Reset events are tracked through the RCON
b) MCLR Reset during normal operation                register (Register 4-1). The lower five bits of the
c) MCLR Reset during power-managed modes             register indicate that a specific Reset event has
d) Watchdog Timer (WDT) Reset (during                occurred. In most cases, these bits can only be cleared
                                                     by the event and must be set by the application after
      execution)                                     the event. The state of these flag bits, taken together,
e) Programmable Brown-out Reset (BOR)                can be read to indicate the type of Reset that just
f) RESET Instruction                                 occurred. This is described in more detail in
g) Stack Full Reset                                  Section 4.6 "Reset State of Registers".
h) Stack Underflow Reset
                                                     The RCON register also has control bits for setting
This section discusses Resets generated by MCLR,     interrupt priority (IPEN) and software control of the
POR and BOR and covers the operation of the various  BOR (SBOREN). Interrupt priority is discussed in
start-up timers. Stack Reset events are covered in   Section 8.0 "Interrupts". BOR is covered in
Section 5.1.2.4 "Stack Full and Underflow Resets".   Section 4.4 "Brown-out Reset (BOR)".
WDT Resets are covered in Section 22.2 "Watchdog
Timer (WDT)".

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

        RESET
      Instruction

       Stack       Stack Full/Underflow Reset
      Pointer

MCLR                   External Reset

                          MCLRE
             ( )_IDLE

               Sleep

               WDT
             Time-out

             VDD Rise POR Pulse
              Detect

VDD

             Brown-out

             Reset                                   S

                        BOREN

      OST/PWRT

                   OST 1024 Cycles                                         Chip_Reset
                                                                      Q
                        10-bit Ripple Counter        R

OSC1

        32 s       PWRT 65.5 ms
      INTRC(1)         11-bit Ripple Counter

                                                                                                                                                      Enable PWRT
                                                                                                                                                      Enable OST(2)

Note 1: This is the INTRC source from the internal oscillator block and is separate from the RC oscillator of the CLKI pin.
        2: See Table 4-2 for time-out situations.

2009 Microchip Technology Inc.                                      DS39636D-page 43
PIC18F2X1X/4X1X

REGISTER 4-1: RCON: RESET CONTROL REGISTER

                  R/W-0 R/W-1(1)     U-0  R/W-1        R-1  R-1  R/W-0(2) R/W-0

                  IPEN SBOREN        --   RI           TO   PD   POR  BOR

                  bit 7                                               bit 0

bit 7 IPEN: Interrupt Priority Enable bit

            1 = Enable priority levels on interrupts
            0 = Disable priority levels on interrupts (PIC16CXXX Compatibility mode)
bit 6 SBOREN: BOR Software Enable bit(1)

            If BOREN1:BOREN0 = 01:
            1 = BOR is enabled
            0 = BOR is disabled
            If BOREN1:BOREN0 = 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 only)
            0 = The RESET instruction was executed causing a device Reset (must be set in software after
                  a Brown-out Reset occurs)

bit 3 TO: Watchdog Time-out Flag bit

            1 = 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 = A Power-on Reset has not occurred (set by firmware only)
            0 = A Power-on Reset occurred (must be set in software after a Power-on Reset occurs)

bit 0 BOR: Brown-out Reset Status bit

            1 = A Brown-out Reset has not occurred (set by firmware only)
            0 = A Brown-out Reset occurred (must be set in software after a Brown-out Reset occurs)

               Note 1: The SBOREN bit is only available when the BOREN1:BOREN0 Configuration
                            bits = 01; otherwise, it is disabled and reads as `0'. See Section 4.4 "Brown-out
                            Reset (BOR)".

                       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.

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

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

                         2: Brown-out Reset is said to have occurred when BOR is `0' and POR is `1' (assuming
                              that POR was set to `1' by software immediately after POR).

DS39636D-page 44                                             2009 Microchip Technology Inc.
                                                           PIC18F2X1X/4X1X

4.2 Master Clear (MCLR)                                    FIGURE 4-2:     EXTERNAL POWER-ON
                                                                           RESET CIRCUIT (FOR
The MCLR pin provides a method for triggering 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  VDD VDD
the MCLR Reset path which detects and ignores small
pulses.                                                             D   R

The MCLR pin is not driven low by any internal Resets,                  C  R1
including the WDT.                                                                    MCLR

In PIC18F2X1X/4X1X devices, the MCLR input can be                                   PIC18FXXXX
disabled with the MCLRE Configuration bit. When
MCLR is disabled, the pin becomes a digital input. See     Note 1:  External Power-on Reset circuit is required
Section 9.5 "PORTE, TRISE and LATE Registers"                       only if the VDD power-up slope is too slow.
for more information.                                               The diode D helps discharge the capacitor
                                                                    quickly when VDD powers down.
4.3 Power-on Reset (POR)
                                                           2: R < 40 k is recommended to make sure that
A Power-on Reset pulse is generated on-chip                     the voltage drop across R does not violate
whenever VDD rises above a certain threshold. This              the device's electrical specification.
allows the device to start in the initialized state when
VDD is adequate for operation.                             3: R1  1 k will limit any current flowing into
                                                                MCLR from external capacitor C, in the event
To take advantage of the POR circuitry, tie the MCLR            of MCLR/VPP pin breakdown, due to
pin through a resistor (1 k to 10 k) to VDD. This will          Electrostatic Discharge (ESD) or Electrical
eliminate external RC components usually needed to              Overstress (EOS).
create a Power-on Reset delay. A minimum rise rate for
VDD is specified (parameter D004). For a slow rise
time, see Figure 4-2.

When the device starts normal operation (i.e., exits the
Reset condition), device operating parameters (volt-
age, frequency, temperature, etc.) must be met to
ensure operation. If these conditions are not met, the
device must be held in Reset until the operating
conditions are met.

POR events are captured by the POR bit (RCON<1>).
The state of the bit is set to `0' whenever a POR occurs;
it does not change for any other Reset event. POR is
not reset to `1' by any hardware event. To capture
multiple events, the user manually resets the bit to `1'
in software following any POR.

2009 Microchip Technology Inc.                                           DS39636D-page 45
PIC18F2X1X/4X1X

4.4 Brown-out Reset (BOR)                                   Placing the BOR under software control gives the user
                                                            the additional flexibility of tailoring the application to its
PIC18F2X1X/4X1X devices implement a BOR circuit             environment without having to reprogram the device to
that provides the user with a number of configuration       change BOR configuration. It also allows the user to
and power-saving options. The BOR is controlled by          tailor device power consumption in software by elimi-
the BORV1:BORV0 and BOREN1:BOREN0 Configu-                  nating the incremental current that the BOR consumes.
ration bits. There are a total of four BOR configurations   While the BOR current is typically very small, it may
which are summarized in Table 4-1.                          have some impact in low-power applications.

The BOR threshold is set by the BORV1:BORV0 bits. If        Note:  Even when BOR is under software control,
BOR is enabled (any values of BOREN1:BOREN0,                       the BOR Reset voltage level is still set by
except `00'), any drop of VDD below VBOR (parameter                the BORV1:BORV0 Configuration bits. It
D005) for greater than TBOR (parameter 35) will reset              cannot be changed in software.
the device. A Reset may or may not occur if VDD falls
below VBOR for less than TBOR. The chip will remain in      4.4.2 DETECTING BOR
Brown-out Reset until VDD rises above VBOR.
                                                            When BOR is enabled, the BOR bit always resets to `0'
If the Power-up Timer is enabled, it will be invoked after  on any BOR or POR event. This makes it difficult to
VDD rises above VBOR; it then will keep the chip in         determine if a BOR event has occurred just by reading
Reset for an additional time delay, TPWRT                   the state of BOR alone. A more reliable method is to
(parameter 33). If VDD drops below VBOR while the           simultaneously check the state of both POR and BOR.
Power-up Timer is running, the chip will go back into a     This assumes that the POR bit is reset to `1' in software
Brown-out Reset and the Power-up Timer will be              immediately after any POR event. If BOR is `0' while
initialized. Once VDD rises above VBOR, the Power-up        POR is `1', it can be reliably assumed that a BOR event
Timer will execute the additional time delay.               has occurred.

BOR and the Power-on Timer (PWRT) are                       4.4.3 DISABLING BOR IN SLEEP MODE
independently configured. Enabling BOR Reset does
not automatically enable the PWRT.                          When BOREN1:BOREN0 = 10, the BOR remains
                                                            under hardware control and operates as previously
4.4.1 SOFTWARE ENABLED BOR                                  described. Whenever the device enters Sleep mode,
                                                            however, the BOR is automatically disabled. When the
When BOREN1:BOREN0 = 01, the BOR can be                     device returns to any other operating mode, BOR is
enabled or disabled by the user in software. This is        automatically re-enabled.
done with the control bit, SBOREN (RCON<6>).
Setting SBOREN enables the BOR to function as               This mode allows for applications to recover from
previously described. Clearing SBOREN disables the          brown-out situations, while actively executing code,
BOR entirely. The SBOREN bit operates only in this          when the device requires BOR protection the most. At
mode; otherwise it is read as `0'.                          the same time, it saves additional power in Sleep mode
                                                            by eliminating the small incremental BOR current.

TABLE 4-1: BOR CONFIGURATIONS

BOR Configuration     Status of                                   BOR Operation
BOREN1 BOREN0         SBOREN
                     (RCON<6>)

0                 0  Unavailable BOR disabled; must be enabled by reprogramming the Configuration bits.

0                 1  Available BOR enabled in software; operation controlled by SBOREN.

1                 0  Unavailable BOR enabled in hardware in Run and Idle modes, disabled during

                                  Sleep mode.

1                 1  Unavailable BOR enabled in hardware; must be disabled by reprogramming the

                                  Configuration bits.

DS39636D-page 46                                                    2009 Microchip Technology Inc.
                                                        PIC18F2X1X/4X1X

4.5 Device Reset Timers                                 4.5.3 PLL LOCK TIME-OUT

PIC18F2X1X/4X1X devices incorporate three separate      With the PLL enabled in its PLL mode, the time-out
on-chip timers that help regulate the Power-on Reset    sequence following a Power-on Reset is slightly differ-
process. Their main function is to ensure that the      ent from other oscillator modes. A separate timer is
device clock is stable before code is executed. These   used to provide a fixed time-out that is sufficient for the
timers are:                                             PLL to lock to the main oscillator frequency. This PLL
                                                        lock time-out (TPLL) is typically 2 ms and follows the
Power-up Timer (PWRT)                                 oscillator start-up time-out.
Oscillator Start-up Timer (OST)
PLL Lock Time-out                                     4.5.4 TIME-OUT SEQUENCE

4.5.1 POWER-UP TIMER (PWRT)                             On power-up, the time-out sequence is as follows:

The Power-up Timer (PWRT) of PIC18F2X1X/4X1X            1. After the POR pulse has cleared, PWRT time-out
devices is an 11-bit counter which uses the INTRC             is invoked (if enabled).
source as the clock input. This yields an approximate
time interval of 2048 x 32 s = 65.6 ms. While the       2. Then, the OST is activated.
PWRT is counting, the device is held in Reset.
                                                        The total time-out will vary based on oscillator configu-
The power-up time delay depends on the INTRC clock      ration and the status of the PWRT. Figure 4-3,
and will vary from chip to chip due to temperature and  Figure 4-4, Figure 4-5, Figure 4-6 and Figure 4-7 all
process variation. See DC parameter 33 for details.     depict time-out sequences on power-up, with the
                                                        Power-up Timer enabled and the device operating in
The PWRT is enabled by clearing the PWRTEN              HS Oscillator mode. Figures 4-3 through 4-6 also
Configuration bit.                                      apply to devices operating in XT or LP modes. For
                                                        devices in RC mode and with the PWRT disabled, there
4.5.2  OSCILLATOR START-UP TIMER                        will be no time-out at all.
       (OST)
                                                        Since the time-outs occur from the POR pulse, if MCLR
The Oscillator Start-up Timer (OST) provides a 1024     is kept low long enough, all time-outs will expire. Bring-
oscillator cycle (from OSC1 input) delay after the      ing MCLR high will begin execution immediately
PWRT delay is over (parameter 33). This ensures that    (Figure 4-5). This is useful for testing purposes or to
the crystal oscillator or resonator has started and     synchronize more than one PIC18FXXXX device
stabilized.                                             operating in parallel.

The OST time-out is invoked only for XT, LP, HS and
HSPLL modes and only on Power-on Reset, or on exit
from most power-managed modes.

TABLE 4-2: TIME-OUT IN VARIOUS SITUATIONS

  Oscillator                      Power-up(2) and Brown-out                          Exit From
Configuration                                                                Power-Managed Mode
                                  PWRTEN = 0            PWRTEN = 1
                                                                               1024 TOSC + 2 ms(2)
HSPLL           66 ms(1) + 1024 TOSC + 2 ms(2)          1024 TOSC + 2 ms(2)          1024 TOSC
HS, XT, LP            66 ms(1) + 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.

2009 Microchip Technology Inc.                                             DS39636D-page 47
PIC18F2X1X/4X1X

FIGURE 4-3:              TIME-OUT SEQUENCE ON POWER-UP (MCLR TIED TO VDD, VDD RISE < TPWRT)

                    VDD  TPWRT
                 MCLR
   INTERNAL POR                        TOST

PWRT TIME-OUT
    OST TIME-OUT

INTERNAL RESET

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

                    VDD         TPWRT
                 MCLR
    INTERNAL POR                             TOST

PWRT TIME-OUT
    OST TIME-OUT

INTERNAL RESET

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

                    VDD         TPWRT
                 MCLR
   INTERNAL POR                              TOST

PWRT TIME-OUT
    OST TIME-OUT

INTERNAL RESET

DS39636D-page 48                                    2009 Microchip Technology Inc.
                                                                   PIC18F2X1X/4X1X

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                TPWRT
               MCLR
  INTERNAL POR                                                     TOST
                                                                                TPLL
PWRT TIME-OUT
  OST TIME-OUT

     PLL TIME-OUT

INTERNAL RESET

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

2009 Microchip Technology Inc.                                                      DS39636D-page 49
PIC18F2X1X/4X1X

4.6 Reset State of Registers                              Table 4-4 describes the Reset states for all of the
                                                          Special Function Registers. These are categorized by
Most registers are unaffected by a Reset. Their status    Power-on and Brown-out Resets, Master Clear and
is unknown on POR and unchanged by all other              WDT Resets and WDT wake-ups.
Resets. The other registers are forced to a "Reset
state" depending on the type of Reset that occurred.

Most registers are not affected by a WDT wake-up,
since this is viewed as the resumption of normal oper-
ation. Status bits from the RCON register, RI, TO, PD,
POR and BOR, are set or cleared differently in different
Reset situations, as indicated in Table 4-3. These bits
are used in software to determine the nature of the
Reset.

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

                                Program                   RCON Register  STKPTR Register
                                Counter
       Condition

                                           SBOREN         RI TO PD POR BOR STKFUL STKUNF

Power-on Reset                  0000h      1              11100          0                        0

RESET instruction               0000h      u(2)           0uuuu          u                        u

Brown-out Reset                 0000h      u(2)           111u0          u                        u

MCLR during power-managed       0000h      u(2)           u1uuu          u                        u

Run modes

MCLR during power-managed       0000h      u(2)           u10uu          u                        u

Idle modes and Sleep mode

WDT time-out during full power  0000h      u(2)           u0uuu          u                        u

or power-managed Run mode

MCLR during full power          0000h      u(2)           uuuuu          u                        u
execution

Stack Full Reset (STVREN = 1)   0000h      u(2)           uuuuu          1                        u

Stack Underflow Reset           0000h      u(2)           uuuuu          u                        1
(STVREN = 1)

Stack Underflow Error (not an   0000h      u(2)           uuuuu          u                        1

actual Reset, STVREN = 0)

WDT Time-out during             PC + 2     u(2)           u00uu          u                        u

power-managed Idle or Sleep

modes

Interrupt exit from             PC + 2(1)  u(2)           uu0uu          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 POR and unchanged for all other Resets when software BOR is enabled
      (BOREN1:BOREN0 Configuration bits = 01 and SBOREN = 1); otherwise, the Reset state is `0'.

DS39636D-page 50                                                          2009 Microchip Technology Inc.
                                                      PIC18F2X1X/4X1X

TABLE 4-4: INITIALIZATION CONDITIONS FOR ALL REGISTERS

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

TOSU         2410 2510 2515 2610 4410 4510 4515 4610  ---0 0000        ---0 0000      ---0 uuuu(3)
TOSH         2410 2510 2515 2610 4410 4510 4515 4610  0000 0000        0000 0000      uuuu uuuu(3)
TOSL         2410 2510 2515 2610 4410 4510 4515 4610  0000 0000        0000 0000      uuuu uuuu(3)
STKPTR       2410 2510 2515 2610 4410 4510 4515 4610  00-0 0000        uu-0 0000      uu-u uuuu(3)

PCLATU       2410 2510 2515 2610 4410 4510 4515 4610 ---0 0000         ---0 0000      ---u uuuu

PCLATH       2410 2510 2515 2610 4410 4510 4515 4610  0000 0000        0000 0000      uuuu uuuu
PCL          2410 2510 2515 2610 4410 4510 4515 4610  0000 0000        0000 0000        PC + 2(2)

TBLPTRU 2410 2510 2515 2610 4410 4510 4515 4610 --00 0000              --00 0000      --uu uuuu

TBLPTRH 2410 2510 2515 2610 4410 4510 4515 4610 0000 0000              0000 0000      uuuu uuuu

TBLPTRL 2410 2510 2515 2610 4410 4510 4515 4610 0000 0000              0000 0000      uuuu uuuu

TABLAT       2410 2510 2515 2610 4410 4510 4515 4610 0000 0000         0000 0000      uuuu uuuu

PRODH        2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx         uuuu uuuu      uuuu uuuu

PRODL        2410 2510 2515 2610 4410 4510 4515 4610  xxxx xxxx        uuuu uuuu      uuuu uuuu
INTCON       2410 2510 2515 2610 4410 4510 4515 4610  0000 000x        0000 000u      uuuu uuuu(1)
INTCON2      2410 2510 2515 2610 4410 4510 4515 4610  1111 -1-1        1111 -1-1      uuuu -u-u(1)
INTCON3      2410 2510 2515 2610 4410 4510 4515 4610  11-0 0-00        11-0 0-00      uu-u u-uu(1)

INDF0        2410 2510 2515 2610 4410 4510 4515 4610  N/A              N/A            N/A

POSTINC0 2410 2510 2515 2610 4410 4510 4515 4610      N/A              N/A            N/A

POSTDEC0 2410 2510 2515 2610 4410 4510 4515 4610      N/A              N/A            N/A

PREINC0 2410 2510 2515 2610 4410 4510 4515 4610       N/A              N/A            N/A

PLUSW0       2410 2510 2515 2610 4410 4510 4515 4610  N/A              N/A            N/A

FSR0H        2410 2510 2515 2610 4410 4510 4515 4610 ---- 0000         ---- 0000      ---- uuuu

FSR0L        2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx         uuuu uuuu      uuuu uuuu

WREG         2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx         uuuu uuuu      uuuu uuuu

INDF1        2410 2510 2515 2610 4410 4510 4515 4610  N/A              N/A            N/A

POSTINC1 2410 2510 2515 2610 4410 4510 4515 4610      N/A              N/A            N/A

POSTDEC1 2410 2510 2515 2610 4410 4510 4515 4610      N/A              N/A            N/A

PREINC1 2410 2510 2515 2610 4410 4510 4515 4610       N/A              N/A            N/A

PLUSW1       2410 2510 2515 2610 4410 4510 4515 4610  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'.

2009 Microchip Technology Inc.                                                      DS39636D-page 51
PIC18F2X1X/4X1X

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

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

FSR1H        2410 2510 2515 2610 4410 4510 4515 4610 ---- 0000         ---- 0000      ---- uuuu

FSR1L        2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx         uuuu uuuu      uuuu uuuu

BSR          2410 2510 2515 2610 4410 4510 4515 4610 ---- 0000         ---- 0000      ---- uuuu

INDF2        2410 2510 2515 2610 4410 4510 4515 4610  N/A              N/A            N/A

POSTINC2 2410 2510 2515 2610 4410 4510 4515 4610      N/A              N/A            N/A

POSTDEC2 2410 2510 2515 2610 4410 4510 4515 4610      N/A              N/A            N/A

PREINC2 2410 2510 2515 2610 4410 4510 4515 4610       N/A              N/A            N/A

PLUSW2       2410 2510 2515 2610 4410 4510 4515 4610  N/A              N/A            N/A

FSR2H        2410 2510 2515 2610 4410 4510 4515 4610 ---- 0000         ---- 0000      ---- uuuu

FSR2L        2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx         uuuu uuuu      uuuu uuuu

STATUS       2410 2510 2515 2610 4410 4510 4515 4610 ---x xxxx         ---u uuuu      ---u uuuu

TMR0H        2410 2510 2515 2610 4410 4510 4515 4610 0000 0000         0000 0000      uuuu uuuu

TMR0L        2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx         uuuu uuuu      uuuu uuuu

T0CON        2410 2510 2515 2610 4410 4510 4515 4610 1111 1111         1111 1111      uuuu uuuu

OSCCON 2410 2510 2515 2610 4410 4510 4515 4610 0100 q000               0100 q000      uuuu uuqu

HLVDCON 2410 2510 2515 2610 4410 4510 4515 4610 0-00 0101              0-00 0101      u-uu uuuu

WDTCON       2410 2510 2515 2610 4410 4510 4515 4610  ---- ---0        ---- ---0      ---- ---u
RCON(4)      2410 2510 2515 2610 4410 4510 4515 4610  0q-1 11q0        0q-q qquu      uq-u qquu

TMR1H        2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx         uuuu uuuu      uuuu uuuu

TMR1L        2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx         uuuu uuuu      uuuu uuuu

T1CON        2410 2510 2515 2610 4410 4510 4515 4610 0000 0000         u0uu uuuu      uuuu uuuu

TMR2         2410 2510 2515 2610 4410 4510 4515 4610 0000 0000         0000 0000      uuuu uuuu

PR2          2410 2510 2515 2610 4410 4510 4515 4610 1111 1111         1111 1111      1111 1111

T2CON        2410 2510 2515 2610 4410 4510 4515 4610 -000 0000         -000 0000      -uuu uuuu

SSPBUF       2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx         uuuu uuuu      uuuu uuuu

SSPADD       2410 2510 2515 2610 4410 4510 4515 4610 0000 0000         0000 0000      uuuu uuuu

SSPSTAT 2410 2510 2515 2610 4410 4510 4515 4610 0000 0000              0000 0000      uuuu uuuu

SSPCON1 2410 2510 2515 2610 4410 4510 4515 4610 0000 0000              0000 0000      uuuu uuuu

SSPCON2 2410 2510 2515 2610 4410 4510 4515 4610 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'.

DS39636D-page 52                                                       2009 Microchip Technology Inc.
                                  PIC18F2X1X/4X1X

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

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

ADRESH       2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx  uuuu uuuu      uuuu uuuu

ADRESL       2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx  uuuu uuuu      uuuu uuuu

ADCON0       2410 2510 2515 2610 4410 4510 4515 4610 --00 0000  --00 0000      --uu uuuu

ADCON1       2410 2510 2515 2610 4410 4510 4515 4610 --00 0qqq  --00 0qqq      --uu uuuu

ADCON2       2410 2510 2515 2610 4410 4510 4515 4610 0-00 0000  0-00 0000      u-uu uuuu

CCPR1H       2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx  uuuu uuuu      uuuu uuuu

CCPR1L       2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx  uuuu uuuu      uuuu uuuu

CCP1CON 2410 2510 2515 2610 4410 4510 4515 4610 0000 0000       0000 0000      uuuu uuuu

             2410 2510 2515 2610 4410 4510 4515 4610 --00 0000  --00 0000      --uu uuuu

CCPR2H       2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx  uuuu uuuu      uuuu uuuu

CCPR2L       2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx  uuuu uuuu      uuuu uuuu

CCP2CON 2410 2510 2515 2610 4410 4510 4515 4610 --00 0000       --00 0000      --uu uuuu

BAUDCON 2410 2510 2515 2610 4410 4510 4515 4610 01-0 0-00       01-0 0-00      --uu uuuu

PWM1CON 2410 2510 2515 2610 4410 4510 4515 4610 0000 0000       0000 0000      uuuu uuuu

ECCP1AS 2410 2510 2515 2610 4410 4510 4515 4610 0000 0000       0000 0000      uuuu uuuu

             2410 2510 2515 2610 4410 4510 4515 4610 0000 00--  0000 00--      uuuu uu--

CVRCON       2410 2510 2515 2610 4410 4510 4515 4610 0000 0000  0000 0000      uuuu uuuu

CMCON        2410 2510 2515 2610 4410 4510 4515 4610 0000 0111  0000 0111      uuuu uuuu

TMR3H        2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx  uuuu uuuu      uuuu uuuu

TMR3L        2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx  uuuu uuuu      uuuu uuuu

T3CON        2410 2510 2515 2610 4410 4510 4515 4610 0000 0000  uuuu uuuu      uuuu uuuu

SPBRGH       2410 2510 2515 2610 4410 4510 4515 4610 0000 0000  0000 0000      uuuu uuuu

SPBRG        2410 2510 2515 2610 4410 4510 4515 4610 0000 0000  0000 0000      uuuu uuuu

RCREG        2410 2510 2515 2610 4410 4510 4515 4610 0000 0000  0000 0000      uuuu uuuu

TXREG        2410 2510 2515 2610 4410 4510 4515 4610 0000 0000  0000 0000      uuuu uuuu

TXSTA        2410 2510 2515 2610 4410 4510 4515 4610 0000 0010  0000 0010      uuuu uuuu

RCSTA        2410 2510 2515 2610 4410 4510 4515 4610 0000 000x  0000 000x      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'.

2009 Microchip Technology Inc.                                               DS39636D-page 53
PIC18F2X1X/4X1X

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

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

IPR2         2410 2510 2515 2610 4410 4510 4515 4610         11-- 1111        11-- 1111      uu-- uuuu
PIR2         2410 2510 2515 2610 4410 4510 4515 4610         00-- 0000        00-- 0000      uu-- uuuu(1)

PIE2         2410 2510 2515 2610 4410 4510 4515 4610 00-- 0000                00-- 0000      uu-- uuuu

IPR1         2410 2510 2515 2610 4410 4510 4515 4610 1111 1111                1111 1111      uuuu uuuu

PIR1         2410  2510  2515  2610  4410  4510  4515  4610  -111 1111        -111 1111      -uuu uuuu
             2410  2510  2515  2610  4410  4510  4515  4610  0000 0000        0000 0000      uuuu uuuu(1)
             2410  2510  2515  2610  4410  4510  4515  4610  -000 0000        -000 0000      -uuu uuuu(1)

PIE1         2410 2510 2515 2610 4410 4510 4515 4610 0000 0000                0000 0000      uuuu uuuu

             2410 2510 2515 2610 4410 4510 4515 4610 -000 0000                -000 0000      -uuu uuuu

OSCTUNE 2410 2510 2515 2610 4410 4510 4515 4610 00-0 0000                     00-0 0000      uu-u uuuu

TRISE        2410 2510 2515 2610 4410 4510 4515 4610 0000 -111                0000 -111      uuuu -uuu

TRISD        2410 2510 2515 2610 4410 4510 4515 4610 1111 1111                1111 1111      uuuu uuuu

TRISC        2410 2510 2515 2610 4410 4510 4515 4610 1111 1111                1111 1111      uuuu uuuu

TRISB        2410 2510 2515 2610 4410 4510 4515 4610         1111 1111        1111 1111      uuuu uuuu
TRISA(5)     2410 2510 2515 2610 4410 4510 4515 4610         1111 1111(5)     1111 1111(5)   uuuu uuuu(5)

LATE         2410 2510 2515 2610 4410 4510 4515 4610 ---- -xxx                ---- -uuu      ---- -uuu

LATD         2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx                uuuu uuuu      uuuu uuuu

LATC         2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx                uuuu uuuu      uuuu uuuu

LATB         2410 2510 2515 2610 4410 4510 4515 4610         xxxx xxxx        uuuu uuuu      uuuu uuuu
LATA(5)      2410 2510 2515 2610 4410 4510 4515 4610         xxxx xxxx(5)     uuuu uuuu(5)   uuuu uuuu(5)

PORTE        2410 2510 2515 2610 4410 4510 4515 4610 ---- x000                ---- x000      ---- uuuu

PORTD        2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx                uuuu uuuu      uuuu uuuu

PORTC        2410 2510 2515 2610 4410 4510 4515 4610 xxxx xxxx                uuuu uuuu      uuuu uuuu

PORTB        2410 2510 2515 2610 4410 4510 4515 4610         xxxx xxxx        uuuu uuuu      uuuu uuuu
PORTA(5)     2410 2510 2515 2610 4410 4510 4515 4610         xx0x 0000(5)     uu0u 0000(5)   uuuu uuuu(5)

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'.

DS39636D-page 54                                                               2009 Microchip Technology Inc.
                                                                         PIC18F2X1X/4X1X

5.0 MEMORY ORGANIZATION                                           5.1 Program Memory Organization

There are two types of memory in PIC18F2X1X/4X1X                  PIC18 microcontrollers implement a 21-bit program
microcontroller devices:                                          counter, which is capable of addressing a 2-Mbyte
                                                                  program memory space. Accessing a location between
Program Memory                                                  the upper boundary of the physically implemented
Data RAM                                                        memory and the 2-Mbyte address will return all `0's (a
                                                                  NOP instruction).
As Harvard architecture devices, the data and program
memories use separate busses; this allows for                     The PIC18F2410/4410 and PIC18F2510 each have
concurrent access of the two memory spaces.                       16 Kbytes of Flash memory and can store up to 8,192
                                                                  single-word instructions. The PIC18F2510/4510 each
Additional detailed information on the operation of the           have 32 Kbytes of Flash memory and can store up to
Flash program memory is provided in Section 6.0                   16,384 single-word instructions. The PIC18F2515/4515
"Flash Program Memory".                                           each have 48 Kbytes of Flash memory and can store up
                                                                  to 24,576 single-word instructions. The PIC18F2610/
                                                                  4610 each have 64 Kbytes of Flash memory and can
                                                                  store up to 32,768 single-word instructions.

                                                                  PIC18 devices have two interrupt vectors. The Reset
                                                                  vector address is at 0000h and the interrupt vector
                                                                  addresses are at 0008h and 0018h.

                                                                  The program memory map for PIC18F2X1X/4X1X
                                                                  devices is shown in Figure 5-1.

FIGURE 5-1:  PROGRAM MEMORY MAP AND STACK FOR
             PIC18F2X1X/4X1X DEVICES

                                     PC<20:0>

                       CALL,RCALL,RETURN                                 21

                       RETFIE,RETLW

                                     Stack Level 1

                                                  
                                                  
                                                  

                                     Stack Level 31

                                            Reset Vector                                  00000h
                                  High Priority Interrupt Vector                          00008h
                                  Low Priority Interrupt Vector                           00018h

      On-Chip                           On-Chip            On-Chip             On-Chip
Program Memory                    Program Memory     Program Memory      Program Memory

   (16 Kbytes)                       (32 Kbytes)        (48 Kbytes)         (64 Kbytes)

             03FFFh                                                                                                      User Memory Space
             04000h

             Read `0'                     07FFFh                0BFFFh           0FFFFh
                                          08000h                 0C000h           10000h

                                  Read `0'               Read `0'        Read `0'

                                                                                                                1FFFFFh
PIC18F2410/4410 PIC18F2510/4510 PIC18F2515/4515 PIC18F2610/4610 200000h

2009 Microchip Technology Inc.                                                                                         DS39636D-page 55
PIC18F2X1X/4X1X

5.1.1 PROGRAM COUNTER                                        The stack operates as a 31-word by 21-bit RAM and a
                                                             5-bit Stack Pointer, STKPTR. The stack space 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 Special File Registers. Data can also be pushed
and writable. The high byte, or PCH register, contains       to, or popped from the stack, using these registers.
the PC<15:8> bits; it is not directly readable or writable.
Updates to the PCH register are performed through the        A CALL type instruction causes a push onto the stack;
PCLATH register. The upper byte is called PCU. This          the Stack Pointer is first incremented and the location
register contains the PC<20:16> bits; it is also not         pointed to by the Stack Pointer is written with the
directly readable or writable. Updates to the PCU            contents of the PC (already pointing to the instruction
register are performed through the PCLATU register.          following the CALL). A RETURN type instruction causes
                                                             a pop from the stack; the contents of the location
The contents of PCLATH and PCLATU are transferred            pointed to by the STKPTR are transferred to the PC
to the program counter by any operation that writes          and then the Stack Pointer is decremented.
PCL. Similarly, the upper two bytes of the program
counter are transferred to PCLATH and PCLATU by an           The Stack Pointer is initialized to `00000' after all
operation that reads PCL. This is useful for computed        Resets. There is no RAM associated with the location
offsets to the PC (see Section 5.1.4.1 "Computed             corresponding to a Stack Pointer value of `00000'; this
GOTO").                                                      is only a Reset value. Status bits indicate if the stack is
                                                             full or has overflowed or has underflowed.
The PC addresses bytes in the program memory. To
prevent the PC from becoming misaligned with word            5.1.2.1 Top-of-Stack Access
instructions, the Least Significant bit of PCL is fixed to
a value of `0'. The PC increments by 2 to address            Only the top of the return address stack (TOS) is
sequential instructions in the program memory.               readable and writable. A set of three registers,
                                                             TOSU:TOSH:TOSL, hold the contents of the stack loca-
The CALL, RCALL, GOTO and program branch                     tion pointed to by the STKPTR register (Figure 5-2). This
instructions write to the program counter directly. For      allows users to implement a software stack if necessary.
these instructions, the contents of PCLATH and               After a CALL, RCALL or interrupt, the software can read
PCLATU are not transferred to the program counter.           the pushed value by reading the TOSU:TOSH:TOSL
                                                             registers. These values can be placed on a user defined
5.1.2 RETURN ADDRESS STACK                                   software stack. At return time, the software can return
                                                             these values to TOSU:TOSH:TOSL and do a return.
The return address stack allows any combination of up
to 31 program calls and interrupts to occur. The PC is       The user must disable the global interrupt enable bits
pushed onto the stack when a CALL or RCALL instruc-          while accessing the stack to prevent inadvertent stack
tion is executed or an interrupt is Acknowledged. The        corruption.
PC value is pulled off the stack on a RETURN, RETLW or
a RETFIE instruction. PCLATU and PCLATH are not
affected by any of the RETURN or CALL instructions.

FIGURE 5-2:       RETURN ADDRESS STACK AND ASSOCIATED REGISTERS
                                                       Return Address Stack <20:0>

                  Top-of-Stack Registers                              11111  Stack Pointer
                                                                      11110
                                                                      11101  STKPTR<4:0>
                                                                                  00010
TOSU              TOSH  TOSL
00h               1Ah   34h

                                          Top-of-Stack       001A34h  00011
                                                             000D58h  00010
                                                                      00001
                                                                      00000

DS39636D-page 56                                                             2009 Microchip Technology Inc.
                                                                PIC18F2X1X/4X1X

5.1.2.2 Return Stack Pointer (STKPTR)                      When the stack has been popped enough times 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 and sets the STKUNF bit, while the Stack
Pointer value, the STKFUL (Stack Full) status bit and      Pointer remains at zero. The STKUNF bit will remain
the STKUNF (Stack Underflow) status bits. The value        set until cleared by software or until a POR occurs.
of the Stack Pointer can be 0 through 31. The Stack
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 has the effect of vectoring the
stack. On Reset, the Stack Pointer value will be zero.            program to the Reset vector, where the
The user may read and write the Stack Pointer value.              stack conditions can be verified and
This feature can be used by a Real-Time Operating                 appropriate actions can be taken. This is
System (RTOS) for return stack maintenance.                       not the same as a Reset, as the contents
                                                                  of the SFRs are not affected.
After the PC is pushed onto the stack 31 times (without
popping any values off the stack), the STKFUL bit is       5.1.2.3 PUSH and POP Instructions
set. The STKFUL bit is cleared by software or by a
POR.                                                       Since the Top-of-Stack is readable and writable, the
                                                           ability to push values onto the stack and pull values off
The action that takes place when the stack becomes         the stack without disturbing normal program execution
full depends on the state of the STVREN (Stack Over-       is a desirable feature. The PIC18 instruction set
flow Reset Enable) Configuration bit. (Refer to            includes two instructions, PUSH and POP, that permit
Section 22.1 "Configuration Bits" for a description of     the TOS to be manipulated under software control.
the device Configuration bits.) If STVREN is set           TOSU, TOSH and TOSL can be modified to place data
(default), the 31st push will push the (PC + 2) value      or a return address on the stack.
onto the stack, set the STKFUL bit and reset the
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
                                                           the current PC value onto the stack.
If STVREN is cleared, the STKFUL bit will be set on the
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
                                                          SP4      SP3    SP2          SP1    SP0
               STKFUL(1) STKUNF(1)       --
                                                                                                  bit 0
               bit 7

bit 7          STKFUL: Stack Full Flag bit(1)
               1 = Stack became full or overflowed
bit 6          0 = Stack has not become full or overflowed
               STKUNF: Stack Underflow Flag bit(1)
bit 5          1 = Stack underflow occurred
bit 4-0        0 = Stack underflow did not occur
               Unimplemented: Read as `0'
               SP4:SP0: Stack Pointer Location bits

                  Note 1: Bit 7 and bit 6 are cleared by user software or by a POR.

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

2009 Microchip Technology Inc.                                                      DS39636D-page 57
PIC18F2X1X/4X1X

5.1.2.4 Stack Full and Underflow Resets                        5.1.4  LOOK-UP TABLES IN PROGRAM
                                                                      MEMORY
Device Resets on stack overflow and stack underflow
conditions are enabled by setting the STVREN bit in            There may be programming situations that require the
Configuration Register 4L. When STVREN is set, a full          creation of data structures, or look-up tables, in
or underflow will set the appropriate STKFUL or                program memory. For PIC18 devices, look-up tables
STKUNF bit and then cause a device Reset. When                 can be implemented in two ways:
STVREN is cleared, a full or underflow condition will set
the appropriate STKFUL or STKUNF bit but not cause             Computed GOTO
a device Reset. The STKFUL or STKUNF bits are                   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,              to the program counter. An example is shown in
WREG and BSR registers, to provide a "fast return"             Example 5-2.
option for interrupts. The stack for each register is only
one level deep and is neither readable nor writable. It is     A look-up table can be formed with an ADDWF PCL
loaded with the current value of the corresponding reg-        instruction and a group of RETLW nn instructions. The
ister when the processor vectors for an interrupt. All         W register is loaded with an offset into the table before
interrupt sources will push values into the stack regis-       executing a call to that table. The first instruction of the
ters. The values in the registers are then loaded back         called routine is the ADDWF PCL instruction. The next
into their associated registers if the RETFIE, FAST            instruction executed will be one of the RETLW nn
instruction is used to return from the interrupt.              instructions that returns the value `nn' to the calling
                                                               function.
If both low and high priority interrupts are enabled, the
stack registers cannot be used reliably to return from         The offset value (in WREG) specifies the number of
low priority interrupts. If a high priority interrupt occurs   bytes that the program counter should advance and
while servicing a low priority interrupt, the stack register   should be multiples of 2 (LSb = 0).
values stored by the low priority interrupt will be
overwritten. In these cases, users must save the key           In this method, only one data byte may be stored in
registers in software during a low priority interrupt.         each instruction location and room on the return
                                                               address stack is required.
If interrupt priority is not used, all interrupts may use the
fast register stack for returns from interrupt. If no inter-   EXAMPLE 5-2:     COMPUTED GOTO USING
rupts are used, the fast register stack can be used to                          AN OFFSET VALUE
restore the STATUS, WREG and BSR registers at the
end of a subroutine call. To use the fast register stack       ORG    MOVF      OFFSET, W
for a subroutine call, a CALL label, FAST instruction          TABLE  CALL      TABLE
must be executed to save the STATUS, WREG and                         nn00h
BSR registers to the fast register stack. A                           ADDWF     PCL
RETURN, FAST instruction is then executed to restore                  RETLW     nnh
these registers from the fast register stack.                         RETLW     nnh
                                                                      RETLW     nnh
Example 5-1 shows a source code example that uses                     .
the fast register stack during a subroutine call and                  .
return.                                                               .

EXAMPLE 5-1:        FAST REGISTER STACK                        5.1.4.2 Table Reads and Table Writes
                    CODE EXAMPLE
CALL SUB1, FAST                                               A better method of storing data in program memory
                     ;STATUS, WREG, BSR                        allows two bytes of data to be stored in each instruction
                    ;SAVED IN FAST REGISTER                   location.
                    ;STACK
                                                               Look-up table data may be stored two bytes per
SUB1               ;RESTORE VALUES SAVED                      program word by using table reads and writes. The
                   ;IN FAST REGISTER STACK                    Table Pointer (TBLPTR) register specifies the byte
                                                               address and the Table Latch (TABLAT) register
      RETURN, FAST                                             contains the data that is read from or written to program
                                                               memory. Data is transferred to or from program
                                                               memory one byte at a time.

                                                               Table read and table write operations are discussed
                                                               further in Section 6.1 "Table Reads".

DS39636D-page 58                                                                2009 Microchip Technology Inc.
                                                                                 PIC18F2X1X/4X1X

5.2 PIC18 Instruction Cycle                                 5.2.2 INSTRUCTION FLOW/PIPELINING

5.2.1 CLOCKING SCHEME                                       An "Instruction Cycle" consists of four Q cycles: Q1
                                                            through Q4. The instruction fetch and execute are
The microcontroller clock input, whether from an            pipelined in such a manner that a fetch takes one
internal or external source, is internally divided by four  instruction cycle, while the decode and execute take
to generate four non-overlapping quadrature clocks          another instruction cycle. However, due to the pipe-
(Q1, Q2, Q3 and Q4). Internally, the program counter is     lining, each instruction effectively executes in one
incremented on every Q1; the instruction is fetched         cycle. If an instruction causes the program counter to
from the program memory and latched into the instruc-       change (e.g., GOTO), then two cycles are required to
tion register during Q4. The instruction is decoded and     complete the instruction (Example 5-3).
executed during the following Q1 through Q4. The
clocks and instruction execution flow are shown in          A fetch cycle begins with the Program Counter (PC)
Figure 5-3.                                                 incrementing in Q1.

                                                            In the execution cycle, the fetched instruction is latched
                                                            into the Instruction Register (IR) in cycle Q1. This
                                                            instruction is then decoded and executed during the
                                                            Q2, Q3 and Q4 cycles. Data memory is read during Q2
                                                            (operand read) and written during Q4 (destination
                                                            write).

FIGURE 5-3:                CLOCK/INSTRUCTION CYCLE                               Q1 Q2 Q3 Q4

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

EXAMPLE 5-3: INSTRUCTION PIPELINE FLOW

                                  TCY0            TCY1         TCY2              TCY3  TCY4                 TCY5

1. MOVLW 55h                      Fetch 1 Execute 1         Execute 2
                                                             Fetch 3
2. MOVWF PORTB                                    Fetch 2

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

5. Instruction @ address SUB_1

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

2009 Microchip Technology Inc.                                                             DS39636D-page 59
PIC18F2X1X/4X1X

5.2.3    INSTRUCTIONS IN PROGRAM                             The CALL and GOTO instructions have the absolute
         MEMORY                                              program memory address embedded into the instruc-
                                                             tion. Since instructions are always stored on word
The program memory is addressed in bytes. Instruc-           boundaries, the data contained in the instruction is a
tions are stored as two bytes or four bytes in program       word address. The word address is written to PC<20:1>,
memory. The Least Significant Byte of an instruction         which accesses the desired byte address in program
word is always stored in a program memory location           memory. Instruction #2 in Figure 5-4 shows how the
with an even address (LSb = 0). To maintain alignment        instruction GOTO 0006h is encoded in the program
with instruction boundaries, the PC increments in steps      memory. Program branch instructions, which encode a
of 2 and the LSb will always read `0' (see Section 5.1.1     relative address offset, operate in the same manner. The
"Program Counter").                                          offset value stored in a branch instruction represents the
                                                             number of single-word instructions that the PC will be
Figure 5-4 shows an example of how instruction words         offset by. Section 23.0 "Instruction Set Summary"
are stored in the program memory.                            provides further details of the instruction set.

FIGURE 5-4:       INSTRUCTIONS IN PROGRAM MEMORY

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

5.2.4 TWO-WORD INSTRUCTIONS                                  some reason and the second word is executed by itself,
                                                             a NOP is executed instead. This is necessary for cases
The standard PIC18 instruction set has four two-word         when the two-word instruction is preceded by a condi-
instructions: CALL, MOVFF, GOTO and LSFR. In all             tional instruction that changes the PC. Example 5-4
cases, the second word of the instructions always has        shows how this works.
`1111' as its four Most Significant bits; the other 12 bits
are literal data, usually a data memory address.                  Note:  See Section 5.6 "PIC18 Instruction
                                                                         Execution and the Extended Instruc-
The use of `1111' in the 4 MSbs of an instruction spec-                  tion Set" for information on two-word
ifies a special form of NOP. If the instruction is executed              instructions in the extended instruction
in proper sequence immediately after the first word                   set.
the data in the second word is accessed and used by
the instruction sequence. If the first word is skipped for

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

DS39636D-page 60                                                                   2009 Microchip Technology Inc.
5.3 Data Memory Organization                                PIC18F2X1X/4X1X

Note:  The operation of some aspects of data             5.3.1 BANK SELECT REGISTER (BSR)
       memory are changed when the PIC18
       extended instruction set is enabled. See          Large areas of data memory require an efficient
       Section 5.5 "Data Memory and the                  addressing scheme to make rapid access to any
       Extended Instruction Set" for more                address possible. Ideally, this means that an entire
       information.                                      address does not need to be provided for each read or
                                                         write operation. For PIC18 devices, this is accom-
The data memory in PIC18 devices is implemented as       plished with a RAM banking scheme. This divides the
static RAM. Figures 5-5, 5-6 and 5-7 show the data       memory space into 16 contiguous banks of 256 bytes.
memory organization for the PIC18F2X1X/4X1X              Depending on the instruction, each location can be
devices.                                                 addressed directly by its full 12-bit address, or an 8-bit
                                                         low-order address and a 4-bit Bank Pointer.
The data memory contains Special Function Registers
(SFRs) and General Purpose Registers (GPRs). The         Most instructions in the PIC18 instruction set make use
SFRs are used for control and status of the controller   of the Bank Pointer, known as the Bank Select Register
and peripheral functions, while GPRs are used for data   (BSR). This SFR holds the 4 Most Significant bits of a
storage and scratchpad operations in the user's          location's address; the instruction itself includes the
application. Any read of an unimplemented location will  8 Least Significant bits. Only the four lower bits of the
read as `0's.                                            BSR are implemented (BSR3:BSR0). The upper four
                                                         bits are unused; they will always read `0' and cannot be
The instruction set and architecture allow operations    written to. The BSR can be loaded directly by using the
across all banks. The entire data memory may be          MOVLB instruction.
accessed by Direct, Indirect or Indexed Addressing
modes. Addressing modes are discussed later in this      The value of the BSR indicates the bank in data
subsection.                                              memory; the 8 bits in the instruction show the location
                                                         in the bank and can be thought of as an offset from the
To ensure that commonly used registers (SFRs and         bank's lower boundary. The relationship between the
select GPRs) can be accessed in a single cycle, PIC18    BSR's value and the bank division in data memory is
devices implement an Access Bank. This is a 256-byte     shown in Figure 5-8.
memory space that provides fast access to SFRs and
the lower portion of GPR Bank 0 without using the        Since up to 16 registers may share the same low-order
BSR. Section 5.3.2 "Access Bank" provides a              address, the user must always be careful to ensure that
detailed description of the Access RAM.                  the proper bank is selected before performing a data
                                                         read or write. For example, writing what should be
                                                         program data to an 8-bit address of F9h, while the BSR
                                                         is 0Fh, will end up resetting the program counter.

                                                         While any bank can be selected, only those banks that
                                                         are actually implemented can be read or written to.
                                                         Writes to unimplemented banks are ignored, while
                                                         reads from unimplemented banks will return `0's. Even
                                                         so, the STATUS register will still be affected as if the
                                                         operation was successful. The data memory map in
                                                         Figure 5-5 indicates which banks are implemented.

                                                         In the core PIC18 instruction set, only the MOVFF
                                                         instruction fully specifies the 12-bit address of the
                                                         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.

2009 Microchip Technology Inc.                         DS39636D-page 61
PIC18F2X1X/4X1X

FIGURE 5-5:         DATA MEMORY MAP FOR PIC18F2410/4410 DEVICES

      BSR<3:0>                        Data Memory Map        When `a' = 0:
            = 0000                                                 The BSR is ignored and the
            = 0001               00h  Access RAM       000h        Access Bank is used.
            = 0010  Bank 0                 GPR         07Fh        The first 128 bytes are
            = 0011                         GPR         080h        general purpose RAM
            = 0100               FFh       GPR         0FFh        (from Bank 0).
            = 0101               00h                   100h        The second 128 bytes are
            = 0110  Bank 1                Unused                   Special Function Registers
            = 0111               FFh     Read 00h      1FFh        (from Bank 15).
            = 1000               00h                   200h
            = 1001  Bank 2                Unused             When `a' = 1:
            = 1010                         SFR         2FFh        The BSR specifies the Bank
            = 1011               FFh                   300h        used by the instruction.
            = 1100               00h
            = 1101  Bank 3                             3FFh      Access Bank
            = 1110                                     400h
            = 1111               FFh                                                       00h
                                 00h                   4FFh      Access RAM Low
                    Bank 4                             500h
                                                                                           7Fh
                                 FFh                   5FFh
                                 00h                   600h      Access RAM High 80h
                    Bank 5
                                                       6FFh      (SFRs)       FFh
                                 FFh                   700h
                                 00h
                    Bank 6                             7FFh
                                                       800h
                                 FFh
                                 00h                   8FFh
                    Bank 7                             900h

                                 FFh                   9FFh
                                 00h                   A00h
                    Bank 8
                                                       AFFh
                                 FFh                   B00h
                                 00h
                    Bank 9                             BFFh
                                                       C00h
                                 FFh
                                 00h                   CFFh
                    Bank 10                            D00h

                                 FFh                   DFFh
                                 00h                   E00h
                    Bank 11
                                                       EFFh
                                 FFh                   F00h
                    Bank 12 00h                        F7Fh
                                                       F80h
                                 FFh                   FFFh
                    Bank 13 00h

                                 FFh
                                 00h
                    Bank 14

                                 FFh
                                 00h
                    Bank 15
                                 FFh

DS39636D-page 62                                                 2009 Microchip Technology Inc.
                                                             PIC18F2X1X/4X1X

FIGURE 5-6:         DATA MEMORY MAP FOR PIC18F2510/4510 DEVICES

      BSR<3:0>                        Data Memory Map        When `a' = 0:
            = 0000                                                 The BSR is ignored and the
            = 0001               00h  Access RAM       000h        Access Bank is used.
            = 0010  Bank 0                 GPR         07Fh        The first 128 bytes are
            = 0011                         GPR         080h        general purpose RAM
            = 0100               FFh       GPR         0FFh        (from Bank 0).
            = 0101               00h       GPR         100h        The second 128 bytes are
            = 0110  Bank 1                 GPR                     Special Function Registers
            = 0111               FFh       GPR         1FFh        (from Bank 15).
            = 1000               00h                   200h
            = 1001  Bank 2                Unused             When `a' = 1:
            = 1010                       Read 00h      2FFh        The BSR specifies the Bank
            = 1011               FFh                   300h        used by the instruction.
            = 1100               00h      Unused
            = 1101  Bank 3                 SFR         3FFh      Access Bank
            = 1110                                     400h
            = 1111               FFh                                                       00h
                                 00h                   4FFh      Access RAM Low
                    Bank 4                             500h
                                                                                           7Fh
                                 FFh                   5FFh
                                 00h                   600h      Access RAM High 80h
                    Bank 5
                                                       6FFh      (SFRs)       FFh
                                 FFh                   700h
                                 00h
                    Bank 6                             7FFh
                                                       800h
                                 FFh
                                 00h                   8FFh
                    Bank 7                             900h

                                 FFh                   9FFh
                                 00h                   A00h
                    Bank 8
                                                       AFFh
                                 FFh                   B00h
                                 00h
                    Bank 9                             BFFh
                                                       C00h
                                 FFh
                                 00h                   CFFh
                    Bank 10                            D00h

                                 FFh                   DFFh
                                 00h                   E00h
                    Bank 11
                                                       EFFh
                                 FFh                   F00h
                    Bank 12 00h                        F7Fh
                                                       F80h
                                 FFh                   FFFh
                    Bank 13 00h

                                 FFh
                                 00h
                    Bank 14

                                 FFh
                                 00h
                    Bank 15
                                 FFh

2009 Microchip Technology Inc.                                 DS39636D-page 63
PIC18F2X1X/4X1X

FIGURE 5-7:       DATA MEMORY MAP FOR PIC18F2515/2610/4515/4610 DEVICES

BSR<3:0>                            Data Memory Map        When a = 0:
     = 0000                                                      The BSR is ignored and the
     = 0001                    00h  Access RAM       000h        Access Bank is used.
     = 0010       Bank 0                 GPR         07Fh        The first 128 bytes are
     = 0011                              GPR         080h        general purpose RAM
     = 0100                    FFh       GPR         0FFh        (from Bank 0).
     = 0101                    00h       GPR         100h        The second 128 bytes are
     = 0110       Bank 1                 GPR                     Special Function Registers
     = 0111                    FFh       GPR         1FFh        (from Bank 15).
     = 1000                    00h       GPR         200h
     = 1001       Bank 2                 GPR               When a = 1:
     = 1010                              GPR         2FFh        The BSR specifies the Bank
     = 1011                    FFh       GPR         300h        used by the instruction.
     = 1100                    00h       GPR
     = 1101       Bank 3                 GPR         3FFh  Access Bank
     = 1110                              GPR         400h
      = 1111                   FFh       GPR                                         00h
                               00h       GPR         4FFh  Access RAM Low
                  Bank 4                 GPR         500h
                                         SFR                                         7Fh
                               FFh                   5FFh
                               00h                   600h  Access RAM High 80h
                  Bank 5
                                                     6FFh  (SFRs)        FFh
                               FFh                   700h
                               00h
                  Bank 6                             7FFh
                                                     800h
                               FFh
                               00h                   8FFh
                  Bank 7                             900h

                               FFh                   9FFh
                               00h                   A00h
                  Bank 8
                                                     AFFh
                               FFh                   B00h
                               00h
                  Bank 9                             BFFh
                                                     C00h
                               FFh
                               00h                   CFFh
                  Bank 10                            D00h

                               FFh                   DFFh
                               00h                   E00h
                  Bank 11
                                                     EFFh
                               FFh                   F00h
                  Bank 12 00h                        F7Fh
                                                     F80h
                               FFh                   FFFh
                  Bank 13 00h

                               FFh
                               00h
                  Bank 14

                               FFh
                               00h
                  Bank 15
                               FFh

DS39636D-page 64                                           2009 Microchip Technology Inc.
                                                                             PIC18F2X1X/4X1X

FIGURE 5-8:  USE OF THE BANK SELECT REGISTER (DIRECT ADDRESSING)

             BSR(1)           Data Memory                                            From Opcode(2)

7                    0  000h                                                 00h  7                  0

0 0 00001 1                                                  Bank 0          FFh  1 1111 111
                                                                             00h
                        100h

                                                             Bank 1

Bank Select(2)          200h                                                 FFh
                                                                             00h

                                                             Bank 2          FFh

                        300h

                                                                             00h

                                                             Bank 3
                                                             through
                                                             Bank 13

                        E00h                                                 FFh

                                                                             00h

                                                             Bank 14         FFh
                                                                             00h
                        F00h

                                                             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
         2:  the registers of the Access Bank.
             The MOVFF instruction embeds the entire 12-bit address in the instruction.

5.3.2 ACCESS BANK                                                     Using this "forced" addressing allows the instruction to
                                                                      operate on a data address in a single cycle, without
While the use of the BSR with an embedded 8-bit                       updating the BSR first. For 8-bit addresses of 80h and
address allows users to address the entire range of                   above, this means that users can evaluate and operate
data memory, it also means that the user must always                  on SFRs more efficiently. The Access RAM below 80h
ensure that the correct bank is selected. Otherwise,                  is a good place for data values that the user might need
data may be read from or written to the wrong location.               to access rapidly, such as immediate computational
This can be disastrous if a GPR is the intended target                results or common program variables. Access RAM
of an operation, but an SFR is written to instead.                    also allows for faster and more code efficient context
Verifying and/or changing the BSR for each read or                    saving and switching of variables.
write to data memory can become very inefficient.
                                                                      The mapping of the Access Bank is slightly different
To streamline access for the most commonly used data                  when the extended instruction set is enabled (XINST
memory locations, the data memory is configured with                  Configuration bit = 1). This is discussed in more detail
an Access Bank, which allows users to access a                        in Section 5.5.3 "Mapping the Access Bank in
mapped block of memory without specifying a BSR.                      Indexed Literal Offset Addressing Mode".
The Access Bank consists of the first 128 bytes of
memory (00h-7Fh) in Bank 0 and the last 128 bytes of                  5.3.3       GENERAL PURPOSE REGISTER
memory (80h-FFh) in Block 15. The lower half is known                             FILE
as the "Access RAM" and is composed of GPRs. This
upper half is also where the device's SFRs are                        PIC18 devices may have banked memory in the GPR
mapped. These two areas are mapped contiguously in                    area. This is data RAM, which is available for use by all
the Access Bank and can be addressed in a linear                      instructions. GPRs start at the bottom of Bank 0
fashion by an 8-bit address (Figure 5-5).                             (address 000h) and grow upwards towards the bottom of
                                                                      the SFR area. GPRs are not initialized by a Power-on
The Access Bank is used by core PIC18 instructions                    Reset and are unchanged on all other Resets.
that include the Access RAM bit (the `a' parameter in
the instruction). When `a' is equal to `1', the instruction                          DS39636D-page 65
uses the BSR and the 8-bit address included in the
opcode for the data memory address. When `a' is `0',
however, the instruction is forced to use the Access
Bank address map; the current value of the BSR is
ignored entirely.

2009 Microchip Technology Inc.
PIC18F2X1X/4X1X

5.3.4 SPECIAL FUNCTION REGISTERS                              The SFRs can be classified into two sets: those asso-
                                                              ciated with the "core" device functionality (ALU, Resets
The Special Function Registers (SFRs) are registers           and interrupts) and those related to the peripheral func-
used by the CPU and peripheral modules for controlling        tions. The reset and interrupt registers are described in
the desired operation of the device. These registers are      their respective chapters, while the ALU's STATUS reg-
implemented as static RAM. SFRs start at the top of           ister is described later in this section. Registers related
data memory (FFFh) and extend downward to occupy              to the operation of a peripheral feature are described in
the top half of Bank 15 (F80h to FFFh). A list of these       the chapter for that peripheral.
registers is given in Table 5-1 and Table 5-2.
                                                              The SFRs are typically distributed among the
                                                              peripherals whose functions they control. Unused SFR
                                                              locations are unimplemented and read as `0's.

TABLE 5-1: SPECIAL FUNCTION REGISTER MAP FOR PIC18F2X1X/4X1X DEVICES

Address           Name  Address  Name                         Address  Name     Address         Name

FFFh TOSU               FDFh INDF2(1)                         FBFh CCPR1H             F9Fh       IPR1
                        FDEh POSTINC2(1)                                              F9Eh
FFEh TOSH               FDDh POSTDEC2(1)                      FBEh CCPR1L             F9Dh       PIR1
                        FDCh PREINC2(1)                                               F9Ch
FFDh              TOSL  FDBh PLUSW2(1)                        FBDh CCP1CON            F9Bh       PIE1
                                                                                      F9Ah       --(2)
FFCh STKPTR                                                   FBCh CCPR2H              F99h
                                                                                       F98h  OSCTUNE
FFBh PCLATU                                                   FBBh CCPR2L              F97h      --(2)
                                                                                       F96h      --(2)
FFAh PCLATH             FDAh FSR2H                            FBAh CCP2CON             F95h      --(2)
                                                                                       F94h      --(2)
FF9h              PCL   FD9h FSR2L                            FB9h     --(2)           F93h
                                                                                       F92h   TRISE(3)
FF8h TBLPTRU            FD8h STATUS                           FB8h BAUDCON             F91h   TRISD(3)
                                                              FB7h PWM1CON(3)          F90h
FF7h TBLPTRH            FD7h TMR0H                            FB6h ECCP1AS(3)         F8Fh     TRISC
                                                                                      F8Eh
FF6h TBLPTRL            FD6h TMR0L                                                    F8Dh     TRISB
                                                                                      F8Ch
FF5h TABLAT             FD5h     T0CON                        FB5h CVRCON             F8Bh     TRISA
                        FD4h       --(2)                                              F8Ah       --(2)
FF4h PRODH                                                    FB4h CMCON               F89h      --(2)
                                                                                       F88h      --(2)
FF3h PRODL              FD3h OSCCON                           FB3h TMR3H               F87h      --(2)
                                                                                       F86h    LATE(3)
FF2h INTCON             FD2h HLVDCON                          FB2h TMR3L               F85h    LATD(3)
                                                                                       F84h
FF1h INTCON2            FD1h WDTCON                           FB1h T3CON               F83h     LATC
                                                                                       F82h
FF0h INTCON3            FD0h RCON                             FB0h SPBRGH              F81h     LATB
FEFh INDF0(1)                                                                          F80h
FEEh POSTINC0(1)        FCFh TMR1H                            FAFh SPBRG                        LATA
FEDh POSTDEC0(1)                                                                                 --(2)
FECh PREINC0(1)         FCEh TMR1L                            FAEh RCREG                         --(2)
FEBh PLUSW0(1)                                                                                   --(2)
                        FCDh T1CON                            FADh TXREG                         --(2)
                                                                                             PORTE(3)
                        FCCh TMR2                             FACh TXSTA                     PORTD(3)

                        FCBh     PR2                          FABh     RCSTA                   PORTC
                                                              FAAh       --(2)
FEAh FSR0H              FCAh T2CON                            FA9h       --(2)                 PORTB
                                                              FA8h       --(2)
FE9h FSR0L              FC9h SSPBUF                           FA7h       --(2)                 PORTA
                                                              FA6h       --(2)
FE8h WREG               FC8h SSPADD                           FA5h       --(2)
FE7h INDF1(1)                                                 FA4h       --(2)
FE6h POSTINC1(1)        FC7h SSPSTAT                          FA3h       --(2)
FE5h POSTDEC1(1)
FE4h PREINC1(1)         FC6h SSPCON1
FE3h PLUSW1(1)
                        FC5h SSPCON2

                        FC4h ADRESH

                        FC3h ADRESL

FE2h FSR1H              FC2h ADCON0                           FA2h     IPR2

FE1h FSR1L              FC1h ADCON1                           FA1h     PIR2

FE0h              BSR   FC0h ADCON2                           FA0h     PIE2

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

DS39636D-page 66                                                                2009 Microchip Technology Inc.
                                                                                    PIC18F2X1X/4X1X

TABLE 5-2: REGISTER FILE SUMMARY (PIC18F2X1X/4X1X)

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

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

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

TOSL          Top-of-Stack Low Byte (TOS<7:0>)                                                                          0000 0000 51, 56
STKPTR
              STKFUL(6) STKUNF(6)            --     SP4        SP3                  SP2   SP1                     SP0 00-0 0000 51, 57

PCLATU        --                --           --     Holding Register for PC<20:16>                                      ---0 0000 51, 56

PCLATH        Holding Register for PC<15:8>                                                                             0000 0000 51, 56

PCL           PC Low Byte (PC<7:0>)                                                                                     0000 0000 51, 56

TBLPTRU       --                --           bit 21 Program Memory Table Pointer Upper Byte (TBLPTR<20:16>)             --00 0000 51, 79

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

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

TABLAT        Program Memory Table Latch                                                                                0000 0000 51, 79

PRODH         Product Register High Byte                                                                                xxxx xxxx 51, 81

PRODL         Product Register Low Byte                                                                                 xxxx xxxx 51, 81

INTCON        GIE/GIEH PEIE/GIEL TMR0IE             INT0IE     RBIE    TMR0IF             INT0IF  RBIF 0000 000x 51, 85

INTCON2       RBPU    INTEDG0 INTEDG1 INTEDG2                  --      TMR0IP             --      RBIP 1111 -1-1 51, 86

INTCON3       INT2IP  INT1IP                 --     INT2IE     INT1IE               --    INT2IF  INT1IF 11-0 0-00 51, 87

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

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

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

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

PLUSW0        Uses contents of FSR0 to address data memory value of FSR0 pre-incremented (not a physical register)   N/A  51, 72
              value of FSR0 offset by W

FSR0H         --                --           --     --         Indirect Data Memory Address Pointer 0 High Byte ---- 0000 51, 72

FSR0L         Indirect Data Memory Address Pointer 0 Low Byte                                                           xxxx xxxx 51, 72

WREG          Working Register                                                                                          xxxx xxxx 51

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

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

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

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

PLUSW1        Uses contents of FSR1 to address data memory value of FSR1 pre-incremented (not a physical register)   N/A  51, 72
              value of FSR1 offset by W

FSR1H         --                --           --     --         Indirect Data Memory Address Pointer 1 High Byte ---- 0000 52, 72

FSR1L         Indirect Data Memory Address Pointer 1 Low Byte                                                           xxxx xxxx 52, 72

BSR           --                --           --     --         Bank Select Register                                     ---- 0000 52, 61

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

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

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

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

PLUSW2        Uses contents of FSR2 to address data memory value of FSR2 pre-incremented (not a physical register)   N/A  52, 72
              value of FSR2 offset by W

FSR2H         --                --           --     --         Indirect Data Memory Address Pointer 2 High Byte ---- 0000 52, 72

FSR2L         Indirect Data Memory Address Pointer 2 Low Byte                                                           xxxx xxxx 52, 72

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

Legend:       x = unknown, u = unchanged, -- = unimplemented, q = value depends on condition
Note 1:
              The SBOREN bit is only available when the BOREN1:BOREN0 Configuration bits = 01; otherwise, it is disabled and reads as `0'. See
          2:  Section 4.4 "Brown-out Reset (BOR)".
          3:  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;
          4:  individual unimplemented bits should be interpreted as `-'.
          5:  The PLLEN bit is only available in specific oscillator configuration; otherwise it is disabled and reads as `0'. See Section 2.6.4 "PLL in
          6:  INTOSC Modes".
              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.

              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'.

              Bit 7 and bit 6 are cleared by user software or by a POR.

2009 Microchip Technology Inc.                                                                                        DS39636D-page 67
PIC18F2X1X/4X1X

TABLE 5-2: REGISTER FILE SUMMARY (PIC18F2X1X/4X1X) (CONTINUED)

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

TMR0H         Timer0 Register High Byte                                                                             0000 0000 52, 117

TMR0L         Timer0 Register Low Byte                                                                              xxxx xxxx 52, 117

T0CON         TMR0ON T08BIT              T0CS      T0SE      PSA      T0PS2    T0PS1                     T0PS0 1111 1111 52, 115

OSCCON        IDLEN            IRCF2     IRCF1     IRCF0     OSTS     IOFS     SCS1                      SCS0 0100 q000 32, 52

HLVDCON VDIRMAG                --        IRVST     HLVDEN HLVDL3      HLVDL2   HLVDL1                    HLVDL0 0-00 0101 52, 233

WDTCON        --               --        --        --        --       --       --                        SWDTEN --- ---0 52, 249

RCON          IPEN     SBOREN(1)         --        RI        TO       PD       POR                       BOR 0q-1 11q0 44, 50, 94

TMR1H         Timer1 Register High Byte                                                                             xxxx xxxx 52, 123

TMR1L         Timer1 Register Low Bytes                                                                             xxxx xxxx 52, 123

T1CON         RD16             T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 0000 0000 52, 119

TMR2          Timer2 Register                                                                                       0000 0000 52, 126

PR2           Timer2 Period Register                                                                                1111 1111 52, 126

T2CON         --       T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 52, 125

SSPBUF        SSP Receive Buffer/Transmit Register                                                                  xxxx xxxx 52, 161,
SSPADD        SSP Address Register in I2C Slave mode. SSP Baud Rate Reload Register in I2C Master mode.                                   162

                                                                                                                    0000 0000 52, 162

SSPSTAT       SMP              CKE       D/A       P         S        R/W      UA                        BF         0000 0000 52, 154,

                                                                                                                               163

SSPCON1       WCOL             SSPOV     SSPEN     CKP       SSPM3    SSPM2    SSPM1                     SSPM0 0000 0000 52, 155,
                                                                                                                                               164

SSPCON2       GCEN ACKSTAT ACKDT                   ACKEN     RCEN     PEN      RSEN                      SEN 0000 0000 52, 165

ADRESH A/D Result Register High Byte                                                                                xxxx xxxx 53, 222

ADRESL A/D Result Register Low Byte                                                                                 xxxx xxxx 53, 222

ADCON0        --               --        CHS3      CHS2      CHS1     CHS0 GO/DONE ADON --00 0000 53, 213

ADCON1        --               --        VCFG1     VCFG0     PCFG3    PCFG2    PCFG1                     PCFG0 --00 0qqq 53, 214

ADCON2        ADFM             --        ACQT2     ACQT1     ACQT0    ADCS2    ADCS1                     ADCS0 0-00 0000 53, 215

CCPR1H Capture/Compare/PWM Register 1 High Byte                                                                     xxxx xxxx 53, 132

CCPR1L Capture/Compare/PWM Register 1 Low Byte                                                                      xxxx xxxx 53, 132

CCP1CON       P1M1(2)          P1M0(2)   DC1B1     DC1B0     CCP1M3   CCP1M2   CCP1M1                    CCP1M0     0000 0000 53, 131,
                                                                                                                                          139

CCPR2H Capture/Compare/PWM Register 2 High Byte                                                                     xxxx xxxx 53, 132

CCPR2L Capture/Compare/PWM Register 2 Low Byte                                                                      xxxx xxxx 53, 132

CCP2CON       --               --        DC2B1     DC2B0     CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 53, 131

BAUDCON       ABDOVF     RCIDL                --     SCKP     BRG16       --      WUE                      ABDEN    01-0 0-00  53, 196
PWM1CON        PRSEN    PDC6(2)           PDC5(2)   PDC4(2)  PDC3(2)  PDC2(2)   PDC1(2)                   PDC0(2)   0000 0000  53, 148
ECCP1AS       ECCPASE  ECCPAS2           ECCPAS1   ECCPAS0   PSSAC1   PSSAC0   PSSBD1(2)                 PSSBD0(2)  0000 0000  53, 149

CVRCON        CVREN            CVROE     CVRR      CVRSS     CVR3     CVR2     CVR1                      CVR0 0000 0000 53, 229

CMCON         C2OUT            C1OUT     C2INV     C1INV     CIS      CM2      CM1                       CM0 0000 0111 53, 223

TMR3H         Timer3 Register High Byte                                                                             xxxx xxxx 53, 129

TMR3L         Timer3 Register Low Byte                                                                              xxxx xxxx 53, 129

T3CON         RD16             T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON 0000 0000 53, 127

Legend:       x = unknown, u = unchanged, -- = unimplemented, q = value depends on condition
Note 1:
              The SBOREN bit is only available when the BOREN1:BOREN0 Configuration bits = 01; otherwise, it is disabled and reads as `0'. See
          2:  Section 4.4 "Brown-out Reset (BOR)".
          3:  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;
          4:  individual unimplemented bits should be interpreted as `-'.
          5:  The PLLEN bit is only available in specific oscillator configuration; otherwise it is disabled and reads as `0'. See Section 2.6.4 "PLL in
          6:  INTOSC Modes".
              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.

              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'.

              Bit 7 and bit 6 are cleared by user software or by a POR.

DS39636D-page 68                                                                                          2009 Microchip Technology Inc.
                                                                              PIC18F2X1X/4X1X

TABLE 5-2: REGISTER FILE SUMMARY (PIC18F2X1X/4X1X) (CONTINUED)

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

SPBRGH        EUSART Baud Rate Generator Register High Byte                                                         0000 0000 53, 197
SPBRG
RCREG         EUSART Baud Rate Generator Register Low Byte                                                          0000 0000 53, 197
TXREG
TXSTA         EUSART Receive Register                                                                               0000 0000 53, 204
RCSTA
IPR2          EUSART Transmit Register                                                                              0000 0000 53, 202
PIR2
PIE2          CSRC      TX9             TXEN         SYNC    SENDB            BRGH    TRMT                   TX9D 0000 0010 53, 194
IPR1
PIR1          SPEN      RX9             SREN         CREN    ADDEN            FERR    OERR                   RX9D 0000 000x 53, 195
PIE1
OSCTUNE       OSCFIP    CMIP            --           --      BCLIP            HLVDIP  TMR3IP            CCP2IP 11-- 1111 54, 93
TRISE(2)
TRISD(2)      OSCFIF    CMIF            --           --      BCLIF            HLVDIF  TMR3IF            CCP2IF 00-- 0000 54, 89
TRISC
TRISB         OSCFIE      CMIE            --           --    BCLIE            HLVDIE  TMR3IE            CCP2IE      00-- 0000  54, 91
TRISA         PSPIP(2)    ADIP          RCIP         TXIP    SSPIP            CCP1IP  TMR2IP            TMR1IP      1111 1111  54, 92
LATE(2)       PSPIF(2)    ADIF          RCIF         TXIF    SSPIF            CCP1IF  TMR2IF            TMR1IF      0000 0000  54, 88
              PSPIE(2)    ADIE          RCIE         TXIE    SSPIE            CCP1IE  TMR2IE            TMR1IE      0000 0000  54, 90
LATD(2)                 PLLEN(3)                     TUN4    TUN3                                                   0q-0 0000  29, 54
LATC          INTSRC                      --                                   TUN2    TUN1              TUN0
LATB
LATA          IBF       OBF             IBOV PSPMODE                    --    TRISE2  TRISE1            TRISE0 0000 -111 54, 110
PORTE
PORTD(2)      PORTD Data Direction Control Register                                                                 1111 1111 54, 106
PORTC
PORTB         PORTC Data Direction Control Register                                                                 1111 1111 54, 103
PORTA
Legend:       PORTB Data Direction Control Register                                                                 1111 1111 54, 100
Note 1:        TRISA7(5) TRISA6(5) Data Direction Control Register for PORTA                                        1111 1111 54, 97

          2:  --        --              --           --                 --   PORTE Data Latch Register              ---- -xxx 54, 109

          3:                                                                 (Read and Write to Data Latch)

          4:  PORTD Data Latch Register (Read and Write to Data Latch)                                              xxxx xxxx 54, 106

          5:  PORTC Data Latch Register (Read and Write to Data Latch)                                              xxxx xxxx 54, 103

          6:  PORTB Data Latch Register (Read and Write to Data Latch)                                              xxxx xxxx  54, 100
                                                                                                                    xxxx xxxx  54, 97
              LATA7(6) LATA6(6) PORTA Data Latch Register (Read and Write to Data Latch)                            ---- xxxx  54, 109

              --        --              --           --      RE3(4)           RE2(2)  RE1(2)            RE0(2)

              RD7       RD6             RD5          RD4                RD3   RD2         RD1                RD0 xxxx xxxx 54, 106

              RC7       RC6             RC5          RC4                RC3   RC2         RC1                RC0 xxxx xxxx 54, 103

               RB7       RB6            RB5          RB4                RB3   RB2         RB1                RB0 xxxx xxxx 54, 100
              RA7(5)    RA6(5)          RA5          RA4                RA3   RA2         RA1                RA0 xx0x 0000 54, 97

              x = unknown, u = unchanged, -- = unimplemented, q = value depends on condition

              The SBOREN bit is only available when the BOREN1:BOREN0 Configuration bits = 01; otherwise, it is disabled and reads as `0'. See
              Section 4.4 "Brown-out Reset (BOR)".
              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 `-'.
              The PLLEN bit is only available in specific oscillator configuration; otherwise it is disabled and reads as `0'. See Section 2.6.4 "PLL in
              INTOSC Modes".
              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.

              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'.

              Bit 7 and bit 6 are cleared by user software or by a POR.

2009 Microchip Technology Inc.                                                                                    DS39636D-page 69
PIC18F2X1X/4X1X

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 instruction set summaries in Table 23-2 and
tion that affects the Z, DC, C, OV or N bits, the results   Table 23-3.
of the instruction are not written; instead, the status is
updated according to the instruction performed. There-      Note:  The C and DC bits operate as the borrow
fore, the result of an instruction with the STATUS                 and digit borrow bits, respectively, in
register as its destination may be different than                  subtraction.
intended. As an example, CLRF STATUS will set the Z
bit and leave the remaining Status bits unchanged
(`000u u1uu').

REGISTER 5-2: STATUS REGISTER

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

                  bit 7

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

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

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

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

                  Z: Zero bit

                  1 = The result of an arithmetic or logic operation is zero
                  0 = The result of an arithmetic or logic operation is not zero

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

                  1 = A carry-out from the 4th low-order bit of the result occurred
                  0 = No carry-out from the 4th low-order bit of the result

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

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

                  1 = A carry-out from the Most Significant bit of the result occurred
                  0 = No carry-out from the Most Significant bit of the result occurred

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

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

DS39636D-page 70                                                                      2009 Microchip Technology Inc.
                                                                 PIC18F2X1X/4X1X

5.4 Data Addressing Modes                                  The Access RAM bit `a' determines how the address is
                                                           interpreted. When `a' is `1', the contents of the BSR
Note:  The execution of some instructions in the           (Section 5.3.1 "Bank Select Register (BSR)") are
       core PIC18 instruction set are changed              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 as being a register in the Access Bank.
       and the Extended Instruction Set" for               Addressing that uses the Access RAM is sometimes
       more information.                                   also known as Direct Forced Addressing mode.

The data memory space can be addressed in several          A few instructions, such as MOVFF, include the entire
ways. For most instructions, the addressing mode is        12-bit address (either source or destination) in their
fixed. Other instructions may use up to three modes,       opcodes. In these cases, the BSR is ignored entirely.
depending on which operands are used and whether or
not the extended instruction set is enabled.               The destination of the operation's results is determined
                                                           by the destination bit `d'. When `d' is `1', the results are
The addressing modes are:                                  stored back in the source register, overwriting its origi-
                                                           nal contents. When `d' is `0', the results are stored in
Inherent                                                 the W register. Instructions without the `d' argument
Literal                                                  have a destination that is implicit in the instruction; their
Direct                                                   destination is either the target register being operated
Indirect                                                 on or the W register.

An additional addressing mode, Indexed Literal Offset,     5.4.3 INDIRECT ADDRESSING
is available when the extended instruction set is
enabled (XINST Configuration bit = 1). Its operation is    Indirect addressing allows the user to access a location
discussed in greater detail in Section 5.5.1 "Indexed      in data memory without giving a fixed address in the
Addressing with Literal Offset".                           instruction. This is done by using File Select Registers
                                                           (FSRs) as pointers to the locations to be read or written
5.4.1  INHERENT AND LITERAL                                to. Since the FSRs are themselves located in RAM as
       ADDRESSING                                          Special File Registers, they can also be directly manip-
                                                           ulated under program control. This makes FSRs very
Many PIC18 control instructions do not need any            useful in implementing data structures, such as tables
argument at all; they either perform an operation that     and arrays in data memory.
globally affects the device or they operate implicitly on
one register. This addressing mode is known as             The registers for indirect addressing are also
Inherent Addressing. Examples include SLEEP, RESET         implemented with Indirect File Operands (INDFs) that
and DAW.                                                   permit automatic manipulation of the pointer value with
                                                           auto-incrementing, auto-decrementing or offsetting
Other instructions work in a similar way but require an    with another value. This allows for efficient code, using
additional explicit argument in the opcode. This is        loops, such as the example of clearing an entire RAM
known as Literal Addressing mode because they              bank in Example 5-5.
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 and GOTO, which include a 20-bit                                  INDIRECT ADDRESSING
program memory address.

                                                                 LFSR          FSR0, 100h ;
                                                                 CLRF
5.4.2 DIRECT ADDRESSING                                    NEXT                POSTINC0 ; Clear INDF

Direct addressing specifies all or part of the source                                ; register then
and/or destination address of the operation within the
opcode itself. The options are specified by the                                      ; inc pointer
arguments accompanying the instruction.
                                                                        BTFSS  FSR0H, 1 ; All done with
In the core PIC18 instruction set, bit-oriented and byte-
oriented instructions use some version of direct                        BRA          ; Bank1?
addressing by default. All of these instructions include   CONTINUE
some 8-bit literal address as their Least Significant                          NEXT  ; NO, clear next
Byte. This address specifies either a register address in
one of the banks of data RAM (Section 5.3.3 "General                                 ; YES, continue
Purpose Register File") or a location in the Access
Bank (Section 5.3.2 "Access Bank") as the data
source for the instruction.

2009 Microchip Technology Inc.                                                             DS39636D-page 71
PIC18F2X1X/4X1X

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          In addition to the INDF operand, each FSR register pair
registers: FSR0, FSR1 and FSR2. Each represents a             also has four additional indirect operands. Like INDF,
pair of 8-bit registers, FSRnH and FSRnL. The four            these are "virtual" registers that cannot be indirectly
upper bits of the FSRnH register are not used so each         read or written to. Accessing these registers actually
FSR pair holds a 12-bit value. This represents a value        accesses the associated FSR register pair, but also
that can address the entire range of the data memory          performs a specific action on its stored value. They are:
in a linear fashion. The FSR register pairs, then, serve
as pointers to data memory locations.                         POSTDEC: accesses the FSR value, then
                                                                 automatically decrements it by 1 afterwards
Indirect addressing is accomplished with a set of
Indirect File Operands, INDF0 through INDF2. These             POSTINC: accesses the FSR value, then
can be thought of as "virtual" registers: they are               automatically increments it by 1 afterwards
mapped in the SFR space but are not physically imple-
mented. Reading or writing to a particular INDF register       PREINC: increments the FSR value by 1, then
actually accesses its corresponding FSR register pair.           uses it in the operation
A read from INDF1, for example, reads the data at the
address indicated by FSR1H:FSR1L. Instructions that            PLUSW: adds the signed value of the W register
use the INDF registers as operands actually use the              (range of -127 to 128) to that of the FSR and uses
contents of their corresponding FSR as a pointer to the          the new value in the operation.
instruction's target. The INDF operand is just a
convenient way of using the pointer.                          In this context, accessing an INDF register uses the
                                                              value in the FSR registers without changing them. Sim-
Because indirect addressing uses a full 12-bit address,       ilarly, accessing a PLUSW register gives the FSR value
data RAM banking is not necessary. Thus, the current          offset by that in the W register; neither value is actually
contents of the BSR and the Access RAM bit have no            changed in the operation. Accessing the other virtual
effect on determining the target address.                     registers changes the value of the FSR registers.

                                                              Operations on the FSRs with POSTDEC, POSTINC
                                                              and PREINC affect the entire register pair; that is, roll-
                                                              overs of the FSRnL register from FFh to 00h carry over
                                                              to the FSRnH register. On the other hand, results of
                                                              these operations do not change the value of any flags
                                                              in the STATUS register (e.g., Z, N, OV, etc.).

FIGURE 5-9:       INDIRECT ADDRESSING

Using an instruction with one of the       ADDWF, INDF1, 1                000h  Bank 0
indirect addressing registers as the                                      100h  Bank 1
operand....                                                               200h
                                                                          300h  Bank 2
                                           FSR1H:FSR1L
...uses the 12-bit address stored in                                            Bank 3
the FSR pair associated with that       7                 07           0        through
register....                                                                    Bank 13

                                        xxxx1110 11001100

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

DS39636D-page 72                                                          2009 Microchip Technology Inc.
                                                                   PIC18F2X1X/4X1X

The PLUSW register can be used to implement a form          5.5.1  INDEXED ADDRESSING WITH
of indexed addressing in the data memory space. By                 LITERAL OFFSET
manipulating the value in the W register, users can
reach addresses that are fixed offsets from pointer         Enabling the PIC18 extended instruction set changes
addresses. In some applications, this can be used to        the behavior of indirect addressing using the FSR2
implement some powerful program control structure,          register pair within access RAM. Under the proper
such as software stacks, inside of data memory.             conditions, instructions that use the Access Bank that
                                                            is, most bit-oriented and byte-oriented instructions
5.4.3.3 Operations by FSRs on FSRs                          can invoke a form of indexed addressing using an
                                                            offset specified in the instruction. This special address-
Indirect addressing operations that target other FSRs       ing mode is known as Indexed Addressing with Literal
or virtual registers represent special cases. For exam-     Offset, or Indexed Literal Offset mode.
ple, using an FSR to point to one of the virtual registers
will not result in successful operations. As a specific     When using the extended instruction set, this
case, assume that FSR0H:FSR0L contains FE7h, the            addressing mode requires the following:
address of INDF1. Attempts to read the value of the
INDF1 using INDF0 as an operand will return 00h.             The use of the Access Bank is forced (`a' = 0);
Attempts to write to INDF1 using INDF0 as the operand          and
will result in a NOP.
                                                             The file address argument is less than or equal to
On the other hand, using the virtual registers to write to     5Fh.
an FSR pair may not occur as planned. In these cases,
the value will be written to the FSR pair but without any   Under these conditions, the file address of the instruc-
incrementing or decrementing. Thus, writing to INDF2        tion is not interpreted as the lower byte of an address
or POSTDEC2 will write the same value to the                (used with the BSR in direct addressing), or as an 8-bit
FSR2H:FSR2L.                                                address in the Access Bank. Instead, the value is
                                                            interpreted as an offset value to an Address Pointer,
Since the FSRs are physical registers mapped in the         specified by FSR2. The offset and the contents of
SFR space, they can be manipulated through all direct       FSR2 are added to obtain the target address of the
operations. Users should proceed cautiously when            operation.
working on these registers, particularly if their code
uses indirect addressing.                                   5.5.2  INSTRUCTIONS AFFECTED BY
                                                                   INDEXED LITERAL OFFSET MODE
Similarly, operations by indirect addressing are gener-
ally permitted on all other SFRs. Users should exercise     Any of the core PIC18 instructions that can use direct
the appropriate caution that they do not inadvertently      addressing are potentially affected by the Indexed Literal
change settings that might affect the operation of the      Offset Addressing mode. This includes all byte-oriented
device.                                                     and bit-oriented instructions, or almost one-half of the
                                                            standard PIC18 instruction set. Instructions that only use
5.5 Data Memory and the Extended                            Inherent or Literal Addressing modes are unaffected.
         Instruction Set
                                                            Additionally, byte-oriented and bit-oriented instructions
Enabling the PIC18 extended instruction set (XINST          are not affected if they do not use the Access Bank
Configuration bit = 1) significantly changes certain        (Access RAM bit is `1'), or include a file address of 60h
aspects of data memory and its addressing. Specifi-         or above. Instructions meeting these criteria will
cally, the use of the Access Bank for many of the core      continue to execute as before. A comparison of the
PIC18 instructions is different; this is due to the         different possible addressing modes when the
introduction of a new addressing mode for the data          extended instruction set is enabled is shown in
memory space.                                               Figure 5-10.

What does not change is just as important. The size of      Those who desire to use bit-oriented or byte-oriented
the data memory space is unchanged, as well as its          instructions in the Indexed Literal Offset mode should
linear addressing. The SFR map remains the same.            note the changes to assembler syntax for this mode.
Core PIC18 instructions can still operate in both Direct    This is described in more detail in Section 23.2.1
and Indirect Addressing mode; inherent and literal          "Extended Instruction Syntax".
instructions do not change at all. Indirect addressing
with FSR0 and FSR1 also remain unchanged.

2009 Microchip Technology Inc.                                   DS39636D-page 73
PIC18F2X1X/4X1X

FIGURE 5-10:      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)

When `a' = 0 and f  60h:            000h  Bank 0
The instruction executes in         060h
Direct Forced mode. `f' is inter-   080h  Bank 1
preted as a location in the               through
Access RAM between 060h             100h  Bank 14
and 0FFh. This is the same as
locations 060h to 07Fh              F00h      Bank 15                             00h
(Bank 0) and F80h to FFFh           F80h        SFRs                              60h
(Bank 15) of data memory.           FFFh                                          80h
                                          Data Memory
Locations below 60h are not                                                                Valid range
available in this addressing        000h  Bank 0                                                for `f'
mode.                               080h
                                    100h  Bank 1                                  FFh
When `a' = 0 and f  5Fh:                  through           Access RAM
The instruction executes in               Bank 14
Indexed Literal Offset mode. `f'                          001001da ffffffff
is interpreted as an offset to the  F00h      Bank 15        FSR2H FSR2L
address value in FSR2. The          F80h        SFRs
two are added together to           FFFh                   BSR
obtain the address of the target          Data Memory  00000000
register for the instruction. The
address can be anywhere in          000h  Bank 0       001001da ffffffff
the data memory space.              080h
                                    100h  Bank 1
Note that in this mode, the               through
correct syntax is now:                    Bank 14
ADDWF [k], d
where `k' is the same as `f'.       F00h      Bank 15
                                    F80h        SFRs
When `a' = 1 (all values of f):     FFFh
The instruction executes in               Data Memory
Direct mode (also known as
Direct Long mode). `f' is inter-
preted as a location in one of
the 16 banks of the data
memory space. The bank is
designated by the Bank Select
Register (BSR). The address
can be in any implemented
bank in the data memory
space.

DS39636D-page 74                                        2009 Microchip Technology Inc.
                                                           PIC18F2X1X/4X1X

5.5.3  MAPPING THE ACCESS BANK IN                          Remapping of the Access Bank applies only to opera-
       INDEXED LITERAL OFFSET                              tions using the Indexed Literal Offset Addressing
       ADDRESSING MODE                                     mode. Operations that use the BSR (Access RAM bit is
                                                           `1') will continue to use direct addressing as before.
The use of Indexed Literal Offset Addressing mode
effectively changes how the first 96 locations of access   5.6 PIC18 Instruction Execution and
RAM (00h to 5Fh) are mapped. Rather than containing                  the Extended Instruction Set
just the contents of the bottom half of Bank 0, this mode
maps the contents from Bank 0 and a user defined           Enabling the extended instruction set adds eight
"window" that can be located anywhere in the data          additional commands to the existing PIC18 instruction
memory space. The value of FSR2 establishes the            set. These instructions are executed as described in
lower boundary of the addresses mapped into the            Section 23.2 "Extended Instruction Set".
window, while the upper boundary is defined by FSR2
plus 95 (5Fh). Addresses in the Access RAM above
5Fh are mapped as previously described (see
Section 5.3.2 "Access Bank"). An example of Access
Bank remapping in this addressing mode is shown in
Figure 5-11.

FIGURE 5-11:  REMAPPING THE ACCESS BANK WITH INDEXED LITERAL OFFSET
              ADDRESSING

Example Situation:                000h       Bank 0                                    00h
                                  05Fh                     Bank 1 "Window"
  ADDWF f, d, a                   07Fh       Bank 0
  FSR2H:FSR2L = 120h              100h       Bank 1                  5Fh
                                  120h      Window
Locations in the region          17Fh       Bank 1        Bank 0    7Fh
from the FSR2 Pointer            200h
(120h) to the pointer plus                  Bank 2                  80h
05Fh (17Fh) are mapped           F00h       through
to the bottom of the             F80h      Bank 14        SFRs
Access RAM (000h-05Fh).          FFFh
                                            Bank 15                                  FFh
Locations in Bank 0 from                     SFRs
060h to 07Fh are mapped,                                  Access Bank
as usual, to the middle of             Data Memory
the Access Bank.

Special File Registers at
F80h through FFFh are
mapped to 80h through
FFh, as usual.

Bank 0 addresses below
5Fh can still be addressed
by using the BSR.

2009 Microchip Technology Inc.                           DS39636D-page 75
PIC18F2X1X/4X1X

NOTES:

DS39636D-page 76   2009 Microchip Technology Inc.
                                                                    PIC18F2X1X/4X1X

6.0 FLASH PROGRAM MEMORY                                Table reads work with byte entities. A table block
                                                        containing data, rather than program instructions, is not
In PIC18F2X1X/4X1X devices, the program memory is       required to be word-aligned. Therefore, a table block can
implemented as read-only Flash memory. It is readable   start and end at any byte address.
over the entire VDD range during normal operation. A
read from program memory is executed on one byte at     Because the program memory cannot be written to or
a time.                                                 erased under normal operation, the TBLWT operation is
                                                        not discussed here.
6.1 Table Reads
                                                            Note 1: Although it cannot be used in
For PIC18 devices, there are two operations that allow                  PIC18F2X1X/4X1X devices in normal
the processor to move bytes between the program                         operation, the TBLWT instruction is still
memory space and the data RAM: table read (TBLRD)                       implemented in the instruction set.
and table write (TBLWT).                                                Executing the instruction takes two
                                                                        instruction cycles, but effectively results
Table read operations retrieve data from program                        in a NOP.
memory and place it into the data RAM space.
Figure 6-1 shows the operation of a table read with                2: The TBLWT instruction is available only in
program memory and data RAM.                                            programming modes and is used during
                                                                        In-Circuit Serial ProgrammingTM (ICSPTM).
The program memory space is 16 bits wide, while the
data RAM space is 8 bits wide. Table reads and table
writes move data between these two memory spaces
through an 8-bit register, TABLAT.

FIGURE 6-1:  TABLE READ OPERATION

                                                               Instruction: TBLRD*

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

                                  Program Memory
                                  (TBLPTR)

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

2009 Microchip Technology Inc.                                                    DS39636D-page 77
PIC18F2X1X/4X1X

6.2 Control Registers                                    TABLE 6-1:  TABLE POINTER
                                                                     OPERATIONS WITH TBLRD
Two control registers are used in conjunction with the               INSTRUCTIONS
TBLRD instruction: the TABLAT register and the
TBLPTR register set.                                     Example     Operation on Table Pointer

6.2.1 TABLAT TABLE LATCH REGISTER                      TBLRD*      TBLPTR is not modified
                                                         TBLRD*+     TBLPTR is incremented after the read
The Table Latch (TABLAT) is an 8-bit register mapped     TBLRD*-     TBLPTR is decremented after the read
into the SFR space. The Table Latch register is used to  TBLRD+*     TBLPTR is incremented before the read
hold 8-bit data during data transfers between program
memory and data RAM.

6.2.2  TBLPTR TABLE POINTER                            6.3 Reading the Flash Program
       REGISTER                                                   Memory

The Table Pointer register (TBLPTR) addresses a byte     The TBLRD instruction is used to retrieve data from
within the program memory. It is comprised of three      program memory and place it into data RAM. Table
SFR registers: Table Pointer Upper Byte, Table Pointer   reads from program memory are performed one byte at
High Byte and Table Pointer Low Byte                     a time.
(TBLPTRU:TBLPTRH:TBLPTRL). Only the lower six
bits of TBLPTRU are used with TBLPTRH and                TBLPTR points to a byte address in program space.
TBLPTRL, to form a 22-bit wide pointer.                  Executing TBLRD places the byte pointed to into
                                                         TABLAT. In addition, TBLPTR can be modified
The contents of TBLPTR indicate a location in program    automatically for the next table read operation.
memory space. The low-order 21 bits allow the device
to address the full 2 Mbytes of program memory space.    The internal program memory is typically organized by
The 22nd bit allows access to the configuration space,   words. The Least Significant bit of the address selects
including the Device ID, user ID locations and the       between the high and low bytes of the word. Figure 6-2
Configuration bits.                                      shows the interface between the internal program
                                                         memory and the TABLAT.
The TBLPTR register set is updated when executing a
TBLRD in one of four ways, based on the instruction's    A typical method for reading data from program memory
arguments. These are detailed in Table 6-1. These        is shown in Example 6-1.
operations on the TBLPTR only affect the low-order
21 bits.

When a TBLRD is executed, all 22 bits of the TBLPTR
determine which byte is read from program memory
into TABLAT.

FIGURE 6-2:       READS FROM FLASH PROGRAM MEMORY

                                            Program Memory

                             (Even Byte Address) (Odd Byte Address)

                                                         TBLPTR = xxxxx1  TBLPTR = xxxxx0

       Instruction Register  FETCH                       TBLRD                TABLAT
                (IR)                                                      Read Register

DS39636D-page 78                                                      2009 Microchip Technology Inc.
                                                              PIC18F2X1X/4X1X

EXAMPLE 6-1: READING A FLASH PROGRAM MEMORY WORD

READ_WORD  MOVLW    CODE_ADDR_UPPER          ; Load TBLPTR with the base
           MOVWF    TBLPTRU                  ; address of the word
           MOVLW    CODE_ADDR_HIGH
           MOVWF    TBLPTRH                  ; read into TABLAT and increment
           MOVLW    CODE_ADDR_LOW            ; get data
           MOVWF    TBLPTRL                  ; read into TABLAT and increment
                                             ; get data
           TBLRD*+  TABLAT, W
           MOVF     WORD_EVEN
           MOVWF
           TBLRD*+  TABLAT, W
           MOVF     WORD_ODD
           MOVF

TABLE 6-2: REGISTERS ASSOCIATED WITH READING PROGRAM FLASH MEMORY

Name       Bit 7    Bit 6             Bit 5  Bit 4  Bit 3      Bit 2  Bit 1              Bit 0    Reset
                                                                                                Values on

                                                                                                   Page

TBLPTRU    --                     --  bit 21 Program Memory Table Pointer Upper Byte            51

                                             (TBLPTR<20:16>)

TBPLTRH Program Memory Table Pointer High Byte (TBLPTR<15:8>)                                   51

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

TABLAT     Program Memory Table Latch                                                           51

Legend: -- = unimplemented, read as `0'. Shaded cells are not used during Flash access.

2009 Microchip Technology Inc.                                                         DS39636D-page 79
PIC18F2X1X/4X1X

NOTES:

DS39636D-page 80   2009 Microchip Technology Inc.
                                                                       PIC18F2X1X/4X1X

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

7.2 Operation                                                   MOVF      ARG2, W   ; Test Sign Bit
                                                                BTFSC     ARG1, SB
Example 7-1 shows the instruction sequence for an 8 x 8         SUBWF     PRODH, F  ; PRODH = PRODH
unsigned multiplication. Only one instruction is required
when one of the arguments is already loaded in the                                  ;  - ARG2
WREG register.

Example 7-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 7-1: PERFORMANCE COMPARISON FOR VARIOUS MULTIPLY OPERATIONS

Routine           Multiply Method            Program            Cycles                        Time
                                             Memory             (Max)     @ 40 MHz @ 10 MHz @ 4 MHz
                                             (Words)

8 x 8 unsigned    Without hardware multiply                 13  69             6.9 s   27.6 s         69 s

                  Hardware multiply                         1          1      100 ns   400 ns         1 s

8 x 8 signed      Without hardware multiply                 33  91             9.1 s   36.4 s         91 s

                  Hardware multiply                         6          6      600 ns   2.4 s          6 s

16 x 16 unsigned  Without hardware multiply                 21  242           24.2 s   96.8 s 242 s

                  Hardware multiply                         28  28             2.8 s   11.2 s         28 s

16 x 16 signed    Without hardware multiply                 52  254           25.4 s 102.6 s 254 s

                  Hardware multiply                         35  40             4.0 s   16.0 s         40 s

2009 Microchip Technology Inc.                                                       DS39636D-page 81
PIC18F2X1X/4X1X

Example 7-3 shows the sequence to do a 16 x 16               EQUATION 7-2: 16 x 16 SIGNED
unsigned multiplication. Equation 7-1 shows the
algorithm that is used. The 32-bit result is stored in four                             MULTIPLICATION
registers (RES3:RES0).
                                                                                        ALGORITHM
EQUATION 7-1: 16 x 16 UNSIGNED
                           MULTIPLICATION                     RES3:RES0 = ARG1H:ARG1L ARG2H:ARG2L
                           ALGORITHM                                           = (ARG1H ARG2H 216) +
                                                                                  (ARG1H ARG2L 28) +
RES3:RES0 = ARG1H:ARG1L ARG2H:ARG2L                                            (ARG1L ARG2H 28) +
                      = (ARG1H ARG2H 216) +
                             (ARG1H ARG2L 28) +                               (ARG1L ARG2L) +
                             (ARG1L ARG2H 28) +                               (-1 ARG2H<7> ARG1H:ARG1L 216) +
                             (ARG1L ARG2L)                                      (-1 ARG1H<7> ARG2H:ARG2L 216)

                                                             EXAMPLE 7-4:  16 x 16 SIGNED
                                                                           MULTIPLY ROUTINE

EXAMPLE 7-3:      16 x 16 UNSIGNED                           MOVF ARG1L, W            ; ARG1L * ARG2L ->
                  MULTIPLY ROUTINE                           MULWF ARG2L              ; PRODH:PRODL
                                                                                      ;
MOVF ARG1L, W            ; ARG1L * ARG2L->                         MOVFF PRODH, RES1  ;
MULWF ARG2L              ; PRODH:PRODL                             MOVFF PRODL, RES0
                         ;                                   ;                        ; ARG1H * ARG2H ->
      MOVFF PRODH, RES1  ;                                         MOVF ARG1H, W      ; PRODH:PRODL
      MOVFF PRODL, RES0                                            MULWF ARG2H        ;
;                        ; ARG1H * ARG2H->                                            ;
      MOVF ARG1H, W      ; PRODH:PRODL                             MOVFF PRODH, RES3
      MULWF ARG2H        ;                                         MOVFF PRODL, RES2  ; ARG1L * ARG2H ->
                         ;                                   ;                        ; PRODH:PRODL
      MOVFF PRODH, RES3                                            MOVF ARG1L, W      ;
      MOVFF PRODL, RES2  ; ARG1L * ARG2H->                         MULWF ARG2H        ; Add cross
;                        ; PRODH:PRODL                                                ; products
      MOVF ARG1L, W      ;                                         MOVF PRODL, W      ;
      MULWF ARG2H        ; Add cross                               ADDWF RES1, F      ;
                         ; products                                MOVF PRODH, W      ;
      MOVF PRODL, W      ;                                         ADDWFC RES2, F
      ADDWF RES1, F      ;                                         CLRF WREG          ;
      MOVF PRODH, W      ;                                         ADDWFC RES3, F     ; ARG1H * ARG2L ->
      ADDWFC RES2, F                                         ;                        ; PRODH:PRODL
      CLRF WREG          ;                                         MOVF ARG1H, W      ;
      ADDWFC RES3, F     ; ARG1H * ARG2L->                         MULWF ARG2L        ; Add cross
;                        ; PRODH:PRODL                                                ; products
      MOVF ARG1H, W      ;                                         MOVF    PRODL, W   ;
      MULWF ARG2L        ; Add cross                               ADDWF   RES1, F    ;
                         ; products                                MOVF    PRODH, W   ;
MOVF    PRODL, W         ;                                         ADDWFC  RES2, F
ADDWF   RES1, F          ;                                         CLRF    WREG       ; ARG2H:ARG2L neg?
MOVF    PRODH, W         ;                                         ADDWFC  RES3, F    ; no, check ARG1
ADDWFC  RES2, F                                              ;                        ;
CLRF    WREG                                                       BTFSS   ARG2H, 7   ;
ADDWFC  RES3, F                                                    BRA     SIGN_ARG1  ;
                                                                   MOVF    ARG1L, W
Example 7-4 shows the sequence to do a 16 x 16                     SUBWF   RES2       ; ARG1H:ARG1L neg?
signed multiply. Equation 7-2 shows the algorithm                  MOVF    ARG1H, W   ; no, done
used. The 32-bit result is stored in four registers                SUBWFB  RES3       ;
(RES3:RES0). To account for the sign bits of the             ;                        ;
arguments, the MSb for each argument pair is tested          SIGN_ARG1     ARG1H, 7   ;
and the appropriate subtractions are done.                         BTFSS   CONT_CODE
                                                                   BRA     ARG2L, W
                                                                   MOVF    RES2
                                                                   SUBWF   ARG2H, W
                                                                   MOVF    RES3
                                                                   SUBWFB
                                                             ;
                                                             CONT_CODE
                                                                  :

DS39636D-page 82                                                            2009 Microchip Technology Inc.
                                                               PIC18F2X1X/4X1X

8.0 INTERRUPTS                                                 When the IPEN bit is cleared (default state), the
                                                               interrupt priority feature is disabled and interrupts are
The PIC18F2X1X/4X1X devices have multiple interrupt            compatible with PIC mid-range devices. In
sources and an interrupt priority feature that allows          Compatibility mode, the interrupt priority bits for each
most interrupt sources to be assigned a high priority          source have no effect. INTCON<6> is the PEIE bit,
level or a low priority level. The high priority interrupt     which enables/disables all peripheral interrupt sources.
vector is at 0008h and the low priority interrupt vector is    INTCON<7> is the GIE bit, which enables/disables all
at 0018h. High priority interrupt events will interrupt any    interrupt sources. All interrupts branch to address
low priority interrupts that may be in progress.               0008h in Compatibility mode.

There are ten registers which are used to control              When an interrupt is responded to, the global interrupt
interrupt operation. These registers are:                      enable bit is cleared to disable further interrupts. If the
                                                               IPEN bit is cleared, this is the GIE bit. If interrupt priority
RCON                                                         levels are used, this will be either the GIEH or GIEL bit.
                                                               High priority interrupt sources can interrupt a low
INTCON                                                       priority interrupt. Low priority interrupts are not
INTCON2                                                      processed while high priority interrupts are in progress.
INTCON3
                                                               The return address is pushed onto the stack and the
PIR1, PIR2                                                   PC is loaded with the interrupt vector address (0008h
PIE1, PIE2                                                   or 0018h). Once in the Interrupt Service Routine, the
IPR1, IPR2                                                   source(s) of the interrupt can be determined by polling
                                                               the interrupt flag bits. The interrupt flag bits must be
It is recommended that the Microchip header files              cleared in software before re-enabling interrupts to
supplied with MPLAB IDE be used for the symbolic bit          avoid recursive interrupts.
names in these registers. This allows the assembler/
compiler to automatically take care of the placement of        The "return from interrupt" instruction, RETFIE, exits
these bits within the specified register.                      the interrupt routine and sets the GIE bit (GIEH or GIEL
                                                               if priority levels are used), which re-enables interrupts.
In general, interrupt sources have three bits to control
their operation. They are:                                     For external interrupt events, such as the INT pins or
                                                               the PORTB input change interrupt, the interrupt latency
Flag bit to indicate that an interrupt event                 will be three to four instruction cycles. The exact
   occurred                                                    latency is the same for one or two-cycle instructions.
                                                               Individual interrupt flag bits are set, regardless of the
Enable bit that allows program execution to                  status of their corresponding enable bit or the GIE bit.
   branch to the interrupt vector address when the
   flag bit is set                                             Note:  Do not use the MOVFF instruction to modify
                                                                      any of the interrupt control registers while
Priority bit to select high priority or low priority                any interrupt is enabled. Doing so may
                                                                      cause erratic microcontroller behavior.
The interrupt priority feature is enabled by setting the
IPEN bit (RCON<7>). When interrupt priority is
enabled, there are two bits which enable interrupts
globally. Setting the GIEH bit (INTCON<7>) enables all
interrupts that have the priority bit set (high priority).
Setting the GIEL bit (INTCON<6>) enables all
interrupts that have the priority bit cleared (low priority).
When the interrupt flag, enable bit and appropriate
global interrupt enable bit are set, the interrupt will vec-
tor immediately to address 0008h or 0018h, depending
on the priority bit setting. Individual interrupts can be
disabled through their corresponding enable bits.

2009 Microchip Technology Inc.                                      DS39636D-page 83
PIC18F2X1X/4X1X

FIGURE 8-1:       PIC18 INTERRUPT LOGIC

                                   SSPIF                                             TMR0IF                                    Wake-up if in
                                   SSPIE                                             TMR0IE                                Idle or Sleep modes
                                   SSPIP                                             TMR0IP
                                                                                                                              Interrupt to CPU
                                     ADIF                                                RBIF                                 Vector to Location
                                     ADIE                                                RBIE                                0008h
                                     ADIP                                                RBIP                               GIEH/GIE

                                     RCIF                                             INT0IF                                  Interrupt to CPU
                                     RCIE                                             INT0IE                                  Vector to Location
                                     RCIP                                                                                     0018h
                                                                                      INT1IF                GIEH/GIE
High Priority Interrupt Generation                                                    INT1IE                GIEL/PEIE
                                                                                      INT1IP
Low Priority Interrupt Generation                                                     INT2IF
                                                                                      INT2IE
                                                                                      INT2IP

                                                                             IPEN

                                                                                            IPEN
                                                                                     GIEL/PEIE

                                                                                                      IPEN

                                           Additional Peripheral Interrupts

                        SSPIF                                                TMR0IF
                        SSPIE                                                TMR0IE
                        SSPIP
                                                                             TMR0IP
             ADIF
             ADIE                                                            RBIF
             ADIP                                                            RBIE

             RCIF                                                            RBIP
             RCIE
             RCIP

                                           Additional Peripheral Interrupts  INT1IF
                                                                             INT1IE
                                                                             INT1IP

                                                                             INT2IF
                                                                             INT2IE
                                                                             INT2IP

DS39636D-page 84                                                                                             2009 Microchip Technology Inc.
                                                               PIC18F2X1X/4X1X

8.1 INTCON Registers                                   Note:   Interrupt flag bits are set when an interrupt
                                                               condition occurs regardless of the state of
The INTCON registers are readable and writable                 its corresponding enable bit or the global
registers, which contain various enable, priority and          interrupt enable bit. User software should
flag bits.                                                     ensure the appropriate interrupt flag bits
                                                               are clear prior to enabling an interrupt.
                                                               This feature allows for software polling.

REGISTER 8-1:  INTCON REGISTER

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

bit 7 GIE/GIEH: Global Interrupt Enable bit

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

bit 6 PEIE/GIEL: Peripheral Interrupt Enable bit

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

bit 5 TMR0IE: TMR0 Overflow Interrupt Enable bit

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

bit 4 INT0IE: INT0 External Interrupt Enable bit

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

bit 3 RBIE: RB Port Change Interrupt Enable bit

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

bit 2 TMR0IF: TMR0 Overflow Interrupt Flag bit

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

bit 1 INT0IF: INT0 External Interrupt Flag bit

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

bit 0 RBIF: RB Port Change Interrupt Flag bit

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

               Note: A mismatch condition will continue to set this bit. Reading PORTB will end the
                           mismatch condition and allow the bit to be cleared.

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

2009 Microchip Technology Inc.                                              DS39636D-page 85
PIC18F2X1X/4X1X

REGISTER 8-2: INTCON2 REGISTER

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

bit 7 RBPU: PORTB Pull-up Enable bit
            1 = All PORTB pull-ups are disabled
            0 = PORTB pull-ups are enabled by individual port latch values

bit 6 INTEDG0: External 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

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

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

DS39636D-page 86                                                             2009 Microchip Technology Inc.
                                                    PIC18F2X1X/4X1X

REGISTER 8-3: INTCON3 REGISTER

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

INT2IP INT1IP                     --   INT2IE INT1IE  --                            INT2IF INT1IF

bit 7                                                                               bit 0

bit 7 INT2IP: INT2 External Interrupt Priority bit
            1 = High priority
            0 = Low priority

bit 6 INT1IP: INT1 External Interrupt Priority bit
            1 = High priority
            0 = Low priority

bit 5 Unimplemented: Read as `0'

bit 4 INT2IE: INT2 External Interrupt Enable bit
            1 = Enables the INT2 external interrupt
            0 = Disables the INT2 external interrupt

bit 3 INT1IE: INT1 External Interrupt Enable bit
            1 = Enables the INT1 external interrupt
            0 = Disables the INT1 external interrupt

bit 2 Unimplemented: Read as `0'

bit 1 INT2IF: INT2 External Interrupt Flag bit
            1 = The INT2 external interrupt occurred (must be cleared in software)
            0 = The INT2 external interrupt did not occur

bit 0 INT1IF: INT1 External Interrupt Flag bit
            1 = The INT1 external interrupt occurred (must be cleared in software)
            0 = The INT1 external interrupt did not occur

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

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

2009 Microchip Technology Inc.                                                    DS39636D-page 87
PIC18F2X1X/4X1X

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

REGISTER 8-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

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 in software)
            0 = No read or write has occurred

               Note 1: This bit is unimplemented on 28-pin devices and is read as `0'.

bit 6 ADIF: A/D Converter Interrupt Flag bit

            1 = An A/D conversion completed (must be cleared in software)
            0 = The A/D conversion is not complete

bit 5 RCIF: 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 in software)
            0 = Waiting to transmit/receive

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

bit 1 TMR2IF: TMR2 to PR2 Match Interrupt Flag bit
            1 = TMR2 to PR2 match occurred (must be cleared in software)
            0 = No TMR2 to PR2 match occurred

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

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

DS39636D-page 88                                                          2009 Microchip Technology Inc.
                                                    PIC18F2X1X/4X1X

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

               R/W-0 R/W-0        U-0  U-0          R/W-0 R/W-0 R/W-0                    R/W-0
                                                                                        CCP2IF
               OSCFIF CMIF        --   --           BCLIF HLVDIF TMR3IF
                                                                                              bit 0
               bit 7

bit 7          OSCFIF: Oscillator Fail Interrupt Flag bit
bit 6
bit 5-4        1 = Device oscillator failed, clock input has changed to INTOSC (must be cleared in software)
bit 3          0 = Device clock operating
bit 2
bit 1          CMIF: Comparator Interrupt Flag bit
bit 0
               1 = Comparator input has changed (must be cleared in software)
               0 = Comparator input has not changed

               Unimplemented: Read as `0'

               BCLIF: Bus Collision Interrupt Flag bit

               1 = A bus collision occurred (must be cleared in software)
               0 = No bus collision occurred

               HLVDIF: High/Low-Voltage Detect Interrupt Flag bit

               1 = A low-voltage condition occurred (must be cleared in software)
               0 = The device voltage is above the High/Low-Voltage Detect trip point

               TMR3IF: TMR3 Overflow Interrupt Flag bit

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

               CCP2IF: CCPx Interrupt Flag bit

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

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

2009 Microchip Technology Inc.                                          DS39636D-page 89
PIC18F2X1X/4X1X

8.3 PIE Registers

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

REGISTER 8-6:     PIE1: PERIPHERAL INTERRUPT ENABLE 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

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

                  Note 1: This bit is unimplemented on 28-pin devices and is read as `0'.

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

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

DS39636D-page 90                                                                  2009 Microchip Technology Inc.
                                                    PIC18F2X1X/4X1X

REGISTER 8-7:  PIE2: PERIPHERAL INTERRUPT ENABLE REGISTER 2

               R/W-0 R/W-0        U-0  U-0          R/W-0 R/W-0            R/W-0         R/W-0
                                                                          TMR3IE        CCP2IE
               OSCFIE CMIE        --   --           BCLIE HLVDIE
                                                                                              bit 0
               bit 7

bit 7          OSCFIE: Oscillator Fail Interrupt Enable bit
bit 6          1 = Enabled
bit 5-4        0 = Disabled
bit 3
bit 2          CMIE: Comparator Interrupt Enable bit
bit 1
bit 0          1 = Enabled
               0 = Disabled

               Unimplemented: Read as `0'

               BCLIE: Bus Collision Interrupt Enable bit
               1 = Enabled
               0 = Disabled

               HLVDIE: High/Low-Voltage Detect Interrupt Enable bit

               1 = Enabled
               0 = Disabled

               TMR3IE: TMR3 Overflow Interrupt Enable bit
               1 = Enabled
               0 = Disabled

               CCP2IE: CCP2 Interrupt Enable bit
               1 = Enabled
               0 = Disabled

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

2009 Microchip Technology Inc.                                          DS39636D-page 91
PIC18F2X1X/4X1X

8.4 IPR Registers

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

REGISTER 8-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

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

                  1 = High priority
                  0 = Low priority

                  Note 1: This bit is unimplemented on 28-pin devices and is read as `0'.

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

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

DS39636D-page 92                                                                   2009 Microchip Technology Inc.
                                                    PIC18F2X1X/4X1X

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

               R/W-1 R/W-1        U-0  U-0          R/W-1 R/W-1            R/W-1         R/W-1
                                                                          TMR3IP        CCP2IP
               OSCFIP CMIP        --   --           BCLIP HLVDIP
                                                                                              bit 0
               bit 7

bit 7          OSCFIP: Oscillator Fail Interrupt Priority bit
bit 6          1 = High priority
bit 5-4        0 = Low priority
bit 3
bit 2          CMIP: Comparator Interrupt Priority bit
bit 1
bit 0          1 = High priority
               0 = Low priority

               Unimplemented: Read as `0'

               BCLIP: Bus Collision Interrupt Priority bit
               1 = High priority
               0 = Low priority

               HLVDIP: High/Low-Voltage Detect Interrupt Priority bit

               1 = High priority
               0 = Low priority

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

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

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

2009 Microchip Technology Inc.                                          DS39636D-page 93
PIC18F2X1X/4X1X

8.5 RCON Register                                       The operation of the SBOREN bit and the Reset flag
                                                        bits is discussed in more detail in Section 4.1 "RCON
The RCON register contains flag bits which are used to  Register".
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.

REGISTER 8-10: RCON REGISTER

                  R/W-0 R/W-1(1)     U-0                R/W-1  R-1  R-1              R/W-0(1) R/W-0

                  IPEN SBOREN        --                 RI     TO   PD               POR           BOR

                  bit 7                                                                            bit 0

bit 7 IPEN: Interrupt Priority Enable bit
            1 = Enable priority levels on interrupts
            0 = Disable priority levels on interrupts (PIC16XXX Compatibility mode)

bit 6 SBOREN: Software BOR Enable bit(1)
            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.

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.

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

DS39636D-page 94                                                    2009 Microchip Technology Inc.
                                                               PIC18F2X1X/4X1X

8.6 INTn Pin Interrupts                                        8.7 TMR0 Interrupt

External interrupts on the RB0/INT0, RB1/INT1 and              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 trigger is on the falling edge. When a valid edge          can be enabled/disabled by setting/clearing enable bit,
appears on the RBx/INTx pin, the corresponding flag            TMR0IE (INTCON<5>). Interrupt priority for Timer0 is
bit INTxF is set. This interrupt can be disabled by clear-     determined by the value contained in the interrupt
ing the corresponding enable bit INTxE. Flag bit INTxF         priority bit, TMR0IP (INTCON2<2>). See Section 10.0
must be cleared in software in the Interrupt Service           "Timer0 Module" for further details on the Timer0
Routine before re-enabling the interrupt.                      module.

All external interrupts (INT0, INT1 and INT2) can wake-        8.8 PORTB Interrupt-on-Change
up the processor from Idle or Sleep modes if bit INTxE
was set prior to going into those modes. If the Global         An input change on PORTB<7:4> sets flag bit, RBIF
Interrupt Enable bit, GIE, is set, the processor will          (INTCON<0>). The interrupt can be enabled/disabled
branch to the interrupt vector following wake-up.              by setting/clearing enable bit, RBIE (INTCON<3>).
                                                               Interrupt priority for PORTB interrupt-on-change is
Interrupt priority for INT1 and INT2 is determined by the      determined by the value contained in the interrupt
value contained in the interrupt priority bits, INT1IP         priority bit, RBIP (INTCON2<0>).
(INTCON3<6>) and INT2IP (INTCON3<7>). There is
no priority bit associated with INT0. It is always a high      8.9 Context Saving During Interrupts
priority interrupt source.
                                                               During interrupts, the return PC address is saved on
                                                               the stack. Additionally, the WREG, STATUS and BSR
                                                               registers are saved on the fast return stack. If a fast
                                                               return from interrupt is not used (see Section 5.3
                                                               "Data Memory Organization"), the user may need to
                                                               save the WREG, STATUS and BSR registers on entry
                                                               to the Interrupt Service Routine. Depending on the
                                                               user's application, other registers may also need to be
                                                               saved. Example 8-1 saves and restores the WREG,
                                                               STATUS and BSR registers during an Interrupt Service
                                                               Routine.

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

MOVWF  W_TEMP                     ; W_TEMP is in virtual bank
                                  ; STATUS_TEMP located anywhere
MOVFF  STATUS, STATUS_TEMP        ; BSR_TMEP located anywhere

MOVFF  BSR, BSR_TEMP              ; Restore BSR
                                  ; Restore WREG
;                                 ; Restore STATUS

; USER ISR CODE

;

MOVFF  BSR_TEMP, BSR

MOVF   W_TEMP, W

MOVFF  STATUS_TEMP, STATUS

2009 Microchip Technology Inc.                                  DS39636D-page 95
PIC18F2X1X/4X1X

NOTES:

DS39636D-page 96   2009 Microchip Technology Inc.
                                                          PIC18F2X1X/4X1X

9.0 I/O PORTS                                             Reading the PORTA register reads the status of the
                                                          pins, whereas writing to it will write to the port latch.
Depending on the device selected and features
enabled, there are up to five ports available. Some pins  The Data Latch (LATA) register is also memory mapped.
of the I/O ports are multiplexed with an alternate        Read-modify-write operations on the LATA register read
function from the peripheral features on the device. In   and write the latched output value for PORTA.
general, when a peripheral is enabled, that pin may not
be used as a general purpose I/O pin.                     The RA4 pin is multiplexed with the Timer0 module
                                                          clock input and one of the comparator outputs to
Each port has three registers for its operation. These    become the RA4/T0CKI/C1OUT pin. Pins RA6 and
registers are:                                            RA7 are multiplexed with the main oscillator pins; they
                                                          are enabled as oscillator or I/O pins by the selection of
TRIS register (data direction register)                 the main oscillator in the Configuration register (see
PORT register (reads the levels on the pins of the      Section 22.1 "Configuration Bits" for details). When
                                                          they are not used as port pins, RA6 and RA7 and their
   device)                                                associated TRIS and LAT bits are read as `0'.
LAT register (output latch)
                                                          The other PORTA pins are multiplexed with analog
The Data Latch (LAT register) is useful for read-modify-  inputs, the analog VREF+ and VREF- inputs and the com-
write operations on the value that the I/O pins are       parator voltage reference output. The operation of pins
driving.                                                  RA3:RA0 and RA5 as A/D converter inputs is selected
                                                          by clearing or setting the control bits in the ADCON1
A simplified model of a generic I/O port, without the     register (A/D Control Register 1).
interfaces to other peripherals, is shown in Figure 9-1.
                                                          Pins RA0 through RA5 may also be used as comparator
FIGURE 9-1:     GENERIC I/O PORT                          inputs or outputs by setting the appropriate bits in the
                OPERATION                                 CMCON register. To use RA3:RA0 as digital inputs, it is
                                                          also necessary to turn off the comparators.

RD LAT                                                    Note:  On a Power-on Reset, RA5 and RA3:RA0
Data                                                             are configured as analog inputs and read
Bus          D  Q                                                as `0'. RA4 is configured as a digital input.
WR LAT
or Port        CK                       I/O pin(1)        The RA4/T0CKI/C1OUT pin is a Schmitt Trigger input.
             Data Latch                                   All other PORTA pins have TTL input levels and full
WR TRIS       DQ                        Input             CMOS output drivers.
                                        Buffer
RD TRIS        CK                                         The TRISA register controls the direction of the PORTA
             TRIS Latch                                   pins, even when they are being used as analog inputs.
                                                          The user must ensure the bits in the TRISA register are
                                                          maintained set when using them as analog inputs.

                                                          EXAMPLE 9-1: INITIALIZING PORTA

                         Q        D                       CLRF   PORTA   ; Initialize PORTA by
                                                                         ; clearing output
                                  ENEN                    CLRF   LATA    ; data latches
                                                                         ; Alternate method
RD Port                                                   MOVLW  07h     ; to clear output
                                                          MOVWF  ADCON1  ; data latches
Note 1: I/O pins have diode protection to VDD and VSS.    MOVWF  07h     ; Configure A/D
                                                          MOVWF  CMCON   ; for digital inputs
9.1 PORTA, TRISA and LATA Registers                       MOVLW  0CFh    ; Configure comparators
                                                                         ; for digital input
PORTA is a 8-bit wide, bidirectional port. The corre-     MOVWF  TRISA   ; Value used to
sponding data direction register is TRISA. Setting a                     ; initialize data
TRISA bit (= 1) will make the corresponding PORTA pin                    ; direction
an input (i.e., put the corresponding output driver in a                 ; Set RA<3:0> as inputs
high-impedance mode). Clearing a TRISA bit (= 0) will                    ; RA<5:4> as outputs
make the corresponding PORTA pin an output (i.e., put
the contents of the output latch on the selected pin).

2009 Microchip Technology Inc.                                         DS39636D-page 97
PIC18F2X1X/4X1X

TABLE 9-1: PORTA I/O SUMMARY

Pin               Function   TRIS    I/O   I/O                           Description
                            Setting       Type

RA0/AN0           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 A/D input channel 0 and Comparator C1- input. Default input

                                                configuration on POR; does not affect digital output.

RA1/AN1           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 A/D input channel 1 and comparator C2- input. Default input

                                                configuration on POR; does not affect digital output.

RA2/AN2/          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 A/D input channel 2 and comparator C2+ input. Default input

                                                configuration on POR; not affected by analog output.

                  VREF-     1        I ANA A/D and comparator voltage reference low input.

                  CVREF     x        O ANA Comparator voltage reference output. Enabling this feature disables

                                                digital I/O.

RA3/AN3/VREF+     RA3       0        O DIG LATA<3> data output; not affected by analog input.

                            1        I    TTL PORTA<3> data input; disabled when analog input enabled.

                  AN3       1        I ANA A/D input channel 3 and comparator C1+ input. Default input

                                                configuration on POR.

                  VREF+     1        I ANA A/D 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 High/Low-Voltage Detect external trip point input.

                  C2OUT     0        O DIG Comparator 2 output; takes priority over port data.

OSC2/CLKO/RA6     RA6       0        O DIG LATA<6> data output. Enabled in RCIO, INTIO2 and ECIO modes only.

                            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).

                  CLKO      x        O DIG System cycle clock output (FOSC/4) in RC, INTIO1 and EC Oscillator

                                                modes.

OSC1/CLKI/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.

                  CLKI      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).

DS39636D-page 98                                                               2009 Microchip Technology Inc.
                                                           PIC18F2X1X/4X1X

TABLE 9-2: SUMMARY OF REGISTERS ASSOCIATED WITH PORTA

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

PORTA   RA7(1)  RA6(1)                RA5    RA4    RA3    RA2     RA1              RA0    54

LATA    LATA7(1) LATA6(1) PORTA Data Latch Register (Read and Write to Data Latch)         54

TRISA   TRISA7(1) TRISA6(1) PORTA Data Direction Control Register                          54

ADCON1  --                        --  VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0                  53

CMCON   C2OUT C1OUT C2INV C1INV                     CIS    CM2     CM1              CM0    53

CVRCON  CVREN CVROE CVRR CVRSS CVR3                        CVR2    CVR1   CVR0             53

Legend: -- = unimplemented, read as `0'. Shaded cells are not used by PORTA.
Note 1: RA7:RA6 and their associated latch and data direction bits are enabled as I/O pins based on oscillator

              configuration; otherwise, they are read as `0'.

2009 Microchip Technology Inc.                                                    DS39636D-page 99
PIC18F2X1X/4X1X

9.2 PORTB, TRISB and LATB                                   Four of the PORTB pins (RB7:RB4) have an interrupt-
         Registers                                          on-change feature. Only pins configured as inputs can
                                                            cause this interrupt to occur (i.e., any RB7:RB4 pin
PORTB is an 8-bit wide, bidirectional port. The             configured as an output is excluded from the interrupt-
corresponding data direction register is TRISB. Setting     on-change comparison). The input pins (of RB7:RB4)
a TRISB bit (= 1) will make the corresponding PORTB         are compared with the old value latched on the last
pin an input (i.e., put the corresponding output driver in  read of PORTB. The "mismatch" outputs of RB7:RB4
a high-impedance mode). Clearing a TRISB bit (= 0)          are ORed together to generate the RB Port Change
will make the corresponding PORTB pin an output (i.e.,      Interrupt with Flag bit, RBIF (INTCON<0>).
put the contents of the output latch on the selected pin).
                                                            This interrupt can wake the device from the Sleep
The Data Latch register (LATB) is also memory               mode, or any of the Idle modes. The user, in the
mapped. Read-modify-write operations on the LATB            Interrupt Service Routine, can clear the interrupt in the
register read and write the latched output value for        following manner:
PORTB.
                                                            a) Any read or write of PORTB (except with the
EXAMPLE 9-2: INITIALIZING PORTB                                   MOVFF (ANY), PORTB instruction).

CLRF   PORTB   ; Initialize PORTB by                        b) Clear flag bit RBIF.
CLRF   LATB    ; clearing output
MOVLW  0Fh     ; data latches                               A mismatch condition will continue to set flag bit RBIF.
MOVWF  ADCON1  ; Alternate method                           Reading PORTB will end the mismatch condition and
MOVLW  0CFh    ; to clear output                            allow flag bit RBIF to be cleared.
MOVWF  TRISB   ; data latches
               ; Set RB<4:0> as                             The interrupt-on-change feature is recommended for
               ; digital I/O pins                           wake-up on key depression operation and operations
               ; (required if config bit                    where PORTB is only used for the interrupt-on-change
               ; PBADEN is set)                             feature. Polling of PORTB is not recommended while
               ; Value used to                              using the interrupt-on-change feature.
               ; initialize data
               ; direction                                  RB3 can be configured by the Configuration bit,
               ; Set RB<3:0> as inputs                      CCP2MX, as the alternate peripheral pin for the CCP2
               ; RB<5:4> as outputs                         module (CCP2MX = 0).
               ; RB<7:6> as inputs

Each of the PORTB pins has a weak internal pull-up. A
single control bit can turn on all the pull-ups. This is
performed by clearing bit, RBPU (INTCON2<7>). The
weak pull-up is automatically turned off when the port
pin is configured as an output. The pull-ups are
disabled on a Power-on Reset.

Note:  On a Power-on Reset, RB4:RB0 are
       configured as analog inputs by default and
       read as `0'; RB7:RB5 are configured as
       digital inputs.

       By programming the Configuration bit,
       PBADEN, RB4:RB0 will alternatively be
       configured as digital inputs on POR.

DS39636D-page 100                                           2009 Microchip Technology Inc.
                                                PIC18F2X1X/4X1X

TABLE 9-3: PORTB I/O SUMMARY

      Pin       Function   TRIS      I/O   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; weak pull-up when RBPU bit is cleared.

                                                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 in 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.

                                  1  I    TTL PORTB<1> data input; weak pull-up when RBPU bit is cleared.

                                                Disabled when analog input enabled.(1)

                INT1              1  I    ST External interrupt 1 input.

                AN10              1  I    ANA A/D input channel 10.(1)

RB2/INT2/AN8    RB2               0  O    DIG LATB<2> data output; not affected by analog input.

                                  1  I    TTL PORTB<2> data input; weak pull-up when RBPU bit is cleared.

                                                Disabled when analog input enabled.(1)

                INT2              1  I    ST External interrupt 2 input.
                AN8
                                  1  I    ANA A/D input channel 8.(1)

RB3/AN9/CCP2    RB3               0  O    DIG LATB<3> data output; not affected by analog input.

                                  1  I    TTL PORTB<3> data input; weak pull-up when RBPU bit is cleared.

                                                Disabled when analog input enabled.(1)

                AN9               1  I    ANA A/D input channel 9.(1)

                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.

                                  1  I    TTL PORTB<4> data input; weak pull-up when RBPU bit is cleared.

                                                Disabled when analog input enabled.(1)

                KBI0              1  I    TTL Interrupt on pin change.

                AN11              1  I    ANA A/D input channel 11.(1)

RB5/KBI1/PGM    RB5               0  O    DIG LATB<5> data output.

                                  1  I    TTL PORTB<5> data input; weak pull-up when RBPU bit is cleared.

                KBI1              1  I    TTL Interrupt on pin change.

                PGM               x  I    ST Single-Supply Programming mode entry (ICSPTM). Enabled by LVP

                                                Configuration bit; all other pin functions disabled.

RB6/KBI2/PGC    RB6               0  O    DIG LATB<6> data output.

                                  1  I    TTL PORTB<6> data input; weak pull-up when RBPU bit is cleared.

                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; weak pull-up when RBPU bit is cleared.

                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.

2009 Microchip Technology Inc.                                                                      DS39636D-page 101
PIC18F2X1X/4X1X

TABLE 9-4: SUMMARY OF REGISTERS ASSOCIATED WITH PORTB

Name     Bit 7         Bit 6  Bit 5  Bit 4      Bit 3              Bit 2      Bit 1    Bit 0   Reset
                                                                                              Values
PORTB    RB7           RB6    RB5    RB4        RB3                RB2          RB1     RB0   on page

LATB     PORTB Data Latch Register (Read and Write to Data Latch)             INT0IF   RBIF       54
                                                                                 --    RBIP       54
TRISB    PORTB Data Direction Control Register                                        INT1IF      54
                                                                              INT2IF  PCFG0       51
INTCON   GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF                         PCFG1               51
                                                                                                  51
INTCON2  RBPU INTEDG0 INTEDG1 INTEDG2 --               TMR0IP                                     53

INTCON3  INT2IP INT1IP        --     INT2IE INT1IE                 --

ADCON1             --  --     VCFG1 VCFG0 PCFG3 PCFG2

Legend: -- = unimplemented, read as `0'. Shaded cells are not used by PORTB.

DS39636D-page 102                                                             2009 Microchip Technology Inc.
                                                            PIC18F2X1X/4X1X

9.3 PORTC, TRISC and LATC                                   The contents of the TRISC register are affected by
         Registers                                          peripheral overrides. Reading TRISC always returns
                                                            the current contents, even though a peripheral device
PORTC is an 8-bit wide, bidirectional port. The corre-      may be overriding one or more of the pins.
sponding data direction register is TRISC. Setting a
TRISC bit (= 1) will make the corresponding PORTC           EXAMPLE 9-3: INITIALIZING PORTC
pin an input (i.e., put the corresponding output driver in
a high-impedance mode). Clearing a TRISC bit (= 0)          CLRF   PORTC  ; Initialize PORTC by
will make the corresponding PORTC pin an output (i.e.,      CLRF   LATC   ; clearing output
put the contents of the output latch on the selected pin).  MOVLW  0CFh   ; data latches
                                                            MOVWF  TRISC  ; Alternate method
The Data Latch register (LATC) is also memory                             ; to clear output
mapped. Read-modify-write operations on the LATC                          ; data latches
register read and write the latched output value for                      ; Value used to
PORTC.                                                                    ; initialize data
                                                                          ; direction
PORTC is multiplexed with several peripheral functions                    ; Set RC<3:0> as inputs
(Table 9-5). The pins have Schmitt Trigger input                          ; RC<5:4> as outputs
buffers. RC1 is normally configured by Configuration                      ; RC<7:6> as inputs
bit, CCP2MX, as the default peripheral pin of the CCP2
module (default/erased state, CCP2MX = 1).

When enabling peripheral functions, care should be
taken in defining TRIS bits for each PORTC pin. Some
peripherals override the TRIS bit to make a pin an output,
while other peripherals override the TRIS bit to make a
pin an input. The user should refer to the corresponding
peripheral section for additional information.

   Note: On a Power-on Reset, these pins are
               configured as digital inputs.

2009 Microchip Technology Inc.                                          DS39636D-page 103
PIC18F2X1X/4X1X

TABLE 9-5: PORTC I/O SUMMARY

Pin           Function       TRIS    I/O   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(2)   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 I2CTM clock output (MSSP module); takes priority over port data.

                            1        I I2C/SMB I2C clock input (MSSP module); input type depends on module setting.

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.
         2:
             Enhanced PWM output is available only on PIC18F4410/4415/4510/4515/4610 devices.

DS39636D-page 104                                                             2009 Microchip Technology Inc.
                                                       PIC18F2X1X/4X1X

TABLE 9-6: SUMMARY OF REGISTERS ASSOCIATED WITH PORTC

Name   Bit 7  Bit 6               Bit 5  Bit 4  Bit 3  Bit 2     Bit 1  Bit 0   Reset
                                                                        RC0    Values
PORTC  RC7    RC6                 RC5    RC4    RC3    RC2       RC1           on page

LATC   PORTC Data Latch Register (Read and Write to Data Latch)                    54
                                                                                   54
TRISC  PORTC Data Direction Control Register                                       54

2009 Microchip Technology Inc.                                        DS39636D-page 105
PIC18F2X1X/4X1X                                             PORTD can also be configured as an 8-bit wide micro-
                                                            processor port (Parallel Slave Port) by setting control
9.4 PORTD, TRISD and LATD                                   bit, PSPMODE (TRISE<4>). In this mode, the input
         Registers                                          buffers are TTL. See Section 9.6 "Parallel Slave
                                                            Port" for additional information on the Parallel Slave
   Note: PORTD is only available on 40/44-pin               Port (PSP).
               devices.
                                                            Note:  When the enhanced PWM mode is used
PORTD is an 8-bit wide, bidirectional port. The corre-             with either dual or quad outputs, the PSP
sponding data direction register is TRISD. Setting a               functions of PORTD are automatically
TRISD bit (= 1) will make the corresponding PORTD                  disabled.
pin an input (i.e., put the corresponding output driver in
a high-impedance mode). Clearing a TRISD bit (= 0)          EXAMPLE 9-4: INITIALIZING PORTD
will make the corresponding PORTD pin an output (i.e.,
put the contents of the output latch on the selected pin).  CLRF   PORTD  ; Initialize PORTD by
                                                            CLRF   LATD   ; clearing output
The Data Latch register (LATD) is also memory               MOVLW  0CFh   ; data latches
mapped. Read-modify-write operations on the LATD            MOVWF  TRISD  ; Alternate method
register read and write the latched output value for                      ; to clear output
PORTD.                                                                    ; data latches
                                                                          ; Value used to
All pins on PORTD are implemented with Schmitt                            ; initialize data
Trigger input buffers. Each pin is individually                           ; direction
configurable as an input or output.                                       ; Set RD<3:0> as inputs
                                                                          ; RD<5:4> as outputs
Three of the PORTD pins are multiplexed with outputs                      ; RD<7:6> as inputs
P1B, P1C and P1D of the enhanced CCP module. The
operation of these additional PWM output pins is
covered in greater detail in Section 15.0 "Enhanced
Capture/Compare/PWM (ECCP) Module".

   Note: On a Power-on Reset, these pins are
               configured as digital inputs.

DS39636D-page 106                                                          2009 Microchip Technology Inc.
                                                                  PIC18F2X1X/4X1X

TABLE 9-7: PORTD I/O SUMMARY

Pin           Function   TRIS        I/O   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).

2009 Microchip Technology Inc.                                                                               DS39636D-page 107
PIC18F2X1X/4X1X

TABLE 9-8: SUMMARY OF REGISTERS ASSOCIATED WITH PORTD

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

PORTD  RD7         RD6    RD5    RD4          RD3                RD2          RD1    RD0    54

LATD   PORTD Data Latch Register (Read and Write to Data Latch)                             54

TRISD  PORTD Data Direction Control Register                                                54

TRISE  IBF         OBF    IBOV PSPMODE --                        TRISE2 TRISE1 TRISE0       54

CCP1CON P1M1       P1M0 DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0                             53

Legend: -- = unimplemented, read as `0'. Shaded cells are not used by PORTD.

DS39636D-page 108                                                             2009 Microchip Technology Inc.
                                                             PIC18F2X1X/4X1X

9.5 PORTE, TRISE and LATE                                    The fourth pin of PORTE (MCLR/VPP/RE3) is an input
         Registers                                           only pin. Its operation is controlled by the MCLRE Con-
                                                             figuration bit. When selected as a port pin (MCLRE = 0),
Depending on the particular PIC18F2X1X/4X1X device           it functions as a digital input only pin; as such, it does not
selected, PORTE is implemented in two different ways.        have TRIS or LAT bits associated with its operation.
                                                             Otherwise, it functions as the device's Master Clear
For 40/44-pin devices, PORTE is a 4-bit wide port.           input. In either configuration, RE3 also functions as the
Three pins (RE0/RD/AN5, RE1/WR/AN6 and RE2/CS/               programming voltage input during programming.
AN7) are individually configurable as inputs or outputs.
These pins have Schmitt Trigger input buffers. When          Note:  On a Power-on Reset, RE3 is enabled as
selected as an analog input, these pins will read as `0's.          a digital input only if Master Clear
                                                                    functionality is disabled.
The corresponding data direction register is TRISE.
Setting a TRISE bit (= 1) will make the corresponding        EXAMPLE 9-5: INITIALIZING PORTE
PORTE pin an input (i.e., put the corresponding output
driver in a high-impedance mode). Clearing a TRISE bit       CLRF   PORTE   ; Initialize PORTE by
(= 0) will make the corresponding PORTE pin an output                       ; clearing output
(i.e., put the contents of the output latch on the selected  CLRF   LATE    ; data latches
pin).                                                                       ; Alternate method
                                                             MOVLW  0Ah     ; to clear output
TRISE controls the direction of the RE pins, even when       MOVWF  ADCON1  ; data latches
they are being used as analog inputs. The user must          MOVLW  03h     ; Configure A/D
make sure to keep the pins configured as inputs when                        ; for digital inputs
using them as analog inputs.                                 MOVWF  TRISE   ; Value used to
                                                                            ; initialize data
   Note: On a Power-on Reset, RE2:RE0 are                                   ; direction
               configured as analog inputs.                                 ; Set RE<0> as inputs
                                                                            ; RE<1> as outputs
The upper four bits of the TRISE register also control                      ; RE<2> as inputs
the operation of the Parallel Slave Port. Their operation
is explained in Register 9-1.                                9.5.1 PORTE IN 28-PIN DEVICES

The Data Latch register (LATE) is also memory                For 28-pin devices, PORTE is only available when
mapped. Read-modify-write operations on the LATE             Master Clear functionality is disabled (MCLRE = 0). In
register, read and write the latched output value for        these cases, PORTE is a single bit, input only port
PORTE.                                                       comprised of RE3 only. The pin operates as previously
                                                             described.

2009 Microchip Technology Inc.                                            DS39636D-page 109
PIC18F2X1X/4X1X

REGISTER 9-1:      TRISE REGISTER (40/44-PIN DEVICES ONLY)

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

bit 7              IBF: Input Buffer Full Status bit

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

bit 6              OBF: Output Buffer Full Status bit

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

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

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

bit 4              PSPMODE: Parallel Slave Port Mode Select bit

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

bit 3              Unimplemented: Read as `0'

bit 2              TRISE2: RE2 Direction Control bit

                   1 = Input
                   0 = Output

bit 1              TRISE1: RE1 Direction Control bit

                   1 = Input
                   0 = Output

bit 0              TRISE0: RE0 Direction Control bit

                   1 = Input
                   0 = Output

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

DS39636D-page 110                                                                2009 Microchip Technology Inc.
                                                                        PIC18F2X1X/4X1X

TABLE 9-9: PORTE I/O SUMMARY

       Pin   Function     TRIS           I/O     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/RE3(1) MCLR              --     I      ST External Master Clear input; enabled when MCLRE Configuration bit is

                                                      set.

                    VPP           --     I      ANA High-voltage detection; used for ICSPTM 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;
Note 1:      x = Don't care (TRIS bit does not affect port direction or is overridden for this option).
             RE3 is available on both 28-pin and 40/44-pin devices. All other PORTE pins are only implemented on 40/44-pin
         2:  devices.
             RE3 does not have a corresponding TRIS bit to control data direction.

TABLE 9-10: SUMMARY OF REGISTERS ASSOCIATED WITH PORTE

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

PORTE        --          --              --           --      RE3(1,2)  RE2               RE1    RE0          54

LATE(2)      --          --              --           --      -- LATE Data Output Register                    54

TRISE        IBF         OBF             IBOV PSPMODE --                TRISE2 TRISE1 TRISE0                  54

ADCON1       --          --              VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0                                  53

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).
             RE3 is the only PORTE bit implemented on both 28-pin and 40/44-pin devices. All other bits are
        2:   implemented only when PORTE is implemented (i.e., 40/44-pin devices).

2009 Microchip Technology Inc.                                                                 DS39636D-page 111
PIC18F2X1X/4X1X                                            The timing for the control signals in Write and Read
                                                           modes is shown in Figure 9-3 and Figure 9-4,
9.6 Parallel Slave Port                                    respectively.

   Note: The Parallel Slave Port is only available on      FIGURE 9-2:         PORTD AND PORTE
               40/44-pin devices.                                              BLOCK DIAGRAM
                                                                               (PARALLEL SLAVE PORT)
In addition to its function as a general I/O port, PORTD
can also operate as an 8-bit wide Parallel Slave Port                   One bit of PORTD
(PSP) or microprocessor port. PSP operation is con-
trolled by the 4 upper bits of the TRISE register          Data Bus
(Register 9-1). Setting control bit, PSPMODE
(TRISE<4>), enables PSP operation as long as the                        DQ
enhanced CCP module is not operating in dual output
or quad output PWM mode. In Slave mode, the port is        WR LATD      CK                               RDx pin
asynchronously readable and writable by the external       or                             TTL
world.
                                                           WR PORTD     Data Latch
The PSP can directly interface to an 8-bit micro-
processor data bus. The external microprocessor can                     Q      D
read or write the PORTD latch as an 8-bit latch. Setting
the control bit PSPMODE enables the PORTE I/O pins         RD PORTD            ENEN
to become control inputs for the microprocessor port.
When set, port pin RE0 is the RD input, RE1 is the WR        RD LATD
input and RE2 is the CS (Chip Select) input. For this
functionality, the corresponding data direction bits of    Set Interrupt Flag
the TRISE register (TRISE<2:0>) must be configured         PSPIF (PIR1<7>)
as inputs (set). The A/D port control bits,
PFCG3:PFCG0 (ADCON1<3:0>), must also be set to a                                                  PORTE Pins
value in the range of `1010' through `1111'.
                                                                                          Read                   RD
A write to the PSP occurs when both the CS and WR                                                  TTL
lines are first detected low and ends when either are
detected high. The PSPIF and IBF flag bits are both set                              Chip Select
when the write ends.
                                                                                                 TTL             CS
A read from the PSP occurs when both the CS and RD
lines are first detected low. The data in PORTD is read                                   Write                  WR
out and the OBF bit is clear. If the user writes new data
to PORTD to set OBF, the data is immediately read out;                                           TTL
however, the OBF bit is not set.
                                                           Note: I/O pins have diode protection to VDD and VSS.
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
before servicing the PSP; when this happens, the IBF
and OBF bits can be polled and the appropriate action
taken.

DS39636D-page 112                                                               2009 Microchip Technology Inc.
                                                                PIC18F2X1X/4X1X

FIGURE 9-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 9-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

TABLE 9-11: REGISTERS ASSOCIATED WITH PARALLEL SLAVE PORT

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

PORTD        RD7            RD6       RD5        RD4     RD3        RD2    RD1                  RD0    54

LATD    PORTD Data Latch Register (Read and Write to Data Latch)                                       54

TRISD PORTD Data Direction Control Register                                                            54

PORTE        --             --        --         --      RE3        RE2    RE1                  RE0    54

LATE         --             --        --         --      -- LATE Data Output bits                      54

TRISE        IBF            OBF       IBOV PSPMODE --               TRISE2 TRISE1 TRISE0               54

INTCON GIE/GIEH PEIE/GIEL TMR0IF INT0IE                  RBIE TMR0IF INT0IF RBIF                       51

PIR1    PSPIF(1)            ADIF      RCIF       TXIF    SSPIF CCP1IF TMR2IF TMR1IF                    54

PIE1    PSPIE(1) ADIE                 RCIE       TXIE    SSPIE CCP1IE TMR2IE TMR1IE                    54

IPR1    PSPIP(1) ADIP                 RCIP       TXIP    SSPIP CCP1IP TMR2IP TMR1IP                    54

ADCON1       --             --        VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0                              53

Legend: -- = unimplemented, read as `0'. Shaded cells are not used by the Parallel Slave Port.
Note 1: These bits are unimplemented on 28-pin devices and read as `0'.

2009 Microchip Technology Inc.                                                                DS39636D-page 113
PIC18F2X1X/4X1X

NOTES:

DS39636D-page 114   2009 Microchip Technology Inc.
                                                              PIC18F2X1X/4X1X

10.0 TIMER0 MODULE                                      The T0CON register (Register 10-1) controls all
                                                        aspects of the module's operation, including the
The Timer0 module incorporates the following features:  prescale selection. It is both readable and writable.

Software selectable operation as a timer or           A simplified block diagram of the Timer0 module in 8-Bit
   counter in both 8-Bit or 16-Bit modes                mode is shown in Figure 10-1. Figure 10-2 shows a
                                                        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 10-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
                                                               PSA   T0PS2  T0PS1                  T0PS0
                TMR0ON T08BIT T0CS                      T0SE
                                                                                                        bit 0
                bit 7

bit 7           TMR0ON: Timer0 On/Off Control bit
bit 6
bit 5           1 = Enables Timer0
bit 4           0 = Stops Timer0
bit 3
bit 2-0         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

                T0CS: Timer0 Clock Source Select bit

                1 = Transition on T0CKI pin
                0 = Internal instruction cycle clock (CLKO)

                T0SE: Timer0 Source Edge Select bit

                1 = Increment on high-to-low transition on T0CKI pin
                0 = Increment on low-to-high transition on T0CKI pin

                PSA: Timer0 Prescaler Assignment bit

                1 = TImer0 prescaler is NOT assigned. Timer0 clock input bypasses prescaler.
                0 = Timer0 prescaler is assigned. Timer0 clock input comes from prescaler output.

                T0PS2:T0PS0: Timer0 Prescaler Select bits

                111 = 1:256 Prescale value
                110 = 1:128 Prescale value
                101 = 1:64 Prescale value
                100 = 1:32 Prescale value
                011 = 1:16 Prescale value
                010 = 1:8 Prescale value
                001 = 1:4 Prescale value
                000 = 1:2 Prescale value

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

2009 Microchip Technology Inc.                                            DS39636D-page 115
PIC18F2X1X/4X1X

10.1 Timer0 Operation                                                     internal phase clock (TOSC). There is a delay between
                                                                          synchronization and the onset of incrementing the
Timer0 can operate as either a timer or a counter; the                    timer/counter.
mode is selected with the T0CS bit (T0CON<5>). In
Timer mode (T0CS = 0), the module increments on                           10.2 Timer0 Reads and Writes in
every clock by default unless a different prescaler value                          16-Bit Mode
is selected (see Section 10.3 "Prescaler"). If the
TMR0 register is written to, the increment is inhibited                   TMR0H is not the actual high byte of Timer0 in 16-Bit
for the following two instruction cycles. The user can                    mode; it is actually a buffered version of the real high
work around this by writing an adjusted value to the                      byte of Timer0 which is not directly readable nor
TMR0 register.                                                            writable (refer to Figure 10-2). TMR0H is updated with
                                                                          the contents of the high byte of Timer0 during a read of
The Counter mode is selected by setting the T0CS bit                      TMR0L. This provides the ability to read all 16 bits of
(= 1). In this mode, Timer0 increments either on every                    Timer0 without having to verify that the read of the high
rising or falling edge of pin RA4/T0CKI. The increment-                   and low byte were valid, due to a rollover between
ing edge is determined by the Timer0 Source Edge                          successive reads of the high and low byte.
Select bit, T0SE (T0CON<4>); clearing this bit selects
the rising edge. Restrictions on the external clock input                 Similarly, a write to the high byte of Timer0 must also
are discussed below.                                                      take place through the TMR0H Buffer register. The high
                                                                          byte is updated with the contents of TMR0H when a
An external clock source can be used to drive Timer0;                     write occurs to TMR0L. This allows all 16 bits of Timer0
however, it must meet certain requirements to ensure                      to be updated at once.
that the external clock can be synchronized with the

FIGURE 10-1:       TIMER0 BLOCK DIAGRAM (8-BIT MODE)

                   FOSC/4                  0

                                        1                              1    Sync with     TMR0L                                                     Set
T0CKI pin                                     Programmable 0                 Internal                                                            TMR0IF
                                                                              Clocks              8                                            on Overflow
               T0SE                              Prescaler                               8
               T0CS                                      3                (2 TCY Delay)                                                           Internal Data Bus
               T0PS2:T0PS0
               PSA

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

FIGURE 10-2:       TIMER0 BLOCK DIAGRAM (16-BIT MODE)

FOSC/4                     0

                                        1                              0    Sync with    TMR0L                                                   TMR0                 Set
T0CKI pin                                     Programmable 1                 Internal           8                                              High Byte           TMR0IF
                                                                              Clocks                                                                             on Overflow
               T0SE                              Prescaler                                                                                                    8
               T0CS                                      3                (2 TCY Delay)
               T0PS2:T0PS0
               PSA                                                                                                                                               Read TMR0L
                                                                                                                                                                 Write TMR0L