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

产品描述

搜索

PIC18F8520-E/PT

器件型号:PIC18F8520-E/PT
器件类别:半导体    其他集成电路(IC)   
文件大小:34158.23KB,共10页
厂商名称:Microchip
厂商官网:
标准:  
下载文档

器件描述

8-bit microcontrollers - mcu 32kb 2048 ram 68i/O

参数
Manufacturer: Microchip
Product Category: 8-bit Microcontrollers - MCU
RoHS: Yes
A/D Bit Size: 10 bit
Core: PIC
Data Bus Width: 8 bit
Maximum Clock Frequency: 40 MHz
Program Memory Size: 32 kB
Data RAM Size: 2048 B
On-Chip ADC: Yes
Operating Supply Voltage: 4.2 V to 5.5 V
Maximum Operating Temperature: + 125 C
Package / Case: TQFP-80
Mounting Style: SMD/SMT
A/D Channels Available: 16
Brand: Microchip Technology
Data ROM Size: 1024 B
Data ROM Type: EEPROM
Interface Type: I2C, SPI, USART
Minimum Operating Temperature: - 40 C
Number of Programmable I/Os: 68
Number of Timers: 2 x 8 bit
Packaging: Tray
Processor Series: PIC18
Program Memory Type: Flash
Series: PIC18
Factory Pack Quantity: 119
Supply Voltage - Max: 5.5 V, 5.8 V
Supply Voltage - Min: 3.9 V, 4.2 V

PIC18F8520-E/PT器件文档内容

PIC18F6520/8520/6620/8620/6720/8720
                                  Data Sheet

                64/80-Pin High-Performance,
         256 Kbit to 1 Mbit Enhanced Flash

                    Microcontrollers with A/D

2004 Microchip Technology Inc.  DS39609B
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 intended through suggestion only
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, MPLAB, PIC, PICmicro, PICSTART,
No representation or warranty is given and no liability is       PRO MATE and PowerSmart are registered trademarks of
assumed by Microchip Technology Incorporated with respect        Microchip Technology Incorporated in the U.S.A. and other
to the accuracy or use of such information, or infringement of   countries.
patents or other intellectual property rights arising from such
use or otherwise. Use of Microchip's products as critical        AmpLab, FilterLab, microID, MXDEV, MXLAB, PICMASTER,
components in life support systems is not authorized except      SEEVAL, SmartShunt and The Embedded Control Solutions
with express written approval by Microchip. No licenses are      Company are registered trademarks of Microchip Technology
conveyed, implicitly or otherwise, under any intellectual        Incorporated in the U.S.A.
property rights.
                                                                 Application Maestro, dsPICDEM, dsPICDEM.net,
                                                                 dsPICworks, ECAN, ECONOMONITOR, FanSense,
                                                                 FlexROM, fuzzyLAB, In-Circuit Serial Programming, ICSP,
                                                                 ICEPIC, microPort, Migratable Memory, MPASM, MPLIB,
                                                                 MPLINK, MPSIM, PICkit, PICDEM, PICDEM.net, PICtail,
                                                                 PowerCal, PowerInfo, PowerMate, PowerTool, rfLAB, rfPIC,
                                                                 Select Mode, SmartSensor, SmartTel and Total Endurance
                                                                 are trademarks of Microchip Technology Incorporated in the
                                                                 U.S.A. and other countries.

                                                                 Serialized Quick Turn Programming (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.

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

                                                                      Printed on recycled paper.

DS39609B-page ii                                                 Microchip received ISO/TS-16949:2002 quality system certification for
                                                                 its worldwide headquarters, design and wafer fabrication facilities in
                                                                 Chandler and Tempe, Arizona and Mountain View, California in October
                                                                 2003. 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.

                                                                                                      2004 Microchip Technology Inc.
                                 PIC18F6520/8520/6620/
                                           8620/6720/8720

        64/80-Pin High-Performance, 256 Kbit to 1 Mbit
           Enhanced Flash Microcontrollers with A/D

High-Performance RISC CPU:                                             Analog Features:

� C compiler optimized architecture/instruction set:                   � 10-bit, up to 16-channel Analog-to-Digital
   - Source code compatible with the PIC16 and                            Converter (A/D):
      PIC17 instruction sets                                              - Conversion available during Sleep

� Linear program memory addressing to 128 Kbytes                       � Programmable 16-level Low-Voltage Detection
� Linear data memory addressing to 3840 bytes                             (LVD) module:
� 1 Kbyte of data EEPROM                                                  - Supports interrupt on Low-Voltage Detection
� Up to 10 MIPs operation:
                                                                       � Programmable Brown-out Reset (PBOR)
   - DC � 40 MHz osc./clock input                                      � Dual analog comparators:
   - 4 MHz � 10 MHz osc./clock input with PLL active
� 16-bit wide instructions, 8-bit wide data path                          - Programmable input/output configuration
� Priority levels for interrupts
� 31-level, software accessible hardware stack                         Special Microcontroller Features:
� 8 x 8 Single Cycle Hardware Multiplier
                                                                       � 100,000 erase/write cycle Enhanced Flash
External Memory Interface                                                 program memory typical
(PIC18F8X20 Devices Only):
                                                                       � 1,000,000 erase/write cycle Data EEPROM
� Address capability of up to 2 Mbytes                                    memory typical
� 16-bit interface
                                                                       � 1 second programming time
Peripheral Features:                                                   � Flash/Data EEPROM Retention: > 40 years
                                                                       � Self-reprogrammable under software control
� High current sink/source 25 mA/25 mA                                 � Power-on Reset (POR), Power-up Timer (PWRT)
� Four external interrupt pins
� Timer0 module: 8-bit/16-bit timer/counter                               and Oscillator Start-up Timer (OST)
� Timer1 module: 16-bit timer/counter                                  � Watchdog Timer (WDT) with its own On-Chip
� Timer2 module: 8-bit timer/counter
� Timer3 module: 16-bit timer/counter                                     RC Oscillator for reliable operation
� Timer4 module: 8-bit timer/counter                                   � Programmable code protection
� Secondary oscillator clock option � Timer1/Timer3                    � Power saving Sleep mode
� Five Capture/Compare/PWM (CCP) modules:                              � Selectable oscillator options including:

   - Capture is 16-bit, max. resolution 6.25 ns (TCY/16)                  - 4X Phase Lock Loop (of primary oscillator)
   - Compare is 16-bit, max. resolution 100 ns (TCY)                      - Secondary Oscillator (32 kHz) clock input
   - PWM output: PWM resolution is 1 to 10-bit                         � In-Circuit Serial ProgrammingTM (ICSPTM) via
� Master Synchronous Serial Port (MSSP) module                            two pins
   with two modes of operation:                                        � MPLAB� In-Circuit Debug (ICD) via two pins
   - 3-wire SPITM (supports all 4 SPI modes)
   - I2CTM Master and Slave mode                                       CMOS Technology:
� Two Addressable USART modules:
   - Supports RS-485 and RS-232                                        � Low-power, high-speed Flash technology
� Parallel Slave Port (PSP) module                                     � Fully static design
                                                                       � Wide operating voltage range (2.0V to 5.5V)
                                                                       � Industrial and Extended temperature ranges

        Program Memory Data Memory                             10-bit            MSSP                                 Max
                                                                A/D                                                  FOSC
Device           # Single-Word   SRAM EEPROM              I/O   (ch)    CCP        Master  USART    Timers      Ext  (MHz)
                  Instructions   (bytes) (bytes)                       (PWM)         I2C          8-bit/16-bit  Bus
        Bytes                                                                 SPI

PIC18F6520 32K   16384           2048 1024 52 12                       5      Y    Y       2      2/3           N 40

PIC18F6620 64K   32768           3840 1024 52 12                       5      Y    Y       2      2/3           N 25

PIC18F6720 128K  65536           3840 1024 52 12                       5      Y    Y       2      2/3           N 25

PIC18F8520 32K   16384           2048 1024 68 16                       5      Y    Y       2      2/3           Y 40

PIC18F8620 64K   32768           3840 1024 68 16                       5      Y    Y       2      2/3           Y 25

PIC18F8720 128K  65536           3840 1024 68 16                       5      Y    Y       2      2/3           Y 25

2004 Microchip Technology Inc.                                                                   DS39609B-page 1
PIC18F6520/8520/6620/8620/6720/8720

Pin Diagrams
     64-Pin TQFP

                    RE2/CS         RE3      RE4   RE5   RE6            RE7/CCP2(1)    RD0/PSP0  VDD      VSS  RD1/PSP1  RD2/PSP2       RD3/PSP3   RD4/PSP4           RD5/PSP5          RD6/PSP6     RD7/PSP7

                    64             63       62    61    60             59             58        57       56   55        54             53         52                 51                50           49

RE1/WR          1                                                                                                                                                                                                48  RB0/INT0

RE0/RD          2                                                                                                                                                                                                47  RB1/INT1

RG0/CCP3        3                                                                                                                                                                                                46  RB2/INT2

RG1/TX2/CK2     4                                                                                                                                                                                                45  RB3/INT3

RG2/RX2/DT2     5                                                                                                                                                                                                44  RB4/KBI0

RG3/CCP4        6                                                                                                                                                                                                43  RB5/KBI1/PGM

MCLR/VPP        7                                                      PIC18F6520                                                                                                                                42  RB6/KBI2/PGC
                                                                       PIC18F6620
RG4/CCP5        8                                                      PIC18F6720                                                                                                                                41  VSS

VSS             9                                                                                                                                                                                                40  OSC2/CLKO/RA6

VDD             10                                                                                                                                                                                               39  OSC1/CLKI

RF7/SS          11                                                                                                                                                                                               38  VDD

RF6/AN11        12                                                                                                                                                                                               37  RB7/KBI3/PGD

RF5/AN10/CVREF  13                                                                                                                                                                                               36  RC5/SDO

RF4/AN9         14                                                                                                                                                                                               35  RC4/SDI/SDA

RF3/AN8         15                                                                                                                                                                                               34  RC3/SCK/SCL

RF2/AN7/C1OUT   16                                                                                                                                                                                               33  RC2/CCP1

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

                    RF1/AN6/C2OUT  RF0/AN5  AVDD  AVSS  RA3/AN3/VREF+  RA2/AN2/VREF-  RA1/AN1   RA0/AN0  VSS  VDD       RA5/AN4/LVDIN  RA4/T0CKI  RC1/T1OSI/CCP2(1)  RC0/T1OSO/T13CKI  RC6/TX1/CK1  RC7/RX1/DT1

     Note 1: CCP2 is multiplexed with RC1 when CCP2MX is set.                                                                                                                                                     2004 Microchip Technology Inc.
DS39609B-page 2
         PIC18F6520/8520/6620/8620/6720/8720

Pin Diagrams (Continued)
       80-Pin TQFP

                                 RH1/A17   RH0/A16   RE2/CS/AD10(3)  RE3/AD11  RE4/AD12  RE5/AD13  RE6/AD14       RE7/CCP2/AD15(2)  RD0/PSP0/AD0(3)  VDD      VSS  RD1/PSP1/AD1(3)  RD2/PSP2/AD2(3)  RD3/PSP3/AD3(3)  RD4/PSP4/AD4(3)    RD5/PSP5/AD5(3)   RD6/PSP6/AD6(3)  RD7/PSP7/AD7(3)  RJ0/ALE  RJ1/OE

                                 80        79        78              77        76        75        74             73                72               71       70   69               68               67               66                 65                64               63               62       61

RH2/A18              1                                                                                                                                                                                                                                                                                    60      RJ2/WRL

RH3/A19              2                                                                                                                                                                                                                                                                                    59      RJ3/WRH

RE1/WR/AD9(3)        3                                                                                                                                                                                                                                                                                        58  RB0/INT0

RE0/RD/AD8(3)        4                                                                                                                                                                                                                                                                                        57  RB1/INT1

RG0/CCP3             5                                                                                                                                                                                                                                                                                        56  RB2/INT2

RG1/TX2/CK2          6                                                                                                                                                                                                                                                                                        55  RB3/INT3/CCP2(1)

RG2/RX2/DT2          7                                                                                                                                                                                                                                                                                        54  RB4/KBI0

RG3/CCP4             8                                                                                                                                                                                                                                                                                        53  RB5/KBI1/PGM

MCLR/VPP             9                                                                                            PIC18F8520                                                                                                                                                                                  52  RB6/KBI2/PGC
                                                                                                                  PIC18F8620
RG4/CCP5             10                                                                                           PIC18F8720                                                                                                                                                                                  51  VSS

             VSS     11                                                                                                                                                                                                                                                                                       50  OSC2/CLKO/RA6

             VDD     12                                                                                                                                                                                                                                                                                       49  OSC1/CLKI

             RF7/SS  13                                                                                                                                                                                                                                                                                       48  VDD

RF6/AN11             14                                                                                                                                                                                                                                                                                       47  RB7/KBI3/PGD

RF5/AN10/CVREF       15                                                                                                                                                                                                                                                                                       46  RC5/SDO

RF4/AN9              16                                                                                                                                                                                                                                                                                       45  RC4/SDI/SDA

RF3/AN8              17                                                                                                                                                                                                                                                                                       44  RC3/SCK/SCL

RF2/AN7/C1OUT        18                                                                                                                                                                                                                                                                                       43  RC2/CCP1

RH7/AN15             19                                                                                                                                                                                                                                                                                       42  RJ7/UB

RH6/AN14             20                                                                                                                                                                                                                                                                                       41  RJ6/LB

                                 21        22        23              24        25        26        27             28                29               30       31   32               33               34               35                 36                37               38               39       40

                                 RH5/AN13  RH4/AN12  RF1/AN6/C2OUT   RF0/AN5   AVDD      AVSS      RA3/AN3/VREF+  RA2/AN2/VREF-     RA1/AN1          RA0/AN0  VSS  VDD              RA5/AN4/LVDIN    RA4/T0CKI        RC1/T1OSI/CCP2(1)  RC0/T1OSO/T13CKI  RC6/TX1/CK1      RC7/RX1/DT1      RJ4/BA0  RJ5/CE

Note 1:      CCP2 is multiplexed with RC1 when CCP2MX is set.
         2:  CCP2 is multiplexed by default with RE7 when the device is configured in Microcontroller mode.
         3:  PSP is available only in Microcontroller mode.

2004 Microchip Technology Inc.                                                                                                                                                                                                                                                                                        DS39609B-page 3
PIC18F6520/8520/6620/8620/6720/8720

Table of Contents

1.0 Device Overview .......................................................................................................................................................................... 7
2.0 Oscillator Configurations ............................................................................................................................................................ 21
3.0 Reset .......................................................................................................................................................................................... 29
4.0 Memory Organization ................................................................................................................................................................. 39
5.0 Flash Program Memory .............................................................................................................................................................. 61
6.0 External Memory Interface ......................................................................................................................................................... 71
7.0 Data EEPROM Memory ............................................................................................................................................................. 79
8.0 8 X 8 Hardware Multiplier ........................................................................................................................................................... 85
9.0 Interrupts .................................................................................................................................................................................... 87
10.0 I/O Ports ................................................................................................................................................................................... 103
11.0 Timer0 Module ......................................................................................................................................................................... 131
12.0 Timer1 Module ......................................................................................................................................................................... 135
13.0 Timer2 Module ......................................................................................................................................................................... 141
14.0 Timer3 Module ......................................................................................................................................................................... 143
15.0 Timer4 Module ......................................................................................................................................................................... 147
16.0 Capture/Compare/PWM (CCP) Modules ................................................................................................................................. 149
17.0 Master Synchronous Serial Port (MSSP) Module .................................................................................................................... 157
18.0 Addressable Universal Synchronous Asynchronous Receiver Transmitter (USART).............................................................. 197
19.0 10-Bit Analog-to-Digital Converter (A/D) Module ..................................................................................................................... 213
20.0 Comparator Module.................................................................................................................................................................. 223
21.0 Comparator Voltage Reference Module ................................................................................................................................... 229
22.0 Low-Voltage Detect .................................................................................................................................................................. 233
23.0 Special Features of the CPU .................................................................................................................................................... 239
24.0 Instruction Set Summary .......................................................................................................................................................... 259
25.0 Development Support............................................................................................................................................................... 301
26.0 Electrical Characteristics .......................................................................................................................................................... 307
27.0 DC and AC Characteristics Graphs and Tables ....................................................................................................................... 343
28.0 Packaging Information.............................................................................................................................................................. 357
Appendix A: Revision History............................................................................................................................................................. 361
Appendix B: Device Differences......................................................................................................................................................... 361
Appendix C: Conversion Considerations ........................................................................................................................................... 362
Appendix D: Migration from Mid-Range to Enhanced Devices .......................................................................................................... 362
Appendix E: Migration from High-End to Enhanced Devices............................................................................................................. 363
Index .................................................................................................................................................................................................. 365
On-Line Support................................................................................................................................................................................. 375
Systems Information and Upgrade Hot Line ...................................................................................................................................... 375
Reader Response .............................................................................................................................................................................. 376
PIC18F6520/8520/6620/8620/6720/8720 Product Identification System .......................................................................................... 377

DS39609B-page 4   2004 Microchip Technology Inc.
        PIC18F6520/8520/6620/8620/6720/8720

                                   TO OUR VALUED CUSTOMERS

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

Most Current Data Sheet

To obtain the most up-to-date version of this data sheet, please register at our Worldwide Web site at:
      http://www.microchip.com

You can determine the version of a data sheet by examining its literature number found on the bottom outside corner of any page.
The last character of the literature number is the version number, (e.g., DS30000A is version A of document DS30000).

Errata

An errata sheet, describing minor operational differences from the data sheet and recommended workarounds, may exist for current
devices. As device/documentation issues become known to us, we will publish an errata sheet. The errata will specify the revision
of silicon and revision of document to which it applies.
To determine if an errata sheet exists for a particular device, please check with one of the following:
� Microchip's Worldwide Web site; http://www.microchip.com
� Your local Microchip sales office (see last page)
� The Microchip Corporate Literature Center; U.S. FAX: (480) 792-7277
When contacting a sales office or the literature center, please specify which device, revision of silicon and data sheet (include liter-
ature number) you are using.

Customer Notification System

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

2004 Microchip Technology Inc.  DS39609B-page 5
PIC18F6520/8520/6620/8620/6720/8720

NOTES:

DS39609B-page 6   2004 Microchip Technology Inc.
              PIC18F6520/8520/6620/8620/6720/8720

1.0 DEVICE OVERVIEW                                        With the addition of new operating modes, the External
                                                           Memory Interface offers many new options, including:
This document contains device specific information for
the following devices:                                     � Operating the microcontroller entirely from external
                                                              memory
� PIC18F6520  � PIC18F8520
� PIC18F6620  � PIC18F8620                                 � Using combinations of on-chip and external
� PIC18F6720  � PIC18F8720                                    memory, up to the 2-Mbyte limit

This family offers the same advantages of all PIC18        � Using external Flash memory for reprogrammable
microcontrollers � namely, high computational                 application code, or large data tables
performance at an economical price � with the addition of
high endurance Enhanced Flash program memory. The          � Using external RAM devices for storing large
PIC18FXX20 family also provides an enhanced range of          amounts of variable data
program memory options and versatile analog features
that make it ideal for complex, high-performance           1.1.3 EASY MIGRATION
applications.
                                                           Regardless of the memory size, all devices share the
1.1 Key Features                                           same rich set of peripherals, allowing for a smooth
                                                           migration path as applications grow and evolve.
1.1.1 EXPANDED MEMORY
                                                           The consistent pinout scheme used throughout the
The PIC18FXX20 family introduces the widest range of       entire family also aids in migrating to the next larger
on-chip, Enhanced Flash program memory available           device. This is true when moving between the 64-pin
on PICmicro� microcontrollers � up to 128 Kbyte (or        members, between the 80-pin members, or even
65,536 words), the largest ever offered by Microchip.      jumping from 64-pin to 80-pin devices.
For users with more modest code requirements, the
family also includes members with 32 Kbyte or              1.1.4 OTHER SPECIAL FEATURES
64 Kbyte.
                                                           � Communications: The PIC18FXX20 family
Other memory features are:                                    incorporates a range of serial communications
                                                              peripherals, including 2 independent USARTs and
� Data RAM and Data EEPROM: The                               a Master SSP module, capable of both SPI and
   PIC18FXX20 family also provides plenty of room             I2C (Master and Slave) modes of operation. For
   for application data. Depending on the device,             PIC18F8X20 devices, one of the general purpose
   either 2048 or 3840 bytes of data RAM are                  I/O ports can be reconfigured as an 8-bit Parallel
   available. All devices have 1024 bytes of data             Slave Port for direct processor-to-processor
   EEPROM for long-term retention of nonvolatile              communications.
   data.
                                                           � CCP Modules: All devices in the family
� Memory Endurance: The Enhanced Flash cells                  incorporate five Capture/Compare/PWM modules
   for both program memory and data EEPROM are                to maximize flexibility in control applications. Up
   rated to last for many thousands of erase/write            to four different time bases may be used to
   cycles � up to 100,000 for program memory and              perform several different operations at once.
   1,000,000 for EEPROM. Data retention without
   refresh is conservatively estimated to be greater       � Analog Features: All devices in the family
   than 40 years.                                             feature 10-bit A/D converters, with up to 16 input
                                                              channels, as well as the ability to perform
1.1.2 EXTERNAL MEMORY INTERFACE                               conversions during Sleep mode. Also included
                                                              are dual analog comparators with programmable
In the event that 128 Kbytes of program memory is             input and output configuration, a programmable
inadequate for an application, the PIC18F8X20                 Low-Voltage Detect module and a programmable
members of the family also implement an External              Brown-out Reset module.
Memory Interface. This allows the controller's internal
program counter to address a memory space of up to         � Self-programmability: These devices can write
2 Mbytes, permitting a level of data access that few          to their own program memory spaces under inter-
8-bit devices can claim.                                      nal software control. By using a bootloader routine
                                                              located in the protected Boot Block at the top of
                                                              program memory, it becomes possible to create
                                                              an application that can update itself in the field.

2004 Microchip Technology Inc.                            DS39609B-page 7
PIC18F6520/8520/6620/8620/6720/8720

1.2 Details on Individual Family                            3. A/D channels (12 for PIC18F6X20 devices,
         Members                                                  16 for PIC18F8X20)

The PIC18FXX20 devices are available in 64-pin and          4. I/O pins (52 on PIC18F6X20 devices, 68 on
80-pin packages. They are differentiated from each                PIC18F8X20)
other in five ways:
                                                            5. External program memory interface (present
1. Flash program memory (32 Kbytes for                            only on PIC18F8X20 devices)
      PIC18FX520 devices, 64 Kbytes for
      PIC18FX620 devices and 128 Kbytes for                 All other features for devices in the PIC18FXX20 family
      PIC18FX720 devices)                                   are identical. These are summarized in Table 1-1.

2. Data RAM (2048 bytes for PIC18FX520                      Block diagrams of the PIC18F6X20 and PIC18F8X20
      devices, 3840 bytes for PIC18FX620 and                devices are provided in Figure 1-1 and Figure 1-2,
      PIC18FX720 devices)                                   respectively. The pinouts for these device families are
                                                            listed in Table 1-2.

TABLE 1-1: PIC18FXX20 DEVICE FEATURES

        Features          PIC18F6520 PIC18F6620 PIC18F6720 PIC18F8520 PIC18F8620 PIC18F8720

Operating Frequency       DC � 40 MHz DC � 25 MHz DC � 25 MHz DC � 40 MHz DC � 25 MHz DC � 25 MHz

Program Memory            32K              64K              128K             32K           64K           128K
(Bytes)

Program Memory            16384            32768            65536            16384         32768         65536
(Instructions)

Data Memory               2048             3840             3840             2048          3840          3840
(Bytes)

Data EEPROM               1024             1024             1024             1024          1024          1024
Memory (Bytes)

External Memory           No               No               No               Yes           Yes           Yes
Interface

Interrupt Sources         17               17               17               18            18            18

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

                          D, E, F, G       E, F, G          E, F, G          D, E, F, G, H, J D, E, F, G, H, J D, E, F, G, H, J

Timers                    5                5                5                5             5             5

Capture/Compare/          5                5                5                5             5             5

PWM Modules

Serial Communications        MSSP,            MSSP,            MSSP,            MSSP,         MSSP,         MSSP,
                          Addressable      Addressable      Addressable      Addressable   Addressable   Addressable
                           USART (2)        USART (2)        USART (2)        USART (2)     USART (2)     USART (2)

Parallel Communications   PSP              PSP              PSP              PSP           PSP           PSP

10-bit Analog-to-Digital  12 input         12 input         12 input         16 input      16 input      16 input
Module                    channels         channels         channels         channels      channels      channels

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

                                RESET            RESET            RESET      RESET         RESET         RESET
                             Instruction,     Instruction,     Instruction,
                             Stack Full,      Stack Full,      Stack Full,   Instruction,  Instruction,  Instruction,
                          Stack Underflow  Stack Underflow  Stack Underflow
                           (PWRT, OST)      (PWRT, OST)      (PWRT, OST)     Stack Full,   Stack Full,   Stack Full,

                                                                             Stack Underflow Stack Underflow Stack Underflow

                                                                             (PWRT, OST) (PWRT, OST) (PWRT, OST)

Programmable              Yes              Yes              Yes              Yes           Yes           Yes

Low-Voltage Detect

Programmable              Yes              Yes              Yes              Yes           Yes           Yes
Brown-out Reset

Instruction Set           77 Instructions 77 Instructions 77 Instructions 77 Instructions 77 Instructions 77 Instructions

Package                   64-pin TQFP 64-pin TQFP 64-pin TQFP 80-pin TQFP 80-pin TQFP 80-pin TQFP

DS39609B-page 8                                                                             2004 Microchip Technology Inc.
              PIC18F6520/8520/6620/8620/6720/8720

FIGURE 1-1:            PIC18F6X20 BLOCK DIAGRAM

                                                                            Data Bus<8>                          PORTA
                                                                                                                 PORTB
                       21 Table Pointer<21>                                 Data Latch                           PORTC  RA0/AN0
                                                                                                                 PORTD  RA1/AN1
                                                   8            8                                                PORTE  RA2/AN2/VREF-
                                                                                                                 PORTF  RA3/AN3/VREF+
                   21               inc/dec logic                           Data RAM                             PORTG  RA4/T0CKI
                                                                                                                        RA5/AN4/LVDIN
Address Latch          21                 PCLATU PCLATH                     Address Latch                               RA6
Program Memory                                                                        12
                                          PCU PCH PCL                                                                   RB0/INT0
   Data Latch                             Program Counter                   Address<12>                                 RB1/INT1
                                                                                                                        RB2/INT2
                                                                   4        12             4                            RB3/INT3
                                                                   BSR                     Bank0, F                     RB4/KBI0
                                                                             FSR0                                       RB5/KBI1/PGM
                                                31 Level Stack               FSR1                12                     RB6/KBI2/PGC
                                                                             FSR2                                       RB7/KBI3/PGD

                                   Table Latch                                    inc/dec                               RC0/T1OSO/T13CKI
                                                                   Decode logic                                         RC1/T1OSI/CCP2
                                                                                                                        RC2/CCP1
                               16      8                                                                                RC3/SCK/SCL
                                                                                                                        RC4/SDI/SDA
                                                   ROM Latch                                                            RC5/SDO
                                                                                                                        RC6/TX1/CK1
                                                   IR                                                                   RC7/RX1/DT1

                                                                                                   8                     RD7/PSP7:RD0/PSP0

                                                                            PRODH PRODL                                 RE0/RD
                                                                                                                        RE1/WR
                       Instruction                                       3  8 x 8 Multiply                              RE2/CS
                       Decode &                                                                  8                      RE3
                                                                   BITOP                                                RE4
                         Control                                        8                                               RE5
                                                                                                                        RE6
                                                                            WREG                      8                 RE7/CCP2

OSC2/CLKO                                   Power-up                        8                                           RF0/AN5
                                              Timer                                                                     RF1/AN6/C2OUT
OSC1/CLKI              Timing                                                                                           RF2/AN7/C1OUT
                                            Oscillator                                                                  RF3/AN8
              Generation                  Start-up Timer                    8                                           RF4/AN9
                                                                              ALU<8>                                    RF5/AN10/CVREF
                                            Power-on                                                                    RF6/AN11
                                              Reset                                        8                            RF7/SS

              Precision                    Watchdog                                                                     RG0/CCP3
              Band Gap                        Timer                                                                     RG1/TX2/CK2
                                                                                                                        RG2/RX2/DT2
              Reference                    Brown-out                                                                    RG3/CCP4
                                              Reset                                                                     RG4/CCP5

                                    MCLR/VPP VDD, VSS

Synchronous                    USART1              USART2                      Data
Serial Port                                                                EEPROM

BOR                    Timer0       Timer1         Timer2          Timer3                  Timer4
LVD

Comparator             CCP1            CCP2            CCP3        CCP4                    CCP5          10-bit
                                                                                                          A/D

2004 Microchip Technology Inc.                                                                                         DS39609B-page 9
PIC18F6520/8520/6620/8620/6720/8720

FIGURE 1-2:                              PIC18F8X20 BLOCK DIAGRAM

                                                                                          Data Bus<8>                         PORTA
                                                                                                                              PORTB
                                            21 Table Pointer<21>                          Data Latch                          PORTC  RA0/AN0
                                                                                          Data RAM                            PORTD  RA1/AN1
                                                                  8           8                                               PORTE  RA2/AN2/VREF-
                                                                                                                              PORTF  RA3/AN3/VREF+
                                     21          inc/dec logic                                                                       RA4/T0CKI
                                                                                                                              PORTG  RA5/AN4/LVDIN
System Bus Interface  Address Latch         21         PCLATU PCLATH                      Address Latch                       PORTH  RA6
                      Program Memory                                                                12                        PORTJ
                                                       PCU PCH PCL                                                                   RB0/INT0
                         Data Latch                    Program Counter                    Address<12>                                RB1/INT1
                                                                                                                                     RB2/INT2
                                                                                 4        12            4                            RB3/INT3/CCP2
                                                                                 BSR                    Bank0, F                     RB4/KBI0
                                                                                           FSR0                                      RB5/KBI1/PGM
                                                              31 Level Stack               FSR1               12                     RB6/KBI2/PGC
                                                                                           FSR2                                      RB7/KBI3/PGD

                                                 Table Latch                                   inc/dec                               RC0/T1OSO/T13CKI
                                                                                 Decode logic                                        RC1/T1OSI/CCP2
                                                                                                                                     RC2/CCP1
                                            16      8                                                                                RC3/SCK/SCL
                                                                                                                                     RC4/SDI/SDA
                                                                ROM Latch                                                            RC5/SDO
                                                                                                                                     RC6/TX1/CK1
                      AD15:AD0, A19:A16(1)                        IR                                                                 RC7/RX1/DT1

                                                                                                                8                     RD7/PSP7/AD7:
                                                                                                                                      RD0/PSP0/AD0
                                                                                          PRODH PRODL
                                                                                                                                     RE0/RD/AD8
                                    Instruction                                        3  8 x 8 Multiply                             RE1/WR/AD9
                                    Decode &                                                                   8                     RE2/CS/AD10
                                                                                 BITOP                                               RE3/AD11
                                      Control                                         8                                              RE4/AD12
                                                                                                                                     RE5/AD13
                                                                                          WREG                     8                 RE6/AD14
                                                                                                                                     RE7/CCP2/AD15
                      OSC2/CLKO                          Power-up                         8
                                                           Timer                                                                     RF0/AN5
                      OSC1/CLKI     Timing                                                                                           RF1/AN6/C2OUT
                                                         Oscillator                                                                  RF2/AN7/C1OUT
                                    Generation         Start-up Timer                     8                                          RF3/AN8
                                                                                            ALU<8>                                   RF4/AN9
                                                         Power-on                                                                    RF5/AN10/CVREF
                                                           Reset                                        8                            RF6/AN11
                                                                                                                                     RF7/SS
                                    Precision           Watchdog
                                    Band Gap               Timer                                                                     RG0/CCP3
                                                                                                                                     RG1/TX2/CK2
                                    Reference           Brown-out                                                                    RG2/RX2/DT2
                                                           Reset                                                                     RG3/CCP4
                                                                                                                                     RG4/CCP5
                                                 MCLR/VPP VDD, VSS
                                                                                                                                      RH3/AD19:RH0/AD16
                      Synchronous           USART1                USART2                     Data                                     RH7/AN15:RH4/AN12
                       Serial Port                                                        EEPROM
                                                                                                                                     RJ0/ALE
                      BOR                Timer0  Timer1           Timer2         Timer3                 Timer4                       RJ1/OE
                      LVD                                                                                                            RJ2/WRL
                                                                                                                                     RJ3/WRH
                                                                                                                                     RJ4/BA0
                                                                                                                                     RJ5/CE
                                                                                                                                     RJ6/LB
                                                                                                                                     RJ7/UB

                      Comparator CCP1               CCP2              CCP3       CCP4                   CCP5          10-bit
                                                                                                                       A/D

Note 1: External memory interface pins are physically multiplexed with PORTD (AD7:AD0), PORTE (AD15:AD8) and PORTH (A19:A16).

DS39609B-page 10                                                                                                               2004 Microchip Technology Inc.
           PIC18F6520/8520/6620/8620/6720/8720

TABLE 1-2: PIC18FXX20 PINOUT I/O DESCRIPTIONS

                                    Pin Number     Pin  Buffer
                                                         Type
Pin Name       PIC18F6X20 PIC18F8X20 Type                                      Description

MCLR/VPP                         7              9               Master Clear (input) or programming
    MCLR
    VPP                                                         voltage (output).

                                                   I       ST   Master Clear (Reset) input. This pin is

                                                                an active-low Reset to the device.

                                                   P            Programming voltage input.

OSC1/CLKI      39                   49                          Oscillator crystal or external clock input.
    OSC1
                                                   I CMOS/ST Oscillator crystal input or external clock
    CLKI
                                                                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).

OSC2/CLKO/RA6  40                   50                          Oscillator crystal or clock output.

OSC2                                               O       --   Oscillator crystal output.

                                                                Connects to crystal or resonator in

                                                                Crystal Oscillator mode.

CLKO                                               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)

Note 1: Alternate assignment for CCP2 when CCP2MX is not selected (all operating modes except
              Microcontroller).

2: Default assignment when CCP2MX is set.

3: External memory interface functions are only available on PIC18F8X20 devices.

4: CCP2 is multiplexed with this pin by default when configured in Microcontroller mode. Otherwise, it is
      multiplexed with either RB3 or RC1.

5: PORTH and PORTJ are only available on PIC18F8X20 (80-pin) devices.

6: AVDD must be connected to a positive supply and AVSS must be connected to a ground reference for
      proper operation of the part in user or ICSP modes. See parameter D001A for details.

2004 Microchip Technology Inc.                                                    DS39609B-page 11
PIC18F6520/8520/6620/8620/6720/8720

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

                  Pin Number                    Pin   Buffer
                                                       Type
     Pin Name     PIC18F6X20 PIC18F8X20 Type                                 Description

                                                              PORTA is a bidirectional I/O port.

RA0/AN0           24  30
    RA0
    AN0                                         I/O      TTL  Digital I/O.

                                                I Analog      Analog input 0.

RA1/AN1           23  29
    RA1
    AN1                                         I/O      TTL  Digital I/O.

                                                I Analog      Analog input 1.

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

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

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

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

RA4/T0CKI         28  34
    RA4
                                                I/O ST/OD     Digital I/O � Open-drain when
    T0CKI
                                                              configured as output.

                                                I        ST   Timer0 external clock input.

RA5/AN4/LVDIN     27  33

RA5                                             I/O      TTL  Digital I/O.

AN4                                             I Analog      Analog input 4.

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)

Note 1: Alternate assignment for CCP2 when CCP2MX is not selected (all operating modes except
              Microcontroller).

     2: Default assignment when CCP2MX is set.

     3: External memory interface functions are only available on PIC18F8X20 devices.

     4: CCP2 is multiplexed with this pin by default when configured in Microcontroller mode. Otherwise, it is
           multiplexed with either RB3 or RC1.

     5: PORTH and PORTJ are only available on PIC18F8X20 (80-pin) devices.

     6: AVDD must be connected to a positive supply and AVSS must be connected to a ground reference for
           proper operation of the part in user or ICSP modes. See parameter D001A for details.

DS39609B-page 12                                                              2004 Microchip Technology Inc.
               PIC18F6520/8520/6620/8620/6720/8720

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

                                 Pin Number  Pin       Buffer
                                                        Type
Pin Name       PIC18F6X20 PIC18F8X20 Type                                     Description

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

RB0/INT0       48                58
    RB0
    INT0                                     I/O          TTL  Digital I/O.

                                             I            ST   External interrupt 0.

RB1/INT1       47                57
    RB1
    INT1                                     I/O          TTL  Digital I/O.

                                             I            ST   External interrupt 1.

RB2/INT2       46                56
    RB2
    INT2                                     I/O          TTL  Digital I/O.

                                             I            ST   External interrupt 2.

RB3/INT3/CCP2  45                55

RB3                                          I/O          TTL  Digital I/O.

INT3                                         I/O          ST   External interrupt 3.
CCP2(1)                                                        Capture2 input, Compare2 output,
                                             I/O          ST

                                                               PWM2 output.

RB4/KBI0       44                54
    RB4
    KBI0                                     I/O          TTL  Digital I/O.

                                             I            ST   Interrupt-on-change pin.

RB5/KBI1/PGM   43                53
    RB5
    KBI1                                     I/O          TTL  Digital I/O.
    PGM
                                             I            ST   Interrupt-on-change pin.

                                             I/O          ST   Low-Voltage ICSP Programming enable

                                                               pin.

RB6/KBI2/PGC   42                52
    RB6
    KBI2                                     I/O          TTL  Digital I/O.
    PGC
                                             I            ST   Interrupt-on-change pin.

                                             I/O          ST   In-Circuit Debugger and

                                                               ICSP programming clock.

RB7/KBI3/PGD   37                47
    RB7
    KBI3                                     I/O          TTL  Digital I/O.
    PGD
                                             I/O          ST   Interrupt-on-change pin.

                                                               In-Circuit Debugger and

                                                               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)

Note 1: Alternate assignment for CCP2 when CCP2MX is not selected (all operating modes except
              Microcontroller).

2: Default assignment when CCP2MX is set.

3: External memory interface functions are only available on PIC18F8X20 devices.

4: CCP2 is multiplexed with this pin by default when configured in Microcontroller mode. Otherwise, it is
      multiplexed with either RB3 or RC1.

5: PORTH and PORTJ are only available on PIC18F8X20 (80-pin) devices.

6: AVDD must be connected to a positive supply and AVSS must be connected to a ground reference for
      proper operation of the part in user or ICSP modes. See parameter D001A for details.

2004 Microchip Technology Inc.                                                       DS39609B-page 13
PIC18F6520/8520/6620/8620/6720/8720

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

                  Pin Number               Pin        Buffer
                                                       Type
Pin Name          PIC18F6X20 PIC18F8X20 Type                                 Description

                                                              PORTC is a bidirectional I/O port.

RC0/T1OSO/T13CKI  30  36

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

T13CKI                                     I             ST

RC1/T1OSI/CCP2    29  35

RC1                                        I/O           ST   Digital I/O.

T1OSI                                      I          CMOS    Timer1 oscillator input.
CCP2(2)
                                           I/O           ST   Capture2 input/Compare2 output/

                                                              PWM2 output.

RC2/CCP1          33  43
    RC2
    CCP1                                   I/O           ST   Digital I/O.

                                           I/O           ST   Capture1 input/Compare1 output/

                                                              PWM1 output.

RC3/SCK/SCL       34  44
    RC3
    SCK                                    I/O           ST   Digital I/O.

    SCL                                    I/O           ST   Synchronous serial clock input/output

                                                              for SPI mode.

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

RC4/SDI/SDA       35  45
    RC4
    SDI                                    I/O           ST   Digital I/O.
    SDA
                                           I             ST   SPI data in.
                                                              I2C data I/O.
                                           I/O           ST

RC5/SDO           36  46
    RC5
    SDO                                    I/O           ST   Digital I/O.

                                           O             --   SPI data out.

RC6/TX1/CK1       31  37
    RC6
    TX1                                    I/O           ST   Digital I/O.
    CK1
                                           O             --   USART 1 asynchronous transmit.

                                           I/O           ST   USART 1 synchronous clock

                                                              (see RX1/DT1).

RC7/RX1/DT1       32  38
    RC7
    RX1                                    I/O           ST   Digital I/O.
    DT1
                                           I             ST   USART 1 asynchronous receive.

                                           I/O           ST   USART 1 synchronous data

                                                              (see TX1/CK1).

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)

Note 1: Alternate assignment for CCP2 when CCP2MX is not selected (all operating modes except
              Microcontroller).

2: Default assignment when CCP2MX is set.

3: External memory interface functions are only available on PIC18F8X20 devices.

4: CCP2 is multiplexed with this pin by default when configured in Microcontroller mode. Otherwise, it is
      multiplexed with either RB3 or RC1.

5: PORTH and PORTJ are only available on PIC18F8X20 (80-pin) devices.

6: AVDD must be connected to a positive supply and AVSS must be connected to a ground reference for
      proper operation of the part in user or ICSP modes. See parameter D001A for details.

DS39609B-page 14                                                              2004 Microchip Technology Inc.
              PIC18F6520/8520/6620/8620/6720/8720

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

                                 Pin Number  Pin      Buffer
                                                       Type
Pin Name      PIC18F6X20 PIC18F8X20 Type                                     Description

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

RD0/PSP0/AD0  58                 72

    RD0                                      I/O         ST   Digital I/O.

    PSP0                                     I/O         TTL  Parallel Slave Port data.
    AD0(3)
                                             I/O         TTL  External memory address/data 0.

RD1/PSP1/AD1  55                 69

    RD1                                      I/O         ST   Digital I/O.

    PSP1                                     I/O         TTL  Parallel Slave Port data.
    AD1(3)
                                             I/O         TTL  External memory address/data 1.

RD2/PSP2/AD2  54                 68

    RD2                                      I/O         ST   Digital I/O.

    PSP2                                     I/O         TTL  Parallel Slave Port data.
    AD2(3)
                                             I/O         TTL  External memory address/data 2.

RD3/PSP3/AD3  53                 67

    RD3                                      I/O         ST   Digital I/O.

    PSP3                                     I/O         TTL  Parallel Slave Port data.
    AD3(3)
                                             I/O         TTL  External memory address/data 3.

RD4/PSP4/AD4  52                 66

    RD4                                      I/O         ST   Digital I/O.

    PSP4                                     I/O         TTL  Parallel Slave Port data.
    AD4(3)
                                             I/O         TTL  External memory address/data 4.

RD5/PSP5/AD5  51                 65

    RD5                                      I/O         ST   Digital I/O.

    PSP5                                     I/O         TTL  Parallel Slave Port data.
    AD5(3)
                                             I/O         TTL  External memory address/data 5.

RD6/PSP6/AD6  50                 64

    RD6                                      I/O         ST   Digital I/O.

    PSP6                                     I/O         TTL  Parallel Slave Port data.
    AD6(3)
                                             I/O         TTL  External memory address/data 6.

RD7/PSP7/AD7  49                 63

    RD7                                      I/O         ST   Digital I/O.

    PSP7                                     I/O         TTL  Parallel Slave Port data.
    AD7(3)
                                             I/O         TTL  External memory address/data 7.

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)

Note 1: Alternate assignment for CCP2 when CCP2MX is not selected (all operating modes except
              Microcontroller).

2: Default assignment when CCP2MX is set.

3: External memory interface functions are only available on PIC18F8X20 devices.

4: CCP2 is multiplexed with this pin by default when configured in Microcontroller mode. Otherwise, it is
      multiplexed with either RB3 or RC1.

5: PORTH and PORTJ are only available on PIC18F8X20 (80-pin) devices.

6: AVDD must be connected to a positive supply and AVSS must be connected to a ground reference for
      proper operation of the part in user or ICSP modes. See parameter D001A for details.

2004 Microchip Technology Inc.                                                   DS39609B-page 15
PIC18F6520/8520/6620/8620/6720/8720

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

                     Pin Number            Pin         Buffer
                                                        Type
Pin Name          PIC18F6X20 PIC18F8X20 Type                                  Description

                                                               PORTE is a bidirectional I/O port.

RE0/RD/AD8        2              4
    RE0
    RD                                     I/O            ST   Digital I/O.

    AD8(3)                                 I              TTL  Read control for Parallel Slave Port

                                                               (see WR and CS pins).

                                           I/O            TTL  External memory address/data 8.

RE1/WR/AD9        1              3
    RE1
    WR                                     I/O            ST   Digital I/O.

    AD9(3)                                 I              TTL  Write control for Parallel Slave Port

                                                               (see CS and RD pins).

                                           I/O            TTL  External memory address/data 9.

RE2/CS/AD10       64  78
    RE2
    CS                                     I/O            ST   Digital I/O.

    AD10(3)                                I              TTL  Chip select control for Parallel Slave

                                                               Port (see RD and WR).

                                           I/O            TTL  External memory address/data 10.

RE3/AD11          63  77

    RE3                                    I/O            ST   Digital I/O.
    AD11(3)
                                           I/O            TTL  External memory address/data 11.

RE4/AD12          62  76
    RE4
    AD12                                   I/O            ST   Digital I/O.

                                           I/O            TTL  External memory address/data 12.

RE5/AD13          61  75

    RE5                                    I/O            ST   Digital I/O.
    AD13(3)
                                           I/O            TTL  External memory address/data 13.

RE6/AD14          60  74

    RE6                                    I/O            ST   Digital I/O.
    AD14(3)
                                           I/O            TTL  External memory address/data 14.

RE7/CCP2/AD15     59  73

RE7                                        I/O            ST   Digital I/O.
CCP2(1,4)
                                           I/O            ST   Capture2 input/Compare2 output/

                                                               PWM2 output.

AD15(3)                                    I/O            TTL  External memory address/data 15.

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)

Note 1: Alternate assignment for CCP2 when CCP2MX is not selected (all operating modes except
              Microcontroller).

2: Default assignment when CCP2MX is set.

3: External memory interface functions are only available on PIC18F8X20 devices.

4: CCP2 is multiplexed with this pin by default when configured in Microcontroller mode. Otherwise, it is
      multiplexed with either RB3 or RC1.

5: PORTH and PORTJ are only available on PIC18F8X20 (80-pin) devices.

6: AVDD must be connected to a positive supply and AVSS must be connected to a ground reference for
      proper operation of the part in user or ICSP modes. See parameter D001A for details.

DS39609B-page 16                                                               2004 Microchip Technology Inc.
          PIC18F6520/8520/6620/8620/6720/8720

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

                                 Pin Number  Pin       Buffer
                                                        Type
Pin Name        PIC18F6X20 PIC18F8X20 Type                                    Description

                                                               PORTF is a bidirectional I/O port.

RF0/AN5         18               24
    RF0
    AN5                                      I/O          ST   Digital I/O.

                                             I Analog          Analog input 5.

RF1/AN6/C2OUT   17               23

RF1                                          I/O          ST   Digital I/O.

AN6                                          I Analog          Analog input 6.

C2OUT                                        O            ST   Comparator 2 output.

RF2/AN7/C1OUT   16               18

RF2                                          I/O          ST   Digital I/O.

AN7                                          I Analog          Analog input 7.

C1OUT                                        O            ST   Comparator 1 output.

RF3/AN8         15               17
    RF1
    AN8                                      I/O          ST   Digital I/O.

                                             I Analog          Analog input 8.

RF4/AN9         14               16
    RF1
    AN9                                      I/O          ST   Digital I/O.

                                             I Analog          Analog input 9.

RF5/AN10/CVREF  13               15

RF1                                          I/O          ST   Digital I/O.

AN10                                         I Analog          Analog input 10.

CVREF                                        O Analog          Comparator VREF output.

RF6/AN11        12               14
    RF6
    AN11                                     I/O          ST   Digital I/O.

                                             I Analog          Analog input 11.

RF7/SS          11               13
    RF7
    SS                                       I/O          ST   Digital I/O.

                                             I            TTL  SPI slave select input.

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)

Note 1: Alternate assignment for CCP2 when CCP2MX is not selected (all operating modes except
              Microcontroller).

2: Default assignment when CCP2MX is set.

3: External memory interface functions are only available on PIC18F8X20 devices.

4: CCP2 is multiplexed with this pin by default when configured in Microcontroller mode. Otherwise, it is
      multiplexed with either RB3 or RC1.

5: PORTH and PORTJ are only available on PIC18F8X20 (80-pin) devices.

6: AVDD must be connected to a positive supply and AVSS must be connected to a ground reference for
      proper operation of the part in user or ICSP modes. See parameter D001A for details.

2004 Microchip Technology Inc.                                                         DS39609B-page 17
PIC18F6520/8520/6620/8620/6720/8720

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

                     Pin Number            Pin        Buffer
                                                       Type
Pin Name          PIC18F6X20 PIC18F8X20 Type                                 Description

                                                              PORTG is a bidirectional I/O port.

RG0/CCP3          3              5
    RG0
    CCP3                                   I/O           ST   Digital I/O.

                                           I/O           ST   Capture3 input/Compare3 output/

                                                              PWM3 output.

RG1/TX2/CK2       4              6
    RG1
    TX2                                    I/O           ST   Digital I/O.
    CK2
                                           O             --   USART 2 asynchronous transmit.

                                           I/O           ST   USART 2 synchronous clock

                                                              (see RX2/DT2).

RG2/RX2/DT2       5              7
    RG2
    RX2                                    I/O           ST   Digital I/O.
    DT2
                                           I             ST   USART 2 asynchronous receive.

                                           I/O           ST   USART 2 synchronous data

                                                              (see TX2/CK2).

RG3/CCP4          6              8
    RG3
    CCP4                                   I/O           ST   Digital I/O.

                                           I/O           ST   Capture4 input/Compare4 output/

                                                              PWM4 output.

RG4/CCP5          8  10
    RG4
    CCP5                                   I/O           ST   Digital I/O.

                                           I/O           ST   Capture5 input/Compare5 output/

                                                              PWM5 output.

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)

Note 1: Alternate assignment for CCP2 when CCP2MX is not selected (all operating modes except
              Microcontroller).

2: Default assignment when CCP2MX is set.

3: External memory interface functions are only available on PIC18F8X20 devices.

4: CCP2 is multiplexed with this pin by default when configured in Microcontroller mode. Otherwise, it is
      multiplexed with either RB3 or RC1.

5: PORTH and PORTJ are only available on PIC18F8X20 (80-pin) devices.

6: AVDD must be connected to a positive supply and AVSS must be connected to a ground reference for
      proper operation of the part in user or ICSP modes. See parameter D001A for details.

DS39609B-page 18                                                              2004 Microchip Technology Inc.
            PIC18F6520/8520/6620/8620/6720/8720

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

                                 Pin Number         Pin  Buffer
                                                          Type
Pin Name    PIC18F6X20 PIC18F8X20 Type                                          Description

                                                                 PORTH is a bidirectional I/O port(5).

RH0/A16     --                   79
    RH0
    A16                                             I/O     ST   Digital I/O.

                                                    O       TTL  External memory address 16.

RH1/A17     --                   80
    RH1
    A17                                             I/O     ST   Digital I/O.

                                                    O       TTL  External memory address 17.

RH2/A18     --                               1
    RH2
    A18                                             I/O     ST   Digital I/O.

                                                    O       TTL  External memory address 18.

RH3/A19     --                               2
    RH3
    A19                                             I/O     ST   Digital I/O.

                                                    O       TTL  External memory address 19.

RH4/AN12    --                   22
    RH4
    AN12                                            I/O     ST   Digital I/O.

                                                    I Analog     Analog input 12.

RH5/AN13    --                   21
    RH5
    AN13                                            I/O     ST   Digital I/O.

                                                    I Analog     Analog input 13.

RH6/AN14    --                   20
    RH6
    AN14                                            I/O     ST   Digital I/O.

                                                    I Analog     Analog input 14.

RH7/AN15    --                   19
    RH7
    AN15                                            I/O     ST   Digital I/O.

                                                    I Analog     Analog input 15.

Legend:     TTL = TTL compatible input                   CMOS = CMOS compatible input or output
            ST = Schmitt Trigger input with CMOS levels
Note 1:     I = Input                                    Analog = Analog input
        2:  P = Power
        3:                                               O       = Output
        4:
        5:                                               OD = Open-Drain (no P diode to VDD)
        6:
            Alternate assignment for CCP2 when CCP2MX is not selected (all operating modes except
            Microcontroller).

            Default assignment when CCP2MX is set.

            External memory interface functions are only available on PIC18F8X20 devices.

            CCP2 is multiplexed with this pin by default when configured in Microcontroller mode. Otherwise, it is
            multiplexed with either RB3 or RC1.

            PORTH and PORTJ are only available on PIC18F8X20 (80-pin) devices.

            AVDD must be connected to a positive supply and AVSS must be connected to a ground reference for
            proper operation of the part in user or ICSP modes. See parameter D001A for details.

2004 Microchip Technology Inc.                                                            DS39609B-page 19
PIC18F6520/8520/6620/8620/6720/8720

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

                  Pin Number                        Pin  Buffer
                                                          Type
     Pin Name     PIC18F6X20 PIC18F8X20 Type                                    Description

                                                                 PORTJ is a bidirectional I/O port(5).

RJ0/ALE           --       62
    RJ0
    ALE                                             I/O     ST   Digital I/O.

                                                    O       TTL  External memory address latch enable.

RJ1/OE            --       61
    RJ1
    OE                                              I/O     ST   Digital I/O.

                                                    O       TTL  External memory output enable.

RJ2/WRL           --       60
    RJ2
    WRL                                             I/O     ST   Digital I/O.

                                                    O       TTL  External memory write low control.

RJ3/WRH           --       59
    RJ3
    WRH                                             I/O     ST   Digital I/O.

                                                    O       TTL  External memory write high control.

RJ4/BA0           --       39
    RJ4
    BA0                                             I/O     ST   Digital I/O.

                                                    O       TTL  External memory Byte Address 0 control.

RJ5/CE            --       40
    RJ5
    CE                                              I/O     ST   Digital I/O.

                                                    O       TTL  External memory chip enable control.

RJ6/LB            --       41
    RJ6
    LB                                              I/O     ST   Digital I/O.

                                                    O       TTL  External memory low byte select.

RJ7/UB            --       42
    RJ7
    UB                                              I/O     ST   Digital I/O.

                                                    O       TTL  External memory high byte select.

VSS               9, 25,   11, 31,                  P       -- Ground reference for logic and I/O pins.

                  41, 56   51, 70

VDD               10, 26,  12, 32,                  P       -- Positive supply for logic and I/O pins.
                  38, 57
AVSS(6)                    48, 71                           -- Ground reference for analog modules.
AVDD(6)             20                                      -- Positive supply for analog modules.
                    19     26                       P

                           25                       P

Legend:     TTL = TTL compatible input                   CMOS = CMOS compatible input or output
            ST = Schmitt Trigger input with CMOS levels
Note 1:     I = Input                                    Analog = Analog input
        2:  P = Power
        3:                                               O       = Output
        4:
        5:                                               OD = Open-Drain (no P diode to VDD)
        6:
            Alternate assignment for CCP2 when CCP2MX is not selected (all operating modes except
            Microcontroller).

            Default assignment when CCP2MX is set.

            External memory interface functions are only available on PIC18F8X20 devices.

            CCP2 is multiplexed with this pin by default when configured in Microcontroller mode. Otherwise, it is
            multiplexed with either RB3 or RC1.

            PORTH and PORTJ are only available on PIC18F8X20 (80-pin) devices.

            AVDD must be connected to a positive supply and AVSS must be connected to a ground reference for
            proper operation of the part in user or ICSP modes. See parameter D001A for details.

DS39609B-page 20                                                                 2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

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

                                                                Ranges Tested:

2.1 Oscillator Types                                      Mode  Freq     C1                C2

The PIC18FXX20 devices can be operated in eight           XT    455 kHz 68-100 pF 68-100 pF
different oscillator modes. The user can program three
configuration bits (FOSC2, FOSC1 and FOSC0) to                  2.0 MHz  15-68 pF 15-68 pF
select one of these eight modes:
                                                                4.0 MHz  15-68 pF 15-68 pF

                                                          HS    8.0 MHz  10-68 pF 10-68 pF

1. LP        Low-Power Crystal                                  16.0 MHz 10-22 pF 10-22 pF
2. XT        Crystal/Resonator
3. HS        High-Speed Crystal/Resonator                 These values are for design guidance only.
4. HS+PLL    High-Speed Crystal/Resonator                 See notes following this table.
             with PLL enabled
5. RC        External Resistor/Capacitor                        Resonators Used:
6. RCIO      External Resistor/Capacitor with
             I/O pin enabled                              2.0 MHz Murata Erie CSA2.00MG    � 0.5%
7. EC        External Clock
8. ECIO      External Clock with I/O pin                  4.0 MHz Murata Erie CSA4.00MG    � 0.5%
             enabled
                                                          8.0 MHz Murata Erie CSA8.00MT    � 0.5%

                                                          16.0 MHz Murata Erie CSA16.00MX  � 0.5%

                                                          All resonators used did not have built-in capacitors.

2.2 Crystal Oscillator/Ceramic                            Note 1: Higher capacitance increases the stability
         Resonators                                                   of the oscillator, but also increases the
                                                                      start-up time.
In XT, LP, HS or HS+PLL Oscillator modes, a crystal or
ceramic resonator is connected to the OSC1 and                   2: When operating below 3V VDD, or when
OSC2 pins to establish oscillation. Figure 2-1 shows                  using certain ceramic resonators at any
the pin connections.                                                  voltage, it may be necessary to use high
                                                                      gain HS mode, try a lower frequency
The PIC18FXX20 oscillator design requires the use of                  resonator, or switch to a crystal oscillator.
a parallel cut crystal.
                                                                 3: Since each resonator/crystal has its own
Note:  Use of a series cut crystal may give a fre-                    characteristics, the user should consult
       quency out of the crystal manufacturer's                       the resonator/crystal manufacturer for
       specifications.                                                appropriate values of external
                                                                      components, or verify oscillator
                                                                      performance.

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

C1(1)        OSC1

           XTAL                  RF(3)  To
                                        Internal
                                        Logic

           RS(2)                        Sleep

C2(1)        OSC2                PIC18FXX20

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

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

        3: RF varies with the oscillator mode chosen.

2004 Microchip Technology Inc.                                                 DS39609B-page 21
PIC18F6520/8520/6620/8620/6720/8720

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

Mode        Freq     C1        C2                             Clock from                    OSC1
                                                              Ext. System
LP          32 kHz   15-22 pF  15-22 pF                                                             PIC18FXX20
                                                                                Open
            200 kHz                                                                         OSC2

XT          1 MHz    15-22 pF  15-22 pF

            4 MHz

HS          4 MHz                                             2.3 RC Oscillator

            8 MHz    15-22 pF  15-22 pF                       For timing insensitive applications, the "RC" and
                                                              "RCIO" device options offer additional cost savings.
            20 MHz                                            The RC oscillator frequency is a function of the supply
                                                              voltage, the resistor (REXT) and capacitor (CEXT) val-
Capacitor values are for design guidance only.                ues and the operating temperature. In addition to this,
                                                              the oscillator frequency will vary from unit to unit, due
These capacitors were tested with the above crystal           to normal process parameter variation. Furthermore,
frequencies for basic start-up and operation. These           the difference in lead frame capacitance between pack-
values are not optimized.                                     age types will also affect the oscillation frequency,
                                                              especially for low CEXT values. The user also needs to
Different capacitor values may be required to produce         take into account variation due to tolerance of external
acceptable oscillator operation. The user should test         R and C components used. Figure 2-3 shows how the
the performance of the oscillator over the expected           R/C combination is connected.
VDD and temperature range for the application.
                                                              In the RC Oscillator mode, the oscillator frequency
See the notes following this table for additional             divided by 4 is available on the OSC2 pin. This signal
information.                                                  may be used for test purposes or to synchronize other
                                                              logic.
    Note 1: Higher capacitance increases the stability
                of the oscillator, but also increases the     FIGURE 2-3:             RC OSCILLATOR MODE
                start-up time.
                                                                    VDD
           2: When operating below 3V VDD, or when
                using certain ceramic resonators at any       REXT
                voltage, it may be necessary to use the
                HS mode or switch to a crystal oscillator.                            OSC1          Internal
                                                                                                     Clock
           3: Since each resonator/crystal has its
                own characteristics, the user should          CEXT
                consult the resonator/crystal manufac-
                turer for appropriate values of external      VSS                                   PIC18FXX20
                components, or verify oscillator
                performance.                                                           OSC2/CLKO
                                                                           FOSC/4
           4: RS may be required to avoid overdriving
                crystals with low drive level specification.  Recommended values: 3 k  REXT  100 k

           5: Always verify oscillator performance over                               CEXT > 20 pF
                the VDD and temperature range that is
                expected for the application.                 The RCIO Oscillator mode functions like the RC mode,
                                                              except that the OSC2 pin becomes an additional
An external clock source may also be connected to the         general purpose I/O pin. The I/O pin becomes bit 6 of
OSC1 pin in the HS, XT and LP modes, as shown in              PORTA (RA6).
Figure 2-2.

DS39609B-page 22                                                                       2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

2.4 External Clock Input                                FIGURE 2-5:                    EXTERNAL CLOCK INPUT
                                                                                       OPERATION
The EC and ECIO Oscillator modes require an external                                   (ECIO CONFIGURATION)
clock source to be connected to the OSC1 pin. The
feedback device between OSC1 and OSC2 is turned                 Clock from             OSC1
off in these modes to save current. There is a maximum          Ext. System
1.5 �s start-up required after a Power-on Reset, or                                            PIC18FXX20
wake-up from Sleep mode.                                                          RA6
                                                                                       I/O (OSC2)
In the EC Oscillator mode, the oscillator frequency
divided by 4 is available on the OSC2 pin. This signal  2.5 HS/PLL
may be used for test purposes or to synchronize other
logic. Figure 2-4 shows the pin connections for the EC  A Phase Locked Loop circuit (PLL) is provided as a
Oscillator mode.                                        programmable option for users that want to multiply the
                                                        frequency of the incoming crystal oscillator signal by 4.
FIGURE 2-4:             EXTERNAL CLOCK INPUT            For an input clock frequency of 10 MHz, the internal
                        OPERATION                       clock frequency will be multiplied to 40 MHz. This is
                        (EC CONFIGURATION)              useful for customers who are concerned with EMI due
                                                        to high-frequency crystals.
Clock from              OSC1
Ext. System                                             The PLL is one of the modes of the FOSC<2:0> config-
                                PIC18FXX20              uration bits. The oscillator mode is specified during
                FOSC/4                                  device programming.
                        OSC2
                                                        The PLL can only be enabled when the oscillator con-
The ECIO Oscillator mode functions like the EC mode,    figuration bits are programmed for HS mode. If they are
except that the OSC2 pin becomes an additional gen-     programmed for any other mode, the PLL is not
eral purpose I/O pin. The I/O pin becomes bit 6 of      enabled and the system clock will come directly from
PORTA (RA6). Figure 2-5 shows the pin connections       OSC1. Also, PLL operation cannot be changed "on-
for the ECIO Oscillator mode.                           the-fly". To enable or disable it, the controller must
                                                        either cycle through a Power-on Reset, or switch the
                                                        clock source from the main oscillator to the Timer1
                                                        oscillator and back again. See Section 2.6 "Oscillator
                                                        Switching Feature" for details on oscillator switching.

                                                        A PLL lock timer is used to ensure that the PLL has
                                                        locked before device execution starts. The PLL lock
                                                        timer has a time-out that is called TPLL.

FIGURE 2-6:             PLL BLOCK DIAGRAM

(from Configuration     HS Osc
   bit Register)

                        PLL Enable

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

                                                        Divide by 4                    MUX

2004 Microchip Technology Inc.                                                        DS39609B-page 23
PIC18F6520/8520/6620/8620/6720/8720

2.6 Oscillator Switching Feature                        execution mode. Figure 2-7 shows a block diagram of
                                                        the system clock sources. The clock switching feature
The PIC18FXX20 devices include a feature that allows    is enabled by programming the Oscillator Switching
the system clock source to be switched from the main    Enable (OSCSEN) bit in Configuration Register 1H to a
oscillator to an alternate low-frequency clock source.  `0'. Clock switching is disabled in an erased device.
For the PIC18FXX20 devices, this alternate clock        See Section 12.0 "Timer1 Module" for further details
source is the Timer1 oscillator. If a low-frequency     of the Timer1 oscillator. See Section 23.0 "Special
crystal (32 kHz, for example) has been attached to the  Features of the CPU" for Configuration register
Timer1 oscillator pins and the Timer1 oscillator has    details.
been enabled, the device can switch to a low-power

FIGURE 2-7:       DEVICE CLOCK SOURCES

                  OSC2     PIC18FXX20                   4 x PLL  TOSC/4
                  OSC1                                     TOSC
                  T1OSO  Main Oscillator                                 MUX     TSCLK
                  T1OSI                      Sleep
                                                        TT1P
                         Timer1 Oscillator

                         T1OSCEN                                         Clock
                         Enable                                          Source
                         Oscillator

                                   Clock Source Option
                                   for other Modules

DS39609B-page 24                                                          2004 Microchip Technology Inc.
PIC18F6520/8520/6620/8620/6720/8720

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

REGISTER 2-1: OSCCON REGISTER

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

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

bit 7                                                                            bit 0

bit 7-1 Unimplemented: Read as `0'

bit 0 SCS: System Clock Switch bit
            When OSCSEN Configuration bit = 0 and T1OSCEN bit is set:
            1 = Switch to Timer1 oscillator/clock pin
            0 = Use primary oscillator/clock input pin
            When OSCSEN and T1OSCEN are in other states:
            Bit is forced clear.

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

2004 Microchip Technology Inc.                                             DS39609B-page 25
PIC18F6520/8520/6620/8620/6720/8720

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

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

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

T1OSI                                                2     3  4        5          6  7       8
OSC1
                                                                 TSCS

Internal            TOSC

System                        TDLY
Clock

SCS
(OSCCON<0>)

Program             PC                                           PC + 2                                                PC + 4
Counter

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

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

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

                    Q3        Q4                 Q1                                             TT1P         Q1 Q2 Q3 Q4 Q1 Q2 Q3

       T1OSI                                                                            1 2 34 567 8
       OSC1                                                                                                      TSCS

            OSC2                                              TOST
                                                                            TOSC
          Internal
  System Clock

              SCS
(OSCCON<0>)

Program                   PC                                                         PC + 2                                    PC + 6

Counter

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

DS39609B-page 26                                                                                       2004 Microchip Technology Inc.
              PIC18F6520/8520/6620/8620/6720/8720

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

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

              Q4                          Q1                                       TT1P       Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4

T1OSI                                         TOST      TPLL
OSC1

OSC2

         PLL Clock                                            TOSC                      TSCS
                Input                                                     1  23 4 56 78

  Internal System                                             PC + 2                          PC + 4
               Clock
                 SCS

  (OSCCON<0>)

Program Counter PC

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

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

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

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

            T1OSI                                                     TOSC
            OSC1                                                      12 34 5 6 7 8

            OSC2                              PC                                        TSCS  PC + 4
Internal System                                                                    PC + 2

             Clock
              SCS
(OSCCON<0>)

         Program
          Counter

Note 1: RC Oscillator mode assumed.

2004 Microchip Technology Inc.                                                               DS39609B-page 27
PIC18F6520/8520/6620/8620/6720/8720

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

DS39609B-page 28                                                 2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

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

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

                 RESET Instruction

       Stack Stack Full/Underflow Reset
      Pointer

                 External Reset

MCLR          WDT    WDT
VDD         Module  Time-out
OSC1                 Reset

                       Sleep

             VDD Rise Power-on Reset
              Detect

              Brown-out                                                        S
                 Reset
                                BOREN                                                Chip_Reset

      OST/PWRT                                                                 R  Q
                     OST
                          10-bit Ripple Counter

                 PWRT

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

                                                                                  Enable PWRT

                                                                                  Enable OST(2)

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

2004 Microchip Technology Inc.                                                   DS39609B-page 29
PIC18F6520/8520/6620/8620/6720/8720

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

A Power-on Reset pulse is generated on-chip when          The Oscillator Start-up Timer (OST) provides 1024
VDD rise is detected. To take advantage of the POR        oscillator cycles (from OSC1 input) delay after the
circuitry, tie the MCLR pin through a 1 k to 10 k         PWRT delay is over (parameter #32). This ensures that
resistor to VDD. This will eliminate external RC          the crystal oscillator or resonator has started and
components usually needed to create a Power-on            stabilized.
Reset delay. A minimum rise rate for VDD is specified
(parameter D004). For a slow rise time, see Figure 3-2.   The OST time-out is invoked only for XT, LP and HS
                                                          modes and only on Power-on Reset, or wake-up from
When the device starts normal operation (i.e., exits the  Sleep.
Reset condition), device operating parameters (volt-
age, frequency, temperature, etc.) must be met to         3.4 PLL Lock Time-out
ensure operation. If these conditions are not met, the
device must be held in Reset until the operating          With the PLL enabled, the time-out sequence following
conditions are met.                                       a Power-on Reset is different from other oscillator
                                                          modes. A portion of the Power-up Timer is used to
FIGURE 3-2:          EXTERNAL POWER-ON                    provide a fixed time-out that is sufficient for the PLL to
                     RESET CIRCUIT (FOR                   lock to the main oscillator frequency. This PLL lock
                     SLOW VDD POWER-UP)                   time-out (TPLL) is typically 2 ms and follows the
                                                          oscillator start-up time-out.
             VDD
                                                          3.5 Brown-out Reset (BOR)
         D        R
                                                          A configuration bit, BOREN, can disable (if clear/
                  C  R1                                   programmed), or enable (if set) the Brown-out Reset
                                MCLR                      circuitry. If VDD falls below parameter D005 for greater
                                                          than parameter #35, the brown-out situation will reset
                             PIC18FXX20                   the chip. A Reset may not occur if VDD falls below
                                                          parameter D005 for less than parameter #35. The chip
Note 1:  External Power-on Reset circuit is required      will remain in Brown-out Reset until VDD rises above
         only if the VDD power-up slope is too slow.      BVDD. If the Power-up Timer is enabled, it will be
         The diode D helps discharge the capacitor        invoked after VDD rises above BVDD; it then will keep
         quickly when VDD powers down.                    the chip in Reset for an additional time delay (parame-
                                                          ter #33). If VDD drops below BVDD while the Power-up
2: R < 40 k is recommended to make sure that              Timer is running, the chip will go back into a Brown-out
     the voltage drop across R does not violate           Reset and the Power-up Timer will be initialized. Once
     the device's electrical specification.               VDD rises above BVDD, the Power-up Timer will
                                                          execute the additional time delay.
3: R1 = 1 k to 10 k will limit any current flow-
     ing into MCLR from external capacitor C, in          3.6 Time-out Sequence
     the event of MCLR/VPP pin breakdown due to
     Electrostatic Discharge (ESD) or Electrical          On power-up, the time-out sequence is as follows:
     Overstress (EOS).                                    First, PWRT time-out is invoked after the POR time
                                                          delay has expired. Then, OST is activated. The total
3.2 Power-up Timer (PWRT)                                 time-out will vary based on oscillator configuration and
                                                          the status of the PWRT. For example, in RC mode with
The Power-up Timer provides a fixed nominal time-out      the PWRT disabled, there will be no time-out at all.
(parameter #33) only on power-up from the POR. The        Figures 3-3 through 3-7 depict time-out sequences on
Power-up Timer operates on an internal RC oscillator.     power-up.
The chip is kept in Reset as long as the PWRT is active.
The PWRT's time delay allows VDD to rise to an accept-    Since the time-outs occur from the POR pulse, the
able level. A configuration bit is provided to enable/    time-outs will expire if MCLR is kept low long enough.
disable the PWRT.                                         Bringing MCLR high will begin execution immediately
                                                          (Figure 3-5). This is useful for testing purposes, or to
The power-up time delay will vary from chip-to-chip due   synchronize more than one PIC18FXX20 device
to VDD, temperature and process variation. See DC         operating in parallel.
parameter #33 for details.
                                                          Table 3-2 shows the Reset conditions for some Special
                                                          Function Registers, while Table 3-3 shows the Reset
                                                          conditions for all of the registers.

DS39609B-page 30                                           2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

TABLE 3-1: TIME-OUT IN VARIOUS SITUATIONS

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

HS with PLL enabled(1)       72 ms + 1024 TOSC       1024 TOSC  72 ms(2) + 1024 TOSC        1024 TOSC + 2 ms
                                     + 2ms             + 2 ms            + 2 ms
        HS, XT, LP                                                                               1024 TOSC
             EC              72 ms + 1024 TOSC       1024 TOSC  72 ms(2) + 1024 TOSC              1.5 �s(3)
                                     72 ms              1.5 �s          72 ms(2)                      --
       External RC                   72 ms                --            72 ms(2)

Note 1: 2 ms is the nominal time required for the 4xPLL to lock.
        2: 72 ms is the nominal power-up timer delay, if implemented.
        3: 1.5 �s is the recovery time from Sleep. There is no recovery time from oscillator switch.

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-1                        R/W-1
                                                                                                          BOR
                        IPEN     --             --        RI    TO         PD               POR
                                                                                                             bit 0
                      bit 7

                        Note 1: Refer to Section 4.14 "RCON Register" for bit definitions.

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

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

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

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

operation

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

operation

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

operation

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

normal operation

MCLR Reset during Sleep          0000h 0--u 10uu u 1 0 u                       u                      u  u

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

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

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

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

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

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

2004 Microchip Technology Inc.                                                                       DS39609B-page 31
PIC18F6520/8520/6620/8620/6720/8720

TABLE 3-3: INITIALIZATION CONDITIONS FOR ALL REGISTERS

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

                                                          RESET Instruction
                                                             Stack Resets

TOSU      PIC18F6X20 PIC18F8X20       ---0 0000           ---0 0000                             ---0 uuuu(3)
                                      0000 0000           0000 0000                             uuuu uuuu(3)
TOSH      PIC18F6X20 PIC18F8X20       0000 0000           0000 0000                             uuuu uuuu(3)
TOSL      PIC18F6X20 PIC18F8X20       00-0 0000           uu-0 0000                             uu-u uuuu(3)
STKPTR    PIC18F6X20 PIC18F8X20

PCLATU    PIC18F6X20 PIC18F8X20       ---0 0000           ---0 0000                             ---u uuuu
PCLATH    PIC18F6X20 PIC18F8X20       0000 0000           0000 0000
PCL       PIC18F6X20 PIC18F8X20       0000 0000           0000 0000                             uuuu uuuu
                                                                                                   PC + 2(2)

TBLPTRU PIC18F6X20 PIC18F8X20         --00 0000           --00 0000                             --uu uuuu

TBLPTRH PIC18F6X20 PIC18F8X20         0000 0000           0000 0000                             uuuu uuuu

TBLPTRL PIC18F6X20 PIC18F8X20         0000 0000           0000 0000                             uuuu uuuu

TABLAT    PIC18F6X20 PIC18F8X20       0000 0000           0000 0000                             uuuu uuuu

PRODH     PIC18F6X20 PIC18F8X20       xxxx xxxx           uuuu uuuu                             uuuu uuuu

PRODL     PIC18F6X20 PIC18F8X20       xxxx xxxx           uuuu uuuu                             uuuu uuuu
INTCON    PIC18F6X20 PIC18F8X20       0000 000x           0000 000u                             uuuu uuuu(1)
INTCON2   PIC18F6X20 PIC18F8X20       1111 1111           1111 1111                             uuuu uuuu(1)
INTCON3   PIC18F6X20 PIC18F8X20       1100 0000           1100 0000                             uuuu uuuu(1)

INDF0     PIC18F6X20 PIC18F8X20       N/A                 N/A                                   N/A

POSTINC0 PIC18F6X20 PIC18F8X20        N/A                 N/A                                   N/A

POSTDEC0 PIC18F6X20 PIC18F8X20        N/A                 N/A                                   N/A

PREINC0 PIC18F6X20 PIC18F8X20         N/A                 N/A                                   N/A

PLUSW0 PIC18F6X20 PIC18F8X20          N/A                 N/A                                   N/A

FSR0H     PIC18F6X20 PIC18F8X20       ---- xxxx           ---- uuuu                             ---- uuuu

FSR0L     PIC18F6X20 PIC18F8X20       xxxx xxxx           uuuu uuuu                             uuuu uuuu
WREG      PIC18F6X20 PIC18F8X20       xxxx xxxx           uuuu uuuu                             uuuu uuuu
INDF1     PIC18F6X20 PIC18F8X20
                                           N/A                 N/A                                    N/A

POSTINC1 PIC18F6X20 PIC18F8X20        N/A                 N/A                                   N/A

POSTDEC1 PIC18F6X20 PIC18F8X20        N/A                 N/A                                   N/A

PREINC1 PIC18F6X20 PIC18F8X20         N/A                 N/A                                   N/A

PLUSW1 PIC18F6X20 PIC18F8X20          N/A                 N/A                                   N/A

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as `0', q = value depends on condition.
              Shaded cells indicate conditions do not apply for the designated device.

Note 1: One or more bits in the INTCONx or PIRx registers will be affected (to cause wake-up).

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

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

4: See Table 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: Bit 6 of PORTA, LATA and TRISA are not available on all devices. When unimplemented, they are read `0'.

DS39609B-page 32                                                      2004 Microchip Technology Inc.
          PIC18F6520/8520/6620/8620/6720/8720

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

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

                                                                RESET Instruction
                                                                   Stack Resets

FSR1H     PIC18F6X20 PIC18F8X20  ---- xxxx                      ---- uuuu                       ---- uuuu

FSR1L     PIC18F6X20 PIC18F8X20  xxxx xxxx                      uuuu uuuu                       uuuu uuuu

BSR       PIC18F6X20 PIC18F8X20  ---- 0000                      ---- 0000                       ---- uuuu

INDF2     PIC18F6X20 PIC18F8X20  N/A                            N/A                             N/A

POSTINC2 PIC18F6X20 PIC18F8X20   N/A                            N/A                             N/A

POSTDEC2 PIC18F6X20 PIC18F8X20   N/A                            N/A                             N/A

PREINC2 PIC18F6X20 PIC18F8X20    N/A                            N/A                             N/A

PLUSW2 PIC18F6X20 PIC18F8X20     N/A                            N/A                             N/A

FSR2H     PIC18F6X20 PIC18F8X20  ---- xxxx                      ---- uuuu                       ---- uuuu

FSR2L     PIC18F6X20 PIC18F8X20  xxxx xxxx                      uuuu uuuu                       uuuu uuuu

STATUS PIC18F6X20 PIC18F8X20     ---x xxxx                      ---u uuuu                       ---u uuuu

TMR0H     PIC18F6X20 PIC18F8X20  0000 0000                      uuuu uuuu                       uuuu uuuu

TMR0L     PIC18F6X20 PIC18F8X20  xxxx xxxx                      uuuu uuuu                       uuuu uuuu

T0CON     PIC18F6X20 PIC18F8X20  1111 1111                      1111 1111                       uuuu uuuu

OSCCON PIC18F6X20 PIC18F8X20     ---- ---0                      ---- ---0                       ---- ---u

LVDCON PIC18F6X20 PIC18F8X20     --00 0101                      --00 0101                       --uu uuuu

WDTCON    PIC18F6X20 PIC18F8X20  ---- ---0                      ---- ---0                       ---- ---u
RCON(4)   PIC18F6X20 PIC18F8X20  0--q 11qq                      0--q qquu                       u--u qquu

TMR1H     PIC18F6X20 PIC18F8X20  xxxx xxxx                      uuuu uuuu                       uuuu uuuu

TMR1L     PIC18F6X20 PIC18F8X20  xxxx xxxx                      uuuu uuuu                       uuuu uuuu

T1CON     PIC18F6X20 PIC18F8X20  0-00 0000                      u-uu uuuu                       u-uu uuuu

TMR2      PIC18F6X20 PIC18F8X20  0000 0000                      0000 0000                       uuuu uuuu

PR2       PIC18F6X20 PIC18F8X20  1111 1111                      1111 1111                       1111 1111

T2CON     PIC18F6X20 PIC18F8X20  -000 0000                      -000 0000                       -uuu uuuu

SSPBUF PIC18F6X20 PIC18F8X20     xxxx xxxx                      uuuu uuuu                       uuuu uuuu

SSPADD PIC18F6X20 PIC18F8X20     0000 0000                      0000 0000                       uuuu uuuu

SSPSTAT PIC18F6X20 PIC18F8X20    0000 0000                      0000 0000                       uuuu uuuu

SSPCON1 PIC18F6X20 PIC18F8X20    0000 0000                      0000 0000                       uuuu uuuu

SSPCON2 PIC18F6X20 PIC18F8X20    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: Bit 6 of PORTA, LATA and TRISA are not available on all devices. When unimplemented, they are read `0'.

2004 Microchip Technology Inc.                                                                 DS39609B-page 33
PIC18F6520/8520/6620/8620/6720/8720

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

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

                                                          RESET Instruction
                                                             Stack Resets

ADRESH PIC18F6X20 PIC18F8X20          xxxx xxxx           uuuu uuuu                             uuuu uuuu

ADRESL PIC18F6X20 PIC18F8X20          xxxx xxxx           uuuu uuuu                             uuuu uuuu

ADCON0 PIC18F6X20 PIC18F8X20          --00 0000           --00 0000                             --uu uuuu

ADCON1 PIC18F6X20 PIC18F8X20          --00 0000           --00 0000                             --uu uuuu

ADCON2 PIC18F6X20 PIC18F8X20          0--- -000           0--- -000                             u--- -uuu

CCPR1H PIC18F6X20 PIC18F8X20          xxxx xxxx           uuuu uuuu                             uuuu uuuu

CCPR1L PIC18F6X20 PIC18F8X20          xxxx xxxx           uuuu uuuu                             uuuu uuuu

CCP1CON PIC18F6X20 PIC18F8X20         --00 0000           --00 0000                             --uu uuuu

CCPR2H PIC18F6X20 PIC18F8X20          xxxx xxxx           uuuu uuuu                             uuuu uuuu

CCPR2L PIC18F6X20 PIC18F8X20          xxxx xxxx           uuuu uuuu                             uuuu uuuu

CCP2CON PIC18F6X20 PIC18F8X20         --00 0000           --00 0000                             --uu uuuu

CCPR3H PIC18F6X20 PIC18F8X20          xxxx xxxx           uuuu uuuu                             uuuu uuuu

CCPR3L PIC18F6X20 PIC18F8X20          xxxx xxxx           uuuu uuuu                             uuuu uuuu

CCP3CON PIC18F6X20 PIC18F8X20         0000 0000           0000 0000                             uuuu uuuu

CVRCON PIC18F6X20 PIC18F8X20          0000 0000           0000 0000                             uuuu uuuu

CMCON     PIC18F6X20 PIC18F8X20       0000 0000           0000 0000                             uuuu uuuu

TMR3H     PIC18F6X20 PIC18F8X20       xxxx xxxx           uuuu uuuu                             uuuu uuuu

TMR3L     PIC18F6X20 PIC18F8X20       xxxx xxxx           uuuu uuuu                             uuuu uuuu

T3CON     PIC18F6X20 PIC18F8X20       0000 0000           uuuu uuuu                             uuuu uuuu

PSPCON PIC18F6X20 PIC18F8X20          0000 ----           0000 ----                             uuuu ----

SPBRG1 PIC18F6X20 PIC18F8X20          0000 0000           0000 0000                             uuuu uuuu

RCREG1 PIC18F6X20 PIC18F8X20          0000 0000           0000 0000                             uuuu uuuu

TXREG1 PIC18F6X20 PIC18F8X20          0000 0000           0000 0000                             uuuu uuuu

TXSTA1    PIC18F6X20 PIC18F8X20       0000 -010           0000 -010                             uuuu -uuu

RCSTA1 PIC18F6X20 PIC18F8X20          0000 000x           0000 000x                             uuuu uuuu

EEADRH PIC18F6X20 PIC18F8X20          ---- --00           ---- --00                             ---- --uu

EEADR     PIC18F6X20 PIC18F8X20       0000 0000           0000 0000                             uuuu uuuu

EEDATA PIC18F6X20 PIC18F8X20          0000 0000           0000 0000                             uuuu uuuu

EECON2 PIC18F6X20 PIC18F8X20          ---- ----           ---- ----                             ---- ----

EECON1 PIC18F6X20 PIC18F8X20          xx-0 x000           uu-0 u000                             uu-0 u000

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as `0', q = value depends on condition.
              Shaded cells indicate conditions do not apply for the designated device.

Note 1: One or more bits in the INTCONx or PIRx registers will be affected (to cause wake-up).

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

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

4: See Table 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: Bit 6 of PORTA, LATA and TRISA are not available on all devices. When unimplemented, they are read `0'.

DS39609B-page 34                                                      2004 Microchip Technology Inc.
            PIC18F6520/8520/6620/8620/6720/8720

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

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

                                                                 RESET Instruction
                                                                    Stack Resets

IPR3        PIC18F6X20 PIC18F8X20  --11 1111                     --11 1111                      --uu uuuu

PIR3        PIC18F6X20 PIC18F8X20  --00 0000                     --00 0000                      --uu uuuu

PIE3        PIC18F6X20 PIC18F8X20  --00 0000                     --00 0000                      --uu uuuu

IPR2        PIC18F6X20 PIC18F8X20  -1-1 1111                     -1-1 1111                      -u-u uuuu
PIR2        PIC18F6X20 PIC18F8X20  -0-0 0000                     -0-0 0000                      -u-u uuuu(1)

PIE2        PIC18F6X20 PIC18F8X20  -0-0 0000                     -0-0 0000                      -u-u uuuu

IPR1        PIC18F6X20 PIC18F8X20  0111 1111                     0111 1111                      uuuu uuuu
PIR1        PIC18F6X20 PIC18F8X20  0000 0000                     0000 0000                      uuuu uuuu(1)

PIE1        PIC18F6X20 PIC18F8X20  0000 0000                     0000 0000                      uuuu uuuu

MEMCON PIC18F6X20 PIC18F8X20       0-00 --00                     0-00 --00                      u-uu --uu

TRISJ       PIC18F6X20 PIC18F8X20  1111 1111                     1111 1111                      uuuu uuuu

TRISH       PIC18F6X20 PIC18F8X20  1111 1111                     1111 1111                      uuuu uuuu

TRISG       PIC18F6X20 PIC18F8X20  ---1 1111                     ---1 1111                      ---u uuuu

TRISF       PIC18F6X20 PIC18F8X20  1111 1111                     1111 1111                      uuuu uuuu

TRISE       PIC18F6X20 PIC18F8X20  1111 1111                     1111 1111                      uuuu uuuu

TRISD       PIC18F6X20 PIC18F8X20  1111 1111                     1111 1111                      uuuu uuuu

TRISC       PIC18F6X20 PIC18F8X20  1111 1111                     1111 1111                      uuuu uuuu

TRISB       PIC18F6X20 PIC18F8X20  1111 1111                     1111 1111                      uuuu uuuu
TRISA(5,6)  PIC18F6X20 PIC18F8X20  -111 1111(5)                  -111 1111(5)                   -uuu uuuu(5)

LATJ        PIC18F6X20 PIC18F8X20  xxxx xxxx                     uuuu uuuu                      uuuu uuuu

LATH        PIC18F6X20 PIC18F8X20  xxxx xxxx                     uuuu uuuu                      uuuu uuuu

LATG        PIC18F6X20 PIC18F8X20  ---x xxxx                     ---u uuuu                      ---u uuuu

LATF        PIC18F6X20 PIC18F8X20  xxxx xxxx                     uuuu uuuu                      uuuu uuuu

LATE        PIC18F6X20 PIC18F8X20  xxxx xxxx                     uuuu uuuu                      uuuu uuuu

LATD        PIC18F6X20 PIC18F8X20  xxxx xxxx                     uuuu uuuu                      uuuu uuuu

LATC        PIC18F6X20 PIC18F8X20  xxxx xxxx                     uuuu uuuu                      uuuu uuuu

LATB        PIC18F6X20 PIC18F8X20  xxxx xxxx                     uuuu uuuu                      uuuu uuuu
LATA(5,6)   PIC18F6X20 PIC18F8X20  -xxx xxxx(5)                  -uuu uuuu(5)                   -uuu uuuu(5)

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as `0', q = value depends on condition.
              Shaded cells indicate conditions do not apply for the designated device.

Note 1: One or more bits in the INTCONx or PIRx registers will be affected (to cause wake-up).

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

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

       4: See Table 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: Bit 6 of PORTA, LATA and TRISA are not available on all devices. When unimplemented, they are read `0'.

2004 Microchip Technology Inc.                                                                 DS39609B-page 35
PIC18F6520/8520/6620/8620/6720/8720

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

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

                                                                RESET Instruction
                                                                   Stack Resets

PORTJ     PIC18F6X20 PIC18F8X20       xxxx xxxx                 uuuu uuuu                       uuuu uuuu

PORTH     PIC18F6X20 PIC18F8X20       0000 xxxx                 0000 uuuu                       uuuu uuuu

PORTG     PIC18F6X20 PIC18F8X20       ---x xxxx                 uuuu uuuu                       ---u uuuu

PORTF     PIC18F6X20 PIC18F8X20       x000 0000                 u000 0000                       u000 0000

PORTE     PIC18F6X20 PIC18F8X20       xxxx xxxx                 uuuu uuuu                       uuuu uuuu

PORTD     PIC18F6X20 PIC18F8X20       xxxx xxxx                 uuuu uuuu                       uuuu uuuu

PORTC     PIC18F6X20 PIC18F8X20       xxxx xxxx                 uuuu uuuu                       uuuu uuuu

PORTB     PIC18F6X20 PIC18F8X20       xxxx xxxx                 uuuu uuuu                       uuuu uuuu
                                      -x0x 0000(5)              -u0u 0000(5)                    -uuu uuuu(5)
PORTA(5,6) PIC18F6X20 PIC18F8X20

TMR4      PIC18F6X20 PIC18F8X20       0000 0000                 0000 0000                       uuuu uuuu

PR4       PIC18F6X20 PIC18F8X20       1111 1111                 1111 1111                       uuuu uuuu

T4CON     PIC18F6X20 PIC18F8X20       -000 0000                 -000 0000                       -uuu uuuu

CCPR4H PIC18F6X20 PIC18F8X20          xxxx xxxx                 uuuu uuuu                       uuuu uuuu

CCPR4L PIC18F6X20 PIC18F8X20          xxxx xxxx                 uuuu uuuu                       uuuu uuuu

CCP4CON PIC18F6X20 PIC18F8X20         0000 0000                 0000 0000                       uuuu uuuu

CCPR5H PIC18F6X20 PIC18F8X20          xxxx xxxx                 uuuu uuuu                       uuuu uuuu

CCPR5L PIC18F6X20 PIC18F8X20          xxxx xxxx                 uuuu uuuu                       uuuu uuuu

CCP5CON PIC18F6X20 PIC18F8X20         0000 0000                 0000 0000                       uuuu uuuu

SPBRG2 PIC18F6X20 PIC18F8X20          0000 0000                 0000 0000                       uuuu uuuu

RCREG2 PIC18F6X20 PIC18F8X20          0000 0000                 0000 0000                       uuuu uuuu

TXREG2 PIC18F6X20 PIC18F8X20          0000 0000                 0000 0000                       uuuu uuuu

TXSTA2    PIC18F6X20 PIC18F8X20       0000 -010                 0000 -010                       uuuu -uuu

RCSTA2 PIC18F6X20 PIC18F8X20          0000 000x                 0000 000x                       uuuu uuuu

Legend: u = unchanged, x = unknown, - = unimplemented bit, read as `0', q = value depends on condition.
              Shaded cells indicate conditions do not apply for the designated device.

Note 1: One or more bits in the INTCONx or PIRx registers will be affected (to cause wake-up).

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

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

      4: See Table 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: Bit 6 of PORTA, LATA and TRISA are not available on all devices. When unimplemented, they are read `0'.

DS39609B-page 36                                                            2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

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

                    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

2004 Microchip Technology Inc.                            DS39609B-page 37
PIC18F6520/8520/6620/8620/6720/8720

FIGURE 3-6:             SLOW RISE TIME (MCLR TIED TO VDD VIA 1 k RESISTOR)

                                        5V

                        VDD  0V

                  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 VIA 1 k RESISTOR)

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

     PLL TIME-OUT

INTERNAL RESET

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

DS39609B-page 38                                                                2004 Microchip Technology Inc.
PIC18F6520/8520/6620/8620/6720/8720

4.0 MEMORY ORGANIZATION                                  4.1.1  PIC18F8X20 PROGRAM MEMORY
                                                                MODES
There are three memory blocks in PIC18FXX20
devices. They are:                                       PIC18F8X20 devices differ significantly from their
                                                         PIC18 predecessors in their utilization of program
� Program Memory                                         memory. In addition to available on-chip Flash program
� Data RAM                                               memory, these controllers can also address up to
� Data EEPROM                                            2 Mbytes of external program memory through the
                                                         External Memory Interface. There are four distinct
Data and program memory use separate busses,             operating modes available to the controllers:
which allows for concurrent access of these blocks.
Additional detailed information for Flash program        � Microprocessor (MP)
memory and data EEPROM is provided in Section 5.0
"Flash Program Memory" and Section 7.0 "Data             � Microprocessor with Boot Block (MPBB)
EEPROM Memory", respectively.                            � Extended Microcontroller (EMC)
                                                         � Microcontroller (MC)
In addition to on-chip Flash, the PIC18F8X20 devices
are also capable of accessing external program mem-      The Program Memory mode is determined by setting
ory through an external memory bus. Depending on the     the two Least Significant bits of the CONFIG3L config-
selected operating mode (discussed in Section 4.1.1      uration byte, as shown in Register 4-1. (See also
"PIC18F8X20 Program Memory Modes"), the con-             Section 23.1 "Configuration Bits" for additional
trollers may access either internal or external program  details on the device configuration bits.)
memory exclusively, or both internal and external mem-
ory in selected blocks. Additional information on the    The Program Memory modes operate as follows:
External Memory Interface is provided in Section 6.0
"External Memory Interface".                             � The Microprocessor Mode permits access only
                                                            to external program memory; the contents of the
4.1 Program Memory Organization                             on-chip Flash memory are ignored. The 21-bit
                                                            program counter permits access to a 2-Mbyte
A 21-bit program counter is capable of addressing the       linear program memory space.
2-Mbyte program memory space. Accessing a location
between the physically implemented memory and the        � The Microprocessor with Boot Block Mode
2-Mbyte address will cause a read of all `0's (a NOP        accesses on-chip Flash memory from addresses
instruction).                                               000000h to 0007FFh for PIC18F8520 devices
                                                            and from 000000h to 0001FFh for PIC18F8620
Devices in the PIC18FXX20 family can be divided into        and PIC18F8720 devices. Above this, external
three groups, based on program memory size. The             program memory is accessed all the way up to
PIC18FX520 devices (PIC18F6520 and PIC18F8520)              the 2-Mbyte limit. Program execution automati-
have 32 Kbytes of on-chip Flash memory, equivalent to       cally switches between the two memories, as
16,384 single-word instructions. The PIC18FX620             required.
devices (PIC18F6620 and PIC18F8620) have
64 Kbytes of on-chip Flash memory, equivalent to         � The Microcontroller Mode accesses only on-
32,768 single-word instructions. Finally, the               chip Flash memory. Attempts to read above the
PIC18FX720 devices (PIC18F6720 and PIC18F8720)              physical limit of the on-chip Flash (7FFFh for the
have 128 Kbytes of on-chip Flash memory, equivalent         PIC18F8520, 0FFFFh for the PIC18F8620,
to 65,536 single-word instructions.                         1FFFFh for the PIC18F8720) causes a read of all
                                                            `0's (a NOP instruction). The Microcontroller mode
For all devices, the Reset vector address is at 0000h       is also the only operating mode available to
and the interrupt vector addresses are at 0008h and         PIC18F6X20 devices.
0018h.
                                                         � The Extended Microcontroller Mode allows
The program memory maps for all of the PIC18FXX20           access to both internal and external program
devices are compared in Figure 4-1.                         memories as a single block. The device can
                                                            access its entire on-chip Flash memory; above
                                                            this, the device accesses external program
                                                            memory up to the 2-Mbyte program space limit.
                                                            As with Boot Block mode, execution automatically
                                                            switches between the two memories, as required.

                                                         In all modes, the microcontroller has complete access
                                                         to data RAM and EEPROM.

                                                         Figure 4-2 compares the memory maps of the different
                                                         Program Memory modes. The differences between on-
                                                         chip and external memory access limitations are more
                                                         fully explained in Table 4-1.

2004 Microchip Technology Inc.                                                 DS39609B-page 39
PIC18F6520/8520/6620/8620/6720/8720

FIGURE 4-1:       INTERNAL PROGRAM MEMORY MAP AND STACK FOR PIC18FXX20 DEVICES

                                            PC<20:0>                              21

                  CALL,RCALL,RETURN
                  RETFIE,RETLW

                                          Stack Level 1

                                                                      �
                                                                      �
                                                                      �

                                         Stack Level 31

                  000000h                                                000000h                      000000h Reset Vector
                  000008h                                                000008h
                                                                                                      000008h High Priority
                                                                                                                     Interrupt Vector

                         000018h                           000018h                                    000018h        Low Priority

On-Chip Flash                     On-Chip Flash                                                                      Interrupt Vector
Program Memory                    Program Memory

                         007FFFh
                         008000h

                                                                         00FFFFh    On-Chip Flash                                      User Memory Space
                                                                         010000h    Program Memory

Read `0'                          Read `0'                                                                  01FFFFh
                                                                                                            020000h

                                                                                         Read `0'

                  1FFFFFh                                                1FFFFFh                      1FFFFFh
                  200000h                                                200000h                      200000h

PIC18FX520                        PIC18FX620                                             PIC18FX720
(32 Kbyte)                        (64 Kbyte)                                            (128 Kbyte)

Note: Size of memory regions not to scale.

TABLE 4-1: MEMORY ACCESS FOR PIC18F8X20 PROGRAM MEMORY MODES

                                  Internal Program Memory                                             External Program Memory

Operating Mode    Execution       Table Read                                             Execution    Table Read
                     From             From                                                  From          From
                                                                         Table Write To                              Table Write To

Microprocessor    No Access       No Access                              No Access           Yes          Yes            Yes
                      Yes             Yes                                    Yes             Yes          Yes            Yes
Microprocessor
with Boot Block       Yes             Yes                                    Yes         No Access    No Access      No Access
                      Yes             Yes                                    Yes             Yes          Yes            Yes
Microcontroller

Extended
Microcontroller

DS39609B-page 40                                                                                       2004 Microchip Technology Inc.
                                     PIC18F6520/8520/6620/8620/6720/8720

REGISTER 4-1: CONFIG3L CONFIGURATION BYTE

                                                R/P-1        U-0                     U-0      U-0         U-0       U-0         R/P-1            R/P-1

                                                WAIT         --                      --       --          --        --          PM1              PM0

                                                bit 7                                                                                            bit 0

                         bit 7                  WAIT: External Bus Data Wait Enable bit
                                                1 = Wait selections unavailable, device will not wait
                         bit 6-2                0 = Wait programmed by WAIT1 and WAIT0 bits of MEMCOM register (MEMCOM<5:4>)
                         bit 1-0
                                                Unimplemented: Read as `0'

                                                PM1:PM0: Processor Data Memory Mode Select bits
                                                11 = Microcontroller mode
                                                10 = Microprocessor mode
                                                01 = Microcontroller with Boot Block mode
                                                00 = Extended Microcontroller mode

                                                Legend:                  P = Programmable bit U = Unimplemented bit, read as `0'
                                                R = Readable bit
                                                - n = Value after erase  `1' = Bit is set                 `0' = Bit is cleared x = Bit is unknown

FIGURE 4-2:                                     MEMORY MAPS FOR PIC18F8X20 PROGRAM MEMORY MODES

                         Microprocessor                      Microprocessor                        Microcontroller                  Extended
                            Mode (MP)                        with Boot Block                          Mode (MC)                 Microcontroller

                                                              Mode (MPBB)                                                         Mode (EMC)

                         000000h                On-Chip      000000h                          000000h               000000h

                                                Program      Boot                    On-Chip              On-Chip   Boundary              On-Chip
                                                             Boot+1                  Program              Program   Boundary+1            Program
                                                Memory                               Memory               Memory                          Memory
                                                   (No
                                                                                                           Reads
                                                access)                                                      `0's

Program Space Execution                                                                       Boundary
                                                                                              Boundary+1

                                  External                            External                                                  External
                                  Program                             Program                                                   Program
                                  Memory                              Memory                                                    Memory

                         1FFFFFh                             1FFFFFh                          1FFFFFh               1FFFFFh

                                      External  On-Chip                    External  On-Chip              On-Chip               External On-Chip
                                      Memory    Flash                      Memory     Flash               Flash                 Memory Flash

Boundary Values for Microprocessor with Boot Block, Microcontroller and Extended Microcontroller modes(1)

                         Device                        Boot              Boot+1               Boundary              Boundary+1       Available
                                                                                                                                Memory Mode(s)

                         PIC18F6520             0007FFh                  000800h              007FFFh               008000h            MC

                         PIC18F6620             0001FFh                  000200h              00FFFFh               010000h            MC

                         PIC18F6720             0001FFh                  000200h              01FFFFh               020000h            MC

                         PIC18F8520             0007FFh                  000800h              007FFFh               008000h     MP, MPBB, MC, EMC

                         PIC18F8620             0001FFh                  000200h              00FFFFh               010000h     MP, MPBB, MC, EMC

                         PIC18F8720             0001FFh                  000200h              01FFFFh               020000h     MP, MPBB, MC, EMC

Note 1: PIC18F6X20 devices are included here for completeness, to show the boundaries of their Boot Blocks and program memory spaces.

2004 Microchip Technology Inc.                                                                                                 DS39609B-page 41
PIC18F6520/8520/6620/8620/6720/8720

4.2 Return Address Stack                                    4.2.2  RETURN STACK POINTER
                                                                   (STKPTR)
The return address stack allows any combination of up
to 31 program calls and interrupts to occur. The PC         The STKPTR register contains the stack pointer value,
(Program Counter) is pushed onto the stack when a           the STKFUL (Stack Full) status bit and the STKUNF
CALL or RCALL instruction is executed, or an interrupt      (Stack Underflow) status bits. Register 4-2 shows the
is Acknowledged. The PC value is pulled off the stack       STKPTR register. The value of the stack pointer can be
on a RETURN, RETLW or a RETFIE instruction. PCLATU          0 through 31. The stack pointer increments when val-
and PCLATH are not affected by any of the RETURN or         ues are pushed onto the stack and decrements when
CALL instructions.                                          values are popped off the stack. At Reset, the stack
                                                            pointer value will be `0'. The user may read and write
The stack operates as a 31-word by 21-bit RAM and a         the stack pointer value. This feature can be used by a
5-bit stack pointer, with the stack pointer initialized to  Real-Time Operating System for return stack
00000b after all Resets. There is no RAM associated         maintenance.
with stack pointer 00000b. This is only a Reset value.
During a CALL type instruction, causing a push onto the     After the PC is pushed onto the stack 31 times (without
stack, the stack pointer is first incremented and the       popping any values off the stack), the STKFUL bit is
RAM location pointed to by the stack pointer is written     set. The STKFUL bit can only be cleared in software or
with the contents of the PC. During a RETURN type           by a POR.
instruction, causing a pop from the stack, the contents
of the RAM location pointed to by the STKPTR are            The action that takes place when the stack becomes
transferred to the PC and then the stack pointer is         full, depends on the state of the STVREN (Stack Over-
decremented.                                                flow Reset Enable) configuration bit. Refer to
                                                            Section 24.0 "Instruction Set Summary" for a
The stack space is not part of either program or data       description of the device configuration bits. If STVREN
space. The stack pointer is readable and writable and       is set (default), the 31st push will push the (PC + 2)
the address on the top of the stack is readable and writ-   value onto the stack, set the STKFUL bit and reset the
able through SFR registers. Data can also be pushed         device. The STKFUL bit will remain set and the stack
to, or popped from the stack using the top-of-stack         pointer will be set to `0'.
SFRs. 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                                   Any additional pushes will not overwrite the 31st push
                                                            and STKPTR will remain at 31.
The top of the stack is readable and writable. Three
register locations, TOSU, TOSH and TOSL, hold the           When the stack has been popped enough times to
contents of the stack location pointed to by the            unload the stack, the next pop will return a value of zero
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 must disable the global interrupt enable bits             appropriate actions can be taken.
during this time to prevent inadvertent stack
operations.

DS39609B-page 42                                                    2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

REGISTER 4-2: STKPTR REGISTER

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

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

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

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

FIGURE 4-3:  RETURN ADDRESS STACK AND ASSOCIATED REGISTERS

                                                           Return Address Stack

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

                                                                             STKPTR<4:0>

                                                                                 00010

                                                                            00011
                                        Top-of-Stack 0x001A34 00010

                                                           0x000D58 00001

                                                                            00000

4.2.3 PUSH AND POP INSTRUCTIONS                            4.2.4 STACK FULL/UNDERFLOW RESETS

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

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

2004 Microchip Technology Inc.                                                            DS39609B-page 43
PIC18F6520/8520/6620/8620/6720/8720

4.3 Fast Register Stack                                        4.4 PCL, PCLATH and PCLATU

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

If high priority interrupts are not disabled during low        The CALL, RCALL, GOTO and program branch
priority interrupts, users must save the key registers in      instructions write to the program counter directly. For
software during a low priority interrupt.                      these instructions, the contents of PCLATH and
                                                               PCLATU are not transferred to the program counter.
If no interrupts are used, the fast register stack can be
used to restore the Status, WREG and BSR registers at          The contents of PCLATH and PCLATU will be trans-
the end of a subroutine call. To use the fast register         ferred to the program counter by an operation that
stack for a subroutine call, a FAST CALL instruction           writes PCL. Similarly, the upper two bytes of the
must be executed.                                              program counter will be transferred to PCLATH and
                                                               PCLATU by an operation that reads PCL. This is useful
Example 4-1 shows a source code example that uses              for computed offsets to the PC (see Section 4.8.1
the fast register stack.                                       "Computed GOTO").

EXAMPLE 4-1:        FAST REGISTER STACK                        4.5 Clocking Scheme/Instruction
                    CODE EXAMPLE                                        Cycle
   CALL SUB1, FAST
                       ;STATUS, WREG, BSR                      The clock input (from OSC1) is internally divided by
                �      ;SAVED IN FAST REGISTER                 four to generate four non-overlapping quadrature
                �      ;STACK                                  clocks, namely Q1, Q2, Q3 and Q4. Internally, the
                                                               program counter (PC) is incremented every Q1, the
SUB1 �              ;RESTORE VALUES SAVED                      instruction is fetched from the program memory and
             �      ;IN FAST REGISTER STACK                    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
      RETURN FAST                                              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
             Q2                       PC                       PC+2                       PC+4      Clock
             Q3           Execute INST (PC-2)          Execute INST (PC)       Execute INST (PC+2)
             Q4                                        Fetch INST (PC+2)
             PC              Fetch INST (PC)                                     Fetch INST (PC+4)

OSC2/CLKO
  (RC mode)

DS39609B-page 44                                                           2004 Microchip Technology Inc.
              PIC18F6520/8520/6620/8620/6720/8720

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

EXAMPLE 4-2: INSTRUCTION PIPELINE FLOW

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

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

5. Instruction @ address SUB_1

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

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

The CALL and GOTO instructions have an absolute
program memory address embedded into the
instruction. Since instructions are always stored on

FIGURE 4-5:     INSTRUCTIONS IN PROGRAM MEMORY

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

2004 Microchip Technology Inc.                                                             DS39609B-page 45
PIC18F6520/8520/6620/8620/6720/8720

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

EXAMPLE 4-3:      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
CASE 2:                                                       ; 2nd operand holds address of REG2

                             REG3                             ; continue code

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

4.8 Look-up Tables                                            4.8.2 TABLE READS/TABLE WRITES

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

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

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

DS39609B-page 46                                                                     2004 Microchip Technology Inc.
PIC18F6520/8520/6620/8620/6720/8720

4.9 Data Memory Organization                                4.9.1  GENERAL PURPOSE
                                                                   REGISTER FILE
The data memory is implemented as static RAM. Each
register in the data memory has a 12-bit address,           The register file can be accessed either directly or indi-
allowing up to 4096 bytes of data memory. The data          rectly. Indirect addressing operates using a File Select
memory map is in turn divided into 16 banks of              Register and corresponding Indirect File Operand. The
256 bytes each. The lower 4 bits of the Bank Select         operation of indirect addressing is shown in
Register (BSR<3:0>) select which bank will be               Section 4.12 "Indirect Addressing, INDF and FSR
accessed. The upper 4 bits of the BSR are not               Registers".
implemented.
                                                            Enhanced MCU devices may have banked memory in
The data memory space contains both Special Func-           the GPR area. GPRs are not initialized by a Power-on
tion Registers (SFR) and General Purpose Registers          Reset and are unchanged on all other Resets.
(GPR). The SFRs are used for control and status of the
controller and peripheral functions, while GPRs are         Data RAM is available for use as General Purpose
used for data storage and scratch pad operations in the     Registers by all instructions. The top section of Bank 15
user's application. The SFRs start at the last location of  (F60h to FFFh) contains SFRs. All other banks of data
Bank 15 (0FFFh) and extend downwards. Any remain-           memory contain GPR registers, starting with Bank 0.
ing space beyond the SFRs in the Bank may be imple-
mented as GPRs. GPRs start at the first location of         4.9.2 SPECIAL FUNCTION REGISTERS
Bank 0 and grow upwards. Any read of an
unimplemented location will read as `0's.                   The Special Function Registers (SFRs) are registers
                                                            used by the CPU and peripheral modules for controlling
PIC18FX520 devices have 2048 bytes of data RAM,             the desired operation of the device. These registers are
extending from Bank 0 to Bank 7 (000h through 7FFh).        implemented as static RAM. A list of these registers is
PIC18FX620 and PIC18FX720 devices have                      given in Table 4-2 and Table 4-3.
3840 bytes of data RAM, extending from Bank 0 to
Bank 14 (000h through EFFh). The organization of the        The SFRs can be classified into two sets: those asso-
data memory space for these devices is shown in             ciated with the "core" function and those related to the
Figure 4-6 and Figure 4-7.                                  peripheral functions. Those registers related to the
                                                            "core" are described in this section, while those related
The entire data memory may be accessed directly or          to the operation of the peripheral features are
indirectly. Direct addressing may require the use of the    described in the section of that peripheral feature. The
BSR register. Indirect addressing requires the use of a     SFRs are typically distributed among the peripherals
File Select Register (FSRn) and a corresponding Indi-       whose functions they control.
rect File Operand (INDFn). Each FSR holds a 12-bit
address value that can be used to access any location       The unused SFR locations are unimplemented and
in the data memory map without banking.                     read as `0's. The addresses for the SFRs are listed in
                                                            Table 4-2.
The instruction set and architecture allow operations
across all banks. This may be accomplished by indirect
addressing, or by the use of the MOVFF instruction. The
MOVFF instruction is a two-word/two-cycle instruction
that moves a value from one register to another.

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

2004 Microchip Technology Inc.                                    DS39609B-page 47
PIC18F6520/8520/6620/8620/6720/8720

FIGURE 4-6:            DATA MEMORY MAP FOR PIC18FX520 DEVICES

BSR<3:0>                                Data Memory Map

    = 0000                         00h  Access RAM       000h
                       Bank 0               GPRs         05Fh
    = 0001                                  GPRs         060h
                                   FFh      GPRs         0FFh
    = 0010                         00h                   100h
                       Bank 1                GPRs
    = 0011                         FFh                   1FFh
                                   00h                   200h
                    �  Bank 2
                    �                                    2FFh
                    �              FFh                   300h
                                   00h
    = 0110
    = 0111             Bank 3
                          to
    = 1000
                       Bank 6

                                                               Access Bank

                                   FFh  GPRs             6FFh                            00h
                                   00h                   700h  Access RAM Low 5Fh
                       Bank 7                            7FFh  Access RAM High 60h
                                                         800h
                                   FFh                         (SFRs)

                                                                            FFh

             �         Bank 8           Unused,                When a = 0,
                                                               the BSR is ignored and the
             �         to               Read as `0'            Access Bank is used.
                                                               The first 96 bytes are General
             �         Bank 14                                 Purpose RAM (from Bank 0).
                                                               The second 160 bytes are
= 1110                                                         Special Function Registers
                                                               (from Bank 15).
                                                         EFFh
= 1111                             00h  Unused           F00h
                       Bank 15           SFRs            F5Fh
                                                         F60h
                                   FFh
                                                         FFFh

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

DS39609B-page 48                                                2004 Microchip Technology Inc.
                PIC18F6520/8520/6620/8620/6720/8720

FIGURE 4-7:     DATA MEMORY MAP FOR PIC18FX620 AND PIC18FX720 DEVICES

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

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

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

                Bank 4             GPRs                   Access Bank

                                                                                    00h
                                                          Access RAM Low 5Fh
                                                          Access RAM High 60h

                                                          (SFRs)       FFh

             �  Bank 5

             �  to

             �  Bank 13            GPRs

= 1101                                                    When a = 0,
                                                          the BSR is ignored and the
= 1110                      00h     GPRs            DFFh  Access Bank is used.
= 1111          Bank 14                             E00h  The first 96 bytes are General
                                   Unused                 Purpose RAM (from Bank 0).
                            FFh     SFRs            EFFh  The second 160 bytes are
                                                    F00h  Special Function Registers
                            00h                     F5Fh  (from Bank 15).
                Bank 15                             F60h
                                                    FFFh
                            FFh

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

2004 Microchip Technology Inc.                           DS39609B-page 49
PIC18F6520/8520/6620/8620/6720/8720

TABLE 4-2: SPECIAL FUNCTION REGISTER MAP

Address           Name  Address  Name     Address         Name    Address                             Name
                                                 FBFh   CCPR1H
FFFh TOSU               FDFh INDF2(3)            FBEh   CCPR1L                                  F9Fh IPR1
                                                FBDh   CCP1CON
FFEh TOSH               FDEh POSTINC2(3)        FBCh    CCPR2H                                  F9Eh PIR1
                                                 FBBh   CCPR2L
FFDh TOSL               FDDh POSTDEC2(3)         FBAh  CCP2CON                                  F9Dh PIE1
                                                 FB9h   CCPR3H
FFCh STKPTR             FDCh PREINC2(3)          FB8h   CCPR3L                                  F9Ch MEMCON(2)
                                                 FB7h  CCP3CON
FFBh PCLATU             FDBh PLUSW2(3)           FB6h                                           F9Bh  --(1)
                                                 FB5h      --(1)
FFAh PCLATH             FDAh FSR2H               FB4h  CVRCON                                   F9Ah TRISJ
                                                 FB3h   CMCON
FF9h              PCL   FD9h FSR2L               FB2h    TMR3H                                  F99h TRISH
                                                 FB1h
FF8h TBLPTRU            FD8h STATUS              FB0h    TMR3L                                  F98h TRISG
                                                 FAFh    T3CON
FF7h TBLPTRH            FD7h TMR0H               FAEh   PSPCON                                  F97h TRISF
                                                 FADh   SPBRG1
FF6h TBLPTRL            FD6h TMR0L               FACh   RCREG1                                  F96h TRISE
                                                 FABh   TXREG1
FF5h TABLAT             FD5h     T0CON           FAAh   TXSTA1                                  F95h TRISD
                        FD4h       --(1)         FA9h   RCSTA1
FF4h PRODH                                       FA8h   EEADRH                                  F94h TRISC
                                                 FA7h    EEADR
FF3h PRODL              FD3h OSCCON              FA6h   EEDATA                                  F93h TRISB
                                                 FA5h   EECON2
FF2h INTCON             FD2h LVDCON              FA4h   EECON1                                  F92h TRISA
                                                 FA3h
FF1h INTCON2            FD1h WDTCON              FA2h      IPR3                                 F91h LATJ
                                                 FA1h      PIR3
FF0h INTCON3            FD0h RCON                FA0h      PIE3                                 F90h LATH
FEFh INDF0(3)                                              IPR2
FEEh POSTINC0(3)        FCFh TMR1H                         PIR2                                 F8Fh LATG
FEDh POSTDEC0(3)                                           PIE2
FECh PREINC0(3)         FCEh TMR1L                                                              F8Eh LATF
FEBh PLUSW0(3)
                        FCDh T1CON                                                              F8Dh LATE

                        FCCh TMR2                                                               F8Ch LATD

                        FCBh     PR2                                                            F8Bh LATC

FEAh FSR0H              FCAh T2CON                                                              F8Ah LATB

FE9h FSR0L              FC9h SSPBUF                                                             F89h LATA

FE8h WREG               FC8h SSPADD                                                             F88h PORTJ
FE7h INDF1(3)
FE6h POSTINC1(3)        FC7h SSPSTAT                                                            F87h PORTH
FE5h POSTDEC1(3)
FE4h PREINC1(3)         FC6h SSPCON1                                                            F86h PORTG
FE3h PLUSW1(3)
                        FC5h SSPCON2                                                            F85h PORTF

                        FC4h ADRESH                                                             F84h PORTE

                        FC3h ADRESL                                                             F83h PORTD

FE2h FSR1H              FC2h ADCON0                                                             F82h PORTC

FE1h FSR1L              FC1h ADCON1                                                             F81h PORTB

FE0h              BSR   FC0h ADCON2                                                             F80h PORTA

Note 1: Unimplemented registers are read as `0'.
        2: This register is unused on PIC18F6X20 devices. Always maintain this register clear.
        3: This is not a physical register.

DS39609B-page 50                                                   2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

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

Address         Name             Address      Name    Address      Name    Address       Name
      F7Fh       --(1)                  F5Fh   --(1)         F3Fh   --(1)         F1Fh    --(1)
      F7Eh       --(1)                  F5Eh   --(1)         F3Eh   --(1)         F1Eh    --(1)
      F7Dh       --(1)                  F5Dh   --(1)         F3Dh   --(1)         F1Dh    --(1)
      F7Ch       --(1)                  F5Ch   --(1)         F3Ch   --(1)         F1Ch    --(1)
      F7Bh       --(1)                  F5Bh   --(1)         F3Bh   --(1)         F1Bh    --(1)
      F7Ah       --(1)                  F5Ah   --(1)         F3Ah   --(1)         F1Ah    --(1)
       F79h      --(1)                  F59h   --(1)         F39h   --(1)          F19h   --(1)
       F78h                             F58h   --(1)         F38h   --(1)          F18h   --(1)
       F77h     TMR4                    F57h   --(1)         F37h   --(1)          F17h   --(1)
       F76h                             F56h   --(1)         F36h   --(1)          F16h   --(1)
       F75h      PR4                    F55h   --(1)         F35h   --(1)          F15h   --(1)
       F74h                             F54h   --(1)         F34h   --(1)          F14h   --(1)
       F73h    T4CON                    F53h   --(1)         F33h   --(1)          F13h   --(1)
       F72h                             F52h   --(1)         F32h   --(1)          F12h   --(1)
       F71h   CCPR4H                    F51h   --(1)         F31h   --(1)          F11h   --(1)
       F70h                             F50h   --(1)         F30h   --(1)          F10h   --(1)
      F6Fh    CCPR4L                    F4Fh   --(1)         F2Fh   --(1)         F0Fh    --(1)
      F6Eh                              F4Eh   --(1)         F2Eh   --(1)         F0Eh    --(1)
      F6Dh   CCP4CON                    F4Dh   --(1)         F2Dh   --(1)         F0Dh    --(1)
      F6Ch                              F4Ch   --(1)         F2Ch   --(1)         F0Ch    --(1)
      F6Bh    CCPR5H                    F4Bh   --(1)         F2Bh   --(1)         F0Bh    --(1)
      F6Ah                              F4Ah   --(1)         F2Ah   --(1)         F0Ah    --(1)
       F69h   CCPR5L                    F49h   --(1)         F29h   --(1)          F09h   --(1)
       F68h                             F48h   --(1)         F28h   --(1)          F08h   --(1)
       F67h  CCP5CON                    F47h   --(1)         F27h   --(1)          F07h   --(1)
       F66h                             F46h   --(1)         F26h   --(1)          F06h   --(1)
       F65h   SPBRG2                    F45h   --(1)         F25h   --(1)          F05h   --(1)
       F64h                             F44h   --(1)         F24h   --(1)          F04h   --(1)
       F63h   RCREG2                    F43h   --(1)         F23h   --(1)          F03h   --(1)
       F62h                             F42h   --(1)         F22h   --(1)          F02h   --(1)
       F61h   TXREG2                    F41h   --(1)         F21h   --(1)          F01h   --(1)
       F60h                             F40h   --(1)         F20h   --(1)          F00h   --(1)
              TXSTA2

              RCSTA2
                 --(1)
                 --(1)
                 --(1)
                 --(1)
                 --(1)
                 --(1)
                 --(1)
                 --(1)
                 --(1)
                 --(1)
                 --(1)

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

2004 Microchip Technology Inc.                                            DS39609B-page 51
PIC18F6520/8520/6620/8620/6720/8720

TABLE 4-3: REGISTER FILE SUMMARY

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

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

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

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

STKPTR      STKFUL STKUNF             --        Return Stack Pointer                                                   00-0 0000 32, 43

PCLATU      --                --   bit 21 Holding Register for PC<20:16>                                               --10 0000 32, 44

PCLATH Holding Register for PC<15:8>                                                                                   0000 0000 32, 44

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

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

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

TABLAT Program Memory Table Latch                                                                                      0000 0000 32, 64

PRODH Product Register High Byte                                                                                       xxxx xxxx 32, 85

PRODL Product Register Low Byte                                                                                        xxxx xxxx 32, 85

INTCON      GIE/GIEH PEIE/GIEL TMR0IE           INT0IE       RBIE     TMR0IF            INT0IF                  RBIF 0000 0000 32, 89

INTCON2     RBPU INTEDG0 INTEDG1 INTEDG2 INTEDG3 TMR0IP                                 INT3IP                  RBIP 1111 1111 32, 90

INTCON3     INT2IP  INT1IP         INT3IE       INT2IE       INT1IE   INT3IF            INT2IF  INT1IF 1100 0000 32, 91

INDF0       Uses contents of FSR0 to address data memory � value of FSR0 not changed (not a physical register)         n/a  57

POSTINC0 Uses contents of FSR0 to address data memory � value of FSR0 post-incremented                                 n/a  57
                  (not a physical register)

POSTDEC0 Uses contents of FSR0 to address data memory � value of FSR0 post-decremented                                 n/a  57
                  (not a physical register)

PREINC0 Uses contents of FSR0 to address data memory � value of FSR0 pre-incremented (not a physical register)         n/a  57

PLUSW0 Uses contents of FSR0 to address data memory � value of FSR0 pre-incremented                                    n/a  57
                  (not a physical register) � value of FSR0 offset by value in WREG

FSR0H       --                --      --        --           Indirect Data Memory Address Pointer 0 High Byte ---- 0000 32, 57

FSR0L       Indirect Data Memory Address Pointer 0 Low Byte                                                            xxxx xxxx 32, 57

WREG        Working Register                                                                                           xxxx xxxx 32

INDF1       Uses contents of FSR1 to address data memory � value of FSR1 not changed (not a physical register)         n/a  57

POSTINC1 Uses contents of FSR1 to address data memory � value of FSR1 post-incremented                                 n/a  57
                  (not a physical register)

POSTDEC1 Uses contents of FSR1 to address data memory � value of FSR1 post-decremented                                 n/a  57
                  (not a physical register)

PREINC1 Uses contents of FSR1 to address data memory � value of FSR1 pre-incremented                                   n/a  57
                  (not a physical register)

PLUSW1 Uses contents of FSR1 to address data memory � value of FSR1 pre-incremented                                    n/a  57
                  (not a physical register) � value of FSR1 offset by value in WREG

FSR1H       --                --      --        --           Indirect Data Memory Address Pointer 1 High Byte ---- 0000 33, 57

FSR1L       Indirect Data Memory Address Pointer 1 Low Byte                                                            xxxx xxxx 33, 57

BSR         --                --      --        --           Bank Select Register                                      ---- 0000 33, 56

INDF2       Uses contents of FSR2 to address data memory � value of FSR2 not changed (not a physical register)         n/a  57

POSTINC2 Uses contents of FSR2 to address data memory � value of FSR2 post-incremented                                 n/a  57
                  (not a physical register)

POSTDEC2 Uses contents of FSR2 to address data memory � value of FSR2 post-decremented                                 n/a  57
                  (not a physical register)

Legend:     x = unknown, u = unchanged, � = unimplemented, q = value depends on condition
Note 1:     RA6 and associated bits are configured as port pins in RCIO and ECIO Oscillator modes only and read `0' in all other oscillator
            modes.
        2:  Bit 21 of the TBLPTRU allows access to the device configuration bits.
        3:  These registers are unused on PIC18F6X20 devices; always maintain these clear.

DS39609B-page 52                                                                                 2004 Microchip Technology Inc.
            PIC18F6520/8520/6620/8620/6720/8720

TABLE 4-3: REGISTER FILE SUMMARY (CONTINUED)

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

PREINC2 Uses contents of FSR2 to address data memory � value of FSR2 pre-incremented                          n/a  57
                  (not a physical register)

PLUSW2 Uses contents of FSR2 to address data memory � value of FSR2 pre-incremented                           n/a  57
                  (not a physical register) � value of FSR2 offset by value in WREG

FSR2H       --               --       --         --          Indirect Data Memory Address Pointer 2 High Byte ---- 0000 33, 57

FSR2L       Indirect Data Memory Address Pointer 2 Low Byte                                                   xxxx xxxx 33, 57

STATUS      --               --       --         N           OV     Z                 DC               C      ---x xxxx 33, 59

TMR0H Timer0 Register High Byte                                                                               0000 0000 33, 133

TMR0L       Timer0 Register Low Byte                                                                          xxxx xxxx 33, 133

T0CON       TMR0ON T08BIT             T0CS   T0SE            PSA    T0PS2             T0PS1            T0PS0 1111 1111 33, 131

OSCCON      --               --       --         --          --     --                --               SCS ---- ---0 25, 33

LVDCON      --               --       IRVST  LVDEN           LVDL3  LVDL2             LVDL1            LVDL0 --00 0101 33, 235

WDTCON      --               --       --         --          --     --                --               SWDTE ---- ---0 33, 250

RCON        IPEN             --       --         RI          TO     PD                POR              BOR 0--1 11qq 33, 60,

                                                                                                                   101

TMR1H Timer1 Register High Byte                                                                               xxxx xxxx 33, 135

TMR1L       Timer1 Register Low Byte                                                                          xxxx xxxx 33, 135

T1CON       RD16             --       T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 0-00 0000 33, 135

TMR2        Timer2 Register                                                                                   0000 0000 33, 141

PR2         Timer2 Period Register                                                                            1111 1111 33, 142

T2CON       --    T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 33, 141

SSPBUF      SSP Receive Buffer/Transmit Register                                                              xxxx xxxx 33, 157
SSPADD      SSP Address Register in I2C Slave mode. SSP Baud Rate Reload Register in I2C Master mode.         0000 0000 33, 166

SSPSTAT     SMP              CKE      D/A        P           S      R/W               UA               BF 0000 0000 33, 158

SSPCON1 WCOL      SSPOV               SSPEN  CKP             SSPM3  SSPM2             SSPM1 SSPM0 0000 0000 33, 168

SSPCON2 GCEN ACKSTAT ACKDT                   ACKEN           RCEN   PEN               RSEN             SEN 0000 0000 33, 169

ADRESH A/D Result Register High Byte                                                                          xxxx xxxx 34, 215

ADRESL A/D Result Register Low Byte                                                                           xxxx xxxx 34, 215

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

ADCON1      --               --       VCFG1  VCFG0           PCFG3  PCFG2             PCFG1 PCFG0 --00 0000 34, 214

ADCON2      ADFM             --       --         --          --     ADCS2             ADCS1 ADCS0 0--- -000 34, 215

CCPR1H Capture/Compare/PWM Register 1 High Byte                                                               xxxx xxxx 34, 151,
                                                                                                                                   152

CCPR1L Capture/Compare/PWM Register 1 Low Byte                                                                xxxx xxxx 34, 151,
                                                                                                                                   152

CCP1CON     --               --       DC1B1  DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 34, 149

CCPR2H Capture/Compare/PWM Register 2 High Byte                                                               xxxx xxxx 34, 151,
                                                                                                                                   152

CCPR2L Capture/Compare/PWM Register 2 Low Byte                                                                xxxx xxxx 34, 151,
                                                                                                                                   152

CCP2CON     --               --       DC2B1  DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 34, 149

Legend:     x = unknown, u = unchanged, � = unimplemented, q = value depends on condition
Note 1:     RA6 and associated bits are configured as port pins in RCIO and ECIO Oscillator modes only and read `0' in all other oscillator
            modes.
        2:  Bit 21 of the TBLPTRU allows access to the device configuration bits.
        3:  These registers are unused on PIC18F6X20 devices; always maintain these clear.

2004 Microchip Technology Inc.                                                                               DS39609B-page 53
PIC18F6520/8520/6620/8620/6720/8720

TABLE 4-3: REGISTER FILE SUMMARY (CONTINUED)

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

CCPR3H Capture/Compare/PWM Register 3 High Byte                                                         xxxx xxxx 34, 151,
                                                                                                                             152

CCPR3L Capture/Compare/PWM Register 3 Low Byte                                                          xxxx xxxx 34, 151,
                                                                                                                             152

CCP3CON     --     --                 DC3B1            DC3B0 CCP3M3 CCP3M2 CCP3M1 CCP3M0 --00 0000 34, 149

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

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

TMR3H Timer3 Register High Byte                                                                         xxxx xxxx 34, 143

TMR3L       Timer3 Register Low Byte                                                                    xxxx xxxx 34, 143

T3CON       RD16   T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON 0000 0000 34, 143

PSPCON      IBF    OBF                IBOV PSPMODE               --     --              --      -- 0000 ---- 34, 129

SPBRG1 USART1 Baud Rate Generator                                                                       0000 0000 34, 205

RCREG1 USART1 Receive Register                                                                          0000 0000 34, 206

TXREG1 USART1 Transmit Register                                                                         0000 0000 34, 204

TXSTA1      CSRC   TX9                TXEN             SYNC      --     BRGH            TRMT    TX9D 0000 -010 34, 198

RCSTA1      SPEN   RX9                SREN             CREN   ADDEN     FERR            OERR    RX9D 0000 000x 34, 199

EEADRH      --     --                 --               --        --     --              EE Adr Register High ---- --00 34, 79

EEADR Data EEPROM Address Register                                                                      0000 0000 34, 79

EEDATA Data EEPROM Data Register                                                                        0000 0000 34, 79

EECON2 Data EEPROM Control Register 2 (not a physical register)                                         ---- ---- 34, 79

EECON1      EEPGD  CFGS               --               FREE   WRERR     WREN            WR      RD xx-0 x000 34, 80

IPR3        --     --                 RC2IP            TX2IP  TMR4IP CCP5IP CCP4IP CCP3IP --11 1111 35, 100

PIR3        --     --                 RC2IF            TX2IF  TMR4IF    CCP5IF          CCP4IF CCP3IF --00 0000 35, 94

PIE3        --     --                 RC2IE            TX2IE  TMR4IE CCP5IE CCP4IE CCP3IE --00 0000 35, 97

IPR2        --     CMIP               --               EEIP   BCLIP     LVDIP           TMR3IP CCP2IP -1-1 1111 35, 99

PIR2        --     CMIF               --               EEIF   BCLIF     LVDIF           TMR3IF CCP2IF -0-0 0000 35, 93

PIE2        --     CMIE               --               EEIE   BCLIE     LVDIE           TMR3IE CCP2IE -0-0 0000 35, 96

IPR1        PSPIP  ADIP               RCIP             TXIP   SSPIP     CCP1IP TMR2IP TMR1IP 0111 1111 35, 98

PIR1        PSPIF  ADIF               RCIF             TXIF   SSPIF     CCP1IF TMR2IF TMR1IF 0000 0000 35, 92

PIE1        PSPIE  ADIE               RCIE             TXIE   SSPIE     CCP1IE          TMR2IE  TMR1IE  0000 0000 35, 95
                                                                --         --             WM1     WM0   0-00 --00 35, 71
MEMCON(3) EBDIS    --                 WAIT1            WAIT0                                            1111 1111 35, 125
                                                                                                        1111 1111 35, 122
TRISJ(3) Data Direction Control Register for PORTJ

TRISH(3) Data Direction Control Register for PORTH

TRISG       --     --                 --     Data Direction Control Register for PORTG                  ---1 1111 35, 120

TRISF       Data Direction Control Register for PORTF                                                   1111 1111 35, 117

TRISE       Data Direction Control Register for PORTE                                                   1111 1111 35, 114

TRISD       Data Direction Control Register for PORTD                                                   1111 1111 35, 111

TRISC       Data Direction Control Register for PORTC                                                   1111 1111 35, 109

TRISB       Data Direction Control Register for PORTB                                                   1111 1111 35, 106
TRISA                                                                                                   -111 1111 35, 103
            --     TRISA6(1) Data Direction Control Register for PORTA

Legend:     x = unknown, u = unchanged, � = unimplemented, q = value depends on condition
Note 1:     RA6 and associated bits are configured as port pins in RCIO and ECIO Oscillator modes only and read `0' in all other oscillator
            modes.
        2:  Bit 21 of the TBLPTRU allows access to the device configuration bits.
        3:  These registers are unused on PIC18F6X20 devices; always maintain these clear.

DS39609B-page 54                                                                                2004 Microchip Technology Inc.
            PIC18F6520/8520/6620/8620/6720/8720

TABLE 4-3: REGISTER FILE SUMMARY (CONTINUED)

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

LATJ(3)     Read PORTJ Data Latch, Write PORTJ Data Latch                                         xxxx xxxx 35, 125
LATH(3)     Read PORTH Data Latch, Write PORTH Data Latch                                         xxxx xxxx 35, 122

LATG        --               --     --     Read PORTG Data Latch, Write PORTG Data Latch          ---x xxxx 35, 120

LATF        Read PORTF Data Latch, Write PORTF Data Latch                                         xxxx xxxx 35, 117

LATE        Read PORTE Data Latch, Write PORTE Data Latch                                         xxxx xxxx 35, 114

LATD        Read PORTD Data Latch, Write PORTD Data Latch                                         xxxx xxxx 35, 111

LATC        Read PORTC Data Latch, Write PORTC Data Latch                                         xxxx xxxx 35, 109

LATB        Read PORTB Data Latch, Write PORTB Data Latch                                         xxxx xxxx 35, 106
                                                                                                  -xxx xxxx 35, 103
LATA        --    LATA6(1) Read PORTA Data Latch, Write PORTA Data Latch(1)                       xxxx xxxx 36, 125
PORTJ(3)                                                                                          xxxx xxxx 36, 122
PORTH(3)    Read PORTJ pins, Write PORTJ Data Latch

            Read PORTH pins, Write PORTH Data Latch

PORTG       --               --     --     Read PORTG pins, Write PORTG Data Latch                ---x xxxx 36, 120

PORTF       Read PORTF pins, Write PORTF Data Latch                                               xxxx xxxx 36, 117

PORTE Read PORTE pins, Write PORTE Data Latch                                                     xxxx xxxx 36, 114

PORTD Read PORTD pins, Write PORTD Data Latch                                                     xxxx xxxx 36, 111

PORTC Read PORTC pins, Write PORTC Data Latch                                                     xxxx xxxx 36, 109

PORTB       Read PORTB pins, Write PORTB Data Latch                                               xxxx xxxx 36, 106
PORTA                                                                                             -x0x 0000 36, 103
            --               RA6(1) Read PORTA pins, Write PORTA Data Latch(1)

TMR4        Timer4 Register                                                                       0000 0000 36, 148

PR4         Timer4 Period Register                                                                1111 1111 36, 148

T4CON       --    T4OUTPS3 T4OUTPS2 T4OUTPS1 T4OUTPS0 TMR4ON T4CKPS1 T4CKPS0 -000 0000 36, 147

CCPR4H Capture/Compare/PWM Register 4 High Byte                                                   xxxx xxxx 36, 151,
                                                                                                                       152

CCPR4L Capture/Compare/PWM Register 4 Low Byte                                                    xxxx xxxx 36, 151,
                                                                                                                       152

CCP4CON     --               --     DC4B1  DC4B0 CCP4M3 CCP4M2 CCP4M1 CCP4M0 0000 0000 36, 149

CCPR5H Capture/Compare/PWM Register 5 High Byte                                                   xxxx xxxx 36, 151,
                                                                                                                       152

CCPR5L Capture/Compare/PWM Register 5 Low Byte                                                    xxxx xxxx 36, 151,
                                                                                                                       152

CCP5CON     --               --     DC5B1  DC5B0 CCP5M3 CCP5M2 CCP5M1 CCP5M0 0000 0000 36, 149

SPBRG2 USART2 Baud Rate Generator                                                                 0000 0000 36, 205

RCREG2 USART2 Receive Register                                                                    0000 0000 36, 206

TXREG2 USART2 Transmit Register                                                                   0000 0000 36, 204

TXSTA2      CSRC             TX9    TXEN   SYNC             --     BRGH         TRMT       TX9D 0000 -010 36, 198

RCSTA2      SPEN             RX9    SREN   CREN             ADDEN  FERR         OERR       RX9D 0000 000x 36, 199

Legend:     x = unknown, u = unchanged, � = unimplemented, q = value depends on condition
Note 1:     RA6 and associated bits are configured as port pins in RCIO and ECIO Oscillator modes only and read `0' in all other oscillator
            modes.
        2:  Bit 21 of the TBLPTRU allows access to the device configuration bits.
        3:  These registers are unused on PIC18F6X20 devices; always maintain these clear.

2004 Microchip Technology Inc.                                                                   DS39609B-page 55
PIC18F6520/8520/6620/8620/6720/8720

4.10 Access Bank                                                   4.11 Bank Select Register (BSR)

The Access Bank is an architectural enhancement,                   The need for a large general purpose memory space
which is very useful for C compiler code optimization.             dictates a RAM banking scheme. The data memory is
The techniques used by the C compiler may also be                  partitioned into sixteen banks. When using direct
useful for 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
� Intermediate computational values                                address. The BSR<7:4> bits will always read `0's and
� Local variables of subroutines                                   writes will have no effect.
� Faster context saving/switching of variables
� Common variables                                                 A MOVLB instruction has been provided in the
� Faster evaluation/control of SFRs (no banking)                   instruction set to assist in selecting banks.

The Access Bank is comprised of the upper 160 bytes                If the currently selected bank is not implemented, any
in Bank 15 (SFRs) and the lower 96 bytes in Bank 0.                read will return all `0's and all writes are ignored. The
These two sections will be referred to as Access RAM               Status register bits will be set/cleared as appropriate for
High and Access RAM Low, respectively. Figure 4-7                  the instruction performed.
indicates the Access RAM areas.
                                                                   Each Bank extends up to FFh (256 bytes). All data
A bit in the instruction word specifies if the operation is        memory is implemented as static RAM.
to occur in the bank specified by the BSR register or in
the Access Bank. This bit is denoted by the `a' bit (for           A MOVFF instruction ignores the BSR, since the 12-bit
access bit).                                                       addresses are embedded into the instruction word.

When forced in the Access Bank (a = 0), the last                   Section 4.12 "Indirect Addressing, INDF and FSR
address in Access RAM Low is followed by the first                 Registers" provides a description of indirect address-
address in Access RAM High. Access RAM High maps                   ing, which allows linear addressing of the entire RAM
the Special Function Registers, so that these registers            space.
can be accessed without any software overhead. This is
useful for testing status flags and modifying control bits.

FIGURE 4-8:       DIRECT ADDRESSING

                                                Direct Addressing

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

Bank Select(2)              Location Select(3)

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

                               Data
                               Memory(1)

                                                             0FFh     1FFh  EFFh     FFFh

                                                             Bank 0 Bank 1  Bank 14 Bank 15

Note 1: For register file map detail, see Table 4-2.
        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.

DS39609B-page 56                                                             2004 Microchip Technology Inc.
              PIC18F6520/8520/6620/8620/6720/8720

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

The INDFn register is not a physical register. Address-    � Do nothing to FSRn after an indirect access
ing INDFn actually addresses the register whose               (no change) � INDFn.
address is contained in the FSRn register (FSRn is a
pointer). This is indirect addressing.                     � Auto-decrement FSRn after an indirect access
                                                              (post-decrement) � POSTDECn.
Example 4-4 shows a simple use of indirect addressing
to clear the RAM in Bank 1 (locations 100h-1FFh) in a      � Auto-increment FSRn after an indirect access
minimum number of instructions.                               (post-increment) � POSTINCn.

EXAMPLE 4-4:  HOW TO CLEAR RAM                             � Auto-increment FSRn before an indirect access
              (BANK 1) USING                                  (pre-increment) � PREINCn.
              INDIRECT ADDRESSING
                                                           � Use the value in the WREG register as an offset
NEXT  LFSR FSR0 ,0x100           ;                            to FSRn. Do not modify the value of the WREG or
      CLRF POSTINC0              ; Clear INDF                 the FSRn register after an indirect access
                                 ; register and               (no change) � PLUSWn.
             BTFSS FSR0H, 1      ; inc pointer
                                 ; All done with           When using the auto-increment or auto-decrement
             GOTO NEXT           ; Bank 1?                 features, the effect on the FSR is not reflected in the
CONTINUE                         ; NO, clear next          Status register. For example, if the indirect address
                                 ; YES, continue           causes the FSR to equal `0', the Z bit will not be set.

There are three indirect addressing registers. To          Incrementing or decrementing an FSR affects all 12
address the entire data memory space (4096 bytes),         bits. That is, when FSRnL overflows from an increment,
these registers are 12 bits wide. To store the 12 bits of  FSRnH will be incremented automatically.
addressing information, two 8-bit registers are
required. These indirect addressing registers are:         Adding these features allows the FSRn to be used as a
                                                           stack pointer, in addition to its uses for table operations
1. FSR0: composed of FSR0H:FSR0L                           in data memory.

2. FSR1: composed of FSR1H:FSR1L                           Each FSR has an address associated with it that
                                                           performs an indexed indirect access. When a data
3. FSR2: composed of FSR2H:FSR2L                           access to this INDFn location (PLUSWn) occurs, the
                                                           FSRn is configured to add the signed value in the
In addition, there are registers INDF0, INDF1 and          WREG register and the value in FSR to form the
INDF2, which are not physically implemented. Reading       address before an indirect access. The FSR value is
or writing to these registers activates indirect address-  not changed.
ing, with the value in the corresponding FSR register
being the address of the data. If an instruction writes a  If an FSR register contains a value that points to one of
value to INDF0, the value will be written to the address   the INDFn, an indirect read will read 00h (zero bit is
pointed to by FSR0H:FSR0L. A read from INDF1 reads         set), while an indirect write will be equivalent to a NOP
                                                           (Status bits are not affected).
2004 Microchip Technology Inc.
                                                           If an indirect addressing operation is done where the tar-
                                                           get address is an FSRnH or FSRnL register, the write
                                                           operation will dominate over the pre- or post-increment/
                                                           decrement functions.

                                                                                                                  DS39609B-page 57
PIC18F6520/8520/6620/8620/6720/8720

FIGURE 4-9:       INDIRECT ADDRESSING OPERATION

                                                                                 RAM 0h

                  Instruction            Address
                  Executed

                             Opcode

                                                                     FFFh

                                         12

                                                  File Address = Access of an Indirect Addressing Register

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

                  Opcode                 File

FIGURE 4-10:      INDIRECT ADDRESSING

                                             Indirect Addressing

                                     11           FSR Register                             0
                                                                                         0000h
                                         Location Select

                                                          Data
                                                          Memory(1)

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

DS39609B-page 58                                                                                          2004 Microchip Technology Inc.
PIC18F6520/8520/6620/8620/6720/8720

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-3, 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 reg-   It is recommended, therefore, that only BCF, BSF,
ister. If the Status register is the destination for an       SWAPF, MOVFF and MOVWF instructions are used to alter
instruction that affects the Z, DC, C, OV or N bits, then     the Status register, because these instructions do not
the write to these five bits is disabled. These bits are set  affect the Z, C, DC, OV or N bits from the Status regis-
or cleared according to the device logic. Therefore, the      ter. For other instructions not affecting any status bits,
result of an instruction with the Status register as          see Table 24-1.
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-3: STATUS REGISTER

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

         bit 7

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

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

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

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

         Z: Zero bit

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

         DC: Digit carry/borrow bit
         For ADDWF, ADDLW, SUBLW and SUBWF instructions:
         1 = A carry-out from the 4th low-order bit of the result occurred
         0 = No carry-out from the 4th low-order bit of the result

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

         C: Carry/borrow bit

         For ADDWF, ADDLW, SUBLW and SUBWF instructions:

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

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

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

2004 Microchip Technology Inc.                                                    DS39609B-page 59
PIC18F6520/8520/6620/8620/6720/8720

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

                                                                 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-4: RCON REGISTER

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

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

DS39609B-page 60                                                         2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

5.0 FLASH PROGRAM MEMORY                                   The program memory space is 16 bits wide, while the
                                                           data RAM space is 8 bits wide. Table reads and table
The Flash program memory is readable, writable and         writes move data between these two memory spaces
erasable, during normal operation over the entire VDD      through an 8-bit register (TABLAT).
range.
                                                           Table read operations retrieve data from program mem-
A read from program memory is executed on one byte         ory and place it into the data RAM space. Figure 5-1
at a time. A write to program memory is executed on        shows the operation of a table read with program
blocks of 8 bytes at a time. Program memory is erased      memory and data RAM.
in blocks of 64 bytes at a time. A bulk erase operation
may not be issued from user code.                          Table write operations store data from the data memory
                                                           space into holding registers in program memory. The
Writing or erasing program memory will cease               procedure to write the contents of the holding registers
instruction fetches until the operation is complete. The   into program memory is detailed in Section 5.5
program memory cannot be accessed during the write         "Writing to Flash Program Memory". Figure 5-2
or erase, therefore, code cannot execute. An internal      shows the operation of a table write with program
programming timer terminates program memory writes         memory and data RAM.
and erases.
                                                           Table operations work with byte entities. A table block
A value written to program memory does not need to be      containing data, rather than program instructions, is not
a valid instruction. Executing a program memory            required to be word aligned. Therefore, a table block
location that forms an invalid instruction results in a    can start and end at any byte address. If a table write is
NOP.                                                       being used to write executable code into program
                                                           memory, program instructions will need to be word
5.1 Table Reads and Table Writes                           aligned.

In order to read and write program memory, there are
two operations that allow the processor to move bytes
between the program memory space and the data
RAM:

� Table Read (TBLRD)
� Table Write (TBLWT)

FIGURE 5-1:  TABLE READ OPERATION

                                                            Instruction: TBLRD*

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

                                 Program Memory
                                 (TBLPTR)

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

2004 Microchip Technology Inc.                                                  DS39609B-page 61
PIC18F6520/8520/6620/8620/6720/8720

FIGURE 5-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 5.5 "Writing to Flash Program Memory".

5.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
5.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         The WR control bit, initiates write operations. The bit
will read all `0's. The EECON2 register is used           cannot be cleared, only set, in software; it is cleared in
exclusively in the memory write and erase sequences.      hardware at the completion of the write operation. The
                                                          inability to clear the WR bit in software prevents the
Control bit EEPGD determines if the access will be a      accidental or premature termination of a write
program or data EEPROM memory access. When                operation.
clear, any subsequent operations will operate on the
data EEPROM memory. When set, any subsequent              Note:                      Interrupt flag bit, EEIF in the PIR2 register,
operations will operate on the program memory.                                       is set when the write is complete. It must
                                                                                     be cleared in software.
Control bit CFGS determines if the access will be to the
configuration/calibration registers, or to program
memory/data EEPROM memory. When set, subse-
quent operations will operate on configuration regis-
ters, regardless of EEPGD (see Section 23.0 "Special
Features of the CPU"). When clear, memory selection
access is determined by EEPGD.

DS39609B-page 62                                                                      2004 Microchip Technology Inc.
       PIC18F6520/8520/6620/8620/6720/8720

REGISTER 5-1:  EECON1 REGISTER (ADDRESS FA6h)

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

               bit 7

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

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

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

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

bit 5          Unimplemented: Read as `0'

bit 4          FREE: Flash Row 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: Flash Program/Data EEPROM Error Flag bit

               1 = A write operation is prematurely terminated
                     (any 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: Flash Program/Data EEPROM Write Enable bit

               1 = Allows write cycles to Flash program/data EEPROM
               0 = Inhibits write cycles to Flash program/data EEPROM

bit 1          WR: Write Control bit

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

2004 Microchip Technology Inc.                                                     DS39609B-page 63
PIC18F6520/8520/6620/8620/6720/8720

5.2.2 TABLAT � TABLE LATCH REGISTER                        5.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
5.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 mem-
ters join to form a 22-bit wide pointer. The low-order 21  ory block of 8 bytes is written to. For more detail, see
bits allow the device to address up to 2 Mbytes of         Section 5.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 oper-
ation. These operations are shown in Table 5-1. These      Figure 5-3 describes the relevant boundaries of
operations on the TBLPTR only affect the low-order         TBLPTR based on Flash program memory operations.
21 bits.

TABLE 5-1: TABLE POINTER OPERATIONS WITH TBLRD AND TBLWT INSTRUCTIONS

       Example                                             Operation on Table Pointer

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

       TBLRD*-
       TBLWT*-

       TBLRD+*
       TBLWT+*

FIGURE 5-3:       TABLE POINTER BOUNDARIES BASED ON OPERATION

       21         TBLPTRU 16 15  TBLPTRH                          87  TBLPTRL          0

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

DS39609B-page 64                                                       2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

5.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 5-4
                                                        shows the interface between the internal program
                                                        memory and the TABLAT.

FIGURE 5-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 5-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_EVEN
             TBLRD*+
             MOVFW TABLAT, W
             MOVWF WORD_ODD

2004 Microchip Technology Inc.                                                         DS39609B-page 65
PIC18F6520/8520/6620/8620/6720/8720

5.4 Erasing Flash Program Memory                           5.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
is erased. The Most Significant 16 bits of the                   operation:
TBLPTR<21:6> point to the block being erased.                    � set EEPGD bit to point to program memory;
TBLPTR<5:0> are ignored.                                         � clear the CFGS bit to access program
                                                                    memory;
The EECON1 register commands the erase operation.                � set WREN bit to enable writes;
The EEPGD bit must be set to point to the Flash pro-             � set FREE bit to enable the erase.
gram memory. The WREN bit must be set to enable
write operations. The FREE bit is set to select an erase   3. Disable interrupts.
operation.                                                 4. Write 55h to EECON2.
                                                           5. Write AAh to EECON2.
For protection, the write initiate sequence for EECON2     6. Set the WR bit. This will begin the row erase
must be used.
                                                                 cycle.
A long write is necessary for erasing the internal Flash.  7. The CPU will stall for duration of the erase
Instruction execution is halted while in a long write
cycle. The long write will be terminated by the internal         (about 2 ms using internal timer).
programming timer.                                         8. Execute a NOP.
                                                           9. Re-enable interrupts.

EXAMPLE 5-2: ERASING A FLASH PROGRAM MEMORY ROW

      ERASE_ROW   MOVLW  CODE_ADDR_UPPER                   ; load TBLPTR with the base
                  MOVWF  TBLPTRU                           ; address of the memory block
Required          MOVLW  CODE_ADDR_HIGH
Sequence          MOVWF  TBLPTRH                           ; point to Flash program memory
                  MOVLW  CODE_ADDR_LOW                     ; access Flash program memory
                  MOVWF  TBLPTRL                           ; enable write to memory
                                                           ; enable Row Erase operation
                  BSF    EECON1, EEPGD                     ; disable interrupts
                  BCF    EECON1, CFGS                      ; write 55H
                  BSF    EECON1, WREN                      ; write AAH
                  BSF    EECON1, FREE                      ; start erase (CPU stall)
                  BCF    INTCON, GIE                       ; re-enable interrupts
                  MOVLW  55h
                  MOVWF  EECON2
                  MOVLW  AAh
                  MOVWF  EECON2
                  BSF    EECON1, WR
                  NOP
                  BSF    INTCON, GIE

DS39609B-page 66                                                   2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

5.5 Writing to Flash Program Memory                        the holding registers are written. At the end of updating
                                                           8 registers, the EECON1 register must be written to, to
The minimum programming block is 4 words or 8 bytes.       start the programming operation with a long write.
Word or byte programming is not supported.
                                                           The long write is necessary for programming the inter-
Table writes are used internally to load the holding reg-  nal Flash. Instruction execution is halted while in a long
isters needed to program the Flash memory. There are       write cycle. The long write will be terminated by the
8 holding registers used by the table writes for           internal programming timer.
programming.
                                                           The EEPROM on-chip timer controls the write time.
Since the Table Latch (TABLAT) is only a single byte,      The write/erase voltages are generated by an on-chip
the TBLWT instruction has to be executed 8 times for       charge pump, rated to operate over the voltage range
each programming operation. All of the table write         of the device for byte or word operations.
operations will essentially be short writes, because only

FIGURE 5-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

5.5.1  FLASH PROGRAM MEMORY                                9. Write 55h to EECON2.
       WRITE SEQUENCE                                      10. Write AAh to EECON2.
                                                           11. Set the WR bit. This will begin the write cycle.
The sequence of events for programming an internal         12. The CPU will stall for duration of the write (about
program memory location should be:
                                                                 2 ms using internal timer).
1. Read 64 bytes into RAM.                                 13. Execute a NOP.
2. Update data values in RAM as necessary.                 14. Re-enable interrupts.
3. Load Table Pointer with address being erased.           15. Repeat steps 6-14 seven times, to write
4. Do the row erase procedure.
5. Load Table Pointer with address of first byte                 64 bytes.
                                                           16. Verify the memory (table read).
      being written.
6. Write the first 8 bytes into the holding registers      This procedure will require about 18 ms to update one
                                                           row of 64 bytes of memory. An example of the required
      with auto-increment.                                 code is given in Example 5-3.
7. Set the EECON1 register for the write operation:
                                                           Note:        Before setting the WR bit, the Table
      � set EEPGD bit to point to program memory                        Pointer address needs to be within the
      � clear the CFGS bit to access program                            intended address range of the eight bytes
                                                                        in the holding register.
         memory
      � set WREN to enable byte writes
8. Disable interrupts.

2004 Microchip Technology Inc.                                              DS39609B-page 67
PIC18F6520/8520/6620/8620/6720/8720

EXAMPLE 5-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 BUFFER_ADDR_HIGH        ; address of the memory block

                  MOVWF FSR0H                   ; read into TABLAT, and inc
                                                ; get data
                  MOVLW BUFFER_ADDR_LOW         ; store data
                                                ; done?
                  MOVWF FSR0L                   ; repeat
                                                ; point to buffer
                  MOVLW CODE_ADDR_UPPER
                                                ; update buffer word
                  MOVWF TBLPTRU
                                                ; load TBLPTR with the base
                  MOVLW CODE_ADDR_HIGH          ; address of the memory block

                  MOVWF TBLPTRH                 ; point to Flash program memory
                                                ; access Flash program memory
                  MOVLW CODE_ADDR_LOW           ; 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 CODE_ADDR_UPPER

                  MOVWF TBLPTRU

                  MOVLW CODE_ADDR_HIGH

                  MOVWF TBLPTRH

                  MOVLW CODE_ADDR_LOW

                  MOVWF TBLPTRL

                  BSF      EECON1, EEPGD

                  BCF      EECON1, CFGS

                  BSF      EECON1, WREN

                  BSF      EECON1, FREE

                  BCF      INTCON, GIE

                  MOVLW 55h

                  MOVWF EECON2

Required MOVLW AAh

Sequence MOVWF EECON2

                  BSF      EECON1, WR

                  NOP

                  BSF      INTCON, GIE

                  TBLRD*-

WRITE_BUFFER_BACK

                  MOVLW 8

                  MOVWF COUNTER_HI

                  MOVLW BUFFER_ADDR_HIGH

                  MOVWF FSR0H

                  MOVLW BUFFER_ADDR_LOW

                  MOVWF FSR0L

PROGRAM_LOOP

                  MOVLW 8

                  MOVWF COUNTER

WRITE_WORD_TO_HREGS

                  MOVFF POSTINC0, WREG

                  TBLWT+*

                  DECFSZ COUNTER

                  BRA      WRITE_WORD_TO_HREGS

DS39609B-page 68                                 2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

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

PROGRAM_MEMORY                     EECON1, EEPGD         ; point to Flash program memory
                           BSF     EECON1, CFGS          ; access Flash program memory
                           BCF     EECON1, WREN          ; enable write to memory
                           BSF     INTCON, GIE           ; disable interrupts
                           BCF     55h
                           MOVLW   EECON2                ; write 55H
                           MOVWF   AAh
                                   EECON2                ; write AAH
      Required MOVLW               EECON1, WR            ; start program (CPU stall)
      Sequence MOVWF
                                   INTCON, GIE           ; re-enable interrupts
                           BSF     COUNTER_HI            ; loop until done
                           NOP     PROGRAM_LOOP
                           BSF     EECON1, WREN          ; disable write to memory
                           DECFSZ
                           BRA
                           BCF

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

5.5.3    UNEXPECTED TERMINATION OF                          5.6 Flash Program Operation During
         WRITE OPERATION                                             Code Protection

If a write is terminated by an unplanned event, such as     See Section 23.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.

TABLE 5-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
                                                                                          0000 0000  0000 0000
TBLPTRL Program Memory Table Pointer High Byte (TBLPTR<7:0>)                              0000 0000  0000 0000
                                                                                          0000 0000  0000 0000
TABLAT Program Memory Table Latch
                                                                                                --         --
INTCON GIE/GIEH PEIE/GIEL TMR0IE INTE RBIE TMR0IF INTF                             RBIF   xx-0 x000  uu-0 u000
                                                                                          ---1 1111  ---1 1111
EECON2 EEPROM Control Register 2 (not a physical register)                                ---0 0000  ---0 0000
                                                                                          ---0 0000  ---0 0000
EECON1 EEPGD CFGS                  --  FREE WRERR WREN             WR              RD

IPR2     --     CMIP               --  EEIP BCLIP LVDIP TMR3IP CCP2IP

PIR2     --     CMIF               --  EEIF BCLIF LVDIF TMR3IF CCP2IF

PIE2     --     CMIE               --  EEIE BCLIE LVDIE TMR3IE CCP2IE

Legend: x = unknown, u = unchanged, r = reserved, - = unimplemented, read as `0'.
                Shaded cells are not used during Flash/EEPROM access.

2004 Microchip Technology Inc.                                                           DS39609B-page 69
PIC18F6520/8520/6620/8620/6720/8720

NOTES:

DS39609B-page 70   2004 Microchip Technology Inc.
                PIC18F6520/8520/6620/8620/6720/8720

6.0 EXTERNAL MEMORY                                        6.1 Program Memory Modes and the
         INTERFACE                                                  External Memory Interface

Note:  The External Memory Interface is not                As previously noted, PIC18F8X20 controllers are
       implemented on PIC18F6X20 (64-pin)                  capable of operating in any one of four program
       devices.                                            memory modes, using combinations of on-chip and
                                                           external program memory. The functions of the multi-
The External Memory Interface is a feature of the          plexed port pins depend on the program memory
PIC18F8X20 devices that allows the controller to           mode selected, as well as the setting of the EBDIS bit.
access external memory devices (such as Flash,
EPROM, SRAM, etc.) as program or data memory.              In Microprocessor Mode, the external bus is always
                                                           active and the port pins have only the external bus
The physical implementation of the interface uses 27       function.
pins. These pins are reserved for external address/data
bus functions; they are multiplexed with I/O port pins on  In Microcontroller Mode, the bus is not active and
four ports. Three I/O ports are multiplexed with the       the pins have their port functions only. Writes to the
address/data bus, while the fourth port is multiplexed     MEMCOM register are not permitted.
with the bus control signals. The I/O port functions are
enabled when the EBDIS bit in the MEMCON register          In Microprocessor with Boot Block or Extended
is set (see Register 6-1). A list of the multiplexed pins  Microcontroller Mode, the external program memory
and their functions is provided in Table 6-1.              bus shares I/O port functions on the pins. When the
                                                           device is fetching or doing table read/table write
As implemented in the PIC18F8X20 devices, the              operations on the external program memory space, the
interface operates in a similar manner to the external     pins will have the external bus function. If the device is
memory interface introduced on PIC18C601/801               fetching and accessing internal program memory loca-
microcontrollers. The most notable difference is that      tions only, the EBDIS control bit will change the pins
the interface on PIC18F8X20 devices only operates in       from external memory to I/O port functions. When
16-bit modes. The 8-bit mode is not supported.             EBDIS = 0, the pins function as the external bus.
                                                           When EBDIS = 1, the pins function as I/O ports.
For a more complete discussion of the operating modes
that use the external memory interface, refer to           Note:  Maximum FOSC for the PIC18FX520 is
Section 4.1.1 "PIC18F8X20 Program Memory                          limited to 25 MHz when using the external
Modes".                                                           memory interface.

REGISTER 6-1:   MEMCON REGISTER

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

                EBDIS            --   WAIT1                WAIT0  --   --   WM1  WM0

                bit7                                                             bit0

       bit 7    EBDIS: External Bus Disable bit
                1 = External system bus disabled, all external bus drivers are mapped as I/O ports
       bit 6    0 = External system bus enabled and I/O ports are disabled
       bit 5-4
                Unimplemented: Read as `0'
       bit 3-2
       bit 1-0  WAIT<1:0>: Table Reads and Writes Bus Cycle Wait Count bits
                11 = Table reads and writes will wait 0 TCY
                10 = Table reads and writes will wait 1 TCY
                01 = Table reads and writes will wait 2 TCY
                00 = Table reads and writes will wait 3 TCY

                Unimplemented: Read as `0'

                WM<1:0>: TBLWRT Operation with 16-bit Bus bits
                1x = Word Write mode: TABLAT<0> and TABLAT<1> word output, WRH active when

                       TABLAT<1> written
                01 = Byte Select mode: TABLAT data copied on both MSB and LSB, WRH and (UB or LB)

                       will activate
                00 = Byte Write mode: TABLAT data copied on both MSB and LSB, WRH or WRL will activate

                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

2004 Microchip Technology Inc.                                             DS39609B-page 71
PIC18F6520/8520/6620/8620/6720/8720

If the device fetches or accesses external memory          When the device is executing out of internal memory
while EBDIS = 1, the pins will switch to external bus. If  (EBDIS = 0) in Microprocessor with Boot Block mode,
the EBDIS bit is set by a program executing from           or Extended Microcontroller mode, the control signals
external memory, the action of setting the bit will be     will NOT be active. They will go to a state where the
delayed until the program branches into the internal       AD<15:0> and A<19:16> are tri-state; the CE, OE,
memory. At that time, the pins will change from            WRH, WRL, UB and LB signals are `1' and ALE and
external bus to I/O ports.                                 BA0 are `0'.

TABLE 6-1:        PIC18F8X20 EXTERNAL BUS � I/O PORT FUNCTIONS

     Name         Port  Bit                                Function

RD0/AD0     PORTD       bit 0 Input/Output or System Bus Address bit 0 or Data bit 0.
RD1/AD1     PORTD       bit 1 Input/Output or System Bus Address bit 1 or Data bit 1.
RD2/AD2     PORTD       bit 2 Input/Output or System Bus Address bit 2 or Data bit 2.
RD3/AD3     PORTD       bit 3 Input/Output or System Bus Address bit 3 or Data bit 3.
RD4/AD4     PORTD       bit 4 Input/Output or System Bus Address bit 4 or Data bit 4.
RD5/AD5     PORTD       bit 5 Input/Output or System Bus Address bit 5 or Data bit 5.
RD6/AD6     PORTD       bit 6 Input/Output or System Bus Address bit 6 or Data bit 6.
RD7/AD7     PORTD       bit 7 Input/Output or System Bus Address bit 7 or Data bit 7.
RE0/AD8     PORTE       bit 0 Input/Output or System Bus Address bit 8 or Data bit 8.
RE1/AD9     PORTE       bit 1 Input/Output or System Bus Address bit 9 or Data bit 9.
RE2/AD10    PORTE       bit 2 Input/Output or System Bus Address bit 10 or Data bit 10.
RE3/AD11    PORTE       bit 3 Input/Output or System Bus Address bit 11 or Data bit 11.
RE4/AD12    PORTE       bit 4 Input/Output or System Bus Address bit 12 or Data bit 12.
RE5/AD13    PORTE       bit 5 Input/Output or System Bus Address bit 13 or Data bit 13.
RE6/AD14    PORTE       bit 6 Input/Output or System Bus Address bit 14 or Data bit 14.
RE7/AD15    PORTE       bit 7 Input/Output or System Bus Address bit 15 or Data bit 15.
RH0/A16     PORTH       bit 0 Input/Output or System Bus Address bit 16.
RH1/A17     PORTH       bit 1 Input/Output or System Bus Address bit 17.
RH2/A18     PORTH       bit 2 Input/Output or System Bus Address bit 18.
RH3/A19     PORTH       bit 3 Input/Output or System Bus Address bit 19.
RJ0/ALE     PORTJ       bit 0 Input/Output or System Bus Address Latch Enable (ALE) Control pin.
RJ1/OE
RJ2/WRL     PORTJ       bit 1 Input/Output or System Bus Output Enable (OE) Control pin.
RJ3/WRH
RJ4/BA0     PORTJ       bit 2 Input/Output or System Bus Write Low (WRL) Control pin.
RJ5/CE
RJ6/LB      PORTJ       bit 3 Input/Output or System Bus Write High (WRH) Control pin.
RJ7/UB      PORTJ       bit 4 Input/Output or System Bus Byte Address bit 0.

            PORTJ       bit 5 Input/Output or System Bus Chip Enable (CE) Control pin.

            PORTJ       bit 6 Input/Output or System Bus Lower Byte Enable (LB) Control pin.

            PORTJ       bit 7 Input/Output or System Bus Upper Byte Enable (UB) Control pin.

DS39609B-page 72                                                      2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

6.2 16-bit Mode                                             In Byte Select mode, JEDEC standard Flash memories
                                                            will require BA0 for the byte address line and one I/O
The External Memory Interface implemented in                line to select between Byte and Word mode. The other
PIC18F8X20 devices operates only in 16-bit mode.            16-bit modes do not need BA0. JEDEC standard static
The mode selection is not software configurable, but is     RAM memories will use the UB or LB signals for byte
programmed via the configuration bits.                      selection.

The WM<1:0> bits in the MEMCON register determine           6.2.1 16-BIT BYTE WRITE MODE
three types of connections in 16-bit mode. They are
referred to as:                                             Figure 6-1 shows an example of 16-bit Byte Write
                                                            mode for PIC18F8X20 devices. This mode is used for
� 16-bit Byte Write                                         two separate 8-bit memories connected for 16-bit oper-
� 16-bit Word Write                                         ation. This generally includes basic EPROM and Flash
� 16-bit Byte Select                                        devices. It allows table writes to byte-wide external
                                                            memories.
These three different configurations allow the designer
maximum flexibility in using 8-bit and 16-bit memory        During a TBLWT instruction cycle, the TABLAT data is
devices.                                                    presented on the upper and lower bytes of the
                                                            AD15:AD0 bus. The appropriate WRH or WRL control
For all 16-bit modes, the Address Latch Enable (ALE)        line is strobed on the LSb of the TBLPTR.
pin indicates that the address bits A<15:0> are
available on the External Memory Interface bus.
Following the address latch, the Output Enable signal
(OE) will enable both bytes of program memory at once
to form a 16-bit instruction word. The Chip Enable
signal (CE) is active at any time that the microcontroller
accesses external memory, whether reading or writing;
it is inactive (asserted high) whenever the device is in
Sleep mode.

FIGURE 6-1:  16-BIT BYTE WRITE MODE EXAMPLE

                                                            D<7:0>

PIC18F8X20                       373                        A<19:0>     (MSB)                 (LSB)
              AD<7:0>                                                A
                                                            D<15:8>                       A
            AD<15:8>                                                 D<7:0>    D<7:0>
                    ALE          373                                 CE
                                                                     OE WR(1)             D<7:0>
             A<19:16>                                                                     CE
                      CE                                                                  OE WR(1)
                      OE

                   WRH
                   WRL

                                                                               Address Bus
                                                                               Data Bus
                                                                               Control Lines

Note 1: This signal only applies to table writes. See Section 5.1 "Table Reads and Table Writes".

2004 Microchip Technology Inc.                                                                    DS39609B-page 73
PIC18F6520/8520/6620/8620/6720/8720

6.2.2 16-BIT WORD WRITE MODE                                During a TBLWT cycle to an odd address
                                                            (TBLPTR<0> = 1), the TABLAT data is presented on
Figure 6-2 shows an example of 16-bit Word Write            the upper byte of the AD15:AD0 bus. The contents of
mode for PIC18F8X20 devices. This mode is used for          the holding latch are presented on the lower byte of the
word-wide memories, which includes some of the              AD15:AD0 bus.
EPROM and Flash type memories. This mode allows
opcode fetches and table reads from all forms of 16-bit     The WRH signal is strobed for each write cycle; the
memory and table writes to any type of word-wide            WRL pin is unused. The signal on the BA0 pin indicates
external memories. This method makes a distinction          the LSb of TBLPTR, but it is left unconnected. Instead,
between TBLWT cycles to even or odd addresses.              the UB and LB signals are active to select both bytes.
                                                            The obvious limitation to this method is that the table
During a TBLWT cycle to an even address                     write must be done in pairs on a specific word boundary
(TBLPTR<0> = 0), the TABLAT data is transferred to a        to correctly write a word location.
holding latch and the external address data bus is
tri-stated for the data portion of the bus cycle. No write
signals are activated.

FIGURE 6-2:       16-BIT WORD WRITE MODE EXAMPLE

PIC18F8X20                 373                              A<20:1>  A JEDEC Word
               AD<7:0>
                                                                              EPROM Memory
              AD<15:8>
                      ALE                                   D<15:0>  D<15:0>

              A<19:16>                                                          CE OE WR(1)
                       CE  373
                       OE

                    WRH

                                                                     Address Bus
                                                                     Data Bus
                                                                     Control Lines

Note 1: This signal only applies to table writes. See Section 5.1 "Table Reads and Table Writes".

DS39609B-page 74                                                      2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

6.2.3 16-BIT BYTE SELECT MODE                            Flash and SRAM devices use different control signal
                                                         combinations to implement Byte Select mode. JEDEC
Figure 6-3 shows an example of 16-bit Byte Select        standard Flash memories require that a controller I/O
mode for PIC18F8X20 devices. This mode allows table      port pin be connected to the memory's BYTE/WORD
write operations to word-wide external memories with     pin to provide the select signal. They also use the BA0
byte selection capability. This generally includes both  signal from the controller as a byte address. JEDEC
word-wide Flash and SRAM devices.                        standard static RAM memories, on the other hand, use
                                                         the UB or LB signals to select the byte.
During a TBLWT cycle, the TABLAT data is presented
on the upper and lower byte of the AD15:AD0 bus. The
WRH signal is strobed for each write cycle; the WRL
pin is not used. The BA0 or UB/LB signals are used to
select the byte to be written, based on the Least
Significant bit of the TBLPTR register.

FIGURE 6-3:  16-BIT BYTE SELECT MODE EXAMPLE

PIC18F8X20                       373                     A<20:1>           JEDEC Word
               AD<7:0>                                                    Flash Memory
                                                                  A
             AD<15:8>                                                                            D<15:0>
                     ALE                                                          D<15:0>

             A<19:16>                                   138       CE
                      OE         373                              A0
                                                                  BYTE/WORD
                   WRH                                                       OE WR(1)
                    WRL
                     BA0                                 A<20:1>  A  JEDEC Word

                       I/O                                                SRAM Memory

                       LB                                                                                                                   D<15:0>
                      UB
                                                                  CE         D<15:0>

                                                                  LB
                                                                  UB OE WR(1)

                                                                                                                             Address Bus
                                                                                                                             Data Bus
                                                                                                                             Control Lines

Note 1: This signal only applies to table writes. See Section 5.1 "Table Reads and Table Writes".

2004 Microchip Technology Inc.                                                DS39609B-page 75
PIC18F6520/8520/6620/8620/6720/8720

6.2.4 16-BIT MODE TIMING

The presentation of control signals on the external
memory bus is different for the various operating
modes. Typical signal timing diagrams are shown in
Figure 6-4 through Figure 6-6.

FIGURE 6-4:       EXTERNAL MEMORY BUS TIMING FOR TBLRD (MICROPROCESSOR MODE)

Apparent Q Q1 Q2 Q3 Q4                      Q1 Q2           Q3 Q4       Q4 Q4 Q4 Q4
   Actual Q Q1 Q2 Q3 Q4                     Q1 Q2           Q3 Q4       Q1 Q2 Q3 Q4

A<19:16>                        00h                                0Ch

AD<15:0>          3AABh              0E55h           CF33h                 9256h

   BA0            Opcode Fetch                                                                                        `1'
   ALE              MOVLW 55h
     OE                                                                                                               `1'
                   from 007556h                                                                                        `0'
  WRH `1'                                                                                1 TCY Wait
  WRL `1'         TBLRD Cycle 1                               Table Read
                                                                 of 92h
     CE `0'                                                 from 199E67h

Memory                                                     TBLRD Cycle 2
   Cycle

Instruction
Execution

FIGURE 6-5:       EXTERNAL MEMORY BUS TIMING FOR TBLRD (EXTENDED
                  MICROCONTROLLER MODE)

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

A<19:16>                                                           0Ch

AD<15:0>                                                    CF33h       9256h
         CE
                  Opcode Fetch       Opcode Fetch             TBLRD 92h           Opcode Fetch
       ALE           TBLRD *           MOVLW 55h            from 199E67h            ADDLW 55h
         OE
    Memory        from 000100h       from 000102h           TBLRD Cycle 2         from 000104h
      Cycle
                   INST(PC-2)        TBLRD Cycle 1                                     MOVLW
  Instruction
   Execution

DS39609B-page 76                                                                2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

FIGURE 6-6:  EXTERNAL MEMORY BUS TIMING FOR SLEEP (MICROPROCESSOR MODE)

             Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1

A<19:16>            00h                        00h

AD<15:0>     3AAAh               0003h  3AABh       0E55h

         CE  Opcode Fetch               Opcode Fetch       Sleep Mode, Bus Inactive
        ALE       SLEEP                   MOVLW 55h
         OE
             from 007554h               from 007556h
   Memory
      Cycle   INST(PC-2)                     SLEEP

Instruction
Execution

2004 Microchip Technology Inc.                            DS39609B-page 77
PIC18F6520/8520/6620/8620/6720/8720

NOTES:

DS39609B-page 78   2004 Microchip Technology Inc.
PIC18F6520/8520/6620/8620/6720/8720

7.0 DATA EEPROM MEMORY                                     7.1 EEADR and EEADRH

The data EEPROM is readable and writable during            The address register pair can address up to a maxi-
normal operation over the entire VDD range. The data       mum of 1024 bytes of data EEPROM. The two Most
memory is not directly mapped in the register file         Significant bits of the address are stored in EEADRH,
space. Instead, it is indirectly addressed through the     while the remaining eight Least Significant bits are
Special Function Registers (SFR).                          stored in EEADR. The six Most Significant bits of
                                                           EEADRH are unused and are read as `0'.
There are five SFRs used to read and write the
program and data EEPROM memory. These registers            7.2 EECON1 and EECON2 Registers
are:
                                                           EECON1 is the control register for EEPROM memory
� EECON1                                                   accesses.
� EECON2
� EEDATA                                                   EECON2 is not a physical register. Reading EECON2
                                                           will read all `0's. The EECON2 register is used
� EEADRH                                                   exclusively in the EEPROM write sequence.
� EEADR
                                                           Control bits, RD and WR, initiate read and write opera-
The EEPROM data memory allows byte read and write.         tions, respectively. These bits cannot be cleared, only
When interfacing to the data memory block, EEDATA          set, in software. They are cleared in hardware at the
holds the 8-bit data for read/write. EEADR and             completion of the read or write operation. The inability
EEADRH hold the address of the EEPROM location             to clear the WR bit in software prevents the accidental
being accessed. These devices have 1024 bytes of           or premature termination of a write operation.
data EEPROM with an address range from 00h to
3FFh.                                                      The WREN bit, when set, will allow a write operation.
                                                           On power-up, the WREN bit is clear. The WRERR bit is
The EEPROM data memory is rated for high erase/            set when a write operation is interrupted by a MCLR
write cycles. A byte write automatically erases the loca-  Reset or a WDT Time-out Reset during normal opera-
tion and writes the new data (erase-before-write). The     tion. In these situations, the user can check the
write time is controlled by an on-chip timer. The write    WRERR bit and rewrite the location. It is necessary to
time will vary with voltage and temperature, as well as    reload the data and address registers (EEDATA and
from chip to chip. Please refer to parameter D122 (see     EEADR) due to the Reset condition forcing the
Section 26.0 "Electrical Characteristics") for exact       contents of the registers to zero.
limits.

                                                           Note:  Interrupt flag bit, EEIF in the PIR2 register,
                                                                  is set when write is complete. It must be
                                                                  cleared in software.

2004 Microchip Technology Inc.                                   DS39609B-page 79
PIC18F6520/8520/6620/8620/6720/8720

REGISTER 7-1:     EECON1 REGISTER (ADDRESS FA6h)

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

                  bit 7

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

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

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

                  1 = Access configuration or calibration registers
                  0 = Access Flash program 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: Flash Program/Data EEPROM 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: Flash Program/Data EEPROM Write Enable bit

                  1 = Allows write cycles to Flash program/data EEPROM
                  0 = Inhibits write cycles to Flash program/data EEPROM

bit 1             WR: Write Control bit

                  1 = Initiates a data EEPROM erase/write cycle, or a program memory erase cycle or write cycle.
                        (The operation is self-timed and the bit is cleared by hardware once write is complete. The
                        WR bit can only be set (not cleared) 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  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

DS39609B-page 80                                                           2004 Microchip Technology Inc.
          PIC18F6520/8520/6620/8620/6720/8720

7.3 Reading the Data EEPROM                               control bit (EECON1<6>) and then set the RD control
         Memory                                           bit (EECON1<0>). The data is available for the very
                                                          next instruction cycle; therefore, the EEDATA register
To read a data memory location, the user must write the   can be read by the next instruction. EEDATA will hold
address to the EEADRH:EEADR register pair, clear the      this value until another read operation, or until it is
EEPGD control bit (EECON1<7>), clear the CFGS             written to by the user (during a write operation).

EXAMPLE 7-1: DATA EEPROM READ

MOVLW  DATA_EE_ADDRH             ;
MOVWF  EEADRH                    ; Upper bits of Data Memory Address to read
MOVLW  DATA_EE_ADDR              ;
MOVWF  EEADR                     ; Lower bits of Data Memory Address to read
BCF    EECON1, EEPGD             ; Point to DATA memory
BCF    EECON1, CFGS              ; Access EEPROM
BSF    EECON1, RD                ; EEPROM Read
MOVF   EEDATA, W                 ; W = EEDATA

7.4 Writing to the Data EEPROM                            should be kept clear at all times, except when updating
         Memory                                           the EEPROM. The WREN bit is not cleared
                                                          by hardware
To write an EEPROM data location, the address must
first be written to the EEADRH:EEADR register pair        After a write sequence has been initiated, EECON1,
and the data written to the EEDATA register. Then the     EEADRH, EEADR and EEDATA cannot be modified.
sequence in Example 7-2 must be followed to initiate      The WR bit will be inhibited from being set unless the
the write cycle.                                          WREN bit is set. Both WR and WREN cannot be set
                                                          with the same instruction.
The write will not initiate if the above sequence is not
exactly followed (write 55h to EECON2, write AAh to       At the completion of the write cycle, the WR bit is
EECON2, then set WR bit) for each byte. It is strongly    cleared in hardware and the EEPROM Write Complete
recommended that interrupts be disabled during this       Interrupt Flag bit (EEIF) is set. The user may either
code segment.                                             enable this interrupt, or poll this bit. EEIF must be
                                                          cleared by software.
Additionally, the WREN bit in EECON1 must be set to
enable writes. This mechanism prevents accidental
writes to data EEPROM due to unexpected code
execution (i.e., runaway programs). The WREN bit

EXAMPLE 7-2: DATA EEPROM WRITE

          MOVLW  DATA_EE_ADDRH   ;
          MOVWF  EEADRH          ; Upper bits of Data Memory Address to write
          MOVLW  DATA_EE_ADDR    ;
          MOVWF  EEADR           ; Lower bits of Data Memory Address to write
          MOVLW  DATA_EE_DATA    ;
          MOVWF  EEDATA          ; Data Memory Value to write
          BCF    EECON1, EEPGD   ; Point to DATA memory
          BCF    EECON1, CFGS    ; Access EEPROM
          BSF    EECON1, WREN    ; Enable writes

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

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

2004 Microchip Technology Inc.                                               DS39609B-page 81
PIC18F6520/8520/6620/8620/6720/8720

7.5 Write Verify                                           7.8 Using the Data EEPROM

Depending on the application, good programming             The data EEPROM is a high endurance, byte address-
practice may dictate that the value written to the mem-    able array that has been optimized for the storage of
ory should be verified against the original value. This    frequently changing information (e.g., program vari-
should be used in applications where excessive writes      ables or other data that are updated often). Frequently
can stress bits near the specification limit.              changing values will typically be updated more often
                                                           than specification D124. If this is not the case, an array
7.6 Protection Against Spurious Write                      refresh must be performed. For this reason, variables
                                                           that change infrequently (such as constants, IDs,
There are conditions when the user may not want to         calibration, etc.) should be stored in Flash program
write to the data EEPROM memory. To protect against        memory.
spurious EEPROM writes, various mechanisms have
been built-in. On power-up, the WREN bit is cleared.       A simple data EEPROM refresh routine is shown in
Also, the Power-up Timer (72 ms duration) prevents         Example 7-3.
EEPROM write.
                                                           Note:  If data EEPROM is only used to store
The write initiate sequence and the WREN bit together             constants and/or data that changes rarely,
help prevent an accidental write during brown-out,                an array refresh is likely not required. See
power glitch, or software malfunction.                            specification D124.

7.7 Operation During Code-Protect

Data EEPROM memory has its own code-protect
mechanism. External read and write operations are
disabled if either of these mechanisms are enabled.

The microcontroller itself can both read and write to the
internal data EEPROM, regardless of the state of the
code-protect configuration bit. Refer to Section 23.0
"Special Features of the CPU" for additional
information.

EXAMPLE 7-3: DATA EEPROM REFRESH ROUTINE

      CLRF        EEADR          ; Start at address 0
      CLRF        EEADRH         ;
      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
Loop                             ; Read current address
                                 ;
      BSF         EECON1, RD     ; Write 55h
      MOVLW       55h            ;
      MOVWF       EECON2         ; Write AAh
      MOVLW       AAh            ; Set WR bit to begin write
      MOVWF       EECON2         ; Wait for write to complete
      BSF         EECON1, WR
      BTFSC       EECON1, WR     ; Increment address
      BRA         $-2            ; Not zero, do it again
      INCFSZ      EEADR, F       ; Increment the high address
      BRA         Loop           ; Not zero, do it again
      INCFSZ      EEADRH, F
      BRA         Loop

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

DS39609B-page 82                                                   2004 Microchip Technology Inc.
             PIC18F6520/8520/6620/8620/6720/8720

TABLE 7-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 0000
EEADRH                                                                                     ---- --00  0000 0000
EEADR    --     --                --  --  --                  -- EE Addr Register High     0000 0000  ---- --00
EEDATA                                                                                     0000 0000  0000 0000
EECON2   EEPROM Address Register                                                           ---- ----  0000 0000
EECON1                                                                                     xx-0 x000  ---- ----
IPR2     EEPROM Data Register                                                              ---1 1111  uu-0 u000
PIR2                                                                                       ---0 0000  ---1 1111
PIE2     EEPROM Control Register 2 (not a physical register)                               ---0 0000  ---0 0000
Legend:                                                                                               ---0 0000
         EEPGD CFGS               -- FREE WRERR WREN          WR                    RD

         --     CMIP              --  EEIP BCLIP LVDIP TMR3IP CCP2IP

         --     CMIF              --  EEIF BCLIF LVDIF TMR3IF CCP2IF

         --     CMIE              --  EEIE BCLIE LVDIE TMR3IE CCP2IE

         x = unknown, u = unchanged, r = reserved, � = unimplemented, read as `0'.
         Shaded cells are not used during Flash/EEPROM access.

2004 Microchip Technology Inc.                                                            DS39609B-page 83
PIC18F6520/8520/6620/8620/6720/8720

NOTES:

DS39609B-page 84   2004 Microchip Technology Inc.
                PIC18F6520/8520/6620/8620/6720/8720

8.0 8 X 8 HARDWARE MULTIPLIER                                    8.2 Operation

8.1 Introduction                                                 Example 8-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 PIC18FXX20 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 8-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 8-1:          8 x 8 UNSIGNED
gives the following advantages:                                                        MULTIPLY ROUTINE
                                                                  MOVF ARG1, W
� Higher computational throughput                                 MULWF ARG2            ;
� Reduces code size requirements for multiply                                           ; ARG1 * ARG2 ->
                                                                                        ; PRODH:PRODL
   algorithms
                                                                 EXAMPLE 8-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     ;
                                                                      MULWF ARG2
Table 8-1 shows a performance comparison between                                       ; ARG1 * ARG2 ->
enhanced devices using the single-cycle hardware
multiply and performing the same function without the                                  ; PRODH:PRODL
hardware multiply.
                                                                      BTFSC ARG2, SB   ; Test Sign Bit
                                                                      SUBWF PRODH, F
                                                                                       ; PRODH = PRODH

                                                                                       ;  - ARG1

                                                                      MOVF   ARG2, W   ;
                                                                      BTFSC  ARG1, SB
                                                                      SUBWF  PRODH, F  ; Test Sign Bit

                                                                                       ; PRODH = PRODH

                                                                                       ;  - ARG2

TABLE 8-1: PERFORMANCE COMPARISON

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

16 x 16 signed    Without hardware multiply                  52

                  Hardware multiply                          35

2004 Microchip Technology Inc.                                                           DS39609B-page 85
PIC18F6520/8520/6620/8620/6720/8720

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

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

                                                              EXAMPLE 8-4:   16 x 16 SIGNED
                                                                             MULTIPLY ROUTINE

EXAMPLE 8-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, F
   MULWF ARG2H     ; ARG1L * ARG2H ->                               MOVF PRODH, W      ; ARG2H:ARG2L neg?
                                                                    ADDWFC RES2, F     ; no, check ARG1
                   ; PRODH:PRODL                                    CLRF WREG          ;
                                                                    ADDWFC RES3, F     ;
   MOVF PRODL, W ;                                            ;                        ;
                                                                    MOVF ARG1H, W
   ADDWF RES1, F   ; Add cross                                      MULWF ARG2L        ; ARG1H:ARG1L neg?
                                                                                       ; no, done
   MOVF PRODH, W   ; products                                                          ;
                                                                                       ;
   ADDWFC RES2, F  ;                                                                   ;

   CLRF WREG       ;

   ADDWFC RES3, F  ;

;

   MOVF ARG1H, W   ;                                                MOVF    PRODL, W
                                                                    ADDWF   RES1, F
   MULWF ARG2L     ; ARG1H * ARG2L ->                               MOVF    PRODH, W
                                                                    ADDWFC  RES2, F
                   ; PRODH:PRODL                                    CLRF    WREG
                                                                    ADDWFC  RES3, F
   MOVF PRODL, W   ;                                          ;
                                                                    BTFSS   ARG2H, 7
   ADDWF RES1, F   ; Add cross                                      BRA     SIGN_ARG1
                                                                    MOVF    ARG1L, W
   MOVF PRODH, W   ; products                                       SUBWF   RES2
                                                                    MOVF    ARG1H, W
   ADDWFC RES2, F  ;                                                SUBWFB  RES3
                                                              ;
   CLRF WREG       ;                                          SIGN_ARG1     ARG1H, 7
                                                                    BTFSS   CONT_CODE
   ADDWFC RES3, F  ;                                                BRA     ARG2L, W
                                                                    MOVF    RES2
Example 8-4 shows the sequence to do a 16 x 16                      SUBWF   ARG2H, W
signed multiply. Equation 8-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 pairs' Most Significant bit (MSb)        CONT_CODE
is tested and the appropriate subtractions are done.
                                                                       :

DS39609B-page 86                                                              2004 Microchip Technology Inc.
PIC18F6520/8520/6620/8620/6720/8720

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

There are thirteen registers which are used to control       When an interrupt is responded to, the Global Interrupt
interrupt operation. They are:                               Enable bit is cleared to disable further interrupts. If the
                                                             IPEN bit is cleared, this is the GIE bit. If interrupt priority
� RCON                                                       levels are used, this will be either the GIEH or GIEL bit.
                                                             High priority interrupt sources can interrupt a low
� INTCON                                                     priority interrupt.
� INTCON2
� INTCON3                                                    The return address is pushed onto the stack and the
                                                             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-
� IPR1, IPR2, IPR3                                           mined by polling the interrupt flag bits. The interrupt
                                                             flag bits must be cleared in software before re-enabling
It is recommended that the Microchip header files,           interrupts to avoid recursive interrupts.
supplied with MPLAB� IDE, be used for the symbolic bit
names in these registers. This allows the assembler/         The "return from interrupt" instruction, RETFIE, exits
compiler to automatically take care of the placement of      the interrupt routine and sets the GIE bit (GIEH or GIEL
these bits within the specified register.                    if priority levels are used), which re-enables interrupts.

Each interrupt source has three bits to control its          For external interrupt events, such as the INT pins or
operation. The functions of these bits are:                  the PORTB input change interrupt, the interrupt latency
                                                             will be three to four instruction cycles. The exact
� Flag bit to indicate that an interrupt event               latency is the same for one or two-cycle instructions.
   occurred                                                  Individual interrupt flag bits are set, regardless of the
                                                             status of their corresponding enable bit or the GIE bit.
� Enable bit that allows program execution to
   branch to the interrupt vector address when the
   flag bit is set

� Priority bit to select high priority or low priority

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

2004 Microchip Technology Inc.                              DS39609B-page 87
PIC18F6520/8520/6620/8620/6720/8720

FIGURE 9-1:       INTERRUPT LOGIC

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

                                          Additional Peripheral Interrupts  INT1IF
                                                                            INT1IE
                                                                            INT1IP

                                                                            INT2IF
                                                                            INT2IE
                                                                            INT2IP

DS39609B-page 88                                                                                              2004 Microchip Technology Inc.
PIC18F6520/8520/6620/8620/6720/8720

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

REGISTER 9-1:  INTCON REGISTER

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

bit 7 GIE/GIEH: Global Interrupt Enable bit
            When IPEN (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 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)
            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

2004 Microchip Technology Inc.                                               DS39609B-page 89
PIC18F6520/8520/6620/8620/6720/8720

REGISTER 9-2:     INTCON2 REGISTER

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

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

bit 6 INTEDG0: External Interrupt 0 Edge Select bit
            1 = Interrupt on rising edge
            0 = Interrupt on falling edge

bit 5 INTEDG1: External Interrupt 1 Edge Select bit
            1 = Interrupt on rising edge
            0 = Interrupt on falling edge

bit 4 INTEDG2: External Interrupt 2 Edge Select bit
            1 = Interrupt on rising edge
            0 = Interrupt on falling edge

bit 3 INTEDG3: External Interrupt 3 Edge Select bit
            1 = Interrupt on rising edge
            0 = Interrupt on falling edge

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

bit 1 INT3IP: INT3 External Interrupt Priority bit
            1 = High priority
            0 = Low priority

bit 0 RBIP: RB Port Change Interrupt Priority bit
            1 = High priority
            0 = Low priority

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

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

DS39609B-page 90                                                  2004 Microchip Technology Inc.
PIC18F6520/8520/6620/8620/6720/8720

REGISTER 9-3:  INTCON3 REGISTER
                  R/W-1 R/W-1 R/W-0
                  INT2IP INT1IP INT3IE  R/W-0        R/W-0   R/W-0                  R/W-0   R/W-0
                                        INT2IE       INT1IE  INT3IF                 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 INT3IE: INT3 External Interrupt Enable bit
            1 = Enables the INT3 external interrupt
            0 = Disables the INT3 external interrupt

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 INT3IF: INT3 External Interrupt Flag bit
            1 = The INT3 external interrupt occurred (must be cleared in software)
            0 = The INT3 external interrupt did not occur

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 enable bit. User software should ensure
                                 the appropriate interrupt flag bits are clear prior to enabling an interrupt. This feature
                                 allows for software polling.

2004 Microchip Technology Inc.                                                     DS39609B-page 91
PIC18F6520/8520/6620/8620/6720/8720

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

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

                   R/W-0    R/W-0      R-0                   R-0   R/W-0   R/W-0 R/W-0    R/W-0
                  PSPIF(1)  ADIF      RC1IF                 TX1IF  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 RC1IF: USART1 Receive Interrupt Flag bit
            1 = The USART1 receive buffer, RCREG, is full (cleared when RCREG is read)
            0 = The USART1 receive buffer is empty

bit 4 TX1IF: USART Transmit Interrupt Flag bit
            1 = The USART1 transmit buffer, TXREG, is empty (cleared when TXREG is written)
            0 = The USART1 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: Enabled only in Microcontroller mode for PIC18F8X20 devices.

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

DS39609B-page 92                                                           2004 Microchip Technology Inc.
       PIC18F6520/8520/6620/8620/6720/8720

REGISTER 9-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
                                                                                                  CCP2IF
               --                CMIF   --          EEIF     BCLIF LVDIF TMR3IF
                                                                                                       bit 0
               bit 7

bit 7          Unimplemented: Read as `0'

bit 6          CMIF: Comparator Interrupt Flag bit

               1 = The comparator input has changed (must be cleared in software)
               0 = The comparator input has not changed

bit 5          Unimplemented: Read as `0'

bit 4          EEIF: Data EEPROM/Flash Write Operation Interrupt Flag bit

               1 = The write operation is complete (must be cleared in software)
               0 = The write operation is not complete, or has not been started

bit 3          BCLIF: Bus Collision Interrupt Flag bit

               1 = A bus collision occurred while the SSP module (configured in I2C Master mode)

                      was transmitting (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          CCP2IF: CCP2 Interrupt Flag bit

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

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

               PWM mode:
               Unused in this mode.

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

2004 Microchip Technology Inc.                                                    DS39609B-page 93
PIC18F6520/8520/6620/8620/6720/8720

REGISTER 9-6:     PIR3: PERIPHERAL INTERRUPT REQUEST (FLAG) REGISTER 3

                  U-0    U-0          R-0  R-0          R/W-0 R/W-0 R/W-0   R/W-0
                                                                           CCP3IF
                  --     --           RC2IF TX2IF TMR4IF CCP5IF CCP4IF
                                                                                bit 0
                  bit 7

bit 7- 6          Unimplemented: Read as `0'
bit 5
                  RC2IF: USART2 Receive Interrupt Flag bit
bit 4             1 = The USART2 receive buffer, RCREG, is full (cleared when RCREG is read)
bit 3             0 = The USART2 receive buffer is empty

bit 2-0           TX2IF: USART2 Transmit Interrupt Flag bit
                  1 = The USART2 transmit buffer, TXREG, is empty (cleared when TXREG is written)
                  0 = The USART2 transmit buffer is full

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

                  CCPxIF: CCPx Interrupt Flag bit (CCP Modules 3, 4 and 5)
                  Capture mode:
                  1 = A TMR1 or TMR3 register capture occurred (must be cleared in software)
                  0 = No TMR1 or TMR3 register capture occurred
                  Compare mode:
                  1 = A TMR1 or TMR3 register compare match occurred (must be cleared in software)
                  0 = No TMR1 or TMR3 register compare match occurred
                  PWM mode:
                  Unused in this mode.

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

DS39609B-page 94                                         2004 Microchip Technology Inc.
       PIC18F6520/8520/6620/8620/6720/8720

9.3 PIE Registers

The PIE registers contain the individual enable bits for
the peripheral interrupts. Due to the number of
peripheral interrupt sources, there are three Peripheral
Interrupt Enable registers (PIE1, PIE2 and PIE3).
When the IPEN bit (RCON<7>) is `0', the PEIE bit must
be set to enable any of these peripheral interrupts.

REGISTER 9-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   RC1IE             TX1IE  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          RC1IE: USART1 Receive Interrupt Enable bit

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

bit 4          TX1IE: USART1 Transmit Interrupt Enable bit

               1 = Enables the USART1 transmit interrupt
               0 = Disables the USART1 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: Enabled only in Microcontroller mode for PIC18F8X20 devices.

               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

2004 Microchip Technology Inc.                                                       DS39609B-page 95
PIC18F6520/8520/6620/8620/6720/8720

REGISTER 9-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
                                                                                TMR3IE  CCP2IE
                  --     CMIE         --                    EEIE  BCLIE LVDIE
                                                                                              bit 0
                  bit 7

bit 7             Unimplemented: Read as `0'

bit 6             CMIE: Comparator Interrupt Enable bit

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

bit 5             Unimplemented: Read as `0'

bit 4             EEIE: Data EEPROM/Flash Write Operation Interrupt Enable bit

                  1 = Enables the write operation interrupt
                  0 = Disables the write operation interrupt

bit 3             BCLIE: Bus Collision Interrupt Enable bit

                  1 = Enables the bus collision interrupt
                  0 = Disables the bus collision interrupt

bit 2             LVDIE: Low-Voltage Detect Interrupt Enable bit

                  1 = Enables the Low-Voltage Detect interrupt
                  0 = Disables the Low-Voltage Detect interrupt

bit 1             TMR3IE: TMR3 Overflow Interrupt Enable bit

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

bit 0             CCP2IE: CCP2 Interrupt Enable bit

                  1 = Enables the CCP2 interrupt

                  0 = Disables the CCP2 interrupt

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

DS39609B-page 96                                                   2004 Microchip Technology Inc.
PIC18F6520/8520/6620/8620/6720/8720

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

               U-0               U-0  R/W-0 R/W-0 R/W-0 R/W-0               R/W-0   R/W-0
                                                                           CCP4IE  CCP3IE
               --                --   RC2IE TX2IE TMR4IE CCP5IE
                                                                                         bit 0
               bit 7

bit 7-6        Unimplemented: Read as `0'
bit 5
bit 4          RC2IE: USART2 Receive Interrupt Enable bit
               1 = Enables the USART2 receive interrupt
bit 3          0 = Disables the USART2 receive interrupt

bit 2-0        TX2IE: USART2 Transmit Interrupt Enable bit
               1 = Enables the USART2 transmit interrupt
               0 = Disables the USART2 transmit interrupt

               TMR4IE: TMR4 to PR4 Match Interrupt Enable bit
               1 = Enables the TMR4 to PR4 match interrupt
               0 = Disables the TMR4 to PR4 match interrupt

               CCPxIE: CCPx Interrupt Enable bit (CCP Modules 3, 4 and 5)
               1 = Enables the CCPx interrupt
               0 = Disables the CCPx 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

2004 Microchip Technology Inc.                                            DS39609B-page 97
PIC18F6520/8520/6620/8620/6720/8720

9.4 IPR Registers

The IPR registers contain the individual 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 (IPEN) bit be set.

REGISTER 9-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      RC1IP                 TX1IP  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             RC1IP: USART1 Receive Interrupt Priority bit

                  1 = High priority

                  0 = Low priority

bit 4             TX1IP: USART1 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: Enabled only in Microcontroller mode for PIC18F8X20 devices.

                  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

DS39609B-page 98                                                                    2004 Microchip Technology Inc.
       PIC18F6520/8520/6620/8620/6720/8720

REGISTER 9-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
                                                                                TMR3IP  CCP2IP
                --               CMIP   --           EEIP         BCLIP LVDIP
                                                                                              bit 0
                bit 7

bit 7           Unimplemented: Read as `0'

bit 6           CMIP: Comparator Interrupt Priority bit

                1 = High priority

                0 = Low priority

bit 5           Unimplemented: Read as `0'

bit 4           EEIP: Data EEPROM/Flash Write Operation Interrupt Priority bit

                1 = High priority

                0 = Low priority

bit 3           BCLIP: Bus Collision Interrupt Priority bit

                1 = High priority

                0 = Low priority

bit 2           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           CCP2IP: CCP2 Interrupt Priority bit

                1 = High priority

                0 = Low priority

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

2004 Microchip Technology Inc.                                                 DS39609B-page 99
PIC18F6520/8520/6620/8620/6720/8720

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

                   U-0    U-0          R/W-1 R/W-1 R/W-1 R/W-1                    R/W-1   R/W-1
                                                                                 CCP4IP  CCP3IP
                   --     --           RC2IP TX2IP TMR4IP CCP5IP
                                                                                               bit 0
                   bit 7

bit 7-6            Unimplemented: Read as `0'
bit 5
bit 4              RC2IP: USART2 Receive Interrupt Priority bit
bit 3              1 = High priority
bit 2-0            0 = Low priority

                   TX2IP: USART2 Transmit Interrupt Priority bit
                   1 = High priority
                   0 = Low priority

                   TMR4IP: TMR4 to PR4 Match Interrupt Priority bit
                   1 = High priority
                   0 = Low priority

                   CCPxIP: CCPx Interrupt Priority bit (CCP Modules 3, 4 and 5)
                   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

DS39609B-page 100                                                                 2004 Microchip Technology Inc.
PIC18F6520/8520/6620/8620/6720/8720

9.5 RCON Register

The 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 9-13: RCON 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 (PIC16 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-4.
bit 1    TO: Watchdog Time-out Flag bit
bit 0    For details of bit operation, see Register 4-4.
         PD: Power-Down Detection Flag bit
         For details of bit operation, see Register 4-4.
         POR: Power-on Reset Status bit
         For details of bit operation, see Register 4-4.
         BOR: Brown-out Reset Status bit
         For details of bit operation, see Register 4-4.

         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

2004 Microchip Technology Inc.                                                DS39609B-page 101
PIC18F6520/8520/6620/8620/6720/8720

9.6 INT0 Interrupt                                         9.7 TMR0 Interrupt

External interrupts on the RB0/INT0, RB1/INT1,             In 8-bit mode (which is the default), an overflow in the
RB2/INT2 and RB3/INT3 pins are edge-triggered:             TMR0 register (FFh  00h) will set flag bit TMR0IF. In
either rising, if the corresponding INTEDGx bit is set in  16-bit mode, an overflow in the TMR0H:TMR0L regis-
the INTCON2 register, or falling, if the INTEDGx bit is    ters (FFFFh  0000h) will set flag bit TMR0IF. The
clear. When a valid edge appears on the RBx/INTx pin,      interrupt can be enabled/disabled by setting/clearing
the corresponding flag bit, INTxF, is set. This interrupt  enable bit, TMR0IE (INTCON<5>). Interrupt priority for
can be disabled by clearing the corresponding enable       Timer0 is determined by the value contained in the
bit, INTxE. Flag bit, INTxF, must be cleared in software   interrupt priority bit, TMR0IP (INTCON2<2>). See
in the Interrupt Service Routine before re-enabling the    Section 11.0 "Timer0 Module" for further details on
interrupt. All external interrupts (INT0, INT1, INT2 and   the Timer0 module.
INT3) can wake-up the processor from Sleep if bit
INTxIE was set prior to going into Sleep. If the Global    9.8 PORTB Interrupt-on-Change
Interrupt Enable bit, GIE, is set, the processor will
branch to the interrupt vector following wake-up.          An input change on PORTB<7:4> sets flag bit, RBIF
                                                           (INTCON<0>). The interrupt can be enabled/disabled
The interrupt priority for INT, INT2 and INT3 is deter-    by setting/clearing enable bit, RBIE (INTCON<3>).
mined by the value contained in the interrupt priority     Interrupt priority for PORTB interrupt-on-change is
bits: INT1IP (INTCON3<6>), INT2IP (INTCON3<7>)             determined by the value contained in the interrupt
and INT3IP (INTCON2<1>). There is no priority bit          priority bit, RBIP (INTCON2<0>).
associated with INT0; it is always a high priority
interrupt source.                                          9.9 Context Saving During Interrupts

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

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

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

DS39609B-page 102                                           2004 Microchip Technology Inc.
              PIC18F6520/8520/6620/8620/6720/8720

10.0 I/O PORTS                                            10.1 PORTA, TRISA and LATA
                                                                   Registers
Depending on the device selected, there are either
seven or nine I/O ports available on PIC18FXX20           PORTA is a 7-bit wide, bidirectional port. The corre-
devices. Some of their pins are multiplexed with one or   sponding data direction register is TRISA. Setting a
more alternate functions from the other peripheral fea-   TRISA bit (= 1) will make the corresponding PORTA pin
tures on the device. In general, when a peripheral is     an input (i.e., put the corresponding output driver in a
enabled, that pin may not be used as a general            high-impedance mode). Clearing a TRISA bit (= 0) will
purpose I/O pin.                                          make the corresponding PORTA pin an output (i.e., put
                                                          the contents of the output latch on the selected pin).
Each port has three registers for its operation. These
registers are:                                            Reading the PORTA register reads the status of the
                                                          pins, whereas writing to it will write to the port latch.
� TRIS register (data direction register)
� PORT register (reads the levels on the pins of the      The Data Latch register (LATA) is also memory
                                                          mapped. Read-modify-write operations on the LATA
   device)                                                register, read and write the latched output value for
� LAT register (output latch)                             PORTA.

The Data Latch (LAT register) is useful for read-modify-  The RA4 pin is multiplexed with the Timer0 module
write operations on the value that the I/O pins are       clock input to become the RA4/T0CKI pin. The RA4/
driving.                                                  T0CKI pin is a Schmitt Trigger input and an open-drain
                                                          output. All other RA port pins have TTL input levels and
A simplified version of a generic I/O port and its        full CMOS output drivers.
operation is shown in Figure 10-1.
                                                          The RA6 pin is only enabled as a general I/O pin in
FIGURE 10-1:     SIMPLIFIED BLOCK                         ECIO and RCIO Oscillator modes.
                 DIAGRAM OF PORT/LAT/
                 TRIS OPERATION                           The other PORTA pins are multiplexed with analog
                                                          inputs and the analog VREF+ and VREF- inputs. The
RD LAT                                                    operation of each pin is selected by clearing/setting the
                                                          control bits in the ADCON1 register (A/D Control
                                 TRIS                     Register 1).

                                                          Note:  On a Power-on Reset, RA5 and RA3:RA0
                                                                 are configured as analog inputs and read
              D  Q                                               as `0'. RA6 and RA4 are configured as
                                                                 digital inputs.
WR LAT +      CK
WR Port       Data Latch                                  The TRISA register controls the direction of the RA
                                                          pins, even when they are being used as analog inputs.
Data Bus                               I/O pin            The user must ensure the bits in the TRISA register are
RD Port                                                   maintained set when using them as analog inputs.

                                                          EXAMPLE 10-1: INITIALIZING PORTA

                                                          CLRF   PORTA   ; Initialize PORTA by
                                                                         ; clearing output
                                                          CLRF   LATA    ; data latches
                                                                         ; Alternate method
                                                          MOVLW  0x0F    ; to clear output
                                                          MOVWF  ADCON1  ; data latches
                                                          MOVLW  0xCF    ; Configure A/D
                                                                         ; for digital inputs
                                                          MOVWF  TRISA   ; Value used to
                                                                         ; initialize data
                                                                         ; direction
                                                                         ; Set RA<3:0> as inputs
                                                                         ; RA<5:4> as outputs

2004 Microchip Technology Inc.                                          DS39609B-page 103
PIC18F6520/8520/6620/8620/6720/8720

FIGURE 10-2:       BLOCK DIAGRAM OF                                      FIGURE 10-3:          BLOCK DIAGRAM OF
                   RA3:RA0 AND RA5 PINS                                                        RA4/T0CKI PIN

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

                                                                         RD TRISA

RD TRISA                                    TTL
                                            Input
                          Q  D              Buffer                                                     Q  D

                                                         EN                                               ENEN
RD PORTA
                                                                         RD PORTA
   To A/D Converter and LVD Modules                                          TMR0 Clock Input
Note 1: I/O pins have protection diodes to VDD and VSS.
                                                                         Note 1: I/O pins have protection diodes to VDD and VSS.

FIGURE 10-4:       BLOCK DIAGRAM OF RA6 PIN (WHEN ENABLED AS I/O)

                        ECRA6 or RCRA6 Enable
                        Data Bus
                        RD LATA

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

                                                             D  Q

                                                               CK Q
                                                             TRIS Latch

                          RD TRISA                                                             TTL
                          ECRA6 or RCRA6 Enable                                                Input
                                                                                               Buffer

                                                                         Q         D

                                                                                   EN

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

DS39609B-page 104                                                                               2004 Microchip Technology Inc.
               PIC18F6520/8520/6620/8620/6720/8720

TABLE 10-1: PORTA FUNCTIONS

       Name    Bit# Buffer                                   Function

RA0/AN0        bit 0 TTL Input/output or analog input.

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

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

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

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

                                 Output is open-drain type.

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

OSC2/CLKO/RA6  bit 6 TTL OSC2 or clock output, or I/O pin.

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

TABLE 10-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  -x0x 0000 -u0u 0000
                                                                                   -xxx xxxx -uuu uuuu
LATA       -- LATA Data Output Register                                            -111 1111 -111 1111
                                                                                   --00 0000 --00 0000
TRISA      -- PORTA Data Direction Register

ADCON1 --      -- VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0

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

2004 Microchip Technology Inc.                                                       DS39609B-page 105
PIC18F6520/8520/6620/8620/6720/8720

10.2 PORTB, TRISB and LATB                                  A mismatch condition will continue to set flag bit, RBIF.
         Registers                                          Reading PORTB will end the mismatch condition and
                                                            allow flag bit RBIF to be cleared.
PORTB is an 8-bit wide, bidirectional port. The corre-
sponding data direction register is TRISB. Setting a        The interrupt-on-change feature is recommended for
TRISB bit (= 1) will make the corresponding PORTB           wake-up on key depression operation and operations
pin an input (i.e., put the corresponding output driver in  where PORTB is only used for the interrupt-on-change
a high-impedance mode). Clearing a TRISB bit (= 0)          feature. Polling of PORTB is not recommended while
will make the corresponding PORTB pin an output (i.e.,      using the interrupt-on-change feature.
put the contents of the output latch on the selected pin).
                                                            RB3 can be configured by the configuration bit
The Data Latch register (LATB) is also memory               CCP2MX, as the alternate peripheral pin for the CCP2
mapped. Read-modify-write operations on the LATB            module. This is only available when the device is
register, read and write the latched output value for       configured in Microprocessor, Microprocessor with
PORTB.                                                      Boot Block, or Extended Microcontroller operating
                                                            modes.
EXAMPLE 10-2: INITIALIZING PORTB
                                                            The RB5 pin is used as the LVP programming pin.
CLRF   PORTB  ; Initialize PORTB by                         When the LVP configuration bit is programmed, this pin
CLRF   LATB   ; clearing output                             loses the I/O function and become a programming test
MOVLW  0xCF   ; data latches                                function.
MOVWF  TRISB  ; Alternate method
              ; to clear output                                Note: When LVP is enabled, the weak pull-up on
              ; data latches                                               RB5 is disabled.
              ; Value used to
              ; initialize data                             FIGURE 10-5:  BLOCK DIAGRAM OF
              ; direction                                                 RB7:RB4 PINS
              ; Set RB<3:0> as inputs
              ; RB<5:4> as outputs                                                                  VDD
              ; RB<7:6> as inputs
                                                            RBPU(2)                                         P  Weak
                                                            Data Bus                                           Pull-up
                                                            WR LATB
Each of the PORTB pins has a weak internal pull-up. A       or PORTB      Data Latch                           I/O pin(1)
single control bit can turn on all the pull-ups. This is                   DQ
performed by clearing bit RBPU (INTCON2<7>). The            WR TRISB                                TTL
weak pull-up is automatically turned off when the port                      CK                      Input
pin is configured as an output. The pull-ups are                          TRIS Latch                Buffer
disabled on a Power-on Reset.
                                                                           DQ
   Note: On a Power-on Reset, these pins are
               configured as digital inputs.                                CK

Four of the PORTB pins (RB3:RB0) are the external                                                                  ST
interrupt pins, INT3 through INT0. In order to use these                                                       Buffer
pins as external interrupts, the corresponding TRISB
bit must be set to `1'.                                     RD TRISB

The other four PORTB pins (RB7:RB4) have an inter-          RD LATB                     Latch
rupt-on-change feature. Only pins configured as inputs                                QD
can cause this interrupt to occur (i.e., any RB7:RB4 pin    RD PORTB
configured as an output is excluded from the interrupt-     Set RBIF                            EN             Q1
on-change comparison). The input pins (of RB7:RB4)
are compared with the old value latched on the last                                   QD
read of PORTB. The "mismatch" outputs of RB7:RB4                                                     RD PORTB
are OR'ed together to generate the RB Port Change
Interrupt with Flag bit, RBIF (INTCON<0>).                  From other                          EN             Q3
                                                            RB7:RB4 pins
This interrupt can wake the device from Sleep. The
user, in the Interrupt Service Routine, can clear the       RB7:RB5 in Serial Programming Mode
interrupt in the following manner:
                                                            Note 1: I/O pins have diode protection to VDD and VSS.
a) Any read or write of PORTB (except with the
      MOVFF instruction). This will end the mismatch               2: To enable weak pull-ups, set the appropriate TRIS bit(s)
      condition.                                                          and clear the RBPU bit (INTCON2<7>).

b) Clear flag bit RBIF.

DS39609B-page 106                                                          2004 Microchip Technology Inc.
              PIC18F6520/8520/6620/8620/6720/8720

FIGURE 10-6:  BLOCK DIAGRAM OF RB2:RB0 PINS

                                                                                         VDD

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

                                                    CK

              RD TRIS                                                        QD
              RD Port                                                                EN

              INTx

                                                            Schmitt Trigger              RD Port
                                                            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 (OPTION_REG<7>).

FIGURE 10-7:  BLOCK DIAGRAM OF RB3 PIN

                                                                                              VDD

              RBPU(2)                                                                         P      Weak
                                                                                                     Pull-up
              CCP2MX

              CCP Output(3)                       1

                                                                             VDD
                                                                             P

              Enable(3)                                  0                                              I/O pin(1)
              CCP Output         Data Latch
              Data Bus            DQ                                         N
              WR LATB or
              WR PORTB