MICROCHIP PIC18F87J10 Technical data

PIC18F87J10 系列
数据手册
采用纳瓦技术的 64/80 引脚
高性能 1 Mb 闪存单片机
2005 Microchip Technology Inc. 初稿 DS39663B_CN
请注意以下有关 Microchip 器件代码保护功能的要点:
•Microchip的产品均达到 Microchip 数据手册中所述的技术指标。
•Microchip确信:在正常使用的情况下, Microchip 系列产品是当今市场上同类产品中最安全的产品之一。
目前,仍存在着恶意、甚至是非法破坏代码保护功能的行为。就我们所知,所有这些行为都不是以 Microchip 数据手册中规定的 操作规范来使用 Microchip 产品的。这样做的人极可能侵犯了知识产权。
•Microchip愿与那些注重代码完整性的客户合作。
•Microchip或任何其他半导体厂商均无法保证其代码的安全性。代码保护并不意味着我们保证产品是 “牢不可破”的。
代码保护功能处于持续发展中。 Microchip 承诺将不断改进产品的代码保护功能。任何试图破坏 Microchip 代码保护功能的行为均可视 为违反了 《数字器件千年版权法案 (Digital Millennium Copyright Act)》。如果这种行为导致他人在未经授权的情况下,能访问您的
软件或其他受版权保护的成果,您有权依据该法案提起诉讼,从而制止这种行为。
提供本文档的中文版本仅为了便于理解。Microchip Technology Inc. 及其分公司和相关公司、各级主管与员工及
事务代理机构对译文中可能存在的任何差错不承担任何责任。 建议参考 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 MXLABPICMASTERSEEVALSmartSensor The Embedded Control Solutions Company 均为 Microchip Technology Inc. 在美国的注册商标。
Analog-for-the-Digital AgeApplication Maestro dsPICDEMdsPICDEM.netdsPICworksECAN ECONOMONITORFanSenseFlexROMfuzzyLAB In-Circuit Serial Programming、 ICSP、 ICEPIC、 Linear
Active Thermistor、 MPASMMPLIBMPLINKMPSIM PICkitPICDEMPICDEM.netPICLABPICtail
PowerCalPowerInfoPowerMatePowerToolrfLAB rfPICDEMSelect ModeSmart SerialSmartTelTo t al
Endurance WiperLock 均为 Microchip Technology Inc.在
美国和其他国家或地区的商标。 SQTP Microchip Technology Inc. 在美国的服务标记。
在此提及的所有其他商标均为各持有公司所有。 © 2005, Microchip Technology Inc. 版权所有。
Microchip
10
位单片机、 性存储器和模拟产品方面的质量体系流程均符合
16949:2002
系也已通过了
位于美国亚利桑那州
Mountain View
月通过了
ISO/TS-16949:2002
KEELOQ
。此外,
ISO 9001:2000
的全球总部、设计中心和晶圆生产厂均于
®
跳码器件、串行
Microchip
Chandler和Tem pe
质量体系认证。公司在
EEPROM
在开发系统的设计和生产方面的质量体
认证。
及位于加利福尼亚
PICmicro
、单片机外设、非易失
ISO/TS-
2003
®
DS39663B_CN ii 初稿  2005 Microchip Technology Inc.
8
PIC18F87J10 系列
采用纳瓦技术的 64/80 引脚高性能 1 Mb 闪存单片机

单片机的特殊功能:

工作电压范围:2.0V 至 3.6V
5.5V 容错输入 (仅数字引脚)
片上 2.5V 稳压器
低功耗、高速 CMOS 闪存技术
优化的 C 编译器架构:
- 可选的扩展指令集,可用于优化重入代码
中断优先级
8 x 8 单周期硬件乘法器
扩展的看门狗定时器 (Watchdog Timer,
WDT):
-4ms到 131s 的可编程时间
通过两个引脚进行单电源供电在线串行编程 (In-
Circuit Serial Programming™, ICSP™)
通过两个引脚,使用三个断点进行在线调试 (In-
Circuit Debug, ICD)
功耗管理模式:
- 运行:打开 CPU 和外设
- 空闲:关闭 CPU,打开外设
- 休眠:关闭 CPU 和外设
闪存具有自写入能力

灵活的振荡器结构:

两种晶振模式,频率最高可达 40 MHz (VDD >
2.15V
4 倍频锁相环 (Phase Lock LoopPLL
两种外部时钟模式,频率最高可达 40MHz
31 kHz 内部振荡器
辅助振荡器使用 Timer1@32kHz
双速振荡器起振
故障保护时钟监视器:
- 在外部时钟停止时允许安全关闭器件
外设特点:
灌电流 / 拉电流峰值为 25 mA/25 mA (PORTB
PORTC
4 个可编程外部中断
4 个输入电平变化中断
2 个捕获 / 比较 /PWM CCP)模块
3 个增强型捕获 / 比较 /PWM ECCP)模块:
-1个、 2 个或 4 个 PWM 输出
- 可选择的极性
- 可编程的死区时间
- 自动关闭和自动重启
2 个主控同步串行端口 (Master Synchronous
Serial Port, MSSP)模块,支持共 4 种模式下的 3 线 SPI™ 以及 I2C™ 模块的主控和从动模式
两个增强型可寻址 USART 模块:
- 支持 RS-485RS-232 LIN 1.2
- 起始位上自动唤醒
- 自动波特率检测
多达 15 路通道的 10 位模数转换器模块 (A/D):
- 自动采集功能
- 休眠模式下可进行转换
- 自动校准功能
2 个带输入复用的模拟比较器
外部存储总线
(仅 PIC18F8XJ10/8XJ15 器件):
寻址能力最高可达 2MB
8 位或 16 位接口
12 位、 16 位和 20 位寻址模式
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 1
PIC18F87J10 系列
器件
闪存
(字节)
程序存储器
# 单字
指令
SRAM 数据
存储器
(字节)
I/O
10
A/D
通道数
CCP/
ECCP
PWM
PIC18F65J10 32K 16384 2048 50 11 2/3 2 PIC18F65J15 48K 24576 2048 50 11 2/3 2 PIC18F66J10 64K 32768 2048 50 11 2/3 2 PIC18F66J15 96K 49152 3936 50 11 2/3 2 PIC18F67J10 128K 65536 3936 50 11 2/3 2 PIC18F85J10 32K 16384 2048 66 15 2/3 2 PIC18F85J15 48K 24576 2048 66 15 2/3 2 PIC18F86J10 64K 32768 2048 66 15 2/3 2 PIC18F86J15 96K 49152 3936 66 15 2/3 2 PIC18F87J10 128K 65536 3936 66 15 2/3 2
引脚图
64 引脚 TQFP
RE2/CS/P2B
RE3/P3C
(1)
/P2A
(1)
RE4/P3B
RE5/P1C
RE6/P1B
RE7/ECCP2
RD0/PSP0
VDDVSS
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4/SDO2
RD5/PSP5/SDI2/SDA2
MSSP
SPI™
有有 有有 有有 有有 有有 有有 有有 有有 有有 有有
RD6/PSP6/SCK2/SCL2
RD7/PSP7/SS2
主控
2
I
C™
比较器
定时器
EUSART
8/16
222/3 222/3 222/3 222/3 222/3 222/3 222/3 222/3 222/3 222/3
外部总线
无 无 无 无 无 有 有 有 有 有
RE1/WR/P2C
/P2D
RE0/RD
RG0/ECCP3/P3A
RG1/TX2/CK2 RG2/RX2/DT2
RG3/CCP4/P3D
RG4/CCP5/P1D
RF5/AN10/CV
RF2/AN7/C1OUT
MCLR
V
VDDCORE/VCAP
RF7/SS1
RF6/AN11
REF
RF4/AN9 RF3/AN8
50
/P2A
51
31
30
RC6/TX1/CK1
RC0/T1OSO/T13CKI
49
32
RC7/RX1/DT1
48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33
RB0/INT0/FLT0 RB1/INT1 RB2/INT2 RB3/INT3 RB4/KBI0 RB5/KBI1 RB6/KBI2/PGC
SS
V OSC2/CLKO OSC1/CLKI
DD
V RB7/KBI3/PGD RC5/SDO1 RC4/SDI1/SDA1 RC3/SCK1/SCL1 RC2/ECCP1/P1A
585756
60
DD
AV
61
AVSS
RA3/AN3/VREF+
59
PIC18F6XJ10 PIC18F6XJ15
REF-
RA1/AN1
RA2/AN2/V
646362
1 2 3 4 5 6 7 8
SS
9 10 11 12 13 14 15 16
171819202122232425
ENVREG
RF1/AN6/C2OUT
545352
55
26
272829
VDD
RA5/AN4
(1)
(1)
RA4/T0CKI
SS
V
RA0/AN0
RC1/T1OSI/ECCP2
1 ECCP2/P2A 引脚位置取决于 CCP2MX 配置位的设置。
DS39663B_CN 第 2 页 初稿  2005 Microchip Technology Inc.

引脚图 (续)

PIC18F87J10 系列
80 引脚 TQFP
RH2/A18 RH3/A19
RE1/AD9/WR/P2C
RE0/AD8/RD
RG0/ECCP3/P3A
RG3/CCP4/P3D
RG4/CCP5/P1D
VDDCORE/VCAP
RF5/AN10/CVREF
RF2/AN7/C1OUT
RH7/AN15/P1B
RH6/AN14/P1C
/P2D
RG1/TX2/CK2 RG2/RX2/DT2
MCLR
V
RF7/SS1
RF6/AN11
RF4/AN9 RF3/AN8
(1)
/P2A
(1)
(2)
(2)
(2)
RE3/AD11/P3C
RE2/AD10/CS/P2B
RH0/A16
RH1/A17
80
79
78
777675
1 2
3 4 5 6 7 8 9
SS
(2)
(2)
10 11 12 13 14 15 16 17 18 19 20
2122232425262728293031
(2)
RE4/AD12/P3B
RE5/AD13/P1C
RE6/AD14/P1B
RE7/AD15/ECCP2
RD0/AD0/PSP0
VDDVSS
RD1/AD1/PSP1
RD2/AD2/PSP2
RD3/AD3/PSP3
RD4/AD4/PSP4/SDO2
RD5/AD5/PSP5/SDI2/SDA2
RD6/AD6/PSP6/SCK2/SCL2
RD7/AD7/PSP7/SS2
RJ0/ALE
RJ1/OE
727170
74
73
PIC18F8XJ10
PIC18F8XJ15
69
32
686766
333435
65
36
646362
37
38
61
60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41
40
39
RJ2/WRL RJ3/WRH RB0/INT0/FLT0 RB1/INT1 RB2/INT2 RB3/INT3/ECCP2 RB4/KBI0 RB5/KBI1 RB6/KBI2/PGC V
SS
OSC2/CLKO OSC1/CLKI V
DD
RB7/KBI3/PGD RC5/SDO1 RC4/SDI1/SDA1 RC3/SCK1/SCL1 RC2/ECCP1/P1A RJ7/UB RJ6/LB
(1)
/P2A
(1)
(2)
RH5/AN13/P3B
(2)
RF1/AN6/C2OUT
RH4/AN12/P3C
ENVREG
DD
AV
SS
RA1/AN1
RA0/AN0
V
REF-
AVSS
RA2/AN2/V
RA3/AN3/VREF+
VDD
(1)
/P2A
(1)
RA5/AN4
RA4/T0CKI
RC6/TX1/CK1
RC0/T1OSO/T13CKI
RC1/T1OSI/ECCP2
RC7/RX1/DT1
RJ4/BA0
RJ5/CE
1CCP2/P2A 引脚位置取决于 CCP2MX 配置位和程序存储器模式的设置。
2P1BP1CP3B P3C 引脚位置取决于 ECCPMX 配置位的设置。
2005 Microchip Technology Inc. 初稿 DS39663B_CN 3
PIC18F87J10 系列
目录
1.0 器件概述 ....................................................................................................................................................................................... 5
2.0 振荡器配置 ................................................................................................................................................................................. 27
3.0 功耗管理模式.............................................................................................................................................................................. 35
4.0 复位 ............................................................................................................................................................................................ 43
5.0 存储器构成 ................................................................................................................................................................................. 55
6.0 闪存程序存储器 .......................................................................................................................................................................... 81
7.0 外部存储总线.............................................................................................................................................................................. 91
8.0 8 x 8 硬件乘法器....................................................................................................................................................................... 103
9.0 中断 .......................................................................................................................................................................................... 105
10.0 I/O 端口..................................................................................................................................................................................... 121
11.0 Timer0 模块 .............................................................................................................................................................................. 147
12.0 Timer1 模块 .............................................................................................................................................................................. 151
13.0 Timer2 模块 .............................................................................................................................................................................. 157
14.0 Timer3 模块 .............................................................................................................................................................................. 159
15.0 Timer4 模块 .............................................................................................................................................................................. 163
16.0 捕捉 / 比较 /PWM CCP)模块............................................................................................................................................... 165
17.0 增强型捕捉 / 比较 /PWM ECCP)模块 ................................................................................................................................. 173
18.0 主控同步串行端口 (MSSP)模块 ........................................................................................................................................... 189
19.0 增强型通用同步 / 异步收发器 ................................................................................................................................................... 235
20.0 10 位模数转换器 (A/D)模块.................................................................................................................................................. 257
21.0 比较器模块 ............................................................................................................................................................................... 267
22.0 比较器参考电压模块 ................................................................................................................................................................. 273
23.0 CPU 的特殊功能....................................................................................................................................................................... 277
24.0 指令集综述 ............................................................................................................................................................................... 289
25.0 开发支持 ................................................................................................................................................................................... 339
26.0 电气规范 ................................................................................................................................................................................... 343
27.0 封装信息 ................................................................................................................................................................................... 379
附录 A 在高端器件系列间移植 ................................................................................................................................................... 383
索引 .................................................................................................................................................................................................... 385
Microchip 网站.................................................................................................................................................................................... 397
变更通知客户服务 .............................................................................................................................................................................. 397
客户支持............................................................................................................................................................................................. 397
读者反馈表 ......................................................................................................................................................................................... 398
产品标识体系...................................................................................................................................................................................... 399
致 客 户
我们旨在提供最佳文档供客户正确使用 Microchip 产品。 为此,我们将不断改进出版物的内容和质量,使之更好地满足您的要求。 出版物的质量将随新文档及更新版本的推出而得到提升。
如果您对本出版物有任何问题和建议,请通过电子邮件联系我公司 TRC 经理,电子邮件地址为 CTRC@microchip.com,或将本 数据手册后附的 《读者反馈表》传真到 86-21-5407 5066。我们期待您的反馈。
最新数据手册
欲获得本数据手册的最新版本,请查询我公司的网站:
http://www.microchip.com
查看数据手册中任意一页下边角处的文献编号即可确定其版本。文献编号中数字串后的字母是版本号 的 A 版本。
勘误表
现有器件可能带有一份勘误表,描述了实际运行与数据手册中记载内容之间存在的细微差异以及建议的变通方法。一旦我们了解到 器件 / 文档存在某些差异时,就会发布勘误表。勘误表上将注明其所适用的硅片版本和文件版本。
欲了解某一器件是否存在勘误表,请通过以下方式之一查询:
• Microchip 网站 http://www.microchip.com
当地 Microchip 销售办事处 (见最后一页)
在联络销售办事处时,请说明您所使用的器件型号、硅片版本和数据手册版本 (包括文献编号)。
客户通知系统
欲及时获知 Microchip 产品的最新信息,请到我公司网站 www.microchip.com 上注册。
例如:DS30000A是DS30000
DS39663B_CN 4 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列

1.0 器件概述

该文档包含以下器件的特定信息:
• PIC18F65J10 • PIC18F85J10
• PIC18F65J15 • PIC18F85J15
• PIC18F66J10 • PIC18F86J10
• PIC18F66J15 • PIC18F86J15
• PIC18F67J10 • PIC18F87J10
PIC18F87J10 是新面世的低压产品系列,在保留 PIC18
单片机的传统优点(即出色的计算性能以及丰富的功能 集)的同时,性价比极高。这些功能使得 PIC18F87J10 系列成为许多高性能、低成本应用的理想选择。

1.1 内核功能

1.1.1 纳瓦技术

PIC18F87J10 系列的所有器件都具有一系列能显著降低
工作功耗的功能。主要包括以下几项:
备用运行模式:通过将 Timer1 或内部振荡模块作
为单片机时钟源,可使代码执行时的功耗大约降低
90%
多种空闲模式:单片机还可在其 CPU 内核禁止而
外设仍然运行的情况下运行。处于这些状态时,功 耗能降得更低,只有正常工作所需的 4%
动态模式切换:在器件工作期间可由用户代码调用
该功耗管理模式,允许用户将节能理念融入到他们 应用的软件设计中。

1.1.2 振荡器选项和功能

PIC18F87J10系列的所有器件提供 5个不同的振荡器选
,使用户在开发应用硬件时有很大的选择范围。这些
选项包括:
• 2 个晶振模式,使用晶振或陶瓷谐振器。
两个外部时钟模式,提供 4 分频时钟输出选项。
一个锁相环 (PLL)倍频器,可在外部振荡器模
式下使用,允许时钟速度最高达 40 MHz
• 31kHz 固定频率输出的内部 RC 振荡器,该输出
为对时序要求不高的应用提供了极低功耗选项。
内部振荡器电路提供了一个稳定的参考源,给 PIC18F87J10 系列器件增加了额外的功能以使器件高 效工作:
故障保护时钟监视器:该选项不停地监视主时钟
源,将其与内部振荡器提供的参考信号作比较。如 果发生了时钟故障,单片机会切换到内部振荡器, 使器件可继续低速工作或安全关闭。
双速启动:该功能允许在上电复位或从休眠模式唤
醒时将内部振荡器用作时钟源,直到主时钟源可用 时止。

1.1.3 扩展的存储器

PIC18F87J10 系列为应用程序代码提供了从 32 KB 128 KB 足够的代码空间。程序存储器的闪存单元额定
可反复擦写多达 100 次。如果不刷新,保守地估计数据 能保存 100 年以上。
PIC18F87J10 系列还为动态应用数据提供了足够的空 间和高达 3936 字节的数据 RAM

1.1.4 外部存储总线

虽然 128 KB 的存储空间对一个应用就已足够,但 PIC18F87J10 系列的 80 引脚器件还是提供了外部存储 总线。这样可使单片机的内部程序计数器能寻址高达 2MB的存储器空间,允许 8 位器件无法实现的数据访 问级别。包括其他存储器选项:
使用片内和外部存储器组合,上限为 2MB
使用外部闪存存储器存储可再编程应用程序代码或
大数据表
使用外部 RAM 器件存储大量可变数据

1.1.5 扩展指令集

PIC18F87J10 系列实现了可选的 PIC18 扩展指令集,
新增了 8 条指令和变址寻址模式。扩展指令集作为器件 配置选项被使能,它是专门为优化原先由高级语言(如 C 语言)开发的重入应用程序代码设计的。
2005 Microchip Technology Inc. 初稿 DS39663B_CN 5
PIC18F87J10 系列
1.1.6 便于移植
无论存储器大小如何,所有的器件均共享相同一组外 设,随着应用代码的开发和变化,为各种应用提供便捷 的移植路径。
整个系列的引脚排列设计一致也有助于向下一代更大的
移植。在 64 引脚器件间、80 引脚器件间移植,甚
器件 至是从 64 引脚器件向 80 引脚的
PIC18F87J10 系列的引脚同其他 PIC18 系列器件 (如 PIC18F8720 PIC18F8722)的引脚兼容。这为不同
应用的发展开拓了新的视野,使开发者能在保留相同功 能集的同时在MicrochipPIC18 系列中选择价廉的器件。
移植都是可以的。

1.2 其他特殊功能

通信:PIC18F87J10 系列包含了一系列串行通信
外设,包括 2 个独立增强型 USART 2 个主控 SSP 模块,具备 SPI™ I 两种工作模式。此外,一个通用 I/O 端口可以重新 配置为 8 位并行从动端口,实现处理器到处理器的 直接通信。
CCP 模块:该系列中所有的器件均包含 2 个捕捉 /
比较 /PWM CCP)模块和 3 个增强型 CCP 模块 以在控制应用中得到最大的灵活性。可能会采用多 达 4 个不同的时基以便能同时执行不同的操作。每 个 ECCP (共 3 个)可提供多达 4 PWM 输出, 共 12 PWM 输出。 ECCP 还提供了许多有用的 功能,包括极性选择,可编程死区时间,自动关闭 和自动重启、半桥和全桥输出模式。
10 位 A/D 转换器:该模块包含了可编程采集时
间,允许不必等待一个采样周期,就可选择通道并 启动转换,从而减少了代码开销。
扩展的看门狗定时器 (Watchdog Timer,WDT):该
扩展的看门狗定时器添加了 16 位预分频器,可扩 展的超时范围,在整个工作电压和温度内保持稳 定。请参见第 26.0 节 “电气规范”了解看门狗的 超时时间。
2
C™ (主控和从动)

1.3 系列中各产品的具体信息

PIC18F87J10 系列器件具有 64 引脚和 80 引脚两种封 装形式。图 1-1 和图 1-2 分别为这两类器件的框图。
这两类器件在以下 4 个方面存在差异:
1. 闪存程序存储器 (6 种规格,范围从 PIC18FX5J1032 KB PIC18FXJ710 128 KB)。
2. 数据 RAM PIC18FX5J10/X5J15/X6J10 器件 为2048字节,PIC18FX6J15/X7J10器件为 3936 字节)。
3. A/D 通道(64 引脚器件有 11 个,80 引脚器件 有 15 个)。
4. I/O 端口(64 引脚器件上有 7 个双向端口,80 引 脚器件上有 9 个双向端口)。
该系列器件的其他功能都是相同的。在表 1-1 和表 1-2 中总结了这些功能。
在表 1-3 和表 1-4 种列举了所有器件的引脚排列。
DS39663B_CN 6 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列

表 1-1: PIC18F87J10 系列器件特性 (64 引脚器件)

特性
工作频率 程序存储器 (字节) 程序存储器 (指令) 数据存储器 (字节) 中断源 I/O 端口 端口 ABCDEF G 定时器 捕捉 / 比较 /PWM 模块 增强型捕捉 / 比较 /PWM 模块 串行通信 MSSP 2),增强型 USART 2) 并行通信 (PSP)有 10 位模数转换模块 11 个输入通道
复位 (和延时) PORBORRESET 指令,堆栈满、堆栈下溢、
指令集 75 条指令,启用扩展指令集后总共为 83 条 封装 64 引脚 TQFP
PIC18F65J10 PIC18F65J15 PIC18F66J10 PIC18F66J15 PIC18F67J10
DC–40 MHz DC–40 MHz DC–40 MHz DC–40 MHz DC–40 MHz
32K 48K 64K 96K 128K
16384 24576 32768 49152 65536
2048 2048 2048 3936 3936
27
5 2 3
WDT PWRT OST
MCLR

1-2 PIC18F87J10 系列器件特性 (80 引脚器件)

特性
工作频率 程序存储器 (字节) 程序存储器 (指令) 数据存储器 (字节) 中断源 I/O 端口 端口 ABCDEFGH J 定时器 捕捉 / 比较 /PWM 模块 增强型捕捉 /
比较 /PWM 模块 串行通信 MSSP 2),增强型 USART 2) 并行通信 (PSP)有 10 位模数转换模块 15 个输入通道
复位 (和延时) PORBORRESET 指令,堆栈满、堆栈下溢、
指令集 75 条指令,启用扩展指令集后总共为 83 条 封装 80 引脚 TQFP
PIC18F85J10 PIC18F85J15 PIC18F86J10 PIC18F86J15 PIC18F87J10
DC–40 MHz DC–40 MHz DC–40 MHz DC–40 MHz DC–40 MHz
32K 48K 64K 96K 128K
16384 24576 32768 49152 65536
2048 2048 2048 3936 3936
MCLR
27
5 2 3
WDT PWRT OST
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 7
PIC18F87J10 系列

1-1 PIC18F6XJ10/6XJ15 64 引脚)框图

OSC2/CLKO
OSC1/CLKI
ENVREG
表指针 <21>
/ 减逻辑
21
地址锁存器
程序存储器
96 KB
数据锁存器
指令总线 <16>
时序 产生
INTRC
振荡器
高精度
带隙
参考源
稳压器
VDDCORE/VCAP
20
8
V
DD
PCLATH
PCLATU
PCU
程序计数器
31 级堆栈
STKPTR
表锁存器
ROM 锁存器
IR
指令
解码和
控制
上电延迟
定时器
振荡器
起振定时器
上电 复位
看门狗 定时器
欠压
(2)
复位
V
SS
8
PCH PCL
状态机 控制信号
MCLR
数据总线 <8>
8
数据存储器
3.9 KB
地址锁存器
数据地址 <12>
4
BSR
FSR0 FSR1 FSR2
3
BITOP
8
数据锁存器
12
12
/
逻辑
地址 译码
8 × 8 乘法器
W
8
8
ALU<8>
4
快速操作
存储区
PRODLPRODH
8
PORTA
(1)
RA0:RA5
PORTB
(1)
RB0:RB7
12
PORTC
RC0:RC7
(1)
PORTD
RD0:RD7
(1)
8
PORTE
(1)
RE0:RE7
8
8
8
PORTF
RF1:RF7
(1)
G
RG0:RG4
(1)
ECCP1
10 ADC
ECCP2
ECCP3
CCP4 CCP5
Timer2Timer1 Timer3Timer0
EUSART1
Timer4
EUSART2
比较器
MSSP1
MSSP2
1: 请参见表 1-3 了解 I/O 端口引脚说明。
2: 当主板稳压器使能时提供 BOR 功能。
DS39663B_CN 8 初稿 2005 Microchip Technology Inc.

1-2 PIC18F8XJ10/8XJ15 80 引脚)框图

数据总线 <8>
PIC18F87J10 系列
表指针 <21>
/ 减逻辑
21
地址锁存器
程序存储器 (128 KB
数据锁存器
系统总线接口
指令总线 <16>
AD15:AD0A19:A16
(与 PORTD
PORTE PORTH 复用)
状态机 控制信号
OSC2/CLKO
OSC1/CLKI
INTRC
振荡器
高精度
参考源
ENVREG
稳压器
时序 产生
带隙
20
PCLATU
PCU
程序计数器
31 级堆栈
8
8
PCLATH
PCH PCL
STKPTR
表锁存器
ROM 锁存器
IR
指令
译码和
控制
上电延迟
定时器
振荡器
起振定时器
上电 复位
看门狗 定时器
欠压
(2)
复位
8
数据锁存器
PORTA
RA0:RA5
(1)
数据存储器
3.9 KB
地址锁存器
12
PORTB
RB0:RB7
(1)
数据地址 <12>
BSR
4
FSR0 FSR1 FSR2
/
逻辑
地址 译码
12
4
快速操作
存储区
PORTC
(1)
RC0:RC7
12
PORTD
RD0:RD7
(1)
PORTE
(1)
RE0:RE7
8
PORTF
RF1:RF7
PORTG
RG0:RG4
PORTH
RH0:RH7
(1)
(1)
(1)
3
BITOP
8
PRODLPRODH
8 × 8 乘法器
W
8
8
ALU<8>
8
8
8
8
PORTJ
(1)
RJ0:RJ7
ECCP1
VDDCORE/VCAP
10 ADC
ECCP2 ECCP3
V
DD
SS
V
MCLR
Timer2Timer1 Timer3Timer0
EUSART1
Timer4
EUSART2
比较器
MSSP1
MSSP2CCP4 CCP5
1: 请参见表 1-4 了解 I/O 端口引脚说明。
2: 当主板稳压器使能时提供 BOR 功能。
2005 Microchip Technology Inc. 初稿 DS39663B_CN 9
PIC18F87J10 系列

1-3 PIC18F6XJ10/6XJ15I/O 引脚排列说明

引脚名称
引脚号
TQFP
引脚类型缓冲器
类型
说明
MCLR OSC1/CLKI
OSC1
CLKI
OSC2/CLKO
OSC2
CLKO
RA0/AN0
RA0 AN0
RA1/AN1
RA1 AN1
RA2/AN2/V
RA2 AN2 V
RA3/AN3/V
RA3 AN3 V
RA4/T0CKI
RA4 T0CKI
RA5/AN4
RA5 AN4
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
1: 当 CCP2MX 配置位置 1 时,对 ECCP2/P2A 进行默认设置。
REF-
REF-
REF+
REF+
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
2: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置。
7IST
39
I I
CMOS
40
O
O
24
I/O
I
23
I/O
I
22
I/O
I I
21
I/O
I I
28
I/O
I
27
I/O
I
主清零 (复位)输入。此引脚为低电平时,器件复位。 振荡器晶振或外部时钟输入。
ST
TTL
模拟
TTL
模拟
TTL
模拟 模拟
TTL
模拟 模拟
ST ST
TTL
模拟
振荡器晶振输入或外部时钟源输入。 在 RC 模式下带 ST 缓冲器;否则带 CMOS 缓冲器。
外部时钟源输入。总是与 OSC1 引脚功能复用。(请参
见相关的 SC1/CLKI OSC2/CLKO 引脚信息。)
振荡器晶振或时钟输出。
振荡器晶振输出。在晶振模式下,该引脚与晶振或谐振 器相连。 在 RC 模式下, OSC2 引脚输出 CLKO 振荡信号, 该信号是 OSC1 引脚上振荡信号的 4 分频,该频率 等于指令周期的倒数。
PORTA 是双向 I/O 端口。
数字 I/O。 模拟输入 0
数字 I/O。 模拟输入 1
数字 I/O。 模拟输入 2A/D 参考电压 (低电平端)输入。
数字 I/O。 模拟输入 3A/D 参考电压 (高电平端)输入。
数字 I/OTimer0 外部时钟输入。
数字 I/O。 模拟输入 4
DD
DS39663B_CN 10 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列
1-3 PIC18F6XJ10/6XJ15I/O 引脚排列说明 (续)
引脚名称
RB0/INT0/FLT0
RB0 INT0 FLT0
RB1/INT1
RB1 INT1
RB2/INT2
RB2 INT2
RB3/INT3
RB3 INT3
RB4/KBI0
RB4 KBI0
RB5/KBI1
RB5 KBI1
RB6/KBI2/PGC
RB6 KBI2 PGC
RB7/KBI3/PGD
RB7 KBI3 PGD
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
1: 当 CCP2MX 配置位置 1 时,对 ECCP2/P2A 进行默认设置。
2: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置。
引脚号
TQFP
48
47
46
45
44
43
42
37
引脚类型缓冲器
类型
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
TTL I I
I
I
I
I
I
I
I
ST ST
TTL
ST
TTL
ST
TTL
ST
TTL
TTL
TTL
TTL
TTL
TTL
ST
TTL
TTL
ST
说明
PORTB 是双向 I/O 端口。 PORTB 在所有的输入端都可以 软件编程为内部弱上拉。
数字 I/O。 外部中断 0ECCP1/2/3 故障输入。
数字 I/O。 外部中断 1
数字 I/O。 外部中断 2
数字 I/O。 外部中断 3
数字 I/O。 电平变化中断引脚。
数字 I/O。 电平变化中断引脚。
数字 I/O。 电平变化中断引脚。 在线调试器和 ICSP™ 编程时钟引脚。
数字 I/O。 电平变化中断引脚。 在线调试器和 ICSP™ 编程数据引脚。
DD
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 11
PIC18F87J10 系列
1-3 PIC18F6XJ10/6XJ15I/O 引脚排列说明 (续)
引脚名称
RC0/T1OSO/T13CKI
RC0 T1OSO T13CKI
RC1/T1OSI/ECCP2/P2A
RC1 T1OSI ECCP2 P2A
RC2/ECCP1/P1A
RC2 ECCP1 P1A
RC3/SCK1/SCL1
RC3 SCK1 SCL1
RC4/SDI1/SDA1
RC4 SDI1 SDA1
RC5/SDO1
RC5 SDO1
RC6/TX1/CK1
RC6 TX1 CK1
RC7/RX1/DT1
RC7 RX1 DT1
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
1: 当 CCP2MX 配置位置 1 时,对 ECCP2/P2A 进行默认设置。
(1)
(1)
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 VDD
2: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置。
引脚号
TQFP
30
29
33
34
35
36
31
32
引脚类型缓冲器
类型
I/O
O
I
I/O
I
I/O
O
I/O I/O
O
I/O I/O I/O
I/O
I
I/O
I/O
O
I/O
O
I/O
I/O
I
I/O
ST
ST
ST
CMOS
ST
ST ST
ST ST ST
ST ST ST
ST
ST
ST
ST ST ST
说明
PORTC 是双向 I/O 端口。
数字 I/O
Timer1 振荡器输出。 Timer1/Timer3 外部时钟源输入。
数字 I/O Timer1 振荡器输入。 Capture2 输入 /Compare2 输出 /PWM2 输出。 ECCP2 PWM 输出 A。
数字 I/O Capture1 输入 /Compare1 输出 /PWM1 输出。 ECCP1 PWM 输出 A。
数字 I/O SPI™ 模式的同步串行时钟输入 / 输出。
2
C™ 模式的同步串行时钟输入 / 输出。
I
数字 I/O SPI 数据输入。
2
C 数据 I/O
I
数字 I/O SPI 数据输出。
数字 I/O EUSART1 异步发送。 EUSART1 同步时钟 (请参见相关的 RX1/DT1 引脚信
息)。
数字 I/O
EUSART1 异步接收。 EUSART1 同步数据 (请参见相关的 TX1/CK1 引脚信
息)。
DS39663B_CN 12 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列
1-3 PIC18F6XJ10/6XJ15I/O 引脚排列说明 (续)
引脚名称
RD0/PSP0
RD0 PSP0
RD1/PSP1
RD1 PSP1
RD2/PSP2
RD2 PSP2
RD3/PSP3
RD3 PSP3
RD4/PSP4/SDO2
RD4 PSP4 SDO2
RD5/PSP5/SDI2/SDA2
RD5 PSP5 SDI2 SDA2
RD6/PSP6/SCK2/SCL2
RD6 PSP6 SCK2 SCL2
RD7/PSP7/SS2
RD7 PSP7 SS2
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
1: 当 CCP2MX 配置位置 1 时,对 ECCP2/P2A 进行默认设置。
2: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置。
引脚号
TQFP
58
55
54
53
52
51
50
49
引脚类型缓冲器
类型
I/O I/O
I/O I/O
I/O I/O
I/O I/O
I/O I/O
O
I/O I/O
I
I/O
I/O I/O I/O I/O
I/O I/O
I
ST
TTL
ST
TTL
ST
TTL
ST
TTL
ST
TTL
ST
TTL
ST ST
ST
TTL
ST ST
ST TTL TTL
说明
PORTD 是双向 I/O 端口。
数字 I/O。 并行从动端口数据。
数字 I/O。 并行从动端口数据。
数字 I/O。 并行从动端口数据。
数字 I/O。 并行从动端口数据。
数字 I/O。 并行从动端口数据。 SPI™ 数据输出。
数字 I/O。 并行从动端口数据。
SPI 数据输入。
2
C™ 数据 I/O
I
数字 I/O。 并行从动端口数据。
SPI 模式的同步串行时钟输入 / 输出。
2
C 模式的同步串行时钟输入 / 输出。
I
数字 I/O。 并行从动端口数据。
SPI 从动选择输入。
DD
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 13
PIC18F87J10 系列
1-3 PIC18F6XJ10/6XJ15I/O 引脚排列说明 (续)
引脚名称
RE0/RD
RE1/WR/P2C
RE2/CS
RE3/P3C
RE4/P3B
RE5/P1C
RE6/P1B
RE7/ECCP2/P2A
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
1: 当 CCP2MX 配置位置 1 时,对 ECCP2/P2A 进行默认设置。
/P2D RE0 RD P2D
RE1 WR P2C
/P2B RE2 CS P2B
RE3 P3C
RE4 P3B
RE5 P1C
RE6 P1B
RE7 ECCP2 P2A
(2)
(2)
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
2: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置。
引脚号
TQFP
2
1
64
63
62
61
60
59
引脚类型缓冲器
类型
I/O
I
O
I/O
I
O
I/O
I
O
I/O
O
I/O
O
I/O
O
I/O
O
I/O I/O
O
ST
TTL
ST
TTL
ST
TTL
ST
ST
ST
ST
ST ST
说明
PORTE 是双向 I/O 端口。
数字 I/O。 并行从动端口读控制。 ECCP2 PWM 输出 D
数字 I/O。 并行从动端口写控制。 ECCP2 PWM 输出 C
数字 I/O。 并行从动端口片选控制。 ECCP2 PWM 输出 B
数字 I/OECCP3 PWM 输出 C
数字 I/OECCP3 PWM 输出 B
数字 I/OECCP1 PWM 输出 C
数字 I/OECCP1 PWM 输出 B
数字 I/O
Capture2 输入 /Compare2 输出 /PWM2 输出。 ECCP2 PWM 输出 A。
DD
DS39663B_CN 14 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列
1-3 PIC18F6XJ10/6XJ15I/O 引脚排列说明 (续)
引脚名称
RF1/AN6/C2OUT
RF1
AN6
C2OUT
RF2/AN7/C1OUT
RF2
AN7
C1OUT
RF3/AN8
RF3
AN8
RF4/AN9
RF4
AN9
RF5/AN10/CV
RF5
AN10
CV
RF6/AN11
RF6
AN11
RF7/SS1
RF7
SS1
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
1: 当 CCP2MX 配置位置 1 时,对 ECCP2/P2A 进行默认设置。
2: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置。
REF
REF
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
引脚号
TQFP
17
16
15
14
13
12
11
引脚类型缓冲器
类型
I/O
I
O
I/O
I
O
I/O
I
I/O
I
I/O
I
O
I/O
I
I/O
I
ST
模拟
ST
模拟
ST
模拟
ST
模拟
ST
模拟
ST
模拟
ST
TTL
说明
PORTF 是双向 I/O 端口。
数字 I/O。 模拟输入 6Comparator2 输出。
数字 I/O。 模拟输入 7Comparator1 输出。
数字 I/O。 模拟输入 8
数字 I/O。 模拟输入 9
数字 I/O。 模拟输入 10。 比较器参考电压输出。
数字 I/O。 模拟输入 11
数字 I/O
SPI™ 从动选择输入。
DD
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 15
PIC18F87J10 系列
1-3 PIC18F6XJ10/6XJ15I/O 引脚排列说明 (续)
引脚名称
RG0/ECCP3/P3A
RG0 ECCP3 P3A
RG1/TX2/CK2
RG1 TX2 CK2
RG2/RX2/DT2
RG2 RX2 DT2
RG3/CCP4/P3D
RG3 CCP4 P3D
RG4/CCP5/P1D
RG4 CCP5 P1D
SS 9, 25, 41, 56 P
V V
DD 26, 38, 57 P
AV
SS 20 P
AVDD 19 P ENVREG 18 I ST V
DDCORE/VCAP
VDDCORE VCAP
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
1: 当 CCP2MX 配置位置 1 时,对 ECCP2/P2A 进行默认设置。
2: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置。
引脚号
TQFP
3
4
5
6
8
10
引脚类型缓冲器
类型
I/O I/O
O
I/O
O
I/O
I/O
I
I/O
I/O I/O
O
I/O I/O
O
P P
ST ST
ST
ST
ST ST ST
ST ST
ST ST
- - 逻辑电路和 I/O 引脚的参考地。 - 外设逻辑电路和 I/O 引脚的正向电源。 - 模拟模块的参考地。 - 模拟模块的正向电源。
- -
说明
PORTG 是双向 I/O 端口。
数字 I/O
Capture3 输入 /Compare3 输出 /PWM3 输出。 ECCP3 PWM 输出 A。
数字 I/O EUSART2 异步发送。 EUSART2 同步时钟 (请参见相关的 RX2/DT2 引脚信
息)。
数字 I/O
EUSART2 异步接收。 EUSART2 同步数据 (请参见相关的 TX2/CK2 引脚信
息)。
数字 I/O
Capture4 输入 /Compare4 输出 /PWM4 输出。 ECCP3 PWM 输出 D。
数字 I/O Capture5 输入 /Compare5 输出 /PWM5 输出。 ECCP1 PWM 输出 D。
使能片内稳压器。 与内核逻辑电路电源或外部过滤电容连接。
单片机内核逻辑电路正向电源 (禁止稳压器)。 与外部过滤电容连接 (使能稳压器)。
DD
DS39663B_CN 16 初稿  2005 Microchip Technology Inc.

1-4 PIC18F8XJ10/8XJ15I/O 引脚排列说明

引脚名称
引脚号
TQFP
引脚类型缓冲器
类型
PIC18F87J10 系列
说明
MCLR OSC1/CLKI
OSC1
CLKI
OSC2/CLKO
OSC2
CLKO
RA0/AN0
RA0
AN0
RA1/AN1
RA1
AN1
RA2/AN2/V
RA3/AN3/V
RA4/T0CKI
RA5/AN4
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
1: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (扩展单片机模式)。
REF-
RA2
AN2
V
REF-
REF+
RA3
AN3
V
REF+
RA4
T0CKI
RA5
AN4
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
2: 当 CCP2MX 配置位置 1 时,任何器件在任意工作模式下,对 ECCP2/P2A 进行默认设置。 3: 当 ECCPMX 配置位置 1 时,对 P1B/P1C/P3B/P3C 进行默认设置。 4: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (单片机模式)。 5: 当 ECCPMX 配置位清零时,对 P1B/P1C/P3B/P3C 进行其他设置。
9IST
49
I
I
CMOS
50
O
O
30
I/O
I
29
I/O
I
28
I/O
I I
27
I/O
I I
34
I/O
I
33
I/O
I
主清零 (复位)输入。此引脚为低电平时器件复位。 振荡器晶振或外部时钟输入。
ST
TTL
模拟
TTL
模拟
TTL
模拟 模拟
TTL
模拟 模拟
ST ST
TTL
模拟
振荡器晶振输入或外部时钟源输入。 在 RC 模式配置下带 ST 缓冲器;否则带 CMOS 缓冲器。
外部时钟源输入。总是与 OSC1 引脚功能复用。(请参加相关
OSC1/CLKI OSC2/CLKO 引脚信息。)
振荡器晶振或时钟输出。
振荡器晶振输出。在晶振模式下,该引脚与晶振或谐振器相 连。 在 RC 模式下, OSC2 引脚输出 CLKO 振荡信号, 该信号是 OSC1 引脚上振荡信号的 4 分频,该频率 等于指令周期的倒数。
PORTA 是双向 I/O 端口。
数字 I/O。 模拟输入 0。
数字 I/O。 模拟输入 1。
数字 I/O。 模拟输入 2。 A/D 参考电压 (低电平端)输入。
数字 I/O。 模拟输入 3。 A/D 参考电压 (高电平端)输入。
数字 I/OTimer0 外部时钟源输入。
数字 I/O。 模拟输入 4。
DD
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 17
PIC18F87J10 系列
1-4 PIC18F8XJ10/8XJ15I/O 引脚排列说明 (续)
引脚名称
RB0/INT0/FLT0
RB0 INT0 FLT0
RB1/INT1
RB1 INT1
RB2/INT2
RB2 INT2
RB3/INT3/ECCP2/P2A
RB3 INT3
(1)
ECCP2
(1)
P2A
RB4/KBI0
RB4 KBI0
RB5/KBI1
RB5 KBI1
RB6/KBI2/PGC
RB6 KBI2 PGC
RB7/KBI3/PGD
RB7 KBI3 PGD
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
1: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (扩展单片机模式)。
2: 当 CCP2MX 配置位置 1 时,任何器件在任意工作模式下,对 ECCP2/P2A 进行默认设置。 3: 当 ECCPMX 配置位置 1 时,对 P1B/P1C/P3B/P3C 进行默认设置。 4: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (单片机模式)。 5: 当 ECCPMX 配置位清零时,对 P1B/P1C/P3B/P3C 进行其他设置。
引脚号
TQFP
58
57
56
55
54
53
52
47
引脚类型缓冲器
类型
I/O
I/O
I/O
I/O
I/O
O
I/O
I/O
I/O
I/O
I/O
I/O
TTL I I
I
I
I
I
I
I
I
ST ST
TTL
ST
TTL
ST
TTL
ST ST
TTL
TTL
TTL
TTL
TTL
TTL
ST
TTL
TTL
ST
说明
PORTB 是双向 I/O 端口。 PORTB 在所有的输入端都可以软件 编程为内部弱上拉。
数字 I/O。 外部中断 0。 ECCP1/2/3 故障输入。
数字 I/O。 外部中断 1。
数字 I/O。 外部中断 2。
数字 I/O。 外部中断 3。
Capture2 输入 /Compare2 输出 /PWM2 输出。 ECCP2 PWM 输出 A
数字 I/O。 电平变化中断引脚。
数字 I/O。 电平变化中断引脚。
数字 I/O。 电平变化中断引脚。 在线调试器和 ICSP™ 编程时钟引脚。
数字 I/O。 电平变化中断引脚。 在线调试器和 ICSP™ 编程数据引脚。
DD
DS39663B_CN 18 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列
1-4 PIC18F8XJ10/8XJ15I/O 引脚排列说明 (续)
引脚名称
RC0/T1OSO/T13CKI
RC0 T1OSO T13CKI
RC1/T1OSI/ECCP2/P2A
RC1 T1OSI
(2)
ECCP2
(2)
P2A
RC2/ECCP1/P1A
RC2 ECCP1 P1A
RC3/SCK1/SCL1
RC3 SCK1 SCL1
RC4/SDI1/SDA1
RC4 SDI1 SDA1
RC5/SDO1
RC5 SDO1
RC6/TX1/CK1
RC6 TX1 CK1
RC7/RX1/DT1
RC7 RX1 DT1
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
1: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (扩展单片机模式)。
2: 当 CCP2MX 配置位置 1 时,任何器件在任意工作模式下,对 ECCP2/P2A 进行默认设置。 3: 当 ECCPMX 配置位置 1 时,对 P1B/P1C/P3B/P3C 进行默认设置。 4: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (单片机模式)。 5: 当 ECCPMX 配置位清零时,对 P1B/P1C/P3B/P3C 进行其他设置。
引脚号
TQFP
36
35
43
44
45
46
37
38
引脚类型缓冲器
类型
I/O
O
I/O
I/O
O
I/O I/O
O
I/O I/O I/O
I/O
I/O
I/O
O
I/O
O
I/O
I/O
I/O
ST
I
I
I
I
ST
ST
CMOS
ST
ST ST
ST ST ST
ST ST ST
ST
ST
ST
ST ST ST
说明
PORTC 是双向 I/O 端口。
数字 I/O
Timer1 振荡器输出。 Timer1/Timer3 外部时钟源输入。
数字 I/O Timer1 振荡器输入。 Capture2 输入 /Compare2 输出 /PWM2 输出。 ECCP2 PWM 输出 A
数字 I/O Capture1 输入 /Compare1 输出 /PWM1 输出。 ECCP1 PWM 输出 A
数字 I/O SPI™ 模式的同步串行时钟输入 / 输出。
2
I
C™ 模式的同步串行时钟输入 / 输出。
数字 I/O SPI 数据输入。
2
I
C 数据 I/O
数字 I/O SPI 数据输出。
数字 I/O EUSART1 异步发送。 EUSART1 同步时钟 (请参见相关的 RX1/DT1 引脚信息)。
数字 I/O EUSART1 异步接收。 EUSART1 同步数据 (请参见相关的 TX1/CK1 引脚信息)。
DD
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 19
PIC18F87J10 系列
1-4 PIC18F8XJ10/8XJ15I/O 引脚排列说明 (续)
引脚名称
RD0/AD0/PSP0
RD0 AD0 PSP0
RD1/AD1/PSP1
RD1 AD1 PSP1
RD2/AD2/PSP2
RD2 AD2 PSP2
RD3/AD3/PSP3
RD3 AD3 PSP3
RD4/AD4/PSP4/SDO2
RD4 AD4 PSP4 SDO2
RD5/AD5/PSP5/ SDI2/SDA2
RD5 AD5 PSP5 SDI2 SDA2
RD6/AD6/PSP6/ SCK2/SCL2
RD6 AD6 PSP6 SCK2 SCL2
RD7/AD7/PSP7/SS2
RD7 AD7 PSP7 SS2
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
1: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (扩展单片机模式)。
2: 当 CCP2MX 配置位置 1 时,任何器件在任意工作模式下,对 ECCP2/P2A 进行默认设置。 3: 当 ECCPMX 配置位置 1 时,对 P1B/P1C/P3B/P3C 进行默认设置。 4: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (单片机模式)。 5: 当 ECCPMX 配置位清零时,对 P1B/P1C/P3B/P3C 进行其他设置。
引脚号
TQFP
72
69
68
67
66
65
64
63
引脚类型缓冲器
类型
I/O I/O I/O
I/O I/O I/O
I/O I/O I/O
I/O I/O I/O
I/O I/O I/O
O
I/O I/O I/O
I
I/O
I/O I/O I/O I/O I/O
I/O I/O I/O
I
ST TTL TTL
ST TTL TTL
ST TTL TTL
ST TTL TTL
ST TTL TTL
ST TTL TTL
ST
ST
ST TTL TTL
ST
ST
ST TTL TTL TTL
说明
PORTD 是双向 I/O 端口。
数字 I/O。 外部存储器地址 / 数据 0。 并行从动端口数据。
数字 I/O。 外部存储器地址 / 数据 1。 并行从动端口数据。
数字 I/O。 外部存储器地址 / 数据 2。 并行从动端口数据。
数字 I/O。 外部存储器地址 / 数据 3。 并行从动端口数据。
数字 I/O。 外部存储器地址 / 数据 4。 并行从动端口数据。 SPI™ 数据输出。
数字 I/O。 外部存储器地址 / 数据 5。 并行从动端口数据。
SPI 数据输入。
2
I
C™ 数据 I/O
数字 I/O。 外部存储器地址 / 数据 6。 并行从动端口数据。
SPI 模式的同步串行时钟输入 / 输出。
2
I
C 模式的同步串行时钟输入 / 输出。
数字 I/O。 外部存储器地址 / 数据 7。 并行从动端口数据。
SPI 从动选择输入。
DD
DS39663B_CN 20 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列
1-4 PIC18F8XJ10/8XJ15I/O 引脚排列说明 (续)
引脚名称
RE0/AD8/RD
RE0 AD8 RD P2D
RE1/AD9/WR
RE1 AD9 WR P2C
RE2/AD10/CS
RE2 AD10 CS P2B
RE3/AD11/P3C
RE3 AD11 P3C
RE4/AD12/P3B
RE4 AD12 P3B
RE5/AD13/P1C
RE5 AD13 P1C
RE6/AD14/P1B
RE6 AD14 P1B
RE7/AD15/ECCP2/P2A
RE7 AD15 ECCP2 P2A
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
1: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (扩展单片机模式)。
/P2D
/P2C
/P2B
(3)
(3)
(3)
(3)
(4)
(4)
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
2: 当 CCP2MX 配置位置 1 时,任何器件在任意工作模式下,对 ECCP2/P2A 进行默认设置。 3: 当 ECCPMX 配置位置 1 时,对 P1B/P1C/P3B/P3C 进行默认设置。 4: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (单片机模式)。 5: 当 ECCPMX 配置位清零时,对 P1B/P1C/P3B/P3C 进行其他设置。
引脚号
TQFP
4
3
78
77
76
75
74
73
引脚类型缓冲器
类型
I/O I/O
O
I/O I/O
O
I/O I/O
O
I/O I/O
O
I/O I/O
O
I/O I/O
O
I/O I/O
O
I/O I/O I/O
O
ST TTL TTL
I
ST TTL TTL
I
ST TTL TTL
I
ST TTL
ST TTL
ST TTL
ST TTL
ST TTL
ST
说明
PORTE 是双向 I/O 端口。
数字 I/O。 外部存储器地址 / 数据 8。 并行从动端口读控制。 ECCP2 PWM 输出 D
数字 I/O。 外部存储器地址 / 数据 9。 并行从动端口写控制。 ECCP2 PWM 输出 C
数字 I/O。 外部存储器地址 / 数据 10。 并行从动端口片选控制。 ECCP2 PWM 输出 B
数字 I/O。 外部存储器地址 / 数据 11ECCP3 PWM 输出 C
数字 I/O。 外部存储器地址 / 数据 12ECCP3 PWM 输出 B
数字 I/O。 外部存储器地址 / 数据 13ECCP1 PWM 输出 C
数字 I/O。 外部存储器地址 / 数据 14ECCP1 PWM 输出 B
数字 I/O。 外部存储器地址 / 数据 15
Capture2 输入 /Compare2 输出 /PWM2 输出。 ECCP2 PWM 输出 A。
DD
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 21
PIC18F87J10 系列
1-4 PIC18F8XJ10/8XJ15I/O 引脚排列说明 (续)
引脚名称
RF1/AN6/C2OUT
RF1 AN6 C2OUT
RF2/AN7/C1OUT
RF2 AN7 C1OUT
RF3/AN8
RF3 AN8
RF4/AN9
RF4 AN9
RF5/AN10/CV
RF5 AN10 CV
RF6/AN11
RF6 AN11
RF7/SS1
RF7 SS1
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
1: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (扩展单片机模式)。
REF
REF
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
2: 当 CCP2MX 配置位置 1 时,任何器件在任意工作模式下,对 ECCP2/P2A 进行默认设置。 3: 当 ECCPMX 配置位置 1 时,对 P1B/P1C/P3B/P3C 进行默认设置。 4: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (单片机模式)。 5: 当 ECCPMX 配置位清零时,对 P1B/P1C/P3B/P3C 进行其他设置。
引脚号
TQFP
23
18
17
16
15
14
13
引脚类型缓冲器
类型
I/O
I
O
I/O
I
O
I/O
I
I/O
I
I/O
I
O
I/O
I
I/O
I
ST
模拟
ST
模拟
ST
模拟
ST
模拟
ST
模拟
ST
模拟
ST
TTL
说明
PORTF 是双向 I/O 端口。
数字 I/O。 模拟输入 6。 Comparator2 输出。
数字 I/O。 模拟输入 7。 Comparator1 输出。
数字 I/O。 模拟输入 8。
数字 I/O。 模拟输入 9。
数字 I/O。 模拟输入 10。 比较器参考电压输出。
数字 I/O。 模拟输入 11
数字 I/O
SPI 从动选择输入。
DD
DS39663B_CN 22 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列
1-4 PIC18F8XJ10/8XJ15I/O 引脚排列说明 (续)
引脚名称
RG0/ECCP3/P3A
RG0 ECCP3 P3A
RG1/TX2/CK2
RG1 TX2 CK2
RG2/RX2/DT2
RG2 RX2 DT2
RG3/CCP4/P3D
RG3 CCP4 P3D
RG4/CCP5/P1D
RG4 CCP5 P1D
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
1: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (扩展单片机模式)。
2: 当 CCP2MX 配置位置 1 时,任何器件在任意工作模式下,对 ECCP2/P2A 进行默认设置。 3: 当 ECCPMX 配置位置 1 时,对 P1B/P1C/P3B/P3C 进行默认设置。 4: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (单片机模式)。 5: 当 ECCPMX 配置位清零时,对 P1B/P1C/P3B/P3C 进行其他设置。
引脚号
TQFP
5
6
7
8
10
引脚类型缓冲器
类型
I/O I/O
O
I/O
O
I/O
I/O
I/O
I/O I/O
O
I/O I/O
O
ST
ST
ST
ST
ST
ST
I
ST
ST
ST
ST
ST
说明
PORTG 是双向 I/O 端口。
数字 I/O
Capture3 输入 /Compare3 输出 /PWM3 输出。 ECCP3 PWM 输出 A
数字 I/O EUSART2 异步发送。 EUSART2 同步时钟 (请参见相关的 RX2/DT2 引脚信息)。
数字 I/O EUSART2 异步接收。 EUSART2 同步数据 (请参见相关的 TX2/CK2 引脚信息)。
数字 I/O Capture4 输入 /Compare4 输出 /PWM4 输出。 ECCP3 PWM 输出 D
数字 I/O Capture5 输入 /Compare5 输出 /PWM5 输出。 ECCP1 PWM 输出 D
DD
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 23
PIC18F87J10 系列
1-4 PIC18F8XJ10/8XJ15I/O 引脚排列说明 (续)
引脚名称
RH0/A16
RH0 A16
RH1/A17
RH1 A17
RH2/A18
RH2 A18
RH3/A19
RH3 A19
RH4/AN12/P3C
RH4 AN12
(5)
P3C
RH5/AN13/P3B
RH5 AN13
(5)
P3B
RH6/AN14/P1C
RH6 AN14
(5)
P1C
RH7/AN15/P1B
RH7 AN15
(5)
P1B
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
1: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (扩展单片机模式)。
2: 当 CCP2MX 配置位置 1 时,任何器件在任意工作模式下,对 ECCP2/P2A 进行默认设置。 3: 当 ECCPMX 配置位置 1 时,对 P1B/P1C/P3B/P3C 进行默认设置。 4: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (单片机模式)。 5: 当 ECCPMX 配置位清零时,对 P1B/P1C/P3B/P3C 进行其他设置。
引脚号
TQFP
79
80
1
2
22
21
20
19
引脚类型缓冲器
类型
I/O I/O
I/O I/O
I/O I/O
I/O I/O
I/O
I
O
I/O
I
O
I/O
I
O
I/O
I
O
ST
TTL
ST
TTL
ST
TTL
ST
TTL
ST
模拟
ST
模拟
ST
模拟
ST
模拟
说明
PORTH 是双向 I/O 端口。
数字 I/O。 外部存储器地址 / 数据 16
数字 I/O。 外部存储器地址 / 数据 17
数字 I/O。 外部存储器地址 / 数据 18
数字 I/O。 外部存储器地址 / 数据 19
数字 I/O。 模拟输入 12ECCP3 PWM 输出 C
数字 I/O。 模拟输入 13ECCP3 PWM 输出 B
数字 I/O。 模拟输入 14ECCP1 PWM 输出 C
数字 I/O。 模拟输入 15
ECCP1 PWM 输出 B。
DD
DS39663B_CN 24 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列
1-4 PIC18F8XJ10/8XJ15I/O 引脚排列说明 (续)
引脚名称
RJ0/ALE
RJ0 ALE
RJ1/OE
RJ1 OE
RJ2/WRL
RJ2 WRL
RJ3/WRH
RJ3 WRH
RJ4/BA0
RJ4 BA0
RJ5/CE
RJ5 CE
RJ6/LB
RJ6 LB
RJ7/UB
RJ7 UB
V
SS 11, 31, 51, 70 P DD 32, 48, 71 P
V
SS 26 P
AV
DD 25 P
AV ENVREG 24 I ST
DDCORE/VCAP
V
VDDCORE VCAP
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (无 P 极二极管接到 V
1: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (扩展单片机模式)。
2: 当 CCP2MX 配置位置 1 时,任何器件在任意工作模式下,对 ECCP2/P2A 进行默认设置。 3: 当 ECCPMX 配置位置 1 时,对 P1B/P1C/P3B/P3C 进行默认设置。 4: 当 CCP2MX 配置位清零时,对 ECCP2/P2A 进行其他设置 (单片机模式)。 5: 当 ECCPMX 配置位清零时,对 P1B/P1C/P3B/P3C 进行其他设置。
引脚号
TQFP
62
61
60
59
39
40
41
42
12
引脚类型缓冲器
类型
I/O
O
I/O
O
I/O
O
I/O
O
I/O
O
I/O
O
I/O
O
I/O
O
P P
ST
ST
ST
ST
ST
ST
ST
ST
- - 逻辑电路和 I/O 引脚的参考地。 - 外设逻辑电路和 I/O 引脚的正向电源。 - 模拟模块的参考地。 - 模拟模块的正向电源。
- -
说明
PORTJ 是双向 I/O 端口。
数字 I/O。 外部存储器地址锁存器使能。
数字 I/O。 外部存储器输出使能。
数字 I/O。 外部存储器低电平写控制引脚。
数字 I/O。 外部存储器高电平写控制引脚。
数字 I/O。 外部存储器字节地址 0 控制引脚。
数字 I/O 外部存储器芯片使能控制引脚。
数字 I/O。 外部存储器低字节控制引脚。
数字 I/O。 外部存储器高字节控制引脚。
使能片内稳压器。 与内核逻辑电源或外部过滤电容连接。
单片机内核逻辑电路正向电源 (禁止稳压器)。 与外部过滤电容连接 (使能稳压器)。
DD
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 25
PIC18F87J10 系列
注:
DS39663B_CN 26 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列

2.0 振荡器配置

2.1 振荡器类型

PIC18F87J10 系列器件可以在五种不同的振荡器模式 下工作:
1. HS 高速晶振 / 谐振器
2. HSPLL 带软件 PLL 控制的高速晶振 /
谐振器
3. EC 带 F
4. ECPLL 带软件 PLL 控制的外部时钟
5. INTRC 31 kHz 内部振荡器
用户可以通过编程FOSC2:FOSC0配置位来选择这其中 的前四种模式。 而第五种模式(INTRC)可在软件控制 下调用;也可以将它配置为器件复位时的默认模式。

2.2 晶体振荡器 / 陶瓷谐振器 (HS 模 式)

HS HSPLL 振荡器模式中,晶体振荡器或陶瓷谐 振器被连接到 OSC1 OSC2 引脚以产生振荡。图 2-1 给出了引脚连接图。
振荡器的设计要求使用平行切割的晶体。
注: 使用顺序切割的晶体,会使振荡器产生的
OSC/4 输出的外部时钟
频率不在晶体制造厂商所给的参数范围 内。
2-1:晶/ 陶瓷谐振器的工作原
理(HS 或 HSPLL 配置)
(1)
C1
(1)
C2
1: 如需了解 C1 C2 的初始值,请参见表 2-1
2-2
2AT 条形切割的晶体可能会需要一个串联电阻
R
3R
OSC1
XTAL
OSC2
(2)
RS
S)。
F 的值根据所选择的振荡器模式而定。
RF
(3)
休眠
PIC18F87J10
内部 逻辑电路

2-1 陶瓷谐振器的电容选择

所使用的典型电容值:
模式 频率
HS 8.0 MHz
16.0 MHz
上述电容值仅供设计参考。
已测试这些电容搭配下列谐振器时的基本起振和工作 情况。这些值不是最佳值。
要得到合适的振荡器工作状况,可能需要不同的电容 值。用户应在应用的预期 V 器的性能。
欲知更多信息,请参见表 2-2 后的 “注”。
所使用的谐振器:
16.0 MHz
OSC1 OSC2
27 pF 22 pF
DD 和温度范围内测试振荡
4.0 MHz
8.0 MHz
27 pF 22 pF
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 27
PIC18F87J10 系列

2-2 晶体振荡器的电容选择

振荡类型
HS 4 MHz 27 pF 27 pF
上述电容值仅供设计参考。
已测试这些电容搭配下列晶振时的基本起振和工作情 况。这些值不是最佳值。
要得到合适的振荡器工作状况,可能需要不同的电容 值。用户应在应用的预期 V 器的性能。
欲知更多信息,请参见本表后的 “注”。
1: 较高的电容值可以增加振荡器的稳定性,
2: 因为每种谐振器 / 晶振都有其自身特点,
3: 为避免对低驱动电平参数的晶振造成过
4: 请在应用中的预期 V
晶振 频率
8 MHz 22 pF 22 pF
20 MHz 15 pF 15 pF
所使用的晶振:
但同时也会增加起振时间。
用户应当向谐振器 / 晶振制造厂商询问外 部元件的相应值。
驱,可能会需要使用电阻 Rs
振荡器的性能。
已测试的典型电容值:
C1 C2
DD 和温度范围内测试振荡
4 MHz 8 MHz
20 MHz
DD 和温度范围内验证

2.3 外部时钟输入 (EC 模式)

EC ECPLL 振荡器模式需要在 OSC1 引脚连接一个 外部时钟源。在上电复位后或从休眠模式退出后,不需 要振荡器起振时间。
EC 振荡器模式下,振荡器频率的 4 分频信号可由 OSC2 引脚输出。此信号可用于测试或同步其他逻辑电 路。图 2-2 给出了 EC 振荡器模式的引脚连接图。
2-2 外部时钟输入工作原理
EC 配置)
外部系统 提供时钟
OSC/4
F
如图 2-3 所示,在 HS 模式下,OSC1 引脚也可以连接 外部时钟源。 在此配置下,不可用 OSC2 引脚上的 4 频输出。
2-3 外部时钟输入工作原理
外部系统 提供时钟
开路
OSC1/CLKI
PIC18F87J10
OSC2/CLKO
HS OSC 配置)
OSC1
PIC18F87J10
OSC2
HS 模式)
DS39663B_CN28 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列

2.4 PLL 倍频器

如果用户希望使用低频晶振电路或通过晶振将器件频率 调节至其最高额定频率,可以选择使用锁相环 (Phase Locked LoopPLL)电路。此电路有助于那些担心高频 晶振引起 EMI 或需要内部振荡器提供高速时钟的用户。 由于这些原因,可使用 HSPLL ECPLL 模式。
HSPLL ECPLL 模式使器件能够以外部振荡源的 4 频运行以产生最高为 40 MHz 的频率。 通过在 OSCTUNE 寄存器 (寄存器 2-1)中将 PLLEN 位置 1 来使能 PLL

寄存器 2-1 OSCTUNEPLL 控制寄存器

U-0 R/W-0
PLLEN
bit 7 bit 0
(1)
(1)
U-0 U-0 U-0 U-0 U-0 U-0

2-4 PLL 框图

HSPLL ECPLLCONFIG2L
使能 PLL(OSCTUNE
OSC2
OSC1
HS EC
模式
IN
F FOUT
÷4
相位
比较器
环路
滤波器
VCO
SYSCLK
MUX
bit 7 bit 6
bit 5-0
未用:读为 0
PLLEN:倍频器 PLL 使能位
(1)
1 = PLL 已使能 0 = PLL 已禁止
1: 仅对于 ECPLL HSPLL 振荡器配置可用,否则,此位不可用并读为 0
未用:读为 0
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 10 = 清零 x = 未知
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 29
PIC18F87J10 系列

2.5 内部振荡器模块

PIC18F87J10 系列器件包括内部振荡源 (Internal Oscillator Source,INTRC),它提供标称的 31 kHz 输
出频率。 INTRC 在器件上电延迟定时器使能并在器件 的配置周期到器件进入工作模式这段时间里作为器件时 钟源。 如果选择 INTRC 作为器件时钟源或者使能了以 下各项之一也会使能 INTRC
故障保护时钟监视器
看门狗定时器
双速启动
在第 23.0 节“CPU 的特殊功能”中对这些功能进行了 更详细的讨论。
也可以通过将 FOSC2 配置位置 1,将 INTRC 配置为器 件起振时的默认时钟源。 这将在第 2.6.1 节 “振荡器控 制寄存器”中进行讨论。

2.6 时钟源和振荡器切换

PIC18F87J10 系列提供的功能包括允许将器件时钟源 从主振荡器切换到备用时钟源。PIC18F87J10 系列器件 提供两种备用时钟源。 当备用时钟源使能时,各种功耗 管理工作模式都可用。
基本上,这些器件有三种时钟源:
主振荡器
辅助振荡器
内部振荡器
主振荡器包括外部晶振和谐振器模式以及外部时钟模 式。 特定的模式由 FOSC2:FOSC0 配置位定义。这些模 式的具体情况已在本章前面的内容中作过介绍。
辅助振荡器是没有与 OSC1 OSC2 引脚连接的外部时 钟源。这些时钟源即使在控制器处于功耗管理模式时仍 然可以继续工作。
PIC18F87J10 系列器件支持使用 Timer1 振荡器作为辅 助振荡器。此振荡器在所有功耗管理模式中通常用作实 时时钟等功能的时基。
大部分情况下,在 RC0/T1OSO/T13CKI RC1/T1OSI 引脚之间连接一个 32.768 kHz 的时钟晶振。在每个引 脚与地之间均接有负载电容。
在第 12.3 节“Timer1 振荡器”中将对 Timer1 振荡器 作更详细的讨论。
除了作为主时钟源之外,内部振荡器还可以作为功耗管 理模式的时钟源。 INTRC 也作为几种特殊功能的时钟 源,例如 WDT 和故障保护时钟监视器。
2-5 所示为 PIC18F87J10 系列器件的时钟源。欲知 配置寄存器的详细信息,请参见第 23.0 节“CPU 的特 殊功能”。

2-5 PIC18F87J10 系列器件时钟源的框图

PIC18F87J10 系列
INTRC
OSC2
OSC1
T1OSO
T1OSI
主振荡器
辅助振荡器
休眠
T1OSCEN
使能 振荡器
4 x PLL
HS, EC
HSPLL, ECPLL
T1OSC
内部振荡器
FOSC2:FOSC0
用于其他模块的时钟源选择
WDTPWRT、FSCM 和双速启动
时钟 控制
外设
MUX
CPU
IDLEN
OSCCON<1:0>
DS39663B_CN30 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列

2.6.1 振荡器控制寄存器

OSCCON 寄存器 (寄存器 2-2)控制全功耗模式和功
耗管理模式下系统时钟工作的几个方面。 系统时钟选择位 SCS1:SCS0 选择时钟源。 可用的时钟
源有主时钟(由 FOSC2:FOSC0 配置位定义)、辅助时 钟(Timer1 振荡器)和内部振荡器。 在写入一个或多 个位后,有一段短的时钟切换间隔,之后,时钟源发生 改变。
OSTS OSCCON<3>)和 T1RUN T1CON<6>)位 表明当前是哪个时钟源提供器件时钟。OSTS 位表明振 荡器起振定时器(OST)已超时,主时钟是主时钟模式 下的器件时钟源。 T1RUN 位表明 Timer1 振荡器是辅助 时钟模式下的器件时钟源。 在功耗管理模式中,这些位 中总是只有一个位被置 1。如果这些位都没有置 1,则 当前系统时钟源是 INTRC,或内部振荡器刚刚起振且尚 未稳定。
IDLEN 位确定当执行 SLEEP 指令时,器件是进入休眠 模式还是某种空闲模式。
3.0 节 “功耗管理模式”中将更详细的讨论在 OSCCON 寄存器中对于标志位和控制位的使用。
1: 要选择辅助时钟源,必须使能 Timer1 振荡
器。通过 将 Timer1 控制寄存器中的 T1OSCEN 位(T1CON<3>)置 1,可以 使能 Timer1 振荡器。如果未使能 Timer1 振荡器,则在执行 SLEEP 指令期间任何选 择辅助时钟源的操作都会被忽略。
2: 建议在执行 SLEEP 指令之前 Timer1 振荡
器已经在工作并且保持稳定,否则在 Timer1振荡器起振时可能会有一段较长时 间的延迟。
2.6.1.1 系统时钟选择和 FOSC2 配置位
在所有形式的复位中,SCS 位都会被清零。 在器件的默 认配置中,这意味着由 FOSC1:FOSC0(也就是 HC EC 模式的一种)定义的主振荡器用作器件复位时的主 时钟源。
复位时的默认时钟配置可以随着 FOSC2 配置位的改变 而改变。 此位的作用是设置当 SCS1:SCS0 = 00 时选择 的时钟源。当 FOSC2 = 1 (默认)时,不 管 何时 SCS1:SCS0 = 00,都选择由 FOSC1:FOSC0 定义的时 钟源。 当 FOSC2 = 0 时,不管何时 SCS1:SCS2 = 00, 都选择 INTRC 振荡器。 因为在复位时 SCS 位被清零, FOSC2 的设置也会更改复位时的默认振荡器模式。
不管 FOSC2 的设置如何,INTRC 总是会在器件上电时 被使能。 它将作为时钟源直到器件从存储器中载入了它 的配置值。 此时 FOSC 配置位被读取并选择了振荡器的 工作模式。
注意主时钟或内部振荡器在任何给定条件下都会有两种 位设置选项,取决于 FOSC2 的设置。

2.6.2 振荡器转换

PIC18F87J10 系列器件包含在时钟源之间切换时防止
时钟 “毛刺”的电路。在时钟切换时,器件时钟会有短 暂的停顿。 停顿的长度是旧时钟源的两个周期加上新时 钟源的三到四个周期的和。 此公式假设新时钟源是稳定 的。
3.1.2 节 “进入功耗管理模式”中将对时钟切换进行 更详细的讨论。
2005 Microchip Technology Inc. 初稿 DS39663B_CN 31
PIC18F87J10 系列
寄存器 2-2 OSCCON:振荡器控制寄存器
R/W-0 U-0 U-0 U-0 R-q IDLEN —OSTS— SCS1 SCS0
bit 7 bit 0
bit 7
bit 6-4 bit 3
bit 2 bit 1-0
IDLEN:空闲使能位
1 = 在执行 SLEEP 指令时,器件进入空闲模式 0 = 在执行 SLEEP 指令时,器件进入休眠模式
未用:读为 0 OSTS:振荡器起振延时状态位
1 = 振荡器起振定时器延迟时间已经结束;主振荡器正在运行 0 = 振荡器起振定时器正在运行,主振荡器尚未准备就绪
1: 当 HS 模式和双速启动模式都使能时,复位值为 0,否则,复位值为 1
未用:读为 0 SCS1:SCS0:系统时钟选择位
11 = 内部振荡器 10 = 主振荡器 01 = Timer1 振荡器
FOSC2 =1 时: 00 = 主振荡器
FOSC2 =0 时: 00 = 内部振荡器
(1)
(1)
U-0 R/W-0 R/W-0
图注:
U = 未用位,读为 0q = 由配置确定
-n = 上电复位时的值 R = 可读位 0 = 清零 W = 可写位

2.7 功耗管理模式对各种时钟源的影响

当选择了 PRI_IDLE 模式时,指定的主振荡器会继续运 行而不中断。对于所有其他功耗管理模式,使用 OSC1 引脚的振荡器会被禁止。OSC1 引脚(以及由振荡器使 用 OSC2 的引脚)将会停止振荡。
在辅助时钟模式下(SEC_RUNSEC_IDLE),Timer1 振荡器作为器件时钟源工作。如果需要,Timer1 振荡器 也可以运行在所有功耗管理模式下为 Timer1 Timer3 提供时钟。
RC_RUN RC_IDLE 模式中,内部振荡器提供器件 时钟源。 可以直接使用 31 kHz 的 INTRC 输出提供时钟 源并且使能它来支持多种特殊功能,与是否是功耗管理 模式无关 (欲知更多有关 WDT、故障保护时钟监视器 和双速启动的信息请参见第 23.2 节 “看门狗定时器
WDT)”至第 23.5 节 “故障保护时钟监视器”)。
如果选择了休眠模式,所有的时钟源都会被停止。因为 休眠模式消除了所有的晶体管切换电流,休眠模式能实 现器件最小的电流消耗 (仅泄漏电流)。
在休眠期间使能任何片上功能将会增加休眠时的电流消 耗。需要使能 INTRC 来支持 WDT 工作。 Timer1 振荡 器可以用于为实时时钟提供时钟源。不需要系统时钟源 的其他功能也可以工作 (即 MSSP 从器件、 PSP INTn 引脚等等)。26.2 “直流规范 :掉电和供电 电流”列出了可能会显著增加电流消耗的外设。
DS39663B_CN32 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列

2.8 上电延迟

由两个定时器控制上电延迟,这样大部分应用都无需外 接复位电路。上电延迟可以确保在满足以下条件前器件 保持复位状态:工作环境下器件电源稳定,并且主时钟 已工作并稳定。 欲知有关上电延迟的其他信息,请参见4.5 节 “上电延时定时器 (PWRT)”。
第一个定时器是上电延时定时器 (PWRT),它在上电 时提供一个固定的延迟(表 25-12 的参数 33)。 它总是 使能的。
第二个定时器是振荡器起振定时器(Oscillator Start-up TimerOST),用于在晶体振荡器稳定前使芯片保持在 复位状态 (HS 模式)。 OST 通过计数 1024 个振荡周 期实现此延迟并在延迟后允许振荡器为器件提供时钟。
在上电复位之后,有一个延迟间隔 T 参数 38),控制器在这段时间中为执行指令做准备。
CSD (表 25-12 的

2-3 休眠模式下 OSC1 OSC2 引脚的状态

振荡器模式 OSC1 引脚 OSC2 引脚
EC, ECPLL 悬空,由外部时钟拉高 处于逻辑低电平 (时钟 /4 输出) HS, HSPLL 处于静态电平时,反馈反相器被禁用 处于静态电平时,反馈反相器被禁用
注: 欲知有关由于休眠和 MCLR
复位而产生的延时的信息,请参见第 4.0 节 “复位”中的表 4-2
2005 Microchip Technology Inc. 初稿 DS39663B_CN 33
PIC18F87J10 系列
注:
DS39663B_CN34 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列

3.0 功耗管理模式

PIC18F87J10 系列器件提供了只需通过管理 CPU 和外 设的时钟源就可以管理功耗的功能。 一般而言,较低的 时钟频率和由时钟源驱动的电路数目的减少会使功耗降 低。 为了在应用中管理功耗,提供了三种主要的工作模 式:
运行模式
空闲模式
休眠模式
这些模式定义了器件的哪些部分由时钟源驱动,以及以 多高的时钟速度驱动。运行和空闲模式可以使用三种可 用的时钟源中 (主、辅助或内部振荡器电路)的任何一 种;而休眠模式不使用时钟源。
®
功耗管理模式包括几种在以前的 PICmicro 的节省功耗的功能。 其中一个功能是在其他 PIC18 器件 上提供的时钟切换功能,允许控制器使用 Timer1 振荡 器代替主振荡器。 还包括的一个功能是所有 PICmicro 器件都提供的休眠模式,在此模式下器件时钟停止。

3.1 选择功耗管理模式

选择功耗管理模式需要考虑两个因素:是否用时钟源驱动 CPU 以及使用哪个时钟源。 IDLEN 位(OSCCON<7>)控CPU 的时钟驱动,而 SCS1:SCS0 位(OSCCON<1:0>) 选择时钟源。 表 3-1 总结了各个模式、位设置、时钟源和受 影响的模块。
器件上提供

3.1.1 时钟源

SCS1:SCS0 位可以在功耗管理模式下选择三个时钟源
中的一个。它们是:
主时钟,由 FOSC2:FOSC0 配置位定义。
辅助时钟 (Timer1 振荡器)
内部振荡器

3.1.2 进入功耗管理模式

从一种功耗管理模式转换到另一种功耗管理模式是通过 装载 OSCCON 寄存器开始的。 SCS1:SCS0 位选择时 钟源并确定使用哪一种运行或空闲模式。 更改这些位将 导致立即切换到新的时钟源 (假定新的时钟源正在运 行)。切换可能也会遇到时钟转换延迟。 在第 3.1.3
“时钟切换和状态指示位”及后续部分中对这些问题有
所讨论。 执行SLEEP指令可以触发进入功耗管理空闲模式或休眠
模式。最后实际进入了哪个模式由 IDLEN 位的状态决 定。
更改功耗管理模式并不总是要求设置所有这些位,这由 当前工作模式和将要切换到的模式决定。可以通过在发 出 SLEEP 指令之前,更改振荡器选择位或更改 IDLEN 位来进行模式转换。 如果已经正确地配置了 IDLEN位, 可能只需通过执行 SLEEP指令就能转换到所需的模式。
3-1 功耗管理模式
模式
休眠
PRI_RUN N/A 10
SEC_RUN N/A 01
RC_RUN N/A 11
PRI_IDLE 110 SEC_IDLE 101 RC_IDLE 111
1: 当执行 SLEEP 指令时, IDLEN 反映出它的值。
IDLEN<7>
OSCCON 模块时钟控制
(1)
SCS1:SCS0<1:0> CPU
0 N/A
关闭 关闭 无——禁止所有时钟
被时钟 源驱动
被时钟 源驱动
被时钟 源驱动
关闭 被时钟源驱动 主时钟源—— HSECHSPLL ECPLL 关闭 被时钟源驱动 辅助时钟源——Timer1 振荡器 关闭 被时钟源驱动 内部振荡器
外设
可用时钟和振荡器源
被时钟源驱动 主时钟源——HSECHSPLL ECPLL
这是正常的全功耗工作模式。
被时钟源驱动 辅助时钟源——Timer1 振荡器
被时钟源驱动 内部振荡器
2005 Microchip Technology Inc. 初稿 DS39663B_CN35
PIC18F87J10 系列

3.1.3 时钟切换和状态指示位

时钟源之间切换的时间长度是旧时钟源的两个周期加上 新时钟源的三到四个周期的和。 此公式假设新时钟源是 稳定的。
OSTS OSCCON<3>)和 T1RUN T1CON<6>)两 个位表示当前的时钟源及其状态。 通常,在给定功耗管 理模式下,这两个位中只有一个将被置 1。当 OSTS 位 被置 1 时,主时钟提供器件时钟。当 T1RUN 位被置 1 时,Timer1 振荡器提供器件时钟。 如果这两个位都不置 1INTRC 为器件提供时钟。
注: 执行 SLEEP指令不一定会使器件进入休眠
模式。 它充当触发指令,根据 IDLEN 位的 设置,使控制器进入休眠模式和某种空闲 模式。

3.1.4 多条 SLEEP 命令

SLEEP 指令启动的功耗管理模式由执行这条指令时 IDLEN 位的设置决定。如果执行另一条 SLEEP 指令, 器件将进入由那时 IDLEN位指定的功耗管理模式。如果 IDLEN 位已更改,则器件将进入由新的设置指定的新的 功耗管理模式。

3.2 运行模式

在运行模式下,为内核和外设提供时钟的时钟源都在运 行。 这些模式之间的差异在于时钟源。

3.2.1 PRI_RUN 模式

PRI_RUN 模式是单片机的正常的全功耗工作模式。
非使能双速启动,这也是器件复位后的默认模式 (详细 信息请参见第 23.4 节 “双速启动”)。 在此模式下,
OSTS 位置 1(见第 2.6.1 节“振荡器控制寄存器”)。

3.2.2 SEC_RUN 模式

SEC_RUN 模式是与其他 PIC18 器件提供的时钟切换功
能兼容的。在此模式下,CPU 和外设由 Timer1 振荡器 提供时钟。这让用户能在仍使用高精度时钟源的情况下 实现较低的功耗。
通过将 SCS1:SCS0 位设置为 “01” ,器件进入 SEC_RUN 模式。器件时钟源切换到 Timer1 振荡器(见3-1),关闭主振荡器,T1RUN 位(T1CON<6>)置
1 并且 OSTS 位清零。
DS39663B_CN36 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列
注: Timer1 振荡器应该在进入 SEC_RUN 模式
之前就已经开始运行了。如果当
SCS1:SCS0 位被设置为 “01”时, T1OSCEN 位未置 1,将不会进入 SEC_RUN 模式。如果 Timer1 振荡器已经
被使能,但仍然没有开始运行,器件时钟
SEC_RUN 模式转换到 PRI_RUN 模式时,在主时钟 起振期间外设和 CPU 继续使用 Timer1 振荡器作为时钟 源。当主时钟准备就绪以后,时钟开始切换回主时钟
(见图 3-2)。当时钟切换完成后, T1RUN 位被清零,
OSTS 位被置 1,主时钟提供器件时钟。唤醒不会影响 IDLEN SCS 位; Timer1 振荡器继续运行。
将被延迟直到振荡器起振为止。在这种情 况下,最初振荡器运行很不稳定并且它的 运行结果无法预料。
3-1:进SEC_RUN 模式的转换时序
Q4Q3Q2
Q1
123
时钟转换
n-1
PC+2PC
Q4Q3Q2 Q1 Q3Q2
n
T1OSI
OSC1
CPU
时钟
外设 时钟
程序
计数器
Q1
3-2:从SEC_RUN 模式到 PRI_RUN 模式 (HSPLL)的转换时序
Q1 Q3 Q4
Q3 Q4 Q1
Q2 Q2 Q3
Q1
PC+4
Q2
T1OSI
OSC1
PLL 时钟
输出
CPU 时钟
外设 时钟
程序
计数器
SCS1:SCS0 位变化
1TOST = 1024 TOSC ; TPLL = 2 ms (大约)。这些时间间隔未按照比例绘制。
TOST
PC
(1)
(1)
TPLL
OSTS 位置 1
12 n-1n
时钟 转换
PC+2
PC+4
2005 Microchip Technology Inc. 初稿 DS39663B_CN第 37
PIC18F87J10 系列

3.2.3 RC_RUN 模式

RC_RUN 模式下,使用内部振荡器作为 CPU 和外设 的时钟源;主时钟关闭。 在所有运行模式之中,此模式 最节约功耗,且仍然执行代码。在对时间要求不高或不 总是需要高速时钟的用户应用中,选用此运行模式非常 合适。
通过将 SCS 设置为 “11”可以进入此模式。当时钟源 切换到 INTRC(见图 3-3)时,主振荡器关闭, OSTS 位清零。
3-3:到RC_RUN 模式的转换时序
Q4Q3Q2
Q1
123 n-1n
时钟转换
INTRC
OSC1
CPU
时钟
外设 时钟
程序
计数器
Q1
RC_RUN 模式转换到 PRI_RUN 模式时,在主时钟 起振期间器件继续使用 INTRC 作为时钟源。当主时钟 准备就绪以后,时钟开始切换到主时钟 (见图 3-4)。 当时钟切换完成后, OSTS 位被置 1,主时钟提供器件 时钟。切换不会影响 IDLEN SCS 位。如果使能 WDT 或故障保护时钟监视器, INTRC 时钟源将继续运行。
Q4Q3Q2 Q1 Q3Q2
PC+2PC
PC+4
3-4:从RC_RUN 模式到 PRI_RUN 模式的转换时序
Q1
Q4
Q1
INTRC
OSC1
PLL 时钟
输出
CPU 时钟
外设 时钟
程序
计数器
SCS1:SCS0 位变化
1TOST = 1024 TOSC ; TPLL = 2 ms (大约)。这些时间间隔未按照比例绘制。
TOST
(1)
PC
Q2
Q3
(1)
TPLL
OSTS 位置 1
12 n-1n
时钟 转换
PC+2
Q2
Q3 Q4
Q1
Q2
PC+4
Q3
DS39663B_CN38 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列

3.3 休眠模式

功耗管理休眠模式与所有其他 PICmicro 器件提供的传 统休眠模式相同。 通过清零 IDLEN 位 (器件复位时的 默认状态)并执行 SLEEP 指令进入该模式。 这将关闭 选定的振荡器(图 3-5)。 所有的时钟源状态位被清零。
从任何其他模式进入休眠模式不需要时钟切换。 这是因 为一旦控制器进入休眠模式后就不需要任何时钟了。 果选择了 WDTINTRC 时钟源将继续运行。 如果 Timer1 振荡器被使能, INTRC 时钟源也将继续运行。
在休眠模式下发生唤醒事件时(由于中断、复位或 WDT 超时),器件将没有时钟源直到由 SCS1:SCS0 位选定 的时钟源准备就绪为止 (见图 3-6),或者当双速启动 或故障保护监视器被使能时,它会将内部振荡器作为时 钟源 (见第 23.0 节“CPU 的特殊功能”)。在这两种 情况下,当主时钟提供器件时钟时, OSTS 位被置 1。 唤醒不会影响 IDLEN SCS 位。

3-5 进入休眠模式的转换时序

Q4Q3Q2
Q1Q1
OSC1
CPU
时钟
外设 时钟
休眠
程序
计数器

3.4 空闲模式

空闲模式允许在外设继续运行的情况下,有选择地关闭 控制器的 CPU 选择某种特定的空闲模式使用户能进 一步管理功耗。
执行 SLEEP 指令时,如果 IDLEN 位被置为 1,外设将使 用由SCS1:SCS0位选定的时钟源;然而,将不会为CPU 提供时钟。 时钟源状态位不受影响。 将 IDLEN 置 1 并执SLEEP指令是一种从给定运行模式转换到其对应空闲 模式的快速方法。
如果选择了 WDTINTRC 时钟源将继续运行。 如果 Timer1 振荡器被使能, INTRC 时钟源也将继续运行。
由于空闲模式CPU没有执行指令,只能通过中断、WDT 超时或复位从任一空闲模式退出。 当唤醒事件发生时, CPU 在准备好执行代码前,要延迟一个 T
(表 26-12 的参数 38 )。 当 CPU 开始执行代码时,它
将使用与当前空闲模式相同的时钟源以恢复工作。 如,当从 RC_IDLE 模式唤醒时,将使用内部振荡器电 路作为 CPU 和外设的时钟源(换句话说就是 RC_RUN 模式)。唤醒不会影响 IDLEN SCS 位。
当处于任何空闲模式或休眠模式时, WDT 超时将导致
WDT 唤醒到由当前 SCS1:SCS0 位指定的运行模式。
PC+2PC
CSD 间隔时间

3-6 从休眠模式唤醒的转换时序 (HSPLL

Q1 Q2 Q3 Q4 Q1 Q2
OSC1
(1)
PLL 时钟
输出
CPU 时钟
外设 时钟
程序
计数器
唤醒事件
OST = 1024 TOSC ; TPLL = 2 ms (大约)。这些时间间隔未按照比例绘制。
1T
2005 Microchip Technology Inc. 初稿 DS39663B_CN第 39
TOST
(1)
TPLL
PC
OSTS 位置 1
Q3 Q4 Q1 Q2
PC+2
PC+4
Q3 Q4
Q1 Q2 Q3 Q4
PC+6
PIC18F87J10 系列

3.4.1 PRI_IDLE 模式

此模式在三种低功耗空闲模式中是唯一不禁止器件主时 钟的。对于对时间精度要求很高的应用来说,由于时钟 源不需要 “热身”或从其他振荡器切换,选用此模式可 以使用更加精确的主时钟源,并以最快的速度恢复器件 运行。
通过置位 IDLEN 位并执行 SLEEP 指令可以从PRI_RUN 模式进入 PRI_IDLE 模式。 如果器件处于其他运行模 式,请先置位 IDLEN,然后将 SCS 位置为 “10”并执 行 SLEEP 指令。虽然 CPU 被禁止,但外设仍继续使用 由 FOSC1:FOSC0配置位指定的主时钟源作为时钟源。 OSTS 位保持置 1 (见图 3-7)。
当唤醒事件发生时,CPU 由主时钟源提供时钟。 在唤醒 事件和代码开始执行之间需要一段 T
CSD间隔的延迟。需
要这段时间以使 CPU 为执行指令做好准备。在唤醒之 后,OSTS 位保持置 1。唤醒不会影响 IDLEN SCS
(见图 3-8)。
3-7 进入空闲模式的转换时序

3.4.2 SEC_IDLE 模式

SEC_IDLE 模式中, CPU 被禁止,但外设继续使用 Timer1 振荡器作为时钟源。 通过置位 IDLEN 位并执行 SLEEP 指令可以从 SEC_RUN 模式进入此模式。 如果 器件处于其他运行模式,请先置位 IDLEN,然后将 SCS1:SCS0 置为 “01”并执行 SLEEP 指令。当时钟 源切换到 Timer1 振荡器时,主振荡器关闭, OSTS 位 清零, T1RUN 位被置 1
当唤醒事件发生时,外设继续将 Timer1 振荡器作为时 钟源。 在唤醒事件后的 T Timer1 振荡器作为时钟源并开始执行代码。唤醒不会影 响 IDLEN SCS 位; Timer1 振荡器继续运行 (见 图 3-8)。
注: Timer1 振荡器应该在进入 SEC_IDLE 模式
之前已经在运行了。如果执行 SLEEP 指令 时 T1OSCEN 位没有被置 1,那么 SLEEP 指令会被忽略并且不会进入 SEC_IDLE 模 式。如果 Timer1 振荡器已经被使能,但还 没有开始运行,外设时钟将被延迟直到振 荡器起振为止。在这种情况下,初始振荡 器运行很不稳定并且它的运行结果无法预 料。
CSD 间隔之后, CPU 使用
Q1
OSC1
CPU 时钟
外设 时钟
程序
计数器
Q1
Q4
Q2
Q3
PC PC+2
3-8 从空闲模式唤醒进入运行模式的转换时序
Q1 Q3 Q4
OSC1
CPU 时钟
外设 时钟
程序
计数器
唤醒事件
TCSD
PC
Q2
DS39663B_CN40 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列

3.4.3 RC_IDLE 模式

RC_IDLE 模式中,CPU 被禁止,但外设继续使用内 部振荡器作为时钟源。此模式允许在器件空闲期间对功 耗进行控制。
通过将IDLEN位置1并执行SLEEP指令可以从 RC_RUN 模式进入此模式。 如果器件处于其他运行模式,请先置IDLEN,然后将 SCS 位清零并执行 SLEEP 指令。当 时钟源切换到 INTRC 时,主振荡器关闭, OSTS 位被 清零。
当唤醒事件发生时,外设继续将 INTRC作为时钟源。 唤醒事件后的 T 钟源并开始执行代码。唤醒不会影响 IDLENSCS位。 如果 WDT 或故障保护时钟监视器被使能,INTRC 时钟 源将继续运行。
CSD 延迟后, CPU 使用 INTRC 作为时

3.5 退出空闲和休眠模式

通过中断、复位或 WDT 超时作为触发事件,从休眠模 式或任何空闲模式退出。本节将讨论引起从功耗管理模 式退出的触发事件。在每个功耗管理模式小节中,还讨 论了时钟控制子系统的操作(见第 3.2 节“运行模式”、3.3 节 “休眠模式”和第 3.4 节 “空闲模式”)。

3.5.1 通过中断退出

任何可用的中断源可以引起器件从空闲模式或休眠模式 退出,进入运行模式。要使能此功能,必须通过将 INTCON PIE 寄存器中的相应中断允许位置 1 来允许 该中断源。当相应的中断标志位被置 1 时,启动退出时 序。
当通过中断从空闲或休眠模式退出时,如果 GIE/GIEH 位(INTCON<7>)置 1,代码执行就会跳转到中断矢 量。否则,代 码执行就会继 续或恢复,而不发 生 跳转
(见第 9.0 节 “中断”)。
从休眠或空闲模式退出时,一个固定的延迟时间间隔
CSD 是必需的。 CPU 需要这段延迟时间来为执行代码
T
做准备。指令执行在此延迟后的第一个时钟周期恢复。

3.5.2 通过 WDT 超时退出

根据 WDT 超时发生时器件所处的不同功耗管理模式会 引起不同的行为。
如果器件没有执行代码 (在所有空闲模式和休眠模式 下) ,超时将导致从功耗管理模式退出 (见第 3.2
“运行模式”和第 3.3 节“休眠模式”)。如果器件正在
执行代码 (在所有运行模式下),超时将导致 WDT 复 位(见第 23.2 节 “看门狗定时器 (WDT)”)。
WDT 和后分频器将被以下任一事件清零:
执行 SLEEP CLRWDT 指令
当前选定的时钟源失效 (故障保护时钟监视器使
能时)

3.5.3 通过复位退出

通过复位从空闲或休眠模式退出,自动强制器件使用
INTRC 作为时钟源运行。

3.5.4 在没有振荡器起振延迟的情况下退出

从功耗管理模式的某些退出方式根本不会启动 OST。具 体有两种情形:
主时钟源处于不会被停止的 PRI_IDLE 模式;
主时钟源处于 EC 模式或 ECPLL 模式。
在这两种情况下,主时钟源都不需要振荡器起振延迟, 因为 (在 PRI_IDLE 模式下),主时钟源已经运行了, 而(在 EC ECPLL 模式下),一般也不需要振荡器 起振延迟。 然而,当退出休眠和空闲模式时,在唤醒事 件后需要一个固定的延迟时间间隔 T 段时间为执行代码做准备。指令执行在此延迟后的第一 个时钟周期恢复。
CSD, CPU 利用这
2005 Microchip Technology Inc. 初稿 DS39663B_CN第 41
PIC18F87J10 系列
注:
DS39663B_CN42 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列

4.0 复位

PIC18F87J10 系列器件有以下几种不同的复位方式: a)上电复位 (Power-on ResetPOR
b)正常工作状态下的 MCLR c)功耗管理模式下的 MCLR d)看门狗定时器 (WDT)复位 (执行程序期间) e)欠压复位 (Brown-on ResetBOR fRESET 指令 g)堆栈满复位 h)堆栈下溢复位
本节讨论了由 MCLR
POR 和 BOR 产生的复位以及各
种起振定时器的操作。5.1.6.4 节 “堆栈满和下溢复 位”将介绍堆栈复位事件。而第 23.2 节 “看门狗定时 器(WDT)”将介绍 WDT 复位。
4-1 给出了片上复位电路的简化框图。

4-1 片上复位电路的简化框图

RESET
指令
堆栈 指针
复位 复位
堆栈满 / 下溢复位
外部复位

4.1 RCON 寄存器

可通过 RCON 寄存器 (寄存器 4-1)跟踪器件复位事 件。寄存器的低 5 位表示已经发生的特定复位事件。在 大部分情况下,只有复位事件可以将这些位置 1 而且它 们必须在复位事件之后由应用程序清零。一起读这些标 志位的状态可以显示出刚产生的复位的类型。第 4.6
“寄存器的复位状态”更详细的讨论了这些位。
RCON 寄存器还有一个设置中断优先级的控制位
IPEN)。 第 9.0 节 “中断”将详细讨论中断优先级。
MCLR
VDD
1ENVREG 引脚必须连接到高电平以使能欠压复位。当电源电压不能满足器件供电条件时,片上稳压器将产生欠
空闲
Sleep
WDT
V
DD 上升沿
复位
PWRT
32 µs
INTRC
压复位。
超时
检测
欠压
(1)
POR 脉冲
PWRT
11 位脉动计数器
65.5 ms
S
R
Q
Chip-Reset
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 43
PIC18F87J10 系列

寄存器 4-1: RCON:复位控制寄存器

R/W-0 U-0 U-0 R/W-1 R-1 R-1 R/W-0 R/W-0
IPEN
bit 7 bit 0
RI
TO PD POR BOR
bit 7
bit 6-5 bit 4
bit 3
bit 2
bit 1
bit 0
IPEN:中断优先级使能位
1 = 使能中断优先级 0 = 禁止中断优先级 (PIC16CXXX 兼容模式)
未用:读为 0 RI:RESET 指令标志位
1 = 未执行 RESET 指令 (仅由固件置 1 0 = 执行 RESET 指令导致器件复位 (必须在欠压复位发生之后用软件置 1
TO:看门狗定时器超时标志位
1 = 通过上电、 CLRWDT 指令或 SLEEP指令置 1 0 = 发生了 WDT 超时
:掉电检测标志位
PD
1 = 通过上电或 CLRWDT 指令置 1 0 = 通过执行 SLEEP 指令置 1
POR
:上电复位状态位 22
1 = 未发生上电复位 (仅由固件置 1 0 = 发生上电复位 (必须在发生上电复位后用软件置 1
BOR:欠压复位状态位
1 = 未发生欠压复位 (仅由固件置 1 0 = 发生了欠压复位 (必须在欠压复位发生之后用软件置 1
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 10 = 清零 x = 未知
1: 建议在检测到上电复位后,将 POR 位置 1,以便检测后续发生的上电复位。
2: 如果禁止了片上稳压器, BOR
“检测 BOR”。
3: 欠压复位是指当 BOR
即被软件置 1)。
0 POR 1 时发生的复位(假设在上电复位后 POR
则总是保持为 0。欲知更多信息,请参见第 4.4.1
DS39663B_CN 44 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列

4.2 主复位 (MCLR

MCLR 引脚提供触发硬件外部复位器件的方法。保持引 脚为低电平就能触发此复位。PIC18 扩展的单片机器件 在 MCLR 复位信号传输路径中有一个噪声滤波器,它可 以检测和忽略小脉冲信号的干扰。
任何内部复位包括 WDT 复位都不能将 MCLR
引脚驱动
为低电平。

4.3 上电复位 (POR

只要 VDD 上升到一定的门限以上,就会在片上产生上电 复位信号。这让器件在 V
DD 足以开始工作时,从初始状
态开始工作。 要利用 POR 电路,可以将 MCLR
引脚通过一个电阻
1kΩ 到 10 kΩ)连接到 VDD。这样可以省去产生上电
复位延时通常所需的外部 RC 元件。V 率已指定 (参数 D004)。对于用于延缓 V
DD 的最小上升速
DD 上升时间
的情况,请参见图 4-2
当器件开始正常工作 (即退出复位状态)时,器件的工 作参数 (电压、频率和温度等)必须满足,以确保其正 常工作。如果这些条件不满足,器件必须保持在复位状 态,直到工作条件满足为止。
POR 事件由 POR
位(RCON<1>)捕获。只要发生 POR,此位的状态就被置为 0,它不会因任何其他复位 事件而发生改变。任何硬件事件都不会将 POR 位复位 为 1。为了捕获多个事件,在 POR 后用户用软件手动将 该位复位为 1

4.4 欠压复位 (BOR

当内部稳压器被使能时(ENVREG 引脚连接到 VDD),
PIC18F87J10 系列器件加入了简单的 BOR 功能。只要 VDD 低于 VBOR (参数 D005)的时间大于 TBOR (参数 35)就会复位器件。如果 VDD 降到 VBOR 以下的时间小
BOR,器件是否发生复位不确定。芯片将保持欠压
T 复位状态,直至 V
一旦发生BOR,上电延时定时器将芯片保持在复位状态 的时间就是 T 运行时, VDD 电压降到 VBOR 以下,芯片将重新回到欠 压复位状态并且初始化上电延时定时器。一旦 V 上升到VBOR以上,上电延时定时器将再执行一个延时。
DD 电压上升到 VBOR 以上。
PWRT (参数 33)。如果上电延迟定时器
DD 电压
4-2 外部上电复位电路 (用于延
DD 上电)
V
DD
VDD
1: 仅当 VDD 上电很慢时,需要外部上电复位电
V
D
R
R1
MCLR
C
路。当 V 放电。
2: 建议R < 40 k以确保电阻 R 上的压降符合器
件的电气规范要求。
3R1
MCLR DischargeESD)或 电 超 载 (Electrical OverstressEOS)导致 MCLR/V
穿。
DD 掉电时,二极管 D 帮助电容迅速
1kΩ将限制任何电流从外部电容 C 流入
,以避免由于静电放电 (Electrostatic
PIC18F87J10
PP 引脚击

4.4.1 检测 BOR

BOR 位在 BOR POR 事件时总是复位为 0。这使得
很难仅通过读 BOR的状态就判断 BOR 事件是否已经发 生。更可靠的方法是同时检查 POR 设在 POR 事件之后立即用软件将 POR 位复位为 1。如 果 BOR 0 POR 1,就可以可靠地判断出已经发 生了 BOR 事件。
如果禁止稳压器,也会禁止欠压复位功能。在这种情况 下,不能使用 BOR
位来确定 BOR 事件。 POR 事件仍
然会将 BOR 位清零。
BOR 的状态。假
2005 Microchip Technology Inc. 初稿 DS39663B_CN 45
PIC18F87J10 系列

4.5 上电延时定时器 (PWRT

PIC18F87J10 系列器件加入了片上上电延时定时器
PWRT)以帮助稳定上电复位过程。 PWRT 总是使能
的。其主要功能是确保在执行代码之前,器件的电压是 稳定的。
PIC18F87J10 系列器件的上电延时定时器(PWRT)是 一个 11 位计数器,使用 INTRC 时钟源作为时钟输入。 这就产生大约共计 2048 x 32 µs = 65.6 ms 的时间间 隔。当 PWRT 计数时,器件保持在复位状态。
上电延迟时间取决于 INTRC 时钟,而且由于温度和制 造工艺的变化将导致不同器件的延迟时间各不相同。欲 知详细信息,请参见 DC 参数 33

4.5.1 延时序列

如果 PWRT 被使能的话,在 POR 脉冲被清零后触发 PWRT 延时。总的延时会根据 PWRT 的状态而有所不 同。图 4-3、图 4-4、图 4-5和图 4-6都说明了在使能上 电延时定时器时的上电延时序列。
由于延时是由 POR 脉冲引起的,因此若 MCLR 持足够长时间的低电平,延时将结束。将 MCLR 电平拉 高后器件将立即进入执行状态 (图 4-5)。这对于测试 或同步多个并行的 PIC18FXXXX 器件是非常有用的。
4-3 上电延时序列 (MCLR 连接到 VDDVDD 上升时间 < TPWRT)
VDD
MCLR
内部 POR
TPWRT
PWRT
延时
引脚保
内部复位
4-4 上电延时序列 (MCLR
VDD
MCLR
内部 POR
PWRT
延时
内部复位
不连接到 VDD): 情 形 1
TPWRT
DS39663B_CN 46 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列
4-5 上电延时序列 (MCLR 未连接到 VDD): 情 形 2
VDD
MCLR
内部 POR
TPWRT
PWRT TIME-OUT
INTERNAL RESET
4-6 缓慢上升的上电延时序列 (MCLR
VDD
MCLR
内部 POR
PWRT TIME-OUT
INTERNAL RESET
0V
PWRT
T
1V
连接到 VDDVDD 上升时间 > TPWRT
3.3V
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 47
PIC18F87J10 系列

4.6 寄存器的复位状态

大多数寄存器不受复位的影响。在上电复位时寄存器状 态未知,且发生其他复位时寄存器状态不会改变。其他 寄存器是否被强行置为 “复位状态”,取决于所发生复 位的类型。
大多数寄存器不受 WDT 唤醒的影响,这是因为 WDT 唤 醒被视为恢复正常工作。如表 4-1 所示,RCON 寄存器 的状态位 RI 情况下置 1 和清零的状态也各不相同。这些状态位在软 件中用于判断复位的类型。
TOPDPOR BOR,在不同的复位
4-2 说明了所有特殊功能寄存器的复位状态。这些复 位被分为上电和欠压复位、主复位和 WDT 复位以及 WDT 唤醒复位几类。

4-1 RCON 寄存器的状态位、它们的含义以及初始化条件

条件 程序计数器
上电复位 RESET 指令 欠压复位
功耗管理运行模式期间的 MCLR
功耗管理空闲模式和休眠模式期 间时的 MCLR
全功耗或功耗管理运行模式期间 的 WDT 超时
全功耗运行期间的 MCLR 堆栈满复位 (STVREN = 1) 堆栈下溢复位 (STVREN = 1) 堆栈下溢错误 (不是真正的复
位, STVREN=0) 功耗管理空闲或休眠模式期间的
WDT 超时溢出 中断使器件从功耗管理模式退出 图注: u = 不变 1: 当芯片被中断唤醒且 GIEH GIEL 位被置 1 时, PC 装入中断矢量 (0008h 0018h)。
PC + 2 uu0uu u u
(1)
RI
0000h 11100 0 0 0000h 0uuuu u u 0000h 111u0 u u
0000h u1uuu u u 0000h u10uu u u
0000h u0uuu u u
0000h uuuuu u u 0000h uuuuu 1 u 0000h uuuuu u 1 0000h uuuuu u 1
PC+2 u00uu u u
RCON 寄存器 STKPTR 寄存器
TO PD POR BOR STKFUL STKUNF
DS39663B_CN 48 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列

4-2 所有寄存器的初始化条件

MCLR
复位
寄存器 适用器件
上电复位,
欠压复位
TOSU PIC18F6XJ1X PIC18F8XJ1X ---0 0000 ---0 0000 ---0 uuuu TOSH PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu TOSL PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu STKPTR PIC18F6XJ1X PIC18F8XJ1X 00-0 0000 uu-0 0000 uu-u uuuu PCLATU PIC18F6XJ1X PIC18F8XJ1X ---0 0000 ---0 0000 ---u uuuu PCLATH PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu PCL PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 PC + 2 TBLPTRU PIC18F6XJ1X PIC18F8XJ1X --00 0000 --00 0000 --uu uuuu TBLPTRH PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu TBLPTRL PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu TABLAT PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu PRODH PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu PRODL PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu INTCON PIC18F6XJ1X PIC18F8XJ1X 0000 000x 0000 000u uuuu uuuu INTCON2 PIC18F6XJ1X PIC18F8XJ1X 1111 1111 1111 1111 uuuu uuuu INTCON3 PIC18F6XJ1X PIC18F8XJ1X 1100 0000 1100 0000 uuuu uuuu INDF0 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A POSTINC0 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A POSTDEC0 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A PREINC0 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A PLUSW0 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A FSR0H PIC18F6XJ1X PIC18F8XJ1X ---- xxxx ---- uuuu ---- uuuu FSR0L PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu WREG PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu INDF1 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A POSTINC1 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A POSTDEC1 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A PREINC1 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A PLUSW1 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A FSR1H PIC18F6XJ1X PIC18F8XJ1X ---- xxxx ---- uuuu ---- uuuu FSR1L PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu BSR PIC18F6XJ1X PIC18F8XJ1X ---- 0000 ---- 0000 ---- uuuu
图注: u = 不变, x = 未知, - = 未用 (读为 0), q = 取值视情况而定。
阴影单元表示不适用于指定器件。
1: 当芯片被中断唤醒且 GIEL GIEH 位被置 1 时,用 PC 的当前值更新 TOSUTOSH TOSLSTKPTR
被修改为指向硬件堆栈中的下一个单元。
2: 当芯片被中断唤醒且 GIEL GIEH 位被置 1 时, PC 装入中断向量地址 (0008h0018h)。 3INTCONx PIRx 寄存器中的一位或多位会受到影响 (用以唤醒器件)。 4: 关于特定条件下的复位值,请参见表 4-1
WDT 复位
RESET 指令
堆栈复位
通过 WDT
或中断唤醒器件
(1) (1) (1) (1)
(2)
(3) (3) (3)
2005 Microchip Technology Inc. 初稿 DS39663B_CN 49
PIC18F87J10 系列
4-2 所有寄存器的初始化条件
寄存器 适用器件
INDF2 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A POSTINC2 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A POSTDEC2 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A PREINC2 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A PLUSW2 PIC18F6XJ1X PIC18F8XJ1X N/A N/A N/A FSR2H PIC18F6XJ1X PIC18F8XJ1X ---- xxxx ---- uuuu ---- uuuu FSR2L PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu STATUS PIC18F6XJ1X PIC18F8XJ1X ---x xxxx ---u uuuu ---u uuuu TMR0H PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu TMR0L PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu T0CON PIC18F6XJ1X PIC18F8XJ1X 1111 1111 1111 1111 uuuu uuuu OSCCON PIC18F6XJ1X PIC18F8XJ1X 0--- q-00 0--- q-00 u--- q-uu WDTCON PIC18F6XJ1X PIC18F8XJ1X ---- ---0 ---- ---0 ---- ---u
(4)
RCON TMR1H PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu TMR1L PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu T1CON PIC18F6XJ1X PIC18F8XJ1X 0000 0000 u0uu uuuu uuuu uuuu TMR2 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu PR2 PIC18F6XJ1X PIC18F8XJ1X 1111 1111 1111 1111 1111 1111 T2CON PIC18F6XJ1X PIC18F8XJ1X -000 0000 -000 0000 -uuu uuuu SSP1BUF PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu SSP1ADD PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu SSP1STAT PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu SSP1CON1 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu SSP1CON2 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu ADRESH PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu ADRESL PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu ADCON0 PIC18F6XJ1X PIC18F8XJ1X 0-00 0000 0-00 0000 u-uu uuuu ADCON1 PIC18F6XJ1X PIC18F8XJ1X --00 0000 --00 0000 --uu uuuu ADCON2 PIC18F6XJ1X PIC18F8XJ1X 0-00 0000 0-00 0000 u-uu uuuu
图注: u = 不变, x = 未知, - = 未用 (读为 0), q = 取值视情况而定。
1: 当芯片被中断唤醒且 GIEL GIEH 位被置 1 时,用 PC 的当前值更新 TOSUTOSH TOSLSTKPTR
2: 当芯片被中断唤醒且 GIEL GIEH 位被置 1 时, PC 装入中断向量地址 (0008h0018h)。 3INTCONx PIRx 寄存器中的一位或多位会受到影响 (用以唤醒器件)。 4: 关于特定条件下的复位值,请参见表 4-1
PIC18F6XJ1X PIC18F8XJ1X 0--1 1100 0--q qquu u--u qquu
阴影单元表示不适用于指定器件。
被修改为指向硬件堆栈中的下一个单元。
(续)
上电复位,
欠压复位
复位
MCLR
WDT 复位
RESET 指令
堆栈复位
通过 WDT
或中断唤醒器件
DS39663B_CN 50 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列
4-2 所有寄存器的初始化条件
寄存器 适用器件
CCPR1H PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu CCPR1L PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu CCP1CON PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu CCPR2H PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu CCPR2L PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu CCP2CON PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu CCPR3H PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu CCPR3L PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu CCP3CON PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu ECCP1AS PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu CVRCON PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu CMCON PIC18F6XJ1X PIC18F8XJ1X 0000 0111 0000 0111 uuuu uuuu TMR3H PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu TMR3L PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu T3CON PIC18F6XJ1X PIC18F8XJ1X 0000 0000 uuuu uuuu uuuu uuuu PSPCON PIC18F6XJ1X PIC18F8XJ1X 0000 ---- 0000 ---- uuuu ---- SPBRG1 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu RCREG1 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu TXREG1 PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu TXSTA1 PIC18F6XJ1X PIC18F8XJ1X 0000 0010 0000 0010 uuuu uuuu RCSTA1 PIC18F6XJ1X PIC18F8XJ1X 0000 000x 0000 000x uuuu uuuu IPR3 PIC18F6XJ1X PIC18F8XJ1X 1111 1111 1111 1111 uuuu uuuu PIR3 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu PIE3 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu IPR2 PIC18F6XJ1X PIC18F8XJ1X 11-- 1-11 11-- 1-11 uu-- u-uu PIR2 PIC18F6XJ1X PIC18F8XJ1X 00-- 0-00 00-- 0-00 uu-- u-uu PIE2 PIC18F6XJ1X PIC18F8XJ1X 00-- 0-00 00-- 0-00 uu-- u-uu IPR1 PIC18F6XJ1X PIC18F8XJ1X 1111 1111 1111 1111 uuuu uuuu PIR1 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu PIE1 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu MEMCON OSCTUNE PIC18F6XJ1X PIC18F8XJ1X -0-- ---- -0-- ---- -u-- ----
图注: u = 不变, x = 未知, - = 未用 (读为 0), q = 取值视情况而定。
1: 当芯片被中断唤醒且 GIEL GIEH 位被置 1 时,用 PC 的当前值更新 TOSUTOSH TOSLSTKPTR
2: 当芯片被中断唤醒且 GIEL GIEH 位被置 1 时, PC 装入中断向量地址 (0008h0018h)。 3INTCONx PIRx 寄存器中的一位或多位会受到影响 (用以唤醒器件)。 4: 关于特定条件下的复位值,请参见表 4-1
PIC18F6XJ1X PIC18F8XJ1X 0-00 --00 0-00 --00 u-uu --uu
阴影单元表示不适用于指定器件。
被修改为指向硬件堆栈中的下一个单元。
(续)
上电复位,
欠压复位
复位
MCLR
WDT 复位
RESET 指令
堆栈复位
通过 WDT
或中断唤醒器件
(3)
(3)
(3)
2005 Microchip Technology Inc. 初稿 DS39663B_CN 51
PIC18F87J10 系列
4-2 所有寄存器的初始化条件
寄存器 适用器件
TRISJ PIC18F6XJ1X PIC18F8XJ1X 1111 1111 1111 1111 uuuu uuuu TRISH TRISG PIC18F6XJ1X PIC18F8XJ1X ---1 1111 ---1 1111 ---u uuuu TRISF PIC18F6XJ1X PIC18F8XJ1X 1111 111- 1111 111- uuuu uuu- TRISE PIC18F6XJ1X PIC18F8XJ1X 1111 1111 1111 1111 uuuu uuuu TRISD PIC18F6XJ1X PIC18F8XJ1X 1111 1111 1111 1111 uuuu uuuu TRISC PIC18F6XJ1X PIC18F8XJ1X 1111 1111 1111 1111 uuuu uuuu TRISB PIC18F6XJ1X PIC18F8XJ1X 1111 1111 1111 1111 uuuu uuuu TRISA PIC18F6XJ1X PIC18F8XJ1X --11 1111 --11 1111 --uu uuuu LATJ LATH LATG PIC18F6XJ1X PIC18F8XJ1X ---x xxxx ---u uuuu ---u uuuu LATF PIC18F6XJ1X PIC18F8XJ1X xxxx xxx- uuuu uuu- uuuu uuu- LATE PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu LATD PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu LATC PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu LATB PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu LATA PIC18F6XJ1X PIC18F8XJ1X --xx xxxx --uu uuuu --uu uuuu PORTJ PORTH PORTG PIC18F6XJ1X PIC18F8XJ1X 111x xxxx 111u uuuu uuuu uuuu PORTF PIC18F6XJ1X PIC18F8XJ1X x000 000- x000 000- uuuu uuu- PORTE PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu PORTD PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu PORTC PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu PORTB PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu PORTA PIC18F6XJ1X PIC18F8XJ1X --0x 0000 --0u 0000 --uu uuuu SPBRGH1 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu BAUDCON1 PIC18F6XJ1X PIC18F8XJ1X 01-0 0-00 01-0 0-00 uu-u u-uu SPBRG2 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu BAUDCON2 PIC18F6XJ1X PIC18F8XJ1X 01-0 0-00 01-0 0-00 uu-u u-uu
图注: u = 不变, x = 未知, - = 未用 (读为 0), q = 取值视情况而定。
1: 当芯片被中断唤醒且 GIEL GIEH 位被置 1 时,用 PC 的当前值更新 TOSUTOSH TOSLSTKPTR
2: 当芯片被中断唤醒且 GIEL GIEH 位被置 1 时, PC 装入中断向量地址 (0008h0018h)。 3INTCONx PIRx 寄存器中的一位或多位会受到影响 (用以唤醒器件)。 4: 关于特定条件下的复位值,请参见表 4-1
PIC18F6XJ1X PIC18F8XJ1X 1111 1111 1111 1111 uuuu uuuu
PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu
PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu PIC18F6XJ1X PIC18F8XJ1X 0000 xxxx uuuu uuuu uuuu uuuu
阴影单元表示不适用于指定器件。
被修改为指向硬件堆栈中的下一个单元。
(续)
上电复位,
欠压复位
复位
MCLR
WDT 复位
RESET 指令
堆栈复位
通过 WDT
或中断唤醒器件
DS39663B_CN 52 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列
4-2 所有寄存器的初始化条件
寄存器 适用器件
ECCP1DEL PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu TMR4 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu PR4 PIC18F6XJ1X PIC18F8XJ1X 1111 1111 1111 1111 1111 1111 T4CON PIC18F6XJ1X PIC18F8XJ1X -000 0000 -000 0000 -uuu uuuu CCPR4H PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu CCPR4L PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu CCP4CON PIC18F6XJ1X PIC18F8XJ1X --00 0000 --00 0000 --uu uuuu CCPR5H PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu CCPR5L PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu CCP5CON PIC18F6XJ1X PIC18F8XJ1X --00 0000 --00 0000 --uu uuuu SPBRG2 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu RCREG2 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu TXREG2 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu TXSTA2 PIC18F6XJ1X PIC18F8XJ1X 0000 0010 0000 0010 uuuu uuuu RCSTA2 PIC18F6XJ1X PIC18F8XJ1X 0000 000x 0000 000x uuuu uuuu ECCP3AS PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu ECCP3DEL PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu ECCP2AS PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu ECCP2DEL PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu SSP2BUF PIC18F6XJ1X PIC18F8XJ1X xxxx xxxx uuuu uuuu uuuu uuuu SSP2ADD PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu SSP2STAT PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu SSP2CON1 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu SSP2CON2 PIC18F6XJ1X PIC18F8XJ1X 0000 0000 0000 0000 uuuu uuuu
图注: u = 不变, x = 未知, - = 未用 (读为 0), q = 取值视情况而定。
阴影单元表示不适用于指定器件。
1: 当芯片被中断唤醒且 GIEL GIEH 位被置 1 时,用 PC 的当前值更新 TOSUTOSH TOSLSTKPTR
被修改为指向硬件堆栈中的下一个单元。
2: 当芯片被中断唤醒且 GIEL GIEH 位被置 1 时, PC 装入中断向量地址 (0008h0018h)。 3INTCONx PIRx 寄存器中的一位或多位会受到影响 (用以唤醒器件)。 4: 关于特定条件下的复位值,请参见表 4-1
(续)
上电复位,
欠压复位
复位
MCLR
WDT 复位
RESET 指令
堆栈复位
通过 WDT
或中断唤醒器件
2005 Microchip Technology Inc. 初稿 DS39663B_CN 53
PIC18F87J10 系列
注:
DS39663B_CN 54 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列

5.0 存储器构成

PIC18 闪存单片机器件上有两种类型的存储器:
程序存储器
数据 RAM
在哈佛架构的器件中,数据和程序存储器使用不同的总 线,因而可同时访问这两种存储器空间。
6.0 节 “闪存程序存储器”提供了关于闪存程序存储 器工作的更多详细信息。

5.1 程序存储器构成

PIC18 单片机具备一个 21 位程序计数器,可以对 2 MB 的程序存储器空间进行寻址。访问物理实现的存储器的 上边界和 2MB 地址之间的地址单元将会返回全 “0”
(相当于执行 NOP 指令)。
整个 PIC18F87J10 系列提供了一系列片上闪存程序存 储空间:从 32 KB(至多 16,384 条单字指令)到 128 KB
65,536 条单字指令)。 该系列的各个器件的程序存储
器映射图如图 5-3 所示。

5-1 PIC18F87J10 系列器件的存储器映射图

CALL,CALLW,RCALL RETURN,RETFIE,RETLW ADDULNK,SUBULNK
PIC18FX5J10 PIC18FX5J15 PIC18FX6J10 PIC18FX6J15 PIC18FX7J10
片上
存储器
配置字
片上
存储器
配置字
PC<20:0>
堆栈级 1
堆栈级 31
片上
存储器
片上
存储器
21
片上
存储器
000000h
005FFFh 007FFFh
00BFFFh
配置字
配置字
配置字
未用
0
读为
注: 存储器空间的大小未按比例显示。夸大了程序存储器区域的大小以显示细节。
未用
读为
未用
0
读为
0
未用
读为
未用
0
读为
0
00FFFFh
017FFFh
01FFFFh
1FFFFFh
用户存储空间
2005 Microchip Technology Inc. 初稿 DS39663B_CN 55
PIC18F87J10 系列

5.1.1 存储器硬件编码向量

所有的 PIC18器件在它们的程序存储器空间内共有 3 个 硬件编码的返回向量。复位向量地址是在器件发生任何 复位时程序计数器返回的默认值;它位于 0000h
PIC18 器件还有两个中断向量地址,用于处理高优先级 和低优先级中断。高优先级中断向量位于 0008h,低优 先级中断向量位于 0018h。它们在程序存储器映射图中 的相对位置如图 5-2 所示。
5-2 PIC18F87J10 系列器件的硬
编码向量和配置字单元
复位向量
高优先级中断向量
低优先级中断向量
片上
程序存储器
闪存配置字
读为
0
0000h
0008h
0018h
(存储器的顶部 -7) (存储器的顶部)

5.1.2 闪存配置字

由于 PIC18F87J10 系列器件没有固定的配置寄存器,所 以保留片上程序存储器顶部的 4 个字来保存配置信息。 复位时,该配置信息被复制到配置寄存器。
配置字以数字顺序存储在程序存储器单元内,从最低地 址开始存放,从 CONFIG1 的低字节开始,到 CONFIG4 的高字节结束。对于这些器件,只使用从 CONFIG1 CONFIG3 的配置字,保留 CONFIG4PIC18F87J10 系列器件的闪存配置字的实际地址如表 5-1 所示。 图 5-2中显示了闪存配置字以及其他的存储器向量在存 储器映射图中的位置。
23.1 节 “配置位”中提供了有关器件配置字的更多 详细信息。
5-1 PIC18F87J10 系列器件的闪存
配置字
器件
PIC18F65J10 PIC18F85J10 PIC18F65J15 PIC18F85J15 PIC18F66J10 PIC18F86J10 PIC18F66J15 PIC18F86J15 PIC18F67J10 PIC18F87J10
程序存储器
KB
32
48
64
96
128
配置字地址
7FF8h 7FFFh
BFF8h BFFFh
FFF8h FFFFh
17FF8h
17FFFh
1FFF8h
1FFFFh
1FFFFFh
图注: (存储器的顶部)代表片上程序存储器空间
的上边界 (有关器件特定的参数见 图 5-1)。阴影区域表示未用的存储空间。 这些区域未按比例显示。
DS39663B_CN 56 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列

5.1.3 PIC18F8XJ10/8XJ15 程序存储器模式

此系列中的 80 引脚器件可以对总共2MB的程序存储器 空间进行寻址。这是通过外部存储器总线实现的。控制 器有两种不同的工作模式:
单片机 (MC)
扩展单片机 (EMC)
通过设置 EMB 配置位 (CONFIG3L<5:4>)决定程序 存储器的模式,如寄存器 5-1 所示。(欲知有关器件配 置位的更多详细信息,请参见第 23.1 节“配置位”。)
程序存储器模式的工作方式如下:
单片机模式只访问片上闪存存储器。尝试读片上存储
器顶部以上的地址单元会导致全读为 0 (相当于执 行 NOP 指令)。
单片机模式也是 64 引脚器件惟一可用的工作模式。
扩展单片机模式允许将内部和外部程序存储器作为
一个存储器块进行访问。器件可以访问其整个的片 上程序存储器;除此之外,器件可以访问外部程序 存储器最大限制为 2MB 的程序存储空间。按照需 要自动在两个存储器之间切换执行。
EMB 配置位的设置还能控制外部存储器总线的地址总 线宽度。在第 7.0 节 “外部存储总线”中对此有更详细 的论述。
在这两种模式下,单片机都能完全地访问数据 RAM。 图 5-3 比较了不同程序存储器模式的存储器映射图。
5-2中更充分地说明了片上存储器和外部存储器访问 限制之间的差异。
寄存器 5-1 CONFIG3L:配置寄存器 3 低字节
R/WO-1 R/WO-1 R/WO-1 R/WO-1 R/WO-1 U-0 U-0 U-0
WAIT BW EMB1 EMB0 EASHFT
bit 7 bit 0
bit 7
bit 6
bit 5-4
bit 3
bit 2-0
WAIT:外部总线等待使能位
1 = 外部总线上的等待状态被禁止 0 = 通过 MEMCON<5:4> 选择并使能外部总线上的等待状态
BW:数据总线宽度选择位
1 =16位数据宽度模式 0 =8位数据宽度模式
EMB1:EMB0:外部存储器总线配置位
11 = 单片机模式,禁止外部总线 10 = 扩展单片机模式,外部总线的地址宽度是 12 01 = 扩展单片机模式,外部总线的地址宽度是 16 00 = 扩展单片机模式,外部总线的地址宽度是 20
EASHFT:外部地址总线移位使能位
1 = 地址移位使能,外部地址总线被移位以从 000000h 开始 0 = 地址移位禁止,外部地址总线反映 PC
未用:读为 0
图注:
R = 可读位 WO = 一次写入位 U = 未用位,读为 0
-n = 擦除后的值 1 = 10 = 清零 x = 未知
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 57
PIC18F87J10 系列

5.1.4 扩展单片机模式和地址移位

默认情况下,处于扩展单片机模式的器件将指向外部存 储器空间范围内的地址的程序计数器值直接放到外部地 址总线上。实际上,这意味着外部存储器器件中低于片 上存储器顶部的地址都不能被访问。
为了避免这种情况,扩展单片机模式使用了一个地址移 位功能以使能自动的地址转换。在此模式下,放在外部 总线上的地址值减去片上程序存储器的大小并重新映射 到从 0000h 开始的外部存储器地址。这样就实现了对外 部存储器器件的存储器空间的完全使用。
5-3 PIC18F87J10 系列程序存储器模式的存储器映射图
片上
存储器
空间
片上 程序
存储器
读为 0
单片机模式
000000h
(存储器的顶部) (存储器的顶部)+1
(1)
扩展单片机模式
外部
存储器
空间
不能
访问
外部
存储器
存储器
存储器
存储器
(2)
片上
空间
000000h
片上 程序
(存储器的顶部) (存储器的顶部)+1
映射
外部
空间
外部
存储器
空间
外部
存储器
带地址移位的
扩展单片机模式
片上
存储器
空间
000000h
片上 程序
存储器
存储器
(存储器的顶部) (存储器的顶部)+1
映射
外部
1FFFFFh-
空间
(存储器的顶部)
(2)
1FFFFFh
图注: (存储器的顶部)代表片上程序存储器空间的上边界 (有关器件特定参数,见图 5-1)。阴影区域代表未用或不能访
问的区域,取决于不同模式。
1: 此模式是 64 引脚器件惟一可用的模式,也是 80 引脚器件的默认模式。
2: 这些模式仅在 80 引脚器件上可用。
1FFFFFh
1FFFFFh
5-2 PIC18F8XJ10/8XJ15 各种程序存储器模式下的存储器访问
工作模式
执行程序 表读 表写 执行程序 表读 表写
单片机 可以 可以 可以 不可以 不可以 不可以 扩展单片机 可以 可以 可以 可以 可以 可以
内部程序存储器 外部程序存储器
DS39663B_CN 58 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列

5.1.5 程序计数器

程序计数器(Program CounterPC)指定要取出执行 的指令地址。PC 21 位宽,并且包含在 3 个独立的 8 位寄存器中。其中的低字节称为 PCL 寄存器,该寄存器 可读写。高字节,即 PCH 寄存器,包含 PC<15:8> 位, 不可直接读写。可以通过 PCLATH 寄存器更新 PCH 寄 存器。更高字节称为 PCU。该寄存器包含 PC<20:16> 位,也不可直接读写。可以通过 PCLATU 寄存器更新 PCU 寄存器。
通过任何写 PCL 的操作,PCLATH PCLATU 的内容 将被传送到程序计数器。同样,通过读 PCL 的操作,程 序计数器的两个高字节将被传送到 PCLATH PCLATU。这有助于计算 PC 的偏移量(见第 5.1.8.1
“计算 GOTO”)。
PC 在程序存储器中按字节寻址。为防止 PC 偏离指令 字,PCL 的最低有效位固定为 0 值。PC 在程序存储器 中以 2 为增量对连续指令寻址。
CALLRCALLGOTO 和程序跳转指令直接写入程序计 数器。对于这些指令,PCLATH 和 PCLATU 的内容将不 会被传送到程序计数器。

5.1.6 返回地址堆栈

用于存放返回地址的堆栈允许发生最多 31 次程序调用 和中断。当执行 CALL RCALL指令或响应中断时,PC 值被压入堆栈。当执行 RETURNRETLW RETFIE 指 令 (如果使能了扩展指令集,则还包括 ADDULNK 和
SUBULNK 指令)时, PC 值从堆栈弹出。 PCLATU PCLATH 不受任何 RETURN CALL 指令的影响 。
31 个字的堆栈操作通过 21 位的 RAM 和一个 5 位的堆
栈指针 STKPTP 实现。堆栈既不占用程序存储器空间也 不占用数据存储器空间。堆栈指针可以读写,并且通过 栈顶特殊功能寄存器可以读写栈顶地址。使用这些寄存 器可以将数据压入堆栈,或将数据从堆栈弹出。
执行 CALL 类型的指令会引起进栈操作;堆栈指针首先 加 1,并且将 PC 的内容写入堆栈指针指向的单元(PC 已经指向 CALL 后的指令)。执行 RETURN 类型的指令 时,引起出栈操作; STKPTR 所指向的单元的内容被传 送给 PC,然后堆栈指针减 1
所有复位后,堆栈指针均会初始化为 “00000”。堆栈 指针值 “00000”不与任何 RAM 单元相关连,它仅仅 是一个复位值。状态位表明堆栈是满,上溢还是下溢。
5.1.6.1 访问栈顶
只有返回地址堆栈的栈顶 (TOS)是可读写的。一组 3 个寄存器 TOSU:TOSH:TOSL 保存 STKPTR 寄存器
(图 5-4)所指向的堆栈单元的内容。这可以让用户在必
要时实现软件堆栈。在 CALLRCALL 或中断(如果使 能了扩展指令集,则还包括 ADDULNK SUBULNK 指 令)后,软件可以通过读取 TOSU:TOSH:TOSL 寄存器 来读取进栈值。这些值可以被置入用户定义的软件堆 栈。返回时,软件可以将这些值返回到 TOSU:TOSH:TOSL 并执行返回。
为防止意外的堆栈破坏,访问堆栈时用户必须禁止全局 中断允许位。
5-4 返回地址堆栈和相关寄存器
返回地址堆栈 <20:0>
栈顶寄存器
TOSLTOSHTOSU
34h1Ah00h
栈顶
001A34h
000D58h
11111 11110 11101
00011 00010 00001 00000
堆栈指针
STKPTR<4:0>
00010
2005 Microchip Technology Inc. 初稿 DS39663B_CN 59
PIC18F87J10 系列
5.1.6.2 返回堆栈指针 (STKPTR
STKPTR 寄存器 (寄存器 5-2)包含堆栈指针值、 STKFUL(堆栈满)状态位和 STKUNF(堆栈下溢)状
态位。堆栈指针值是从 0 31。堆栈压入前,堆栈指针 加 1 ;堆栈弹出值后,堆栈指针减 1。复位时,堆栈指 针值是 0。用户可以读写堆栈指针的值。实时操作系统
Real-Time Operating SystemRTOS)可以利用此特
性维护返回地址堆栈。 当向堆栈压入 PC 31 次(且没有值从堆栈弹出)后,
STKFUL 位就会置 1。只能通过软件或 POR 清零 STKFUL 位。
堆栈满时执行的操作由 STVREN(堆栈上溢复位使能) 配置位的状态决定。(有关器件配置位的介绍,请参见 第 23.1 节“配置位”。) 如 果 STVREN 位已经置 1(默 认值),第 31 次进栈将把 (PC+2)值压入堆栈,将 STKFUL 位置 1 并复位器件。 STKFUL 位将保持置 1 而堆栈指针将被置为 0
如果 STVREN 位被清零,第 31 次进栈时 STKFUL 位会 被置 1,堆栈指针则加 1 变为 31。任何其他进栈都不会 覆盖第 31 次的进栈值并且 STKPTR 将保持为 31
寄存器 5-2: STKPTR:堆栈指针寄存器
R/C-0 R/C-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
STKFUL
bit 7 bit 0
(1)
STKUNF
(1)
当堆栈弹出次数足够卸载堆栈时,下一次出栈会向 PC 返回一个零值并将 STKUNF 位置 1,而堆栈指针则保持 为 0STKUNF 位将保持置 1,直到被软件清零或发生 POR
注: 下溢引起的向PC返回零值会将程序指向复
位向量,可以用复位向量验证堆栈状态并 采取相应的操作。这与复位不同,因为
SFR 的内容不受影响。
5.1.6.3 PUSH POP 指令
因为栈顶可以读写,所以能够将值压入堆栈或从堆栈弹 出值而不影响程序的正常执行是非常理想的。PIC18 指 令集包括两条指令, PUSH POP,它们允许在软件控 制下对 TOS 进行操作。可以修改 TOSUTOSH TOSL,将数据或返回地址放到堆栈中。
PUSH 指令将当前的 PC 值压入堆栈。这将使堆栈指针1,并将当前 PC 值装入堆栈。
POP 指令通过将栈指针减 1 来清除当前的 TOS 值。然 后前一个进栈值就成为 TOS 值了。
SP4 SP3 SP2 SP1 SP0
bit 7
bit 6
bit 5 bit 4-0
STKFUL:堆栈满标志位
1 = 堆栈满或上溢 0 = 堆栈未满或未上溢
STKUNF:堆栈下溢标志位
1 = 发生堆栈下溢 0 = 未发生堆栈下溢
未用:读为 0
SP4:SP0:堆栈指针单元位
1: 通过用户软件或 POR 清零 bit 7 bit 6
图注:
R = 可读位 W = 可写位 U = 未用位 C = 只可清零位
-n = 上电复位时的值 1 = 10 =清零 x = 未知
(1)
(1)
DS39663B_CN 60 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列
5.1.6.4 堆栈满和下溢复位
通过将配置寄存器 1L 中的 STVREN 位置 1 可以在出现 堆栈满和堆栈下溢状态时使能器件复位。当 STVREN位 置 1 时,堆栈满或堆栈下溢状态会将相应的 STKFUL STKUNF 位置 1,然后使器件复位。当 STVREN 位清 零时,堆栈满或堆栈下溢状态会将相应的 STKFUL STKUNF 位置 1,但不会使器件复位。通过用户软件或 上电复位清零 STKFUL STKUNF 位。

5.1.7 快速寄存器堆栈

STATUS、WREG 和 BSR 寄存器提供了快速寄存器 堆栈,从而为中断提供“快速返回”选项。此堆栈深度 仅为 1,并且不可读写。当处理器向量用于中断时,此 堆栈装入对应寄存器的当前值。所有中断源都会将值压 入堆栈寄存器。如果使用 RETFIE FAST 指令从中断 返回,这些寄存器中的值会被装回工作寄存器。
如果同时使能了低优先级中断和高优先级中断,堆栈寄 存器无法可靠地用于返回低优先级中断。如果在处理低 优先级中断时,发生了高优先级中断,则低优先级中断 存储的堆栈寄存器值将被覆盖。在这些情况下,用户必 须在低优先级中断期间用软件保存关键寄存器。
如果未使用中断优先级,所有中断都可以使用快速寄存 器堆栈从中断返回。如果没有使用中断,则快速寄存器 堆栈可在子程序调用结束后用于恢复 STATUS、WREGBSR 寄存器。要将快速寄存器堆栈用于子程序调用, 必须执行CALL label, FAST指令将STATUS、WREGBSR 寄存器的内容存入快速寄存器堆栈。然后执行 RETURN, FAST指令,从快速寄存器堆栈恢复这些寄存 器。
5-1给出了一个在子程序调用和返回期间使用快速寄 存器堆栈的源代码示例。

5.1.8 程序存储器中的查找表

可能在有些编程情形下需要在程序存储器中创建数据结 构和查找表。对于 PIC18 器件而言,有两种方法可以实 现查找表:
计算 GOTO
表读
5.1.8.1 计算 GOTO
计算 GOTO 是通过向程序计数器加一个偏移量来实现 的。例 5-2 给出了一个示例。
使用 ADDWF PCL 指令和一组 RETLW nn 指令可以组成 一个查找表。在调用该表前,会先将查找表中值的偏移 量装入W寄存器。被调用子程序的第一条指令是 ADDWF PCL 指令。接下去执行的是一条 RETLW nn 指令,它 将向调用函数返回值 “nn”。
偏移量 (WREG 中的值)指定程序计数器应该增加的 字节数,其值应当为 2 的倍数 (LSb=0)。
在这种方法中,每个指令单元只能存储一个数据字节, 并且需要返回地址堆栈还有空闲空间。
5-2 使用偏移量计算 GOTO
MOVF OFFSET, W
CALL TABLE ORG nn00h TABLE ADDWF PCL
RETLW nnh
RETLW nnh
RETLW nnh
.
.
.
5-1 快速寄存器堆栈代码示例
CALL SUB1, FAST ;STATUS, WREG, BSR
;SAVED IN FAST REGISTER ;STACK
SUB1 ·
RETURN FAST ;RESTORE VALUES SAVED
;IN FAST REGISTER STACK
5.1.8.2 表读
有一种更好的在程序存储器中存储数据的方法,可以在 每个指令单元存储 2 个字节的数据。
编程时,每个程序字可以存储 2 个字节的查找表数据。 表指针(TBLPTR)指定字节地址,而表锁存器
TABLAT)则存储从程序存储器读取的数据。一次只能
从程序存储器读取一个字节。
在第 6.1 节 “表读与表写”中进一步讨论表读操作。
2005 Microchip Technology Inc. 初稿 DS39663B_CN 61
PIC18F87J10 系列

5.2 PIC18 指令周期

5.2.1 时钟机制

单片机时钟输入信号,无论来自内部或外部时钟源,都 将在单片机内被四分频以产生四个互不重叠的正交时 钟,即 Q1Q2Q3 Q4。单片机工作时,程序计数 器在每个 Q1 1,并在 Q4 从程序存储器取指令并将指 令锁存到指令寄存器中。指令的译码和执行在下一个 Q1Q4中完成。图 5-5所示为时钟和指令执行流程图。
5-5:时/指令周期
Q2 Q3 Q4
OSC1
Q1 Q2 Q3
Q4
PC
OSC2/CLKO
RC 模式)
Q1
PC PC+2 PC+4
执行指令(PC – 2
取指(PC
Q1

5.2.2 指令流 / 流水线

指令周期由 Q1 Q4 四个 Q 周期组成。取指和执行指 令是流水执行的,用一个指令周期来取指,而用另一个 指令周期译码和执行指令。但由于是流水线操作,所以 每条指令的等效执行时间都是一个指令周期。如果某条 指令改变了程序计数器(如,GOTO),则需要两个指令 周期才能完成这条指令 (见例 5-3)。
Q1 周期开始取指操作,程序计数器 (PC)加 1。 指令的执行过程:在 Q1 周期,将所取指令锁存到指令
寄存器 (Instruction RegisterIR)。然后在 Q2Q3Q4 周期中进行指令的译码和执行。其中读数据存储 器 (读操作数)发生在 Q2 周期,写操作发生在 Q4 周 期 (写目标)。
Q2 Q3 Q4
执行指令(PC
取指(PC + 2
Q2 Q3 Q4
Q1
执行指令(PC+2
取指(PC+ 4
内部
时钟
5-3 指令流水线流程图
TCY0TCY1TCY2TCY3TCY4TCY5
1. MOVLW 55h
2. MOVWF PORTB
3. BRA SUB_1
4. BSF PORTA, BIT3 (强制 NOP
5. SUB_1 地址处的指令
除程序转移指令外,所有的指令都是单周期指令。由于程序转移指令将导致一条已取指令从流水线清除,同时重新 取指,然后执行指令,所以程序转移指令需要两个周期。
DS39663B_CN 62 初稿 2005 Microchip Technology Inc.
取指 1 执行 1
取指 2 执行 2
取指 3 执行 3
取指 4 清除 (NOP)
取指 SUB_1 执行 SUB_1
PIC18F87J10 系列

5.2.3 程序存储器中的指令

程序存储器按字节寻址。指令以 2 字节或 4 字节形式存 储在程序存储器中。指令字的最低有效字节始终存储在 偶地址的程序存储器单元中 (LSB = 0)。要保持与指 令边界对齐,PC 2 为单位递增,并且 LSB 总是读为 0 (见第 5.1.5 节 “程序计数器”)。
5-6 给出了指令字如何存储在程序寄存器中的示例。
5-6 程序存储器中的指令
程序存储器 字节单元
指令 1: 指令 2:
指令 3:
MOVLW 055h 0Fh 55h 000008h GOTO 0006h EFh 03h 00000Ah
MOVFF 123h, 456h C1h 23h 00000Eh

5.2.4 双字指令

标准的 PIC18 指令集有 4 条双字指令:CALL、MOVFF、 GOTO LSFR。在所有情况下,这些指令的第二个字总 是将“1111”作 为 4 个最高有效位;其余 12 位是立即 数,通常是数据存储器地址。
使用指令中 4 个最高有效位中的 “1111”可以指定一 种特殊形式的 NOP。如果在第一个字之后以正确的顺序 立即执行指令,则指令第二个字中的数据将被该指令序
CALLGOTO 指令在指令中嵌入了程序存储器的绝对地 址。指令总是存储在字范围内,因而指令所包含的地址 为字地址。字地址会写入 PC<20:1>,后者则在程序存储 器中访问所需的字节地址。图 5-6 中的指令 2 说明了指 令“ GOTO 0006h”在程序存储器中是如何进行编码的。 程序转移指令也采取同样的方式对相对地址偏移量进行 编码。在转移指令中的偏移值代表单字指令数,PC 将以 此作为偏移量。第 24.0 节“指令集综述”提供了指令集 的更多详情。
LSB = 1 LSB = 0
F0h 00h 00000Ch
F4h 56h 000010h
字地址
000000h 000002h 000004h 000006h
000012h 000014h
列访问并使用。如果由于某些原因跳过了第一个字并自 行执行指令的第二个字,则其效果将相当于执行 NOP 指 令。如果双字指令跟在更改 PC 的条件指令后,就有必 要执行此操作。例 5-4 显示了此操作的工作方式。
注: 有关扩展指令集中双字指令的信息,请参
见第 5.5 节“程序存储器和扩展指令集”。
5-4 双字指令
情形 1: 目标代码 源代码
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
情形 2: 目标代码 源代码
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
2005 Microchip Technology Inc. 初稿 DS39663B_CN 63
PIC18F87J10 系列

5.3 数据存储器构成

注: 当使能 PIC18 扩展指令集时,数据存储器
某些方面的操作会更改。更多信息,请参 见第 5.6 节“数据存储器和扩展指令集”。
PIC18 器件中的数据存储器是用静态 RAM 实现的。在 数据存储器中,每个寄存器有 12 位地址,数据存储器 可达 4096 个字节。存储器空间被分为 16 个存储区,每 个存储区包含 256 字节。 PIC18FX5J10/X5J15/X6J10 器件,有 64 KB 的程序存储器,实现了 8 个完整的存储 区,总共 2048 字节。 PIC18FX6J15 PIC18FX7J10 器件,有 96 128 KB 的程序存储器,实现了所有可用 的存储区并为用户提供 3936 字节的数据存储器。如 图 5-7 和图 5-8 所示为器件的数据存储器构成。
数据存储器由特殊功能寄存器 (Special Function
RegisterSFR)和通用寄存器 (General Purpose RegisterGPR)组成。SFR 用于单片机和外围功能的
控制和状态显示,GPR 则用于在用户应用程序中存储数 据和临时存储操作的中间结果。任何未用单元均读为 0
此指令集和架构支持跨所有存储区的操作。通过直接、 间接或索引寻址模式可以访问整个数据存储器。本节稍 后将讨论寻址模式。
为了确保能在一个周期内快速访问常用寄存器(所选的 SFR GPR), PIC18 器件实现了一个快速操作存储 区。这是一个 256 字节的存储器空间,能够在不使用 BSR 的情况下提供对 SFR GPR Bank 0 的低地址部 分的快速访问。第 5.3.2 节 “快速操作存储区”提供了 对快速操作 RAM 的详细描述。

5.3.1 存储区选择寄存器

存储容量较大的数据存储器需要有效的寻址机制,以便 尽可能对所有地址进行快速访问。理想状况下,这意味 着不必为每次读写操作提供完整地址。对于 PIC18 器 件,这是由 RAM 存储机制实现的。它将存储器空间分 为 16 个相连的存储区,每个存储区包含 256 字节。根 据指令,每个单元可通过其完整的 12 位地址或 8 位低 位地址和 4 位存储区指针直接被寻址。
PIC18 指令集中的大多数指令使用存储区指针,称为存 储区选择寄存器 (Bank Select RegisterBSR)。此 SFR 保存着单元地址的 4 个最高有效位;指令本身包含8 个 最低有效位。只使用 BSR 的低 4 位
BSR3:BSR0); 高 4 位不使用,它们总是读为 0 且不
能被写入。通过使用 MOVLB 指令可以直接装载 BSRBSR的值指明数据存储器中的存储区;指令中的 8位指
明在存储区中的位置,并且可被视作从该存储区下边界 开始的偏移量。图 5-9 所示为 BSR 的值与数据存储器 中存储区划分的关系。
因为至多 16 个寄存器可以共用同一个低位地址,所以 用户必须始终小心以确保在执行数据读或写操作之前选 择了正确的存储区。例如,在 BSR 0Fh 时,将程序 数据写入地址为 F9h 8 位地址单元,将终止程序计数 器的复位。
虽然可以选择任何存储区,但是只有那些实际使用的存 储区才能被读取或写入。对未用存储区的写操作将被忽 略,而读取未用存储区将返回 0。即使这样, STATUS 寄存器仍将受到影响,就像操作成功时一样。 图 5-7 中 的数据存储器映射图指出了可使用的存储区。
PIC18 核心指令集中,只有 MOVFF 指令完全地指定 了源寄存器和目标寄存器的 12 位地址。当执行此指令 时,完全忽略 BSR。所有其他指令只包括低位地址作为 操作数,并且必须使用 BSR 或快速操作存储区来定位 它们的目标寄存器。
DS39663B_CN 64 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列
5-7 PIC18FX5J10/X5J15/X6J10 器件的数据存储器映射图
BSR<3:0>
= 0000
= 0001
= 0010
= 0011
= 0100
= 0101
= 0110
= 0111
= 1000
Bank 0
Bank 1
Bank 2
Bank 3
Bank 4
Bank 5
Bank 6
Bank 7
Bank 8
数据存储器映射图
00h
快速操作 RAM
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
GPR
GPR
GPR
GPR
GPR
GPR
GPR
GPR
000h 05Fh 060h 0FFh 100h
1FFh 200h
2FFh 300h
3FFh 400h
4FFh 500h
5FFh 600h
6FFh 700h
7FFh 800h
a=0 时:
将忽略BSR而使用快速操作存储 区。
128 字节是通用 RAM (来自 Bank 0)。
128 字节是特殊功能寄存器
(来自 Bank 15)。
a=1 时:
BSR 指定指令使用存储区。
快速操作存储区
快速操作 RAM 的低地址区
快速操作 RAM 的高地址区
SFR
00h
5Fh 60h
FFh
未使用
= 1110
Bank 14
FFh
= 1111
00h
Bank 15
FFh
2005 Microchip Technology Inc. 初稿 DS39663B_CN 65
读为 0
未使用
SFR
EFFh F00h F5Fh
F60h FFFh
PIC18F87J10 系列
5-8 PIC18FX6J15/X7J10 器件的数据存储器映射图
BSR<3:0>
= 0000
= 0001
= 0010
= 0011
= 0100
= 0101
= 0110
= 0111
= 1000
= 1001
= 1010
= 1011
= 1100
= 1101
= 1110
= 1111
Bank 0
Bank 1
Bank 2
Bank 3
Bank 4
Bank 5
Bank 6
Bank 7
Bank 8
Bank 9
Bank 10
Bank 11
Bank 12
Bank 13
Bank 14
Bank 15
数据存储器映射图
00h
快速操作 RAM
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
GPR
GPR
GPR
GPR
GPR
GPR
GPR
GPR
GPR
GPR
GPR
GPR
GPR
GPR
GPR
未使用
SFR
000h 05Fh 060h 0FFh 100h
1FFh 200h
2FFh 300h
3FFh 400h
4FFh 500h
5FFh 600h
6FFh 700h
7FFh 800h
8FFh 900h
9FFh A00h
AFFh B00h
BFFh C00h
CFFh D00h
DFFh E00h
EFFh F00h F5Fh
F60h FFFh
a=0 时:
将忽略BSR而使用快速操作存储 区。
128 字节是通用 RAM (来自 Bank 0)。
128 字节是特殊功能寄存器
(来自 Bank 15)。
a=1 时:
BSR 指定指令使用存储区。
快速操作存储区
快速操作 RAM 的低地址区
快速操作 RAM 的高地址区
SFR
00h 5Fh
60h
FFh
DS39663B_CN 66 初稿  2005 Microchip Technology Inc.
5-9 使用存储区选择寄存器 (直接寻址)
7
0000
存储区选择
(2)
(1)
BSR
001 0
000h
0
100h
200h
300h
数据存储器
Bank 0
Bank 1
Bank 2
Bank 3
Bank 13
PIC18F87J10 系列
00h
FFh 00h
FFh 00h
FFh 00h
7 11111111
来自操作码
11111111
(2)
0
E00h
F00h
FFFh
1: 可以用指令的快速操作 RAM 位强制跳过选定的存储区 (由 BSR<3:0> 指定)直接寻址快速操作存储区的寄
存器。
2 MOVFF 指令嵌入了完整的 12 位地址。
Bank 14
Bank 15

5.3.2 快速操作存储区

使用 BSR 和指令内嵌的 8 位地址可以使用户寻址整个 数据存储器的范围,这还意味着用户必须总是确保选择 了正确的存储区。否则,可能从错误的单元读取数据或 将数据写入错误的单元。如果某个操作的预定目标寄存 器是 GPR,但是却写入了 SFR,结果可能是灾难性 的。但是在每次向数据存储器进行读或写操作时确认和 / 或更改 BSR 会降低代码的执行效率。
为了连续访问最常用的数据存储器单元,必须将数据存 储器配置为快速操作存储区,这样可以允许用户访问被 映射的存储区而不需要指定 BSR 快速操作存储区由 存储器的 Bank 0 中的前 96 个字节 (00h-5Fh)和存储 器的 Bank 15 中的后 160 个字节(60h-FFh)组成。低 地址的那一半称为 “快速操作 RAM”,由 GPR 组成。 地址较高的部分被映射为器件的 SFR。这两个区域连续 地映射到快速操作存储区,并可以通过 8 位地址以线性 方式寻址 (图 5-7)。
通过执行包括快速操作 RAM 位(指令中的参数 “a”)
FFh 00h
FFh 00h
FFh
使用这种“强制的”寻址可以在一个周期内让指令对数 据地址进行操作,而无需首先更新 BSR。对 于 60h 及以 上的 8 位地址,这意味着用户可以更高效地对 SFR 进 行求值和操作。地址低于 60h 的快速操作 RAM 非常适 合于存储那些用户可能需要快速访问的数据值(如直接 计算结果或常用程序变量)。快速操作 RAM还可以实现 更快速、代码效率更高的现场保护和变量切换。
当使能扩展指令集 (XINST 配置位 = 1)时,快速操作 存储区的映射有略微不同。第 5.6.3 节 “在立即数变址 寻址模式下映射快速操作存储区”中对此有更详细的讨 论。

5.3.3 通用数据寄存器

PIC18 器件可能在 GRP 区中划分了一部分存储区,这
部分存储区为数据 RAM,所有指令均可访问它。 GPRBank0 的底部 (地址 000h)开始向上直到 SFR 区 域的底部。上电复位不会将 GPR 初始化,并且所有其 他复位也不会改变其内容。
PIC18 内核指令使用快速操作存储区。 当“a”等于
1”时,指令使用 BSR 并将包含在操作码中的 8 位地
址作为数据存储器的地址。然而当“a”等于 “0”时, 强制指令使用快速操作存储区映射;完全忽略 BSR 的 当前值。
2005 Microchip Technology Inc. 初稿 DS39663B_CN 67
PIC18F87J10 系列

5.3.4 特殊功能寄存器

特殊功能寄存器(Special Function RegisterSFR)是 CPU 和外设模块用来控制所需的器件操作的寄存器。这 类寄存器是由静态 RAM 实现的。SFR 起始于数据存储 器的顶部 (FFFh)并且向下扩展到 Bank 15 的上半部 分(F60h FFFh)。表 5-3 和表 5-4 列出了这些寄存 器。
SFR 可分为两类:一类与 “内核”器件功能 (ALU 复位和中断)有关,另一类与外设功能有关。复位和中 断寄存器在它们各自的章节中说明,而 ALU STATUS 寄存器在本节稍后说明。与外设功能部件的工作相关的 寄存器在该外设的章节说明。
SFR 常分布在外设中,用来控制外设的功能。未使用的 SFR 单元是不可使用的并且读为全 0
5-3 PIC18F87J10 系列器件的特殊功能寄存器映射图
地址 名称 地址 名称 地址 名称 地址 名称 地址 名称
FFFh TOSU FDFh INDF2
(1)
FFEh TOSH FDEh POSTINC2 FFDh TOSL FDDh POSTDEC2 FFCh STKPTR FDCh PREINC2 FFBh PCLATU FDBh PLUSW2
(1)
(1)
FFAh PCLATH FDAh FSR2H FBAh CCP2CON F9Ah TRISJ
FF9h PCL FD9h FSR2L FB9h CCPR3H F99h TRISH
FF8h TBLPTRU FD8h STATUS FB8h CCPR3L F98h TRISG F78h TMR4
FF7h TBLPTRH FD7h TMR0H FB7h CCP3CON F97h TRISF F77h PR4
FF6h TBLPTRL FD6h TMR0L FB6h ECCP1AS F96h TRISE F76h T4CON
FF5h TABLAT FD5h T0CON FB5h CVRCON F95h TRISD F75h CCPR4H
(2)
FF4h PRODH FD4h
FF3h PRODL FD3h OSCCON FB3h TMR3H F93h TRISB F73h CCP4CON
(2)
FF2h INTCON FD2h
— FF1h INTCON2 FD1h WDTCON FB1h T3CON F91h LATJ FF0h INTCON3 FD0h RCON FB0h PSPCON F90h LATH
FEFh INDF0
(1)
FEEh POSTINC0 FEDh POSTDEC0 FECh PREINC0 FEBh PLUSW0
(1)
(1)
FCFh TMR1H FAFh SPBRG1 F8Fh LATG F6Fh SPBRG2
(1)
FCEh TMR1L FAEh RCREG1 F8Eh LATF F6Eh RCREG2
(1)
FCDh T1CON FADh TXREG1 F8Dh LATE F6Dh TXREG2 FCCh TMR2 FACh TXSTA1 F8Ch LATD F6Ch TXSTA2
FCBh PR2 FABh RCSTA1 F8Bh LATC F6Bh RCSTA2
FEAh FSR0H FCAh T2CON FAAh
FE9h FSR0L FC9h SSP1BUF FA9h FE8h WREG FC8h SSP1ADD FA8h FE7h INDF1
(1)
FE6h POSTINC1 FE5h POSTDEC1 FE4h PREINC1 FE3h PLUSW1
(1)
(1)
FC7h SSP1STAT FA7h EECON2 F87h PORTH
(1)
FC6h SSP1CON1 FA6h EECON1 F86h PORTG F66h SSP2BUF
(1)
FC5h SSP1CON2 FA5h IPR3 F85h PORTF F65h SSP2ADD FC4h ADRESH FA4h PIR3 F84h PORTE F64h SSP2STAT
FC3h ADRESL FA3h PIE3 F83h PORTD F63h SSP2CON1 FE2h FSR1H FC2h ADCON0 FA2h IPR2 F82h PORTC F62h SSP2CON2 FE1h FSR1L FC1h ADCON1 FA1h PIR2 F81h PORTB F61h FE0h BSR FC0h ADCON2 FA0h PIE2 F80h PORTA F60h
FBFh CCPR1H F9Fh IPR1 F7Fh SPBRGH1
(1)
FBEh CCPR1L F9Eh PIR1 F7Eh BAUDCON1
(1)
FBDh CCP1CON F9Dh PIE1 F7Dh SPBRGH2 FBCh CCPR2H F9Ch MEMCON
(3)
F7Ch BAUDCON2
FBBh CCPR2L F9Bh OSCTUNE F7Bh
(3)
(3)
F7Ah
F79h ECCP1DEL
FB4h CMCON F94h TRISC F74h CCPR4L
FB2h TMR3L F92h TRISA F72h CCPR5H
(3)
(3)
(2)
(2)
(2)
F8Ah LATB F6Ah ECCP3AS
F89h LATA F69h ECCP3DEL F88h PORTJ
(3)
(3)
F71h CCPR5L F70h CCP5CON
F68h ECCP2AS F67h ECCP2DEL
(2)
(2)
(2)
(2)
1: 这不是物理寄存器。
2: 不可用的寄存器读为 0 3: 此寄存器在 64 引脚器件上不存在。
DS39663B_CN 68 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列
5-4 寄存器汇总 (PIC18F87J10 系列)
寄存器名称
TOSU
TOSH
TOSL
STKPTR STKFUL STKUNF
PCLATU
PCLATH
PCL
TBLPTRU
TBLPTRH
TBLPTRL
TABLAT
PRODH
PRODL INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 49, 107
INTCON2 RBPU INTCON3 INT2IP INT1IP INT3IE INT2IE INT1IE INT3IF INT2IF INT1IF 1100 0000 49, 109
INDF0
POSTINC0
POSTDEC0
PREINC0
PLUSW0
FSR0H
FSR0L
WREG
INDF1
POSTINC1
POSTDEC1
PREINC1
PLUSW1
FSR1H
FSR1L
BSR
INDF2
POSTINC2
POSTDEC2
PREINC2
PLUSW2
FSR2H
FSR2L
STATUS
图注: x = 未知, u = 不变,- = 未用, q = 取值视情况而定 1PC Bit 21 仅在串行编程模式下可用。
2: 这些位和 / 或寄存器仅在 80 引脚器件上可用。在其他器件上,它们未用并读为 0。所示为 80 引脚器件的复位值。 3: 在 64 引脚器件中未用此寄存器及其位。对于处于单片机模式的 80 引脚器件,这些位不可写且读为 0 4: 仅当选定了 ECPLL HSPLL 振荡器模式时, PLLEN 位可用;否则,该位读为 0 5: 使能双速启动时复位值为 0,禁止双速启动时复位值为 1
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
栈顶最高字节 (TOS<20:16>
栈顶高字节 (TOS<15:8>
栈顶低字节 (TOS<7:0>
(1)
PC<15:8> 的保持寄存器
PC 低字节 (PC<7:0>
程序存储器表指针高字节 (TBLPTR<15:8>
程序存储器表指针低字节 (TBLPTR<7:0>
程序存储器表锁存器
乘积寄存器高字节
乘积寄存器低字节
INTEDG0 INTEDG1 INTEDG2 INTEDG3 TMR0IP INT3IP RBIP 1111 1111 49, 108
使用 FSR0 的内容寻址数据存储器, FSR0 的值不改变 (不是物理寄存器)
使用 FSR0 的内容寻址数据存储器, FSR0 的值后增 (不是物理寄存器)
使用 FSR0 的内容寻址数据存储器, FSR0 的值后减 (不是物理寄存器)
使用 FSR0 的内容寻址数据存储器, FSR0 的值预增 (不是物理寄存器)
使用 FSR0 的内容寻址数据存储器, FSR0 的值预增 (不是物理寄存器), FSR0 的偏移量由 W 寄存器提供
间接数据存储器地址指针 0 的高字节
间接数据存储器地址指针 0 的低字节
工作寄存器
使用 FSR1 的内容寻址数据存储器, FSR1 的值不改变 (不是物理寄存器)
使用 FSR1 的内容寻址数据存储器, FSR1 的值后增 (不是物理寄存器)
使用 FSR1 的内容寻址数据存储器, FSR1 的值后减 (不是物理寄存器)
使用 FSR1 的内容寻址数据存储器, FSR1 的值预增 (不是物理寄存器)
使用 FSR1 的内容寻址数据存储器, FSR1 的值预增 (不是物理寄存器), FSR1 的偏移量由 W 寄存器提供
间接数据存储器地址指针 1 的高字节
间接数据存储器地址指针 1 的低字节
存储区选择寄存器
使用 FSR2 的内容寻址数据存储器, FSR2 的值不改变 (不是物理寄存器)
使用 FSR2 的内容寻址数据存储器, FSR2 的值后增 (不是物理寄存器)
使用 FSR2 的内容寻址数据存储器, FSR2 的值后减 (不是物理寄存器)
使用 FSR2 的内容寻址数据存储器, FSR2 的值预增 (不是物理寄存器)
使用 FSR2 的内容寻址数据存储器, FSR2 的值预增 (不是物理寄存器), FSR2 的偏移量由 W 寄存器提供
间接数据存储器地址指针 2 的高字节
间接数据存储器地址指针 2 的低字节
bit 21
bit 21
SP4 SP3 SP2 SP1 SP0 00-0 0000 49, 60
PC<20:16> 的保持寄存器
程序存储器表指针最高字节 (TBLPTR<20:16>
NOVZ DCC---x xxxx 50, 73
POR
BOR 时的
---0 0000 49, 59 0000 0000 49, 59 0000 0000 49, 59
---0 0000 49, 59 0000 0000 49, 59 0000 0000 49, 59
--00 0000 49, 84 0000 0000 49, 84 0000 0000 49, 84 0000 0000 49, 84 xxxx xxxx 49, 103 xxxx xxxx 49, 103
N/A 49, 75
N/A 49, 76
N/A 49, 76
N/A 49, 76
N/A 49, 76
---- xxxx 49, 75 xxxx xxxx 49, 75 xxxx xxxx 49
N/A 49, 75
N/A 49, 76
N/A 49, 76
N/A 49, 76
N/A 49, 76
---- xxxx 49, 75 xxxx xxxx 49, 75
---- 0000 49, 64
N/A 50, 75
N/A 50, 76
N/A 50, 76
N/A 50, 76
N/A 50, 76
---- xxxx 50, 75 xxxx xxxx 50, 75
详情请
见:
(页)
2005 Microchip Technology Inc. 初稿 DS39663B_CN 69
PIC18F87J10 系列
5-4 寄存器汇总 (PIC18F87J10 系列) (续)
寄存器名称
TMR0H
TMR0L T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 1111 1111 50, 147
OSCCON IDLEN
WDTCON
RCON IPEN
TMR1H
TMR1L
T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC
TMR2
PR2
T2CON
SSP1BUF
SSP1ADD
SSP1STAT SMP CKE D/A
SSP1CON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 50, 191,
SSP1CON2 GCEN ACKSTAT ACKDT/
ADRESH
ADRESL
ADCON0 ADCAL
ADCON1
ADCON2 ADFM
CCPR1H
CCPR1L CCP1CON P1M1 P1M0 DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 0000 0000 51, 173
CCPR2H
CCPR2L CCP2CON P2M1 P2M0 DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 0000 0000 51, 173
CCPR3H
CCPR3L CCP3CON P3M1 P3M0 DC3B1 DC3B0 CCP3M3 CCP3M2 CCP3M1 CCP3M0 0000 0000 51, 173
ECCP1AS ECCP1ASE ECCP1AS2 ECCP1AS1 ECCP1AS0 PSS1AC1 PSS1AC0 PSS1BD1 CVRCON CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0 0000 0000 51, 273 CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 0000 0111 51, 268
TMR3H
TMR3L
T3CON RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC
PSPCON IBF OBF IBOV PSPMODE
SPBRG1
RCREG1
图注: x = 未知, u = 不变,- = 未用, q = 取值视情况而定 1PC Bit 21 仅在串行编程模式下可用。
2: 这些位和 / 或寄存器仅在 80 引脚器件上可用。在其他器件上,它们未用并读为 0。所示为 80 引脚器件的复位值。 3: 在 64 引脚器件中未用此寄存器及其位。对于处于单片机模式的 80 引脚器件,这些位不可写且读为 0 4: 仅当选定了 ECPLL HSPLL 振荡器模式时, PLLEN 位可用;否则,该位读为 0 5: 使能双速启动时复位值为 0,禁止双速启动时复位值为 1
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Timer0 寄存器的高字节
Timer0 寄存器的低字节
(5)
Timer1 寄存器的高字节
Timer1 寄存器的低字节
Timer2 寄存器
Timer2 周期寄存器
T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 50, 157
MSSP1 接收缓冲器 / 发送寄存器
MSSP1 地址寄存器 (I
A/D 结果寄存器的高字节
A/D 结果寄存器的低字节
捕捉 / 比较 /PWM 寄存器 1 的高字节
捕捉 / 比较 /PWM 寄存器 1 的低字节
捕捉 / 比较 /PWM 寄存器 2 的高字节
捕捉 / 比较 /PWM 寄存器 2 的低字节
捕捉 / 比较 /PWM 寄存器 3 的高字节
捕捉 / 比较 /PWM 寄存器 3 的低字节
Timer3 寄存器的高字节
Timer3 寄存器的低字节
EUSART1 波特率发生器寄存器的低字节
EUSART1 接收寄存器
2
C 从动模式), MSSP1 波特率重载寄存器 (I2C 主控模式)
ADMSK5
CHS3 CHS2 CHS1 CHS0 GO/DONE
VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 --00 0000 50, 259 ACQT2 ACQT1 ACQT0 ADCS2 ADCS1 ADCS0 0-00 0000 50, 260
RI
PSR/WUA BF 0000 0000 50, 190,
ACKEN/
ADMSK4
OSTS
TO PD POR BOR 0--1 1100 44, 50,
RCEN/
ADMSK3
PEN/
ADMSK2
SCS1 SCS0 0--- q-00 29, 50
TMR1CS TMR1ON 0000 0000 50, 151
RSEN/
ADMSK1
(2)
TMR3CS TMR3ON 0000 0000 51, 159
SWDTEN --- ---0 50, 283
SEN 0000 0000 50, 202
ADON 0-00 0000 50, 258
PSS1BD0
POR
BOR 时的
0000 0000 50, 149 xxxx xxxx 50, 149
xxxx xxxx 50, 155 xxxx xxxx 50, 155
0000 0000 50, 158 1111 1111 50, 158
xxxx xxxx 50, 184,
0000 0000 50, 199
xxxx xxxx 50, 266 xxxx xxxx 50, 266
xxxx xxxx 51, 188 xxxx xxxx 51, 188
xxxx xxxx 51, 188 xxxx xxxx 51, 188
xxxx xxxx 51, 188 xxxx xxxx 51, 188
(2)
0000 0000 51, 185
xxxx xxxx 51, 161 xxxx xxxx 51, 161
0000 ---- 51, 145 0000 0000 51, 240
0000 0000 51, 248,
详情请
见:
(页)
119
199
200
201
249
DS39663B_CN 70 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列
5-4 寄存器汇总 (PIC18F87J10 系列) (续)
寄存器名称
TXREG1
TXSTA1 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 0000 0010 51, 237 RCSTA1 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 51, 238 IPR3 SSP2IP BCL2IP RC2IP TX2IP TMR4IP CCP5IP CCP4IP CCP3IP 1111 1111 51, 118 PIR3 SSP2IF BCL2IF RC2IF TX2IF TMR4IF CCP5IF CCP4IF CCP3IF 0000 0000 51, 112 PIE3 SSP2IE BCL2IE RC2IE TX2IE TMR4IE CCP5IE CCP4IE CCP3IE 0000 0000 51, 115
IPR2 OSCFIP CMIP
PIR2 OSCFIF CMIF
PIE2 OSCFIE CMIE IPR1 PSPIP ADIP RC1IP TX1IP SSP1IP CCP1IP TMR2IP TMR1IP 1111 1111 51, 116 PIR1 PSPIF ADIF RC1IF TX1IF SSP1IF CCP1IF TMR2IF TMR1IF 0000 0000 51, 110 PIE1 PSPIE ADIE RC1IE TX1IE SSP1IF CCP1IE TMR2IE TMR1IE 0000 0000 51, 113
MEMCON
OSCTUNE
(2)
TRISJ
(2)
TRISH
TRISG
TRISF TRISF7 TRISF6 TRISF5 +TRISF4 TRISF3 TRISF2 TRISF1 TRISE TRISE7 TRISE6 TRISE5 TRISE4 TRISE3 TRISE2 TRISE1 TRISE0 1111 1111 52, 135 TRISD TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0 1111 1111 52, 132 TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 1111 1111 52, 129 TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 1111 1111 52, 126
TRISA
(2)
LATJ
(2)
LATH
LATG
LATF LATF7 LATF6 LATF5 LATF4 LATF3 LATF2 LATF1 LAT E L ATE7 LATE 6 L ATE5 LATE 4 L ATE3 LAT E2 L ATE1 L ATE 0 xxxx xxxx 52, 135 LATD LATD7 LATD6 LATD5 LATD4 LATD3 LATD2 LATD1 LATD0 xxxx xxxx 52, 132 LATC LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0 xxxx xxxx 52, 129 LAT B L ATB7 LATB 6 L ATB5 LATB 4 L ATB3 LAT B2 L ATB1 L ATB 0 xxxx xxxx 52, 126
LATA
(2)
PORTJ
(2)
PORTH
PORTG RDPU REPU RJPU
PORTF RF7 RF6 RF5 RF4 RF3 RF2 RF1 PORTE RE7 RE6 RE5 RE4 RE3 RE2 RE1 RE0 xxxx xxxx 52, 135 PORTD RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 xxxx xxxx 52, 132 PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 xxxx xxxx 52, 129 PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx 52, 126
PORTA
图注: x = 未知, u = 不变,- = 未用, q = 取值视情况而定 1PC Bit 21 仅在串行编程模式下可用。
2: 这些位和 / 或寄存器仅在 80 引脚器件上可用。在其他器件上,它们未用并读为 0。所示为 80 引脚器件的复位值。 3: 在 64 引脚器件中未用此寄存器及其位。对于处于单片机模式的 80 引脚器件,这些位不可写且读为 0 4: 仅当选定了 ECPLL HSPLL 振荡器模式时, PLLEN 位可用;否则,该位读为 0 5: 使能双速启动时复位值为 0,禁止双速启动时复位值为 1
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
EUSART1 发送寄存器
(3)
EBDIS
TRISJ7 TRISJ6 TRISJ5 TRISJ4 TRISJ3 TRISJ2 TRISJ1 TRISJ0 1111 1111 52, 143
TRISH7 TRISH6 TRISH5 TRISH4 TRISH3 TRISH2 TRISH1 TRISH0 1111 1111 52, 141
LATJ7 LATJ6 LATJ5 LATJ4 LATJ3 LATJ2 LATJ1 LATJ0 xxxx xxxx 52, 143
LATH7 LATH6 LATH5 LATH4 LATH3 LATH2 LATH1 LATH0 xxxx xxxx 52, 141
RJ7 RJ6 RJ5 RJ4 RJ3 RJ2 RJ1 RJ0 xxxx xxxx 52, 143
RH7 RH6 RH5 RH4 RH3 RH2 RH1 RH0 0000 xxxx 52, 141
PLLEN
WAIT1 WAIT0
(4)
TRISG4 TRISG3 TRISG2 TRISG1 TRISG0 ---1 1111 52, 139
TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 --11 1111 52, 123
LAT G4 L ATG3 L ATG2 LAT G1 LATG 0 ---x xxxx 52, 139
LATA5 LATA4 LATA3 LATA2 LATA1 LATA0 --xx xxxx 52, 123
(2)
RG4 RG3 RG2 RG1 RG0 111x xxxx 52, 139
RA5 RA4 RA3 RA2 RA1 RA0 --0x 0000 52, 123
BCL1IP
BCL1IF
BCL1IE
TMR3IP CCP2IP 11-- 1-11 51, 117 TMR3IF CCP2IF 00-- 0-00 51, 111 TMR3IE CCP2IE 00-- 0-00 51, 114
WM1 WM0 0-00 --00 51, 92
POR
BOR 时的
xxxx xxxx 51, 246,
-0-- ---- 29, 51
1111 111- 52, 137
xxxx xxx- 52, 137
x000 000- 52, 137
详情请
见:
(页)
247
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 71
PIC18F87J10 系列
5-4 寄存器汇总 (PIC18F87J10 系列) (续)
寄存器名称
SPBRGH1
BAUDCON1 ABDOVF RCIDL
SPBRGH2
BAUDCON2 ABDOVF RCIDL ECCP1DEL P1RSEN P1DC6 P1DC5 P1DC4 P1DC3 P1DC2 P1DC1 P1DC0 0000 0000 53, 184
TMR4
PR4
T4CON
CCPR4H
CCPR4L
CCP4CON
CCPR5H
CCPR5L
CCP5CON
SPBRG2
RCREG2
TXREG2
TXSTA2 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 0000 0010 53, 237 RCSTA2 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 53, 238 ECCP3AS ECCP3ASE ECCP3AS2 ECCP3AS1 ECCP3AS0 PSS3AC1 PSS3AC0 PSS3BD1 PSS3BD0 0000 0000 53, 185 ECCP3DEL P3RSEN P3DC6 P3DC5 P3DC4 P3DC3 P3DC2 P3DC1 P3DC0 0000 0000 53, 184 ECCP2AS ECCP2ASE ECCP2AS2 ECCP2AS1 ECCP2AS0 PSS2AC1 PSS2AC0 PSS2BD1 PSS2BD0 0000 0000 53, 185 ECCP2DEL P2RSEN P2DC6 P2DC5 P2DC4 P2DC3 P2DC2 P2DC1 P2DC0 0000 0000 53, 184
SSP2BUF
SSP2ADD
SSP2STAT SMP CKE D/A
SSP2CON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 53, 191,
SSP2CON2 GCEN ACKSTAT ACKDT/
图注: x = 未知, u = 不变,- = 未用, q = 取值视情况而定 1PC Bit 21 仅在串行编程模式下可用。
2: 这些位和 / 或寄存器仅在 80 引脚器件上可用。在其他器件上,它们未用并读为 0。所示为 80 引脚器件的复位值。 3: 在 64 引脚器件中未用此寄存器及其位。对于处于单片机模式的 80 引脚器件,这些位不可写且读为 0 4: 仅当选定了 ECPLL HSPLL 振荡器模式时, PLLEN 位可用;否则,该位读为 0 5: 使能双速启动时复位值为 0,禁止双速启动时复位值为 1
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
EUSART1 波特率发生器寄存器的高字节
EUSART2 波特率发生器寄存器的高字节
Timer4 寄存器
Timer4 周期寄存器
T4OUTPS3 T4OUTPS2 T4OUTPS1 T4OUTPS0 TMR4ON T4CKPS1 T4CKPS0 -000 0000 53, 163
捕捉 / 比较 /PWM 寄存器 4 的高字节
捕捉 / 比较 /PWM 寄存器 4 的低字节
捕捉 / 比较 /PWM 寄存器 5 的高字节
捕捉 / 比较 /PWM 寄存器 5 的低字节
EUSART2 波特率发生器寄存器的低字节
EUSART2 接收寄存器
EUSART2 发送寄存器
MSSP2 接收缓冲器 / 发送寄存器
MSSP2 地址寄存器 (I
DC4B1 DC4B0 CCP4M3 CCP4M2 CCP4M1 CCP4M0 --00 0000 53, 165
DC5B1 DC5B0 CCP5M3 CCP5M2 CCP5M1 CCP5M0 --00 0000 53, 165
2
C 从动模式), MSSP2 波特率重载寄存器 (I2C 主控模式)
ADMSK5
SCKP BRG16
SCKP BRG16
PSR/WUA BF 0000 0000 53, 184,
ACKEN/
ADMSK4
RCEN/
ADMSK3
PEN/
ADMSK2
WUE ABDEN 01-0 0-00 52, 239
WUE ABDEN 01-0 0-00 52, 239
RSEN/
ADMSK1
SEN 0000 0000 53, 202
POR
BOR 时的
0000 0000 52, 240
0000 0000 52, 240
0000 0000 53, 164 1111 1111 53, 164
xxxx xxxx 53, 166 xxxx xxxx 53, 166
xxxx xxxx 53, 166 xxxx xxxx 53, 166
0000 0000 53, 240 0000 0000 53, 248,
0000 0000 53, 246,
xxxx xxxx 53, 184,
0000 0000 53, 199
详情请
见:
(页)
249
247
199
200
201
DS39663B_CN 72 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列

5.3.5 STATUS 寄存器

如寄存器 5-3 所示,STATUS 寄存器包含ALU 的算术运 算状态。STATUS 寄存器和任何其他寄存器一样,可以 作为任何指令的操作数。如果一条影响 ZDC、C、OVN 位的指令的目标寄存器是 STATUS 寄存器,则会 禁止对这 5 位进行写操作。
根据器件逻辑,这些位会被置位或清零。所以当执行一 条把 STATUS 寄存器作为目标寄存器的指令后, STATUS 寄存器的结果可能和预想的不一样。例如, CLRF STATUS 会将 Z 位置 1,而保留其余位不变。然后
寄存器 5-3 STATUS 寄存器
U-0 U-0 U-0 R/W-x R/W-x R/W-x R/W-x R/W-x
bit 7 bit 0
bit 7-5 bit 4
bit 3
bit 2
bit 1
bit 0
未用:读为 0 N:负标志位 此位用于有符号数的算术运算 (二进制补码)。它可以表示结果是否为负 (ALU MSB= 1)。
1 = 结果为负 0 = 结果为正
OV:溢出标志位 此位用于有符号数的算术运算 (二进制补码)。表明结果超出了 7 位二进制数的范围,溢出导
致了符号位 (bit7)改变状态。
1 = 在本次运算中有符号数的算术运算发生溢出 0 = 没有发生溢出
Z:全零标志位
1 = 算术运算或逻辑运算结果为零 0 = 算术运算或逻辑运算结果不为零
DCDigit carry/borrow 用于 ADDWFADDLW SUBLW 和 SUBWF 指令
1 = 结果的第 4 个低位发生了进位 0 = 结果的第 4 个低位未发生进位
注: 对于 borrow
现。对于移位指令 (RRF RLF),此位值来自源寄存器的 bit 4 bit 3
Ccarry/borrow 用于 ADDWFADDLW SUBLWSUBWF 指令
1= 结果的最高有效位发生了进位 0= 结果的最高有效位未发生进位
注: 对于 borrow
现。对于移位指令 (RRF RLF),此位值来自源寄存器的高位或低位。
标志位
,极性是相反的。减法指令通过加上第二个操作数的二进制补码来实
标志位
,极性是相反的。减法指令通过加上第二个操作数的二进制补码来实
STATUS 寄存器将读出“000u u1uu”。因此,建议仅 使用 BCFBSFSWAPFMOVFF MOVWF 指令来改 变 STATUS寄存器,因为这些指令不会影响 STATUS 寄 存器中的 ZCDCOV N 位。
关于其他不影响任何状态位的指令,请参见表 24-2 和 表 24-3 中的指令集综述。
注: 在减法运算中,C 和 DC 位分别作为 borrow
digit borrow 标志位。
NOVZDCC
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 置位 0 = 清零 x = 未知
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 73
PIC18F87J10 系列

5.4 数据寻址模式

注: 当使能 PIC18 扩展指令集时, PIC18 核心
指令集中的某些指令的执行会改变。更多 信息,请参见第 5.6 节“数据存储器和扩展 指令集”。
虽然只能用一种方法(即通过程序计数器)对程序存储 器进行寻址,但是可以用几种方法来对数据存储器空间 进行寻址。对于大多数指令,寻址模式是固定的。其他 指令最多可以使用 3 种模式,这取决于使用哪些操作数 以及是否使能了扩展指令集。
寻址模式有:
固有寻址
立即数寻址
直接寻址
间接寻址
当使能扩展指令集 (XINST 配置位 =1)时,可以使用 另一种寻址模式,即使用立即数作为偏移量进行变址寻 址的模式。第 5.6.1 节 “使用立即数作为偏移量进行变 址寻址”中对其操作有更详细的讨论。

5.4.1 固有和立即数寻址

很多 PIC18 控制指令根本不需要任何参数,它们执行对 器件有全局影响的操作或者隐式地操作某个寄存器。 这种寻址模式称为固有寻址。例如 SLEEPRESET DAW
其他指令的工作方式与此相同但需要操作码中有其他显 式的参数。 由于需要一些立即数作为参数,这种寻址模 式被称为立即数寻址模式。 例如 ADDLW MOVLW,它 们分别将立即数值加到或移动到 W寄存器。其他例子包 括 CALL GOTO,这两条指令包括一个 20 位的程序存 储器地址。

5.4.2 直接寻址

直接寻址在操作码自身内部指定操作的全部或部分源和 / 或目标地址。这些选项由指令附带的参数指定。
PIC18 内核指令集中,针对位的指令和针对字节的指 令在默认情况下使用某些类型的直接寻址。所有这些指 令都包括某个 8 位立即数地址作为它们的最低有效字 节。此地址也指定了数据 RAM 的某个存储区中的一个 寄存器地址 (第 5.3.3 节 “通用数据寄存器”)或快速 操作存储区 (第 5.3.2 节 “快速操作存储区”)中的一 个单元作为指令的数据源。
快速操作 RAM 位“a”决定地址的解析方式。当 “a” 为“1”时, BSR(第 5.3.1 节“存储区选择寄存器”) 的内容与该地址一起使用来确定完整的 12 位寄存器地 址。 当“a”为 “0”时,该地址被解析为快速操作存 储区中的一个寄存器的地址。使用快速操作 RAM 的寻 址有时也称为直接强制寻址模式。
有些指令,比如 MOVFF,在它们的操作码中包括了完整 的 12 位地址 (源或目标地址)。在这些情况下,完全 忽略 BSR
该操作的结果的目标寄存器由目标位 “d”决定。
d”为 “1”时,结果存回源寄存器,覆盖其原来的内
容。当 “d”为 “0”时,结 果存入 W 寄存 器。不带
d”参数的指令有一个隐含在指令中的目标寄存器,这
些指令的目标寄存器是正在操作的目标寄存器或W寄存 器。

5.4.3 间接寻址

间接寻址使用户无需在指令中给出一个固定的地址就能 访问数据存储器中的某个单元。这是通过使用文件选择 寄存器 (File Select RegisterFSR)作为指针指向被 读取或写入的单元而实现的。因为 FSR本身作为特殊功 能寄存器位于 RAM 中,所以可以在程序控制下直接对 它们进行操作。这就使得 FSR在数据存储器中实现诸如 表和阵列之类的数据结构时非常有用。
也可以使用间接指针操作数 ( Indirect File OperandINDF)对寄存器进行间接寻址。INDF 允许使用其他值 自动递增、递减或偏移指针,从而自动控制指针的值。 这可以实现使用循环的高效代码,例如例 5-5 中清零整 个 RAM 存储区的示例。它还允许用户在数据存储器中 执行变址寻址和其他针对程序存储器堆栈指针的操作。
5-5 使用间接寻址将 RAM
BANK 1)清零的方法
LFSR FSR0, 100h ;
NEXT CLRF POSTINC0 ; Clear INDF
; register then ; inc pointer
BTFSS FSR0H, 1 ; All done with
; Bank1?
BRA NEXT ; NO, clear next
CONTINUE ; YES, continue
DS39663B_CN 74 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列
5.4.3.1 FSR 寄存器和 INDF 操作数
间接寻址的核心是三组寄存器FSR0、FSR1和FSR2。 每一组代表一对8 位寄存器,FSRnH和 FSRnL。FSRnH 寄存器的高 4 位未使用,所以每对 FSR 保存一个 12 位 值。它代表一个可以以线性方式对整个数据存储区范围 进行寻址的值。因而,FSR 寄存器对可以作为指向数据 存储器单元的指针。
间接寻址是通过一组间接指针操作数 (从 INDF0 INDF2)完成的。这些操作数可被视作“虚拟”寄存 器:它们被映射到 SFR 空间,但并非物理实现。对某个
5-10 间接寻址
使用一条将某个间接寻址寄存器作 为操作数的指令……
……使用存储在与该寄存器相关联 的 FSR 对中的 12 位地址……
xxxx1111 11001100
……确定将在此操作中使用的数据 存储器单元。
在此例中, FSR1 对包含了 FCCh。 这意味着 FCCh 单元的内容将与 W 寄存器的内容相加并将结果存储到 FCCh 单元中。
ADDWF, INDF1, 1
FSR1H:FSR1L
特定的 INDF 寄存器进行读取或写入实际上是访问其对 应的 FSR 寄存器对。 例如,从 INDF1 读取数据,读取 的是由 FSR1H:FSR1L 指向的地址单元的数据。使用 INDF寄存器作为操作数的指令实际上是使用 INDF寄存 器对应的 FSR 的内容作为指向指令的目标寄存器的指 针。 INDF 操作数只是使用该指针的一种简便方法。
因为间接寻址使用完整的 12 位地址,所以没有必要进 行数据 RAM 存储体的选择。因此, BSR 和快速操作
RAM 位的当前内容对于确定目标地址没有影响。
000h
Bank 0
100h
200h
300h
07
7
0
E00h
F00h
FFFh
Bank 1
Bank 2
Bank 3
Bank 13
Bank 14
Bank 15
数据存储器
2005 Microchip Technology Inc. 初稿 DS39663B_CN 75
PIC18F87J10 系列
5.4.3.2 FSR 寄存器与 POSTINC POSTDECPREINC PLUSW
除了 INDF 操作数外,每个 FSR 寄存器对还有另外 4 个 间接操作数。与 INDF 相同,这些是 “虚拟”寄存器, 不能被直接读取或写入。访问这些寄存器实际上是访问 相关的 FSR 寄存器对,但是还会对其存储的值执行特定 的操作。它们是:
• POSTDEC:访问 FSR 值,然后在指令操作后自
动将其减 “1
• POSTINC:访问 FSR 值,然后在指令操作后自动
将其加 “1
• PREINC:将 FSR 值加 “1”,然后在指令操作中
使用它
• PLUSW:让 W 寄存器的有符号的值 (范围是
-127 128)与 FSR 的值相加,然后在指令操作
中使用这个新值
在此上下文中,访问 INDF 寄存器将使用 FSR 寄存器中 的值而不更改它们。类似地,访问 PLUSW 寄存器会用 W 寄存器中的值作为 FSR 的偏移值;实际上在该操作 中 W寄存器中的值也不作更改。访问其他的虚拟寄存器 将更改 FSR 寄存器的值。
POSTDECPOSTINC PREINC FSR 进行操 作将影响整个寄存器对,例如:FSRnL 寄存器从 FFh 计满返回到 00h,会向 FSRnH 寄存器进位。另外,这 些操作的结果将不会更改STATUS 寄存器中的任何标志 位的值 (例如, ZN OV 等)。
可以使用 PLUSW 寄存器在数据存储器空间中实现一种 变址寻址形式。 通过设置 W寄存器中的值,用户可以访 问指针地址加上固定偏移值后的地址。在有些应用中, 这可以用来实现一些强大的程序控制结构,诸如数据存 储器内部的软件堆栈。
5.4.3.3 FSR 的间接寻址
将其他FSR或虚拟寄存器作为目标寄存器的间接寻址操 作是一类特殊情况。例如,使用一个 FSR 指向某个虚拟 寄存器将会导致操作失败。举一个具体的例子,假定 FSR0H:FSR0L 包含了 FE7h,它是 INDF1 的地址。尝 试读取 INDF1 的值时如果使用 INDF0 作为操作数,将 返回 00h。尝试写 INDF1 时如果使用 INDF0 作为操作 数,将导致 NOP
另一方面,使用虚拟寄存器写 FSR对的结果可能与预期 的不同。在有些情况下,值将被写入 FSR 对但是不会对 该值进行加减。因此,对 INDF2 POSTDEC2 进行写 操作会将同一个值写入 FSR2H:FSR2L
因为 FSR 是映射到 SFR 空间的物理寄存器,所以可以 通过所有的直接操作对它们进行操作。当使用这些寄存 器时,用户应该小心处理,尤其是当它们的代码使用间 接寻址时。
类似地,在所有其他 SFR上通常也允许使用间接寻址的 操作。用户在进行此类操作时应该特别小心,以免不小 心更改可能影响器件操作的设置。
DS39663B_CN 76 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列

5.5 程序存储器和扩展指令集

使用扩展指令集不会影响程序存储器的操作。 使能扩展指令集会向现有的 PIC18指令集添加 5 个新的
双字命令:ADDFSR、 CALLW、 MOVSF、 MOVSS SUBFSR。第 5.2.4 节“双字指令”中说明这些指令的执 行方式。

5.6 数据存储器和扩展指令集

使能 PIC18 扩展指令集(XINST 配置位 = 1)将显著地 改变数据存储器及其寻址的某些方面。特别是很多 PIC18 内核指令对快速访问存储区的使用是不同的,这 是由于引入了针对数据存储器空间的新的寻址模式。此 模式还会改变使用 FSR2 及其相关操作数的间接寻址的 方式。
了解没有发生改变的内容也同样重要。数据存储器空间 的大小及其线性寻址方式都不会改变。SFR 映射保持不 变。PIC18 内核指令仍然能在直接和间接寻址模式下操 作;固有和立即数指令根本不变化。使用FSR0FSR1 的间接寻址也保持不变。

5.6.1 使用立即数作为偏移量进行变址寻址

使能 PIC18扩展指令集将改变使用 FSR2 寄存器对及其 相关文件操作数的间接寻址的行为。在正常条件下,使 用快速操作存储区的指令(即大多数针对位的指令和针 对字节的指令)可以使用在指令中使用指定的偏移量来 执行变址寻址。这种特定的寻址模式被称为使用立即数 作为偏移量的变址寻址或立即数变址寻址。
当使用扩展指令集时,这种寻址模式有以下要求:
强制使用快速操作存储区 (a= 0);并且
指针地址参数小于或等于 5Fh。
在这些条件下,指令的指针地址不被认为是地址的低字 节 (与直接寻址中的 BSR 一起使用)或快速操作存储 区中的 8 位地址。相反,该值被看作是由 FSR2 指定的 地址指针的偏移量。该偏移量和 FSR2 的内容相加以获 得指令操作的目标地址。

5.6.2 受立即数变址寻址模式影响的指令

任何使用直接寻址的PIC18 内核指令均会受到立即数变 址寻址模式的潜在影响。这包括所有针对字节和针对位 的指令,或者几乎一半的标准 PIC18 指令集。只使用固 有或立即数寻址模式的指令不受影响。
另外,如果针对字节和针对位的指令使用快速操作存储 区 (快速操作 RAM 位为 “0”)或者包括一个大于或 等于 60h 的文件地址,它们将不受影响。满足这些标准 的指令将继续像以前那样执行。图 5-11中给出了当使能 扩展指令集时可用的不同寻址模式的比较。
那些想要在立即数变址寻址模式中使用针对字节或针对 位的指令的用户,应该注意此模式下汇编语法的改变。 第 24.0 节 “指令集综述”中对此有更详细的说明。
2005 Microchip Technology Inc. 初稿 DS39663B_CN 77
PIC18F87J10 系列
5-11 针对位和针对字节的指令的寻址方式对比 (使能了扩展指令集)
例如执行指令: ADDWF, f, d, a (操作码 : 0010 01da ffff ffff)
a = 0
f60h 时 :
该指令以直接强制模式执行。
f”被解析为快速操作 RAM
060h FFFh 之间的单元。即 数据存储器中的单元 F60h FFFh Bank 15)。
此模式寻址不可以使用低于 060h 的单元。
a = 0 且 f 5Fh 该指令以立即数变址寻址模式
执行。“f”被解析为对 FSR2 中 地址值的偏移量。两者相加以 获得指令的目标寄存器的地 址。该地址可以是数据存储器 空间中的任何位置。
注意在此模式下,正确的语句 应是:
ADDWF [k], d
其中 “k”与 “f”相同。
000H
060H
100H
F00H
F40H
FFFH
000H
060H
100H
F00H
F40H
FFFH
BANK 0
BANK 1
BANK 14
BANK 15
SFR
数据存储器
BANK 0
BANK 1
BANK 14
BANK 15
SFR
数据存储器
00H
60H
快速操作 RAM
FSR2H FSR2L
FFH
FFFFFFFF001001DA
f”的
有效范围
BSR
a = 1(f 的所有值): 该指令以直接模式执行 (也称
为直接长模式)。“f”被解析为 数据存储器空间的16个存储区 中某个存储区中的单元。存储 区由存储区选择寄存器
BSR)指定。地址可以 位 于
数据存储器空间中任何未用的
000H
060H
100H
BANK 0
BANK 1
BANK 14
00000000
FFFFFFFF001001DA
存储区。
F00H
BANK 15
F40H
FFFH
DS39663B_CN 78 初稿  2005 Microchip Technology Inc.
SFR
数据存储器

5.6.3 在立即数变址寻址模式下映射快速操 作存储区

使用立即数变址寻址模式能有效地更改快速操作 RAM 低地址部分(00h 5Fh)的映射方式。除了包含 Bank 0 底部的内容之外,此模式还映射来自 Bank 0 和一个可 以位于数据存储器空间中任何位置的用户定义的 “窗 口”。FSR2 的值确定了映射到该窗口的地址的下边界, 而上边界由 FSR2 95 5Fh)定义。快速操作 RAM 中高于 5Fh 的地址的映射方式如前所述(见第 5.3.2
“快速操作存储区”)。图 5-12 中给出了在这种寻址模
式下重新映射快速操作存储区的示例。
快速操作存储区的重新映射 址模式的操作。使用 BSR(快速操作 RAM 位为“1”) 的操作将像以前一样继续使用直接寻址。任何明确使用 间接指针操作数(包括 FR2)进行的间接或变址操作都 将继续以标准的间接寻址模式进行操作。任何使用快速 操作存储区,但包括大于 05Fh 的寄存器地址的指令仍 将使用直接寻址和常规的快速操作存储区映射。

5.6.4 立即数变址寻址模式中的 BSR

虽然当扩展指令集使能时会重新映射快速操作存储区, 但 BSR 的操作将保持不变。直接寻址,使用 BSR 来选 择数据存储区,操作方式与以前描述的相同。
5-12 使用立即数变址寻址重新映射快速操作存储区
示例
ADDWF f, d, a
FSR2H:FSR2L = 120h
FSR2 指针 (120h)到 该指针加上 05Fh 17Fh) 的区域中的单元被映射到 快速操作 RAM 的底部
000h 05Fh)。
位于 F60h FFFh 的特殊 功能寄存器像往常一样被 映射到 60h FFh
在此模式下低于 5Fh Bank 0 的地址不可用。通 过使用 BSR 仍然可以对它 们进行寻址。
000h
05Fh
100h 120h
17Fh
200h
F00h
F60h
FFFh
不能被访问到
Bank 0
窗口
Bank 1
Bank 2
Bank 14
Bank 15
SFR
数据存储器
PIC18F87J10 系列
适用于使用立即数变址寻
00h
Bank 1“窗口”
5Fh 60h
SFR
快速操作存储区
FFh
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 79
PIC18F87J10 系列
注:
DS39663B_CN 80 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列

6.0 闪存程序存储器

在整个 VDD 电压范围内,正常工作期间,闪存程序存储 器都是可读、写和擦除的。
读程序存储器每次读取一个字节,写程序存储器每次写 入 64 字节,而擦除操作则一次擦除 1024 字节。 用户代 码不能进行批量擦除的操作。
写或擦除程序存储器时将中止取指,直到写或擦除操作 结束。在此期间,不可访问程序存储器,所以代码也不 能得到执行。一个内部可编程定时器可终止对程序存储 器的写或擦除操作。
写入程序存储空间的值不必是一条有效指令。执行存有 无效指令的程序存储单元会导致执行一条 NOP 指令。

6-1 表读操作

6.1 表读与表写

为了能读写程序存储器,有两条指令可使处理器在程序 存储空间和数据 RAM 之间传送字节,即:
表读 (TBLRD
表写 (TBLWT
程序存储空间宽度为 16 位,而数据 RAM 空间的宽度为 8 位。表读和表写操作通过一个 8 位寄存器(TABLAT
在这两个存储空间之间传送数据。
表读操作从程序存储器中取出数据然后将其写入数据 RAM6-1 说明了在程序存储器和数据 RAM 之间的 表读操作。
表写操作将数据从数据RAM 写入程序存储器的保持寄存 器中。 在第 6.5 节 “写闪存程序存储器”中将详细介绍 把保持寄存器的内容写入程序存储器的过程。图 6-2 说 明了在程序存储器和数据 RAM 之间的表写操作。
表操作的执行单位为字节。表块包含的是数据而非程序 指令,所以不需要按字对齐。因此,表块可在任何字节 地址处开始和结束。 如果表写用于把可执行代码写入程 序存储器,那么程序指令就需要按字对齐了。
指令: TBLRD*
表指针
TBLPTRU
1:表指针寄存器指向程序存储器中的一个字节。
(1)
TBLPTRH TBLPTRL
程序存储器
(TBLPTR)
程序存储器
表锁存器(8 位)
TABLAT
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 81
PIC18F87J10 系列

6-2 表写操作

表指针
TBLPTRU
1:表指针指向 64 个保持寄存器之一,该寄存器的地址是由 TBLPTRL<5:0> 决定的。在第 6.5 节“写 闪存
程序存储器”中将介绍把数据写入程序存储器阵列的物理过程。
(1)
TBLPTRH TBLPTRL
程序存储器
(TBLPTR)
指令: TBLWT*
程序存储器
保持寄存器
表锁存器(8 位)
TABLAT

6.2 控制寄存器

TBLRDTBLWT指令需要与几个控制寄存器配合使用, 这些控制寄存器是:
• EECON1 寄存器
• EECON2 寄存器
• TABLAT 寄存器
•TBLPTR寄存器

6.2.1 EECON1 EECON2 寄存器

EECON1 寄存器(寄存器 6-1)是访问存储器的控制寄
存器。 EECON2 寄存器不是一个物理寄存器,只用于 对存储器的写和擦除操作,读 EECON2 将得到全 0
FREE 位( 置 1)将允许对程序存储器进行擦除操作。当 FREE 置 1 时,擦除操作将由下一条 WR 命令启动;当 FREE 位清零时,仅使能写操作。
WREN 位(置 1)将允许对程序存储器进行写操作。上
电时 WREN 位被清零。 WRERR 位,在 WR 被置 1 时 由硬件置 1 在内部可编程定时器超时、写操作结束时 被清零。
注: 在正常工作期间,若 WRERR 的读取值为
1,则表明写操作被复位提早中止,或进行 了不合法的写操作。
WR 控制位用于启动写操作。该位不能由软件清零,但 可以被其置 1。当写操作结束时,该位由硬件清零。
DS39663B_CN 82 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列
寄存器 6-1 EECON1EEPROM 控制寄存器 1
U-0 U-0 U-0 R/W-0 R/W-x R/W-0 R/S-0 U-0
FREE WRERR WREN WR
bit 7 bit 0
bit 7-5 未用:读为 0 bit 4 FREE:闪存行擦除使能位
1 = 由下一条 WR 命令擦除 TBLPTR 指向的程序存储器行
(在擦除操作结束时被清零)
0 = 仅进行写操作
bit 3 WRERR:闪存程序错误标志位
1 = 写操作被提早终止 (由于自定时编程期间的复位,或不合法的写入) 0 = 写操作完成
注: WRERR 被置 1 时, EEPGD CFGS 位并不会被清零。
这可用于追溯错误的原因。
bit 2 WREN:闪存程序写入使能位
1 = 允许写入闪存程序存储器 0 = 禁止写入闪存程序存储器
bit 1 WR:写控制位
1 = 启动程序存储器的擦除或写周期
(该操作是自定时的,一旦写操作结束,该位将由硬件清零。软件只能使 WR 位置 1 而不
能将其清零。)
0 = 写周期完成
bit 0 未用:读为 0
图注:
R = 可读位 W = 可写位 S = 只能由软件置 1 而不能清零位 U = 未用位,读为 0
-n = 上电复位时的值 1 = 10 = 清零 x = 未知
2005 Microchip Technology Inc. 初稿 DS39663B_CN 第 83
PIC18F87J10 系列

6.2.2 表锁存器 (TABLAT

表锁存器(TABLAT)是映射到 SFR 空间的一个 8 位寄 存器。表锁存器用于保存在程序存储空间和数据 RAM 之间传输的 8 位数据。

6.2.3 表指针寄存器 (TBLPTR

表指针寄存器 (TBLPTR)指向程序存储器中的一个字 节。 TBLPTR 3 SFR 寄存器组成,即:表指针最 高字节,表指针高字节和表指针低字节
TBLPTRU:TBLPTRH:TBLPTRL), 这 3 个寄存器一
起构成了一个 22 位宽的指针。器件使用该指针的低 21 位来寻址多达 2MB 的程序存储器空间,第 22 位可用于 访问器件 ID、用户 ID 和配置位。
TBLRDTBLWT指令要用到表指针寄存器TBLPTR 据不同的表操作,上述指令可用4种方式更新TBLPTR, 如表 6-1 所示。这些针对 TBLPTR的操作只会影响到指 针的低 21 位。

6.2.4 表指针边界

TBLPTR 用于读、写和擦除闪存程序存储器。
当执行 TBLRD 指令时,要用到 TBLPTR 的全部 22 位来 决定将程序存储器中的哪一个字节读入 TABLAT。
当执行 TBLWT 指令时,使用表指针寄存器的低 7 位
TBLPTR<6:0> 来指定要写入 64 个程序存储器的哪
一个保持寄存器。当对程序存储器的定时写周期开始后
(通过 WR 位启动), TBLPTR 的高 12 位 (TBLPTR<21:10>)决定要写入哪一个 1024 字节块。
欲知更多详情,请参见第 6.5 节“写闪存程序存储器”。 当擦除程序存储器时,表指针寄存器的高 12 位指向要
擦除的 1024 字节块,而忽略低位。 图 6-3 给出了基于闪存程序存储器操作的 TBLPTR
界。
6-1:使TBLRD 和 TBLWT 指令对表指针的操作
示例 表指针操作
TBLRD* TBLWT*
TBLRD*+ TBLWT*+
TBLRD*­TBLWT*-
TBLRD+* TBLWT+*
TBLPTR 不变
/ 写后, TBLPTR 递增
/ 写后, TBLPTR 递减
/ 写前, TBLPTR 递增
6-3 基于不同操作的表指针边界
21 16 15 87 0
TBLPTRU
擦写: TBLPTR<21:10>
表写: TBLPTR<21:6>
TBLPTRH
表读: TBLPTR<21:0>
TBLPTRL
DS39663B_CN 84 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列

6.3 读闪存程序存储器

TBLRD指令用于从程序存储器获取数据并把数据写入数 据 RAM。对程序存储器执行表读操作时,每次读取 1 个 字节。

图 6-4: 读闪存程序存储器

程序存储器
(偶字节地址)
TBLPTR指向程序存储空间内的某个字节。 执行TBLRD 会将被指向的字节存入 TA BLAT,同时自动修改 TBLPTR 以进行下一次表读操作。
内部程序存储器通常以字为单位组织。由地址的最低有 效位来选择字的高字节和低字节。图 6-4 显示了内部程
序存储器和 TABLAT 之间的接口。
(奇字节地址)
TBLPTR = xxxxx1
TBLPTR = xxxxx0
指令寄存器
IR
取指

6-1 读一个闪存程序存储器字

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 MOVF TABLAT, W ; get data MOVF WORD_ODD
TBLRD
TABLAT
读寄存器
2005 Microchip Technology Inc. 初稿 DS39663B_CN 85
PIC18F87J10 系列

6.4 擦除闪存程序存储器

最小的擦除块大小为 512 个字或 1024 个字节。只有通 过外部编程器或 ICSP 控制,才能批量擦除更大的程序 存储块。不支持闪存阵列的单字擦除。
当由单片机本身启动擦除操作时,将擦除程序存储器的 一个 1024 字节块。 TBLPTR 的高 12
TBLPTR<21:10>)指向要擦除的字节块,
TBLPTR<9:0> 被忽略。 EECON1 寄存器控制擦除操作。WREN 位必须被置1
使能写操作。FREE 位被置 1 选择擦除操作。为了安全 起见,必须使用 EECON2 的写启动顺序。
擦除内部闪存需要使用长写操作。在长写周期,指令停 止执行。由内部可编程定时器来终止长写周期。
6-2 擦除闪存程序存储器中的一行
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_ROW
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 Row Erase operation BCF INTCON, GIE ; disable interrupts
必要的序列 MOVLW 55h
MOVWF EECON2 ; write 55h MOVLW 0AAh MOVWF EECON2 ; write 0AAh BSF EECON1, WR ; start erase (CPU stall) BSF INTCON, GIE ; re-enable interrupts

6.4.1 擦除闪存程序存储器的操作顺序

擦除内部程序存储器的步骤如下:
1. 将要擦除的行地址装入表指针寄存器。
2. WREN FREE 位(EECON1<2,4>)置 1,使
能擦除操作。
3. 禁止中断。
4. 55h 写入 EECON2
5. 0AAh 写入 EECON2
6. WR 位置 1,启动行擦除周期。
7. 在擦除操作期间,CPU将在T
时间段内停止工作。
8. 重新允许中断。
IW(见参数D133A)
DS39663B_CN 86 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列

6.5 写闪存程序存储器

最小的编程字节块大小为 32 个字或 64 个字节。不支持 单字或单字节编程。
表写操作在器件内部用来装载保持寄存器,以便对闪存 存储器进行编程。编程时的表写操作总共要用到 64 个 保持寄存器。
由于表锁存器 (TABLAT)只有一个字节大小,所以每 次编程操作需要执行 64 TBLWT 指令。因为只需写入 保持寄存器,故所有的表写操作都是短写周期。在更新 完全部 64 个保持寄存器之后,写入 EECON1 寄存器, 以长写方式启动编程操作。
对内部闪存的编程需要使用长写周期,在此期间,指令 停止执行。由内部可编程定时器来终止长写周期。

6-5 表写闪存程序存储器

8
8 8 8
由片上定时器控制写入的时间。写入 / 擦除电压则由片 上的电荷泵产生,该电荷泵可以工作在器件的电压范围 内。
1: 与以前的 PICmicro 器件不同,
TAB LAT
写寄存器
TBLPTR = xxxxx2
PIC18F87J10系列器件在写周期开始后并
不复位保持寄存器。必须在编程开始之前 清零或重写保持寄存器。
2: 为了保证程序存储器的耐擦写次数,在两
次擦除操作之间,只允许对闪存字节进行 1 次编程。在对某一字节的内容作第二次 修改之前,必须进行行擦除或全部空间的 批量擦除。
TBLPTR = xxxx3FTBLPTR = xxxxx1TBLPTR = xxxxx0
保持寄存器 保持寄存器 保持寄存器 保持寄存器

6.5.1 写闪存程序存储器的操作顺序

对内部程序存储器编程的步骤如下:
1. 读取 1024 个字节存入 RAM
2. 如需要,更新 RAM 中的数据。
3. 将要擦除的地址装入表指针寄存器。
4. 执行行擦除操作。
5. 将要写入的首字节地址装入表指针寄存器,该值
1
6. 采用自动递增的方式把 64 个字节写入保持寄存
器。
7. WREN 位( EECON1<2>)置 1,使能字节写。
程序存储器
8. 禁止中断。
9. 55h 写入 EECON2
10. 0AAh 写入 EECON2
11. WR 位置 1,启动写周期。
12. 在写入期间,在 T CPU 将停止工作。
13. 重新允许中断。
14. 重复步骤 6到步骤 13,直到全部1024个字节都被
写入程序存储器。
15. 对存储器进行校验 (通过表读)。
下一页上的例 6-3 给出了一个代码示例。
注: 在将 WR 位置 1 前,表指针必须指向保持
寄存器中的 64 个字节的地址范围内。
IW (见参数 D133A)时间段内
2005 Microchip Technology Inc. 初稿 DS39663B_CN 87
PIC18F87J10 系列
6-3 写闪存程序存储器
MOVLW CODE_ADDR_UPPER ; Load TBLPTR with the base address MOVWF TBLPTRU ; of the memory block, minus 1 MOVLW CODE_ADDR_HIGH MOVWF TBLPTRH MOVLW CODE_ADDR_LOW MOVWF TBLPTRL
ERASE_BLOCK
BSF EECON1, WREN ; enable write to memory BSF EECON1, FREE ; enable Row Erase operation BCF INTCON, GIE ; disable interrupts MOVLW 55h MOVWF EECON2 ; write 55h MOVLW 0AAh MOVWF EECON2 ; write 0AAh BSF EECON1, WR ; start erase (CPU stall) BSF INTCON, GIE ; re-enable interrupts MOVLW D'16' MOVWF WRITE_COUNTER ; Need to write 16 blocks of 64 to write
RESTART_BUFFER
MOVLW D'64' MOVWF COUNTER MOVLW BUFFER_ADDR_HIGH ; point to buffer MOVWF FSR0H MOVLW BUFFER_ADDR_LOW MOVWF FSR0L
FILL_BUFFER
... ; read the new data from I2C, SPI,
WRITE_BUFFER
MOVLW D’64 ; number of bytes in holding register MOVWF COUNTER
WRITE_BYTE_TO_HREGS
MOVFF POSTINC0, WREG ; get low byte of buffer data MOVWF TABLAT ; present data to table latch TBLWT+* ; write data, perform a short write
DECFSZ COUNTER ; loop until buffers are full BRA WRITE_WORD_TO_HREGS
PROGRAM_MEMORY
BSF EECON1, WREN ; enable write to memory BCF INTCON, GIE ; disable interrupts MOVLW 55h
必需的序列 MOVWF EECON2 ; write 55h
MOVLW 0AAh MOVWF EECON2 ; write 0AAh BSF EECON1, WR ; start program (CPU stall) BSF INTCON, GIE ; re-enable interrupts BCF EECON1, WREN ; disable write to memory
; one erase block of 1024
; PSP, USART, etc.
; to internal TBLWT holding register.
DECFSZ WRITE_COUNTER ; done with one write cycle BRA RESTART_BUFFER ; if not done replacing the erase block
DS39663B_CN 88 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列

6.5.2 写校验

根据应用的不同,好的编程习惯一般要求将写入存储器 的值与原始值进行比对校验。在连续写入字节数已接近 规范极限值的应用中必须使用写校验。

6.6 代码保护期间的闪存程序存储器操作

请参见第 23.6 节 “程序校验和代码保护”了解有关代 码保护期间闪存程序存储器操作的详细信息。

6.5.3 写操作的意外终止

当一次写操作被意外事件,如掉电或意外的复位终止 时,必须对刚刚被编程的存储器单元内容进行校验,如 需要还要重新对其编程。 在正常工作期间,如果写操作 MCLR WRERR 位的状态并重新写入 (如需要)。
复位或 WDT 超时复位中断,用户可以检查

6-2 与闪存程序存储器相关的寄存器

名称 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
TBLPTRU —bit 21程序存储器表指针最高字节 (TBLPTR<20:16>) 49 TBPLTRH 程序存储器表指针高字节 (TBLPTR<15:8> 49 TBLPTRL 程序存储器表指针低字节 (TBLPTR<7:0> 49 TAB LAT 程序存储器表锁存器 49 INTCON EECON2 程序存储器控制寄存器 2 (非物理寄存器) 51 EECON1
图注: — = 未用,读为 0。访问程序存储器操作不使用阴影单元。
GIE/GIEH PEIE/GIEL
FREE WRERR WREN WR —51
TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 49
复位值 所在页
2005 Microchip Technology Inc. 初稿 DS39663B_CN 89
PIC18F87J10 系列
注:
DS39663B_CN 90 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列

7.0 外部存储总线

注: 64 引脚器件内未实现外部存储总线。
外部存储总线使器件能像访问程序存储器或数据存储器 一样访问外部存储器件 (如闪存、 EPROM SRAM 等)。外部存储总线同时支持 8 位和 16 位数据宽度模式 和三种高达 20 位的地址宽度模式。
总线包含 28 个引脚,4 I/O 端口引脚复用。三个端口
PORTDPORTE PORTH)同总共 20 根地址 /
据总线复用, PORTJ 同总线控制信号复用。 表 7-1 罗列了总线引脚并介绍了它们的功能。

7-1 PIC18F8XJ10/8XJ15 外部总线——I/O 端口功能

名称 端口 外部存储总线功能
RD0/AD0 PORTD 0 RD1/AD1 PORTD 1 RD2/AD2 PORTD 2 RD3/AD3 PORTD 3 RD4/AD4 PORTD 4 RD5/AD5 PORTD 5 RD6/AD6 PORTD 6 RD7/AD7 PORTD 7 RE0/AD8 PORTE 0
RE1/AD9 PORTE 1 RE2/AD10 PORTE 2 RE3/AD11 PORTE 3 RE4/AD12 PORTE 4 RE5/AD13 PORTE 5 RE6/AD14 PORTE 6 RE7/AD15 PORTE 7
RH0/A16 PORTH 0 RH1/A17 PORTH 1 RH2/A18 PORTH 2 RH3/A19 PORTH 3 RJ0/ALE PORTJ 0
RJ1/OE
RJ2/WRL
RJ3/WRH
RJ4/BA0 PORTJ 4
RJ5/CE
RJ6/LB
RJ7/UB
注: 为避免混淆,这里只显示 I/O 端口和外部总线分配。在一些引脚上可能还有 1 个或多个其他的复用功能。
PORTJ 1 PORTJ 2 PORTJ 3
PORTJ 5 PORTJ 6 PORTJ 7
地址 bit0 或数据 bit0 地址 bit1 或数据 bit1 地址 bit2 或数据 bit2 地址 bit3 或数据 bit3 地址 bit4 或数据 bit4 地址 bit5 或数据 bit5 地址 bit6 或数据 bit6 地址 bit7 或数据 bit7 地址 bit8 或数据 bit8 地址 bit9 或数据 bit9 地址 bit10 或数据 bit10 地址 bit11 或数据 bit11 地址 bit12 或数据 bit12 地址 bit13 或数据 bit13 地址 bit14 或数据 bit14 地址 bit15 或数据 bit15 地址 bit16 地址 bit17 地址 bit18 地址 bit19 地址锁存使能 (ALE)控制引脚 输出使能 (OE 写低位 (WRL 写高位 (WRH 地址字节 bit0 BA0) 芯片使能 (CE 低字节使能 (LB 高字节使能 (UB
)控制引脚
)控制引脚
)控制引脚
)控制引脚
)控制引脚
)控制引脚
2005 Microchip Technology Inc. 初稿 DS39663B_CN 91
PIC18F87J10 系列

7.1 外部存储总线控制

接口的工作模式由 MEMCON 寄存器控制 (寄存 器 7-1)。MEMCON寄存器在所有的程序存储器工作模 式 (除单片机模式)下可用。在单片机模式中,寄存器 被禁止且不能写入。
EBDIS 位(MEMCON<7>)控制总线的工作模式和相 关端口的功能。将 EBDIS位清零会使能接口和禁止端口 的 I/O 功能及其他复用这些引脚的任何功能。将该位置 1 会使能 I/O 端口和其他复用这些引脚的功能,但当需 要外部存储器工作时,接口的优先级高于引脚上的任何 功能。默认情况下,外部总线总是被使能的并禁止其他 所有的 I/O
EBDIS位的操作也受正在使用的程序存储器模式的影 响。第 7.5 节 “程序存储模式和外部存储总线”详细讨 论了 EBDIS 位的操作。
WAIT 位给外部存储工作增加等待状态。第 7.3 节“等 待状态”讨论了这些位的使用。
WM 位选择总线在 16 位数据宽度模式下使用的特定工 作模式。第 7.6 节“16 位数据宽度模式”详细讨论了这 些操作。当选择使用 8 位数据宽度的模式时这些位不起 作用。

寄存器 7-1: MEMCON:外部存储总线控制寄存器

R/W-0 U-0 R/W-0 R/W-0 U-0 U-0 R/W-0 R/W-0
bit 7
bit 6 bit 5-4
bit 3-2 bit 1-0
EBDIS
bit7 bit0
EBDIS:外部总线禁止位
1 = 当单片机访问外部存储器时使能外部总线,否则,所有的外部总线驱动器映射为 I/O 端口 0 = 一直使能外部总线,禁止 I/O 端口
未用:读为 0
WAIT1:WAIT0:表读和表写总线周期等待计数位
11 = 表读和表写将等待 0 TCY 10 = 表读和表写将等待 1 TCY 01 = 表读和表写将等待 2 TCY 00 = 表读和表写将等待 3 TCY
未用:读为 0 WM1:WM016 位数据总线宽度的 TBLWT 操作选择位
1x = 写字模式:TABLAT0 TABLAT1 作为字输出,当写 TABLAT1 WRH
有效
01 = 字节选择模式:TABLAT 数据复制到 MSB LSBWRH 和(UB 或 LB
将有效
00 = 写字节模式:TABLAT 数据复制到 MSB LSBWRH
—WAIT1WAIT0— —WM1WM0
WRL 将有效
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = 上电复位时的值
DS39663B_CN 92 初稿  2005 Microchip Technology Inc.
1 = 1
0 = 清零 x = 未知
PIC18F87J10 系列

7.2 地址和数据宽度

PIC18F87J10 系列器件能在相同的存储总线上为不同 的地址和数据宽度独立进行配置。两者均由 CONFIG3L 寄存器中的配置位设置。作为配置位意味着这些选项只 能通过对器件编程才能进行配置,而不能由软件控制。
BW 位选择 8 位或 16 位数据总线宽度。该位置 1 (缺 省)会选择 16 位数据宽度。
EMB1:EMB0 位决定程序存储器工作模式和地址总 线宽度。可用的总线宽度有:20 位、16 位、12 位和 单片机模式 (禁止外部总线)。选择 16 位或 12 位 宽度会使相应的高位线用于 I/O 功能;这些引脚不 再受 EBDIS 位设置的影响。例如,选择 16 位地址模 式(EMB1:EMB0 = 01)会禁止 A19:A16 和允许 PORTH<3:0> 工作不受总线中断控制。使用较短地 址宽度使用户可为特定的设计定制存储总线以适 应外部存储空间的大小,同时留出引脚用于专用I/O 操作。
因为 EMB 位能禁止引脚用于存储总线操作,所以选择 一个至少与数据宽度相等的地址宽度尤为重要。如果 12 位地址宽度用于 16 位数据宽度,那么总线上数据的高 4 位将丢失。
所有地址和数据宽度的组合要求在相同的线上复用地址 和数据信息。表 7-2 总结了地址和数据复用以及使用短 地址宽度时可用的 I/O 端口。

7.2.1 外部总线上的地址移位

默认情况下, PC 值就是外部总线上的地址。实际上对 单片机而言,低于片内存储器最高地址的外部存储器件 的地址是不可用的。要访问这些物理存储单元,单片机 和外部存储器间的连接逻辑必须设法译址。
为简化接口,外部总线提供了一种扩展单片机模式,它 能自动进行地址移位。EASHFT 配置位控制该功能。将 该位置 1 会使总线上的实际地址发生偏移,偏移量为单 片机的片内程序存储器大小,并设置总线的起始地址为 0000h。这样器件就可以访问外部存储器的所有物理地 址。

7.2.2 21 位寻址

作为 20 位地址宽度操作的扩展,外部存储总线也能寻 址整个 2 MB 的存储空间。将总线地址 Bit 0BA0)控 制线用作地址的最低有效位可以完成上述功能。 UB LB 控制信号还可能同某些存储器件一起使用在 16 位宽 的数据字内选择高字节和低字节。
8 位和某些16 位数据宽度模式中可使用该寻址模式。 第 7.6.3 节“16 位字节选择模式”和第 7.7 节“8 位模 式”中提供了更多详细信息。
7-2 不同地址和数据宽度的地址和数据线
数据宽度 地址宽度
12
8
16
16
20
16
20
复用的数据和地址线
(和相应端口)
AD7:AD0
PORTD<7:0>
AD15:AD0
PORTD<7:0>
PORTE<7:0>
仅地址线
(和相应端口)
AD11:AD8
PORTE<3:0>
AD15:AD8
PORTE<7:0>
A19:A16, AD15:AD8
PORTH<3:0>
PORTE<7:0>
PORTH 的全部引脚
A19:A16
PORTH<3:0>
可用作 I/O
的端口
PORTE<7:4>
PORTH 的全部引脚
PORTH 的全部引脚
2005 Microchip Technology Inc. 初稿 DS39663B_CN 93
PIC18F87J10 系列

7.3 等待状态

一般认为外部存储器件将工作在单片机时钟速率下,但 经常不是这样。事实上,许多器件读或写数据所需的时 间长于表读或表写操作允许的时间。
为补偿时间差,在使用总线时可以配置外部存储总线给 表操作添加一个固定的延时。设置 WAIT 配置位使能等 待状 态。当 使能 时,通 过 WAIT1:WAIT0
MEMCON<5:4>)设置延时长度。延时长度是单片机
指令周期时间的倍数,添加在表操作指令周期后。延时 范围为 0 3 T
CY (默认值)。

7.4 端口引脚弱上拉

除高位地址线 A19:A16 外,与外部存储总线相关的引脚 均配有弱上拉。 PORTG 寄存器的高 3 位控制上拉。高 三位分别命名为 RDPUREPU RJPU,分别控制 PORTDPORTE PORTJ 上的弱上拉。对其中一位 进行置位会使能相应端口的上拉。默认情况下,器件复 位时禁止所有的上拉。

7.5 程序存储模式和外部存储总线

同时使用片内和外部程序存储器时,PIC18F87J10 系列 器件能工作在两种程序存储模式中的任意一种模式下。 端口引脚的复用功能取决于选定的程序存储模式 和 EBDIS 位的设置。
在单片机模式下,总线无效,引脚只具有端口功能。不 允许写 MEMCOM 寄存器。EBDIS 的复位值(0)被忽 略, EMB 引脚充当 I/O 端口。
在扩展单片机模式下,外部程序存储总线共享引脚的 I/O 端口功能。当器件在外部程序存储空间上进行取指 或表读 / 表写操作时,引脚将具有外部总线功能。
如果器件只是对内部程序存储单元进行取指和访问, EBDIS 控制位将把引脚从外部存储功能改为 I/O 端口功 能。当 EBDIS=0 时,引脚作为外部总线使用。当 EBDIS=1 时,引脚作为 I/O 端口使用。
EBDIS=1 时,器件对外部存储器进行取指或访问, 引脚将切换为外部总线功能。如果在外部存储器执行的 程序将 EBDIS 位置 1,那么置 1 动作将被延时,直到程 序转到内部存储器为止。那时,引脚将从外部总线功能 改为 I/O 端口功能。
EBDIS=0 时如果器件在内部存储器外执行,存储总 线的地址 / 数据和控制引脚将失效。它们进入下面的状 态:有效的地址 / 数据引脚处于三态; CE
UB LB 信号为 1ALE BA0 0。注意只
WRL
有这些与当前地址宽度关联的引脚被强制为三态;其他 引脚继续作为 I/O 使用。例如在 16 位地址宽度情况下, 只有 AD<15:0> PORTD PORTE)受到影响; A19:A16 PORTH<3:0>)继续作为 I/O 使用。
在所有的外部存储模式下,总线的优先级高于其他任一 与总线共享引脚的外设。包括并行从动端口和串行通信 模块,这两者的优先级高于 I/O 端口。
OE、WRH、

7.6 16 位数据宽度模式

16 位数据宽度模式下,外部存储器接口能以三种不 同的配置连接到外部存储器:
• 16 位字节写
• 16 位字写
• 16 位字节选择 MEMCON 寄存器中的 WM1:WM0 MEMCON<1:0>
决定了使用的配置。这三种不同的配置使设计人员在使 用带16 位数据的8位和16位器件时具有最大的灵活性。
对于所有的 16 位模式,地址锁存使能 (ALE)引脚表 明在外部存储接口总线上地址位 AD<15:0> 可用。在地 址锁存之后,输出使能信号 (OE 器的两个字节形成一个 16 位的指令字。在单片机访问 外部存储器(不论读或写)的任何时间内芯片使能信号
CE)始终有效。只要器件一进入休眠模式,信号就变
为无效 (变为高电平)。 在字节选择模式下,JEDEC标准闪存存储器将需要BA0
用于字节地址线和 I/O 线,以在字节和字模式间进行选 择。其他 16 位模式不需要 BA0JEDEC 标准静态 RAM 存储器将使用 UB
LB 信号选择字节模式。
)将立即使程序存储
DS39663B_CN 94 初稿 2005 Microchip Technology Inc.
PIC18F87J10 系列

7.6.1 16 位字节写模式

7-1 举例说明了 PIC18F87J10 系列器件的 16 位字节 写模式。该模式用于将 2 个独立的 8 位存储器相连进行 16 位的操作。通常包括基本 EPROM 和闪存器件。允 许对字节宽的外部存储器进行表写操作。
7-1 16 位字节写模式示例
PIC18F8XJ10
AD<7:0>
AD<15:8>
A<19:16>
WRH
WRL
ALE
(1)
CE
OE
373
373
TBLWT 指令周期内, TABLAT 数据在 AD15:AD0 总 线的高低字节中。TBLPTR 的 LSb 选通相应的 WRH 或
控制线。
WRL
D<7:0>
A<19:0>
D<15:8>
MSB
A<x:0>
D<7:0> CE
(2)
WR
OE OE
WR
地址总线 数据总线 控制线
D<7:0>
A<x:0>
D<7:0> CE
LSB
(2)
1: 高位地址线只用于 20 位宽度地址。
2: 该信号只应用于表写操作。请参见第 6.1 节 “表读与表写”。
2005 Microchip Technology Inc. 初稿 DS39663B_CN 95
PIC18F87J10 系列

7.6.2 16 位字写模式

7-2 显示了 PIC18F65J10 系列器件的 16 位字写模 式。该模式用于字宽存储器,包括一些 EPROM 和闪存 类型的存储器。该模式允许从所有的 16 位存储器取操 作码和表读以及向所有的字宽外部存储器表写。这种方 式把 TBLWT 周期分为写入偶地址或写入奇地址。
在写入偶地址 (TBLPTR<0> =0)的 TBLWT 周期中, TABLAT 数据转移到保持锁存器中,外部地址数据总线 呈现为三态,用作数据总线。没有有效写信号。
7-2 16 位字写模式示例
PIC18F8XJ10
AD<7:0>
AD<15:8>
A<19:16>
WRH
ALE
(1)
CE OE
373
373
在写入奇地址 (TBLPTR<0> = 1)的 TBLWT 周期中, TABLAT 中的数据出现在 AD15:AD0 总线的高字节上。
保持锁存器的内容出现在 AD15:AD0 总线的低字节上。
信号选通每个写周期,不使用 WRL 引脚。BA0 引
WRH
脚上的信号表示 TBLPTR LSb,但该引脚是悬空的。 相反,UB 和 LB 信号有效,可用于同时选择奇偶地址的 两个字节。这种方法的明显缺陷是表写必须在特定字边 界上成对完成,以便正确地写一个字存储单元。
A<20:1>
D<15:0>
A<x:0>
D<15:0>
地址总线 数据总线 控制线
JEDEC
EPROM 存储器
WR
(2)
CE
OE
1: 高位地址线只用于 20 位宽度地址。
2: 该信号只应用于表写操作。请参见第 6.1 节 “表读与表写”。
DS39663B_CN 96 初稿  2005 Microchip Technology Inc.
PIC18F87J10 系列

7.6.3 16 位字节选择模式

7-3 给出了一个 16 位字节选择模式示例。该模式允 许对带字节选择功能的字宽外部存储器进行表写操作。 这个通常包括字宽闪存和 SRAM 器件。
TBLWT 周期内,TABLAT 中的数据出现在 AD15:AD0 总线的高低字节中。WRH
信号选通每个写周期; WRL
没有使用。 BA0 UB/LB 信号用于根据 TBLPTR 寄存 器中的最低有效位选择要写的字节。
7-3 16 位字节选择模式示例
PIC18F8XJ10
AD<7:0>
AD<15:8>
A<19:16>
WRH
WRL
ALE
(2)
OE
BA0
I/O
LB
UB
373
373
闪存和SRAM器件使用不同的控制信号组合来实现字节 选择模式。JEDEC 标准闪存存储器要求控制器 I/O 端口 引脚连接到存储器的 BYTE/WORD
引脚,用来提供选
择信号。它们还使用控制器的 BA0 信号作为字节地址。 在另一方面,JEDEC 标准静态 RAM 存储器使用 UB 和
信号选择字节。
LB
A<20:1>
138
A<20:1>
A<x:1>
(3)
CE
A0 BYTE/WORD
A<x:1>
CE LB
UB
SRAM 存储器
WR
OE
JEDEC
闪存存储器
D<15:0>
WR
OE
JEDEC
D<15:0>
(1)
(1)
D<15:0>
D<15:0>
地址总线 数据总线 控制线
1: 该信号只应用于表写操作。请参见第 6.1 节 “表读与表写”。
2: 高位地址线只用于 20 位宽度地址。 3: 只有当访问多个存储器件时才需要取消复用。
2005 Microchip Technology Inc. 初稿 DS39663B_CN 97
PIC18F87J10 系列

7.6.4 16 位模式时序

在外部存储总线上出现的控制信号在不同的操作模式下 是不同的。图 7-4 和图 7-5 所示为典型的信号时序图。
7-4:执TBLRD 的外部存储总线时序 (扩展单片机模式)
A<19:16>
AD<15:0>
CE
ALE
OE
存储器
周期
指令 执行
Q2Q1 Q3 Q4 Q2Q1 Q3 Q4
000100h 取操作码 000102h 取操作码 000104h 取操作码
TBLRD *
INST(PC – 2)
MOVLW 55h
TBLRD 周期 1
Q2Q1 Q3 Q4
0Ch
CF33h
199E67h 取操作码
TBLRD 92h
TBLRD 周期 2
9256h
7-5:执SLEEP 的外部存储总线时序 (扩展单片机模式)
Q2Q1 Q3 Q4 Q2Q1 Q3 Q4
Q1
Q2Q1 Q3 Q4
ADDLW 55h
MOVLW
A<19:16>
AD<15:0>
CE
ALE
OE
存储器
周期
指令 执行
00h
3AAAh
007554h 取操作码
INST(PC – 2)
0003h
SLEEP
00h
3AABh
007556h 取操作码
MOVLW 55h
0E55h
SLEEP
休眠模式,总线无效
DS39663B_CN 98 初稿 2005 Microchip Technology Inc.
Loading...