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

型号

产品描述

搜索
 

PIC18LF8525T-E/PT

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

器件描述

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

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

参数

PIC18LF8525T-E/PT外部数据总线宽度 16
PIC18LF8525T-E/PT输入输出总线数量 70
PIC18LF8525T-E/PT端子数量 80
PIC18LF8525T-E/PT最小工作温度 -40 Cel
PIC18LF8525T-E/PT最大工作温度 85 Cel
PIC18LF8525T-E/PT线速度 40 MHz
PIC18LF8525T-E/PT加工封装描述 12 X 12 MM, 1 MM HEIGHT, LEAD FREE, PLASTIC, MS-026, TQFP-80
PIC18LF8525T-E/PTreach_compliant Yes
PIC18LF8525T-E/PT欧盟RoHS规范 Yes
PIC18LF8525T-E/PT中国RoHS规范 Yes
PIC18LF8525T-E/PT状态 Active
PIC18LF8525T-E/PTmicroprocessor_microcontroller_peripheral_ic_type MICROCONTROLLER, RISC
PIC18LF8525T-E/PTADC通道 YES
PIC18LF8525T-E/PT地址总线宽度 20
PIC18LF8525T-E/PT位数 8
PIC18LF8525T-E/PTclock_frequency_max 40 MHz
PIC18LF8525T-E/PTcpu_family PIC
PIC18LF8525T-E/PTDAC通道 NO
PIC18LF8525T-E/PTDMA通道 NO
PIC18LF8525T-E/PTjesd_30_code S-PQFP-G80
PIC18LF8525T-E/PTjesd_609_code e3
PIC18LF8525T-E/PTmoisture_sensitivity_level 1; 3
PIC18LF8525T-E/PT包装材料 PLASTIC/EPOXY
PIC18LF8525T-E/PTpackage_code TFQFP
PIC18LF8525T-E/PTpackage_equivalence_code TQFP80,.55SQ
PIC18LF8525T-E/PT包装形状 SQUARE
PIC18LF8525T-E/PT包装尺寸 FLATPACK, THIN PROFILE, FINE PITCH
PIC18LF8525T-E/PTpeak_reflow_temperature__cel_ 260
PIC18LF8525T-E/PTpower_supplies 2.5/5
PIC18LF8525T-E/PTPWM通道 YES
PIC18LF8525T-E/PTqualification_status COMMERCIAL
PIC18LF8525T-E/PTram__bytes_ 3840
PIC18LF8525T-E/PTROM编程 FLASH
PIC18LF8525T-E/PTrom__words_ 65536
PIC18LF8525T-E/PTseated_height_max 1.2 mm
PIC18LF8525T-E/PTsub_category Microcontrollers
PIC18LF8525T-E/PT最大供电电压 6 mA
PIC18LF8525T-E/PT额定供电电压 5 V
PIC18LF8525T-E/PT最小供电电压 4.2 V
PIC18LF8525T-E/PT最大供电电压 5.5 V
PIC18LF8525T-E/PT表面贴装 YES
PIC18LF8525T-E/PT工艺 CMOS
PIC18LF8525T-E/PT温度等级 INDUSTRIAL
PIC18LF8525T-E/PT端子涂层 MATTE TIN
PIC18LF8525T-E/PT端子形式 GULL WING
PIC18LF8525T-E/PT端子间距 0.5000 mm
PIC18LF8525T-E/PT端子位置 QUAD
PIC18LF8525T-E/PTtime_peak_reflow_temperature_max__s_ 40
PIC18LF8525T-E/PTlength 12 mm
PIC18LF8525T-E/PTwidth 12 mm
PIC18LF8525T-E/PTadditional_feature ALSO OPERATES AT MINIMUM 2V AT 4MHZ

文档预览

PIC18LF8525T-E/PT器件文档内容

PIC18F6525/6621/8525/8621
                      Data Sheet

          64/80-Pin High-Performance,
              64-Kbyte Enhanced Flash
             Microcontrollers with A/D

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

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

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

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

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

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

Information contained in this publication regarding device           Trademarks
applications and the like is provided only for your convenience
and may be superseded by updates. It is your responsibility to       The Microchip name and logo, the Microchip logo, Accuron,
ensure that your application meets with your specifications.         dsPIC, KEELOQ, microID, MPLAB, PIC, PICmicro, PICSTART,
MICROCHIP MAKES NO REPRESENTATIONS OR WAR-                           PRO MATE, PowerSmart, rfPIC, and SmartShunt are
RANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED,                      registered trademarks of Microchip Technology Incorporated
WRITTEN OR ORAL, STATUTORY OR OTHERWISE,                             in the U.S.A. and other countries.
RELATED TO THE INFORMATION, INCLUDING BUT NOT
LIMITED TO ITS CONDITION, QUALITY, PERFORMANCE,                      AmpLab, FilterLab, Migratable Memory, MXDEV, MXLAB,
MERCHANTABILITY OR FITNESS FOR PURPOSE.                              PICMASTER, SEEVAL, SmartSensor and The Embedded
Microchip disclaims all liability arising from this information and  Control Solutions Company are registered trademarks of
its use. Use of Microchip's products as critical components in       Microchip Technology Incorporated in the U.S.A.
life support systems is not authorized except with express
written approval by Microchip. No licenses are conveyed,             Analog-for-the-Digital Age, Application Maestro, dsPICDEM,
implicitly or otherwise, under any Microchip intellectual property   dsPICDEM.net, dsPICworks, ECAN, ECONOMONITOR,
rights.                                                              FanSense, FlexROM, fuzzyLAB, In-Circuit Serial
                                                                     Programming, ICSP, ICEPIC, MPASM, MPLIB, MPLINK,
                                                                     MPSIM, PICkit, PICDEM, PICDEM.net, PICLAB, PICtail,
                                                                     PowerCal, PowerInfo, PowerMate, PowerTool, rfLAB,
                                                                     rfPICDEM, Select Mode, Smart Serial, SmartTel and Total
                                                                     Endurance are trademarks of Microchip Technology
                                                                     Incorporated in the U.S.A. and other countries.

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

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

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

                                                                          Printed on recycled paper.

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

                                                                                                          2005 Microchip Technology Inc.
                      PIC18F6525/6621/8525/8621

64/80-Pin High-Performance, 64-Kbyte Enhanced Flash
                   Microcontrollers with A/D

High Performance RISC CPU:                                             External Memory Interface
                                                                       (PIC18F8525/8621 Devices Only):
Linear program memory addressing to 64 Kbytes
Linear data memory addressing to 4 Kbytes                            Address capability of up to 2 Mbytes
1 Kbyte of data EEPROM                                                16-bit interface
Up to 10 MIPs operation:
                                                                       Analog Features:
   - DC 40 MHz osc./clock input
   - 4 MHz 10 MHz osc./clock input with PLL active                   10-bit, up to 16-channel Analog-to-Digital
16-bit wide instructions, 8-bit wide data path                          Converter (A/D):
Priority levels for interrupts                                          - Auto-Acquisition
31-level, software accessible hardware stack                            - Conversion available during Sleep
8 x 8 Single-cycle Hardware Multiplier
                                                                        Programmable 16-level Low-Voltage Detection
Peripheral Features:                                                      (LVD) module:
                                                                          - Supports interrupt on Low-Voltage Detection
High current sink/source 25 mA/25 mA
Four external interrupt pins                                          Programmable Brown-out Reset (BOR)
Timer0 module: 8-bit/16-bit timer/counter                            Dual analog comparators:
Timer1 module: 16-bit timer/counter
Timer2 module: 8-bit timer/counter                                      - Programmable input/output configuration
Timer3 module: 16-bit timer/counter
Timer4 module: 8-bit timer/counter                                   Special Microcontroller Features:
Secondary oscillator clock option Timer1/Timer3
Two Capture/Compare/PWM (CCP) modules:                               100,000 erase/write cycle Enhanced Flash
                                                                          program memory typical
   - Capture is 16-bit, max. resolution 6.25 ns (TCY/16)
   - Compare is 16-bit, max. resolution 100 ns (TCY)                   1,000,000 erase/write cycle Data EEPROM
   - PWM output: 1 to 10-bit PWM resolution                               memory typical
Three Enhanced Capture/Compare/PWM (ECCP)
   modules:                                                             1 second programming time
   - Same Capture/Compare features as CCP                               Flash/Data EEPROM Retention: > 100 years
   - One, two or four PWM outputs                                       Self-reprogrammable under software control
   - Selectable polarity                                                Power-on Reset (POR), Power-up Timer (PWRT)
   - Programmable dead time
   - Auto-Shutdown on external event                                      and Oscillator Start-up Timer (OST)
   - Auto-Restart                                                       Watchdog Timer (WDT) with its own On-Chip
Master Synchronous Serial Port (MSSP) module
   with two modes of operation:                                           RC Oscillator for reliable operation
   - 2/3/4-wire SPITM (supports all 4 SPI modes)                        Programmable code protection
   - I2CTM Master and Slave mode                                        Power-saving Sleep mode
Two Enhanced USART modules:                                           Selectable oscillator options including:
   - Supports RS-485, RS-232 and LIN 1.2
   - Auto-Wake-up on Start bit                                            - 4x Phase Lock Loop (PLL) of primary oscillator
   - Auto-Baud Rate Detect                                                - Secondary Oscillator (32 kHz) clock input
Parallel Slave Port (PSP) module                                     In-Circuit Serial ProgrammingTM (ICSPTM) via two pins
                                                                        MPLAB In-Circuit Debug (ICD 2) via two pins

                                                                       CMOS Technology:

                                                                        Low power, high-speed Flash technology
                                                                        Fully static design
                                                                        Wide operating voltage range (2.0V to 5.5V)
                                                                        Industrial and Extended temperature ranges

        Program Memory Data Memory                             10-bit
                                                                A/D
Device          # Single-Word    SRAM EEPROM              I/O   (ch)   CCP/  PWM  MSSP/SPITM/   EUSART    Timers      EMI
                 Instructions    (bytes) (bytes)                       ECCP       Master I2CTM          8-bit/16-bit
        Bytes

PIC18F6525 48K  24576            3840 1024 53 12 2/3 14                           Y             2       2/3           N

PIC18F6621 64K  32768            3840 1024 53 12 2/3 14                           Y             2       2/3           N

PIC18F8525 48K  24576            3840 1024 70 16 2/3 14                           Y             2       2/3           Y

PIC18F8621 64K  32768            3840 1024 70 16 2/3 14                           Y             2       2/3           Y

2005 Microchip Technology Inc.                                                                         DS39612B-page 1
PIC18F6525/6621/8525/8621

Pin Diagrams
          64-Pin TQFP

                               RE2/CS/P2B
                                   RE3/P3C
                                        RE4/P3B
                                             RE5/P1C
                                                  RE6/P1B
                                                     RE7/ECCP2(1)/P2A(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/P2C                 1                                                                                      48  RB0/INT0/FLT0

RE0/RD/P2D                 2                                                                                      47  RB1/INT1

RG0/ECCP3/P3A              3                                                                                      46  RB2/INT2

RG1/TX2/CK2                4                                                                                      45  RB3/INT3

RG2/RX2/DT2                5                                                                                      44  RB4/KBI0

RG3/CCP4/P3D               6                                                                                      43  RB5/KBI1/PGM

MCLR/VPP/RG5(2)            7   PIC18F6525                                                                         42  RB6/KBI2/PGC
                               PIC18F6621
RG4/CCP5/P1D               8                                                                                      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/ECCP1/P1A

                               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/ECCP2(1)/P2A(1)
                                                                                            RC0/T1OSO/T13CKI
                                                                                                 RC6/TX1/CK1
                                                                                                     RC7/RX1/DT1

Note 1: ECCP2/P2A are multiplexed with RC1 when CCP2MX is set, or RE7 when CCP2MX is not set.
         2: RG5 is multiplexed with MCLR and is only available when the MCLR Resets are disabled.

DS39612B-page 2                                                                                                    2005 Microchip Technology Inc.
                                 PIC18F6525/6621/8525/8621

Pin Diagrams (Cont.'d)
     80-Pin TQFP

                             RH1/A17
                                 RH0/A16
                                      RE2/AD10/CS/P2B
                                          RE3/AD11/P3C(2)
                                              RE4/AD12/P3B(2)
                                                   RE5/AD13/P1C(2)
                                                        RE6/AD14/P1B(2)
                                                             RE7/AD15/ECCP2(1)/P2A(1)
                                                                  RD0/AD0/PSP0
                                                                       VDD
                                                                            VSS
                                                                                RD1/AD1/PSP1
                                                                                     RD2/AD2/PSP2
                                                                                          RD3/AD3/PSP3
                                                                                               RD4/AD4/PSP4
                                                                                                   RD5/AD5/PSP5
                                                                                                        RD6/AD6/PSP6
                                                                                                             RD7/AD7/PSP7
                                                                                                                 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                                                                                                               RJ3/WRH
                         2                                                                                                     59  RB0/INT0/FLT0
RE1/AD9/WR/P2C                                                                                                                     RB1/INT1
RE0/AD8/RD/P2D           3                                                                                                     58  RB2/INT2
RG0/ECCP3/P3A                                                                                                                     RB3/INT3/ECCP2(1)/P2A(1)
                         4                                                                                                     57  RB4/KBI0
     RG1/TX2/CK2                                                                                                                   RB5/KBI1/PGM
     RG2/RX2/DT2         5                                                                                                     56  RB6/KBI2/PGC
   RG3/CCP4/P3D                                                                                                                    VSS
MCLR/VPP/RG5(3)          6                                                                                                     55  OSC2/CLKO/RA6
   RG4/CCP5/P1D                                                                                                                    OSC1/CLKI
                         7                                                                                                     54  VDD
                    VSS                                                                                                            RB7/KBI3/PGD
                   VDD   8                                                                                                     53  RC5/SDO
              RF7/SS                                                                                                               RC4/SDI/SDA
           RF6/AN11      9                                                                                                     52  RC3/SCK/SCL
RF5/AN10/CVREF                                                                                                                    RC2/ECCP1/P1A
             RF4/AN9     10      PIC18F8525                                                                                    51  RJ7/UB
             RF3/AN8                                                                                                               RJ6/LB
RF2/AN7/C1OUT           11      PIC18F8621                                                                                    50
RH7/AN15/P1B(2)
RH6/AN14/P1C(2)         12                                                                                                    49

                         13                                                                                                    48

                         14                                                                                                    47

                         15                                                                                                    46

                         16                                                                                                    45

                         17                                                                                                    44

                         18                                                                                                    43

                         19                                                                                                    42

                         20                                                                                                    41

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

                             RH5/AN13/P3B(2)
                                 RH4/AN12/P3C(2)
                                       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/ECCP2(1)/P2A(1)
                                                                                                    RC0/T1OSO/T13CKI
                                                                                                         RC6/TX1/CK1
                                                                                                              RC7/RX1/DT1
                                                                                                                  RJ4/BA0
                                                                                                                       RJ5/CE

Note 1:      ECCP2/P2A are multiplexed with RC1 when CCP2MX is set; with RE7 when CCP2MX is cleared and the device
         2:  is configured in Microcontroller mode; or with RB3 when CCP2MX is cleared in all other program memory modes.
         3:  P1B/P1C/P3B/P3C are multiplexed with RE6:RE3 when ECCPMX is set and with RH7:RH4 when ECCPMX is
             not set.
             RG5 is multiplexed with MCLR and is only available when the MCLR Resets are disabled.

2005 Microchip Technology Inc.                                                                                                    DS39612B-page 3
PIC18F6525/6621/8525/8621

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 Enhanced Capture/Compare/PWM (ECCP) Module................................................................................................................ 157
18.0 Master Synchronous Serial Port (MSSP) Module .................................................................................................................... 173
19.0 Enhanced Universal Synchronous Asynchronous Receiver Transmitter (EUSART) ............................................................... 213
20.0 10-Bit Analog-to-Digital Converter (A/D) Module ..................................................................................................................... 233
21.0 Comparator Module.................................................................................................................................................................. 243
22.0 Comparator Voltage Reference Module ................................................................................................................................... 249
23.0 Low-Voltage Detect .................................................................................................................................................................. 253
24.0 Special Features of the CPU .................................................................................................................................................... 259
25.0 Instruction Set Summary .......................................................................................................................................................... 275
26.0 Development Support............................................................................................................................................................... 317
27.0 Electrical Characteristics .......................................................................................................................................................... 323
28.0 DC and AC Characteristics Graphs And Tables ...................................................................................................................... 357
29.0 Packaging Information.............................................................................................................................................................. 373
Appendix A: Revision History............................................................................................................................................................. 377
Appendix B: Device Differences......................................................................................................................................................... 377
Appendix C: Conversion Considerations ........................................................................................................................................... 378
Appendix D: Migration From Mid-Range to Enhanced Devices......................................................................................................... 378
Appendix E: Migration From High-End to Enhanced Devices............................................................................................................ 379
Index .................................................................................................................................................................................................. 381
On-Line Support................................................................................................................................................................................. 391
Systems Information and Upgrade Hot Line ...................................................................................................................................... 391
Reader Response .............................................................................................................................................................................. 392
PIC18F6525/6621/8525/8621 Product Identification System ............................................................................................................ 393

DS39612B-page 4   2005 Microchip Technology Inc.
                       PIC18F6525/6621/8525/8621

                                   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.

2005 Microchip Technology Inc.  DS39612B-page 5
PIC18F6525/6621/8525/8621

NOTES:

DS39612B-page 6             2005 Microchip Technology Inc.
                                 PIC18F6525/6621/8525/8621

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
PIC18F6525
PIC18F6621                                                Using combinations of on-chip and external
PIC18F8525                                                  memory, up to the 2-Mbyte limit
PIC18F8621
                                                            Using external Flash memory for reprogrammable
This family offers the advantages of all                      application code or large data tables
PIC18 microcontrollers namely, high computational
performance at an economical price with the addition      Using external RAM devices for storing large
of high-endurance Enhanced Flash program memory.              amounts of variable data
The PIC18F6525/6621/8525/8621 family also provides
an enhanced range of program memory options and            1.1.3 EASY MIGRATION
versatile analog features that make it ideal for complex,
high performance applications.                             Regardless of the memory size, all devices share the
                                                           same rich set of peripherals, allowing for a smooth
1.1 Key Features                                           migration path as applications grow and evolve.

1.1.1 EXPANDED MEMORY                                      The consistent pinout scheme used throughout the
                                                           entire family also aids in migrating to the next larger
The PIC18F6525/6621/8525/8621 family provides              device. This is true when moving between the 64-pin
ample room for application code and includes               members, between the 80-pin members, or even
members with 48 Kbytes or 64 Kbytes of code space.         Jumping From 64-pin To 80-pin Devices.

Other memory features are:                                 1.1.4 OTHER SPECIAL FEATURES

Data RAM and Data EEPROM: The PIC18F6525/                Communications: The PIC18F6525/6621/8525/
   6621/8525/8621 family also provides plenty of room         8621 family incorporates a range of serial communi-
   for application data. The devices have 3840 bytes of       cation peripherals, including 2 independent
   data RAM, as well as 1024 bytes of data EEPROM             Enhanced USARTs and a Master SSP module capa-
   for long term retention of nonvolatile data.               ble of both SPI and I2C (Master and Slave) modes of
                                                              operation. Also, for PIC18F6525/6621/8525/8621
Memory Endurance: The Enhanced Flash cells for              devices, one of the general purpose I/O ports can be
   both program memory and data EEPROM are rated              reconfigured as an 8-bit Parallel Slave Port for direct
   to last for many thousands of erase/write cycles          processor to processor communications.
   up to 100,000 for program memory and 1,000,000
   for EEPROM. Data retention without refresh is            CCP Modules: All devices in the family incorporate
   conservatively estimated to be greater than                two Capture/Compare/PWM (CCP) modules and
   40 years.                                                  three Enhanced CCP (ECCP) modules to maximize
                                                              flexibility in control applications. Up to four different
1.1.2 EXTERNAL MEMORY INTERFACE                               time bases may be used to perform several different
                                                              operations at once. Each of the three ECCPs offer
In the unlikely event that 64 Kbytes of program memory        up to four PWM outputs, allowing for a total of
is inadequate for an application, the PIC18F8525/8621         12 PWMs. The ECCPs also offer many beneficial
members of the family also implement an external              features, including polarity selection, Programmable
memory interface. This allows the controller's internal       Dead Time, Auto-Shutdown and Restart and
program counter to address a memory space of up to            Half-Bridge and Full-Bridge Output modes.
2 MBytes, permitting a level of data access that few
8-bit devices can claim.                                    Analog Features: All devices in the family feature
                                                              10-bit A/D converters with up to 16 input channels,
                                                              as well as the ability to perform conversions during
                                                              Sleep mode and auto-acquisition conversions. Also
                                                              included are dual analog comparators with
                                                              programmable input and output configuration, a
                                                              programmable Low-Voltage Detect module and a
                                                              Programmable Brown-out Reset module.

                                                            Self-programmability: These devices can write to
                                                              their own program memory spaces under internal
                                                              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.

2005 Microchip Technology Inc.                            DS39612B-page 7
PIC18F6525/6621/8525/8621

1.2 Details on Individual Family                     3. I/O ports (7 on PIC18F6525/6621 devices; 9 on
         Members                                           PIC18F8525/8621 devices).

The PIC18F6525/6621/8525/8621 devices are avail-     4. External program memory interface (present
able in 64-pin (PIC18F6525/6621) and 80-pin                only on PIC18F8525/8621 devices)
(PIC18F8525/8621) packages. They are differentiated
from each other in four ways:                        All other features for devices in the PIC18F6525/6621/
                                                     8525/8621 family are identical. These are summarized
1. Flash program memory (48 Kbytes for               in Table 1-1.
      PIC18F6525/8525 devices; 64 Kbytes for
      PIC18F6621/8621 devices).                      Block diagrams of the PIC18F6525/6621 and
                                                     PIC18F8525/8621 devices are provided in Figure 1-1
2. A/D channels (12 for PIC18F6525/6621              and Figure 1-2, respectively. The pinouts for these
      devices; 16 for PIC18F8525/8621 devices).      device families are listed in Table 1-2.

TABLE 1-1: PIC18F6525/6621/8525/8621 DEVICE FEATURES

Features                         PIC18F6525          PIC18F6621          PIC18F8525          PIC18F8621

Operating Frequency                 DC 40 MHz       DC 40 MHz        DC 40 MHz         DC 40 MHz
Program Memory (Bytes)                    48K                64K
Program Memory (Instructions)            24576             32768         48K                 64K
Data Memory (Bytes)                       3840              3840
Data EEPROM Memory (Bytes)                1024              1024         24576               32768
External Memory Interface                  No                 No
Interrupt Sources                          17                 17         3840                3840
I/O Ports
                                  Ports A, B, C, D,  Ports A, B, C, D,   1024                1024
Timers                                  E, F, G            E, F, G
Capture/Compare/PWM Modules                 5                  5         Yes                 Yes
Enhanced Capture/Compare/                   2                  2
PWM Module                                  3                  3         17                  17
Serial Communications
                                        MSSP,                            Ports A, B, C, D, E, Ports A, B, C, D, E,
Parallel Communications             Addressable
10-bit Analog-to-Digital Module     EUSART (2)                           F, G, H, J          F, G, H, J
Resets (and Delays)
                                          PSP                            5                   5
Programmable Low-Voltage         12 input channels
Detect                                                                   2                   2
Programmable Brown-out Reset         POR, BOR,
Instruction Set                  RESET Instruction,                      3                   3
Package
                                      Stack Full,       MSSP,               MSSP,               MSSP,
                                  Stack Underflow    Addressable         Addressable         Addressable
                                                     EUSART (2)          EUSART (2)          EUSART (2)
                                    (PWRT, OST)
                                          Yes        PSP                 PSP                 PSP

                                          Yes        12 input channels 16 input channels 16 input channels
                                   77 Instructions
                                    64-pin TQFP          POR, BOR,           POR, BOR,           POR, BOR,
                                                     RESET Instruction,  RESET Instruction,  RESET Instruction,

                                                          Stack Full,         Stack Full,         Stack Full,
                                                      Stack Underflow     Stack Underflow     Stack Underflow

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

                                                     Yes                 Yes                 Yes

                                                            Yes                 Yes                 Yes
                                                     77 Instructions     77 Instructions     77 Instructions
                                                      64-pin TQFP         80-pin TQFP         80-pin TQFP

DS39612B-page 8                                                           2005 Microchip Technology Inc.
                                                        PIC18F6525/6621/8525/8621

FIGURE 1-1:          PIC18F6525/6621 BLOCK DIAGRAM

                                                                                          Data Bus<8>

                     21 Table Pointer<21>                           Data Latch                         PORTA  RA0/AN0
                                                                                                       PORTB  RA1/AN1
                                             8          8             Data RAM                         PORTC  RA2/AN2/VREF-
                                                                     (3.8 Kbytes)                      PORTD  RA3/AN3/VREF+
                 21      inc/dec logic                                                                 PORTE  RA4/T0CKI
                                                                    Address Latch                      PORTF  RA5/AN4/LVDIN
Address Latch        20               PCLATU PCLATH                           12                       PORTG  OSC2/CLKO/RA6
Program Memory
                                      PCU PCH PCL                   Address<12>                               RB0/INT0/FLT0
(48/64 Kbytes)                       Program Counter                                                         RB1/INT1
   Data Latch                                              4        12          4                             RB2/INT2
                                                           BSR                  Bank 0, F                     RB3/INT3
                                                                     FSR0                                     RB4/KBI0
                                      31 Level Stack                 FSR1              12                     RB5/KBI1/PGM
                                                                     FSR2                                     RB6/KBI2/PGC
                                                                                                              RB7/KBI3/PGD
                         Table Latch                                   inc/dec
                                                           Decode logic                                       RC0/T1OSO/T13CKI
                                                                                                              RC1/T1OSI/ECCP2(1)/P2A(1)
                     16            8                                                                          RC2/ECCP1/P1A
                                                                                                              RC3/SCK/SCL
                                             ROM Latch                                                        RC4/SDI/SDA
                                                                                                              RC5/SDO
                                             IR                                                               RC6/TX1/CK1
                                                                                                              RC7/RX1/DT1
                                                                                   8
                                                                                                              RD7/PSP7 :RD0/PSP0
                                                                    PRODH PRODL
                                                                                                              RE0/RD/P2D
                      Instruction                                3  8 x 8 Multiply                            RE1/WR/P2C
                     Decode and                                                          8                    RE2/CS/P2B
                                                           BITOP                                              RE3/P3C
                        Control                                  8                                            RE4/P3B
                                                                                                              RE5/P1C
                                                                    W                      8                  RE6/P1B
                                                                                                              RE7/ECCP2(1)/P2A(1)
OSC2/CLKO                               Power-up                    8
OSC1/CLKI                                  Timer                                                              RF0/AN5
                Timing                                                                                        RF1/AN6/C2OUT
             Generation                 Oscillator                  8                                         RF2/AN7/C1OUT
                                      Start-up Timer                    ALU<8>                                RF3/AN8
                                                                                                              RF4/AN9
                                        Power-on                                8                             RF5/AN10/CVREF
                                           Reset                                                              RF6/AN11
             Precision                                                                                        RF7/SS
             Band Gap                  Watchdog
             Reference                    Timer                                                               RG0/ECCP3/P3A
                                                                                                              RG1/TX2/CK2
                                       Brown-out                                                              RG2/RX2/DT2
                                          Reset                                                               RG3/CCP4/P3D
                                                                                                              RG4/CCP5/P1D
                                       Test Mode                                                              MCLR/VPP/RG5(2)
                                          Select

                                   VDD, VSS  MCLR(2)

BOR     Data                       Timer1    Timer2        Timer3   Timer4         10-bit
LVD  EEPROM Timer0                                                                 ADC

Comparator ECCP1 ECCP2 ECCP3 CCP4 CCP5 MSSP EUSART1 EUSART2

Note 1: ECCP2/P2A are multiplexed with RC1 when CCP2MX is set, or RE7 when CCP2MX is not set.
         2: RG5 is multiplexed with MCLR and is only available when the MCLR Resets are disabled.

2005 Microchip Technology Inc.                                                                               DS39612B-page 9
PIC18F6525/6621/8525/8621

FIGURE 1-2:                                PIC18F8525/8621 BLOCK DIAGRAM

                                                                                                    Data Bus<8>          PORTA  RA0/AN0
                                                                                                                         PORTB  RA1/AN1
                                       21 Table Pointer<21>                                      Data Latch              PORTC  RA2/AN2/VREF-
                                                                                                                         PORTD  RA3/AN3/VREF+
                                                              8                      8           Data RAM                PORTE  RA4/T0CKI
                                                                                                 (3.8 Kbytes)            PORTF  RA5/AN4/LVDIN
                           21                  inc/dec logic                                                             PORTG  OSC2/CLKO/RA6

                                           20  PCLATU PCLATH                                     Address Latch                  RB0/INT0/FLT0
                                                                                                           12                   RB1/INT1
                                                                                                                                RB2/INT2
System Bus Interface                              PCU PCH PCL                                    Address<12>                    RB3/INT3/ECCP2(1)/P2A(1)
                                                  Program Counter                                                               RB4/KBI0
                      Address Latch                                                     4        12             4               RB5/KBI1/PGM
                      Program Memory                31 Level Stack                      BSR                  Bank0, F           RB6/KBI2/PGC
                                                                                                  FSR0                          RB7/KBI3/PGD
                       (48/64 Kbytes)                                                             FSR1               12
                                                                                                  FSR2                          RC0/T1OSO/T13CKI
                         Data Latch                                                                                             RC1/T1OSI/ECCP2(1)/P2A(1)
                                                                                                                                RC2/ECCP1/P1A
                                                                                        Decode   inc/dec                        RC3/SCK/SCL
                                                                                                  logic                         RC4/SDI/SDA
                                               Table Latch                                                                      RC5/SDO
                                                                                                                                RC6/TX1/CK1
                                       16      8                                                                                RC7/RX1/DT1

                                                              ROM Latch                                                         RD7/AD7/PSP7:
                                                                                                                                RD0/AD0/PSP0(4)
                                                                                 IR
                      AD15:AD0, A19:16(4)                                                                                       RE0/AD8/RD/P2D(4)
                                                                                                                                RE1/AD9/WR/P2C(4)
                                                                                                                8               RE2/AD10/CS/P2B(4)
                                                                                                                                RE3/AD11/P3C(2,4)
                                                                                                 PRODH PRODL                    RE4/AD12/P3B(2,4)
                                                                                                                                RE5/AD13/P1C(2,4)
                                  Instruction                                                 3  8 x 8 Multiply                 RE6/AD14/P1B(2,4)
                                 Decode and                                                                           8         RE7/AD15/ECCP2(1)/P2A(1,4)
                                                                                        BITOP
                                    Control                                                   8                                 RF0/AN5
                                                                                                                                RF1/AN6/C2OUT
                                                                                                 W                 8            RF2/AN7/C1OUT
                                                                                                                                RF3/AN8
                      OSC2/CLKO                     Power-up                                     8                              RF4/AN9
                      OSC1/CLKI                       Timer                                                                     RF5/AN10/CVREF
                                    Timing                                                                                      RF6/AN11
                                 Generation         Oscillator                                   8                              RF7/SS
                                                  Start-up Timer                                     ALU<8>
                                                                                                                                RG0/ECCP3/P3A
                                                    Power-on                                              8                     RG1/TX2/CK2
                                                      Reset                                                                     RG2/RX2/DT2
                                 Precision                                                                                      RG3/CCP4/P3D
                                 Band Gap          Watchdog                                                                     RG4/CCP5/P1D
                                 Reference            Timer                                                                     MCLR/VPP/RG5(3)

                                                   Brown-out                                                                    RH0/A16:RH3/A19(4)
                                                      Reset                                                                     RH4/AN12/P3C(2)
                                                                                                                                RH5/AN13/P3B(2)
                                                   Test Mode                                                                    RH6/AN14/P1C(2)
                                                      Select                                                                    RH7/AN15/P1B(2)

                                               VDD, VSS       MCLR(3)                                                           RJ0/ALE
                                                                                                                                RJ1/OE
                      BOR         Data         Timer1         Timer2                    Timer3   Timer4      10-bit      PORTH  RJ2/WRL
                      LVD      EEPROM Timer0                                                                  ADC        PORTJ  RJ3/WRH
                                                                                                                                RJ4/BA0
Comparator ECCP1 ECCP2 ECCP3 CCP4 CCP5 MSSP EUSART1 EUSART2                                                                     RJ5/CE
                                                                                                                                RJ6/LB
                                                                                                                                RJ7/UB

Note 1: ECCP2/P2A are multiplexed with RC1 when CCP2MX is set; with RE7 when CCP2MX is cleared and the device is configured in
                Microcontroller mode; or with RB3 when CCP2MX is cleared in all other program memory modes.

         2: P1B/P1C/P3B/P3C are multiplexed with RE6:RE3 when ECCPMX is set and with RH7:RH4 when ECCPMX is not set.
         3: RG5 is multiplexed with MCLR and is only available when the MCLR Resets are disabled.
         4: External memory interface pins are multiplexed with PORTD (AD7:AD0), PORTE (AD15:AD8) and PORTH (A19:A16).

DS39612B-page 10                                                                                                          2005 Microchip Technology Inc.
                                     PIC18F6525/6621/8525/8621

TABLE 1-2: PIC18F6525/6621/8525/8621 PINOUT I/O DESCRIPTIONS

Pin Name                     Pin Number              Pin  Buffer                          Description
                 PIC18F6X2X PIC18F8X2X              Type   Type

MCLR/VPP/RG5(9)                  7   9                                  Master Clear (input) or programming

                                                                        voltage (output).

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

                                                                        active-low Reset to the device.

VPP                                                 P     --            Programming voltage input.
RG5
                                                    I     ST            Digital 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    Analog = Analog input

     I = Input                                      O     = Output

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

Note 1: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX (CONFIG3H<0>) is not set (all

     Program Memory modes except Microcontroller).

2: Default assignment for ECCP2/P2A when CCP2MX is set (all devices).

3: External memory interface functions are only available on PIC18F8525/8621 devices.

4: Default assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is set and for

     all PIC18F6525/6621 devices.

5: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX is not set (Microcontroller mode).

6: PORTH and PORTJ (and their multiplexed functions) are only available on PIC18F8525/8621 devices.

7: Alternate assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is not set.

8: 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 ICSPTM modes. See parameter D001 for details.

9: RG5 is multiplexed with MCLR and is only available when the MCLR Resets are disabled.

2005 Microchip Technology Inc.                                                             DS39612B-page 11
PIC18F6525/6621/8525/8621

TABLE 1-2: PIC18F6525/6621/8525/8621 PINOUT I/O DESCRIPTIONS (CONTINUED)

     Pin Name                    Pin Number               Pin  Buffer                          Description
                     PIC18F6X2X PIC18F8X2X               Type   Type

                                                                             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 configured
     T0CKI
                                                                             as output.

                                                         I     ST            Timer0 external clock input.

RA5/AN4/LVDIN        27                 33
     RA5
     AN4                                                 I/O   TTL           Digital I/O.
     LVDIN
                                                         I Analog            Analog input 4.

                                                         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    Analog = Analog input

          I = Input                                      O     = Output

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

Note 1: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX (CONFIG3H<0>) is not set (all

          Program Memory modes except Microcontroller).

     2: Default assignment for ECCP2/P2A when CCP2MX is set (all devices).

     3: External memory interface functions are only available on PIC18F8525/8621 devices.

     4: Default assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is set and for

          all PIC18F6525/6621 devices.

     5: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX is not set (Microcontroller mode).

     6: PORTH and PORTJ (and their multiplexed functions) are only available on PIC18F8525/8621 devices.

     7: Alternate assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is not set.

     8: 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 ICSPTM modes. See parameter D001 for details.

     9: RG5 is multiplexed with MCLR and is only available when the MCLR Resets are disabled.

DS39612B-page 12                                                                             2005 Microchip Technology Inc.
                                     PIC18F6525/6621/8525/8621

TABLE 1-2: PIC18F6525/6621/8525/8621 PINOUT I/O DESCRIPTIONS (CONTINUED)

Pin Name                        Pin Number           Pin  Buffer                          Description
                    PIC18F6X2X PIC18F8X2X           Type   Type

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

RB0/INT0/FLT0                    48  58
     RB0
     INT0                                           I/O   TTL          Digital I/O.
     FLT0
                                                    I     ST           External interrupt 0.

                                                    I     ST           PWM Fault input for ECCP1.

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/ECCP2/P2A               45  55

RB3                                                 I/O   TTL          Digital I/O.

INT3                                                I/O   ST           External interrupt 3.
ECCP2(1)
                                                    I/O   ST           Enhanced Capture 2 input, Compare 2

                                                                       output, PWM2 output.

P2A(1)                                              O     --           ECCP2 output P2A.

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 ICSPTM 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     ST           Interrupt-on-change pin.

                                                    I/O   ST           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    Analog = Analog input

     I = Input                                      O     = Output

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

Note 1: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX (CONFIG3H<0>) is not set (all

     Program Memory modes except Microcontroller).

2: Default assignment for ECCP2/P2A when CCP2MX is set (all devices).

3: External memory interface functions are only available on PIC18F8525/8621 devices.

4: Default assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is set and for

     all PIC18F6525/6621 devices.

5: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX is not set (Microcontroller mode).

6: PORTH and PORTJ (and their multiplexed functions) are only available on PIC18F8525/8621 devices.

7: Alternate assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is not set.

8: 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 ICSPTM modes. See parameter D001 for details.

9: RG5 is multiplexed with MCLR and is only available when the MCLR Resets are disabled.

2005 Microchip Technology Inc.                                                               DS39612B-page 13
PIC18F6525/6621/8525/8621

TABLE 1-2: PIC18F6525/6621/8525/8621 PINOUT I/O DESCRIPTIONS (CONTINUED)

Pin Name                         Pin Number          Pin  Buffer                          Description
                     PIC18F6X2X PIC18F8X2X          Type   Type

                                                                       PORTC is a bidirectional I/O port.

RC0/T1OSO/T13CKI     30             36

RC0                                                 I/O   ST           Digital I/O.

T1OSO                                               O     --           Timer1 oscillator output.

T13CKI                                              I     ST           Timer1/Timer3 external clock input.

RC1/T1OSI/ECCP2/P2A  29             35

RC1                                                 I/O   ST           Digital I/O.

T1OSI                                               I     CMOS         Timer1 oscillator input.
ECCP2(2)
                                                    I/O   ST           Enhanced Capture 2 input, Compare 2

                                                                       output, PWM 2 output.

P2A(2)                                              O     --           ECCP2 output P2A.

RC2/ECCP1/P1A        33             43

RC2                                                 I/O   ST           Digital I/O.

ECCP1                                               I/O   ST           Enhanced Capture 1 input, Compare 1

                                                                       output, PWM 1 output.

P1A                                                 O     --           ECCP1 output P1A.

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

     SCL                                            I/O   ST           Synchronous serial clock input/output for

                                                                       SPITM mode.

                                                    I/O   ST           Synchronous serial clock input/output for
                                                                       I2CTM 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     --           USART1 asynchronous transmit.

                                                    I/O   ST           USART1 synchronous clock

                                                                       (see RX1/DT1).

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

                                                    I/O   ST           USART1 synchronous data

                                                                       (see TX1/CK1).

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

     ST = Schmitt Trigger input with CMOS levels    Analog = Analog input

     I = Input                                      O     = Output

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

Note 1: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX (CONFIG3H<0>) is not set (all

     Program Memory modes except Microcontroller).

2: Default assignment for ECCP2/P2A when CCP2MX is set (all devices).

3: External memory interface functions are only available on PIC18F8525/8621 devices.

4: Default assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is set and for

     all PIC18F6525/6621 devices.

5: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX is not set (Microcontroller mode).

6: PORTH and PORTJ (and their multiplexed functions) are only available on PIC18F8525/8621 devices.

7: Alternate assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is not set.

8: 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 ICSPTM modes. See parameter D001 for details.

9: RG5 is multiplexed with MCLR and is only available when the MCLR Resets are disabled.

DS39612B-page 14                                                                        2005 Microchip Technology Inc.
                                     PIC18F6525/6621/8525/8621

TABLE 1-2: PIC18F6525/6621/8525/8621 PINOUT I/O DESCRIPTIONS (CONTINUED)

Pin Name                  Pin Number            Pin  Buffer                               Description
              PIC18F6X2X PIC18F8X2X            Type   Type

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

RD0/AD0/PSP0                     58  72

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

RD1/AD1/PSP1                     55  69

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

RD2/AD2/PSP2                     54  68

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

RD3/AD3/PSP3                     53  67

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

RD4/AD4/PSP4                     52  66

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

RD5/AD5/PSP5                     51  65

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

RD6/AD6/PSP6                     50  64

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

RD7/AD7/PSP7                     49  63

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

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

ST = Schmitt Trigger input with CMOS levels    Analog = Analog input

I = Input                                      O     = Output

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

Note 1: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX (CONFIG3H<0>) is not set (all

Program Memory modes except Microcontroller).

2: Default assignment for ECCP2/P2A when CCP2MX is set (all devices).

3: External memory interface functions are only available on PIC18F8525/8621 devices.

4: Default assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is set and for

all PIC18F6525/6621 devices.

5: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX is not set (Microcontroller mode).

6: PORTH and PORTJ (and their multiplexed functions) are only available on PIC18F8525/8621 devices.

7: Alternate assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is not set.

8: 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 ICSPTM modes. See parameter D001 for details.

9: RG5 is multiplexed with MCLR and is only available when the MCLR Resets are disabled.

2005 Microchip Technology Inc.                                                           DS39612B-page 15
PIC18F6525/6621/8525/8621

TABLE 1-2: PIC18F6525/6621/8525/8621 PINOUT I/O DESCRIPTIONS (CONTINUED)

Pin Name                        Pin Number           Pin  Buffer                          Description
                    PIC18F6X2X PIC18F8X2X           Type   Type

                                                                        PORTE is a bidirectional I/O port.

RE0/AD8/RD/P2D      2               4

RE0                                                 I/O   ST            Digital I/O.
AD8(3)
                                                    I/O   TTL           External memory address/data 8.

RD                                                  I     TTL           Read control for Parallel Slave Port.

P2D                                                 O     --            ECCP2 output P2D.

RE1/AD9/WR/P2C      1               3

RE1                                                 I/O   ST            Digital I/O.
AD9(3)
                                                    I/O   TTL           External memory address/data 9.

WR                                                  I     TTL           Write control for Parallel Slave Port.

P2C                                                 O     ST            ECCP2 output P2C.

RE2/AD10/CS/P2B     64              78

RE2                                                 I/O   ST            Digital I/O.
AD10(3)
                                                    I/O   TTL           External memory address/data 10.

CS                                                  I     TTL           Chip select control for Parallel Slave Port.

P2B                                                 O     --            ECCP2 output P2B.

RE3/AD11/P3C        63              77

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

                                                    O     --            ECCP3 output P3C.

RE4/AD12/P3B        62              76

     RE4                                            I/O   ST            Digital I/O.
     AD12(3)
     P3B(4)                                         I/O   TTL           External memory address/data 12.

                                                    O     --            ECCP3 output P3B.

RE5/AD13/P1C        61              75

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

                                                    O     --            ECCP1 output P1C.

RE6/AD14/P1B        60              74

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

                                                    O     --            ECCP1 output P1B.

RE7/AD15/ECCP2/P2A  59              73

RE7                                                 I/O   ST            Digital I/O.
AD15(3)
ECCP2(5)                                            I/O   TTL           External memory address/data 15.

                                                    I/O   ST            Enhanced Capture 2 input, Compare 2

                                                                        output, PWM 2 output.

P2A(5)                                              O     --            ECCP2 output P2A.

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

     ST = Schmitt Trigger input with CMOS levels    Analog = Analog input

     I = Input                                      O     = Output

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

Note 1: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX (CONFIG3H<0>) is not set (all

     Program Memory modes except Microcontroller).

2: Default assignment for ECCP2/P2A when CCP2MX is set (all devices).

3: External memory interface functions are only available on PIC18F8525/8621 devices.

4: Default assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is set and for

     all PIC18F6525/6621 devices.

5: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX is not set (Microcontroller mode).

6: PORTH and PORTJ (and their multiplexed functions) are only available on PIC18F8525/8621 devices.

7: Alternate assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is not set.

8: 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 ICSPTM modes. See parameter D001 for details.

9: RG5 is multiplexed with MCLR and is only available when the MCLR Resets are disabled.

DS39612B-page 16                                                                        2005 Microchip Technology Inc.
                                        PIC18F6525/6621/8525/8621

TABLE 1-2: PIC18F6525/6621/8525/8621 PINOUT I/O DESCRIPTIONS (CONTINUED)

Pin Name                         Pin Number               Pin  Buffer                      Description
                     PIC18F6X2X PIC18F8X2X               Type   Type

                                                                             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           SPITM slave select input.

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

          ST = Schmitt Trigger input with CMOS levels    Analog = Analog input

          I = Input                                      O     = Output

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

Note 1: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX (CONFIG3H<0>) is not set (all

          Program Memory modes except Microcontroller).

2: Default assignment for ECCP2/P2A when CCP2MX is set (all devices).

3: External memory interface functions are only available on PIC18F8525/8621 devices.

4: Default assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is set and for

          all PIC18F6525/6621 devices.

5: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX is not set (Microcontroller mode).

6: PORTH and PORTJ (and their multiplexed functions) are only available on PIC18F8525/8621 devices.

7: Alternate assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is not set.

8: 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 ICSPTM modes. See parameter D001 for details.

9: RG5 is multiplexed with MCLR and is only available when the MCLR Resets are disabled.

2005 Microchip Technology Inc.                                                                    DS39612B-page 17
PIC18F6525/6621/8525/8621

TABLE 1-2: PIC18F6525/6621/8525/8621 PINOUT I/O DESCRIPTIONS (CONTINUED)

     Pin Name                 Pin Number             Pin  Buffer                               Description
                  PIC18F6X2X PIC18F8X2X             Type   Type

                                                                            PORTG is a bidirectional I/O port.

RG0/ECCP3/P3A     3                 5

RG0                                                 I/O   ST                Digital I/O.

ECCP3                                               I/O   ST                Enhanced Capture 3 input, Compare 3

                                                                            output, PWM 3 output.

P3A                                                 O     --                ECCP3 output P3A.

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

                                                    I/O   ST                USART2 synchronous clock

                                                                            (see RX2/DT2).

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

                                                    I/O   ST                USART2 synchronous data

                                                                            (see TX2/CK2).

RG3/CCP4/P3D      6                 8

RG3                                                 I/O   ST                Digital I/O.

CCP4                                                I/O   ST                Capture 4 input, Compare 4 output,

                                                                            PWM 4 output.

P3D                                                 O     --                ECCP3 output P3D.

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

     P1D                                            I/O   ST                Capture 5 input, Compare 5 output,

                                                                            PWM 5 output.

                                                    O     --                ECCP1 output P1D.

RG5               7                 9               --    -- See MCLR/VPP/RG5 pin.

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

     ST = Schmitt Trigger input with CMOS levels    Analog = Analog input

     I = Input                                      O     = Output

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

Note 1: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX (CONFIG3H<0>) is not set (all

     Program Memory modes except Microcontroller).

     2: Default assignment for ECCP2/P2A when CCP2MX is set (all devices).

     3: External memory interface functions are only available on PIC18F8525/8621 devices.

     4: Default assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is set and for

     all PIC18F6525/6621 devices.

     5: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX is not set (Microcontroller mode).

     6: PORTH and PORTJ (and their multiplexed functions) are only available on PIC18F8525/8621 devices.

     7: Alternate assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is not set.

     8: 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 ICSPTM modes. See parameter D001 for details.

     9: RG5 is multiplexed with MCLR and is only available when the MCLR Resets are disabled.

DS39612B-page 18                                                                             2005 Microchip Technology Inc.
                                        PIC18F6525/6621/8525/8621

TABLE 1-2: PIC18F6525/6621/8525/8621 PINOUT I/O DESCRIPTIONS (CONTINUED)

Pin Name                         Pin Number               Pin  Buffer                     Description
                     PIC18F6X2X PIC18F8X2X               Type   Type

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

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/P3C                     --     22

     RH4                                                 I/O   ST        Digital I/O.

     AN12                                                I Analog        Analog input 12.
     P3C(7)
                                                         O     --        ECCP3 output P3C.

RH5/AN13/P3B                     --     21

     RH5                                                 I/O   ST        Digital I/O.

     AN13                                                I Analog        Analog input 13.
     P3B(7)
                                                         O     --        ECCP3 output P3B.

RH6/AN14/P1C                     --     20

     RH6                                                 I/O   ST        Digital I/O.

     AN14                                                I Analog        Analog input 14.
     P1C(7)
                                                         O     --        ECCP1 output P1C.

RH7/AN15/P1B                     --     19

     RH7                                                 I/O   ST        Digital I/O.

     AN15                                                I Analog        Analog input 15.
     P1B(7)
                                                         O     --        ECCP1 output P1B.

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

          ST = Schmitt Trigger input with CMOS levels    Analog = Analog input

          I = Input                                      O     = Output

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

Note 1: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX (CONFIG3H<0>) is not set (all

          Program Memory modes except Microcontroller).

2: Default assignment for ECCP2/P2A when CCP2MX is set (all devices).

3: External memory interface functions are only available on PIC18F8525/8621 devices.

4: Default assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is set and for

          all PIC18F6525/6621 devices.

5: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX is not set (Microcontroller mode).

6: PORTH and PORTJ (and their multiplexed functions) are only available on PIC18F8525/8621 devices.

7: Alternate assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is not set.

8: 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 ICSPTM modes. See parameter D001 for details.

9: RG5 is multiplexed with MCLR and is only available when the MCLR Resets are disabled.

2005 Microchip Technology Inc.                                                                  DS39612B-page 19
PIC18F6525/6621/8525/8621

TABLE 1-2: PIC18F6525/6621/8525/8621 PINOUT I/O DESCRIPTIONS (CONTINUED)

     Pin Name                    Pin Number               Pin  Buffer                          Description
                     PIC18F6X2X PIC18F8X2X               Type   Type

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

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

RJ1/OE                                                   O     TTL           External memory address latch enable.
     RJ1
     OE              --                 61

                                                         I/O   ST            Digital I/O.

                                                         O     TTL           External memory output enable.

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

RJ3/WRH                                                  O     TTL           External memory write low control.
     RJ3
     WRH             --                 59

                                                         I/O   ST            Digital I/O.

                                                         O     TTL           External memory write high control.

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

RJ5/CE                                                   O     TTL           System bus byte address 0 control.
     RJ5
     CE              --                 40

                                                         I/O   ST            Digital I/O

                                                         O     TTL           External memory access indicator.

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

RJ7/UB                                                   O     TTL           External memory low byte select.
     RJ7
     UB              --                 42

                                                         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             48, 71
AVSS(8)                                                  P     -- Ground reference for analog modules.
AVDD(8)                20                 26
                       19                 25             P     -- Positive supply for analog modules.

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

          ST = Schmitt Trigger input with CMOS levels    Analog = Analog input

          I = Input                                      O     = Output

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

Note 1: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX (CONFIG3H<0>) is not set (all

          Program Memory modes except Microcontroller).

     2: Default assignment for ECCP2/P2A when CCP2MX is set (all devices).

     3: External memory interface functions are only available on PIC18F8525/8621 devices.

     4: Default assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is set and for

          all PIC18F6525/6621 devices.

     5: Alternate assignment for ECCP2/P2A in PIC18F8525/8621 devices when CCP2MX is not set (Microcontroller mode).

     6: PORTH and PORTJ (and their multiplexed functions) are only available on PIC18F8525/8621 devices.

     7: Alternate assignment for P1B/P1C/P3B/P3C for PIC18F8525/8621 devices when ECCPMX (CONFIG3H<1>) is not set.

     8: 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 ICSPTM modes. See parameter D001 for details.

     9: RG5 is multiplexed with MCLR and is only available when the MCLR Resets are disabled.

DS39612B-page 20                                                                             2005 Microchip Technology Inc.
                                        PIC18F6525/6621/8525/8621

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

The PIC18F6525/6621/8525/8621 devices can be              C1(1)        OSC1
operated in twelve different oscillator modes. The user
can program four configuration bits (FOSC3, FOSC2,                     XTAL     RF(3)                 To
FOSC1 and FOSC0) to select one of these eight                                                         Internal
modes:                                                                                                Logic

1. LP      Low-Power Crystal                                           RS(2)                 Sleep

2. XT      Crystal/Resonator                              C2(1)        OSC2     PIC18F6X2X/8X2X

3. HS      High-Speed Crystal/Resonator

4. RC      External Resistor/Capacitor                    Note 1:      See Table 2-1 and Table 2-2 for
                                                                   2:  recommended values of C1 and C2.
5. EC      External Clock                                          3:  A series resistor (RS) may be required for
                                                                       AT strip cut crystals.
6. ECIO    External Clock with I/O pin                                 RF varies with the oscillator mode chosen.
           enabled

7. HS+PLL  High-Speed Crystal/Resonator
           with PLL enabled

8. RCIO    External Resistor/Capacitor with               TABLE 2-1: CAPACITOR SELECTION FOR
           I/O pin enabled                                                     CERAMIC RESONATORS

9. ECIO+SPLL External Clock with software                                     Ranges Tested:
                        controlled PLL

10. ECIO+PLL External Clock with PLL and I/O              Mode         Freq     C1                    C2
                        pin enabled
                                                          XT           455 kHz 68-100 pF 68-100 pF
11. HS+SPLL High-Speed Crystal/Resonator
                        with software control                          2.0 MHz  15-68 pF 15-68 pF

12. RCIO   External Resistor/Capacitor with                            4.0 MHz  15-68 pF 15-68 pF
           I/O pin enabled
                                                          HS           8.0 MHz  10-68 pF 10-68 pF

                                                                       16.0 MHz 10-22 pF 10-22 pF

2.2 Crystal Oscillator/Ceramic                            These values are for design guidance only.
         Resonators                                       See notes following this table.

In XT, LP, HS, HS+PLL or HS+SPLL Oscillator modes, a                   Resonators Used:
crystal or ceramic resonator is connected to the OSC1
and OSC2 pins to establish oscillation. Figure 2-1 shows        2 kHz                         8 MHz
the pin connections.                                            4 MHz                         16 MHz

The PIC18F6525/6621/8525/8621 oscillator design           Note 1: Higher capacitance increases the stability
requires the use of a parallel cut crystal.                           of the oscillator but also increases the
                                                                      start-up time.
Note:     Use of a series cut crystal may give a
          frequency out of the crystal manufacturers             2: When operating below 3V VDD, or when
          specifications.                                             using certain ceramic resonators at any
                                                                      voltage, it may be necessary to use high
                                                                      gain HS mode, try a lower frequency
                                                                      resonator or switch to a crystal oscillator.

                                                                 3: Since each resonator/crystal has its own
                                                                      characteristics, the user should consult the
                                                                      resonator/crystal manufacturer for appro-
                                                                      priate values of external components or
                                                                      verify oscillator performance.

2005 Microchip Technology Inc.                                                               DS39612B-page 21
PIC18F6525/6621/8525/8621

TABLE 2-2: CAPACITOR SELECTION FOR                            2.3 RC Oscillator
                     CRYSTAL OSCILLATOR
                                                              For timing insensitive applications, the "RC" and
                  Ranges Tested:                              "RCIO" device options offer additional cost savings.
                                                              The RC oscillator frequency is a function of the supply
Mode         Freq       C1                C2                  voltage, the resistor (REXT) and capacitor (CEXT)
                                                              values and the operating temperature. In addition to
LP           32.0 kHz   33 pF             33 pF               this, the oscillator frequency will vary from unit to unit
                                                              due to normal process parameter variation. Further-
XT           200 kHz 47-68 pF 47-68 pF                        more, the difference in lead frame capacitance
                                                              between package types will also affect the oscillation
             1.0 MHz    15 pF             15 pF               frequency, especially for low CEXT values. The user
                                                              also needs to take into account variation due to
             4.0 MHz    15 pF             15 pF               tolerance of external R and C components used.
                                                              Figure 2-3 shows how the R/C combination is
HS           4.0 MHz    15 pF             15 pF               connected.

             8.0 MHz 15-33 pF 15-33 pF                        In the RC Oscillator mode, the oscillator frequency
                                                              divided by 4 is available on the OSC2 pin. This signal
      20.0 MHz 15-33 pF 15-33 pF                              may be used for test purposes or to synchronize other
                                                              logic.
      25.0 MHz 15-33 pF 15-33 pF

These values are for design guidance only.
See notes following this table.

                  Crystals Used

    32 kHz                        4 MHz                       FIGURE 2-3:    RC OSCILLATOR MODE
    200 kHz                       8 MHz
     1 MHz                        20 MHz                                VDD

    Note 1: Higher capacitance increases the stability        REXT
                of the oscillator but also increases the
                start-up time.                                               OSC1  Internal
                                                                                    Clock
           2: RS (see Figure 2-1) may be required in
                HS mode, as well as XT mode, to avoid         CEXT                                PIC18F6X2X/8X2X
                overdriving crystals with low drive level     VSS
                specification.                                                           OSC2/CLKO
                                                                             FOSC/4
           3: Since each resonator/crystal has its own
                characteristics, the user should consult the  Recommended values: 3 k  REXT  100 k
                resonator/crystal manufacturer for appro-                                       CEXT > 20 pF
                priate values of external components or
                verify oscillator performance.                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.

FIGURE 2-2:             EXTERNAL CLOCK INPUT
                        OPERATION (HS, XT OR
                        LP OSCILLATOR
                        CONFIGURATION)

Clock from              OSC1
Ext. System
                          PIC18F6X2X/8X2X
                  Open
                        OSC2

DS39612B-page 22                                                              2005 Microchip Technology Inc.
                                          PIC18F6525/6621/8525/8621

2.4 External Clock Input                                2.5 Phase Locked Loop (PLL)

The EC, ECIO, EC+PLL and EC+SPLL Oscillator             A Phase Locked Loop circuit is provided as a
modes require an external clock source to be con-       programmable option for users that want to multiply
nected to the OSC1 pin. The feedback device between     the frequency of the incoming oscillator signal by 4.
OSC1 and OSC2 is turned off in these modes to save      For an input clock frequency of 10 MHz, the internal
current. There is a maximum 1.5 s start-up required    clock frequency will be multiplied to 40 MHz. This is
after a Power-on Reset or wake-up from Sleep mode.      useful for customers who are concerned with EMI due
                                                        to high-frequency crystals.
In the EC Oscillator mode, the oscillator frequency
divided by 4 is available on the OSC2 pin. This signal  The PLL can only be enabled when the oscillator
may be used for test purposes or to synchronize other   configuration bits are programmed for High-Speed
logic. Figure 2-4 shows the pin connections for the EC  Oscillator or External Clock mode. If they are
Oscillator mode.                                        programmed for any other mode, the PLL is not
                                                        enabled and the system clock will come directly from
FIGURE 2-4:             EXTERNAL CLOCK INPUT            OSC1. There are two types of PLL modes: Software
                        OPERATION                       Controlled PLL and Configuration Bits Controlled PLL.
                        (EC CONFIGURATION)              In Software Controlled PLL mode, PIC18F6525/6621/
                                                        8525/8621 executes at regular clock frequency after all
Clock from              OSC1                            Reset conditions. During execution, the application can
Ext. System                                             enable PLL and switch to 4x clock frequency operation
                          PIC18F6X2X/8X2X               by setting the PLLEN bit in the OSCCON register. In
                FOSC/4                                  Configuration Bits Controlled PLL, the PLL operation
                        OSC2                            cannot be changed "on-the-fly". To enable or disable it,
                                                        the controller must either cycle through a Power-on
The ECIO Oscillator mode functions like the EC mode     Reset, or switch the clock source from the main
except that the OSC2 pin becomes an additional          oscillator to the Timer1 oscillator and back again (see
general purpose I/O pin. The I/O pin becomes bit 6 of   Section 2.6 "Oscillator Switching Feature" for
PORTA (RA6). Figure 2-5 shows the pin connections       details).
for the ECIO Oscillator mode.
                                                        The type of PLL is selected by programming
FIGURE 2-5:             EXTERNAL CLOCK INPUT            FOSC<3:0> configuration bits in the CONFIG1H
                        OPERATION                       Configuration register. The oscillator mode is specified
                        (ECIO CONFIGURATION)            during device programming.

Clock from              OSC1                            A PLL lock timer is used to ensure that the PLL has
Ext. System                                             locked before device execution starts. The PLL lock
                           PIC18F6X2X/8X2X              timer has a time-out that is called TPLL.
                  RA6
                        I/O (OSC2)

FIGURE 2-6:             PLL BLOCK DIAGRAM

             PLL Enable                   Loop                       VCO
                                  Phase
                                          Filter
                              Comparator
                        FIN                                               MUX  SYSCLK

                              FOUT

                                                        Divide by 4

2005 Microchip Technology Inc.                                                DS39612B-page 23
PIC18F6525/6621/8525/8621

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

FIGURE 2-7:       DEVICE CLOCK SOURCES

                    OSC2    PIC18F6X2X/8X2X                 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

DS39612B-page 24                                                                  2005 Microchip Technology Inc.
                                      PIC18F6525/6621/8525/8621

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 bits,                    by setting the T1OSCEN bit in the Timer1
SCS1:SCS0 (OSCCON<1:0>), control the clock                         Control register (T1CON). If the Timer1
switching. When the SCS0 bit is `0', the system clock              oscillator is not enabled, then any write to
source comes from the main oscillator that is selected             the SCS0 bit will be ignored (SCS0 bit
by the FOSC configuration bits in the CONFIG1H                     forced cleared) and the main oscillator will
Configuration register. When the SCS0 bit is set, the              continue to be the system clock source.
system clock source will come from the Timer1
oscillator. The SCS0 bit is cleared on all forms of Reset.

When the FOSC bits are programmed for Software PLL
mode, the SCS1 bit can be used to select between
primary oscillator/clock and PLL output. The SCS1 bit
will only have an effect on the system clock if the PLL
is enabled (PLLEN = 1) and locked (LOCK = 1), else it
will be forced cleared. When programmed with
Configuration Controlled PLL, the SCS1 bit will be
forced clear.

REGISTER 2-1:  OSCCON: OSCILLATOR CONTROL REGISTER

               U-0               U-0  U-0                   U-0    R/W-0    R/W-0   R/W-0   R/W-0
                                                                          PLLEN(1)  SCS1   SCS0(2)
               --                --   --                    --     LOCK
                                                                                                 bit 0
               bit 7

bit 7-4        Unimplemented: Read as `0'
bit 3
bit 2          LOCK: Phase Lock Loop Lock Status bit
bit 1          1 = Phase Lock Loop output is stable as system clock
               0 = Phase Lock Loop output is not stable and output cannot be used as system clock
bit 0          PLLEN: Phase Lock Loop Enable bit(1)
               1 = Enable Phase Lock Loop output as system clock
               0 = Disable Phase Lock Loop

               SCS1: System Clock Switch bit 1

               When PLLEN and LOCK bits are set:
               1 = Use PLL output
               0 = Use primary oscillator/clock input pin
               When PLLEN or LOCK bit is cleared:
               Bit is forced clear.
               SCS0: System Clock Switch bit 0(2)
               When OSCSEN configuration bit = 0 and T1OSCEN bit = 1:
               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.

               Note 1: PLLEN bit is forced set when configured for ECIO+PLL and HS+PLL modes. This
                           bit is writable for ECIO+SPLL and HS+SPLL modes only; forced cleared for all other
                           oscillator modes.

                      2: The setting of SCS0 = 1 supersedes SCS1 = 1.

               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

2005 Microchip Technology Inc.                                                     DS39612B-page 25
PIC18F6525/6621/8525/8621

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.
PIC18F6525/6621/8525/8621 devices contain circuitry                          The Timer1 oscillator is assumed to be running all the
to prevent "glitches" when switching between oscillator                      time. After the SCS0 bit is set, the processor is frozen at
sources. Essentially, the circuitry waits for eight rising                   the next occurring Q1 cycle. After eight synchronization
edges of the clock source that the processor is switch-                      cycles are counted from the Timer1 oscillator, operation
ing to. This ensures that the new clock source is stable                     resumes. No additional delays are required after the
and that its pulse width will not be less than the shortest                  synchronization cycles.
pulse width of the two clock sources.

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

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

T1OSI                                  1   234               5678
OSC1
                                                       TSCS

         Internal   TOSC         TDLY
         System          PC
                                                       PC + 2                                           PC + 4
           Clock
             SCS
(OSCCON<0>)
       Program
        Counter

Note: TDLY is the delay from SCS high to first count of transition circuit.

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

                                                 TOST

          Internal                                     TOSC
  System Clock                                                          PC + 2

              SCS
(OSCCON<0>)

Program                 PC                                                                                      PC + 6

Counter

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

DS39612B-page 26                                                                       2005 Microchip Technology Inc.
                                                      PIC18F6525/6621/8525/8621

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

FIGURE 2-10:           TIMING FOR TRANSITION BETWEEN TIMER1 AND OSC1
                       (HS WITH PLL ACTIVE, SCS1 = 1)

              Q4       Q1                                            TT1P  Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4

              T1OSI        TOST                 TPLL
               OSC1
                                                             TOSC    TSCS
         PLL Clock
                Input                                                1 23 4 56 78

  Internal System                                            PC + 2                PC + 4
               Clock
                 SCS

  (OSCCON<0>)
Program Counter PC

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

If the main oscillator is configured for EC mode with PLL
active, only PLL time-out (TPLL) will occur. The PLL time-
out is typically 2 ms and allows the PLL to lock to the
main oscillator frequency. A timing diagram, indicating
the transition from the Timer1 oscillator to the main
oscillator for EC with PLL active, is shown in Figure 2-11.

FIGURE 2-11:           TIMING FOR TRANSITION BETWEEN TIMER1 AND OSC1
                       (EC WITH PLL ACTIVE, SCS1 = 1)

              Q4       Q1                                            TT1P  Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4

T1OSI
OSC1

                                 TPLL

                                                             TOSC    TSCS

         PLL Clock                                                   1 2 34 56 78
                Input
                                                             PC + 2                PC + 4
  Internal System
               Clock

                 SCS
  (OSCCON<0>)

Program Counter PC

2005 Microchip Technology Inc.                                                    DS39612B-page 27
PIC18F6525/6621/8525/8621

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

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

                T1OSI  Q3          Q4            Q1        TT1P                Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
                 OSC1
                                                           TOSC
                                                           12 34 5 6 7 8

Internal System
             Clock

              SCS
(OSCCON<0>)

Program                    PC                                            TSCS                       PC + 4
Counter                                                              PC + 2

Note: RC Oscillator mode assumed.

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

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

Oscillator Mode                        OSC1 Pin                                OSC2 Pin

RC                     Floating, external resistor should pull high  At logic low
RCIO                   Floating, external resistor should pull high  Configured as PORTA, bit 6
ECIO                   Floating                                      Configured as PORTA, bit 6
EC                     Floating                                      At logic low
LP, XT and HS          Feedback inverter disabled at                 Feedback inverter disabled at
                       quiescent voltage level                       quiescent voltage level

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

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

DS39612B-page 28                                                                2005 Microchip Technology Inc.
                                                 PIC18F6525/6621/8525/8621

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

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

                 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.

2005 Microchip Technology Inc.                                                   DS39612B-page 29
PIC18F6525/6621/8525/8621

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

A Power-on Reset pulse is generated on-chip when             The Oscillator Start-up Timer (OST) provides a 1024
VDD rise is detected. To take advantage of the POR           oscillator cycle (from OSC1 input) delays 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
(voltage, 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 pro-
FIGURE 3-2:          EXTERNAL POWER-ON                       vide a fixed time-out that is sufficient for the PLL to lock
                     RESET CIRCUIT (FOR                      to the main oscillator frequency. This PLL lock time-out
                     SLOW VDD POWER-UP)                      (TPLL) is typically 2 ms and follows the oscillator
                                                             start-up time-out.
             VDD
                                                             3.5 Brown-out Reset (BOR)
D            R
                                                             A configuration bit, BOR, 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
                                PIC18F6X2X/8X2X              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
         2:  only if the VDD power-up slope is too slow.     BVDD. If the Power-up Timer is enabled, it will be
         3:  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
                                                             (parameter 33). If VDD drops below BVDD while the
             R < 40 k is recommended to make sure            Power-up Timer is running, the chip will go back into a
             that the voltage drop across R does not         Brown-out Reset and the Power-up Timer will be
             violate the device's electrical specification.  initialized. Once VDD rises above BVDD, the Power-up
                                                             Timer will execute the additional time delay.
             R1 = 1 k to 10 k will limit any current
             flowing into MCLR from external capacitor       3.6 Time-out Sequence
             C in the event of MCLR/VPP pin breakdown,
             due to Electrostatic Discharge (ESD) or         On power-up, the time-out sequence is as follows:
             Electrical 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            Figure 3-3, Figure 3-4, Figure 3-5, Figure 3-6 and
Power-up Timer operates on an internal RC oscillator.        Figure 3-7 depict time-out sequences on 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               Since the time-outs occur from the POR pulse, the
acceptable level. A configuration bit is provided to         time-outs will expire if MCLR is kept low long enough.
enable/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 PIC18F6525/6621/8525/
to VDD, temperature and process variation. See DC            8621 device 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.

DS39612B-page 30                                              2005 Microchip Technology Inc.
                                            PIC18F6525/6621/8525/8621

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 + 2 ms 1024 TOSC + 2 ms  72 ms(2) + 1024 TOSC + 2 ms           1024 TOSC + 2 ms
                                                                       72 ms(2) + 1024 TOSC                  1024 TOSC
HS, XT, LP         72 ms + 1024 TOSC                 1024 TOSC                  72 ms(2)                      1.5 s(3)
                                                                                72 ms(2)                          --
EC                               72 ms               1.5 s

External RC                      72 ms               --

Note 1:      2 ms is the nominal time required for the 4x PLL to lock.
         2:  72 ms is the nominal power-up timer delay, 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(1)

                   R/W-0         U-0        U-0             R/W-1 R/W-1 R/W-1                           R/W-0  R/W-0
                                                                                                         POR    BOR
                   IPEN              --     --               RI   TO     PD
                                                                                                                    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          RI TO PD POR BOR STKFUL STKUNF
                                            Counter

Power-on Reset                                       0000h      111 0            0                      u      u

MCLR Reset during normal operation                   0000h      uuu u            u                      u      u

Software Reset during normal operation               0000h      0uu u            u                      u      u

Stack Full Reset during normal operation             0000h      uuu u            u                      u      1

Stack Underflow Reset during normal                  0000h      uuu u            u                      1      u
operation

MCLR Reset during Sleep                              0000h      u10 u            u                      u      u

WDT Reset                                            0000h      101 u            u                      u      u

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

Brown-out Reset                                      0000h      111 1            0                      u      u
Interrupt Wake-up from Sleep
                                            PC + 2(1) u 1 0           u          u                      u      u

Legend: u = unchanged, x = unknown

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 (0008h or 0018h).

2005 Microchip Technology Inc.                                                                         DS39612B-page 31
PIC18F6525/6621/8525/8621

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        PIC18F6X2X PIC18F8X2X     ---0 0000        ---0 0000          ---0 uuuu(3)
TOSH        PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu(3)
TOSL        PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu(3)
STKPTR      PIC18F6X2X PIC18F8X2X     00-0 0000        uu-0 0000          uu-u uuuu(3)

PCLATU      PIC18F6X2X PIC18F8X2X     ---0 0000        ---0 0000          ---u uuuu

PCLATH      PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu
PCL         PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000            PC + 2(2)

TBLPTRU     PIC18F6X2X PIC18F8X2X     --00 0000        --00 0000          --uu uuuu

TBLPTRH     PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

TBLPTRL     PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

TABLAT      PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

PRODH       PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu

PRODL       PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu
INTCON      PIC18F6X2X PIC18F8X2X     0000 000x        0000 000u          uuuu uuuu(1)
INTCON2     PIC18F6X2X PIC18F8X2X     1111 1111        1111 1111          uuuu uuuu(1)
INTCON3     PIC18F6X2X PIC18F8X2X     1100 0000        1100 0000          uuuu uuuu(1)

INDF0       PIC18F6X2X PIC18F8X2X     N/A              N/A                N/A

POSTINC0 PIC18F6X2X PIC18F8X2X        N/A              N/A                N/A

POSTDEC0 PIC18F6X2X PIC18F8X2X        N/A              N/A                N/A

PREINC0     PIC18F6X2X PIC18F8X2X     N/A              N/A                N/A

PLUSW0      PIC18F6X2X PIC18F8X2X     N/A              N/A                N/A

FSR0H       PIC18F6X2X PIC18F8X2X     ---- 0000        ---- 0000          ---- uuuu

FSR0L       PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu

WREG        PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu

INDF1       PIC18F6X2X PIC18F8X2X     N/A              N/A                N/A

POSTINC1 PIC18F6X2X PIC18F8X2X        N/A              N/A                N/A

POSTDEC1 PIC18F6X2X PIC18F8X2X        N/A              N/A                N/A

PREINC1     PIC18F6X2X PIC18F8X2X     N/A              N/A                N/A

PLUSW1      PIC18F6X2X PIC18F8X2X     N/A              N/A                N/A

FSR1H       PIC18F6X2X PIC18F8X2X     ---- 0000        ---- 0000          ---- 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:
        2:  One or more bits in the INTCONx or PIRx registers will be affected (to cause wake-up).
            When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the PC is loaded with the interrupt
        3:  vector (0008h or 0018h).
            When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the TOSU, TOSH and TOSL are
        4:  updated with the current value of the PC. The STKPTR is modified to point to the next location in the
        5:  hardware stack.
            See Table 3-2 for Reset value for specific condition.
        6:  Bit 6 of PORTA, LATA and TRISA are enabled in ECIO and RCIO Oscillator modes only. In all other
        7:  oscillator modes, they are disabled and read `0'.
        8:  Bit 6 of PORTA, LATA and TRISA are not available on all devices. When unimplemented, they are read `0'.
        9:  If MCLR function is disabled, PORTG<5> is a read-only bit.

            Enabled only in Microcontroller mode for PIC18F8525/8621 devices.

            The MEMCON register is unimplemented and reads all `0's when the device is in Microcontroller mode.

DS39612B-page 32                                             2005 Microchip Technology Inc.
                                 PIC18F6525/6621/8525/8621

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

FSR1L       PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu                    uuuu uuuu

BSR         PIC18F6X2X PIC18F8X2X  ---- 0000        ---- 0000                    ---- uuuu

INDF2       PIC18F6X2X PIC18F8X2X  N/A                                      N/A  N/A

POSTINC2 PIC18F6X2X PIC18F8X2X     N/A                                      N/A  N/A

POSTDEC2 PIC18F6X2X PIC18F8X2X     N/A                                      N/A  N/A

PREINC2     PIC18F6X2X PIC18F8X2X  N/A                                      N/A  N/A

PLUSW2      PIC18F6X2X PIC18F8X2X  N/A                                      N/A  N/A

FSR2H       PIC18F6X2X PIC18F8X2X  ---- 0000        ---- 0000                    ---- uuuu

FSR2L       PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu                    uuuu uuuu

STATUS      PIC18F6X2X PIC18F8X2X  ---x xxxx        ---u uuuu                    ---u uuuu

TMR0H       PIC18F6X2X PIC18F8X2X  0000 0000        uuuu uuuu                    uuuu uuuu

TMR0L       PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu                    uuuu uuuu

T0CON       PIC18F6X2X PIC18F8X2X  1111 1111        1111 1111                    uuuu uuuu

OSCCON      PIC18F6X2X PIC18F8X2X  ---- 0000        ---- 0000                    ---- uuuu

LVDCON      PIC18F6X2X PIC18F8X2X  --00 0101        --00 0101                    --uu uuuu

WDTCON      PIC18F6X2X PIC18F8X2X  ---- ---0        ---- ---0                    ---- ---u
RCON(4)     PIC18F6X2X PIC18F8X2X  0--1 11qq        0--1 qquu                    u--1 qquu

TMR1H       PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu                    uuuu uuuu

TMR1L       PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu                    uuuu uuuu

T1CON       PIC18F6X2X PIC18F8X2X  0-00 0000        u-uu uuuu                    u-uu uuuu

TMR2        PIC18F6X2X PIC18F8X2X  0000 0000        0000 0000                    uuuu uuuu

PR2         PIC18F6X2X PIC18F8X2X  1111 1111        1111 1111                    uuuu uuuu

T2CON       PIC18F6X2X PIC18F8X2X  -000 0000        -000 0000                    -uuu uuuu

SSPBUF      PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu                    uuuu uuuu

SSPADD      PIC18F6X2X PIC18F8X2X  0000 0000        0000 0000                    uuuu uuuu

SSPSTAT     PIC18F6X2X PIC18F8X2X  0000 0000        0000 0000                    uuuu uuuu

SSPCON1 PIC18F6X2X PIC18F8X2X      0000 0000        0000 0000                    uuuu uuuu

SSPCON2 PIC18F6X2X PIC18F8X2X      0000 0000        0000 0000                    uuuu uuuu

ADRESH      PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu                    uuuu uuuu

ADRESL      PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu                    uuuu uuuu

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

Note 1:     One or more bits in the INTCONx or PIRx registers will be affected (to cause wake-up).
        2:  When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the PC is loaded with the interrupt
            vector (0008h or 0018h).
        3:  When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the TOSU, TOSH and TOSL are
            updated with the current value of the PC. The STKPTR is modified to point to the next location in the
        4:  hardware stack.
        5:  See Table 3-2 for Reset value for specific condition.
            Bit 6 of PORTA, LATA and TRISA are enabled in ECIO and RCIO Oscillator modes only. In all other
        6:  oscillator modes, they are disabled and read `0'.
        7:  Bit 6 of PORTA, LATA and TRISA are not available on all devices. When unimplemented, they are read `0'.
            If MCLR function is disabled, PORTG<5> is a read-only bit.

      8: Enabled only in Microcontroller mode for PIC18F8525/8621 devices.

      9: The MEMCON register is unimplemented and reads all `0's when the device is in Microcontroller mode.

2005 Microchip Technology Inc.                                                  DS39612B-page 33
PIC18F6525/6621/8525/8621

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

ADCON0      PIC18F6X2X PIC18F8X2X     --00 0000        --00 0000          --uu uuuu

ADCON1      PIC18F6X2X PIC18F8X2X     --00 0000        --00 0000          --uu uuuu

ADCON2      PIC18F6X2X PIC18F8X2X     0-00 0000        0-00 0000          u-uu uuuu

CCPR1H      PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu

CCPR1L      PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu

CCP1CON PIC18F6X2X PIC18F8X2X         0000 0000        0000 0000          uuuu uuuu

CCPR2H      PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu

CCPR2L      PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu

CCP2CON PIC18F6X2X PIC18F8X2X         --00 0000        --00 0000          --uu uuuu

CCPR3H      PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu

CCPR3L      PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu

CCP3CON PIC18F6X2X PIC18F8X2X         0000 0000        0000 0000          uuuu uuuu

ECCP1AS     PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

CVRCON      PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

CMCON       PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

TMR3H       PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu

TMR3L       PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu

T3CON       PIC18F6X2X PIC18F8X2X     0000 0000        uuuu uuuu          uuuu uuuu
PSPCON(8)   PIC18F6X2X PIC18F8X2X     0000 ----        0000 ----          uuuu ----

SPBRG1      PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

RCREG1      PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

TXREG1      PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

TXSTA1      PIC18F6X2X PIC18F8X2X     0000 0010        0000 0010          uuuu uuuu

RCSTA1      PIC18F6X2X PIC18F8X2X     0000 000x        0000 000x          uuuu uuuu

EEADRH      PIC18F6X2X PIC18F8X2X     ---- --00        ---- --00          ---- --uu

EEADR       PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

EEDATA      PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

EECON2      PIC18F6X2X PIC18F8X2X     ---- ----        ---- ----          ---- ----

EECON1      PIC18F6X2X PIC18F8X2X     xx-0 x000        uu-0 u000          uu-u 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
        4:  hardware stack.
        5:  See Table 3-2 for Reset value for specific condition.
            Bit 6 of PORTA, LATA and TRISA are enabled in ECIO and RCIO Oscillator modes only. In all other
        6:  oscillator modes, they are disabled and read `0'.
        7:  Bit 6 of PORTA, LATA and TRISA are not available on all devices. When unimplemented, they are read `0'.
            If MCLR function is disabled, PORTG<5> is a read-only bit.

8: Enabled only in Microcontroller mode for PIC18F8525/8621 devices.

9: The MEMCON register is unimplemented and reads all `0's when the device is in Microcontroller mode.

DS39612B-page 34                                                       2005 Microchip Technology Inc.
                                  PIC18F6525/6621/8525/8621

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          PIC18F6X2X PIC18F8X2X  --11 1111        --11 1111              --uu uuuu

PIR3          PIC18F6X2X PIC18F8X2X  --00 0000        --00 0000              --uu uuuu

PIE3          PIC18F6X2X PIC18F8X2X  --00 0000        --00 0000              --uu uuuu

IPR2          PIC18F6X2X PIC18F8X2X  -1-1 1111        -1-1 1111              -u-u uuuu
PIR2          PIC18F6X2X PIC18F8X2X  -0-0 0000        -0-0 0000              -u-u uuuu(1)

PIE2          PIC18F6X2X PIC18F8X2X  -0-0 0000        -0-0 0000              -u-u uuuu

IPR1          PIC18F6X2X PIC18F8X2X  1111 1111        1111 1111              uuuu uuuu
PIR1          PIC18F6X2X PIC18F8X2X  0000 0000        0000 0000              uuuu uuuu(1)

PIE1          PIC18F6X2X PIC18F8X2X  0000 0000        0000 0000              uuuu uuuu
                                     0-00 --00        0-00 --00              u-uu --uu
MEMCON(9) PIC18F6X2X PIC18F8X2X

TRISJ         PIC18F6X2X PIC18F8X2X  1111 1111        1111 1111              uuuu uuuu

TRISH         PIC18F6X2X PIC18F8X2X  1111 1111        1111 1111              uuuu uuuu

TRISG         PIC18F6X2X PIC18F8X2X  ---1 1111        ---1 1111              ---u uuuu

TRISF         PIC18F6X2X PIC18F8X2X  1111 1111        1111 1111              uuuu uuuu

TRISE         PIC18F6X2X PIC18F8X2X  1111 1111        1111 1111              uuuu uuuu

TRISD         PIC18F6X2X PIC18F8X2X  1111 1111        1111 1111              uuuu uuuu

TRISC         PIC18F6X2X PIC18F8X2X  1111 1111        1111 1111              uuuu uuuu

TRISB         PIC18F6X2X PIC18F8X2X  1111 1111        1111 1111              uuuu uuuu
TRISA(5,6)    PIC18F6X2X PIC18F8X2X  -111 1111(5)     -111 1111(5)           -uuu uuuu(5)

LATJ          PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu              uuuu uuuu

LATH          PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu              uuuu uuuu

LATG          PIC18F6X2X PIC18F8X2X  ---x xxxx        ---u uuuu              ---u uuuu

LATF          PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu              uuuu uuuu

LATE          PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu              uuuu uuuu

LATD          PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu              uuuu uuuu

LATC          PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu              uuuu uuuu

LATB          PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu              uuuu uuuu
LATA(5,6)     PIC18F6X2X PIC18F8X2X  -xxx xxxx(5)     -uuu uuuu(5)           -uuu uuuu(5)

PORTJ         PIC18F6X2X PIC18F8X2X  xxxx xxxx        uuuu uuuu              uuuu uuuu

PORTH         PIC18F6X2X PIC18F8X2X  0000 xxxx        0000 uuuu              uuuu uuuu

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

Note 1:     One or more bits in the INTCONx or PIRx registers will be affected (to cause wake-up).
        2:  When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the PC is loaded with the interrupt
            vector (0008h or 0018h).
        3:  When the wake-up is due to an interrupt and the GIEL or GIEH bit is set, the TOSU, TOSH and TOSL are
            updated with the current value of the PC. The STKPTR is modified to point to the next location in the
        4:  hardware stack.
        5:  See Table 3-2 for Reset value for specific condition.
            Bit 6 of PORTA, LATA and TRISA are enabled in ECIO and RCIO Oscillator modes only. In all other
        6:  oscillator modes, they are disabled and read `0'.
        7:  Bit 6 of PORTA, LATA and TRISA are not available on all devices. When unimplemented, they are read `0'.
            If MCLR function is disabled, PORTG<5> is a read-only bit.

       8: Enabled only in Microcontroller mode for PIC18F8525/8621 devices.

       9: The MEMCON register is unimplemented and reads all `0's when the device is in Microcontroller mode.

2005 Microchip Technology Inc.                                              DS39612B-page 35
PIC18F6525/6621/8525/8621

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

PORTG(7)    PIC18F6X2X PIC18F8X2X     --xx xxxx        --uu uuuu          --uu uuuu

PORTF       PIC18F6X2X PIC18F8X2X     x000 0000        u000 0000          uuuu uuuu

PORTE       PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu

PORTD       PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu

PORTC       PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu

PORTB       PIC18F6X2X PIC18F8X2X     xxxx xxxx        uuuu uuuu          uuuu uuuu
PORTA(5,6)  PIC18F6X2X PIC18F8X2X     -x0x 0000(5)     -u0u 0000(5)       -uuu uuuu(5)

SPBRGH1 PIC18F6X2X PIC18F8X2X         0000 0000        0000 0000          uuuu uuuu

BAUDCON1 PIC18F6X2X PIC18F8X2X        -1-0 0-00        -1-0 0-00          -u-u u-uu

SPBRGH2 PIC18F6X2X PIC18F8X2X         0000 0000        0000 0000          uuuu uuuu

BAUDCON2 PIC18F6X2X PIC18F8X2X        -1-0 0-00        -1-0 0-00          -u-1 u-uu

ECCP1DEL PIC18F6X2X PIC18F8X2X        0000 0000        0000 0000          uuuu uuuu

TMR4        PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

PR4         PIC18F6X2X PIC18F8X2X     1111 1111        1111 1111          uuuu uuuu

T4CON       PIC18F6X2X PIC18F8X2X     -000 0000        -000 0000          -uuu uuuu

CCPR4H      PIC18F6X2X PIC18F8X2X     xxxx xxxx        xxxx xxxx          uuuu uuuu

CCPR4L      PIC18F6X2X PIC18F8X2X     xxxx xxxx        xxxx xxxx          uuuu uuuu

CCP4CON PIC18F6X2X PIC18F8X2X         --00 0000        --00 0000          --uu uuuu

CCPR5H      PIC18F6X2X PIC18F8X2X     xxxx xxxx        xxxx xxxx          uuuu uuuu

CCPR5L      PIC18F6X2X PIC18F8X2X     xxxx xxxx        xxxx xxxx          uuuu uuuu

CCP5CON PIC18F6X2X PIC18F8X2X         --00 0000        --00 0000          --uu uuuu

SPBRG2      PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

RCREG2      PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

TXREG2      PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

TXSTA2      PIC18F6X2X PIC18F8X2X     0000 0010        0000 0010          uuuu uuuu

RCSTA2      PIC18F6X2X PIC18F8X2X     0000 000x        0000 000x          uuuu uuuu

ECCP3AS     PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

ECCP3DEL PIC18F6X2X PIC18F8X2X        0000 0000        0000 0000          uuuu uuuu

ECCP2AS     PIC18F6X2X PIC18F8X2X     0000 0000        0000 0000          uuuu uuuu

ECCP2DEL PIC18F6X2X PIC18F8X2X        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'.
        7: If MCLR function is disabled, PORTG<5> is a read-only bit.

        8: Enabled only in Microcontroller mode for PIC18F8525/8621 devices.

        9: The MEMCON register is unimplemented and reads all `0's when the device is in Microcontroller mode.

DS39612B-page 36                                        2005 Microchip Technology Inc.
                                 PIC18F6525/6621/8525/8621

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

2005 Microchip Technology Inc.                            DS39612B-page 37
PIC18F6525/6621/8525/8621

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

                           VDD  TPWRT
                        MCLR
          INTERNAL POR                                        TOST

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

PLL TIME-OUT

INTERNAL RESET

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

DS39612B-page 38                                                                   2005 Microchip Technology Inc.
                                 PIC18F6525/6621/8525/8621

4.0 MEMORY ORGANIZATION                                  4.1.1  PIC18F6525/6621/8525/8621
                                                                PROGRAM MEMORY MODES
There are three memory blocks in PIC18F6525/6621/
8525/8621 devices. They are:                             PIC18F8525/8621 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 which        operating modes available to the controllers:
allow for concurrent access of these blocks. Additional
detailed information for Flash program memory and         Microprocessor (MP)
data EEPROM is provided in Section 5.0 "Flash             Microprocessor with Boot Block (MPBB)
Program Memory" and Section 7.0 "Data EEPROM             Extended Microcontroller (EMC)
Memory", respectively.                                    Microcontroller (MC)

In addition to on-chip Flash, the PIC18F8525/8621        The Program Memory mode is determined by setting
devices are also capable of accessing external           the two Least Significant bits of the CONFIG3L
program memory through an external memory bus.           Configuration Byte register as shown in Register 4-1
Depending on the selected operating mode (discussed      (see Section 24.1 "Configuration Bits" for additional
in Section 4.1.1 "PIC18F6525/6621/8525/8621              details on the device configuration bits).
Program Memory Modes"), the controllers may
access either internal or external program memory        The Program Memory modes operate as follows:
exclusively, or both internal and external memory in
selected blocks. Additional information on the external   The Microprocessor Mode permits access only
memory interface is provided in Section 6.0 "External       to external program memory; the contents of the
Memory Interface".                                          on-chip Flash memory are ignored. The 21-bit
                                                            program counter permits access to a 2-Mbyte
4.1 Program Memory Organization                             linear program memory space.

A 21-bit program counter is capable of addressing the    The Microprocessor with Boot Block Mode
2-Mbyte program memory space. Accessing a location          accesses on-chip Flash memory from addresses
between the physically implemented memory and the           000000h to 0007FFh. Above this, external program
2-Mbyte address will cause a read of all `0's (a NOP        memory is accessed all the way up to the 2-Mbyte
instruction).                                               limit. Program execution automatically switches
                                                            between the two memories as required.
The PIC18F6525 and PIC18F8525 each have
48 Kbytes of on-chip Flash memory, while the             The Microcontroller Mode accesses only
PIC18F6621 and PIC18F8621 have 64 Kbytes of Flash.          on-chip Flash memory. Attempts to read above the
This means that PIC18FX525 devices can store inter-         physical limit of the on-chip Flash (BFFFh for the
nally up to 24,576 single-word instructions and             PIC18FX525, FFFFh for the PIC18FX621) causes
PIC18FX621 devices can store up to 32,768 single-word       a read of all `0's (a NOP instruction).
instructions.                                               The Microcontroller mode is also the only operating
                                                            mode available to PIC18F6525/6621 devices.
The Reset vector address is at 0000h and the interrupt
vector addresses are at 0008h and 0018h.                  The Extended Microcontroller Mode allows
                                                            access to both internal and external program
Figure 4-1 shows the program memory map for                 memories as a single block. The device can
PIC18FX525 devices, while Figure 4-2 shows the              access its entire on-chip Flash memory; above
program memory map for PIC18FX621 devices.                  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-3 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.

2005 Microchip Technology Inc.                                 DS39612B-page 39
PIC18F6525/6621/8525/8621

FIGURE 4-1:        INTERNAL PROGRAM                       FIGURE 4-2:          INTERNAL PROGRAM
                   MEMORY MAP AND                                              MEMORY MAP AND
                   STACK FOR PIC18FX525                                        STACK FOR PIC18FX621

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

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

RETFIE,RETLW                                                RETFIE,RETLW

                 Stack Level 1                                              Stack Level 1

                                                                              
                                                                            

                 Stack Level 31                                           Stack Level 31

                 Reset Vector        000000h                                Reset Vector       000000h

High Priority Interrupt Vector 000008h                           High Priority Interrupt Vector 000008h

Low Priority Interrupt Vector 000018h                            Low Priority Interrupt Vector 000018h

                  On-Chip Flash
                 Program Memory

                                     00BFFFh
                                     00C000h

                                                                        On-Chip Flash
                                                                       Program Memory
                                                User Memory Space
                                                                                                                                                User Memory Space
                  Read `0'                                                                             00FFFFh
                                                                                                       010000h

                                                                            Read `0'

                                     1FFFFFh                                                   1FFFFFh
                                     200000h                                                   200000h

TABLE 4-1: MEMORY ACCESS FOR PIC18F8525/8621 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
w/Boot Block          Yes                Yes         Yes         No Access         No Access   No Access
                      Yes                Yes         Yes             Yes               Yes         Yes
Microcontroller

Extended
Microcontroller

DS39612B-page 40                                                                    2005 Microchip Technology Inc.
                                                                   PIC18F6525/6621/8525/8621

REGISTER 4-1: CONFIG3L: CONFIGURATION REGISTER 3 LOW

                                                 R/P-1    U-0                      U-0      U-0         U-0       U-0  R/P-1            R/P-1
                                                                                                                       PM1              PM0
                                                 WAIT     --                       --       --          --        --
                                                                                                                                             bit 0
                                                 bit 7

                         bit 7                   WAIT: External Bus Data Wait Enable bit

                         bit 6-2                 1 = Wait selections unavailable, device will not wait
                         bit 1-0                 0 = Wait programmed by WAIT1 and WAIT0 bits of MEMCOM register (MEMCOM<5:4>)

                                                 Unimplemented: Read as `0'

                                                 PM1:PM0: Processor Data Memory Mode Select bits

                                                 11 = Microcontroller mode
                                                 10 = Microprocessor mode(1)
                                                 01 = Microcontroller with Boot Block mode(1)
                                                 00 = Extended Microcontroller mode(1)

                                                    Note 1: This mode is available only on PIC18F8525/8621 devices.

                                                 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-3:                                      MEMORY MAPS FOR PIC18F6525/6621/8525/8621 PROGRAM MEMORY MODES

                         Microprocessor                   Microprocessor                         Microcontroller           Extended
                              Mode(3)                                                                   Mode
                                                          with Boot Block                                              Microcontroller
                                                                Mode(3)                                                     Mode(3)

                         000000h                 On-Chip  000000h                  On-Chip  000000h     On-Chip   000000h               On-Chip
                                                                                   Program              Program                         Program
                                       External  Program  0007FFh                  Memory   00BFFFh(1)  Memory    00BFFFh(1)            Memory
                                       Program            000800h                           00FFFFh(2)            00FFFFh(2)
                                       Memory    Memory                                     00C000h(1)   Reads    00C000h(1)
                                                    (No                                     010000h(2)     `0's   010000h(2)

                                                 access)

Program Space Execution                                            External                                                   External
                                                                   Program                                                    Program
                                                                   Memory                                                     Memory

                         1FFFFFh                          1FFFFFh                           1FFFFFh               1FFFFFh

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

Note 1: PIC18F8525 and PIC18F6525.
          2: PIC18F8621 and PIC18F6621.
          3: This mode is available only on PIC18F8525/8621 devices.

2005 Microchip Technology Inc.                                                                                               DS39612B-page 41
PIC18F6525/6621/8525/8621

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
and PCLATH are not affected by any of the RETURN or         values are pushed onto the stack and decrements
CALL instructions.                                          when values are popped off the stack. At Reset, the
                                                            Stack Pointer value will be `0'. The user may read and
The stack operates as a 31-word by 21-bit RAM and a         write the Stack Pointer value. This feature can be used
5-bit Stack Pointer, with the Stack Pointer initialized to  by a 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 register       The action that takes place when the stack becomes
are transferred to the PC and then the Stack Pointer is     full depends on the state of the STVREN (Stack
decremented.                                                Overflow Reset Enable) configuration bit. Refer to
                                                            Section 25.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         value onto the stack, set the STKFUL bit and reset the
writable through SFR registers. Data can also be            device. The STKFUL bit will remain set and the Stack
pushed to, or popped from the stack using the Top-of-       Pointer will be set to `0'.
Stack 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.

DS39612B-page 42                                                    2005 Microchip Technology Inc.
                                        PIC18F6525/6621/8525/8621

REGISTER 4-2:  STKPTR: STACK POINTER REGISTER

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

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

                  Note 1: Bit 7 and bit 6 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-4:    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        or underflow condition will set the appropriate STKFUL
load the current PC value onto the stack. TOSU, TOSH       or STKUNF bit and then cause a device Reset. The
and TOSL can then be modified to place a return            STKFUL or STKUNF bits are only cleared by the user
address on the stack.                                      software or a Power-on 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.

2005 Microchip Technology Inc.                                                              DS39612B-page 43
PIC18F6525/6621/8525/8621

4.3 Fast Register Stack                                        4.4 PCL, PCLATH and PCLATU

A "fast interrupt return" option is available for interrupts.  The Program Counter (PC) specifies the address of the
A fast register stack is provided for the STATUS,              instruction to fetch for execution. The PC is 21 bits
WREG and BSR registers and is only one in depth. The           wide. The low byte is called the PCL register; this reg-
stack 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                the PCH register may be performed through the
registers if the FAST RETURN instruction is used to            PCLATH register. The upper byte is called PCU. This
return 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 instruc-
priority interrupts, users must save the key registers in      tions write to the program counter directly. For these
software during a low priority interrupt.                      instructions, the contents of PCLATH and PCLATU are
                                                               not transferred to the program counter.
If no interrupts are used, the fast register stack can be
used to restore the STATUS, WREG and BSR registers             The contents of PCLATH and PCLATU will be
at the end of a subroutine call. To use the fast register      transferred 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 (IR) in Q4. The
                                                              instruction is decoded and executed during the
                                                               following Q1 through Q4. The clocks and instruction
      RETURN FAST                                              execution flow are shown in Figure 4-5.

FIGURE 4-5:         CLOCK/INSTRUCTION CYCLE

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

DS39612B-page 44                                                             2005 Microchip Technology Inc.
                                          PIC18F6525/6621/8525/8621

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 take 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-6 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-6 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 25.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-6:     INSTRUCTIONS IN PROGRAM MEMORY

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

2005 Microchip Technology Inc.                                                             DS39612B-page 45
PIC18F6525/6621/8525/8621

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

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
                                                                  ; 2nd operand holds address of REG2

                                  REG3                            ; continue code

CASE 2:

Object Code               Source Code

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

                                  REG3                            ; continue code

4.8 Look-up Tables                                                routine is the ADDWF PCL instruction. The next instruction
                                                                  executed will be one of the RETLW 0xnn instructions that
Look-up tables are implemented two ways. These are:               returns the value 0xnn to the calling function.
Computed GOTO
Table Reads                                                     The offset value (value in WREG) specifies the number
                                                                  of bytes that the program counter should advance.
4.8.1 COMPUTED GOTO
A computed GOTO is accomplished by adding an offset               In this method, only one data byte may be stored in
to the program counter (ADDWF PCL).                               each instruction location and room on the return
A look-up table can be formed with an ADDWF PCL                   address stack is required.
instruction and a group of RETLW 0xnn instructions.
WREG is loaded with an offset into the table before exe-          Note:  The ADDWF PCL instruction does not
cuting a call to that table. The first instruction of the called         update PCLATH and PCLATU. A read
                                                                         operation on PCL must be performed to
                                                                         update PCLATH and PCLATU.

EXAMPLE 4-4: COMPUTED GOTO USING AN OFFSET VALUE

MAIN:  ORG        0x0000  ; A simple read of PCL will update PCLATH, PCLATU
...    MOVLW      0x00    ; Multiply by 2 to get correct offset in table
TABLE  CALL       TABLE   ; Add the modified offset to force jump into table

       ORG        0x8000
       MOVF       PCL, F
       RLNCF      W, W
       ADDWF      PCL
       RETLW      `A'
       RETLW      `B'
       RETLW      `C'
       RETLW      `D'
       RETLW      `E'
       END

DS39612B-page 46                                                                         2005 Microchip Technology Inc.
                                 PIC18F6525/6621/8525/8621

4.8.2 TABLE READS/TABLE WRITES                            To ensure that commonly used registers (SFRs and
                                                          select GPRs) can be accessed in a single cycle
A better method of storing data in program memory         regardless of the current BSR values, an Access Bank
allows 2 bytes of data to be stored in each instruction   is implemented. A segment of Bank 0 and a segment of
location.                                                 Bank 15 comprise the Access RAM. Section 4.10
                                                          "Access Bank" provides a detailed description of the
Look-up table data may be stored 2 bytes per program      Access RAM.
word by using table reads and writes. The Table Pointer
(TBLPTR) specifies the byte address and the Table         4.9.1  GENERAL PURPOSE REGISTER
Latch (TABLAT) contains the data that is read from, or           FILE
written to program memory. Data is transferred to/from
program memory, one byte at a time.                       The register file can be accessed either directly or
                                                          indirectly. Indirect addressing operates using a File
A description of the table read/table write operation is  Select Register and corresponding Indirect File
shown in Section 5.0 "Flash Program Memory".              Operand. The operation of indirect addressing is
                                                          shown in Section 4.12 "Indirect Addressing, INDF
4.9 Data Memory Organization                              and FSR Registers".

The data memory is implemented as static RAM. Each        Enhanced MCU devices may have banked memory in
register in the data memory has a 12-bit address,         the GPR area. GPRs are not initialized by a Power-on
allowing up to 4096 bytes of data memory. Figure 4-7      Reset and are unchanged on all other Resets.
shows the data memory organization for the
PIC18F6525/6621/8525/8621 devices.                        Data RAM is available for use as General Purpose
                                                          Registers by all instructions. The top section of Bank 15
The data memory map is divided into 16 banks that         (F60h to FFFh) contains SFRs. All other banks of data
contain 256 bytes each. The lower 4 bits of the Bank      memory contain GPRs, starting with Bank 0.
Select Register (BSR<3:0>) select which bank will be
accessed. The upper 4 bits for the BSR are not            4.9.2 SPECIAL FUNCTION REGISTERS
implemented.
                                                          The Special Function Registers (SFRs) are registers
The data memory contains Special Function Registers       used by the CPU and peripheral modules for controlling
(SFR) and General Purpose Registers (GPR). The            the desired operation of the device. These registers are
SFRs are used for control and status of the controller    implemented as static RAM. A list of these registers is
and peripheral functions, while GPRs are used for data    given in Table 4-2 and Table 4-3.
storage and scratch pad operations in the user's appli-
cation. The SFRs start at the last location of Bank 15    The SFRs can be classified into two sets: those asso-
(0FFFh) and extend downwards. Any remaining space         ciated with the "core" function and those related to the
beyond the SFRs in the bank may be implemented as         peripheral functions. Those registers related to the
GPRs. GPRs start at the first location of Bank 0 and      "core" are described in this section, while those related
grow upwards. Any read of an unimplemented location       to the operation of the peripheral features are
will read as `0's.                                        described in the section of that peripheral feature. The
                                                          SFRs are typically distributed among the peripherals
The entire data memory may be accessed directly or        whose functions they control.
indirectly. Direct addressing may require the use of the
BSR register. Indirect addressing requires the use of a   The unused SFR locations are unimplemented and
File Select Register (FSRn) and a corresponding           read as `0's. The addresses for the SFRs are listed in
Indirect File Operand (INDFn). Each FSR holds a 12-bit    Table 4-2.
address value that can be used to access any location in
the data memory map without banking.

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.

2005 Microchip Technology Inc.                                  DS39612B-page 47
PIC18F6525/6621/8525/8621

FIGURE 4-7:       DATA MEMORY MAP FOR PIC18F6525/6621/8525/8621 DEVICES

BSR<3:0>                            Data Memory Map
    = 0000
    = 0001                    00h   Access RAM       000h
    = 0010        Bank 0                GPRs         05Fh
    = 0011                              GPRs         060h
    = 0100                    FFh                    0FFh
                              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            GPRs
                     to

                  Bank 13

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

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

DS39612B-page 48                                            2005 Microchip Technology Inc.
                                          PIC18F6525/6621/8525/8621

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  ECCP1AS                  F9Bh     --(1)
                                                          FB5h   CVRCON
FFAh PCLATH                      FDAh FSR2H               FB4h    CMCON                  F9Ah TRISJ(2)
                                                          FB3h    TMR3H
FF9h        PCL                  FD9h FSR2L               FB2h    TMR3L                  F99h TRISH(2)
                                                          FB1h    T3CON
FF8h TBLPTRU                     FD8h STATUS              FB0h  PSPCON(4)                F98h TRISG
                                                          FAFh   SPBRG1
FF7h TBLPTRH                     FD7h TMR0H               FAEh   RCREG1                  F97h TRISF
                                                         FADh    TXREG1
FF6h TBLPTRL                     FD6h TMR0L              FACh     TXSTA1                 F96h TRISE
                                                          FABh   RCSTA1
FF5h TABLAT                      FD5h     T0CON           FAAh   EEADRH                  F95h TRISD
                                 FD4h       --(1)         FA9h    EEADR
FF4h PRODH                                                FA8h    EEDATA                 F94h TRISC
                                                          FA7h   EECON2
FF3h PRODL                       FD3h OSCCON              FA6h   EECON1                  F93h TRISB
                                                          FA5h
FF2h INTCON                      FD2h LVDCON              FA4h      IPR3                 F92h     TRISA
                                                          FA3h      PIR3                 F91h     LATJ(2)
FF1h INTCON2                     FD1h WDTCON              FA2h      PIE3                 F90h     LATH(2)
                                                          FA1h      IPR2
FF0h INTCON3                     FD0h RCON                FA0h      PIR2
FEFh INDF0(3)                                                       PIE2
FEEh POSTINC0(3)                 FCFh TMR1H                                              F8Fh LATG
FEDh POSTDEC0(3)
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
                                                                                         F88h     PORTJ(2)
FE8h WREG                        FC8h SSPADD                                             F87h     PORTH(2)
FE7h INDF1(3)
FE6h POSTINC1(3)                 FC7h SSPSTAT
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 not available on PIC18F6525/6621 devices and reads as `0'.
        3:  This is not a physical register.
        4:  Enabled only in Microcontroller mode for PIC18F8525/8621 devices.

2005 Microchip Technology Inc.                                                          DS39612B-page 49
PIC18F6525/6621/8525/8621

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

Address          Name    Address      Name    Address      Name                          Address       Name
      F7Fh    SPBRGH1           F5Fh   --(1)         F3Fh   --(1)                               F1Fh    --(1)
      F7Eh   BAUDCON1           F5Eh   --(1)         F3Eh   --(1)                               F1Eh    --(1)
      F7Dh    SPBRGH2           F5Dh   --(1)         F3Dh   --(1)                               F1Dh    --(1)
      F7Ch   BAUDCON2           F5Ch   --(1)         F3Ch   --(1)                               F1Ch    --(1)
      F7Bh                      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  ECCP1DEL           F57h   --(1)         F37h   --(1)                               F17h    --(1)
       F76h      TMR4           F56h   --(1)         F36h   --(1)                               F16h    --(1)
       F75h       PR4           F55h   --(1)         F35h   --(1)                               F15h    --(1)
       F74h     T4CON           F54h   --(1)         F34h   --(1)                               F14h    --(1)
       F73h                     F53h   --(1)         F33h   --(1)                               F13h    --(1)
       F72h    CCPR4H           F52h   --(1)         F32h   --(1)                               F12h    --(1)
       F71h    CCPR4L           F51h   --(1)         F31h   --(1)                                F11h   --(1)
       F70h   CCP4CON           F50h   --(1)         F30h   --(1)                               F10h    --(1)
      F6Fh     CCPR5H           F4Fh   --(1)         F2Fh   --(1)                               F0Fh    --(1)
      F6Eh     CCPR5L           F4Eh   --(1)         F2Eh   --(1)                               F0Eh    --(1)
      F6Dh    CCP5CON           F4Dh   --(1)         F2Dh   --(1)                               F0Dh    --(1)
      F6Ch     SPBRG2           F4Ch   --(1)         F2Ch   --(1)                               F0Ch    --(1)
      F6Bh     RCREG2           F4Bh   --(1)         F2Bh   --(1)                               F0Bh    --(1)
      F6Ah     TXREG2           F4Ah   --(1)         F2Ah   --(1)                               F0Ah    --(1)
       F69h    TXSTA2           F49h   --(1)         F29h   --(1)                               F09h    --(1)
       F68h    RCSTA2           F48h   --(1)         F28h   --(1)                               F08h    --(1)
       F67h   ECCP3AS           F47h   --(1)         F27h   --(1)                               F07h    --(1)
       F66h  ECCP3DEL           F46h   --(1)         F26h   --(1)                               F06h    --(1)
       F65h   ECCP2AS           F45h   --(1)         F25h   --(1)                               F05h    --(1)
       F64h  ECCP2DEL           F44h   --(1)         F24h   --(1)                               F04h    --(1)
       F63h                     F43h   --(1)         F23h   --(1)                               F03h    --(1)
       F62h       --(1)         F42h   --(1)         F22h   --(1)                               F02h    --(1)
       F61h       --(1)         F41h   --(1)         F21h   --(1)                               F01h    --(1)
       F60h       --(1)         F40h   --(1)         F20h   --(1)                               F00h    --(1)
                  --(1)
                  --(1)
                  --(1)
                  --(1)

Note 1:     Unimplemented registers are read as `0'.
        2:  This register is not available on PIC18F6525/6621 devices and reads as `0'.
        3:  This is not a physical register.
        4:  Enabled only in Microcontroller mode for PIC18F8525/8621 devices.

DS39612B-page 50                                                    2005 Microchip Technology Inc.
                                                  PIC18F6525/6621/8525/8621

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
                                                                                                                                     32, 42
TOSH          Top-of-Stack High Byte (TOS<15:8>)                                                                  0000 0000          32, 42
                                                                                                                                     32, 43
TOSL          Top-of-Stack Low Byte (TOS<7:0>)                                                                    0000 0000          32, 44
                                                                                                                                     32, 44
STKPTR        STKFUL STKUNF              --       Return Stack Pointer                                            00-0 0000          32, 44
                                                                                                                                     32, 69
PCLATU        --                --       --       Holding Register for PC<20:16>                                  ---0 0000          32, 69
                                                                                                                                     32, 69
PCLATH Holding Register for PC<15:8>                                                                              0000 0000          32, 69
                                                                                                                                     32, 85
PCL           PC Low Byte (PC<7:0>)                                                                               0000 0000          32, 85
                                                                                                                  --00 0000          32, 89
TBLPTRU       --                --       bit 21(2) Program Memory Table Pointer Upper Byte (TBLPTR<20:16>)                           32, 90
                                                                                                                                     32, 91
TBLPTRH Program Memory Table Pointer High Byte (TBLPTR<15:8>)                                                     0000 0000
                                                                                                                                       56
TBLPTRL Program Memory Table Pointer Low Byte (TBLPTR<7:0>)                                                       0000 0000            56

TABLAT Program Memory Table Latch                                                                                 0000 0000            56

PRODH Product Register High Byte                                                                                  xxxx xxxx            56
                                                                                                                                       56
PRODL Product Register Low Byte                                                                                   xxxx xxxx
                                                                                                                                     32, 56
INTCON        GIE/GIEH PEIE/GIEL TMR0IE           INT0IE       RBIE              TMR0IF INT0IF   RBIF 0000 000x                      32, 56

INTCON2       RBPU INTEDG0 INTEDG1 INTEDG2 INTEDG3 TMR0IP INT3IP                                 RBIP 1111 1111                        32
                                                                                                                                       56
INTCON3       INT2IP  INT1IP             INT3IE   INT2IE       INT1IE            INT3IF  INT2IF  INT1IF 1100 0000                      56

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

POSTINC0 Uses contents of FSR0 to address data memory value of FSR0 post-incremented                            N/A                  56
                                                                                                                                       56
              (not a physical register)
                                                                                                                                     32, 56
POSTDEC0 Uses contents of FSR0 to address data memory value of FSR0 post-decremented                            N/A                33, 56
                                                                                                                                     33, 55
              (not a physical register)
                                                                                                                                       56
PREINC0 Uses contents of FSR0 to address data memory value of FSR0 pre-incremented (not a physical register)    N/A                  56

PLUSW0 Uses contents of FSR0 to address data memory value of FSR0 pre-incremented                               N/A                  56

              (not a physical register) value of FSR0 offset by value in WREG

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

FSR0L         Indirect Data Memory Address Pointer 0 Low Byte                                                     xxxx xxxx

WREG          Working Register                                                                                    xxxx xxxx

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

POSTINC1 Uses contents of FSR1 to address data memory value of FSR1 post-incremented                            N/A

              (not a physical register)

POSTDEC1 Uses contents of FSR1 to address data memory value of FSR1 post-decremented                            N/A

              (not a physical register)

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

PLUSW1 Uses contents of FSR1 to address data memory value of FSR1 pre-incremented                               N/A

              (not a physical register) value of FSR1 offset by value in WREG

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

FSR1L         Indirect Data Memory Address Pointer 1 Low Byte                                                     xxxx xxxx

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

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

POSTINC2 Uses contents of FSR2 to address data memory value of FSR2 post-incremented                            N/A

              (not a physical register)

POSTDEC2 Uses contents of FSR2 to address data memory value of FSR2 post-decremented                            N/A

              (not a physical register)

Legend:       x = unknown, u = unchanged, = unimplemented, q = value depends on condition
Note 1:       RA6 and associated bits are configured as a port pin 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 PIC18F6525/6621 devices and read as `0'.
          4:  RG5 is available only if MCLR function is disabled in configuration.
         5:   Enabled only in Microcontroller mode for PIC18F8525/8621 devices.

2005 Microchip Technology Inc.                                                                                   DS39612B-page 51
PIC18F6525/6621/8525/8621

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                       56
                  (not a physical register)

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

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

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

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

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        --               --       --     --              LOCK   PLLEN           SCS1   SCS0 ---- 0000 25, 33

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

WDTCON        --               --       --     --              --     --              --     SWDTEN ---- ---0 33, 267

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

                                                                                                                                     101

TMR1H Timer1 Register High Byte                                                                            xxxx xxxx 33, 139

TMR1L         Timer1 Register Low Byte                                                                     xxxx xxxx 33, 139

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

TMR2          Timer2 Register                                                                              0000 0000 33, 142

PR2           Timer2 Period Register                                                                       1111 1111 33, 142

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

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

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

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

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

ADRESH A/D Result Register High Byte                                                                       xxxx xxxx 33, 241

ADRESL A/D Result Register Low Byte                                                                        xxxx xxxx 33, 241

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

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

ADCON2        ADFM             --       ACQT2  ACQT1           ACQT0 ADCS2 ADCS1 ADCS0 0-00 0000 34, 235

CCPR1H Enhanced Capture/Compare/PWM Register 1 High Byte                                                   xxxx xxxx 34, 172

CCPR1L Enhanced Capture/Compare/PWM Register 1 Low Byte                                                    xxxx xxxx 34, 172

CCP1CON P1M1                   P1M0     DC1B1  DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 0000 0000 34, 157

CCPR2H Enhanced Capture/Compare/PWM Register 2 High Byte                                                   xxxx xxxx 34, 172

CCPR2L Enhanced Capture/Compare/PWM Register 2 Low Byte                                                    xxxx xxxx 34, 172

CCP2CON P2M1                   P2M0     DC2B1  DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 0000 0000 34, 157

CCPR3H Enhanced Capture/Compare/PWM Register 3 High Byte                                                   xxxx xxxx 34, 172

CCPR3L Enhanced Capture/Compare/PWM Register 3 Low Byte                                                    xxxx xxxx 34, 172

CCP3CON P3M1                   P3M0     DC3B1  DC2B0 CCP3M3 CCP3M2 CCP3M1 CCP3M0 0000 0000 34, 157

ECCP1AS ECCP1ASE ECCP1AS2 ECCP1AS1 ECCP1AS0 PSS1AC1 PSS1AC0 PSS1BD1 PSS1BD0 0000 0000 34, 169

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

Legend:       x = unknown, u = unchanged, = unimplemented, q = value depends on condition
Note 1:       RA6 and associated bits are configured as a port pin 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 PIC18F6525/6621 devices and read as `0'.
          4:  RG5 is available only if MCLR function is disabled in configuration.
         5:   Enabled only in Microcontroller mode for PIC18F8525/8621 devices.

DS39612B-page 52                                                                              2005 Microchip Technology Inc.
                                               PIC18F6525/6621/8525/8621

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:

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

TMR3H Timer3 Register High Byte                                                                          xxxx xxxx 34, 145

TMR3L         Timer3 Register Low Byte                                                                   xxxx xxxx 34, 145

T3CON         RD16      T3CCP2          T3CKPS1 T3CKPS0 T3CCP1          T3SYNC      TMR3CS TMR3ON 0000 0000 34, 145
PSPCON(5)      IBF        OBF                                               --
                                        IBOV PSPMODE             --                       --     --      0000 ---- 34, 129

SPBRG1 Enhanced USART1 Baud Rate Generator Register Low Byte                                             0000 0000 34, 217

RCREG1 Enhanced USART1 Receive Register                                                                  0000 0000 34, 224

TXREG1 Enhanced USART1 Transmit Register                                                                 0000 0000 34, 222

TXSTA1        CSRC      TX9             TXEN             SYNC   SENDB BRGH          TRMT         TX9D 0000 0010 34, 214

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

EEADRH        --        --              --               --      --          --     EE Addr Register High ---- --00 34, 83

EEADR Data EEPROM Address Register                                                                       0000 0000 34, 83

EEDATA Data EEPROM Data Register                                                                         0000 0000 34, 83

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

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
                                                                SSPIP   CCP1IP      TMR2IP       TMR1IP  1111 1111                   35, 98
IPR1          PSPIP(5)  ADIP            RC1IP            TX1IP  SSPIF   CCP1IF      TMR2IF       TMR1IF  0000 0000                   35, 92
                                                                SSPIE   CCP1IE      TMR2IE       TMR1IE  0000 0000                   35, 95
PIR1          PSPIF(5)  ADIF            RC1IF            TX1IF                                           0-00 --00                   35, 71
                                                                  --       --         WM1          WM0   1111 1111                   35, 127
PIE1          PSPIE(5)  ADIE            RC1IE            TX1IE                                           1111 1111                   35, 124

MEMCON(3) EBDIS         --              WAIT1            WAIT0

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, 119

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

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

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

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

TRISB         Data Direction Control Register for PORTB                                                  1111 1111                   35, 105
                                                                                                         -111 1111                   35, 121
TRISA         --        TRISA6(1) Data Direction Control Register for PORTA                              xxxx xxxx                   35, 127
LATJ(3)                                                                                                  xxxx xxxx                   35, 124
LATH(3)       Read PORTJ Data Latch, Write PORTJ Data Latch

              Read PORTH Data Latch, Write PORTH Data Latch

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

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

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

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

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

LATB          Read PORTB Data Latch, Write PORTB Data Latch                                              xxxx xxxx 35, 108
LATA                                                                                                     -xxx xxxx 35, 105
              --        LATA6(1) Read PORTA Data Latch, Write PORTA Data Latch(1)

Legend:       x = unknown, u = unchanged, = unimplemented, q = value depends on condition
Note 1:       RA6 and associated bits are configured as a port pin 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 PIC18F6525/6621 devices and read as `0'.
          4:  RG5 is available only if MCLR function is disabled in configuration.
         5:   Enabled only in Microcontroller mode for PIC18F8525/8621 devices.

2005 Microchip Technology Inc.                                                                          DS39612B-page 53
PIC18F6525/6621/8525/8621

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:

PORTJ(3) Read PORTJ pins, Write PORTJ Data Latch                                                xxxx xxxx                            35, 127
PORTH(3) Read PORTH pins, Write PORTH Data Latch                                                0000 xxxx                            35, 124
                                                                                                                                     36, 121
PORTG         --               --     RG5(4) Read PORTG pins, Write PORTG Data Latch            --xx xxxx
                                                                                                                                     36, 119
PORTF         Read PORTF pins, Write PORTF Data Latch                                           x000 0000                            36, 116
                                                                                                                                     36, 113
PORTE         Read PORTE pins, Write PORTE Data Latch                                           xxxx xxxx                            36, 110
                                                                                                                                     36, 108
PORTD Read PORTD pins, Write PORTD Data Latch                                                   xxxx xxxx                            36, 105
                                                                                                                                     36, 217
PORTC Read PORTC pins, Write PORTC Data Latch                                                   xxxx xxxx                            36, 216
                                                                                                                                     36, 217
PORTB         Read PORTB pins, Write PORTB Data Latch                                           xxxx xxxx                            36, 216
PORTA                                                                                           -x0x 0000                            36, 168
              --               RA6(1) Read PORTA pins, Write PORTA Data Latch(1)                                                     36, 148
                                                                                                                                     36, 148
SPBRGH1 Enhanced USART1 Baud Rate Generator Register High Byte                                  0000 0000                            36, 147
                                                                                                                                     36, 153
BAUDCON1      --               RCIDL  --     SCKP      BRG16    --                WUE    ABDEN -1-0 0-00                             36, 153
                                                                                                                                     36, 149
SPBRGH2 Enhanced USART2 Baud Rate Generator Register High Byte                                  0000 0000                            36, 153
                                                                                                                                     36, 153
BAUDCON2      --               RCIDL  --     SCKP      BRG16    --                WUE    ABDEN -1-0 0-00                             36, 149
                                                                                                                                     36, 217
ECCP1DEL P1RSEN P1DC6                 P1DC5  P1DC4     P1DC3 P1DC2 P1DC1 P1DC0 0000 0000                                             36, 224
                                                                                                                                     36, 222
TMR4          Timer4 Register                                                                   0000 0000                            36, 222
                                                                                                                                     36, 222
PR4           Timer4 Period Register                                                            1111 1111                            36, 169
                                                                                                                                     36, 168
T4CON         --    T4OUTPS3 T4OUTPS2 T4OUTPS1 T4OUTPS0 TMR4ON T4CKPS1 T4CKPS0 -000 0000                                             36, 169
                                                                                                                                     36, 168
CCPR4H Capture/Compare/PWM Register 4 High Byte                                                 xxxx xxxx

CCPR4L Capture/Compare/PWM Register 4 Low Byte                                                  xxxx xxxx

CCP4CON       --               --     DC4B1  DC4B0 CCP4M3 CCP4M2 CCP4M1 CCP4M0 --00 0000

CCPR5H Capture/Compare/PWM Register 5 High Byte                                                 xxxx xxxx

CCPR5L Capture/Compare/PWM Register 5 Low Byte                                                  xxxx xxxx

CCP5CON       --               --     DC5B1  DC5B0 CCP5M3 CCP5M2 CCP5M1 CCP5M0 --00 0000

SPBRG2 Enhanced USART2 Baud Rate Generator Register Low Byte                                    0000 0000

RCREG2 Enhanced USART2 Receive Register                                                         0000 0000

TXREG2 Enhanced USART2 Transmit Register                                                        0000 0000

TXSTA2        CSRC             TX9    TXEN   SYNC      SENDB BRGH                 TRMT   TX9D 0000 0010

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

ECCP3AS ECCP3ASE ECCP3AS2 ECCP3AS1 ECCP3AS0 PSS3AC1 PSS3AC0 PSS3BD1 PSS3BD0 0000 0000

ECCP3DEL P3RSEN P3DC6                 P3DC5  P3DC4     P3DC3 P3DC2 P3DC1 P3DC0 0000 0000

ECCP2AS ECCP2ASE ECCP2AS2 ECCP2AS1 ECCP2AS0 PSS2AC1 PSS2AC0 PSS2BD1 PSS2BD0 0000 0000

ECCP2DEL P2RSEN P2DC6                 P2DC5  P2DC4     P2DC3 P2DC2 P2DC1 P2DC0 0000 0000

Legend:       x = unknown, u = unchanged, = unimplemented, q = value depends on condition
Note 1:       RA6 and associated bits are configured as a port pin 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 PIC18F6525/6621 devices and read as `0'.
          4:  RG5 is available only if MCLR function is disabled in configuration.
         5:   Enabled only in Microcontroller mode for PIC18F8525/8621 devices.

DS39612B-page 54                                                                          2005 Microchip Technology Inc.
                                    PIC18F6525/6621/8525/8621

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
High and Access RAM Low, respectively. Figure 4-7                  for 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.

2005 Microchip Technology Inc.                                                         DS39612B-page 55
PIC18F6525/6621/8525/8621

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 INDF   with it, plus four additional register addresses. Perform-
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 (NOP). The  When data access is done to one of the five INDFn
FSR 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 (no
ing INDFn actually addresses the register whose               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-5 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-5:      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
           LFSR   FSR0, 0x100  ;                              to FSRn. Do not modify the value of the WREG or
NEXT CLRF         POSTINC0     ; Clear INDF                   the FSRn register after an indirect access (no
                               ; register and                 change) PLUSWn.
           BTFSS  FSR0H, 1     ; inc pointer
           GOTO   NEXT         ; All done with             When using the auto-increment or auto-decrement
CONTINUE                       ; Bank1?                    features, the effect on the FSR is not reflected in the
                               ; 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
address the entire data memory space (4096 bytes),         12 bits. That is, when FSRnL overflows from an
these registers are 12 bits wide. To store the 12 bits of  increment, 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
3. FSR2: composed of FSR2H:FSR2L                           Each FSR has an address associated with it that
                                                           performs an indexed indirect access. When a data
In addition, there are registers INDF0, INDF1 and          access to this INDFn location (PLUSWn) occurs, the
INDF2, which are not physically implemented. Reading       FSRn is configured to add the signed value in the
or writing to these registers activates indirect address-  WREG register and the value in FSR to form the
ing, with the value in the corresponding FSR register      address before an indirect access. The FSR value is
being the address of the data. If an instruction writes a  not changed.
value to INDF0, the value will be written to the address
pointed to by FSR0H:FSR0L. A read from INDF1 reads         If an FSR register contains a value that points to one of
                                                           the INDFn, an indirect read will read 00h (zero bit is
DS39612B-page 56                                           set), while an indirect write will be equivalent to a NOP
                                                           (Status bits are not affected).

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

                                                                                                2005 Microchip Technology Inc.
                                     PIC18F6525/6621/8525/8621

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.

2005 Microchip Technology Inc.                                                        DS39612B-page 57
PIC18F6525/6621/8525/8621

4.13 STATUS Register                                          It is recommended that only BCF, BSF, SWAPF, MOVFF
                                                              and MOVWF instructions are used to alter the STATUS
The STATUS register, shown in Register 4-3, contains          register, because these instructions do not affect the Z,
the arithmetic status of the ALU. As with any other SFR,      C, DC, OV or N bits in the STATUS register.
it can be the operand for any instruction.
                                                              For other instructions that do not affect Status bits, see
If the STATUS register is the destination for an instruc-     the instruction set summaries in Table 25-2.
tion that affects the Z, DC, C, OV or N bits, the results of
the instruction are not written; instead, the status is       Note:  The C and DC bits operate as the borrow
updated according to the instruction performed. There-               and digit borrow bits respectively in
fore, the result of an instruction with the STATUS register          subtraction.
as its destination may be different than intended. As an
example, CLRF STATUS will set the Z bit and leave the
remaining Status bits unchanged (`000u u1uu').

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

DS39612B-page 58                                                                      2005 Microchip Technology Inc.
                                      PIC18F6525/6621/8525/8621

4.14 RCON Register                                        Note:  It is recommended that the POR bit be set
                                                                 after a Power-on Reset has been
The Reset Control (RCON) register contains flag bits             detected, so that subsequent Power-on
that allow differentiation between the sources of a              Resets may be detected.
device Reset. These flags include the TO, PD, POR,
BOR and RI bits. This register is readable and writable.

REGISTER 4-4:  RCON: RESET CONTROL REGISTER

               R/W-0             U-0  U-0                 R/W-1  R/W-1  R/W-1            R/W-0  R/W-0
                                                                   TO     PD              POR   BOR
               IPEN              --   --                  RI
                                                                                                     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
               1 = The RESET instruction was not executed
bit 0          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

2005 Microchip Technology Inc.                                                          DS39612B-page 59
PIC18F6525/6621/8525/8621

NOTES:

DS39612B-page 60            2005 Microchip Technology Inc.
                                 PIC18F6525/6621/8525/8621

5.0 FLASH PROGRAM MEMORY                                 5.1 Table Reads and Table Writes

The Flash program memory is readable, writable and       In order to read and write program memory, there are
erasable, during normal operation over the entire VDD    two operations that allow the processor to move bytes
range.                                                   between the program memory space and the data RAM:

A read from program memory is executed on one byte       Table Read (TBLRD)
at a time. A write to program memory is executed on       Table Write (TBLWT)
blocks of 8 bytes at a time. Program memory is erased
in blocks of 64 bytes at a time. A bulk erase operation  The program memory space is 16 bits wide, while the
may not be issued from user code.                        data RAM space is 8 bits wide. Table reads and table
                                                         writes move data between these two memory spaces
Writing or erasing program memory will cease instruc-    through an 8-bit register (TABLAT).
tion fetches until the operation is complete. The
program memory cannot be accessed during the write       Table read operations retrieve data from program
or erase, therefore, code cannot execute. An internal    memory and place it into the data RAM space.
programming timer terminates program memory writes       Figure 5-1 shows the operation of a table read with
and erases.                                              program memory and data RAM.

A value written to program memory does not need to be    Table write operations store data from the data memory
a valid instruction. Executing a program memory          space into holding registers in program memory. The
location that forms an invalid instruction results in a  procedure to write the contents of the holding registers
NOP.                                                     into program memory is detailed in Section 5.5
                                                         "Writing to Flash Program Memory". Figure 5-2
                                                         shows the operation of a table write with program
                                                         memory and data RAM.

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

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

2005 Microchip Technology Inc.                                                     DS39612B-page 61
PIC18F6525/6621/8525/8621

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       Note:                        During normal operation, the WRERR bit
will read all `0's. The EECON2 register is used                                      is read as `1'. This can indicate that a write
exclusively in the memory write and erase sequences.                                 operation was prematurely terminated by
                                                                                     a Reset, or a write operation was
Control bit, EEPGD, determines if the access will be a                               attempted improperly.
program or data EEPROM memory access. When
clear, any subsequent operations will operate on the    The WR control bit initiates write operations. The bit
data EEPROM memory. When set, any subsequent            cannot be cleared, only set, in software; it is cleared in
operations will operate on the program memory.          hardware at the completion of the write operation. The
                                                        inability to clear the WR bit in software prevents the
Control bit, CFGS, determines if the access will be to  accidental or premature termination of a write
the Configuration/Calibration registers or to program   operation.
memory/data EEPROM memory. When set,
subsequent operations will operate on Configuration     Note:                        Interrupt flag bit, EEIF in the PIR2 register,
registers regardless of EEPGD (see Section 24.0                                      is set when the write is complete. It must
"Special Features of the CPU"). When clear, memory                                   be cleared in software.
selection access is determined by EEPGD.

DS39612B-page 62                                                                      2005 Microchip Technology Inc.
                                        PIC18F6525/6621/8525/8621

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

2005 Microchip Technology Inc.                                                     DS39612B-page 63
PIC18F6525/6621/8525/8621

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 register is used to  Flash program memory.
hold 8-bit data during data transfers between program
memory and data RAM.                                     When a TBLRD is executed, all 22 bits of the TBLPTR
                                                         determine which byte is read from program memory
5.2.3  TBLPTR TABLE POINTER                            into TABLAT.
       REGISTER
                                                         When a TBLWT is executed, the three LSbs of the Table
The Table Pointer register (TBLPTR) addresses a byte     Pointer register (TBLPTR<2:0>) determine which of the
within the program memory. The TBLPTR is comprised       eight program memory holding registers is written to.
of three SFR registers: Table Pointer Upper Byte, Table  When the timed write to program memory (long write)
Pointer High Byte and Table Pointer Low Byte             begins, the 19 MSbs of the TBLPTR (TBLPTR<21:3>)
(TBLPTRU:TBLPTRH:TBLPTRL). These three regis-            will determine which program memory block of 8 bytes
ters join to form a 22-bit wide pointer. The low-order   is written to. For more detail, see Section 5.5 "Writing
21 bits allow the device to address up to 2 Mbytes of    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 register (TBLPTR<21:6>)
The Table Pointer, TBLPTR, is used by the TBLRD and      point to 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 opera-
tion. 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
                                                                    TBLPTR is not modified
      TBLRD*
      TBLWT*                                           TBLPTR is incremented after the read/write
     TBLRD*+                                           TBLPTR is decremented after the read/write
     TBLWT*+                                          TBLPTR is incremented before the read/write
     TBLRD*-
     TBLWT*-
     TBLRD+*
     TBLWT+*

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>

DS39612B-page 64                                                 2005 Microchip Technology Inc.
                                        PIC18F6525/6621/8525/8621

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*+  TABLAT, W
             MOVF     WORD_EVEN
             MOVWF
             TBLRD*+  TABLAT, W
             MOVFW    WORD_ODD
             MOVWF

2005 Microchip Technology Inc.                                                        DS39612B-page 65
PIC18F6525/6621/8525/8621

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 register with address of row
                                                                 being erased.
When initiating an erase sequence from the micro-
controller itself, a block of 64 bytes of program memory   2. Set the EECON1 register for the erase operation:
is erased. The Most Significant 16 bits of the                   set EEPGD bit to point to program memory;
TBLPTR<21:6> point to the block being erased.                     clear the CFGS bit to access program memory;
TBLPTR<5:0> are ignored.                                          set WREN bit to enable writes;
                                                                  set FREE bit to enable the erase.
The EECON1 register commands the erase operation.
The EEPGD bit must be set to point to the Flash            3. Disable interrupts.
program memory. The WREN bit must be set to enable         4. Write 55h to EECON2.
write operations. The FREE bit is set to select an erase   5. Write AAh to EECON2.
operation.                                                 6. Set the WR bit. This will begin the row erase

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

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

EXAMPLE 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
                  BSF    EECON1, WREN                      ; write 55h
                  BSF    EECON1, FREE
                  BCF    INTCON, GIE                       ; write AAh
                  MOVLW  55h                               ; start erase (CPU stall)
                  MOVWF  EECON2                            ; re-enable interrupts
                  MOVLW  AAh
                  MOVWF  EECON2
                  BSF    EECON1, WR
                  BSF    INTCON, GIE

DS39612B-page 66                                                   2005 Microchip Technology Inc.
                                     PIC18F6525/6621/8525/8621

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
Table writes are used internally to load the holding      internal Flash. Instruction execution is halted while in a
registers needed to program the Flash memory. There       long write cycle. The long write will be terminated by
are 8 holding registers used by the table writes for      the 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 WRITE                         8. Disable interrupts.
       SEQUENCE                                           9. Write 55h to EECON2.
                                                          10. Write AAh to EECON2.
The sequence of events for programming an internal        11. Set the WR bit. This will begin the write cycle.
program memory location should be:                        12. The CPU will stall for duration of the write (about

1. Read 64 bytes into RAM.                                      2 ms using internal timer).
2. Update data values in RAM as necessary.                13. Re-enable interrupts.
3. Load Table Pointer register with address being         14. Repeat steps 6-14 seven times to write 64 bytes.
                                                          15. Verify the memory (table read).
      erased.
4. Do the row erase procedure.                            This procedure will require about 18 ms to update one
5. Load Table Pointer register with address of first      row of 64 bytes of memory. An example of the required
                                                          code is given in Example 5-3.
      byte being written.
6. Write the first 8 bytes into the holding registers     Note:        Before setting the WR bit, the Table
                                                                       Pointer address needs to be within the
      with auto-increment.                                             intended address range of the eight bytes
7. Set the EECON1 register for the write operation:                    in the holding register.

       set EEPGD bit to point to program memory;
       clear the CFGS bit to access program memory;
       set WREN to enable byte writes.

2005 Microchip Technology Inc.                                             DS39612B-page 67
PIC18F6525/6621/8525/8621

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

Required          MOVWF EECON2

Sequence          MOVLW AAh

                  MOVWF EECON2

                  BSF      EECON1, WR

                  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

DS39612B-page 68                                 2005 Microchip Technology Inc.
                                        PIC18F6525/6621/8525/8621

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

PROGRAM_MEMORY

                BSF      EECON1, EEPGD                   ; point to Flash program memory
                                                         ; access Flash program memory
                BCF      EECON1, CFGS                    ; enable write to memory
                                                         ; disable interrupts
                BSF      EECON1, WREN
                                                         ; write 55h
                BCF      INTCON, GIE
                                                         ; write AAh
                MOVLW 55h                                ; start program (CPU stall)
                                                         ; re-enable interrupts
       Required MOVWF EECON2                             ; loop until done

       Sequence MOVLW AAh                                ; disable write to memory

                MOVWF EECON2

                BSF      EECON1, WR

                BSF      INTCON, GIE

                DECFSZ COUNTER_HI

                BRA PROGRAM_LOOP

                BCF      EECON1, WREN

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          To protect against spurious writes to Flash program
memory should be verified against the original value.       memory, the write initiate sequence must also be
This should be used in applications where excessive         followed. See Section 24.0 "Special Features of the
writes 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 24.0 "Special Features of the CPU" for
loss of power or an unexpected Reset, the memory            details on code protection of Flash program memory.
location just programmed should be verified and repro-
grammed if needed. The WRERR bit is set when a
write operation is interrupted by a MCLR Reset or a
WDT Time-out Reset during normal operation. In these
situations, users can check the WRERR bit and rewrite
the location.

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(1) Program Memory Table Pointer Upper Byte           --00 0000 --00 0000

                                      (TBLPTR<20:16>)

TBLPTRH 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 000x  0000 000u
TABLAT Program Memory Table Latch
                                                                                                   --         --
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF                             RBIF  xx-0 x000  uu-0 u000
                                                                                             -1-1 1111  -1-1 1111
EECON2 EEPROM Control Register 2 (not a physical register)                              RD   -0-0 0000  -0-0 0000
                                                                                     CCP2IP  -0-0 0000  -0-0 0000
EECON1 EEPGD CFGS                --    FREE WRERR WREN             WR                CCP2IF
                                                                                     CCP2IE
IPR2     --          CMIP        --    EEIP BCLIP LVDIP TMR3IP

PIR2     --          CMIF        --    EEIF BCLIF LVDIF TMR3IF

PIE2     --          CMIE        --    EEIE BCLIE LVDIE TMR3IE

Legend:  x = unknown, u = unchanged, r = reserved, -- = unimplemented, read as `0'.
Note 1:  Shaded cells are not used during Flash/EEPROM access.
         Bit 21 of the TBLPTRU allows access to device configuration bits.

2005 Microchip Technology Inc.                                                              DS39612B-page 69
PIC18F6525/6621/8525/8621

NOTES:

DS39612B-page 70            2005 Microchip Technology Inc.
                                      PIC18F6525/6621/8525/8621

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, PIC18F8525/8621 controllers are
             implemented on PIC18F6525/6621 (64-pin)        capable of operating in any one of four program mem-
             devices.                                       ory modes using combinations of on-chip and external
                                                            program memory. The functions of the multiplexed port
The external memory interface is a feature of the           pins depends on the program memory mode selected,
PIC18F8525/8621 devices that allows the controller to       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           function.
27 pins. These pins are reserved for external address/
data bus functions; they are multiplexed with I/O port      In Microcontroller Mode, the bus is not active and
pins on four ports. Three I/O ports are multiplexed with    the pins have their port functions only. Writes to the
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 is        In Microprocessor with Boot Block or Extended
set (see Register 6-1). A list of the multiplexed pins and  Microcontroller Mode, the external program memory
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 oper-
As implemented in the PIC18F8525/8621 devices, the          ations 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 micro-         fetching and accessing internal program memory loca-
controllers. The most notable difference is that the        tions only, the EBDIS control bit will change the pins
interface on PIC18F8525/8621 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
Section 4.1.1"PIC18F6525/6621/8525/8621Program
Memory Modes".

REGISTER 6-1:  MEMCON: MEMORY CONTROL 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

               bit 7                                                       bit 0

bit 7          EBDIS: External Bus Disable bit

bit 6          1 = External system bus disabled, all external bus drivers are mapped as I/O ports
bit 5-4        0 = External system bus enabled and I/O ports are disabled

bit 3-2        Unimplemented: Read as `0'
bit 1-0
               WAIT1:WAIT0: 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'

               WM1:WM0: 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

                  Note: The MEMCON register is unimplemented and reads all `0's when the device is in
                              Microcontroller 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

2005 Microchip Technology Inc.                                       DS39612B-page 71
PIC18F6525/6621/8525/8621

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:        PIC18F8525/8621 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           PORTJ  bit 1 Input/Output or System Bus Output Enable (OE) Control pin
RJ2/WRL
RJ3/WRH          PORTJ  bit 2 Input/Output or System Bus Write Low (WRL) Control pin
RJ4/BA0          PORTJ  bit 3 Input/Output or System Bus Write High (WRH) Control pin
RJ5/CE           PORTJ  bit 4 Input/Output or System Bus Byte Address bit 0
RJ6/LB
RJ7/UB           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

DS39612B-page 72                                                      2005 Microchip Technology Inc.
                                 PIC18F6525/6621/8525/8621

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
PIC18F8525/8621 devices operates only in 16-bit             16-bit modes do not need BA0. JEDEC standard static
mode. The mode selection is not software configurable       RAM memories will use the UB or LB signals for byte
but is programmed via the configuration bits.               selection.

The WM1:WM0 bits in the MEMCON register                     6.2.1 16-BIT BYTE WRITE MODE
determine 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 PIC18F8525/8621 devices. This mode is used for
16-bit Byte Write                                         two separate 8-bit memories connected for 16-bit
16-bit Word Write                                         operation. This generally includes basic EPROM and
16-bit Byte Select                                        Flash 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, A15:A0, 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>

PIC18F8X2X                       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".

2005 Microchip Technology Inc.                                                                    DS39612B-page 73
PIC18F6525/6621/8525/8621

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 PIC18F8525/8621 devices. This mode is           the holding latch are presented on the lower byte of the
used for word-wide memories which include some of        AD15:AD0 bus.
the EPROM and Flash type memories. This mode
allows opcode fetches and table reads from all forms of  The WRH signal is strobed for each write cycle; the
16-bit memory and table writes to any type of word-      WRL pin is unused. The signal on the BA0 pin indicates
wide external memories. This method makes a              the LSb of the TBLPTR but it is left unconnected.
distinction between TBLWT cycles to even or odd          Instead, the UB and LB signals are active to select both
addresses.                                               bytes. The obvious limitation to this method is that the
                                                         table write must be done in pairs on a specific word
During a TBLWT cycle to an even address                  boundary to correctly write a word location.
(TBLPTR<0> = 0), the TABLAT data is transferred to a
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

PIC18F8X2X             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".

DS39612B-page 74                                                   2005 Microchip Technology Inc.
                                 PIC18F6525/6621/8525/8621

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 PIC18F8525/8621 devices. This mode allows       port pin be connected to the memory's BYTE/WORD
table write operations to word-wide external memories    pin to provide the select signal. They also use the BA0
with byte selection capability. This generally includes  signal from the controller as a byte address. JEDEC
both 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

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

AD<15:8>                                              138(2)      CE         OE WR(1)
                                 373                              A0
       ALE                                                        BYTE/WORD
A<19:16>                                       A<20:1>
                                                                  A  JEDEC Word
         OE
      WRH                                                                 SRAM Memory
      WRL
       BA0                                                                                                                                     D<15:0>

         I/O                                                      CE         D<15:0>

          LB                                                      LB
         UB                                                       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".
         2: Demultiplexing is only required when multiple memory devices are accessed.

2005 Microchip Technology Inc.                                                DS39612B-page 75
PIC18F6525/6621/8525/8621

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

DS39612B-page 76                                                                2005 Microchip Technology Inc.
                                        PIC18F6525/6621/8525/8621

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

2005 Microchip Technology Inc.                            DS39612B-page 77
PIC18F6525/6621/8525/8621

NOTES:

DS39612B-page 78            2005 Microchip Technology Inc.
                                 PIC18F6525/6621/8525/8621

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
normal operation over the entire VDD range. The data       maximum of 1024 bytes of data EEPROM. The two
memory is not directly mapped in the register file         Most Significant bits of the address are stored in
space. Instead, it is indirectly addressed through the     EEADRH, while the remaining eight Least Significant
Special Function Registers (SFR).                          bits are 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
The EEPROM data memory allows byte read and write.         operations, respectively. These bits cannot be cleared,
When interfacing to the data memory block, EEDATA          only set in software. They are cleared in hardware at
holds the 8-bit data for read/write. EEADR and             the completion of the read or write operation. The
EEADRH hold the address of the EEPROM location             inability to clear the WR bit in software prevents the
being accessed. These devices have 1024 bytes of           accidental or premature termination of a write
data EEPROM with an address range from 00h to              operation.
3FFh.
                                                           Note:  During normal operation, the WRERR bit
The EEPROM data memory is rated for high erase/                   is read as `1'. This can indicate that a write
write cycles. A byte write automatically erases the loca-         operation was prematurely terminated by
tion and writes the new data (erase-before-write). The            a Reset, or a write operation was
write time is controlled by an on-chip timer. The write           attempted improperly.
time will vary with voltage and temperature, as well as
from chip-to-chip. Please refer to parameter D122          The WREN bit, when set, will allow a write operation.
(Section 27.0 "Electrical Characteristics") for exact      On power-up, the WREN bit is clear. The WRERR bit is
limits.                                                    set when a write operation is interrupted by a MCLR
                                                           Reset or a WDT Time-out Reset during normal
                                                           operation. In these situations, the user can check the
                                                           WRERR bit and rewrite the location. It is necessary to
                                                           reload the data and address registers (EEDATA and
                                                           EEADR) due to the Reset condition forcing the
                                                           contents of the registers to zero.

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

2005 Microchip Technology Inc.                                   DS39612B-page 79
PIC18F6525/6621/8525/8621

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

DS39612B-page 80                                                           2005 Microchip Technology Inc.
                                 PIC18F6525/6621/8525/8621

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

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  0x55            ;
          MOVWF  EECON2          ; Write 55h
          MOVLW  0xAA            ;
          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)

2005 Microchip Technology Inc.                                               DS39612B-page 81
PIC18F6525/6621/8525/8621

7.5 Write Verify                                         7.7 Operation During Code-Protect

Depending on the application, good programming           Data EEPROM memory has its own code-protect
practice may dictate that the value written to the mem-  mechanism. External read and write operations are
ory should be verified against the original value. This  disabled if either of these mechanisms are enabled.
should be used in applications where excessive writes    Refer to Section 24.0 "Special Features of the
can stress bits near the specification limit.            CPU", for additional information.

7.6 Protection Against Spurious Write                    7.8 Using the Data EEPROM

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

                                                         A simple data EEPROM refresh routine is shown in
                                                         Example 7-3.

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

DS39612B-page 82                                                2005 Microchip Technology Inc.
                                       PIC18F6525/6621/8525/8621

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

         --     CMIP             --    EEIP BCLIP LVDIP TMR3IP CCP2IP -1-1 1111 -1-1 1111

         --     CMIF             --    EEIF BCLIF LVDIF TMR3IF CCP2IF -0-0 0000 ---0 0000

         --     CMIE             --    EEIE BCLIE LVDIE TMR3IE CCP2IE -0-0 0000 ---0 0000

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

2005 Microchip Technology Inc.                                                             DS39612B-page 83
PIC18F6525/6621/8525/8621

NOTES:

DS39612B-page 84            2005 Microchip Technology Inc.
                                 PIC18F6525/6621/8525/8621

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 the       when one argument of the multiply is already loaded in
PIC18F6525/6621/8525/8621 devices. By making the                 the WREG register.
multiply a hardware operation, it completes in a single
instruction cycle. This is an unsigned multiply that gives       Example 8-2 shows the sequence to do an 8 x 8 signed
a 16-bit result. The result is stored in the 16-bit product      multiply. To account for the signed bits of the
register pair (PRODH:PRODL). The multiplier does not             arguments, each argument's Most Significant bit (MSb)
affect any flags in the ALUSTA register.                         is tested 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            MOVF ARG1, W
Processors.                                                       MULWF ARG2             ;

Table 8-1 shows a performance comparison between                  BTFSC ARG2, SB         ; ARG1 * ARG2 ->
Enhanced devices using the single-cycle hardware                  SUBWF PRODH, F
multiply and performing the same function without the                                    ; PRODH:PRODL
hardware multiply.                                                MOVF ARG2, W
                                                                  BTFSC ARG1, SB         ; Test Sign Bit
                                                                  SUBWF PRODH, F
                                                                                         ; PRODH = PRODH

                                                                                         ;            - ARG1

                                                                                         ;

                                                                                         ; Test Sign Bit

                                                                                         ; PRODH = PRODH

                                                                                         ;            - ARG2

TABLE 8-1: PERFORMANCE COMPARISON

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

                  Hardware multiply                          24

16 x 16 signed    Without hardware multiply                  52

                  Hardware multiply                          36

2005 Microchip Technology Inc.                                                             DS39612B-page 85
PIC18F6525/6621/8525/8621

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
                                                                                       ;
;                                                                   MOVFF PRODH, RES3  ; Add cross
                                                                    MOVFF PRODL, RES2  ; products
   MOVF ARG1H, W                                              ;                        ;
                                                                    MOVF ARG1L, W      ;
   MULWF ARG2H       ; ARG1H * ARG2H ->                             MULWF ARG2H        ;

                     ; PRODH:PRODL                                                     ;
                                                                                       ; ARG1H * ARG2L ->
   MOVFF PRODH, RES3 ;                                                                 ; PRODH:PRODL
                                                                                       ;
   MOVFF PRODL, RES2 ;                                                                 ; Add cross
                                                                                       ; products
;                                                                   MOVF PRODL, W      ;
                                                                    ADDWF RES1, F      ;
   MOVF ARG1L,W                                                     MOVF PRODH, W      ;
                                                                    ADDWFC RES2, F
   MULWF ARG2H       ; ARG1L * ARG2H ->                             CLRF WREG          ; ARG2H:ARG2L neg?
                                                                    ADDWFC RES3, F     ; no, check ARG1
                     ; PRODH:PRODL                            ;                        ;
                                                                    MOVF ARG1H, W      ;
   MOVF PRODL, W     ;                                              MULWF ARG2L        ;

   ADDWF RES1, F     ; Add cross                                                       ; ARG1H:ARG1L neg?
                                                                                       ; no, done
   MOVF PRODH, W     ; products                                                        ;
                                                                                       ;
   ADDWFC RES2, F    ;                                                                 ;

   CLRF WREG         ;

   ADDWFC RES3, F    ;

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

DS39612B-page 86                                                              2005 Microchip Technology Inc.
                                 PIC18F6525/6621/8525/8621

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

2005 Microchip Technology Inc.                              DS39612B-page 87
PIC18F6525/6621/8525/8621

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

DS39612B-page 88                                                                                              2005 Microchip Technology Inc.
                                  PIC18F6525/6621/8525/8621

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

REGISTER 9-1:  INTCON: INTERRUPT CONTROL REGISTER

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

bit 7 GIE/GIEH: Global Interrupt Enable bit
            When IPEN (RCON<7>) = 0:
            1 = Enables all unmasked interrupts
            0 = Disables all interrupts
            When IPEN (RCON<7>) = 1:
            1 = Enables all high priority interrupts
            0 = Disables all 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

2005 Microchip Technology Inc.                                           DS39612B-page 89
PIC18F6525/6621/8525/8621

REGISTER 9-2:     INTCON2: INTERRUPT CONTROL REGISTER 2

                  R/W-1 R/W-1        R/W-1  R/W-1      R/W-1   R/W-1        R/W-1   R/W-1
                                                              TMR0IP        INT3IP  RBIP
                  RBPU INTEDG0 INTEDG1 INTEDG2 INTEDG3
                                                                                        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 interrupt enable bit. User software
                         should ensure the appropriate interrupt flag bits are clear prior to enabling an
                         interrupt. This feature allows for software polling.

DS39612B-page 90                                               2005 Microchip Technology Inc.
                                  PIC18F6525/6621/8525/8621

REGISTER 9-3:  INTCON3: INTERRUPT CONTROL REGISTER 3
                  R/W-1 R/W-1 R/W-0 R/W-0 R/W-0
                  INT2IP INT1IP INT3IE INT2IE INT1IE  R/W-0                         R/W-0   R/W-0
                                                      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 interrupt enable bit. User software
                                 should ensure the appropriate interrupt flag bits are clear prior to enabling an
                                 interrupt. This feature allows for software polling.

2005 Microchip Technology Inc.                                                     DS39612B-page 91
PIC18F6525/6621/8525/8621

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                  Interrupt Enable bit, GIE (INTCON<7>).
interrupt sources, there are three Peripheral Interrupt
Request 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

               Note 1: Enabled only in Microcontroller mode for PIC18F8525/8621 devices.

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, RCREGx, is full (cleared when RCREGx is read)
            0 = The USART1 receive buffer is empty

bit 4 TX1IF: USART1 Transmit Interrupt Flag bit
            1 = The USART1 transmit buffer, TXREGx, is empty (cleared when TXREGx 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: ECCP1 Interrupt Flag bit
            Capture mode:
            1 = A TMR1 register capture occurred (must be cleared in software)
            0 = No TMR1 register capture occurred
            Compare mode:
            1 = A TMR1 register compare match occurred (must be cleared in software)
            0 = No TMR1 register compare match occurred
            PWM mode:
            Unused in this mode.

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

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

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

DS39612B-page 92                                                           2005 Microchip Technology Inc.
                                        PIC18F6525/6621/8525/8621

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 MSSP 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: ECCP2 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

2005 Microchip Technology Inc.                                                    DS39612B-page 93
PIC18F6525/6621/8525/8621

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, RCREGx, is full (cleared when RCREGx 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, TXREGx, is empty (cleared when TXREGx 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 (ECCP3, CCP4 and CCP5)
                  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

DS39612B-page 94                                        2005 Microchip Technology Inc.
                                        PIC18F6525/6621/8525/8621

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

               Note: Enabled only in Microcontroller mode for PIC18F8525/8621 devices.

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: ECCP1 Interrupt Enable bit

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

bit 1          TMR2IE: TMR2 to PR2 Match Interrupt Enable bit

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

bit 0          TMR1IE: TMR1 Overflow Interrupt Enable bit

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

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

2005 Microchip Technology Inc.                                                       DS39612B-page 95
PIC18F6525/6621/8525/8621

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: ECCP2 Interrupt Enable bit

                  1 = Enables the ECCP2 interrupt
                  0 = Disables the ECCP2 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

DS39612B-page 96                                                   2005 Microchip Technology Inc.
                                      PIC18F6525/6621/8525/8621

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
               RC2IE: USART2 Receive Interrupt Enable bit
bit 4          1 = Enables the USART2 receive interrupt
               0 = Disables the USART2 receive interrupt
bit 3
               TX2IE: USART2 Transmit Interrupt Enable bit
bit 2-0        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 (ECCP3, CCP4 and CCP5)
               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

2005 Microchip Technology Inc.                                          DS39612B-page 97
PIC18F6525/6621/8525/8621

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

                  Note: Enabled only in Microcontroller mode for PIC18F8525/8621 devices.

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: ECCP1 Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 1             TMR2IP: TMR2 to PR2 Match Interrupt Priority bit

                  1 = High priority
                  0 = Low priority

bit 0             TMR1IP: TMR1 Overflow Interrupt Priority bit

                  1 = High priority

                  0 = Low priority

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

DS39612B-page 98                                                                    2005 Microchip Technology Inc.
                                        PIC18F6525/6621/8525/8621

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: ECCP2 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

2005 Microchip Technology Inc.                                                 DS39612B-page 99
PIC18F6525/6621/8525/8621

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
                   RC2IP: USART2 Receive Interrupt Priority bit
bit 4              1 = High priority
                   0 = Low priority
bit 3
                   TX2IP: USART2 Transmit Interrupt Priority bit
bit 2-0            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 (ECCP3, CCP4 and CCP5)
                   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

DS39612B-page 100                                                               2005 Microchip Technology Inc.
                                      PIC18F6525/6621/8525/8621

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: RESET CONTROL REGISTER

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

         IPEN                    --   --                     RI     TO   PD    POR  BOR

         bit 7                                                                      bit 0

bit 7    IPEN: Interrupt Priority Enable bit
         1 = Enable priority levels on interrupts
bit 6-5  0 = Disable priority levels on interrupts (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

2005 Microchip Technology Inc.                                                DS39612B-page 101
PIC18F6525/6621/8525/8621

9.6 INT0 Interrupt                                            9.8 PORTB Interrupt-on-Change

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

9.7 TMR0 Interrupt

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

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

DS39612B-page 102                                              2005 Microchip Technology Inc.
                                       PIC18F6525/6621/8525/8621

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 PIC18F6525/6621/     PORTA is a 7-bit wide, bidirectional port. The corre-
8525/8621 devices. Some of their pins are multiplexed     sponding data direction register is TRISA. Setting a
with one or more alternate functions from the other       TRISA bit (= 1) will make the corresponding PORTA pin
peripheral features on the device. In general, when a     an input (i.e., put the corresponding output driver in a
peripheral is enabled, that pin may not be used as a      high-impedance mode). Clearing a TRISA bit (= 0) will
general 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 register)                    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. The
Data Bus                               I/O pin            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  0x0F    ; Configure A/D
                                                                         ; for digital inputs
                                                          MOVWF  TRISA   ; Value used to
                                                                         ; initialize data
                                                                         ; direction
                                                                         ; Set RA<3:0> as inputs
                                                                         ; RA<6:4> as outputs

2005 Microchip Technology Inc.                                          DS39612B-page 103
PIC18F6525/6621/8525/8621

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
                                                                                             &nbs