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

型号

产品描述

搜索
 

PIC18F248-E/SOSQTP

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

器件描述

8-BIT, FLASH, 40 MHz, RISC MICROCONTROLLER, PQFP44

8位, FLASH, 40 MHz, 精简指令集微控制器, PQFP44

参数

PIC18F248-E/SOSQTP外部数据总线宽度 0.0
PIC18F248-E/SOSQTP输入输出总线数量 33
PIC18F248-E/SOSQTP端子数量 44
PIC18F248-E/SOSQTP最小工作温度 -40 Cel
PIC18F248-E/SOSQTP最大工作温度 85 Cel
PIC18F248-E/SOSQTP线速度 40 MHz
PIC18F248-E/SOSQTP加工封装描述 10 X 10 MM, 1 MM HEIGHT, PLASTIC, MS-026, TQFP-44
PIC18F248-E/SOSQTPreach_compliant Yes
PIC18F248-E/SOSQTP欧盟RoHS规范 Yes
PIC18F248-E/SOSQTP中国RoHS规范 Yes
PIC18F248-E/SOSQTP状态 Active
PIC18F248-E/SOSQTPmicroprocessor_microcontroller_peripheral_ic_type MICROCONTROLLER, RISC
PIC18F248-E/SOSQTPADC通道 YES
PIC18F248-E/SOSQTP地址总线宽度 0.0
PIC18F248-E/SOSQTP位数 8
PIC18F248-E/SOSQTPclock_frequency_max 40 MHz
PIC18F248-E/SOSQTPcpu_family PIC
PIC18F248-E/SOSQTPDAC通道 NO
PIC18F248-E/SOSQTPDMA通道 NO
PIC18F248-E/SOSQTPjesd_30_code S-PQFP-G44
PIC18F248-E/SOSQTPjesd_609_code e3
PIC18F248-E/SOSQTPmoisture_sensitivity_level 3
PIC18F248-E/SOSQTP包装材料 PLASTIC/EPOXY
PIC18F248-E/SOSQTPpackage_code TQFP
PIC18F248-E/SOSQTPpackage_equivalence_code TQFP44,.47SQ,32
PIC18F248-E/SOSQTP包装形状 SQUARE
PIC18F248-E/SOSQTP包装尺寸 FLATPACK, THIN PROFILE
PIC18F248-E/SOSQTPpeak_reflow_temperature__cel_ 260
PIC18F248-E/SOSQTPpower_supplies 2/5.5
PIC18F248-E/SOSQTPPWM通道 YES
PIC18F248-E/SOSQTPqualification_status COMMERCIAL
PIC18F248-E/SOSQTPram__bytes_ 1536
PIC18F248-E/SOSQTPROM编程 FLASH
PIC18F248-E/SOSQTProm__words_ 32768
PIC18F248-E/SOSQTPseated_height_max 1.2 mm
PIC18F248-E/SOSQTPsub_category Microcontrollers
PIC18F248-E/SOSQTP最大供电电压 50 mA
PIC18F248-E/SOSQTP额定供电电压 4.5 V
PIC18F248-E/SOSQTP最小供电电压 4.2 V
PIC18F248-E/SOSQTP最大供电电压 5.5 V
PIC18F248-E/SOSQTP表面贴装 YES
PIC18F248-E/SOSQTP工艺 CMOS
PIC18F248-E/SOSQTP温度等级 INDUSTRIAL
PIC18F248-E/SOSQTP端子涂层 MATTE TIN
PIC18F248-E/SOSQTP端子形式 GULL WING
PIC18F248-E/SOSQTP端子间距 0.8000 mm
PIC18F248-E/SOSQTP端子位置 QUAD
PIC18F248-E/SOSQTPtime_peak_reflow_temperature_max__s_ 40
PIC18F248-E/SOSQTPlength 10 mm
PIC18F248-E/SOSQTPwidth 10 mm
PIC18F248-E/SOSQTPadditional_feature ALSO OPERATES AT 2V MINIMUM SUPPLY

文档预览

PIC18F248-E/SOSQTP器件文档内容

                                                  PIC18FXX8
                                                    Data Sheet

                                      28/40-Pin High-Performance,
                                  Enhanced Flash Microcontrollers

                                                   with CAN Module

2006 Microchip Technology Inc.  DS41159E
Note the following details of the code protection feature on Microchip devices:
Microchip products meet the specification contained in their particular Microchip Data Sheet.

Microchip believes that its family of products is one of the most secure families of its kind on the market today, when used in the
      intended manner and under normal conditions.

There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our
      knowledge, require using the Microchip products in a manner outside the operating specifications contained in Microchip's Data
      Sheets. Most likely, the person doing so is engaged in theft of intellectual property.

Microchip is willing to work with the customer who is concerned about the integrity of their code.

Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not
      mean that we are guaranteeing the product as "unbreakable."

Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of our
products. Attempts to break Microchip's code protection feature may be a violation of the Digital Millennium Copyright Act. If such acts
allow unauthorized access to your software or other copyrighted work, you may have a right to sue for relief under that Act.

Information contained in this publication regarding device         Trademarks
applications and the like is provided only for your convenience
and may be superseded by updates. It is your responsibility to     The Microchip name and logo, the Microchip logo, Accuron,
ensure that your application meets with your specifications.       dsPIC, KEELOQ, microID, MPLAB, PIC, PICmicro, PICSTART,
MICROCHIP MAKES NO REPRESENTATIONS OR                              PRO MATE, PowerSmart, rfPIC and SmartShunt are
WARRANTIES OF ANY KIND WHETHER EXPRESS OR                          registered trademarks of Microchip Technology Incorporated
IMPLIED, WRITTEN OR ORAL, STATUTORY OR                             in the U.S.A. and other countries.
OTHERWISE, RELATED TO THE INFORMATION,
INCLUDING BUT NOT LIMITED TO ITS CONDITION,                        AmpLab, FilterLab, Migratable Memory, MXDEV, MXLAB,
QUALITY, PERFORMANCE, MERCHANTABILITY OR                           SEEVAL, SmartSensor and The Embedded Control Solutions
FITNESS FOR PURPOSE. Microchip disclaims all liability             Company are registered trademarks of Microchip Technology
arising from this information and its use. Use of Microchip        Incorporated in the U.S.A.
devices in life support and/or safety applications is entirely at
the buyer's risk, and the buyer agrees to defend, indemnify and    Analog-for-the-Digital Age, Application Maestro, CodeGuard,
hold harmless Microchip from any and all damages, claims,          dsPICDEM, dsPICDEM.net, dsPICworks, ECAN,
suits, or expenses resulting from such use. No licenses are        ECONOMONITOR, FanSense, FlexROM, fuzzyLAB,
conveyed, implicitly or otherwise, under any Microchip             In-Circuit Serial Programming, ICSP, ICEPIC, Linear Active
intellectual property rights.                                      Thermistor, Mindi, MiWi, MPASM, MPLIB, MPLINK, PICkit,
                                                                   PICDEM, PICDEM.net, PICLAB, PICtail, PowerCal,
                                                                   PowerInfo, PowerMate, PowerTool, REAL ICE, rfLAB,
                                                                   rfPICDEM, Select Mode, Smart Serial, SmartTel, Total
                                                                   Endurance, UNI/O, WiperLock and ZENA are trademarks of
                                                                   Microchip Technology Incorporated in the U.S.A. and other
                                                                   countries.

                                                                   SQTP is a service mark of Microchip Technology Incorporated
                                                                   in the U.S.A.

                                                                   All other trademarks mentioned herein are property of their
                                                                   respective companies.

                                                                   2006, Microchip Technology Incorporated, Printed in the
                                                                   U.S.A., All Rights Reserved.

                                                                        Printed on recycled paper.

                                                                   Microchip received ISO/TS-16949:2002 certification for its worldwide
                                                                   headquarters, design and wafer fabrication facilities in Chandler and
                                                                   Tempe, Arizona, Gresham, Oregon and Mountain View, California. The
                                                                   Company's quality system processes and procedures are for its
                                                                   PICmicro 8-bit MCUs, KEELOQ code hopping devices, Serial
                                                                   EEPROMs, microperipherals, nonvolatile memory and analog
                                                                   products. In addition, Microchip's quality system for the design and
                                                                   manufacture of development systems is ISO 9001:2000 certified.

DS41159E-page ii                                                    2006 Microchip Technology Inc.
                                                            PIC18FXX8

28/40-Pin High-Performance, Enhanced Flash
            Microcontrollers with CAN

High-Performance RISC CPU:                                  Advanced Analog Features:

Linear program memory addressing up to                     10-bit, up to 8-channel Analog-to-Digital Converter
   2 Mbytes                                                    module (A/D) with:
                                                               - Conversion available during Sleep
Linear data memory addressing to 4 Kbytes                    - Up to 8 channels available
Up to 10 MIPS operation
DC 40 MHz clock input                                    Analog Comparator module:
4 MHz-10 MHz oscillator/clock input with                     - Programmable input and output multiplexing

   PLL active                                                Comparator Voltage Reference module
16-bit wide instructions, 8-bit wide data path             Programmable Low-Voltage Detection (LVD) module:
Priority levels for interrupts
8 x 8 Single-Cycle Hardware Multiplier                       - Supports interrupt-on-Low-Voltage Detection
                                                             Programmable Brown-out Reset (BOR)
Peripheral Features:
                                                            CAN bus Module Features:
High current sink/source 25 mA/25 mA
Three external interrupt pins                              Complies with ISO CAN Conformance Test
Timer0 module: 8-bit/16-bit timer/counter with             Message bit rates up to 1 Mbps
                                                             Conforms to CAN 2.0B Active Spec with:
   8-bit programmable prescaler
Timer1 module: 16-bit timer/counter                          - 29-bit Identifier Fields
Timer2 module: 8-bit timer/counter with 8-bit                - 8-byte message length
                                                               - 3 Transmit Message Buffers with prioritization
   period register (time base for PWM)                         - 2 Receive Message Buffers
Timer3 module: 16-bit timer/counter                          - 6 full, 29-bit Acceptance Filters
Secondary oscillator clock option Timer1/Timer3            - Prioritization of Acceptance Filters
Capture/Compare/PWM (CCP) modules;                           - Multiple Receive Buffers for High Priority

   CCP pins can be configured as:                                 Messages to prevent loss due to overflow
   - Capture input: 16-bit, max resolution 6.25 ns             - Advanced Error Management Features
   - Compare: 16-bit, max resolution 100 ns (TCY)
   - PWM output: PWM resolution is 1 to 10-bit              Special Microcontroller Features:

      Max. PWM freq. @:8-bit resolution = 156 kHz            Power-on Reset (POR), Power-up Timer (PWRT)
                                10-bit resolution = 39 kHz     and Oscillator Start-up Timer (OST)

Enhanced CCP module which has all the features             Watchdog Timer (WDT) with its own on-chip RC
   of the standard CCP module, but also has the                oscillator
   following features for advanced motor control:
   - 1, 2 or 4 PWM outputs                                  Programmable code protection
   - Selectable PWM polarity                                 Power-saving Sleep mode
   - Programmable PWM dead time                              Selectable oscillator options, including:

Master Synchronous Serial Port (MSSP) with two               - 4x Phase Lock Loop (PLL) of primary oscillator
   modes of operation:                                         - Secondary Oscillator (32 kHz) clock input
   - 3-wire SPITM (Supports all 4 SPI modes)                In-Circuit Serial ProgrammingTM (ICSPTM) via two pins
   - I2CTM Master and Slave mode
                                                            Flash Technology:
Addressable USART module:
   - Supports interrupt-on-address bit                      Low-power, high-speed Enhanced Flash technology
                                                             Fully static design
                                                             Wide operating voltage range (2.0V to 5.5V)
                                                             Industrial and Extended temperature ranges

2006 Microchip Technology Inc.                            DS41159E-page 1
PIC18FXX8

        Program Memory                        Data Memory                                                                                                                                              Comparators                MSSP

Device   Flash # Single-Word SRAM EEPROM I/O                                                                                                      10-bit                                                             CCP/            Master  USART  Timers
        (bytes) Instructions (bytes) (bytes)                                                                                                       A/D                                                              ECCP              I2CTM         8/16-bit
                                                                                                                                                   (ch)                                                             (PWM)     SPITM

PIC18F248 16K    8192                         768  256                                            22                                                              5                                    --           1/0        Y        Y    Y      1/3

PIC18F258 32K    16384  1536                       256                                            22                                                              5                                    --           1/0        Y        Y    Y      1/3

PIC18F448 16K    8192                         768  256                                            33                                                              8                                    2            1/1        Y        Y    Y      1/3

PIC18F458 32K    16384  1536                       256                                            33                                                              8                                    2            1/1        Y        Y    Y      1/3

Pin Diagrams

        PDIP

                        MCLR/VPP                                      1                                                                                                                 40                          RB7/PGD

                       RA0/AN0/CVREF                                  2                                                                                                                 39                          RB6/PGC

                        RA1/AN1                                       3                                                                                                                 38                          RB5/PGM

                        RA2/AN2/VREF-                                 4                                                                                                                 37                          RB4

                        RA3/AN3/VREF+                                 5                                                                                                                 36                          RB3/CANRX

                        RA4/T0CKI                                     6                                                                                                                 35                          RB2/CANTX/INT2

                 RA5/AN4/SS/LVDIN                                     7                                                PIC18F448                                                        34                          RB1/INT1
                                                                                                                  PIC18F458
                        RE0/AN5/RD                                    8                                                                                                                 33                          RB0/INT0

                 RE1/AN6/WR/C1OUT                                     9                                                                                                                 32                          VDD

                 RE2/AN7/CS/C2OUT                                     10                                                                                                                31                          VSS

                                              VDD                     11                                                                                                                30                          RD7/PSP7/P1D

                                              VSS                     12                                                                                                                29                          RD6/PSP6/P1C

                        OSC1/CLKI                                     13                                                                                                                28                          RD5/PSP5/P1B

                 OSC2/CLKO/RA6                                        14                                                                                                                27                          RD4/PSP4/ECCP1/P1A

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

                        RC1/T1OSI                                     16                                                                                                                25                          RC6/TX/CK

                        RC2/CCP1                                      17                                                                                                                24                          RC5/SDO

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

                 RD0/PSP0/C1IN+                                       19                                                                                                                22                          RD3/PSP3/C2IN-

                 RD1/PSP1/C1IN-                                       20                                                                                                                21                          RD2/PSP2/C2IN+

        PLCC                                           RA3/AN3/VREF+  RA2/AN2/VREF-               RA0/AN0/CVREF

                                                                                     RA1/AN1                      MCLR/VPP                        RB7/PGD         RB6/PGC      RB5/PGM  RB4        NC
                                                                                                                    NC

                                                       6          5         4                     3               2                               44              43           42       41         40
                                                                                                                     1

                               RA4/T0CKI           7                                                                                                                                                   39                RB3/CANRX

                   RA5/AN4/SS/LVDIN                8                                                                                                                                                   38                RB2/CANTX/INT2
                                                                                                                                                                                                                         RB1/INT1
                            RE0/AN5/RD             9                                                                                                                                                   37
                                                                                                                                                                                                                         RB0/INT0
                 RE1/AN6/WR/C1OUT                  10                                                                                                                                                  36                VDD
                                                                                                                                                                                                                         VSS
                 RE2/AN7/CS/C2OUT                  11 PIC18F448 35
                                         VDD       12                                                                                                                                                  34                RD7/PSP7/P1D
                                         VSS       13                                PIC18F458                                                                                                         33                RD6/PSP6/P1C

                              OSC1/CLKI            14                                                                                                                                                  32                RD5/PSP5/P1B
                      OSC2/CLKO/RA6                                                                                                                                                                                      RD4/PSP4/ECCP1/P1A
                   RC0/T1OSO/T1CK1                 15                                                                                                                                                  31                RC7/RX/DT

                                          NC       16                                                                                                                                                  30

                                                   17                                                                                                                                                  29

                                                       18         19                 20           21              22              23              24              25           26       27         28

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

DS41159E-page 2                                                                                                                                                                                                                   2006 Microchip Technology Inc.
                                                                                                                                                                                                                           PIC18FXX8

Pin Diagrams (Continued)

        TQFP

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

                                                   44         43       42           41              40              39              38              37             36        35             34

                RC7/RX/DT                      1                                                                                                                                                33                    NC
RD4/PSP4/ECCP1/P1A                                                                                                                                                                                                    RC0/T1OSO/T1CKI
                                               2                                                                                                                                                32                    OSC2/CLKO/RA6
          RD5/PSP5/P1B                                                                                                                                                                                                OSC1/CLKI
          RD6/PSP6/P1C                         3                                                                                                                                                31                    VSS
          RD7/PSP7/P1D                                                                                                                                                                                                VDD
                                               4                                                                                                                                                30                    RE2/AN7/CS/C2OUT
                           VSS
                                               5                           PIC18F448                                                                                                            29                    RE1/AN6/WR/C1OUT
                          VDD                                                                                                                                                                                         RE0//AN5/RD
                  RB0/INT0                     6                           PIC18F458                                                                                                            28                    RA5/AN4/SS/LVDIN
                  RB1/INT1                     7                                                                                                                                                27                    RA4/T0CKI

       RB2/CANTX/INT2                          8                                                                                                                                                26
              RB3/CANRX
                                               9                                                                                                                                                25

                                               10                                                                                                                                               24

                                               11                                                                                                                                               23

                                                   12         13       14           15              16              17              18              19             20        21             22

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

SPDIP, SOIC

                                  MCLR/VPP                    1                                                                                     28                                                     RB7/PGD

             RA0/AN0/CVREF                                    2                                                                                     27                                                     RB6/PGC

                                  RA1/AN1                     3                                                                                     26                                                     RB5/PGM

             RA2/AN2/VREF-                                    4                                                                                     25                                                     RB4

             RA3/AN3/VREF+                                    5                                 PIC18F248                                           24                                                     RB3/CANRX
                                                                                             PIC18F258
                                  RA4/T0CKI                   6                                                                                     23                                                     RB2/CANTX/INT2

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

                                  VSS                         8                                                                                     21                                                     RB0/INT0

                                  OSC1/CLKI                   9                                                                                     20                                                     VDD

             OSC2/CLKO/RA6                                    10                                                                                    19                                                     VSS

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

                                  RC1/T1OSI                   12                                                                                    17                                                     RC6/TX/CK

                                  RC2/CCP1                    13                                                                                    16                                                     RC5/SDO

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

2006 Microchip Technology Inc.                                                                                                                                                                                                        DS41159E-page 3
PIC18FXX8

Table of Contents

1.0 Device Overview .......................................................................................................................................................................... 7
2.0 Oscillator Configurations ............................................................................................................................................................ 17
3.0 Reset .......................................................................................................................................................................................... 25
4.0 Memory Organization ................................................................................................................................................................. 37
5.0 Data EEPROM Memory ............................................................................................................................................................ 59
6.0 Flash Program Memory .............................................................................................................................................................. 65
7.0 8 x 8 Hardware Multiplier............................................................................................................................................................ 75
8.0 Interrupts .................................................................................................................................................................................... 77
9.0 I/O Ports ..................................................................................................................................................................................... 93
10.0 Parallel Slave Port .................................................................................................................................................................... 107
11.0 Timer0 Module ......................................................................................................................................................................... 109
12.0 Timer1 Module ......................................................................................................................................................................... 113
13.0 Timer2 Module ......................................................................................................................................................................... 117
14.0 Timer3 Module ......................................................................................................................................................................... 119
15.0 Capture/Compare/PWM (CCP) Modules ................................................................................................................................. 123
16.0 Enhanced Capture/Compare/PWM (ECCP) Module................................................................................................................ 131
17.0 Master Synchronous Serial Port (MSSP) Module .................................................................................................................... 143
18.0 Addressable Universal Synchronous Asynchronous Receiver Transmitter (USART).............................................................. 183
19.0 CAN Module ............................................................................................................................................................................. 199
20.0 Compatible 10-Bit Analog-to-Digital Converter (A/D) Module .................................................................................................. 241
21.0 Comparator Module.................................................................................................................................................................. 249
22.0 Comparator Voltage Reference Module ................................................................................................................................... 255
23.0 Low-Voltage Detect .................................................................................................................................................................. 259
24.0 Special Features of the CPU .................................................................................................................................................... 265
25.0 Instruction Set Summary .......................................................................................................................................................... 281
26.0 Development Support............................................................................................................................................................... 323
27.0 Electrical Characteristics .......................................................................................................................................................... 329
28.0 DC and AC Characteristics Graphs and Tables ....................................................................................................................... 361
29.0 Packaging Information.............................................................................................................................................................. 377
Appendix A: Data Sheet Revision History.......................................................................................................................................... 385
Appendix B: Device Differences......................................................................................................................................................... 385
Appendix C: Device Migrations .......................................................................................................................................................... 386
Appendix D: Migrating From Other PICmicro Devices ..................................................................................................................... 386
Index .................................................................................................................................................................................................. 387
On-Line Support................................................................................................................................................................................. 397
Systems Information and Upgrade Hot Line ...................................................................................................................................... 397
Reader Response .............................................................................................................................................................................. 398
PIC18FXX8 Product Identification System......................................................................................................................................... 399

DS41159E-page 4   2006 Microchip Technology Inc.
                                               PIC18FXX8

                                   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.

2006 Microchip Technology Inc.  DS41159E-page 5
PIC18FXX8

NOTES:

DS41159E-page 6   2006 Microchip Technology Inc.
                                                                               PIC18FXX8

1.0 DEVICE OVERVIEW                                     2. PIC18F2X8 devices implement 5 A/D channels,
                                                              as opposed to 8 for PIC18F4X8 devices.
This document contains device specific information for
the following devices:                                  3. PIC18F2X8 devices implement 3 I/O ports,
                                                              while PIC18F4X8 devices implement 5.
PIC18F248
PIC18F258                                             4. Only PIC18F4X8 devices implement the
PIC18F448                                                   Enhanced CCP module, analog comparators
PIC18F458                                                   and the Parallel Slave Port.

These devices are available in 28-pin, 40-pin and       All other features for devices in the PIC18FXX8 family,
44-pin packages. They are differentiated from each      including the serial communications modules, are
other in four ways:                                     identical. These are summarized in Table 1-1.

1. PIC18FX58 devices have twice the Flash               Block diagrams of the PIC18F2X8 and PIC18F4X8
      program memory and data RAM of PIC18FX48          devices are provided in Figure 1-1 and Figure 1-2,
      devices (32 Kbytes and 1536 bytes vs.             respectively. The pinouts for these device families are
      16 Kbytes and 768 bytes, respectively).           listed in Table 1-2.

TABLE 1-1: PIC18FXX8 DEVICE FEATURES

           Features                PIC18F248            PIC18F258           PIC18F448           PIC18F458

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

Internal         Bytes             16K                   32K                16K                  32K
Program                            8192                 16384               8192                16384
Memory           # of Single-Word
                 Instructions

Data Memory (Bytes)                768                  1536                768                 1536

Data EEPROM Memory (Bytes)         256                  256                 256                 256

Interrupt Sources                  17                   17                  21                  21

I/O Ports                          Ports A, B, C        Ports A, B, C 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 Capture/Compare/          --                   --                  1                   1

PWM Modules

Serial Communications              MSSP, CAN,           MSSP, CAN,          MSSP, CAN,          MSSP, CAN,

                                   Addressable USART Addressable USART Addressable USART Addressable USART

Parallel Communications (PSP)      No                   No                  Yes                 Yes

10-bit Analog-to-Digital Converter 5 input channels 5 input channels 8 input channels 8 input channels

Analog Comparators                 No                   No                  2                   2

Analog Comparators VREF Output     N/A                  N/A                 Yes                 Yes

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)

Programmable Low-Voltage Detect    Yes                  Yes                 Yes                 Yes

Programmable Brown-out Reset       Yes                  Yes                 Yes                 Yes

CAN Module                         Yes                  Yes                 Yes                 Yes

In-Circuit Serial ProgrammingTM    Yes                  Yes                 Yes                 Yes

(ICSPTM)

Instruction Set                    75 Instructions      75 Instructions     75 Instructions     75 Instructions

Packages                           28-pin SPDIP         28-pin SPDIP        40-pin PDIP         40-pin PDIP
                                   28-pin SOIC          28-pin SOIC         44-pin PLCC         44-pin PLCC
                                                                            44-pin TQFP         44-pin TQFP

2006 Microchip Technology Inc.                                                                DS41159E-page 7
PIC18FXX8

FIGURE 1-1:            PIC18F248/258 BLOCK DIAGRAM

                                                                          Data Bus<8>

                         21 Table Pointer<21>                          Data Latch              PORTA       RA0/AN0/CVREF
                                                                                               PORTB       RA1/AN1
                                                   88                     Data RAM             PORTC       RA2/AN2/VREF-
                                                                       up to 1536 bytes                    RA3/AN3/VREF+
                   21          inc/dec logic                                                               RA4/T0CKI
                                                                                                           RA5/AN4/SS/LVDIN
Address Latch                                                          Address Latch                       OSC2/CLKO/RA6
Program Memory
up to 32 Kbytes         21           PCLATU PCLATH                               12                       RB0/INT0
                                                                       Address<12>                         RB1/INT1
   Data Latch                            PCU PCH PCL                                                       RB2/CANTX/INT2
                                         Program Counter      4        12       4                          RB3/CANRX
                                                              BSR               Bank0, F                   RB4
                                                                        FSR0                               RB5/PGM
                                          31 Level Stack                FSR1           12                  RB6/PGC
                                                                        FSR2                               RB7/PGD

                                                              Decode   inc/dec                             RC0/T1OSO/T1CKI
                                                                        logic                              RC1/T1OSI
                             Table Latch                                                                   RC2/CCP1
                                                                                                           RC3/SCK/SCL
                         16           8                                                                    RC4/SDI/SDA
                                                                                                           RC5/SDO
                                              ROM Latch                                                    RC6/TX/CK
                                                                                                           RC7/RX/DT
                                               IR

                                                                                         8

                                                                       PRODH PRODL

                       Instruction                                  3  8 x 8 Multiply
                       Decode &                                                             8
                                                              BITOP
OSC2/CLKO/RA6            Control                                   8   W                    8
OSC1/CLKI
                             Timing             Power-up               8
T1OSI                     Generation               Timer
T1OSO                                                                  8
                              4X PLL            Oscillator                ALU<8>
                                              Start-up Timer                     8

                       Precision                Power-on
                       Band Gap                   Reset
                       Reference
                                               Watchdog
                                                  Timer

                                               Brown-out
                                                  Reset

                                               Test Mode
                                                  Select

Band Gap

                                          MCLR VDD, VSS

PBOR             Timer0        Timer1          Timer2         Timer3            10-bit
PLVD                                                                            ADC

Data EEPROM              CCP1                  USART                   Synchronous             CAN Module
                                                                        Serial Port

DS41159E-page 8                                                                                 2006 Microchip Technology Inc.
                                                                                                PIC18FXX8

FIGURE 1-2:            PIC18F448/458 BLOCK DIAGRAM

                                                                          Data Bus<8>

                       21 Table Pointer<21>                        Data Latch                   PORTA       RA0/AN0/CVREF
                                                                                                PORTB       RA1/AN1
                                                 88                   Data RAM                  PORTC       RA2/AN2/VREF-
                                                                   up to 1536 Kbytes                        RA3/AN3/VREF+
                   21      inc/dec logic                                                                    RA4/T0CKI
                                                                                                            RA5/AN4/SS/LVDIN
Address Latch                                                      Address Latch                            OSC2/CLKO/RA6
Program Memory
up to 32 Kbytes       21           PCLATU PCLATH                             12                            RB0/INT0
                                                                   Address<12>                              RB1/INT1
   Data Latch                          PCU PCH PCL                                                          RB2/CANTX/INT2
                                       Program Counter    4        12             4                         RB3/CANRX
                                                          BSR                    Bank0, F                   RB4
                                                                    FSR0                                    RB5/PGM
                                          31 Level Stack            FSR1                 12                 RB6/PGC
                                                                    FSR2                                    RB7/PGD

                           Table Latch                                  inc/dec                             RC0/T1OSO/T1CKI
                                                          Decode logic                                      RC1/T1OSI
                                                                                                            RC2/CCP1
                       16           8                                                                       RC3/SCK/SCL
                                                                                                            RC4/SDI/SDA
                                          ROM Latch                                                         RC5/SDO
                                                                                                            RC6/TX/CK
                                             IR                                                             RC7/RX/DT

                                                                                         8         PORTD    RD0/PSP0/C1IN+
                                                                                                   PORTE    RD1/PSP1/C1IN-
                                                                   PRODH PRODL                              RD2/PSP2/C2IN+
                                                                                                 Parallel   RD3/PSP3/C2IN-
                       Instruction                              3  8 x 8 Multiply               Slave Port  RD4/PSP4/ECCP1/P1A
                       Decode &                                                         8                   RD5/PSP5/P1B
                                                          BITOP                                             RD6/PSP6/P1C
OSC2/CLKO/RA6            Control                               8   W                         8              RD7/PSP7/P1D
OSC1/CLKI
                           Timing           Power-up               8                                        RE0/AN5/RD
T1OSI                   Generation             Timer                                                        RE1/AN6/WR//C1OUT
T1OSO                                                              8                                        RE2/AN7/CS/C2OUT
                              4X            Oscillator                ALU<8>
                             PLL          Start-up Timer                     8

                         Precision          Power-on
                         Band Gap             Reset
                         Reference
                                            Watchdog
                                              Timer

                                           Brown-out
                                              Reset

                                           Test Mode
                                              Select

Band Gap

                                          MCLR VDD, VSS

PBOR           Timer0             Timer1     USART        Timer3                 10-bit
PLVD                                         Timer2                              ADC

Data EEPROM Comparators CCP1                 Enhanced     USART    Synchronous                              CAN Module
                                                CCP                 Serial Port

2006 Microchip Technology Inc.                                                                            DS41159E-page 9
PIC18FXX8

TABLE 1-2: PIC18FXX8 PINOUT I/O DESCRIPTIONS

Pin Name                            Pin Number             Pin  Buffer           Description
                  PIC18F248/258 PIC18F448/458             Type   Type
                   SPDIP, SOIC PDIP TQFP PLCC

MCLR/VPP          1   1   18                          2                 Master Clear (input) or
    MCLR
    VPP                                                                 programming voltage (output).

NC                                                        I     ST        Master Clear (Reset) input.
OSC1/CLKI
                                                                          This pin is an active low Reset
    OSC1
                                                                          to the device.
    CLKI
                                                          P     --        Programming voltage input.
OSC2/CLKO/RA6
    OSC2          --  -- 12, 13, 1, 17,                   --    -- These pins should be left

    CLKO                  33, 34 28, 40                                 unconnected.

                  9   13  30                          14                Oscillator crystal or external clock

                                                                        input.

                                                          I CMOS/ST Oscillator crystal input or

                                                                          external clock source input. ST

                                                                          buffer when configured in RC

                                                                          mode; otherwise, CMOS.

                                                          I CMOS          External clock source input.

                                                                          Always associated with pin

                                                                          function OSC1 (see OSC1/

                                                                          CLKI, OSC2/CLKO pins).

                  10  14  31                          15                Oscillator crystal or clock output.

                                                          O     --        Oscillator crystal output.

                                                                          Connects to crystal 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.

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

Legend:  TTL = TTL compatible input                       CMOS = CMOS compatible input or output
         ST = Schmitt Trigger input with CMOS levels
         I = Input                                        Analog = Analog input
         P = Power
                                                          O     = Output

                                                          OD = Open-Drain (no P diode to VDD)

DS41159E-page 10                                                          2006 Microchip Technology Inc.
                                                                         PIC18FXX8

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

     Pin Name                       Pin Number            Pin  Buffer             Description
                  PIC18F248/258 PIC18F448/458            Type   Type
                   SPDIP, SOIC PDIP TQFP PLCC

                                                                       PORTA is a bidirectional I/O port.

RA0/AN0/CVREF     2               2  19               3
    RA0
    AN0                                                  I/O TTL         Digital I/O.
    CVREF
                                                         I Analog        Analog input 0.

                                                         O Analog        Comparator voltage reference

                                                                         output.

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

                                                         I Analog        Analog input 1.

RA2/AN2/VREF-     4               4  21               5
    RA2
    AN2                                                  I/O TTL         Digital I/O.
    VREF-
                                                         I Analog        Analog input 2.
RA3/AN3/VREF+
    RA3                                                  I Analog        A/D reference voltage
    AN3
    VREF+                                                                (Low) input.

RA4/T0CKI         5               5  22               6
    RA4
                                                         I/O TTL         Digital I/O.
    T0CKI
                                                         I Analog        Analog input 3.

                                                         I Analog        A/D reference voltage

                                                                         (High) input.

                  6               6  23               7

                                                         I/O TTL/OD Digital I/O open-drain when

                                                                         configured as output.

                                                         I     ST        Timer0 external clock input.

RA5/AN4/SS/LVDIN  7               7  24               8

RA5                                                      I/O TTL         Digital I/O.

AN4                                                      I Analog        Analog input 4.

SS                                                       I     ST        SPITM slave select input.

LVDIN                                                    I Analog        Low-Voltage Detect input.

RA6                                                                      See the OSC2/CLKO/RA6 pin.

Legend:  TTL = TTL compatible input                      CMOS = CMOS compatible input or output
         ST = Schmitt Trigger input with CMOS levels
         I = Input                                       Analog = Analog input
         P = Power
                                                         O     = Output

                                                         OD = Open-Drain (no P diode to VDD)

2006 Microchip Technology Inc.                                                        DS41159E-page 11
PIC18FXX8

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

Pin Name                            Pin Number              Pin  Buffer           Description
                  PIC18F248/258 PIC18F448/458              Type   Type
                   SPDIP, SOIC PDIP TQFP PLCC

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

RB0/INT0          21  33  8                            36
    RB0
    INT0                                                   I/O TTL         Digital I/O.

                                                           I     ST        External interrupt 0.

RB1/INT1          22  34  9                            37
    RB1
    INT1                                                   I/O TTL         Digital I/O.

                                                           I     ST        External interrupt 1.

RB2/CANTX/INT2    23  35  10                           38
    RB2
    CANTX                                                  I/O TTL         Digital I/O.
    INT2
                                                           O     TTL       Transmit signal for CAN bus.

                                                           I     ST        External interrupt 2.

RB3/CANRX         24  36  11                           39
    RB3
    CANRX                                                  I/O TTL         Digital I/O.

                                                           I     TTL       Receive signal for CAN bus.

RB4               25  37  14                           41 I/O TTL          Digital I/O.

RB5/PGM                                                                    Interrupt-on-change pin.
    RB5
    PGM           26  38  15                           42

RB6/PGC                                                    I/O TTL         Digital I/O.
    RB6
                                                                           Interrupt-on-change pin.
    PGC
                                                           I     ST        Low-voltage ICSPTM

                                                                           programming enable.

                  27  39  16                           43

                                                           I/O TTL         Digital I/O. In-Circuit

                                                                           Debugger pin.

                                                                           Interrupt-on-change pin.

                                                           I     ST        ICSP programming clock.

RB7/PGD           28  40  17                           44
    RB7
                                                           I/O TTL         Digital I/O. In-Circuit
                                                                           Debugger pin.
PGD                                                        I/O   ST        Interrupt-on-change pin.
                                                                           ICSP programming data.

Legend:   TTL = TTL compatible input                       CMOS = CMOS compatible input or output
          ST = Schmitt Trigger input with CMOS levels
          I = Input                                        Analog = Analog input
          P = Power
                                                           O     = Output

                                                           OD = Open-Drain (no P diode to VDD)

DS41159E-page 12                                                            2006 Microchip Technology Inc.
                                                                          PIC18FXX8

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

Pin Name                           Pin Number              Pin  Buffer           Description
                 PIC18F248/258 PIC18F448/458              Type   Type
                  SPDIP, SOIC PDIP TQFP PLCC

                                                                        PORTC is a bidirectional I/O port.

RC0/T1OSO/T1CKI  11               15  32              16

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

RC1/T1OSI        12               16  35              18

RC1                                                       I/O   ST        Digital I/O.

T1OSI                                                     I CMOS          Timer1 oscillator input.

RC2/CCP1         13               17  36              19
    RC2
    CCP1                                                  I/O   ST        Digital I/O.

RC3/SCK/SCL                                               I/O   ST        Capture 1 input/Compare 1
    RC3
    SCK                                                                   output/PWM1 output.

    SCL          14               18  37              20

RC4/SDI/SDA                                               I/O   ST        Digital I/O.
    RC4
    SDI                                                   I/O   ST        Synchronous serial clock
    SDA
                                                                          input/output for SPITM mode.

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

                 15               23  42              25

                                                          I/O   ST        Digital I/O.

                                                          I     ST        SPI data in.
                                                                          I2C data I/O.
                                                          I/O   ST

RC5/SDO          16               24  43              26
    RC5
    SDO                                                   I/O   ST        Digital I/O.

                                                          O     --        SPI data out.

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

RC7/RX/DT        18               26  1               29
    RC7
    RX                                                    I/O   ST        Digital I/O.
    DT                                                                    USART asynchronous receive.
                                                          I     ST        USART synchronous data
                                                                          (see 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                                        Analog = Analog input
         P = Power
                                                          O     = Output

                                                          OD = Open-Drain (no P diode to VDD)

2006 Microchip Technology Inc.                                                         DS41159E-page 13
PIC18FXX8

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

     Pin Name                       Pin Number             Pin  Buffer           Description
                  PIC18F248/258 PIC18F448/458             Type   Type
                   SPDIP, SOIC PDIP TQFP PLCC

                                                                        PORTD is a bidirectional I/O port.
                                                                        These pins have TTL input buffers
                                                                        when external memory is enabled.

RD0/PSP0/C1IN+    --  19  38                          21
    RD0
    PSP0                                                  I/O   ST        Digital I/O.
    C1IN+
                                                          I/O TTL         Parallel Slave Port data.

                                                          I Analog        Comparator 1 input.

RD1/PSP1/C1IN-    --  20  39                          22
    RD1
    PSP1                                                  I/O   ST        Digital I/O.
    C1IN-
                                                          I/O TTL         Parallel Slave Port data.

                                                          I Analog        Comparator 1 input.

RD2/PSP2/C2IN+    --  21  40                          23
    RD2
    PSP2                                                  I/O   ST        Digital I/O.
    C2IN+
                                                          I/O TTL         Parallel Slave Port data.

                                                          I Analog        Comparator 2 input.

RD3/PSP3/C2IN-    --  22  41                          24
    RD3
    PSP3                                                  I/O   ST        Digital I/O.
    C2IN-
                                                          I/O TTL         Parallel Slave Port data.

                                                          I Analog        Comparator 2 input.

RD4/PSP4/ECCP1/   --  27  2                           30

P1A

RD4                                                       I/O   ST        Digital I/O.

PSP4                                                      I/O TTL         Parallel Slave Port data.

ECCP1                                                     I/O   ST        ECCP1 capture/compare.

P1A                                                       O     --        ECCP1 PWM output A.

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

                                                          O     --        ECCP1 PWM output B.

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

                                                          O     --        ECCP1 PWM output C.

RD7/PSP7/P1D      --  30  5                           33
    RD7
    PSP7                                                  I/O   ST        Digital I/O.
    P1D                                                                   Parallel Slave Port data.
                                                          I/O TTL         ECCP1 PWM output D.

                                                          O     --

Legend:  TTL = TTL compatible input                       CMOS = CMOS compatible input or output
         ST = Schmitt Trigger input with CMOS levels
         I = Input                                        Analog = Analog input
         P = Power
                                                          O     = Output

                                                          OD = Open-Drain (no P diode to VDD)

DS41159E-page 14                                                          2006 Microchip Technology Inc.
                                                                               PIC18FXX8

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

     Pin Name                       Pin Number             Pin  Buffer             Description
                  PIC18F248/258 PIC18F448/458             Type   Type
                   SPDIP, SOIC PDIP TQFP PLCC

                                                                        PORTE is a bidirectional I/O port.

RE0/AN5/RD        --              8   25              9

RE0                                                       I/O   ST        Digital I/O.

AN5                                                       I Analog        Analog input 5.

RD                                                        I     TTL       Read control for Parallel Slave

                                                                          Port (see WR and CS pins).

RE1/AN6/WR/C1OUT  --              9   26              10

RE1                                                       I/O   ST        Digital I/O.

AN6                                                       I Analog        Analog input 6.

WR                                                        I     TTL       Write control for Parallel Slave

                                                                          Port (see CS and RD pins).

C1OUT                                                     O Analog        Comparator 1 output.

RE2/AN7/CS/C2OUT  --              10  27              11

RE2                                                       I/O   ST        Digital I/O.
                                                                          Analog input 7.
AN7                                                       I Analog        Chip select control for Parallel
                                                                          Slave Port (see RD and WR
CS                                                        I     TTL       pins).
                                                                          Comparator 2 output.
    C2OUT                                                 O Analog
VSS
                  19, 8           12, 31 6, 29 13, 34     --    -- Ground reference for logic and

                                                                        I/O pins.

VDD               20              11, 32 7, 28 12, 35     --    -- 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                                        Analog = Analog input
         P = Power
                                                          O     = Output

                                                          OD = Open-Drain (no P diode to VDD)

2006 Microchip Technology Inc.                                                        DS41159E-page 15
PIC18FXX8

NOTES:

DS41159E-page 16   2006 Microchip Technology Inc.
                                                                            PIC18FXX8

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

The PIC18FXX8 can be operated in one of eight oscil-        C1(1)    OSC1
lator modes, programmable by three configuration bits
(FOSC2, FOSC1 and FOSC0).                                                                  To
                                                                                           Internal
1. LP    Low-Power Crystal                                         XTAL     RF(3)          Logic
2. XT    Crystal/Resonator
3. HS    High-Speed Crystal/Resonator                                RS(2)                Sleep
4. HS4   High-Speed Crystal/Resonator with
         PLL enabled                                        C2(1)    OSC2            PIC18FXX8
5. RC    External Resistor/Capacitor
6. RCIO  External Resistor/Capacitor with I/O           Note 1: See Table 2-1 and Table 2-2 for recommended
         pin enabled                                                 values of C1 and C2.
7. EC    External Clock
8. ECIO  External Clock with I/O pin enabled                    2: A series resistor (RS) may be required for AT
                                                                     strip cut crystals.

                                                                3: RF varies with the crystal chosen.

2.2 Crystal Oscillator/Ceramic                          TABLE 2-1: CERAMIC RESONATORS
         Resonators
                                                                     Ranges Tested:

In XT, LP, HS or HS4 (PLL) Oscillator modes, a crystal  Mode         Freq   OSC1           OSC2
or ceramic resonator is connected to the OSC1 and
OSC2 pins to establish oscillation. Figure 2-1 shows    XT         455 kHz 68-100 pF 68-100 pF
the pin connections. An external clock source may also
be connected to the OSC1 pin, as shown in Figure 2-3               2.0 MHz  15-68 pF 15-68 pF
and Figure 2-4.
                                                                   4.0 MHz  15-68 pF 15-68 pF
The PIC18FXX8 oscillator design requires the use of a
parallel cut crystal.                                   HS         8.0 MHz  10-68 pF 10-68 pF

                                                                   16.0 MHz 10-22 pF 10-22 pF

Note:    Use of a series cut crystal may give a fre-    These values are for design guidance only.
         quency out of the crystal manufacturer's       See notes following Table 2-2.
         specifications.
                                                                     Resonators Used:

                                                        455 kHz    Panasonic EFO-A455K04B  0.3%
                                                        2.0 MHz     Murata Erie CSA2.00MG  0.5%
                                                        4.0 MHz     Murata Erie CSA4.00MG  0.5%
                                                        8.0 MHz     Murata Erie CSA8.00MT  0.5%

                                                        16.0 MHz Murata Erie CSA16.00MX 0.5%
                                                        All resonators used did not have built-in capacitors.

2006 Microchip Technology Inc.                                                     DS41159E-page 17
PIC18FXX8

TABLE 2-2: CAPACITOR SELECTION FOR                       2.3 RC Oscillator
                     CRYSTAL OSCILLATOR
                                                         For timing insensitive applications, the "RC" and "RCIO"
Osc Type  Crystal   Cap. Range Cap. Range                device options offer additional cost savings. The RC
           Freq                                          oscillator frequency is a function of the supply voltage,
                    C1           C2                      the resistor (REXT) and capacitor (CEXT) values and the
                                                         operating temperature. In addition to this, the oscillator
LP        32.0 kHz  33 pF        33 pF                   frequency will vary from unit to unit due to normal
                                                         process parameter variation. Furthermore, the differ-
          200 kHz   15 pF        15 pF                   ence in lead frame capacitance between package types
                                                         will also affect the oscillation frequency, especially for
XT        200 kHz 47-68 pF 47-68 pF                      low CEXT values. The user also needs to take into
                                                         account variation due to tolerance of external R and C
          1.0 MHz   15 pF        15 pF                   components used. Figure 2-2 shows how the RC
                                                         combination is connected.
          4.0 MHz   15 pF        15 pF
                                                         In the RC Oscillator mode, the oscillator frequency
HS        4.0 MHz   15 pF        15 pF                   divided by 4 is available on the OSC2 pin. This signal
                                                         may be used for test purposes or to synchronize other
          8.0 MHz 15-33 pF 15-33 pF                      logic.

          20.0 MHz 15-33 pF 15-33 pF

          25.0 MHz 15-33 pF 15-33 pF

These values are for design guidance only.
See notes on this page.

                  Crystals Used

                                                         Note:       If the oscillator frequency divided by 4
                                                                     signal is not required in the application, it
32.0 kHz Epson C-001R32.768K-A   20 PPM                             is recommended to use RCIO mode to
                                 20 PPM                             save current.
200 kHz STD XTL 200.000KHz       50 PPM
                                 50 PPM
1.0 MHz   ECS ECS-10-13-1        30 PPM
                                 30 PPM
4.0 MHz   ECS ECS-40-20-1                                FIGURE 2-2:  RC OSCILLATOR MODE

8.0 MHz EPSON CA-301 8.000M-C

20.0 MHz EPSON CA-301 20.000M-C                                 VDD
                                                          REXT
Note 1: Recommended values of C1 and C2 are                           OSC1  PIC18FXX8
            identical to the ranges tested (Table 2-1).  CEXT
                                                         VSS                                  Internal
       2: Higher capacitance increases the stability                                            Clock
            of the oscillator but also increases the
            start-up time.                                                         OSC2/CLKO
                                                                     FOSC/4
       3: Since each resonator/crystal has its own
            characteristics, the user should consult     Recommended values: 3 k  REXT  100 k
            the resonator/crystal manufacturer for                                         CEXT > 20 pF
            appropriate values of external
            components.                                  The RCIO Oscillator mode functions like the RC mode,
                                                         except that the OSC2 pin becomes an additional
       4: Rs may be required in HS mode, as well         general purpose I/O pin. The I/O pin becomes bit 6 of
            as XT mode, to avoid overdriving crystals    PORTA (RA6).
            with low drive level specification.

DS41159E-page 18                                                       2006 Microchip Technology Inc.
                                                                                          PIC18FXX8

2.4 External Clock Input                                  FIGURE 2-4:                     EXTERNAL CLOCK INPUT
                                                                                          OPERATION (ECIO
The EC and ECIO Oscillator modes require an external          Clock from                  CONFIGURATION)
clock source to be connected to the OSC1 pin. The             Ext. System
feedback device between OSC1 and OSC2 is turned                                                  OSC1 PIC18FXX8
off in these modes to save current. There is no oscilla-
tor start-up time required after a Power-on Reset or                                              I/O (OSC2)
after a recovery from Sleep mode.
                                                          2.5 HS4 (PLL)
In the EC Oscillator mode, the oscillator frequency
divided by 4 is available on the OSC2 pin. This signal    A Phase Locked Loop circuit is provided as a program-
may be used for test purposes or to synchronize other     mable option for users that want to multiply the
logic. Figure 2-3 shows the pin connections for the EC    frequency of the incoming crystal oscillator signal by 4.
Oscillator mode.                                          For an input clock frequency of 10 MHz, the internal
                                                          clock frequency will be multiplied to 40 MHz. This is
FIGURE 2-3:             EXTERNAL CLOCK INPUT              useful for customers who are concerned with EMI due
                        OPERATION (EC OSC                 to high-frequency crystals.
                        CONFIGURATION)
                                                          The PLL can only be enabled when the oscillator
Clock from              OSC1 PIC18FXX8                    configuration bits are programmed for HS mode. If they
Ext. System                                               are programmed for any other mode, the PLL is not
                        OSC2                              enabled and the system clock will come directly from
                FOSC/4                                    OSC1.

The ECIO Oscillator mode functions like the EC mode,      The PLL is one of the modes of the FOSC2:FOSC0
except that the OSC2 pin becomes an additional            configuration bits. The oscillator mode is specified
general purpose I/O pin. Figure 2-4 shows the pin         during device programming.
connections for the ECIO Oscillator mode.
                                                          A PLL lock timer is used to ensure that the PLL has
                                                          locked before device execution starts. The PLL lock
                                                          timer has a time-out referred to as TPLL.

FIGURE 2-5:             PLL BLOCK DIAGRAM
                                                                  FOSC2:FOSC0 = 110

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

                                                          Divide by 4

2006 Microchip Technology Inc.                                                          DS41159E-page 19
PIC18FXX8

2.6 Oscillator Switching Feature                           2.6.1 SYSTEM CLOCK SWITCH BIT

The PIC18FXX8 devices include a feature that allows        The system clock source switching is performed under
the system clock source to be switched from the main       software control. The system clock switch bit, SCS
oscillator to an alternate low-frequency clock source.     (OSCCON register), controls the clock switching. When
For the PIC18FXX8 devices, this alternate clock source     the SCS bit is `0', the system clock source comes from
is the Timer1 oscillator. If a low-frequency crystal       the main oscillator selected by the FOSC2:FOSC0
(32 kHz, for example) has been attached to the Timer1      configuration bits. When the SCS bit is set, the system
oscillator pins and the Timer1 oscillator has been         clock source comes from the Timer1 oscillator. The SCS
enabled, the device can switch to a Low-Power Execu-       bit is cleared on all forms of Reset.
tion mode. Figure 2-6 shows a block diagram of the
system clock sources. The clock switching feature is           Note:     The Timer1 oscillator must be enabled to
enabled by programming the Oscillator Switching                          switch the system clock source. The
Enable (OSCSEN) bit in Configuration register,                           Timer1 oscillator is enabled by setting the
CONFIG1H, to a `0'. Clock switching is disabled in an                    T1OSCEN bit in the Timer1 Control regis-
erased device. See Section 12.2 "Timer1 Oscillator"                      ter (T1CON). If the Timer1 oscillator is not
for further details of the Timer1 oscillator and                         enabled, any write to the SCS bit will be
Section 24.1 "Configuration Bits" for Configuration                      ignored (SCS bit forced cleared) and the
register details.                                                        main oscillator continues to be the system
                                                                         clock source.

FIGURE 2-6:       DEVICE CLOCK SOURCES

                              PIC18FXX8

                  OSC2        Main Oscillator              4 x PLL       TOSC/4
                  OSC1                          Sleep         TOSC
                  T1OSO                                                          MUX      TSCLK
                  T1OSI       Timer 1 Oscillator
                                                           TT1P

                                     T1OSCEN                                     Clock
                                     Enable                                      Source

                                     Oscillator

                                                           Clock Source Option
                                                           for Other Modules

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

REGISTER 2-1: OSCCON: OSCILLATOR CONTROL REGISTER

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

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

                  bit 7                                                                          bit 0

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

                  When OSCSEN is clear or T1OSCEN is clear:
                  Bit is forced clear.

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

DS41159E-page 20                                                                      2006 Microchip Technology Inc.
                                                                                              PIC18FXX8

2.6.2 OSCILLATOR TRANSITIONS                                       The sequence of events that takes place when switch-
                                                                   ing from the Timer1 oscillator to the main oscillator will
The PIC18FXX8 devices contain circuitry to prevent                 depend on the mode of the main oscillator. In addition
"glitches" when switching between oscillator sources.              to eight clock cycles of the main oscillator, additional
Essentially, the circuitry waits for eight rising edges of         delays may take place.
the clock source that the processor is switching to. This
ensures that the new clock source is stable and that its           If the main oscillator is configured for an external
pulse width will not be less than the shortest pulse               crystal (HS, XT, LP), the transition will take place after
width of the two clock sources.                                    an oscillator start-up time (TOST) has occurred. A timing
                                                                   diagram indicating the transition from the Timer1
Figure 2-7 shows a timing diagram indicating the tran-             oscillator to the main oscillator for HS, XT and LP
sition from the main oscillator to the Timer1 oscillator.          modes is shown in Figure 2-8.
The Timer1 oscillator is assumed to be running all the
time. After the SCS bit is set, the processor is frozen at
the next occurring Q1 cycle. After eight synchronization
cycles are counted from the Timer1 oscillator,
operation resumes. No additional delays are required
after the synchronization cycles.

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

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

                                           TT1P

T1OSI                               1      234          5678
OSC1
                                                  Tscs

Internal            TOSC
System
Clock                         TDLY

SCS
(OSCCON<0>)

Program             PC                            PC + 2                                      PC + 4

Counter

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

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

                    Q3        Q4       Q1                                               TT1P  Q1 Q2 Q3 Q4 Q1 Q2 Q3

           T1OSI                                  TOST             1 2 34 567 8
            OSC1                                             TOSC                       TSCS

            OSC2
Internal System

             Clock
              SCS
(OSCCON<0>)

Program                   PC                                       PC + 2                             PC + 4
Counter

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

2006 Microchip Technology Inc.                                                              DS41159E-page 21
PIC18FXX8

If the main oscillator is configured for HS4 (PLL) mode,             If the main oscillator is configured in the RC, RCIO, EC
an oscillator start-up time (TOST) plus an additional PLL            or ECIO modes, there is no oscillator start-up time-out.
time-out (TPLL) will occur. The PLL time-out is typically            Operation will resume after eight cycles of the main
2 ms and allows the PLL to lock to the main oscillator               oscillator have been counted. A timing diagram indicat-
frequency. A timing diagram indicating the transition                ing the transition from the Timer1 oscillator to the main
from the Timer1 oscillator to the main oscillator for HS4            oscillator for RC, RCIO, EC and ECIO modes is shown
mode is shown in Figure 2-9.                                         in Figure 2-10.

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

                    Q4               Q1                                    TT1P      Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4

T1OSI
OSC1

                                         TOST      TPLL

OSC2

PLL Clock                                                    TOSC          TSCS
       Input
                                                                     1 2 34 56 78

Internal System
             Clock

              SCS
(OSCCON<0>)

Program             PC                                       PC + 2                  PC + 4
Counter

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

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

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

            T1OSI                                                    TOSC
            OSC1                                                     12 34 5 6 7 8
            OSC2
Internal System                          PC                                    TSCS  PC + 4
             Clock                                                         PC + 2

              SCS
(OSCCON<0>)

         Program
          Counter

Note 1: RC Oscillator mode assumed.

DS41159E-page 22                                                                      2006 Microchip Technology Inc.
                                                                           PIC18FXX8

2.7 Effects of Sleep Mode on the                          Reset until the device power supply and clock are
         On-Chip Oscillator                               stable. For additional information on Reset operation,
                                                          see Section 3.0 "Reset".
When the device executes a SLEEP instruction, the
on-chip clocks and oscillator are turned off and the      The first timer is the Power-up Timer (PWRT), which
device is held at the beginning of an instruction cycle   optionally provides a fixed delay of TPWRT (parameter
(Q1 state). With the oscillator off, the OSC1 and OSC2    #D033) on power-up only (POR and BOR). The second
signals will stop oscillating. Since all the transistor   timer is the Oscillator Start-up Timer (OST), intended to
switching currents have been removed, Sleep mode          keep the chip in Reset until the crystal oscillator is
achieves the lowest current consumption of the device     stable.
(only leakage currents). Enabling any on-chip feature
that will operate during Sleep will increase the current  With the PLL enabled (HS4 Oscillator mode), the time-
consumed during Sleep. The user can wake from             out sequence following a Power-on Reset is different
Sleep through external Reset, Watchdog Timer Reset        from other oscillator modes. The time-out sequence is
or through an interrupt.                                  as follows: the PWRT time-out is invoked after a POR
                                                          time delay has expired, then the Oscillator Start-up
2.8 Power-up Delays                                       Timer (OST) is invoked. However, this is still not a
                                                          sufficient amount of time to allow the PLL to lock at high
Power-up delays are controlled by two timers so that no   frequencies. The PWRT timer is used to provide an
external Reset circuitry is required for most applica-    additional fixed 2 ms (nominal) to allow the PLL ample
tions. The delays ensure that the device is kept in       time to lock to the incoming clock frequency.

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

      OSC Mode                    OSC1 Pin                                 OSC2 Pin

RC              Floating, external resistor should pull high At logic low

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

ECIO            Floating                                  Configured as PORTA, bit 6

EC              Floating                                  At logic low

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

                voltage level                             voltage level

Note: See Table 3-1 in Section 3.0 "Reset" for time-outs due to Sleep and MCLR Reset.

2006 Microchip Technology Inc.                                                       DS41159E-page 23
PIC18FXX8

NOTES:

DS41159E-page 24   2006 Microchip Technology Inc.
                                                                               PIC18FXX8

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

Most registers are unaffected by a Reset. Their status    The Enhanced MCU devices have a MCLR noise filter
is unknown on POR and unchanged by all other              in the MCLR Reset path. The filter will detect and
Resets. The other registers are forced to a "Reset"       ignore small pulses.

                                                          A WDT Reset does not drive MCLR pin low.

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

            RESET       Stack Full/Underflow Reset
         Instruction            External Reset

                Stack
               Pointer

MCLR                                       Sleep

                         WDT       WDT
                        Module     Time-out
                                   Reset

                        VDD Rise

                        Detect     Power-on Reset

VDD

                        Brown-out

                        Reset      BOREN                                       S

      OST/PWRT
                     OST

                                   10-bit Ripple Counter                       R       Chip_Reset
                                                                                  Q
OSC1

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

                                                                                  Enable PWRT
                                                                                  Enable OST(2)

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

2006 Microchip Technology Inc.                                                  DS41159E-page 25
PIC18FXX8

3.1 Power-on Reset (POR)                                   3.3 Power-up Timer (PWRT)

A Power-on Reset pulse is generated on-chip when a         The Power-up Timer provides a fixed nominal time-out
VDD rise is detected. To take advantage of the POR         (parameter #33), only on power-up from the POR. The
circuitry, connect the MCLR pin directly (or through a     Power-up Timer operates on an internal RC oscillator.
resistor) to VDD. This eliminates external RC compo-       The chip is kept in Reset as long as the PWRT is active.
nents usually needed to create a Power-on Reset            The PWRT's time delay allows VDD to rise to an accept-
delay. A minimum rise rate for VDD is specified (refer to  able level. A configuration bit (PWRTEN in CONFIG2L
parameter D004). For a slow rise time, see Figure 3-2.     register) is provided to enable/disable the PWRT.

When the device starts normal operation (exits the         The power-up time delay will vary from chip to chip due
Reset condition), device operating parameters              to VDD, temperature and process variation. See DC
(voltage, frequency, temperature, etc.) must be met to     parameter #33 for details.
ensure operation. If these conditions are not met, the
device must be held in Reset until the operating condi-    3.4 Oscillator Start-up Timer (OST)
tions are met. Brown-out Reset may be used to meet
the voltage start-up condition.                            The Oscillator Start-up Timer (OST) provides a 1024
                                                           oscillator cycle (from OSC1 input) delay after the
3.2 MCLR                                                   PWRT delay is over (parameter #32). This additional
                                                           delay ensures that the crystal oscillator or resonator
PIC18FXX8 devices have a noise filter in the MCLR          has started and stabilized.
Reset path. The filter will detect and ignore small
pulses.                                                    The OST time-out is invoked only for XT, LP, HS and
                                                           HS4 modes and only on Power-on Reset or wake-up
It should be noted that a WDT Reset does not drive         from Sleep.
MCLR pin low.
                                                           3.5 PLL Lock Time-out
The behavior of the ESD protection on the MCLR pin
differs from previous devices of this family. Voltages     With the PLL enabled, the time-out sequence following
applied to the pin that exceed its specification can       a Power-on Reset is different from other oscillator
result in both Resets and current draws outside of         modes. A portion of the Power-up Timer is used to pro-
device specification during the Reset event. For this      vide a fixed time-out that is sufficient for the PLL to lock
reason, Microchip recommends that the MCLR pin no          to the main oscillator frequency. This PLL lock time-out
longer be tied directly to VDD. The use of an RC           (TPLL) is typically 2 ms and follows the oscillator
network, as shown in Figure 3-2, is suggested.             start-up time-out (OST).

FIGURE 3-2:          EXTERNAL POWER-ON                     3.6 Brown-out Reset (BOR)
                     RESET CIRCUIT (FOR
                     SLOW VDD POWER-UP)                    A configuration bit, BOREN, can disable (if clear/
                                                           programmed), or enable (if set), the Brown-out Reset
             VDD                                           circuitry. If VDD falls below parameter D005 for greater
                                                           than parameter #35, the brown-out situation resets the
      D           R                                        chip. A Reset may not occur if VDD falls below param-
                                                           eter D005 for less than parameter #35. The chip will
                     R1                                    remain in Brown-out Reset until VDD rises above BVDD.
                                MCLR                       The Power-up Timer will then be invoked and will keep
                                                           the chip in Reset an additional time delay (parameter
                  C  PIC18FXXX                             #33). If VDD drops below BVDD while the Power-up
                                                           Timer is running, the chip will go back into a Brown-out
Note  1: External Power-on Reset circuit is required       Reset and the Power-up Timer will be initialized. Once
          only if the VDD power-up slope is too slow.      VDD rises above BVDD, the Power-up Timer will
          The diode D helps discharge the capacitor        execute the additional time delay.
          quickly when VDD powers down.

      2: R < 40 k is recommended to make sure that
          the voltage drop across R does not violate
          the device's electrical specification.

      3: R1 = 100 to 1 k will limit any current flow-
          ing into MCLR from external capacitor C, in
          the event of MCLR/VPP pin breakdown due to
          Electrostatic Discharge (ESD) or Electrical
          Overstress (EOS).

DS41159E-page 26                                           2006 Microchip Technology Inc.
                                                                                PIC18FXX8

3.7 Time-out Sequence                                         Since the time-outs occur from the POR pulse, if MCLR
                                                              is kept low long enough, the time-outs will expire.
On power-up, the time-out sequence is as follows:             Bringing MCLR high will begin execution immediately
First, PWRT time-out is invoked after the POR time            (Figure 3-5). This is useful for testing purposes or to
delay has expired, then OST is activated. The total           synchronize more than one PIC18FXX8 device
time-out will vary based on oscillator configuration and      operating in parallel.
the status of the PWRT. For example, in RC mode with
the PWRT disabled, there will be no time-out at all.          Table 3-2 shows the Reset conditions for some Special
Figure 3-3, Figure 3-4, Figure 3-5, Figure 3-6 and            Function Registers, while Table 3-3 shows the Reset
Figure 3-7 depict time-out sequences on power-up.             conditions for all registers.

TABLE 3-1: TIME-OUT IN VARIOUS SITUATIONS

  Oscillator                             Power-up(2)                                      Wake-up from
Configuration                                                                                 Sleep or
                                                                        Brown-out(2)
                                                                                        Oscillator Switch
                                  PWRTEN = 0          PWRTEN = 1

HS with PLL enabled(1) 72 ms + 1024 TOSC + 2 ms 1024 TOSC + 2 ms 72 ms + 1024 TOSC + 2 ms 1024 TOSC + 2 ms

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

           EC                     72 ms                   --             72 ms                 --

External RC                       72 ms                   --             72 ms                 --

Note 1: 2 ms = Nominal time required for the 4x PLL to lock.

2: 72 ms is the nominal Power-up Timer delay.

REGISTER 3-1:         RCON REGISTER BITS AND POSITIONS

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

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

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

Power-on Reset                    0000h 0--1 110q 1 1 1 0                       0       u          u

MCLR Reset during normal          0000h 0--0 011q u u u u                       u       u          u

operation

Software Reset during normal      0000h 0--0 011q 0 u u u                       u       u          u

operation

Stack Full Reset during normal    0000h 0--0 011q u u u 1                       1       u          1

operation

Stack Underflow Reset during      0000h 0--0 011q u u u 1                       1       1          u

normal operation

MCLR Reset during Sleep           0000h 0--0 011q u 1 0 u                       u       u          u

WDT Reset                         0000h 0--0 011q u 0 1 u                       u       u          u

WDT Wake-up                       PC + 2 0--1 101q u 0 0 u                      u       u          u

Brown-out Reset                   0000h 0--1 110q 1 1 1 u                       0       u          u

Interrupt wake-up from Sleep      PC + 2(1) 0--1 101q u 1 0 u                   u       u          u

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as `0'

Note 1: When the wake-up is due to an interrupt and the GIEH or GIEL bits are set, the PC is loaded with the
              interrupt vector (000008h or 000018h).

2006 Microchip Technology Inc.                                                        DS41159E-page 27
PIC18FXX8

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

                    VDD  TPWRT
                 MCLR
   INTERNAL POR                        TOST

PWRT TIME-OUT
    OST TIME-OUT

INTERNAL RESET

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

                    VDD         TPWRT
                 MCLR
    INTERNAL POR                             TOST

PWRT TIME-OUT
    OST TIME-OUT

INTERNAL RESET

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

                    VDD         TPWRT
                 MCLR
   INTERNAL POR                              TOST

PWRT TIME-OUT
    OST TIME-OUT

INTERNAL RESET

DS41159E-page 28                                    2006 Microchip Technology Inc.
                                                                     PIC18FXX8

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

                                                           5V

                        VDD       0V         1V

             MCLR

INTERNAL POR

                                      TPWRT

PWRT TIME-OUT

                                                               TOST

OST TIME-OUT

INTERNAL RESET

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

                   VDD                TPWRT
               MCLR
IINTERNAL POR                                   TOST

PWRT TIME-OUT                                                  TPLL
  OST TIME-OUT

     PLL TIME-OUT
INTERNAL RESET

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

2006 Microchip Technology Inc.                                     DS41159E-page 29
PIC18FXX8

TABLE 3-3: INITIALIZATION CONDITIONS FOR ALL REGISTERS

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

TOSU              PIC18F2X8 PIC18F4X8  ---0 0000        ---0 0000          ---0 uuuu(3)
TOSH              PIC18F2X8 PIC18F4X8  0000 0000        0000 0000          uuuu uuuu(3)
TOSL              PIC18F2X8 PIC18F4X8  0000 0000        0000 0000          uuuu uuuu(3)
STKPTR            PIC18F2X8 PIC18F4X8  00-0 0000        uu-0 0000          uu-u uuuu(3)

PCLATU            PIC18F2X8 PIC18F4X8  ---0 0000        ---0 0000          ---u uuuu

PCLATH            PIC18F2X8 PIC18F4X8  0000 0000        0000 0000          uuuu uuuu
PCL               PIC18F2X8 PIC18F4X8  0000 0000        0000 0000             PC + 2(2)

TBLPTRU           PIC18F2X8 PIC18F4X8  --00 0000        --00 0000          --uu uuuu

TBLPTRH           PIC18F2X8 PIC18F4X8  0000 0000        0000 0000          uuuu uuuu

TBLPTRL           PIC18F2X8 PIC18F4X8  0000 0000        0000 0000          uuuu uuuu

TABLAT            PIC18F2X8 PIC18F4X8  0000 0000        0000 0000          uuuu uuuu

PRODH             PIC18F2X8 PIC18F4X8  xxxx xxxx        uuuu uuuu          uuuu uuuu

PRODL             PIC18F2X8 PIC18F4X8  xxxx xxxx        uuuu uuuu          uuuu uuuu
INTCON            PIC18F2X8 PIC18F4X8  0000 000x        0000 000u          uuuu uuuu(1)
INTCON2           PIC18F2X8 PIC18F4X8  111- -1-1        111- -1-1          uuu- -u-u(1)
INTCON3           PIC18F2X8 PIC18F4X8  11-0 0-00        11-0 0-00          uu-u u-uu(1)

INDF0             PIC18F2X8 PIC18F4X8  N/A              N/A                N/A

POSTINC0          PIC18F2X8 PIC18F4X8  N/A              N/A                N/A

POSTDEC0          PIC18F2X8 PIC18F4X8  N/A              N/A                N/A

PREINC0           PIC18F2X8 PIC18F4X8  N/A              N/A                N/A

PLUSW0            PIC18F2X8 PIC18F4X8  N/A              N/A                N/A

FSR0H             PIC18F2X8 PIC18F4X8  ---- xxxx        ---- uuuu          ---- uuuu

FSR0L             PIC18F2X8 PIC18F4X8  xxxx xxxx        uuuu uuuu          uuuu uuuu

WREG              PIC18F2X8 PIC18F4X8  xxxx xxxx        uuuu uuuu          uuuu uuuu

INDF1             PIC18F2X8 PIC18F4X8  N/A              N/A                N/A

POSTINC1          PIC18F2X8 PIC18F4X8  N/A              N/A                N/A

POSTDEC1          PIC18F2X8 PIC18F4X8  N/A              N/A                N/A

PREINC1           PIC18F2X8 PIC18F4X8  N/A              N/A                N/A

PLUSW1            PIC18F2X8 PIC18F4X8  N/A              N/A                N/A

Legend:     u = unchanged, x = unknown, - = unimplemented bit, read as `0', q = value depends on condition.
Note 1:     Shaded cells indicate conditions do not apply for the designated device.
            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
        3:  interrupt vector (0008h or 0018h).
            When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the TOSU, TOSH and TOSL are
        4:  updated with the current value of the PC. The STKPTR is modified to point to the next location in the
        5:  hardware stack.
        6:  See Table 3-2 for Reset value for specific condition.
            Bit 6 of PORTA, LATA and TRISA are enabled in ECIO and RCIO Oscillator modes only. In all other
            oscillator modes, they are disabled and read `0'.
            Values for CANSTAT also apply to its other instances (CANSTATRO1 through CANSTATRO4).

DS41159E-page 30                                              2006 Microchip Technology Inc.
                                                                     PIC18FXX8

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

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

FSR1H          PIC18F2X8 PIC18F4X8  ---- xxxx                   ---- uuuu                       ---- uuuu

FSR1L          PIC18F2X8 PIC18F4X8  xxxx xxxx                   uuuu uuuu                       uuuu uuuu

BSR            PIC18F2X8 PIC18F4X8  ---- 0000                   ---- 0000                       ---- uuuu

INDF2          PIC18F2X8 PIC18F4X8  N/A                         N/A                             N/A

POSTINC2       PIC18F2X8 PIC18F4X8  N/A                         N/A                             N/A

POSTDEC2       PIC18F2X8 PIC18F4X8  N/A                         N/A                             N/A

PREINC2        PIC18F2X8 PIC18F4X8  N/A                         N/A                             N/A

PLUSW2         PIC18F2X8 PIC18F4X8  N/A                         N/A                             N/A

FSR2H          PIC18F2X8 PIC18F4X8  ---- xxxx                   ---- uuuu                       ---- uuuu

FSR2L          PIC18F2X8 PIC18F4X8  xxxx xxxx                   uuuu uuuu                       uuuu uuuu

STATUS         PIC18F2X8 PIC18F4X8  ---x xxxx                   ---u uuuu                       ---u uuuu

TMR0H          PIC18F2X8 PIC18F4X8  0000 0000                   0000 0000                       uuuu uuuu

TMR0L          PIC18F2X8 PIC18F4X8  xxxx xxxx                   uuuu uuuu                       uuuu uuuu

T0CON          PIC18F2X8 PIC18F4X8  1111 1111                   1111 1111                       uuuu uuuu

OSCCON         PIC18F2X8 PIC18F4X8  ---- ---0                   ---- ---0                       ---- ---u

LVDCON         PIC18F2X8 PIC18F4X8  --00 0101                   --00 0101                       --uu uuuu

WDTCON         PIC18F2X8 PIC18F4X8  ---- ---0                   ---- ---0                       ---- ---u
RCON(4)        PIC18F2X8 PIC18F4X8  0--1 110q                   0--0 011q                       0--1 101q

TMR1H          PIC18F2X8 PIC18F4X8  xxxx xxxx                   uuuu uuuu                       uuuu uuuu

TMR1L          PIC18F2X8 PIC18F4X8  xxxx xxxx                   uuuu uuuu                       uuuu uuuu

T1CON          PIC18F2X8 PIC18F4X8  0-00 0000                   u-uu uuuu                       u-uu uuuu

TMR2           PIC18F2X8 PIC18F4X8  0000 0000                   0000 0000                       uuuu uuuu

PR2            PIC18F2X8 PIC18F4X8  1111 1111                   1111 1111                       1111 1111

T2CON          PIC18F2X8 PIC18F4X8  -000 0000                   -000 0000                       -uuu uuuu

SSPBUF         PIC18F2X8 PIC18F4X8  xxxx xxxx                   uuuu uuuu                       uuuu uuuu

SSPADD         PIC18F2X8 PIC18F4X8  0000 0000                   0000 0000                       uuuu uuuu

SSPSTAT        PIC18F2X8 PIC18F4X8  0000 0000                   0000 0000                       uuuu uuuu

SSPCON1        PIC18F2X8 PIC18F4X8  0000 0000                   0000 0000                       uuuu uuuu

SSPCON2        PIC18F2X8 PIC18F4X8  0000 0000                   0000 0000                       uuuu uuuu

ADRESH         PIC18F2X8 PIC18F4X8  xxxx xxxx                   uuuu uuuu                       uuuu uuuu

ADRESL         PIC18F2X8 PIC18F4X8  xxxx xxxx                   uuuu uuuu                       uuuu uuuu

ADCON0         PIC18F2X8 PIC18F4X8  0000 00-0                   0000 00-0                       uuuu uu-u

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 3-2 for Reset value for specific condition.

      5: Bit 6 of PORTA, LATA and TRISA are enabled in ECIO and RCIO Oscillator modes only. In all other
            oscillator modes, they are disabled and read `0'.

      6: Values for CANSTAT also apply to its other instances (CANSTATRO1 through CANSTATRO4).

2006 Microchip Technology Inc.                                                                DS41159E-page 31
PIC18FXX8

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

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

ADCON1            PIC18F2X8 PIC18F4X8  00-- 0000                00-- 0000                       uu-- uuuu

CCPR1H            PIC18F2X8 PIC18F4X8  xxxx xxxx                uuuu uuuu                       uuuu uuuu

CCPR1L            PIC18F2X8 PIC18F4X8  xxxx xxxx                uuuu uuuu                       uuuu uuuu

CCP1CON           PIC18F2X8 PIC18F4X8  --00 0000                --00 0000                       --uu uuuu

ECCPR1H           PIC18F2X8 PIC18F4X8  xxxx xxxx                uuuu uuuu                       uuuu uuuu

ECCPR1L           PIC18F2X8 PIC18F4X8  xxxx xxxx                uuuu uuuu                       uuuu uuuu

ECCP1CON          PIC18F2X8 PIC18F4X8  0000 0000                0000 0000                       0000 0000

ECCP1DEL          PIC18F2X8 PIC18F4X8  0000 0000                0000 0000                       0000 0000

ECCPAS            PIC18F2X8 PIC18F4X8  0000 0000                0000 0000                       0000 0000

CVRCON            PIC18F2X8 PIC18F4X8  0000 0000                0000 0000                       uuuu uuuu

CMCON             PIC18F2X8 PIC18F4X8  0000 0000                0000 0000                       uuuu uuuu

TMR3H             PIC18F2X8 PIC18F4X8  xxxx xxxx                uuuu uuuu                       uuuu uuuu

TMR3L             PIC18F2X8 PIC18F4X8  xxxx xxxx                uuuu uuuu                       uuuu uuuu

T3CON             PIC18F2X8 PIC18F4X8  0000 0000                uuuu uuuu                       uuuu uuuu

SPBRG             PIC18F2X8 PIC18F4X8  0000 0000                0000 0000                       uuuu uuuu

RCREG             PIC18F2X8 PIC18F4X8  0000 0000                0000 0000                       uuuu uuuu

TXREG             PIC18F2X8 PIC18F4X8  0000 0000                0000 0000                       uuuu uuuu

TXSTA             PIC18F2X8 PIC18F4X8  0000 -010                0000 -010                       uuuu -uuu

RCSTA             PIC18F2X8 PIC18F4X8  0000 000x                0000 000u                       uuuu uuuu

EEADR             PIC18F2X8 PIC18F4X8  xxxx xxxx                uuuu uuuu                       uuuu uuuu

EEDATA            PIC18F2X8 PIC18F4X8  xxxx xxxx                uuuu uuuu                       uuuu uuuu

EECON2            PIC18F2X8 PIC18F4X8  xxxx xxxx                uuuu uuuu                       uuuu uuuu

EECON1            PIC18F2X8 PIC18F4X8  xx-0 x000                uu-0 u000                       uu-0 u000

IPR3              PIC18F2X8 PIC18F4X8  1111 1111                1111 1111                       uuuu uuuu

PIR3              PIC18F2X8 PIC18F4X8  0000 0000                0000 0000                       uuuu uuuu

PIE3              PIC18F2X8 PIC18F4X8  0000 0000                0000 0000                       uuuu uuuu

IPR2              PIC18F2X8 PIC18F4X8  -1-1 1111                -1-1 1111                       -u-u uuuu
PIR2              PIC18F2X8 PIC18F4X8  -0-0 0000                -0-0 0000                       -u-u uuuu(1)

PIE2              PIC18F2X8 PIC18F4X8  -0-0 0000                -0-0 0000                       -u-u uuuu

IPR1              PIC18F2X8 PIC18F4X8  1111 1111                1111 1111                       uuuu uuuu
PIR1              PIC18F2X8 PIC18F4X8  0000 0000                0000 0000                       uuuu uuuu(1)

PIE1              PIC18F2X8 PIC18F4X8  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 3-2 for Reset value for specific condition.

      5: Bit 6 of PORTA, LATA and TRISA are enabled in ECIO and RCIO Oscillator modes only. In all other
            oscillator modes, they are disabled and read `0'.

      6: Values for CANSTAT also apply to its other instances (CANSTATRO1 through CANSTATRO4).

DS41159E-page 32                                                 2006 Microchip Technology Inc.
                                                                           PIC18FXX8

TABLE 3-3:       INITIALIZATION CONDITIONS FOR ALL REGISTERS (CONTINUED)
       Register
                 Applicable Devices   Power-on Reset,              MCLR Reset      Wake-up via WDT
                                      Brown-out Reset               WDT Reset          or Interrupt
                                                                RESET Instruction
                                                                   Stack Resets

TRISE            PIC18F2X8 PIC18F4X8  0000 -111                 0000 -111                       uuuu -uuu

TRISD            PIC18F2X8 PIC18F4X8  1111 1111                 1111 1111                       uuuu uuuu

TRISC            PIC18F2X8 PIC18F4X8  1111 1111                 1111 1111                       uuuu uuuu

TRISB            PIC18F2X8 PIC18F4X8  1111 1111                 1111 1111                       uuuu uuuu
TRISA(5)         PIC18F2X8 PIC18F4X8  -111 1111(5)              -111 1111(5)                    -uuu uuuu(5)

LATE             PIC18F2X8 PIC18F4X8  ---- -xxx                 ---- -uuu                       ---- -uuu

LATD             PIC18F2X8 PIC18F4X8  xxxx xxxx                 uuuu uuuu                       uuuu uuuu

LATC             PIC18F2X8 PIC18F4X8  xxxx xxxx                 uuuu uuuu                       uuuu uuuu

LATB             PIC18F2X8 PIC18F4X8  xxxx xxxx                 uuuu uuuu                       uuuu uuuu
LATA(5)          PIC18F2X8 PIC18F4X8  -xxx xxxx(5)              -uuu uuuu(5)                    -uuu uuuu(5)

PORTE            PIC18F2X8 PIC18F4X8  ---- -xxx                 ---- -000                       ---- -uuu

PORTD            PIC18F2X8 PIC18F4X8  xxxx xxxx                 uuuu uuuu                       uuuu uuuu

PORTC            PIC18F2X8 PIC18F4X8  xxxx xxxx                 uuuu uuuu                       uuuu uuuu

PORTB            PIC18F2X8 PIC18F4X8  xxxx xxxx                 uuuu uuuu                       uuuu uuuu
PORTA(5)         PIC18F2X8 PIC18F4X8  -x0x 0000(5)              -u0u 0000(5)                    -uuu uuuu(5)

TXERRCNT         PIC18F2X8 PIC18F4X8  0000 0000                 0000 0000                       uuuu uuuu

RXERRCNT         PIC18F2X8 PIC18F4X8  0000 0000                 0000 0000                       uuuu uuuu

COMSTAT          PIC18F2X8 PIC18F4X8  0000 0000                 0000 0000                       uuuu uuuu

CIOCON           PIC18F2X8 PIC18F4X8  --00 ----                 --00 ----                       --uu ----

BRGCON3          PIC18F2X8 PIC18F4X8  -0-- -000                 -0-- -000                       -u-- -uuu

BRGCON2          PIC18F2X8 PIC18F4X8  0000 0000                 0000 0000                       uuuu uuuu

BRGCON1          PIC18F2X8 PIC18F4X8  0000 0000                 0000 0000                       uuuu uuuu

CANCON           PIC18F2X8 PIC18F4X8  xxxx xxx-                 uuuu uuu-                       uuuu uuu-
CANSTAT(6)       PIC18F2X8 PIC18F4X8  xxx- xxx-                 uuu- uuu-                       uuu- uuu-

RXB0D7           PIC18F2X8 PIC18F4X8  xxxx xxxx                 uuuu uuuu                       uuuu uuuu

RXB0D6           PIC18F2X8 PIC18F4X8  xxxx xxxx                 uuuu uuuu                       uuuu uuuu

RXB0D5           PIC18F2X8 PIC18F4X8  xxxx xxxx                 uuuu uuuu                       uuuu uuuu

RXB0D4           PIC18F2X8 PIC18F4X8  xxxx xxxx                 uuuu uuuu                       uuuu uuuu

RXB0D3           PIC18F2X8 PIC18F4X8  xxxx xxxx                 uuuu uuuu                       uuuu uuuu

RXB0D2           PIC18F2X8 PIC18F4X8  xxxx xxxx                 uuuu uuuu                       uuuu uuuu

RXB0D1           PIC18F2X8 PIC18F4X8  xxxx xxxx                 uuuu uuuu                       uuuu uuuu

RXB0D0           PIC18F2X8 PIC18F4X8  xxxx xxxx                 uuuu uuuu                       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 3-2 for Reset value for specific condition.

      5: Bit 6 of PORTA, LATA and TRISA are enabled in ECIO and RCIO Oscillator modes only. In all other
            oscillator modes, they are disabled and read `0'.

      6: Values for CANSTAT also apply to its other instances (CANSTATRO1 through CANSTATRO4).

2006 Microchip Technology Inc.                                                                DS41159E-page 33
PIC18FXX8

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

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

RXB0DLC           PIC18F2X8 PIC18F4X8  -xxx xxxx          -uuu uuuu                             -uuu uuuu

RXB0EIDL          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXB0EIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXB0SIDL          PIC18F2X8 PIC18F4X8  xxxx x-xx          uuuu u-uu                             uuuu u-uu

RXB0SIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXB0CON           PIC18F2X8 PIC18F4X8  000- 0000          000- 0000                             uuu- uuuu

RXB1D7            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXB1D6            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXB1D5            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXB1D4            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXB1D3            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXB1D2            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXB1D1            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXB1D0            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXB1DLC           PIC18F2X8 PIC18F4X8  -xxx xxxx          -uuu uuuu                             -uuu uuuu

RXB1EIDL          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXB1EIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXB1SIDL          PIC18F2X8 PIC18F4X8  xxxx x-xx          uuuu u-uu                             uuuu u-uu

RXB1SIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXB1CON           PIC18F2X8 PIC18F4X8  000- 0000          000- 0000                             uuu- uuuu

TXB0D7            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

TXB0D6            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

TXB0D5            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

TXB0D4            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

TXB0D3            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

TXB0D2            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

TXB0D1            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

TXB0D0            PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

TXB0DLC           PIC18F2X8 PIC18F4X8  -x-- xxxx          -u-- uuuu                             -u-- uuuu

TXB0EIDL          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

TXB0EIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

TXB0SIDL          PIC18F2X8 PIC18F4X8  xxx- x-xx          uuu- u-uu                             uuu- u-uu

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 3-2 for Reset value for specific condition.

5: Bit 6 of PORTA, LATA and TRISA are enabled in ECIO and RCIO Oscillator modes only. In all other
      oscillator modes, they are disabled and read `0'.

6: Values for CANSTAT also apply to its other instances (CANSTATRO1 through CANSTATRO4).

DS41159E-page 34                                           2006 Microchip Technology Inc.
                                                          PIC18FXX8

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

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

TXB0SIDH  PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB0CON   PIC18F2X8 PIC18F4X8     -000 0-00               -000 0-00                             -uuu u-uu

TXB1D7    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB1D6    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB1D5    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB1D4    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB1D3    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB1D2    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB1D1    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB1D0    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB1DLC   PIC18F2X8 PIC18F4X8     -x-- xxxx               -u-- uuuu                             -u-- uuuu

TXB1EIDL  PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB1EIDH  PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB1SIDL  PIC18F2X8 PIC18F4X8     xxx- x-xx               uuu- u-uu                             uuu- u-uu

TXB1SIDH  PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB1CON   PIC18F2X8 PIC18F4X8     0000 0000               0000 0000                             uuuu uuuu

TXB2D7    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB2D6    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB2D5    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB2D4    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB2D3    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB2D2    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB2D1    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB2D0    PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB2DLC   PIC18F2X8 PIC18F4X8     -x-- xxxx               -u-- uuuu                             -u-- uuuu

TXB2EIDL  PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB2EIDH  PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB2SIDL  PIC18F2X8 PIC18F4X8     xxx- x-xx               uuu- u-uu                             uuu- u-uu

TXB2SIDH  PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

TXB2CON   PIC18F2X8 PIC18F4X8     -000 0-00               -000 0-00                             -uuu u-uu

RXM1EIDL  PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             uuuu uuuu

RXM1EIDH  PIC18F2X8 PIC18F4X8     xxxx xxxx               uuuu uuuu                             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 3-2 for Reset value for specific condition.

5: Bit 6 of PORTA, LATA and TRISA are enabled in ECIO and RCIO Oscillator modes only. In all other
      oscillator modes, they are disabled and read `0'.

6: Values for CANSTAT also apply to its other instances (CANSTATRO1 through CANSTATRO4).

2006 Microchip Technology Inc.                                                                DS41159E-page 35
PIC18FXX8

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

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

RXM1SIDL          PIC18F2X8 PIC18F4X8  xxx- --xx          uuu- --uu                             uuu- --uu

RXM1SIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXM0EIDL          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXM0EIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXM0SIDL          PIC18F2X8 PIC18F4X8  xxx- --xx          uuu- --uu                             uuu- --uu

RXM0SIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF5EIDL          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF5EIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF5SIDL          PIC18F2X8 PIC18F4X8  xxx- x-xx          uuu- u-uu                             uuu- u-uu

RXF5SIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF4EIDL          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF4EIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF4SIDL          PIC18F2X8 PIC18F4X8  xxx- x-xx          uuu- u-uu                             uuu- u-uu

RXF4SIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF3EIDL          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF3EIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF3SIDL          PIC18F2X8 PIC18F4X8  xxx- x-xx          uuu- u-uu                             uuu- u-uu

RXF3SIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF2EIDL          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF2EIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF2SIDL          PIC18F2X8 PIC18F4X8  xxx- x-xx          uuu- u-uu                             uuu- u-uu

RXF2SIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF1EIDL          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF1EIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF1SIDL          PIC18F2X8 PIC18F4X8  xxx- x-xx          uuu- u-uu                             uuu- u-uu

RXF1SIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF0EIDL          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF0EIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             uuuu uuuu

RXF0SIDL          PIC18F2X8 PIC18F4X8  xxx- x-xx          uuu- u-uu                             uuu- u-uu

RXF0SIDH          PIC18F2X8 PIC18F4X8  xxxx xxxx          uuuu uuuu                             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 3-2 for Reset value for specific condition.

5: Bit 6 of PORTA, LATA and TRISA are enabled in ECIO and RCIO Oscillator modes only. In all other
      oscillator modes, they are disabled and read `0'.

6: Values for CANSTAT also apply to its other instances (CANSTATRO1 through CANSTATRO4).

DS41159E-page 36                                           2006 Microchip Technology Inc.
                                                                                       PIC18FXX8

4.0 MEMORY ORGANIZATION                                          Figure 4-1 shows the diagram for program memory
                                                                 map and stack for the PIC18F248 and PIC18F448.
There are three memory blocks in Enhanced MCU                    Figure 4-2 shows the diagram for the program memory
devices. These memory blocks are:                                map and stack for the PIC18F258 and PIC18F458.

Enhanced Flash Program Memory                                  4.1.1  INTERNAL PROGRAM MEMORY
Data Memory                                                           OPERATION
EEPROM Data Memory
                                                                 The PIC18F258 and the PIC18F458 have 32 Kbytes of
Data and program memory use separate busses,                     internal Enhanced Flash program memory. This means
which allows concurrent access of these blocks.                  that the PIC18F258 and the PIC18F458 can store up to
Additional detailed information on data EEPROM and               16K of single-word instructions. The PIC18F248 and
Flash program memory is provided in Section 5.0                  PIC18F448 have 16 Kbytes of Enhanced Flash
"Data EEPROM Memory" and Section 6.0 "Flash                      program memory. This translates into 8192 single-word
Program Memory", respectively.                                   instructions, which can be stored in the program
                                                                 memory. Accessing a location between the physically
4.1 Program Memory Organization                                  implemented memory and the 2-Mbyte address will
                                                                 cause a read of all `0's (a NOP instruction).
The PIC18F258/458 devices have a 21-bit program
counter that is capable of addressing a 2-Mbyte
program memory space.

The Reset vector address is at 0000h and the interrupt
vector addresses are at 0008h and 0018h.

FIGURE 4-1:        PROGRAM MEMORY MAP                            FIGURE 4-2:        PROGRAM MEMORY MAP
                   AND STACK FOR                                                    AND STACK FOR
                   PIC18F248/448                                                    PIC18F258/458

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

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

RETFIE,RETLW                                                     RETFIE,RETLW

              Stack Level 1                                                    Stack Level 1

                                                                                  
                                                                                  
                                                                                    

              Stack Level 31                                                   Stack Level 31

              Reset Vector          0000h                                      Reset Vector       0000h

High Priority Interrupt Vector 0008h                                    High Priority Interrupt Vector 0008h
Low Priority Interrupt Vector 0018h
                                                                        Low Priority Interrupt Vector 0018h

                   On-Chip
             Program Memory

                                    3FFFh                                           On-Chip
                                    4000h                                     Program Memory

                                                                 User Memory Space
                                                                                                                                                                User Memory Space
                             Read `0'                                                                     7FFFh
                                                                                                          8000h
                                                        1FFFFFh
                                                        200000h                Read `0'
2006 Microchip Technology Inc.
                                                                                                          1FFFFFh
                                                                                                          200000h
                                                                                                         DS41159E-page 37
PIC18FXX8                                                  4.2.2  RETURN STACK POINTER
                                                                  (STKPTR)
4.2 Return Address Stack
                                                           The STKPTR register contains the Stack Pointer value,
The return address stack allows any combination of up      the STKFUL (Stack Full) status bit and the STKUNF
to 31 program calls and interrupts to occur. The PC        (Stack Underflow) status bits. Register 4-1 shows the
(Program Counter) is pushed onto the stack when a          STKPTR register. The value of the Stack Pointer can be
PUSH, CALL or RCALL instruction is executed, or an         0 through 31. The Stack Pointer increments when val-
interrupt is Acknowledged. The PC value is pulled off      ues are pushed onto the stack and decrements when
the stack on a RETURN, RETLW or a RETFIE instruc-          values are popped off the stack. At Reset, the Stack
tion. PCLATU and PCLATH are not affected by any of         Pointer value will be `0'. The user may read and write
the RETURN instructions.                                   the Stack Pointer value. This feature can be used by a
                                                           Real-Time Operating System for return stack
The stack operates as a 31-word by 21-bit stack            maintenance.
memory and a 5-bit Stack Pointer register, with the
Stack Pointer initialized to 00000b after all Resets.      After the PC is pushed onto the stack 31 times (without
There is no RAM associated with Stack Pointer              popping any values off the stack), the STKFUL bit is
00000b. This is only a Reset value. During a CALL type     set. The STKFUL bit can only be cleared in software or
instruction, causing a push onto the stack, the Stack      by a POR.
Pointer is first incremented and the RAM location
pointed to by the Stack Pointer is written with the con-   The action that takes place when the stack becomes
tents of the PC. During a RETURN type instruction,         full depends on the state of the STVREN (Stack Over-
causing a pop from the stack, the contents of the RAM      flow Reset Enable) configuration bit. Refer to
location indicated by the STKPTR are transferred to the    Section 21.0 "Comparator Module" for a description
PC and then the Stack Pointer is decremented.              of the device configuration bits. If STVREN is set
                                                           (default), the 31st push will push the (PC + 2) value
The stack space is not part of either program or data      onto the stack, set the STKFUL bit and reset the
space. The Stack Pointer is readable and writable and      device. The STKFUL bit will remain set and the Stack
the data on the top of the stack is readable and writable  Pointer will be set to `0'.
through SFR registers. Status bits indicate if the stack
pointer is at or beyond the 31 levels provided.            If STVREN is cleared, the STKFUL bit will be set on the
                                                           31st push and the Stack Pointer will increment to 31.
4.2.1 TOP-OF-STACK ACCESS                                  The 32nd push will overwrite the 31st push (and so on),
                                                           while STKPTR remains at 31.
The top of the stack is readable and writable. Three
register locations, TOSU, TOSH and TOSL allow              When the stack has been popped enough times to
access to the contents of the stack location indicated by  unload the stack, the next pop will return a value of zero
the STKPTR register. This allows users to implement a      to the PC and sets the STKUNF bit, while the stack
software stack, if necessary. After a CALL, RCALL or       pointer remains at `0'. The STKUNF bit will remain set
interrupt, the software can read the pushed value by       until cleared in software or a POR occurs.
reading the TOSU, TOSH and TOSL registers. These
values can be placed on a user defined software stack.     Note:  Returning a value of zero to the PC on an
At return time, the software can replace the TOSU,                underflow has the effect of vectoring the
TOSH and TOSL and do a return.                                    program to the Reset vector, where the
                                                                  stack conditions can be verified and
The user should disable the global interrupt enable bits          appropriate actions can be taken.
during this time to prevent inadvertent stack
operations.

DS41159E-page 38                                                   2006 Microchip Technology Inc.
                                                                                PIC18FXX8

REGISTER 4-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
                                                                       SP3       SP2    SP1    SP0
               STKFUL STKUNF             --    SP4
                                                                                                   bit 0
               bit 7

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

bit 6 STKUNF: Stack Underflow Flag bit
            1 = Stack underflow occurred
            0 = Stack underflow did not occur

bit 5 Unimplemented: Read as `0'
bit 4-0 SP4:SP0: Stack Pointer Location bits

               Note: Bit 7 and bit 6 need to be cleared following a stack underflow or a stack overflow.

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

FIGURE 4-3:    RETURN ADDRESS STACK AND ASSOCIATED REGISTERS

                                               Return Address Stack

               TOSU               TOSH   TOSL                         11111
                00h                1Ah    34h                         11110
                                                                      11101

                                                                                 STKPTR<4:0>

                                                                                     00010

                                         Top-of-Stack 001A34h         00011
                                                            000D58h   00010
                                                             000000h  00001
                                                                      00000(1)

               Note 1: No RAM associated with this address; always maintained `0's.

2006 Microchip Technology Inc.                                                              DS41159E-page 39
PIC18FXX8                                                      EXAMPLE 4-1:       FAST REGISTER STACK
                                                                                  CODE EXAMPLE
4.2.3 PUSH AND POP INSTRUCTIONS                                 CALL SUB1, FAST
                                                                                   ;STATUS, WREG, BSR
Since the Top-of-Stack (TOS) is readable and writable,                            ;SAVED IN FAST REGISTER
the ability to push values onto the stack and pull values                         ;STACK
off the stack, without disturbing normal program execu-
tion, is a desirable option. To push the current PC value      SUB1              ;RESTORE VALUES SAVED
onto the stack, a PUSH instruction can be executed.                              ;IN FAST REGISTER STACK
This will increment the Stack Pointer and load the                          
current PC value onto the stack. TOSU, TOSH and
TOSL can then be modified to place a return address                  RETURN FAST
on the stack.
                                                               4.4 PCL, PCLATH and PCLATU
The POP instruction discards the current TOS by decre-
menting the Stack Pointer. The previous value pushed           The Program Counter (PC) specifies the address of the
onto the stack then becomes the TOS value.                     instruction to fetch for execution. The PC is 21 bits
                                                               wide. The low byte is called the PCL register. This reg-
4.2.4 STACK FULL/UNDERFLOW RESETS                              ister is readable and writable. The high byte is called
                                                               the PCH register. This register contains the PC<15:8>
These Resets are enabled by programming the                    bits and is not directly readable or writable. Updates to
STVREN configuration bit. When the STVREN bit is               the PCH register may be performed through the
disabled, a full or underflow condition will set the appro-    PCLATH register. The upper byte is called PCU. This
priate STKFUL or STKUNF bit, but not cause a device            register contains the PC<20:16> bits and is not directly
Reset. When the STVREN bit is enabled, a full or               readable or writable. Updates to the PCU register may
underflow condition will set the appropriate STKFUL or         be performed through the PCLATU register.
STKUNF bit and then cause a device Reset. The
STKFUL or STKUNF bits are only cleared by the user             The PC addresses bytes in the program memory. To
software or a POR.                                             prevent the PC from becoming misaligned with word
                                                               instructions, the LSb of PCL is fixed to a value of `0'.
4.3 Fast Register Stack                                        The PC increments by 2 to address sequential
                                                               instructions in the program memory.
A "fast return" option is available for interrupts and
calls. A fast register stack is provided for the Status,       The CALL, RCALL, GOTO and program branch
WREG and BSR registers and is only one layer in                instructions write to the program counter directly. For
depth. The stack is not readable or writable and is            these instructions, the contents of PCLATH and
loaded with the current value of the corresponding             PCLATU are not transferred to the program counter.
register when the processor vectors for an interrupt.
The values in the fast register stack are then loaded          The contents of PCLATH and PCLATU will be
back into the working registers if the FAST RETURN             transferred to the program counter by an operation that
instruction is used to return from the interrupt.              writes PCL. Similarly, the upper two bytes of the
                                                               program counter will be transferred to PCLATH and
A low or high priority interrupt source will push values       PCLATU by an operation that reads PCL. This is useful
into the stack registers. If both low and high priority        for computed offsets to the PC (see Section 4.8.1
interrupts are enabled, the stack registers cannot be          "Computed GOTO").
used reliably for low priority interrupts. If a high priority
interrupt occurs while servicing a low priority interrupt,
the stack register values stored by the low priority
interrupt will be overwritten.

If high priority interrupts are not disabled during low
priority interrupts, users must save the key registers in
software during a low priority interrupt.

If no interrupts are used, the fast register stack can be
used to restore the Status, WREG and BSR registers at
the end of a subroutine call. To use the fast register
stack for a subroutine call, a FAST CALL instruction
must be executed.

Example 4-1 shows a source code example that uses
the fast register stack.

DS41159E-page 40                                                                   2006 Microchip Technology Inc.
                                                                         PIC18FXX8

4.5 Clocking Scheme/Instruction
         Cycle

The clock input (from OSC1) is internally divided by
four to generate four non-overlapping quadrature
clocks, namely Q1, Q2, Q3 and Q4. Internally, the
Program Counter (PC) is incremented every Q1, the
instruction is fetched from the program memory and
latched into the instruction register in Q4. The instruc-
tion is decoded and executed during the following Q1
through Q4. The clocks and instruction execution flow
are shown in Figure 4-4.

FIGURE 4-4:       CLOCK/INSTRUCTION CYCLE

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

4.6 Instruction Flow/Pipelining                             4.7 Instructions in Program Memory

An "Instruction Cycle" consists of four Q cycles (Q1,       The program memory is addressed in bytes. Instruc-
Q2, Q3 and Q4). The instruction fetch and execute are       tions are stored as two bytes or four bytes in program
pipelined such that fetch takes one instruction cycle,      memory. The Least Significant Byte of an instruction
while decode and execute take another instruction           word is always stored in a program memory location
cycle. However, due to the pipelining, each instruction     with an even address (LSB = 0). Figure 4-3 shows an
effectively executes in one cycle. If an instruction        example of how instruction words are stored in the
causes the program counter to change (e.g., GOTO),          program memory. To maintain alignment with instruc-
two cycles are required to complete the instruction         tion boundaries, the PC increments in steps of 2 and
(Example 4-2).                                              the LSB will always read `0' (see Section 4.4 "PCL,
                                                            PCLATH and PCLATU").
A fetch cycle begins with the Program Counter (PC)
incrementing in Q1.                                         The CALL and GOTO instructions have an absolute
                                                            program memory address embedded into the instruc-
In the execution cycle, the fetched instruction is latched  tion. Since instructions are always stored on word
into the "Instruction Register" (IR) in cycle Q1. This      boundaries, the data contained in the instruction is a
instruction is then decoded and executed during the         word address. The word address is written to PC<20:1>,
Q2, Q3 and Q4 cycles. Data memory is read during Q2         which accesses the desired byte address in program
(operand read) and written during Q4 (destination           memory. Instruction #2 in Example 4-3 shows how the
write).                                                     instruction "GOTO 000006h" is encoded in the program
                                                            memory. Program branch instructions that encode a
                                                            relative address offset operate in the same manner. The
                                                            offset value stored in a branch instruction represents the
                                                            number of single-word instructions by which the PC will
                                                            be offset. Section 25.0 "Instruction Set Summary"
                                                            provides further details of the instruction set.

2006 Microchip Technology Inc.                                         DS41159E-page 41
PIC18FXX8

EXAMPLE 4-2: INSTRUCTION PIPELINE FLOW

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

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

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

EXAMPLE 4-3: INSTRUCTIONS IN PROGRAM MEMORY

Instruction                       Opcode                     Memory                  Address

                     --                 0E55h                 55h                    000007h
MOVLW 055h                        0EF03h, 0F000h             0Eh                     000008h
GOTO 000006h                                                  03h                    000009h
                                  0C123h, 0F456h             0EFh                    00000Ah
MOVFF 123h, 456h                                              00h                    00000Bh
                                                             0F0h                    00000Ch
                     --                                       23h                    00000Dh
                                                             0C1h                    00000Eh
                                                              56h                    00000Fh
                                                             0F4h                    000010h
                                                                                     000011h
                                                                                     000012h

DS41159E-page 42                                                         2006 Microchip Technology Inc.
                                                                                      PIC18FXX8

4.7.1 TWO-WORD INSTRUCTIONS                                     instruction executed will be one of the RETLW 0xnn
                                                                instructions that returns the value 0xnn to the calling
The PIC18FXX8 devices have 4 two-word instructions:             function.
MOVFF, CALL, GOTO and LFSR. The 4 Most Signifi-
cant bits of the second word are set to `1's and indicate       The offset value (value in WREG) specifies the number
a special NOP instruction. The lower 12 bits of the             of bytes that the program counter should advance.
second word contain the data to be used by the
instruction. If the first word of the instruction is executed,  In this method, only one data byte may be stored in
the data in the second word is accessed. If the second          each instruction location and room on the return
word of the instruction is executed by itself (first word       address stack is required.
was skipped), it will execute as a NOP. This action is
necessary when the two-word instruction is preceded by             Note 1: The LSb of PCL is fixed to a value of `0'.
a conditional instruction that changes the PC. A program                        Hence, computed GOTO to an odd address
example that demonstrates this concept is shown in                              is not possible.
Example 4-4. Refer to Section 25.0 "Instruction Set
Summary" for further details of the instruction set.                       2: The ADDWF PCL instruction does not
                                                                                update PCLATH/PCLATU. A read opera-
4.8 Look-up Tables                                                              tion on PCL must be performed to update
                                                                                PCLATH and PCLATU.
Look-up tables are implemented two ways. These are:
                                                                4.8.2 TABLE READS/TABLE WRITES
Computed GOTO
Table Reads                                                   A better method of storing data in program memory
                                                                allows 2 bytes of data to be stored in each instruction
4.8.1 COMPUTED GOTO                                             location.

A computed GOTO is accomplished by adding an offset             Look-up table data may be stored as 2 bytes per
to the program counter (ADDWF PCL).                             program word by using table reads and writes. The
                                                                Table Pointer (TBLPTR) specifies the byte address and
A look-up table can be formed with an ADDWF PCL                 the Table Latch (TABLAT) contains the data that is read
instruction and a group of RETLW 0xnn instructions.             from, or written to, program memory. Data is
WREG is loaded with an offset into the table before             transferred to/from program memory, one byte at a
executing a call to that table. The first instruction of the    time.
called routine is the ADDWF PCL instruction. The next
                                                                A description of the table read/table write operation is
                                                                shown in Section 6.1 "Table Reads and Table Writes".

EXAMPLE 4-4: TWO-WORD INSTRUCTIONS

CASE 1:

Object Code                                                     Source Code

0110 0110 0000 0000               TSTFSZ  REG1                  ; is RAM location 0?
1100 0001 0010 0011               MOVFF
1111 0100 0101 0110                       REG1, REG2 ; No, execute 2-word instruction
0010 0100 0000 0000               ADDWF
                                                                ; 2nd operand holds address of REG2

                                          REG3                  ; continue code

CASE 2:

Object Code                                                     Source Code

0110 0110 0000 0000               TSTFSZ  REG1                  ; is RAM location 0?
1100 0001 0010 0011               MOVFF
1111 0100 0101 0110                       REG1, REG2 ; Yes
0010 0100 0000 0000               ADDWF
                                                                ; 2nd operand becomes NOP

                                          REG3                  ; continue code

2006 Microchip Technology Inc.                                                           DS41159E-page 43
PIC18FXX8                                                 4.9.1  GENERAL PURPOSE
                                                                 REGISTER FILE
4.9 Data Memory Organization
                                                          The register file can be accessed either directly or
The data memory is implemented as static RAM. Each        indirectly. Indirect addressing operates through the File
register in the data memory has a 12-bit address,         Select Registers (FSR). The operation of indirect
allowing up to 4096 bytes of data memory. Figure 4-6      addressing is shown in Section 4.12 "Indirect
shows the data memory organization for the                Addressing, INDF and FSR Registers".
PIC18FXX8 devices.
                                                          Enhanced MCU devices may have banked memory in
The data memory map is divided into as many as            the GPR area. GPRs are not initialized by a Power-on
16 banks that contain 256 bytes each. The lower 4 bits    Reset and are unchanged on all other Resets.
of the Bank Select Register (BSR<3:0>) select which
bank will be accessed. The upper 4 bits for the BSR are   Data RAM is available for use as GPR registers by all
not implemented.                                          instructions. Bank 15 (F00h to FFFh) contains SFRs.
                                                          All other banks of data memory contain GPR registers,
The data memory contains Special Function Registers       starting with Bank 0.
(SFRs) and General Purpose Registers (GPRs). The
SFRs are used for control and status of the controller    4.9.2 SPECIAL FUNCTION REGISTERS
and peripheral functions, while GPRs are used for data
storage and scratchpad operations in the user's appli-    The Special Function Registers (SFRs) are registers
cation. The SFRs start at the last location of Bank 15    used by the CPU and peripheral modules for controlling
(FFFh) and grow downwards. GPRs start at the first        the desired operation of the device. These registers are
location of Bank 0 and grow upwards. Any read of an       implemented as static RAM. A list of these registers is
unimplemented location will read as `0's.                 given in Table 4-1.

The entire data memory may be accessed directly or        The SFRs can be classified into two sets: those asso-
indirectly. Direct addressing may require the use of the  ciated with the "core" function and those related to the
BSR register. Indirect addressing requires the use of     peripheral functions. Those registers related to the
the File Select Register (FSR). Each FSR holds a          "core" are described in this section, while those related
12-bit address value that can be used to access any       to the operation of the peripheral features are
location in the data memory map without banking.          described in the section of that peripheral feature.

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

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

DS41159E-page 44                                                 2006 Microchip Technology Inc.
                                                         PIC18FXX8

FIGURE 4-5:      DATA MEMORY MAP FOR PIC18F248/448
    BSR<3:0>
         = 0000                   Data Memory Map
         = 0001
         = 0010             00h   Access RAM       000h
                 Bank 0                GPR         05Fh
                                       GPR         060h
                            FFh                    0FFh
                            00h        GPR         100h

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

                            FFh

                                                            Access Bank
                                                                                   00h

                                                         Access Bank Low

                                                         (GPR)  5Fh

= 0011           Bank 3             Unused               Access Bank High 60h
= 1110              to            Read `00h'
                                                         (SFR)  FFh
                 Bank 14
                                                         When a = 0,
                                                               the BSR is ignored and
                                                               the Access Bank is used.

                                                         The first 96 bytes are
                                                         general purpose RAM
                                                         (from Bank 0).

                                                         The next 160 bytes are
                                                         Special Function
                                                         Registers (from Bank 15).

= 1111                       00h  Unused           EFFh  When a = 1,
                 Bank 15            SFR            F00h        the BSR is used to specify
                                                               the RAM location that the
                             FFh                   F5Fh        instruction uses.

                                                   F60h
                                                   FFFh

2006 Microchip Technology Inc.                                DS41159E-page 45
PIC18FXX8

FIGURE 4-6:       DATA MEMORY MAP FOR PIC18F258/458

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

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

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

                  Bank 4            GPR              5FFh  Access Bank
                                                     600h
                              00h                                                   00h
                  Bank 5                                   Access Bank low

                              FFh   GPR                    (GPR)        5Fh

                                                           Access Bank high 60h

                                                                  (SFR)
                                                                                     FFh

= 0110            Bank 6              Unused               When a = 0,
= 1110               to             Read `00h'                   the BSR is ignored and the
                                                                 Access Bank is used.
                  Bank 14
                                                                 The first 96 bytes are
= 1111                         00h  SFR              EFFh        general purpose RAM
                  Bank 15           SFR              F00h        (from Bank 0).

                              FFh                    F5Fh        The next 160 bytes are
                                                                 Special Function Registers
                                                     F60h        (from Bank 15).
                                                     FFFh
                                                           When a = 1,
                                                                 the BSR is used to specify
                                                                 the RAM location that the
                                                                 instruction uses.

DS41159E-page 46                                           2006 Microchip Technology Inc.
                                                                           PIC18FXX8

TABLE 4-1: SPECIAL FUNCTION REGISTER MAP

Address     Name  Address                   Name    Address    Name        Address Name

FFFh TOSU                         FDFh INDF2(2)     FBFh CCPR1H            F9Fh IPR1
FFEh TOSH                         FDEh POSTINC2(2)
FFDh TOSL                         FDDh POSTDEC2(2)  FBEh CCPR1L            F9Eh PIR1
FFCh STKPTR                       FDCh PREINC2(2)
FFBh PCLATU                       FDBh PLUSW2(2)    FBDh CCP1CON           F9Dh PIE1
FFAh PCLATH                                         FBCh ECCPR1H(5)
FF9h PCL                                            FBBh ECCPR1L(5)        F9Ch       --
FF8h TBLPTRU                                        FBAh ECCP1CON(5)
FF7h TBLPTRH                                                               F9Bh       --
FF6h TBLPTRL
FF5h TABLAT                       FDAh FSR2H                               F9Ah       --
FF4h PRODH
FF3h PRODL                        FD9h FSR2L        FB9h        --         F99h       --
FF2h INTCON
FF1h INTCON2                      FD8h STATUS       FB8h               --  F98h       --
FF0h INTCON3                                        FB7h     ECCP1DEL(5)
FEFh INDF0(2)                     FD7h TMR0H        FB6h     ECCPAS(5)     F97h       --
FEEh POSTINC0(2)                                    FB5h     CVRCON(5)
FEDh POSTDEC0(2)                  FD6h TMR0L        FB4h     CMCON(5)      F96h TRISE(5)
FECh PREINC0(2)
FEBh PLUSW0(2)                    FD5h T0CON                               F95h TRISD(5)
FEAh FSR0H
FE9h FSR0L                        FD4h        --                           F94h TRISC
FE8h WREG
FE7h INDF1(2)                     FD3h OSCCON       FB3h TMR3H             F93h TRISB
FE6h POSTINC1(2)
FE5h POSTDEC1(2)                  FD2h LVDCON       FB2h TMR3L             F92h TRISA
FE4h PREINC1(2)
FE3h PLUSW1(2)                    FD1h WDTCON       FB1h T3CON             F91h       --
FE2h FSR1H
FE1h FSR1L                        FD0h RCON         FB0h        --         F90h       --
FE0h BSR
                                  FCFh TMR1H        FAFh SPBRG             F8Fh       --

                                  FCEh TMR1L        FAEh RCREG             F8Eh       --

                                  FCDh T1CON        FADh TXREG             F8Dh LATE(5)

                                  FCCh TMR2         FACh TXSTA             F8Ch LATD(5)

                                  FCBh PR2          FABh RCSTA             F8Bh LATC

                                  FCAh T2CON        FAAh        --         F8Ah LATB

                                  FC9h SSPBUF       FA9h EEADR             F89h LATA

                                  FC8h SSPADD       FA8h EEDATA            F88h       --

                                  FC7h SSPSTAT      FA7h EECON2            F87h       --

                                  FC6h SSPCON1      FA6h EECON1            F86h       --

                                  FC5h SSPCON2      FA5h IPR3              F85h       --

                                  FC4h ADRESH       FA4h PIR3              F84h PORTE(5)

                                  FC3h ADRESL       FA3h PIE3              F83h PORTD(5)

                                  FC2h ADCON0       FA2h IPR2              F82h PORTC

                                  FC1h ADCON1       FA1h PIR2              F81h PORTB

                                  FC0h        --    FA0h PIE2              F80h PORTA

Note 1:     Unimplemented registers are read as `0'.
        2:  This is not a physical register.
        3:  Contents of register are dependent on WIN2:WIN0 bits in the CANCON register.
        4:  CANSTAT register is repeated in these locations to simplify application firmware. Unique names are given
            for each instance of the CANSTAT register due to the Microchip header file requirement.
        5:  These registers are not implemented on the PIC18F248 and PIC18F258.

2006 Microchip Technology Inc.                                           DS41159E-page 47
PIC18FXX8

TABLE 4-1: SPECIAL FUNCTION REGISTER MAP (CONTINUED)

Address     Name      Address  Name       Address  Name       Address Name

F7Fh              --  F5Fh     --         F3Fh        --      F1Fh RXM1EIDL
                                                              F1Eh RXM1EIDH
F7Eh              --  F5Eh CANSTATRO1(4)  F3Eh CANSTATRO3(4)  F1Dh RXM1SIDL
                                                              F1Ch RXM1SIDH
F7Dh              --  F5Dh RXB1D7         F3Dh TXB1D7         F1Bh RXM0EIDL
                                                              F1Ah RXM0EIDH
F7Ch              --  F5Ch RXB1D6         F3Ch TXB1D6         F19h RXM0SIDL
                                                              F18h RXM0SIDH
F7Bh              --  F5Bh RXB1D5         F3Bh TXB1D5         F17h RXF5EIDL
                                                              F16h RXF5EIDH
F7Ah              --  F5Ah RXB1D4         F3Ah TXB1D4         F15h RXF5SIDL
                                                              F14h RXF5SIDH
F79h              --  F59h RXB1D3         F39h TXB1D3         F13h RXF4EIDL
                                                              F12h RXF4EIDH
F78h              --  F58h RXB1D2         F38h TXB1D2         F11h RXF4SIDL
                                                              F10h RXF4SIDH
F77h              --  F57h RXB1D1         F37h TXB1D1         F0Fh RXF3EIDL
                                                              F0Eh RXF3EIDH
F76h TXERRCNT         F56h RXB1D0         F36h TXB1D0         F0Dh RXF3SIDL
                                                              F0Ch RXF3SIDH
F75h RXERRCNT         F55h RXB1DLC        F35h TXB1DLC        F0Bh RXF2EIDL
                                                              F0Ah RXF2EIDH
F74h COMSTAT          F54h RXB1EIDL       F34h TXB1EIDL       F09h RXF2SIDL
                                                              F08h RXF2SIDH
F73h CIOCON           F53h RXB1EIDH       F33h TXB1EIDH       F07h RXF1EIDL
                                                              F06h RXF1EIDH
F72h BRGCON3          F52h RXB1SIDL       F32h TXB1SIDL       F05h RXF1SIDL
                                                              F04h RXF1SIDH
F71h BRGCON2          F51h RXB1SIDH       F31h TXB1SIDH       F03h RXF0EIDL
                                                              F02h RXF0EIDH
F70h BRGCON1          F50h RXB1CON        F30h TXB1CON        F01h RXF0SIDL
                                                              F00h RXF0SIDH
F6Fh CANCON           F4Fh     --         F2Fh        --

F6Eh CANSTAT          F4Eh CANSTATRO2(4)  F2Eh CANSTATRO4(4)
F6Dh RXB0D7(3)
F6Ch RXB0D6(3)        F4Dh TXB0D7         F2Dh TXB2D7
F6Bh RXB0D5(3)
F6Ah RXB0D4(3)        F4Ch TXB0D6         F2Ch TXB2D6
F69h RXB0D3(3)
F68h RXB0D2(3)        F4Bh TXB0D5         F2Bh TXB2D5
F67h RXB0D1(3)
F66h RXB0D0(3)        F4Ah TXB0D4         F2Ah TXB2D4
F65h RXB0DLC(3)
F64h RXB0EIDL(3)      F49h TXB0D3         F29h TXB2D3
F63h RXB0EIDH(3)
F62h RXB0SIDL(3)      F48h TXB0D2         F28h TXB2D2
F61h RXB0SIDH(3)
F60h RXB0CON(3)       F47h TXB0D1         F27h TXB2D1

                      F46h TXB0D0         F26h TXB2D0

                      F45h TXB0DLC        F25h TXB2DLC

                      F44h TXB0EIDL       F24h TXB2EIDL

                      F43h TXB0EIDH       F23h TXB2EIDH

                      F42h TXB0SIDL       F22h TXB2SIDL

                      F41h TXB0SIDH       F21h TXB2SIDH

                      F40h TXB0CON        F20h TXB2CON

            Note: Shaded registers are available in Bank 15, while the rest are in Access Bank low.

Note 1:     Unimplemented registers are read as `0'.
        2:  This is not a physical register.
        3:  Contents of register are dependent on WIN2:WIN0 bits in the CANCON register.
        4:  CANSTAT register is repeated in these locations to simplify application firmware. Unique names are given
            for each instance of the CANSTAT register due to the Microchip header file requirement.
        5:  These registers are not implemented on the PIC18F248 and PIC18F258.

DS41159E-page 48                                           2006 Microchip Technology Inc.
                                                                                                       PIC18FXX8

TABLE 4-2: REGISTER FILE SUMMARY

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

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

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

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

STKPTR        STKFUL  STKUNF                    --      Return Stack Pointer                                             00-0 0000  30, 39
PCLATU            --      --                 bit 21(2)  Holding Register for PC<20:16>                                   ---0 0000  30, 40

PCLATH        Holding Register for PC<15:8>                                                                              0000 0000 30, 40

PCL           PC Low Byte (PC<7:0>)                                                                                      0000 0000  30, 40
TBLPTRU                                                                                                                  --00 0000  30, 68
              --                --           bit 21(2) Program Memory Table Pointer Upper Byte (TBLPTR<20:16>)

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

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

TABLAT        Program Memory Table Latch                                                                                 0000 0000 30, 68

PRODH         Product Register High Byte                                                                                 xxxx xxxx 30, 75

PRODL         Product Register Low Byte                                                                                  xxxx xxxx 30, 75

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

INTCON2       RBPU    INTEDG0 INTEDG1                   --           --      TMR0IP            --                 RBIP 111- -1-1 30, 80

INTCON3       INT2IP            INT1IP       --         INT2IE       INT1IE             --     INT2IF             INT1IF 11-0 0-00 30, 81

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

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

POSTDEC0 Uses contents of FSR0 to address data memory value of FSR0 post-incremented (not a physical register)         N/A        30, 55

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

PLUSW0        Uses contents of FSR0 to address data memory value of FSR0 offset by W (not a physical register)         N/A        30, 55

FSR0H         --                --           --         --         Indirect Data Memory Address Pointer 0 High           ---- xxxx 30, 55

FSR0L         Indirect Data Memory Address Pointer 0 Low Byte                                                            xxxx xxxx 30, 55

WREG          Working Register                                                                                           xxxx xxxx 30, 55

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

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

POSTDEC1 Uses contents of FSR1 to address data memory value of FSR1 post-incremented (not a physical register)         N/A        30, 55

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

PLUSW1        Uses contents of FSR1 to address data memory value of FSR1 offset by W (not a physical register)         N/A        30, 55

FSR1H         --                --           --         --         Indirect Data Memory Address Pointer 1 High           ---- xxxx 31, 55

FSR1L         Indirect Data Memory Address Pointer 1 Low Byte                                                            xxxx xxxx 31, 55

BSR           --                --           --         --         Bank Select Register                                  ---- 0000 31, 54

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

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

POSTDEC2 Uses contents of FSR2 to address data memory value of FSR2 post-incremented (not a physical register)         N/A        31, 55

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

PLUSW2        Uses contents of FSR2 to address data memory value of FSR2 offset by W (not a physical register)         N/A        31, 55

FSR2H         --                --           --         --         Indirect Data Memory Address Pointer 2 High           ---- xxxx 31, 55

FSR2L         Indirect Data Memory Address Pointer 2 Low Byte                                                            xxxx xxxx 31, 55

STATUS        --                --           --                N     OV                 Z      DC                 C      ---x xxxx 31, 57

TMR0H         Timer0 Register High Byte                                                                                  0000 0000 31, 111

TMR0L         Timer0 Register Low Byte                                                                                   xxxx xxxx 31, 111

T0CON         TMR0ON            T08BIT       T0CS       T0SE         PSA     T0PS2             T0PS1              T0PS0 1111 1111 31, 109

OSCCON        --                --           --         --           --                 --     --                 SCS ---- ---0 31, 20

LVDCON        --                --           IRVST      LVDEN        LVDL3   LVDL2             LVDL1              LVDL0 --00 0101 31, 261

WDTCON        --                --           --         --           --                 --     --      SWDTEN ---- ---0 31, 272

RCON          IPEN              --           --         RI           TO                 PD     POR                BOR 0--1 110q 31, 58, 91

Legend:       x = unknown, u = unchanged, - = unimplemented, q = value depends on condition
Note 1:       These registers or register bits are not implemented on the PIC18F248 and PIC18F258 and read as `0's.
              Bit 21 of the TBLPTRU allows access to the device configuration bits.
          2:  RA6 and associated bits are configured as port pins in RCIO and ECIO Oscillator mode only and read `0' in all other oscillator modes.
          3:

2006 Microchip Technology Inc.                                                                                         DS41159E-page 49
PIC18FXX8

TABLE 4-2: REGISTER FILE SUMMARY (CONTINUED)

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

TMR1H         Timer1 Register High Byte                                                                           xxxx xxxx 31, 116

TMR1L         Timer1 Register Low Byte                                                                            xxxx xxxx 31, 116

T1CON         RD16             --            T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 0-00 0000 31, 113

TMR2          Timer2 Register                                                                                     0000 0000 31, 118

PR2           Timer2 Period Register                                                                              1111 1111 31, 118

T2CON         --               TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 31, 117

SSPBUF        SSP Receive Buffer/Transmit Register                                                                xxxx xxxx 31, 146
SSPADD        SSP Address Register in I2CTM Slave mode. SSP Baud Rate Reload Register in I2C Master mode.         0000 0000 31, 152

SSPSTAT       SMP              CKE           D/A        P          S       R/W     UA                      BF     0000 0000 31, 144,

                                                                                                                                 153

SSPCON1       WCOL             SSPOV         SSPEN      CKP        SSPM3   SSPM2   SSPM1                   SSPM0 0000 0000 31, 145,
                                                                                                                                                 145

SSPCON2       GCEN             ACKSTAT ACKDT            ACKEN      RCEN    PEN     RSEN                    SEN 0000 0000 31, 155

ADRESH        A/D Result Register High Byte                                                                       xxxx xxxx 31, 243

ADRESL        A/D Result Register Low Byte                                                                        xxxx xxxx 31, 243

ADCON0        ADCS1            ADCS0         CHS2       CHS1       CHS0 GO/DONE    --                      ADON 0000 00-0 31, 241

ADCON1        ADFM             ADCS2         --         --         PCFG3 PCFG2 PCFG1 PCFG0 00-- 0000 32, 242

CCPR1H        Capture/Compare/PWM Register 1 High Byte                                                            xxxx xxxx 32, 124

CCPR1L        Capture/Compare/PWM Register 1 Low Byte                                                             xxxx xxxx 32, 124

CCP1CON       --               --            DC1B1      DC1B0      CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000                         32, 123
ECCPR1H(1)                                                                                                                       32, 133
ECCPR1L(1)    Enhanced Capture/Compare/PWM Register 1 High Byte                                                   xxxx xxxx      32, 133
ECCP1CON(1)                                                                                                                      32, 131
ECCP1DEL(1)   Enhanced Capture/Compare/PWM Register 1 Low Byte                                                    xxxx xxxx      32, 140
ECCPAS(1)                                                                                                                        32, 142
CVRCON(1)     EPWM1M1 EPWM1M0 EDC1B1                    EDC1B0     ECCP1M3 ECCP1M2 ECCP1M1 ECCP1M0 0000 0000                     32, 255
CMCON(1)                                                                                                                         32, 249
              EPDC7            EPDC6         EPDC5      EPDC4      EPDC3   EPDC2   EPDC1 EPDC0 0000 0000

              ECCPASE ECCPAS2 ECCPAS1 ECCPAS0                      PSSAC1 PSSAC0 PSSBD1 PSSBD0 0000 0000

              CVREN            CVROE         CVRR       CVRSS      CVR3    CVR2    CVR1                    CVR0 0000 0000

              C2OUT            C1OUT         C2INV      C1INV      CIS     CM2     CM1                     CM0 0000 0000

TMR3H         Timer3 Register High Byte                                                                           xxxx xxxx 32, 121

TMR3L         Timer3 Register Low Byte                                                                            xxxx xxxx 32, 121

T3CON         RD16             T3ECCP1 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON 0000 0000 32, 119

SPBRG         USART Baud Rate Generator                                                                           0000 0000 32, 185

RCREG         USART Receive Register                                                                              0000 0000 32, 191

TXREG         USART Transmit Register                                                                             0000 0000 32, 189

TXSTA         CSRC             TX9           TXEN       SYNC       --      BRGH    TRMT                    TX9D 0000 -010 32, 183

RCSTA         SPEN             RX9           SREN       CREN       ADDEN   FERR    OERR                    RX9D 0000 000x 32, 184

EEADR         EEPROM Address Register                                                                             xxxx xxxx 32, 59

EEDATA        EEPROM Data Register                                                                                xxxx xxxx 32, 59

EECON2        EEPROM Control Register 2 (not a physical register)                                                 xxxx xxxx 32, 59

EECON1        EEPGD            CFGS          --         FREE       WRERR WREN      WR                      RD xx-0 x000 32, 60, 67

IPR3          IRXIP            WAKIP         ERRIP      TXB2IP     TXB1IP TXB0IP RXB1IP RXB0IP 1111 1111 32, 90

PIR3          IRXIF            WAKIF         ERRIF      TXB2IF     TXB1IF TXB0IF RXB1IF RXB0IF 0000 0000 32, 84

PIE3          IRXIE            WAKIE         ERRIE      TXB2IE     TXB1IE  TXB0IE  RXB1IE                    RXB0IE 0000 0000    32, 87
IPR2            --              CMIP            --       EEIP      BCLIP   LVDIP   TMR3IP                  ECCP1IP(1) -1-1 1111  32, 89
PIR2            --              CMIF            --       EEIF      BCLIF    LVDIF  TMR3IF                  ECCP1IF(1) -0-0 0000  32, 83
PIE2            --              CMIE            --       EEIE      BCLIE   LVDIE   TMR3IE                  ECCP1IE(1) -0-0 0000  32, 86

Legend:       x = unknown, u = unchanged, - = unimplemented, q = value depends on condition
Note 1:       These registers or register bits are not implemented on the PIC18F248 and PIC18F258 and read as `0's.
              Bit 21 of the TBLPTRU allows access to the device configuration bits.
          2:  RA6 and associated bits are configured as port pins in RCIO and ECIO Oscillator mode only and read `0' in all other oscillator modes.
          3:

DS41159E-page 50                                                                            2006 Microchip Technology Inc.
                                                                                                 PIC18FXX8

TABLE 4-2: REGISTER FILE SUMMARY (CONTINUED)

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

IPR1          PSPIP(1)  ADIP      RCIP                      TXIP     SSPIP     CCP1IP TMR2IP TMR1IP           1111 1111                    32, 88
PIR1          PSPIF(1)  ADIF      RCIF                      TXIF     SSPIF     CCP1IF TMR2IF TMR1IF           0000 0000                    32, 82
PIE1          PSPIE(1)  ADIE      RCIE                      TXIE     SSPIE     CCP1IE TMR2IE TMR1IE           0000 0000                    32, 85
TRISE(1)                                                                    Data Direction bits for PORTE(1)  0000 -111                    33, 105
TRISD(1)      IBF       OBF       IBOV                      PSPMODE    --                                     1111 1111                    33, 102

              Data Direction Control Register for PORTD(1)

TRISC         Data Direction Control Register for PORTC                                                       1111 1111 33, 100

TRISB         Data Direction Control Register for PORTB                                                       1111 1111                    33, 96
TRISA(3)                                                                                                      -111 1111                    33, 93
LATE(1)       --        Data Direction Control Register for PORTA                                             ---- -xxx                    33, 104

LATD(1)       --        --        --                        --       --     Read PORTE Data Latch, Write
                                                                            PORTE Data Latch(1)

              Read PORTD Data Latch, Write PORTD Data Latch(1)                                                xxxx xxxx 33, 102

LATC          Read PORTC Data Latch, Write PORTC Data Latch                                                   xxxx xxxx 33, 100

LATB          Read PORTB Data Latch, Write PORTB Data Latch                                                                     xxxx xxxx  33, 96
LATA(3)                                                                                                                         -xxx xxxx  33, 93
PORTE(1)      --        Read PORTA Data Latch, Write PORTA Data Latch       Read PORTE pins, Write PORTE Data ---- -xxx                    33, 104
                                                                            Latch(1)
PORTD(1)      --        --        --                        --       --                                                         xxxx xxxx  33, 102

              Read PORTD pins, Write PORTD Data Latch(1)

PORTC         Read PORTC pins, Write PORTC Data Latch                                                         xxxx xxxx 33, 100

PORTB         Read PORTB pins, Write PORTB Data Latch                                                         xxxx xxxx                    33, 96
PORTA(3)                                                                                                      -x0x 0000                    33, 93
              --        Read PORTA pins, Write PORTA Data Latch

TXERRCNT      TEC7      TEC6      TEC5                      TEC4     TEC3   TEC2   TEC1          TEC0 0000 0000 33, 209

RXERRCNT      REC7      REC6      REC5                      REC4     REC3   REC2   REC1          REC0 0000 0000 33, 214

COMSTAT       RXB0OVFL RXB1OVFL TXBO                        TXBP     RXBP TXWARN RXWARN EWARN 0000 0000 33, 205

CIOCON        --        --        ENDRHI CANCAP                      --     --     --            --           --00 ---- 33, 221

BRGCON3       --        WAKFIL    --                        --       --     SEG2PH2 SEG2PH1 SEG2PH0 -0-- -000 33, 220

BRGCON2       SEG2PHTS  SAM       SEG1PH2 SEG1PH1 SEG1PH0 PRSEG2 PRSEG1 PRSEG0 0000 0000 33, 219

BRGCON1       SJW1      SJW0      BRP5                      BRP4     BRP3   BRP2   BRP1          BRP0 0000 0000 33, 218

CANCON        REQOP2 REQOP1 REQOP0                          ABAT     WIN2   WIN1   WIN0          --           xxxx xxx- 33, 201

CANSTAT       OPMODE2 OPMODE1 OPMODE0                       --       ICODE2 ICODE1 ICODE0        --           xxx- xxx- 33, 202

RXB0D7        RXB0D77 RXB0D76 RXB0D75 RXB0D74 RXB0D73 RXB0D72 RXB0D71 RXB0D70 xxxx xxxx 33, 214

RXB0D6        RXB0D67 RXB0D66 RXB0D65 RXB0D64 RXB0D63 RXB0D62 RXB0D61 RXB0D60 xxxx xxxx 33, 214

RXB0D5        RXB0D57 RXB0D56 RXB0D55 RXB0D54 RXB0D53 RXB0D52 RXB0D51 RXB0D50 xxxx xxxx 33, 214

RXB0D4        RXB0D47 RXB0D46 RXB0D45 RXB0D44 RXB0D43 RXB0D42 RXB0D41 RXB0D40 xxxx xxxx 33, 214

RXB0D3        RXB0D37 RXB0D36 RXB0D35 RXB0D34 RXB0D33 RXB0D32 RXB0D31 RXB0D30 xxxx xxxx 33, 214

RXB0D2        RXB0D27 RXB0D26 RXB0D25 RXB0D24 RXB0D23 RXB0D22 RXB0D21 RXB0D20 xxxx xxxx 33, 214

RXB0D1        RXB0D17 RXB0D16 RXB0D15 RXB0D14 RXB0D13 RXB0D12 RXB0D11 RXB0D10 xxxx xxxx 33, 214

RXB0D0        RXB0D07 RXB0D06 RXB0D05 RXB0D04 RXB0D03 RXB0D02 RXB0D01 RXB0D00 xxxx xxxx 33, 214

RXB0DLC       --        RXRTR     RB1                       RB0      DLC3   DLC2   DLC1          DLC0 -xxx xxxx 34, 213

RXB0EIDL      EID7      EID6      EID5                      EID4     EID3   EID2   EID1          EID0 xxxx xxxx 34, 213

RXB0EIDH      EID15     EID14     EID13                     EID12    EID11  EID10  EID9          EID8 xxxx xxxx 34, 212

RXB0SIDL      SID2      SID1      SID0                      SRR      EXID   --     EID17         EID16 xxxx x-xx 34, 212

RXB0SIDH      SID10     SID9      SID8                      SID7     SID6   SID5   SID4          SID3 xxxx xxxx 34, 212

RXB0CON       RXFUL     RXM1      RXM0                      --       RXRTRRO RXB0DBEN JTOFF FILHIT0 000- 0000 34, 210

Legend:       x = unknown, u = unchanged, - = unimplemented, q = value depends on condition
Note 1:       These registers or register bits are not implemented on the PIC18F248 and PIC18F258 and read as `0's.
              Bit 21 of the TBLPTRU allows access to the device configuration bits.
          2:  RA6 and associated bits are configured as port pins in RCIO and ECIO Oscillator mode only and read `0' in all other oscillator modes.
          3:

2006 Microchip Technology Inc.                                                                              DS41159E-page 51
PIC18FXX8

TABLE 4-2: REGISTER FILE SUMMARY (CONTINUED)

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

CANSTATRO1 OPMODE2 OPMODE1 OPMODE0  --     ICODE2 ICODE1 ICODE0  --     xxx- xxx- 33, 202

RXB1D7        RXB1D77 RXB1D76 RXB1D75 RXB1D74 RXB1D73 RXB1D72 RXB1D71 RXB1D70 xxxx xxxx 34, 214

RXB1D6        RXB1D67 RXB1D66 RXB1D65 RXB1D64 RXB1D63 RXB1D62 RXB1D61 RXB1D60 xxxx xxxx 34, 214

RXB1D5        RXB1D57 RXB1D56 RXB1D55 RXB1D54 RXB1D53 RXB1D52 RXB1D51 RXB1D50 xxxx xxxx 34, 214

RXB1D4        RXB1D47 RXB1D46 RXB1D45 RXB1D44 RXB1D43 RXB1D42 RXB1D41 RXB1D40 xxxx xxxx 34, 214

RXB1D3        RXB1D37 RXB1D36 RXB1D35 RXB1D34 RXB1D33 RXB1D32 RXB1D31 RXB1D30 xxxx xxxx 34, 214

RXB1D2        RXB1D27 RXB1D26 RXB1D25 RXB1D24 RXB1D23 RXB1D22 RXB1D21 RXB1D20 xxxx xxxx 34, 214

RXB1D1        RXB1D17 RXB1D16 RXB1D15 RXB1D14 RXB1D13 RXB1D12 RXB1D11 RXB1D10 xxxx xxxx 34, 214

RXB1D0        RXB1D07 RXB1D06 RXB1D05 RXB1D04 RXB1D03 RXB1D02 RXB1D01 RXB1D00 xxxx xxxx 34, 214

RXB1DLC       --     RXRTR  RB1     RB0    DLC3   DLC2   DLC1    DLC0 -xxx xxxx 34, 213

RXB1EIDL      EID7   EID6   EID5    EID4   EID3   EID2   EID1    EID0 xxxx xxxx 34, 213

RXB1EIDH      EID15  EID14  EID13   EID12  EID11  EID10  EID9    EID8 xxxx xxxx 34, 212

RXB1SIDL      SID2   SID1   SID0    SRR    EXID   --     EID17   EID16 xxxx x-xx 34, 212

RXB1SIDH      SID10  SID9   SID8    SID7   SID6   SID5   SID4    SID3 xxxx xxxx 34, 212

RXB1CON       RXFUL  RXM1   RXM0    --     RXRTRRO FILHIT2 FILHIT1 FILHIT0 000- 0000 34, 211

CANSTATRO2 OPMODE2 OPMODE1 OPMODE0  --     ICODE2 ICODE1 ICODE0  --     xxx- xxx- 33, 202

TXB0D7        TXB0D77 TXB0D76 TXB0D75 TXB0D74 TXB0D73 TXB0D72 TXB0D71 TXB0D70 xxxx xxxx 34, 208

TXB0D6        TXB0D67 TXB0D66 TXB0D65 TXB0D64 TXB0D63 TXB0D62 TXB0D61 TXB0D60 xxxx xxxx 34, 208

TXB0D5        TXB0D57 TXB0D56 TXB0D55 TXB0D54 TXB0D53 TXB0D52 TXB0D51 TXB0D50 xxxx xxxx 34, 208

TXB0D4        TXB0D47 TXB0D46 TXB0D45 TXB0D44 TXB0D43 TXB0D42 TXB0D41 TXB0D40 xxxx xxxx 34, 208

TXB0D3        TXB0D37 TXB0D36 TXB0D35 TXB0D34 TXB0D33 TXB0D32 TXB0D31 TXB0D30 xxxx xxxx 34, 208

TXB0D2        TXB0D27 TXB0D26 TXB0D25 TXB0D24 TXB0D23 TXB0D22 TXB0D21 TXB0D20 xxxx xxxx 34, 208

TXB0D1        TXB0D17 TXB0D16 TXB0D15 TXB0D14 TXB0D13 TXB0D12 TXB0D11 TXB0D10 xxxx xxxx 34, 208

TXB0D0        TXB0D07 TXB0D06 TXB0D05 TXB0D04 TXB0D03 TXB0D02 TXB0D01 TXB0D00 xxxx xxxx 34, 208

TXB0DLC       --     TXRTR  --      --     DLC3   DLC2   DLC1    DLC0 -x-- xxxx 34, 209

TXB0EIDL      EID7   EID6   EID5    EID4   EID3   EID2   EID1    EID0 xxxx xxxx 34, 208

TXB0EIDH      EID15  EID14  EID13   EID12  EID11  EID10  EID9    EID8 xxxx xxxx 34, 207

TXB0SIDL      SID2   SID1   SID0    --     EXIDE  --     EID17   EID16 xxx- x-xx 34, 207

TXB0SIDH      SID10  SID9   SID8    SID7   SID6   SID5   SID4    SID3 xxxx xxxx 35, 207

TXB0CON       --     TXABT  TXLARB  TXERR  TXREQ  --     TXPRI1 TXPRI0 -000 0-00 35, 206

CANSTATRO3 OPMODE2 OPMODE1 OPMODE0  --     ICODE2 ICODE1 ICODE0  --     xxx- xxx- 33, 202

TXB1D7        TXB1D77 TXB1D76 TXB1D75 TXB1D74 TXB1D73 TXB1D72 TXB1D71 TXB1D70 xxxx xxxx 35, 208

TXB1D6        TXB1D67 TXB1D66 TXB1D65 TXB1D64 TXB1D63 TXB1D62 TXB1D61 TXB1D60 xxxx xxxx 35, 208

TXB1D5        TXB1D57 TXB1D56 TXB1D55 TXB1D54 TXB1D53 TXB1D52 TXB1D51 TXB1D50 xxxx xxxx 35, 208

TXB1D4        TXB1D47 TXB1D46 TXB1D45 TXB1D44 TXB1D43 TXB1D42 TXB1D41 TXB1D40 xxxx xxxx 35, 208

TXB1D3        TXB1D37 TXB1D36 TXB1D35 TXB1D34 TXB1D33 TXB1D32 TXB1D31 TXB1D30 xxxx xxxx 35, 208

TXB1D2        TXB1D27 TXB1D26 TXB1D25 TXB1D24 TXB1D23 TXB1D22 TXB1D21 TXB1D20 xxxx xxxx 35, 208

TXB1D1        TXB1D17 TXB1D16 TXB1D15 TXB1D14 TXB1D13 TXB1D12 TXB1D11 TXB1D10 xxxx xxxx 35, 208

TXB1D0        TXB1D07 TXB1D06 TXB1D05 TXB1D04 TXB1D03 TXB1D02 TXB1D01 TXB1D00 xxxx xxxx 35, 208

TXB1DLC       --     TXRTR  --      --     DLC3   DLC2   DLC1    DLC0 -x-- xxxx 35, 209

TXB1EIDL      EID7   EID6   EID5    EID4   EID3   EID2   EID1    EID0 xxxx xxxx 35, 208

TXB1EIDH      EID15  EID14  EID13   EID12  EID11  EID10  EID9    EID8 xxxx xxxx 35, 207

TXB1SIDL      SID2   SID1   SID0    --     EXIDE  --     EID17   EID16 xxx- x-xx 35, 207

TXB1SIDH      SID10  SID9   SID8    SID7   SID6   SID5   SID4    SID3 xxxx xxxx 35, 207

TXB1CON       --     TXABT  TXLARB  TXERR  TXREQ  --     TXPRI1 TXPRI0 0000 0000 35, 206

Legend:       x = unknown, u = unchanged, - = unimplemented, q = value depends on condition
Note 1:       These registers or register bits are not implemented on the PIC18F248 and PIC18F258 and read as `0's.
              Bit 21 of the TBLPTRU allows access to the device configuration bits.
          2:  RA6 and associated bits are configured as port pins in RCIO and ECIO Oscillator mode only and read `0' in all other oscillator modes.
          3:

DS41159E-page 52                                                 2006 Microchip Technology Inc.
                                                                       PIC18FXX8

TABLE 4-2: REGISTER FILE SUMMARY (CONTINUED)

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

CANSTATRO4 OPMODE2 OPMODE1 OPMODE0        --     ICODE2 ICODE1 ICODE0  --     xxx- xxx- 33, 202

TXB2D7        TXB2D77 TXB2D76 TXB2D75 TXB2D74 TXB2D73 TXB2D72 TXB2D71 TXB2D70 xxxx xxxx 35, 208

TXB2D6        TXB2D67 TXB2D66 TXB2D65 TXB2D64 TXB2D63 TXB2D62 TXB2D61 TXB2D60 xxxx xxxx 35, 208

TXB2D5        TXB2D57 TXB2D56 TXB2D55 TXB2D54 TXB2D53 TXB2D52 TXB2D51 TXB2D50 xxxx xxxx 35, 208

TXB2D4        TXB2D47 TXB2D46 TXB2D45 TXB2D44 TXB2D43 TXB2D42 TXB2D41 TXB2D40 xxxx xxxx 35, 208

TXB2D3        TXB2D37 TXB2D36 TXB2D35 TXB2D34 TXB2D33 TXB2D32 TXB2D31 TXB2D30 xxxx xxxx 35, 208

TXB2D2        TXB2D27 TXB2D26 TXB2D25 TXB2D24 TXB2D23 TXB2D22 TXB2D21 TXB2D20 xxxx xxxx 35, 208

TXB2D1        TXB2D17 TXB2D16 TXB2D15 TXB2D14 TXB2D13 TXB2D12 TXB2D11 TXB2D10 xxxx xxxx 35, 208

TXB2D0        TXB2D07 TXB2D06 TXB2D05 TXB2D04 TXB2D03 TXB2D02 TXB2D01 TXB2D00 xxxx xxxx 35, 208

TXB2DLC       --     TXRTR        --      --     DLC3    DLC2   DLC1   DLC0 -x-- xxxx 35, 209

TXB2EIDL      EID7   EID6         EID5    EID4   EID3    EID2   EID1   EID0 xxxx xxxx 35, 208

TXB2EIDH      EID15  EID14        EID13   EID12  EID11   EID10  EID9   EID8 xxxx xxxx 35, 207

TXB2SIDL      SID2   SID1         SID0    --     EXIDE   --     EID17  EID16 xxx- x-xx 35, 207

TXB2SIDH      SID10  SID9         SID8    SID7   SID6    SID5   SID4   SID3 xxxx xxxx 35, 207

TXB2CON       --     TXABT        TXLARB  TXERR  TXREQ   --     TXPRI1 TXPRI0 -000 0-00 35, 206

RXM1EIDL      EID7   EID6         EID5    EID4   EID3    EID2   EID1   EID0 xxxx xxxx 35, 217

RXM1EIDH      EID15  EID14        EID13   EID12  EID11   EID10  EID9   EID8 xxxx xxxx 35, 217

RXM1SIDL      SID2   SID1         SID0    --     --      --     EID17  EID16 xxx- --xx 36, 217

RXM1SIDH      SID10  SID9         SID8    SID7   SID6    SID5   SID4   SID3 xxxx xxxx 36, 216

RXM0EIDL      EID7   EID6         EID5    EID4   EID3    EID2   EID1   EID0 xxxx xxxx 36, 217

RXM0EIDH      EID15  EID14        EID13   EID12  EID11   EID10  EID9   EID8 xxxx xxxx 36, 217

RXM0SIDL      SID2   SID1         SID0    --     --      --     EID17  EID16 xxx- --xx 36, 217

RXM0SIDH      SID10  SID9         SID8    SID7   SID6    SID5   SID4   SID3 xxxx xxxx 36, 216

RXF5EIDL      EID7   EID6         EID5    EID4   EID3    EID2   EID1   EID0 xxxx xxxx 36, 216

RXF5EIDH      EID15  EID14        EID13   EID12  EID11   EID10  EID9   EID8 xxxx xxxx 36, 216

RXF5SIDL      SID2   SID1         SID0    --     EXIDEN  --     EID17  EID16 xxx- x-xx 36, 215

RXF5SIDH      SID10  SID9         SID8    SID7   SID6    SID5   SID4   SID3 xxxx xxxx 36, 215

RXF4EIDL      EID7   EID6         EID5    EID4   EID3    EID2   EID1   EID0 xxxx xxxx 36, 216

RXF4EIDH      EID15  EID14        EID13   EID12  EID11   EID10  EID9   EID8 xxxx xxxx 36, 216

RXF4SIDL      SID2   SID1         SID0    --     EXIDEN  --     EID17  EID16 xxx- x-xx 36, 215

RXF4SIDH      SID10  SID9         SID8    SID7   SID6    SID5   SID4   SID3 xxxx xxxx 36, 215

RXF3EIDL      EID7   EID6         EID5    EID4   EID3    EID2   EID1   EID0 xxxx xxxx 36, 216

RXF3EIDH      EID15  EID14        EID13   EID12  EID11   EID10  EID9   EID8 xxxx xxxx 36, 216

RXF3SIDL      SID2   SID1         SID0    --     EXIDEN  --     EID17  EID16 xxx- x-xx 36, 215

RXF3SIDH      SID10  SID9         SID8    SID7   SID6    SID5   SID4   SID3 xxxx xxxx 36, 215

RXF2EIDL      EID7   EID6         EID5    EID4   EID3    EID2   EID1   EID0 xxxx xxxx 36, 216

RXF2EIDH      EID15  EID14        EID13   EID12  EID11   EID10  EID9   EID8 xxxx xxxx 36, 216

RXF2SIDL      SID2   SID1         SID0    --     EXIDEN  --     EID17  EID16 xxx- x-xx 36, 215

RXF2SIDH      SID10  SID9         SID8    SID7   SID6    SID5   SID4   SID3 xxxx xxxx 36, 215

RXF1EIDL      EID7   EID6         EID5    EID4   EID3    EID2   EID1   EID0 xxxx xxxx 36, 216

RXF1EIDH      EID15  EID14        EID13   EID12  EID11   EID10  EID9   EID8 xxxx xxxx 36, 216

RXF1SIDL      SID2   SID1         SID0    --     EXIDEN  --     EID17  EID16 xxx- x-xx 36, 215

RXF1SIDH      SID10  SID9         SID8    SID7   SID6    SID5   SID4   SID3 xxxx xxxx 36, 215

RXF0EIDL      EID7   EID6         EID5    EID4   EID3    EID2   EID1   EID0 xxxx xxxx 36, 216

RXF0EIDH      EID15  EID14        EID13   EID12  EID11   EID10  EID9   EID8 xxxx xxxx 36, 216

RXF0SIDL      SID2   SID1         SID0    --     EXIDEN  --     EID17  EID16 xxx- x-xx 36, 215

RXF0SIDH      SID10  SID9         SID8    SID7   SID6    SID5   SID4   SID3 xxxx xxxx 36, 215

Legend:       x = unknown, u = unchanged, - = unimplemented, q = value depends on condition
Note 1:       These registers or register bits are not implemented on the PIC18F248 and PIC18F258 and read as `0's.
              Bit 21 of the TBLPTRU allows access to the device configuration bits.
          2:  RA6 and associated bits are configured as port pins in RCIO and ECIO Oscillator mode only and read `0' in all other oscillator modes.
          3:

2006 Microchip Technology Inc.                                              DS41159E-page 53
PIC18FXX8

4.10 Access Bank                                                   4.11 Bank Select Register (BSR)

The Access Bank is an architectural enhancement that               The need for a large general purpose memory space
is very useful for C compiler code optimization. The               dictates a RAM banking scheme. The data memory is
techniques used by the C compiler are also useful for              partitioned into sixteen banks. When using direct
programs written in assembly.                                      addressing, the BSR should be configured for the
                                                                   desired bank.
This data memory region can be used for:                           BSR<3:0> holds the upper 4 bits of the 12-bit RAM
                                                                   address. The BSR<7:4> bits will always read `0's and
Intermediate computational values                                writes will have no effect.
Local variables of subroutines                                   A MOVLB instruction has been provided in the
Faster context saving/switching of variables                     instruction set to assist in selecting banks.
Common variables                                                 If the currently selected bank is not implemented, any
Faster evaluation/control of SFRs (no banking)                   read will return all `0's and all writes are ignored. The
                                                                   Status register bits will be set/cleared as appropriate for
The Access Bank is comprised of the upper 160 bytes                the instruction performed.
in Bank 15 (SFRs) and the lower 96 bytes in Bank 0.                Each Bank extends up to FFh (256 bytes). All data
These two sections will be referred to as Access Bank              memory is implemented as static RAM.
High and Access Bank Low, respectively. Figure 4-6                 A MOVFF instruction ignores the BSR since the 12-bit
indicates the Access Bank areas.                                   addresses are embedded into the instruction word.
                                                                   Section 4.12 "Indirect Addressing, INDF and FSR
A bit in the instruction word specifies if the operation is        Registers" provides a description of indirect address-
to occur in the bank specified by the BSR register or in           ing, which allows linear addressing of the entire RAM
the Access Bank.                                                   space.

When forced in the Access Bank (a = 0), the last                   0
address in Access Bank Low is followed by the first
address in Access Bank High. Access Bank High maps
most of the Special Function Registers so that these
registers can be accessed without any software
overhead.

FIGURE 4-7:       DIRECT ADDRESSING

                            Direct Addressing

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

Bank Select(2)              Location Select(3)

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

                               Data
                               Memory(1)

                                                             0FFh  1FFh     0EFFh 0FFFh

                                                             Bank 0 Bank 1  Bank 14 Bank 15

Note 1: For register file map detail, see Table 4-1.
         2: The access bit of the instruction can be used to force an override of the selected bank (BSR<3:0>) to the
              registers of the Access Bank.
         3: The MOVFF instruction embeds the entire 12-bit address in the instruction.

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

Example 4-5 shows a simple use of indirect addressing              access (post-increment) POSTINCn
to clear the RAM in Bank 1 (locations 100h-1FFh) in a           - Auto-increment FSRn before an indirect
minimum number of instructions.
                                                                   access (pre-increment) PREINCn
EXAMPLE 4-5:        HOW TO CLEAR RAM                            - Use the value in the WREG register as an
                    (BANK 1) USING
                    INDIRECT ADDRESSING                            offset to FSRn. Do not modify the value of the
                                                                   WREG or the FSRn register after an indirect
      LFSR          FSR0, 100h ;                                   access (no change) PLUSWn
      CLRF                                                   When using the auto-increment or auto-decrement
NEXT                POSTINC0 ; Clear INDF                    features, the effect on the FSR is not reflected in the
                                                             Status register. For example, if the indirect address
                                  ; register                 causes the FSR to equal `0', the Z bit will not be set.
                                                             Incrementing or decrementing an FSR affects all
                                  ; & inc pointer            12 bits. That is, when FSRnL overflows from an
                                                             increment, FSRnH will be incremented automatically.
             BTFSS  FSR0H, 1 ; All done                      Adding these features allows the FSRn to be used as a
                                                             software stack pointer in addition to its uses for table
             BRA                  ; w/ Bank1?                operations in data memory.
CONTINUE                                                     Each FSR has an address associated with it that
                    NEXT          ; NO, clear next           performs an indexed indirect access. When a data
      :                                                      access to this INDFn location (PLUSWn) occurs, the
                                  ;                          FSRn is configured to add the 2's complement value in
                                                             the WREG register and the value in FSR to form the
                                  ; YES, continue            address before an indirect access. The FSR value is not
                                                             changed.
There are three indirect addressing registers. To            If an FSR register contains a value that indicates one of
address the entire data memory space (4096 bytes),           the INDFn, an indirect read will read 00h (zero bit is
these registers are 12 bits wide. To store the 12 bits of    set), while an indirect write will be equivalent to a NOP
addressing information, two 8-bit registers are              (Status bits are not affected).
required. These indirect addressing registers are:           If an indirect addressing operation is done where the
                                                             target address is an FSRnH or FSRnL register, the
1. FSR0: composed of FSR0H:FSR0L                             write operation will dominate over the pre- or
2. FSR1: composed of FSR1H:FSR1L                             post-increment/decrement functions.
3. FSR2: composed of FSR2H:FSR2L
                                                                                                                    DS41159E-page 55
In addition, there are registers INDF0, INDF1 and
INDF2, which are not physically implemented. Reading
or writing to these registers activates indirect address-
ing, with the value in the corresponding FSR register
being the address of the data.

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

2006 Microchip Technology Inc.
PIC18FXX8

FIGURE 4-8:       INDIRECT ADDRESSING

                      Indirect Addressing

                          FSR Register

                  11  87                          0

                       FSRnH            FSRnL
                      Location Select

                                                  0000h

                                       Data
                                       Memory(1)

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

DS41159E-page 56                                                                               2006 Microchip Technology Inc.
                                                                            PIC18FXX8

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

REGISTER 4-2: STATUS REGISTER

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

         bit 7

bit 7-5  Unimplemented: Read as `0'
bit 4
         N: Negative bit
bit 3    This bit is used for signed arithmetic (2's complement). It indicates whether the result of the ALU
         operation was negative (ALU MSb = 1).
bit 2    1 = Result was negative
bit 1    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) 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 (RRCF, RRNCF, RLCF and RLNCF)
                                  instructions, this bit is loaded with either bit 4 or bit 3 of the source register.

bit 0 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

2006 Microchip Technology Inc.                                                   DS41159E-page 57
PIC18FXX8

4.14 RCON Register                                            Note 1: If the BOREN configuration bit is set,
                                                                          BOR is `1' on Power-on Reset. If the
The Reset Control (RCON) register contains flag bits                      BOREN configuration bit is clear, BOR is
that allow differentiation between the sources of a                       unknown on Power-on Reset.
device Reset. These flags include the TO, PD, POR,                        The BOR status bit is a "don't care" and is
BOR and RI bits. This register is readable and writable.                  not necessarily predictable if the brown-
                                                                          out circuit is disabled (the BOREN config-
                                                                          uration bit is clear). BOR must then be set
                                                                          by the user and checked on subsequent
                                                                          Resets to see if it is clear, indicating a
                                                                          brown-out has occurred.

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

REGISTER 4-3: RCON: RESET CONTROL REGISTER

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

                  IPEN   --          --                   RI     TO   PD   POR  BOR

                  bit 7                                                                                    bit 0

bit 7             IPEN: Interrupt Priority Enable bit
bit 6-5           1 = Enable priority levels on interrupts
bit 4             0 = Disable priority levels on interrupts (PIC16CXXX Compatibility mode)

bit 3             Unimplemented: Read as `0'
bit 2
bit 1             RI: RESET Instruction Flag bit
bit 0             1 = The RESET instruction was not executed
                  0 = The RESET instruction was executed causing a device Reset

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

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

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

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

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

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

DS41159E-page 58                                                       2006 Microchip Technology Inc.
                                                                  PIC18FXX8

5.0 DATA EEPROM MEMORY                                     5.1 EEADR Register

The data EEPROM is readable and writable during            The address register can address up to a maximum of
normal operation over the entire VDD range. The data       256 bytes of data EEPROM.
memory is not directly mapped in the register file
space. Instead, it is indirectly addressed through the     5.2 EECON1 and EECON2 Registers
Special Function Registers (SFR).
                                                           EECON1 is the control register for EEPROM memory
There are four SFRs used to read and write the             accesses.
program and data EEPROM memory. These registers
are:                                                       EECON2 is not a physical register. Reading EECON2
                                                           will read all `0's. The EECON2 register is used
EECON1                                                   exclusively in the EEPROM write sequence.
EECON2
EEDATA                                                   Control bits, RD and WR, initiate read and write opera-
EEADR                                                    tions, respectively. These bits cannot be cleared, only
                                                           set, in software. They are cleared in hardware at the
The EEPROM data memory allows byte read and write.         completion of the read or write operation. The inability
When interfacing to the data memory block, EEDATA          to clear the WR bit in software prevents the accidental
holds the 8-bit data for read/write and EEADR holds the    or premature termination of a write operation.
address of the EEPROM location being accessed. The
PIC18FXX8 devices have 256 bytes of data EEPROM            The WREN bit, when set, will allow a write operation.
with an address range from 00h to FFh.                     On power-up, the WREN bit is clear. The WRERR bit is
                                                           set when a write operation is interrupted by a MCLR
The EEPROM data memory is rated for high erase/            Reset, or a WDT Time-out Reset, during normal oper-
write cycles. A byte write automatically erases the loca-  ation. In these situations, the user can check the
tion and writes the new data (erase-before-write). The     WRERR bit and rewrite the location. It is necessary to
write time is controlled by an on-chip timer. The write    reload the data and address registers (EEDATA and
time will vary with voltage and temperature, as well as    EEADR) due to the Reset condition forcing the
from chip-to-chip. Please refer to the specifications for  contents of the registers to zero.
exact limits.
                                                           Note:  Interrupt flag bit, EEIF in the PIR2 register,
                                                                  is set when write is complete. It must be
                                                                  cleared in software.

2006 Microchip Technology Inc.                                  DS41159E-page 59
PIC18FXX8

REGISTER 5-1:     EECON1: EEPROM CONTROL REGISTER 1

                  R/W-x R/W-x             U-0          R/W-0 R/W-x           R/W-0  R/S-0  R/S-0
                                                                             WREN    WR     RD
                  EEPGD CFGS              --           FREE WRERR                               bit 0

                  bit 7

bit 7             EEPGD: Flash Program or Data EEPROM Memory Select bit

                  1 = Access program Flash memory
                  0 = Access data EEPROM memory

bit 6             CFGS: Flash Program/Data EE or Configuration Select bit

                  1 = Access Configuration registers
                  0 = Access program Flash or data EEPROM memory

bit 5             Unimplemented: Read as `0'

bit 4             FREE: Flash Row Erase Enable bit

                  1 = Erase the program memory row addressed by TBLPTR on the next WR command
                       (reset by hardware)

                  0 = Perform write only

bit 3             WRERR: Write Error Flag bit

                  1 = A write operation is prematurely terminated
                       (any MCLR or any WDT Reset during self-timed programming in normal operation)

                  0 = The write operation completed

                  Note: When a WRERR occurs, the EEPGD or FREE bits are not cleared. This allows
                              tracing of the error condition.

bit 2             WREN: Write Enable bit

                  1 = Allows write cycles
                  0 = Inhibits write to the EEPROM or Flash memory

bit 1             WR: Write Control bit

                  1 = Initiates a data EEPROM erase/write cycle or a program memory erase cycle or write cycle
                       (The operation is self-timed and the bit is cleared by hardware once write is complete. The
                       WR bit can only be set (not cleared) in software.)

                  0 = Write cycle is complete

bit 0             RD: Read Control bit

                  1 = Initiates an EEPROM read
                       (Read takes one cycle. RD is cleared in hardware. The RD bit can only be set (not cleared)
                       in software. RD bit cannot be set when EEPGD = 1.)

                  0 = Does not initiate an EEPROM read

                  Legend:            W = Writable bit  S = Settable 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

DS41159E-page 60                                                             2006 Microchip Technology Inc.
                                                                  PIC18FXX8

5.3 Reading the Data EEPROM                                5.4 Writing to the Data EEPROM
         Memory                                                     Memory

To read a data memory location, the user must write the    To write an EEPROM data location, the address must
address to the EEADR register, clear the EEPGD and         first be written to the EEADR register and the data writ-
CFGS control bits (EECON1<7:6>) and then set               ten to the EEDATA register. Then, the sequence in
control bit RD (EECON1<0>). The data is available in       Example 5-2 must be followed to initiate the write cycle.
the very next instruction cycle of the EEDATA register;
therefore, it can be read by the next instruction.         The write will not initiate if the above sequence is not
EEDATA will hold this value until another read             exactly followed (write 55h to EECON2, write 0AAh to
operation or until it is written to by the user (during a  EECON2, then set WR bit) for each byte. It is strongly
write operation).                                          recommended that interrupts be disabled during this
                                                           code segment.
EXAMPLE 5-1: DATA EEPROM READ
                                                           Additionally, the WREN bit in EECON1 must be set to
MOVLW  DATA_EE_ADDR   ;                                    enable writes. This mechanism prevents accidental
MOVWF  EEADR          ;Data Memory Address                 writes to data EEPROM due to unexpected code exe-
                      ;to read                             cution (i.e., runaway programs). The WREN bit should
BCF    EECON1, EEPGD  ;Point to DATA memory                be kept clear at all times, except when updating the
BCS    EECON1, CFGS   ;                                    EEPROM. The WREN bit is not cleared by hardware.
BSF    EECON1, RD     ;EEPROM Read
MOVF   EEDATA, W      ;W = EEDATA                          After a write sequence has been initiated, clearing the
                                                           WREN bit will not affect the current write cycle. The WR
                                                           bit will be inhibited from being set unless the WREN bit
                                                           is set. The WREN bit must be set on a previous instruc-
                                                           tion. Both WR and WREN cannot be set with the same
                                                           instruction.

                                                           At the completion of the write cycle, the WR bit is
                                                           cleared in hardware and the EEPROM Write Complete
                                                           Interrupt Flag bit (EEIF) is set. The user may either
                                                           enable this interrupt or roll this bit. EEIF must be
                                                           cleared by software.

EXAMPLE 5-2: DATA EEPROM WRITE

          MOVLW       DATA_EE_ADDR   ;
          MOVWF       EEADR          ; Data Memory Address to read
          MOVLW       DATA_EE_DATA   ;
          MOVWF       EEDATA         ; Data Memory Value to write
          BCF         EECON1, EEPGD  ; Point to DATA memory
          BCF         EECON1, CFGS   ; Access program FLASH or Data EEPROM memory
          BSF         EECON1, WREN   ; Enable writes

Required  BCF         INTCON, GIE    ; Disable interrupts
Sequence  MOVLW       55h            ;
          MOVWF       EECON2         ; Write 55h
          MOVLW       0AAh           ;
          MOVWF       EECON2         ; Write AAh
          BSF         EECON1, WR     ; Set WR bit to begin write
          BSF         INTCON, GIE    ; Enable interrupts

          .                          ; user code execution

          .

          .

          BCF         EECON1, WREN ; Disable writes on write complete (EEIF set)

2006 Microchip Technology Inc.                                                   DS41159E-page 61
PIC18FXX8

5.5 Write Verify                                            5.7 Operation During Code-Protect

Depending on the application, good programming              Data EEPROM memory has its own code-protect
practice may dictate that the value written to the          mechanism. External read and write operations are
memory should be verified against the original value.       disabled if either of these mechanisms are enabled.
This should be used in applications where excessive
writes can stress bits near the specification limit.        The microcontroller itself can both read and write to the
                                                            internal data EEPROM, regardless of the state of the
Generally, a write failure will be a bit which was written  code-protect configuration bit. Refer to Section 24.0
as a `1', but reads back as a `0' (due to leakage off the   "Special Features of the CPU" for additional
cell).                                                      information.

5.6 Protection Against Spurious Write                       5.8 Using the Data EEPROM

There are conditions when the device may not want to        The data EEPROM is a high-endurance, byte address-
write to the data EEPROM memory. To protect against         able array that has been optimized for the storage of
spurious EEPROM writes, various mechanisms have             frequently changing information (e.g., program
been built-in. On power-up, the WREN bit is cleared.        variables or other data that are updated often).
Also, the Power-up Timer (72 ms duration) prevents          Frequently changing values will typically be updated
EEPROM write.                                               more often than specification D124 or D124A. If this is
                                                            not the case, an array refresh must be performed. For
The write initiate sequence and the WREN bit together       this reason, variables that change infrequently (such as
reduce the probability of an accidental write during        constants, IDs, calibration, etc.) should be stored in
brown-out, power glitch or software malfunction.            Flash program memory. A simple data EEPROM
                                                            refresh routine is shown in Example 5-3.

                                                            Note:  If data EEPROM is only used to store
                                                                   constants and/or data that changes rarely,
                                                                   an array refresh is likely not required. See
                                                                   specification D124 or D124A.

EXAMPLE 5-3: DATA EEPROM REFRESH ROUTINE

Loop  CLRF        EEADR          ; Start at address 0
      BCF         EECON1, CFGS   ; Set for memory
      BCF         EECON1, EEPGD  ; Set for Data EEPROM
      BCF         INTCON, GIE    ; Disable interrupts
      BSF         EECON1, WREN   ; Enable writes
                                 ; Loop to refresh array
      BSF         EECON1, RD     ; Read current address
      MOVLW       55h            ;
      MOVWF       EECON2         ; Write 55h
      MOVLW       0AAh           ;
      MOVWF       EECON2         ; Write AAh
      BSF         EECON1, WR     ; Set WR bit to begin write
      BTFSC       EECON1, WR     ; Wait for write to complete
      BRA         $-2

      INCFSZ EEADR, F            ; Increment address
                                 ; Not zero, do it again
      BRA         Loop

      BCF         EECON1, WREN   ; Disable writes
                                 ; Enable interrupts
      BSF         INTCON, GIE

DS41159E-page 62                                                    2006 Microchip Technology Inc.
                                                                              PIC18FXX8

TABLE 5-1: REGISTERS ASSOCIATED WITH DATA EEPROM MEMORY

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

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

EEADR EEPROM Address Register                                                    xxxx xxxx uuuu uuuu

EEDATA EEPROM Data Register                                                      xxxx xxxx uuuu uuuu
EECON2 EEPROM Control Register 2 (not a physical register)
                                                                                 --                             --

EECON1   EEPGD CFGS               --     FREE WRERR WREN WR               RD     xx-0 x000 uu-0 u000
IPR2
PIR2     --     CMIP              --     EEIP BCLIP LVDIP TMR3IP ECCP1IP(1) -1-1 1111 -1-1 1111
PIE2
Legend:  --     CMIF              --     EEIF BCLIF LVDIF TMR3IF ECCP1IF(1) -0-0 0000 -0-0 0000

Note 1:  --     CMIE              --     EEIE BCLIE LVDIE TMR3IE ECCP1IE(1) -0-0 0000 -0-0 0000

         x = unknown, u = unchanged, r = reserved, - = unimplemented, read as `0'.
         Shaded cells are not used during Flash/EEPROM access.
         These registers or register bits are not implemented on the PIC18F248 and PIC18F258 and read as `0's.

2006 Microchip Technology Inc.                                                     DS41159E-page 63
PIC18FXX8

NOTES:

DS41159E-page 64   2006 Microchip Technology Inc.
6.0 FLASH PROGRAM MEMORY                                                PIC18FXX8

The Flash program memory is readable, writable and         6.1 Table Reads and Table Writes
erasable during normal operation over the entire VDD
range.                                                     In order to read and write program memory, there are
                                                           two operations that allow the processor to move bytes
A read from program memory is executed on one byte         between the program memory space and the data
at a time. A write to program memory is executed on        RAM:
blocks of 8 bytes at a time. Program memory is erased
in blocks of 64 bytes at a time. A bulk erase operation    Table Read (TBLRD)
may not be issued from user code.                           Table Write (TBLWT)

Writing or erasing program memory will cease instruc-      The program memory space is 16 bits wide, while the
tion fetches until the operation is complete. The          data RAM space is 8 bits wide. Table reads and table
program memory cannot be accessed during the write         writes move data between these two memory spaces
or erase, therefore, code cannot execute. An internal      through an 8-bit register (TABLAT).
programming timer terminates program memory writes
and erases.                                                Table read operations retrieve data from program
                                                           memory and place it into the data RAM space.
A value written to program memory does not need to be      Figure 6-1 shows the operation of a table read with
a valid instruction. Executing a program memory            program memory and data RAM.
location that forms an invalid instruction results in a
NOP.                                                       Table write operations store data from the data memory
                                                           space into holding registers in program memory. The
                                                           procedure to write the contents of the holding registers
                                                           into program memory is detailed in Section 6.5
                                                           "Writing to Flash Program Memory". Figure 6-2
                                                           shows the operation of a table write with program
                                                           memory and data RAM.

                                                           Table operations work with byte entities. A table block
                                                           containing data, rather than program instructions, is not
                                                           required to be word aligned. Therefore, a table block
                                                           can start and end at any byte address. If a table write is
                                                           being used to write executable code into program
                                                           memory, program instructions will need to be word
                                                           aligned.

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 points to a byte in program memory.

2006 Microchip Technology Inc.                                                    DS41159E-page 65
PIC18FXX8

FIGURE 6-2:       TABLE WRITE OPERATION

                                                                  Instruction: TBLWT*

                                                          Program Memory
                                                          Holding Registers

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

                  Program Memory
                  (TBLPTR)

Note 1: Table Pointer actually points to one of eight holding registers, the address of which is determined by TBLPTRL<2:0>.
              The process for physically writing data to the program memory array is discussed in Section 6.5 "Writing to Flash
              Program Memory".

6.2 Control Registers                                     The FREE bit, when set, will allow a program memory
                                                          erase operation. When the FREE bit is set, the erase
Several control registers are used in conjunction with    operation is initiated on the next WR command. When
the TBLRD and TBLWT instructions. These include the:      FREE is clear, only writes are enabled.

EECON1 register                                         The WREN bit, when set, will allow a write operation.
EECON2 register                                         On power-up, the WREN bit is clear. The WRERR bit is
TABLAT register                                         set when a write operation is interrupted by a MCLR
TBLPTR registers                                        Reset or a WDT Time-out Reset during normal opera-
                                                          tion. In these situations, the user can check the
6.2.1 EECON1 AND EECON2 REGISTERS                         WRERR bit and rewrite the location. It is necessary to
                                                          reload the data and address registers (EEDATA and
EECON1 is the control register for memory accesses.       EEADR) due to Reset values of zero.

EECON2 is not a physical register. Reading EECON2         Control bits, RD and WR, initiate read and write opera-
will read all `0's. The EECON2 register is used           tions, respectively. These bits cannot be cleared, only
exclusively in the memory write and erase sequences.      set, in software. They are cleared in hardware at the
                                                          completion of the read or write operation. The inability
Control bit EEPGD determines if the access will be a      to clear the WR bit in software prevents the accidental
program or data EEPROM memory access. When                or premature termination of a write operation. The RD
clear, any subsequent operations will operate on the      bit cannot be set when accessing program memory
data EEPROM memory. When set, any subsequent              (EEPGD = 1).
operations will operate on the program memory.
                                                          Note:                        Interrupt flag bit, EEIF in the PIR2 register,
Control bit CFGS determines if the access will be to the                               is set when write is complete. It must be
Configuration/Calibration registers or to program                                      cleared in software.
memory/data EEPROM memory. When set,
subsequent operations will operate on Configuration
registers regardless of EEPGD (see Section 24.0
"Special Features of the CPU"). When clear, memory
selection access is determined by EEPGD.

DS41159E-page 66                                                                        2006 Microchip Technology Inc.
                                                                             PIC18FXX8

REGISTER 6-1:  EECON1: EEPROM CONTROL REGISTER 1

               R/W-x R/W-x             U-0             R/W-0 R/W-x           R/W-0  R/S-0  R/S-0
                                                                             WREN    WR     RD
               EEPGD CFGS              --              FREE WRERR                               bit 0

               bit 7

bit 7          EEPGD: Flash Program or Data EEPROM Memory Select bit

               1 = Access program Flash memory
               0 = Access data EEPROM memory

bit 6          CFGS: Flash Program/Data EE or Configuration Select bit

               1 = Access Configuration registers
               0 = Access program Flash or data EEPROM memory

bit 5          Unimplemented: Read as `0'

bit 4          FREE: Flash Row Erase Enable bit

               1 = Erase the program memory row addressed by TBLPTR on the next WR command
                    (cleared by completion of erase operation)

               0 = Perform write only

bit 3          WRERR: Write Error Flag bit

               1 = A write operation is prematurely terminated
                    (any MCLR or any WDT Reset during self-timed programming in normal operation)

               0 = The write operation completed

               Note: When a WRERR occurs, the EEPGD and CFGS bits are not cleared. This allows
                           tracing of the error condition.

bit 2          WREN: Write Enable bit

               1 = Allows write cycles
               0 = Inhibits write to the EEPROM or Flash memory

bit 1          WR: Write Control bit

               1 = Initiates a data EEPROM erase/write cycle or a program memory erase cycle or write cycle
                    (The operation is self-timed and the bit is cleared by hardware once write is complete. The
                    WR bit can only be set (not cleared) in software.)

               0 = Write cycle to the EEPROM is complete

bit 0          RD: Read Control bit

               1 = Initiates an EEPROM read
                    (Read takes one cycle. RD is cleared in hardware. The RD bit can only be set (not cleared)
                    in software. RD bit cannot be set when EEPGD = 1.)

               0 = Does not initiate an EEPROM read

               Legend:               W = Writable bit  S = Settable 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

2006 Microchip Technology Inc.                                                    DS41159E-page 67
PIC18FXX8

6.2.2 TABLAT TABLE LATCH REGISTER                     6.2.4 TABLE POINTER BOUNDARIES

The Table Latch (TABLAT) is an 8-bit register mapped    TBLPTR is used in reads, writes and erases of the
into the SFR space. The Table Latch is used to hold     Flash program memory.
8-bit data during data transfers between program
memory and data RAM.                                    When a TBLRD is executed, all 22 bits of the Table
                                                        Pointer determine which byte is read from program
6.2.3  TBLPTR TABLE POINTER                           memory into TABLAT.
       REGISTER
                                                        When a TBLWT is executed, the three LSbs of the Table
The Table Pointer (TBLPTR) addresses a byte within      Pointer (TBLPTR<2:0>) determine which of the eight
the program memory. The TBLPTR is comprised of          program memory holding registers is written to. When
three SFR registers: Table Pointer Upper Byte, Table    the timed write to program memory (long write) begins,
Pointer High Byte and Table Pointer Low Byte            the 19 MSbs of the Table Pointer, TBLPTR
(TBLPTRU:TBLPTRH:TBLPTRL). These three regis-           (TBLPTR<21:3>), will determine which program
ters join to form a 22-bit wide pointer. The low-order  memory block of 8 bytes is written to. For more detail,
21 bits allow the device to address up to 2 Mbytes of   see Section 6.5 "Writing to Flash Program Memory".
program memory space. The 22nd bit allows access to
the device ID, the user ID and the configuration bits.  When an erase of program memory is executed, the
                                                        16 MSbs of the Table Pointer (TBLPTR<21:6>) point to
The Table Pointer, TBLPTR, is used by the TBLRD and     the 64-byte block that will be erased. The Least
TBLWT instructions. These instructions can update the   Significant bits (TBLPTR<5:0>) are ignored.
TBLPTR in one of four ways based on the table
operation. These operations are shown in Table 6-1.     Figure 6-3 describes the relevant boundaries of
These operations on the TBLPTR only affect the          TBLPTR based on Flash program memory operations.
low-order 21 bits.

TABLE 6-1:        TABLE POINTER OPERATIONS WITH TBLRD AND TBLWT INSTRUCTIONS
                                                                 Operation on Table Pointer
      Example                                                       TBLPTR is not modified

      TBLRD*                                           TBLPTR is incremented after the read/write
      TBLWT*                                           TBLPTR is decremented after the read/write
     TBLRD*+                                          TBLPTR is incremented before the read/write
     TBLWT*+
     TBLRD*-
     TBLWT*-
     TBLRD+*
     TBLWT+*

FIGURE 6-3:       TABLE POINTER BOUNDARIES BASED ON OPERATION

       21         TBLPTRU 16 15  TBLPTRH                87      TBLPTRL  0

                  ERASE TBLPTR<21:6>
                                 WRITE TBLPTR<21:3>
                                           READ TBLPTR<21:0>

DS41159E-page 68                                                 2006 Microchip Technology Inc.
                                                                          PIC18FXX8

6.3 Reading the Flash Program                        TBLPTR points to a byte address in program space.
         Memory                                      Executing TBLRD places the byte pointed to into
                                                     TABLAT. In addition, TBLPTR can be modified
The TBLRD instruction is used to retrieve data from  automatically for the next table read operation.
program memory and places it into data RAM. Table
reads from program memory are performed one byte at  The internal program memory is typically organized by
a time.                                              words. The Least Significant bit of the address selects
                                                     between the high and low bytes of the word. Figure 6-4
                                                     shows the interface between the internal program
                                                     memory and the TABLAT.

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

EXAMPLE 6-1: READING A FLASH PROGRAM MEMORY WORD

             MOVLW  CODE_ADDR_UPPER                  ; Load TBLPTR with the base
             MOVWF  TBLPTRU                          ; address of the word
             MOVLW  CODE_ADDR_HIGH
             MOVWF  TBLPTRH                          ; read into TABLAT and increment
             MOVLW  CODE_ADDR_LOW                    ; get data
             MOVWF  TBLPTRL                          ; read into TABLAT and increment
                                                     ; get data
READ_WORD

             TBLRD*+
             MOVF TABLAT, W
             MOVWF WORD_LSB
             TBLRD*+
             MOVF TABLAT, W
             MOVWF WORD_MSB

2006 Microchip Technology Inc.                                                         DS41159E-page 69
PIC18FXX8

6.4 Erasing Flash Program Memory                           6.4.1  FLASH PROGRAM MEMORY
                                                                  ERASE SEQUENCE
The minimum erase block is 32 words or 64 bytes. Only
through the use of an external programmer, or through      The sequence of events for erasing a block of internal
ICSP control, can larger blocks of program memory be       program memory location is:
bulk erased. Word erase in the Flash array is not
supported.                                                 1. Load Table Pointer with address of row being
                                                                 erased.
When initiating an erase sequence from the micro-
controller itself, a block of 64 bytes of program memory   2. Set the EECON1 register for the erase operation:
is erased. The Most Significant 16 bits of the                   set the EEPGD bit to point to program memory;
TBLPTR<21:6> point to the block being erased.                     clear the CFGS bit to access program memory;
TBLPTR<5:0> are ignored.                                          set the WREN bit to enable writes;
                                                                  set the FREE bit to enable the erase.
The EECON1 register commands the erase operation.
The EEPGD bit must be set to point to the Flash            3. Disable interrupts.
program memory. The WREN bit must be set to enable         4. Write 55h to EECON2.
write operations. The FREE bit is set to select an erase   5. Write 0AAh to EECON2.
operation.                                                 6. Set the WR bit. This will begin the row erase

For protection, the write initiate sequence for EECON2           cycle.
must be used.                                              7. The CPU will stall for duration of the erase

A long write is necessary for erasing the internal Flash.        (about 2 ms using internal timer).
Instruction execution is halted while in a long write      8. Re-enable interrupts.
cycle. The long write will be terminated by the internal
programming timer.

EXAMPLE 6-2: ERASING A FLASH PROGRAM MEMORY ROW

      ERASE_ROW   MOVLW  upper (CODE_ADDR)                 ; load TBLPTR with the base
                  MOVWF  TBLPTRU                           ; address of the memory block
Required          MOVLW  high (CODE_ADDR)
Sequence          MOVWF  TBLPTRH                           ; point to FLASH program memory
                  MOVLW  low (CODE_ADDR)                   ; access FLASH program memory
                  MOVWF  TBLPTRL                           ; enable write to memory
                                                           ; enable Row Erase operation
                  BSF    EECON1, EEPGD                     ; disable interrupts
                  BCF    EECON1, CFGS
                  BSF    EECON1, WREN                      ; write 55H
                  BSF    EECON1, FREE
                  BCF    INTCON, GIE                       ; write 0AAH
                  MOVLW  55h                               ; start erase (CPU stall)
                  MOVWF  EECON2                            ; NOP needed for proper code execution
                  MOVLW  0AAh                              ; re-enable interrupts
                  MOVWF  EECON2
                  BSF    EECON1, WR
                  NOP
                  BSF    INTCON, GIE

DS41159E-page 70                                                   2006 Microchip Technology Inc.
                                                                                PIC18FXX8

6.5 Writing to Flash Program Memory                         6.5.1  FLASH PROGRAM MEMORY WRITE
                                                                   SEQUENCE
The minimum programming block is 4 words or 8 bytes.
Word or byte programming is not supported.                  The sequence of events for programming an internal
                                                            program memory location should be:
Table writes are used internally to load the holding
registers needed to program the Flash memory. There         1. Read 64 bytes into RAM.
are 8 holding registers used by the table writes for        2. Update data values in RAM as necessary.
programming.                                                3. Load Table Pointer with address being erased.
                                                            4. Do the row erase procedure.
Since the Table Latch (TABLAT) is only a single byte,       5. Load Table Pointer with address of first byte
the TBLWT instruction has to be executed 8 times for
each programming operation. All of the table write                being written.
operations will essentially be short writes, because only   6. Write the first 8 bytes into the holding registers
the holding registers are written. At the end of updating
8 registers, the EECON1 register must be written to, to           using the TBLWT instruction, auto-increment
start the programming operation with a long write.                may be used.
                                                            7. Set the EECON1 register for the write operation:
The long write is necessary for programming the inter-             set the EEPGD bit to point to program memory;
nal Flash. Instruction execution is halted while in a long         clear the CFGS bit to access program memory;
write cycle. The long write will be terminated by the             set the WREN to enable byte writes.
internal programming timer.                                 8. Disable interrupts.
                                                            9. Write 55h to EECON2.
The EEPROM on-chip timer controls the write time.           10. Write AAh to EECON2.
The write/erase voltages are generated by an on-chip        11. Set the WR bit. This will begin the write cycle.
charge pump rated to operate over the voltage range of      12. The CPU will stall for duration of the write (about
the device for byte or word operations.                           2 ms using internal timer).
                                                            13. Re-enable interrupts.
                                                            14. Repeat steps 6-14 seven times to write
                                                                  64 bytes.
                                                            15. Verify the memory (table read).

                                                            This procedure will require about 18 ms to update one
                                                            row of 64 bytes of memory. An example of the required
                                                            code is given in Example 6-3.

                                                            Note:  Before setting the WR bit, the Table
                                                                   Pointer address needs to be within the
                                                                   intended address range of the 8 bytes in
                                                                   the holding registers.

FIGURE 6-5:      TABLE WRITES TO FLASH PROGRAM MEMORY

                                                                    TABLAT
                                                                Write Register

                 8                   8                             8                                       8

TBLPTR = xxxxx0     TBLPTR = xxxxx1     TBLPTR = xxxxx2                         TBLPTR = xxxxx7
                                                                                                 Holding Register
Holding Register                  Holding Register          Holding Register

                                        Program Memory

2006 Microchip Technology Inc.                                                DS41159E-page 71
PIC18FXX8

EXAMPLE 6-3: WRITING TO FLASH PROGRAM MEMORY

                  MOVLW D'64                    ; number of bytes in erase block
                                                ; point to buffer
                  MOVWF COUNTER
                                                ; Load TBLPTR with the base
                  MOVLW high (BUFFER_ADDR)      ; address of the memory block

                  MOVWF FSR0H                   ; read into TABLAT, and inc
                                                ; get data
                  MOVLW low (BUFFER_ADDR)       ; store data
                                                ; done?
                  MOVWF FSR0L                   ; repeat
                                                ; point to buffer
                  MOVLW upper (CODE_ADDR)
                                                ; update buffer word
                  MOVWF TBLPTRU
                                                ; load TBLPTR with the base
                  MOVLW high (CODE_ADDR)        ; address of the memory block

                  MOVWF TBLPTRH                 ; point to FLASH program memory
                                                ; access FLASH program memory
                  MOVLW low (CODE_ADDR)         ; enable write to memory
                                                ; enable Row Erase operation
                  MOVWF TBLPTRL                 ; disable interrupts
                                                ; write 55H
READ_BLOCK                                      ; write AAH
                                                ; start erase (CPU stall)
                  TBLRD*+                       ; re-enable interrupts
                                                ; dummy read decrement
                  MOVF TABLAT, W                ; number of write buffer groups of 8 bytes
                                                ; point to buffer
                  MOVWF POSTINC0
                                                ; number of bytes in holding register
                  DECFSZ COUNTER
                                                ; get low byte of buffer data
                  BRA      READ_BLOCK           ; present data to table latch
                                                ; write data, perform a short write
MODIFY_WORD                                     ; to internal TBLWT holding register.
                                                ; loop until buffers are full
                  MOVLW DATA_ADDR_HIGH

                  MOVWF FSR0H

                  MOVLW DATA_ADDR_LOW

                  MOVWF FSR0L

                  MOVLW NEW_DATA_LOW

                  MOVWF POSTINC0

                  MOVLW NEW_DATA_HIGH

                  MOVWF INDF0

ERASE_BLOCK

                  MOVLW upper (CODE_ADDR)

                  MOVWF TBLPTRU

                  MOVLW high (CODE_ADDR)

                  MOVWF TBLPTRH

                  MOVLW low (CODE_ADDR)

                  MOVWF TBLPTRL

                  BSF      EECON1, EEPGD

                  BCF      EECON1, CFGS

                  BSF      EECON1, WREN

                  BSF      EECON1, FREE

                  BCF      INTCON, GIE

                  MOVLW 55h

Required          MOVWF EECON2

Sequence          MOVLW 0AAh

                  MOVWF EECON2

                  BSF      EECON1, WR

                  NOP

                  BSF      INTCON, GIE

                  TBLRD*-

WRITE_BUFFER_BACK

                  MOVLW 8

                  MOVWF COUNTER_HI

                  MOVLW high (BUFFER_ADDR)

                  MOVWF FSR0H

                  MOVLW low (BUFFER_ADDR)

                  MOVWF FSR0L

PROGRAM_LOOP

                  MOVLW 8

                  MOVWF COUNTER

WRITE_WORD_TO_HREGS

                  MOVFW POSTINC0, W

                  MOVWF TABLAT

                  TBLWT+*

                  DECFSZ COUNTER

                  BRA      WRITE_WORD_TO_HREGS

DS41159E-page 72                                 2006 Microchip Technology Inc.
                                                                PIC18FXX8

EXAMPLE 6-3: WRITING TO FLASH PROGRAM MEMORY (CONTINUED)

WRITE_WORD_TO_HREGS                                      ; get low byte of buffer data
                           MOVFW POSTINC0, W             ; present data to table latch
                           MOVWF TABLAT                  ; write data, perform a short write
                           TBLWT+*                       ; to internal TBLWT holding register.
                                                         ; loop until buffers are full
                DECFSZ  COUNTER
                        WRITE_WORD_TO_HREGS              ; point to FLASH program memory
                BRA                                      ; access FLASH program memory
                        EECON1, EEPGD                    ; enable write to memory
PROGRAM_MEMORY          EECON1, CFGS                     ; disable interrupts
                        EECON1, WREN                     ; write 55h
                BSF     INTCON, GIE
                        55h                              ; write 0AAh
                BCF     EECON2                           ; start program (CPU stall)
                        0AAh
                BSF     EECON2                           ; re-enable interrupts
                        EECON1, WR                       ; loop until done
                BCF
                        INTCON, GIE                      ; disable write to memory
                MOVLW   COUNTER_HI
                        PROGRAM_LOOP
Required        MOVWF   EECON1, WREN

Sequence        MOVLW

                MOVWF

                BSF

                NOP

                BSF

                DECFSZ

                BRA

                BCF

6.5.2 WRITE VERIFY                                       6.5.4  PROTECTION AGAINST SPURIOUS
                                                                WRITES
Depending on the application, good programming
practice may dictate that the value written to the       To reduce the probability against spurious writes to
memory should be verified against the original value.    Flash program memory, the write initiate sequence
This should be used in applications where excessive      must also be followed. See Section 24.0 "Special
writes can stress bits near the specification limit.     Features of the CPU" for more detail.

6.5.3     UNEXPECTED TERMINATION OF                      6.6 Flash Program Operation During
          WRITE OPERATION                                         Code Protection

If a write is terminated by an unplanned event, such as  See Section 24.0 "Special Features of the CPU" for
loss of power or an unexpected Reset, the memory         details on code protection of Flash program memory.
location just programmed should be verified and repro-
grammed if needed.The WRERR bit is set when a write
operation is interrupted by a MCLR Reset or a WDT
Time-out Reset during normal operation. In these
situations, users can check the WRERR bit and rewrite
the location.

2006 Microchip Technology Inc.                                DS41159E-page 73
PIC18FXX8

TABLE 6-2: REGISTERS ASSOCIATED WITH PROGRAM FLASH MEMORY

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

TBLPTRU --        --     bit 21 Program Memory Table Pointer Upper Byte           --00 0000 --00 0000

                                        (TBLPTR<20:16>)

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

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

TABLAT Program Memory Table Latch                                                 0000 0000 0000 0000

INTCON GIE/GIEH PEIE/ TMR0IE            INTE   RBIE TMR0IF INTF            RBIF 0000 000x 0000 000u
                                  GIEL

EECON2 EEPROM Control Register 2 (not a physical register)                        --                            --

EECON1 EEPGD CFGS        --             FREE WRERR WREN WR                 RD     xx-0 x000 uu-0 u000

IPR2     --       CMIP   --             EEIP   BCLIP LVDIP TMR3IP ECCP1IP(1) -1-1 1111 -1-1 1111

PIR2     --       CMIF   --             EEIF   BCLIF LVDIF TMR3IF ECCP1IF(1) -0-0 0000 -0-0 0000

PIE2     --       CMIE   --             EEIE   BCLIE LVDIE TMR3IE ECCP1IE(1) -0-0 0000 -0-0 0000

Legend:  x = unknown, u = unchanged, - = unimplemented, read as `0'.
Note 1:  Shaded cells are not used during Flash/EEPROM access.
         These registers or register bits are not implemented on the PIC18F248 and PIC18F258 and read as `0's.

DS41159E-page 74                                                                2006 Microchip Technology Inc.
                                                                                   PIC18FXX8

7.0 8 x 8 HARDWARE MULTIPLIER                                    7.2 Operation

7.1 Introduction                                                 Example 7-1 shows the sequence to do an 8 x 8
                                                                 unsigned multiply. Only one instruction is required
An 8 x 8 hardware multiplier is included in the ALU of           when one argument of the multiply is already loaded in
the PIC18FXX8 devices. By making the multiply a                  the WREG register.
hardware operation, it completes in a single instruction
cycle. This is an unsigned multiply that gives a 16-bit          Example 7-2 shows the sequence to do an 8 x 8 signed
result. The result is stored in the 16-bit product register      multiply. To account for the sign bits of the arguments,
pair (PRODH:PRODL). The multiplier does not affect               each argument's Most Significant bit (MSb) is tested
any flags in the ALUSTA register.                                and the appropriate subtractions are done.

Making the 8 x 8 multiplier execute in a single cycle            EXAMPLE 7-1:      8 x 8 UNSIGNED
gives the following advantages:                                                    MULTIPLY ROUTINE

Higher computational throughput                                MOVF    ARG1, W       ;
Reduces code size requirements for multiply                    MULWF   ARG2          ; ARG1 * ARG2 ->
                                                                                       ; PRODH:PRODL
   algorithms
                                                                 EXAMPLE 7-2:      8 x 8 SIGNED MULTIPLY
The performance increase allows the device to be used                              ROUTINE
in applications previously reserved for Digital Signal
Processors.                                                      MOVF    ARG1, W       ; ARG1 * ARG2 ->
                                                                 MULWF   ARG2
Table 7-1 shows a performance comparison between                                       ; PRODH:PRODL
Enhanced devices using the single-cycle hardware                 BTFSC   ARG2, SB
multiply and performing the same function without the            SUBWF   PRODH
hardware multiply.
                                                                 MOVF    ARG2, W
                                                                 BTFSC   ARG1, SB      ; Test Sign Bit
                                                                 SUBWF   PRODH
                                                                                       ; PRODH = PRODH

                                                                                       ;        - ARG1

                                                                                       ; Test Sign Bit

                                                                                       ; PRODH = PRODH

                                                                                       ;        - ARG2

TABLE 7-1: PERFORMANCE COMPARISON

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

                  Hardware multiply                          24

16 x 16 signed    Without hardware multiply                  52

                  Hardware multiply                          36

2006 Microchip Technology Inc.                                                          DS41159E-page 75
PIC18FXX8

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

                           (ARG1L ARG2L)                                    (ARG1L ARG2L)+
                                                                              (-1 ARG2H<7> ARG1H:ARG1L 216) +
                                                                              (-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                                                    MOVFF PRODH, RES1  ;
                                                                    MOVFF PRODL, RES0
   MULWF ARG2L    ; ARG1L * ARG2L ->                          ;                        ; ARG1H * ARG2H ->
                                                                    MOVF ARG1H, W      ; PRODH:PRODL
                  ; PRODH:PRODL                                     MULWF ARG2H        ;
                                                                                       ;
   MOVFF PRODH, RES1 ;
                                                                                       ; ARG1L * ARG2H ->
   MOVFF PRODL, RES0 ;                                                                 ; PRODH:PRODL
                                                                                       ;
;                                                                                      ; Add cross
                                                                                       ; products
   MOVF ARG1H, W                                                    MOVFF PRODH, RES3  ;
                                                                    MOVFF PRODL, RES2  ;
   MULWF ARG2H    ; ARG1H * ARG2H ->                          ;                        ;
                                                                    MOVF ARG1L, W
                  ; PRODH:PRODL                                     MULWF ARG2H        ;
                                                                                       ; ARG1H * ARG2L ->
   MOVFF PRODH, RES3 ;                                                                 ; PRODH:PRODL
                                                                                       ;
   MOVFF PRODL, RES2 ;                                                                 ; Add cross
                                                                                       ; products
;                                                                                      ;
                                                                                       ;
   MOVF ARG1L, W                                                    MOVF PRODL, W      ;
                                                                    ADDWF RES1
   MULWF ARG2H    ; ARG1L * ARG2H ->                                MOVF PRODH, W      ; ARG2H:ARG2L neg?
                                                                    ADDWFC RES2        ; no, check ARG1
                  ; PRODH:PRODL                                     CLRF WREG          ;
                                                                    ADDWFC RES3        ;
   MOVF PRODL, W  ;                                           ;                        ;
                                                                    MOVF ARG1H, W
   ADDWF RES1     ; Add cross                                       MULWF ARG2L        ; ARG1H:ARG1L neg?
                                                                                       ; no, done
   MOVF PRODH, W  ; products                                                           ;
                                                                                       ;
   ADDWFC RES2    ;                                                                    ;

   CLRF WREG      ;

   ADDWFC RES3    ;

;

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

DS41159E-page 76                                                             2006 Microchip Technology Inc.
                                                                     PIC18FXX8

8.0 INTERRUPTS                                                When the IPEN bit is cleared (default state), the
                                                              interrupt priority feature is disabled and interrupts are
The PIC18FXX8 devices have multiple interrupt                 compatible with PICmicro mid-range devices. In
sources and an interrupt priority feature that allows         Compatibility mode, the interrupt priority bits for each
each interrupt source to be assigned a high priority          source have no effect. The PEIE bit (INTCON register)
level or a low priority level. The high priority interrupt    enables/disables all peripheral interrupt sources. The
vector is at 000008h and the low priority interrupt vector    GIE bit (INTCON register) enables/disables all interrupt
is at 000018h. High priority interrupt events will            sources. All interrupts branch to address 000008h in
override any low priority interrupts that may be in           Compatibility mode.
progress.
                                                              When an interrupt is responded to, the global interrupt
There are 13 registers that are used to control interrupt     enable bit is cleared to disable further interrupts. If the
operation. These registers are:                               IPEN bit is cleared, this is the GIE bit. If interrupt priority
                                                              levels are used, this will be either the GIEH or GIEL bit.
RCON                                                        High priority interrupt sources can interrupt a low
INTCON                                                      priority interrupt.
INTCON2
                                                              The return address is pushed onto the stack and the
INTCON3                                                     PC is loaded with the interrupt vector address
PIR1, PIR2, PIR3                                            (000008h or 000018h). Once in the Interrupt Service
PIE1, PIE2, PIE3                                            Routine, the source(s) of the interrupt can be deter-
                                                              mined by polling the interrupt flag bits. The interrupt
IPR1, IPR2, IPR3                                            flag bits must be cleared in software before re-enabling
                                                              interrupts to avoid recursive interrupts.
It is recommended that the Microchip header files,
supplied with MPLAB IDE, be used for the symbolic bit        The "return from interrupt" instruction, RETFIE, exits
names in these registers. This allows the assembler/          the interrupt routine and sets the GIE bit (GIEH or GIEL
compiler to automatically take care of the placement of       if priority levels are used), which re-enables interrupts.
these bits within the specified register.
                                                              For external interrupt events, such as the INT pins or
Each interrupt source has three bits to control its           the PORTB input change interrupt, the interrupt latency
operation. The functions of these bits are:                   will be three to four instruction cycles. The exact
                                                              latency is the same for one or two-cycle instructions.
Flag bit to indicate that an interrupt event                Individual interrupt flag bits are set regardless of the
   occurred                                                   status of their corresponding enable bit or the GIE bit.

Enable bit that allows program execution to                 Note:  Do not use the MOVFF instruction to modify
   branch to the interrupt vector address when the                   any of the interrupt control registers while
   flag bit is set                                                   any interrupt is enabled. Doing so may
                                                                     cause erratic microcontroller behavior.
Priority bit to select high priority or low priority

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

2006 Microchip Technology Inc.                                     DS41159E-page 77
PIC18FXX8

FIGURE 8-1:       INTERRUPT LOGIC

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

                                                                                       INT2IF
                                                                                       INT2IE
                                                                                       INT2IP

                                     IPEN

                                                                                             IPEN
                                                                                      GIEL/PEIE

                                                                                                     IPEN

                                     Additional Peripheral Interrupts

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

                  TMR1IF                                                        RBIF
                  TMR1IE                                                        RBIE
                  TMR1IP                                                        RBIP
                  XXXXIF
                  XXXXIE                                                      INT0IF
                  XXXXIP                                                     INT0IE

                                                                              INT1IF
                                   Additional Peripheral Interrupts INT1IE

                                                                             INT1IP

                                                                             INT2IF
                                                                             INT2IE
                                                                             INT2IP

DS41159E-page 78                                                                                           2006 Microchip Technology Inc.
                                                                   PIC18FXX8

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 regis-              its corresponding enable bit or the global
ters which contain various enable, priority and flag bits.         interrupt enable bit. User software should
Because of the number of interrupts to be controlled,              ensure the appropriate interrupt flag bits
PIC18FXX8 devices have three INTCON registers.                     are clear prior to enabling an interrupt.
They are detailed in Register 8-1 through Register 8-3.            This feature allows software polling.

REGISTER 8-1:  INTCON: INTERRUPT CONTROL REGISTER

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

bit 7 GIE/GIEH: Global Interrupt Enable bit
            When IPEN (RCON<7>) = 0:
            1 = Enables all unmasked interrupts
            0 = Disables all interrupts

            When IPEN (RCON<7>) = 1:
            1 = Enables all high priority interrupts
            0 = Disables all priority interrupts

bit 6 PEIE/GIEL: Peripheral Interrupt Enable bit

            When IPEN (RCON<7>) = 0:
            1 = Enables all unmasked peripheral interrupts
            0 = Disables all peripheral interrupts

            When IPEN (RCON<7>) = 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 by reading PORTB)
            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

2006 Microchip Technology Inc.                                           DS41159E-page 79
PIC18FXX8

REGISTER 8-2: INTCON2: INTERRUPT CONTROL REGISTER 2

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

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

bit 5             INTEDG0: External Interrupt 0 Edge Select bit
                  1 = Interrupt on rising edge
bit 4-3           0 = Interrupt on falling edge
bit 2
                  INTEDG1: External Interrupt 1 Edge Select bit
bit 1             1 = Interrupt on rising edge
bit 0             0 = Interrupt on falling edge

                  Unimplemented: Read as `0'

                  TMR0IP: TMR0 Overflow Interrupt Priority bit
                  1 = High priority
                  0 = Low priority

                  Unimplemented: Read as `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 software polling.

DS41159E-page 80                                                                   2006 Microchip Technology Inc.
                                                      PIC18FXX8

REGISTER 8-3: INTCON3: INTERRUPT CONTROL REGISTER 3

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 software polling.

2006 Microchip Technology Inc.                                                    DS41159E-page 81
PIC18FXX8

8.2 PIR Registers                                           Note 1: Interrupt flag bits are set when an interrupt
                                                                        condition occurs regardless of the state of
The Peripheral Interrupt Request (PIR) registers                        its corresponding enable bit or the Global
contain the individual flag bits for the peripheral                     Interrupt Enable bit, GIE (INTCON
interrupts (Register 8-4 through Register 8-6). Due to                  register).
the number of peripheral interrupt sources, there are
three Peripheral Interrupt Request (Flag) registers                2: User software should ensure the appropri-
(PIR1, PIR2, PIR3).                                                     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

bit 6             ADIF: A/D Converter Interrupt Flag bit

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

bit 5             RCIF: USART Receive Interrupt Flag bit

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

bit 4             TXIF: USART Transmit Interrupt Flag bit

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

bit 3             SSPIF: Master Synchronous Serial Port Interrupt Flag bit

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

bit 2             CCP1IF: CCP1 Interrupt Flag bit

                  Capture mode:
                  1 = A TMR1 register capture occurred (must be cleared in software)
                  0 = No TMR1 register capture occurred

                  Compare mode:
                  1 = A TMR1 register compare match occurred (must be cleared in software)
                  0 = No TMR1 register compare match occurred

                  PWM mode:
                  Unused in this mode.

bit 1             TMR2IF: TMR2 to PR2 Match Interrupt Flag bit

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

bit 0             TMR1IF: TMR1 Overflow Interrupt Flag bit

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

                  Note 1: This bit is only available on PIC18F4X8 devices. For PIC18F2X8 devices, this bit
                              is unimplemented and reads as `0'.

                  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

DS41159E-page 82                                                                  2006 Microchip Technology Inc.
                                                                              PIC18FXX8

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

               U-0                R/W-0    U-0     R/W-0     R/W-0         R/W-0    R/W-0     R/W-0
                                                   EEIF      BCLIF         LVDIF   TMR3IF  ECCP1IF(1)
               --                 CMIF(1)  --
                                                                                                     bit 0
               bit 7

bit 7          Unimplemented: Read as `0'

bit 6          CMIF: Comparator Interrupt Flag bit(1)

               1 = Comparator input has changed
               0 = Comparator input has not changed

bit 5          Unimplemented: Read as `0'

bit 4          EEIF: EEPROM Write Operation Interrupt Flag bit

               1 = Write operation is complete (must be cleared in software)
               0 = Write operation is not complete

bit 3          BCLIF: Bus Collision Interrupt Flag bit

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

bit 2          LVDIF: Low-Voltage Detect Interrupt Flag bit

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

bit 1          TMR3IF: TMR3 Overflow Interrupt Flag bit

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

               0 = TMR3 register did not overflow

bit 0          ECCP1IF: ECCP1 Interrupt Flag bit(1)

               Capture mode:
               1 = A TMR1 (TMR3) register capture occurred (must be cleared in software)
               0 = No TMR1 (TMR3) 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.

               Note 1: This bit is only available on PIC18F4X8 devices. For PIC18F2X8 devices, this bit
                           is unimplemented and reads as `0'.

               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

2006 Microchip Technology Inc.                                                          DS41159E-page 83
PIC18FXX8

REGISTER 8-6:     PIR3: PERIPHERAL INTERRUPT REQUEST (FLAG) REGISTER 3
                     R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
                      IRXIF WAKIF ERRIF TXB2IF TXB1IF TXB0IF RXB1IF                R/W-0
                                                                                  RXB0IF
                   bit 7
                                                                                        bit 0

bit 7             IRXIF: Invalid Message Received Interrupt Flag bit

                  1 = An invalid message has occurred on the CAN bus
                  0 = An invalid message has not occurred on the CAN bus

bit 6             WAKIF: Bus Activity Wake-up Interrupt Flag bit

                  1 = Activity on the CAN bus has occurred
                  0 = Activity on the CAN bus has not occurred

bit 5             ERRIF: CAN bus Error Interrupt Flag bit

                  1 = An error has occurred in the CAN module (multiple sources)
                  0 = An error has not occurred in the CAN module

bit 4             TXB2IF: Transmit Buffer 2 Interrupt Flag bit

                  1 = Transmit Buffer 2 has completed transmission of a message and may be reloaded
                  0 = Transmit Buffer 2 has not completed transmission of a message

bit 3             TXB1IF: Transmit Buffer 1 Interrupt Flag bit

                  1 = Transmit Buffer 1 has completed transmission of a message and may be reloaded
                  0 = Transmit Buffer 1 has not completed transmission of a message

bit 2             TXB0IF: Transmit Buffer 0 Interrupt Flag bit

                  1 = Transmit Buffer 0 has completed transmission of a message and may be reloaded
                  0 = Transmit Buffer 0 has not completed transmission of a message

bit 1             RXB1IF: Receive Buffer 1 Interrupt Flag bit

                  1 = Receive Buffer 1 has received a new message
                  0 = Receive Buffer 1 has not received a new message

bit 0             RXB0IF: Receive Buffer 0 Interrupt Flag bit

                  1 = Receive Buffer 0 has received a new message
                  0 = Receive Buffer 0 has not received a new message

                  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

DS41159E-page 84                                                          2006 Microchip Technology Inc.
                                                                              PIC18FXX8

8.3 PIE Registers

The Peripheral Interrupt Enable (PIE) registers contain
the individual enable bits for the peripheral interrupts
(Register 8-7 through Register 8-9). Due to the number
of peripheral interrupt sources, there are three Periph-
eral Interrupt Enable registers (PIE1, PIE2, PIE3).
When IPEN is clear, the PEIE bit must be set to enable
any of these peripheral interrupts.

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

bit 6          ADIE: A/D Converter Interrupt Enable bit

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

bit 5          RCIE: USART Receive Interrupt Enable bit

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

bit 4          TXIE: USART Transmit Interrupt Enable bit

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

bit 3          SSPIE: Master Synchronous Serial Port Interrupt Enable bit

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

bit 2          CCP1IE: CCP1 Interrupt Enable bit

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

bit 1          TMR2IE: TMR2 to PR2 Match Interrupt Enable bit

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

bit 0          TMR1IE: TMR1 Overflow Interrupt Enable bit

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

               Note 1: This bit is only available on PIC18F4X8 devices. For PIC18F2X8 devices, this bit
                           is unimplemented and reads as `0'.

               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

2006 Microchip Technology Inc.                                                      DS41159E-page 85
PIC18FXX8

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

                  U-0           R/W-0    U-0        R/W-0         R/W-0  R/W-0   R/W-0     R/W-0
                                                    EEIE          BCLIE  LVDIE  TMR3IE  ECCP1IE(1)
                  --            CMIE(1)  --
                                                                                                  bit 0
                  bit 7

bit 7             Unimplemented: Read as `0'

bit 6             CMIE: Comparator Interrupt Enable bit(1)

                  1 = Enables the comparator interrupt
                  0 = Disables the comparator interrupt

bit 5             Unimplemented: Read as `0'

bit 4             EEIE: EEPROM Write Interrupt Enable bit

                  1 = Enabled
                  0 = Disabled

bit 3             BCLIE: Bus Collision Interrupt Enable bit

                  1 = Enabled
                  0 = Disabled

bit 2             LVDIE: Low-Voltage Detect Interrupt Enable bit

                  1 = Enabled
                  0 = Disabled

bit 1             TMR3IE: TMR3 Overflow Interrupt Enable bit

                  1 = Enables the TMR3 overflow interrupt

                  0 = Disables the TMR3 overflow interrupt

bit 0             ECCP1IE: ECCP1 Interrupt Enable bit(1)

                  1 = Enables the ECCP1 interrupt
                  0 = Disables the ECCP1 interrupt

                  Note 1: This bit is only available on PIC18F4X8 devices. For PIC18F2X8 devices, this bit
                              is unimplemented and reads as `0'.

                  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

DS41159E-page 86                                                          2006 Microchip Technology Inc.
                                                                         PIC18FXX8

REGISTER 8-9:  PIE3: PERIPHERAL INTERRUPT ENABLE REGISTER 3
                  R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
                   IRXIE WAKIE ERRIE TXB2IE TXB1IE TXB0IE                 R/W-1   R/W-1
                                                                         RXB1IE  RXB0IE
                bit 7
                                                                                       bit 0

bit 7          IRXIE: Invalid CAN Message Received Interrupt Enable bit

               1 = Enables the invalid CAN message received interrupt
               0 = Disables the invalid CAN message received interrupt

bit 6          WAKIE: Bus Activity Wake-up Interrupt Enable bit

               1 = Enables the bus activity wake-up interrupt
               0 = Disables the bus activity wake-up interrupt

bit 5          ERRIE: CAN bus Error Interrupt Enable bit

               1 = Enables the CAN bus error interrupt
               0 = Disables the CAN bus error interrupt

bit 4          TXB2IE: Transmit Buffer 2 Interrupt Enable bit

               1 = Enables the Transmit Buffer 2 interrupt
               0 = Disables the Transmit Buffer 2 interrupt

bit 3          TXB1IE: Transmit Buffer 1 Interrupt Enable bit

               1 = Enables the Transmit Buffer 1 interrupt
               0 = Disables the Transmit Buffer 1 interrupt

bit 2          TXB0IE: Transmit Buffer 0 Interrupt Enable bit

               1 = Enables the Transmit Buffer 0 interrupt
               0 = Disables the Transmit Buffer 0 interrupt

bit 1          RXB1IE: Receive Buffer 1 Interrupt Enable bit

               1 = Enables the Receive Buffer 1 interrupt
               0 = Disables the Receive Buffer 1 interrupt

bit 0          RXB0IE: Receive Buffer 0 Interrupt Enable bit

               1 = Enables the Receive Buffer 0 interrupt
               0 = Disables the Receive Buffer 0 interrupt

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

2006 Microchip Technology Inc.                                         DS41159E-page 87
PIC18FXX8

8.4 IPR Registers

The Interrupt Priority (IPR) registers contain the individ-
ual priority bits for the peripheral interrupts. Due to the
number of peripheral interrupt sources, there are three
Peripheral Interrupt Priority registers (IPR1, IPR2 and
IPR3). The operation of the priority bits requires that
the Interrupt Priority Enable bit (IPEN) be set.

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

bit 6             ADIP: A/D Converter Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 5             RCIP: USART Receive Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 4             TXIP: USART Transmit Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 3             SSPIP: Master Synchronous Serial Port Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 2             CCP1IP: CCP1 Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 1             TMR2IP: TMR2 to PR2 Match Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 0             TMR1IP: TMR1 Overflow Interrupt Priority bit

                  1 = High priority

                  0 = Low priority

                  Note 1: This bit is only available on PIC18F4X8 devices. For PIC18F2X8 devices, this bit
                              is unimplemented and reads as `0'.

                  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

DS41159E-page 88                                                                   2006 Microchip Technology Inc.
                                                                         PIC18FXX8

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

                U-0               R/W-1    U-0  R/W-1             R/W-1  R/W-1   R/W-1     R/W-1
                                                EEIP              BCLIP  LVDIP  TMR3IP  ECCP1IP(1)
                --                CMIP(1)  --
                                                                                                  bit 0
                bit 7

bit 7           Unimplemented: Read as `0'

bit 6           CMIP: Comparator Interrupt Priority bit(1)

                1 = High priority
                0 = Low priority

bit 5           Unimplemented: Read as `0'

bit 4           EEIP: EEPROM Write Interrupt Priority bit

                1 = High priority
                0 = Low priority

bit 3           BCLIP: Bus Collision Interrupt Priority bit

                1 = High priority
                0 = Low priority

bit 2           LVDIP: Low-Voltage Detect Interrupt Priority bit

                1 = High priority
                0 = Low priority

bit 1           TMR3IP: TMR3 Overflow Interrupt Priority bit

                1 = High priority

                0 = Low priority

bit 0           ECCP1IP: ECCP1 Interrupt Priority bit(1)

                1 = High priority
                0 = Low priority

                Note 1: This bit is only available on PIC18F4X8 devices. For PIC18F2X8 devices, this bit
                            is unimplemented and reads as `0'.

                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

2006 Microchip Technology Inc.                                                DS41159E-page 89
PIC18FXX8

REGISTER 8-12:    IPR3: PERIPHERAL INTERRUPT PRIORITY REGISTER 3
                     R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
                      IRXIP WAKIP ERRIP TXB2IP TXB1IP TXB0IP               R/W-1   R/W-1
                                                                          RXB1IP  RXB0IP
                   bit 7
                                                                                        bit 0

bit 7             IRXIP: Invalid Message Received Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 6             WAKIP: Bus Activity Wake-up Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 5             ERRIP: CAN bus Error Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 4             TXB2IP: Transmit Buffer 2 Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 3             TXB1IP: Transmit Buffer 1 Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 2             TXB0IP: Transmit Buffer 0 Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 1             RXB1IP: Receive Buffer 1 Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 0             RXB0IP: Receive Buffer 0 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

DS41159E-page 90                                                          2006 Microchip Technology Inc.
                                                                        PIC18FXX8

8.5 RCON Register

The Reset Control (RCON) register contains the IPEN
bit which is used to enable prioritized interrupts. The
functions of the other bits in this register are discussed
in more detail in Section 4.14 "RCON Register".

REGISTER 8-13: RCON: RESET CONTROL REGISTER

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

         IPEN                     --   --                   RI     TO   PD         POR  BOR

         bit 7                                                                          bit 0

bit 7    IPEN: Interrupt Priority Enable bit
         1 = Enable priority levels on interrupts
bit 6-5  0 = Disable priority levels on interrupts (PIC16CXXX Compatibility mode)
bit 4    Unimplemented: Read as `0'
bit 3    RI: RESET Instruction Flag bit
bit 2    For details of bit operation, see Register 4-3.
bit 1    TO: Watchdog Time-out Flag bit
bit 0    For details of bit operation, see Register 4-3.
         PD: Power-down Detection Flag bit
         For details of bit operation, see Register 4-3.
         POR: Power-on Reset Status bit
         For details of bit operation, see Register 4-3.
         BOR: Brown-out Reset Status bit
         For details of bit operation, see Register 4-3.

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

2006 Microchip Technology Inc.                                                   DS41159E-page 91
PIC18FXX8                                                  8.8 PORTB Interrupt-on-Change

8.6 INT Interrupts                                         An input change on PORTB<7:4> sets flag bit RBIF
                                                           (INTCON register). The interrupt can be enabled/
External interrupts on the RB0/INT0, RB1/INT1 and          disabled by setting/clearing enable bit RBIE (INTCON
RB2/CANTX/INT2 pins are edge triggered: either rising      register). Interrupt priority for PORTB interrupt-on-
if the corresponding INTEDGx bit is set in the             change is determined by the value contained in the
INTCON2 register, or falling if the INTEDGx bit is clear.  interrupt priority bit RBIP (INTCON2 register).
When a valid edge appears on the RBx/INTx pin, the
corresponding flag bit INTxIF is set. This interrupt can   8.9 Context Saving During Interrupts
be disabled by clearing the corresponding enable bit
INTxIE. Flag bit INTxIF must be cleared in software in     During an interrupt, the return PC value is saved on the
the Interrupt Service Routine before re-enabling the       stack. Additionally, the WREG, Status and BSR
interrupt. All external interrupts (INT0, INT1 and INT2)   registers are saved on the fast return stack. If a fast
can wake-up the processor from Sleep if bit INTxIE was     return from interrupt is not used (see Section 4.3 "Fast
set prior to going into Sleep. If the Global Interrupt     Register Stack"), the user may need to save the
Enable bit, GIE, is set, the processor will branch to the  WREG, Status and BSR registers in software. Depend-
interrupt vector following wake-up.                        ing on the user's application, other registers may also
                                                           need to be saved. Example 8-1 saves and restores the
Interrupt priority for INT1 and INT2 is determined by the  WREG, Status and BSR registers during an Interrupt
value contained in the interrupt priority bits INT1IP      Service Routine.
(INTCON3<6>) and INT2IP (INTCON3<7>). There is
no priority bit associated with INT0; it is always a high
priority interrupt source.

8.7 TMR0 Interrupt

In 8-bit mode (which is the default), an overflow (FFh
00h) in the TMR0 register will set flag bit TMR0IF. In
16-bit mode, an overflow (FFFFh  0000h) in the
TMR0H:TMR0L registers will set flag bit TMR0IF. The
interrupt can be enabled/disabled by setting/clearing
enable bit TMR0IE (INTCON register). Interrupt priority
for Timer0 is determined by the value contained in the
interrupt priority bit TMR0IP (INTCON2 register). See
Section 11.0 "Timer0 Module" for further details.

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

MOVWF  W_TEMP               ; W_TEMP is in Low Access bank
                            ; STATUS_TEMP located anywhere
MOVFF  STATUS, STATUS_TEMP  ; BSR 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

DS41159E-page 92                                             2006 Microchip Technology Inc.
                                                                  PIC18FXX8

9.0 I/O PORTS                                              Read-modify-write operations on the LATA register
                                                           read and write the latched output value for PORTA.
Depending on the device selected, there are up to five
general purpose I/O ports available on PIC18FXX8           The RA4 pin is multiplexed with the Timer0 module
devices. Some pins of the I/O ports are multiplexed        clock input to become the RA4/T0CKI pin. The RA4/
with an alternate function from the peripheral features    T0CKI pin is a Schmitt Trigger input and an open-drain
on the device. In general, when a peripheral is enabled,   output. All other RA port pins have TTL input levels and
that pin may not be used as a general purpose I/O pin.     full CMOS output drivers.

Each port has three registers for its operation:           The other PORTA pins are multiplexed with analog
                                                           inputs and the analog VREF+ and VREF- inputs. The
TRIS register (Data Direction register)                  operation of each pin is selected by clearing/setting the
PORT register (reads the levels on the pins of the       control bits in the ADCON1 register (A/D Control
                                                           Register 1). On a Power-on Reset, these pins are
   device)                                                 configured as analog inputs and read as `0'.
LAT register (output latch)
                                                           Note:  On a Power-on Reset, RA5 and RA3:RA0
The data latch (LAT register) is useful for read-modify-          are configured as analog inputs and read
write operations on the value that the I/O pins are               as `0'. RA6 and RA4 are configured as
driving.                                                          digital inputs.

9.1 PORTA, TRISA and LATA                                  The TRISA register controls the direction of the RA
         Registers                                         pins, even when they are being used as analog inputs.
                                                           The user must ensure the bits in the TRISA register are
PORTA is a 7-bit wide, bidirectional port. The corre-      maintained set, when using them as analog inputs.
sponding Data Direction register is TRISA. Setting a
TRISA bit (= 1) will make the corresponding PORTA pin      EXAMPLE 9-1: INITIALIZING PORTA
an input (i.e., put the corresponding output driver in a
high-impedance mode). Clearing a TRISA bit (= 0) will      CLRF   PORTA ; Initialize PORTA by
make the corresponding PORTA pin an output (i.e., put                         ; clearing output data latches
the contents of the output latch on the selected pin). On  CLRF
a Power-on Reset, these pins are configured as inputs             LATA ; Alternate method to clear
and read as `0'.                                           MOVLW              ; output data latches
                                                           MOVWF
Reading the PORTA register reads the status of the         MOVLW  07h ; Configure A/D
pins, whereas writing to it will write to the port latch.         ADCON1 ; for digital inputs
                                                           MOVWF  0CFh ; Value used to initialize

                                                                              ; data direction
                                                                  TRISA ; Set RA3:RA0 as inputs,

                                                                              ; RA5:RA4 as outputs

2006 Microchip Technology Inc.                                  DS41159E-page 93
PIC18FXX8

FIGURE 9-1:       RA3:RA0 AND RA5 PINS                                       FIGURE 9-2:                   RA4/T0CKI PIN BLOCK
                  BLOCK DIAGRAM                                                                            DIAGRAM

RD LATA                                                                            RD LATA

Data Bus     D    Q

WR LATA or                                 VDD                                     Data Bus    D           Q
WR PORTA                                   P
              CK Q                                                                 WR LATA or
             Data Latch                                                            WR PORTA     CK Q                                  I/O pin(1)
                                                                                               Data Latch
                                                                                                                      N                 Schmitt
             D    Q                        N     I/O pin(1)                                                                             Trigger
                                                                                                                      VSS               Input
                                                                                               D           Q                            Buffer
                                                                                                                   TTL
WR TRISA       CK Q                        VSS                                     WR TRISA     CK Q               Input
             TRIS Latch                                                                        TRIS Latch          Buffer
Analog
Input Mode

RD TRISA                                         TTL                               RD TRISA
                                                 Input
                                  Q     D        Buffer                                                         Q  D

                                                          EN                                                       EN
RD PORTA
                                                                                   RD PORTA
    SS Input (RA5 only)                                                                TMR0 Clock Input
   To A/D Converter and LVD Modules
Note 1: I/O pins have diode protection to VDD and VSS.                             Note 1: I/O pin has diode protection to VSS only.

FIGURE 9-3:       OSC2/CLKO/RA6 PIN BLOCK DIAGRAM

                  (FOSC = 101, 111)

                  CLKO (FOSC/4)                                                    From OSC1   Oscillator
                                                                                                Circuit
                                                                  1                                VDD
                                     Data Latch                                                     P

                  Data Bus           D        Q               0                                     N

                  WR PORTA           CK Q                                                          VSS             OSC2/CLKO
                                                                                                                    RA6 pin(2)

                                     TRIS Latch

                                     D        Q

                  WR TRISA           CK Q

                  (FOSC = 100,
                  101, 110, 111)

                  RD TRISA                                           DQata LatcDh                 Schmitt
                                                                               EN                 Trigger
                  RD PORTA                                                                        Input Buffer
                  (FOSC = 110, 100)

                  Note 1: CLKO is 1/4 of FOSC.
                            2: I/O pin has diode protection to VDD and VSS.

DS41159E-page 94                                                                                              2006 Microchip Technology Inc.
                                                                                PIC18FXX8

TABLE 9-1: PORTA FUNCTIONS

       Name       Bit# Buffer                                         Function

RA0/AN0/CVREF     bit 0 TTL Input/output, analog input or analog comparator voltage reference
                                         output.

RA1/AN1           bit 1 TTL Input/output or analog input.

RA2/AN2/VREF-     bit 2 TTL Input/output, analog input or VREF-.

RA3/AN3/VREF+     bit 3 TTL Input/output, analog input or VREF+.

RA4/T0CKI         bit 4 ST/OD Input/output, external clock input for Timer0, output is open-drain type.

RA5/AN4/SS/LVDIN  bit 5 TTL Input/output, analog input, slave select input for synchronous serial port
                                         or Low-Voltage Detect input.

OSC2/CLKO/RA6     bit 6 TTL Oscillator clock output or input/output.

Legend: TTL = TTL input, ST = Schmitt Trigger input, OD = Open-Drain

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      Value on  Value on
                                                                                POR, BOR   all other
                                                                                            Resets

PORTA      -- RA6 RA5 RA4 RA3                RA2    RA1               RA0 -00x 0000 -uuu uuuu

LATA       -- Latch A Data Output Register                                      -xxx xxxx -uuu uuuu

TRISA      -- PORTA Data Direction Register                                     -111 1111 -111 1111

ADCON1 ADFM ADCS2 --              -- PCFG3 PCFG2 PCFG1 PCFG0 00-- 0000 uu-- uuuu

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

2006 Microchip Technology Inc.                                                DS41159E-page 95
PIC18FXX8

9.2 PORTB, TRISB and LATB                                   This interrupt can wake the device from Sleep. The
         Registers                                          user, in the Interrupt Service Routine, can clear the
                                                            interrupt in the following manner:
PORTB is an 8-bit wide, bidirectional port. The corre-
sponding Data Direction register is TRISB. Setting a        a) Any read or write of PORTB (except with the
TRISB bit (= 1) will make the corresponding PORTB                 MOVFF instruction). This will end the mismatch
pin an input (i.e., put the corresponding output driver in        condition.
a high-impedance mode). Clearing a TRISB bit (= 0)
will make the corresponding PORTB pin an output (i.e.,      b) Clear flag bit RBIF.
put the contents of the output latch on the selected pin).
                                                            A mismatch condition will continue to set flag bit RBIF.
Read-modify-write operations on the LATB register,          Reading PORTB will end the mismatch condition and
read and write the latched output value for PORTB.          allow flag bit RBIF to be cleared.

EXAMPLE 9-2:      INITIALIZING PORTB                        The interrupt-on-change feature is recommended for
                                                            wake-up on key depression operation and operations
  CLRF PORTB        ; Initialize PORTB by                   where PORTB is only used for the interrupt-on-change
                    ; clearing output                       feature. Polling of PORTB is not recommended while
  CLRF LATB         ; data latches                          using the interrupt-on-change feature.
                    ; Alternate method
  MOVLW 0CFh        ; to clear output                           Note 1: While in Low-Voltage ICSP mode, the
                    ; data latches                                          RB5 pin can no longer be used as a
  MOVWF TRISB       ; Value used to                                         general purpose I/O pin and should not
                    ; initialize data                                       be held low during normal operation to
                    ; direction                                             protect against inadvertent ICSP mode
                    ; Set RB3:RB0 as inputs                                 entry.
                    ; RB5:RB4 as outputs
                    ; RB7:RB6 as inputs                                2: When using Low-Voltage ICSP Program-
                                                                            ming (LVP), the pull-up on RB5 becomes
Each of the PORTB pins has a weak internal pull-up. A                       disabled. If TRISB bit 5 is cleared,
single control bit can turn on all the pull-ups. This is                    thereby setting RB5 as an output, LATB
performed by clearing bit RBPU (INTCON2 register).                          bit 5 must also be cleared for proper
The weak pull-up is automatically turned off when the                       operation.
port pin is configured as an output. The pull-ups are
disabled on a Power-on Reset.

Four of the PORTB pins (RB7:RB4) have an interrupt-
on-change feature. Only pins configured as inputs can
cause this interrupt to occur (i.e., any RB7:RB4 pin
configured as an output is excluded from the interrupt-
on-change comparison). The input pins (of RB7:RB4)
are compared with the old value latched on the last
read of PORTB. The "mismatch" outputs of RB7:RB4
are ORed together to generate the RB Port Change
Interrupt with Flag bit RBIF (INTCON register).

DS41159E-page 96                                             2006 Microchip Technology Inc.
                                                                               PIC18FXX8

FIGURE 9-4:       RB7:RB4 PINS BLOCK                           FIGURE 9-5:     RB1:RB0 PINS BLOCK
                  DIAGRAM                                                      DIAGRAM
                                                                     RBPU(2)
                                           VDD                       Data Bus                          VDD
                                                                     WR Port
RBPU(2)                                       Weak                                                     P    Weak
                                              Pull-up                                                       Pull-up
                                           P

Data Bus     Data Latch                       I/O pin(1)                       Data Latch                   I/O pin(1)
              DQ                                                                DQ
WR LATB
or             CK                                                                CK
WR PORTB     TRIS Latch
              DQ
                                                                               TRIS Latch
WR TRISB      CK                  TTL                                           DQ         TTL
                                  Input                                                    Input
                                  Buffer                       WR TRIS           CK        Buffer

                                                    ST
                                                Buffer

RD TRISB

RD LATB                                                        RD TRIS

RD PORTB                            Latch                                                  QD
Set RBIF                         QD                                                               EN

                                  EN            Q1

                                                               RD Port

                                  QD

From other                                      Q3             RBx/INTx
RB7:RB4 pins
                                  EN                                                       Schmitt Trigger
                                                                                           Buffer

RBx/INTx

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

2006 Microchip Technology Inc.                                                           DS41159E-page 97
PIC18FXX8

FIGURE 9-6:       RB2/CANTX/INT2 PIN BLOCK DIAGRAM

OPMODE2:OPMODE0 = 000

ENDRHI

CANTX

RD LATB                                 0

Data Bus                    Data Latch  1                                                                 VDD
WR PORTB or                                                                                               P
WR LATB                     DQ
                                                                                                                    RB2/CANTX/
                            CK Q                                                                                     INT2 pin(1)

WR TRISB                    TRIS Latch                                                                    N
                              DQ                                                                          VSS

                              CK Q                                                                                   Schmitt
                                                                                                                     Trigger
RD TRISB
                                                         Q                                  D
RD PORTB
Note 1: I/O pin has diode protection to VDD and VSS.                                        EN

FIGURE 9-7:       RB3/CANRX PIN BLOCK DIAGRAM

                  CANCON<7:5>                                                               VDD

                  RBPU(2)                                                                   P    Weak
                                                                                                 Pull-up
                                        Data Latch
                  Data Bus               DQ

                  WR LATB or PORTB                                                               I/O pin(1)
                  WR TRISB
                                          CK
                                        TRIS Latch

                                         DQ

                                          CK

                  RD TRISB                                  TTL
                                                            Input
                                                            Buffer

                  RD LATB

                                                         QD

                                                                                        EN
                  RD PORTB

                  RB3 or CANRX

                                        Schmitt Trigger
                                        Buffer

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

DS41159E-page 98                                                                                  2006 Microchip Technology Inc.
                                                                                   PIC18FXX8

TABLE 9-3: PORTB FUNCTIONS

Name        Bit# Buffer                                                  Function

RB0/INT0    bit 0 TTL/ST(1) Input/output pin or external interrupt 0 input.
                                      Internal software programmable weak pull-up.
RB1/INT1
            bit 1 TTL/ST(1) Input/output pin or external interrupt 1 input.
RB2/CANTX/                            Internal software programmable weak pull-up.
INT2
            bit 2 TTL/ST(1) Input/output pin, CAN bus transmit pin or external interrupt 2 input.
                                      Internal software programmable weak pull-up.

RB3/CANRX bit 3           TTL Input/output pin or CAN bus receive pin.
                                     Internal software programmable weak pull-up.

RB4         bit 4         TTL Input/output pin (with interrupt-on-change).

                                    Internal software programmable weak pull-up.

RB5/PGM     bit 5         TTL Input/output pin (with interrupt-on-change). Internal software programmable
RB6/PGC
RB7/PGD                             weak pull-up. Low-voltage serial programming enable.

            bit 6 TTL/ST(2) Input/output pin (with interrupt-on-change). Internal software programmable

                                    weak pull-up. Serial programming clock.

            bit 7 TTL/ST(2) Input/output pin (with interrupt-on-change). Internal software programmable

                                    weak pull-up. Serial programming data.

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

Note 1: This buffer is a Schmitt Trigger input when configured as the external interrupt.

       2: This buffer is a Schmitt Trigger input when used in Serial Programming mode.

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    Value on  Value on
                                                                                           POR, BOR   all other
                                                                                                       Resets

PORTB       RB7    RB6            RB5    RB4         RB3    RB2           RB1       RB0    xxxx xxxx  uuuu uuuu
                                                                                           xxxx xxxx  uuuu uuuu
LATB     LATB Data Output Register                                       INT0IF     RBIF   1111 1111  1111 1111
                                                                            --      RBIP   0000 000x  0000 000u
TRISB    PORTB Data Direction Register                                             INT1IF  111- -1-1  111- -1-1
                                                                         INT2IF            11-0 0-00  11-1 0-00
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE              RBIE TMR0IF

INTCON2 RBPU INTEDG0 INTEDG1             --          --     TMR0IP

INTCON3 INT2IP INT1IP             --     INT2IE INT1IE      --

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

2006 Microchip Technology Inc.                                                           DS41159E-page 99
PIC18FXX8

9.3 PORTC, TRISC and LATC                                      while other peripherals override the TRIS bit to make a
         Registers                                             pin an input. The user should refer to the corresponding
                                                               peripheral section for the correct TRIS bit settings.
PORTC is an 8-bit wide, bidirectional port. The corre-
sponding Data Direction register is TRISC. Setting a           The pin override value is not loaded into the TRIS
TRISC bit (= 1) will make the corresponding PORTC              register. This allows read-modify-write of the TRIS
pin an input (i.e., put the corresponding output driver in     register, without concern due to peripheral overrides.
a high-impedance mode). Clearing a TRISC bit (= 0)
will make the corresponding PORTC pin an output (i.e.,         EXAMPLE 9-3:       INITIALIZING PORTC
put the contents of the output latch on the selected pin).
                                                                CLRF PORTC         ; Initialize PORTC by
Read-modify-write operations on the LATC register,              CLRF LATC          ; clearing output
read and write the latched output value for PORTC.              MOVLW 0CFh         ; data latches
                                                                MOVWF TRISC        ; Alternate method
PORTC is multiplexed with several peripheral functions                             ; to clear output
(Table 9-5). PORTC pins have Schmitt Trigger input                                 ; data latches
buffers.                                                                           ; Value used to
                                                                                   ; initialize data
When enabling peripheral functions, care should be                                 ; direction
taken in defining TRIS bits for each PORTC pin. Some                               ; Set RC3:RC0 as inputs
peripherals override the TRIS bit to make a pin an output,                         ; RC5:RC4 as outputs
                                                                                   ; RC7:RC6 as inputs

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

Peripheral Out Select

Peripheral Data Out                                                VDD

                                 0

RD LATC                                                       P
                                 1
Data Bus
WR LATC                D  Q
or
WR PORTC               CK Q                                                  I/O pin(1)

WR TRISC             Data Latch                                    N                    TRIS OVERRIDE

                       D  Q                                                  Pin Override Peripheral

                                 TRIS                              VSS       RC0  Yes Timer1 Oscillator
                                                                                            for Timer1/Timer3
                        CK Q     Override                                    RC1
                     TRIS Latch                                                   Yes Timer1 Oscillator
                                                                             RC2            for Timer1/Timer3
RD TRISC                                                           Schmitt   RC3
Peripheral Enable                                                  Trigger        No --
                                                                             RC4  Yes SPITM/I2CTM
                                                            Q  D             RC5
                                                                             RC6            Master Clock
                                                               EN                 Yes I2C Data Out
                                                                             RC7
RD PORTC                                                                          Yes SPI Data Out
Peripheral Data In
                                                                                  Yes USART Async
                                                                                            Xmit, Sync Clock

                                                                                  Yes USART Sync Data
                                                                                            Out

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

DS41159E-page 100                                                                  2006 Microchip Technology Inc.
                                                               PIC18FXX8

TABLE 9-5: PORTC FUNCTIONS

      Name   Bit# Buffer Type                        Function

RC0/T1OSO/T1CKI bit 0             ST  Input/output port pin, Timer1 oscillator output or Timer1/Timer3 clock
                                      input.
RC1/T1OSI    bit 1                ST
RC2/CCP1                              Input/output port pin or Timer1 oscillator input.
             bit 2                ST
                                      Input/output port pin or Capture 1 input/Compare 1 output/
RC3/SCK/SCL  bit 3                ST  PWM1 output.
RC4/SDI/SDA                           Input/output port pin or synchronous serial clock for SPITM/I2CTM.
RC5/SDO      bit 4                ST  Input/output port pin or SPI data in (SPI mode) or data I/O (I2C mode).
RC6/TX/CK
             bit 5                ST  Input/output port pin or synchronous serial port data output.

             bit 6                ST  Input/output port pin, addressable USART asynchronous transmit or
                                      addressable USART synchronous clock.
RC7/RX/DT    bit 7                ST
                                      Input/output port pin, addressable USART asynchronous receive or
                                      addressable USART synchronous data.

Legend: ST = Schmitt Trigger input

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            Value on  Value on
                                                               POR, BOR   all other
                                                                           Resets

PORTC RC7 RC6 RC5 RC4                 RC3  RC2  RC1  RC0       xxxx xxxx  uuuu uuuu
                                                               xxxx xxxx  uuuu uuuu
LATC       LATC Data Output Register                           1111 1111  1111 1111

TRISC PORTC Data Direction Register

Legend: x = unknown, u = unchanged

2006 Microchip Technology Inc.                               DS41159E-page 101
PIC18FXX8

9.4 PORTD, TRISD and LATD                                  PORTD can be configured as an 8-bit wide, micro-
         Registers                                         processor port (Parallel Slave Port or PSP) by setting
                                                           the control bit PSPMODE (TRISE<4>). In this mode,
   Note: This port is only available on the                the input buffers are TTL. See Section 10.0 "Parallel
               PIC18F448 and PIC18F458.                    Slave Port" for additional information.

PORTD is an 8-bit wide, bidirectional port. The corre-     PORTD is also multiplexed with the analog comparator
sponding Data Direction register for the port is TRISD.    module and the ECCP module.
Setting a TRISD bit (= 1) will make the corresponding
PORTD pin an input (i.e., put the corresponding output     EXAMPLE 9-4:        INITIALIZING PORTD
driver in a high-impedance mode). Clearing a TRISD
bit (= 0) will make the corresponding PORTD pin an          CLRF PORTD          ; Initialize PORTD by
output (i.e., put the contents of the output latch on the                       ; clearing output
selected pin).                                             CLRF LATD            ; data latches
                                                                                ; Alternate method
Read-modify-write operations on the LATD register          MOVLW      07h       ; to clear output
read and write the latched output value for PORTD.         MOVWF      CMCON     ; data latches
                                                           MOVLW      0CFh      ; comparator off
PORTD uses Schmitt Trigger input buffers. Each pin is
individually configurable as an input or output.                                ; Value used to
                                                                                ; initialize data
                                                           MOVWF TRISD          ; direction
                                                                                ; Set RD3:RD0 as inputs
                                                                                ; RD5:RD4 as outputs
                                                                                ; RD7:RD6 as inputs

FIGURE 9-9:        PORTD BLOCK DIAGRAM IN I/O PORT MODE

             PORT/PSP Select

             PSP Data Out                                             VDD

             RD LATD                                                  P

             Data Bus          DQ                                     N        RD0/PSP0/
             WR LATD            CK Q                                  Vss      C1IN+ pin(1)
             or               Data Latch
             PORTD             DQ
             WR TRISD           CK Q
                              TRIS Latch
             RD TRISD
             PSP Read                                                 Schmitt
                                                                      Trigger

                                                           QD
                                                                  EN

             RD PORTD
             PSP Write
             C1IN+
             Note 1: I/O pins have diode protection to VDD and VSS.

DS41159E-page 102                                                               2006 Microchip Technology Inc.
                                                                           PIC18FXX8

TABLE 9-7: PORTD FUNCTIONS

       Name     Bit# Buffer Type                                 Function

RD0/PSP0/C1IN+  bit 0             ST/TTL(1)  Input/output port pin, Parallel Slave Port bit 0 or C1IN+ comparator
                                             input.
RD1/PSP1/C1IN-  bit 1             ST/TTL(1)  Input/output port pin, Parallel Slave Port bit 1 or C1IN- comparator
                                             input.
RD2/PSP2/C2IN+  bit 2             ST/TTL(1)  Input/output port pin, Parallel Slave Port bit 2 or C2IN+ comparator
                                             input.
RD3/PSP3/C2IN-  bit 3             ST/TTL(1)  Input/output port pin, Parallel Slave Port bit 3 or C2IN- comparator
                                             input.
RD4/PSP4/ECCP1/P1A bit 4          ST/TTL(1)  Input/output port pin, Parallel Slave Port bit 4 or ECCP1/P1A pin.
                                  ST/TTL(1)  Input/output port pin, Parallel Slave Port bit 5 or P1B pin.
RD5/PSP5/P1B    bit 5             ST/TTL(1)  Input/output port pin, Parallel Slave Port bit 6 or P1C pin.
                                  ST/TTL(1)  Input/output port pin, Parallel Slave Port bit 7 or P1D pin.
RD6/PSP6/P1C    bit 6

RD7/PSP7/P1D    bit 7

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

Note 1: Input buffers are Schmitt Triggers when in I/O mode and TTL buffers when in Parallel Slave Port mode.

TABLE 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      Value on  Value on
                                                                           POR, BOR   all other
                                                                                       Resets

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

LATD   LATD Data Output Register                                           xxxx xxxx uuuu uuuu

TRISD PORTD Data Direction Register                                        1111 1111 1111 1111

TRISE  IBF OBF IBOV PSPMODE -- TRISE2 TRISE1 TRISE0 0000 -111 0000 -111

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

2006 Microchip Technology Inc.                                           DS41159E-page 103
PIC18FXX8

9.5 PORTE, TRISE and LATE                                     When the Parallel Slave Port is active, the PORTE pins
         Registers                                            function as its control inputs. For additional details,
                                                              refer to Section 10.0 "Parallel Slave Port".
   Note: This port is only available on the
               PIC18F448 and PIC18F458.                       PORTE pins are also multiplexed with inputs for the A/D
                                                              converter and outputs for the analog comparators. When
PORTE is a 3-bit wide, bidirectional port. PORTE has          selected as an analog input, these pins will read as `0's.
three pins (RE0/AN5/RD, RE1/AN6/WR/C1OUT and                  Direction bits TRISE<2:0> control the direction of the RE
RE2/AN7/CS/C2OUT) which are individually config-              pins, even when they are being used as analog inputs.
urable as inputs or outputs. These pins have Schmitt          The user must make sure to keep the pins configured as
Trigger input buffers.                                        inputs when using them as analog inputs.

Read-modify-write operations on the LATE register,            EXAMPLE 9-5:  INITIALIZING PORTE
read and write the latched output value for PORTE.
                                                               CLRF PORTE    ; Initialize PORTE by
The corresponding Data Direction register for the port         CLRF LATE     ; clearing output
is TRISE. Setting a TRISE bit (= 1) will make the              MOVLW 03h     ; data latches
corresponding PORTE pin an input (i.e., put the corre-         MOVWF TRISE   ; Alternate method
sponding output driver in a high-impedance mode).                            ; to clear output
Clearing a TRISE bit (= 0) will make the corresponding                       ; data latches
PORTE pin an output (i.e., put the contents of the                           ; Value used to
output latch on the selected pin).                                           ; initialize data
                                                                             ; direction
The TRISE register also controls the operation of the                        ; Set RE1:RE0 as inputs
Parallel Slave Port through the control bits in the upper                    ; RE2 as an output
half of the register. These are shown in Register 9-1.                       ; (RE4=0 - PSPMODE Off)

FIGURE 9-10:       PORTE BLOCK DIAGRAM

Peripheral Out Select
Peripheral Data Out

RD LATE                 DQ             0                           VDD      I/O pin(1)
Data Bus                CK Q           1                           P
WR LATE                Data Latch
or                      DQ           TRIS                          N
WR PORTE                CK Q       Override                       VSS
                       TRIS Latch
WR TRISE

RD TRISE                                                          Schmitt   TRIS OVERRIDE
Peripheral Enable                                                 Trigger

RD PORTE                                                   Q  D             Pin Override Peripheral
Peripheral Data In
                                                              EN            RE0 Yes     PSP
                                                                            RE1 Yes     PSP
                                                                            RE2 Yes     PSP

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

DS41159E-page 104                                                            2006 Microchip Technology Inc.
                                                                PIC18FXX8

REGISTER 9-1:         TRISE REGISTER

               bit 7  R-0         R-0    R/W-0  R/W-0      U-0   R/W-1                      R/W-1   R/W-1
               bit 6                                            TRISE2                     TRISE1  TRISE0
               bit 5  IBF         OBF    IBOV PSPMODE --
                                                                                                         bit 0
               bit 4  bit 7
               bit 3
               bit 2  IBF: Input Buffer Full Status bit
               bit 1  1 = A word has been received and waiting to be read by the CPU
               bit 0  0 = No word has been received

                      OBF: Output Buffer Full Status bit
                      1 = The output buffer still holds a previously written word
                      0 = The output buffer has been read

                      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

                      PSPMODE: Parallel Slave Port Mode Select bit
                      1 = Parallel Slave Port mode
                      0 = General Purpose I/O mode

                      Unimplemented: Read as `0'

                      TRISE2: RE2 Direction Control bit
                      1 = Input
                      0 = Output

                      TRISE1: RE1 Direction Control bit
                      1 = Input
                      0 = Output

                      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

2006 Microchip Technology Inc.                                                           DS41159E-page 105
PIC18FXX8

TABLE 9-9: PORTE FUNCTIONS

      Name             Bit# Buffer Type                      Function

RE0/AN5/RD             bit 0 ST/TTL(1) Input/output port pin, analog input or read control input in Parallel
                                                    Slave Port mode.

RE1/AN6/WR/C1OUT bit 1     ST/TTL(1) Input/output port pin, analog input, write control input in Parallel Slave
                                            Port mode or Comparator 1 output.

RE2/AN7/CS/C2OUT bit 2     ST/TTL(1) Input/output port pin, analog input, chip select control input in Parallel
                                            Slave Port mode or Comparator 2 output.

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

Note 1: Input buffers are Schmitt Triggers when in I/O mode and TTL buffers when in Parallel Slave Port mode.

TABLE 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            Value on  Value on
                                                                             POR, BOR   all other
                                                                                         Resets

TRISE IBF OBF IBOV PSPMODE -- TRISE2 TRISE1 TRISE0 0000 -111 0000 -111

PORTE --           --  --  --            -- Read PORTE pin/                  ---- -xxx ---- -uuu

                                                     Write PORTE Data Latch

LATE  --           --  --  --            -- Read PORTE Data Latch/           ---- -xxx ---- -uuu

                                                     Write PORTE Data Latch

ADCON1 ADFM ADCS2 --  &nbs