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

型号

产品描述

搜索

PIC18LF14K22-E-SS

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

器件描述

8-bit Microcontrollers - MCU 16KB Flash 512bytes RAM 256bytes EEPROM

参数

产品属性属性值
Product AttributeAttribute Value
制造商:
Manufacturer:
Microchip
产品种类:
Product Category:
8-bit Microcontrollers - MCU
RoHS:YES
安装风格:
Mounting Style:
SMD/SMT
封装 / 箱体:
Package / Case:
SSOP-20
系列:
Series:
PIC18
Core:PIC18
Data Bus Width:8 bit
Maximum Clock Frequency:48 MHz
Program Memory Size:8 kB
Data RAM Size:256 B
ADC Resolution:10 bit
Number of I/Os:18 I/O
工作电源电压:
Operating Supply Voltage:
1.8 V to 3.6 V
最大工作温度:
Maximum Operating Temperature:
+ 125 C
接口类型:
Interface Type:
EUSART, I2C, SPI
封装:
Packaging:
Tube
高度:
Height:
1.75 mm
长度:
Length:
7.2 mm
产品:
Product:
MCU
Program Memory Type:Flash
宽度:
Width:
5.3 mm
商标:
Brand:
Microchip Technology
Data RAM Type:SRAM
最小工作温度:
Minimum Operating Temperature:
- 40 C
Number of ADC Channels:12
Number of Timers/Counters:4 Timer
Processor Series:PIC18
工厂包装数量:
Factory Pack Quantity:
67
电源电压-最大:
Supply Voltage - Max:
3.6 V
电源电压-最小:
Supply Voltage - Min:
1.8 V, 2.7 V
商标名:
Tradename:
PIC
单位重量:
Unit Weight:
0.016000 oz

PIC18LF14K22-E-SS器件文档内容

                                                           PIC18(L)F1XK22

               20-Pin Flash Microcontrollers with XLP Technology

High-Performance RISC CPU                            Analog Features

•  C Compiler Optimized Architecture:                •  Analog-to-Digital Converter (ADC) module

   -  Optional extended instruction set designed to     -  10-bit resolution, 12 channels

      optimize re-entrant code                          -  Auto-acquisition capability

•  256 bytes Data EEPROM                                -  Conversion available during Sleep

•  Up to 16 Kbytes Linear Program Memory             •  Analog Comparator module:

   Addressing                                           -  Two rail-to-rail analog comparators

•  Up to 512 bytes Linear Data Memory Addressing        -  Independent input multiplexing

•  Up to 16 MIPS Operation                              -  Inputs and outputs externally accessible

•  16-bit Wide Instructions, 8-bit Wide Data Path    •  Voltage Reference module:

•  Priority Levels for Interrupts                       -  Fixed Voltage Reference (FVR) with 1.024V,

•  31-Level, Software Accessible Hardware Stack            2.048V and 4.096V output levels

•  8 x 8 Single-Cycle Hardware Multiplier               -  5-bit rail-to-rail resistive Digital-to-Analog

                                                           Converter (DAC) with positive and negative

Flexible Oscillator Structure                              reference selection

•  Precision 16 MHz Internal Oscillator Block:       Peripheral Highlights

   -  Factory calibrated to ± 1%                     •  17 I/O Pins and 1 Input-only Pin:

   -  Software selectable frequencies range of          -  High current sink/source 25 mA/25 mA

      31 kHz to 16 MHz                                  -  Programmable weak pull-ups

   -  64 MHz performance available using PLL –          -  Programmable interrupt-on- change

      no external components required                   -  Three external interrupt pins

•  Four Crystal modes up to 64 MHz                   •  Four Timer modules:

•  Two External Clock modes up to 64 MHz                -  Three 16-bit timers/counters with prescaler

•  4X Phase Lock Loop (PLL)                             -  One 8-bit timer/counter with 8-bit period

•  Secondary Oscillator using Timer1 @ 32 kHz              register, prescaler and postscaler

•  Fail-Safe Clock Monitor                              -  Dedicated, low-power Timer1 oscillator

   -  Allows for safe shutdown if peripheral clock   •  Enhanced Capture/Compare/PWM (ECCP)

      stops                                             module:

•  Two-Speed Oscillator Start-up                        -  One, two or four PWM outputs

Special Microcontroller Features                        -  Selectable polarity

•  2.3V - 5.5V Operation – PIC18F1XK22                  -  Programmable dead time

•  1.8V-3.6V Operation – PIC18LF1XK22                   -  Auto-shutdown and Auto-restart

•  Self-reprogrammable under Software Control           -  PWM output steering control

•  Power-on Reset (POR), Power-up Timer (PWRT)       •  Master Synchronous Serial Port (MSSP) module

   and Oscillator Start-up Timer (OST)                  -  3-wire SPI (supports all four SPI modes)
                                                           I2C Master and Slave modes (Slave mode
•  Programmable Brown-out Reset (BOR)                   -

•  Extended Watchdog Timer (WDT):                          address masking)

   -  Programmable period from 4 ms to 131s          •  Enhanced Universal Synchronous Asynchronous

•  Programmable Code Protection                         Receiver Transmitter module (EUSART)

•  In-Circuit Serial Programming™ (ICSP™) via           -  Supports RS-232, RS-485 and LIN 2.0

   two pins                                             -  Auto-Baud Detect

•  In-Circuit Debug via Two Pins                        -  Auto Wake-up on Break

                                                     •  SR Latch (555 Timer) module with:

Extreme Low-Power Management                            -  Configurable inputs and outputs
                                                           Supports mTouch® capacitive sensing
PIC18LF1XK22 with XLP Technology                        -

•  Sleep mode: 34 nA                                       applications

•  Watchdog Timer: 460 nA

•  Timer1 Oscillator: 650 nA @ 32 kHz

 2009-2016 Microchip Technology Inc.                                                      DS40001365F-page 1
PIC18(L)F1XK22

PIC18(L)F1XK22 Family Types

                     Data Sheet Index  Program Memory  Data Memory                                                                                           Comparators

Device                                                 SRAM                    Data                   Pins                     I/O(1)  10-bit A/D  Channels               Timers  8-bit/16-bit  ECCP  MSSP  EUSART  SR Latch

                                       Bytes   Words   (bytes)                EEPROM

                                                                               (bytes)

PIC18(L)F13K22       (1)                  8K   4K      256                     256                                    20       18      12-ch                 2            1/3                   1     1     1       Yes

PIC18(L)F14K22       (1)                  16K  8K      512                     256                                    20       18      12-ch                 2            1/3                   1     1     1       Yes

Note 1:    One pin is input-only.

Data Sheet Index: (Unshaded devices are described in this                                             document)

       1.  DS40001365                          PIC18(L)F1XK22 20-Pin Flash                            Microcontrollers with                                  XLP          Technology

Note:      For other small form-factor package availability and marking information, please visit

           http://www.microchip.com/packaging or contact your local sales office.

Pin Diagrams

FIGURE 1:            20-PIN PDIP, SSOP, SOIC

                                                       VDD                 1                                                   20      VSS

                                                       RA5                 2                                                   19      RA0/PGD

                                                       RA4                 3          PIC18(L)F13K22  PIC18(L)F14K22           18      RA1/PGC

                                               RA3/MCLR/VPP                4                                                   17      RA2

                                                       RC5                 5                                                   16      RC0

                                                       RC4                 6                                                   15      RC1

                                                   RC3/PGM                 7                                                   14      RC2

                                                       RC6                 8                                                   13      RB4

                                                       RC7                 9                                                   12      RB5

                                                       RB7                 10                                                  11      RB6

Note:           See  Table             1  for  location of all peripheral functions.

FIGURE 2:            20-PIN QFN (4x4)

                                                                               RA4  RA5  VDD          VSS             RA0/PGD

                                                                               20191817 16

                                               RA3/MCLR/VPP                1                                                   15  RA1/PGC

                                                       RC5                 2   PIC18(L)F13K22                                  14  RA2

                                                       RC4                 3   PIC18(L)F14K22                                  13  RC0
                                                       RC3/PGM
                                                                           4                                                   12  RC1

                                                       RC6                 5                                                   11  RC2

                                                                               6    7    8            9 10

                                                                               RC7  RB7  RB6          RB5             RB4

Note:      See  Table                  1  for  location of all peripheral  functions.

DS40001365F-page 2                                                                                                                                            2009-2016 Microchip Technology Inc.
                                                                                                      PIC18(L)F1XK22

TABLE  1:                     20-PIN ALLOCATION TABLE                         (PIC18(L)F1XK22)

I/O    20-Pin PDIP/SSOP/SOIC  20-Pin QFN  Analog  Comparator  Reference       ECCP      EUSART  MSSP     SR Latch  Timers  Interrupts  Pull-up  Basic

RA0    19                     16          AN0     C1IN+       VREF-/          —         —       —        —         —       IOC/INT0    Y        PGD

                                                              CVREF(DAC1OUT)

RA1    18                     15          AN1     C12IN0-     VREF+           —         —       —        —         —       IOC/INT1    Y        PGC

RA2    17                     14          AN2     C1OUT       —               —         —       —        SRQ       T0CKI   IOC/INT2    Y        —

RA3    4                      1           —       —           —               —         —       —        —         —       IOC         Y        MCLR/VPP

RA4    3                      20          AN3     —           —               —         —       —        —         —       IOC         Y        OSC2/CLKOUT

RA5    2                      19          —       —           —               —         —       —        —         T13CKI  IOC         Y        OSC1/CLKIN

RB4    13                     10          AN10    —           —               —         —       SDI/SDA  —         —       IOC         Y        —

RB5    12                     9           AN11    —           —               —         RX/DT   —        —         —       IOC         Y        —

RB6    11                     8           —       —           —               —         —       SCL/SCK  —         —       IOC         Y        —

RB7    10                     7           —       —           —               —         TX/CK   —        —         —       IOC         Y        —

RC0    16                     13          AN4     C2IN+       —               —         —       —        —         —       —           —        —

RC1    15                     12          AN5     C12IN1-     —               —         —       —        —         —       —           —        —

RC2    14                     11          AN6     C12IN2-     —               P1D       —       —        —         —       —           —        —

RC3    7                      4           AN7     C12IN3-     —               P1C       —       —        —         —       —           —        PGM

RC4    6                      3           —       C2OUT       —               P1B       —       —        SRNQ      —       —           —        —

RC5    5                      2           —       —           —               CCP1/P1A  —       —        —         —       —           —        —

RC6    8                      5           AN8     —           —               —         —       SS       —         —       —           —        —

RC7    9                      6           AN9     —           —               —         —       SDO      —         —       —           —        —

—      1                      18          —       —           —               —         —       —        —         —       —           —        VDD

—      20                     17          —       —           —               —         —       —        —         —       —           —        VSS

 2009-2016                   Microchip Technology Inc.                                                                    DS40001365F-page 3
PIC18(L)F1XK22

Table of Contents

1.0   Device Overview .......................................................................................................................................................................... 6

2.0   Oscillator Module........................................................................................................................................................................ 12

3.0   Memory Organization ................................................................................................................................................................. 24

4.0   Flash Program Memory .............................................................................................................................................................. 45

5.0   Data EEPROM Memory ............................................................................................................................................................. 54

6.0   8 x 8 Hardware Multiplier............................................................................................................................................................ 58

7.0   Interrupts .................................................................................................................................................................................... 60

8.0   I/O Ports ..................................................................................................................................................................................... 73

9.0   Timer0 Module ........................................................................................................................................................................... 91

10.0  Timer1 Module ........................................................................................................................................................................... 94

11.0  Timer2 Module ......................................................................................................................................................................... 100

12.0  Timer3 Module ......................................................................................................................................................................... 102

13.0  Enhanced Capture/Compare/PWM (ECCP) Module................................................................................................................ 106

14.0  Master Synchronous Serial Port (MSSP) Module .................................................................................................................... 127

15.0  Enhanced Universal Synchronous Asynchronous Receiver Transmitter (EUSART) ............................................................... 170

16.0  Analog-to-Digital Converter (ADC) Module .............................................................................................................................. 197

17.0  Comparator Module.................................................................................................................................................................. 210

18.0  Power-Managed Modes ........................................................................................................................................................... 222

19.0  SR Latch................................................................................................................................................................................... 228

20.0  Fixed Voltage Reference (FVR)................................................................................................................................................ 231

21.0  Digital-to-Analog Converter (DAC) Module .............................................................................................................................. 233

22.0  Reset ........................................................................................................................................................................................ 237

23.0  Special Features of the CPU .................................................................................................................................................... 249

24.0  Instruction Set Summary .......................................................................................................................................................... 265

25.0  Development Support............................................................................................................................................................... 315

26.0  Electrical Specifications............................................................................................................................................................ 319

27.0  DC and AC Characteristics Graphs and Charts ....................................................................................................................... 356

28.0  Packaging Information.............................................................................................................................................................. 372

Appendix A: Revision History............................................................................................................................................................. 382

Appendix B: Device Differences......................................................................................................................................................... 383

The Microchip WebSite ...................................................................................................................................................................... 384

Customer Change Notification Service .............................................................................................................................................. 384

Customer Support .............................................................................................................................................................................. 384

Product Identification System............................................................................................................................................................. 385

Worldwide Sales and Service ............................................................................................................................................................ 387

DS40001365F-page 4   2009-2016 Microchip Technology Inc.
                                                              PIC18(L)F1XK22

                                       TO OUR VALUED CUSTOMERS

It is our intention to provide our valued customers with the best documentation possible to ensure successful use of your Microchip

products. To this end, we will continue to improve our publications to better suit your needs. Our publications will be refined and

enhanced as new volumes and updates are introduced.

If you have any questions or comments regarding this publication, please contact the Marketing Communications Department via

E-mail at docerrors@microchip.com. 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 Website 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., DS30000000A is version A of document DS30000000).

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 Website; http://www.microchip.com

•  Your local Microchip sales office (see last page)

When contacting a sales office, please specify which device, revision of silicon and data sheet (include literature number) you are

using.

Customer Notification System

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

 2009-2016 Microchip Technology Inc.                                                                         DS40001365F-page 5
PIC18(L)F1XK22

1.0       DEVICE OVERVIEW                                           1.1.2        MULTIPLE OSCILLATOR OPTIONS

This      family  offers   the   advantages     of    all  PIC18                 AND FEATURES

microcontrollers        –  namely,        high  computational       All of the devices in the PIC18(L)F1XK22 family offer

performance       with     the  addition    of  high-endurance,     ten different oscillator options, allowing users a wide

Flash program memory. On top of these features, the                 range of choices in developing application hardware.

PIC18(L)F1XK22             family         introduces       design   These include:

enhancements      that     make      these  microcontrollers  a     •  Four Crystal modes, using crystals or ceramic

logical   choice  for      many      high-performance,     power       resonators

sensitive applications.                                             •  External Clock modes, offering the option of using

1.1       New Core Features                                            two pins (oscillator input and a divide-by-4 clock

                                                                       output) or one pin (oscillator input, with the

1.1.1             XLP TECHNOLOGY                                       second pin reassigned as general I/O)

All   of  the     devices  in   the  PIC18(L)F1XK22         family  •  External RC Oscillator modes with the same pin

incorporate a range of features that can significantly                 options as the External Clock modes

reduce    power   consumption        during     operation.  Key     •  An internal oscillator block which contains a

items include:                                                         16 MHz HFINTOSC oscillator and a 31 kHz

                                                                       LFINTOSC oscillator which together provide eight

•  Multiple Idle Modes: The controller can also run                    user selectable clock frequencies, from 31 kHz to

   with its CPU core disabled but the peripherals still                16 MHz. This option frees the two oscillator pins

   active. In these states, power consumption can be                   for use as additional general purpose I/O.

   reduced even further, to as little as 4% of normal               •  A Phase Lock Loop (PLL) frequency multiplier,

   operation requirements.                                             available to both the high-speed crystal and

•  On-the-fly Mode Switching: The                                      internal oscillator modes, which allows clock

   power-managed modes are invoked by user code                        speeds of up to 64 MHz. Used with the internal

   during operation, allowing the user to incorporate                  oscillator, the PLL gives users a complete

   power-saving ideas into their application’s                         selection of clock speeds, from 31 kHz to 64 MHz

   software design.                                                    – all without using an external crystal or clock

•  Low Consumption in Key Modules: The                                 circuit.

   power requirements for both Timer1 and the                       Besides its availability as a clock source, the internal

   Watchdog Timer are minimized. See                                oscillator block provides a stable reference source that

   Section 26.0 “Electrical Specifications”                         gives  the     family  additional  features        for  robust

   for values.                                                      operation:

                                                                    •  Fail-Safe Clock Monitor: This option constantly

                                                                       monitors the main clock source against a

                                                                       reference signal provided by the LFINTOSC. If a

                                                                       clock failure occurs, the controller is switched to

                                                                       the internal oscillator block, allowing for continued

                                                                       operation or a safe application shutdown.

                                                                    •  Two-Speed Start-up: This option allows the

                                                                       internal oscillator to serve as the clock source

                                                                       from Power-on Reset, or wake-up from Sleep

                                                                       mode, until the primary clock source is available.

DS40001365F-page 6                                                                          2009-2016 Microchip Technology Inc.
                                                                  PIC18(L)F1XK22

1.2   Other Special Features                              1.3     Details on Individual Family

•  Memory Endurance: The Flash cells for both                     Members

   program memory and data EEPROM are rated to            Devices in the PIC18(L)F1XK22 family are available in

   last for many thousands of erase/write cycles – up to  20-pin packages. Block diagrams for the two groups

   10K for program memory and 100K for EEPROM.            are shown in Figure 1-1.

   Data retention without refresh is conservatively       The devices are differentiated from each other in the

   estimated to be greater than 40 years.                 following ways:

•  Self-programmability: These devices can write          1.   Flash program memory:

   to their own program memory spaces under

   internal software control. Using a bootloader               •  8 Kbytes for PIC18(L)F13K22

   routine located in the code protected Boot Block,           •  16 Kbytes for PIC18(L)F14K22

   it is possible to create an application that can       All other features for devices in this family are identical.

   update itself in the field.                            These are summarized in Table 1-1.

•  Extended Instruction Set: The PIC18(L)F1XK22           The pinouts for all devices are listed in Table 1 and I/O

   family introduces an optional extension to the         description are in Table 1-2.

   PIC18 instruction set, which adds eight new

   instructions and an Indexed Addressing mode.

   This extension has been specifically designed to

   optimize re-entrant application code originally

   developed in high-level languages, such as C.

•  Enhanced CCP module: In PWM mode, this

   module provides one, two or four modulated

   outputs for controlling half-bridge and full-bridge

   drivers. Other features include:

   -  Auto-Shutdown, for disabling PWM outputs

      on interrupt or other select conditions

   -  Auto-Restart, to reactivate outputs once the

      condition has cleared

   -  Output steering to selectively enable one or

      more of four outputs to provide the PWM

      signal.

•  Enhanced Addressable USART: This serial

   communication module is capable of standard

   RS-232 operation and provides support for the LIN

   bus protocol. Other enhancements include

   automatic baud rate detection and a 16-bit Baud

   Rate Generator for improved resolution.

•  10-bit A/D Converter: This module incorporates

   programmable acquisition time, allowing for a

   channel to be selected and a conversion to be

   initiated without waiting for a sampling period and

   thus, reduce code overhead.

•  Extended Watchdog Timer (WDT): This

   enhanced version incorporates a 16-bit

   postscaler, allowing an extended time-out range

   that is stable across operating voltage and

   temperature. See Section 26.0 “Electrical

   Specifications” for time-out periods.

 2009-2016 Microchip Technology Inc.                                                         DS40001365F-page 7
PIC18(L)F1XK22

TABLE 1-1:         DEVICE FEATURES FOR THE PIC18(L)F1XK22 (20-PIN DEVICES)

                   Features            PIC18F13K22  PIC18LF13K22         PIC18F14K22  PIC18LF14K22

Voltage Range (1.8 - 5.5V)             2.3-5.5V           1.8V-3.6V      2.3-5.5V           1.8V-3.6V

Program Memory (Bytes)                              8K                                16K

Program Memory (Instructions)                       4096                              8192

Data Memory (Bytes)                                 256                               512

Operating Frequency                                       DC – 64 MHz

Interrupt Sources                                                    30

I/O Ports                                                 Ports A, B, C

Timers                                                               4

Enhanced Capture/ Compare/PWM Modules                                1

Serial Communications                                     MSSP, Enhanced USART

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

Resets (and Delays)                    POR, BOR, RESET Instruction, Stack Full, Stack Underflow, MCLR, WDT

                                                          (PWRT, OST)

Instruction Set                        75 Instructions, 83 with Extended Instruction Set Enabled

Packages                                                  20-Pin PDIP, SSOP, SOIC

                                                          QFN (4x4x0.9mm)

DS40001365F-page 8                                                    2009-2016 Microchip Technology Inc.
                                                                                                      PIC18(L)F1XK22

FIGURE  1-1:      PIC18(L)F1XK22 BLOCK DIAGRAM

                  Table Pointer<21>                              Data Bus<8>

                  inc/dec logic                               8   8                       Data Latch                       PORTA

                                                                                          Data Memory                                             RA0

                                                                                          (512/768 bytes)                                         RA1

                  21                     PCLATU PCLATH                                                                                            RA1

                                     20                                                   Address Latch                                           RA3

                                                 PCU     PCH     PCL                                                                              RA4

                                                 Program Counter                                      12                                          RA5

                                                                                       Data Address<12>

                                                 31-Level Stack                   4                        4

                  Address Latch                                                                   12

                                                      STKPTR                      BSR     FSR0        Access
                                                                                                          Bank
                  Program Memory                                                          FSR1

                  Data Latch                                                              FSR2             12

                                                                                                                           PORTB                  RB4

                                     8                                                    inc/dec                                                 RB5
                                                                                          logic
                                         Table Latch                                                                                              RB6

                                                                                                                                                  RB7

                                         ROM Latch                                        Address

              Instruction Bus <16>                                                        Decode

                                                 IR

                                                                                                                  8

                                         Instruction             State machine

                                         Decode and              control signals

                                                Control                                   PRODH PRODL

                                                                                                                           PORTC

                                                                                  3               8 x 8 Multiply                                  RC0

                                                                                                                        8                         RC1

                                                                                  BITOP           W                                               RC2
                                                                                                                                                  RC3
                                                              Power-up                 8              8              8
                                     Internal                                                                                                     RC4
                                                                 Timer
        OSC1(2)                      Oscillator                                                                                                   RC5

                                         Block                Oscillator                  8                          8                            RC6

                                  LFINTOSC               Start-up Timer                                                                           RC7

        OSC2(2)                      Oscillator                                              ALU<8>

                                     16 MHz                   Power-on

                                     Oscillator                  Reset                                8

        MCLR(1)                                               Watchdog

                                 Single-Supply                   Timer

        VDD, VSS                 Programming                  Fail-Safe           Precision           FVR
                                                                                  Band Gap
                                                         Clock Monitor            Reference

                                                                                                                                  DAC

                  BOR                    Data            Timer0           Timer1       Timer2              Timer3

                                         EEPROM

        FVR                                                                                           FVR

CVREF/DAC1        Comparator             ECCP1           MSSP             EUSART          ADC         CVREF/DAC1

                                                                                          10-bit

        Note  1:  RA3 is only available when MCLR functionality is disabled.

              2:  OSC1/CLKIN and OSC2/CLKOUT are only available in select oscillator modes and when                        these  pins  are  not  being  used

                  as digital I/O. Refer to Section 2.0 “Oscillator Module” for additional information.

 2009-2016 Microchip Technology Inc.                                                                                                   DS40001365F-page 9
PIC18(L)F1XK22

TABLE 1-2:        PIC18(L)F1XK22 PIN SUMMARY

                                                     Pin

                                         Number

              Pin Name                   PDIP/SSOP/  SOIC       Pin   Buffer                          Description

                                                           QFN  Type  Type

RA0/AN0/CVREF/VREF-/C1IN+/INT0/PGD       19                16

RA0                                                             I/O   TTL       Digital I/O

AN0                                                             I     Analog    ADC channel 0

CVREF/DAC1OUT                                                   O     Analog    DAC reference voltage output

VREF-                                                           I     Analog    ADC and DAC reference voltage (low) input

C1IN+                                                           I     Analog    Comparator C1 noninverting input

INT0                                                            I     ST        External interrupt 0

PGD                                                             I/O   ST        ICSP™ programming data pin

RA1/AN1/C12IN0-/VREF+/INT1/PGC           18                15

RA1                                                             I/O   TTL       Digital I/O

AN1                                                             I     Analog    ADC channel 1

C12IN0-                                                         1     Analog    Comparator C1 and C2 inverting input

VREF+                                                           I     Analog    ADC and DAC reference voltage (high) input

INT1                                                            I     ST        External interrupt 1

PGC                                                             I/O   ST        ICSP programming clock pin

RA2/AN2/C1OUT/T0CKI/INT2/SRQ             17                14

RA2                                                             I/O   ST        Digital I/O

AN2                                                             I     Analog    ADC channel 2

C1OUT                                                           —     CMOS      Comparator C1 output

T0CKI                                                           I     ST        Timer0 external clock input

INT2                                                            I     ST        External interrupt 2

SRQ                                                             O     CMOS      SR latch output

RA3/MCLR/VPP                             4                 1

RA3                                                             I     ST        Digital input

MCLR                                                            I     ST        Active-low Master Clear with internal pull-up

VPP                                                             P     —         High voltage programming input

RA4/AN3/OSC2/CLKOUT                      3                 20

RA4                                                             I/O   TTL       Digital I/O

AN3                                                             I     Analog    ADC channel 3

OSC2                                                            O     XTAL      Oscillator crystal output. Connect to crystal or resonator

                                                                                in Crystal Oscillator mode

CLKOUT                                                          O     CMOS      In RC mode, OSC2 pin outputs CLKOUT which

                                                                                has 1/4 the frequency of OSC1 and denotes

                                                                                the instruction cycle rate

RA5/OSC1/CLKIN/T13CKI                    2                 19

RA5                                                             I/O   TTL       Digital I/O

OSC1                                                            I     XTAL      Oscillator crystal input or external clock input

                                                                                ST buffer when configured in RC mode; analog other

                                                                                wise

CLKIN                                                           I     CMOS      External clock source input. Always associated with the

                                                                                pin function OSC1 (See related OSC1/CLKIN, OSC2,

                                                                                CLKOUT pins

T13CKI                                                          I     ST        Timer0 and Timer3 external clock input

RB4/AN10/SDI/SDA                         13                10

RB4                                                             I/O   TTL       Digital I/O

AN10                                                            I     Analog    ADC channel 10

SDI                                                             I     ST        SPI data in
                                                                                I2C data I/O
SDA                                                             I/O   ST

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

         ST   =   Schmitt Trigger input                                   I     =  Input

         O    =   Output                                                  P     =  Power

         XTAL =   Crystal Oscillator

DS40001365F-page 10                                                                               2009-2016 Microchip Technology Inc.
                                                                                      PIC18(L)F1XK22

TABLE 1-2:           PIC18(L)F1XK22         PIN SUMMARY                  (CONTINUED)

                                                        Pin

                                            Number

                  Pin Name                  PDIP/SSOP/  SOIC       Pin   Buffer                            Description

                                                              QFN  Type  Type

RB5/AN11/RX/DT                              12                9

     RB5                                                           I/O   TLL       Digital I/O

     AN11                                                          I     Analog    ADC channel 11

     RX                                                            I     ST        EUSART asynchronous receive

     DT                                                            I/O   ST        EUSART synchronous data (see related RX/TX)

RB6/SCK/SCL                                 11                8

     RB6                                                           I/O   TLL       Digital I/O

     SCK                                                           I/O   ST        Synchronous serial clock input/output for SPI mode
                                                                                   Synchronous serial clock input/output for I2C mode
     SCL                                                           I/O   ST

RB7/TX/CK                                   10                7

     RB7                                                           I/O   TLL       Digital I/O

     TX                                                            O     CMOS      EUSART asynchronous transmit

     CK                                                            I/O   ST        EUSART synchronous clock (see related RX/DT)

RC0/AN4/C2IN+                               16                13

     RC0                                                           I/O   ST        Digital I/O

     AN4                                                           I     Analog    ADC channel 4

     C2IN+                                                         I     Analog    Comparator C2 noninverting input

RC1/AN5/C12IN-                              15                12

     RC1                                                           I/O   ST        Digital I/O

     AN5                                                           I     Analog    ADC channel 5

     C12IN-                                                        I     Analog    Comparator C1 and C2 inverting input

RC2/AN6/C12IN2-/P1D                         14                11

     RC2                                                           I/O   ST        Digital I/O

     AN6                                                           I     Analog    ADC channel 6

     C12IN2-                                                       I     Analog    Comparator C1 and C2 inverting input

     P1D                                                           O     CMOS      Enhanced CCP1 PWM output

RC3/AN7/C12IN3-/P1C/PGM                     7                 4

     RC3                                                           I/O   ST        Digital I/O

     AN7                                                           I     Analog    ADC channel 7

     C12IN3-                                                       I     Analog    Comparator C1 and C2 inverting input

     P1C                                                           O     CMOS      Enhanced CCP1 PWM output

     PGM                                                           I/O   ST        Low-Voltage ICSP Programming enable pin

RC4/C2OUT/P1B/SRNQ                          6                 3

     RC4                                                           I/O   ST        Digital I/O

     C2OUT                                                         O     CMOS      Comparator C2 output

     P1B                                                           O     CMOS      Enhanced CCP1 PWM output

     SRNQ                                                          O     CMOS      SR latch inverted output

RC5/CCP1/P1A                                5                 2

     RC5                                                           I/O   ST        Digital I/O

     CCP1                                                          I/O   ST        Capture 1 input/Compare 1 output/PWM 1 output

     P1A                                                           O     CMOS      Enhanced CCP1 PWM output

RC6/AN8/SS                                  8                 5

     RC6                                                           I/O   ST        Digital I/O

     AN8                                                           I     Analog    ADC channel 8

     SS                                                            I     TTL       SPI slave select input

RC7/AN9/SDO                                 9                 6

     RC7                                                           I/O   ST        Digital I/O

     AN9                                                           I     Analog    ADC channel 9

     SDO                                                           O     CMOS      SPI data out

VSS                                         20                17   P     —       Ground reference for logic and I/O pins

VDD                                         1                 18   P     —       Positive supply for logic and I/O pins

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

             ST   =  Schmitt Trigger input                                   I     =  Input

             O    =  Output                                                  P     =  Power

             XTAL =  Crystal Oscillator

 2009-2016 Microchip Technology Inc.                                                                                    DS40001365F-page  11
PIC18(L)F1XK22

2.0       OSCILLATOR MODULE                                       2.3       System Clock Selection

2.1       Overview                                                The SCS bits of the OSCCON register select between

                                                                  the following clock sources:

The oscillator module has a variety of clock sources              •  Primary External Oscillator

and features that allow it to be used in a wide range of          •  Secondary External Oscillator

applications, maximizing performance and minimizing               •  Internal Oscillator

power  consumption.        Figure 2-1     illustrates  a  block                  The frequency of the system clock will be

diagram of the oscillator module.                                    Note:

Key features of the oscillator module include:                                   referred   to  as  FOSC   throughout      this

                                                                                 document.

•  System Clocks

•  System Clock Selection                                         TABLE 2-1:          SYSTEM CLOCK SELECTION

   -  Primary External Oscillator                                    Configuration          Selection

   -  Secondary External Oscillator                                  SCS <1:0>              System Clock

   -  Internal Oscillator                                                                   Internal Oscillator

•  Oscillator Start-up Timer                                         1x

•  System Clock Selection                                            01                     Secondary External Oscillator

•  Clock Switching                                                   00                     Oscillator defined by

•  4x Phase Lock Loop Frequency Multiplier                           (Default after Reset)  FOSC<3:0>

•  CPU Clock Divider                                              The default state of the SCS bits sets the system clock

•  Two-Speed Start-up Mode                                        to be the oscillator defined by the FOSC bits of the

•  Fail-Safe Clock Monitoring                                     CONFIG1H Configuration register. The system clock

                                                                  will always be defined by the FOSC bits until the SCS

2.2       System Clocks                                           bits are modified in software.

                                                                  When the Internal Oscillator is selected as the system

The PIC18(L)F1XK22 can be operated in 13 different                clock, the IRCF bits of the OSCCON register and the

oscillator modes. The user can program these using                INTSRC bit of the OSCTUNE register will select either

the   available  Configuration     bits.  In  addition,   clock   the LFINTOSC or the HFINTOSC. The LFINTOSC is

support functions such as Fail-Safe and two Start-up              selected when the IRCF<2:0> = 000 and the INTSRC

can also be configured.                                           bit is clear. All other combinations of the IRCF bits and

The available Primary oscillator options include:                 the    INTSRC  bit  will  select  the    HFINTOSC    as   the

•  External Clock, low power (ECL)                                system clock.

•  External Clock, medium power (ECM)                             2.4       Primary External Oscillator

•  External Clock, high power (ECH)                               The Primary External Oscillator’s mode of operation is

•  External Clock, low power, CLKOUT function on                  selected  by   setting    the     FOSC<3:0>    bits  of   the

   RA4/OSC2 (ECCLKOUTL)                                           CONFIG1H Configuration register. The oscillator can

•  External Clock, medium power, CLKOUT function                  be set to the following modes:

   on RA4/OSC2 (ECCLKOUTM)                                        •  LP: Low-Power Crystal

•  External Clock, high power, CLKOUT function on                 •  XT: Crystal/Ceramic Resonator

   RA4/OSC2 (ECCLKOUTH)

•  External Crystal (XT)                                          •  HS: High-Speed Crystal Resonator

•  High-speed Crystal (HS)                                        •  RC: External RC Oscillator

•  Low-power crystal (LP)                                         •  EC: External Clock

•  External Resistor/Capacitor (EXTRC)                            Additionally,  the  Primary    External  Oscillator  may   be

•  External RC, CLKOUT function on RA4/OSC2                       shut down under firmware control to save power.

•  31.25 kHz – 16 MHz internal oscillator (INTOSC)

•  31.25 kHz – 16 MHz internal oscillator, CLKOUT

   function on RA4/OSC2

Additionally, the 4x PLL may be enabled in hardware or

software  (under    certain   conditions)     for      increased

oscillator speed.

DS40001365F-page 12                                                                    2009-2016 Microchip Technology Inc.
                                                                                              PIC18(L)F1XK22

FIGURE 2-1:            PIC®  MCU CLOCK SOURCE BLOCK DIAGRAM

             Primary                                                PIC18(L)F1XK22

             Oscillator,

             External

              and                    Timer1/Timer3
             Secondary
OSC1/T13CKI

             Oscillator

                             Sleep     PCLKEN                                                                               IDLEN

                                       PRI_SD                           4 x PLL               LP, XT, HS, RC, EC,

OSC2                                                                                       1  Secondary Osc.       0x       Sleep

                                                                                           0

              T1OSCEN                                               FOSC<3:0>                                                          Peripherals

                                                                        PLL_EN

                                                                        PLLEN                 Internal Osc.        1x  MUX  System

                                                                                                                            Clock

                                                                                                                                       CPU

                                                                        IRCF<2:0>                                           Sleep

                                                                        16 MHz

                Internal                                                8 MHz

                                                                        4 MHz    110

              Oscillator                                                         101

                   Block                         Postscaler             2 MHz                                               FOSC<3:0>

                16 MHz                                                  1 MHz    100  MUX                          Clock

              HFINTOSC                                                           011                               Control  SCS<1:0>

                31 kHz                                                  500 kHz  010

              LFINTOSC                                                  250 kHz  001

                                                                    1   31 kHz   000

                                                                    0

                                                                        INTSRC

                                                                                              Fail-Safe
                                                                                              Clock

                                                    Watchdog                                  Two-Speed
                                                             Timer
                                                                                              Start-up

Note:  If using a low-frequency external oscillator

       and want to multiple it by 4 via PLL, the

       ideal  input       frequency    is  from  4 MHz              to

       16 MHz.

 2009-2016 Microchip Technology Inc.                                                                                       DS40001365F-page 13
PIC18(L)F1XK22

2.4.1          PRIMARY EXTERNAL OSCILLATOR                              FIGURE    2-2:           QUARTZ CRYSTAL

               SHUTDOWN                                                                          OPERATION (LP, XT OR

The  Primary     External      Oscillator  can  be      enabled   or                             HS MODE)

disabled via software. To enable software control of the

Primary  External    Oscillator,     the   PCLKEN       bit  of   the                                             PIC® MCU

CONFIG1H Configuration register must be set. With

the PCLKEN bit set, the Primary External Oscillator is                                                OSC1/CLKIN

controlled by the PRI_SD bit of the OSCCON2 register.                         C1                                           To Internal

The Primary External Oscillator will be enabled when                                                                       Logic

the PRI_SD bit is set, and disabled when the PRI_SD                                  Quartz                RF(2)           Sleep

bit is clear.                                                                        Crystal

Note:          The Primary External Oscillator cannot be

               shut  down      when  it    is  selected  as       the         C2          RS(1)       OSC2/CLKOUT

               System Clock. To shut down the oscillator,

               the system clock source must be either                   Note  1:  A  series      resistor  (RS)   may  be  required     for

               the Secondary Oscillator or the Internal                           quartz crystals with low drive level.

               Oscillator.                                                        The value of RF varies with the Oscillator mode

                                                                              2:

2.4.2          LP, XT AND HS OSCILLATOR                                           selected (typically between 2 M to 10 M.

               MODES

The LP, XT and HS modes support the use of quartz                       Note  1:     Quartz      crystal         characteristics     vary

crystal resonators or ceramic resonators connected to                                according   to        type,       package          and

OSC1 and OSC2 (Figure 2-2). The mode selects a low,                                  manufacturer. The user should consult the

medium or high gain setting of the internal inverter-                                manufacturer data sheets for specifications

amplifier to support various resonator types and speed.                              and recommended application.

LP Oscillator mode selects the lowest gain setting of the                     2:     Always verify oscillator performance over

internal inverter-amplifier. LP mode current consumption                             the  VDD    and       temperature  range     that  is

is the least of the three modes. This mode is best suited                            expected for the application.

to drive resonators with a low drive level specification, for                 3:     For oscillator design assistance, reference

example, tuning fork type crystals.                                                  the following Microchip Applications Notes:

XT   Oscillator     mode    selects  the       intermediate       gain            • AN826, Crystal Oscillator Basics and

setting  of    the   internal  inverter-amplifier.      XT   mode                    Crystal Selection for rfPIC® and

current consumption is the medium of the three modes.                                PICmicro® Devices (DS00826)

This mode is best suited to drive resonators with a                               • AN849, Basic PICmicro® Oscillator

medium drive level specification.                                                    Design (DS00849)

HS Oscillator mode selects the highest gain setting of the                        • AN943, Practical PICmicro® Oscillator

internal inverter-amplifier. HS mode current consumption                             Analysis and Design (DS00943)

is the highest of the three modes. This mode is best                              • AN949, Making Your Oscillator Work

suited for resonators that require a high drive setting.                             (DS00949)

Figure 2-2     and   Figure 2-3   show         typical  circuits  for

quartz crystal and ceramic resonators, respectively.

DS40001365F-page 14                                                                        2009-2016 Microchip Technology Inc.
                                                                                              PIC18(L)F1XK22

FIGURE 2-3:                    CERAMIC RESONATOR                                The RC oscillator frequency is a function of the supply

                               OPERATION                                        voltage, the resistor REXT, the capacitor CEXT and the

                               (XT OR HS MODE)                                  operating   temperature.   Other      factors      affecting     the

                                                                                oscillator frequency are:

                                                    PIC® MCU                    •  Input threshold voltage variation

                                                                                •  Component tolerances

                                      OSC1/CLKIN                                •  Variation in capacitance due to packaging

       C1                                                     To Internal       2.4.4          EXTERNAL CLOCK

                                                              Logic

                        RP(3)                RF(2)            Sleep             The External Clock (EC) mode allows an externally

                                                                                generated logic level clock to be used as the system’s

                                                                                clock  source.    When     operating     in  this    mode,       the

                                                                                external   clock  source   is  connected         to  the  OSC1

       C2      Ceramic      RS(1)     OSC2/CLKOUT                               allowing   OSC2   to   be  configured        as  an  I/O  or     as

               Resonator                                                        CLKOUT.     The   CLKOUT     function    is  selected     by     the

Note      1:   A   series   resistor  (RS)   may        be  required      for   FOSC bits of the CONFIG1H Configuration register.

               ceramic resonators with low drive level.                         When OSC2 is configured as CLKOUT, the frequency

          2:   The value of RF varies with the Oscillator mode                  at the pin is the frequency of the EC oscillator divided

               selected (typically between 2 M to 10 M.                      by 4.

          3:   An     additional   parallel  feedback       resistor  (RP)      Three  different  power    settings   are    available    for    EC

               may be required for proper ceramic resonator                     mode. The power settings allow for a reduced IDD of the

               operation.                                                       device, if the EC clock is known to be in a specific

                                                                                range. If there is an expected range of frequencies for

2.4.3           EXTERNAL RC                                                     the EC clock, select the power mode for the highest

                                                                                frequency.

The External Resistor-Capacitor (RC) mode supports                                 EC       Low power          0 – 250 kHz

the  use    of    an  external     RC  circuit.         This  allows       the     EC       Medium power       250 kHz – 4 MHz

designer maximum flexibility in frequency choice while

keeping costs to a minimum when clock accuracy is not                              EC       High power         4 – 64 MHz

required. In RC mode, the RC circuit connects to OSC1,

allowing    OSC2        to  be     configured       as  an    I/O     or   as   2.5        Secondary External Oscillator

CLKOUT.        The    CLKOUT       function         is  selected      by   the  The Secondary External Oscillator is designed to drive

FOSC bits of the CONFIG1H Configuration register.                               an   external  32.768   kHz    crystal.      This    oscillator  is

When OSC2 is configured as CLKOUT, the frequency                                enabled or disabled by the T1OSCEN bit of the T1CON

at the pin is the frequency of the RC oscillator divided by                     register. See Section 10.0 “Timer1 Module” for more

4. Figure 2-4 shows the external RC mode connections.                           information.

FIGURE 2-4:                    EXTERNAL RC MODES

       VDD                                   PIC® MCU

REXT

                            OSC1/CLKIN                        Internal

                                                              Clock

CEXT

VSS

       FOSC/4     or        OSC2/CLKOUT(1)

       I/O(2)

Recommended values:                10 k  REXT  100 k

                                   CEXT > 20 pF

Note      1:      Alternate pin functions are listed in

                  Section 1.0 “Device Overview”.

          2:      Output depends upon RC or RCIO clock mode.

 2009-2016 Microchip Technology Inc.                                                                                 DS40001365F-page 15
PIC18(L)F1XK22

2.6    Internal Oscillator                                   2.6.2          HFINTOSC

The internal oscillator module contains two independent      The High-Frequency Internal Oscillator (HFINTOSC) is

oscillators which are:                                       a  precision       oscillator        that  is    factory-calibrated   to

•  LFINTOSC:   Low-Frequency Internal Oscillator             operate    at  16 MHz.          The     output   of   the  HFINTOSC

•  HFINTOSC:   High-Frequency Internal Oscillator            connects       to  a        postscaler     and   a    multiplexer     (see

                                                             Figure 2-1). One of eight frequencies can be selected

When operating with either oscillator, OSC1 will be an       using the IRCF<2:0> bits of the OSCCON register. The

I/O and OSC2 will be either an I/O or CLKOUT. The            following      frequencies           are       available        from  the

CLKOUT function is selected by the FOSC bits of the          HFINTOSC:

CONFIG1H   Configuration       register.  When  OSC2     is  •  16 MHZ

configured as CLKOUT, the frequency at the pin is the        •  8 MHZ

frequency of the Internal Oscillator divided by 4.           •  4 MHZ

2.6.1      LFINTOSC                                          •  2 MHZ

The Low-Frequency Internal Oscillator (LFINTOSC) is          •  1 MHZ (Default after Reset)

a  31 kHz  internal     clock  source.    The  LFINTOSC      •  500 kHz

oscillator is the clock source for:                          •  250 kHz

•  Power-up Timer                                            •  31 kHz

•  Watchdog Timer                                            The  HFIOFS            bit  of  the  OSCCON           register  indicates

•  Fail-Safe Clock Monitor                                   whether the HFINTOSC is stable.

The LFINTOSC is enabled when any of the following               Note 1:         Selecting    31 kHz         from   the  HFINTOSC

conditions are true:                                                            oscillator requires IRCF<2:0> = 000 and

•  Power-up Timer is enabled (PWRTEN = 0)                                       the INTSRC bit of the OSCTUNE register

•  Watchdog Timer is enabled (WDTEN = 1)                                        to be set. If the INTSRC bit is clear, the

•  Watchdog Timer is enabled by software                                        system       clock      will  come      from       the

   (WDTEN = 0 and SWDTEN = 1)                                                   LFINTOSC.

•  Fail-Safe Clock Monitor is enabled (FCMEM =       1)                 2:      Additional adjustments to the frequency

•  SCS1 = 1 and IRCF<2:0> = 000 and INTSRC = 0                                  of  the      HFINTOSC         can  made      via   the

                                                                                OSCTUNE           registers.  See       Register 2-3

•  FOSC<3:0> selects the internal oscillator as the                             for more details.

   primary clock and IRCF<2:0> = 000 and                     The  HFINTOSC               is  enabled    if    any  of   the  following

   INTSRC = 0                                                conditions are true:

•  IESO = 1 (Two-Speed Start-up) and                         •  SCS1 = 1 and IRCF<2:0>  000

   IRCF<2:0> = 000 and INTSRC = 0

                                                             •  SCS1 = 1 and IRCF<2:0> = 000 and INTSRC = 1

                                                             •  FOSC<3:0> selects the internal oscillator as the

                                                                primary clock and

                                                                  -  IRCF<2:0>  000 or

                                                                  -  IRCF<2:0> = 000 and INTSRC = 1

                                                             •  IESO = 1 (Two-Speed Start-up) and

                                                                  -  IRCF<2:0>  000 or

                                                                  -  IRCF<2:0> = 000 and INTSRC = 1

                                                             •  FCMEM = 1 (Fail-Safe Clock Monitoring) and

                                                                  -  IRCF<2:0>  000 or

                                                                  -  IRCF<2:0> = 000 and INTSRC = 1

DS40001365F-page 16                                                                       2009-2016 Microchip Technology Inc.
                                                                             PIC18(L)F1XK22

2.7          Oscillator Control

The Oscillator Control (OSCCON) (Register 2-1) and the

Oscillator Control 2 (OSCCON2) (Register 2-2) registers

control   the  system  clock  and      frequency  selection

options.

REGISTER 2-1:          OSCCON: OSCILLATOR CONTROL REGISTER

     R/W-0         R/W-0               R/W-1      R/W-1                 R-q          R-0      R/W-0           R/W-0

     IDLEN         IRCF2               IRCF1      IRCF0          OSTS(1)     HFIOFS           SCS1            SCS0

bit 7                                                                                                               bit  0

Legend:

R = Readable bit       W = Writable bit           U = Unimplemented bit, read as ‘0’      q = depends on condition

-n = Value at POR      ‘1’ = Bit is set           ‘0’ = Bit is cleared                    x = Bit is unknown

bit 7          IDLEN: Idle Enable bit

               1=      Device enters Idle mode on SLEEP instruction

               0=      Device enters Sleep mode on SLEEP instruction

bit 6-4        IRCF<2:0>: Internal Oscillator Frequency Select bits

               111 = 16 MHz

               110 = 8 MHz

               101 = 4 MHz

               100 = 2 MHz

               011 = 1 MHz(3)

               010 = 500 kHz

               001 = 250 kHz

               000 = 31 kHz(2)

bit 3          OSTS: Oscillator Start-up Time-out Status bit(1)

               1=      Device is running from the clock defined by FOSC<2:0> of the CONFIG1   register

               0=      Device is running from the internal oscillator (HFINTOSC or LFINTOSC)

bit 2          HFIOFS: HFINTOSC Frequency Stable bit

               1=      HFINTOSC frequency is stable

               0=      HFINTOSC frequency is not stable

bit 1-0        SCS<1:0>: System Clock Select bits

               1x = Internal oscillator block

               01 = Secondary (Timer1) oscillator

               00 = Primary clock (determined by CONFIG1H[FOSC<3:0>]).

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

         2:    Source selected by the INTSRC bit of the OSCTUNE register, see text.

         3:    Default output frequency of HFINTOSC on Reset.

 2009-2016 Microchip Technology Inc.                                                         DS40001365F-page 17
PIC18(L)F1XK22

REGISTER 2-2:        OSCCON2: OSCILLATOR CONTROL REGISTER 2

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

       —             —    —                       —                —          PRI_SD   HFIOFL              LFIOFS

bit 7                                                                                                            bit 0

Legend:

R = Readable bit          W = Writable bit   U = Unimplemented bit,     read  as  ‘0’  q = depends on condition

-n = Value at POR         ‘1’ = Bit is set   ‘0’ = Bit is cleared                      x = Bit is unknown

bit 7-3     Unimplemented: Read as ‘0’

bit 2       PRI_SD: Primary Oscillator Drive Circuit shutdown bit

            1 = Oscillator drive circuit on

            0 = Oscillator drive circuit off (zero power)

bit 1       HFIOFL: HFINTOSC Frequency Locked bit

            1=       HFINTOSC is in lock

            0=       HFINTOSC has not yet locked

bit 0       LFIOFS: LFINTOSC Frequency Stable bit

            1=       LFINTOSC is stable

            0=       LFINTOSC is not stable

DS40001365F-page 18                                                                2009-2016 Microchip Technology Inc.
                                                                           PIC18(L)F1XK22

2.7.1         OSCTUNE REGISTER                                   (PWRT),  Watchdog            Timer  (WDT),  Fail-Safe  Clock

The    HFINTOSC    is    factory-calibrated,     but  can  be    Monitor (FSCM) and peripherals, are not affected by the

adjusted in software by writing to the TUN<5:0> bits of          change in frequency.

the OSCTUNE register (Register 2-3).                             The OSCTUNE register also implements the INTSRC

The default value of the TUN<5:0> is ‘000000’. The               and PLLEN bits, which control certain features of the

value is a 6-bit two’s complement number.                        internal oscillator block.

When     the  OSCTUNE     register     is     modified,    the   The INTSRC bit allows users to select which internal

HFINTOSC      frequency  will  begin   shifting  to   the  new   oscillator provides the clock source when the 31 kHz

frequency. Code execution continues during this shift,           frequency option is selected. This is covered in greater

while giving no indication that the shift has occurred.          detail in Section 2.6.1 “LFINTOSC”.

OSCTUNE does not affect the LFINTOSC frequency.                  The PLLEN bit controls the operation of the frequency

The operation of features that depend on the LFINTOSC            multiplier. For more details about the function of the

clock source frequency, such as the Power-up Timer               PLLEN bit see Section 2.10 “4x Phase Lock Loop

                                                                 Frequency Multiplier”.

REGISTER 2-3:            OSCTUNE: OSCILLATOR TUNING REGISTER

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

INTSRC             PLLEN               TUN5                TUN4  TUN3                  TUN2          TUN1          TUN0

bit 7                                                                                                                   bit 0

Legend:

R = Readable bit               W = Writable bit                  U = Unimplemented bit, read as ‘0’

-n = Value at POR              ‘1’ = Bit is set                  ‘0’ = Bit is cleared          x = Bit is unknown

bit 7         INTSRC: Internal Oscillator Low-Frequency Source Select bit

              1=       31.25 kHz device clock derived from 16 MHz HFINTOSC source (divide-by-512 enabled)

              0=       31 kHz device clock derived directly from LFINTOSC internal oscillator

bit 6         PLLEN: Frequency Multiplier PLL bit

              1=       PLL enabled (for HFINTOSC 8 MHz and 16 MHz only)

              0=       PLL disabled

bit 5-0       TUN<5:0>: Frequency Tuning bits

              011111 = Maximum frequency

              011110 =

                  •••

              000001 =

              000000 = Oscillator module is running at the factory-calibrated frequency.

              111111 =

                  •••

              100000 = Minimum frequency

 2009-2016 Microchip Technology Inc.                                                                DS40001365F-page 19
PIC18(L)F1XK22

2.8      Oscillator Start-up Timer                         2.9             Clock Switching

The Primary External Oscillator, when configured for       The device contains circuitry to prevent clock “glitches”

LP, XT or HS modes, incorporates an Oscillator Start-up    due         to  a  change       of  the  system       clock   source.      To

Timer (OST). The OST ensures that the oscillator starts    accomplish         this,  a     short  pause  in      the  system     clock

and provides a stable clock to the oscillator module.      occurs during the clock switch. If the new clock source

The OST times out when 1024 oscillations on OSC1           is  not         stable  (e.g.,  OST      is  active),    the  device   will

have occurred. During the OST period, with the system      continue to execute from the old clock source until the

clock set to the Primary External Oscillator, the program  new         clock  source    becomes         stable.     The  timing  of   a

counter  does    not  increment   suspending     program   clock switch is as follows:

execution. The OST period will occur following:            1.          SCS<1:0>    bits    of  the  OSCCON            register   are

•  Power-on Reset (POR)                                                modified.

•  Brown-out Reset (BOR)                                   2.          The system clock will continue to operate from

•  Wake-up from Sleep                                                  the old clock until the new clock is ready.

•  Oscillator being enabled                                3.          Clock switch circuitry waits for two consecutive

•  Expiration of Power-up Timer (PWRT)                                 rising edges of the old clock after the new clock

In order to minimize latency between external oscillator               is ready.

start-up and code execution, the Two-Speed Start-up        4.          The system clock is held low, starting at the next

mode can be selected. See Section 2.11 “Two-Speed                      falling edge of the old clock.

Start-up Mode” for more information.                       5.          Clock switch circuitry waits for an additional two

                                                                       rising edges of the new clock.

                                                           6.          On the next falling edge of the new clock, the

                                                                       low hold on the system clock is release and the

                                                                       new clock is switched in as the system clock.

                                                           7.          Clock switch is complete.

                                                           Refer to Figure 2-5 for more details.

FIGURE 2-5:            CLOCK SWITCH TIMING

     High Speed       Low Speed

         Old Clock

                             Start-up Time(1)              Clock Sync                                        Running

         New Clock

   New Clk Ready

         IRCF <2:0>   Select Old        Select New

     System Clock

     Low Speed        High Speed

         Old Clock

                             Start-up  Time(1)             Clock Sync                                       Running

         New Clock

   New Clk Ready

     IRCF <2:0> Select Old              Select   New

     System Clock

     Note 1: Start-up time includes TOST (1024 TOSC) for external clocks, plus TPLL (approx. 2 ms) for HSPLL mode.

DS40001365F-page 20                                                                    2009-2016 Microchip Technology Inc.
                                                                                        PIC18(L)F1XK22

TABLE 2-2:            EXAMPLES OF DELAYS DUE TO CLOCK SWITCHING

             Switch From                                     Switch To                                 Oscillator Delay

Sleep/POR                                                    LFINTOSC                         Oscillator Warm-up Delay (TWARM)

                                                             HFINTOSC

Sleep/POR                                                    LP, XT, HS                                1024 clock cycles

Sleep/POR                                                         EC, RC                               8 Clock Cycles

2.10        4x Phase Lock Loop Frequency                                  2.11     Two-Speed Start-up Mode

            Multiplier                                                    Two-Speed Start-up mode provides additional power

A Phase Locked Loop (PLL) circuit is provided as an                       savings by minimizing the latency between external

option for users who wish to use a lower-frequency                        Oscillator Start-up Timer (OST) and code execution. In

external oscillator or to operate at 32 MHz or 64 MHz                     applications that make heavy use of the Sleep mode,

with the HFINTOSC. The PLL is designed for an input                       Two-Speed Start-up will remove the OST period, which

frequency from 4 MHz to 16 MHz. The PLL multiplies                        can   reduce  the   overall  power   consumption     of  the

its input frequency by a factor of four when the PLL is                   device.

enabled. This may be useful for customers who are                         Two-Speed Start-up mode is enabled by setting the

concerned with EMI, due to high-frequency crystals.                       IESO bit of the CONFIG1H Configuration register. With

Two   bits   control  the  PLL:     the  PLL_EN  bit  of     the          Two-Speed Start-up enabled, the device will execute

CONFIG1H Configuration register and the PLLEN bit of                      instructions  using  the  internal   oscillator  during  the

the OSCTUNE register. The PLL is enabled when the                         Primary External Oscillator OST period.

PLL_EN bit is set and it is under software control when                   When the system clock is set to the Primary External

the  PLL_EN  bit      is  cleared.  Refer  to  Table 2-3   and            Oscillator and the oscillator is configured for LP, XT or

Table 2-4 for more information.                                           HS modes, the device will not execute code during the

                                                                          OST period. The OST will suspend program execution

TABLE 2-3:            PLL CONFIGURATION                                   until 1024 oscillations are counted. Two-Speed Start-up

     PLL_EN                PLLEN               PLL Status                 mode     minimizes   the  delay  in  code  execution       by

                                                                          operating from the internal oscillator while the OST is

          1                     x              PLL enabled                active. The system clock will switch back to the Primary

          0                     1              PLL enabled                External Oscillator after the OST period has expired.

          0                     0              PLL disabled               Two-speed Start-up will become active after:

                                                                          •  Power-on Reset (POR)

TABLE 2-4:            PLL CONFIG1H/SOFTWARE                               •  Power-up Timer (PWRT), if enabled

                      ENABLE CLOCK SOURCE                                 •  Wake-up from Sleep

                      RESTRICTIONS                                        The OSTS bit of the OSCCON register reports which

                                                                          oscillator the device is currently using for operation.

     Mode    PLL CONFIG1H                  PLL Software                   The device is running from the oscillator defined by the

             Enable (PLL_EN)               Enable (PLLEN)                 FOSC bits of the CONFIG1H Configuration register

      LP                   Yes                   No                       when the OSTS bit is set. The device is running from

      XT                   Yes                   No                       the internal oscillator when the OSTS bit is clear.

      HS                   Yes                   No

      EC                   Yes                   No

     EXTRC                 Yes                   No

LF INTOSC                  No                    No

HF INTOSC             8/16 MHz                 8/16 MHz

 2009-2016 Microchip Technology Inc.                                                                          DS40001365F-page 21
PIC18(L)F1XK22

2.12       Fail-Safe Clock Monitor                                               2.12.3      FAIL-SAFE CONDITION CLEARING

The Fail-Safe Clock Monitor (FSCM) allows the device                             The Fail-Safe condition is cleared by either one of the

to continue operating should the external oscillator fail.                       following:

The FSCM can detect oscillator failure any time after                            •  Any Reset

the Oscillator Start-up Timer (OST) has expired. The                             •  By toggling the SCS1 bit of the OSCCON register

FSCM       is  enabled      by  setting   the   FCMEN            bit  in  the    Both of these conditions restart the OST. While the

CONFIG1H          Configuration      register.       The         FSCM        is  OST is running, the device continues to operate from

applicable to all external oscillator modes (LP, XT, HS,                         the  INTOSC   selected   in  OSCCON.     When    the  OST

EC and RC).                                                                      times out, the Fail-Safe condition is cleared and the

FIGURE 2-6:                     FSCM BLOCK DIAGRAM                               device automatically switches over to the external clock

                                                                                 source. The Fail-Safe condition need not be cleared

                                         Clock Monitor                           before the OSCFIF flag is cleared.

        External                             Latch                               2.12.4      RESET OR WAKE-UP FROM SLEEP

        Clock                                S       Q

                                                                                 The FSCM is designed to detect an oscillator failure

                                                                                 after the Oscillator Start-up Timer (OST) has expired.

     LFINTOSC               ÷ 64          R                                      The OST is used after waking up from Sleep and after

     Oscillator                                          Q                       any type of Reset. The OST is not used with the EC or

        31 kHz                                                                   RC Clock modes so that the FSCM will be active as

                            488 Hz                                               soon as the Reset or wake-up has completed. When

     (~32 s)             (~2 ms)                                                the FSCM is enabled, the Two-Speed Start-up is also

           Sample Clock                                               Clock      enabled. Therefore, the device will always be executing

                                                                 Failure         code while the OST is operating.

                                                                 Detected           Note:    Due to the wide range of oscillator start-up

                                                                                             times,  the  Fail-Safe  circuit  is  not  active

2.12.1          FAIL-SAFE DETECTION                                                          during oscillator start-up (i.e., after exiting

                                                                                             Reset   or   Sleep).  After  an      appropriate

The     FSCM      module        detects   a     failed      oscillator    by                 amount of time, the user should check the

comparing the external oscillator to the FSCM sample                                         OSTS bit of the OSCCON register to verify

clock. The sample clock is generated by dividing the                                         the oscillator start-up and that the system

LFINTOSC          by  64.   See      Figure 2-6.         Inside  the      fail               clock   switchover      has      successfully

detector block is a latch. The external clock sets the                                       completed.

latch on each falling edge of the external clock. The

sample clock clears the latch on each rising edge of the

sample clock. A failure is detected when an entire half-

cycle of the sample clock elapses before the primary

clock goes low.

2.12.2          FAIL-SAFE OPERATION

When the external clock fails, the FSCM switches the

device clock to an internal clock source and sets the bit

flag OSCFIF of the PIR2 register. The OSCFIF flag will

generate an interrupt if the OSCFIE bit of the PIE2

register is also set. The device firmware can then take

steps to mitigate the problems that may arise from a

failed  clock.       The    system   clock     will  continue         to  be

sourced from the internal clock source until the device

firmware       successfully     restarts  the     external       oscillator

and switches back to external operation. An automatic

transition back to the failed clock source will not occur.

The     internal     clock  source   chosen       by        the  FSCM        is

determined        by  the   IRCF<2:0>       bits     of  the     OSCCON

register.      This   allows    the  internal        oscillator       to  be

configured before a failure occurs.

DS40001365F-page 22                                                                                   2009-2016 Microchip Technology Inc.
                                                                             PIC18(L)F1XK22

FIGURE 2-7:              FSCM TIMING DIAGRAM

        Sample Clock

            System                                                       Oscillator

                 Clock                                                   Failure

                 Output

Clock Monitor Output

                 (Q)                                                                         Failure

                                                                                            Detected

            OSCFIF

                                       Test                            Test                  Test

          Note:  The system clock is normally at a much higher frequency than the sample clock. The relative frequencies in

                 this example have been chosen for clarity.

TABLE 2-5:       SUMMARY OF REGISTERS ASSOCIATED WITH CLOCK SOURCES

                                                                                                                          Reset

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

                                                                                                                          page

CONFIG1H         IESO      FCMEN       PCLKEN   PLL_EN          FOSC3        FOSC2   FOSC1   FOSC0                        251

INTCON           GIE/GIEH  PEIE/GIEL   TMR0IE   INT0IE          RABIE        TMR0IF  INT0IF  RABIF                        245

OSCCON           IDLEN     IRCF2       IRCF1    IRCF0           OSTS         HFIOFS  SCS1    SCS0                         246

OSCCON2          —         —           —                     —  —            PRI_SD  HFIOFL  LFIOFS                       246

OSCTUNE          INTSRC    PLLEN       TUN5     TUN4            TUN3         TUN2    TUN1    TUN0                         248

IPR2             OSCFIP    C1IP        C2IP     EEIP            BCLIP        —       TMR3IP  —                            248

PIE2             OSCFIE    C1IE        C2IE     EEIE            BCLIE        —       TMR3IE  —                            248

PIR2             OSCFIF    C1IF        C2IF     EEIF            BCLIF        —       TMR3IF  —                            248

T1CON            RD16      T1RUN       T1CKPS1  T1CKPS0         T1OSCEN      T1SYNC  TMR1CS  TMR1ON                       246

Legend:   x = unknown, u = unchanged, – = unimplemented locations read as ‘0’. Shaded cells are not used by oscillators.

Note  1:  Other (non Power-up) Resets include MCLR Reset and Watchdog Timer Reset during normal operation.

 2009-2016 Microchip Technology Inc.                                                        DS40001365F-page 23
PIC18(L)F1XK22

3.0     MEMORY ORGANIZATION                                                  3.1       Program Memory Organization

There are three types of memory in PIC18 Enhanced                            PIC18   microcontrollers   implement       a   21-bit                program

microcontroller devices:                                                     counter,  which  is  capable   of     addressing                  a  2-Mbyte

•  Program Memory                                                            Program   Memory     (PC)  space.     Accessing                   a  location

•  Data RAM                                                                  between   the    upper     boundary        of  the                physically

•  Data EEPROM                                                               implemented    memory     and  the    2-Mbyte                     address  will

                                                                             return all ‘0’s (a NOP instruction).

As Harvard architecture devices, the data and program                        This family of devices contain the following:

memories  use    separate          busses;   this  allows    for             •  PIC18(L)F13K22: 8 Kbytes of Flash Memory, up to

concurrent access of the two memory spaces. The data                            4,096 single-word instructions

EEPROM, for practical purposes, can be regarded as                           •  PIC18(L)F14K22: 16 Kbytes of Flash Memory, up

a peripheral device, since it is addressed and accessed                         to 8,192 single-word instructions

through a set of control registers.

Additional detailed information on the operation of the                      PIC18   devices  have   two    interrupt   vectors                   and   one

Flash   program  memory        is  provided  in    Section 4.0               Reset vector. The Reset vector address is at 0000h

“Flash  Program      Memory”.         Data   EEPROM             is           and the interrupt vector addresses are at 0008h and

discussed separately in Section 5.0 “Data EEPROM                             0018h.

Memory”.                                                                     The  program     memory    map        for  PIC18(L)F1XK22

                                                                             devices is shown in Figure 3-1. Memory block details

                                                                             are shown in Figure 3-2.

FIGURE    3-1:            PROGRAM MEMORY MAP AND STACK                               FOR  PIC18(L)F1XK22 DEVICES

                                                      PC<20:0>

                 CALL,RCALL,RETURN                                                        21

                 RETFIE,RETLW

                                                      Stack Level 1

                                                             
                                                             
                                                             

                                                      Stack Level 31

                                                      Reset Vector                                              0000h

                                             High Priority Interrupt Vector                                     0008h

                                             Low Priority Interrupt Vector                                      0018h

                 On-Chip
             Program Memory
                               1FFFh         On-Chip
                                      Program Memory
                               2000h

             PIC18(L)F13K22                           3FFFh

                                                      4000h                                                                 User Memory Space

                                      PIC18(L)F14K22

                 Read     ‘0’               Read ‘0’

                                                                                                                1FFFFFh

                                                                                                                200000h

DS40001365F-page 24                                                                                 2009-2016 Microchip    Technology                  Inc.
                                                                                             PIC18(L)F1XK22

3.1.1          PROGRAM COUNTER                                               The stack operates as a 31-word by 21-bit RAM and a

The Program Counter (PC) specifies the address of the                        5-bit Stack Pointer, STKPTR. The stack space is not

instruction to fetch for execution. The PC is 21-bit wide                    part of either program or data space. The Stack Pointer

and is contained in three separate 8-bit registers. The                      is readable and writable and the address on the top of

low byte, known as the PCL register, is both readable                        the stack is readable and writable through the Top-of-

and writable. The high byte, or PCH register, contains                       Stack (TOS) Special File Registers. Data can also be

the PC<15:8> bits; it is not directly readable or writable.                  pushed   to,    or  popped      from    the  stack,    using  these

Updates to the PCH register are performed through the                        registers.

PCLATH register. The upper byte is called PCU. This                          A CALL type instruction causes a push onto the stack;

register  contains       the  PC<20:16>        bits;  it  is      also  not  the Stack Pointer is first incremented and the location

directly  readable       or   writable.  Updates          to  the  PCU       pointed  to     by  the  Stack    Pointer    is    written  with    the

register are performed through the PCLATU register.                          contents of the PC (already pointing to the instruction

The contents of PCLATH and PCLATU are transferred                            following the CALL). A RETURN type instruction causes

to the program counter by any operation that writes                          a  pop   from   the     stack;  the   contents     of  the  location

PCL. Similarly, the upper two bytes of the program                           pointed to by the STKPTR are transferred to the PC

counter are transferred to PCLATH and PCLATU by an                           and then the Stack Pointer is decremented.

operation that reads PCL. This is useful for computed                        The  Stack      Pointer  is     initialized  to    ‘00000’  after   all

offsets   to  the   PC   (see     Section 3.1.4.1         “Computed          Resets. There is no RAM associated with the location

GOTO”).                                                                      corresponding to a Stack Pointer value of ‘00000’; this

The PC addresses bytes in the program memory. To                             is only a Reset value. Status bits indicate if the stack is

prevent the PC from becoming misaligned with word                            full or has overflowed or has underflowed.

instructions, the Least Significant bit (LSb) of PCL is                      3.1.2.1         Top-of-Stack Access

fixed to a value of ‘0’. The PC increments by 2 to                           Only the top of the return address stack (TOS) is readable

address       sequential      instructions     in     the         program    and writable. A set of three registers, TOSU:TOSH:TOSL,

memory.                                                                      hold the contents of the stack location pointed to by the

The    CALL,       RCALL,     GOTO       and   program            branch     STKPTR       register    (Figure 3-2).       This  allows   users   to

instructions write to the program counter directly. For                      implement a software stack if necessary. After a CALL,

these     instructions,      the  contents     of     PCLATH            and  RCALL or interrupt, the software can read the pushed

PCLATU are not transferred to the program counter.                           value by reading the TOSU:TOSH:TOSL registers. These

3.1.2          RETURN ADDRESS STACK                                          values can be placed on a user defined software stack. At

The return address stack allows any combination of up                        return   time,  the     software  can   return     these    values  to

to 31 program calls and interrupts to occur. The PC is                       TOSU:TOSH:TOSL and do a return.

pushed    onto      the  stack     when     a  CALL           or  RCALL      The user must disable the global interrupt enable bits

instruction is executed or an interrupt is Acknowledged.                     while accessing the stack to prevent inadvertent stack

The PC value is pulled off the stack on a RETURN,                            corruption.

RETLW or a RETFIE instruction. PCLATU and PCLATH

are  not  affected       by   any  of    the   RETURN         or   CALL

instructions.

FIGURE        3-2:            RETURN ADDRESS STACK AND ASSOCIATED REGISTERS

                                                                        Return Address Stack <20:0>

                                                                                         11111

                         Top-of-Stack Registers                                          11110                 Stack Pointer

                                                                                         11101

                   TOSU            TOSH                   TOSL                                                 STKPTR<4:0>

                    00h             1Ah                   34h                                                        00010

                                                                                         00011

                                                              Top-of-Stack   001A34h     00010

                                                                             000D58h     00001

                                                                                         00000

 2009-2016 Microchip Technology Inc.                                                                                     DS40001365F-page 25
PIC18(L)F1XK22

3.1.2.2          Return Stack Pointer (STKPTR)                              When the stack has been popped enough times to

The STKPTR register (Figure 3-1) contains the Stack                         unload the stack, the next pop will return a value of zero

Pointer  value,    the    STKFUL     (Stack     Full)  bit  and     the     to the PC and sets the STKUNF bit, while the Stack

STKUNF (Stack Underflow) bits. The value of the Stack                       Pointer remains at zero. The STKUNF bit will remain

Pointer     can  be    0    through  31.   The       Stack  Pointer         set until cleared by software or until a POR occurs.

increments before values are pushed onto the stack                              Note:    Returning a value of zero to the PC on an

and decrements after values are popped off the stack.                                    underflow has the effect of vectoring the

On Reset, the Stack Pointer value will be zero. The                                      program to the Reset vector, where the

user may read and write the Stack Pointer value. This                                    stack   conditions     can    be  verified     and

feature can be used by a Real-Time Operating System                                      appropriate actions can be taken. This is

(RTOS) for return stack maintenance.                                                     not the same as a Reset, as the contents

After the PC is pushed onto the stack 31 times (without                                  of the SFRs are not affected.

popping any values off the stack), the STKFUL bit is                        3.1.2.3            PUSH and POP Instructions

set. The STKOVF bit is cleared by software or by a

POR.                                                                        Since the Top-of-Stack is readable and writable, the

The action that takes place when the stack becomes                          ability to push values onto the stack and pull values off

full  depends      on  the  state    of    the  STVREN      (Stack          the stack without disturbing normal program execution

Overflow     Reset     Enable)   Configuration       bit.   (Refer  to      is   a  desirable    feature.  The  PIC18      instruction  set

Section 23.1 “Configuration Bits” for a description of                      includes two instructions, PUSH and POP, that permit

the   device     Configuration     bits.)  If   STVREN      is      set     the  TOS     to  be  manipulated    under  software    control.

(default), the 31st push will push the (PC + 2) value                       TOSU, TOSH and TOSL can be modified to place data

onto   the   stack,    set  the  STKOVF         bit  and   reset    the     or a return address on the stack.

device. The STKOVF bit will remain set and the Stack                        The PUSH instruction places the current PC value onto

Pointer will be set to zero.                                                the stack. This increments the Stack Pointer and loads

If STVREN is cleared, the STKOVF bit will be set on the                     the current PC value onto the stack.

31st push and the Stack Pointer will increment to 31.                       The     POP  instruction  discards  the    current   TOS    by

Any additional pushes will not overwrite the 31st push                      decrementing the Stack Pointer. The previous value

and STKPTR will remain at 31.                                               pushed onto the stack then becomes the TOS value.

REGISTER 3-1:               STKPTR: STACK POINTER REGISTER

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

STKOVF(1)              STKUNF(1)                —                 SP4       SP3                SP2              SP1             SP0

bit 7                                                                                                                                bit 0

Legend:

R = Readable bit                     W = Writable bit                    U = Unimplemented                 C = Clearable only bit

-n = Value at POR                    ‘1’ = Bit is set                    ‘0’ = Bit is cleared              x = Bit is unknown

bit 7                STKOVF: Stack Overflow Flag bit(1)

                     1 = Stack became full or overflowed

                     0 = Stack has not become full or overflowed

bit 6                STKUNF: Stack Underflow Flag bit(1)

                     1 = Stack underflow occurred

                     0 = Stack underflow did not occur

bit 5                Unimplemented: Read as ‘0’

bit 4-0              SP<4:0>: Stack Pointer Location bits

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

DS40001365F-page 26                                                                               2009-2016 Microchip Technology Inc.
                                                                                                     PIC18(L)F1XK22

3.1.2.4              Stack Overflow and Underflow                                  3.1.4             LOOK-UP TABLES IN PROGRAM

                     Resets                                                                          MEMORY

Device Resets on Stack Overflow and Stack Underflow                                There may be programming situations that require the

conditions are enabled by setting the STVREN bit in                                creation   of     data    structures,      or  look-up      tables,  in

Configuration Register 4L. When STVREN is set, a full                              program memory. For PIC18 devices, look-up tables

or    underflow      will   set    the  appropriate          STKOVF           or   can be implemented in two ways:

STKUNF bit and then cause a device Reset. When                                     •   Computed GOTO

STVREN is cleared, a full or underflow condition will set                          •   Table Reads

the appropriate STKOVF or STKUNF bit but not cause

a   device     Reset.     The     STKOVF         or     STKUNF     bits       are  3.1.4.1           Computed GOTO

cleared by the user software or a Power-on Reset.                                  A computed GOTO is accomplished by adding an offset

3.1.3             FAST REGISTER STACK                                              to  the   program       counter.    An     example      is  shown    in

A   fast    register      stack    is  provided         for  the   STATUS,         Example 3-2.

WREG and BSR registers, to provide a “fast return”                                 A look-up table can be formed with an ADDWF                        PCL

option for interrupts. The stack for each register is only                         instruction and a group of RETLW               nn instructions. The

one level deep and is neither readable nor writable. It is                         W register is loaded with an offset into the table before

loaded      with     the  current      value     of     the  corresponding         executing a call to that table. The first instruction of the

register when the processor vectors for an interrupt. All                          called routine is the ADDWF             PCL instruction. The next

interrupt      sources      will   push       values         into  the    stack    instruction       executed  will    be  one    of  the  RETLW        nn

registers. The values in the registers are then loaded                             instructions that returns the value ‘nn’ to the calling

back      into       their     associated            registers     if         the  function.

RETFIE,           FAST instruction is used to return from the                      The offset value (in WREG) specifies the number of

interrupt.                                                                         bytes that the program counter should advance and

If both low and high priority interrupts are enabled, the                          should be multiples of 2 (LSb = 0).

stack registers cannot be used reliably to return from                             In this method, only one data byte may be stored in

low priority interrupts. If a high priority interrupt occurs                       each     instruction      location  and    room     on      the  return

while servicing a low priority interrupt, the stack register                       address stack is required.

values      stored    by    the    low        priority  interrupt    will     be

overwritten. In these cases, users must save the key                               EXAMPLE 3-2:                COMPUTED GOTO USING

registers by software during a low priority interrupt.                                                         AN OFFSET VALUE

If interrupt priority is not used, all interrupts may use the                                     MOVF       OFFSET,       W

fast   register      stack    for  returns       from        interrupt.   If  no                  CALL       TABLE

interrupts are used, the fast register stack can be used                              ORG         nn00h

to restore the STATUS, WREG and BSR registers at                                      TABLE       ADDWF      PCL

the end of a subroutine call. To use the fast register                                            RETLW      nnh

stack     for     a  subroutine        call,  a  CALL        label,       FAST                    RETLW      nnh

instruction       must    be  executed        to     save    the   STATUS,                        RETLW      nnh

WREG and BSR registers to the fast register stack. A                                              .

RETURN,        FAST instruction is then executed to restore                                       .

these registers from the fast register stack.                                                     .

Example 3-1 shows a source code example that uses                                  3.1.4.2           Table Reads and Table Writes

the   fast     register    stack   during     a   subroutine       call       and  A better method of storing data in program memory

return.                                                                            allows two bytes of data to be stored in each instruction

EXAMPLE 3-1:                      FAST REGISTER STACK                              location.

                                  CODE EXAMPLE                                     Look-up    table      data  may     be     stored  two      bytes    per

CALL      SUB1,      FAST          ;STATUS,       WREG,      BSR                   program word by using table reads and writes. The

                                   ;SAVED     IN     FAST    REGISTER              Table    Pointer     (TBLPTR)       register   specifies    the    byte

                                   ;STACK                                          address      and     the    Table   Latch      (TABLAT)          register

                                                                                  contains the data that is read from or written to program

                                                                                  memory.        Data   is  transferred      to  or   from    program

SUB1                                                                              memory one byte at a time.

                                                                                  Table read and table write operations are discussed

       RETURN,       FAST          ;RESTORE       VALUES           SAVED           further    in     Section 4.1     “Table       Reads    and      Table

                                   ;IN  FAST      REGISTER         STACK           Writes”.

 2009-2016 Microchip Technology Inc.                                                                                         DS40001365F-page 27
PIC18(L)F1XK22

3.2        PIC18 Instruction Cycle                                        3.2.2                INSTRUCTION FLOW/PIPELINING

3.2.1         CLOCKING SCHEME                                             An “Instruction Cycle” consists of four Q cycles: Q1

                                                                          through          Q4.     The   instruction  fetch      and  execute    are

The    microcontroller    clock   input,   whether     from      an       pipelined            in  such  a  manner    that    a   fetch  takes   one

internal or external source, is internally divided by four                instruction cycle, while the decode and execute take

to  generate  four     non-overlapping     quadrature      clocks         another          instruction      cycle.    However,        due    to  the

(Q1, Q2, Q3 and Q4). Internally, the program counter is                   pipelining, each instruction effectively executes in one

incremented on every Q1; the instruction is fetched                       cycle. If an instruction causes the program counter to

from   the   program      memory   and     latched         into  the      change (e.g., GOTO), then two cycles are required to

instruction   register    during  Q4.     The      instruction   is       complete the instruction (Example 3-3).

decoded and executed during the following Q1 through                      A fetch cycle begins with the Program Counter (PC)

Q4.   The    clocks  and  instruction     execution        flow  are      incrementing in Q1.

shown in Figure 3-3.                                                      In the execution cycle, the fetched instruction is latched

                                                                          into   the       Instruction      Register    (IR)  in  cycle    Q1.   This

                                                                          instruction is then decoded and executed during the

                                                                          Q2, Q3 and Q4 cycles. Data memory is read during Q2

                                                                          (operand             read)   and  written   during      Q4     (destination

                                                                          write).

FIGURE 3-3:               CLOCK/ INSTRUCTION                     CYCLE

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

              OSC1

                   Q1

                   Q2                                                                                                                 Internal

                   Q3                                                                                                                 Phase
                                                                                                                                      Clock

                   Q4

                   PC                  PC                               PC + 2                              PC + 4

     OSC2/CLKOUT
           (RC mode)

                                Execute INST (PC – 2)

                                  Fetch INST (PC)                     Execute INST (PC)

                                                                      Fetch INST (PC + 2)              Execute INST (PC + 2)

                                                                                                         Fetch INST (PC + 4)

EXAMPLE 3-3:              INSTRUCTION PIPELINE FLOW

                                      TCY0                 TCY1         TCY2               TCY3             TCY4                  TCY5

1.    MOVLW   55h                  Fetch 1             Execute 1

2.    MOVWF   PORTB                                    Fetch 2        Execute 2

3.    BRA    SUB_1                                                    Fetch 3              Execute 3

4.    BSF     PORTA,      BIT3  (Forced    NOP)                                            Fetch 4          Flush (NOP)

5.    Instruction      @  address  SUB_1                                                                 Fetch SUB_1          Execute SUB_1

    All instructions are single cycle, except for any program branches. These take two cycles since the fetch instruction

    is “flushed” from the pipeline while the new instruction is being fetched and then executed.

DS40001365F-page 28                                                                                       2009-2016 Microchip Technology Inc.
                                                                                   PIC18(L)F1XK22

3.2.3          INSTRUCTIONS IN PROGRAM                               The   CALL    and     GOTO  instructions  have    the  absolute

               MEMORY                                                program       memory  address        embedded          into  the

The    program  memory          is  addressed       in  bytes.       instruction. Since instructions are always stored on word

Instructions are stored as either two bytes or four bytes            boundaries, the data contained in the instruction is a

in program memory. The Least Significant Byte (LSB)                  word address. The word address is written to PC<20:1>,

of an instruction word is always stored in a program                 which accesses the desired byte address in program

memory location with an even address (LSb = 0). To                   memory. Instruction #2 in Figure 3-4 shows how the

maintain alignment with instruction boundaries, the PC               instruction GOTO      0006h is encoded in the program

increments in steps of 2 and the LSb will always read                memory. Program branch instructions, which encode a

‘0’ (see Section 3.1.1 “Program Counter”).                           relative address offset, operate in the same manner. The

                                                                     offset value stored in a branch instruction represents the

Figure 3-4 shows an example of how instruction words                 number of single-word instructions that the PC will be

are stored in the program memory.                                    offset  by.   Section 24.0  “Instruction      Set   Summary”

                                                                     provides further details of the instruction set.

FIGURE    3-4:             INSTRUCTIONS IN PROGRAM MEMORY

                                                                  LSB = 1         LSB = 0  Word Address

                                                                                                 

                                    Program Memory                                               000000h

                                    Byte Locations                                             000002h

                                                                                                 000004h

                                                                                                 000006h

                Instruction 1:      MOVLW       055h              0Fh              55h           000008h

                Instruction 2:      GOTO        0006h             EFh              03h           00000Ah

                                                                  F0h              00h           00000Ch

                Instruction 3:      MOVFF       123h,   456h      C1h              23h           00000Eh

                                                                  F4h              56h           000010h

                                                                                                 000012h

                                                                                                 000014h

3.2.4          TWO-WORD INSTRUCTIONS                                 and used by the instruction sequence. If the first word

The standard PIC18 instruction set has four two-word                 is skipped for some reason and the second word is

instructions:  CALL,   MOVFF,       GOTO   and  LSFR.   In  all      executed by itself, a NOP is executed instead. This is

cases, the second word of the instruction always has                 necessary for cases when the two-word instruction is

‘1111’ as its four Most Significant bits (MSb); the other            preceded by a conditional instruction that changes the

12 bits are literal data, usually a data memory address.             PC. Example 3-4 shows how this works.

The  use  of   ‘1111’  in  the  4   MSbs   of   an  instruction          Note:     See     Section 3.6    “PIC18       Instruction

specifies a special form of NOP. If the instruction is                             Execution     and  the  Extended         Instruc-

executed in proper sequence – immediately after the                                tion    Set”  for  information    on  two-word

first word – the data in the second word is accessed                               instructions in the extended instruction set.

EXAMPLE 3-4:               TWO-WORD INSTRUCTIONS

CASE 1:

Object Code                         Source Code

0110      0110  0000   0000         TSTFSZ          REG1          ;  is    RAM  location   0?

1100      0001  0010   0011         MOVFF           REG1,   REG2  ;  No,     skip  this    word

1111      0100  0101   0110                                       ;  Execute       this    word  as   a   NOP

0010      0100  0000   0000         ADDWF           REG3          ;  continue      code

CASE 2:

Object Code                         Source Code

0110      0110  0000   0000         TSTFSZ          REG1          ;  is    RAM  location   0?

1100      0001  0010   0011         MOVFF           REG1,   REG2  ;  Yes,    execute       this  word

1111      0100  0101   0110                                       ;  2nd     word  of    instruction

0010      0100  0000   0000         ADDWF           REG3          ;  continue      code

 2009-2016 Microchip Technology Inc.                                                                      DS40001365F-page 29
PIC18(L)F1XK22

3.3       Data Memory Organization                                   3.3.1          BANK SELECT REGISTER (BSR)

Note:          The operation of some aspects of data                 Large    areas       of  data   memory      require       an   efficient

               memory      are  changed       when    the  PIC18     addressing       scheme    to   make       rapid    access     to     any

               extended instruction set is enabled. See              address     possible.      Ideally,  this  means    that      an   entire

               Section 3.5      “Data       Memory    and      the   address does not need to be provided for each read or

               Extended      Instruction      Set”    for  more      write    operation.        For       PIC18     devices,        this   is

               information.                                          accomplished         with  a    RAM       banking   scheme.           This

                                                                     divides the memory space into 16 contiguous banks of

The data memory in PIC18 devices is implemented as                   256 bytes. Depending on the instruction, each location

static RAM. Each register in the data memory has a                   can be addressed directly by its full 12-bit address, or

12-bit  address,  allowing      up      to  4096  bytes    of  data  an 8-bit low-order address and a 4-bit Bank Pointer.

memory. The memory space is divided into as many as                  Most instructions in the PIC18 instruction set make use

16 banks that contain 256 bytes each. Figure 3-5 and                 of the Bank Pointer, known as the Bank Select Register

Figure 3-6 show the data memory organization for the                 (BSR). This SFR holds the 4 Most Significant bits of a

PIC18(L)F1XK22 devices.                                              location’s     address;    the  instruction    itself    includes     the

The data memory contains Special Function Registers                  8 Least Significant bits. Only the four lower bits of the

(SFRs) and General Purpose Registers (GPRs). The                     BSR are implemented (BSR<3:0>). The upper four bits

SFRs are used for control and status of the controller               are unused; they will always read ‘0’ and cannot be

and peripheral functions, while GPRs are used for data               written to. The BSR can be loaded directly by using the

storage   and     scratchpad    operations        in  the  user’s    MOVLB instruction.

application. Any read of an unimplemented location will              The    value     of  the   BSR      indicates  the     bank    in     data

read as ‘0’s.                                                        memory; the 8 bits in the instruction show the location

The instruction set and architecture allow operations                in the bank and can be thought of as an offset from the

across   all  banks.  The       entire  data  memory       may  be   bank’s lower boundary. The relationship between the

accessed      by  Direct,  Indirect     or  Indexed   Addressing     BSR’s value and the bank division in data memory is

modes. Addressing modes are discussed later in this                  shown in Figure 3-5 and Figure 3-6.

subsection.                                                          Since up to 16 registers may share the same low-order

To ensure that commonly used registers (SFRs and                     address, the user must always be careful to ensure that

select GPRs) can be accessed in a single cycle, PIC18                the proper bank is selected before performing a data

devices implement an Access Bank. This is a 256-byte                 read   or  write.    For   example,       writing  what   should      be

memory space that provides fast access to SFRs and                   program data to an 8-bit address of F9h while the BSR

the lower portion of GPR Bank 0 without using the Bank               is 0Fh will end up resetting the program counter.

Select Register (BSR). Section 3.3.2 “Access Bank”                   While any bank can be selected, only those banks that

provides a detailed description of the Access RAM.                   are actually implemented can be read or written to.

                                                                     Writes     to  unimplemented         banks     are  ignored,       while

                                                                     reads from unimplemented banks will return ‘0’s. Even

                                                                     so, the STATUS register will still be affected as if the

                                                                     operation was successful. The data memory maps in

                                                                     Figure 3-5     and       Figure 3-6  indicate      which  banks       are

                                                                     implemented.

                                                                     In  the    core  PIC18     instruction      set,   only   the     MOVFF

                                                                     instruction    fully     specifies   the   12-bit   address       of  the

                                                                     source and target registers. This instruction ignores the

                                                                     BSR completely when it executes. All other instructions

                                                                     include only the low-order address as an operand and

                                                                     must use either the BSR or the Access Bank to locate

                                                                     their target registers.

DS40001365F-page 30                                                                             2009-2016 Microchip Technology Inc.
                                                                                 PIC18(L)F1XK22

FIGURE 3-5:        DATA MEMORY MAP FOR PIC18(L)F13K22                            DEVICES

BSR<3:0>                                    Data Memory Map                      When ‘a’ = 0:

                                                                                          The BSR is ignored and the

= 0000                                 00h  Access RAM       000h                         Access Bank is used.

                   Bank  0                                   05Fh                         The first 96 bytes are
                                                             060h
                                       FFh  GPR              0FFh                         general purpose RAM

= 0001                                 00h                   100h                         (from Bank 0).

                   Bank  1                                                                The   second    160  bytes  are

                                       FFh                   1FFh                         Special  Function    Registers

= 0010             Bank  2             00h                   200h                         (from Bank 15).

                                       FFh                   2FFh                When ‘a’ = 1:

= 0011             Bank  3             00h                   300h                         The BSR specifies the Bank

                                       FFh                   3FFh                         used by the instruction.

=  0100            Bank  4             00h                   400h

                                       FFh                   4FFh

=  0101            Bank  5             00h                   500h

                                       FFh                   5FFh

=  0110            Bank  6             00h                   600h

                                       FFh                   6FFh                               Access Bank

=  0111            Bank  7             00h                   700h                               Access RAM Low        00h

                                            Unused                                                                    5Fh
                                       FFh                   7FFh                                                     60h
                                            Read 00h                                            Access RAM High
                                                             800h
=  1000            Bank  8             00h                                                         (SFRs)           FFh

                                       FFh                   8FFh

=  1001            Bank  9             00h                   900h

                                       FFh                   9FFh

= 1010             Bank  10            00h                   A00h

                                       FFh                   AFFh

= 1011             Bank  11            00h                   B00h

                                       FFh                   BFFh

= 1100             Bank  12            00h                   C00h

                                       FFh                   CFFh

= 1101             Bank  13            00h                   D00h

                                       FFh                   DFFh

= 1110                                 00h                   E00h

                   Bank  14

                                       FFh                   EFFh
                                                             F00h
                                       00h  Unused

= 1111             Bank  15                 SFR(1)           F53h

                                                             F5Fh

                                            SFR              F60h

                                       FFh                   FFFh

Note 1:      SFRs  occupying F53h to        F5Fh address space are not  in  the  virtual bank.

 2009-2016 Microchip Technology Inc.                                                              DS40001365F-page 31
PIC18(L)F1XK22

FIGURE 3-6:          DATA MEMORY MAP FOR PIC18(L)F14K22                      DEVICES

BSR<3:0>                                Data Memory Map                      When ‘a’ = 0:

                                                                                      The BSR is ignored and the

= 0000                         00h      Access RAM       000h                         Access Bank is used.

                     Bank  0                             05Fh                         The first 96 bytes are
                                                         060h
                               FFh      GPR              0FFh                         general purpose RAM

= 0001                         00h                       100h                         (from Bank 0).

                     Bank  1            GPR                                           The   second    160  bytes  are

                               FFh                       1FFh                         Special  Function    Registers

= 0010               Bank  2   00h                       200h                         (from Bank 15).

                               FFh                       2FFh                When ‘a’ = 1:

= 0011               Bank  3   00h                       300h                         The BSR specifies the Bank

                               FFh                       3FFh                         used by the instruction.

=  0100              Bank  4   00h                       400h

                               FFh                       4FFh

=  0101              Bank  5   00h                       500h

                               FFh                       5FFh

=  0110              Bank  6   00h                       600h

                               FFh                       6FFh                               Access Bank

=  0111              Bank  7   00h                       700h                               Access RAM Low        00h

                                                                                                                  5Fh
                               FFh                       7FFh                                                     60h
                                                                                            Access RAM High
                                                         800h
=  1000              Bank  8   00h                                                             (SFRs)           FFh

                               FFh      Unused           8FFh

=                              00h      Read 00h         900h

   1001              Bank  9

                               FFh                       9FFh

= 1010               Bank  10  00h                       A00h

                               FFh                       AFFh

= 1011               Bank  11  00h                       B00h

                               FFh                       BFFh

= 1100               Bank  12  00h                       C00h

                               FFh                       CFFh

= 1101               Bank  13  00h                       D00h

                               FFh                       DFFh

= 1110                         00h                       E00h

                     Bank  14

                               FFh                       EFFh
                                                         F00h
                               00h      Unused

= 1111               Bank  15           SFR(1)           F53h

                                                         F5Fh

                                        SFR              F60h

                               FFh                       FFFh

Note 1:  SFRs        occupying F53h to  F5Fh address space are not  in  the  virtual bank.

DS40001365F-page 32                                                           2009-2016 Microchip Technology          Inc.
                                                                  PIC18(L)F1XK22

FIGURE 3-7:          USE  OF  THE BANK SELECT REGISTER (DIRECT ADDRESSING)

                  BSR(1)                        Data Memory                                    From Opcode(2)

7                                      0  000h               00h  7                                                  0

0     0      0    0  0    0   1        0        Bank 0       FFh  1                         1  1  1      1     1  1  1

                                          100h  Bank 1       00h

Bank Select(2)                                               FFh
                                          200h               00h
                                                Bank 2
                                                             FFh
                                          300h
                                                             00h

                                                Bank 3

                                                through

                                                Bank 13

                                                             FFh

                                          E00h  Bank 14      00h

                                                             FFh
                                                             00h
                                          F00h  Bank 15

                                          FFFh               FFh

Note  1:     The Access RAM bit of the instruction can be used to force an override of the     selected  bank  (BSR<3:0>)  to

             the registers of the Access Bank.

      2:     The  MOVFF   instruction embeds the entire 12-bit address in the instruction.

 2009-2016 Microchip Technology Inc.                                                                    DS40001365F-page 33
PIC18(L)F1XK22

3.3.2        ACCESS BANK                                                3.3.3          GENERAL PURPOSE REGISTER

While   the  use   of  the  BSR  with    an  embedded           8-bit                  FILE

address allows users to address the entire range of                     PIC18 devices may have banked memory in the GPR

data memory, it also means that the user must always                    area. This is data RAM, which is available for use by all

ensure that the correct bank is selected. Otherwise,                    instructions.  GPRs      start  at   the  bottom    of     Bank    0

data may be read from or written to the wrong location.                 (address 000h) and grow upwards towards the bottom of

This can be disastrous if a GPR is the intended target                  the SFR area. GPRs are not initialized by a Power-on

of  an  operation,     but  an  SFR  is  written        to  instead.    Reset and are unchanged on all other Resets.

Verifying and/or changing the BSR for each read or

write to data memory can become very inefficient.                       3.3.4          SPECIAL FUNCTION REGISTERS

To streamline access for the most commonly used data                    The Special Function Registers (SFRs) are registers

memory locations, the data memory is configured with                    used by the CPU and peripheral modules for controlling

an   Access  Bank,     which    allows   users      to  access     a    the desired operation of the device. These registers are

mapped block of memory without specifying a BSR.                        implemented as static RAM. SFRs start at the top of

The  Access  Bank      consists  of  the     first  96      bytes  of   data memory (FFFh) and extend downward to occupy

memory (00h-5Fh) in Bank 0 and the last 160 bytes of                    the top portion of Bank 15 (F60h to FFFh). A list of

memory (60h-FFh) in Block 15. The lower half is known                   these registers is given in Table 3-1 and Table 3-2.

as the “Access RAM” and is composed of GPRs. This                       The    SFRs    can   be  classified     into   two  sets:  those

upper half is also where the device’s SFRs are mapped.                  associated with the “core” device functionality (ALU,

These   two  areas     are  mapped       contiguously       in     the  Resets    and  interrupts)      and     those  related     to      the

Access Bank and can be addressed in a linear fashion                    peripheral functions. The Reset and Interrupt registers

by an 8-bit address (Figure 3-5 and Figure 3-6).                        are described in their respective chapters, while the

The Access Bank is used by core PIC18 instructions                      ALU’s     STATUS     register   is   described      later  in  this

that include the Access RAM bit (the ‘a’ parameter in                   section.  Registers      related    to    the  operation       of  a

the instruction). When ‘a’ is equal to ‘1’, the instruction             peripheral feature are described in the chapter for that

uses the BSR and the 8-bit address included in the                      peripheral.

opcode for the data memory address. When ‘a’ is ‘0’,                    The    SFRs    are   typically      distributed     among          the

however, the instruction is forced to use the Access                    peripherals whose functions they control. Unused SFR

Bank address map; the current value of the BSR is                       locations are unimplemented and read as ‘0’s.

ignored entirely.

Using this “forced” addressing allows the instruction to

operate on a data address in a single cycle, without

updating the BSR first. For 8-bit addresses of 60h and

above, this means that users can evaluate and operate

on SFRs more efficiently. The Access RAM below 60h

is a good place for data values that the user might need

to access rapidly, such as immediate computational

results or common program variables. Access RAM

also allows for faster and more code efficient context

saving and switching of variables.

The mapping of the Access Bank is slightly different

when the extended instruction set is enabled (XINST

Configuration bit = 1). This is discussed in more detail

in  Section 3.5.3      “Mapping  the      Access            Bank   in

Indexed Literal Offset Mode”.

DS40001365F-page 34                                                                           2009-2016 Microchip Technology Inc.
                                                                          PIC18(L)F1XK22

TABLE 3-1:  SPECIAL FUNCTION REGISTER MAP FOR PIC18(L)F1XK22 DEVICES

Address     Name       Address              Name     Address   Name       Address  Name     Address  Name

FFFh        TOSU       FD7h                 TMR0H    FAFh      SPBRG      F87h     —(2)     F5Fh     —(2)

FFEh        TOSH       FD6h                 TMR0L    FAEh      RCREG      F86h     —(2)     F5Eh     —(2)

FFDh        TOSL       FD5h                 T0CON    FADh      TXREG      F85h     —(2)     F5Dh     —(2)

FFCh        STKPTR     FD4h                 —(2)     FACh      TXSTA      F84h     —(2)     F5Ch     —(2)

FFBh        PCLATU     FD3h                 OSCCON   FABh      RCSTA      F83h     —(2)     F5Bh     —(2)

FFAh        PCLATH     FD2h     OSCCON2              FAAh      —(2)       F82h     PORTC    F5Ah     —(2)

FF9h        PCL        FD1h     WDTCON               FA9h      EEADR      F81h     PORTB    F59h     —(2)

FF8h      TBLPTRU      FD0h                 RCON     FA8h      EEDATA     F80h     PORTA    F58h     —(2)

FF7h      TBLPTRH      FCFh                 TMR1H    FA7h      EECON2(1)  F7Fh     ANSELH   F57h     —(2)

FF6h        TBLPTRL    FCEh                 TMR1L    FA6h      EECON1     F7Eh     ANSEL    F56h     —(2)

FF5h        TABLAT     FCDh                 T1CON    FA5h      —(2)       F7Dh     —(2)     F55h     —(2)

FF4h        PRODH      FCCh                 TMR2     FA4h      —(2)       F7Ch     —(2)     F54h     —(2)

FF3h        PRODL      FCBh                 PR2      FA3h      —(2)       F7Bh     —(2)     F53h     —(2)

FF2h        INTCON     FCAh                 T2CON    FA2h      IPR2       F7Ah     IOCB

FF1h        INTCON2    FC9h                 SSPBUF   FA1h      PIR2       F79h     IOCA

FF0h        INTCON3    FC8h                 SSPADD   FA0h      PIE2       F78h     WPUB

FEFh        INDF0(1)   FC7h                 SSPSTAT  F9Fh      IPR1       F77h     WPUA

FEEh      POSTINC0(1)  FC6h     SSPCON1              F9Eh      PIR1       F76h     SLRCON

FEDh      POSTDEC0(1)  FC5h     SSPCON2              F9Dh      PIE1       F75h     —(2)

FECh      PREINC0(1)   FC4h                 ADRESH   F9Ch      —(2)       F74h     —(2)

FEBh      PLUSW0(1)    FC3h                 ADRESL   F9Bh      OSCTUNE    F73h     —(2)

FEAh        FSR0H      FC2h                 ADCON0   F9Ah      —(2)       F72h     —(2)

FE9h        FSR0L      FC1h                 ADCON1   F99h      —(2)       F71h     —(2)

FE8h        WREG       FC0h                 ADCON2   F98h      —(2)       F70h     —(2)

FE7h        INDF1(1)   FBFh                 CCPR1H   F97h      —(2)       F6Fh     SSPMASK

FE6h      POSTINC1(1)  FBEh                 CCPR1L   F96h      —(2)       F6Eh     —(2)

FE5h      POSTDEC1(1)  FBDh     CCP1CON              F95h      —(2)       F6Dh     CM1CON0

FE4h      PREINC1(1)   FBCh     VREFCON2             F94h      TRISC      F6Ch     CM2CON1

FE3h      PLUSW1(1)    FBBh     VREFCON1             F93h      TRISB      F6Bh     CM2CON0

FE2h        FSR1H      FBAh     VREFCON0             F92h      TRISA      F6Ah     —(2)

FE1h        FSR1L      FB9h     PSTRCON              F91h      —(2)       F69h     SRCON1

FE0h        BSR        FB8h     BAUDCON              F90h      —(2)       F68h     SRCON0

FDFh        INDF2(1)   FB7h     PWM1CON              F8Fh      —(2)       F67h     —(2)

FDEh      POSTINC2(1)  FB6h     ECCP1AS              F8Eh      —(2)       F66h     —(2)

FDDh      POSTDEC2(1)  FB5h                 —(2)     F8Dh      —(2)       F65h     —(2)

FDCh      PREINC2(1)   FB4h                 —(2)     F8Ch      —(2)       F64h     —(2)

FDBh      PLUSW2(1)    FB3h                 TMR3H    F8Bh      LATC       F63h     —(2)

FDAh        FSR2H      FB2h                 TMR3L    F8Ah      LATB       F62h     —(2)

FD9h        FSR2L      FB1h                 T3CON    F89h      LATA       F61h     —(2)

FD8h        STATUS     FB0h                 SPBRGH   F88h      —(2)       F60h     —(2)

Legend:   = Unimplemented data memory locations, read as ‘0’,

Note  1:  This is not a physical register.

      2:  Unimplemented registers are read as ‘0’.

 2009-2016 Microchip Technology Inc.                                                       DS40001365F-page 35
PIC18(L)F1XK22

TABLE 3-2:           REGISTER FILE SUMMARY (PIC18(L)F1XK22)

                                                                                                                             Value on           Details

File Name   Bit 7             Bit 6        Bit 5    Bit 4           Bit 3               Bit 2  Bit 1                 Bit 0   POR, BOR                  on

                                                                                                                                                       page:

TOSU        —                    —         —        Top-of-Stack Upper Byte (TOS<20:16>)                                     ---0         0000  245, 25

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

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

STKPTR      STKOVF      STKUNF             —        SP4             SP3                 SP2    SP1                   SP0     00-0         0000  245, 26

PCLATU      —                    —         —        Holding Register for PC<20:16>                                           ---0         0000  245, 25

PCLATH      Holding Register for PC<15:8>                                                                                    0000         0000  245, 25

PCL         PC, Low Byte (PC<7:0>)                                                                                           0000         0000  245, 25

TBLPTRU     —                    —         —        Program Memory Table Pointer Upper Byte (TBLPTR<20:16>)                  ---0         0000  245, 48

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

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

TABLAT      Program Memory Table Latch                                                                                       0000         0000  245, 48

PRODH       Product Register, High Byte                                                                                      xxxx         xxxx  245, 58

PRODL       Product Register, Low Byte                                                                                       xxxx         xxxx  245, 58

INTCON      GIE/GIEH    PEIE/GIEL          TMR0IE   INT0IE          RABIE           TMR0IF     INT0IF                RABIF   0000         000x  245, 62

INTCON2     RABPU       INTEDG0            INTEDG1  INTEDG2         —               TMR0IP     —                     RABIP   1111         -1-1  245, 63

INTCON3     INT2IP            INT1IP       —        INT2IE          INT1IE              —      INT2IF                INT1IF  11-0         0-00  245, 64

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

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

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

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

PLUSW0      Uses contents of FSR0 to address data memory – value of FSR0 pre-incremented (not a physical register) – value   N/A                245, 41

            of FSR0 offset by W

FSR0H       —                    —         —        —             Indirect Data Memory Address Pointer 0, High Byte          ----         0000  245, 41

FSR0L       Indirect Data Memory Address Pointer 0, Low Byte                                                                 xxxx         xxxx  245, 41

WREG        Working Register                                                                                                 xxxx         xxxx  245

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

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

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

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

PLUSW1      Uses contents of FSR1 to address data memory – value of FSR1 pre-incremented (not a physical register) – value   N/A                245, 41

            of FSR1 offset by W

FSR1H       —                    —         —        —             Indirect Data Memory Address Pointer 1, High Byte          ----         0000  246, 41

FSR1L       Indirect Data Memory Address Pointer 1, Low Byte                                                                 xxxx         xxxx  246, 41

BSR         —                    —         —        —             Bank Select Register                                       ----         0000  246, 30

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

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

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

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

PLUSW2      Uses contents of FSR2 to address data memory – value of FSR2 pre-incremented (not a physical register) – value   N/A                246, 41

            of FSR2 offset by W

FSR2H       —                    —         —        —             Indirect Data Memory Address Pointer 2, High Byte          ----         0000  246, 41

FSR2L       Indirect Data Memory Address Pointer 2, Low Byte                                                                 xxxx         xxxx  246, 41

STATUS      —                    —         —        N               OV                  Z      DC                    C       ---x         xxxx  246, 39

Legend:     x = unknown, u = unchanged, — = unimplemented, q = value depends on condition

Note    1:  The SBOREN bit is only available when the BOREN<1:0> Configuration bits = 01; otherwise it is disabled and reads as ‘0’. See

            Section 22.4 “Brown-out Reset (BOR)”.

        2:  The RA3 bit is only available when Master Clear Reset is disabled (MCLRE Configuration bit = 0). Otherwise, RA3 reads as ‘0’. This bit is

            read-only.

        3:  Unimplemented, read as ‘1’.

DS40001365F-page 36                                                                             2009-2016 Microchip Technology Inc.
                                                                                          PIC18(L)F1XK22

TABLE 3-2:         REGISTER FILE SUMMARY (PIC18(L)F1XK22) (CONTINUED)

                                                                                                                      Value on                 Details

File Name   Bit 7           Bit 6          Bit 5      Bit 4   Bit 3     Bit 2                         Bit 1  Bit 0    POR, BOR                        on

                                                                                                                                                      page:

TMR0H      Timer0 Register, High Byte                                                                                 0000               0000  246, 92

TMR0L      Timer0 Register, Low Byte                                                                                  xxxx               xxxx  246, 92

T0CON      TMR0ON           T08BIT         T0CS       T0SE    PSA       T0PS2             T0PS1              T0PS0    1111               1111  246, 91

OSCCON      IDLEN           IRCF2          IRCF1      IRCF0   OSTS      HFIOFS            SCS1               SCS0     0011               qq00  246, 17

OSCCON2     —               —              —          —       —         PRI_SD            HFIOFL             LFIOFS   ----               -10x  246, 18

WDTCON      —               —              —          —       —              —                        —      SWDTEN   ---                ---0  246, 260

RCON        IPEN       SBOREN(1)           —          RI      TO             PD                       POR    BOR      0q-1               11q0  237,

                                                                                                                                               246, 71

TMR1H      Timer1 Register, High Byte                                                                                 xxxx               xxxx  246, 94

TMR1L      Timer1 Register, Low Bytes                                                                                 xxxx               xxxx  246, 94

T1CON       RD16            T1RUN          T1CKPS1   T1CKPS0  T1OSCEN   T1SYNC            TMR1CS             TMR1ON   0000               0000  246, 94

TMR2       Timer2 Register                                                                                            0000               0000  246, 100

PR2        Timer2 Period Register                                                                                     1111               1111  246, 100

T2CON       —          T2OUTPS3         T2OUTPS2    T2OUTPS1  T2OUTPS0  TMR2ON            T2CKPS1            T2CKPS0  -000               0000  246, 100

SSPBUF     SSP Receive Buffer/Transmit Register                                                                       xxxx               xxxx  246,

                                                                                                                                               128, 130

SSPADD     SSP Address Register in I2C Slave Mode. SSP Baud Rate Reload Register in I2C Master Mode.                  0000               0000  246, 147

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

                                                                                                                                               128, 137

SSPCON1     WCOL            SSPOV          SSPEN      CKP     SSPM3     SSPM2             SSPM1              SSPM0    0000               0000  246,

                                                                                                                                               128, 138

SSPCON2     GCEN            ACKSTAT        ACKDT      ACKEN   RCEN      PEN               RSEN               SEN      0000               0000  246, 139

ADRESH     A/D Result Register, High Byte                                                                             xxxx               xxxx  247, 197

ADRESL     A/D Result Register, Low Byte                                                                              xxxx               xxxx  247, 197

ADCON0      —               —              CHS3       CHS2    CHS1      CHS0              GO/DONE            ADON     --00               0000  247, 203

ADCON1      —               —              —          —       PVCFG1    PVCFG0            NVCFG1             NVCFG0   ----               0000  247, 204

ADCON2      ADFM            —              ACQT2      ACQT1   ACQT0     ADCS2             ADCS1              ADCS0    0-00               0000  247, 205

CCPR1H     Capture/Compare/PWM Register 1, High Byte                                                                  xxxx               xxxx  247, 126

CCPR1L     Capture/Compare/PWM Register 1, Low Byte                                                                   xxxx               xxxx  247, 126

CCP1CON     P1M1            P1M0           DC1B1      DC1B0   CCP1M3    CCP1M2            CCP1M1             CCP1M0   0000               0000  247, 106

VREFCON2    —               —              —                            DAC1R<4:0>                                    ---0               0000  247, 236

VREFCON1    D1EN            D1LPS          DAC1OE     ---        D1PSS<1:0>                           —      D1NSS    000-               00-0  247, 235

VREFCON0   FVR1EN           FVR1ST         FVR1S<1:0>         —              —                        —      —        0001               ----  247, 232

PSTRCON     —               —              —        STRSYNC   STRD      STRC              STRB               STRA     ---0               0001  247, 123

BAUDCON    ABDOVF           RCIDL          DTRXP      CKTXP   BRG16          —            WUE                ABDEN    0100               0-00  247, 181

PWM1CON     PRSEN           PDC6           PDC5       PDC4    PDC3      PDC2              PDC1               PDC0     0000               0000  247, 122

ECCP1AS    ECCPASE     ECCPAS2            ECCPAS1   ECCPAS0   PSSAC1    PSSAC0            PSSBD1             PSSBD0   0000               0000  247, 118

TMR3H      Timer3 Register, High Byte                                                                                 xxxx               xxxx  247, 102

TMR3L      Timer3 Register, Low Byte                                                                                  xxxx               xxxx  247, 102

T3CON       RD16            —              T3CKPS1   T3CKPS0  T3CCP1    T3SYNC            TMR3CS             TMR3ON   0-00               0000  247, 102

Legend:    x = unknown, u = unchanged, — = unimplemented, q = value depends on condition

Note   1:  The SBOREN bit is only available when the BOREN<1:0> Configuration bits = 01; otherwise it is disabled and reads as ‘0’. See

           Section 22.4 “Brown-out Reset (BOR)”.

       2:  The RA3 bit is only available when Master Clear Reset is disabled (MCLRE Configuration bit = 0). Otherwise, RA3 reads as ‘0’. This bit is

           read-only.

       3:  Unimplemented, read as ‘1’.

 2009-2016 Microchip Technology Inc.                                                                            DS40001365F-page 37
PIC18(L)F1XK22

TABLE 3-2:         REGISTER FILE SUMMARY (PIC18(L)F1XK22) (CONTINUED)

                                                                                                          Value on                             Details

File Name   Bit 7      Bit 6            Bit 5     Bit 4         Bit 3   Bit 2             Bit 1   Bit 0   POR, BOR                                    on

                                                                                                                                                      page:

SPBRGH     EUSART Baud Rate Generator Register, High Byte                                                 0000                           0000  247, 182

SPBRG      EUSART Baud Rate Generator Register, Low Byte                                                  0000                           0000  247, 182

RCREG      EUSART Receive Register                                                                        0000                           0000  247, 175

TXREG      EUSART Transmit Register                                                                       0000                           0000  247, 172

TXSTA       CSRC       TX9              TXEN      SYNC          SENDB   BRGH              TRMT    TX9D    0000                           0010  247, 179

RCSTA       SPEN       RX9              SREN      CREN          ADDEN   FERR              OERR    RX9D    0000                           000x  247, 180

EEADR      EEADR7      EEADR6           EEADR5    EEADR4        EEADR3  EEADR2            EEADR1  EEADR0  0000                           0000  247, 45,

                                                                                                                                               54

EEDATA     EEPROM Data Register                                                                           0000                           0000  247, 45,

                                                                                                                                               54

EECON2     EEPROM Control Register 2 (not a physical register)                                            0000                           0000  247, 45,

                                                                                                                                               54

EECON1      EEPGD      CFGS             —         FREE          WRERR   WREN              WR      RD      xx-0                           x000  247, 45,

                                                                                                                                               54

IPR2        OSCFIP     C1IP             C2IP      EEIP          BCLIP   —                 TMR3IP  —       1111                           1-1-  248, 70

PIR2        OSCFIF     C1IF             C2IF      EEIF          BCLIF   —                 TMR3IF  —       0000                           0-0-  248, 66

PIE2        OSCFIE     C1IE             C2IE      EEIE          BCLIE   —                 TMR3IE  —       0000                           0-0-  248, 68

IPR1        —          ADIP             RCIP      TXIP          SSPIP   CCP1IP            TMR2IP  TMR1IP  -111                           1111  248, 69

PIR1        —          ADIF             RCIF      TXIF          SSPIF   CCP1IF            TMR2IF  TMR1IF  -000                           0000  248, 65

PIE1        —          ADIE             RCIE      TXIE          SSPIE   CCP1IE            TMR2IE  TMR1IE  -000                           0000  248, 67

OSCTUNE     INTSRC     PLLEN            TUN5      TUN4          TUN3    TUN2              TUN1    TUN0    0000                           0000  248, 19

TRISC       TRISC7     TRISC6           TRISC5    TRISC4        TRISC3  TRISC2            TRISC1  TRISC0  1111                           1111  248, 84

TRISB       TRISB7     TRISB6           TRISB5    TRISB4        —       —                 —       —       1111                           ----  248, 80

TRISA       —          —                TRISA5    TRISA4        —(3)    TRISA2            TRISA1  TRISA0  --11                           1111  248, 75

LATC        LATC7      LATC6            LATC5     LATC4         LATC3   LATC2             LATC1   LATC0   xxxx                           xxxx  248, 85

LATB        LATB7      LATB6            LATB5     LATB4         —       —                 —       —       xxxx                           ----  248, 80

LATA        —          —                LATA5     LATA4         —       LATA2             LATA1   LATA0   --xx                           -xxx  248, 76

PORTC       RC7        RC6              RC5       RC4           RC3     RC2               RC1     RC0     xxxx                           xxxx  248, 84

PORTB       RB7        RB6              RB5       RB4           —       —                 —       —       xxxx                           ----  248, 80

PORTA       —          —                RA5       RA4           RA3(2)  RA2               RA1     RA0     --xx                           xxxx  248, 75

ANSELH      —          —                —         —             ANS11   ANS10             ANS9    ANS8    ----                           1111  248, 89

ANSEL       ANS7       ANS6             ANS5      ANS4          ANS3    ANS2              ANS1    ANS0    1111                           1111  248, 88

IOCB        IOCB7      IOCB6            IOCB5     IOCB4         —       —                 —       —       0000                           ----  248, 81

IOCA        —          —                IOCA5     IOCA4         IOCA3   IOCA2             IOCA1   IOCA0   --00                           0000  248, 76

WPUB        WPUB7      WPUB6            WPUB5     WPUB4         —       —                 —       —       1111                           ----  248, 81

WPUA        —          —                WPUA5     WPUA4         WPUA3   WPUA2             WPUA1   WPUA0   --11                           1111  245, 76

SLRCON      —          —                —         —             —       SLRC              SLRB    SLRA    ----                           -111  248, 90

SSPMSK      MSK7       MSK6             MSK5      MSK4          MSK3    MSK2              MSK1    MSK0    1111                           1111  248, 146

CM1CON0     C1ON       C1OUT            C1OE      C1POL         C1SP    C1R               C1CH1   C1CH0   0000                           0000  248, 216

CM2CON1    MC1OUT      MC2OUT           C1RSEL    C2RSEL        C1HYS   C2HYS             C1SYNC  C2SYNC  0000                           0000  248, 220

CM2CON0     C2ON       C2OUT            C2OE      C2POL         C2SP    C2R               C2CH1   C2CH0   0000                           0000  248, 217

SRCON1      SRSPE      SRSCKE           SRSC2E    SRSC1E        SRRPE   SRRCKE            SRRC2E  SRRC1E  0000                           0000  248, 230

SRCON0      SRLEN      SRCLK2           SRCLK1    SRCLK0        SRQEN   SRNQEN            SRPS    SRPR    0000                           0000  248, 229

Legend:    x = unknown, u = unchanged, — = unimplemented, q = value depends on condition

Note   1:  The SBOREN bit is only available when the BOREN<1:0> Configuration bits = 01; otherwise it is disabled and reads as ‘0’. See

           Section 22.4 “Brown-out Reset (BOR)”.

       2:  The RA3 bit is only available when Master Clear Reset is disabled (MCLRE Configuration bit = 0). Otherwise, RA3 reads as ‘0’. This bit is

           read-only.

       3:  Unimplemented, read as ‘1’.

DS40001365F-page 38                                                                        2009-2016 Microchip Technology Inc.
                                                                                          PIC18(L)F1XK22

3.3.5         STATUS REGISTER                                                It is recommended that only BCF, BSF, SWAPF, MOVFF

The STATUS register, shown in Register 3-2, contains                         and MOVWF instructions are used to alter the STATUS

the arithmetic status of the ALU. As with any other SFR,                     register, because these instructions do not affect the Z,

it can be the operand for any instruction.                                   C, DC, OV or N bits in the STATUS register.

If  the  STATUS         register  is   the  destination    for  an           For other instructions that do not affect Status bits, see

instruction that affects the Z, DC, C, OV or N bits, the                     the  instruction  set    summaries  in    Table 24-2     and

results of the instruction are not written; instead, the                     Table 24-3.

STATUS        register  is      updated     according      to   the          Note:        The C and DC bits operate as the borrow

instruction   performed.        Therefore,  the    result  of   an                        and  digit    borrow  bits,  respectively,     in

instruction with the STATUS register as its destination                                   subtraction.

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 3-2:                STATUS: STATUS REGISTER

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

         —                   —              —                   N            OV                Z                DC(1)       C(1)

bit 7                                                                                                                              bit 0

Legend:

R = Readable bit                       W = Writable bit               U = Unimplemented bit, read as ‘0’

-n = Value at POR                      ‘1’ = Bit is set               ‘0’ = Bit is cleared              x = Bit is unknown

bit 7-5            Unimplemented: Read as ‘0’

bit 4              N: Negative bit

                   This bit is used for signed arithmetic (two’s complement). It indicates whether the result was negative

                   (ALU MSB = 1).

                   1 = Result was negative

                   0 = Result was positive

bit 3              OV: Overflow bit

                   This bit is used for signed arithmetic (two’s complement). It indicates an overflow of the 7-bit

                   magnitude which causes the sign bit (bit 7 of the result) to change state.

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

                   0 = No overflow occurred

bit 2              Z: Zero bit

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

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

bit 1              DC: Digit Carry/Borrow bit (ADDWF, ADDLW,SUBLW,SUBWF instructions)(1)

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

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

bit 0              C: Carry/Borrow bit (ADDWF, ADDLW,                SUBLW,  SUBWF  instructions)(1)

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

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

Note     1:   For Borrow, the polarity is reversed. A subtraction is executed by adding the two’s complement of the

              second operand. For rotate (RRF, RLF) instructions, this bit is loaded with either the high-order or low-order

              bit of the source register.

 2009-2016 Microchip Technology Inc.                                                                            DS40001365F-page 39
PIC18(L)F1XK22

3.4          Data Addressing Modes                                         Purpose Register File”) or a location in the Access

                                                                           Bank    (Section 3.3.2      “Access      Bank”)     as   the  data

    Note:        The execution of some instructions in the                 source for the instruction.

                 core  PIC18     instruction     set  are   changed        The Access RAM bit ‘a’ determines how the address is

                 when the PIC18 extended instruction set is                interpreted. When ‘a’ is ‘1’, the contents of the BSR

                 enabled. See Section 3.5 “Data Memory                     (Section 3.3.1       “Bank  Select   Register       (BSR)”)    are

                 and the Extended Instruction Set” for                     used with the address to determine the complete 12-bit

                 more information.                                         address of the register. When ‘a’ is ‘0’, the address is

While the program memory can be addressed in only                          interpreted as being a register in the Access Bank.

one way – through the program counter – information                        Addressing that uses the Access RAM is sometimes

in the data memory space can be addressed in several                       also known as Direct Forced Addressing mode.

ways. For most instructions, the addressing mode is                        A few instructions, such as MOVFF, include the entire

fixed. Other instructions may use up to three modes,                       12-bit address (either source or destination) in their

depending on which operands are used and whether or                        opcodes. In these cases, the BSR is ignored entirely.

not the extended instruction set is enabled.                               The destination of the operation’s results is determined

The addressing modes are:                                                  by the destination bit ‘d’. When ‘d’ is ‘1’, the results are

•   Inherent                                                               stored    back   in  the   source    register,    overwriting   its

•   Literal                                                                original contents. When ‘d’ is ‘0’, the results are stored

•   Direct                                                                 in the W register. Instructions without the ‘d’ argument

•   Indirect                                                               have a destination that is implicit in the instruction; their

                                                                           destination is either the target register being operated

An additional addressing mode, Indexed Literal Offset,                     on or the W register.

is  available     when      the  extended        instruction    set   is   3.4.3       INDIRECT ADDRESSING

enabled (XINST Configuration bit = 1). Its operation is

discussed in greater detail in Section 3.5.1 “Indexed                      Indirect addressing allows the user to access a location

Addressing with Literal Offset”.                                           in data memory without giving a fixed address in the

3.4.1            INHERENT AND LITERAL                                      instruction. This is done by using File Select Registers

                 ADDRESSING                                                (FSRs) as pointers to the locations which are to be read

                                                                           or written. Since the FSRs are themselves located in

Many     PIC18        control  instructions    do     not  need     any    RAM     as  Special  File   Registers,      they   can   also   be

argument at all; they either perform an operation that                     directly    manipulated     under    program       control.   This

globally affects the device or they operate implicitly on                  makes       FSRs     very   useful   in     implementing      data

one    register.      This  addressing      mode      is   known      as   structures, such as tables and arrays in data memory.

Inherent Addressing. Examples include SLEEP, RESET                         The     registers    for   indirect  addressing         are    also

and DAW.                                                                   implemented with Indirect File Operands (INDFs) that

Other instructions work in a similar way but require an                    permit automatic manipulation of the pointer value with

additional       explicit   argument    in  the  opcode.        This  is   auto-incrementing,         auto-decrementing       or   offsetting

known        as  Literal    Addressing      mode      because       they   with another value. This allows for efficient code, using

require some literal value as an argument. Examples                        loops, such as the example of clearing an entire RAM

include ADDLW and MOVLW, which respectively, add or                        bank in Example 3-5.

move a literal value to the W register. Other examples

include      CALL      and     GOTO,    which    include    a   20-bit     EXAMPLE 3-5:                HOW TO CLEAR RAM

program memory address.                                                                                (BANK 1) USING

3.4.2            DIRECT ADDRESSING                                                                     INDIRECT ADDRESSING

                                                                                       LFSR     FSR0,   100h        ;

Direct addressing specifies all or part of the source                      NEXT        CLRF     POSTINC0            ;  Clear   INDF

and/or destination address of the operation within the                                                              ;  register     then

opcode       itself.   The     options    are    specified      by    the                                           ;  inc   pointer

arguments accompanying the instruction.                                                BTFSS    FSR0H, 1            ;  All   done   with

                                                                                                                    ;  Bank1?

In the core PIC18 instruction set, bit-oriented and byte-                              BRA      NEXT                ;  NO,   clear   next

oriented      instructions     use    some       version    of  direct     CONTINUE                                 ;  YES,   continue

addressing by default. All of these instructions include

some   8-bit     literal   address    as  their  Least     Significant

Byte. This address specifies either a register address in

one of the banks of data RAM (Section 3.3.3 “General

DS40001365F-page 40                                                                              2009-2016 Microchip Technology Inc.
                                                                                                 PIC18(L)F1XK22

3.4.3.1       FSR Registers and the INDF                                       3.4.3.2              FSR Registers and POSTINC,

              Operand                                                                               POSTDEC, PREINC and PLUSW

At the core of indirect addressing are three sets of                           In addition to the INDF operand, each FSR register pair

registers: FSR0, FSR1 and FSR2. Each represents a                              also has four additional indirect operands. Like INDF,

pair of 8-bit registers, FSRnH and FSRnL. Each FSR                             these are “virtual” registers which cannot be directly

pair holds a 12-bit value, therefore the four upper bits                       read       or  written.  Accessing     these     registers  actually

of the FSRnH register are not used. The 12-bit FSR                             accesses the location to which the associated FSR

value can address the entire range of the data memory                          register pair points, and also performs a specific action

in a linear fashion. The FSR register pairs, then, serve                       on the FSR value. They are:

as pointers to data memory locations.                                          •    POSTDEC: accesses the location to which the

Indirect  addressing      is  accomplished       with   a     set  of               FSR points, then automatically decrements the

Indirect File Operands, INDF0 through INDF2. These                                  FSR by 1 afterwards

can  be   thought    of   as    “virtual”   registers:  they       are         •    POSTINC: accesses the location to which the

mapped    in  the    SFR      space   but   are  not    physically                  FSR points, then automatically increments the

implemented. Reading or writing to a particular INDF                                FSR by 1 afterwards

register  actually   accesses        its   corresponding      FSR              •    PREINC: automatically increments the FSR by 1,

register pair. A read from INDF1, for example, reads                                then uses the location to which the FSR points in

the data at the address indicated by FSR1H:FSR1L.                                   the operation

Instructions that use the INDF registers as operands                           •    PLUSW: adds the signed value of the W register

actually use the contents of their corresponding FSR as                             (range of -127 to 128) to that of the FSR and uses

a pointer to the instruction’s target. The INDF operand                             the location to which the result points in the

is just a convenient way of using the pointer.                                      operation.

Because indirect addressing uses a full 12-bit address,                        In this context, accessing an INDF register uses the

data RAM banking is not necessary. Thus, the current                           value in the associated FSR register without changing

contents of the BSR and the Access RAM bit have no                             it.  Similarly,      accessing  a  PLUSW      register    gives  the

effect on determining the target address.                                      FSR value an offset by that in the W register; however,

                                                                               neither        W  nor   the  FSR   is  actually  changed    in   the

                                                                               operation.        Accessing     the    other     virtual    registers

                                                                               changes the value of the FSR register.

FIGURE 3-8:               INDIRECT          ADDRESSING

                                                                                                               000h

Using an instruction with one of the                          ADDWF,        INDF1,  1                                           Bank 0

indirect addressing registers as the                                                                           100h

operand....                                                                                                                     Bank 1

                                                                                                               200h

                                                                                                               300h             Bank 2

...uses the 12-bit address stored in                               FSR1H:FSR1L

the    FSR    pair  associated  with  that       7                       0  7                       0

register....                                                                                                                    Bank 3

                                                 x  x   x  x  1    1  1  0  1  1    0  0  1   1  0  0                        through

                                                                                                                             Bank 13

...to     determine  the  data  memory

location to be used in that operation.

In this case, the FSR1 pair contains                                                                           E00h

ECCh. This means the contents of                                                                                             Bank 14

location ECCh will be added to that                                                                            F00h

of the W register and stored back in                                                                                         Bank 15

ECCh.                                                                                                          FFFh

                                                                                                                      Data Memory

 2009-2016 Microchip Technology Inc.                                                                                 DS40001365F-page 41
PIC18(L)F1XK22

Operations on the FSRs with POSTDEC, POSTINC                            3.5.1         INDEXED ADDRESSING WITH

and  PREINC       affect    the  entire     register  pair;  that  is,                LITERAL OFFSET

rollovers of the FSRnL register from FFh to 00h carry                   Enabling the PIC18 extended instruction set changes

over to the FSRnH register. On the other hand, results                  the   behavior       of   indirect  addressing       using       the     FSR2

of these operations do not change the value of any                      register    pair    within    Access    RAM.         Under       the  proper

flags in the STATUS register (e.g., Z, N, OV, etc.).                    conditions, instructions that use the Access Bank – that

The PLUSW register can be used to implement a form                      is, most bit-oriented and byte-oriented instructions –

of indexed addressing in the data memory space. By                      can   invoke      a  form     of  indexed      addressing          using   an

manipulating the value in the W register, users can                     offset      specified     in      the   instruction.         This     special

reach  addresses         that   are  fixed  offsets   from   pointer    addressing mode is known as Indexed Addressing with

addresses. In some applications, this can be used to                    Literal Offset, or Indexed Literal Offset mode.

implement some powerful program control structure,                      When        using      the    extended         instruction         set,    this

such as software stacks, inside of data memory.                         addressing mode requires the following:

3.4.3.3           Operations by FSRs on FSRs                            •   The use of the Access Bank is forced (‘a’ = 0) and

Indirect addressing operations that target other FSRs                   •   The file address argument is less than or equal to

or   virtual   registers       represent    special   cases.       For      5Fh.

example, using an FSR to point to one of the virtual                    Under       these    conditions,        the    file  address          of   the

registers will not result in successful operations. As a                instruction is not interpreted as the lower byte of an

specific  case,   assume         that  FSR0H:FSR0L           contains   address (used with the BSR in direct addressing), or as

FE7h,     the  address      of  INDF1.    Attempts    to  read     the  an 8-bit address in the Access Bank. Instead, the value

value of the INDF1 using INDF0 as an operand will                       is interpreted as an offset value to an Address Pointer,

return 00h. Attempts to write to INDF1 using INDF0 as                   specified   by       FSR2.    The      offset   and      the     contents  of

the operand will result in a NOP.                                       FSR2 are added to obtain the target address of the

On the other hand, using the virtual registers to write to              operation.

an FSR pair may not occur as planned. In these cases,                   3.5.2         INSTRUCTIONS AFFECTED BY

the value will be written to the FSR pair but without any                             INDEXED LITERAL OFFSET MODE

incrementing or decrementing. Thus, writing to either

the INDF2 or POSTDEC2 register will write the same                      Any of the core PIC18 instructions that can use direct

value to the FSR2H:FSR2L.                                               addressing        are     potentially   affected         by   the  Indexed

Since the FSRs are physical registers mapped in the                     Literal     Offset   Addressing         mode.        This     includes     all

SFR space, they can be manipulated through all direct                   byte-oriented and bit-oriented instructions, or almost

operations.       Users     should   proceed    cautiously    when      one-half     of      the    standard        PIC18        instruction       set.

working on these registers, particularly if their code                  Instructions that only use Inherent or Literal Addressing

uses indirect addressing.                                               modes are unaffected.

Similarly, operations by indirect addressing are generally              Additionally, byte-oriented and bit-oriented instructions

permitted on all other SFRs. Users should exercise the                  are not affected if they do not use the Access Bank

appropriate caution that they do not inadvertently change               (Access RAM bit is ‘1’), or include a file address of 60h

settings that might affect the operation of the device.                 or   above.      Instructions          meeting      these        criteria  will

                                                                        continue to execute as before. A comparison of the

3.5       Data Memory and the Extended                                  different    possible         addressing        modes            when      the

          Instruction Set                                               extended     instruction          set   is   enabled         is  shown     in

                                                                        Figure 3-9.

Enabling the PIC18 extended instruction set (XINST                      Those who desire to use byte-oriented or bit-oriented

Configuration     bit    =  1)   significantly  changes      certain    instructions in the Indexed Literal Offset mode should

aspects       of  data      memory        and   its   addressing.       note the changes to assembler syntax for this mode.

Specifically, the use of the Access Bank for many of the                This    is  described       in    more      detail   in  Section 24.2.1

core PIC18 instructions is different; this is due to the                “Extended Instruction Syntax”.

introduction of a new addressing mode for the data

memory space.

What does not change is just as important. The size of

the data memory space is unchanged, as well as its

linear addressing. The SFR map remains the same.

Core PIC18 instructions can still operate in both Direct

and  Indirect     Addressing         mode;  inherent  and     literal

instructions do not change at all. Indirect addressing

with FSR0 and FSR1 also remain unchanged.

DS40001365F-page 42                                                                                2009-2016 Microchip Technology Inc.
                                                                                  PIC18(L)F1XK22

FIGURE 3-9:                 COMPARING ADDRESSING OPTIONS FOR BIT-ORIENTED AND

                            BYTE-ORIENTED INSTRUCTIONS (EXTENDED INSTRUCTION SET ENABLED)

EXAMPLE INSTRUCTION:                  ADDWF,  f,  d,  a  (Opcode: 0010      01da  ffff  ffff)

When ‘a’ = 0 and f  60h:                                000h

The   instruction           executes  in                 060h

Direct    Forced         mode.  ‘f’   is                       Bank 0

interpreted as a location in the                         100h

Access      RAM       between   060h                                                                00h

and 0FFh. This is the same as                                  Bank 1                               60h

locations       F60h        to  FFFh                           through

                                                               Bank 14                                      Valid range

(Bank 15) of data memory.                                                                                   for ‘f’

Locations below 60h are not                              F00h                                       FFh

available     in    this    addressing                                                  Access RAM

mode.                                                          Bank 15

                                                         F60h

                                                               SFRs

                                                         FFFh

                                                               Data Memory

When ‘a’ = 0 and f5Fh:                                000h

The     instruction         executes  in

Indexed Literal Offset mode. ‘f’                         060h

is interpreted as an offset to the                             Bank 0

address     value     in    FSR2.     The                100h                           001001da  ffffffff

two   are       added       together  to                       Bank 1

obtain the address of the target                               through

register for the instruction. The                              Bank 14

address     can     be      anywhere  in                                                FSR2H       FSR2L

the data memory space.                                   F00h

Note    that    in    this  mode,     the                      Bank 15

correct syntax is now:                                   F60h

ADDWF     [k],        d                                        SFRs

where ‘k’ is the same as ‘f’.                            FFFh

                                                               Data Memory

                                                                                        BSR

When ‘a’ = 1 (all values of f):                          000h                           00000000

The   instruction           executes  in                 060h

Direct  mode        (also   known     as                       Bank 0

Direct    Long        mode).    ‘f’   is                 100h

interpreted       as     a  location  in

one of the 16 banks of the data                                Bank 1                   001001da  ffffffff

memory      space.       The    bank  is                       through

designated by the Bank Select                                  Bank 14

Register (BSR). The address

can   be    in  any      implemented                     F00h

bank    in    the     data      memory                         Bank 15

space.                                                   F60h

                                                               SFRs

                                                         FFFh

                                                               Data Memory

 2009-2016 Microchip Technology Inc.                                                             DS40001365F-page 43
PIC18(L)F1XK22

3.5.3            MAPPING THE ACCESS BANK IN                                    Remapping   of   the  Access  Bank      applies   only    to

                 INDEXED LITERAL OFFSET MODE                                   operations  using  the  Indexed  Literal  Offset    mode.

The use of Indexed Literal Offset Addressing mode                              Operations that use the BSR (Access RAM bit is ‘1’) will

effectively changes how the first 96 locations of Access                       continue to use direct addressing as before.

RAM (00h to 5Fh) are mapped. Rather than containing                            3.6       PIC18 Instruction Execution and

just the contents of the bottom section of Bank 0, this

mode maps the contents from a user defined “window”                                      the Extended Instruction Set

that  can   be   located        anywhere    in    the  data  memory            Enabling    the  extended  instruction  set   adds  eight

space.      The  value          of  FSR2   establishes     the   lower         additional commands to the existing PIC18 instruction

boundary of the addresses mapped into the window,                              set. These instructions are executed as described in

while the upper boundary is defined by FSR2 plus 95                            Section 24.2 “Extended Instruction Set”.

(5Fh). Addresses in the Access RAM above 5Fh are

mapped as previously described (see Section 3.3.2

“Access          Bank”).        An  example       of   Access      Bank

remapping        in    this     addressing  mode       is  shown    in

Figure 3-10.

FIGURE 3-10:                        REMAPPING THE ACCESS                 BANK  WITH INDEXED LITERAL OFFSET

                                    ADDRESSING

Example Situation:

      ADDWF      f,    d,  a                000h

      FSR2H:FSR2L = 120h                                   Bank 0

      Locations      in    the  region

      from  the      FSR2       pointer     100h           Bank 1

      (120h) to the pointer plus            120h           Window

      05Fh (17Fh) are mapped                17Fh                                                                                   00h

      to    the  bottom         of  the                    Bank 1

      Access RAM (000h-05Fh).               200h                                                             Bank 1 “Window”

      Special    File    Registers  at                                                                                             5Fh
                                                                                                                                   60h
      F60h   through       FFFh     are

      mapped     to      60h    through                    Bank 2

      FFh, as usual.                                       through                                                 SFRs

      Bank  0    addresses          below                  Bank 14

      5Fh can still be addressed                                                                                                   FFh

      by using the BSR.                                                                                         Access Bank

                                            F00h

                                                           Bank 15

                                            F60h

                                                           SFRs

                                           FFFh

                                                       Data Memory

DS40001365F-page 44                                                                                2009-2016 Microchip Technology Inc.
                                                                                      PIC18(L)F1XK22

4.0       FLASH PROGRAM MEMORY                                  4.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 one byte at              •              Table Read (TBLRD)

a time. A write to program memory is executed on                •              Table Write (TBLWT)

blocks of 16 or 8 bytes at a time depending on the              The program memory space is 16-bit wide, while the

specific device (See Table 4-1). Program memory is              data RAM space is 8-bit wide. Table reads and table

erased in blocks of 64 bytes at a time. The difference          writes move data between these two memory spaces

between the write and erase block sizes requires from           through an 8-bit register (TABLAT).

4 to 8 block writes to restore the contents of a single         The table read operation retrieves one byte of data

block erase. A Bulk Erase operation can not be issued           directly from program memory and places it into the

from user code.                                                 TABLAT register. Figure 4-1 shows the operation of a

TABLE 4-1:         WRITE/ERASE BLOCK SIZES                      table read.

                        Write Block              Erase Block    The table write operation stores one byte of data from the

          Device        Size (bytes)             Size (bytes)   TABLAT register into a write block holding register. The

PIC18(L)F13K22                       8               64         procedure to write the contents of the holding registers

                                                                into program memory is detailed in Section 4.5 “Writing

PIC18(L)F14K22                       16              64         to             Flash  Program  Memory”.    Figure 4-2  shows    the

Writing   or   erasing  program          memory  will    cease  operation of a table write with program memory and data

instruction fetches until the operation is complete. The        RAM.

program memory cannot be accessed during the write              Table          operations      work  with  byte  entities.      Tables

or erase, therefore, code cannot execute. An internal           containing data, rather than program instructions, are

programming timer terminates program memory writes              not required to be word-aligned. Therefore, a table can

and erases.                                                     start and end at any byte address. If a table write is being

A value written to program memory does not need to be           used to write executable code into program memory,

a  valid  instruction.  Executing        a  program    memory   program instructions will need to be word-aligned.

location that forms an invalid instruction results in a

NOP.

FIGURE 4-1:             TABLE READ OPERATION

                                                                Instruction: TBLRD*

                   Table Pointer(1)                             Program Memory

                                                                                                           Table Latch (8-bit)

          TBLPTRU       TBLPTRH      TBLPTRL                                                               TABLAT

                                            Program Memory

                                            (TBLPTR)

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

 2009-2016 Microchip Technology Inc.                                                                      DS40001365F-page 45
PIC18(L)F1XK22

FIGURE     4-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:  During table writes the Table Pointer does not point directly to Program Memory. The LSBs of TBLPRTL

                   actually point to an address within the write block holding registers. The MSBs of the Table Pointer

                   determine where the write block will eventually be written. The process for writing the holding registers

                   to the program memory array is discussed in Section 4.5 “Writing to Flash Program Memory”.

4.2        Control Registers                                     The  FREE       bit  allows  the      program  memory                 erase

Several control registers are used in conjunction with           operation. When FREE is set, an erase operation is

the TBLRD and TBLWT instructions. These include the:             initiated on the next WR command. When FREE is

                                                                 clear, only writes are enabled.

•  EECON1 register                                               The WREN bit, when set, will allow a write operation.

•  EECON2 register                                               The WREN bit is clear on power-up.

•  TABLAT register                                               The WRERR bit is set by hardware when the WR bit is

•  TBLPTR registers                                              set and cleared when the internal programming timer

4.2.1          EECON1 AND EECON2 REGISTERS                       expires and the write operation is complete.

The  EECON1       register  (Register 4-1)     is  the  control  Note:           During normal operation, the WRERR is

register for memory accesses. The EECON2 register is                             read as ‘1’. This can indicate that a write

not a physical register; it is used exclusively in the                           operation was prematurely terminated by

memory     write   and      erase  sequences.      Reading                       a  Reset,    or   a     write  operation              was

EECON2 will read all ‘0’s.                                                       attempted improperly.

The EEPGD control bit determines if the access will be           The WR control bit initiates write operations. The WR

a program or data EEPROM memory access. When                     bit cannot be cleared, only set, by firmware. Then WR

EEPGD      is  clear,  any  subsequent      operations  will     bit is cleared by hardware at the completion of the write

operate on the data EEPROM memory. When EEPGD                    operation.

is set, any subsequent operations will operate on the            Note:           The  EEIF    interrupt  flag   bit           of  the  PIR2

program memory.                                                                  register is set when the write is complete.

The CFGS control bit determines if the access will be                            The EEIF flag stays set until cleared by

to the Configuration/Calibration registers or to program                         firmware.

memory/data EEPROM memory. When CFGS is set,

subsequent operations will operate on Configuration

registers  regardless   of  EEPGD        (see  Section 23.0

“Special Features of the CPU”). When CFGS is clear,

memory selection access is determined by EEPGD.

DS40001365F-page 46                                                                    2009-2016 Microchip Technology Inc.
                                                                           PIC18(L)F1XK22

REGISTER 4-1:      EECON1: DATA EEPROM CONTROL 1 REGISTER

     R/W-x         R/W-x               U-0       R/W-0         R/W-x               R/W-0  R/S-0               R/S-0

     EEPGD         CFGS                —         FREE          WRERR               WREN          WR           RD

bit 7                                                                                                              bit 0

Legend:

R = Readable bit              W = Writable bit

S = Bit can be set by software, but not cleared              U = Unimplemented bit, read as ‘0’

-n = Value at POR             ‘1’ = Bit is set               ‘0’ = Bit is cleared         x = Bit is unknown

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

            1=     Access Flash program memory

            0=     Access data EEPROM memory

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

            1=     Access Configuration registers

            0=     Access Flash program or data EEPROM memory

bit  5      Unimplemented: Read as ‘0’

bit  4      FREE: Flash Row (Block) Erase Enable bit

            1=     Erase the program memory block addressed by TBLPTR on the next WR command

                   (cleared by completion of erase operation)

            0=     Perform write-only

bit  3      WRERR: Flash Program/Data EEPROM Error Flag bit(1)

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

                   operation, or an improper write attempt)

            0=     The write operation completed

bit  2      WREN: Flash Program/Data EEPROM Write Enable bit

            1=     Allows write cycles to Flash program/data EEPROM

            0=     Inhibits write cycles to Flash program/data EEPROM

bit  1      WR: Write Control bit

            1=     Initiates a data EEPROM erase/write cycle or a program memory erase cycle or write cycle.

                   (The operation is self-timed and the bit is cleared by hardware once write is complete.

                   The WR bit can only be set (not cleared) by software.)

            0=     Write cycle to the EEPROM is complete

bit 0       RD: Read Control bit

            1=     Initiates an EEPROM read (Read takes one cycle. RD is cleared by hardware. The RD bit can only

                   be set (not cleared) by software. RD bit cannot be set when EEPGD = 1 or CFGS = 1.)

            0=     Does not initiate an EEPROM read

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

            error condition.

 2009-2016 Microchip Technology Inc.                                                            DS40001365F-page 47
PIC18(L)F1XK22

4.2.2        TABLAT – TABLE LATCH REGISTER                              4.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                   When a TBLRD is executed, all 22 bits of the TBLPTR

memory and data RAM.                                                    determine which byte is read from program memory

4.2.3        TBLPTR – TABLE POINTER                                     directly into the TABLAT register.

             REGISTER                                                   When a TBLWT is executed the byte in the TABLAT

The Table Pointer (TBLPTR) register addresses a byte                    register is written, not to Flash memory but, to a holding

within the program memory. The TBLPTR is comprised                      register in preparation for a program memory write. The

of three SFR registers: Table Pointer Upper Byte, Table                 holding registers constitute a write block which varies

Pointer  High   Byte    and    Table       Pointer  Low  Byte           depending on the device (See Table 4-1).The 3, 4, or 5

(TBLPTRU:TBLPTRH:TBLPTRL).                     These     three          LSbs of the TBLPTRL register determine which specific

registers join to form a 22-bit wide pointer. The low-                  address within the holding register block is written to.

order 21 bits allow the device to address up to 2 Mbytes                The MSBs of the Table Pointer have no effect during

of program memory space. The 22nd bit allows access                     TBLWT operations.

to the device ID, the user ID and the Configuration bits.               When a program memory write is executed the entire

The Table Pointer register, TBLPTR, is used by the                      holding register block is written to the Flash memory at

TBLRD and TBLWT instructions. These instructions can                    the address determined by the MSbs of the TBLPTR.

update the TBLPTR in one of four ways based on the                      The 3, 4, or 5 LSBs are ignored during Flash memory

table  operation.   These      operations      are  shown  in           writes. For more detail, see Section 4.5 “Writing to

Table 4-2. These operations on the TBLPTR affect only                   Flash Program Memory”.

the low-order 21 bits.                                                  When an erase of program memory is executed, the

                                                                        16 MSbs of the Table Pointer register (TBLPTR<21:6>)

                                                                        point to the 64-byte block that will be erased. The Least

                                                                        Significant bits (TBLPTR<5:0>) are ignored.

                                                                        Figure 4-3    describes     the  relevant  boundaries       of

                                                                        TBLPTR based on Flash program memory operations.

TABLE 4-2:          TABLE      POINTER         OPERATIONS WITH TBLRD AND TBLWT INSTRUCTIONS

Example                                                    Operation on Table Pointer

TBLRD*                                                          TBLPTR is not modified

TBLWT*

TBLRD*+                                               TBLPTR is incremented after the read/write

TBLWT*+

TBLRD*-                                               TBLPTR is decremented after the read/write

TBLWT*-

TBLRD+*                                             TBLPTR is incremented before the read/write

TBLWT+*

FIGURE 4-3:             TABLE POINTER BOUNDARIES BASED ON OPERATION

         21         TBLPTRU           16   15              TBLPTRH             8      7             TBLPTRL          0

                                           TABLE ERASE/WRITE                                        TABLE WRITE
                                           TBLPTR<21:n+1>(1)                                        TBLPTR(1)

                                                      TABLE READ –      TBLPTR<21:0>

       Note 1:  n=  3, 4,  5,  or  6  for  block sizes of 8, 16, 32 or  64 bytes, respectively.

DS40001365F-page    48                                                                             2009-2016 Microchip Technology  Inc.
                                                                                         PIC18(L)F1XK22

4.3      Reading the Flash Program                                        The internal program memory is typically organized by

         Memory                                                           words. The Least Significant bit of the address selects

                                                                          between the high and low bytes of the word. Figure 4-4

The  TBLRD     instruction  retrieves  data    from    program            shows     the  interface  between  the      internal  program

memory and places it into data RAM. Table reads from                      memory and the TABLAT.

program memory are performed one byte at a time.

TBLPTR points to a byte address in program space.

Executing  TBLRD     places      the  byte    pointed  to  into

TABLAT.    In  addition,    TBLPTR        can    be    modified

automatically for the next table read operation.

FIGURE 4-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        4-1:       READING A FLASH              PROGRAM MEMORY WORD

               MOVLW             CODE_ADDR_UPPER                 ;  Load  TBLPTR    with    the  base

               MOVWF             TBLPTRU                         ;  address     of  the  word

               MOVLW             CODE_ADDR_HIGH

               MOVWF             TBLPTRH

               MOVLW             CODE_ADDR_LOW

               MOVWF             TBLPTRL

READ_WORD

               TBLRD*+                                           ;  read  into      TABLAT  and  increment

               MOVF              TABLAT,   W                     ;  get   data

               MOVWF             WORD_EVEN

               TBLRD*+                                           ;  read  into      TABLAT  and  increment

               MOVFW             TABLAT,   W                     ;  get   data

               MOVF              WORD_ODD

 2009-2016 Microchip Technology Inc.                                                                        DS40001365F-page 49
PIC18(L)F1XK22

4.4      Erasing Flash Program Memory                               4.4.1        FLASH PROGRAM MEMORY

The minimum erase block is 32 words or 64 bytes. Only                            ERASE SEQUENCE

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

bulk  erased.   Word  erase     in   the   Flash  array    is  not  1.  Load    Table   Pointer      register   with     address  of

supported.                                                              block being erased.

When     initiating  an    erase       sequence       from     the  2.  Set the EECON1 register for the erase operation:

Microcontroller itself, a block of 64 bytes of program                  •  set EEPGD bit to point to program memory;

memory is erased. The Most Significant 16 bits of the                   •  clear the CFGS bit to access program memory;

TBLPTR<21:6> point to the block being erased. The                       •  set WREN bit to enable writes;

TBLPTR<5:0> bits are ignored.                                           •  set FREE bit to enable the erase.

The EECON1 register commands the erase operation.                   3.  Disable interrupts.

The   EEPGD     bit  must  be   set    to  point  to  the   Flash   4.  Write 55h to EECON2.

program memory. The WREN bit must be set to enable

write operations. The FREE bit is set to select an erase            5.  Write 0AAh to EECON2.

operation.                                                          6.  Set the WR bit. This will begin the block erase

The write initiate sequence for EECON2, shown as                        cycle.

steps 4 through 6 in Section 4.4.1 “Flash Program                   7.  The    CPU      will  stall  for  duration   of  the  erase

Memory Erase Sequence”, is used to guard against                        (about 2 ms using internal timer).

accidental writes. This is sometimes referred to as a               8.  Re-enable interrupts.

long write.

A  long  write  is   necessary    for  erasing    the  internal

Flash. Instruction execution is halted during the long

write cycle. The long write is terminated by the internal

programming timer.

EXAMPLE 4-2:               ERASING A FLASH PROGRAM                  MEMORY BLOCK

                           MOVLW       CODE_ADDR_UPPER              ;   load   TBLPTR   with         the  base

                           MOVWF       TBLPTRU                      ;   address     of  the       memory   block

                           MOVLW       CODE_ADDR_HIGH

                           MOVWF       TBLPTRH

                           MOVLW       CODE_ADDR_LOW

                           MOVWF       TBLPTRL

             ERASE_BLOCK

                           BSF         EECON1,    EEPGD             ;   point   to   Flash        program    memory

                           BCF         EECON1,    CFGS              ;   access   Flash        program     memory

                           BSF         EECON1,    WREN              ;   enable   write        to  memory

                           BSF         EECON1,    FREE              ;   enable   block        Erase  operation

                           BCF         INTCON,    GIE               ;   disable     interrupts

      Required             MOVLW       55h

      Sequence             MOVWF       EECON2                       ;   write   55h

                           MOVLW       0AAh

                           MOVWF       EECON2                       ;   write   0AAh

                           BSF         EECON1,    WR                ;   start   erase   (CPU         stall)

                           BSF         INTCON,    GIE               ;   re-enable       interrupts

DS40001365F-page 50                                                                      2009-2016 Microchip Technology Inc.
                                                                                          PIC18(L)F1XK22

4.5     Writing to Flash Program Memory                                        The  long  write      is  necessary     for  programming       the

The     programming     block     size   is    8  or   16  bytes,              internal Flash. Instruction execution is halted during a

depending on the device (See Table 4-1). Word or byte                          long write cycle. The long write will be terminated by

programming is not supported.                                                  the internal programming timer.

Table   writes  are  used    internally  to    load   the  holding             The EEPROM on-chip timer controls the write time.

registers needed to program the Flash memory. There                            The write/erase voltages are generated by an on-chip

are only as many holding registers as there are bytes                          charge pump, rated to operate over the voltage range

in a write block (See Table 4-1).                                              of the device.

Since the Table Latch (TABLAT) is only a single byte,                              Note:  The default value of the holding registers on

the TBLWT instruction may need to be executed 8, or 16                                    device Resets and after write operations is

times, depending on the device, for each programming                                      FFh. A write of FFh to a holding register

operation.    All   of  the  table      write     operations     will                     does not modify that byte. This means that

essentially be short writes because only the holding                                      individual bytes of program memory may

registers are written. After all the holding registers have                               be modified, provided that the change does

been written, the programming operation of that block                                     not attempt to change any bit from a ‘0’ to a

of  memory      is  started  by   configuring     the  EECON1                             ‘1’. When modifying individual bytes, it is

register for a program memory write and performing the                                    not necessary to load all holding registers

long write sequence.                                                                      before executing a long write operation.

FIGURE 4-5:                  TABLE WRITES TO FLASH PROGRAM MEMORY

                                                                       TABLAT

                                                                 Write Register

                          8                                   8                           8                                       8

TBLPTR = xxxx00                   TBLPTR = xxxx01                TBLPTR = xxxx02                         TBLPTR = xxxxYY(1)

                Holding Register                  Holding Register                 Holding Register                         Holding Register

                                                                 Program       Memory

        Note 1:     YY = x7 or xF for 8 or 16 byte write blocks, respectively.

4.5.1         FLASH PROGRAM MEMORY WRITE                                       8.   Disable interrupts.

              SEQUENCE                                                         9.   Write 55h to EECON2.

The sequence of events for programming an internal                             10.  Write 0AAh to EECON2.

program memory location should be:                                             11.  Set the WR bit. This will begin the write cycle.

1.   Read 64 bytes into RAM.                                                   12.  The CPU will stall for duration of the write (about

2.   Update data values in RAM as necessary.                                        2 ms using internal timer).

3.   Load Table Pointer register with address being                            13.  Re-enable interrupts.

     erased.                                                                   14.  Repeat steps 6 to 13 for each block until all 64

4.   Execute the block erase procedure.                                             bytes are written.

5.   Load Table Pointer register with address of first                         15.  Verify the memory (table read).

     byte being written.                                                       This procedure will require about 6 ms to update each

6.   Write the 8 or 16 byte block into the holding                             write block of memory. An example of the required code

     registers with auto-increment.                                            is given in Example 4-3.

7.   Set the EECON1 register for the write operation:                              Note:  Before         setting  the  WR   bit,  the  Table

     •  set EEPGD bit to point to program memory;                                         Pointer address needs to be within the

     •  clear the CFGS bit to access program memory;                                      intended address range of the bytes in the

     •  set WREN to enable byte writes.                                                   holding registers.

 2009-2016 Microchip Technology Inc.                                                                                  DS40001365F-page 51
PIC18(L)F1XK22

EXAMPLE 4-3:         WRITING TO FLASH PROGRAM   MEMORY

                     MOVLW    D'64’             ;       number     of   bytes   in  erase      block

                     MOVWF    COUNTER

                     MOVLW    BUFFER_ADDR_HIGH  ;       point   to     buffer

                     MOVWF    FSR0H

                     MOVLW    BUFFER_ADDR_LOW

                     MOVWF    FSR0L

                     MOVLW    CODE_ADDR_UPPER   ;       Load   TBLPTR     with   the     base

                     MOVWF    TBLPTRU           ;       address     of  the    memory    block

                     MOVLW    CODE_ADDR_HIGH

                     MOVWF    TBLPTRH

                     MOVLW    CODE_ADDR_LOW

                     MOVWF    TBLPTRL

READ_BLOCK

                     TBLRD*+                    ;       read   into     TABLAT,     and  inc

                     MOVF     TABLAT,   W       ;       get   data

                     MOVWF    POSTINC0          ;       store   data

                     DECFSZ   COUNTER           ;       done?

                     BRA      READ_BLOCK        ;       repeat

MODIFY_WORD

                     MOVLW    BUFFER_ADDR_HIGH  ;       point   to     buffer

                     MOVWF    FSR0H

                     MOVLW    BUFFER_ADDR_LOW

                     MOVWF    FSR0L

                     MOVLW    NEW_DATA_LOW      ;       update     buffer     word

                     MOVWF    POSTINC0

                     MOVLW    NEW_DATA_HIGH

                     MOVWF    INDF0

ERASE_BLOCK

                     MOVLW    CODE_ADDR_UPPER   ;       load   TBLPTR     with   the     base

                     MOVWF    TBLPTRU           ;       address     of  the    memory    block

                     MOVLW    CODE_ADDR_HIGH

                     MOVWF    TBLPTRH

                     MOVLW    CODE_ADDR_LOW

                     MOVWF    TBLPTRL

                     BSF      EECON1,   EEPGD   ;       point   to     Flash   program   memory

                     BCF      EECON1,   CFGS    ;       access     Flash   program       memory

                     BSF      EECON1,   WREN    ;       enable     write   to   memory

                     BSF      EECON1,   FREE    ;       enable     Erase   operation

                     BCF      INTCON,   GIE     ;       disable     interrupts

                     MOVLW    55h

Required             MOVWF    EECON2            ;       write   55h

Sequence             MOVLW    0AAh

                     MOVWF    EECON2            ;       write   0AAh

                     BSF      EECON1,   WR      ;       start   erase     (CPU   stall)

                     BSF      INTCON,   GIE     ;       re-enable       interrupts

                     TBLRD*-                    ;       dummy   read    decrement

                     MOVLW    BUFFER_ADDR_HIGH  ;       point   to     buffer

                     MOVWF    FSR0H

                     MOVLW    BUFFER_ADDR_LOW

                     MOVWF    FSR0L

WRITE_BUFFER_BACK

                     MOVLW    BlockSize         ;       number     of   bytes   in  holding      register

                     MOVWF    COUNTER

                     MOVLW    D’64’/BlockSize   ;       number     of   write   blocks   in    64  bytes

                     MOVWF    COUNTER2

WRITE_BYTE_TO_HREGS

                     MOVF     POSTINC0,     W   ;       get   low   byte   of   buffer   data

                     MOVWF    TABLAT            ;       present     data   to   table    latch

                     TBLWT+*                    ;       write   data,     perform     a  short     write

                                                ;       to   internal     TBLWT     holding    register.

DS40001365F-page 52                                                  2009-2016 Microchip Technology Inc.
                                                                                      PIC18(L)F1XK22

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

                          DECFSZ     COUNTER                       ;  loop   until  holding      registers      are  full

                          BRA        WRITE_WORD_TO_HREGS

PROGRAM_MEMORY

                          BSF        EECON1,      EEPGD            ;  point   to   Flash     program    memory

                          BCF        EECON1,      CFGS             ;  access   Flash     program  memory

                          BSF        EECON1,      WREN             ;  enable   write     to    memory

                          BCF        INTCON,      GIE              ;  disable     interrupts

                          MOVLW      55h

       Required           MOVWF      EECON2                        ;  write   55h

       Sequence           MOVLW      0AAh

                          MOVWF      EECON2                        ;  write   0AAh

                          BSF        EECON1,      WR               ;  start   program     (CPU   stall)

                          DCFSZ      COUNTER2                      ;  repeat   for  remaining     write     blocks

                          BRA        WRITE_BYTE_TO_HREGS           ;

                          BSF        INTCON,      GIE              ;  re-enable     interrupts

                          BCF        EECON1,      WREN             ;  disable     write   to   memory

4.5.2      WRITE VERIFY                                               4.5.4           PROTECTION AGAINST

Depending  on    the      application,    good    programming                         SPURIOUS WRITES

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 23.0 “Special Features of the

writes can stress bits near the specification limit.                  CPU” for more detail.

4.5.3      UNEXPECTED TERMINATION OF                                  4.6           Flash Program Operation During

           WRITE OPERATION                                                          Code Protection

If a write is terminated by an unplanned event, such as               See Section 23.3 “Program Verification and Code

loss of power or an unexpected Reset, the memory                                          for  details  on  code  protection   of  Flash

location  just  programmed        should   be     verified   and      Protection”

reprogrammed     if  needed.     If  the   write  operation  is       program memory.

interrupted by a MCLR Reset or a WDT Time-out Reset

during normal operation, the WRERR bit will be set

which the user can check to decide whether a rewrite

of the location(s) is needed.

TABLE 4-3:           REGISTERS ASSOCIATED WITH PROGRAM FLASH MEMORY

                                                                                                                               Reset

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

                                                                                                                               page

EECON1          EEPGD           CFGS            —           FREE      WRERR         WREN          WR              RD           247

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

INTCON          GIE/GIEH  PEIE/GIEL TMR0IE               INT0IE       RABIE        TMR0IF         INT0IF          RABIF        245

IPR2            OSCFIP           C1IP          C2IP         EEIP      BCLIP           —           TMR3IP             —         248

PIE2            OSCFIE           C1IE          C2IE         EEIE      BCLIE           —           TMR3IE             —         248

PIR2            OSCFIF           C1IF          C2IF         EEIF      BCLIF           —           TMR3IF             —         248

TABLAT     Program Memory Table Latch                                                                                          245

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

TBLPTRU          —                —            bit 21    Program Memory Table Pointer Upper Byte (TBLPTR<20:16>)               245

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

Legend:    — = unimplemented, read as ‘0’. Shaded cells are not used during Flash/EEPROM access.

 2009-2016 Microchip Technology Inc.                                                                             DS40001365F-page 53
PIC18(L)F1XK22

5.0      DATA EEPROM MEMORY                                                  5.2          EECON1 and EECON2 Registers

The    data   EEPROM         is  a       nonvolatile     memory    array,    Access       to  the  data      EEPROM          is  controlled      by  two

separate from the data RAM and program memory,                               registers: EECON1 and EECON2. These are the same

which is used for long-term storage of program data. It                      registers which control access to the program memory

is  not  directly  mapped            in  either     the  register  file  or  and     are  used       in  a     similar    manner       for  the      data

program      memory    space         but    is   indirectly  addressed       EEPROM.

through the Special Function Registers (SFRs). The                           The     EECON1        register    (Register 5-1)          is   the  control

EEPROM        is   readable      and      writable       during    normal    register for data and program memory access. Control

operation over the entire VDD range.                                         bit EEPGD determines if the access will be to program

Four SFRs are used to read and write to the data                             or data EEPROM memory. When the EEPGD bit is

EEPROM as well as the program memory. They are:                              clear,  operations          will  access        the  data      EEPROM

•   EECON1                                                                   memory. When the EEPGD bit is set, program memory

•   EECON2                                                                   is accessed.

•   EEDATA                                                                   Control bit, CFGS, determines if the access will be to

•   EEADR                                                                    the Configuration registers or to program memory/data

                                                                             EEPROM           memory.        When       the      CFGS      bit   is  set,

The data EEPROM allows byte read and write. When                             subsequent operations access Configuration registers.

interfacing to the data memory block, EEDATA holds                           When the CFGS bit is clear, the EEPGD bit selects

the 8-bit data for read/write and the EEADR register                         either program Flash or data EEPROM memory.

holds    the  address    of      the     EEPROM          location  being     The WREN bit, when set, will allow a write operation.

accessed.                                                                    On power-up, the WREN bit is clear.

The EEPROM data memory is rated for high erase/write                         The WRERR bit is set by hardware when the WR bit is

cycle endurance. A byte write automatically erases the                       set and cleared when the internal programming timer

location and writes the new data (erase-before-write).                       expires and the write operation is complete.

The write time is controlled by an on-chip timer; it will

vary with voltage and temperature as well as from chip-                      Note:            During     normal    operation,          the  WRERR

to-chip. Please refer to parameter US122 (Table 26-24)                                        may read as ‘1’. This can indicate that a

for exact limits.                                                                             write      operation           was       prematurely

                                                                                              terminated       by  a      Reset,       or   a    write

5.1           EEADR Register                                                                  operation was attempted improperly.

The    EEADR       register      is  used       to  address  the   data      The WR control bit initiates write operations. The bit

EEPROM        for  read  and         write  operations.      The   8-bit     can be set but not cleared by software. It is cleared only

range of the register can address a memory range of                          by hardware at the completion of the write operation.

256 bytes (00h to FFh).                                                      Note:            The    EEIF      interrupt  flag    bit  of   the  PIR2

                                                                                              register is set when the write is complete.

                                                                                              It must be cleared by software.

                                                                             Control bits, RD and WR, start read and erase/write

                                                                             operations, respectively. These bits are set by firmware

                                                                             and   cleared    by     hardware      at     the    completion      of  the

                                                                             operation.

                                                                             The RD bit cannot be set when accessing program

                                                                             memory (EEPGD = 1). Program memory is read using

                                                                             table read instructions. See Section 4.1 “Table Reads

                                                                             and Table Writes” regarding table reads.

                                                                             The EECON2 register is not a physical register. It is

                                                                             used    exclusively         in  the   memory         write     and  erase

                                                                             sequences. Reading EECON2 will read all ‘0’s.

DS40001365F-page 54                                                                                       2009-2016 Microchip Technology Inc.
                                                                           PIC18(L)F1XK22

REGISTER 5-1:      EECON1: DATA EEPROM CONTROL 1 REGISTER

     R/W-x         R/W-x               U-0       R/W-0         R/W-x               R/W-0  R/S-0               R/S-0

     EEPGD         CFGS                —         FREE          WRERR               WREN          WR           RD

bit 7                                                                                                              bit 0

Legend:

R = Readable bit              W = Writable bit

S = Bit can be set by software, but not cleared              U = Unimplemented bit, read as ‘0’

-n = Value at POR             ‘1’ = Bit is set               ‘0’ = Bit is cleared         x = Bit is unknown

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

            1=     Access Flash program memory

            0=     Access data EEPROM memory

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

            1=     Access Configuration registers

            0=     Access Flash program or data EEPROM memory

bit  5      Unimplemented: Read as ‘0’

bit  4      FREE: Flash Row (Block) Erase Enable bit

            1=     Erase the program memory block addressed by TBLPTR on the next WR command

                   (cleared by completion of erase operation)

            0=     Perform write-only

bit  3      WRERR: Flash Program/Data EEPROM Error Flag bit(1)

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

                   operation, or an improper write attempt)

            0=     The write operation completed

bit  2      WREN: Flash Program/Data EEPROM Write Enable bit

            1=     Allows write cycles to Flash program/data EEPROM

            0=     Inhibits write cycles to Flash program/data EEPROM

bit  1      WR: Write Control bit

            1=     Initiates a data EEPROM erase/write cycle or a program memory erase cycle or write cycle.

                   (The operation is self-timed and the bit is cleared by hardware once write is complete.

                   The WR bit can only be set (not cleared) by software.)

            0=     Write cycle to the EEPROM is complete

bit 0       RD: Read Control bit

            1=     Initiates an EEPROM read (Read takes one cycle. RD is cleared by hardware. The RD bit can only

                   be set (not cleared) by software. RD bit cannot be set when EEPGD = 1 or CFGS = 1.)

            0=     Does not initiate an EEPROM read

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

            error condition.

 2009-2016 Microchip Technology Inc.                                                            DS40001365F-page 55
PIC18(L)F1XK22

5.3        Reading the Data EEPROM                                            Additionally, the WREN bit in EECON1 must be set to

           Memory                                                             enable     writes.     This     mechanism      prevents      accidental

                                                                              writes     to  data      EEPROM         due    to  unexpected        code

To read a data memory location, the user must write the                       execution      (i.e.,    runaway        programs).     The   WREN         bit

address    to  the    EEADR     register,  clear  the  EEPGD                  should be kept clear at all times, except when updating

control bit of the EECON1 register and then set control                       the   EEPROM.            The      WREN  bit        is  not   cleared      by

bit,  RD.     The     data  is  available  on  the    very  next              hardware.

instruction cycle; therefore, the EEDATA register can                         After a write sequence has been initiated, EECON1,

be read by the next instruction. EEDATA will hold this                        EEADR and EEDATA cannot be modified. The WR bit

value until another read operation, or until it is written to                 will be inhibited from being set unless the WREN bit is

by the user (during a write operation).                                       set. Both WR and WREN cannot be set with the same

The basic process is shown in Example 5-1.                                    instruction.

5.4        Writing to the Data EEPROM                                         At    the  completion         of  the   write  cycle,  the   WR      bit  is

                                                                              cleared by hardware and the EEPROM Interrupt Flag

           Memory                                                             bit,  EEIF,    is   set.  The     user  may        either    enable   this

To write an EEPROM data location, the address must                            interrupt      or  poll   this    bit.  EEIF   must    be    cleared      by

first be written to the EEADR register and the data                           software.

written   to   the    EEDATA    register.  The    sequence      in            5.5         Write Verify

Example 5-2 must be followed to initiate the write cycle.

The write will not begin if this sequence is not exactly                      Depending          on    the    application,   good    programming

followed      (write  55h   to  EECON2,        write   0AAh     to            practice       may     dictate    that  the    value   written   to   the

EECON2, then set WR bit) for each byte. It is strongly                        memory should be verified against the original value.

recommended that interrupts be disabled during this                           This should be used in applications where excessive

code segment.                                                                 writes can stress bits near the specification limit.

EXAMPLE 5-1:                DATA EEPROM READ

           MOVLW      DATA_EE_ADDR         ;

           MOVWF      EEADR                ;   Data    Memory   Address       to    read

           BCF        EECON1,   EEPGD      ;   Point   to   DATA    memory

           BCF        EECON1,   CFGS       ;   Access  EEPROM

           BSF        EECON1,   RD         ;   EEPROM  Read

           MOVF       EEDATA,   W          ;   W  =   EEDATA

EXAMPLE 5-2:                DATA EEPROM WRITE

                      MOVLW     DATA_EE_ADDR_LOW             ;

                      MOVWF     EEADR                        ;  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

                      BCF       INTCON,    GIE               ;  Disable       Interrupts

                      MOVLW     55h                          ;

      Required        MOVWF     EECON2                       ;  Write     55h

      Sequence        MOVLW     0AAh                         ;

                      MOVWF     EECON2                       ;  Write     0AAh

                      BSF       EECON1,    WR                ;  Set   WR  bit       to   begin    write

                      BSF       INTCON,    GIE               ;  Enable    Interrupts

                                                             ;  User   code     execution

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

DS40001365F-page 56                                                                                      2009-2016 Microchip Technology Inc.
                                                                                                       PIC18(L)F1XK22

5.6       Operation During Code-Protect                                             5.8            Using the Data EEPROM

Data EEPROM memory has its own code-protect bits in                                 The     data       EEPROM           is  a  high-endurance,             byte

Configuration    Words.        External      read      and       write              addressable            array  that  has    been    optimized      for  the

operations are disabled if code protection is enabled.                              storage        of      frequently   changing       information     (e.g.,

The microcontroller itself can both read and write to the                           program variables or other data that are updated often).

internal data EEPROM, regardless of the state of the                                When variables in one section change frequently, while

code-protect Configuration bit. Refer to Section 23.0                               variables in another section do not change, it is possible

“Special  Features         of  the     CPU”       for  additional                   to    exceed       the    total  number    of  write      cycles  to   the

information.                                                                        EEPROM without exceeding the total number of write

                                                                                    cycles to a single byte. If this is the case, then an array

5.7       Protection Against Spurious Write                                         refresh must be performed. For this reason, variables

There are conditions when the user may not want to                                  that    change         infrequently     (such  as      constants,      IDs,

write to the data EEPROM memory. To protect against                                 calibration,       etc.)  should    be     stored  in  Flash  program

spurious EEPROM writes, various mechanisms have                                     memory.

been    implemented.  On       power-up,     the   WREN          bit  is            A simple data EEPROM refresh routine is shown in

cleared. In addition, writes to the EEPROM are blocked                              Example 5-3.

during    the   Power-up        Timer         period   (TPWRT,                          Note:          If  data   EEPROM       is  only    used   to   store

parameter 33).                                                                                         constants and/or data that changes rarely,

The write initiate sequence and the WREN bit together                                                  an array refresh is likely not required. See

help  prevent   an  accidental      write    during    brown-out,                                      specification.

power glitch or software malfunction.

EXAMPLE 5-3:               DATA EEPROM             REFRESH ROUTINE

          CLRF        EEADR                                   ;  Start        at   address      0

          BCF         EECON1,          CFGS                   ;  Set      for     memory

          BCF         EECON1,          EEPGD                  ;  Set      for     Data  EEPROM

          BCF         INTCON,          GIE                    ;  Disable          interrupts

          BSF         EECON1,          WREN                   ;  Enable        writes

Loop                                                          ;  Loop     to      refresh   array

          BSF         EECON1,          RD                     ;  Read     current       address

          MOVLW       55h                                     ;

          MOVWF       EECON2                                  ;  Write        55h

          MOVLW       0AAh                                    ;

          MOVWF       EECON2                                  ;  Write        0AAh

          BSF         EECON1,          WR                     ;  Set      WR   bit  to    begin    write

          BTFSC       EECON1,          WR                     ;  Wait     for      write    to     complete

          BRA         $-2

          INCFSZ      EEADR,        F                         ;  Increment          address

          BRA         LOOP                                    ;  Not      zero,     do  it  again

          BCF         EECON1,          WREN                   ;  Disable          writes

          BSF         INTCON,          GIE                    ;  Enable        interrupts

TABLE 5-1:          REGISTERS ASSOCIATED WITH DATA EEPROM MEMORY

                                                                                                                                                  Reset

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

                                                                                                                                                  on page

EEADR           EEADR7          EEADR6             EEADR5             EEADR4        EEADR3         EEADR2            EEADR1        EEADR0             247

EECON1           EEPGD              CFGS               —              FREE          WRERR              WREN             WR             RD             247

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

EEDATA         EEPROM Data Register                                                                                                                   247

INTCON          GIE/GIEH       PEIE/GIEL           TMR0IE             INT0IE        RABIE              TMR0IF          INT0IF      RABIF              245

IPR2            OSCFIP              C1IP               C2IP           EEIP              BCLIP              —         TMR3IP            —              248

PIE2            OSCFIE              C1IE               C2IE           EEIE              BCLIE              —         TMR3IE            —              248

PIR2            OSCFIF              C1IF               C2IF           EEIF              BCLIF              —         TMR3IF            —              248

Legend:       — = unimplemented, read as ‘0’. Shaded cells are not used during Flash/EEPROM access.

 2009-2016 Microchip Technology Inc.                                                                                              DS40001365F-page 57
PIC18(L)F1XK22

6.0        8 x 8 HARDWARE MULTIPLIER                                              EXAMPLE 6-1:             8 x 8 UNSIGNED

                                                                                                           MULTIPLY ROUTINE

6.1        Introduction                                                           MOVF       ARG1,   W     ;

All PIC18 devices include an 8 x 8 hardware multiplier                            MULWF      ARG2          ;    ARG1   *  ARG2     ->

as part of the ALU. The multiplier performs an unsigned                                                    ;    PRODH:PRODL

operation and yields a 16-bit result that is stored in the

product register pair, PRODH:PRODL. The multiplier’s                              EXAMPLE 6-2:             8 x 8 SIGNED MULTIPLY

operation  does     not   affect  any      flags  in    the  STATUS                                        ROUTINE

register.                                                                         MOVF       ARG1,   W

Making multiplication a hardware operation allows it to                           MULWF      ARG2          ;    ARG1   *     ARG2  ->

be completed in a single instruction cycle. This has the                                                   ;    PRODH:PRODL

advantages      of  higher     computational      throughput         and          BTFSC      ARG2,   SB    ;    Test   Sign     Bit

reduced    code     size  for  multiplication        algorithms      and          SUBWF      PRODH,     F  ;    PRODH     =  PRODH

allows     the   PIC18    devices      to  be     used       in  many                                      ;                 -  ARG1

applications     previously    reserved         for   digital    signal           MOVF       ARG2,   W

processors.     A   comparison     of   various      hardware        and          BTFSC      ARG1,   SB    ;    Test   Sign     Bit

software multiply operations, along with the savings in                           SUBWF      PRODH,     F  ;    PRODH     =  PRODH

memory and execution time, is shown in Table 6-1.                                                          ;                 -  ARG2

6.2        Operation

Example 6-1 shows the instruction sequence for an 8 x 8

unsigned multiplication. Only one instruction is required

when one of the arguments is already loaded in the

WREG register.

Example 6-2 shows the sequence to do an 8 x 8 signed

multiplication.     To  account    for     the    sign  bits     of  the

arguments, each argument’s Most Significant bit (MSb)

is tested and the appropriate subtractions are done.

TABLE 6-1:              PERFORMANCE COMPARISON FOR VARIOUS MULTIPLY OPERATIONS

                                                                     Program      Cycles                               Time

        Routine                   Multiply Method                    Memory       (Max)

                                                                         (Words)                    @ 40 MHz    @ 10 MHz               @ 4 MHz

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

                          Hardware multiply                               1              1           100 ns            400 ns          1 s

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

                          Hardware multiply                               6              6           600 ns            2.4 s          6 s

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

                          Hardware multiply                               28             28             2.8 s        11.2 s          28 s

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

                          Hardware multiply                               35             40             4.0 s        16.0 s          40 s

DS40001365F-page 58                                                                                      2009-2016 Microchip Technology Inc.
                                                                                PIC18(L)F1XK22

Example 6-3    shows   the     sequence    to  do   a  16    x  16   EQUATION 6-2:         16 x 16 SIGNED

unsigned      multiplication.  Equation 6-1        shows        the                        MULTIPLICATION

algorithm that is used. The 32-bit result is stored in four                                ALGORITHM

registers (RES<3:0>).                                                RES3:RES0  =  ARG1H:ARG1L  ARG2H:ARG2L

                                                                                =  (ARG1H  ARG2H  216) +

EQUATION       6-1:    16 x 16 UNSIGNED                                            (ARG1H  ARG2L  28) +

                       MULTIPLICATION                                              (ARG1L  ARG2H  28) +

                       ALGORITHM                                                   (ARG1L  ARG2L) +

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

               =      (ARG1H  ARG2H  216) +                                      (-1  ARG1H<7>  ARG2H:ARG2L  216)

                      (ARG1H  ARG2L  28) +

                      (ARG1L  ARG2H  28) +                         EXAMPLE 6-4:          16 x 16 SIGNED

                      (ARG1L  ARG2L)                                                      MULTIPLY ROUTINE

                                                                        MOVF       ARG1L,     W

EXAMPLE 6-3:           16 x 16 UNSIGNED                                 MULWF      ARG2L            ;  ARG1L  *  ARG2L    ->

                       MULTIPLY ROUTINE                                                             ;  PRODH:PRODL

       MOVF    ARG1L,     W                                             MOVFF      PRODH,     RES1  ;

       MULWF   ARG2L                 ;  ARG1L * ARG2L->                 MOVFF      PRODL,     RES0  ;

                                     ;    PRODH:PRODL                ;

       MOVFF   PRODH,     RES1       ;                                  MOVF       ARG1H,     W

       MOVFF   PRODL,     RES0       ;                                  MULWF      ARG2H            ;  ARG1H  *  ARG2H    ->

;                                                                                                   ;  PRODH:PRODL

       MOVF    ARG1H,     W                                             MOVFF      PRODH,     RES3  ;

       MULWF   ARG2H                 ;  ARG1H * ARG2H->                 MOVFF      PRODL,     RES2  ;

                                     ;    PRODH:PRODL                ;

       MOVFF   PRODH,     RES3       ;                                  MOVF       ARG1L,     W

       MOVFF   PRODL,     RES2       ;                                  MULWF      ARG2H            ;  ARG1L  *  ARG2H    ->

;                                                                                                   ;  PRODH:PRODL

       MOVF    ARG1L,     W                                             MOVF       PRODL,     W     ;

       MULWF   ARG2H                 ;  ARG1L * ARG2H->                 ADDWF      RES1,   F        ;  Add  cross

                                     ;    PRODH:PRODL                   MOVF       PRODH,     W     ;  products

       MOVF    PRODL,     W          ;                                  ADDWFC     RES2,   F        ;

       ADDWF   RES1,   F             ;    Add  cross                    CLRF       WREG             ;

       MOVF    PRODH,     W          ;    products                      ADDWFC     RES3,   F        ;

       ADDWFC  RES2,   F             ;                               ;

       CLRF    WREG                  ;                                  MOVF       ARG1H,     W     ;

       ADDWFC  RES3,   F             ;                                  MULWF      ARG2L            ;  ARG1H  *  ARG2L    ->

;                                                                                                   ;  PRODH:PRODL

       MOVF    ARG1H,     W          ;                                  MOVF       PRODL,     W     ;

       MULWF   ARG2L                 ;  ARG1H * ARG2L->                 ADDWF      RES1,   F        ;  Add  cross

                                     ;    PRODH:PRODL                   MOVF       PRODH,     W     ;  products

       MOVF    PRODL,     W          ;                                  ADDWFC     RES2,   F        ;

       ADDWF   RES1,   F             ;    Add  cross                    CLRF       WREG             ;

       MOVF    PRODH,     W          ;    products                      ADDWFC     RES3,   F        ;

       ADDWFC  RES2,   F             ;                               ;

       CLRF    WREG                  ;                                  BTFSS      ARG2H,     7     ;  ARG2H:ARG2L  neg?

       ADDWFC  RES3,   F             ;                                  BRA        SIGN_ARG1        ;  no,  check  ARG1

                                                                        MOVF       ARG1L,     W     ;

                                                                        SUBWF      RES2             ;

Example 6-4    shows   the     sequence    to  do   a  16    x  16      MOVF       ARG1H,     W     ;

signed  multiply.     Equation 6-2   shows     the     algorithm        SUBWFB     RES3

used.   The   32-bit  result   is  stored  in  four    registers     ;

(RES<3:0>).    To     account   for  the   sign    bits  of     the  SIGN_ARG1

arguments, the MSb for each argument pair is tested                     BTFSS      ARG1H,     7     ;  ARG1H:ARG1L  neg?

and the appropriate subtractions are done.                              BRA        CONT_CODE        ;  no,  done

                                                                        MOVF       ARG2L,     W     ;

                                                                        SUBWF      RES2             ;

                                                                        MOVF       ARG2H,     W     ;

                                                                        SUBWFB     RES3

                                                                     ;

                                                                     CONT_CODE

                                                                        :

 2009-2016 Microchip Technology Inc.                                                                  DS40001365F-page 59
PIC18(L)F1XK22

7.0       INTERRUPTS                                               7.2         Interrupt Priority

The PIC18(L)F1XK22 devices have multiple interrupt                 The interrupt priority feature is enabled by setting the

sources and an interrupt priority feature that allows              IPEN bit of the RCON register. When interrupt priority

most interrupt sources to be assigned a high priority              is enabled the GIE and PEIE global interrupt enable

level or a low priority level. The high priority interrupt         bits of Compatibility mode are replaced by the GIEH

vector is at 0008h and the low priority interrupt vector is        high  priority,   and      GIEL       low  priority,   global   interrupt

at 0018h. A high priority interrupt event will interrupt a         enables.    When         set,  the    GIEH       bit  of  the   INTCON

low priority interrupt that may be in progress.                    register enables all interrupts that have their associated

There are twelve registers which are used to control               IPRx register or INTCONx register priority bit set (high

interrupt operation. These registers are:                          priority). When clear, the GIEL bit disables all interrupt

•   RCON                                                           sources including those selected as low priority. When

                                                                   clear, the GIEL bit of the INTCON register disables only

•   INTCON                                                         the   interrupts     that  have       their  associated         priority  bit

•   INTCON2                                                        cleared (low priority). When set, the GIEL bit enables

•   INTCON3                                                        the low priority sources when the GIEH bit is also set.

•   PIR1, PIR2                                                     When      the   interrupt      flag,  enable     bit  and    appropriate

•   PIE1, PIE2                                                     global interrupt enable bit are all set, the interrupt will

•   IPR1, IPR2                                                     vector immediately to address 0008h for high priority,

                                                                   or 0018h for low priority, depending on level of the

It  is  recommended  that       the   Microchip   header    files  interrupting     source’s      priority    bit.  Individual     interrupts

supplied with MPLAB® IDE be used for the symbolic bit              can be disabled through their corresponding interrupt

names in these registers. This allows the assembler/               enable bits.

compiler to automatically take care of the placement of

these bits within the specified register.                          7.3         Interrupt Response

In general, interrupt sources have three bits to control           When an interrupt is responded to, the global interrupt

their operation. They are:                                         enable bit is cleared to disable further interrupts. The

•   Flag bit to indicate that an interrupt event                   GIE bit is the global interrupt enable when the IPEN bit

    occurred                                                       is cleared. When the IPEN bit is set, enabling interrupt

•   Enable bit that allows program execution to                    priority levels, the GIEH bit is the high priority global

    branch to the interrupt vector address when the                interrupt enable and the GIEL bit is the low priority

    flag bit is set                                                global interrupt enable. High-priority interrupt sources

•   Priority bit to select high priority or low priority           can   interrupt       a    low-priority      interrupt.      Low-priority

                                                                   interrupts      are      not   processed         while       high-priority

7.1       Mid-Range Compatibility                                  interrupts are in progress.

When the IPEN bit is cleared (default state), the interrupt        The return address is pushed onto the stack and the

priority feature is disabled and interrupts are compatible         PC is loaded with the interrupt vector address (0008h

with    PIC®    microcontroller       mid-range   devices.    In   or 0018h). Once in the Interrupt Service Routine, the

Compatibility mode, the interrupt priority bits of the IPRx        source(s) of the interrupt can be determined by polling

registers have no effect. The PEIE bit of the INTCON               the   interrupt   flag     bits  in   the    INTCONx            and  PIRx

register is the global interrupt enable for the peripherals.       registers. The interrupt flag bits must be cleared by

The     PEIE  bit    disables   only  the  peripheral  interrupt   software        before     re-enabling           interrupts     to   avoid

sources and enables the peripheral interrupt sources               repeating the same interrupt.

when the GIE bit is also set. The GIE bit of the INTCON            The “return-from-interrupt” instruction, RETFIE, exits

register is the global interrupt enable which enables all          the interrupt routine and sets the GIE bit (GIEH or GIEL

non-peripheral       interrupt  sources    and    disables    all  if priority levels are used), which re-enables interrupts.

interrupt sources, including the peripherals. All interrupts       For external interrupt events, such as the INT pins or

branch to address 0008h in Compatibility mode.                     the PORTB interrupt-on-change, the interrupt latency

                                                                   will  be  three      to  four    instruction     cycles.      The    exact

                                                                   latency     is   the     same    for       one-cycle      or    two-cycle

                                                                   instructions.     Individual          interrupt  flag     bits  are       set,

                                                                   regardless of the status of their corresponding enable

                                                                   bits or the global interrupt enable bit.

DS40001365F-page 60                                                                            2009-2016 Microchip Technology Inc.
                                                                                                    PIC18(L)F1XK22

Note:  Do    not   use    the       MOVFF       instruction  to

       modify      any    of        the  interrupt          control

       registers while any interrupt is enabled.

       Doing       so              may          cause       erratic

       microcontroller behavior.

FIGURE 7-1:        PIC18 INTERRUPT LOGIC

                                                                                                                    Wake-up if in
                                                                                                         Idle or Sleep modes
                                                                                        TMR0IF
                                                                                        TMR0IE
                                                                                        TMR0IP
                                                                                        RABIF       (1)

                                                                                        RABIE
                                                                                        RABIP

                                                                                        INT0IF
                                                                                        INT0IE
                                                                                                                    Interrupt to CPU
                                                                                        INT1IF                      Vector to Location
                                                                                        INT1IE
                   SSPIF                                                                INT1IP                      0008h

                   SSPIE                                                                INT2IF
                   SSPIP                                                                INT2IE
                                                                                        INT2IP

                   ADIF                                                                                             GIEH/GIE

                   ADIE
                   ADIP
                                                                     IPEN

                   RCIF                                                                 IPEN
                   RCIE
                   RCIP                                                       GIEL/PEIE

                                                                                              IPEN

                                        Additional Peripheral Interrupts

High Priority Interrupt Generation

Low Priority Interrupt Generation

                   SSPIF
                   SSPIE
                   SSPIP

                                                             TMR0IF                                                 Interrupt to CPU
                                                                                                                    Vector to Location
                                                             TMR0IE                                                 0018h

             ADIF                                            TMR0IP
             ADIE
             ADIP                                                                  (1)
                                                                     RABIF
                                                                     RABIE
             RCIF                                                                                        GIEH/GIE
             RCIE                                                    RABIP                               GIEL/PEIE

             RCIP                                                    INT1IF

                                                             INT1IE
                                                            InterruptsINT1IP
                                    Additional  Peripheral

                                                                     INT2IF
                                                             INT2IE
                                                             INT2IP

Note   1:    The RABIF interrupt also requires the individual pin IOCA        and  IOCB  enable.

 2009-2016 Microchip Technology Inc.                                                                    DS40001365F-page 61
PIC18(L)F1XK22

7.4         INTCON Registers

The     INTCON     registers         are  readable          and  writable

registers, which contain             various enable, priority and

flag bits.

Note:            Interrupt flag bits are set when an interrupt

                 condition occurs, regardless of the state of

                 its corresponding enable bit or the global

                 enable bit. User software should ensure

                 the appropriate interrupt flag bits are clear

                 prior to enabling an interrupt. This feature

                 allows for software polling.

REGISTER 7-1:                 INTCON: INTERRUPT CONTROL REGISTER

        R/W-0                 R/W-0       R/W-0                   R/W-0        R/W-0                     R/W-0           R/W-0           R/W-x

       GIE/GIEH    PEIE/GIEL              TMR0IE                 INT0IE        RABIE                     TMR0IF          INT0IF          RABIF

bit 7                                                                                                                                                bit 0

Legend:

R = Readable bit                          W = Writable bit                 U = Unimplemented bit, read as ‘0’

-n = Value at POR                         ‘1’ = Bit is set                 ‘0’ = Bit is cleared                  x = Bit is unknown

bit 7              GIE/GIEH: Global Interrupt Enable bit

                   When IPEN = 0:

                   1 = Enables all unmasked interrupts

                   0 = Disables all interrupts including peripherals

                   When IPEN = 1:

                   1 = Enables all high priority interrupts

                   0 = Disables all interrupts including low priority

bit 6              PEIE/GIEL: Peripheral Interrupt Enable bit

                   When IPEN = 0:

                   1 = Enables all unmasked peripheral interrupts

                   0 = Disables all peripheral interrupts

                   When IPEN = 1:

                   1 = Enables all low priority interrupts

                   0 = Disables all low priority interrupts

bit  5             TMR0IE: TMR0 Overflow Interrupt Enable bit

                   1 = Enables the TMR0 overflow interrupt

                   0 = Disables the TMR0 overflow interrupt

bit  4             INT0IE: INT0 External Interrupt Enable bit

                   1 = Enables the INT0 external interrupt

                   0 = Disables the INT0 external interrupt

bit  3             RABIE: RA and RB Port Change Interrupt Enable bit(2)

                   1 = Enables the RA and RB port change interrupt

                   0 = Disables the RA and RB port change interrupt

bit  2             TMR0IF: TMR0 Overflow Interrupt Flag bit

                   1 = TMR0 register has overflowed (must be cleared by software)

                   0 = TMR0 register did not overflow

bit  1             INT0IF: INT0 External Interrupt Flag bit

                   1 = The INT0 external interrupt occurred (must be cleared by software)

                   0 = The INT0 external interrupt did not occur

bit  0             RABIF: RA and RB Port Change Interrupt Flag bit(1)

                   1 = At least one of the RA <5:0> or RB<7:4> pins changed state (must    be    cleared  by  software)

                   0 = None of the RA<5:0> or RB<7:4> pins have changed state

Note    1:       A mismatch condition will continue to set the RABIF bit. Reading PORTA and PORTB will end the mismatch  condition  and  allow  the  bit  to

                 be cleared.

        2:       RA and RB port change interrupts also require the individual pin IOCA and IOCB enable.

DS40001365F-page 62                                                                                        2009-2016 Microchip Technology Inc.
                                                                      PIC18(L)F1XK22

REGISTER 7-2:            INTCON2: INTERRUPT CONTROL 2 REGISTER

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

     RABPU         INTEDG0          INTEDG1             INTEDG2  —                     TMR0IP        —             RABIP

bit 7                                                                                                              bit 0

Legend:

R = Readable bit            W = Writable bit                     U = Unimplemented bit, read as ‘0’

-n = Value at POR           ‘1’ = Bit is set                     ‘0’ = Bit is cleared          x = Bit is unknown

bit  7      RABPU: PORTA and PORTB Pull-up Enable bit

            1=     PORTA and PORTB pull-ups are disabled

            0=     PORTA and PORTB pull-ups are enabled provided that the pin is an input and the corresponding

                   WPUA and WPUB bits are set.

bit  6      INTEDG0: External Interrupt 0 Edge Select bit

            1=     Interrupt on rising edge

            0=     Interrupt on falling edge

bit  5      INTEDG1: External Interrupt 1 Edge Select bit

            1=     Interrupt on rising edge

            0=     Interrupt on falling edge

bit  4      INTEDG2: External Interrupt 2 Edge Select bit

            1=     Interrupt on rising edge

            0=     Interrupt on falling edge

bit  3      Unimplemented: Read as ‘0’

bit  2      TMR0IP: TMR0 Overflow Interrupt Priority bit

            1=     High priority

            0=     Low priority

bit  1      Unimplemented: Read as ‘0’

bit  0      RABIP: RA and RB Port Change Interrupt Priority bit

            1=     High priority

            0=     Low priority

Note:       Interrupt flag bits are set when an interrupt

            condition occurs, regardless of the state of

            its corresponding enable bit or the global

            enable bit. User software might ensure the

            appropriate  interrupt     flag  bits  are  clear

            prior to enabling an interrupt. This feature

            allows for software polling.

 2009-2016 Microchip Technology Inc.                                                                DS40001365F-page 63
PIC18(L)F1XK22

REGISTER 7-3:             INTCON3: INTERRUPT CONTROL 3 REGISTER

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

     INT2IP        INT1IP            —                INT2IE    INT1IE                —      INT2IF       INT1IF

bit 7                                                                                                              bit 0

Legend:

R = Readable bit           W = Writable bit                     U = Unimplemented bit, read  as ‘0’

-n = Value at POR          ‘1’ = Bit is set                     ‘0’ = Bit is cleared         x = Bit  is  unknown

bit  7       INT2IP: INT2 External Interrupt Priority bit

             1=      High priority

             0=      Low priority

bit  6       INT1IP: INT1 External Interrupt Priority bit

             1=      High priority

             0=      Low priority

bit  5       Unimplemented: Read as ‘0’

bit  4       INT2IE: INT2 External Interrupt Enable bit

             1=      Enables the INT2 external interrupt

             0=      Disables the INT2 external interrupt

bit  3       INT1IE: INT1 External Interrupt Enable bit

             1=      Enables the INT1 external interrupt

             0=      Disables the INT1 external interrupt

bit  2       Unimplemented: Read as ‘0’

bit  1       INT2IF: INT2 External Interrupt Flag bit

             1=      The INT2 external interrupt occurred (must be cleared by software)

             0=      The INT2 external interrupt did not occur

bit  0       INT1IF: INT1 External Interrupt Flag bit

             1=      The INT1 external interrupt occurred (must be cleared by software)

             0=      The INT1 external interrupt did not occur

Note:        Interrupt flag bits are set when an interrupt

             condition occurs, regardless of the state of

             its corresponding enable bit or the global

             enable bit. User software might ensure the

             appropriate  interrupt  flag  bits  are  clear

             prior to enabling an interrupt. This feature

             allows for software polling.

DS40001365F-page 64                                                                       2009-2016 Microchip Technology Inc.
                                                                             PIC18(L)F1XK22

7.5        PIR Registers                                     Note 1:         Interrupt     flag  bits    are  set   when    an

The PIR registers contain the individual flag bits for the                   interrupt condition occurs, regardless of

peripheral interrupts. Due to the number of peripheral                       the state of its corresponding enable bit or

interrupt sources, there are two Peripheral Interrupt                        the Global Interrupt Enable bit, GIE of the

Request Flag registers (PIR1 and PIR2).                                      INTCON register.

                                                                         2:  User          software    might  ensure       the

                                                                             appropriate interrupt flag bits are cleared

                                                                             prior     to  enabling  an  interrupt  and   after

                                                                             servicing that interrupt.

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

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

        —          ADIF                RCIF     TXIF         SSPIF                CCP1IF             TMR2IF         TMR1IF

bit 7                                                                                                                     bit 0

Legend:

R = Readable bit              W = Writable bit              U = Unimplemented bit, read as ‘0’

-n = Value at POR             ‘1’ = Bit is set              ‘0’ = Bit is cleared           x = Bit is unknown

bit  7         Unimplemented: Read as ‘0’

bit  6         ADIF: A/D Converter Interrupt Flag bit

               1=  An A/D conversion completed (must be cleared by software)

               0=  The A/D conversion is not complete or has not been started

bit  5         RCIF: EUSART Receive Interrupt Flag bit

               1=  The EUSART receive buffer, RCREG, is full (cleared when RCREG is read)

               0=  The EUSART receive buffer is empty

bit  4         TXIF: EUSART Transmit Interrupt Flag bit

               1=  The EUSART transmit buffer, TXREG, is empty (cleared when TXREG is written)

               0=  The EUSART transmit buffer is full

bit  3         SSPIF: Master Synchronous Serial Port Interrupt Flag bit

               1=  The transmission/reception is complete (must be cleared by software)

               0=  Waiting to transmit/receive

bit  2         CCP1IF: CCP1 Interrupt Flag bit

               Capture mode:

               1=  A TMR1 register capture occurred (must be cleared by software)

               0=  No TMR1 register capture occurred

               Compare mode:

               1=  A TMR1 register compare match occurred (must be cleared by software)

               0=  No TMR1 register compare match occurred

               PWM mode:

               Unused in this mode

bit 1          TMR2IF: TMR2 to PR2 Match Interrupt Flag bit

               1=  TMR2 to PR2 match occurred (must be cleared by software)

               0=  No TMR2 to PR2 match occurred

bit 0          TMR1IF: TMR1 Overflow Interrupt Flag bit

               1=  TMR1 register overflowed (must be cleared by software)

               0=  TMR1 register did not overflow

     Note  1:  The PSPIF bit is unimplemented on 28-pin devices and will read as ‘0’.

 2009-2016 Microchip Technology Inc.                                                                  DS40001365F-page 65
PIC18(L)F1XK22

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

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

     OSCFIF          C1IF  C2IF                 EEIF       BCLIF                  —       TMR3IF              —

bit 7                                                                                                              bit 0

Legend:

R = Readable bit           W = Writable bit                U = Unimplemented bit, read as ‘0’

-n = Value at POR          ‘1’ = Bit is set                ‘0’ = Bit is cleared           x = Bit is unknown

bit  7       OSCFIF: Oscillator Fail Interrupt Flag bit

             1=      Device oscillator failed, clock input has changed to HFINTOSC (must  be   cleared  by  software)

             0=      Device clock operating

bit  6       C1IF: Comparator C1 Interrupt Flag bit

             1=      Comparator C1 output has changed (must be cleared by software)

             0=      Comparator C1 output has not changed

bit  5       C2IF: Comparator C2 Interrupt Flag bit

             1=      Comparator C2 output has changed (must be cleared by software)

             0=      Comparator C2 output has not changed

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

             1=      The write operation is complete (must be cleared by software)

             0=      The write operation is not complete or has not been started

bit  3       BCLIF: Bus Collision Interrupt Flag bit

             1=      A bus collision occurred (must be cleared by software)

             0=      No bus collision occurred

bit  2       Unimplemented: Read as ‘0’

bit  1       TMR3IF: TMR3 Overflow Interrupt Flag bit

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

             0=      TMR3 register did not overflow

bit  0       Unimplemented: Read as ‘0’

DS40001365F-page 66                                                                   2009-2016 Microchip Technology Inc.
                                                                            PIC18(L)F1XK22

7.6        PIE Registers

The PIE registers contain the individual enable bits for

the     peripheral  interrupts.  Due   to  the  number    of

peripheral interrupt sources, there are two Peripheral

Interrupt Enable registers (PIE1 and PIE2). When IPEN

= 0, the PEIE bit must be set to enable any of these

peripheral interrupts.

REGISTER 7-6:           PIE1: PERIPHERAL INTERRUPT                ENABLE    (FLAG) REGISTER 1

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

        —               ADIE           RCIE          TXIE         SSPIE               CCP1IE  TMR2IE       TMR1IE

bit 7                                                                                                             bit 0

Legend:

R = Readable bit                 W = Writable bit               U = Unimplemented bit, read as ‘0’

-n = Value at POR                ‘1’ = Bit is set               ‘0’ = Bit is cleared          x = Bit is unknown

bit  7              Unimplemented: Read as ‘0’

bit  6              ADIE: A/D Converter Interrupt Enable bit

                    1 = Enables the A/D interrupt

                    0 = Disables the A/D interrupt

bit  5              RCIE: EUSART Receive Interrupt Enable bit

                    1 = Enables the EUSART receive interrupt

                    0 = Disables the EUSART receive interrupt

bit  4              TXIE: EUSART Transmit Interrupt Enable bit

                    1 = Enables the EUSART transmit interrupt

                    0 = Disables the EUSART transmit interrupt

bit  3              SSPIE: Master Synchronous Serial Port Interrupt Enable  bit

                    1 = Enables the MSSP interrupt

                    0 = Disables the MSSP interrupt

bit  2              CCP1IE: CCP1 Interrupt Enable bit

                    1 = Enables the CCP1 interrupt

                    0 = Disables the CCP1 interrupt

bit  1              TMR2IE: TMR2 to PR2 Match Interrupt Enable bit

                    1 = Enables the TMR2 to PR2 match interrupt

                    0 = Disables the TMR2 to PR2 match interrupt

bit  0              TMR1IE: TMR1 Overflow Interrupt Enable bit

                    1 = Enables the TMR1 overflow interrupt

                    0 = Disables the TMR1 overflow interrupt

 2009-2016 Microchip Technology Inc.                                                               DS40001365F-page 67
PIC18(L)F1XK22

REGISTER 7-7:        PIE2: PERIPHERAL INTERRUPT ENABLE (FLAG) REGISTER 2

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

     OSCFIE          C1IE      C2IE              EEIE      BCLIE                 —    TMR3IE              —

bit 7                                                                                                          bit  0

Legend:

R = Readable bit               W = Writable bit            U = Unimplemented bit, read as ‘0’

-n = Value at POR              ‘1’ = Bit is set            ‘0’ = Bit is cleared       x = Bit is unknown

bit  7       OSCFIE: Oscillator Fail Interrupt Enable bit

             1=      Enabled

             0=      Disabled

bit  6       C1IE: Comparator C1 Interrupt Enable bit

             1=      Enabled

             0=      Disabled

bit  5       C2IE: Comparator C2 Interrupt Enable bit

             1=      Enabled

             0=      Disabled

bit  4       EEIE: Data EEPROM/Flash Write Operation Interrupt    Enable         bit

             1=      Enabled

             0=      Disabled

bit  3       BCLIE: Bus Collision Interrupt Enable bit

             1=      Enabled

             0=      Disabled

bit  2       Unimplemented: Read as ‘0’

bit  1       TMR3IE: TMR3 Overflow Interrupt Enable bit

             1=      Enabled

             0=      Disabled

bit  0       Unimplemented: Read as ‘0’

DS40001365F-page 68                                                                    2009-2016 Microchip Technology Inc.
                                                                          PIC18(L)F1XK22

7.7         IPR Registers

The IPR registers contain the individual priority bits for the

peripheral interrupts. Due to the number of peripheral

interrupt   sources,  there  are  two  Peripheral   Interrupt

Priority registers (IPR1 and IPR2). Using the priority bits

requires that the Interrupt Priority Enable (IPEN) bit be

set.

REGISTER 7-8:         IPR1: PERIPHERAL INTERRUPT                PRIORITY  REGISTER            1

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

         —            ADIP             RCIP         TXIP        SSPIP                 CCP1IP     TMR2IP    TMR1IP

bit 7                                                                                                                bit 0

Legend:

R = Readable bit                  W = Writable bit              U = Unimplemented bit, read as ‘0’

-n = Value at POR                 ‘1’ = Bit is set              ‘0’ = Bit is cleared             x = Bit is unknown

bit   7       Unimplemented: Read as ‘0’

bit   6       ADIP: A/D Converter Interrupt Priority bit

              1=      High priority

              0=      Low priority

bit   5       RCIP: EUSART Receive Interrupt Priority bit

              1=      High priority

              0=      Low priority

bit   4       TXIP: EUSART Transmit Interrupt Priority bit

              1=      High priority

              0=      Low priority

bit   3       SSPIP: Master Synchronous Serial Port Interrupt Priority    bit

              1=      High priority

              0=      Low priority

bit   2       CCP1IP: CCP1 Interrupt Priority bit

              1=      High priority

              0=      Low priority

bit   1       TMR2IP: TMR2 to PR2 Match Interrupt Priority bit

              1=      High priority

              0=      Low priority

bit   0       TMR1IP: TMR1 Overflow Interrupt Priority bit

              1=      High priority

              0=      Low priority

 2009-2016 Microchip Technology Inc.                                                               DS40001365F-page 69
PIC18(L)F1XK22

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

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

     OSCFIP          C1IP           C2IP     EEIP            BCLIP                 —          TMR3IP                —

bit 7                                                                                                                    bit  0

Legend:

R = Readable bit           W = Writable bit                  U = Unimplemented bit,     read  as ‘0’

-n = Value at POR          ‘1’ = Bit is set                  ‘0’ = Bit is cleared             x = Bit  is  unknown

bit  7       OSCFIP: Oscillator Fail Interrupt Priority bit

             1=      High priority

             0=      Low priority

bit  6       C1IP: Comparator C1 Interrupt Priority bit

             1=      High priority

             0=      Low priority

bit  5       C2IP: Comparator C2 Interrupt Priority bit

             1=      High priority

             0=      Low priority

bit  4       EEIP: Data EEPROM/Flash Write Operation Interrupt      Priority       bit

             1=      High priority

             0=      Low priority

bit  3       BCLIP: Bus Collision Interrupt Priority bit

             1=      High priority

             0=      Low priority

bit  2       Unimplemented: Read as ‘0’

bit  1       TMR3IP: TMR3 Overflow Interrupt Priority bit

             1=      High priority

             0=      Low priority

bit  0       Unimplemented: Read as ‘0’

DS40001365F-page 70                                                                      2009-2016 Microchip Technology Inc.
                                                                                   PIC18(L)F1XK22

7.8         RCON Register

The RCON register contains flag bits which are used to

determine the cause of the last Reset or wake-up from

Idle or Sleep modes. RCON also contains the IPEN bit

which enables interrupt priorities.

The operation of the SBOREN bit and the Reset flag

bits is discussed in more detail in Section 22.1 “RCON

Register”.

REGISTER 7-10:     RCON: RESET CONTROL REGISTER

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

        IPEN      SBOREN(1)            —           RI            TO                PD           POR(2)              BOR(3)

bit 7                                                                                                                bit 0

Legend:

R = Readable bit               W = Writable bit           U = Unimplemented bit, read as ‘0’

-n = Value at POR              ‘1’ = Bit is set           ‘0’ = Bit is cleared                  x = Bit is unknown

bit 7         IPEN: Interrupt Priority Enable bit

              1 = Enable priority levels on interrupts

              0 = Disable priority levels on interrupts (PIC16CXXX Compatibility mode)

bit 6         SBOREN: BOR Software Enable bit(1)

              If BOREN<1:0> = 01:

              1 = BOR is enabled

              0 = BOR is disabled

              If BOREN<1:0> = 00, 10 or 11:

              Bit is disabled and read as ‘0’.

bit 5         Unimplemented: Read as ‘0’

bit 4         RI: RESET Instruction Flag bit

              1=   The RESET instruction was not executed (set by firmware or Power-on Reset)

              0=   The RESET instruction was executed causing a device Reset (must be set in firmware                after  a

                   code-executed Reset occurs)

bit  3        TO: Watchdog Time-out Flag bit

              1=   Set by power-up, CLRWDT instruction or SLEEP instruction

              0=   A WDT Time-out occurred

bit  2        PD: Power-down Detection Flag bit

              1=   Set by power-up or by the CLRWDT instruction

              0=   Set by execution of the SLEEP instruction

bit  1        POR: Power-on Reset Status bit(2)

              1 = No Power-on Reset occurred

              0 = A Power-on Reset occurred (must be set in software after a Power-on Reset occurs)

bit  0        BOR: Brown-out Reset Status bit(3)

              1=   A Brown-out Reset has not occurred (set by firmware only)

              0=   A Brown-out Reset occurred (must be set by firmware after a POR or Brown-out Reset occurs)

Note    1:    If SBOREN is enabled, its Reset state is ‘1’; otherwise, it is ‘0’.

        2:    The actual Reset value of POR is determined by the type of device Reset. See the notes following this

              register and Section 22.6 “Reset State of Registers” for additional information.

        3:    See Table 22-3.

 2009-2016 Microchip Technology Inc.                                                           DS40001365F-page 71
PIC18(L)F1XK22

7.9         INTx Pin Interrupts                                           7.10      TMR0 Interrupt

External interrupts on the INT0, INT1 and INT2 pins are                   In 8-bit mode (which is the default), an overflow in the

edge-triggered. If the corresponding INTEDGx bit in the                   TMR0 register (FFh  00h) will set flag bit, TMR0IF. In

INTCON2 register is set (= 1), the interrupt is triggered                 16-bit   mode,      an   overflow    in  the  TMR0H:TMR0L

by a rising edge; if the bit is clear, the trigger is on the              register pair (FFFFh  0000h) will set TMR0IF. The

falling edge. When a valid edge appears on the INTx                       interrupt can be enabled/disabled by setting/clearing

pin,  the   corresponding    flag    bit,  INTxF,  is  set.  This         enable bit, TMR0IE of the INTCON register. Interrupt

interrupt can be disabled by clearing the corresponding                   priority for Timer0 is determined by the value contained

enable bit, INTxE. Flag bit, INTxF, must be cleared by                    in the interrupt priority bit, TMR0IP of the INTCON2

software in the Interrupt Service Routine before re-                      register. See Section 9.0 “Timer0 Module” for further

enabling the interrupt.                                                   details on the Timer0 module.

All external interrupts (INT0, INT1 and INT2) can wake-

up the processor from Idle or Sleep modes if bit INTxE                    7.11      PORTA and PORTB Interrupt-on-

was set prior to going into those modes. If the Global                              Change

Interrupt   Enable  bit,  GIE,  is   set,  the  processor    will         An input change on PORTA or PORTB sets flag bit,

branch to the interrupt vector following wake-up.                         RABIF of the INTCON register. The interrupt can be

Interrupt priority for INT1 and INT2 is determined by                     enabled/disabled by setting/clearing enable bit, RABIE

the   value  contained      in  the  interrupt     priority  bits,        of the INTCON register. Pins must also be individually

INT1IP and INT2IP of the INTCON3 register. There is                       enabled with the IOCA and IOCB register. Interrupt

no priority bit associated with INT0. It is always a high-                priority for PORTA and PORTB interrupt-on-change is

priority interrupt source.                                                determined     by   the   value  contained    in    the  interrupt

                                                                          priority bit, RABIP of the INTCON2 register.

                                                                          7.12      Context Saving During Interrupts

                                                                          During interrupts, the return PC address is saved on

                                                                          the stack. Additionally, the WREG, STATUS and BSR

                                                                          registers are saved on the fast return stack. If a fast

                                                                          return   from    interrupt  is  not  used     (see  Section 3.3

                                                                          “Data Memory Organization”), the user may need to

                                                                          save the WREG, STATUS and BSR registers on entry

                                                                          to  the  Interrupt  Service     Routine.   Depending     on  the

                                                                          user’s application, other registers may also need to be

                                                                          saved. Example 7-1 saves and restores the WREG,

                                                                          STATUS and BSR registers during an Interrupt Service

                                                                          Routine.

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

MOVWF        W_TEMP                                          ;  W_TEMP   is   in  virtual     bank

MOVFF        STATUS,      STATUS_TEMP                        ;  STATUS_TEMP       located  anywhere

MOVFF        BSR,   BSR_TEMP                                 ;  BSR_TMEP     located  anywhere

;

;     USER  ISR  CODE

;

MOVFF        BSR_TEMP,          BSR                          ;  Restore   BSR

MOVF         W_TEMP,      W                                  ;  Restore   WREG

MOVFF        STATUS_TEMP,            STATUS                  ;  Restore   STATUS

DS40001365F-page 72                                                                                2009-2016 Microchip Technology Inc.
                                                                             PIC18(L)F1XK22

8.0         I/O PORTS                                       8.1          PORTA, TRISA and LATA Registers

There are up to three ports available. Some pins of the     PORTA        is  a   6-bit  wide,        bidirectional  port,  with    the

I/O ports are multiplexed with an alternate function from   exception of RA3, which is input-only and its TRIS bit

the peripheral features on the device. In general, when     will  always        read    as     ‘1’.  The  corresponding          data

a peripheral is enabled, that pin may not be used as a      direction register is TRISA. Setting a TRISA bit (= 1)

general purpose I/O pin.                                    will make the corresponding PORTA pin an input (i.e.,

Each port has three registers for its operation. These      disable the output driver). Clearing a TRISA bit (= 0)

registers are:                                              will make the corresponding PORTA pin an output (i.e.,

•  TRIS register (data direction register)                  enable the output driver and put the contents of the

                                                            output latch on the selected pin).

•  PORT register (reads the levels on the pins of the       Reading the PORTA register reads the status of the

   device)                                                  pins, whereas writing to it, will write to the PORT latch.

•  LAT register (output latch)                              The PORTA Data Latch (LATA) register is also memory

The PORTA Data Latch (LATA register) is useful for          mapped.      Read-modify-write           operations     on     the  LATA

read-modify-write operations on the value that the I/O      register     read   and     write  the   latched  output       value   for

pins are driving.                                           PORTA.

A simplified model of a generic I/O port, without the       All of the PORTA pins are individually configurable as

interfaces to other peripherals, is shown in Figure 8-1.    interrupt-on-change         pins.        Control  bits  in  the     IOCA

                                                            register enable (when set) or disable (when clear) the

FIGURE 8-1:            GENERIC I/O PORT                     interrupt function for each pin.

                       OPERATION                            When      set,   the  RABIE        bit   of  the  INTCON       register

                                                            enables interrupts on all pins which also have their

   RD LAT                                                   corresponding IOCA bit set. When clear, the RABIE

   Data                                                     bit disables all interrupt-on-changes.

   Bus             D      Q                                 Only pins configured as inputs can cause this interrupt

   WR LAT                                    I/O pin(1)     to    occur  (i.e.,   any   pin    configured     as    an     output  is

   or Port         CK                                       excluded from the interrupt-on-change comparison).

                   Data Latch                               For enabled interrupt-on-change pins, the values are

                                                            compared with the old value latched on the last read of

                   D      Q                                 PORTA. The ‘mismatch’ outputs of the last read are

   WR TRIS                                                  OR’d together to set the PORTA Change Interrupt flag

                   CK                                       bit (RABIF) in the INTCON register.

                   TRIS Latch                Input

                                             Buffer

   RD TRIS

                                Q      D

                                       ENEN

   RD Port

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

 2009-2016 Microchip Technology Inc.                                                                     DS40001365F-page 73
PIC18(L)F1XK22

This interrupt can wake the device from the Sleep mode,                    Pins  RA4  and    RA5    are    multiplexed    with    the  main

or any of the Idle modes. The user, in the Interrupt                       oscillator pins; they are enabled as oscillator or I/O pins

Service Routine, can clear the interrupt in the following                  by    the  selection     of  the  main     oscillator  in   the

manner:                                                                    Configuration         register       (see       Section 23.1

a)   Any   read     or    write     of  PORTA        to    clear  the      “Configuration Bits” for details). When they are not

     mismatch condition (except when PORTA is the                          used as port pins, RA4 and RA5 and their associated

     source or destination of a MOVFF                instruction).         TRIS and LAT bits read as ‘0’.

b)   Clear the flag bit, RABIF.                                            RA<4,2:0> are pins multiplexed with analog inputs. The

A mismatch condition will continue to set the RABIF flag                   operation of pins RA<4,2:0> as analog are selected by

bit. Reading or writing PORTA will end the mismatch                        setting the ANS<3:0> bits in the ANSEL register, which

condition and allow the RABIF bit to be cleared. The latch                 is the default setting after a Power-on Reset.

holding the last read value is not affected by a MCLR nor                  EXAMPLE 8-1:                 INITIALIZING PORTA

Brown-out Reset. After either one of these Resets, the

RABIF flag will continue to be set if a mismatch is present.               CLRF       PORTA      ;  Initialize      PORTA  by

                                                                                                 ;  clearing    output

                                                                                                 ;  data     latches

     Note 1:    If a change on the I/O pin should occur                    CLRF       LATA       ;  Alternate      method

                when      the     read    operation        is     being                          ;  to   clear  output

                executed (start of the Q2 cycle), then the                                       ;  data     latches

                RABIF        interrupt    flag   may     not   get set.    MOVLW      030h       ;  Value    used   to

                Furthermore, since a read or write on a                                          ;  initialize      data

                port affects all bits of that port, care must                                    ;  direction

                be    taken    when       using  multiple      pins  in    MOVWF      TRISA      ;  Set    RA<5:4>    as  output

                Interrupt-on-Change mode. Changes on

                one pin may not be seen while servicing

                changes on another pin.

The interrupt-on-change feature is recommended for

wake-up on key depression operation and operations

where PORTA is only used for the interrupt-on-change

feature. Polling of PORTA is not recommended while

using the interrupt-on-change feature.

Each of the PORTA pins has an individually controlled

weak internal pull-up. When set, each bit of the WPUA

register enables the corresponding pin pull-up. When

cleared,   the   RABPU         bit  of    the    INTCON2        register

enables    pull-ups     on   all    pins  which      also  have     their

corresponding WPUA bit set. When set, the RABPU bit

disables   all   weak        pull-ups.    The        weak  pull-up     is

automatically turned off when the port pin is configured

as an output. The pull-ups are disabled on a Power-on

Reset.

RA3 is an input only pin. Its operation is controlled by

the  MCLRE       bit  of     the    CONFIG3H         register.    When

selected as a port pin (MCLRE = 0), it functions as a

digital input only pin; as such, it does not have TRIS or

LAT bits associated with its operation.

    Note:     On a Power-on Reset, RA3 is enabled as

              a     digital  input        only   if  Master       Clear

              functionality is disabled.

DS40001365F-page 74                                                                               2009-2016 Microchip Technology Inc.
                                                                             PIC18(L)F1XK22

REGISTER 8-1:      PORTA: PORTA REGISTER

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

         —         —                   RA5    RA4                 RA3                   RA2           RA1                  RA0

bit 7                                                                                                                           bit  0

Legend:

R = Readable bit        W = Writable bit                          U = Unimplemented bit, read as ‘0’

-n = Value at POR       ‘1’ = Bit is set                          ‘0’ = Bit is cleared               x = Bit is unknown

bit 7-6      Unimplemented: Read as ‘0’

bit 5-0      RA<5:0>: PORTA I/O Pin bit(1)

             1 = Port pin is > VIH

             0 = Port pin is < VIL

Note     1:  The RA3 bit is only available when Master Clear Reset is disabled (MCLRE Configuration bit = 0).

             Otherwise, RA3 reads as ‘0’. This bit is read-only.

REGISTER 8-2:      TRISA: PORTA TRI-STATE REGISTER

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

         —         —    TRISA5                TRISA4              —                     TRISA2       TRISA1       TRISA0

bit 7                                                                                                                           bit  0

Legend:

R = Readable bit        W = Writable bit                          U = Unimplemented     bit,   read  as ‘0’

-n = Value at POR       ‘1’ = Bit is set                          ‘0’ = Bit is cleared               x = Bit  is  unknown

bit 7-6      Unimplemented: Read as ‘0’

bit 5-4      TRISA<5:4>: PORTA Tri-State Control bit(1)

             1 = PORTA pin configured as an input (tri-stated)

             0 = PORTA pin configured as an output

bit 3        Unimplemented: Read as ‘1’

bit 2-0      TRISA<2:0>: PORTA Tri-State Control bit(1)

             1 = PORTA pin configured as an input (tri-stated)

             0 = PORTA pin configured as an output

Note     1:  TRISA<5:4> always reads ‘1’ in XT, HS and LP Oscillator modes.

 2009-2016 Microchip Technology Inc.                                                                         DS40001365F-page 75
PIC18(L)F1XK22

REGISTER 8-3:        LATA: PORTA DATA LATCH REGISTER

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

         —           —                   LATA5         LATA4               —          LATA2               LATA1           LATA0

bit 7                                                                                                                            bit  0

Legend:

R = Readable bit          W = Writable bit                      U = Unimplemented bit, read  as  ‘0’

-n = Value at POR         ‘1’ = Bit is set                      ‘0’ = Bit is cleared                x  =  Bit is unknown

bit 7-6            Unimplemented: Read as ‘0’

bit 5-4            LATA<5:4>: RA<5:4> Port I/O Output Latch Register bits

bit 3              Unimplemented: Read as ‘0’

bit 2-0            LATA<2:0>: RA<2:0> Port I/O Output Latch Register bits

REGISTER 8-4:        WPUA: WEAK PULL-UP PORTA REGISTER

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

         —           —                   WPUA5       WPUA4      WPUA3(1)              WPUA2               WPUA1           WPUA0

bit 7                                                                                                                            bit  0

Legend:

R = Readable bit          W = Writable bit                      U = Unimplemented bit, read as ‘0’

-n = Value at POR         ‘1’ = Bit is set                      ‘0’ = Bit is cleared                x = Bit is  unknown

bit 7-6            Unimplemented: Read as ‘0’

bit 5-0            WPUA<5:0>: Weak Pull-up Enable bit

                   1 = Pull-up enabled

                   0 = Pull-up disabled

Note     1:   For the WPUA3 bit, when MCLRE = 1, weak  pull-up  is internally enabled, but not reported here.

REGISTER 8-5:        IOCA: INTERRUPT-ON-CHANGE PORTA REGISTER

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

         —           —                   IOCA5         IOCA4    IOCA3                 IOCA2               IOCA1           IOCA0

bit 7                                                                                                                            bit 0

Legend:

R = Readable bit          W = Writable bit                      U = Unimplemented bit, read as ‘0’

-n = Value at POR         ‘1’ = Bit is set                      ‘0’ = Bit is cleared                x = Bit is unknown

bit 7-6            Unimplemented: Read as ‘0’

bit 5-0            IOCA<5:0>: PORTA I/O Pin bit

                   1 = Interrupt-on-change enabled

                   0 = Interrupt-on-change disabled

DS40001365F-page 76                                                                    2009-2016 Microchip Technology Inc.
                                                                            PIC18(L)F1XK22

TABLE 8-1:        PORTA I/O SUMMARY

        Pin       Function  TRIS          I/O  I/O                                  Description

                            Setting            Type

RA0/AN0/CVREF/    RA0                  0  O    DIG   LATA<0> data output.

DAC1OUT/VREF-/                         1  I    TTL   PORTA<0> data input; Programmable weak pull-up.

C1IN+/INT0/PGD    AN0                     I    ANA   ADC channel 0 input.

                                       1

                  CVREF/               x  O    ANA   DAC reference voltage output.

                  DAC1OUT

                  VREF-                1  I    ANA   ADC and DAC reference voltage (low) input.

                  C1IN+                1  I    DIG   Comparator C1 noninverting input.

                  INT0                 1  I    ST    External interrupt 0.

                  PGD                  x  O    DIG   Serial execution data output for ICSP™.

                                       x  I    ST    Serial execution data input for ICSP.

RA1/AN1/C12IN0-/  RA1                  0  O    DIG   LATA<1> data output.

VREF+/INT1/PGC                         1  I    TTL   PORTA<1> data input; Programmable weak pull-up.

                  AN1                  1  I    ANA   ADC channel 1.

                  C12IN0-              1  I    ANA   Comparator C1 and C2 inverting input channel 0.

                  VREF+                1  I    ANA   ADC and DAC reference voltage (high) input

                  INT1                 1       ST    External interrupt 1.

                  PGC                  x  O    DIG   Serial execution clock output for ICSP™.

                                       x  I    ST    Serial execution clock input for ICSP.

RA2/AN2/C1OUT/    RA2                  0  O    DIG   LATA<2> data output.

T0CKI/INT2/SRQ                         1  I    TTL   PORTA<2> data input; Programmable weak pull-up.

                  AN2                  1  I    ANA   ADC channel 2.

                  C1OUT                0  O    DIG   Comparator C1 output.

                  T0CKI                1  I    ST    Timer0 external clock input.

                  INT2                 1  I    ST    External interrupt 2.

                  SRQ                  0  O    DIG   SR latch output.

RA3/MCLR/VPP      RA3       —(1)          I    ST    PORTA<37> data input; Programmable weak pull-up.

                  MCLR      —             I    ST    Active-low Master Clear with internal pull-up.

                  VPP       —             I    ANA   High-voltage programming input.

RA4/AN3/OSC2/     RA4                  0  O    DIG   LATA<4> data output.

CLKOUT                                 1  I    TTL   PORTA<4> data input; Programmable weak pull-up.

                  AN3                  1  I    ANA   A/D input channel 3.

                  OSC2                 x  O    ANA   Main oscillator feedback output connection (XT, HS and LP modes).

                  CLKOUT               x  O    DIG   System instruction cycle clock output.

RA5/OSC1/CLKIN/   RA5                  0  O    DIG   LATA<5> data output.

T13CKI                                 1  I    TTL   PORTA<5> data input; Programmable weak pull-up.

                  OSC1                 x  I    ANA   Main oscillator input connection.

                  CLKIN                x  I    ANA   Main clock input connection.

                  T13CKI               1  I    ST    Timer1 and Timer3 external clock input.

Legend:      DIG = Digital level output; TTL = TTL input buffer; ST = Schmitt Trigger input buffer; ANA = Analog level input/output;

             x = Don’t care (TRIS bit does not affect port direction or is overridden for this option).

Note     1:  RA3 does not have a corresponding TRISA bit. This pin is always an input regardless of mode.

 2009-2016 Microchip Technology Inc.                                                                      DS40001365F-page 77
PIC18(L)F1XK22

TABLE 8-2:  SUMMARY OF REGISTERS ASSOCIATED WITH PORTA

                                                                                                                  Reset

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

                                                                                                                  page

ANSEL       ANS7      ANS6             ANS5      ANS4       ANS3      ANS2     ANS1    ANS0                       247

INTCON      GIE/GIEH  PEIE/GIEL        TMR0IE    INT0IE     RABIE     TMR0IF   INT0IF  RABIF                      244

INTCON2     RABPU     INTEDG0    INTEDG1         INTEDG2    —         TMR0IP   —       RABIP                      244

IOCA        —         —                IOCA5     IOCA4      IOCA3(2)  IOCA2    IOCA1   IOCA0                      247

LATA        —         —                LATA5(1)  LATA4(1)   —         LATA2    LATA1   LATA0                      247

PORTA       —         —                RA5(1)    RA4(1)     RA3(2)    RA2      RA1     RA0                        247

SLRCON      —         —                —         —          —         SLRC     SLRB    SLRA                       247

TRISA       —         —          TRISA5(1)       TRISA4(1)  —(3)      TRISA2   TRISA1  TRISA0                     247

WPUA        —         —                WPUA5     WPUA4      WPUA3(2)  WPUA2    WPUA1   WPUA0                      244

Legend:   — = unimplemented, read as ‘0’. Shaded cells are not used by PORTA.

Note  1:  RA<5:4> and their associated latch and data direction bits are enabled as I/O pins based on oscillator

          configuration; otherwise, they are read as ‘0’.

      2:  Implemented only when Master Clear functionality is disabled (MCLRE Configuration bit = 0).

      3:  Unimplemented, read as ‘1’.

DS40001365F-page 78                                                             2009-2016 Microchip Technology Inc.
                                                                                        PIC18(L)F1XK22

8.2         PORTB, TRISB and LATB                                           A mismatch condition will continue to set the RABIF flag

            Registers                                                       bit. Reading or writing PORTB will end the mismatch

                                                                            condition and allow the RABIF bit to be cleared. The latch

PORTB       is  an   4-bit     wide,    bidirectional       port.    The    holding the last read value is not affected by a MCLR nor

corresponding data direction register is TRISB. Setting                     Brown-out Reset. After either one of these Resets, the

a TRISB bit (= 1) will make the corresponding PORTB                         RABIF flag will continue to be set if a mismatch is present.

pin an input (i.e., disable the output driver). Clearing a                  Note:       If a change on the I/O pin should occur

TRISB bit (= 0) will make the corresponding PORTB                                       when the read operation is being executed

pin an output (i.e., enable the output driver and put the                               (start     of  the  Q2    cycle),  then     the  RABIF

contents of the output latch on the selected pin).                                      interrupt flag may not get set. Furthermore,

The PORTB Data Latch register (LATB) is also memory                                     since a read or write on a port affects all

mapped. Read-modify-write operations on the LATB                                        bits of that port, care must be taken when

register read and write the latched output value for                                    using multiple pins in Interrupt-on-Change

PORTB.                                                                                  mode. Changes on one pin may not be

                                                                                        seen while servicing changes on another

EXAMPLE 8-2:                  INITIALIZING PORTB                                        pin.

CLRF        PORTB        ;  Initialize         PORTB    by                  The interrupt-on-change feature is recommended for

                         ;  clearing       output                           wake-up on key depression operation and operations

                         ;  data     latches                                where PORTB is only used for the interrupt-on-change

CLRF        LATB         ;  Alternate        method                         feature. Polling of PORTB is not recommended while

                         ;  to   clear     output                           using the interrupt-on-change feature.

                         ;  data     latches

MOVLW       0F0h         ;  Value      used    to                           All  PORTB     pins    have     individually   controlled     weak

                         ;  initialize         data                         internal  pull-up.   When       set,  each     bit  of  the  WPUB

                         ;  direction                                       register enables the corresponding pin pull-up. When

MOVWF       TRISB        ;  Set    RB<7:4>      as   outputs                cleared,  the  RABPU       bit  of    the   INTCON2          register

All   PORTB      pins     are    individually      configurable         as  enables   pull-ups     on  all  pins  which    also     have  their

interrupt-on-change         pins.     Control   bits    in  the    IOCB     corresponding WPUB bit set. When set, the RABPU bit

register enable (when set) or disable (when clear) the                      disables  all  weak        pull-ups.  The      weak     pull-up  is

interrupt function for each pin.                                            automatically turned off when the port pin is configured

When   set,     the  RABIE       bit   of  the  INTCON      register        as an output. The pull-ups are disabled on a Power-on

                                                                            Reset.

enables interrupts on all pins which also have their                        Note:       On      a  Power-on       Reset,        RB<5:4>   are

corresponding IOCB bit set. When clear, the RABIE                                       configured as analog inputs by default and

bit disables all interrupt-on-changes.                                                  read as ‘0’.

Only pins configured as inputs can cause this interrupt

to   occur  (i.e.,   any    pin  configured        as   an  output      is

excluded from the interrupt-on-change comparison).

For enabled interrupt-on-change pins, the values are

compared with the old value latched on the last read of

PORTB. The ‘mismatch’ outputs of the last read are

OR’d together to set the PORTB Change Interrupt flag

bit (RABIF) in the INTCON register.

This  interrupt     can   wake     the     device   from    the    Sleep

mode,  or   any      of  the   Idle    modes.      The  user,    in  the

Interrupt Service Routine, can clear the interrupt in the

following manner:

a)    Any   read     or   write    of   PORTB       to  clear      the

      mismatch condition (except when PORTB is the

      source or destination of a MOVFF              instruction).

b)    Clear the flag bit, RABIF.

 2009-2016 Microchip Technology Inc.                                                                             DS40001365F-page 79
PIC18(L)F1XK22

REGISTER 8-6:        PORTB: PORTB REGISTER

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

       RB7           RB6          RB5          RB4             —             —                  —            —

bit 7                                                                                                             bit  0

Legend:

R = Readable bit             W = Writable bit          U = Unimplemented bit,     read  as ‘0’

-n = Value at POR            ‘1’ = Bit is set          ‘0’ = Bit is cleared             x = Bit is  unknown

bit 7-4     RB<7:4>: PORTB I/O Pin bit

            1 = Port pin is >VIH

            0 = Port pin is
bit 3-0     Unimplemented: Read as ‘0’

REGISTER    8-7:     TRISB:  PORTB TRI-STATE REGISTER

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

TRISB7             TRISB6    TRISB5            TRISB4          —             —                  —            —

bit 7                                                                                                             bit  0

Legend:

R = Readable bit             W = Writable bit          U = Unimplemented bit,     read  as ‘0’

-n = Value at POR            ‘1’ = Bit is set          ‘0’ = Bit is cleared             x = Bit is  unknown

bit 7-4     TRISB<7:4>: PORTB Tri-State Control bit

            1 = PORTB pin configured as an input (tri-stated)

            0 = PORTB pin configured as an output

bit 3-0     Unimplemented: Read as ‘0’

REGISTER 8-8:        LATB: PORTB DATA LATCH REGISTER

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

LATB7              LATB6     LATB5             LATB4           —             —                  —            —

bit 7                                                                                                             bit  0

Legend:

R = Readable bit             W = Writable bit          U = Unimplemented bit,     read  as ‘0’

-n = Value at POR            ‘1’ = Bit is set          ‘0’ = Bit is cleared             x = Bit is  unknown

bit 7-4     LATB<7:4>: RB<7:4> Port I/O Output Latch Register bits

bit 3-0     Unimplemented: Read as ‘0’

DS40001365F-page 80                                                              2009-2016 Microchip Technology Inc.
                                                          PIC18(L)F1XK22

REGISTER 8-9:      WPUB: WEAK PULL-UP PORTB REGISTER

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

WPUB7              WPUB6  WPUB5               WPUB4  —                     —                  —            —

bit 7                                                                                                           bit  0

Legend:

R = Readable bit          W = Writable bit           U = Unimplemented bit,     read  as ‘0’

-n = Value at POR         ‘1’ = Bit is set           ‘0’ = Bit is cleared             x = Bit is  unknown

bit 7-4  WPUB<7:4>: Weak Pull-up Enable bit

         1 = Pull-up enabled

         0 = Pull-up disabled

bit 3-0  Unimplemented: Read as ‘0’

REGISTER 8-10:     IOCB: INTERRUPT-ON-CHANGE PORTB REGISTER

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

IOCB7              IOCB6               IOCB5  IOCB4  —                     —                  —            —

bit 7                                                                                                           bit  0

Legend:

R = Readable bit          W = Writable bit           U = Unimplemented bit, read      as ‘0’

-n = Value at POR         ‘1’ = Bit is set           ‘0’ = Bit is cleared             x = Bit is  unknown

bit 7-4  IOCB<7:4>: Interrupt-on-change bits

         1 = Interrupt-on-change enabled

         0 = Interrupt-on-change disabled

bit 3-0  Unimplemented: Read as ‘0’

 2009-2016 Microchip Technology Inc.                                                         DS40001365F-page 81
PIC18(L)F1XK22

TABLE 8-3:      PORTB I/O SUMMARY

     Pin             Function  TRIS     I/O  I/O                          Description

                               Setting       Type

RB4/AN10/SDI/        RB4       0        O    DIG   LATB<4> data output.

SDA                            1        I    TTL   PORTB<4> data input; Programmable weak pull-up.

                     AN10      1        I    ANA   ADC input channel 10.

                     SDI       1        I    ST    SPI data input (MSSP module).

                     SDA       1        O    DIG   I2C data output (MSSP module).

                               1        I    I2C   I2C data input (MSSP module); input type depends on module setting.

RB5/AN11/RX/DT       RB5       0        O    DIG   LATB<5> data output.

                               1        I    TTL   PORTB<5> data input; Programmable weak pull-up.

                     AN11      1        I    ANA   ADC input channel 11.

                     RX        1        I    ST    Asynchronous serial receive data input (USART module).

                     DT        1        O    DIG   Synchronous serial data output (USART module); takes priority over

                                                   PORT data.

                               1        I    ST    Synchronous serial data input (USART module). User must configure

                                                   as an input.

RB6/SCK/SCL          RB6       0        O    DIG   LATB<6> data output.

                               1        I    TTL   PORTB<6> data input; Programmable weak pull-up.

                     SCK       0        O    DIG   SPI clock output (MSSP module).

                               1        I    ST    SPI clock input (MSSP module).

                     SCL       0        O    DIG   I2C clock output (MSSP module).

                               1        I    I2C   I2C clock input (MSSP module); input type depends on module setting.

RB7/TX/CK            RB7       0        O    DIG   LATB<7> data output.

                               1        I    TTL   PORTB<7> data input; Programmable weak pull-up.

                     TX        1        O    DIG   Asynchronous serial transmit data output (USART module).

                     CK        1        O    DIG   Synchronous serial clock output (USART module).

                               1        I    ST    Synchronous serial clock input (USART module).

Legend:    DIG = Digital level output; TTL = TTL input buffer; ST = Schmitt Trigger input buffer; ANA = Analog level input/output;
           I2C = Schmitt Trigger input with I2C; x = Don’t care (TRIS bit does not affect port direction or is overridden for this option).

DS40001365F-page 82                                                                 2009-2016 Microchip Technology Inc.
                                                                PIC18(L)F1XK22

TABLE 8-4:  SUMMARY OF REGISTERS ASSOCIATED WITH PORTB

                                                                                              Reset

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

                                                                                              on page

ANSELH      —         —                —        —        ANS11  ANS10          ANS9    ANS8   247

INTCON      GIE/GIEH  PEIE/GIEL        TMR0IE   INT0IE   RABIE  TMR0IF         INT0IF  RABIF  244

INTCON2     RABPU     INTEDG0          INTEDG1  INTEDG2  —      TMR0IP         —       RABIP  244

IOCB        IOCB7     IOCB6            IOCB5    IOCB4                                         247

LATB        LATB7     LATB6            LATB5    LATB4    —      —              —       —      247

PORTB       RB7       RB6              RB5      RB4      —      —              —       —      247

RCSTA       SPEN      RX9              SREN     CREN     ADDEN  FERR           OERR    RX9D   246

SLRCON      —         —                —        —        —      SLRC           SLRB    SLRA   247

SSPCON1     WCOL      SSPOV            SSPEN    CKP      SSPM3  SSPM2          SSPM1   SSPM0  245

TRISB       TRISB7    TRISB6           TRISB5   TRISB4   —      —              —       —      247

TXSTA       CSRC      TX9              TXEN     SYNC     SENDB  BRGH           TRMT    TX9D   246

WPUB        WPUB7     WPUB6            WPUB5    WPUB4    —      —              —       —      247

Legend:  —  = unimplemented, read as ‘0’. Shaded cells are not used by PORTB.

 2009-2016 Microchip Technology Inc.                                                  DS40001365F-page 83
PIC18(L)F1XK22

8.3      PORTC, TRISC and LATC                                      All the pins on PORTC are implemented with Schmitt

         Registers                                                  Trigger  input    buffer.      Each        pin  is  individually

                                                                    configurable as an input or output.

PORTC    is  an   8-bit  wide,  bidirectional     port.  The        Note:    On       a  Power-on      Reset,       RC<7:6>      and

corresponding data direction register is TRISC. Setting                      RC<3:0> are configured as analog inputs

a TRISC bit (= 1) will make the corresponding PORTC                          and read as ‘0’.

pin an input (i.e., disable the output driver). Clearing a

TRISC bit (= 0) will make the corresponding PORTC

pin an output (i.e., enable the output driver and put the           EXAMPLE 8-3:              INITIALIZING PORTC

contents of the output latch on the selected pin).                  CLRF     PORTC       ;    Initialize       PORTC    by

The    PORTC  Data       Latch  register  (LATC)    is   also                            ;    clearing     output

memory mapped. Read-modify-write operations on the                                       ;    data   latches

LATC register read and write the latched output value               CLRF     LATC        ;    Alternate        method

for PORTC.                                                                               ;    to   clear   output

                                                                                         ;    data   latches

                                                                    MOVLW    0CFh        ;    Value  used      to

                                                                                         ;    initialize data

                                                                                         ;    direction

                                                                    MOVWF    TRISC       ;    Set   RC<3:0>    as   inputs

                                                                                         ;    RC<5:4>      as  outputs

                                                                                         ;    RC<7:6>      as  inputs

REGISTER 8-11:           PORTC: PORTC REGISTER

     R/W-x           R/W-x      R/W-x                    R/W-x  R/W-x                 R/W-x          R/W-x              R/W-x

       RC7           RC6                RC5              RC4        RC3               RC2              RC1                  RC0

bit 7                                                                                                                            bit  0

Legend:

R = Readable bit                W = Writable bit                U = Unimplemented bit, read        as ‘0’

-n = Value at POR               ‘1’ = Bit is set                ‘0’ = Bit is cleared               x = Bit is unknown

bit 7-0          RC<7:0>: PORTC I/O Pin bits

                 1 = Port pin is > VIH

                 0 = Port pin is < VIL

REGISTER 8-12:           TRISC: PORTC TRI-STATE REGISTER

     R/W-1          R/W-1       R/W-1                    R/W-1  R/W-1                 R/W-1          R/W-1              R/W-1

     TRISC7        TRISC6       TRISC5              TRISC4      TRISC3                TRISC2         TRISC1             TRISC0

bit 7                                                                                                                            bit  0

Legend:

R = Readable bit                W = Writable bit                U = Unimplemented bit, read        as ‘0’

-n = Value at POR               ‘1’ = Bit is set                ‘0’ = Bit is cleared               x = Bit is unknown

bit 7-0          TRISC<7:0>: PORTC Tri-State Control bits

                 1 = PORTC pin configured as an input (tri-stated)

                 0 = PORTC pin configured as an output

DS40001365F-page 84                                                                       2009-2016 Microchip Technology Inc.
                                                                 PIC18(L)F1XK22

REGISTER 8-13:     LATC: PORTC DATA LATCH REGISTER

R/W-x              R/W-x               R/W-x  R/W-x  R/W-x                 R/W-x         R/W-x        R/W-x

LATC7              LATC6               LATC5  LATC4  LATC3                 LATC2  LATC1               LATC0

bit 7                                                                                                 bit 0

Legend:

R = Readable bit          W = Writable bit           U = Unimplemented bit, read as ‘0’

-n = Value at POR         ‘1’ = Bit is set           ‘0’ = Bit is cleared         x = Bit is unknown

bit 7-0  LATC<7:0>: RB<7:0> Port I/O Output Latch Register bits

 2009-2016 Microchip Technology Inc.                                                    DS40001365F-page 85
PIC18(L)F1XK22

TABLE 8-5:      PORTC I/O SUMMARY

      Pin       Function    TRIS     I/O  I/O                             Description

                            Setting       Type

RC0/AN4/C2IN+        RC0    0        O    DIG   LATC<0> data output.

                            1        I    ST    PORTC<0> data input.

                     AN4    1        I    ANA   A/D input channel 4.

                     C2IN+  1        I    ANA   Comparators C2 noninverting input.

RC1/AN5/             RC1    0        O    DIG   LATC<1> data output.

C12IN1-                     1        I    ST    PORTC<1> data input.

                     AN5    1        I    ANA   A/D input channel 5.

                C12IN1-     1        I    ANA   Comparators C1 and C2 inverting input, channel 1.

RC2/AN6/             RC2    0        O    DIG   LATC<2> data output.

C12IN2-/P1D                 1        I    ST    PORTC<2> data input.

                     AN6    1        I    ANA   A/D input channel 6.

                C12IN2-     1        I    ANA   Comparators C1 and C2 inverting input, channel 2.

                     P1D    0        O    DIG   ECCP1 Enhanced PWM output, channel D.

RC3/AN7/             RC3    0        O    DIG   LATC<3> data output.

C12IN3-/P1C/                1        I    ST    PORTC<3> data input.

PGM                  AN7    1        I    ANA   A/D input channel 7.

                C12IN3-     1        I    ANA   Comparators C1 and C2 inverting input, channel 3.

                     P1C    0        O    DIG   ECCP1 Enhanced PWM output, channel C.

                     PGM    x        I    ST    Single-Supply Programming mode entry (ICSP™). Enabled by LVP

                                                Configuration bit; all other pin functions disabled.

RC4/C2OUT/P1B/       RC4    0        O    DIG   LATC<4> data output.

SRNQ                        1        I    ST    PORTC<4> data input.

                C2OUT       0        O    DIG   Comparator 2 output.

                     P1B    0        O    DIG   ECCP1 Enhanced PWM output, channel B.

                     SRNQ   0        O    DIG   SR Latch inverted output

RC5/CCP1/P1A         RC5    0        O    DIG   LATC<5> data output.

                            1        I    ST    PORTC<5> data input.

                     CCP1   0        O    DIG   ECCP1 compare or PWM output.

                            1        I    ST    ECCP1 capture input.

                     P1A    0        0    DIG   ECCP1 Enhanced PWM output, channel A.

RC6/AN8/SS           RC6    0        O    DIG   LATC<6> data output.

                            1        I    ST    PORTC<6> data input.

                     AN8    1        I    ANA   A/D input channel 8.

                     SS     1        I    TTL   Slave select input for SSP (MSSP module)

RC7/AN9/SDO          RC7    0        O    DIG   LATC<7> data output.

                            1        I    ST    PORTC<7> data input.

                     AN9    1        I    ANA   A/D input channel 9.

                     SDO    0        O    DIG   SPI data output (MSSP module).

Legend:    DIG = Digital level output; TTL = TTL input buffer; ST = Schmitt Trigger input buffer; ANA = Analog level input/output;

           x = Don’t care (TRIS bit does not affect port direction or is overridden for this option).

DS40001365F-page 86                                                                                     2009-2016 Microchip Technology  Inc.
                                                                  PIC18(L)F1XK22

TABLE 8-6:  SUMMARY OF REGISTERS                ASSOCIATED WITH PORTC

                                                                                          Reset

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

                                                                                          on page

ANSEL       ANS7      ANS6             ANS5     ANS4     ANS3     ANS2    ANS1    ANS0    247

ANSELH      —         —                —        —        ANS11    ANS10   ANS9    ANS8    247

CCP1CON     P1M1      P1M0             DC1B1    DC1B0    CCP1M3   CCP1M2  CCP1M1  CCP1M0  246

ECCP1AS     ECCPASE   ECCPAS2          ECCPAS1  ECCPAS0  PSSAC1   PSSAC0  PSSBD1  PSSBD0  246

INTCON      GIE/GIEH  PEIE/GIEL        TMR0IE   INT0IE   RABIE    TMR0IF  INT0IF  RABIF   244

INTCON2     RABPU     INTEDG0          INTEDG1  INTEDG2  —        TMR0IP  —       RABIP   244

INTCON3     INT2IP    INT1IP           —        INT2IE   INT1IE   —       INT2IF  INT1IF  244

LATC        LATC7     LATC6            LATC5    LATC4    LATC3    LATC2   LATC1   LATC0   247

PORTC       RC7       RC6              RC5      RC4      RC3      RC2     RC1     RC0     247

PSTRCON     —         —                —        STRSYNC  STRD     STRC    STRB    STRA    246

VREFCON1    D1EN      D1LPS            DAC1OE   ---      D1PSS1   D1PSS0  ---     D1NSS   246

SLRCON      —         —                —        —        —        SLRC    SLRB    SLRA    247

SSPCON1     WCOL      SSPOV            SSPEN    CKP      SSPM3    SSPM2   SSPM1   SSPM0   245

TRISC       TRISC7    TRISC6           TRISC5   TRISC4   TRISC3   TRISC2  TRISC1  TRISC0  247

T1CON       RD16      T1RUN            T1CKPS1  T1CKPS0  T1OSCEN  T1SYNC  TMR1CS  TMR1ON  245

T3CON       RD16      —                T3CKPS1  T3CKPS0  T3CCP1   T3SYNC  TMR3CS  TMR3ON  246

 2009-2016 Microchip Technology Inc.                                             DS40001365F-page 87
PIC18(L)F1XK22

8.4        Port Analog Control                                       registers.  Setting   an     ANSx  bit  high  will  disable  the

Some port pins are multiplexed with analog functions                 associated digital input buffer and cause all reads of

such     as      the  Analog-to-Digital  Converter              and  that pin to return ‘0’ while allowing analog functions of

comparators. When these I/O pins are to be used as                   that pin to operate correctly.

analog inputs it is necessary to disable the digital input           The state of the ANSx bits has no affect on digital

buffer to avoid excessive current caused by improper                 output functions. A pin with the associated TRISx bit

biasing  of  the      digital  input.  Individual  control  of  the  clear and ANSx bit set will still operate as a digital

digital  input   buffers       on  pins  which     share    analog   output but the Input mode will be analog.

functions    is  provided      by  the   ANSEL     and     ANSELH

REGISTER 8-14:                 ANSEL: ANALOG SELECT REGISTER

      R/W-1           R/W-1              R/W-1              R/W-1    R/W-1                 R/W-1        R/W-1            R/W-1

     ANS7             ANS6               ANS5               ANS4     ANS3                  ANS2         ANS1             ANS0

bit 7                                                                                                                    bit 0

Legend:

R = Readable bit                        W = Writable bit             U = Unimplemented bit, read as ‘0’

-n = Value at POR                        ‘1’ = Bit is set            ‘0’ = Bit is cleared         x = Bit is unknown

bit  7                ANS7: RC3 Analog Select Control bit

                      1 = Digital input buffer of RC3 is disabled

                      0 = Digital input buffer of RC3 is enabled

bit  6                ANS6: RC2 Analog Select Control bit

                      1 = Digital input buffer of RC2 is disabled

                      0 = Digital input buffer of RC2 is enabled

bit  5                ANS5: RC1 Analog Select Control bit

                      1 = Digital input buffer of RC1 is disabled

                      0 = Digital input buffer of RC1 is enabled

bit  4                ANS4: RC0 Analog Select Control bit

                      1 = Digital input buffer of RC0 is disabled

                      0 = Digital input buffer of RC0 is enabled

bit  3                ANS3: RA4 Analog Select Control bit

                      1 = Digital input buffer of RA4 is disabled

                      0 = Digital input buffer of RA4 is enabled

bit  2                ANS2: RA2 Analog Select Control bit

                      1 = Digital input buffer of RA2 is disabled

                      0 = Digital input buffer of RA2 is enabled

bit  1                ANS1: RA1 Analog Select Control bit

                      1 = Digital input buffer of RA1 is disabled

                      0 = Digital input buffer of RA1 is enabled

bit  0                ANS0: RA0 Analog Select Control bit

                      1 = Digital input buffer of RA0 is disabled

                      0 = Digital input buffer of RA0 is enabled

DS40001365F-page 88                                                                         2009-2016 Microchip Technology Inc.
                                                                 PIC18(L)F1XK22

REGISTER 8-15:     ANSELH: ANALOG SELECT HIGH REGISTER

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

        —          —                   —    —             ANS11                 ANS10  ANS9                ANS8

bit 7                                                                                                      bit 0

Legend:

R = Readable bit        W = Writable bit                  U = Unimplemented bit, read as ‘0’

-n = Value at POR       ‘1’ = Bit is set                  ‘0’ = Bit is cleared         x = Bit is unknown

bit  7-4     Unimplemented: Read as ‘0’

bit  3       ANS11: RB5 Analog Select Control bit

             1 = Digital input buffer of RB5 is disabled

             0 = Digital input buffer of RB5 is enabled

bit  2       ANS10: RB4 Analog Select Control bit

             1 = Digital input buffer of RB4 is disabled

             0 = Digital input buffer of RB4 is enabled

bit  1       ANS9: RC7 Analog Select Control bit

             1 = Digital input buffer of RC7 is disabled

             0 = Digital input buffer of RC7 is enabled

bit  0       ANS8: RC6 Analog Select Control bit

             1 = Digital input buffer of RC6 is disabled

             0 = Digital input buffer of RC6 is enabled

 2009-2016 Microchip Technology Inc.                                                         DS40001365F-page 89
PIC18(L)F1XK22

8.5       Port Slew Rate Control

The output slew rate of each port is programmable to

select either the standard transition rate or a reduced

transition rate of 0.1 times the standard to minimize

EMI. The reduced transition time is the default slew

rate for all ports.

REGISTER 8-16:       SLRCON: SLEW RATE CONTROL REGISTER

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

       —             —    —                      —                       —            SLRC         SLRB          SLRA

bit 7                                                                                                            bit    0

Legend:

R = Readable bit          W = Writable bit               U = Unimplemented bit, read as ‘0’

-n = Value at POR         ‘1’ = Bit is set               ‘0’ = Bit is cleared                x = Bit is unknown

bit 7-3              Unimplemented: Read as ‘0’

bit 2                SLRC: PORTC Slew Rate Control bit

                     1 = All outputs on PORTC slew at 0.1 times the standard rate

                     0 = All outputs on PORTC slew at the standard rate

bit 1                SLRB: PORTB Slew Rate Control bit

                     1 = All outputs on PORTB slew at 0.1 times the standard rate

                     0 = All outputs on PORTB slew at the standard rate

bit 0                SLRA: PORTA Slew Rate Control bit

                     1 = All outputs on PORTA slew at 0.1 times the standard rate(1)

                     0 = All outputs on PORTA slew at the standard rate

Note     1:  The slew rate of RA4 defaults to standard rate when the pin is used      as  CLKOUT.

DS40001365F-page 90                                                                    2009-2016 Microchip Technology Inc.
                                                                               PIC18(L)F1XK22

9.0          TIMER0 MODULE                                     The T0CON register (Register 9-1) controls all aspects

The Timer0 module incorporates the following features:         of     the  module’s   operation,   including  the    prescale

                                                               selection. It is both readable and writable.

•  Software selectable operation as a timer or                 A simplified block diagram of the Timer0 module in 8-bit

   counter in both 8-bit or 16-bit modes                       mode        is  shown  in    Figure 9-1.  Figure 9-2  shows  a

•  Readable and writable registers                             simplified block diagram of the Timer0 module in 16-bit

•  Dedicated 8-bit, software programmable                      mode.

   prescaler

•  Selectable clock source (internal or external)

•  Edge select for external clock

•  Interrupt-on-overflow

REGISTER 9-1:             T0CON: TIMER0 CONTROL REGISTER

        R/W-1         R/W-1            R/W-1         R/W-1     R/W-1                 R/W-1         R/W-1             R/W-1

        TMR0ON        T08BIT           T0CS          T0SE           PSA              T0PS2        T0PS1              T0PS0

   bit 7                                                                                                             bit 0

   Legend:

   R = Readable bit                W = Writable bit            U = Unimplemented bit, read as ‘0’

   -n = Value at POR               ‘1’ = Bit is set            ‘0’ = Bit is cleared         x = Bit is unknown

   bit  7       TMR0ON: Timer0 On/Off Control bit

                1 = Enables Timer0

                0 = Stops Timer0

   bit  6       T08BIT: Timer0 8-bit/16-bit Control bit

                1 = Timer0 is configured as an 8-bit timer/counter

                0 = Timer0 is configured as a 16-bit timer/counter

   bit  5       T0CS: Timer0 Clock Source Select bit

                1 = Transition on T0CKI pin

                0 = Internal instruction cycle clock (CLKOUT)

   bit  4       T0SE: Timer0 Source Edge Select bit

                1 = Increment on high-to-low transition on T0CKI pin

                0 = Increment on low-to-high transition on T0CKI pin

   bit  3       PSA: Timer0 Prescaler Assignment bit

                1 = TImer0 prescaler is NOT assigned. Timer0 clock input bypasses prescaler.

                0 = Timer0 prescaler is assigned. Timer0 clock input comes from prescaler output.

   bit  2-0     T0PS<2:0>: Timer0 Prescaler Select bits

                111 = 1:256 prescale value

                110 = 1:128 prescale value

                101 = 1:64 prescale value

                100 = 1:32 prescale value

                011 = 1:16 prescale value

                010 = 1:8     prescale value

                001 = 1:4     prescale value

                000 = 1:2     prescale value

 2009-2016 Microchip Technology Inc.                                                                    DS40001365F-page 91
PIC18(L)F1XK22

9.1            Timer0 Operation                                                     9.2               Timer0 Reads and Writes in

Timer0 can operate as either a timer or a counter; the                                                16-Bit Mode

mode    is     selected     with  the   T0CS   bit    of  the  T0CON                TMR0H is not the actual high byte of Timer0 in 16-bit

register.      In  Timer    mode    (T0CS      =    0),   the  module               mode; it is actually a buffered version of the real high

increments on every clock by default unless a different                             byte of Timer0 which is neither directly readable nor

prescaler          value    is    selected     (see       Section 9.3               writable (refer to Figure 9-2). TMR0H is updated with

“Prescaler”). Timer0 incrementing is inhibited for two                              the contents of the high byte of Timer0 during a read of

instruction cycles following a TMR0 register write. The                             TMR0L. This provides the ability to read all 16 bits of

user can work around this by adjusting the value written                            Timer0 without the need to verify that the read of the

to the TMR0 register to compensate for the anticipated                              high       and    low     byte  were      valid.   Invalid      reads   could

missing increments.                                                                 otherwise occur due to a rollover between successive

The Counter mode is selected by setting the T0CS bit                                reads of the high and low byte.

(= 1). In this mode, Timer0 increments either on every                              Similarly, a write to the high byte of Timer0 must also

rising     or      falling  edge    of    the  T0CKI      pin.      The             take place through the TMR0H Buffer register. Writing

incrementing edge is determined by the Timer0 Source                                to TMR0H does not directly affect Timer0. Instead, the

Edge Select bit, T0SE of the T0CON register; clearing                               high byte of Timer0 is updated with the contents of

this  bit  selects    the   rising     edge.   Restrictions    on        the        TMR0H when a write occurs to TMR0L. This allows all

external clock input are discussed below.                                           16 bits of Timer0 to be updated at once.

An external clock source can be used to drive Timer0;

however,       it  must     meet    certain    requirements         (see

Table 26-17) to ensure that the external clock can be

synchronized          with  the   internal     phase  clock    (TOSC).

There      is  a   delay    between      synchronization       and       the

onset of incrementing the timer/counter.

FIGURE 9-1:                     TIMER0 BLOCK DIAGRAM (8-BIT MODE)

                            FOSC/4          0

                                                                           1        Sync with                                          Set

                                            1                                       Internal                     TMR0L                 TMR0IF
                                                                                                                                       on Overflow
           T0CKI pin                                Programmable           0        Clocks

                      T0SE                            Prescaler                     (2 TCY Delay)

                      T0CS                                3                                                         8

                      T0PS<2:0>                                                                               8

                      PSA                                                                                                              Internal Data Bus

               Note:        Upon Reset,   Timer0 is enabled in 8-bit mode     with  clock input from  T0CKI.  TMR0 Prescaler  is  set  to maximum (1:256),

                            but on Reset  is not assigned to the timer.

DS40001365F-page 92                                                                                               2009-2016 Microchip Technology Inc.
                                                                                                PIC18(L)F1XK22

FIGURE 9-2:                   TIMER0 BLOCK DIAGRAM (16-BIT MODE)

                 FOSC/4       0

                                                               1        Sync with                                                  Set

                              1                                         Internal                TMR0L            TMR0              TMR0IF
                                                                                                                 High Byte
T0CKI pin                              Programmable                       Clocks                                                   on Overflow
                                                               0                                                            8
                                                Prescaler
            T0SE                                                        (2 TCY Delay)

            T0CS                                3                                                                                  Read TMR0L

            T0PS<2:0>                                                                                                              Write TMR0L

            PSA                                                                                                    8

                                                                                                       8

                                                                                                                 TMR0H

                                                                                                                      8

                                                                                                          8

                                                                                                                                   Internal Data Bus

     Note:       Upon Reset, Timer0 is enabled in 8-bit mode with clock input from T0CKI. TMR0 Prescaler is set to maximum (1:256), but on Reset

                 is not assigned to the timer.

9.3       Prescaler                                                                9.3.1        SWITCHING PRESCALER

An 8-bit counter is available as a prescaler for the Timer0                                     ASSIGNMENT

module. The prescaler is not directly readable or writable;                        The    prescaler  assignment       is    fully  under     software

its value is set by the PSA and T0PS<2:0> bits of the                              control and can be changed “on-the-fly” during program

T0CON       register  which        determine    the        prescaler               execution.

assignment and prescale ratio.

Clearing    the  PSA     bit  assigns  the      prescaler      to  the             9.4    Timer0 Interrupt

Timer0    module.     When    the   prescaler        is    assigned,               The    TMR0  interrupt    is  generated         when    the    TMR0

prescale    values    from    1:2  through      1:256      in  integer             register overflows from FFh to 00h in 8-bit mode, or

power-of-2 increments are selectable.                                              from FFFFh to 0000h in 16-bit mode. This overflow sets

When assigned to the Timer0 module, all instructions                               the TMR0IF flag bit. The interrupt can be masked by

writing to the TMR0 register (e.g., CLRF             TMR0, MOVWF                   clearing the TMR0IE bit of the INTCON register. Before

TMR0, BSF   TMR0, etc.) clear the prescaler count.                                 re-enabling  the    interrupt,     the   TMR0IF      bit  must      be

Note:       Writing      to   TMR0  when        the  prescaler     is              cleared by software in the Interrupt Service Routine.

            assigned to Timer0 will clear the prescaler                            Since Timer0 is shut down in Sleep mode, the TMR0

            count but will not change the prescaler                                interrupt cannot awaken the processor from Sleep.

            assignment.

TABLE 9-1:            REGISTERS ASSOCIATED                         WITH TIMER0

                                                                                                                                             Reset

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

                                                                 &nb