MICROCHIP PIC18F85J90 Technical data

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

LCD 驱动模块特性:

直接驱动 LCD 面板能力:
- 处于休眠模式时仍可驱动 LCD 面板
多达 48 个段和 192 像素;可由软件选择
可编程 LCD 定时模块:
- 多个 LCD 定时源
- 多达 4 个公共时钟:静态、 1/21/3 1/4 复用
- 静态、 1/2 1/3 偏置配置
自动对比度控制能力

单片机特性:

闪存程序存储器可耐擦写 1000 次 (典型值)
闪存数据保存期:最少 20
可在软件控制下自行编程
中断优先级
• 8 x 8 单周期硬件乘法器
扩展型看门狗定时器 (Watchdog Timer
WDT):
- 可编程周期从 4 ms 131s
通过两个引脚进行在线串行编程 (In-Circuit
Serial Programming™ , ICSP™)
通过两个引脚进行带有 5 个断点的在线调试 (In-
Circuit Debug
工作电压范围:2.0V 3.6V
片上 2.5V 稳压器

灵活的振荡器结构:

两种晶振模式,频率为 4-25 MHz
两种外部时钟模式,频率最高为 40 MHz
内部振荡器模块:
-8个可由用户选择的频率:从 31.25 kHz 到
8MHz
辅助振荡器使用 Timer1 (工作频率为 32 kHz
故障保护时钟监视器:
- 当外设时钟发生故障时可使器件安全断电

低功耗特性:

功耗管理模式:
- 运行:CPU 工作,外设打开
- 空闲:CPU 不工作,外设打开
- 休眠:CPU 不工作,外设关闭
双速振荡器启动

外设特点:

高灌 / 拉电流:25 mA/25 mA PORTB PORTC
多达 4 个外部中断
•4个 8 位 /16 位定时器 / 计数器模块
- 使用 Timer1
两个捕捉 / 比较 /PWM CCP)模块:
- 捕捉为 16 位,最大分辨率为 6.25 ns T
- 比较为 16 位,最大分辨率为 100 ns TCY
-PWM输出:PWM 分辨率最大为 10 位
主控同步串行口 (Master Synchronous Serial
PortMSSP)模块支持两种模式的操作:
-3线 /4 线 SPI (支持所有 4 种 SPI 模式)
2
C™ 主 / 从模式
-I
一个可寻址的 USART 模块
一个增强型 USART 模块:
- 支持 LIN 1.2
- 启动位和间隔字符自动唤醒
- 自动波特率检测
多达 12 路通道的 10 A/D 转换器:
- 自动采集
- 可在休眠模式下进行转换
两个模拟比较器
比较器的可编程参考电压
CY/16
程序存储器
器件
PIC18F63J90 8K 4096 1024 51 132 1/3 2
PIC18F64J90 16K 8192 1024 51 132 1/3 2
PIC18F65J90 32K 16384 2048 51 132 1/3 2
PIC18F83J90 8K 4096 1024 67 192 1/3 2
PIC18F84J90 16K 8192 1024 67 192 1/3 2
PIC18F85J90 32K 16384 2048 67 192 1/3 2
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 1
闪存
(字节)单字指令数
SRAM 数 据存储器 (字节)
I/O
LCD
(像素)
8/16
CCP
定时器
MSSP
主控
SPI
2
I
C™
有有 有有 有有 有有 有有 有有
10
A/D
(通道)
AUSART
EUSART/
1/1 12 2
1/1 12 2
1/1 12 2
1/1 12 2
1/1 12 2
1/1 12 2
BOR/
LVD
比较器
有 有 有 有 有 有
PIC18F85J90 系列

引脚示意图

64 引脚 TQFP
LCDBIAS3
RE3/COM0
RE4/COM1
RE5/COM2
/SEG31
(1)
RE6/COM3
RE7/CCP2
DD
RD0/SEG0
V
VSS
RD1/SEG1
RD2/SEG2
RD3/SEG3
RD4/SEG4
RD5/SEG5
RD6/SEG6
RD7/SEG7
RE1/LCDBIAS2
RE0/LCDBIAS1
RG0/LCDBIAS0
RG1/TX2/CK2
RG2/RX2/DT2/V
RF7/AN5/SS/SEG25
RF6/AN11/SEG24
RF5/AN10/CV
RF4/AN9/SEG22
RF3/AN8/SEG21
RF2/AN7/C1OUT/SEG20
LCAP1
LCAP2
RG3/V
MCLR
RG4/SEG26
VSS
VDDCORE/VCAP
REF/SEG23
64
63 62 61
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 18 19 20 21 22 23 24 25 26
ENVREG
DD
AV
AVSS
PIC18F63J90
PIC18F64J90
PIC18F65J90
REF-
SS
V
RA0/AN0
54 53 52 5158 57 56 5560 59
27 28
VDD
29 30
/SEG32
(1)
50 49
31
32
48
47
46
45
44
43
42
41
40
39
38
37
36
35
34
33
RB0/INT0/SEG30
RB1/INT1/SEG8
RB2/INT2/SEG9
RB3/INT3/SEG10
RB4/KBI0/SEG11
RB5/KBI1/SEG29
RB6/KBI2/PGC
Vss
OSC2/CLKO/RA6
OSC1/CLKI/RA7
V
DD
RB7/KBI3/PGD
RC5/SDO/SEG12
RC4/SDI/SDA/SEG16
RC3/SCK/SCL/SEG17
RC2/CCP1/SEG13
RA2/AN2/V
RA3/AN3/VREF+
RA1/AN1/SEG18
RF1/AN6/C2OUT/SEG19
RA5/AN4/SEG15
RA4/T0CKI/SEG14
RC0/T1OSO/T13CKI
RC6/TX1/CK1/SEG27
RC7/RX1/DT1/SEG28
RC1/T1OSI/CCP2
1CCP2 引脚位置取决于 CCP2MX 位设置。
DS39770A_CN 第 2 页 超前信息  2007 Microchip Technology Inc.

引脚示意图 (续)

80 引脚 TQFP
RH2/SEG45
RH3/SEG44
RE1/LCDBIAS2
RE0/LCDBIAS1
RG0/LCDBIAS0
RG1/TX2/CK2
RG2/RX2/DT2/V
RF7/AN5/SS/SEG25
RF6/AN11/SEG24
RF5/AN10/CV
RF4/AN9/SEG22
RF3/AN8/SEG21
RF2/AN7/C1OUT/SEG20
LCAP1
LCAP2
RG3/V
MCLR
RG4/SEG26
VDDCORE/VCAP
REF/SEG23
RH7/SEG43
RH6/SEG42
VSS
/SEG31
(1)
LCDBIAS3
RE3/COM0
RE4/COM1
RH1/SEG46
RH0/SEG47
80
79
78
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 22 23 24 25 26 27 28 29 30 31 32
RE5/COM2
77 76 75
RD0/SEG0
RE6/COM3
RE7/CCP2
PIC18F83J90 PIC18F84J90 PIC18F85J90
VDD
PIC18F85J90 系列
VSS
RD1/SEG1
RD2/SEG2
RD3/SEG3
RD4/SEG4
RD5/SEG5
RD6/SEG6
RD7/SEG7
RJ0
RJ1/SEG33
68 67 66 6572 71 70 6974 73
33 34
35 36
64 63 62 61
37
40
39
38
60
59
58
57
56
55
54
53
52
51
50
49
48
47
46
45
44
43
42
41
RJ2/SEG34
RJ3/SEG35
RB0/INT0/SEG30
RB1/INT1/SEG8
RB2/INT2/SEG9
RB3/INT3/SEG10
RB4/KBI0/SEG11
RB5/KBI1/SEG29
RB6/KBI2/PGC
VSS
OSC2/CLKO/RA6
OSC1/CLKI/RA7
DD
V
RB7/KBI3/PGD
RC5/SDO/SEG12
RC4/SDI/SDA/SEG16
RC3/SCK/SCL/SEG17
RC2/CCP1/SEG13
RJ7/SEG36
RJ6/SEG37
RA1/AN1/SEG18
SS
V
RA0/AN0
VDD
RA5/AN4/SEG15
I/SEG32
(1)
RA4/T0CKI/SEG14
RC0/T1OSO/T13CKI
RC6/TX1/CK1/SEG27
RC1/T1OSI/CCP2
RJ5/SEG38
RJ4/SEG39
RC7/RX1/DT1/SEG28
RH5/SEG41
RH4/SEG40
RF1/AN6/C2OUT/SEG19
ENVREG
DD
AV
REF-
AVSS
RA2/AN2/V
RA3/AN3/VREF+
1CCP2 引脚位置取决于 CCP2MX 位设置。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 3
PIC18F85J90 系列
目录
1.0 器件概述 ....................................................................................................................................................................................... 7
2.0 振荡器配置 ................................................................................................................................................................................. 29
3.0 功耗管理模式.............................................................................................................................................................................. 37
4.0 复位 ............................................................................................................................................................................................ 45
5.0 存储器构成 ................................................................................................................................................................................. 57
6.0 闪存程序存储器 .......................................................................................................................................................................... 81
7.0 8 x 8 硬件乘法器......................................................................................................................................................................... 91
8.0 中断 ............................................................................................................................................................................................ 93
9.0 I/O 端口..................................................................................................................................................................................... 109
10.0 Timer0 模块 .............................................................................................................................................................................. 131
11.0 Timer1 模块 .............................................................................................................................................................................. 135
12.0 Timer2 模块 .............................................................................................................................................................................. 141
13.0 Timer3 模块 .............................................................................................................................................................................. 143
14.0 捕捉 / 比较 /PWM CCP)模块............................................................................................................................................... 147
15.0 液晶显示 (LCD)驱动模块 ..................................................................................................................................................... 157
16.0 主控同步串行口 (MSSP)模块 ............................................................................................................................................... 185
17.0 增强型通用同步 / 异步收发器 (EUSART).............................................................................................................................. 229
18.0 可寻址的通用同步 / 异步收发器 (AUSART).......................................................................................................................... 249
19.0 10 位模数转换器 (A/D)模块.................................................................................................................................................. 263
20.0 比较器模块 ............................................................................................................................................................................... 273
21.0 比较器参考电压模块 ................................................................................................................................................................. 279
22.0 CPU 的特殊性能....................................................................................................................................................................... 283
23.0 指令集汇总 ............................................................................................................................................................................... 295
24.0 开发支持 ................................................................................................................................................................................... 345
25.0 电气特性 ................................................................................................................................................................................... 349
26.0 直流和交流特性图表 ................................................................................................................................................................. 383
27.0 封装信息 ................................................................................................................................................................................... 385
附录 A 高档器件系列间的移植 ................................................................................................................................................... 389
索引 .................................................................................................................................................................................................... 393
Microchip 网站.................................................................................................................................................................................... 403
变更通知客户服务 .............................................................................................................................................................................. 403
客户支持............................................................................................................................................................................................. 403
读者反馈表 ......................................................................................................................................................................................... 404
产品标识体系...................................................................................................................................................................................... 405
DS39770A_CN 4 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列
致客户
我们旨在提供最佳文档供客户正确使用 Microchip 产品。为此,我们将不断改进出版物的内容和质量,使之更好地满足您的要求。 出版物的质量将随新文档及更新版本的推出而得到提升。
如果您对本出版物有任何问题和建议,请通过电子邮件联系我公司 TRC 经理,电子邮件地址为 CTRC@microchip.com,或将本 数据手册后附的 《读者反馈表》传真到 86-21-5407 5066。我们期待您的反馈。
最新数据手册
欲获得本数据手册的最新版本,请查询我公司的网站:
http://www.microchip.com
查看数据手册中任意一页下边角处的文献编号即可确定其版本。文献编号中数字串后的字母是版本号,例如 DS30000A DS30000 的 A 版本。
勘误表
现有器件可能带有一份勘误表,描述了实际运行与数据手册中记载内容之间存在的细微差异以及建议的变通方法。一旦我们了解到 器件 / 文档存在某些差异时,就会发布勘误表。勘误表上将注明其所适用的硅片版本和文件版本。
欲了解某一器件是否存在勘误表,请通过以下方式之一查询:
•Microchip网站 http://www.microchip.com
当地 Microchip 销售办事处 (见最后一页)
在联络销售办事处时,请说明您所使用的器件型号、硅片版本和数据手册版本 (包括文献编号)。
客户通知系统
欲及时获知 Microchip 产品的最新信息,请到我公司网站 www.microchip.com 上注册。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 5
PIC18F85J90 系列
注:
DS39770A_CN 6 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列

1.0 器件概述

本文档涉及以下器件的具体信息:
• PIC18F63J90 • PIC18F83J90
• PIC18F64J90 • PIC18F84J90
• PIC18F65J90 • PIC18F85J90
该系列继承了所有 PIC18 单片机的传统优点,即具有出 色的计算性能、丰富的功能集,除此之外,还带有一个 多功能片上 LCD 驱动器,以及极具竞争力的价格。这些 特点使得 PIC18F85J90 系列成为许多高性能,尤其是 那些价格作为首要考虑因素的应用的理想选择。

1.1 内核特性

1.1.1 纳瓦技术

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

1.1.2 振荡器选项和特性

PIC18F85J90 系列的所有器件可提供 6个不同的振荡器
选项,使用户在开发应用硬件时有很大的选择范围。这 些选项包括:
两种晶振模式,使用晶振或陶瓷谐振器。
两种外部时钟模式,提供四分频时钟输出选项。
一个锁相环 (Phase Lock LoopPLL)倍频器,
可在外部振荡器模式下使用,可使时钟速度最高达 到 40 MHz
一个内部振荡器模块,它提供一个 8MHz的时钟源
(精度为 ±2%)和一个 INTRC 时钟源 (振荡频率
大约为 31 kHz,温度和 V 定),以及一个用户可选择的包括 6 种时钟频率的 范围 (从 125 kHz 4MHz),因此共有 8 种时钟 频率可供选择。此选项可以空出两个振荡器引脚作 为额外的通用 I/O 引脚。
DD 变化时频率保持稳
内部振荡器模块还提供了一个稳定的参考源,增加了以 下功能以使器件能更安全地工作:
故障保护时钟监视器:该部件持续监视主时钟源, 将其与内部振荡器提供的参考信号作比较。如果时 钟发生了故障,单片机会将时钟源切换到内部振荡 器,使器件可继续低速工作或安全地关闭应用。
双速启动:该功能允许在上电复位或从休眠模式唤 醒时将内部振荡器用作时钟源,直到主时钟源可用 为止。

1.1.3 存储器选项

PIC18F85J90 系列提供了一系列程序存储器选项,代码
空间从 8KB 到 32 KB。程序存储器的闪存单元经测评 最多可承受 1000 次擦写。在不刷新的情况下,数据保 存期保守地估计在 20 年以上。
PIC18F85J90 系列还为动态应用程序数据提供了充足 的空间——多达 2048 字节的数据 RAM

1.1.4 扩展指令集

PIC18F85J90 系列在 PIC18 指令集的基础上进行了可
选择的扩展,添加了 8 条新指令和一个变址寻址模式。 此扩展可以使用一个器件配置选项使能,它是为优化重 入应用程序代码而特别设计的,这些代码原来是使用高 级语言 (如 C 语言)开发的。

1.1.5 移植方便

无论存储器容量如何,所有器件都共享相同的丰富外 设,使应用程序的扩展和升级工作变得轻松而容易。
整个系列的引脚排列设计一致也有助于向下一代更大规 模的器件移植。在 64 引脚器件间、80 引脚器件间移植, 甚至是从64引脚器件向80引脚器件的移植都是可以的。
PIC18F85J90 系列的引脚与其他 PIC18 系列器件 (如 PIC18F8720PIC18F8722 以及带有 LCD 驱动器的 PIC18F8490 系列单片机)的引脚兼容。这为不同应用
的发展开拓了新的视野,使开发者能在保留相同功能集 的同时可在Microchip PIC18 系列中选择更价廉的器件。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 7
PIC18F85J90 系列

1.2 LCD 驱动器

片上 LCD 驱动器包括许多功能,使得在低功耗应用中显 示的集成更容易。这些包括一个带有电荷泵的集成的稳 压器,允许用软件控制对比度并且可在高于器件 VDD 的 电压下进行显示操作。

1.3 其他特殊功能

通信:PIC18F85J90 系列具有一系列串行通信外 设,包括一个可寻址的 USART、一个独立的支 持LIN 规范 1.2 的增强型 USART 以及一个主控 SSP 模块,能够进行 SPI I 模式操作。
CCP 模块:本系列的所有器件都包括两个捕捉 / 比 较 /PWM CCP)模块。在同一时间,最多可以使 用 4 种不同时基来执行几项不同的操作。
10 A/D 转换器 :该模块具备可编程采集时间, 从而不必在选择通道和启动转换之间等待一个采样 周期,因而减少了代码开销。
扩展型看门狗定时器 (WDT): 该增强型版本加 入了一个 16 位预分频器,扩展了超时时间范围, 并保证此范围在工作电压和温度变化时仍可保持稳 定。超时周期请参见第 25.0 节 “电气特性”。
2
C™ (主控和从动)

1.4 系列中各产品的详细说明

PIC18F85J90 系列器件以 64 引脚和 80 引脚封装形式 提供。图 1-1 和图 1-2 分别为这两类器件的框图。
这些器件在以下四个方面存在差异:
1. 闪存程序存储器(3种大小,范围从 PIC18FX3J90 器件的 8KB到 PIC18FX5J90 器件的 32 KB)。
2. 数据 RAMPIC18FX3J90 PIC18FX4J90 件为 1024 字节,PIC18FX5J90 器件为 2048 字 节)。
3. I/O 端口(64 引脚器件上有 7 个双向端口,80 引 脚器件上有 9 个双向端口)。
4. LCD 像素:64 引脚器件可驱动 132 像素(33 SEG x 4 个 COM), 而 80 引脚器件可驱动 192
像素 (48 SEG x 4 COM)。
本系列器件的所有其他功能都是相同的。表 1-1 和表 1-2 中总结了这些功能。
1-3 和表 1-4 给出了本系列中所有器件的引脚说明。
DS39770A_CN 8 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列

1-1 PIC18F85J90 系列器件特性 (64 引脚器件)

特性
工作频率 程序存储器 (字节数) 程序存储器 (指令数) 数据存储器 (字节数) 中断源
I/O 端口 端口 A, B, C, D, E, F, G LCD 驱动器 (可以驱动的像素数量) 132 33 SEG x 4 COM
定时器 捕捉 / 比较 /PWM 模块 串行通信 MSSP、可寻址的 USART 和增强型 USART 10 位模数转换模块 12 路输入通道
复位 (和延时)
指令集 75 条指令,使能扩展指令集后总共为 83 条指令 封装 64 引脚 TQFP
PIC18F63J90 PIC18F64J90 PIC18F65J90
DC – 40 MHz
8K 16K 32K
4096 8192 16384
1024 1024 2048
27
4
2
PORBORRESET 指令、堆栈满、堆栈下溢、 MCLR
PWRT OST
WDT

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

特性
工作频率 程序存储器 (字节数) 程序存储器 (指令数) 数据存储器 (字节数) 中断源
I/O 端口 端口 A, B, C, D, E, F, G, H, J LCD 驱动器 (可以驱动的像素数量) 192 48 SEG x 4 个 COM)
定时器 捕捉 / 比较 /PWM 模块 串行通信 MSSP、可寻址的 USART 和增强型 USART 10 位模数转换模块 12 路输入通道
复位 (和延时)
指令集 75 条指令,使能扩展指令集后总共为 83 条指令 封装 80 引脚 TQFP
PIC18F83J90 PIC18F84J90 PIC18F85J90
DC – 40 MHz
8K 16K 32K
4096 8192 16384
1024 1024 2048
27
4
2
PORBORRESET 指令、堆栈满、堆栈下溢、 MCLR
PWRT OST
WDT
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 9
PIC18F85J90 系列

1-1 PIC18F6XJ90 64 引脚)框图

OSC2/CLKO OSC1/CLKI
ENVREG
表指针 <21>
/ 减逻辑
21
地址锁存器
程序存储器
96 KB
数据锁存器
指令总线 <16>
时序 发生
INTRC
振荡器
8 MHz
振荡器
高精度
带隙
参考源
稳压器
VDDCORE/VCAP
20
8
V
表锁存器
ROM 锁存器
译码与
上电延时
定时器
振荡器
起振定时器
看门狗 定时器
BOR
LVD
DD,
VSS
PCLATH
PCLATU
PCH PCL
PCU
程序计数器
31 级堆栈
STKPTR
IR
指令
控制
上电 复位
(3)
MCLR
数据总线 <8>
8
8
状态机 控制信号
数据锁存器
数据存储器
地址锁存器
数据地址 <12>
4
BSR
FSR0 FSR1 FSR2
/
3
BITOP
8
2.0 3.9
KB
12
12
逻辑
地址 译码
8 x 8 乘法器
W
8
8
ALU<8>
4
快速操作
存储区
PRODLPRODH
8
PORTA
(1,2)
RA0:RA7
PORTB
(1)
RB0:RB7
12
PORTC
RC0:RC7
(1)
PORTD
(1)
RD0:RD7
8
PORTE
RE0:RE1,
(1)
RE3:RE7
8
8
8
PORTF
RF1:RF7
(1)
PORTG
(1)
RG0:RG4
10 ADC
MSSP
比较器
LCD
驱动器
CCP1
CCP2
Timer2Timer1 Timer3Timer0
AUSART
EUSART
1: 关于 I/O 端口引脚的说明,请参见表 1-3
2RA6 RA7 在某些振荡器模式下只能用作数字 I/O。更多信息,请参见第 2.0 节 “振荡器配置”。 3: 欠压复位和低压检测功能只有在使能片上稳压器时才能使用。
DS39770A_CN 10 超前信息 2007 Microchip Technology Inc.

1-2 PIC18F8XJ90 80 引脚)框图

PIC18F85J90 系列
OSC2/CLKO
OSC1/CLKI
ENVREG
表指针 <21>
/ 减逻辑
21
地址锁存器
程序存储器
96 KB
数据锁存器
指令总线 <16>
时序 发生
INTRC
振荡器
8 MHz
振荡器
高精度
带隙
参考源
稳压器
20
8
PCLATH
PCLATU
PCU
程序计数器
31 级堆栈
STKPTR
表锁存器
ROM 锁存器
IR
指令
译码与
控制
上电延时
定时器
振荡器
起振定时器
上电 复位
看门狗 定时器
BOR
(3)
LVD
数据总线 <8>
8
PCH PCL
状态机 控制信号
8
数据锁存器
数据存储器
2.0 3.9
KB
地址锁存器
12
PORTA
RA0:RA7
PORTB
RB0:RB7
(1,2)
(1)
数据地址 <12>
BSR
4
FSR0 FSR1 FSR2
/
逻辑
地址 译码
12
4
快速操作
存储区
PORTC
RC0:RC7
(1)
12
PORTD
RD0:RD7
(1)
PORTE
RE0:RE1,
(1)
RE3:RE7
8
PORTF
RF1:RF7
PORTG
RG0:RG4
PORTH
RH0:RH7
(1)
(1)
(1)
3
BITOP
8
8 x 8 乘法器
W
8
8
ALU<8>
8
PRODLPRODH
8
8
8
PORTJ
(1)
VDDCORE/VCAP
CCP1
V
DD,VSS
CCP2
MCLR
Timer2Timer1 Timer3Timer0
AUSART
EUSART
10
ADC
MSSP
比较器
LCD
驱动器
RJ0:RJ7
1: 关于 I/O 端口引脚的说明,请参见表 1-3
2RA6 RA7 在某些振荡器模式下只能用作数字 I/O。更多信息,请参见第 2.0 节 “振荡器配置”。 3: 欠压复位和低压检测功能只有在使能片上稳压器时才能使用。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 11
PIC18F85J90 系列
1-3 PIC18F6XJ90 I/O 引脚说明
引脚名称
引脚号
TQFP
引脚类型缓冲器
类型
说明
MCLR
OSC1/CLKI/RA7
OSC1 CLKI
RA7
OSC2/CLKO/RA6
OSC2
CLKO
RA6
RA0/AN0
RA0 AN0
RA1/AN1/SEG18
RA1 AN1 SEG18
RA2/AN2/V
RA2 AN2 V
RA3/AN3/V
RA3 AN3 V
RA4/T0CKI/SEG14
RA4 T0CKI SEG14
RA5/AN4/SEG15
RA5 AN4 SEG15
RA6
RA7
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
1: 当 CCP2MX 配置位置 1 时,对 CCP2 进行默认分配。
REF-
REF-
REF+
REF+
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (没有 P 二极管接到 V
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
7IST
39
I
CMOS
I
CMOS
I/O
40
O
O
I/O
24
I/OITTL
模拟
23
I/O
I
模拟
O
模拟
22
I/O
I
模拟
I
模拟
21
I/O
I
模拟
I
模拟
28
I/O
ST/OD
I
O
模拟
27
I/O
I
模拟
O
模拟
主清零 (输入)或编程电压 (输入)。此引脚为低电平时, 器件复位。
振荡器晶振或外部时钟输入。
(见相关的 OSC1/CLKI OSC2/CLKO 引脚信息。)
TTL
振荡器晶振或时钟输出。
TTL
PORTA 是双向 I/O 端口。
TTL
TTL
TTL
ST
TTL
振荡器晶振输入。 外部时钟源输入。总是与引脚功能 OSC1 复用。
通用 I/O 引脚。
振荡器晶振输出。在晶振振荡器模式下,该引脚与晶振 或谐振器相连。 在 EC 模式下, OSC2 引脚输出 CLKO 振荡信号,该信 号是 OSC1 引脚上振荡信号的 4 分频信号,频率等于指令 周期的倒数。 通用 I/O 引脚。
数字 I/O。 模拟输入 0
数字 I/O。 模拟输入 1LCD SEG18 输出。
数字 I/O。 模拟输入 2A/D 参考电压 (低电平)输入。
数字 I/O。 模拟输入 3A/D 参考电压 (高电平)输入。
数字 I/O。当配置为输出时为漏极开路。
Timer0 外部时钟输入。 LCD SEG14 输出。
数字 I/O。 模拟输入 4LCD SEG15 输出。
请参见 OSC2/CLKO/RA6 引脚信息。
请参见 OSC1/CLKI/RA7 引脚信息。
DD
DS39770A_CN 12 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列
1-3 PIC18F6XJ90 I/O 引脚说明 (续)
引脚名称
RB0/INT0/SEG30
RB0 INT0 SEG30
RB1/INT1/SEG8
RB1 INT1 SEG8
RB2/INT2/SEG9
RB2 INT2 SEG9
RB3/INT3/SEG10
RB3 INT3 SEG10
RB4/KBI0/SEG11
RB4 KBI0 SEG11
RB5/KBI1/SEG29
RB5 KBI1 SEG29
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 时,对 CCP2 进行默认分配。
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
引脚号
TQFP
48
47
46
45
44
43
42
37
引脚类型缓冲器
类型
I/O
TTL
I
ST
O
模拟
I/O
TTL
I
ST
O
模拟
I/O
TTL
I
ST
O
模拟
I/O
TTL
I
ST
O
模拟
I/O
TTL
I
TTL
O
模拟
I/O
TTL
I
TTL
O
模拟
I/O
TTL
I
TTL
I/O
I/O
I/O
ST
TTL
I
TTL
ST
说明
PORTB 是双向 I/O 端口。 PORTB 在所有输入端都可软件 编程为内部弱上拉。
数字 I/O。 外部中断 0LCD SEG30 输出。
数字 I/O。 外部中断 1LCD SEG8 输出。
数字 I/O。 外部中断 2LCD SEG9 输出。
数字 I/O。 外部中断 3LCD SEG10 输出。
数字 I/O。 电平变化中断引脚。 LCD SEG11 输出。
数字 I/O。 电平变化中断引脚。 LCD SEG29 输出。
数字 I/O。 电平变化中断引脚。 在线调试器和 ICSP™ 编程时钟引脚。
数字 I/O。 电平变化中断引脚。 在线调试器和 ICSP 编程数据引脚。
DD
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 13
PIC18F85J90 系列
1-3 PIC18F6XJ90 I/O 引脚说明 (续)
引脚名称
RC0/T1OSO/T13CKI
RC0 T1OSO T13CKI
RC1/T1OSI/CCP2/SEG32
RC1 T1OSI
(1)
CCP2 SEG32
RC2/CCP1/SEG13
RC2 CCP1 SEG13
RC3/SCK/SCL/SEG17
RC3 SCK SCL SEG17
RC4/SDI/SDA/SEG16
RC4 SDI SDA SEG16
RC5/SDO/SEG12
RC5 SDO SEG12
RC6/TX1/CK1/SEG27
RC6 TX1 CK1 SEG27
RC7/RX1/DT1/SEG28
RC7 RX1 DT1 SEG28
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (没有 P 二极管接到 V
1: 当 CCP2MX 配置位置 1 时,对 CCP2 进行默认分配。
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
引脚号
TQFP
30
29
33
34
35
36
31
32
引脚类型缓冲器
类型
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
O
O
O
O
O
O O
O
O
O
I
ST
ST
I
CMOS
ST
模拟
ST ST
模拟
ST ST ST
模拟
ST
I
ST ST
模拟
ST
模拟
ST
ST
模拟
ST
I
ST ST
模拟
说明
PORTC 是双向 I/O 端口。
数字 I/O
Timer1 振荡器输出。 Timer1/Timer3 外部时钟输入。
数字 I/O Timer1 振荡器输入。 捕捉 2 输入 / 比较 2 输出 /PWM2 输出。 LCD SEG32 输出。
数字 I/O。 捕捉 1 输入 / 比较 1 输出 /PWM1 输出。 LCD SEG13 输出。
数字 I/O
SPI 模式的同步串行时钟输入 / 输出。
2
I
C™ 模式的同步串行时钟输入 / 输出。
LCD SEG17 输出。
数字 I/O SPI 数据输入。
2
I
C 数据 I/O
LCD SEG16 输出。
数字 I/O SPI 数据输出。 LCD SEG12 输出。
数字 I/O EUSART 异步发送。 EUSART 同步时钟 (见相关的 RX1/DT1 引脚信息)。 LCD SEG27 输出。
数字 I/O EUSART 异步接收。 EUSART 同步数据 (见相关的 TX1/CK1 引脚信息)。 LCD SEG28 输出。
DD
DS39770A_CN 14 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列
1-3 PIC18F6XJ90 I/O 引脚说明 (续)
引脚名称
RD0/SEG0
RD0 SEG0
RD1/SEG1
RD1 SEG1
RD2/SEG2
RD2 SEG2
RD3/SEG3
RD3 SEG3
RD4/SEG4
RD4 SEG4
RD5/SEG5
RD5 SEG5
RD6/SEG6
RD6 SEG6
RD7/SEG7
RD7 SEG7
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (没有 P 二极管接到 V
1: 当 CCP2MX 配置位置 1 时,对 CCP2 进行默认分配。
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
引脚号
TQFP
58
55
54
53
52
51
50
49
引脚类型缓冲器
类型
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
说明
PORTD 是双向 I/O 端口。
数字 I/OLCD SEG0 输出。
数字 I/OLCD SEG1 输出。
数字 I/OLCD SEG2 输出。
数字 I/OLCD SEG3 输出。
数字 I/OLCD SEG4 输出。
数字 I/OLCD SEG5 输出。
数字 I/OLCD SEG6 输出。
数字 I/O
LCD SEG7 输出。
DD
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 15
PIC18F85J90 系列
1-3 PIC18F6XJ90 I/O 引脚说明 (续)
引脚名称
RE0/LCDBIAS1
RE0 LCDBIAS1
RE1/LCDBIAS2
RE1 LCDBIAS2
LCDBIAS3 64 I
RE3/COM0
RE3 COM0
RE4/COM1
RE4 COM1
RE5/COM2
RE5 COM2
RE6/COM3
RE6 COM3
RE7/CCP2/SEG31
RE7
(2)
CCP2 SEG31
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (没有 P 二极管接到 V
1: 当 CCP2MX 配置位置 1 时,对 CCP2 进行默认分配。
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
引脚号
TQFP
2
1
63
62
61
60
59
引脚类型缓冲器
类型
I/OIST
模拟
I/OIST
模拟
模拟 LCD BIAS3 输入。
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/O I/O
ST ST
O
模拟
说明
PORTE 是双向 I/O 端口。
数字 I/OLCD BIAS1 输入。
数字 I/OLCD BIAS2 输入。
数字 I/OLCD COM0 输出。
数字 I/OLCD COM1 输出。
数字 I/OLCD COM2 输出。
数字 I/OLCD COM3 输出。
数字 I/O。 捕捉 2 输入 / 比较 2 输出 /PWM 2 输出。
LCD SEG31 输出。
DD
DS39770A_CN 16 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列
1-3 PIC18F6XJ90 I/O 引脚说明 (续)
引脚名称
RF1/AN6/C2OUT/SEG19
RF1 AN6 C2OUT SEG19
RF2/AN7/C1OUT/SEG20
RF2 AN7 C1OUT SEG20
RF3/AN8/SEG21
RF3 AN8 SEG21
RF4/AN9/SEG22
RF4 AN9 SEG22
RF5/AN10/CV
RF5 AN10
REF
CV SEG23
RF6/AN11/SEG24
RF6 AN11 SEG24
RF7/AN5/SS
RF7 AN5 SS SEG25
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
1: 当 CCP2MX 配置位置 1 时,对 CCP2 进行默认分配。
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
REF/SEG23
/SEG25
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/O
I/O
ST
I
模拟
O O
O O
O
O
O O
O
O
O
模拟
ST
I
模拟
模拟
ST
I
模拟 模拟
ST
I
模拟 模拟
ST
I
模拟 模拟 模拟
ST
I
模拟 模拟
ST
模拟
TTL
I
模拟
说明
PORTF 是双向 I/O 端口。
数字 I/O。 模拟输入 6。 比较器 2 的输出。 LCD SEG19 输出。
数字 I/O。 模拟输入 7。 比较器 1 的输出。 LCD SEG20 输出。
数字 I/O。 模拟输入 8LCD SEG21 输出。
数字 I/O。 模拟输入 9LCD SEG22 输出。
数字 I/O。 模拟输入 10。 比较器参考电压输出。 LCD SEG23 输出。
数字 I/O。 模拟输入 11 LCD SEG24 输出。
数字 I/O。 模拟输入 5
SPI 从动选择输入。 LCD SEG25 输出。
DD
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 17
PIC18F85J90 系列
1-3 PIC18F6XJ90 I/O 引脚说明 (续)
引脚名称
RG0/LCDBIAS0
TQFP
3 RG0 LCDBIAS0
引脚号
RG1/TX2/CK2
4 RG1 TX2 CK2
RG2/RX2/DT2/V
LCAP1
5 RG2 RX2 DT2
LCAP1
V
RG3/V
LCAP2
6 RG3 VLCAP2
RG4/SEG26
8 RG4 SEG26
V
SS 9, 25, 41, 56 P
V
DD 26, 38, 57 P
AV
SS 20 P
AVDD 19 P
ENVREG 18 I ST
V
DDCORE/VCAP
10 VDDCORE VCAP
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (没有 P 二极管接到 V
1: 当 CCP2MX 配置位置 1 时,对 CCP2 进行默认分配。
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
引脚类型缓冲器
类型
I/OIST
模拟
I/O
I/O
I/O
I/O
ST
O
ST
ST
I
ST ST
I
模拟
I/OIST
模拟
I/OOST
模拟
P
P
说明
PORTG 是双向 I/O 端口。
数字 I/OLCD BIAS0 输入。
数字 I/O
AUSART 异步发送。 AUSART 同步时钟 (见相关的 RX2/DT2 引脚信息)。
数字 I/O AUSART 异步接收。 AUSART 同步数据 (见相关的 TX2/CK2 引脚信息)。 LCD 电荷泵电容输入。
数字 I/O LCD 电荷泵电容输入。
数字 I/O LCD SEG26 输出。
逻辑和 I/O 引脚的参考地。 逻辑和 I/O 引脚的正电源。 模拟模块的参考地。 模拟模块的正电源。 片上稳压器使能。 内核逻辑电源或外部滤波电容连接。
单片机内核逻辑的正电源 (稳压器禁止)。 外部滤波电容连接 (稳压器使能)。
DD
DS39770A_CN 18 超前信息  2007 Microchip Technology Inc.
1-4 PIC18F8XJ90 I/O 引脚说明
引脚名称
引脚号
TQFP
引脚类型缓冲器
类型
PIC18F85J90 系列
说明
MCLR
OSC1/CLKI/RA7
OSC1 CLKI
RA7
OSC2/CLKO/RA6
OSC2
CLKO
RA6
RA0/AN0
RA0 AN0
RA1/AN1/SEG18
RA1 AN1 SEG18
RA2/AN2/V
RA2 AN2 V
RA3/AN3/V
RA3 AN3 V
RA4/T0CKI/SEG14
RA4 T0CKI SEG14
RA5/AN4/SEG15
RA5 AN4 SEG15
RA6
RA7
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
1: 当 CCP2MX 配置位置 1 时,对 CCP2 进行默认分配。
REF-
REF-
REF+
REF+
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (没有 P 二极管接到 V
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
9IST
49
I
CMOS
I
CMOS
I/O
50
O
O
I/O
30
I/OITTL
29
I/O
I
O
28
I/O
I I
27
I/O
I I
34
I/O
ST/OD
I
O
33
I/O
I
O
主清零 (输入)或编程电压 (输入)。此引脚为低电平时, 器件复位。
振荡器晶振或外部时钟输入。
TTL
振荡器晶振或时钟输出。
TTL
PORTA 是双向 I/O 端口。
模拟
TTL
模拟 模拟
TTL
模拟 模拟
TTL
模拟 模拟
ST
模拟
TTL
模拟 模拟
振荡器晶振输入。 外部时钟源输入。总是与引脚功能 OSC1 复用。(见相关 的 OSC1/CLKI OSC2/CLKO 引脚信息。) 通用 I/O 引脚。
振荡器晶振输出。在晶振振荡器模式下,该引脚与晶振 或谐振器相连。 在 EC 模式下, OSC2 引脚输出 CLKO 振荡信号,该信 号是 OSC1 引脚上振荡信号的 4 分频信号,频率等于指令 周期的倒数。 通用 I/O 引脚。
数字 I/O。 模拟输入 0
数字 I/O。 模拟输入 1LCD SEG18 输出。
数字 I/O。 模拟输入 2A/D 参考电压 (低电平)输入。
数字 I/O。 模拟输入 3A/D 参考电压 (高电平)输入。
数字 I/O。当配置为输出时为漏极开路。
Timer0 外部时钟输入。 LCD SEG14 输出。
数字 I/O。 模拟输入 4LCD SEG15 输出。
请参见 OSC2/CLKO/RA6 引脚信息。
请参见 OSC1/CLKI/RA7 引脚信息。
DD
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 19
PIC18F85J90 系列
1-4 PIC18F8XJ90 I/O 引脚说明 (续)
引脚名称
RB0/INT0/SEG30
RB0 INT0 SEG30
RB1/INT1/SEG8
RB1 INT1 SEG8
RB2/INT2/SEG9
RB2 INT2 SEG9
RB3/INT3/SEG10
RB3 INT3 SEG10
RB4/KBI0/SEG11
RB4 KBI0 SEG11
RB5/KBI1/SEG29
RB5 KBI1 SEG29
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 时,对 CCP2 进行默认分配。
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
引脚号
TQFP
58
57
56
55
54
53
52
47
引脚类型缓冲器
类型
I/O
TTL
I
ST
O
模拟
I/O
TTL
I
ST
O
模拟
I/O
TTL
I
ST
O
模拟
I/O
TTL
I
ST
O
模拟
I/O
TTL
I
TTL
O
模拟
I/O
TTL
I
TTL
O
模拟
I/O
TTL
I
TTL
I/O
I/O
I/O
ST
TTL
I
TTL
ST
说明
PORTB 是双向 I/O 端口。 PORTB 在所有输入端都可软件 编程为内部弱上拉。
数字 I/O。 外部中断 0LCD SEG30 输出。
数字 I/O。 外部中断 1LCD SEG8 输出。
数字 I/O。 外部中断 2LCD SEG9 输出。
数字 I/O。 外部中断 3LCD SEG10 输出。
数字 I/O。 电平变化中断引脚。 LCD SEG11 输出。
数字 I/O。 电平变化中断引脚。 LCD SEG29 输出。
数字 I/O。 电平变化中断引脚。 在线调试器和 ICSP™ 编程时钟引脚。
数字 I/O。 电平变化中断引脚。 在线调试器和 ICSP 编程数据引脚。
DD
DS39770A_CN 20 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列
1-4 PIC18F8XJ90 I/O 引脚说明 (续)
引脚名称
RC0/T1OSO/T13CKI
RC0 T1OSO T13CKI
RC1/T1OSI/CCP2/SEG32
RC1 T1OSI
(1)
CCP2 SEG32
RC2/CCP1/SEG13
RC2 CCP1 SEG13
RC3/SCK/SCL/SEG17
RC3 SCK SCL SEG17
RC4/SDI/SDA/SEG16
RC4 SDI SDA SEG16
RC5/SDO/SEG12
RC5 SDO SEG12
RC6/TX1/CK1/SEG27
RC6 TX1 CK1 SEG27
RC7/RX1/DT1/SEG28
RC7 RX1 DT1 SEG28
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (没有 P 二极管接到 V
1: 当 CCP2MX 配置位置 1 时,对 CCP2 进行默认分配。
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
引脚号
TQFP
36
35
43
44
45
46
37
38
引脚类型缓冲器
类型
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
O
I
ST
ST
I
CMOS
ST
O
模拟
ST ST
O
模拟
ST ST ST
O
模拟
ST
I
ST ST
O
模拟
ST
O
O
模拟
ST
O
ST
O
模拟
ST
I
ST ST
O
模拟
说明
PORTC 是双向 I/O 端口。
数字 I/O
Timer1 振荡器输出。 Timer1/Timer3 外部时钟输入。
数字 I/O Timer1 振荡器输入。 捕捉 2 输入 / 比较 2 输出 /PWM2 输出。 LCD SEG32 输出。
数字 I/O。 捕捉 1 输入 / 比较 1 输出 /PWM1 输出。 LCD SEG13 输出。
数字 I/O
SPI 模式的同步串行时钟输入 / 输出。
2
I
C™ 模式的同步串行时钟输入 / 输出。
LCD SEG17 输出。
数字 I/O SPI 数据输入。
2
I
C 数据 I/O
LCD SEG16 输出。
数字 I/O SPI 数据输出。 LCD SEG12 输出。
数字 I/O EUSART 异步发送。 EUSART 同步时钟 (见相关的 RX1/DT1 引脚信息)。 LCD SEG27 输出。
数字 I/O EUSART 异步接收。 EUSART 同步数据 (见相关的 TX1/CK1 引脚信息)。 LCD SEG28 输出。
DD
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 21
PIC18F85J90 系列
1-4 PIC18F8XJ90 I/O 引脚说明 (续)
引脚名称
RD0/SEG0
RD0 SEG0
RD1/SEG1
RD1 SEG1
RD2/SEG2
RD2 SEG2
RD3/SEG3
RD3 SEG3
RD4/SEG4
RD4 SEG4
RD5/SEG5
RD5 SEG5
RD6/SEG6
RD6 SEG6
RD7/SEG7
RD7 SEG7
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (没有 P 二极管接到 V
1: 当 CCP2MX 配置位置 1 时,对 CCP2 进行默认分配。
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
引脚号
TQFP
72
69
68
67
66
65
64
63
引脚类型缓冲器
类型
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
说明
PORTD 是双向 I/O 端口。
数字 I/OLCD SEG0 输出。
数字 I/OLCD SEG1 输出。
数字 I/OLCD SEG2 输出。
数字 I/OLCD SEG3 输出。
数字 I/OLCD SEG4 输出。
数字 I/OLCD SEG5 输出。
数字 I/OLCD SEG6 输出。
数字 I/O
LCD SEG7 输出。
DD
DS39770A_CN 22 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列
1-4 PIC18F8XJ90 I/O 引脚说明 (续)
引脚名称
RE0/LCDBIAS1
RE0 LCDBIAS1
RE1/LCDBIAS2
RE1 LCDBIAS2
LCDBIAS3 78 I
RE3/COM0
RE3 COM0
RE4/COM1
RE4 COM1
RE5/COM2
RE5 COM2
RE6/COM3
RE6 COM3
RE7/CCP2/SEG31
RE7
(2)
CCP2 SEG31
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (没有 P 二极管接到 V
1: 当 CCP2MX 配置位置 1 时,对 CCP2 进行默认分配。
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
引脚号
TQFP
4
3
77
76
75
74
73
引脚类型缓冲器
类型
I/OIST
模拟
I/OIST
模拟
模拟 LCD BIAS3 输入。
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/O I/O
ST ST
O
模拟
说明
PORTE 是双向 I/O 端口。
数字 I/OLCD BIAS1 输入。
数字 I/OLCD BIAS2 输入。
数字 I/OLCD COM0 输出。
数字 I/OLCD COM1 输出。
数字 I/OLCD COM2 输出。
数字 I/OLCD COM3 输出。
数字 I/O。 捕捉 2 输入 / 比较 2 输出 /PWM 2 输出。
LCD SEG31 输出。
DD
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 23
PIC18F85J90 系列
1-4 PIC18F8XJ90 I/O 引脚说明 (续)
引脚名称
RF1/AN6/C2OUT/SEG19
RF1 AN6 C2OUT SEG19
RF2/AN7/C1OUT/SEG20
RF2 AN7 C1OUT SEG20
RF3/AN8/SEG21
RF3 AN8 SEG21
RF4/AN9/SEG22
RF4 AN9 SEG22
RF5/AN10/CV
RF5 AN10 CV SEG23
RF6/AN11/SEG24
RF6 AN11 SEG24
RF7/AN5/SS
RF7 AN5 SS SEG25
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
1: 当 CCP2MX 配置位置 1 时,对 CCP2 进行默认分配。
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
REF/SEG23
REF
/SEG25
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (没有 P 二极管接到 V
引脚号
TQFP
23
18
17
16
15
14
13
引脚类型缓冲器
类型
I/O
I/O
I/O
I/O
I/O
I/O
I/O
ST
I
模拟
O O
O O
O
O
O O
O
O
O
模拟
ST
I
模拟
模拟
ST
I
模拟 模拟
ST
I
模拟 模拟
ST
I
模拟 模拟 模拟
ST
I
模拟 模拟
ST
模拟
TTL
I
模拟
说明
PORTF 是双向 I/O 端口。
数字 I/O。 模拟输入 6。 比较器 2 的输出。 LCD SEG19 输出。
数字 I/O。 模拟输入 7。 比较器 1 的输出。 LCD SEG20 输出。
数字 I/O。 模拟输入 8LCD SEG21 输出。
数字 I/O。 模拟输入 9LCD SEG22 输出。
数字 I/O。 模拟输入 10。 比较器参考电压输出。 LCD SEG23 输出。
数字 I/O。 模拟输入 11 LCD SEG24 输出。
数字 I/O。 模拟输入 5
SPI 从动选择输入。 LCD SEG25 输出。
DD
DS39770A_CN 24 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列
1-4 PIC18F8XJ90 I/O 引脚说明 (续)
引脚名称
RG0/LCDBIAS0
RG0 LCDBIAS0
RG1/TX2/CK2
RG1 TX2 CK2
RG2/RX2/DT2/V
RG2 RX2 DT2
LCAP1
V
RG3/V
LCAP2
RG3 VLCAP2
RG4/SEG26
RG4 SEG26
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
1: 当 CCP2MX 配置位置 1 时,对 CCP2 进行默认分配。
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
LCAP1
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (没有 P 二极管接到 VDD
引脚号
TQFP
5
6
7
8
10
引脚类型缓冲器
类型
I/OIST
模拟
I/O
I/O
I/O
I/O
I/OIST
I/OOST
ST
O
ST
ST
I
ST ST
I
模拟
模拟
模拟
说明
PORTG 是双向 I/O 端口。
数字 I/OLCD BIAS0 输入。
数字 I/O
AUSART 异步发送。 AUSART 同步时钟 (见相关的 RX2/DT2 引脚信息)。
数字 I/O AUSART 异步接收。 AUSART 同步数据 (见相关的 TX2/CK2 引脚信息)。 LCD 电荷泵电容输入。
数字 I/O LCD 电荷泵电容输入。
数字 I/O LCD SEG26 输出。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 25
PIC18F85J90 系列
1-4 PIC18F8XJ90 I/O 引脚说明 (续)
引脚名称
RH0/SEG47
RH0 SEG47
RH1/SEG46
RH1 SEG46
RH2/SEG45
RH2 SEG45
RH3/SEG44
RH3 SEG44
RH4/SEG40
RH4 SEG40
RH5/SEG41
RH5 SEG41
RH6/SEG42
RH6 SEG42
RH7/SEG43
RH7 SEG43
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (没有 P 二极管接到 V
1: 当 CCP2MX 配置位置 1 时,对 CCP2 进行默认分配。
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
引脚号
TQFP
79
80
1
2
22
21
20
19
引脚类型缓冲器
类型
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
说明
PORTH 是双向 I/O 端口。
数字 I/OLCD SEG47 输出。
数字 I/OLCD SEG46 输出。
数字 I/OLCD SEG45 输出。
数字 I/OLCD SEG44 输出。
数字 I/OLCD SEG40 输出。
数字 I/OLCD SEG41 输出。
数字 I/OLCD SEG42 输出。
数字 I/O
LCD SEG43 输出。
DD
DS39770A_CN 26 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列
1-4 PIC18F8XJ90 I/O 引脚说明 (续)
引脚名称
RJ0 62 I/O ST
RJ1/SEG33
RJ1 SEG33
RJ2/SEG34
RJ2 SEG34
RJ3/SEG35
RJ3 SEG35
RJ4/SEG39
RJ4 SEG39
RJ5/SEG38
RJ5 SEG38
RJ6/SEG37
RJ6 SEG37
RJ7/SEG36
RJ7 SEG36
V
SS 11, 31, 51, 70 P
V
DD 32, 48, 71 P
AVSS 26 P
AV
DD 25 P
ENVREG 24 I ST
V
DDCORE/VCAP
VDDCORE VCAP
图注: TTL = TTL 兼容输入 CMOS = CMOS 兼容输入或输出
ST = CMOS 电平的施密特触发器输入 Analog = 模拟输入 I= 输入 O= 输出 P= 电源 OD = 漏极开路 (没有 P 二极管接到 V
1: 当 CCP2MX 配置位置 1 时,对 CCP2 进行默认分配。
2: 当 CCP2MX 配置位清零时,对 CCP2 进行其他分配。
引脚号
TQFP
61
60
59
39
40
41
42
12
引脚类型缓冲器
类型
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
I/OOST
模拟
P
P
说明
PORTJ 是双向 I/O 端口。
数字 I/O
数字 I/OLCD SEG33 输出。
数字 I/OLCD SEG34 输出。
数字 I/OLCD SEG35 输出。
数字 I/OLCD SEG39 输出。
数字 I/OLCD SEG38 输出。
数字 I/OLCD SEG37 输出。
数字 I/O
LCD SEG36 输出。 逻辑和 I/O 引脚的参考地。 逻辑和 I/O 引脚的正电源。 模拟模块的参考地。 模拟模块的正电源。 片上稳压器使能。 内核逻辑电源或外部滤波电容连接。
单片机内核逻辑的正电源 (稳压器禁止)。 外部滤波电容连接 (稳压器使能)。
DD
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 27
PIC18F85J90 系列
注:
DS39770A_CN 28 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列

2.0 振荡器配置

2.1 振荡器类型

PIC18F85J90 系列器件可以在 6种不同的振荡器模式下 工作:
1. HS 高速晶振 / 谐振器
2. HSPLL 带软件 PLL 控制的高速晶振 / 谐振器
3. EC 带 F
4. ECPLL 带软件 PLL 控制的外部时钟
5. INTOSC 内部快速 RC 8MHz)振荡器
6. INTRC 31 kHz 内部振荡器

2-1 PIC18F85J90 系列时钟框图

OSC2
OSC1
T1OSO
T1OSI
OSC/4 输出的外部时钟
主振荡器
休眠
辅助振荡器
T1OSCEN
使能振荡器
OSCCON<6:4>
内部
振荡器
模块
8 MHz
时钟源
INTRC
8 MHz
INTOSC
31 kHz(INTRC)
后分频器
用户可以通过编程 FOSC2:FOSC0 配置位来选择其中 5 种模式。第 6 种模式(INTRC)可在软件控制下使用; 它也可被配置为器件复位时的默认模式。
此外,PIC18F85J90系列器件可以在软件控制下或在某 些条件下自动在不同时钟源之间进行切换。通过实时管 理器件时钟速度而无需复位应用,进一步节省了功耗。
2-1 显示了 PIC18F85J90 系列器件的时钟源。
PIC18F85J90 系列
4 x PLL
OSCCON<6:4>
8 MHz
111
4 MHz
110
2 MHz
101
1 MHz
31 kHz
100 011 010 001 000
OSCTUNE<7>
500 kHz
250 kHz
125 kHz
1 0
MUX
HS EC
HSPLL ECPLL
T1OSC
内部振荡器
FOSC2:FOSC0
(供其他模块使用)
MUX
时钟 控制
时钟源选项
WDTPWRT、FSCM 和双速启动
IDLEN
OSCCON<1:0>
外设
CPU
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 29
PIC18F85J90 系列

2.2 控制寄存器

OSCCON 寄存器 (寄存器 2-1)控制器件时钟操作的 主要方面。它选择要使用的振荡器类型、要调用的功耗 管理模式以及 INTOSC 源的输出频率。它还提供振荡器 的状态。
OSCTUNE 寄存器 (寄存器 2-2)控制内部振荡器模块 的调节和操作。它还实现了 PLLEN 位,该位用于控制内 部振荡器模式下锁相环 (PLL)的操作 (见第 2.4.3
PLL 倍频器”)。

寄存器 2-1 OSCCON:振荡器控制寄存器

(3)
(1)
R-0 R/W-0 R/W-0
R/W-0 R/W-1 R/W-0 R/W-0 R
IDLEN IRCF2 IRCF1 IRCF0 OSTS IOFS SCS1 SCS0
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = POR 1 = 10 = 清零 x = 未知
bit 7
bit 6-4
bit 3
bit 2
bit 1-0
IDLEN:空闲使能位
1 = 执行 SLEEP 指令后器件进入空闲模式 0 = 执行 SLEEP 指令后器件进入休眠模式
IRCF2:IRCF0INTOSC 源频率选择位
111 = 8MHz(由 INTOSC 直接驱动时钟) 110 = 4MHz
101 = 2MHz 100 = 1MHz(默认值)
011 = 500kHz 010 = 250kHz 001 = 125kHz
000 = 31 kHz (来自 INTOSC/256 INTRC
OSTS:振荡器起振延时状态位
1 = 振荡器起振定时器 (OST)延时已结束;主振荡器正在运行 0 = 振荡器起振定时器 (OST)延时正在进行;主振荡器尚未就绪
IOFSINTOSC 频率稳定位
1 = 快速 RC 振荡器频率稳定 0 = 快速 RC 振荡器频率不稳定
SCS1:SCS0:系统时钟选择位
11 = 内部振荡器模块 10 = 主振荡器 01 = Timer1 振荡器
FOSC2 = 1 时:
00 = 主振荡器
FOSC2 = 0 时:
00 = 内部振荡器
(1)
(4)
(2)
1: 复位状态取决于 IESO 配置位的状态。
2: 如果由内部振荡器提供器件时钟,修改这些位将导致立即生效的时钟频率切换。 3: 时钟源由 INTSRC 位(OSCTUNE<7>)选择,请参见上文。 4: 修改这些位将导致立即生效的时钟源切换。
DS39770A_CN 30 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列

寄存器 2-2 OSCTUNE:振荡器调节寄存器

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
INTSRC PLLEN
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = POR 1 = 10 = 清零 x = 未知
(1)
TUN5 TUN4 TUN3 TUN2 TUN1 TUN0
bit 7
bit 6
bit 5-0
1: 仅在 ECPLL HSPLL 振荡器配置中可用;其他情况下,此位不可用,并且读为 0

2.3 时钟源与振荡器切换

基本上,PIC18F85J90系列器件都有3种独立的时钟源
主振荡器
辅助振荡器
内部振荡器
主振荡器可认为是主要的器件振荡器。这些是指与 OSC1 OSC2 引脚连接的任何外部振荡器,包括外部 晶振和谐振器模式以及外部时钟模式。在某些情况下, 内部振荡器模块也可认为是主振荡器。特定的模式由 FOSC 配置位定义。这些模式的详细信息将在第 2.4
“外部振荡器模式”中进行介绍。
辅助振荡器是指那些不与 OSC1 OSC2 引脚连接的外 部时钟源。即使在控制器处于功耗管理模式时,这些时 钟源仍可继续工作。 PIC18F85J90 系列器件将 Timer1 振荡器作为辅助振荡器源。此振荡器(在所有功耗管理 模式中)通常是实时时钟等功能的时基。将在第 11.3
Timer1 振荡器”中详细讨论 Timer1 振荡器。
INTSRC 内部振荡器低频源选择位
1 = 来自 8MHz INTOSC源的 31.25 kHz 器件时钟 (使能 256 分频) 0 = 来自 INTRC 31 kHz 振荡器的 31 kHz 器件时钟
PLLEN:倍频器 PLL 使能位
1 = 使能 PLL 0 = 禁止 PLL
TUN5:TUN0:快速 RC 振荡器 (INTOSC)频率调节位
011111 = 最高频率
000001 000000 = 中心频率。快速 RC 振荡器运行在已校准的频率上。
111111
100000 = 最低频率
(1)
除了在某些情况下作为主时钟源之外,内部振荡器还可 以作为功耗管理模式的时钟源。 INTRC 源也可作为几 种特殊功能部件 (例如 WDT 和故障保护时钟监视器) 的时钟源。在第 2.5 节 “内部振荡器模块”中对内部振 荡器模块进行了更详细的讨论。
PIC18F85J90 系列包含了允许器件时钟源从主振荡器
(由器件配置选择)切换到其他时钟源的功能。当使能
备用时钟源时,可以使用多种功耗管理工作模式。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 31
PIC18F85J90 系列

2.3.1 时钟源选择

系统时钟选择位 SCS1:SCS0 OSCCON<1:0>)用于 选择时钟源。可用的时钟源包括主时钟(由 FOSC1:FOSC0 配置位定义)、辅助时钟 (Timer1 荡器)和内部振荡器。当写入一个或多个位之后,接着 是一段很短的时钟转换间隔,然后时钟源会改变。
OSTS OSCCON<3>)和 T1RUN T1CON<6>)位 指出当前提供器件时钟的是哪一个时钟源。OSTS 位置 1 表明振荡器起振定时器 (OST)已超时且主时钟在主 时钟模式下提供器件时钟。T1RUN 位置 1 表明 Timer1 振荡器正在辅助时钟模式下提供器件时钟。在功耗管理 模式下,任何时候这些位中只有一个会置 1。如果这些 位都没有置 1,则表示当前时钟源是 INTRC,或内部振 荡器刚刚起振且尚未稳定。
IDLEN 位决定当执行 SLEEP 指令时器件是进入休眠模 式还是某个空闲模式。
3.0 节 “功耗管理模式”更详细地讨论了 OSCCON 寄存器中标志位和控制位的使用。
1: 要选择辅助时钟源,必须使能 Timer1 振荡
器。通过 将 Timer1 控制寄存器中的 T1OSCEN 位(T1CON<3>)置 1,可以 使能 Timer1 振荡器。如果未使能 Timer1 振荡器,则在执行 SLEEP 指令时选择辅助 时钟源的任何尝试都会被忽略。
2: 建议在Timer1振荡器稳定工作之后再执行
SLEEP指令,否则当Timer1振荡器起振时 可能会发生很长的延时。
2.3.1.1 系统时钟选择和 FOSC2 配置位
在所有形式的复位中,SCS 位都会被清零。在器件的默 认配置中,这意味着 FOSC1:FOSC0 定义的主振荡器
(也就是 HS EC 模式的一种)用作器件复位时的主
时钟源。
复位时的默认时钟配置可以随着 FOSC2 配置位的改变而 改变。该位决定在随后的器件复位时是外部还是内部振 荡器将作为默认的时钟源。此外,它还会影响
SCS1:SCS0 在其复位状态时 (= 00)时钟源的选择。当 FOSC2 = 1(默认)时,不管何时 SCS1:SCS0 = 00,都
选择由 FOSC1:FOSC0 定义的振荡器源。当 FOSC2 = 0 时,不管何时 SCS1:SCS2 = 00,都选择内部振荡器模 块。
在内部振荡器模块作为复位时默认时钟的情况下,快速
RC 振荡器 (INTOSC)将被用作器件时钟源。它将从 1MHz开始起振,这是对应于 IRCF2:IRCF0 位复位值
100)的后分频器选项。
不管 FOSC2 的设置如何,INTRC 总是会在器件上电时 被使能。它将作为时钟源直到器件从存储器中装入了它 的配置值。此时 FOSC 配置位被读取并选择了振荡器的 工作模式。
注意主时钟或内部振荡器在任何时刻下都会有两种可能 的 SCS1:SCS0 设置选项,取决于 FOSC2 的值。

2.3.2 振荡器转换

PIC18F85J90 系列器件包含在时钟源切换时防止时钟
产生 “毛刺”的电路。在切换时钟时,系统时钟会有短 暂的停顿。该停顿的时间长度是旧时钟源的两个周期加 上新时钟源的三到四个周期的和。此公式假设新时钟源 是稳定的。
3.1.2 节“进入功耗管理模式”详细讨论了时钟转换。
DS39770A_CN 32 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列

2.4 外部振荡器模式

2.4.1 晶振 / 陶瓷谐振器 (HS 模式)

HS HSPLL 振荡器模式下,晶振或陶瓷谐振器与 OSC1 OSC2 引脚相连来产生振荡信号。图 2-2 显示 了引脚连接方式。
振荡器的设计要求使用平行切割的晶体。
注: 使用顺序切割的晶体,可能会使振荡器产
生的频率超出晶体制造厂商所给的参数范 围。
2-1 陶瓷谐振器的电容选择
使用的典型电容值:
模式 频率
HS 8.0 MHz
16.0 MHz
上述电容值仅供设计参考。
要得到理想的振荡器工作状况,可能需要不同的电容 值。用户应当在设计的 V 的性能。请参见以下应用笔记以获取振荡器具体信息:
,“
AN588
Design Guide
PICmicro® Microcontroller Oscillator
AN826,“Crystal Oscillator Basics and Crystal
Selection for rfPIC® and PICmicro® Devices
AN849,“Basic PICmicro® Oscillator Design
AN943,“Practical PICmicro® Oscillator
Analysis and Design
AN949,“Making Your Oscillator Work
更多信息,请参见表 2-2 下方的 “注”。
OSC1 OSC2
27 pF 22 pF
DD 和温度条件下测试振荡器
27 pF 22 pF
2-2 晶振的电容选择
振荡器
类型
晶振 频率
HS 4 MHz 27 pF 27 pF
8 MHz 22 pF 22 pF
20 MHz 15 pF 15 pF
上述电容值仅供设计参考。
要得到理想的振荡器工作状况,可能需要不同的电容 值。用户应当在设计的 V 的性能。
请参见表 2-1 中列出的Microchip 应用笔记以获取有关 振荡器设计的相关信息。更多信息,请参见本表下方 的 “注”。
1: 电容值越大,振荡器的稳定性越高,但同
时起振时间也越长。
2: 因为每种谐振器 / 晶振都有其自身特性,
用户应当向谐振器 / 晶振制造厂商询问外 部元件的适当值。
3: 可能需要使用电阻 Rs 以避免对低驱动规
格的晶体造成过驱动。
4: 请始终在设计的 V
荡器性能。
已测试的典型电容值:
C1 C2
DD 和温度条件下测试振荡器
DD 和温度范围下验证振
2-2:晶/ 陶瓷谐振器工作原理
HS HSPLL 配置)
(1)
C1
C2
(1)
XTAL
RS
OSC1
OSC2
(2)
(3)
RF
PIC18F85J90
休眠
至 内部 逻辑
1: 关于 C1 C2 的初始值,请参见表 2-1和表 2-2
2: 对于AT 条形切割的晶体可能会需要一个串联电
S)。
阻(R
F 的值随选定的振荡器模式变化。
3R
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 33
PIC18F85J90 系列

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

EC ECPLL 振荡器模式要求 OSC1 引脚与一个外部
时钟源相连。在上电复位后或从休眠模式退出后,不需 要振荡器起振时间。
EC 振荡器模式下,由 OSC2 引脚输出振荡器频率的 4 分频信号。此信号可用于测试或同步其他逻辑。图 2-3 显 示了 EC 振荡器模式的引脚连接方式。
2-3 外部时钟输入工作原理
EC 配置)
来自外部 系统的时钟
OSC/4
F
RA6
如图 2-4 所示,在 HS 模式下, OSC1 引脚也可以连接 外部时钟源。在此配置中,OSC2 上无法得到 4 分频输 出信号。
OSC1/CLKI
PIC18F85J90
OSC2/CLKO
2-4 外部时钟输入工作原理
HS 振荡器配置)

2.4.3 PLL 倍频器

如果用户希望使用低频晶振电路或通过晶振将器件频率 调节至其最高额定频率,可以选择使用锁相环 (PLL) 电路。对于担心高频晶振引起 EMI 或需要内部振荡器提 供高速时钟的用户而言,这样做可能有用。基于这些原 因,可以使用 HSPLL ECPLL 模式。
HSPLL ECPLL 模式可以以外部振荡源频率的 4倍运行器 件,从而最高频率可达 40 MHz。通过将 FOSC2:FOSC0 配 置位 (CONFIG2L<2:0>)编程为 110 (用于 ECPLL)或 100(用于HSPLL),可以使能PLL。此外,还必须将 PLLEN 位(OSCTUNE<6>)置 1。清零 PLLEN 会禁止 PLL,与所 选的振荡器配置无关。它还允许用软件更灵活地控制应用 的时钟速度。
2-5 PLL 框图
HSPLL ECPLL(CONFIG2L)
PLL 使能(OSCTUNE)
OSC2
OSC1
HS EC
模式
IN
F FOUT
相位
比较器
环路
滤波器
来自外部 系统的时钟
开路
OSC1
OSC2
PIC18F85J90
HS 模式)
÷4
VCO
系统时钟
MUX
DS39770A_CN 34 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列

2.5 内部振荡器模块

PIC18F85J90 系列器件含有可产生两种不同时钟信号的 内部振荡器模块。这两种信号均可充当单片机的时钟 源,从而避免在 OSC1 / OSC2 引脚上使用外部振 荡电路。
主输出是快速 RC 振荡器或 INTOSC,一个 8MHz的时 钟源,可以用于直接驱动器件时钟。它还可以驱动一个 后分频器,该分频器可提供从 31 kHz 4MHz的时钟频 率。当选择了 125 kHz 8MHz的时钟频率时,就会使INTOSC。当 选 择 了 31 kHz 的时钟频率时,根据 INTSRC 位(OSCTUNE<7>)的设置,还能使能 INTOSC 输出。
另一个时钟源是内部 RC 振荡器 (INTRC),它提供了 标称值为 31 kHz 的输出。如果选择 INTRC 作为器件的 时钟源,它就会被使能。当使能以下任一功能时,也将 自动使能 INTRC
上电延时定时器
故障保护时钟监视器
看门狗定时器
双速启动
22.0 节“CPU 的特殊性能”将详细讨论以上功能。
通过配置 OSCCON 寄存器的 IRCF 位,可以选择时钟 源频率(INTOSC 直接频率、INTOSC 后分频器频率或
INTRC 直接频率)。器件复位时的默认频率为 1MHz

2.5.1 OSC1 OSC2 引脚配置

不管何时将内部振荡器配置为默认的时钟源(FOSC2 = 0), OSC1 OSC2 引脚都会被自动重新配置为端口引脚 RA6
RA7。在此模式下,它们用作通用数字 I/O。这些引脚上 的所有振荡器功能被禁止。

2.5.2 内部振荡器输出频率和调节

出厂时已校准了内部振荡器模块使之能够产生 8MHzINTOSC 输出频率。可以通过写 OSCTUNE 寄存器
(寄存器 2-2)中 的 TUN5:TUN0(OSCTUNE<5:0>),
在用户应用中进行调整。
当修改了 OSCTUNE 寄存器后,INTOSC 的频率将变为 新的频率。振荡器会在 1ms 内稳定下来。在此变化期 间,代码会继续执行。不会有任何迹象表明时钟频率发 生了改变。
INTRC 振荡器的工作独立于 INTOSC 源。电压和温度 变化导致的 INTOSC 变化并不一定会使 INTRC 变化, 反之亦然。 INTRC 的频率不受 OSCTUNE 的影响。

2.5.3 INTOSC 频率漂移

INTOSC频率可能会随着 VDD 电压或温度的改变而发生
漂移,这一点可能会以各种方式影响控制器的运行。通 过修改 OSCTUNE 寄存器的值可以调节 INTOSC 的频 率。这不会对 INTRC 时钟源的频率造成影响。
调节 INTOSC 需要了解何时调节、调节的方向以及在某 些情况下的调整量。这里给出了三种补偿技术。
2.5.3.1 EUSART 进行补偿
EUSART 开始产生帧错误,或者在异步模式下接收 数据有错误时可能需要进行调节。帧错误表示器件时钟 的频率太高。要对此进行调整,可以减小 OSCTUNE 中 的值来降低时钟频率。另一方面,数据中有错误可能表 明时钟速度太低。要进行补偿,可以增大 OSCTUNE 中 的值来提高时钟频率。
2.5.3.2 用定时器进行补偿
此技术是将器件时钟的速度与某一个参考时钟进行比 较。可能要用到两个定时器;一个由外设时钟提供时钟 源,而另一个由一个固定的参考源(如 Timer1 振荡器) 提供时钟源。
两个定时器都被清零,但由参考源提供时钟信号的定时 器产生中断。当中断发生时,使用内部时钟源的定时器 值被读取且两个定时器均被清零。如果使用内部时钟源 的定时器的值比期望值大很多,则表示内部振荡器模块 运行过快。要对此进行调整,需减小 OSCTUNE 寄存器 中的值。
2.5.3.3 在捕捉模式下用 CCP 模块进行补偿
CCP 模块可以使用由内部振荡器模块提供时钟信号的
独立运行的 Timer1 (或 Timer3)和已知周期的外部事 件 (即交流电源频率)。在 CCPRxH:CCPRxL 寄存器 中捕捉并记录第一个事件的时间以备以后使用。当第二 个事件导致捕捉时,要用第二个事件的时间减去第一个 事件的时间。由于外部事件的周期是已知的,因此可以 计算事件之间的时间差。
如果测得的时间比计算得到的时间大很多,则表示内部 振荡器模块运行过快。要进行补偿,需减小 OSCTUNE 寄存器中的值。如果测得的时间比计算得到的时间小很 多,则表示内部振荡器模块运行过慢。要进行补偿,需 增大 OSCTUNE 寄存器中的值。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 35
PIC18F85J90 系列

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

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

2.7 上电延时

由两个定时器控制上电延时,这样大多数应用都无需外 接复位电路。上电延时可以确保在器件电源稳定(常规 环境下)和主时钟稳定工作之前器件保持在复位状态。 关于上电延时的更多信息,请参见第 4.5 节 “上电延时 定时器 (PWRT)”。
第一个定时器是上电延时定时器 (PWRT),在上电时 它提供了固定的延迟时间(表 25-10 中的参数 33)。它 总是使能的。
第二个定时器是振荡器起振定时器 (OST),用于在晶 振稳定前使芯片保持在复位状态 (HS 模式)。 OST 在 计数 1024 个振荡周期后允许振荡器为器件提供时钟。
POR 之后有一个 T 38),在此延时期间控制器为执行指令做准备。
CSD 间隔的延时(表 25-10 中的参数

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

振荡器模式 OSC1 引脚 OSC2 引脚
EC ECPLL 悬空,由外部时钟驱动 处于逻辑低电平 (时钟 /4 输出) HS HSPLL 反馈反相器被禁止,处于静止电平 反馈反相器被禁止,处于静止电平
INTOSC
注: 关于由休眠和 MCLR
I/O 引脚 RA6,方向由 TRISA<6> 控制 I/O 引脚 RA7,方向由 TRISA<7> 控制
复位引起的延时,请参见第 4.0 节 “复位”中的表 4-2
DS39770A_CN 36 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列

3.0 功耗管理模式

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

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
IDLEN<7>
2: IDLEN 反映它在执行 SLEEP 指令时的值。
OSCCON 模块时钟
(1)
SCS1:SCS0<1:0> CPU
0 N/A
提供时钟 提供时钟 主时钟——HSECHSPLL ECPLL
提供时钟 提供时钟 辅助时钟——Timer1 振荡器 提供时钟 提供时钟 内部振荡器
外设
可用时钟和振荡器源
关闭 关闭 无——所有时钟被禁止
这是正常的全功耗执行模式
关闭 提供时钟 主时钟——HSECHSPLL ECPLL 关闭 提供时钟 辅助时钟——Timer1 振荡器 关闭 提供时钟 内部振荡器
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 37
PIC18F85J90 系列

3.1.3 时钟转换和状态指示

在两个时钟源之间进行转换所需的时间长度是旧时钟源 的两个周期与新时钟源的三到四个周期的和。此公式假 设新时钟源是稳定的。
以下两位用于指明当前的时钟源及其状态:OSTS
OSCCON<3>)和 T1RUN T1CON<6>)。一般来
说,在一个给定的功耗管理模式中,这两个位中只有一 个位会置 1。当 OSTS 位置 1 时,表明由主时钟提供器 件时钟。当 T1RUN 位置 1 时,表明由 Timer1 振荡器提 供时钟源。如果这些位均不置 1,则 由 INTRC 为器件提 供时钟信号。
注: 执行 SLEEP 指令并不一定会将器件置于休
眠模式。它只是作为触发条件,让器件进 入休眠模式或一种空闲模式,具体何种模 式由 IDLEN 位的设置决定。

3.1.4 多条 SLEEP 命令

使用 SLEEP指令调用功耗管理模式时,具体进入何种模 式在该指令执行那一刻由 IDLEN位的设置决定。如果执 行了另一条 SLEEP 指令,器件将进入由此时 IDLEN 位 指定的功耗管理模式。如果 IDLEN 位已更改,器件将进 入由新的设置指定的新的功耗管理模式。

3.2 运行模式

在运行模式中,内核和外设的时钟都是激活的。这些运 行模式之间的区别就在于时钟源的不同。

3.2.1 PRI_RUN 模式

PRI_RUN 模式是单片机的正常全功耗执行模式。除非
使能了双速启动 (详细信息,请参见第 22.4 节“双速 启动”),该模式也是器件复位后的默认模式。在此模式 下, OSTS 位置 1 (见第 2.2 节 “控制寄存器”)。

3.2.2 SEC_RUN 模式

SEC_RUN 模式与其他 PIC18 器件提供的“时钟切换”
功能兼容。在此模式下,CPU 和外设将 Timer1 振荡器 作为时钟源。这允许用户在使用高精度时钟源的情况下 仍可获得较低的功耗。
通过将 SCS1:SCS0 位置为 01 进入 SEC_RUN 模式。 器件时钟源被切换到 Timer1 振荡器(见图 3-1), 主 振 荡器被关闭, T1RUN 位(T1CON<6>)被置 1 并且
OSTS 位被清零。
DS39770A_CN 38 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列
注: 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
时钟转换
Q4Q3Q2 Q1 Q3Q2
n-1
n
PC + 2PC
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
(1)
PC
(1)
TPLL
OSTS 位置 1
12 n-1n
时钟 转换
PC + 2
PC + 4
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 39
PIC18F85J90 系列

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
Q1
INTRC
OSC1
PLL 时钟
输出
CPU 时钟
外设 时钟
程序
计数器
SCS1:SCS0 位改变
1TOST = 1024 TOSC ; TPLL = 2 ms (近似值)。这些时间间隔未按比例绘制。
TOST
Q2
(1)
PC
Q3
TPLL
OSTS 位置 1
Q4
(1)
12 n-1n
时钟 转换
PC + 2
Q2
Q3 Q4
Q1
PC + 4
Q2
Q3
DS39770A_CN 40 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列

3.3 休眠模式

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

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

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

3.4 空闲模式

空闲模式允许在外设继续工作的同时有选择地关闭单片 机的 CPU。选择特定的空闲模式允许用户进一步管理功 耗。
如果在执行 SLEEP 指令时,IDLEN 位被置为 1,外设 将 使用由 SCS1:SCS0 位选择的时钟源,而 CPU 没有时钟 源。时钟源状态位不受影响。将IDLEN1并执行SLEEP 指令可以从给定的运行模式快速切换到相应的空闲模 式。
如果选择了 WDTINTRC 时钟源将继续工作。如果使 能了 Timer1 振荡器,它也将继续运行。
由于 CPU 没有执行指令,器件只能通过中断、 WDT 超 时或复位从空闲模式退出。当发生唤醒事件时, CPU 会 在其准备好执行代码前延时一个 T 的参数 38)。当 CPU 开始执行代码时,它将沿用当前空 闲模式所使用的时钟源。例如,当从 RC_IDLE 模式唤醒 时,将使用内部振荡器模块为 CPU 和外设提供时钟(即 RC_RUN 模式)。这种唤醒不会影响 IDLEN SCS 位。
当处于任何空闲模式或休眠模式中时, WDT 超时会导 致 WDT 唤醒并进入当前由 SCS1:SCS0 位指定的运行 模式。
PC + 2PC
CSD 间隔(表 25-10 中

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

Q1 Q2 Q3 Q4 Q1 Q2
OSC1
(1)
PLL 时钟
输出
CPU 时钟
外设 时钟
程序
计数器
唤醒事件
1T
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 41
OST = 1024 TOSC ; TPLL = 2 ms (近似值)。这些时间间隔未按比例绘制。
TOST
(1)
TPLL
PC
OSTS 位置 1
Q3 Q4 Q1 Q2
PC + 2
Q3 Q4
Q1 Q2 Q3 Q4
PC + 6PC + 4
PIC18F85J90 系列

3.4.1 PRI_IDLE 模式

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

3.4.2 SEC_IDLE 模式

SEC_IDLE 模式下, CPU 被禁止,但外设继续将 Timer1 振荡器作为时钟源。可以通过将 IDLEN 位置 1
并执行 SLEEP 指令从 SEC_RUN 模式进入此模式。如 果器件处于另一种运行模式,首先将 IDLEN 位置 1,然 后将 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
OSC1
CPU 时钟
外设 时钟
程序
计数器
PC PC + 2
3-8 从空闲模式唤醒进入运行模式的转换时序
Q1 Q3 Q4
OSC1
CPU 时钟
外设 时钟
程序
计数器
唤醒事件
TCSD
PC
Q2
DS39770A_CN 42 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列

3.4.3 RC_IDLE 模式

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

3.5 退出空闲和休眠模式

由中断、复位或 WDT 超时触发从休眠模式或任何空闲 模式的退出。本节将讨论从功耗管理模式退出的触发方 式。在每种功耗管理模式章节中我们已经讨论过其时钟 源子系统的作用 (见第 3.2 节 “运行模式”、第 3.3
“休眠模式”和第 3.4 节 “空闲模式”)。

3.5.1 通过中断退出

任何可用的中断源都可导致器件从空闲模式或休眠模式 退出到运行模式。要使能此功能,必须通过将对应 INTCON PIE 寄存器中的中断源允许位置 1 来允许中 断源。当相应的中断标志位置 1 时,触发退出操作。
当使用中断从空闲或休眠模式退出时,如果 GIE/GIEH 位(INTCON<7>)置 1,程序就会跳转到中断向量处 执行代码。否则代码就会顺序执行 (见第 8.0 节“中 断”)。
唤醒事件之后需要一个固定的 T 才会退出休眠和空闲模式。CPU需要此延时来准备执行 代码。在延时后的第一个时钟周期重新开始执行指令。
CSD 间隔的延时,器件

3.5.2 通过 WDT 超时退出

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

3.5.3 通过复位退出

通过复位退出空闲或休眠模式会自动强制器件从
INTRC 运行。

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

从某些功耗管理模式退出完全不需要 OST 延时。有以 下两种情形:
主时钟源不停止的 PRI_IDLE 模式
主时钟源为 EC ECPLL 模式
在这些情况下,主时钟源不需要振荡器起振延时,因为 它已经在运行(PRI_IDLE),或者它本来就不需要振荡 器起振延时(EC)。但是,当器件退出休眠和空闲模式 时,在唤醒事件之后仍然需要一个固定的 T 延时,以便让 CPU 准备好执行代码。在延时后的第一 个时钟周期重新开始执行指令。
CSD 间隔的
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 43
PIC18F85J90 系列
注:
DS39770A_CN 44 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列

4.0 复位

PIC18F85J90 系列器件有以下几种不同的复位方式:
a) 上电复位 (POR b) 正常工作状态下的 MCLR c) 功耗管理模式下的 MCLR d) 看门狗定时器 (WDT)复位 (执行程序期间) e) 欠压复位 (BOR fRESET 指令 g) 堆栈满复位 h) 堆栈下溢复位
本节将讨论由 MCLR
POR BOR 产生的复位,并 涉及各种起振定时器的工作方式。堆栈复位事件将在 第 5.1.4.4 节 “堆栈满和下溢复位”中讨论。 WDT 复 位将在第 22.0 节“CPU 的特殊性能”中讨论。
4-1 给出了片上复位电路的简化框图。

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

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

4.1 RCON 寄存器

通过 RCON 寄存器 (寄存器 4-1)跟踪器件复位事件。 该寄存器的低5位表明是否已经发生了特定的复位事件。 在大多数情况下,只能通过事件将这些位置 1,而且必须 在事件发生后由应用程序将它们清零。需要读取所有这 些标志位来确定刚发生的复位的类型。在第 4.6 节“寄 存器的复位状态”中对此进行了更详细的说明。
RCON 寄存器还有设置中断优先级的控制位(IPEN)。 在第 8.0 节 “中断”中讨论了中断优先级。
MCLR
VDD
1ENVREG 引脚必须连接到高电平以使能欠压复位。当电源电压不能满足器件供电条件时,片上稳压器将产生欠压复
位。
( )_IDLE
休眠
WDT
V
DD 上升
沿检测
复位
PWRT
32 µs
INTRC
超时
欠压
(1)
POR 脉冲
PWRT
11 位脉动计数器
65.5 ms
S
Chip_Reset
R
Q
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 45
PIC18F85J90 系列

寄存器 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
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = POR 1 = 10 = 清零 x = 未知
—RITO PD POR BOR
bit 7
bit 6-5
bit 4
bit 3
bit 2
bit 1
bit 0
1: 建议在检测到上电复位后,将 POR 位置 1,以便继续检测后续的上电复位。
IPEN:中断优先级使能位
1 = 使能中断优先级 0 = 禁止中断优先级 (PIC16XXXX 兼容模式)
未用:读为 0
RI
RESET 指令标志位
1 = 未执行 RESET 指令 (只能由固件置 1 0 = 已执行了 RESET 指令,导致器件复位 (必须在发生复位后由软件置 1
TO
:看门狗超时标志位
1 = 通过上电、 CLRWDT 指令或 SLEEP 指令置 1 0 = 发生了 WDT 超时溢出
PD:掉电检测标志位
1 = 通过上电或 CLRWDT 指令置 1 0 = 通过执行 SLEEP 指令置 1
:上电复位状态位
POR
1 = 未发生上电复位 (只能由固件置 1 0 = 已发生上电复位 (必须在发生上电复位后由软件置 1
BOR:欠压复位状态位
1 = 未发生欠压复位 (只能由固件置 1 0 = 已发生欠压复位 (必须在发生欠压复位后由软件置 1
2: 如果禁止了片上稳压器, BOR
3: 当 BOR
0并且 POR 1 时(假定在上电复位之后立即用软件将 POR 1),可以说已发生了欠压复位。
则总是保持为 0。更多信息,请参见第 4.4.1 节“检测BOR”。
DS39770A_CN 46 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列

4.2 主复位 (MCLR

MCLR 引脚提供触发硬件外部复位器件的方法。将该引 脚拉低可以产生复位信号。PIC18 扩展的单片机器件在
MCLR
复位路径上有一个噪声滤波器,该滤波器可以检
测并滤除小的干扰脉冲。
任何内部复位,包括 WDT 复位,均不能将 MCLR
引脚
驱动为低电平。

4.3 上电复位 (POR

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

4.4 欠压复位 (BOR

当内部稳压器被使能时(ENVREG 引脚连接到 VDD), PIC18F85J90 系列器件就具备了简单的 BOR 功能。当 稳压器输出到器件内核的电压接近于器件无法以全速运 行的电压时,稳压器将触发欠压复位。在 VDD 上升到稳 压器输出电平足够使器件可以全速运行前,BOR电路保 持器件处于复位状态。
一旦发生BOR,上电延时定时器将芯片保持在复位状态 的时间就是 T 器运行过程中, V 芯片将重新回到欠压复位状态并且初始化上电延时定时 器。一旦 V 上电延时定时器将重新执行延时。
PWRT (参数 33)。如果在上电延时定时
DD 电压降到全速运行的门限值以下,
DD 电压上升到稳压器输出足够全速运行时,
4-2 外部上电复位电路 (VDD
慢上电的情况)
DD
VDD
1: 仅当 VDD 上电速率过慢时才需要外部上电复
V
D
R
R1
C
位电路。二极管 D 有助于在 V 容迅速放电。
2: 建议 R < 40 k,确保电阻 R 两端压降符合器
件的电气规范。
3R1 ≥ 1 k将限制任何电流从外部电容 C 流入
MCLR
,以避免由于静电放电 (Electrostatic DischargeESD)或 电 过 载 (Electrical OverstressEOS)导致 MCLR
坏。
MCLR
PIC18F85J90
DD 掉电时使电
/VPP 引脚损

4.4.1 检测 BOR

BOR 位在欠压复位或上电复位事件时总是复位为 0。因
此只通过读 BOR 位事件。更可靠的方法是同时检查 POR 态。假定在发生任何上电复位事件后,POR 软件复位为 1。如果 BOR 可以断定已经发生了欠压复位事件。
如果禁止稳压器,也会禁止欠压复位功能。在这种情况 下,不能使用 BOR 事件仍会将 BOR
位的状态很难确定是否发生过欠压复
BOR 的状
位被立即用
0 同时 POR 1,那么就
位来确定欠压复位事件。上电复位
位清零。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 47
PIC18F85J90 系列

4.5 上电延时定时器 (PWRT

PIC18F85J90 系列器件具有片上上电延时定时器
PWRT)以帮助稳定上电复位过程。 PWRT 总是使
能的。其主要功能是确保在代码执行之前,器件的电 压是稳定的。
PIC18F85J90 系列器件的上电延时定时器(PWRT)是 一个11 位计数器,它使用INTRC时钟源作为时钟输入。 该定时器可产生大约 2048 x 32 µs=65.6ms的时间间 隔。 PWRT 计数期间,器件保持在复位状态。
上电延时时间取决于 INTRC 时钟,并且由于温度和工 艺的不同,不同器件的延迟时间也将各不相同。详情请 参见直流参数 33

4.5.1 延时时序

如果使能了 PWRT,则在 POR 脉冲被清零后,启动 PWRT 延时。总延迟时间将取决于 PWRT的状态。图 4-3、图 4-4、 图 4-5和图 4-6 都说明了在使能上电延时定时器时的上电延 时时序。
由于延时是由 POR 脉冲触发的,因此如果 MCLR 足够长时间的低电平, PWRT 将结束。将 MCLR 电平 拉高后器件将立即开始执行代码 (图 4-5)。这对于测 试或同步多个并行工作的 PIC18FXXXX 器件是非常有 用的。
4-3 上电延时时序 (MCLR 连接到 VDDVDD 电压上升时间 < TPWRT
VDD
MCLR
内部 POR
TPWRT
PWRT
延时
保持
内部复位
4-4 上电延时时序 (MCLR
VDD
MCLR
内部 POR
PWRT
延时
内部复位
未连接到 VDD): 情 形 1
TPWRT
DS39770A_CN 48 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列
4-5 上电延时时序 (MCLR 未连接到 VDD): 情 形 2
VDD
MCLR
内部 POR
TPWRT
PWRT
延时
内部复位
4-6 缓慢上升时间 (MCLR
0V
MCLR
内部 POR
PWRT
内部复位
VDD
延时
连接到 VDDVDD 电压上升时间 > TPWRT
3.3V
1V
PWRT
T
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 49
PIC18F85J90 系列

4.6 寄存器的复位状态

大多数寄存器不受复位的影响。在 POR 时这些寄存器 的状态不确定,而在其他复位时它们的状态不变。而剩 余寄存器则根据不同的复位类型被强制为 “复位状 态”。
大多数寄存器不受 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)。
复位
程序
(1)
计数器
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
PC + 2 uu0uu u u
RI
RCON 寄存器 STKPTR 寄存器
TO PD POR BOR STKFUL STKUNF
DS39770A_CN 50 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列
4-2 所有寄存器的初始化状态
复位
MCLR
寄存器 适用器件
上电复位,
欠压复位
WDT 复位
RESET 指令
堆栈复位
TOSU PIC18F6XJ90 PIC18F8XJ90 ---0 0000 ---0 0000 ---0 uuuu TOSH PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu TOSL PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu STKPTR PIC18F6XJ90 PIC18F8XJ90 uu-0 0000 00-0 0000 uu-u uuuu PCLATU PIC18F6XJ90 PIC18F8XJ90 ---0 0000 ---0 0000 ---u uuuu PCLATH PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu PCL PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 PC + 2 TBLPTRU PIC18F6XJ90 PIC18F8XJ90 --00 0000 --00 0000 --uu uuuu TBLPTRH PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu TBLPTRL PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu TABLAT PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu PRODH PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu PRODL PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu INTCON PIC18F6XJ90 PIC18F8XJ90 0000 000x 0000 000u uuuu uuuu INTCON2 PIC18F6XJ90 PIC18F8XJ90 1111 1111 1111 1111 uuuu uuuu INTCON3 PIC18F6XJ90 PIC18F8XJ90 1100 0000 1100 0000 uuuu uuuu
INDF0 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A
POSTINC0 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A
POSTDEC0 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A
PREINC0 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A
PLUSW0 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A FSR0H PIC18F6XJ90 PIC18F8XJ90 ---- xxxx ---- uuuu ---- uuuu FSR0L PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu WREG PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
INDF1 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A
POSTINC1 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A
POSTDEC1 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A
PREINC1 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A
PLUSW1 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A
图注: u = 不变, x = 未知, - = 未用位 (读为 0), q = 值取决于具体条件。
阴影单元表示不适用于指定器件。
1: 当器件被中断唤醒且 GIEL GIEH 位被置 1 时,用 PC 的当前值更新 TOSUTOSH TOSL。将
STKPTR 修改为指向硬件堆栈的下一个单元。
2: 当器件被中断唤醒且 GIEL GIEH 位被置 1 时, PC 装入中断向量 (0008h 0018h)。 3INTCONx PIRx 寄存器中的一位或多位会受到影响 (引起唤醒)。 4: 具体条件下的复位值,请参见表 4-1 5: 根据所选择的振荡器模式使能 PORTALATA TRISA 中的 bit 6 bit 7。如果未被配置为 PORTA
脚,则它们将被禁止并读为 0
通过 WDT
或中断唤醒器件
(1)
(1)
(1)
(1)
(2)
(3)
(3)
(3)
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 51
PIC18F85J90 系列
4-2 所有寄存器的初始化状态 (续)
复位
MCLR
寄存器 适用器件
FSR1H PIC18F6XJ90 PIC18F8XJ90 ---- xxxx ---- uuuu ---- uuuu FSR1L PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu BSR PIC18F6XJ90 PIC18F8XJ90 ---- 0000 ---- 0000 ---- uuuu
INDF2 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A
POSTINC2 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A
POSTDEC2 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A
PREINC2 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A
PLUSW2 PIC18F6XJ90 PIC18F8XJ90 N/A N/A N/A FSR2H PIC18F6XJ90 PIC18F8XJ90 ---- xxxx ---- uuuu ---- uuuu FSR2L PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu STATUS PIC18F6XJ90 PIC18F8XJ90 ---x xxxx ---u uuuu ---u uuuu TMR0H PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu TMR0L PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu T0CON PIC18F6XJ90 PIC18F8XJ90 1111 1111 1111 1111 uuuu uuuu OSCCON PIC18F6XJ90 PIC18F8XJ90 0100 q000 0100 q000 uuuu quuu LCDREG PIC18F6XJ90 PIC18F8XJ90 -011 1100 -011 1000 -uuu uuuu WDTCON PIC18F6XJ90 PIC18F8XJ90 0--- ---0 0--- ---0 u--- ---u
(4)
RCON TMR1H PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu TMR1L PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu T1CON PIC18F6XJ90 PIC18F8XJ90 0000 0000 u0uu uuuu uuuu uuuu TMR2 PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu PR2 PIC18F6XJ90 PIC18F8XJ90 1111 1111 1111 1111 1111 1111 T2CON PIC18F6XJ90 PIC18F8XJ90 -000 0000 -000 0000 -uuu uuuu SSPBUF PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu SSPADD PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu SSPSTAT PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu SSPCON1 PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu SSPCON2 PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu
图注: u = 不变, x = 未知, - = 未用位 (读为 0), q = 值取决于具体条件。
1: 当器件被中断唤醒且 GIEL GIEH 位被置 1 时,用 PC 的当前值更新 TOSUTOSH TOSL。将
2: 当器件被中断唤醒且 GIEL GIEH 位被置 1 时, PC 装入中断向量 (0008h 0018h)。 3INTCONx PIRx 寄存器中的一位或多位会受到影响 (引起唤醒)。 4: 具体条件下的复位值,请参见表 4-1 5: 根据所选择的振荡器模式使能 PORTALATA TRISA 中的 bit 6 bit 7。如果未被配置为 PORTA
PIC18F6XJ90 PIC18F8XJ90 0--1 11q0 0--q qquu u--u qquu
阴影单元表示不适用于指定器件。
STKPTR 修改为指向硬件堆栈的下一个单元。
脚,则它们将被禁止并读为 0
上电复位,
欠压复位
WDT 复位
RESET 指令
堆栈复位
通过 WDT
或中断唤醒器件
DS39770A_CN 52 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列
4-2 所有寄存器的初始化状态 (续)
复位
MCLR
寄存器 适用器件
ADRESH PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu ADRESL PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu ADCON0 PIC18F6XJ90 PIC18F8XJ90 0-00 0000 0-00 0000 u-uu uuuu ADCON1 PIC18F6XJ90 PIC18F8XJ90 --00 0000 --00 0000 --uu uuuu ADCON2 PIC18F6XJ90 PIC18F8XJ90 0-00 0000 0-00 0000 u-uu uuuu
LCDDATA4 PIC18F6XJ90
LCDDATA4 LCDDATA3 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LCDDATA2 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LCDDATA1 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LCDDATA0 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
LCDSE5
LCDSE4 PIC18F6XJ90
LCDSE4 LCDSE3 PIC18F6XJ90 PIC18F8XJ90 0000 0000 uuuu uuuu uuuu uuuu LCDSE2 PIC18F6XJ90 PIC18F8XJ90 0000 0000 uuuu uuuu uuuu uuuu LCDSE1 PIC18F6XJ90 PIC18F8XJ90 0000 0000 uuuu uuuu uuuu uuuu CVRCON PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu CMCON PIC18F6XJ90 PIC18F8XJ90 0000 0111 0000 0111 uuuu uuuu TMR3H PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu TMR3L PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu T3CON PIC18F6XJ90 PIC18F8XJ90 0000 0000 uuuu uuuu uuuu uuuu SPBRG1 PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu RCREG1 PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu TXREG1 PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu TXSTA1 PIC18F6XJ90 PIC18F8XJ90 0000 0010 0000 0010 uuuu uuuu RCSTA1 PIC18F6XJ90 PIC18F8XJ90 0000 000x 0000 000x uuuu uuuu LCDPS PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu LCDSE0 PIC18F6XJ90 PIC18F8XJ90 0000 0000 uuuu uuuu uuuu uuuu LCDCON PIC18F6XJ90 PIC18F8XJ90 000- 0000 000- 0000 uuu- uuuu EECON2 PIC18F6XJ90 PIC18F8XJ90 ---- ---- ---- ---- ---- ---­EECON1 PIC18F6XJ90 PIC18F8XJ90 ---0 x00- ---0 u00- ---0 u00-
图注: u = 不变, x = 未知, - = 未用位 (读为 0), q = 值取决于具体条件。
1: 当器件被中断唤醒且 GIEL GIEH 位被置 1 时,用 PC 的当前值更新 TOSUTOSH TOSL。将
2: 当器件被中断唤醒且 GIEL GIEH 位被置 1 时, PC 装入中断向量 (0008h 0018h)。 3INTCONx PIRx 寄存器中的一位或多位会受到影响 (引起唤醒)。 4: 具体条件下的复位值,请参见表 4-1 5: 根据所选择的振荡器模式使能 PORTALATA TRISA 中的 bit 6 bit 7。如果未被配置为 PORTA
PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
PIC18F6XJ90 PIC18F8XJ90 0000 0000 uuuu uuuu uuuu uuuu
PIC18F6XJ90 PIC18F8XJ90 0000 0000 uuuu uuuu uuuu uuuu
阴影单元表示不适用于指定器件。
STKPTR 修改为指向硬件堆栈的下一个单元。
脚,则它们将被禁止并读为 0
PIC18F8XJ90 ---- ---x ---- ---u ---- ---u
PIC18F8XJ90 ---- ---0 ---- ---u ---- ---u
上电复位,
欠压复位
WDT 复位
RESET 指令
堆栈复位
通过 WDT
或中断唤醒器件
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 53
PIC18F85J90 系列
4-2 所有寄存器的初始化状态 (续)
复位
MCLR
寄存器 适用器件
上电复位,
欠压复位
WDT 复位
RESET 指令
堆栈复位
IPR3 PIC18F6XJ90 PIC18F8XJ90 -111 -11- -111 -11- -uuu -uu- PIR3 PIC18F6XJ90 PIC18F8XJ90 -000 -00- -000 -00- -uuu -00- PIE3 PIC18F6XJ90 PIC18F8XJ90 -000 -00- -000 -00- -uuu -00- IPR2 PIC18F6XJ90 PIC18F8XJ90 11-- 111- 11-- 111- uu-- uuu- PIR2 PIC18F6XJ90 PIC18F8XJ90 00-- 000- 00-- 000- uu-- uuu- PIE2 PIC18F6XJ90 PIC18F8XJ90 00-- 000- 00-- 000- uu-- uuu- IPR1 PIC18F6XJ90 PIC18F8XJ90 -111 1-11 -111 1-11 -uuu u-uu PIR1 PIC18F6XJ90 PIC18F8XJ90 -000 0-00 -000 0-00 -uuu u-uu PIE1 PIC18F6XJ90 PIC18F8XJ90 -000 0-00 -000 0-00 -uuu u-uu OSCTUNE PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu
TRISJ
PIC18F6XJ90 PIC18F8XJ90 1111 1111 1111 1111 uuuu uuuu TRISH PIC18F6XJ90 PIC18F8XJ90 1111 1111 1111 1111 uuuu uuuu TRISG PIC18F6XJ90 PIC18F8XJ90 0001 1111 0001 1111 uuuu uuuu TRISF PIC18F6XJ90 PIC18F8XJ90 1111 111- 1111 111- uuuu uuu- TRISE PIC18F6XJ90 PIC18F8XJ90 1111 1-11 1111 1-11 uuuu u-uu TRISD PIC18F6XJ90 PIC18F8XJ90 1111 1111 1111 1111 uuuu uuuu TRISC PIC18F6XJ90 PIC18F8XJ90 1111 1111 1111 1111 uuuu uuuu TRISB PIC18F6XJ90 PIC18F8XJ90 1111 1111 1111 1111 uuuu uuuu
TRISA
(5)
PIC18F6XJ90 PIC18F8XJ90 1111 1111
(5)
1111 1111
(5)
LATJ PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LATH PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LATG PIC18F6XJ90 PIC18F8XJ90 00-x xxxx 00-u uuuu uu-u uuuu LATF PIC18F6XJ90 PIC18F8XJ90 xxxx xxx- uuuu uuu- uuuu uuu- LATE PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LATD PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LATC PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LATB PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
LATA
(5)
PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx
(5)
uuuu uuuu
(5)
PORTJ PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
PORTH
PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu PORTG PIC18F6XJ90 PIC18F8XJ90 000x xxxx 000u uuuu 000u uuuu PORTF PIC18F6XJ90 PIC18F8XJ90 xxxx xxx- uuuu uuu- uuuu uuu-
图注: u = 不变, x = 未知, - = 未用位 (读为 0), q = 值取决于具体条件。
阴影单元表示不适用于指定器件。
1: 当器件被中断唤醒且 GIEL GIEH 位被置 1 时,用 PC 的当前值更新 TOSUTOSH TOSL。将
STKPTR 修改为指向硬件堆栈的下一个单元。
2: 当器件被中断唤醒且 GIEL GIEH 位被置 1 时, PC 装入中断向量 (0008h 0018h)。 3INTCONx PIRx 寄存器中的一位或多位会受到影响 (引起唤醒)。 4: 具体条件下的复位值,请参见表 4-1 5: 根据所选择的振荡器模式使能 PORTALATA TRISA 中的 bit 6 bit 7。如果未被配置为 PORTA
脚,则它们将被禁止并读为 0
通过 WDT
或中断唤醒器件
uuuu uuuu
uuuu uuuu
(3)
(3)
(3)
(5)
(5)
DS39770A_CN 54 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列
4-2 所有寄存器的初始化状态 (续)
复位
MCLR
寄存器 适用器件
PORTE PIC18F6XJ90 PIC18F8XJ90 xxxx x-xx uuuu u-uu uuuu u-uu PORTD PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu PORTC PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu PORTB PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
PORTA SPBRGH1 PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu BAUDCON1 PIC18F6XJ90 PIC18F8XJ90 01-0 0-00 01-0 0-00 uu-u u-uu
LCDDATA23 LCDDATA22 PIC18F6XJ90 PIC18F8XJ90 ---- ---x ---- ---u ---- ---u
LCDDATA22 LCDDATA21 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LCDDATA20 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LCDDATA19 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LCDDATA18 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
LCDDATA17
LCDDATA16 PIC18F6XJ90
LCDDATA16 LCDDATA15 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LCDDATA14 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LCDDATA13 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LCDDATA12 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
LCDDATA11
LCDDATA10 PIC18F6XJ90 LCDDATA10 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LCDDATA9 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LCDDATA8 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LCDDATA7 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu LCDDATA6 PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
LCDDATA5 CCPR1H PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu CCPR1L PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu CCP1CON PIC18F6XJ90 PIC18F8XJ90 --00 0000 --00 0000 --uu uuuu CCPR2H PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
图注: u = 不变, x = 未知, - = 未用位 (读为 0), q = 值取决于具体条件。
1: 当器件被中断唤醒且 GIEL GIEH 位被置 1 时,用 PC 的当前值更新 TOSUTOSH TOSL。将
(5)
2: 当器件被中断唤醒且 GIEL GIEH 位被置 1 时, PC 装入中断向量 (0008h 0018h)。 3INTCONx PIRx 寄存器中的一位或多位会受到影响 (引起唤醒)。 4: 具体条件下的复位值,请参见表 4-1 5: 根据所选择的振荡器模式使能 PORTALATA TRISA 中的 bit 6 bit 7。如果未被配置为 PORTA
PIC18F6XJ90 PIC18F8XJ90 xx0x 0000
PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
PIC18F8XJ90 ---- ---x ---- ---u ---- ---u
PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
PIC18F8XJ90 ---- ---x ---- ---u ---- ---u
PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu
阴影单元表示不适用于指定器件。
STKPTR 修改为指向硬件堆栈的下一个单元。
脚,则它们将被禁止并读为 0
上电复位,
欠压复位
(5)
WDT 复位
RESET 指令
堆栈复位
uu0u 0000
(5)
通过 WDT
或中断唤醒器件
uuuu uuuu
(5)
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 55
PIC18F85J90 系列
4-2 所有寄存器的初始化状态 (续)
复位
MCLR
寄存器 适用器件
CCPR2L PIC18F6XJ90 PIC18F8XJ90 xxxx xxxx uuuu uuuu uuuu uuuu CCP2CON PIC18F6XJ90 PIC18F8XJ90 --00 0000 --00 0000 --uu uuuu SPBRG2 PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu RCREG2 PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu TXREG2 PIC18F6XJ90 PIC18F8XJ90 0000 0000 0000 0000 uuuu uuuu TXSTA2 PIC18F6XJ90 PIC18F8XJ90 0000 -010 0000 -010 uuuu -uuu RCSTA2 PIC18F6XJ90 PIC18F8XJ90 0000 000x 0000 000x uuuu uuuu
图注: u = 不变, x = 未知, - = 未用位 (读为 0), q = 值取决于具体条件。
阴影单元表示不适用于指定器件。
1: 当器件被中断唤醒且 GIEL GIEH 位被置 1 时,用 PC 的当前值更新 TOSUTOSH TOSL。将
STKPTR 修改为指向硬件堆栈的下一个单元。
2: 当器件被中断唤醒且 GIEL GIEH 位被置 1 时, PC 装入中断向量 (0008h 0018h)。 3INTCONx PIRx 寄存器中的一位或多位会受到影响 (引起唤醒)。 4: 具体条件下的复位值,请参见表 4-1 5: 根据所选择的振荡器模式使能 PORTALATA TRISA 中的 bit 6 bit 7。如果未被配置为 PORTA
脚,则它们将被禁止并读为 0
上电复位,
欠压复位
WDT 复位
RESET 指令
堆栈复位
通过 WDT
或中断唤醒器件
DS39770A_CN 56 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列

5.0 存储器构成

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

5.1 程序存储器构成

PIC18 单片机具有一个 21 位程序计数器,可以对 2 MB 的程序存储器空间进行寻址。访问存储器物理地址上边 界和这个 2 MB 地址之间的存储单元会返回全 0 NOP 指令)。
整个 PIC18F85J90 系列提供了一系列片上闪存程序存 储器,从 8KB(至多 4,096 条单字指令)到 32 KB
32,768 条单字指令)。图 5-1 给出了该系列的各个器
件的程序存储器映射图。

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

CALL, CALLW, RCALL, RETURN, RETFIE, RETLW, ADDULNK, SUBULNK
PIC18FX3J90 PIC18FX4J90 PIC18FX5J90
片上
存储器
配置字
PC<20:0>
1 级堆栈
31 级堆栈
片上
存储器
21
片上
存储器
000000h
001FFFh
配置字
配置字
未用
读为 0
注: 存储器空间的大小未按比例显示。放大了程序存储器区域以显示细节。
未用
读为 0
未用
读为 0
003FFFh
007FFFh
用户存储器空间
1FFFFFh
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 57
PIC18F85J90 系列

5.1.1 存储器硬件编码向量

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

5.1.2 闪存配置字

由于 PIC18F85J90 系列器件没有固定的配置存储器,所 以保留片上程序存储器顶部的 4 个字来保存配置信息。 复位时,该配置信息被复制到配置寄存器。
配置字由低到高顺序存储在程序存储器单元中,从最低 地址开始存放 CONFIG1 的低字节,到 CONFIG4 的高字 节结束。对于这些器件,只使用从 CONFIG1 CONFIG3 的配置字,保留 CONFIG4PIC18F85J90 系列器件的闪 存配置字的实际地址如表 5-1 所示。图 5-2 给出了闪存配 置字以及其他的存储器向量在存储器映射图中的位置。
22.1 节 “配置位”中提供了有关器件配置字的更多 详细信息。
5-1 PIC18F85J90 系列器件的闪存
配置字
器件
PIC18F63J90
PIC18F83J90
PIC18F64J90
PIC18F84J90
PIC18F65J90
PIC18F85J90
程序存储器
KB
8
16
32
配置字地址
1FF8h 1FFFh
3FF8h 3FFFh
7FF8h 7FFFh
闪存配置字
读为 0
图注: (存储器的顶部)代表片上程序存储器空间的
上边界 (特定器件的具体值,请参见图 5-1)。 阴影区域表示未实现的存储器。这些区域未按 比例显示。
(存储器的顶部 -7) (存储器的顶部)
1FFFFFh
DS39770A_CN 58 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列

5.1.3 程序计数器

程序计数器 (Program CounterPC)指定欲取出执行 的指令的地址。 PC 21 位宽,且保存在三个不同的 8 位寄存器中。存储低字节的寄存器称为 PCL 寄存器,该 寄存器可读写。存储高字节的寄存器,即 PCH 寄存器, 存储 PC<15:8> 位;该寄存器不可直接读写。更新 PCH 寄存器的操作是通过 PCLATH 寄存器实现的。存储最高 字节的寄存器称为 PCU。该寄存器存储 PC<20:16> 位; 它也不能直接读写。更新 PCU 寄存器的操作是通过
PCLATU 寄存器实现的。
PCLATH PCLATU 的内容通过执行任何写 PCL 的操
作被传送到程序计数器。同样,程序计数器的两个高字 节通过读 PCL 的操作被传送到 PCLATH PCLATU。 这对于计算 PC 的偏移量很有用处(见第 5.1.6.1 节“ 计 算 GOTO”)。
PC 是按字节寻址程序存储器的。为了防止 PC 不能正 确获取字指令,需要将 PCL 的最低有效位固定取值为
0PC 每次加 2 来寻址程序存储器中的顺序指令。 CALLRCALLGOTO 和程序转移指令直接写入程序计
数器。对于这些指令,PCLATH 和 PCLATU 的内容不会 传送到程序计数器。

5.1.4 返回地址堆栈

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

5.1.5 快速寄存器堆栈

STATUS、WREG 和 BSR 寄存器提供的快速寄存器 堆栈具有从中断 “快速返回”的功能。此堆栈只有一级 且不可读写。当处理器转入中断向量处执行时,它装入 对应寄存器的当前值。所有中断源都会将值压入堆栈寄 存器。如果使用 RETFIE, FAST 指令从中断返回,这 些寄存器中的值就会被装回工作寄存器。
如果同时允许低优先级中断和高优先级中断,从低优先 级中断返回时,无法可靠地使用堆栈寄存器。如果在为 低优先级中断提供服务时,发生了高优先级中断,则低 优先级中断存储在堆栈寄存器中的值将被覆盖。在为低 优先级中断提供服务时,用户必须用软件保存关键寄存 器的值。
如果未使用中断优先级,所有中断都可以使用快速寄存 器堆栈从中断返回。如果没有使用中断,快速寄存器堆 栈可以用于在子程序调用结束后恢复 STATUS、WREGBSR 寄存器。要在子程序调用中使用快速寄存器堆 栈,必须执行 CALL label, FAST 指令,将 STATUS、 WREG BSR 寄存器的内容存入快速寄存器堆栈。然 后执行 RETURN, FAST 指令,从快速寄存器堆栈恢复 这些寄存器。
5-1 给出了一个在子程序调用和返回期间使用快速寄 存器堆栈的源代码示例。
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.6 程序存储器中的查找表

有的编程需要在程序存储器中创建数据结构或查找表。 对于 PIC18 器件,可以用两种方式实现查找表:
计算 GOTO
表读
5.1.6.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.6.2 表读
有一种更好的方法可以将数据存储在程序存储器中,这 种方法允许在每个指令单元存储 2 个字节的数据。
编程时,每个程序字可以存储 2 个字节的查找表数据。 表指针(TBLPTR)指定字节地址,而表锁存器
TABLAT)则存储从程序存储器读取的数据。一次只能
从程序存储器读取一个字节。
在第 6.1 节 “表读与表写”中进一步讨论表读操作。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 61
PIC18F85J90 系列

5.2 PIC18 指令周期

5.2.1 时钟分配

来自内部或外部时钟源的单片机时钟输入都将在内部被 四分频以产生四个互不重叠的正交时钟信号(Q1Q2、 Q3 Q4)。程序计数器在每个 Q1 递增;在 Q4 期间, 从程序存储器取指令并将指令锁存到指令寄存器 (IR) 中。指令的译码和执行在下一个 Q1 Q4 周期完成。 图 5-4 所示为时钟和指令执行的流程图。
5-4:时/指令周期
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)。
取指周期中:程序计数器 (PC)在 Q1 周期加 1,开始 取指令。
指令执行周期中:在 Q1 周期,将所取指令锁存到指令 寄存器 (IR)。在随后的 Q2Q3 Q4 周期中译码并 执行该指令。其中读数据存储器 (读操作数)发生在
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 (Forced NOP)
5. Instruction @ address SUB_1
除程序转移指令外,所有的指令都是单周期指令。由于程序转移指令将导致一条已取指令从流水线清除,需要重新 取指令,然后执行指令,所以程序转移指令需要两个周期。
DS39770A_CN 62 超前信息 2007 Microchip Technology Inc.
取指 1 执行 1
取指 2 执行 2
取指 3 执行 3
取指 4
清除 (NOP)
取指 SUB_1 执行 SUB_1
PIC18F85J90 系列

5.2.3 程序存储器中的指令

程序存储器按字节寻址。指令以 2 字节或 4 字节的形式 存储在程序存储器中。指令字的最低有效字节始终存储 在地址为偶数的程序存储器单元中 (LSB = 0)。要保 证正确指向指令单元, PC 必须以 2 为单位递增,并且 LSB 总是读为 0 (见第 5.1.3 节 “程序计数器”)。
5-5 给出了指令字存储在程序存储器中的一个示例。
5-5 程序存储器中的指令
程序存储器
指令 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 GOTOLSFR。这些指令第二个字的高4 位均为 1111;
其他12位是立即数数据,通常为一个数据存储器地址。 指令的高 4 位为1111,用于代表一条特殊的 NOP 指令。
指令顺序执行的正确顺序为:执行完第一个字之后立即 按顺序访问并使用第二个字中的数据。如果由于某些原
CALLGOTO 指令在指令中嵌入了程序存储器的绝对地 址。由于指令总是存储为一个字长,因而指令所包含的 数据为一个字地址。字地址会写入 PC<20:1>,用 于 访 问 程序存储器中的目标字节。图 5-5 中的指令 #2 给出了指 令 GOTO 0006h 在程序存储器中的译码过程。程序转移 指令也采取同样的方式对相对地址偏移量进行译码。存 储在转移指令中的偏移量代表单字指令数,PC 将以此作 为偏移量跳转到指定的地址单元。第 23.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
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 63
PIC18F85J90 系列

5.3 数据存储器构成

注: 当使能了 PIC18 扩展指令集时,数据存储
器某些方面的操作会有所改变。更多信 息,请参见第 5.6 节 “数据存储器和扩展 指令集”。
PIC18 器件中的数据存储器是用静态 RAM 实现的。在 数据存储器中,每个寄存器都有 12 位地址,最大容量 可达 4096 个字节。存储器空间最多被分为 16 个存储 区,每个存储区包含 256 个字节。PIC18FX3J90/X4J90 器件有最多 16 KB 的程序存储器,实现了 4 个完整的存 储区,共计 1024 字节。 PIC18FX5J90 器件有 32 KB 的程序存储器,实现了 8 个完整的存储区,共计 2048 字节。图 5-6 和图 5-7 给出了器件的数据存储器构成。
数据存储器由特殊功能寄存器(Special Function Register, SFR)和通用寄存器 (General Purpose RegisterGPR) 组成。 SFR 用于单片机和外设功能模块的控制和状态显 示,GPR 则在用户应用程序中用于存储数据和临时存储操 作的中间结果。任何未实现单元均读为 0。
这样的指令集和架构支持跨存储区的操作。可以通过直 接、间接或变址寻址模式访问整个数据存储器。本章后 面的部分将讨论寻址模式。
为确保能在一个周期存取常用寄存器 (所选的 SFR 和 所选的 GPR), PIC18 器件设置了一个快速操作存储 区。该存取区是一个 256 字节的存储器空间,它可实现 对所选的 SFR GPR Bank 0 的低地址单元的快速存 取,而无需使用 BSR。第 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 指令直接装载 BSR
BSR 的值代表数据存储器中的存储区,指令中的 8 位指 向存储区中的存储单元,可以将它看作距离存储区下边 界的偏移量。图 5-8 显示了 BSR 的值与数据存储器中 的存储区之间的关系。
由于最多可有 16 个寄存器共享同一个低位地址,用户 必须非常小心以确保在执行数据读或写之前选择了正确 的存储区。例如,当 BSR 0Fh 时将程序数据写入地 址为 F9h 8 位地址单元,将导致程序计数器的复位。
当选择存储区时,只有已实现的存储区才可以读写。对 未实现存储区进行的写操作将被忽略,而读这些存储区 会返回 0。虽然是这样, STATUS 寄存器仍然会受到影 响,好像操作是成功的。图 5-6 中的数据存储器映射图 指出了已实现的存储区。
PIC18 的内核指令集中,只有 MOVFF 指令指定源寄 存器和目标寄存器的完整 12 位地址。该指令在执行时 完全忽略 BSR。所有其他指令仅包含作为操作数的低位 地址,而且必须使用 BSR 或快速操作存储区来寻址目 标寄存器。
DS39770A_CN 64 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列
5-6 PIC18FX3J90/X4J90 器件的数据存储器映射图
BSR<3:0>
= 0000
= 0001
= 0010
= 0011
Bank 0
Bank 1
Bank 2
Bank 3
数据存储器映射图
00h
快速操作 RAM
FFh 00h
FFh 00h
FFh 00h
FFh 00h
GPR
GPR
GPR
GPR
000h 05Fh 060h 0FFh 100h
1FFh 200h
2FFh 300h
3FFh 400h
a = 0 时:
将忽略BSR而使用快速操作存储 区。
96 个字节是通用 RAM(来自 Bank 0)。
接下来的 160 个字节是特殊功能 寄存器 (来自 Bank 15)。
a = 1 时:
BSR指定指令所使用的存储区。
= 0100
Bank 4
未用
读为 0
快速操作存储区
快速操作
RAM 的低地址
快速操作 RAM
的高地址(SFR
00h
5Fh 60h
FFh
= 1110
= 1111
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 65
Bank 14
Bank 15
FFh 00h
FFh
未用
SFR
EFFh F00h F5Fh
F60h FFFh
PIC18F85J90 系列
5-7 PIC18FX5J90 器件的数据存储器映射图
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 而使用快速操作存储 区。
96 个字节是通用 RAM(来自 Bank 0)。
接下来的 160 个字节是特殊功能 寄存器 (来自 Bank 15)。
a = 1 时:
BSR指定指令所使用的存储区。
快速操作存储区
快速操作
RAM 的低地址 快速操作 RAM
的高地址(SFR
00h
5Fh 60h
FFh
未用
= 1110
= 1111
DS39770A_CN 66 超前信息  2007 Microchip Technology Inc.
Bank 14
FFh
00h
Bank 15
FFh
读为 0
未用
SFR
EFFh F00h F5Fh
F60h FFFh
5-8 使用存储区选择寄存器 (直接寻址)
7
0000
存储区选择
(2)
(1)
BSR
0010
000h
0
100h
200h
300h
数据存储器
Bank 0
Bank 1
Bank 2
Bank 3
Bank 13
PIC18F85J90 系列
00h
FFh 00h
FFh 00h
FFh 00h
7
11111111
11111111
来自操作码
(2)
0
E00h
F00h
FFFh
1: 指令的快速操作 RAM 位强制忽略选定的存储区 (BSR<3:0>)直接寻址快速操作存储区的寄存器。
2MOVFF 指令嵌入了完整的 12 位地址。

5.3.2 快速操作存储区

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

5.3.3 通用寄存器文件

PIC18 器件可能在 GPR 区中划分了一部分存储区。这部
分存储区为数据 RAM,所有指令均可访问它。 GPR 区 从 Bank 0 的底部 (地址 000h)开始向上直到 SFR 区 的底部。上电复位不会初始化 GPR,并且其他复位也不 会改变其内容。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 67
PIC18F85J90 系列

5.3.4 特殊功能寄存器

特殊功能寄存器 (SFR)是 CPU 和外设模块用来控制 器件操作的寄存器。这些寄存器以静态 RAM 的形式实 现。 SFR 从数据存储器的顶部 (FFFh)开始向下,它 占用了 Bank 15 上面大半部分的单元空间 (F60h FFFh)。表 5-2 和表 5-3 列出了这些寄存器。
可以将 SFR 归类为两组:与“内核”器件功能 (ALU、 复位和中断)相关的寄存器和与外设功能相关的寄存 器。复位和中断寄存器在相关的章节中进行讨论,本章 后面的部分将对 ALU 状态寄存器进行说明。与外设操作 相关的寄存器将在该外设的章节中进行说明。
SFR 通常分布在受其控制的外设中。未使用的 SFR 单 元是未实现的,读为 0
5-2 PIC18F85J90 系列器件的特殊功能寄存器映射图
地址 名称 地址 名称 地址 名称 地址 名称 地址 名称
FFFh TOSU FDFh INDF2
(1)
FFEh TOSH FDEh POSTINC2
FFDh TOSL FDDh POSTDEC2
FFCh STKPTR FDCh PREINC2
FFBh PCLATU FDBh PLUSW2
(1)
(1)
FBFh LCDDATA4
(1)
FBEh LCDDATA3 F9Eh PIR1 F7Eh BAUDCON1
(1)
FBDh LCDDATA2 F9Dh PIE1 F7Dh
FBCh LCDDATA1 F9Ch
FBBh LCDDATA0 F9Bh OSCTUNE F7Bh
FFAh PCLATH FDAh FSR2H FBAh LCDSE5
FF9h PCL FD9h FSR2L FB9h LCDSE4
FF8h TBLPTRU FD8h STATUS FB8h LCDSE3 F98h TRISG F78h
FF7h TBLPTRH FD7h TMR0H FB7h LCDSE2 F97h TRISF F77h
FF6h TBLPTRL FD6h TMR0L FB6h LCDSE1 F96h TRISE F76h
FF5h TABLAT FD5h T0CON FB5h CVRCON F95h TRISD F75h
FF4h PRODH FD4h
(2)
FB4h CMCON F94h TRISC F74h
FF3h PRODL FD3h OSCCON FB3h TMR3H F93h TRISB F73h
FF2h INTCON FD2h LCDREG FB2h TMR3L F92h TRISA F72h
FF1h INTCON2 FD1h WDTCON FB1h T3CON F91h LATJ
FF0h INTCON3 FD0h RCON FB0h
FEFh INDF0
FEEh POSTINC0
FEDh POSTDEC0
FECh PREINC0
FEBh PLUSW0
(1)
(1)
(1)
FCFh TMR1H FAFh SPBRG1 F8Fh LATG F6Fh LCDDATA9
(1)
FCEh TMR1L FAEh RCREG1 F8Eh LATF F6Eh LCDDATA8
(1)
FCDh T1CON FADh TXREG1 F8Dh LATE F6Dh LCDDATA7
FCCh TMR2 FACh TXSTA1 F8Ch LATD F6Ch LCDDATA6
FCBh PR2 FABh RCSTA1 F8Bh LATC F6Bh LCDDATA5
FEAh FSR0H FCAh T2CON FAAh LCDPS F8Ah LATB F6Ah CCPR1H
FE9h FSR0L FC9h SSPBUF FA9h LCDSE0 F89h LATA F69h CCPR1L
FE8h WREG FC8h SSPADD FA8h LCDCON F88h PORTJ
FE7h INDF1
(1)
FE6h POSTINC1
FE5h POSTDEC1
FE4h PREINC1
FE3h PLUSW1
(1)
(1)
FC7h SSPSTAT FA7h EECON2 F87h PORTH
(1)
FC6h SSPCON1 FA6h EECON1 F86h PORTG F66h CCPR2L
(1)
FC5h SSPCON2 FA5h IPR3 F85h PORTF F65h CCP2CON
FC4h ADRESH FA4h PIR3 F84h PORTE F64h SPBRG2
FC3h ADRESL FA3h PIE3 F83h PORTD F63h RCREG2
FE2h FSR1H FC2h ADCON0 FA2h IPR2 F82h PORTC F62h TXREG2
FE1h FSR1L FC1h ADCON1 FA1h PIR2 F81h PORTB F61h TXSTA2
FE0h BSR FC0h ADCON2 FA0h PIE2 F80h PORTA F60h RCSTA2
(3)
F9Fh IPR1 F7Fh SPBRGH1
LCDDATA23
(2)
F7Ch
LCDDATA22
LCDDATA21
(3)
(3)
F9Ah TRISJ
F99h TRISH
(3)
(3)
F7Ah
F79h
LCDDATA20
LCDDATA19
LCDDATA18
LCDDATA17
LCDDATA16
LCDDATA15
LCDDATA14
LCDDATA13
LCDDATA12
(3)
(2)
F90h LATH
(3)
(3)
(3)
F71h
LCDDATA11
F70h
LCDDATA10
F68h CCP1CON
F67h CCPR2H
(3)
(3)
(3)
(3)
(3)
(3)
(3)
1: 这不是实际存在的寄存器。
2: 未实现的寄存器,读为 0 3: 在 64 引脚器件上此寄存器不可用。
DS39770A_CN 68 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列
5-3 PIC18F85J90 系列寄存器文件汇总
寄存器名称
TOSU
TOSH
TOSL
STKPTR STKFUL STKUNF
PCLATU
PCLATH
PCL
TBLPTRU
TBLPTRH
TBLPTRL
TAB LAT
PRODH
PRODL INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 0000 000x 51, 95
INTCON2 RBPU INTCON3 INT2IP INT1IP INT3IE INT2IE INT1IE INT3IF INT2IF INT1IF 1100 0000 51, 97
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 = 值取决于具体条件, r = 保留 (不能修改) 注 1PC bit 21 仅在测试模式和串行编程模式下可用。
2: 这些寄存器和 / 或位仅在 80 引脚器件上可用;在其他器件上,它们未实现并读为 0。所示为 80 引脚器件的复位状态。 3: 当 MSSP 模块工作在 I 4: 只有在特定的振荡器配置中才可使用 PLLEN 位;否则,它被禁止并读为 0。详细信息,请参见第 2.4.3 节“PLL 倍频器”。 5: 仅当内部振荡器被选作默认时钟源 (FOSC2 配置位 = 0)时, RA6/RA7 及其相关的锁存和方向位才能被配置为端口引脚;否则,这些位将
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
栈顶高字节 (TOS<15:8>
栈顶低字节 (TOS<7:0>
—bit 21
PC<15:8> 的保持寄存器
PC 低字节 (PC<7:0>
—bit 21
程序存储器表指针高字节 (TBLPTR<15:8>
程序存储器表指针低字节 (TBLPTR<7:0>)
程序存储器表锁存器
乘积寄存器的高字节
乘积寄存器的低字节
INTEDG0 INTEDG1 INTEDG2 INTEDG3 TMR0IP INT3IP RBIP 1111 1111 51, 96
使用 FSR0 的内容寻址数据存储器——FSR0 的值不变 (不是实际存在的寄存器)
使用 FSR0 的内容寻址数据存储器——FSR0 的值后增 (不是实际存在的寄存器)
使用 FSR0 的内容寻址数据存储器——FSR0 的值后减 (不是实际存在的寄存器)
使用 FSR0 的内容寻址数据存储器——FSR0 的值预增 (不是实际存在的寄存器)
使用 FSR0 的内容寻址数据存储器——FSR0 的值预增 (不是实际存在的寄存器), FSR0 的偏移量由 W 寄 存器提供
间接数据存储器地址指针 0 的低字节
工作寄存器
使用 FSR1 的内容寻址数据存储器——FSR1 的值不变 (不是实际存在的寄存器)
使用 FSR1 的内容寻址数据存储器——FSR1 的值后增 (不是实际存在的寄存器)
使用 FSR1 的内容寻址数据存储器——FSR1 的值后减 (不是实际存在的寄存器)
使用 FSR1 的内容寻址数据存储器——FSR1 的值预增 (不是实际存在的寄存器)
使用 FSR1 的内容寻址数据存储器——FSR1 的值预增 (不是实际存在的寄存器), FSR1 的偏移量由 W 寄 存器提供
间接数据存储器地址指针 1 的低字节
使用 FSR2 的内容寻址数据存储器——FSR2 的值不变 (不是实际存在的寄存器)
使用 FSR2 的内容寻址数据存储器——FSR2 的值后增 (不是实际存在的寄存器)
使用 FSR2 的内容寻址数据存储器——FSR2 的值后减 (不是实际存在的寄存器)
使用 FSR2 的内容寻址数据存储器——FSR2 的值预增 (不是实际存在的寄存器)
使用 FSR2 的内容寻址数据存储器——FSR2 的值预增 (不是实际存在的寄存器), FSR2 的偏移量由 W 寄 存器提供
间接数据存储器地址指针 2 的低字节
—NOVZDCC---x xxxx 52, 73
2
C™ 从动模式下时,这些位的其他名称和定义。详细信息,请参见第 16.4.3.2 节 “地址屏蔽”。
被禁止且读为 0。
栈顶最高字节 (TOS<20:16>
返回堆栈指针
(1)
PC<20:16> 的保持寄存器
程序存储器表指针最高字节 (TBLPTR<20:16>
间接数据存储器地址指针 0 的高字节
间接数据存储器地址指针 1 的高字节
存储区选择寄存器
间接数据存储器地址指针 2 的高字节
POR/BOR
时的值
---0 0000 51, 59 0000 0000 51, 59 0000 0000 51, 59 uu-0 0000 51, 60
---0 0000 51, 59 0000 0000 51, 59 0000 0000 51, 59
--00 0000 51, 84 0000 0000 51, 84 0000 0000 51, 84 0000 0000 51, 84 xxxx xxxx 51, 84 xxxx xxxx 51, 91
N/A 51, 75
N/A 51, 76
N/A 51, 76
N/A 51, 76
N/A 51, 76
---- xxxx 51, 75 xxxx xxxx 51, 75 xxxx xxxx 51
N/A 51, 75
N/A 51, 76
N/A 51, 76
N/A 51, 76
N/A 51, 76
---- xxxx 52, 75 xxxx xxxx 52, 75
---- 0000 52, 64
N/A 52, 75
N/A 52, 76
N/A 52, 76
N/A 52, 76
N/A 52, 76
---- xxxx 52, 75 xxxx xxxx 52, 75
详情请见
(页)
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 69
PIC18F85J90 系列
5-3 PIC18F85J90 系列寄存器文件汇总 (续)
寄存器名称
TMR0H
TMR0L
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Timer0 寄存器的高字节
Timer0 寄存器的低字节
POR/BOR
时的值
0000 0000 52, 133 xxxx xxxx 52, 133
T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 1111 1111 52, 131 OSCCON IDLEN IRCF2 IRCF1 IRCF0 OSTS IOFS SCS1 SCS0 0100 q000 30, 52
LCDREG
WDTCON REGSLP
RCON IPEN
TMR1H
TMR1L
T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC
TMR2
PR2
T2CON
SSPBUF
SSPADD
SSPSTAT SMP CKE D/A
CPEN BIAS2 BIAS1 BIAS0 MODE13 CKSEL1 CKSEL0 -011 1100 52, 163
—SWDTEN0--- ---0 52, 289 —RITO PD POR BOR 0--1 11q0 46, 52
Timer1 寄存器的高字节
Timer1 寄存器的低字节
xxxx xxxx 52, 139 xxxx xxxx 52, 139
TMR1CS TMR1ON 0000 0000 52, 135
Timer2 寄存器
Timer2 周期寄存器
T2OUTPS3
T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 52, 141
MSSP 接收缓冲器 / 发送寄存器
2
I
C™ 从动模式下的 MSSP 地址寄存器。 I2C 主控模式下的 MSSP1 波特率重载寄存器。
0000 0000 52, 142 1111 1111 52, 142
xxxx xxxx 52, 193,
0000 0000 52, 228
PSR/WUA BF 0000 0000 52, 186,
SSPCON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 52, 187,
SSPCON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000 52, 197,
GCEN
ADRESH
ADRESL
A/D 结果寄存器的高字节
A/D 结果寄存器的低字节
ADCON0 ADCAL
ADCON1
VCFG1 VCFG0 PCFG3 PCFG2 PCFG1 PCFG0 --00 0000 53, 264
ADCON2 ADFM
LCDDATA4 S39C0
ACKSTAT ADMSK5
CHS3 CHS2 CHS1 CHS0 GO/DONE ADON 0-00 0000 53, 263
ACQT2 ACQT1 ACQT0 ADCS2 ADCS1 ADCS0 0-00 0000 53, 265
(2)
S38C0
(3)
(2)
S37C0
(2)
ADMSK4
S36C0
(2)
(3)
ADMSK3
S35C0
(2)
(3)
ADMSK2
S34C0
(3)
(2)
ADMSK1
S33C0
(3)
SEN
xxxx xxxx 53, 271 xxxx xxxx 53, 271
(2)
S32C0 xxxx xxxx 53, 161 LCDDATA3 S31C0 S30C0 S29C0 S28C0 S27C0 S26C0 S25C0 S24C0 xxxx xxxx 53, 161 LCDDATA2 S23C0 S22C0 S21C0 S20C0 S19C0 S18C0 S17C0 S16C0 xxxx xxxx 53, 161 LCDDATA1 S15C0 S14C0 S13C0 S12C0 S11C0 S10C0 S09C0 S08C0 xxxx xxxx 53, 161 LCDDATA0 S07C0 S06C0 S05C0 S04C0 S03C0 S02C0 S01C0 S00C0 xxxx xxxx 53, 161
(2)
LCDSE5
LCDSE4 SE39
SE47 SE46 SE45 SE44 SE43 SE42 SE41 SE40 0000 0000 53, 160
(2)
SE38
(2)
S37
(2)
SE36
(2)
SE35
(2)
SE34
(2)
SE33
(2)
SE32 0000 0000 53, 160 LCDSE3 SE31 SE30 SE29 SE28 SE27 SE26 SE25 SE24 0000 0000 53, 160 LCDSE2 SE23 SE22 SE21 SE20 SE19 SE18 SE17 SE16 0000 0000 53, 160 LCDSE1 SE15 SE14 SE13 SE12 SE11 SE10 SE09 SE08 0000 0000 53, 160 CVRCON CVREN CVROE CVRR CVRSS CVR3 CVR2 CVR1 CVR0 0000 0000 53, 279 CMCON C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0 0000 0111 53, 273
TMR3H
TMR3L
Timer3 寄存器的高字节
Timer3 寄存器的低字节
T3CON RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 T3SYNC
TMR3CS TMR3ON 0000 0000 53, 143
xxxx xxxx 53, 145 xxxx xxxx 53, 145
图注: x = 未知, u = 不变, - = 未用, q = 值取决于具体条件, r = 保留 (不能修改) 注 1PC bit 21 仅在测试模式和串行编程模式下可用。
2: 这些寄存器和 / 或位仅在 80 引脚器件上可用;在其他器件上,它们未实现并读为 0。所示为 80 引脚器件的复位状态。 3: 当 MSSP 模块工作在 I
2
C™ 从动模式下时,这些位的其他名称和定义。详细信息,请参见第 16.4.3.2 节 “地址屏蔽”。
4: 只有在特定的振荡器配置中才可使用 PLLEN 位;否则,它被禁止并读为 0。详细信息,请参见第 2.4.3 节“PLL 倍频器”。 5: 仅当内部振荡器被选作默认时钟源 (FOSC2 配置位 = 0)时, RA6/RA7 及其相关的锁存和方向位才能被配置为端口引脚;否则,这些位将
被禁止且读为 0。
详情请见
(页)
228
195
196
198
DS39770A_CN 70 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列
5-3 PIC18F85J90 系列寄存器文件汇总 (续)
寄存器名称
SPBRG1
RCREG1
TXREG1 TXSTA1 CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 0000 0010 53, 230 RCSTA1 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 53, 231 LCDPS WFT BIASMD LCDA WA LP3 LP2 LP1 LP0 0000 0000 53, 159 LCDSE0 SE07 SE06 SE05 SE04 SE03 SE02 SE01 SE00 0000 0000 53, 160
LCDCON LCDEN SLPEN WERR
EECON2
EECON1
IPR3
PIR3
PIE3
IPR2 OSCFIP CMIP
PIR2 OSCFIF CMIF
PIE2 OSCFIE CMIE
IPR1
PIR1
PIE1
OSCTUNE INTSRC PLLEN
(2)
TRISJ
(2)
TRISH TRISG SPIOD CCP2OD CCP1OD TRISG4 TRISG3 TRISG2 TRISG1 TRISG0 0001 1111 54, 126
TRISF TRISF7 TRISF6 TRISF5 TRISF4 TRISF3 TRISF2 TRISF1
TRISE TRISE7 TRISE6 TRISE5 TRISE4 TRISE3 TRISD TRISD7 TRISD6 TRISD5 TRISD4 TRISD3 TRISD2 TRISD1 TRISD0 1111 1111 54, 119 TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 1111 1111 54, 117 TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 1111 1111 54, 114
TRISA TRISA7
(2)
LATJ
(2)
LATH
LATG U2OD U1OD
LATF LATF7 LATF6 LATF5 LATF4 LATF3 LATF2 LATF1
LATE LATE7 LATE6 LATE5 LATE4 LATE3 LATD LATD7 LATD6 LATD5 LATD4 LATD3 LATD2 LATD1 LATD0 xxxx xxxx 54, 119 LATC LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0 xxxx xxxx 54, 117 LATB LATB7 LATB6 LATB5 LATB4 LATB3 LATB2 LATB1 LATB0 xxxx xxxx 54, 114
LATA LATA7
图注: x = 未知, u = 不变, - = 未用, q = 值取决于具体条件, r = 保留 (不能修改) 注 1PC bit 21 仅在测试模式和串行编程模式下可用。
2: 这些寄存器和 / 或位仅在 80 引脚器件上可用;在其他器件上,它们未实现并读为 0。所示为 80 引脚器件的复位状态。 3: 当 MSSP 模块工作在 I 4: 只有在特定的振荡器配置中才可使用 PLLEN 位;否则,它被禁止并读为 0。详细信息,请参见第 2.4.3 节“PLL 倍频器”。 5: 仅当内部振荡器被选作默认时钟源 (FOSC2 配置位 = 0)时, RA6/RA7 及其相关的锁存和方向位才能被配置为端口引脚;否则,这些位将
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
EUSART 波特率发生器
EUSART 接收寄存器
EUSART 发送寄存器
CS1 CS0 LMUX1 LMUX0 000- 0000 53, 158
EEPROM 控制寄存器 2 (不是实际存在的寄存器)
FREE WRERR WREN WR ---0 x00- 53, 83 — LCDIP RC2IP TX2IP CCP2IP CCP1IP -111 -11- 54, 106 — LCDIF RC2IF TX2IF CCP2IF CCP1IF -000 -00- 54, 100 — LCDIE RC2IE TX2IE CCP2IE CCP1IE -000 -00- 54, 103
BCLIP LVDIP TMR3IP 11-- 111- 54, 105 — BCLIF LVDIF TMR3IF 00-- 000- 54, 99
BCLIE LVDIE TMR3IE 00-- 000- 54, 102 — ADIP RC1IP TX1IP SSPIP TMR2IP TMR1IP -111 1-11 54, 104 — ADIF RC1IF TX1IF SSPIF TMR2IF TMR1IF -000 0-00 54, 98 — ADIE RC1IE TX1IE SSPIE TMR2IE TMR1IE -000 0-00 54, 101
TRISJ7 TRISJ6 TRISJ5 TRISJ4 TRISJ3 TRISJ2 TRISJ1 TRISJ0 1111 1111 54, 130
TRISH7 TRISH6 TRISH5 TRISH4 TRISH3 TRISH2 TRISH1 TRISH0 1111 1111 54, 128
(5)
LATJ7 LATJ6 LATJ5 LATJ4 LATJ3 LATJ2 LATJ1 LATJ0 xxxx xxxx 54, 130
LAT H7 L ATH6 LAT H5 L ATH4 LAT H3 L ATH2 LAT H1 L ATH0 xxxx xxxx 54, 128
(5)
被禁止且读为 0。
(4)
TUN5 TUN4 TUN3 TUN2 TUN1 TUN0 0000 0000 31, 54
TRISE1 TRISE0 1111 1-11 54, 121
(5)
TRISA6
LATA6
2
C™ 从动模式下时,这些位的其他名称和定义。详细信息,请参见第 16.4.3.2 节 “地址屏蔽”。
TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 1111 1111 54, 111
LATG 4 LATG 3 LAT G2 LATG 1 LATG 0 00-x xxxx 54, 126
—LATE1LATE0xxxx x-xx 54, 121
(5)
LATA5 LATA4 LATA3 LATA2 LATA1 LATA0 xxxx xxxx 54, 111
POR/BOR
时的值
0000 0000 53, 233 0000 0000 53, 241 0000 0000 53, 239
---- ---- 53, 82
1111 111- 54, 124
xxxx xxx- 54, 124
详情请见
(页)
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 71
PIC18F85J90 系列
5-3 PIC18F85J90 系列寄存器文件汇总 (续)
寄存器名称
(2)
PORTJ
(2)
PORTH
PORTG RDPU REPU RJPU
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
RJ7 RJ6 RJ5 RJ4 RJ3 RJ2 RJ1 RJ0 xxxx xxxx
RH7 RH6 RH5 RH4 RH3 RH2 RH1 RH0 xxxx xxxx 54, 128
(2)
RG4 RG3 RG2 RG1 RG0 000x xxxx 54, 126
PORTF RF7 RF6 RF5 RF4 RF3 RF2 RF1
PORTE RE7 RE6 RE5 RE4 RE3
—RE1RE0xxxx x-xx 54, 121
POR/BOR
时的值
xxxx xxx- 54, 124
PORTD RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0 xxxx xxxx 54, 119 PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 xxxx xxxx 54, 117 PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0 xxxx xxxx 54, 114
PORTA RA7
SPBRGH1
(5)
EUSART 波特率发生器的高字节
BAUDCON1 ABDOVF RCMT
LCDDATA23
LCDDATA22 S39C3
(2)
S47C3 S46C3 S45C3 S44C3 S43C3 S42C3 S41C3 S40C3 xxxx xxxx 55, 161
(2)
RA6
S38C3
(5)
RA5RA4RA3RA2RA1RA0xx0x 0000 54, 111
0000 0000 55, 233
SCKP BRG16 WUE ABDEN 01-0 0-00 55, 232
(2)
S37C3
(2)
S36C3
(2)
S35C3
(2)
S34C3
(2)
S33C3
(2)
S32C3 xxxx xxxx 55, 161 LCDDATA21 S31C3 S30C3 S29C3 S28C3 S27C3 S26C3 S25C3 S24C3 xxxx xxxx 55, 161 LCDDATA20 S23C3 S22C3 S21C3 S20C3 S19C3 S18C3 S17C3 S16C3 xxxx xxxx 55, 161 LCDDATA19 S15C3 S14C3 S13C3 S12C3 S11C3 S10C3 S09C3 S08C3 xxxx xxxx 55, 161 LCDDATA18 S07C3 S06C3 S05C3 S04C3 S03C3 S02C3 S01C3 S00C3 xxxx xxxx 55, 161
LCDDATA17
LCDDATA16 S39C2
(2)
S47C2 S46C2 S45C2 S44C2 S43C2 S42C2 S41C2 S40C2 xxxx xxxx 55, 161
(2)
S38C2
(2)
S37C2
(2)
S36C2
(2)
S35C2
(2)
S34C2
(2)
S33C2
(2)
S32C2 xxxx xxxx 55, 161 LCDDATA15 S31C2 S30C2 S29C2 S28C2 S27C2 S26C2 S25C2 S24C2 xxxx xxxx 55, 161 LCDDATA14 S23C2 S22C2 S21C2 S20C2 S19C2 S18C2 S17C2 S16C2 xxxx xxxx 55, 161 LCDDATA13 S15C2 S14C2 S13C2 S12C2 S11C2 S10C2 S09C2 S08C2 xxxx xxxx 55, 161 LCDDATA12 S07C2 S06C2 S05C2 S04C2 S03C2 S02C2 S01C2 S00C2 xxxx xxxx 55, 161
LCDDATA11
LCDDATA10 S39C1
(2)
S47C1 S46C1 S45C1 S44C1 S43C1 S42C1 S41C1 S40C1 xxxx xxxx 55, 161
(2)
S38C1
(2)
S37C1
(2)
S36C1
(2)
S35C1
(2)
S34C1
(2)
S33C1
(2)
S32C1 xxxx xxxx 55, 161 LCDDATA9 S31C1 S30C1 S29C1 S28C1 S27C1 S26C1 S25C1 S24C1 xxxx xxxx 55, 161 LCDDATA8 S23C1 S22C1 S21C1 S20C1 S19C1 S18C1 S17C1 S16C1 xxxx xxxx 55, 161 LCDDATA7 S15C1 S14C1 S13C1 S12C1 S11C1 S10C1 S09C1 S08C1 xxxx xxxx 55, 161 LCDDATA6 S07C1 S06C1 S05C1 S04C1 S03C1 S02C1 S01C1 S00C1 xxxx xxxx 55, 161
LCDDATA5
CCPR1H
CCPR1L
CCP1CON
CCPR2H
CCPR2L
CCP2CON
SPBRG2
RCREG2
TXREG2
TXSTA2 CSRC TX9 TXEN SYNC
(2)
S47C0 S46C0 S45C0 S44C0 S43C0 S42C0 S41C0 S40C0 xxxx xxxx 55, 161
捕捉 / 比较 /PWM 寄存器 1 的高字节
捕捉 / 比较 /PWM 寄存器 1 的低字节
xxxx xxxx 55, 148 xxxx xxxx 55, 148
DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 --00 0000 55, 147
捕捉 / 比较 /PWM 寄存器 2 的高字节
捕捉 / 比较 /PWM 寄存器 2 的低字节
xxxx xxxx 55, 148 xxxx xxxx 56, 148
DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0 --00 0000 56, 147
AUSART 波特率发生器寄存器
AUSART 接收寄存器
AUSART 发送寄存器
0000 0000 56, 252 0000 0000 56, 257 0000 0000 56, 255
BRGH TRMT TX9D 0000 -010 56, 250
RCSTA2 SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 56, 251
图注: x = 未知, u = 不变, - = 未用, q = 值取决于具体条件, r = 保留 (不能修改) 注 1PC bit 21 仅在测试模式和串行编程模式下可用。
2: 这些寄存器和 / 或位仅在 80 引脚器件上可用;在其他器件上,它们未实现并读为 0。所示为 80 引脚器件的复位状态。 3: 当 MSSP 模块工作在 I
2
C™ 从动模式下时,这些位的其他名称和定义。详细信息,请参见第 16.4.3.2 节 “地址屏蔽”。
4: 只有在特定的振荡器配置中才可使用 PLLEN 位;否则,它被禁止并读为 0。详细信息,请参见第 2.4.3 节“PLL 倍频器”。 5: 仅当内部振荡器被选作默认时钟源 (FOSC2 配置位 = 0)时, RA6/RA7 及其相关的锁存和方向位才能被配置为端口引脚;否则,这些位将
被禁止且读为 0。
详情请见
(页)
54, 130
DS39770A_CN 72 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列

5.3.5 STATUS 寄存器

如寄存器 5-2 所示,STATUS 寄存器包含 ALU 的算术运 算状态。STATUS 寄存器与任何其他寄存器一样,可以 作为任何指令的操作数。如果一条影响 ZDC、C、OVN 位的指令以 STATUS 寄存器作为目标寄存器,则 会禁止对这 5 位进行写操作。
这些位根据器件逻辑来置 1 或清零。因此,当执行一条 把 STATUS 寄存器作为目标寄存器的指令后,运行结果 可能会与预想的不同。例如,CLRF STATUS 会将 Z 位 置 1,而保留其余位不变。然后读 STATUS 寄存器将得
到“000u u1uu”。因此,建议仅使用 BCFBSF SWAPFMOVFF和 MOVWF指令来改变 STATUS寄存器, 因为这些指令不会影响STATUS寄存器中的ZC、DC、 OV N 位。
关于其他不会影响状态位的指令,请参见表 23-2 和表 23-3 中的指令集汇总。
注: 在减法运算中,C 和 DC 位分别作为借位位
和半借位
位。
寄存器 5-2 STATUS 寄存器
U-0 U-0 U-0 R/W-x R/W-x R/W-x R/W-x R/W-x
—NOVZDC
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = POR 1 = 10 = 清零 x = 未知
bit 7-5
bit 4
bit 3
bit 2
bit 1
bit 0
未用:读为 0 N:负标志位
此位用于有符号的算术运算 (2 进制补码)。它可以表示结果是否为负 (ALU MSB = 1)。
1 = 结果为负 0 = 结果为正
OV:溢出标志位 此位用于有符号的算术运算 (2 进制补码)。表明运算结果溢出了 7 位二进制数的范围,溢出导致符
号位 (bit 7)发生改变。
1 = 有符号算术运算中发生溢出 (本次运算) 0 = 未发生溢出
Z:全零标志位
1 = 算术运算或逻辑运算的结果为零 0 = 算术运算或逻辑运算的结果不为零
(2)
(1)
DC:半进位 / 借位
用于 ADDWFADDLWSUBLW SUBWF 指令: 1 = 结果的第 4 个低位发生了进位
0 = 结果的第 4 个低位未发生进位
C:进位 / 借位位 用于 ADDWFADDLWSUBLW SUBWF 指令:
1 = 结果中最高位发生了进位 0 = 结果中最高位未发生进位
(1)
(2)
C
1: 对于借位
RLF)指令,此位来自源寄存器的 bit 4 bit 3
2: 对于借位
RLF)指令,此位来自源寄存器的最高位或最低位。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 73
,极性是相反的。减法是通过加上第二个操作数的 2 进制补码来执行的。对于移位 (RRF
,极性是相反的。减法是通过加上第二个操作数的 2 进制补码来执行的。对于移位 (RRF
PIC18F85J90 系列

5.4 数据寻址模式

注: 当使能 PIC18 扩展指令集时, PIC18 内核
指令集中某些指令的执行方式会发生改 变。更多信息,请参见第 5.6 节“数据存储 器和扩展指令集”。
程序存储器只能用一种方式寻址 (通过程序计数器), 而数据存储器空间可用多种方式寻址。大部分指令的寻 址模式都是固定的。其他指令可能使用最多三种模式, 根据它们所使用的操作数和是否使能了扩展指令集而 定。
这些寻址模式为:
固有寻址
立即数寻址
直接寻址
间接寻址
当使能了扩展指令集时 (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)进行间接寻址。这种操作允许自动递增、递减或 偏移指针,从而自动控制指针的值。它通过使用循环提 高代码执行效率,如例 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
DS39770A_CN 74 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列
5.4.3.1 FSR 寄存器和 INDF 操作数
间接寻址的核心是三组寄存器:FSR0FSR1 和 FSR2。 每组寄存器都含有一对 8 位寄存器:FSRnH FSRnLFSRnH 寄存器的高 4 位未使用,因此每对 FSR 只保存 一个 12 位值,从而可以线性寻址数据存储器的整个空 间。因此,FSR 寄存器对被用作数据存储器的地址指针。
间接寻址是通过一组间接文件操作数(INDF0INDF2) 完成的。这些操作数可被看作 “虚拟”寄存器:它们被 映射到 SFR 空间而不是通过物理方式实现的。对特定的
5-9 间接寻址
使用带有一个间接寻址寄存器作为
操作数的指令 ....
... 使用存储在与该寄存器相关联的
一对 FSR 中的 12 位地址 ....
xxxx1111 11001100
... 确定将在该操作中使用的数据存 储器单元。
在本例中,FSR1 寄存器对中的值为 FCCh。这意味着将把 FCCh 单元的 内容与 W 寄存器的内容相加,并将 结果存回 FCCh 单元中。
ADDWF, INDF1, 1
FSR1H:FSR1L
INDF 寄存器执行读或写操作实际上访问的是与之对应的
一对FSR 寄存器。例如,读INDF1 就是读 FSR1H:FSR1L 指向单元中的数据。使用 INDF 寄存器作为操作数的指令 实际上使用的是相应的 FSR 的内容,该内容为指向目标 地址的指针。INDF 操作数只是使用该指针的一种简便方 法。
由于间接寻址使用完整的 12 位地址,因此没有必要进 行数据 RAM 分区。所以 BSR 的当前内容和快速操作
RAM 位对于确定目标地址没有影响。
000h
Bank 0
100h
Bank 1
200h
300h
07
7
0
E00h
F00h
FFFh
Bank 2
Bank 3
Bank 13
Bank 14
Bank 15
数据存储器
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 75
PIC18F85J90 系列
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 寄存器中的值相加,并在操作中使
用得到的新值
在本文中使用 FSR 寄存器中的值 (不会更改此值)访 问 INDF 寄存器。同样,访问 PLUSW 寄存器是将 W 寄 存器中的值作为 FSR 的偏移量。该操作不会改变这两个 寄存器中的值,而访问其他虚拟寄存器均会更改FSR 寄 存器的值。
使用 POSTDECPOSTINC PREINC FSR 进行 操作会影响整对寄存器:即, FSRnL 寄存器从 FFh 00h 溢出并向 FSRnH 寄存器进位。但这些操作的结果 不会更改状态寄存器中的标志位(如 ZN 和 OV 等)。
PLUSW 寄存器可用于在数据存储器空间实现变址寻 址。通过控制 W 寄存器中的值,用户可以访问相对当前 指针地址有固定偏移量的地址单元。在某些应用中,该 功能可被用于在数据存储器内部实现某些强大的程序控 制结构,如软件堆栈。
5.4.3.3 通过 FSR 对其他 FSR 进行操作
在某些特殊情况下,间接寻址操作以其他FSR 或虚拟寄 存器作为目标。例如,使用 FSR 指向一个虚拟寄存器会 导致操作不成功。假设如下特殊情况:FSR0H:FSR0L 保存的是 INDF1 的地址 FE7h。尝试使用 INDF0 作为操 作数读取 INDF1 的值,将返回 00h。尝试使用 INDF0 作为操作数写入 INDF1,将会导致执行一条 NOP指令。
另一方面,使用虚拟寄存器对一对FSR 寄存器进行写操 作可能会产生与预期不同的结果。在这些情况下,会将 值写入一对 FSR 寄存器,但 FSR 不会有递增或递减。 因此,写入 INDF2 POSTDEC2 时会把同样的值写入 FSR2H:FSR2L
由于 FSR 是映射到 SFR 空间中的物理寄存器,所以可 以通过直接寻址来控制它们。用户在使用这些寄存器时 应该特别小心,尤其是在代码使用间接寻址的方式时。
同样,通常允许通过间接寻址对所有其他 SFR 进行操 作。用户在进行此类操作时应该特别小心,以免不小心 更改设置从而影响器件操作。

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

程序存储器的操作不受扩展指令集的影响。
使能扩展指令集将 5 条额外的双字命令添加到现有的 PIC18 指令集中:即 ADDFSRCALLW、MOVSF、MOVSSSUBFSR。这些指令如第 5.2.4 节 “双字指令”中所 述执行。
DS39770A_CN 76 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列

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

使能 PIC18 扩展指令集 (XINST 配置位 = 1)显著改变 了数据存储器及其寻址的某些方面。特别是许多 PIC18 内核指令使用快速操作存储区的方式有所不同。这是由 于扩展指令集引入了对数据存储器空间的新的寻址模 式。该模式还会更改使用 FSR2 及其相关操作数进行间 接寻址的方式。
同样需要了解哪些部分保持不变。数据存储器空间的大 小及其线性寻址方式都不会改变。 SFR 映射也保持不 变。PIC18 内核指令也仍然以直接和间接寻址模式进行 操作;固有和立即数指令操作照旧。 FSR0 FSR1 的 间接寻址方式也保持不变。

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

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

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

任何采用直接寻址模式的PIC18 内核指令均会受到立即 数变址寻址模式的潜在影响,包括所有针对字节和针对 位的指令,或标准 PIC18 指令集中几乎一半的指令。只 有使用固有或立即数寻址模式的指令不受影响。
此外,如果针对字节和针对位的指令使用快速操作存储 区 (快速操作 RAM 位为 1)或包含 60h 以上的文件地 址,它们也不受影响。符合这些条件的指令会像以前一 样执行。图 5-10 显示了当使能扩展指令集时,各种寻 址模式之间的对比。
那些想要在立即数变址寻址模式中使用针对位或针对字 节的指令的用户,应该注意此模式下汇编语法的改变。 在第 23.2.1 节 “扩展指令的语法”中对此进行了更详 细的说明。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 77
PIC18F85J90 系列
5-10 针对位和针对字节的指令的寻址方式对比 (使能了扩展指令集)
示例指令ADDWF, f, d, a (操作码 0010 01da ffff ffff)
a = 0 f 60h 时: 此指令以直接强制模式执行。
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
SFR
FFFh
数据存储器
DS39770A_CN 78 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列

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

使用立即数变址寻址模式能有效改变快速操作 RAM 低地 址单元 (00h 5Fh)的映射方式。此模式映射 Bank 0 的内容和由用户定义的、可位于数据存储器空间中任何 地方的 “窗口”内容,而不仅仅映射 Bank 0 底部的内 容。 FSR2 的值定义映射到窗口的地址的下边界,而上 边界则由 FSR2 95 5Fh)决定。地址为 5Fh 以上 的快速操作 RAM 的映射方法如前所述 (见第 5.3.2
“快速操作存储区”)。图 5-11 显示了在此寻址模式下
重新映射的快速操作存储区示例。
5-11 使用立即数变址寻址模式重新映射快速操作存储区
示例
ADDWF f, d, a
FSR2H:FSR2L = 120h
FSR2 指针 (120h)到 FSR2指针加05Fh(17Fh)
区域内的存储单元被映射 到快速操作 RAM 的底部
000h-05Fh)。
F60h FFFh 的特殊功 能寄存器被映射到 60h
FFh,和常规寻址一样。
Bank 0 中低于 5Fh 的地址
在该模式下不可用。它们 仍可通过 BSR 寻址。
000h
05Fh
100h 120h
17Fh
200h
F00h
F60h
FFFh
不能访问
Bank 0
窗口
Bank 1
Bank 2
Bank 14
Bank 15
SFR
数据存储器
快速操作存储区的重新映射 式。使用 BSR (快速操作 RAM 位为 1)的操作和以前 一样继续使用直接寻址模式。任何明确使用间接文件操 作数 (包括 FSR2)的间接或变址操作都将像标准间接 寻址一样操作。任何使用快速操作存储区的指令(包括 大于 05Fh 的寄存器地址)都将使用直接寻址和常规的 快速操作存储区映射。

5.6.4 立即数变址模式中的 BSR

尽管使能扩展指令集时会重新映射快速操作存储区,但 BSR 的操作不变。使用 BSR 选择数据存储区的直接寻 址操作方式和以前描述的相同。
适用于立即数变址寻址模
Bank 1“窗口”
SFR
快速操作存储区
00h
5Fh 60h
FFh
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 79
PIC18F85J90 系列
注:
DS39770A_CN 80 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列

6.0 闪存程序存储器

正常工作状态下,闪存程序存储器在整个 VDD 范围内都 是可读写可擦除的。
读程序存储器时,每次读取一个字节。写程序存储器 时,每次写入一个 64 字节的块。擦除程序存储器时,每 次擦除一个 1024 字节的块。用户代码不能执行批量擦 除操作。
在擦写程序存储器时,系统会停止取指令直到操作完 成。擦写期间不能访问该程序存储器,因此也就无法执 行代码。由内部编程定时器来终止程序存储器的擦写操 作。
写入程序存储器的值不一定非要是有效指令。执行存储 无效指令的程序存储器单元会导致执行 NOP

6-1 表读操作

6.1 表读与表写

为了读写程序存储器,有两个操作指令可供处理器在程 序存储器空间和数据 RAM 之间移动字节:
表读 (TBLRD
表写 (TBLWT
程序存储器空间为 16 位宽,而数据 RAM 空间为 8 位 宽。表读和表写操作通过一个 8 位寄存器 (TABLAT) 在这两个存储器空间之间传送数据。
表读操作从程序存储器获取数据并将其放入数据 RAM 空间。图 6-1 显示了程序存储器和数据 RAM 之间的一 次表读操作。
表写操作将数据存储器空间中的数据存入程序存储器的 保持寄存器。第 6.5 节 “写闪存程序存储器”详细介绍 了将保持寄存器内容写入程序存储器的过程。图 6-2 显 示了程序存储器和数据 RAM 之间的一次表写操作。
表操作以字节为单位。包含数据而非程序指令的表块不 需要按字对齐。因此,表块可以在任何字节地址开始和 结束。如果使用表写操作向程序存储器写入可执行代 码,程序指令必须按字对齐。
指令 TBLRD*
表指针
TBLPTRU
1: 表指针寄存器指向程序存储器中的某个字节。
(1)
TBLPTRH TBLPTRL
程序存储器
TBLPTR
程序存储器
表锁存器(8 位)
TAB LAT
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 81
PIC18F85J90 系列

6-2 表写操作

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

6.2 控制寄存器

TBLRD TBLWT 指令要用到几个控制寄存器。包括:
• EECON1 寄存器
• EECON2 寄存器
• TABLAT 寄存器
•TBLPTR寄存器

6.2.1 EECON1 EECON2 寄存器

EECON1 寄存器(寄存器 6-1)是存储器访问的控制寄
存器。EECON2 寄存器不是实际存在的寄存器,专用于 存储器的擦写操作。读 EECON2 将得到全 0
FREE 位置 1 时,允许对程序存储器进行擦除操作, 擦除操作由下一条 WR 命令启动。当 FREE 清零时,则 仅使能写操作。
WREN 位置 1 时,允许进行写操作。上电时,WREN 位被清零。WRERR 位在 WR 位置 1 时由硬件置 1,在 内部编程定时器超时、写操作结束时被清零。
注: 在正常操作期间,WRERR 读为 1。这表明
写操作被复位提早终止或进行了不合法的 写操作。
WR 控制位用于启动写操作。用软件只能将该位置 1 无法清零。在写操作完成后,由硬件将其清零。
DS39770A_CN 82 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列
寄存器 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
图注:
R = 可读位 W = 可写位 S = 仅置 1 位 (无法用软件清零)
-n = POR 1 = 10 = 清零 x = 未知
bit 7-5
bit 4
bit 3
bit 2
bit 1
bit 0
未用:读为 0 FREE:闪存行擦除使能位
1 = 在下一条 WR 命令时擦除 TBLPTR 指定的程序存储器行 (擦除操作完成后清零) 0 = 仅执行写操作
WRERR:闪存程序存储器错误标志位
1 = 写操作提早终止 (由于正常操作中自定时编程期间的任何复位,或不合法的写操作) 0 = 写操作完成
WREN:闪存程序存储器写使能位
1 = 允许对闪存程序存储器的写周期 0 = 禁止对闪存程序存储器的写周期
WR:写控制位
1 = 启动程序存储器的擦写周期
(操作是自定时的,一旦写操作完成,该位即由硬件清零。 用软件只能将WR位置 1,但不能清零。)
0 = 写周期完成 未用:读为 0
U = 未用位,读为 0
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 83
PIC18F85J90 系列

6.2.2 表锁存寄存器 (TABLAT

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

6.2.3 表指针寄存器 (TBLPTR

表指针 (TBLPTR)寄存器在程序存储器中以字节为单 位进行寻址。 TBLPTR 3 SFR 寄存器组成:表指 针最高字节、表指针高字节和表指针低字节
TBLPTRU:TBLPTRH:TBLPTRL)。 这 3 个寄存器合
起来组成一个 22 位宽的指针。其中低 21 位允许器件寻 址高达 2 MB 程序存储器空间。第 22 位则允许访问器件 ID、用户 ID 和配置位。
TBLRDTBLWT指令要使用表指针寄存器TBLPTR。这 些指令可以基于表操作以4种方法更新TBLPTR。表 6-1 列出了这些操作。这些操作只会影响 TBLPTR 的低 21 位。
6-1:执TBLRD 和 TBLWT 指令的表指针操作
示例 表指针操作
TBLRD* TBLWT*
TBLRD*+ TBLWT*+
TBLRD*­TBLWT*-
TBLRD+* TBLWT+*
不修改 TBLPTR
TBLPTR 在读 / 写后递增
TBLPTR 在读 / 写后递减
TBLPTR 在读 / 写前递增

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-3 基于操作的表指针范围
21 16 15 87 0
TBLPTRU
擦除TBLPTR<21:10>
表写TBLPTR<21:6>
TBLPTRH
表读TBLPTR<21:0>
TBLPTRL
DS39770A_CN 84 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列

6.3 读闪存程序存储器

TBLRD 指令用于从程序存储器获取数据并放入数据
RAM。表读操作每次从程序存储器读取一个字节。
TBLPTR 指向程序存储器空间的某个字节地址。执行
TBLRD 指令将把指向的字节装入 TABLAT。此外,还可 以自动修改 TBLPTR 以进行下一次表读操作。

6-4 读闪存程序存储器

程序存储器
(偶字节地址)
内部程序存储器通常以字为单位进行组织。由地址的最 低有效位来选择字的高字节或者低字节。图 6-4 显示了 内部程序存储器和 TA BLAT 之间的接口。
(奇字节地址)
指令寄存器
(IR)
FETCH

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
READ_WORD
MOVWF TBLPTRL
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
TBLPTR = xxxxx1
TBLRD
TBLPTR = xxxxx0
TABLAT
读寄存器
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 85
PIC18F85J90 系列

6.4 擦除闪存程序存储器

最小擦除块大小为 512 个字或 1024 字节。只有通过使 用外部编程器,或通过 ICSP 控制,才能够批量擦除更 大的程序存储器块。闪存阵列不支持字擦除。
当单片机本身开始一个擦除过程时,会擦除一个 1024 字 节的程序存储器块。高 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, 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. EECON2 写入 55h
5. EECON2 写入 0AAh
6. WR 位置 1。这将开始行擦除周期。
7. CPU 在 T
止工作。
8. 重新允许中断。
IW (见参数 D133A)擦除期间将会停
DS39770A_CN 86 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列

6.5 写闪存程序存储器

最小编程块大小为 32 个字或 64 字节。不支持字或字节 编程。
在内部使用表写命令将需要写入闪存存储器的内容装入 保持寄存器中。表写操作使用 64 个保持寄存器进行编 程。
由于表锁存器 (TABLAT)只是单字节寄存器,所以每 次编程操作, TBLWT 指令都必须执行 64 次。因为只写 保持寄存器,所以所有的表写操作实际上都是短写。更 新 64 个保持寄存器后,必须写 EECON1 寄存器,以便 启动长写周期开始编程操作。
对内部闪存编程要求使用长写操作。在长写周期中,指 令停止执行。由内部编程定时器终止长写操作。

6-5 对闪存程序存储器的表写操作

8
保持寄存器 保持寄存器
8 8 8
由片上定时器控制写入的时间。写入 / 擦除电压由片上 的电荷泵产生,该电荷泵可以工作在器件的电压范围 内。
1: 与早期的PIC®器件不同,PIC18F85J90 系列
TAB LAT
写寄存器
TBLPTR = xxxxx2
保持寄存器
器件在写操作发生后并不会复位保持寄存 器。必须在编程操作之前清零或改写保持寄 存器。
2: 为了保证程序存储器单元的耐擦写次数,
在两次擦除操作之间不应对某一闪存字节 编程多于一次。在第二次尝试改写目标行 的内容之前,需要对其执行行擦除或整个 存储器的擦除操作。
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. EECON2 写入 55h
10. EECON2 写入 0AAh
11. WR 位置 1。这将开始写周期。
12. CPU 在 T
止工作。
13. 重新允许中断。
14. 重复步骤 6 到 13,直到将所有 1024 个字节都写
入程序存储器中。
15. 验证存储器 (表读)。 例 6-3 给出了所需代码的示例。
注: 在将 WR 位置 1 前,表指针必须指向保持
IW (见参数 D133A)写入期间将会停
寄存器中的 64 个字节的地址范围内。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 87
PIC18F85J90 系列
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
DS39770A_CN 88 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列

6.5.2 写校验

根据具体应用,将写入存储器的值与原始值校验比对是 一个很好的编程习惯。在应用中,如果某些位的写次数 接近额定极限值,就应该采用写校验。

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

关于闪存程序存储器代码保护的详细信息,请参见 第 22.6 节 “程序校验和代码保护”。

6.5.3 意外终止写操作

如果由于意外事件 (如掉电或意外复位)终止了写操 作,应该对刚刚编程的存储器单元进行验证,如有必 要,还要重新进行编程。当写操作在正常操作过程中因
复位或 WDT 超时复位而中断时,用户可以检查
MCLR WRERR 位,并根据需要重写该单元。

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

名称
TBLPTRU
TBPLTRH
TBLPTRL
TAB LAT
INTCON
EECON2
EECON1 图注: — = 未用,读为 0。程序存储器访问期间不使用阴影单元。
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
—bit 21
程序存储器表指针高字节 (TBLPTR<15:8>) 程序存储器表指针低字节 (TBLPTR<7:0>) 程序存储器表锁存器
GIE/GIEH PEIE/GIEL
EEPROM 控制寄存器 2 (不是实际存在的寄存器)
FREE WRERR WREN WR —53
TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF 51
程序存储器表指针最高字节 (TBLPTR<20:16>
复位值 所在页
51
51
51
51
53
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 第 89
PIC18F85J90 系列
注:
DS39770A_CN 90 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列

7.0 8 x 8 硬件乘法器

7.1 简介

所有 PIC18 器件均包含一个 8 x 8 硬件乘法器(是 ALU 的一部分)。该乘法器可执行无符号运算并产生一个 16 位运算结果,该结果存储在一对乘积寄存器
PRODH:PRODL 中。该乘法器执行的运算不会影响 STATUS 寄存器中的任何标志。
通过硬件执行乘法运算只需要一个指令周期。硬件乘法 器具有更高的计算吞吐量并减少了乘法算法的代码长 度,从而可在许多先前仅能使用数字信号处理器的应用 中使用 PIC18 器件。表 7-1 给出了硬件和软件乘法运算 的比较,包括所需存储器空间和执行时间。

7.2 工作原理

7-1 给出了一个 8 x 8 无符号乘法运算的指令序列。当 已在 WREG 寄存器中装入了一个乘数时,实现该运算仅 需一条指令。
7-2 给出了一个 8 x 8 有符号乘法运算的指令序列。 要弄清乘数的符号位,必须检查每个乘数的最高有效位
MSb),并做相应的减法。

7-1 8 x 8 无符号乘法程序

MOVF ARG1, W ; MULWF ARG2 ; ARG1 * ARG2 ->
; PRODH:PRODL

7-2 8 x 8 有符号乘法程序

MOVF ARG1, W MULWF ARG2 ; ARG1 * ARG2 ->
; PRODH:PRODL BTFSC ARG2, SB ; Test Sign Bit SUBWF PRODH, F ; PRODH = PRODH
; - ARG1 MOVF ARG2, W BTFSC ARG1, SB ; Test Sign Bit SUBWF PRODH, F ; PRODH = PRODH
; - ARG2

7-1 各种乘法运算的性能比较

程序 乘法实现方法
8 x 8 无符号
8 x 8 有符号
16 x 16 无符号
16 x 16 有符号
无硬件乘法
硬件乘法
无硬件乘法
硬件乘法
无硬件乘法
硬件乘法
无硬件乘法
硬件乘法
程序 存储器 (字)
13 69 6.9 µs 27.6 µs 69 µs
1 1 100 ns 400 ns 1 µs
33 91 9.1 µs 36.4 µs 91 µs
6 6 600 ns 2.4 µs6 µs 21 242 24.2 µs 96.8 µs242 µs 28 28 2.8 µs11.2 µs 28 µs 52 254 25.4 µs 102.6 µs254 µs 35 40 4.0 µs 16.0 µs 40 µs
周期数
(最多)
40 MHz 10 MHz 4 MHz
时间
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 91
PIC18F85J90 系列
7-3 给出了一个16 x 16 无符号乘法运算的指令序列。 公式 7-1 为所使用的算法。32 位结果存储在 4 个寄存器
RES3:RES0)中。

公式 7-1 16 x 16 无符号乘法算法

RES3:RES0 = ARG1H:ARG1L ARG2H:ARG2L
= (ARG1H ARG2H 2
(ARG1H • ARG2L • 2 (ARG1L ARG2H 2 (ARG1L ARG2L)
16
) +
8
) +
8
) +

7-3 16 x 16 无符号乘法程序

MOVF ARG1L, W MULWF ARG2L ; ARG1L * ARG2L->
MOVFF PRODH, RES1 ; MOVFF PRODL, RES0 ;
;
MOVF ARG1H, W MULWF ARG2H ; ARG1H * ARG2H->
MOVFF PRODH, RES3 ; MOVFF PRODL, RES2 ;
;
MOVF ARG1L, W MULWF ARG2H ; ARG1L * ARG2H->
MOVF PRODL, W ; ADDWF RES1, F ; Add cross MOVF PRODH, W ; products ADDWFC RES2, F ; CLRF WREG ; ADDWFC RES3, F ;
;
MOVF ARG1H, W ; MULWF ARG2L ; ARG1H * ARG2L->
MOVF PRODL, W ; ADDWF RES1, F ; Add cross MOVF PRODH, W ; products ADDWFC RES2, F ; CLRF WREG ; ADDWFC RES3, F ;
7-4 给出了 16 x 16 有符号乘法运算的指令序列。 公式 7-2 为所使用的算法。 32 位结果存储在 4 个寄 存器 (RES3:RES0)中。要弄清乘数 的符号位,必 须检查每个乘数的最高有效位 (MSb),并做相应的 减法。
; PRODH:PRODL
; PRODH:PRODL
; PRODH:PRODL
; PRODH:PRODL

公式 7-2 16 x 16 有符号乘法算法

RES3:RES0= ARG1H:ARG1L ARG2H:ARG2L
= (ARG1H ARG2H 2
(ARG1H ARG2L 2 (ARG1L ARG2H 2 (ARG1L ARG2L) + (-1 ARG2H<7> ARG1H:ARG1L 2 (-1 ARG1H<7> ARG2H:ARG2L 2
16
) +
8
) +
8
) +
16
) +
16
)

7-4 16 x 16 有符号乘法程序

MOVF ARG1L, W MULWF ARG2L ; ARG1L * ARG2L ->
MOVFF PRODH, RES1 ; MOVFF PRODL, RES0 ;
;
MOVF ARG1H, W MULWF ARG2H ; ARG1H * ARG2H ->
MOVFF PRODH, RES3 ; MOVFF PRODL, RES2 ;
;
MOVF ARG1L, W MULWF ARG2H ; ARG1L * ARG2H ->
MOVF PRODL, W ; ADDWF RES1, F ; Add cross MOVF PRODH, W ; products ADDWFC RES2, F ; CLRF WREG ; ADDWFC RES3, F ;
;
MOVF ARG1H, W ; MULWF ARG2L ; ARG1H * ARG2L ->
MOVF PRODL, W ; ADDWF RES1, F ; Add cross MOVF PRODH, W ; products ADDWFC RES2, F ; CLRF WREG ; ADDWFC RES3, F ;
;
BTFSS ARG2H, 7 ; ARG2H:ARG2L neg? BRA SIGN_ARG1 ; no, check ARG1 MOVF ARG1L, W ; SUBWF RES2 ; MOVF ARG1H, W ;
SUBWFB RES3 ; SIGN_ARG1
BTFSS ARG1H, 7 ; ARG1H:ARG1L neg?
BRA CONT_CODE ; no, done
MOVF ARG2L, W ;
SUBWF RES2 ;
MOVF ARG2H, W ;
SUBWFB RES3 ; CONT_CODE :
; PRODH:PRODL
; PRODH:PRODL
; PRODH:PRODL
; PRODH:PRODL
DS39770A_CN 92 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列

8.0 中断

PIC18F85J90 系列器件具有多个中断源及一个中断优 先级功能,该功能可以给大多数中断源分配高优先级或 者低优先级。高优先级中断向量位于 0008h,低优先级 中断向量位于 0018h。高优先级中断事件可以中断正在 处理的低优先级中断。
13 个寄存器用于控制中断操作。这些寄存器是:
• RCON
•INTCON
• INTCON2
• INTCON3
•PIR1、 PIR2 和 PIR3
•PIE1、 PIE2 和 PIE3
•IPR1、 IPR2 和 IPR3
®
建议使用 MPLAB 些寄存器中的位。这使得汇编器 / 编译器能够自动识别 指定寄存器内的这些位。
通常,中断源有 3 个位用于控制其操作。这些位的功能 分别是:
标志位表明发生了中断事件
允许位允许程序跳转到中断向量地址处执行 (当 标志位置 1 时)
优先级位用于选择高优先级还是低优先级
通过将 IPEN 位(RCON<7>)置 1,可使能中断优先级 功能。当使能中断优先级时,有 2 个全局中断允许位。 将 GIEH 位(INTCON<7>)置 1,可允许所有优先级位 已置 1(高优先级)的中断。将 GIEL 位( INTCON<6>) 置 1,可允许所有优先级位已清零(低优先级)的中断。 当中断标志位、允许位及相应的全局中断允许位均被置
1 时,中断将根据设置的中断优先级立即跳转到地址 0008h 0018h。也可以通过设置相应的允许位来禁止
单个中断。
IDE 提供的 Microchip 头文件命名这
IPEN 位清零 (默认状态)时,便会禁止中断优先级 功能,此时中断是与 PIC 模式下,各个中断源的中断优先级位不起作用。 INTCON<6> PEIE 位,用于允许 / 禁止所有的外设中 断源。 INTCON<7> GIE 位,用于允许 / 禁止所有中 断源。在兼容模式下,所有中断均跳转到 0008h
当响应中断时,全局中断允许位被清零以禁止其他中 断。清零后的 IPEN 位就是 GIE 位。如果使用了中断优 先级,这个位就是 GIEH 位或者 GIEL 位。高优先级中 断源会中断低优先级中断。在处理高优先级中断时,低 优先级中断将不被响应。
返回地址被压入堆栈,中断向量地址(0008h 0018h) 被装入 PC。只要在中断服务程序中,就可以通过查询 中断标志位来确定中断源。在重新允许中断前,必须用 软件将中断标志位清零,以避免重复响应中断。
执行“从中断返回”指令 RETFIE 将退出中断程序,同 时将 GIE 位(若使用中断优先级则为 GIEH GIEL 位) 置 1,从而重新允许中断。
对于外部中断事件,例如 INT 引脚中断或者 PORTB 输 入电平变化中断,中断响应延时将会是 3 4 个指令周 期。对于单周期或双周期指令,中断响应延时完全相 同。各中断标志位的置 1 不受对应的中断允许位和 GIE 位状态的影响。
注: 当允许任何中断时,不要使用 MOVFF 指令
修改中断控制寄存器。否则可能导致单片 机操作出错。
®
中档系列器件兼容的。在兼容
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 93
PIC18F85J90 系列

8-1 PIC18F85J90 系列中断逻辑

产生高优先级中断
产生低优先级中断
PIR1<6:3,1:0>
PIE1<6:3,1:0>
IPR1<6:3,1:0>
PIR2<7:6,3:1>
PIE2<7:6,3:1>
IPR2<7:6,3:1>
PIR3<6:4,2:1>
PIE3<6:4,2:1>
IPR3<6:4,2:1>
PIR1<6:3,1:0> PIE1<6:3,1:0> IPR1<6:3,1:0>
PIR2<7:6,3:1> PIE2<7:6,3:1>
IPR2<7:6,3:1>
PIR3<6:4,2:1> PIE3<6:4,2:1>
IPR3<6:4,2:1>
IPEN
TMR0IF TMR0IE
TMR0IP
RBIF RBIE
RBIP
INT1IF INT1IE
INT1IP INT2IF
INT2IE INT2IP INT3IF
INT3IE INT3IP
TMR0IF TMR0IE TMR0IP
IPEN
PEIE/GIEL
RBIF RBIE RBIP
INT0IF INT0IE
INT1IF INT1IE INT1IP INT2IF INT2IE INT2IP INT3IF INT3IE INT3IP
IPEN
IPEN
GIE/GIEH PEIE/GIEL
如果处于空闲 或休眠模式则唤醒
CPU 的中断 向量单元
0008h
GIE/GIEH
CPU 的中断 向量单元
0018h
DS39770A_CN 94 超前信息  2007 Microchip Technology Inc.
PIC18F85J90 系列

8.1 INTCON 寄存器

INTCON 寄存器是可读写的寄存器,包含多个允许位、 优先级位和标志位。
注: 当中断条件产生时,不管相应的中断允许
位或全局中断允许位的状态如何,中断标 志位都将置 1。用户软件应在允许一个中断 前,先将相应的中断标志位清零。中断标志 位可由软件查询。

寄存器 8-1 INTCON:中断控制寄存器

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x
GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = POR 1 = 10 = 清零 x = 未知
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
GIE/GIEH:全局中断允许位 当
IPEN = 0 时: 1 = 允许所有未被屏蔽的中断 0 = 禁止所有中断
IPEN = 1 时:
1 = 允许所有高优先级中断 0 = 禁止所有中断
PEIE/GIEL外设中断允许位
IPEN = 0 时:
1 = 允许所有未被屏蔽的外设中断 0 = 禁止所有外设中断
IPEN = 1 时:
1 = 允许所有低优先级的外设中断 0 = 禁止所有低优先级的外设中断
TMR0IETMR0 溢出中断允许位
1 = 允许 TMR0 溢出中断 0 = 禁止 TMR0 溢出中断
INT0IEINT0 外部中断允许位
1 = 允许 INT0 外部中断 0 = 禁止 INT0 外部中断
RBIERB 端口电平变化中断允许位
1 = 允许 RB 端口电平变化中断 0 = 禁止 RB 端口电平变化中断
TMR0IFTMR0 溢出中断标志位
1 = TMR0 寄存器已溢出 (必须用软件清零) 0 = TMR0 寄存器未溢出
INT0IFINT0 外部中断标志位
1 = 发生了 INT0 外部中断 (必须用软件清零) 0 = 未发生 INT0 外部中断
RBIFRB 端口电平变化中断标志位
1 = RB7:RB4 引脚中至少有一个引脚的电平状态发生了改变 (必须用软件清零) 0 = RB7:RB4 引脚电平状态没有改变
(1)
(1)
1: 电平的不匹配会不断地将该位置 1。读取 PORTB 可以结束不匹配情况,并将该位清零。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 95
PIC18F85J90 系列

寄存器 8-2 INTCON2:中断控制寄存器 2

R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
RBPU
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = POR 1 = 10 = 清零 x = 未知
INTEDG0 INTEDG1 INTEDG2 INTEDG3 TMR0IP INT3IP RBIP
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
RBPU
PORTB 上拉使能位
1 = 禁止所有 PORTB 上拉 0 = 根据各端口锁存值使能 PORTB 上拉
INTEDG0:外部中断 0 边沿选择位
1 = 上升沿触发中断 0 = 下降沿触发中断
INTEDG1:外部中断 1 边沿选择位
1 = 上升沿触发中断 0 = 下降沿触发中断
INTEDG2:外部中断 2 边沿选择位
1 = 上升沿触发中断 0 = 下降沿触发中断
INTEDG3:外部中断 3 边沿选择位
1 = 上升沿触发中断 0 = 下降沿触发中断
TMR0IPTMR0 溢出中断优先级位
1 = 高优先级 0 = 低优先级
INT3IPINT3 外部中断优先级位
1 = 高优先级 0 = 低优先级
RBIPRB 端口电平变化中断优先级位
1 = 高优先级 0 = 低优先级
注: 当中断条件产生时,不管相应的中断允许位或全局中断允许位的状态如何,中断标志位都将置 1。用户软件
应在允许一个中断前,先将相应的中断标志位清零。中断标志位可由软件查询。
DS39770A_CN 96 超前信息 2007 Microchip Technology Inc.
PIC18F85J90 系列

寄存器 8-3 INTCON3:中断控制寄存器 3

R/W-1 R/W-1 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
INT2IP INT1IP INT3IE INT2IE INT1IE INT3IF INT2IF INT1IF
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = POR 1 = 10 = 清零 x = 未知
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
INT2IP:INT2 外部中断优先级位
1 = 高优先级 0 = 低优先级
INT1IPINT1 外部中断优先级位
1 = 高优先级 0 = 低优先级
INT3IEINT3 外部中断允许位
1 = 允许 INT3 外部中断 0 = 禁止 INT3 外部中断
INT2IEINT2 外部中断允许位
1 = 允许 INT2 外部中断 0 = 禁止 INT2 外部中断
INT1IEINT1 外部中断允许位
1 = 允许 INT1 外部中断 0 = 禁止 INT1 外部中断
INT3IFINT3 外部中断标志位
1 = 发生了 INT3 外部中断 (必须用软件清零) 0 = 未发生 INT3 外部中断
INT2IFINT2 外部中断标志位
1 = 发生了 INT2 外部中断 (必须用软件清零) 0 = 未发生 INT2 外部中断
INT1IFINT1 外部中断标志位
1 = 发生了 INT1 外部中断 (必须用软件清零) 0 = 未发生 INT1 外部中断
注: 当中断条件产生时,不管相应的中断允许位或全局中断允许位的状态如何,中断标志位都将置 1。用户软件
应在允许一个中断前,先将相应的中断标志位清零。中断标志位可由软件查询。
2007 Microchip Technology Inc. 超前信息 DS39770A_CN 97
PIC18F85J90 系列

8.2 PIR 寄存器

PIR 寄存器包含各外设中断的标志位。根据外设中断源 的数量,有三个外设中断请求(标志)寄存器(PIR1PIR2 PIR3)。
1: 当中断条件产生时,不管相应的中断允许
位或全局中断允许位 GIEINTCON<7>) 的状态如何,中断标志位都将置 1
2: 用户软件应在允许一个中断前和处理完一
次中断后,将相应的中断标志位清零。

寄存器 8-4 PIR1:外设中断请求 (标志)寄存器 1

U-0 R/W-0 R-0 R-0 R/W-0 U-0 R/W-0 R/W-0
ADIF RC1IF TX1IF SSPIF TMR2IF TMR1IF
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未用位,读为 0
-n = POR 1 = 10 = 清零 x = 未知
bit 7
bit 6
bit 5
bit 4
bit 3
bit 2
bit 1
bit 0
未用:读为 0 ADIFA/D 转换器中断标志位
1 = 一次 A/D 转换已完成 (必须用软件清零) 0 =A/D转换未完成
RC1IFEUSART 接收中断标志位
1 = EUSART 接收缓冲器 RCREG1 已满 (读取 RCREG1 时清零) 0 = EUSART 接收缓冲器为空
TX1IFEUSART 发送中断标志位
1 = EUSART 发送缓冲器 TXREG1 为空 (写入 TXREG1 时清零) 0 = EUSART 发送缓冲器已满
SSPIF:主控同步串口中断标志位
1 = 发送 / 接收已完成 (必须用软件清零) 0 = 等待发送 / 接收
未用:读为 0
TMR2IFTMR2 PR2 匹配中断标志位
1 =TMR2PR2 发生匹配 (必须用软件清零) 0 =TMR2PR2 未发生匹配
TMR1IFTMR1 溢出中断标志位
1 =TMR1寄存器已溢出 (必须用软件清零) 0 =TMR1寄存器未溢出
DS39770A_CN 98 超前信息  2007 Microchip Technology Inc.
Loading...