*8-bit, 8-pin Devices Protected by Microchip’s Low Pin Count Patent: U.S. Patent No. 5,847,450. Additional U.S. and
foreign patents and applications may be issued or pending.
Note the following details of the code protection feature on Microchip devices:
•Microchip products meet the specification contained in their particular Microchip Data Sheet.
•Microchip believes that its family of products is one of the most secure families of its kind on the market today, when used in the
intended manner and under normal conditions.
•There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our
knowledge, require using the Microchip products in a manner outside the operating specifications contained in Microchip’s Data
Sheets. Most likely, the person doing so is engaged in theft of intellectual property.
•Microchip is willing to work with the customer who is concerned about the integrity of their code.
•Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not
mean that we are guaranteeing the product as “unbreakable.”
Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of our
products. Attempts to break Microchip’s code protection feature may be a violation of the Digit al Millennium Copyright Act. If suc h a c t s
allow unauthorized access to your software or other copyrighted work, you may have a right to sue for relief under that Act.
Information contained in this publication regarding device
applications and the like is provided only for your convenience
and may be superseded by updates. It is your responsibility to
ensure that your application meets with your specifications.
MICROCHIP MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED,
WRITTEN OR ORAL, STATUTORY OR OTHERWISE,
RELATED TO THE INFORMATION, INCLUDING BUT NOT
LIMITED TO ITS CONDITION, QUALITY, PERFORMANCE,
MERCHANTABILITY OR FITNESS FOR PURPOSE.
Microchip disclaims all liability arising from this information and
its use. Use of M icrochip’s prod ucts as critical components in
life support systems is not authorized except with express
written approval by Microchip. No licenses are conveyed,
implicitly or otherwise, under any Microchip intellectual property
rights.
Trademarks
The Microchip name and logo, the Microchip logo, Accuron,
dsPIC, K
EELOQ, microID, MPLAB, PIC, PICmicro, PICSTART,
PRO MATE, PowerSmart, rfPIC, and SmartShunt are
registered trademarks of Microchip Technology Incorporated
in the U.S.A. and other countries.
AmpLab, FilterLab, Migratable Memory, MXDEV, MXLAB,
PICMASTER, SEEVAL, SmartSensor and The Embedded
Control Solutions Company are registered trademarks of
Microchip Technology Incorporated in the U.S.A.
Analog-for-the-Digital Age, Application Maestro, dsPICDEM,
dsPICDEM.net, dsPICworks, ECAN, ECONOMONITOR,
FanSense, FlexROM, fuzzyLAB, In-Circuit Serial
Programming, ICSP, ICEPIC, Linear Active Thermistor,
MPASM, MPLIB, MPLINK, MP SIM, PICkit , PICDEM,
PICDEM.net, PICLAB, PICtail, PowerCal, PowerInfo,
PowerMate, PowerTool, rfLAB, rfPICDEM, Select Mode,
Smart Serial, SmartTel, Total Endurance and WiperLock are
trademarks of Microchip Technology Incorporated in the
U.S.A. and other countries.
SQTP is a service mark of Microchip Technology Incorporated
in the U.S.A.
All other trademarks mentioned herein are property of their
respective companies.
Microchip received ISO/TS-16949:2002 quality system certification for
its worldwide headquarters, design and wafer fabrication facilities in
Chandler and Tempe, Arizona and Mountain View, California in
October 2003. The Company’s quality system processes and
procedures are for its PICmicro
devices, Serial EEPROMs, microperipherals, nonvolatile memory and
analog products. In addition, Microchip’s quality system for the design
and manufacture of development systems is ISO 9001:2000 certified.
6.0Timer0 Module and TMR0 Register........................................................................................................................................... 33
7.0Special Feature s Of The CPU.......... ......................... ............. ............ .......................... .............................................................. 39
8.0Instruction Set Summary............................................................................................................................................................ 55
11.0 DC and AC Characteristics Graphs and Charts................................................................... .... .... .............................................. 79
Index .................................................................................................................................................................................................... 91
The Microchip Web Site........................... ............ ............. ............. ............ ............. ............ ... .............................................................. 93
Customer Change Notification Service ................................................................................................................................................ 93
It is our intention to provide our valued customers with t he best docume ntation possible to ensure successf ul use of your Mic rochip products. To this end, we will continue to improve our publications to better suit your needs. Our publications will be refined
and enhanced as new volumes and updates are introduced.
If you have any questions or comments regarding this publication, please contact the Marketing Communications Department via
E-mail at docerrors@mail.microchip.com or fax the Reader Response Form in the back of this data sheet to (480) 792-4150.
We welcome your feedback.
Most Current Data Sheet
To obtain the most up-to-date version of this data sheet, please register at our Worldwide Web site at:
http://www.microchip.com
You can determine the version of a data sheet by examining its literature number found on the bottom outside corner of any page.
The last character of the literature number is the version number, (e.g., DS30000A is version A of document DS30000).
Errata
An errata sheet, describing minor operational differences from the data sheet and recommended workarounds, may exist for current
devices. As device/documentation issues become known to us, we will publish an errata sheet. The errata will specify the revision
of silicon and revision of document to which it applies.
To determine if an errata sheet exists for a particular device, please check with one of the following:
• Microchip’s Worldwide Web site; http://www.microchip.com
• Your local Microchip sales office (see last page)
• The Microchip Corporate Literature Center; U.S. FAX: (480) 792-7277
When contacting a sales office or the literature center, please specify which device, revision of silicon and data sheet (include lit-
erature number) you are using.
Customer Notification System
Register on our web site at www.microchip.com/cn to receive the most current information on all of our products.
The PIC12F508/509/16F505 devices from Microchip
T ec hnology are lo w-cost, hig h-performance , 8-bit, fullystatic, Flash-based CMOS microcontrollers. They
employ a RISC architecture with only 33 single-word/
single-cycle instructions. All instructions are single
cycle (200 μs) except for program branches, which
take two cycles. The PIC12F508/509/16F505 devices
deliver performanc e an order of magnit ude high er than
their competitors in t he same price c ategory. Th e 12-bit
wide instructions are highly symmetrical, resulting in a
typical 2:1 code compression over other 8-bit
microcontrollers in its class. The easy-to-use and easy
to remember instruction set reduces development time
significantly.
The PIC12F508/509/16F505 products are equipped
with special features that reduce system cost and
power requirements. The Power-on Reset (POR) and
Device Reset T imer (DR T) elimina te the need for external Reset circuitry. There are four oscillator configurations to choose from (six on the PIC16F 50 5), inclu din g
INTRC Internal Oscillator mode and the power-saving
LP (Low-Power) Oscillator mode. Power-saving Sleep
mode, Watchdog Timer and code protection features
improve system cost, power and reliability.
The PIC12F508/509/16F505 devices are available in
the cost-e ffective Fl ash progr ammable ver sion, which
is suitable for production in any volume. The customer
can take full advantage of Microchip’s price leadership
in Flash programmable microcontrollers, while
benefiting from the Flash programmable flexibility.
The PIC12F508/509/16F505 products are supported
by a full-featured mac ro assembler, a software simulator, an in-circuit emulator, a ‘C’ compiler, a low-cost
development programmer and a full featured programmer. All the tools are supported on IBM
compatible machines.
®
PC and
1.1Applications
The PIC12F508/509/16F505 devices fit in applications
ranging from personal care appliances and security
systems to low-power remote transmitters/receivers.
The Flash technology makes customizing application
programs (transmitter codes, appliance settings,
receiver frequencies, etc.) extremely fast and convenient. The small footpri nt p ackag es, for t hrough h ole or
surface mounting, make these microcontrollers perfect
for applications with space limitations. Low cost, low
power , high pe rformance, ea se of use and I/O fl exibilit y
make the PIC12F508/509/16F505 devices very versatile even in areas where no microcontroller use has
been considered b efore (e.g., tim er functions, lo gic and
PLDs in larger system s and co processor applications ).
T ABLE 1-1:PIC12F508/509/16F505 DEVICES
PIC12F508PIC12F509PIC16F505
ClockMaximum Frequency of Operation (MHz)4420
MemoryFlash Program Memory 51210241024
Data Memory (bytes)254172
PeripheralsTimer Module(s)TMR0TMR0TMR0
Wake-up from Sleep on Pin ChangeYesYesYes
FeaturesI/O Pins5511
Input Pins111
Internal Pull-upsYesYesYes
In-Circuit Serial ProgrammingYesYesYes
Number of Instructions333333
Packages8-pin PDIP, SOIC,
MSOP
The PIC12F508/509/16F505 devices have Power-on Reset, selectable Watchdog Timer, selectable code-protect, high I/O current
capability and precision internal oscillator.
The PIC12F508/509/16F505 device uses serial programming with data pin RB0/GP0 and clock pin RB1/GP1.
A variety of packaging options are available. Depending on application and production requirements, the
proper device option can be selected using the
information in th is section. Wh en placing orde rs, please
use the PIC12F508/509/16F505 Product Identification
System at the back of this data sheet to specify the
correct part number.
2.1Quick Turn Programming (QTP)
Devices
Microchip offers a QTP programming service for
factory production orders. This service is made
available for users who choose not to program
medium-to-high quantity units and whose code
patterns have stabilized. The devices are identical to
the Flash devices but with all Flash locations and fuse
options already programmed by the factory. Certain
code and prototype verification procedures do apply
before production shipments are available. Please
contact your loc al Microchi p Technology sales off ice for
more details.
2.2Serialized Quick Turn
Programming
Microchip offers a unique programming service, where
a few user-defined locations in each device are
programmed with different serial numbers. The serial
numbers may be random, pseudo-random or
sequential.
Serial programming allows each device to have a
unique number, which can serve as an entry code,
password or ID number.
The high perfor ma nce of t he P IC 12F 508/ 509 /1 6F 505
devices can be attributed to a number of architectural
features commonly found in RISC microprocessors.
To begin with, the PIC12F508/509/16F505 devices
use a Harvard ar chit ectur e in whi ch progr am and da ta
are accessed on separate buses. This improves
bandwidth over traditional von Neumann architectures where program and data are fetched on the
same bus. Separati ng pro gr am an d data mem or y fur ther allows instructions to be sized differently than the
8-bit wide data w ord. Instr uction opcode s are 12 b its
wide, making it possible to have all single-word
instructions. A 12-bit wide program memory access
bus fetches a 12-bit instruction in a single cycle. A
two-stage pipeline overlaps fetch and execution of
instructions. Consequently, all instructions (33)
execute in a single cycl e (200 ns @ 20 MHz, 1 μs @
4 MHz) except for program branches.
T abl e 3-1 below list s program m emory (Flash) a nd data
memory (RAM) for the PIC12F508/509/16F505
devices.
TABLE 3-1:PIC12F508/509/16F505
MEMORY
The PIC12F508/509/16F505 devices contain an 8-bit
ALU and working register. The ALU is a general
purpose arithmetic unit. It performs arithmetic and
Boolean functions be tween dat a in the work ing regist er
and any register file.
The ALU is 8 bits wide and capable of addition, subtraction, shift and logical operations. Unless otherwise
mentioned, arithmetic operations are two’s complement in nature. In two-operand instructions, one
operand is typica lly t he W (working) register. T he oth er
operand is either a file register or an immediate
constant. In sing le ope ran d inst ruction s, the operan d is
either the W register or a file register.
The W register is an 8-bit workin g register used for ALU
operations. It is not an addressable register.
Depending on the instruction executed, the ALU may
affect the values of the Carry (C), Digit Carry (DC) and
Zero (Z) bits in the ST ATUS register . The C and DC bit s
operate as a borrow
tively, in subtraction. See the SUBWF and ADDWF
instructions for examples.
A simplified block diagram is shown in Figure3-2, with
the corresponding device pins described in Table 3-3.
and digit borrow out bit, respec-
Device
Program Data
PIC12F508512 x 1225 x 8
PIC12F5091024 x 1241 x 8
PIC16F5051024 x 1272 x 8
The PIC12F508/509/16F505 devices can directly or
indirectly address its reg ister file s and dat a mem ory. All
Special Function Registers (SFR), including the PC,
are mapped in the data memory. The PIC12F508/509/
16F505 devices have a highly orthogonal (symmetrical) instruc tion set that makes it possible to carry ou t
any operat ion, on any regis ter, using any addressing
mode. This symmetrical nature and lack of “special
optimal situations” make programming with the
PIC12F508/509/16F505 devices simple, yet efficient.
In addition, the learning curve is reduced significantly.
The clock input (OSC1/CLKIN pin) is internal ly divided
by four to generate four non-overlapping quadrature
clocks, namely Q1, Q2, Q3 and Q4. Internally, the PC
is incremented every Q1 and the instruction is fetched
from program memory and latched into the instruction
register in Q4. It is decoded and executed during the
following Q1 through Q4. The clocks and instruction
execution flow is s hown in Figure3-3 and Example 3-1.
FIGURE 3-3:CLOCK/INSTRUCTION CYCLE
Q2Q3Q4
OSC1
Q1
Q2
Q3
Q4
PC
Q1
PC
Q1
3.2Instruction Flow/Pipelining
An instruction cy cle consists of four Q cycles (Q1, Q2,
Q3 and Q4). The instruction fetch and execute are
pipelined such that fetch takes one instruction cycle,
while decode and execute take another instruction
cycle. However, due to the pipelining, each instruction
effectively executes in one cycle. If an instruction
causes the PC to change (e.g ., GOTO), t hen two c yc le s
are required to complete the ins tructi on (Exampl e 3-1).
A fetch cycle begins with the PC incrementing in Q1.
In the execution cy cle, the fetched instruction i s latched
into the Instruction Register (IR) in cycle Q1. This
instruction is then decoded and executed during the
Q2, Q3 and Q4 c ycles. Dat a m emory is read during Q2
(operand read) and written during Q4 (destination
write).
Q2Q3Q4
PC + 1PC + 2
Q1
Q2Q3Q4
Internal
phase
clock
Fetch INST (PC)
Execute INST (PC – 1)
Fetch INST (PC + 1)
Execute INST (PC)
Fetch INST (PC + 2)
Execute INST (PC + 1)
EXAMPLE 3-1:INSTRUCTION PIPELINE FLOW
1. MOVLW 03H
2. MOVWF PORTB
3. CALL SUB_1
4. BSF PORTB, BIT1
All instructions are si ngle cycle, except for any program bra nches. These tak e two cycles, since th e fetch instruction
is “flushed” from the pipeline, while the new instruction is being fetched and then ex ecuted.
The PIC12F508/509/16F505 memories are organized
into program memory and data memory. For devices
with more than 512 byte s of program me mory , a p aging
scheme is used. Program memory pages are accessed
using one Status register bit. For the PIC12F509 and
PIC16F505, with data memory register files of more
than 32 registers, a banking scheme is used. Data
memory banks are accessed using the File Select
Register (FSR).
4.1Program Memory Orga nization for
the PIC12F508/509
The PIC12F508 device has a 10-bit Program Counter
(PC) and PIC12F509 has a 11-bit Program Counter
(PC) capable of add ressing a 2K x 12 program me mory
space.
Only the first 512 x 12 (0000h-01FFh) for the
PIC12F508, and 1K x 12 (0000h-03FFh) for the
PIC12F509 are physically implemented (see
Figure 4-1). Accessing a location above these
boundaries will cause a wraparound within the first
512 x 12 space (PIC12F508) or 1K x 12 space
(PIC12F509). The effective Reset vector is a 000 0h
(see Figure 4-1). L ocation 01FFh (PIC12F508) and
location 03FFh (PIC12F509) contain the internal
clock oscillator calibration value. This value shou ld
never be overwritten.
FIGURE 4-1:PROGRAM MEMORY MAP
AND STACK FOR THE
PIC12F508/509
PC<11:0>
CALL, RETLW
Stack Level 1
Stack Level 2
Reset Vector
On-chip Program
Memory
512 Word
Space
User Memory
On-chip Program
Memory
1024 Word
12
(1)
0000h
01FFh
0200h
03FFh
0400h
7FFh
Note 1:Address 0000h becomes the
effective Reset vector. Location
01FFh, 03FFh (PIC12F508,
PIC12F509) contains the MOVLW XX
internal oscillator calibration value.
The PIC16F505 device has a 11-bit Program Counter
(PC) capable of add ressing a 2K x 12 program me mory
space.
The 1K x 12 (0000h-03FFh) for the PIC16F505 are
physically implemented. Refer to Figure 4-2. Accessing a location above this boundary will cause a wraparound within the first 1K x 12 space. The effective
Reset vector is at 0000h (see Figure 4-2). Location
03FFh contains th e in tern al osc il la tor c ali bration value.
This value should never be overwritten.
FIGURE 4-2:PROGRAM MEMORY MAP
AND STACK FOR THE
PIC16F505
PC<11:0>
CALL, RETLW
Stack Level 1
Stack Level 2
Reset Vector
Space
User Memory
On-chip Program
Memory
12
(1)
0000h
01FFh
0200h
4.3Data Memory Organization
Data memory is composed of registers or bytes of
RAM. Therefore, da ta memory for a device is speci f ie d
by its register file. The register file is divided into two
functional groups: Special Function Registers (SFR)
and General Purpose Registers (GPR).
The Special Function Regi st ers in cl ude the TMR0 register, the Program Counter (PCL), the STAT US register ,
the I/O registers (ports) and the File Select Register
(FSR). In addition, Special Func tion Registers are use d
to control the I/O port configuration and prescaler
options.
The General Purpose Registers are used for data and
control informatio n u nd er com ma nd of the instructions.
For the PIC12F508/509, the register file is composed of
7 Special Function Registers, 9 General Purpose
Registers and 16 or 32 General Purpose Registers
accessed by banking (see Figure 4-3 and Figure 4-4).
For the PIC16F505, the register file is composed of 8
Special Function Registers, 8 General Purpose
Registers and 64 General Pu rpose Registers accesse d
by banking (Figure4-5).
4.3.1GENERAL PURPOSE REGISTER
FILE
The General Purpose Register file is accessed, either
directly or indirectly, through the File Select Register
(FSR). See Section 4.9 “Indirect Data Addressing:INDF and FSR Registers”.
1024 Words
Note 1:Address 0000h becomes the
effective Reset vector. Location
03FFh contains the MOVLW XX
internal oscillator calibration value.
The Special Function Registers (SFRs) are registers
used by the CPU and per ipheral functio ns to con trol the
operation of the device (Table 4-1).
The Special Function Registers can be classified into
two sets. The Special Function Registers associated
with the “core” functions are described in this section.
Those related to the operation of the peripheral
features are described in the section for each
peripheral feature.
TABLE 4-1:SPECIAL FUNCTION REGISTER (SFR) SUMMARY (PIC12F508/509)
Value on
AddressNameBit 7Bit 6Bit 5Bit 4Bit 3Bit 2 Bit 1 Bit 0
00hINDFUses Contents of FSR to Address Data Memory (not a physical
register)
01hTMR08-bit Real-Time Clock/Counterxxxx xxxx33
(1)
02h
03hSTATUSGPWU
04hFSR Indirect Data Memory Address Pointer111x xxxx26
04h
05hOSCCAL CAL6CAL5CAL4CAL3CAL2CAL1CAL0—1111 111-24
06hGPIO
N/ATRISGPIO——I/O Control Register--11 111129
N/AOPTIONGPWU
Legend: – = unimplemented, read as ‘0’, x = unknown, u = unchanged, q = value depends on condition.
Note 1: The upper byte of the Program Counter is not directly accessible. See Section 4.7 “Program Counter”
PCLLow-order 8 bits of PC1111 111125
—PA0
F
(4)
FSR Indirect Data Memory Address Pointer110x xxxx26
——GP5GP4GP3GP2GP1GP0--xx xxxx29
GPPU TOCS TOSEPSAPS2PS1PS01111 111122
for an explanation of how to access these bits.
2: Other (non Power-up) Resets include externa l Reset th rough MCLR
change Reset.
3: If Reset was due to wake-up on pin change, then bit 7 = 1. All other Resets will cause bit 7 = 0.
4: PIC12F509 only.
5: This bit is used on the PIC12F509. For code compatibility do not use this bit on the PIC12F508.
06hPORTB
07hPORTC——RC5RC4RC3RC2RC1RC0 --xx xxxx29
N/ATRISB——I/O Control Register--11 111129
N/ATRISC
N/AOPTIONRBWU
Legend: – = unimplemented, read as ‘0’, x = unknown, u = unchanged, q = value depends on condition.
Note 1: If Reset was due to wake-up on pin change, then bit 7 = 1. All other Resets will cause bit 7 = 0.
PCLLow-order 8 bits of PC1111 111125
—PA0TO PDZDCC0-01 1xxx20
——RB5RB4RB3RB2RB1RB0--xx xxxx 29
——I/O Control Register--11 111129
RBPU TOCS TOSEPSAPS2PS1PS01111 111123
2: Other (non Power-up) Resets include external reset through MCLR
This register contains the arithmetic status of the ALU,
the Reset status and the page preselect bit.
The STATUS register can be the destination for any
instruction, as with any other register. If the STATUS
register is the destination for an instruction that affects
the Z, DC or C bits, then the write to these three bits is
disabled. These bit s are set or cleared ac cording to the
device logic. Furthermore, the TO
and PD bits are not
For example, CLRF STATUS, will clear the upper three
bits and set the Z bit. This leaves the STATUS register
as 000u u1uu (where u = unchanged).
Therefore, it is recommended that only BCF, BSF andMOVWF instructions be used to alter the STATUS register. The se in structions do not affect the Z, DC or C bits
from the STATUS register. For other instructions which
do affect S tatus bits, see Section 8.0 “Instruction SetSummary”.
writable. Therefore, the result of an instruction with the
STATUS regis ter as destina tion may be differ ent than
intended.
1 = Reset due to wake-up from Sleep on pin change
0 = After power-up or other Reset
bit 6Reserved: Do not use
bit 5PA0: Program Page Preselect bits
1 = Page 1 (200h-3FFh)
0 = Page 0 (000h-1FFh)
Each page is 512 bytes.
Using the PA0 bit as a general purpose read/write bit in devices which do not use it for prog ram page
preselect is not recommended, since this may affect upward compatibility with future products.
bit 4TO
bit 3PD
bit 2Z: Zero bit
bit 1DC: Digit carry/borrow
bit 0C: Carry/borrow
: Time-out bit
1 = After power-up, CLRWDT instruction, or SLEEP instruction
0 = A WDT time-out occurred
: Power-down bit
1 = After power-up or by the CLRWDT instruction
0 = By execution of the SLEEP instructi on
1 = The result of an arithmetic or logic operation is zero
0 = The result of an arithmetic or logic operation is not zero
ADDWF
:
1 = A carry from the 4th low-order bit of the result occurred
0 = A carry from the 4th low-order bit of the result did not occur
:
SUBWF
1 = A borrow from the 4th low-order bit of the result did not occur
0 = A borrow from the 4th low-order bit of the result occurred
ADDWF
:SUBWF:RRF or RLF:
1 = A carry occurred1 = A borrow did not occurLoad bit with LSb or MSb, respectively
0 = A carry did not occur0 = A borrow occurred
—PA0TO PDZDCC
(1)
bit (for ADDWF and SUBWF instructions)
bit (for ADDWF, SUBWF and RRF, RLF instructions)
Note 1: This bit is used on the PIC12F509. For code compatibility do not use this bit on the
Legend:
R = Readable bitW = Writable bitU = Unimplemented bit, read as ‘0’
-n = Value at POR‘1’ = Bit is set‘0’ = Bit is clearedx = Bit is unknown
1 = Reset due to wake-up from Sleep on pin change
0 = After power-up or other Reset
bit 6Reserved: Do not use
bit 5PA0: Program Page Preselect bits
1 = Page 1 (200h-3FFh)
0 = Page 0 (000h-1FFh)
Each page is 512 bytes.
Using the P A 0 bit as a gene ral purpos e read/wri te bit in de vices whi ch do not u se it for program
page presele ct is not recommen ded, since this may affect upward compatib ility with future
products.
bit 4TO
bit 3PD
bit 2Z: Zero bit
bit 1DC: Digit carry/borrow
bit 0C: Carry/borrow
: Time-out bit
1 = After power-up, CLRWDT instruction, or SLEEP instruction
0 = A WDT time-out occurred
: Power-down bit
1 = After power-up or by the CLRWDT instruction
0 = By execution of the SLEEP instruction
1 = The result of an arithmetic or logic operation is zero
0 = The result of an arithmetic or logic operation is not zero
ADDWF
:
1 = A carry from the 4th low-order bit of the result occurred
0 = A carry from the 4th low-order bit of the result did not occur
SUBWF:
1 = A borrow from the 4th low-order bit of the result did not occur
0 = A borrow from the 4th low-order bit of the result occurred
ADDWF:SUBWF:RRF or RLF:
1 = A carry occurred1 = A borrow did not occur Load bit with LSb or MSb, respectively
0 = A carry did not occur 0 = A borrow occurred
—PA0TO PDZDCC
bit (for ADDWF and SUBWF instructions)
bit (for ADDWF, SUBWF and RRF, RLF instructions)
Legend:
R = Readable bitW = Writable bitU = Unimplemented bit, read as ‘0’
-n = Value at POR‘1’ = Bit is set‘0’ = Bit is clearedx = Bit is unknown
The Oscillator Calibrati on (OSCCAL) register is used to
calibrate the internal precision 4 MHz oscillator. It
contains seven bit s for cal ibra tio n
Note:Erasing the device will also erase the pre-
programmed internal calibration value for
the internal oscillator. The calibration
value must be read prior to erasing the
part so it can be reprogramm ed correctly
later.
After you move in the calibration constant, do not
change the value. See Section 7.2.5 “Internal 4 MHz
RC Oscillator”.
REGISTER 4-5:OSCCAL REGISTER (ADDRESS: 05h)
R/W-1R/W-1R/W-1R/W-1R/W-1R/W-1R/W-1R/W-0
bit 7bit 0
bit 7-1CAL<6:0>: Oscillator Calibration bits
0111111 =Maximum frequency
•
•
•
0000001
0000000 =Center frequency
1111111
•
•
•
1000000 =Minimum frequency
bit 0Unimplemented: Read as ‘0’
.
CAL6CAL5CAL4CAL3CAL2CAL1CAL0
—
Legend:
R = Readable bitW = Writable bitU = Unimplemented bit, read as ‘0’
-n = Value at POR‘1’ = Bit is set‘0’ = Bit is clearedx = Bit is unknown
As a program instruction is executed, the Program
Counter (PC) will contain the address of the next
program instruction to be executed. The PC value is
increased by one every instruction cycle, unless an
instruction changes the PC.
For a GOTO instruction, bits 8:0 of the PC are provided
by the GOTO instruction word. The Program Counter
(PCL) is mapped to PC<7:0>. Bit 5 of the STATUS
register provides page information to bit 9 of the PC
(Figure4-6).
For a CALL instruction, or any instruction where the
PCL is the destination, bits 7:0 of the PC again are
provided by the instruction word. However, PC<8>
does not come from the instruct ion word, but is alway s
cleared (Figure 4-6).
Instructions wh ere the PCL is th e destinatio n, or modif y
PCL instructions, incl ude MOVWF PC, ADDWF PC and
BSF PC,5.
Note:Because PC<8> is cleared in the CALL
instruction or any modify PCL instruction,
all subroutine calls or computed jumps are
limited to the first 256 locations of any
program me mory page (512 words long).
FIGURE 4-6:LOADING OF PC
BRANCH INSTRUCTIONS
GOTO Instruction
11
PC
70
870
910
PCL
Instruction Wor d
PA0
4.7.1EFFECTS OF RESET
The PC is set upon a Reset, which means that the PC
addresses the last location in the last page (i.e., the
oscillator calibration instruction). After executing
MOVLW XX, the PC will roll over to location 00h and
begin executing user code.
The STATUS register page preselect bits are cleared
upon a Reset, which means that page 0 is pre-selected.
Therefore, upon a Reset, a GOTO instruction will
automatically c ause the program t o jump to page0 until
the value of the page bits is altered.
4.8Stack
The PIC12F508/509/16F505 devices have a 2-deep,
12-bit wide hardware PUSH/POP stack.
A CALL instruction will PUSH the current value of Stack 1
into S t a ck 2 an d t he n PUS H th e c ur ren t PC v a lu e, in cre mented by one, into Stack Level 1. If more than two
sequential CALLs are executed, o nly the mo st recen t two
return addresses a re s tor ed .
A RETLW instruction will POP the contents of Stack
Level 1 into the PC and then copy Stack Level 2
contents into S t ack Level 1. If more tha n two sequentia l
RETLWs are execute d, the stack will be fi lled with the
address previously stored in Stack Level 2. Note that
the W register will be loaded with the literal value
specified in the i nstruction. Th is is particu larly useful f or
the implementation of data look-up tables within the
program memory.
Note 1: There are no Status bits to indicate stack
overflows or stack underflow conditions.
2: There are no instruction mnemonics
called PUSH or POP. These are actions
that occur from the e xecution of the CALL
and RETLW instructions.
4.9Indirect Data Addressing: INDF
and FSR Registers
The INDF register is not a physical register.
Addressing INDF actually addresses the register
whose address is contained in the FSR register (FSR
is a pointer). This is indirect addressing.
4.9.1INDIREC T ADDRES SING
• Register file 07 contains the value 10h
• Register file 08 contains the value 0Ah
• Load the value 07 into the FSR register
• A read of the INDF register will return the value
of 10h
• Increment the value of the FSR register by one
(FSR = 08)
• A read of the INDR register now will return the
value of 0Ah.
Reading INDF itself indirectly (FSR = 0) will produce
00h. Writing to the INDF register indirectly results in a
no operation (although Status bits may be affected).
A simple program to clear RAM locations 10h-1Fh
using indirect addressing is shown in Example 4-1.
EXAMPLE 4-1:HOW TO CLEAR RAM
USING INDIRECT
ADDRESSING
MOVLW0x10;initialize pointer
MOVWFFSR;to RAM
NEXTCLRFINDF;clear INDF
;register
INCFFSR,F;inc pointer
BTFSCFSR,4;all done?
GOTONEXT;NO, clear next
CONTINUE
:;YES, continue
:
The FSR is a 5-bit wide register. It is used in conjunctio n
with the INDF register to indirectly address the data
memory area.
The FSR<4:0> bits are used to select data memory
addresses 00h to 1Fh.
PIC12F508 – Does not use banking. FSR <7:5> are
unimplemented and read as ‘1’s.
PIC12F509 – Uses FSR<5>. Select s between ba nk 0
and bank 1. FSR<7:6> is unimp lemented , read as ‘1’.
PIC16F505 – Uses FSR<6:5>. S elects fro m bank 0 to
bank 3. FSR<7> is unimplemented, read as ‘1’.