MICROCHIP PIC12F508, PIC12F509, PIC16F505 User Manual

PIC12F508/509/16F505
数据手册
8/14 引脚 8 位闪存单片机
*8 8 引脚器件受 Microchip 低引脚数专利保护: 美国专利号为 5,847,450。其他美国或他国专利可能已经颁发,或正在 接受审查。
2006 Microchip Technology Inc. 初稿 DS41236B_CN
请注意以下有关 Microchip 器件代码保护功能的要点:
•Microchip的产品均达到 Microchip 数据手册中所述的技术指标。
•Microchip确信:在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一。
目前,仍存在着恶意、甚至是非法破坏代码保护功能的行为。就我们所知,所有这些行为都不是以 Microchip 数据手册中规定的 操作规范来使用 Microchip 产品的。这样做的人极可能侵犯了知识产权。
•Microchip愿与那些注重代码完整性的客户合作。
•Microchip或任何其他半导体厂商均无法保证其代码的安全性。代码保护并不意味着我们保证产品是 “牢不可破”的。
代码保护功能处于持续发展中。 Microchip 承诺将不断改进产品的代码保护功能。任何试图破坏 Microchip 代码保护功能的行为均可视 为违反了 《数字器件千年版权法案 (Digital Millennium Copyright Act)》。如果这种行为导致他人在未经授权的情况下,能访问您的 软件或其他受版权保护的成果,您有权依据该法案提起诉讼,从而制止这种行为。
提供本文档的中文版本仅为了便于理解。请勿忽视文档中包含 的英文部分,因为其中提供了有关 Microchip 产品性能和使用
任何差错不承担任何责任。建议参考 Microchip Technology Inc. 的英文原版文档。
本出版物中所述的器件应用信息及其他类似内容仅为您提供便 利,它们可能由更新之信息所替代。确保应用符合技术规范,
是您自身应负的责任。Microchip 对这些信息不作任何明示或 暗示、书面或口头、法定或其他形式的声明或担保,包括但不
限于针对其使用情况、质量、性能、适销性或特定用途的适用 性的声明或担保。 Microchip 对因这些信息及使用这些信息而
引起的后果不承担任何责任。如果将 Microchip 器件用于生命 维持和 / 或生命安全应用,一切风险由买方自负。买方同意在 由此引发任何一切伤害、索赔、诉讼或费用时,会维护和保障
Microchip 免于承担法律责任,并加以赔偿。在 Microchip 知识 产权保护下,不得暗中或以其他方式转让任何许可证。
商标
Microchip 的名称和徽标组合、 Microchip 徽标、 Accuron dsPIC、 K
EELOQ、 microID、 MPLAB、 PIC、 PICmicro、
PICSTARTPRO MATEPowerSmartrfPIC SmartShunt 均为 Microchip Technology Inc. 在美国和其他国
家或地区的注册商标。
AmpLabFilterLabMigratable MemoryMXDEV MXLABSEEVALSmartSensor The Embedded Control Solutions Company 均为 Microchip Technology Inc. 在美国的
注册商标。
Analog-for-the-Digital AgeApplication Maestro CodeGuarddsPICDEMdsPICDEM.netdsPICworks
ECANECONOMONITORFanSenseFlexROM fuzzyLABIn-Circuit Serial ProgrammingICSPICEPIC
Linear Active Thermistor、 Mindi、 MiWi、 MPASM、 MPLIBMPLINKPICkitPICDEMPICDEM.net
PICLABPICtailPowerCalPowerInfoPowerMate PowerToolREAL ICErfLABrfPICDEMSelect Mode
Smart Serial、 SmartTel、 Total Endurance、 UNI/O、 WiperLockZENA均为Microchip Technology Inc.在美国和其
他国家或地区的商标。 SQTP Microchip Technology Inc. 在美国的服务标记。
在此提及的所有其他商标均为各持有公司所有。
© 2006, Microchip Technology Inc. 版权所有。
Microchip Gresham
晶圆生产厂均通过了 位单片机、 性存储器和模拟产品方面的质量体系流程均符合 此外,
ISO 9001:2000
位于美国亚利桑那州
及位于加利福尼亚州
Microchip
ISO/TS-16949:2002
®
KEELOQ
跳码器件、串行
在开发系统的设计和生产方面的质量体系也已通过了
认证。
Chandler和Te mp e
Mountain View
的全球总部、设计中心和
认证。公司在
EEPROM
、位于俄勒冈州
®
PICmicro
、单片机外设、非易失
ISO/TS-16949:2002
8
DS41236B_CN ii 初稿 2006 Microchip Technology Inc.
PIC12F508/509/16F505

8/14 引脚 8 位闪存单片机

此数据手册所包含的器件:
PIC12F508
PIC12F509
PIC16F505
高性能 RISC CPU
只需要学习 33 条单字指令
除程序跳转指令外的所有其他指令都是单周期指
令,程序跳转指令是双周期指令
12 位宽的指令
2 级深的硬件堆栈
数据和指令的直接、间接和相对寻址模式
8 位宽的数据路径
8 个特殊功能硬件寄存器
工作速度:
- DC – 20 MHz 时钟输入 (仅 PIC16F505)
- DC – 200 ns 指令周期 (仅 PIC16F505)
- DC – 4 MHz 时钟输入
- DC – 1000 ns 指令周期
单片机的特性:
4MHz高精度内部振荡器:
- 厂家校准为 ±1%
在线串行编程 (In-Circuit Serial Programming,
ICSP™
支持在线调试 (In-Circuit Debugging, ICD)
上电复位 (Power-on Reset , POR)
器件复位定时器 (Device Reset Timer, DRT)
具有专用片内 RC 振荡器的看门狗定时器
Watchdog TimerWDT),能够可靠地工作
可编程代码保护
复用的 MCLR 输入引脚
I/O 引脚上的内部弱上拉
节省功耗的休眠模式
在引脚电平发生变化时从休眠模式唤醒
可选的振荡器选项:
-INTRC:4MHz高精度内部振荡器
- EXTRC:外部低成本 RC 振荡器
-XT 标准的晶振 / 谐振器
-HS 高速晶振 / 谐振器(仅 PIC16F505)
-LP 节省功耗的低频晶振
-EC 高速外部时钟输入 (仅 PIC16F505)
低功耗特性 /CMOS 技术:
工作电流:
- 在 2V、 4MHz< 350 µA
待机电流:
- 2V时典型值为 100 nA
低功耗,高速闪存技术:
- 可经受 10 万次擦写操作的闪存
-> 40年数据保持时间
全静态设计
宽工作电压范围:2.0V 到 5.5V
宽温度范围:
- 工业级: -40°C +85°C
- 扩展级: -40°C +125°C
外设特性 (PIC12F508/509):
6 I/O 引脚:
-5个具有独立方向控制的 I/O 引脚
-1个仅输入的引脚
- 高灌 / 拉电流可直接驱动 LED
- 电平变化时唤醒
- 弱上拉
具有 8 位可编程预分频器的 8 位实时时钟 / 计数器
TMR0
外设功能 (PIC16F505):
12 I/O 引脚:
-11个具有独立方向控制的 I/O 引脚
-1个仅输入的引脚
- 高灌 / 拉电流可直接驱动 LED
- 电平变化时唤醒
- 弱上拉
具有 8 位可编程预分频器的 8 位实时时钟 / 计数器
TMR0
2006 Microchip Technology Inc. 初稿 DS41236B_CN 第 1
PIC12F508/509/16F505
引脚图
PDIPSOIC 和 TSSOP
VDD
RB5/OSC1/CLKIN
RB4/OSC2/CLKOUT
RB3/MCLR
/VPP
RC5/T0CKI
RC4
RC3
1
2
3
4
5
6
7
14
13
12
11
10
PIC16F505
9
8
VSS
RB0/ICSPDAT
RB1/ICSPCLK
RB2
RC0
RC1
RC2
PDIP、SOIC MSOP
VDD
GP5/OSC1/CLKIN
GP4/OSC2
GP3/MCLR
/VPP
1
2
3
4
8
7
6
5
PIC12F508/509
VSS
GP0/ICSPDAT
GP1/ICSPCLK
GP2/T0CKI
器件
程序存储器 数据存储器
闪存 (字) SRAM (字节)
I/O
定时器
PIC12F508 512 25 6 1
PIC12F509 1024 41 6 1
PIC16F505 1024 72 12 1
8
DS41236B_CN 第 2 页 初稿  2006 Microchip Technology Inc.
PIC12F508/509/16F505
目录
1.0 总体说明 ....................................................................................................................................................................................... 5
2.0 PIC12F508/509/16F505 系列器件................................................................................................................................................ 7
3.0 架构概述 ....................................................................................................................................................................................... 9
4.0 存储器构成 ................................................................................................................................................................................. 15
5.0 I/O 端口 ...................................................................................................................................................................................... 29
6.0 Timer0 模块和 TMR0 寄存器...................................................................................................................................................... 33
7.0 CPU 的特性................................................................................................................................................................................ 39
8.0 指令集综述 ................................................................................................................................................................................. 55
9.0 开发支持 ..................................................................................................................................................................................... 63
10.0 电气特性 ..................................................................................................................................................................................... 67
11.0 直流和交流特性图表 ................................................................................................................................................................... 79
12.0 封装信息 ..................................................................................................................................................................................... 81
索引...................................................................................................................................................................................................... 91
Microchip 网站...................................................................................................................................................................................... 93
变更通知客户服务 ................................................................................................................................................................................ 93
客户支持............................................................................................................................................................................................... 93
读者反馈表 ........................................................................................................................................................................................... 94
产品标识体系 ....................................................................................................................................................................................... 95
致 客 户
我们旨在提供最佳文档供客户正确使用 Microchip 产品。 为此,我们将不断改进出版物的内容和质量,使之更好地满足您的要求。 出版物的质量将随新文档及更新版本的推出而得到提升。
如果您对本出版物有任何问题和建议,请通过电子邮件联系我公司 TRC 经理,电子邮件地址为 CTRC@microchip.com,或将本 数据手册后附的 《读者反馈表》传真到 86-21-5407 5066。我们期待您的反馈。
最新数据手册
欲获得本数据手册的最新版本,请查询我公司的网站:
http://www.microchip.com
查看数据手册中任意一页下边角处的文献编号即可确定其版本。文献编号中数字串后的字母是版本号 DS30000 A 版本。
例如:DS30000A 是
勘误表
现有器件可能带有一份勘误表,描述了实际运行与数据手册中记载内容之间存在的细微差异以及建议的变通方法。一旦我们了解到 器件 / 文档存在某些差异时,就会发布勘误表。勘误表上将注明其所适用的硅片版本和文件版本。
欲了解某一器件是否存在勘误表,请通过以下方式之一查询:
Microchip 网站 http://www.microchip.com
当地 Microchip 销售办事处 (见最后一页)
在联络销售办事处时,请说明您所使用的器件型号、硅片版本和数据手册版本 (包括文献编号)。
客户通知系统
欲及时获知 Microchip 产品的最新信息,请到我公司网站 www.microchip.com 上注册。
2006 Microchip Technology Inc. 初稿 DS41236B_CN 3
PIC12F508/509/16F505
注:
DS41236B_CN 4 初稿 2006 Microchip Technology Inc.
PIC12F508/509/16F505

1.0 总体说明

PIC12F508/509/16F505 Microchip Technology 生产 的低成本、高性能、8 位、全静态的基于闪存的 CMOS 单片机。 它们采用 RISC 架构,仅有 33 条单字 / 单周期 指令。 除程序跳转指令(为两个周期)外的所有其他指 令都是单周期 (200 ns)的。 PIC12F508/509/16F505 器件的性能比同价位的同类产品要高出很多。12 位宽的 指令是高度对称的,这样它的代码密集程度是同类 8 位 单片机的两倍。 易于使用且便于记忆的指令集大大缩短 了开发时间。
PIC12F508/509/16F505 产品还配备了可以降低系统成 本和功耗的特殊功能。 上电复位(POR)和器件复位定 时器(DRT)使器件不再需要外部复位电路。 有四种振 荡器配置可选择 (PIC16F505 器件有六种) ,包括 INTRC 内部振荡模式和节省功耗的 LP (低功耗)振荡 模式。 节省功耗的休眠模式、看门狗定时器和代码保护 功能提高了系统的成本、功耗和可靠性。
PIC12F508/509/16F505 器件提供低成本的闪存可编程 版本,适用于任意数量的批量生产。 用户可以完全利用 Microchip 在闪存可编程单片机市场的价格领导地位, 同时得益于闪存可编程产品的灵活性。
支持 PIC12F508/509/16F505 产品的开发工具有:全功 能的宏汇编器、软件模拟器、在线仿真器、 C 编译器、 低成本的开发编程器和全功能编程器。 所有工具均可在
®
PC 和兼容机上运行。
IBM

1.1 应用

PIC12F508/509/16F505 器件适合的应用有:个人护理 设备,安全系统到低功耗远程发送器 / 接收器。闪存技 术可以非常快速和方便地定制应用程序 (发送器代码、 设备设置和接收器频率等)。 小型封装的器件可用于过 孔或表面封装,使这些单片机可以完全适应有空间限制 的应用。 低成本、低功耗、高性能、使用简便和 I/O 灵 活性使 PIC12F508/509/16F505 器件能够在您认为根本 不能使用单片机的场合也可以大显神通(如较大系统中 的定时器功能、逻辑电路和 PLD 以及协处理器应用)。

1-1 PIC12F508/509/16F505 器件

PIC12F508 PIC12F509 PIC16F505
时钟 最大工作频率 (MHz 存储器 闪存程序存储器
数据存储器 (字节)
外设 定时器模块
在引脚电平发生变化时从休眠模式唤醒
特性 I/O 引脚
输入引脚 内部上拉 有 在线串行编程 有 指令数量 封装 8 引脚 PDIP、 SOIC
PIC12F508/509/16F505 器件具有上电复位、可选的看门狗定时器、可选的代码保护、高 I/O 电流能力和高精度内部振荡器。 PIC12F508/509/16F505 器件通过数据引脚 RB0/GP0 和时钟引脚 RB1/GP1 进行串行编程。
4420
512 1024 1024
25 41 72
TMR0 TMR0 TMR0
5511
111
33 33 33
MSOP
8 引脚 PDIPSOIC
MSOP
14 引脚 PDIPSOIC
TSSOP
2006 Microchip Technology Inc. 初稿 DS41236B_CN 第 5
PIC12F508/509/16F505
注:
DS41236B_CN 6 初稿 2006 Microchip Technology Inc.
PIC12F508/509/16F505

2.0 PIC12F508/509/16F505系列器件

器件提供不同的封装类型。 根据应用和产品要求,可以 使用本章中的信息选择正确的器件。在下订单时,请使 用本数据手册后面的 PIC12F508/509/16F505 产品标识 体系来指定正确的器件编号。

2.1 快速批量编程 (QTP)器件

Microchip 为工厂生产订单提供快速批量编程 (Quick Turn Programming,QTP)服务。 此服务适用于那些不
想为中到大批量器件进行编程并且自有的代码已稳定的 用户。 此器件与闪存器件相同,只是所有闪存单元和熔 丝选项已在出产前预先编程了。批量产品交付前经过了 某些代码和原型校验。欲知更多详情,请与当地 的 Microchip 售办事处联系。
2.2 带序列号的快速批量编程 (SQTP
Microchip 提供这种独特的编程服务,可通过编程为每 个器件中一些用户定义的单元指定不同的序列号。这些 序列号可以是随机的、伪随机或连续的。
串行编程使每个器件都具有一个唯一的编号,可作为登 录码、密码或 ID 编号。
SM
)器件
2006 Microchip Technology Inc. 初稿 DS41236B_CN 7
PIC12F508/509/16F505
注:
DS41236B_CN 8 初稿 2006 Microchip Technology Inc.
PIC12F508/509/16F505

3.0 架构概述

PIC12F508/509/16F505 器件的高性能归功于 RISC 微处 理器所具备的一些架构特征。首先, PIC12F508/509/ 16F505 器件采用通过不同总线访问程序和数据空间的 哈佛架构,它与传统的程序和数据总线合二为一的冯 诺依曼结构相比具有更宽的带宽。分离程序和数据存储 器,让指令的大小不仅仅是 8 位宽的数据字。 12 位宽 的指令操作码使其可带所有单字指令。 12 位宽的程序 存储器存取总线在一个周期内取 12 位指令。 两级流水 线在取指的同时执行指令。 因此,除程序跳转指令之外 的所有指令 (33 条)都在一个周期 ( 20 MHz 时为 200 ns 4MHz时为 1 µs )内执行。
下面的表 3-1 列出了 PIC12F508/509/16F505 器件的程 序存储器 (闪存)和数据存储器 (RAM)。

3-1 PIC12F508/509/16F505 存储器

存储器
器件
程序 数据
PIC12F508 512 x 12 25 x 8
PIC12F509 1024 x 12 41 x 8
PIC16F505 1024 x 12 72 x 8
PIC12F508/509/16F505 器件可以直接或间接的寻址其
文件寄存器和数据存储器。包括 PC 在内的所有特殊功 能寄存器(SFR)都被映射到数据存储器中。 PIC12F508/509/16F505 器件具有高度正交 (对称的) 指令集,使其可以使用任何寻址模式对任何寄存器执行 任何操作。 此对称特性以及没有 “最佳状态”让使用 PIC12F508/509/16F505 器件编程变得非常简单而高 效。 此外,学习时间也大大的缩短了。
PIC12F508/509/16F505 器件包含一个 8 位 ALU 和工作
寄存器。 ALU 是通用算术单元。 它对工作寄存器中的数 据和其他任何文件寄存器中的数据进行算术和布尔运 算。
ALU 8 位宽,并且能够执行加法、减法、移位和逻辑 运算。 除非另外声明,算术运算一般都是以 2 的补码
Two’s Complement)方式进行的。 在具有两个操作数
的指令中,一个操作数通常是 W(工作)寄存器。 其他 操作数可以是文件寄存器或者立即数常数。 在只有一个 操作数的指令中,操作数可以是 W 寄存器,也可以是文 件寄存器。
W 寄存器是用于 ALU 运算的 8 位工作寄存器。 它是不 可寻址的寄存器。
根据所执行的指令,ALU 可能影响状态寄存器中的进位
C)、半进位(DC)和全零位(Z)的值。 C 位和 DC
位在减法运算中可以分别作为借位 SUBWF ADDWF 指令示例。
3-2 给出了简化框图,表 3-3 给出了相应器件的引脚 配置。
和半借位位。 请参见
2006 Microchip Technology Inc. 初稿 DS41236B_CN 9
PIC12F508/509/16F505

3-1 PIC12F508/509 框图

OSC1/CLKIN
OSC2
程序 总线
闪存
512 x 12
1024 x12
程序存储器
12
指令寄存器
指令
译码和
控制
时序
发生器
内部 RC
振荡器
12
8
MCLR
程序计数器
堆栈 1 堆栈 2
直接寻址
器件复位
定时器
上电 复位
看门狗 定时器
VDD,VSS
5
数据总线
RAM 地址
地址 MUX
3
8
W 寄存器
RAM
25 x 8 41 x 8
文件
寄存器
9
5-7
FSR 寄存器
状态寄存器
MUX
ALU
Timer0
间接 寻址
8
GPIO
GP0/ISCPDAT GP1/ISCPCLK GP2/T0CKI GP3/MCLR/VPP GP4/OSC2 GP5/OSC1/CLKIN
DS41236B_CN 10 初稿  2006 Microchip Technology Inc.
PIC12F508/509/16F505

3-2 PIC12F508/509 引脚配置说明

名称 功能
GP0/ICSPDAT GP0 TTL CMOS
ICSPDAT ST CMOS
GP1\ICSPCLK GP1 TTL CMOS
ICSPCLK ST CMOS
GP2/T0CKI GP2 TTL CMOS
T0CKI ST
GP3/MCLR
GP4/OSC2 GP4 TTL CMOS
GP5/OSC1/CLKIN GP5 TTL CMOS
V
DD VDD
VSS VSS
图注: I = 输入, O = 输出, I/O = 输入 / 输出, P = 功耗,- = 未用, TTL = TTL 输入,
/VPP GP3 TTL
MCLR
PP HV
V
OSC2
OSC1 XTAL
CLKIN ST
ST = 施密特触发器输入
输入类型输出
类型
-到TMR0 时钟输入引脚。
输入引脚。 可由软件编程为内部弱上拉并在该引脚电平改变时
ST
- -
主复位 (复位)。 当被配置为 MCLR
编程电压输入。
XTAL
晶振输入。 - 外部时钟源输入。
P
P
说明
双向 I/O 引脚。 可由软件编程为内部弱上拉并在该引脚电平改 变时从休眠模式唤醒。
在线串行编程数据引脚。 双向 I/O 引脚。 可由软件编程为内部弱上拉并在该引脚电平改
变时从休眠模式唤醒。 在线串行编程时钟引脚。 双向 I/O 引脚。
从休眠模式唤醒。
平时复位器件 (低电平有效)。 MCLR 常工作过程时不得超过 VMCLR 时总是使能弱上拉。
双向 I/O 引脚。 晶振输出。 在晶振模式下,该引脚与晶体或谐振器相连 (仅限
XT LP 模式,其他模式下为 GPIO)。 双向 I/O 引脚。
逻辑电路和 I/O 引脚的正电源。 逻辑电路和 I/O 引脚的参考地。
DD,否则器件将进入编程模式。 配置
时,当该引脚电平为低电
/VPP 上的电压在器件正
2006 Microchip Technology Inc. 初稿 DS41236B_CN 11
PIC12F508/509/16F505

3-2 PIC16F505 框图

OSC1/CLKIN OSC2/CLKOUT
程序 总线
闪存
1K x 12
程序存储器
12
指令寄存器
指令
译码和
控制
时序
发生器
12
8
程序计数器
堆栈 1 堆栈 2
直接寻址
器件复位
定时器
上电 复位
看门狗 定时器
内部 RC
振荡器
5
数据总线
RAM 地址
地址 MUX
3
8
W 寄存器
RAM
2
7
文件
寄存器
9
5-7
FSR 寄存器
寄存器
MUX
ALU
Timer0
状态
间接 寻址
8
PORTB
RB0/ICSPCLK RB1/ICSPDAT RB2 RB3/MCLR/VPP RB4/OSC2/CLKOUT RB5/OSC1/CLKIN
PORTC
RC0 RC1 RC2 RC3 RC4 RC5/T0CKI
MCLR
VDD,VSS
DS41236B_CN 12 初稿  2006 Microchip Technology Inc.
PIC12F508/509/16F505

3-3 PIC16F505 引脚配置说明

名称 功能
RB0/ICSPDAT RB0 TTL CMOS
ICSPDAT ST CMOS
RB1/ICSPCLK RB1 TTL CMOS
ICSPCLK ST CMOS
RB2 RB2 TTL CMOS
RB3/MCLR
RB4/OSC2/CLKOUT RB4 TTL CMOS
RB5/OSC1/CLKIN RB5 TTL CMOS
RC0 RC0 TTL CMOS
RC1 RC1 TTL CMOS
RC2 RC2 TTL CMOS
RC3 RC3 TTL CMOS
RC4 RC4 TTL CMOS
RC5/T0CKI RC5 TTL CMOS
V
DD VDD
SS VSS
V
图注: I = 输入, O = 输出, I/O = 输入 / 输出, P = 功耗,- = 未用, TTL = TTL 输入,
/VPP RB3 TTL
MCLR
VPP
OSC2
CLKOUT
OSC1 XTAL
CLKIN ST
T0CKI ST
ST = 施密特触发器输入
输入类型输出
类型
ST
--
- -
输入引脚。 可由软件编程为内部弱上拉并在该引脚电平改变时
XTAL
CMOS
晶振输入。 - 外部时钟源输入。
时钟输入到 TMR0
P
P
说明
双向 I/O 引脚。 可由软件编程为内部弱上拉并在该引脚电平改 变时从休眠模式唤醒。
在线串行编程数据引脚。 双向 I/O 引脚。 可由软件编程为内部弱上拉并在该引脚电平改
变时从休眠模式唤醒。 在线串行编程时钟引脚。 双向 I/O 引脚。 到 TMR0 时钟输入引脚。
从休眠模式唤醒。
主复位 (复位)。 当被配置为 MCLR 平时复位器件 (低电平有效)。 MCLR 常工作过程时不得超过 VMCLR
双向 I/O 引脚。 可由软件编程为内部弱上拉并在该引脚电平改 变时从休眠模式唤醒。
晶振输出。 在晶振模式下,该引脚与晶体或谐振器相连 (仅 XTHS LP 模式)。
EXTRC INTRC 模式中,该引脚可以被配置为 CLKOUT,它的 频率是 OSC1 引脚信号频率的 1/4 并且表示指令周期速率。
双向 I/O 引脚。
双向 I/O 引脚。 双向 I/O 引脚。 双向 I/O 引脚。 双向 I/O 引脚。 双向 I/O 引脚。 双向 I/O 引脚。
逻辑电路和 I/O 引脚的正电源。 逻辑电路和 I/O 引脚的参考地。
时总是使能弱上拉。
DD,否则器件将进入编程模式。 配置
时,当该引脚电平为低电
/VPP 上的电压在器件正
2006 Microchip Technology Inc. 初稿 DS41236B_CN 13
PIC12F508/509/16F505

3.1 时钟机制 / 指令周期

OSC1/CLKIN引脚输入的时钟信号在器件内部被四分 频后,产生四个不重叠的正交时钟节拍,名为 Q1Q2、 Q3 Q4 在每个 Q1 节拍, PC 1 ;在 Q4 节拍从 程序存储器取指并将指令锁存到指令寄存器。 指令的译 码和执行是在下一个 Q1 Q4 节拍中完成的。 图 3-3 和例 3-1 所示为时钟和指令执行流程。

3-3:时/ 指令周期

Q2 Q3 Q4
OSC1
Q1
Q2
Q3
Q4
PC
Q1
PC
Q1

3.2 指令流 / 流水线

一个指令周期由四个 Q 节拍组成 (Q1Q2Q3 Q4)。 取指和执行指令是流水线操作的,因此取指需要 一个指令周期,而译码和执行指令则需要另一个指令周 期。但由于是流水线操作,所以每条指令的有效执行时 间都是一个指令周期。 如果一条指令导致 PC 改变(如 GOTO),则执行该指令需要两个周期 (例 3-1)。
取指周期由 Q1 节拍中 PC 1 开始。
在执行周期中,在 Q1 节拍将所取指令锁存到指令寄存 器(Instruction RegisterIR)。然后在 Q2Q3 Q4
节拍中对该指令译码并执行指令。其中读数据存储器 (读操作数)发生在 Q2 节拍,写操作发生在 Q4 节拍 (写目标单元)。
Q2 Q3 Q4
PC + 1 PC + 2
Q1
Q2 Q3 Q4
内部
相位 时钟
取指(PC
执行指令(PC–1
取指(PC + 1
执行指令(PC
取指(PC + 2
执行指令(PC + 1

3-1 指令流水线

1. MOVLW 03H
2. MOVWF PORTB
3. CALL SUB_1
4. BSF PORTB, BIT1
除程序转移指令外,所有指令都是单周期指令。由于程序转移指令将导致流水线中的一条已取指令作废,然后重新 取指和执行指令,所以程序转移指令需要两个周期。
取指 1 执行 1
取指 2 执行 2
取指 3 执行 3
取指 4 作废
取指 SUB_1 执行 SUB_1
DS41236B_CN 14 初稿 2006 Microchip Technology Inc.
PIC12F508/509/16F505

4.0 存储器构成

PIC12F508/509/16F505 系列器件的存储器被分为程序 存储器和数据存储器。 对于程序存储器大于 512 字节的 器件,使用分页机制。 使用状态寄存器中的一位来访问 程序存储器页。 对于数据存储器文件寄存器多于 32 的 PIC12F509 PIC16F505 器件,使用分区机制。 使用 文件选择寄存器 (File Select RegisterFSR)访问数 据存储区。

4.1 PIC12F508/509 器件的程序存储器构 成

PIC12F508 器件具有一个 10 位程序计数器 (Program CounterPC), PIC12F509 器件具有一个 11 位程序 计数器 (PC),可以寻址 2K x 12 位的程序存储空间。
PIC12F508 器件只有前 512 x 120000h-01FFh)单
元是物理实现的,而 PIC12F509 器件则是 1K x 12
0000h-03FFh)(见图 4-1)。 访问这些边界之上的
单元将导致返回到前 512 x 12 空间(PIC12F508)或
1K x 12 空间 (PIC12F509)。 有效的复位向量为 0000h (见图 4-1)。 01FFh 单元 (PIC12F508)和 03FFh 单元 (PIC12F509)包含内部时钟校准值。
不能改写该值。
4-1 PIC12F508/509 器件的程序存储器
映射和堆栈
CALL, RETLW
空间
用户存储
PC<11:0>
堆栈深度 1 堆栈深度 2
复位向量
片内程序
存储器
512
片内程序
存储器
1024
12
(1)
0000h
01FFh 0200h
03FFh 0400h
7FFh
1: 地址 0000h 变为有效的复位向量。
01FFh 单元 (PIC12F508)和 03FFh
单元 (PIC12F509)包含 MOVLW XX 内部振荡器校准值。
2006 Microchip Technology Inc. 初稿 DS41236B_CN 15
PIC12F508/509/16F505

4.2 PIC16F505 器件的程序存储器构成

PIC16F505 器件具有 11 位程序计数器(PC),可以寻 址 2K x 12 位的程序存储空间。
对于 PIC16F5051K x 12 0000h-03FFh)单元是物 理实现的。 请参见图 4-2。 访问该边界以外的单元将导 致返回到前 1K x 12 空间。 有效的复位向量为 0000h
(见图 4-2)。 03FFh 单元包含内部振荡器校准值。 绝不
能改写该值。
4-2 PIC16F505 器件的程序存储器映射和
堆栈
CALL, RETLW
空间
用户存储
PC<11:0>
堆栈深度 1 堆栈深度 2
复位向量
12
(1)
0000h
01FFh 0200h

4.3 数据存储器构成

数据存储器由寄存器或 RAM 字节组成。 因此,器件的 数据存储器是由其文件寄存器指定的。 文件寄存器被分 为两个功能组:特殊功能寄存器 (Special Function
RegisterSFR)和通用寄存器 (General Purpose RegisterGPR)。
特殊功能寄存器包括 TMR0 寄存器、程序计数器
PCL)、状态寄存器、I/O 寄存器(端口)和文件选择
寄存器 (FSR)。 此外,特殊功能寄存器还被用于控制 I/O 端口配置和预分频比选择。
通用寄存器被用于存储数据和对指令命令的控制信息。
对于 PIC12F508/509 器件,文件寄存器由 7 个特殊功 能寄存器、9 个通用寄存器和 16 32 个可通过分区寻 址的通用寄存器组成 (见图 4-3 和图 4-4)。
对于 PIC16F505 器件,文件寄存器由 8 个特殊功能寄 存器、8 个通用寄存器和 64 个可通过分区寻址的通用寄 存器组成 (见图 4-5)。
4.3.1 通用文件寄存器
通用文件寄存器可以被直接寻址也可以通过文件选择寄 存器(FSR)间接寻址。 请参见第 4.9 节“间接数据寻 址:INDF FSR 寄存器”。
片内程序
存储器
1024
03FFh 0400h
7FFh
1: 地址 0000h 变为有效的复位向
量。 03FFh 单元包含 MOVLW XX 内部振荡器校准值。
DS41236B_CN 16 初稿 2006 Microchip Technology Inc.
PIC12F508/509/16F505
4-3 PIC12F508 文件寄存器映射 4-4 PIC12F509 文件寄存器映射
寄存器地址
00h
01h
02h
03h
04h
05h
06h
07h
(1)
INDF
TMR0
PCL
STATUS
FSR
OSCCAL
GPIO
通用
寄存器
FSR<6:5> 00 01
寄存器地址
00h
01h
02h
03h
04h
05h
06h
07h
0Fh
10h
(1)
INDF
TMR0
PCL
STATUS
FSR
OSCCAL
GPIO
通用
寄存器
通用 寄存器
20h
地址映射返回到 Bank 0 中的地 址。
2Fh
30h
通用
寄存器
1Fh
1: 不是物理寄存器。 请参见第 4.9 节“间接数
据寻址:INDF FSR 寄存器”。

4-5 PIC16F505 文件寄存器映射

FSR<6:5> 00 01
寄存器地址
00h
01h
02h
03h
04h
05h
06h
07h
08h
0Fh
10h
(1)
INDF
TMR0
PCL
STATUS
FSR
OSCCAL
PORTB
PORTC
通用
寄存器
通用 寄存器
20h
2Fh
30h
通用
寄存器
1Fh
Bank 0 Bank 1
1: 不是物理寄存器。 请参见第 4.9 节“间接数据
寻址:INDF FSR 寄存器”。
10
40h
地址映射返回到
Bank 0 中的地址。
4Fh
50h
通用
寄存器
70h
11
60h
6Fh
通用
寄存器
3Fh
1Fh
Bank 0
1: 不是物理寄存器。 请参见第 4.9 节 “间接数据寻址:INDF FSR 寄存器”。
2006 Microchip Technology Inc. 初稿 DS41236B_CN 第 17
3Fh
Bank 1
5Fh
Bank 2
7Fh
Bank 3
PIC12F508/509/16F505
4.3.2 特殊功能寄存器
特殊功能寄存器 (SFR)由 CPU 和外设使用,用于控 制器件的操作 (见表 4-1)。
特殊功能寄存器可分为两类。 与内核功能有关的特殊特 殊功能寄存器将在本节讲述,而另一类与外设功能操作 有关的特殊功能寄存器将在相应的外设功能模块章节中 讲述。

表 4-1: 特殊功能寄存器 (SFR)汇总 (PIC12F508/509)

地址 名称
00h INDF
01h TMR0
(1)
02h
03h STATUS GPWUF
PCL
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
使用 FSR 的内容寻址数据存储器 (非物理寄存器) 8 位实时时钟 / 计数器 PC 的低 8 位
(5)
PA0
TO PD ZDCC0-01 1xxx
上电复位
时的值
xxxx xxxx 26
xxxx xxxx 33
1111 1111 25
(2)
(3)
页码
20
04h FSR
(4)
04h
05h OSCCAL CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0
06h GPIO
N/A TRISGPIO
N/A OPTION GPWU
图注: - = 未实现,读为 0, x = 未知, u = 不变, q = 取值视情况而定。 注 1: 程序计数器的最高字节是不可直接访问的。 欲知关于如何访问这些位的说明,请参见第 4.7 节 “程序计数
FSR
器”。
2: 其他 (非上电)复位包括通过 MCLR 3: 如果由于引脚电平变化唤醒而产生复位,则 bit 7 = 1所有其他复位都将导致 bit 7 = 0 4: 仅 PIC12F509 才具有该寄存器。 5: 该位用于 PIC12F509 器件。 为了代码的兼容性,请不要在 PIC12F508 器件上使用该位。
间接数据存储器地址指针 间接数据存储器地址指针
- - I/O 控制寄存器
GPPU TOCS TOSE PSA PS2 PS1 PS0 1111 1111 22
GP5 GP4 GP3 GP2 GP1 GP0 --xx xxxx 29
引脚的外部复位、看门狗定时器复位和引脚电平变化唤醒复位。
111x xxxx 26
110x xxxx 26
1111 111- 24
--11 1111 29
DS41236B_CN 18 初稿  2006 Microchip Technology Inc.
PIC12F508/509/16F505

4-2 特殊功能寄存器 (SFR)汇总 (PIC16F505)

地址 名称
00h INDF
01h TMR0
(1)
02h
03h STATUS RBWUF
04h FSR
05h OSCCAL CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0
06h PORTB
07h PORTC
N/A TRISB
N/A TRISC
N/A OPTION RBWU
图注: = 未实现,读为 0x = 未知, u = 不变, q = 取值视情况而定。 注 1: 如果由于引脚电平变化唤醒而产生复位,则 bit 7 = 1 所有其他复位都将导致 bit 7 = 0。
PCL
2: 其他 (非上电)复位包括通过 MCLR
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
使用 FSR 的内容寻址数据存储器 (非物理寄存器) 8 位实时时钟 / 计数器 PC 的低 8 位
间接数据存储器地址指针
- - - - I/O 控制寄存器 - I/O 控制寄存器
RBPU TOCS TOSE PSA PS2 PS1 PS0 1111 1111 23
PA0 TO
RB5 RB4 RB3 RB2 RB1 RB0 --xx xxxx 29
RC5 RC4 RC3 RC2 RC1 RC0 --xx xxxx 29
引脚的外部复位、看门狗定时器复位和引脚电平变化唤醒复位。
PD ZDCC0-01 1xxx 20
上电复位
时的值
xxxx xxxx 26
xxxx xxxx 33
1111 1111 25
110x xxxx 26
1111 111- 24
--11 1111 29
--11 1111 29
(2)
页码
2006 Microchip Technology Inc. 初稿 DS41236B_CN 19
PIC12F508/509/16F505

4.4 状态寄存器

例如,CLRF STATUS, 会将状态寄存器的高 3 位清零而Z 位置 1 这会使状态寄存器的值为 000u u1uu(其
状态(STATUS)寄存器包含 ALU 的数学运算状态、复 位状态和页预选择位。
和任何其他寄存器一样,状态寄存器可作为任何指令的 目标寄存器。 如果将状态寄存器作为一条影响Z、DC 或 C 位的指令的目标寄存器,那么将禁止对这 3 位执行写
u = 不变)。
因此,建议只使用 BCFBSF MOVWF 指令来改变状 态寄存器的值。 这些指令不会影响状态寄存器的 Z、DCC 位。 对于其他影响状态位的指令,请参见第 8.0
“指令集综述”。
操作。根据器件逻辑,这些位会被置 1 或清零。 此外,
PD 位也是不可写的。因此,当执行一条把状态
TO
寄存器作为目标寄存器的指令后,结果可能和预想的不 同。
寄存器 4-1 状态寄存器 (地址:03h)( PIC12F508/509
R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
GPWUF
bit 7 bit 0
GPWUFGPIO 复位位
1 = 由于引脚电平变化从休眠唤醒的复位 0 = 上电或其他复位之后
保留:不使用 PA0 :程序页预选择位
1 = 1 页(200h-3FFh 0 = 0 页(000h-1FFh
每页 512 个字节。 建议在不使用 PA0 位作为程序页预选择位的器件中也不要使用该位作为通用读 / 写位,因为这样可能会影 响对于未来产品的向上兼容性。
TO
:超时位
1 = 在上电或执行 CLRWDT SLEEP 指令之后 0 = 发生了 WDT 超时
PD
:掉电位
1 = 上电或执行了 CLRWDT 指令之后 0 = 执行了 SLEEP 指令
Z:结果为 0
1 = 算术运算或逻辑运算结果为零 0 = 算术运算或逻辑运算结果不为零
DC:半进位 / 借位 ADDWF
1 = 发生了结果的第 4 个低位向高位的进位 0 = 未发生结果的第 4 个低位向高位的进位
SUBWF
1 = 未发生结果的第 4 个低位向高位的借位 0 = 发生了结果的第 4 个低位向高位的借位
C:进位 / 借位
ADDWF
SUBWF RRF RLF 1 = 发生了进位 1 = 未发生借位 分别装载最低位和最高位 0 = 未发生进位 0 = 发生了借位
位(对于ADDWF SUBWF 指令)
位(对于ADDWFSUBWF RRFRLF 指令)
PA0 TO
(1)
PD ZDCC
1: 该位用于 PIC12F509 器件。 为了代码的兼容性,请不要在 PIC12F508 器件上使用该位。
图注:
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = 上电复位时的值 1 = 10 = 清零 x = 未知
DS41236B_CN 20 初稿  2006 Microchip Technology Inc.
PIC12F508/509/16F505
寄存器 4-2 状态寄存器 (地址:03h)( PIC16F505
R/W-0 R/W-0 R/W-0 R-1 R-1 R/W-x R/W-x R/W-x
RBWUF
bit 7 bit 0
PA0 T O
PD ZDCC
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
RBWUFPORTB 复位位
1 = 由于引脚电平变化从休眠唤醒的复位 0 = 上电或其他复位之后
保留:不使用 PA0 :程序页预选择位
1 = 1 页(200h-3FFh 0 = 0 页(000h-1FFh
每页 512 个字节。 建议在不使用 PA0 位作为程序页预选择位的器件中也不要使用该位作为通用读 / 写位,因为这 样可能会影响对于未来产品的向上兼容性。
:超时位
TO
1 = 在上电或执行 CLRWDT SLEEP 指令之后 0 = 发生了 WDT 超时
PD
:掉电位
1 = 上电或执行了 CLRWDT 指令之后 0 = 执行了 SLEEP 指令
Z:结果为 0
1 = 算术运算或逻辑运算结果为零 0 = 算术运算或逻辑运算结果不为零
DC:半进位 / 借位位 (对于 ADDWF SUBWF 指令)
ADDWF 1 = 发生了结果的第 4 个低位向高位的进位 0 = 未发生结果的第 4 个低位向高位的进位 SUBWF 1 = 未发生结果的第 4 个低位向高位的借位 0 = 发生了结果的第 4 个低位向高位的借位
C:进位 / 借位
SUBWF RRF RLF
ADDWF 1 = 发生了进位 1 = 未发生借位 分别装载最低位和最高位 0 = 未发生进位 0 = 发生了借位
位 (对于 ADDWFSUBWF RRFRLF 指令)
图注:
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = 上电复位时的值 1 = 10 = 清零 x = 未知
2006 Microchip Technology Inc. 初稿 DS41236B_CN 第 21
PIC12F508/509/16F505

4.5 选项寄存器

选项 (OPTION)寄存器是一个 8 位宽的只读寄存器, 它包含各种配置 Timer0/WDT 预分频器和 Timer0 的控 制位。
通过执行 OPTION 指令,可将 W 寄存器的内容传送到 选项寄存器。 复位会将 OPTION<7:0> 位置 1。
寄存器 4-3 选项寄存器 (PIC12F508/509
W-1 W-1 W-1 W-1 W-1 W-1 W-1 W-1
GPPU T0CS T0SE PSA PS2 PS1 PS0
:引脚电平变化唤醒使能位 (GP0GP1 GP3
:弱上拉使能位 (GP0GP1 GP3
OSC/4 的跳变沿
位值
Timer0 预分频比
000 001 010 011 100 101 110 111
WDT 预分频比
1 : 2 1 : 4 1 : 8 1 : 16 1 : 32 1 : 64 1 : 128 1 : 256
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2-0
GPWU
bit 7 bit 0
GPWU
1 = 禁止 0 = 使能
GPPU
1 = 禁止 0 = 使能
T0CSTimer0 时钟源选择位
1 = T0CKI 引脚的跳变沿 (优先级高于 T0CKI 引脚上的 TRIS 功能) 0 = 内部指令周期时钟 F
T0SETimer0 时钟沿边沿选择位
1 = T0CKI 引脚电平从高电平变化到低电平时递增 0 = T0CKI 引脚电平从低电平变化到高电平时递增
PSA:预分频器分配位
1 = 将预分频器分配给 WDT 0 = 将预分频器分配给 Timer0
PS<2:0>:预分频比选择位
注: TRIS 位清零 (= 0)时,相应引脚的电
平变化唤醒和上拉功能都是被禁止的
(即,注意 TRIS 的优先级高于 GPPU
RBPU GPWU/RBWU 选择控制位)。
注: T0CS 位置 1 时,它将比 T0CKI 引脚的
TRIS 功能具有更高的优先级。
1 : 1 1 : 2 1 : 4 1 : 8 1 : 16 1 : 32 1 : 64 1 : 128
/
图注:
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = 上电复位时的值 1 = 10 = 清零 x = 未知
DS41236B_CN 22 初稿  2006 Microchip Technology Inc.
寄存器 4-4 选项寄存器 (PIC16F505
W-1 W-1 W-1 W-1 W-1 W-1 W-1 W-1
RBWU
bit 7 bit 0
RBPU T0CS T0SE PSA PS2 PS1 PS0
PIC12F508/509/16F505
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2-0
RBWU:引脚电平变化唤醒使能位 (RB0RB1RB3 RB4
1 = 禁止 0 = 使能
:弱上拉使能位 (RB0RB1RB3 RB4
RBPU
1 = 禁止 0 = 使能
T0CSTimer0 时钟源选择位
1 = T0CKI 引脚的跳变沿 (优先级高于 T0CKI 引脚上的 TRIS 功能) 0 = 内部指令周期时钟 F
T0SETimer0 时钟沿边沿选择位
1 = T0CKI 引脚电平从高电平变化到低电平时递增 0 = T0CKI 引脚电平从低电平变化到高电平时递增
PSA:预分频器分配位
1 = 将预分频器分配给 WDT 0 = 将预分频器分配给 Timer0
PS<2:0>:预分频比选择位
位值 Timer0 预分频比 WDT 预分频比
000 001 010 011 100 101 110 111
OSC/4 的跳变沿
1 : 2 1 : 4 1 : 8 1 : 16 1 : 32 1 : 64 1 : 128 1 : 256
1 : 1 1 : 2 1 : 4 1 : 8 1 : 16 1 : 32 1 : 64 1 : 128
图注:
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = 上电复位时的值 1 = 10 = 清零 x = 未知
2006 Microchip Technology Inc. 初稿 DS41236B_CN 第 23
PIC12F508/509/16F505
4.6 振荡器校准 (OSCCAL)寄存器
振荡器校准(OSCCAL)寄存器被用来校准内部高精度 4MHz振荡器。 它包含用于校准的 7 位。
注: 擦除器件同时也会擦除预编程的内部振荡
器内部校准值。 必须在擦除该部分之前读 取校准值,这样以后才可以正确地重新编 程。
在您读取了校准常数以后,请不要更改该值。 请参见第
7.2.5 节“内部4 MHz RC 振荡器”。
寄存器 4-5 振荡器校准寄存器 (地址:05h
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-0
CAL6 CAL5 CAL4 CAL3 CAL2 CAL1 CAL0
bit 7 bit 0
bit 7-1
bit 0
CAL<6:0>:振荡器校准位
0111111 = 最大频率
0000001 0000000 = 中心频率
1111111
1000000 = 最小频率 未实现:读为 0
图注:
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = 上电复位时的值 1 = 10 = 清零 x = 未知
DS41236B_CN 24 初稿  2006 Microchip Technology Inc.
PIC12F508/509/16F505

4.7 程序计数器

当执行程序指令时,程序计数器 (PC)中将包含下一 条要被执行的程序指令的地址。 除更改 PC 的指令外, 每执行一条指令, PC 值都会增 1
对于 GOTO 指令,PC 的 bit 0 到 bit 8 由 GOTO 指令字提 供。 程序计数器(PCL)被映射到 PC<7:0> 状态寄存 器的 bit 5 将页信息提供给 PC bit 9 (见图 4-6)。
对于 CALL 指令或其他以 PCL 作为目标寄存器的指令, PC bit0 bit7 也是由指令字提供的。 但是,PC<8> 不由指令字提供,它始终保持清零 (见图 4-6)。
PCL 作为目标寄存器或修改 PCL 的指令包括 MOVWF PCADDWF PC BSF PC,5
注: 由于 CALL 指令或任何修改 PCL 指令会将
PC<8> 清零,因此所有子程序调用或相对 跳转指令都被限制在任何程序存储器页
512 字长)的前 256 个单元中。

4-6 执行跳转指令时装载 PC 的过程

GOTO 指令
11
910
87 0
PC
PA0
70
状态寄存器
PCL
指令字
4.7.1 复位的影响
复位时 PC 被置为全 1,这意味着 PC 指向最后一页中 的最后一个单元 (即振荡器校准指令) 。 执行 MOVLW XX 指令后,PC 将计满返回到 00h 单元并开始执行用户 代码。
复位后状态寄存器页预选择位被清零,这意味着预选择 了第 0 页。
因此,复位时 GOTO 指令会自动使程序跳转到第 0 页直 到页预选择位的值被更改为止。

4.8 堆栈

PIC12F508/509/16F505 系列器件具有 2 级深、12 位宽 的硬件 PUSH/POP 堆栈。
执行 CALL 指令会将堆栈第一级单元中的内容压入第二 级单元中,然后将 PC 的当前值加 1 压入堆栈的第一级。 如果连续执行了多于两条 CALL 指令,只会存储最近的 两个返回地址。
执行 RETLW 指令会将堆栈第一级单元中的内容弹出到 PC,然后将堆栈第 2级单元中的内容复制到第一级单元 中。如果连续执行了多于两条 RETLW 指令,将使用先前 存储在堆栈第二级单元中的地址填充堆栈。注意可以使 用在指令中指定的立即数装载W寄存器。 这对于在程序 存储器中实现数据查找表尤其有用。
1: 不存在指示堆栈上溢或下溢条件的状态
位。
2: 不存在称为 PUSHPOP的指令助记符。
这些是执行 CALL RETLW 指令后出现的 情形。
CALL 或修改 PCL 的指令
910
11
PC
70
87 0
复位为 0
PA0
状态寄存器
PCL
指令字
2006 Microchip Technology Inc. 初稿 DS41236B_CN 第 25
PIC12F508/509/16F505

4.9 间接数据寻址:INDF FSR 寄存器

INDF 寄存器不是物理寄存器。 寻址 INDF 实际寻址的 是地址包含在 FSR 寄存器中的寄存器(FSR 是一个
)。 这就是间接寻址。
4.9.1 间接寻址
地址为 07 的寄存器包含值 10h
地址为 08 的寄存器包含值 0Ah
将值 07 载入 FSR 寄存器
读 INDF 寄存器将返回值 10h
将 FSR 寄存器的值增 1 (FSR = 08
读 INDF 寄存器将返回值 0Ah。
直接读 INDF 本身 (FSR = 0)将返回 00h 直接写 INDF 寄存器将导致空操作 (虽然会影响状态位)。
4-1 给出了使用间接寻址将 RAM 单元 10h-1Fh 清零 的简单程序。

4-7:直/ 间接寻址 (PIC12F508/509)

直接寻址
FSR
5
6
(操作码) 04

4-1 使用间接寻址清零 RAM 的方法

MOVLW 0x10 ;initialize pointer
NEXT CLRF INDF ;clear INDF
CONTINUE
FSR 是一个 5 位宽的寄存器。 它有 INDF 寄存器配合使 用来间接寻址数据存储区。
FSR<4:0> 位被用来选择数据存储器地址 00h 1Fh
PIC12F508——不使用分区。 FSR <7:5> 未实现,其 读取值为 1
PIC12F509——使用 FSR<5>bank 0 bank 1 之间进行选择。 FSR<7:6> 未实现,其读取值为 1
PIC16F505——使用 FSR<6:5>bank 0 bank 3 之间进行选择。 FSR<7:6> 未实现,其读取值为 1
MOVWF FSR ;to RAM
;register INCF FSR,F ;inc pointer BTFSC FSR,4 ;all done? GOTO NEXT ;NO, clear next
: ;YES, continue :
间接寻址
5
6
4
FSR
0
存储区选择
1: 对于寄存器映射的细节,请参见第 4.3 节 “数据存储器构成”。
2PIC12F509
单元选择
数据
(1)
存储器
00 01
00h
0Fh 10h
1Fh 3Fh
Bank 0 Bank 1
地址 映射返回到 Bank 0 中的 地址。
(2)
存储区
单元选择
DS41236B_CN 26 初稿 2006 Microchip Technology Inc.

4-8:直/ 间接寻址 (PIC16F505

PIC12F508/509/16F505
直接寻址
FSR
6 5 4 (操作码) 0
存储区选择 单元选择
00h
数据 存储器
1: 对于寄存器映射的细节,请参见第 4.3 节 “数据存储器构成”。
0Fh
(1)
10h
00 01 10 11
1Fh 3Fh 5Fh 7Fh
Bank 0 Bank 1 Bank 2 Bank 3
地址映射返 回到 Bank 0 中的地址。
间接寻址
6 5 4 FSR 0
存储区
单元选择
2006 Microchip Technology Inc. 初稿 DS41236B_CN 27
PIC12F508/509/16F505
注:
DS41236B_CN 28 初稿 2006 Microchip Technology Inc.
Loading...
+ 68 hidden pages