Enhanced Mid-Range PIC16F1xxx Data Memory
Enhanced Mid-Range Memory Organization
Enhanced Mid-Range PIC® MCUs can contain up to 4096 bytes of addressable data memory. The data memory is partitioned into up to 32 memory banks with 128 bytes in each bank.
PIC16F1xxx data memory contains five data elements:
- Core registers
- Special Function Registers (SFGs)
- General purpose memory
- Common memory
- Shadow registers
Core Registers
The first 12 entries of each PIC16F1xxx data memory bank contain registers referred to as the core registers. These 12 registers are repeated on each bank. The core registers can be accessed from any active bank.
Core registers include information for:
- General processing
- Direct addressing of memory
- Indirect addressing of memory
- Interrupt control
General Processing Registers
STATUS Register
TO - Indicates Watchdog Timer has expired
PD - Sleep instruction status
Z - Indicates if last instruction resulted in a 0
DC - last instruction resulted in a carry-out from the 4th low-order bit
C - last instruction resulted in a carry-out from Most Significant bit
WREG Register
Referred to as the Working Register or W register, WREG serves as an accumulator.
Direct Addressing Registers
BSR (Bank Select Register)
The lower five bits of BSR contain the bank number (0-31) of the active data bank.
PCL and PCLATH Registers
These registers are used when writing to or reading from the 15-bit Program Counter.
Indirect Addressing Registers
INDF0, FSR0L, FSR0H,
INDF1, FSR1L, FSR1H
These six registers control the two indirect addressing channels on the MCU.
Interrupt Control Register
INTCON
GIE - Global interrupt enable
PEIE - Peripheral interrupt enable
TMR0IE - Timer 0 interrupt enable
INTE - External interrupt enable
IOCIE - Interrupt on change enable
TMR0IF - Timer 0 interrupt flag
INTF - External interrupt flag
IOCIF - Interrupt on change flag
INTCON is the control register for the PIC16F1xxx interrupts.
Special Functions Registers (SFRs)
In each of the PIC16F1xxx's data banks there are up to 20 Special Function Registers (SFRs). The SFRs are located just below the core registers starting at address xxCh. SFRs control the PIC16F1xxx peripherals, digital I/O ports , and oscillator settings.
Unlike the core registers, SFRs are NOT duplicated on each bank. Application programs need to ensure the appropriate bank has been selected before accessing an SFR.
General Purpose Memory
The general purpose memory (RAM) is located on each memory bank just below the SFRs. This memory is available for application data.
Common Memory
The last 16 bytes of bank 0 (addresses 70h - 7Fh) are repeated on every data bank. This allows application programs to access variables located in these addresses without having to set BSR.
Shadow Registers
Located in the bottom of bank 31 are the PIC16F1xxx shadow and stack registers. The shadow registers save the program's context by capturing several core registers when an interrupt occurs. The core registers are restored when a Return From Interrupt (RETFIE) instruction is executed.