koorio.com
海量文库 文档专家
当前位置:首页 >> 电子/电路 >>

16F684中文说明书


PIC16F684 数据手册
采用纳瓦技术的 14 引脚 8 位 CMOS 闪存单片机

? 2008 Microchip Technology Inc.

DS41202F_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、 KEELOQ、 KEELOQ 徽标、 MPLAB、 PIC、 PICmicro、 PICSTART、 PRO MATE、 rfPIC 和 SmartShunt 均为 Microchip Technology Inc. 在美国和其他国家或地区的 注册商标。 FilterLab、 Linear Active Thermistor、 MXDEV、 MXLAB、 SEEVAL、SmartSensor 和 The Embedded Control Solutions Company 均为 Microchip Technology Inc. 在美国的注册商 标。 Analog-for-the-Digital Age、 Application Maestro、 CodeGuard、 dsPICDEM、 dsPICDEM.net、 dsPICworks、 dsSPEAK、 ECAN、 ECONOMONITOR、 FanSense、 In-Circuit Serial Programming、 ICSP、 ICEPIC、 Mindi、 MiWi、 MPASM、MPLAB Certified 徽标、MPLIB、MPLINK、 mTouch、 PICkit、 PICDEM、 PICDEM.net、 PICtail、 PIC32 徽标、 PowerCal、 PowerInfo、 PowerMate、 PowerTool、 REAL ICE、 rfLAB、 Select Mode、 Total Endurance、 UNI/O、 WiperLock 和 ZENA 均为 Microchip Technology Inc. 在 美国和其他国家或地区的商标。 SQTP 是 Microchip Technology Inc. 在美国的服务标记。 在此提及的所有其他商标均为各持有公司所有。 ? 2008, Microchip Technology Inc. 版权所有。

Microchip 位于美国亚利桑那州 Chandler 和 Tempe 与位于俄勒冈州 Gresham 的全球总部、设计和晶圆生产厂及位于美国加利福尼亚州和 印度的设计中心均通过了 ISO/TS-16949:2002 认证。公司在 PIC? MCU 与 dsPIC? DSC、 KEELOQ? 跳码器件、串行 EEPROM、单片机外 设、非易失性存储器和模拟产品方面的质量体系流程均符合 ISO/TS16949:2002。此外, Microchip 在开发系统的设计和生产方面的质量体 系也已通过了 ISO 9001:2000 认证。

DS41202F_CN 第 ii 页

? 2008 Microchip Technology Inc.

PIC16F684
采用纳瓦技术的 14 引脚 8 位 CMOS 闪存单片机
高性能的 RISC CPU:
? 仅需学习 35 条指令 - 除跳转指令外的所有指令都是单周期的 ? 工作速度: - 振荡器 / 时钟的输入频率为 DC~20 MHz - 指令周期为 DC~200 ns ? 中断功能 ? 8 级深硬件堆栈 ? 直接、间接和相对寻址模式

低功耗特性:
? 待机电流: - 电压为 2.0V 时,典型值 50 nA ? 工作电流: - 频率为 32 kHz、电压为 2.0V 时,典型值为 11 ?A - 频率为 1 MHz、电压为 2.0V 时,典型值为 220 ?A ? 看门狗定时器电流: - 电压为 2.0V 时,典型值为 1 ?A

特殊单片机特性:
? 高精度内部振荡器: - 出厂时精度校准为 ±1% (典型值) - 可用软件选择的频率范围为 125 kHz 到 8 MHz - 可用软件调节 - 双速启动模式 - 适用于关键应用的晶振故障检测 - 在节能模式下工作时可进行时钟模式切换 ? 软件可选的 31 kHz 内部振荡器 ? 节能的休眠模式 ? 宽工作电压范围 (2.0V 到 5.5V) ? 工业级和扩展级温度范围 ? 上电复位 (Power-on Reset, POR) ? 上电延时定时器 (Power-up Timer, PWRT)和 振荡器起振定时器 (Oscillator Start-up Timer, OST) ? 带软件控制选择的欠压复位 (Brown-out Reset, BOR) ? 带片上振荡器 (振荡器频率可由软件选择,当预 分频比最大时其标称值为 268 秒)并且可软件使 能的增强型低电流看门狗定时器 (Watchdog Timer , WDT) ? 带上拉的主复位,可复用为输入引脚 ? 可编程代码保护 ? 高耐用性闪存 /EEPROM 单元: - 闪存可经受 10 万次写操作 - EEPROM 可经受 100 万次写操作 - 闪存 / 数据 EEPROM 保存时间:>40 年

外设特性:
? 具有独立方向控制的 12 个 I/O 引脚: 高灌 / 拉电流可直接驱动 LED 引脚电平变化中断 独立的可编程弱上拉 超低功耗唤醒 (Ultra Low-power Wake-up, ULPWU) 模拟比较器模块,带有: - 两个模拟比较器 - 可编程的片上参考电压 (CVREF)模块 (为 VDD 的百分比) - 可从外部访问的比较器输入和输出 A/D 转换器: - 10 位分辨率和 8 路通道 Timer0:带 8 位可编程预分频器的 8 位定时器 / 计 数器 增强型 Timer1: -

?

? ? ?

- 带有预分频器的 16 位定时器 / 计数器 - 外部 Timer1 门控 (计数使能) - 如果选择了 INTOSC 模式, 在 LP 模式下可选择 使用 OSC1 和 OSC2 作为 Timer1 的振荡器 ? Timer2:带 8 位周期寄存器、预分频器和后分频器 的 8 位定时器 / 计数器 ? 增强型捕捉、比较和 PWM 模块: - 16 位捕捉模块,最大分辨率为 12.5 ns - 16 位比较模块,最大分辨率为 200 ns - 带有 1、 2 或 4 路输出通道,可编程 “死区时 间”的 10 位 PWM 模块,输出信号的最大频 率为 20 kHz ? 通过两个引脚实现的在线串行编程 (In-Circuit Serial Programming? , ICSP? )
10 位 A/D 转换器 (通道数) 8 8/16 位 定时器 2/1

程序存储器 器件 PIC16F684 闪存 (字数) 2048

数据存储器 SRAM (字节数) 128 EEPROM (字节数) 256 I/O 12

比较器 2

? 2008 Microchip Technology Inc.

DS41202F_CN 第 1 页

PIC16F684
14 引脚图 (PDIP、 SOIC 和 TSSOP)
VDD RA5/T1CKI/OSC1/CLKIN RA4/AN3/T1G/OSC2/CLKOUT RA3/MCLR/VPP RC5/CCP1/P1A RC4/C2OUT/P1B RC3/AN7/P1C 1 3 4 5 6 7 14 VSS RA0/AN0/C1IN+/ICSPDAT/ULPWU RA1/AN1/C1IN-/VREF/ICSPCLK RA2/AN2/T0CKI/INT/C1OUT RC0/AN4/C2IN+ RC1/AN5/C2INRC2/AN6/P1D

PIC16F684

2

13 12 11 10 9 8

表 1:
I/O RA0 RA1 RA2 RA3(1) RA4 RA5 RC0 RC1 RC2 RC3 RC4 RC5 — — 注 引脚 13 12 11 4 3 2 10 9 8 7 6 5 1 14

双列直插引脚汇总
模拟 AN0 AN1/VREF AN2 — AN3 — AN4 AN5 AN6 AN7 — — — — 比较器 C1IN+ C1INC1OUT — — — C2IN+ C2IN— — C2OUT — — — 定时器 — — T0CKI — T1G T1CKI — — — — — — — — CCP — — — — — — — — P1D P1C P1B CCP1/P1A — — 中断 IOC IOC INT/IOC IOC IOC IOC — — — — — — — — 上拉 Y Y Y Y(2) Y Y — — — — — — — — 基本 ICSPDAT/ULPWU ICSPCLK — MCLR/VPP OSC2/CLKOUT OSC1/CLKIN — — — — — — VDD VSS

1: 仅限输入。 2: 只在引脚配置为外部 MCLR 时。

DS41202F_CN 第 2 页

? 2008 Microchip Technology Inc.

PIC16F684
16 引脚图 (QFN)
VDD VSS 13 NC 15 NC 14

RA5/T1CKI/OSC1/CLKIN RA4/AN3/T1G/OSC2/CLKOUT RA3/MCLR/VPP RC5/CCP1/P1A

16

1 2 3 4 5 6 7

12

RA0/AN0/C1IN+/ICSPDAT/ULPWU RA1/AN1/C1IN-/VREF/ICSPCLK RA2/AN2/T0CKI/INT/C1OUT RC0/AN4/C2IN+

PIC16F684

11 10 9 8

RC3/AN7/P1C

RC2/AN6/P1D

表 2:
I/O RA0 RA1 RA2 RA3(1) RA4 RA5 RC0 RC1 RC2 RC3 RC4 RC5 — — 注 引脚 12 11 10 3 2 1 9 8 7 6 5 4 16 13

QFN 引脚汇总
模拟 AN0 AN1/VREF AN2 — AN3 — AN4 AN5 AN6 AN7 — — — — 比较器 C1IN+ C1INC1OUT — — — C2IN+ C2IN— — C2OUT — — — 定时器 — — T0CKI — T1G T1CKI — — — — — — — — CCP — — — — — — — — P1D P1C P1B CCP1/P1A — — 中断 IOC IOC INT/IOC IOC IOC IOC — — — — — — — — 上拉 Y Y Y Y(2) Y Y — — — — — — — — 基本 ICSPDAT/ULPWU ICSPCLK — MCLR/VPP OSC2/CLKOUT OSC1/CLKIN — — — — — — VDD VSS

1: 仅限输入。 2: 只在引脚配置为外部 MCLR 时。

? 2008 Microchip Technology Inc.

RC4/C2OUT/P1B

RC1/AN5/C2IN-

DS41202F_CN 第 3 页

PIC16F684
目录
1.0 器件概述 ....................................................................................................................................................................................... 5 2.0 存储器构成 ................................................................................................................................................................................... 7 3.0 振荡器模块 (带故障保护时钟监视器)...................................................................................................................................... 19 4.0 I/O 端口....................................................................................................................................................................................... 31 5.0 Timer0 模块 ................................................................................................................................................................................ 43 6.0 带门控的 Timer1 模块 ................................................................................................................................................................. 47 7.0 Timer2 模块 ................................................................................................................................................................................ 53 8.0 比较器模块 ................................................................................................................................................................................. 55 9.0 模拟数字转换器 (ADC)模块 ................................................................................................................................................... 65 10.0 数据 EEPROM 存储器 ................................................................................................................................................................ 75 11.0 增强型捕捉 / 比较 /PWM+ (带自动关闭和死区)模块............................................................................................................... 79 12.0 CPU 的特殊功能 ......................................................................................................................................................................... 97 13.0 指令集汇总 ............................................................................................................................................................................... 115 14.0 开发支持 ................................................................................................................................................................................... 125 15.0 电气特性 ................................................................................................................................................................................... 129 16.0 直流和交流特性图表 ................................................................................................................................................................. 151 17.0 封装信息 ................................................................................................................................................................................... 173 附录 A: 数据手册版本历史 .......................................................................................................................................................... 179 附录 B: 从其他 PIC? 器件移植 ................................................................................................................................................... 179 索引 ................................................................................................................................................................................................... 181 Microchip 网站 .................................................................................................................................................................................... 187 变更通知客户服务 .............................................................................................................................................................................. 187 客户支持 ............................................................................................................................................................................................. 187 读者反馈表 ......................................................................................................................................................................................... 188 产品标识体系...................................................................................................................................................................................... 189

致 客 户
我们旨在提供最佳文档供客户正确使用 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 上注册。

DS41202F_CN 第 4 页

? 2008 Microchip Technology Inc.

PIC16F684
1.0 器件概述
本数据手册涉及 PIC16F684 器件。 器件有 14 引脚 PDIP、 SOIC 和 TSSOP 以及 16 引脚 QFN 封装类型。 图 1-1 给出了 PIC18F1220/1320 器件的框图, 表 1-1 给 出了其引脚配置说明。

图 1-1:

PIC18F1220/1320 框图
INT 配置 13 闪存 2K X 14 程序 存储器 程序计数器 数据总线 8 PORTA
RA0 RA1

8 级深堆栈 (13 位)

RAM 128 字节 文件 寄存器 RAM 地址 9
地址 MUX

RA2 RA3 RA4 RA5

程序 总线

14 指令寄存器 直接寻址 7

8

间接 寻址

PORTC
RC0 RC1 RC2 RC3 RC4 RC5

FSR 寄存器 8 3 状态寄存器

上电延时 定时器 指令 译码和 控制 时序 发生 振荡器 起振定时器 上电 复位 看门狗 定时器 欠压 复位 8

MUX

ALU

OSC1/CLKIN OSC2/CLKOUT 内部 振荡 电路 T1G T1CKI Timer0 T0CKI

W 寄存器

CCP1/P1A P1B P1C P1D MCLR VDD

VSS

Timer1

Timer2

ECCP

模数转换器

2 个模拟比较器 和参考电压

EEDATA 256 字节 8 数据 EEPROM EEADDR

VREF

AN0 AN1 AN2 AN3 AN4 AN5 AN6 AN7 C1IN- C1IN+ C1OUT C2IN- C2IN+ C2OUT

? 2008 Microchip Technology Inc.

DS41202F_CN 第 5 页

PIC16F684
表 1-1: PIC16F684 引脚排列说明
名称 RA0/AN0/C1IN+/ICSPDAT/ULPWU 功能 RA0 AN0 C1IN+ ICSPDAT ULPWU RA1/AN1/C1IN-/VREF/ICSPCLK RA1 AN1 C1INVREF ICSPCLK RA2/AN2/T0CKI/INT/C1OUT RA2 AN2 T0CKI INT C1OUT RA3/MCLR/VPP RA3 MCLR VPP RA4/AN3/T1G/OSC2/CLKOUT RA4 AN3 T1G OSC2 CLKOUT RA5/T1CKI/OSC1/CLKIN RA5 T1CKI OSC1 CLKIN RC0/AN4/C2IN+ RC0 AN4 C2IN+ RC1/AN5/C2INRC1 AN5 C2INRC2/AN6/P1D RC2 AN6 P1D RC3/AN7/P1C RC3 AN7 P1C RC4/C2OUT/P1B RC4 C2OUT P1B RC5/CCP1/P1A RC5 CCP1 P1A VDD VSS 图注: VDD VSS AN = 模拟输入或输出 ST = 带 CMOS 电平的施密特触发器输入 输入 类型 TTL AN AN TTL AN TTL AN AN AN ST ST AN ST ST — TTL ST HV TTL AN ST — — TTL ST XTAL ST TTL AN AN TTL AN AN TTL AN — TTL AN — TTL — — TTL ST — 电源 电源 输出 类型 CMOS — — CMOS — CMOS — — — — CMOS — — — CMOS — — — CMOS — — XTAL CMOS CMOS — — — CMOS — — CMOS — — CMOS — CMOS CMOS — CMOS CMOS CMOS CMOS CMOS CMOS CMOS — — A/D 通道 0 输入 比较器 1 的正相输入 串行编程数据 I/O 超低功耗唤醒输入 具有可编程上拉和电平变化中断的 PORTA I/O A/D 通道 1 输入 比较器 1 的反相输入 A/D 外部参考电压 串行编程时钟 具有可编程上拉和电平变化中断的 PORTA I/O A/D 通道 2 输入 Timer0 时钟输入 外部中断 比较器 1 输出 带电平变化中断的 PORTA 输入 带有内部上拉的主复位 编程电压 具有可编程上拉和电平变化中断的 PORTA I/O A/D 通道 3 输入 Timer1 门控 (计数使能) 晶振 / 谐振器 FOSC/4 输出 具有可编程上拉和电平变化中断的 PORTA I/O Timer1 时钟 晶振 / 谐振器 外部时钟输入 /RC 振荡器连接 PORTC I/O A/D 通道 4 输入 比较器 2 的正相输入 PORTC I/O A/D 通道 5 输入 比较器 2 的反相输入 PORTC I/O A/D 通道 6 输入 PWM 输出 PORTC I/O A/D 通道 7 输入 PWM 输出 PORTC I/O 比较器 2 输出 PWM 输出 PORTC I/O 捕捉输入 / 比较输出 PWM 输出 正电源端 接地参考端 HV = 高压 XTAL = 晶体 说明 具有可编程上拉和电平变化中断的 PORTA I/O

CMOS = CMOS 兼容输入或输出 TTL = TTL 兼容输出

DS41202F_CN 第 6 页

? 2008 Microchip Technology Inc.

PIC16F684
2.0
2.1

存储器构成
程序存储器构成

2.2

数据存储器构成

PIC16F684 具有一个 13 位程序计数器, 可以对 8K x 14 的程序存储空间进行寻址。 而 PIC16F684 仅在物理上 实现了第一个 2K x 14 (0000h-07FFh)的存储空间。 访问该边界以外的单元将导致实际访问存储器的第一个 2K x 14 存储空间。 复位向量地址为 0000h,中断向量 地址为 0004h (见图 2-1) 。

图 2-1:

PIC16F684 程序存储器映射和堆栈
PC<12:0>

数据存储器 (见图 2-2)被分为两个存储区 (bank) , 其中包含通用寄存器 (General Purpose Register, GPR)和特殊功能寄存器(Special Function Register, SFR) 。特殊功能寄存器位于每个存储区开头的 32 个单 元。通用寄存器位于 Bank 0 中的 20h-7Fh 和 Bank 1 中 的 A0h-BFh 寄存器单元中,它们以静态 RAM 的方式实 现。 Bank 1 中的寄存器单元 F0h-FFh 指向 Bank 0 中 的地址单元 70h-7Fh。所有其他的 RAM 均未实现,读 取它们时将返回 0。STATUS 寄存器的 RP0 位为存储区 选择位。 0 →选定 Bank 0 1 →选定 Bank 1

CALL, RETURN RETFIE, RETLW 1 级堆栈 2 级堆栈

13

注:

STATUS 寄存器中的 IRP 和 RP1 位为保留 位并应始终保持为 0。

8 级堆栈 复位向量

0000h

中断向量

0004h 0005h

片上程序 存储器 07FFh 0800h 回到 0000h-07FFh 1FFFh

? 2008 Microchip Technology Inc.

DS41202F_CN 第 7 页

PIC16F684
2.2.1 通用文件寄存器 图 2-2: PIC16F684 的数据存储器映射
寄存器 地址 间接寻址 (1) TMR0 PCL STATUS FSR PORTA PORTC 00h 01h 02h 03h 04h 05h 06h 07h 08h 09h PCLATH INTCON PIR1 TMR1L TMR1H T1CON TMR2 T2CON CCPR1L CCPR1H CCP1CON PWM1CON ECCPAS WDTCON CMCON0 CMCON1 0Ah 0Bh 0Ch 0Dh 0Eh 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh ADRESH ADCON0 1Eh 1Fh 20h VRCON EEDAT EEADR EECON1 EECON2(1) ADRESL ADCON1 通用寄存器 32 字节 WPUA IOCA PCON OSCCON OSCTUNE ANSEL PR2 PCLATH INTCON PIE1 TRISC 间接寻址 (1) OPTION_REG PCL STATUS FSR TRISA 寄存器 地址 80h 81h 82h 83h 84h 85h 86h 87h 88h 89h 8Ah 8Bh 8Ch 8Dh 8Eh 8Fh 90h 91h 92h 93h 94h 95h 96h 97h 98h 99h 9Ah 9Bh 9Ch 9Dh 9Eh 9Fh A0h

在 PIC16F684 中通用寄存器是按 128 x 8 的形式实现 的。 可直接访 问每个 寄存器或 通过文 件选择寄 存器 (File Select Register,FSR)间接访问每个存储器(见 第 2.4 节 “间接寻址、 INDF 和 FSR 寄存器” ) 。

2.2.2

特殊功能寄存器

特殊功能寄存器是 CPU 和外设模块用来控制所需的器 件操作的寄存器 (见表 2-1) 。 这些寄存器都实现为静 态 RAM。 特殊功能寄存器可分为两类:内核与外设。本章仅讲述 与“内核”有关的特殊功能寄存器。那些与外设功能部 件的操作有关的特殊功能寄存器将在相应的外设功能部 件章节中讲述。

BFh 通用 寄存器 96 字节

6Fh 70h 7Fh Bank 0

访问 70h-7Fh Bank 1

F0h FFh

未实现的数据存储单元,读为 0。 注 1: 这不是物理寄存器。

DS41202F_CN 第 8 页

? 2008 Microchip Technology Inc.

PIC16F684
表 2-1:
地址 Bank 0 00h 01h 02h 03h 04h 05h 06h 07h 08h 09h 0Ah 0Bh 0Ch 0Dh 0Eh 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh INDF TMR0 PCL STATUS FSR PORTA(2) — PORTC(2) — — PCLATH INTCON PIR1 — TMR1L TMR1H T1CON TMR2 T2CON CCPR1L CCPR1H CCP1CON PWM1CON ECCPAS WDTCON CMCON0 CMCON1 — — — ADRESH ADCON0 使用 FSR 的内容对数据存储器进行寻址来寻址此单元 (不是物理寄存器) Timer0 模块寄存器 程序计数器 (PC)的低字节 IRP(1) RP1(1) RP0 RA5 RC5 TO RA4 RC4 PD RA3 RC3 Z RA2 RC2 DC RA1 RC1 C RA0 RC0 间接数据存储器地址指针 - 未实现 - 未实现 未实现 - GIE EEIF 未实现 16 位 TMR1 低字节的保持寄存器 16 位 TMR1 高字节的保持寄存器 T1GINV TMR1GE TOUTPS3 T1CKPS1 TOUTPS2 T1CKPS0 TOUTPS1 T1OSCEN TOUTPS0 T1SYNC TMR2ON TMR1CS T2CKPS1 TMR1ON T2CKPS0 - PEIE ADIF - T0IE CCP1IF 程序计数器高 5 位的写缓冲器 INTE C2IF RAIE C1IF T0IF OSFIF INTF TMR2IF RAIF TMR1IF - - xxxx xxxx xxxx xxxx 0000 0000 0001 1xxx xxxx xxxx --x0 x000 — --xx 0000 — — ---0 0000 0000 0000 0000 0000 — xxxx xxxx xxxx xxxx 0000 0000 0000 0000 -000 0000 XXXX XXXX XXXX XXXX DC1B0 PDC4 ECCPAS0 WDTPS3 C1INV — CCP1M3 PDC3 PSSAC1 WDTPS2 CIS — CCP1M2 PDC2 PSSAC0 WDTPS1 CM2 — CCP1M1 PDC1 PSSBD1 WDTPS0 CM1 T1GSS CCP1M0 PDC0 PSSBD0 SWDTEN CM0 C2SYNC 0000 0000 0000 0000 0000 0000 17, 104 43, 104 17, 104 11, 104 17, 104 31, 104 — 40, 104 — — 17, 104 13, 104 15, 104 — 47, 104 47, 104 50, 104 53, 104 54, 104 80, 104 80, 104 79, 104 96, 104 93, 104 名称

PIC16F684 特殊功能寄存器汇总, BANK 0
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR 和 BOR 的值 页

Timer2 模块寄存器 -

捕捉 / 比较 /PWM 寄存器 1 的低字节 捕捉 / 比较 /PWM 寄存器 1 的高字节 P1M1 PRSEN ECCPASE — C2OUT — 未实现 未实现 未实现 左对齐格式下 A/D 结果的高 8 位或右对齐格式下 A/D 结果的高 2 位 ADFM VCFG — CHS2 CHS1 CHS0 GO/DONE ADON P1M0 PDC6 ECCPAS2 — C1OUT — DC1B1 PDC5 ECCPAS1 — C2INV —

---0 1000 111, 104 0000 0000 ---- --10 — — — xxxx xxxx 00-0 0000 61, 104 62, 104 — — — 71, 104 70, 104

图注: 注 1: 2:

– = 未实现单元读为 0, u = 不变, x = 未知, q = 取值视情况而定,阴影 = 未实现 IRP 和 RP1 位被保留,应始终保持这两个位清零。 由 ANSEL 寄存器控制的具有模拟功能的端口引脚在复位后立即读为 0,尽管数据锁存器未定义 (POR)或不变 (其他复位)也是如此。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 9 页

PIC16F684
表 2-2:
地址 Bank 1 80h 81h 82h 83h 84h 85h 86h 87h 88h 89h 8Ah 8Bh 8Ch 8Dh 8Eh 8Fh 90h 91h 92h 93h 94h 95h 96h 97h 98h 99h 9Ah 9Bh 9Ch 9Dh 9Eh 9Fh INDF OPTION_REG PCL STATUS FSR TRISA — TRISC — — PCLATH INTCON PIE1 — PCON OSCCON OSCTUNE ANSEL PR2 — — WPUA(3) IOCA — — VRCON EEDAT EEADR EECON1 EECON2 ADRESL ADCON1 使用 FSR 的内容对数据存储器进行寻址来寻址此单元 (不是物理寄存器) RAPU IRP(1) — 未实现 — 未实现 未实现 — GIE EEIE 未实现 — — — ANS7 — IRCF2 — ANS6 ULPWUE IRCF1 — ANS5 SBOREN IRCF0 TUN4 ANS4 — OSTS(2) TUN3 ANS3 — HTS TUN2 ANS2 POR LTS TUN1 ANS1 BOR SCS TUN0 ANS0 — PEIE ADIE — T0IE CCP1IE Write Buffer for upper 5 bits of Program Counter INTE C2IE RAIE C1IE T0IF OSFIE INTF TMR2IE RAIF TMR1IE — TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 INTEDG RP1(1) — T0CS RP0 TRISA5 T0SE TO TRISA4 PSA PD TRISA3 PS2 Z TRISA2 PS1 DC TRISA1 PS0 C TRISA0 程序计数器 (PC)的低字节 间接数据存储器地址指针 xxxx xxxx 17, 104 1111 1111 12, 104 0000 0000 17, 104 0001 1xxx 11, 104 xxxx xxxx 17, 104 --11 1111 31, 104 — — — — — — 名称

PIC16F684 特殊功能寄存器汇总, BANK 1
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR 和 BOR 的值 页

--11 1111 40, 104

---0 0000 17, 104 0000 0000 13, 104 0000 0000 14, 104 — —

--01 --qq 16, 104 -110 x000 20, 104 ---0 0000 24, 105 1111 1111 32, 105 1111 1111 53, 105 — — — —

Timer2 模块周期寄存器 未实现 未实现 — — 未实现 未实现 VREN EEDAT7 EEADR7 — — EEDAT6 EEADR6 — VRR EEDAT5 EEADR5 — — EEDAT4 EEADR4 — VR3 EEDAT3 EEADR3 WRERR VR2 EEDAT2 EEADR2 WREN VR1 EEDAT1 EEADR1 WR VR0 EEDAT0 EEADR0 RD — — WPUA5 IOCA5 WPUA4 IOCA4 — IOCA3 WPUA2 IOCA2 WPUA1 IOCA1 WPUA0 IOCA0

--11 -111

32,
105

--00 0000 33, 105 — — — —

0-0- 0000 63, 105 0000 0000 75, 105 0000 0000 75, 105 ---- x000 76, 105 ---- ---- 76, 105 xxxx xxxx 71, 105

EEPROM 控制寄存器 2 (非物理寄存器) 左对齐格式下 A/D 结果的低 2 位或右对齐格式下 A/D 结果的低 8 位 — ADCS2 ADCS1 ADCS0 — — — —

-000 ---- 70, 105

图注: 注 1: 2: 3:

– = 未实现单元读为 0, u = 不变, x = 未知, q = 取值视情况而定,阴影 = 未实现 IRP 和 RP1 位被保留,应始终保持这两个位清零。 OSCCON 寄存器的 OSTS 位复位为 0,带双速启动且 LP、 HS 或 XT 被选定为振荡器。 配置字寄存器中的 MCLRE 为 1 时 RA3 上拉使能。

DS41202F_CN 第 10 页

? 2008 Microchip Technology Inc.

PIC16F684
2.2.2.1 状态寄存器
如寄存器 2-1 所示,状态 (STATUS)寄存器包含: ? ALU 的算术运算状态 ? 复位状态 ? 数据存储器 (SRAM)的存储区选择位 和其他寄存器一样,状态寄存器也可以作为任何指令的 目标寄存器。 如果一条影响 Z、 DC 或 C 位的指令以状 态寄存器作为目标寄存器,将禁止写这三位。根据器件 逻辑,这些位会被置 1 或清零。 此外,也不能写 TO 和 PD 位。因此,当执行一条把状态寄存器作为目标寄存 器的指令后,状态寄存器的结果可能和预想的不一样。 例如,执行 CLRF STATUS 指令会清零该寄存器的高 3 位并将 Z 位置 1。 从而使状态寄存器的值为 “000u u1uu” (其中 u 表示不变) 。 因此,建议仅使用 BCF、 BSF、 SWAPF 和 MOVWF 指令 来改变状态寄存器,因为这些指令不影响任何状态位。 欲知其他不会影响任何状态位的指令, 请参见第 13.0 节 “指令集汇总” 。 注 1: PIC16F684 不使用 STATUS 寄存器的 IRP 和 RP1 位, 并且应该保持这两位清零。建 议不要使用这些位,因为这可能会影响未 来产品的向上兼容性。 2: 在减法运算中, C 和 DC 位分别作为借位 和半借位标志位。具体示例请参见 SUBLW 和 SUBWF 指令。

寄存器 2-1:
保留 IRP bit 7 图注: R = 可读位 -n = POR 时的值 bit 7 bit 6 bit 5

STATUS:状态寄存器
保留 RP1 R/W-0 RP0 R-1 TO R-1 PD R/W-x Z R/W-x DC R/W-x C bit 0

W = 可写位 1=置1

U = 未实现位,读为 0 0 = 清零 x = 未知

IRP:此位保留,并且应保持为 0 RP1:此位保留,并且应保持为 0 RP0:寄存器存储区选择位 (用于直接寻址) 1 = Bank 1 (80h - FFh) 0 = Bank 0 (00h - 7Fh) TO:超时状态位 1 = 上电后,执行了 CLRWDT 指令或 SLEEP 指令 0 = 发生 WDT 超时溢出 PD:掉电标志位 1 = 上电复位后或执行了 CLRWDT 指令 0 = 执行了 SLEEP 指令 Z:零标志位 1 = 算术运算或逻辑运算的结果为零 0 = 算术运算或逻辑运算的结果不为零 DC:半进位 / 借位位 (ADDWF、 ADDLW、 UBLW 和 SUBWF 指令) 。对于借位,极性是相反的。 1 = 结果的第 4 低位向高位发生了进位 0 = 结果的第 4 低位未向高位发生进位 C:进位 / 借位位 (1) (ADDWF、 ADDLW、 SUBLW 和 SUBWF 指令) 1 = 结果的最高位发生了进位 0 = 结果的最高位未发生进位 1: 借位的极性是相反的。减法是通过加上第二个操作数的二进制补码 (Two’s Complement)来实现的。对于移 位指令 (RRF 和 RLF) ,此位的值来自源寄存器的最高位或最低位。

bit 4

bit 3

bit 2

bit 1

bit 0



? 2008 Microchip Technology Inc.

DS41202F_CN 第 11 页

PIC16F684
2.2.2.2 选项寄存器
注: 要为 Timer0 指定 1:1 的预分频比,应将 OPTION 寄存器的 PSA 位置 1,以将预分频 器分配给 WDT。请参见第 5.1.3 节 “软件可 编程预分频器” 。 选项 (OPTION)寄存器是可读写的寄存器,包含可对 以下各项进行配置的各种配置位: ? Timer0/WDT 预分频器 ? 外部 RA2/INT 中断 ? Timer0 ? PORTA 上的弱上拉

寄存器 2-2:
R/W-1 RAPU bit 7 图注: R = 可读位 -n = POR 时的值 bit 7

OPTION_REG:选项寄存器
R/W-1 INTEDG R/W-1 T0CS R/W-1 T0SE R/W-1 PSA R/W-1 PS2 R/W-1 PS1 R/W-1 PS0 bit 0

W = 可写位 1=置1

U = 未实现位,读为 0 0 = 清零 x = 未知

RAPU:PORTA 上拉使能位 1 = 禁止 PORTA 上拉 0 = 由各个端口锁存值使能 PORTA 上拉 INTEDG:中断边沿选择位 1 = 由 RA2/INT 引脚的上升沿触发中断 0 = 由 RA2/INT 引脚的下降沿触发中断 T0CS:TMR0 时钟源选择位 1 = RA2/T0CKI 引脚上信号的跳变 0 = 内部指令周期时钟 (FOSC/4) T0SE:TMR0 时钟源边沿选择位 1 = 在 RA2/T0CKI 引脚电平发生由高到低的跳变时递增 0 = 在 RA2/T0CKI 引脚电平发生由低到高的跳变时递增 PSA:预分频器分配位 1 = 将预分频器分配给 WDT 0 = 将预分频器分配给 Timer0 模块 PS<2:0>:预分频比选择位
位值 000 001 010 011 100 101 110 111 TIMER0 分频比 WDT 分频比 1:2 1:4 1:8 1 : 16 1 : 32 1 : 64 1 : 128 1 : 256 1:1 1:2 1:4 1:8 1 : 16 1 : 32 1 : 64 1 : 128

bit 6

bit 5

bit 4

bit 3

bit 2-0

DS41202F_CN 第 12 页

? 2008 Microchip Technology Inc.

PIC16F684
2.2.2.3 INTCON 寄存器
注: 当有中断条件产生时,不管相应的中断允 许位或 INTCON 寄存器的全局允许位 GIE 状态如何, 中断标志位都将置 1。 用户软件 应该在允许中断之前确保将相应的中断标 志位清零。 INTCON 寄存器是可读写的寄存器, 包含 TMR0 寄存器 溢出、 PORTA 电平变化和外部 RA2/INT 引脚中断的各 种允许和标志位。

寄存器 2-3:
R/W-0 GIE bit 7 图注: R = 可读位 -n = POR 时的值 bit 7

INTCON:中断控制寄存器
R/W-0 PEIE R/W-0 T0IE R/W-0 INTE R/W-0 RAIE R/W-0 T0IF R/W-0 INTF R/W-0 RAIF bit 0

W = 可写位 1=置1

U = 未实现位,读为 0 0 = 清零 x = 未知

GIE:全局中断允许位 1 = 允许所有未屏蔽的中断 0 = 禁止所有中断 PEIE:外设中断允许位 1 = 允许所有未屏蔽的外设中断 0 = 禁止所有外设中断 T0IE:Timer0 溢出中断允许位 1 = 允许 Timer0 中断 0 = 禁止 Timer0 中断 INTE:RA2/INT 外部中断允许位 1 = 允许 RA2/INT 外部中断 0 = 禁止 RA2/INT 外部中断 RAIE:PORTA 电平变化中断允许位 (1) 1 = 允许 PORTA 电平变化中断 0 = 禁止 PORTA 电平变化中断 T0IF:Timer0 溢出中断标志位 (2) 1 = Timer0 寄存器已经溢出 (必须用软件清零) 0 = Timer0 寄存器没有溢出 INTF:RA2/INT 外部中断标志位 1 = 发生了 RA2/INT 外部中断 (必须用软件清零) 0 = 未发生 RA2/INT 外部中断 RAIF:PORTA 电平变化中断标志位 1 = 至少一个 PORTA <5:0> 引脚的电平状态发生了改变 (必须用软件清零) 0 = 没有一个 PORTA <5:0> 引脚的电平状态发生改变 1: 必须同时使能 IOCA 寄存器。 2: 当 TMR0 计满回零时, T0IF 位置 1。复位时 TMR0 的状态不变,它应该在清零 T0IF 位之前被初始化。

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0



? 2008 Microchip Technology Inc.

DS41202F_CN 第 13 页

PIC16F684
2.2.2.4 PIE1 寄存器
注: 要 允 许 任 何 一 个 外 设 中 断,必 须 将 INTCON 寄存器的 PEIE 位置 1。 PIE1 寄存器包含外设中断允许位,如寄存器 2-4 所示。

寄存器 2-4:
R/W-0 EEIE
bit 7

PIE1:外设中断允许寄存器 1
R/W-0 ADIE R/W-0 CCP1IE R/W-0 C2IE R/W-0 C1IE R/W-0 OSFIE R/W-0 TMR2IE R/W-0 TMR1IE bit 0

图注: R = 可读位 -n = POR 时的值 bit 7 W = 可写位 1=置1 U = 未实现位,读为 0 0 = 清零 x = 未知

EEIE:EE 写完成中断允许位 1 = 允许 EE 写完成中断 0 = 禁止 EE 写完成中断 ADIE:A/D 转换器中断允许位 1 = 允许 A/D 转换器中断 0 = 禁止 A/D 转换器中断 CCP1IE:CCP1 中断允许位 1 = 允许 CCP1 中断 0 = 禁止 CCP1 中断 C2IE:比较器 2 中断允许位 1 = 允许比较器 2 中断 0 = 禁止比较器 2 中断 C1IE:比较器 1 中断允许位 1 = 允许比较器 1 中断 0 = 禁止比较器 1 中断 OSFIE:振荡器故障中断允许位 1 = 允许振荡器故障中断 0 = 禁止振荡器故障中断 TMR2IE:Timer2 与 PR2 匹配中断允许位 1 = 允许 Timer2 与 PR2 匹配中断 0 = 禁止 Timer2 与 PR2 匹配中断 TMR1IE:Timer1 溢出中断允许位 1 = 允许 Timer1 溢出中断 0 = 禁止 Timer1 溢出中断

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

DS41202F_CN 第 14 页

? 2008 Microchip Technology Inc.

PIC16F684
2.2.2.5 PIR1 寄存器
注: 当有中断条件产生时,不管相应的中断允 许位或 INTCON 寄存器的全局允许位 GIE 状态如何,中断标志位都将置 1。用户软件 应该在允许中断之前确保将相应的中断标 志位清零。 PIR1 寄存器包含外设中断标志位,如寄存器 2-5 所示。

寄存器 2-5:
R/W-0 EEIF bit 7 图注: R = 可读位 -n = POR 时的值 bit 7

PIR1:外设中断请求寄存器 1
R/W-0 ADIF R/W-0 CCP1IF R/W-0 C2IF R/W-0 C1IF R/W-0 OSFIF R/W-0 TMR2IF R/W-0 TMR1IF bit 0

W = 可写位 1=置1

U = 未实现位,读为 0 0 = 清零 x = 未知

EEIF:EEPROM 写操作中断标志位 1 = 写操作完成 (必须用软件清零) 0 = 写操作尚未完成或尚未启动 ADIF: A/D 中断标志位 1 = A/D 转换完成 0 = A/D 转换尚未完成或尚未启动 CCP1IF:CCP1 中断标志位 捕捉模式: 1 = 发生了 TMR1 寄存器捕捉 (必须用软件清零) 0 = 未发生 TMR1 寄存器捕捉 比较模式: 1 = 发生了 TMR1 寄存器比较匹配 (必须用软件清零) 0 = 未发生 TMR1 寄存器比较匹配 PWM 模式: 在此模式下未使用 C2IF:比较器 2 中断标志位 1 = 比较器 2 输出发生了改变 (必须用软件请零) 0 = 比较器 2 输出未发生改变 C1IF:比较器 1 中断标志位 1 = 比较器 1 输出发生了改变 (必须用软件请零) 0 = 比较器 1 输出未发生改变 OSFIF:振荡器故障中断标志位 1 = 系统振荡器发生故障,时钟输入切换为 INTOSC (必须用软件清零) 0 = 系统时钟正常运行 TMR2IF:Timer2 与 PR2 匹配中断标志位 1 = 发生了 Timer2 和 PR2 的比较匹配 (必须用软件清零) 0 = 未发生 Timer2 与 PR2 的比较匹配 TMR1IF:Timer1 溢出中断标志位 1 = Timer1 寄存器已经溢出 (必须用软件清零) 0 = Timer1 寄存器未溢出

bit 6

bit 5

bit 4

bit 3

bit 2

bit 1

bit 0

? 2008 Microchip Technology Inc.

DS41202F_CN 第 15 页

PIC16F684
2.2.2.6 PCON 寄存器
电源控制 (PCON)寄存器 (见表 12-2)包含区分以 下复位的标志位: ? ? ? ? 上电复位 (POR) 欠压复位 (BOR) 看门狗定时器复位 (WDT) 外部 MCLR 复位

PCON 寄存器也用于控制超低功耗唤醒和 BOR 的软件 使能。 PCON 寄存器中的位如寄存器 2-6 所示。

寄存器 2-6:
U-0 — bit 7 图注: R = 可读位 -n = POR 时的值 bit 7-6 bit 5

PCON:电源控制寄存器
U-0 — R/W-0 ULPWUE R/W-1 SBOREN U-0 — U-0 — R/W-0 POR R/W-x BOR bit 0

W = 可写位 1=置1

U = 未实现位,读为 0 0 = 清零 x = 未知

未实现:读为 0 ULPWUE:超低功耗唤醒使能位 1 = 使能超低功耗唤醒 0 = 禁止超低功耗唤醒 SBOREN:软件欠压检测使能位 (1) 1 = 使能欠压检测 0 = 禁止欠压检测 未实现:读为 0 POR:上电复位状态位 1 = 未发生上电复位 0 = 发生了上电复位 (必须在上电复位发生后用软件清零) BOR:欠压复位状态位 1 = 未发生欠压复位 0 = 已发生欠压复位 (必须在发生欠压复位后用软件置 1) 1: 当配置字寄存器中的 BODEN<1:0> = 01 时允许使用该位对 BOR 进行控制。

bit 4

bit 3-2 bit 1

bit 0



DS41202F_CN 第 16 页

? 2008 Microchip Technology Inc.

PIC16F684
2.3 PCL 和 PCLATH
2.3.2 堆栈
程序计数器 (PC)为 13 位宽。其低 8 位来自可读写的 PCL 寄存器,高 5 位 (PC<12:8>)来自 PCLATH,不 能直接读写。只要发生复位,PC 就将被清零。图 2-3 显 示了装载 PC 值的两种情形。 图 2-3 上方的例子说明在写 PCL (PCLATH<4:0> → PCH)时是如何装载 PC 的。 图 2-3 下方的例子说明了在执行 CALL 或 GOTO 指令期间 (PCLATH<4:3> → PCH) ,是如何装载 PC 的。 PIC16F684 器件具有 8 级深 x 13 位宽的硬件堆栈(见 图 2-2 和图 2-3) 。堆栈空间既不占用程序存储区空间, 也不占用数据存储区空间,而且堆栈指针是不可读写 的。 当执行 CALL 指令或当中断导致程序跳转时, PC 值 将被压入 (PUSH)堆栈。而在执行 RETURN、 RETLW 或 RETFIE 指令时,堆栈中的断点地址将从堆栈中弹出 (POP)到 PC 中。 PCLATH 不受 PUSH 或 POP 操作 的影响。 堆栈的工作原理犹如循环缓冲区。这意味着当堆栈压栈 8 次后,第 9 次压栈的数值将会覆盖第一次压栈时所保 存的数值,而第十次压栈数值将覆盖第二次压栈时保存 的数值,以后依次类推。 注
ALU 结果

图 2-3:
12 PC 5

在不同情况下装载 PC
PCH 8 7 PCL 0 以 PCL 为 目标的指令

PCLATH<4:0>

8

1: 不存在指明堆栈是否上溢或下溢的状态标 志位。 2: 不存在被称为 PUSH 或 POP 的指令 / 助 记符。堆栈的压入或弹出是源于执行了 CALL、 RETURN、 RETLW 和 RETFIE 指令, 或源于指向中断向量地址。

PCLATH PCH 12 PC 2 PCLATH<4:3> 11 11 10 8 7 PCL 0 GOTO, CALL OPCODE<10:0>

2.4

间接寻址、 INDF 和 FSR 寄存器

INDF 寄存器不是实际存在的寄存器, 对 INDF 寄存器进 行寻址将产生间接寻址。 使用 INDF 寄存器可进行间接寻址。任何使用 INDF 寄 存器的指令,实际上是对文件选择寄存器 (FSR)所指 向的数据进行存取。间接对 INDF 进行读操作将返回 00h。 间接对 INDF 寄存器进行写操作将导致空操作(尽 管可能会影响状态标志位) 。通过将 8 位的FSR 寄存器 与 STATUS 寄存器的 IRP 位进行组合可得到一个有效的 9 位地址,如图 2-4 所示。 例 2-1 给出了一个使用间接寻址将 RAM 地址单元 20h2Fh 清零的简单程序。

PCLATH

2.3.1

修改 PCL

执行任何以 PCL寄存器为目标寄存器的指令将同时使程 序计数器的 PC<12:8> 位 (PCH)被 PCLATH 寄存器 的 内 容 所 取 代。这 样 可 通 过 将 所 需 的 高 5 位写入 PCLATH 寄存器来改变程序计数器的所有内容。当低 8 位写入 PCL 寄存器时,程序计数器的所有 13 位将变为 PCLATH 寄存器中所包含的值以及写入 PCL 寄存器中 的值。 计算 GOTO 指令是通过向程序计数器加入偏移量 (ADDWF PCL)来实现的。通过修改 PCL 寄存器跳转到查找表或 程序分支表 (计算 GOTO) 时应特别谨慎。 假定 PCLATH 设置为表的起始地址,如果表长度大于 255 条指令,或 如果存储器地址的低 8 位在表的中间从 0xFF 计满返回 到 0x00, 那么在每次表起始地址与表内的目标地址之间 发生计满返回时, PCLATH 必须均必须递增。 更多信息请参见应用笔记 AN556, “Implementing a Table Read” (DS00556) 。

例 2-1:
MOVLW MOVWF NEXT CLRF INCF BTFSS GOTO CONTINUE

间接寻址
0x20 FSR INDF FSR FSR,4 NEXT ;initialize pointer ;to RAM ;clear INDF register ;inc pointer ;all done? ;no clear next ;yes continue

? 2008 Microchip Technology Inc.

DS41202F_CN 第 17 页

PIC16F684
图 2-4: PIC16F684 的直接 / 间接寻址
直接寻址 RP1(1) RP0 6 来自操作码 0 IRP(1) 7 间接寻址 文件选择寄存器 0

存储区选择

单元选择 00 00h 01 10 11

存储区选择 180h

单元选择

数据 存储器

未使用

7Fh Bank 0 欲知详细的存储器映射信息,请参见图 2-2。 注 1: 保留 RP1 和 IRP 位;始终保持这两位清零。 Bank 1 Bank 2 Bank 3

1FFh

DS41202F_CN 第 18 页

? 2008 Microchip Technology Inc.

PIC16F684
3.0
3.1

振荡器模块 (带故障保护时钟监 视器)
概述

振荡器模块可配置为以下 8 种时钟模式之一。 1. 2. 3. 4. 5. 6. 7. 8. EC——外部时钟, I/O 在 OSC2/CLKOUT 上。 LP——32 kHz 低功耗晶振模式。 XT——中等增益晶振或陶瓷谐振振荡器模式。 HS——高增益晶振或陶瓷谐振器模式。 RC——外部阻容(RC) ,FOSC/4 输出到 OSC2/ CLKOUT。 RCIO——外部阻容, I/O 在 OSC2/CLKOUT 上。 INTOSC——内部振荡器,FOSC/4 输出到 OSC2 且 I/O 在 OSC1/CLKIN 上。 INTOSCIO——内部振荡器, I/O在 OSC2/CLKOUT 和 OSC1/CLKIN 上。

振荡器有多种时钟源和选择功能,从而使其应用非常广 泛,并可最大限度地提高性能和降低功耗。图 3-1 给出 了振荡器模块的框图。 时钟源可以配置为由外部振荡器、石英晶体谐振器、陶 瓷谐振器以及阻容 (RC)电路提供。此外,系统时钟 源可以配置为由两个内部振荡器中的一个提供,并可以 通过软件选择速度。其他时钟功能包括: ? 通过软件选择外部或内部系统时钟源。 ? 双速启动模式,使外部振荡器从启动到代码执行间 的延时达到最小。 ? 故障保护时钟监视器 (FSCM)旨在检测外部时 钟源的故障 (LP、 XT、 HS、 EC 或 RC 模式)并 自动切换到内部振荡器。

通过配置字寄存器 (CONFIG)的 FOSC<2:0> 位来配 置时钟源模式。内部时钟可用两个内部振荡器产生。 HFINTOSC 是经过校准的高频振荡器。LFINTOSC 是未 经校准的低频振荡器。

图 3-1:

PIC? MCU 时钟源框图
FOSC<2:0> (配置字寄存器) 外部振荡器 SCS<0> (OSCCON 寄存器) 休眠

OSC2

OSC1

LP, XT, HS, RC, RCIO, EC MUX

IRCF<2:0> (OSCCON 寄存器) 8 MHz 内部振荡器 4 MHz 2 MHz 后分频器 HFINTOSC 8 MHz 100 011 010 001 000 MUX 1 MHz 500 kHz 250 kHz 125 kHz LFINTOSC 31 kHz 31 kHz 101 111 110 INTOSC

系统时钟 (CPU 和外设)

上电延时定时器 (PWRT) 看门狗定时器 (WDT) 故障保护时钟监控器 (FSCM)

? 2008 Microchip Technology Inc.

DS41202F_CN 第 19 页

PIC16F684
3.2 振荡器控制
振荡器控制 (OSCCON)寄存器 (图 3-1)控制系统时 钟和频率选择等选项。 OSCCON 寄存器包含以下位: ? 频率选择位 (IRCF) ? 频率状态位 (HTS 和 LTS) ? 系统时钟控制位 (OSTS 和 SCS)

寄存器 3-1:
U-0 — bit 7 图注: R = 可读位 -n = POR 时的值 bit 7 bit 6-4

OSCCON:振荡器控制寄存器
R/W-1 IRCF2 R/W-1 IRCF1 R/W-0 IRCF0 R-1 OSTS
(1)

R-0 HTS

R-0 LTS

R/W-0 SCS bit 0

W = 可写位 1=置1

U = 未实现位,读为 0 0 = 清零 x = 未知

未实现:读为 0 IRCF<2:0>:内部振荡器频率选择位 000 = 31 kHz 001 = 125 kHz 010 = 250 kHz 011 = 500 kHz 100 = 1 MHz 101 = 2 MHz 110 = 4 MHz (缺省值) 111 = 8 MHz OSTS:振荡器起振超时状态位 (1) 1 = 器件运行在 FOSC<2:0> 定义的外部时钟之下 0 = 器件运行在内部振荡器之下 (HFINTOSC 或 LFINTOSC) HTS:HFINTOSC (高频——8 MHz 到 125 kHz)状态位 1 = HFINTOSC 稳定 0 = HFINTOSC 不稳定 LTS:LFINTOSC (低频——31 kHz)状态位 1 = LFINTOSC 稳定 0 = LFINTOSC 不稳定 SCS:系统时钟选择位 1 = 内部振荡器用于系统时钟 0 = 时钟源由 FOSC<2:0> 决定 1: 双速启动且选取 LP、 XT 或 HS 为振荡器模式时,或者故障保护模式使能时,该位将复位为 0。

bit 3

bit 2

bit 1

bit 0



DS41202F_CN 第 20 页

? 2008 Microchip Technology Inc.

PIC16F684
3.3 时钟源模式 3.4
3.4.1

外部时钟模式
振荡器起振定时器 (OST)

时钟源模式可分为外部和内部模式。 ? 外部时钟模式依靠外部电路提供时钟源。例子有: 振荡器模块 (EC 模式) 、石英晶体谐振器或陶瓷 谐振器 (LP、 XT 和 HS 模式)以及阻容 (RC) 模式电路。 ? 内部时钟源内置于振荡器模块中。振荡器模块有两 个内部振荡器,一个是 8 MHz 高频内部振荡器 (HFINTOSC) ,另一个是 31 kHz 低频内部振荡 器 (LFINTOSC) 。 可通过 OSCCON 寄存器的系统时钟选择 (SCS)位, 在外部或内部时钟源之间选择系统时钟。欲了解更多信 息,请参见第 3.6 节 “时钟切换” ) 。

如果振荡器模块配置为 LP、 XT 或 HS 模式,振荡器起 振定时器 (OST)对来自 OSC1 的振荡计数 1024 次。 这发生在上电复位 (POR)之后以及上电延时定时器 (PWRT)延时结束 (如果配置了)时,或从休眠中唤 醒后。在此期间,程序计数器不递增,程序执行暂停。 OST 确保使用石英晶体谐振器或陶瓷谐振器的振荡器 电路已经启动并向振荡器模块提供稳定的系统时钟信 号。当在时钟源之间切换时,需要一定的延时以使新时 钟稳定。表 3-1 给出了振荡器延时的例子。 为了使外部振荡器起振和代码执行之间的延时最小,可 选择双速时钟启动模式 (见第 3.7 节 “双速时钟启动 模式” ) 。

表 3-1:
切换自

振荡器延时示例
切换到 LFINTOSC HFINTOSC EC, RC EC, RC LP, XT, HS HFINTOSC 频率 31 kHz 125 kHz 到 8 MHz DC - 20 MHz DC - 20 MHz 32 kHz 到 20 MHz 125 kHz 到 8 MHz 振荡器延时 振荡器预热延时 (TWARM) 双周期 每次一周期 1024 个时钟周期 (OST) 1 ?s (近似值)

休眠 /POR 休眠 /POR LFINTOSC (31 kHz) 休眠 /POR LFINTOSC (31 kHz)

3.4.2

EC 模式

图 3-2:
来自外部 系统的时钟

外部时钟 (EC)模式的工作原理
OSC1/CLKIN

外部时钟 (EC)模式允许外部产生的逻辑电平作为系 统 时 钟 源。工 作 在 此 模 式 下 时,外 部 时 钟 源 连 接 到 OSC1 输入,OSC2 引脚可用作通用 I/O。图 3-2 给出了 EC 模式的引脚连接。 当选取 EC 模式时,振荡器起振定时器 (OST)被禁 止。因此,上电复位(POR)后或者从休眠中唤醒后的 操作不存在延时。因为 PIC? MCU 的设计是完全静态 的,停止外部时钟输入将使器件暂停工作并保持所有数 据完整。当再次启动外部时钟时,器件恢复工作,就好 像没有停止过一样。

PIC? MCU
I/O OSC2/CLKOUT(1)



1: 此引脚的其他功能列在第 1.0 节 “器件概述” 中。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 21 页

PIC16F684
3.4.3 LP、 XT 和 HS 模式
注 LP、XT 和 HS 模式支持连接到 OSC1 和 OSC2 的石英 晶体谐振器或陶瓷谐振器的使用 (图 3-3)。模式选择 内部反相放大器的低、中或高增益设定,以支持各种谐 振器类型及速度。 LP振荡器模式选择内部反相放大器的最低增益设定。 LP 模式的电流消耗在三种模式中最小。该模式设计仅用于 驱动 32.768 kHz 音叉 (Tuning Fork)式晶振 (钟表晶 振) 。 XT 振荡器模式选择内部反相放大器的中等增益设定。 XT 模式的电流消耗在三种模式中居中。该模式最适用 于驱动具备中等驱动电平规格要求的谐振器。 HS 振荡器模式选择内部反相放大器的最高增益设定。 HS 模式的电流消耗在三种模式中最大。该模式最适用 于驱动需要高驱动设定的谐振器。 图 3-3 和图 3-4 分别给出了石英晶体谐振器和陶瓷谐振 器的典型电路。 1: 石英晶振的特性随类型、封装和制造商而 变化。 要了解规格说明和推荐应用, 应查阅 制造商提供的数据手册。 2: 应始终验证振荡器在应用预期的 VDD 和温 度范围内的性能。 3: 如 需 振 荡 器 设 计 的 帮 助,请 参 见 以 下 Microchip 应用笔记: ? AN826, “Crystal Oscillator Basics and Crystal Selection for rfPIC? and PIC? Devices” (DS00826) ? AN849, “Basic PIC? Oscillator Design” (DS00849) ? AN943, “Practical PIC? Oscillator Analysis and Design” (DS00943) ? AN949, “Making Your Oscillator Work” (DS00949)

图 3-3:

石英晶振的工作原理 (LP、 XT 或 HS 模式)
PIC? MCU
OSC1/CLKIN

图 3-4:

陶瓷谐振器的工作原理 (XT 或 HS 模式)
PIC? MCU
OSC1/CLKIN

C1

C1 石英 晶体 RF(2)

至内部 逻辑 休眠 RP(3)
RF(2)

至内部 逻辑 Sleep

C2

RS(1)

OSC2/CLKOUT

C2 陶瓷 谐振器

RS(1)

OSC2/CLKOUT



1: 低驱动电平的石英晶振可能需要串联一个电阻 (RS) 。 2: RF 的值根据所选的振荡模式变化 (典型值在 2 M? 到 10 M? 之间) 。



1:低驱动电平的陶瓷谐振器可能需要串联一个电 阻 (RS) 。 2:RF 的值根据所选的振荡模式变化 (典型值在 2 M? 到 10 M? 之间) 。 3:要使陶瓷谐振器正常工作,可能需要并联一个 反馈电阻 (RP) (典型值 1 M?) 。

DS41202F_CN 第 22 页

? 2008 Microchip Technology Inc.

PIC16F684
3.4.4 外部 RC 模式

3.5

内部时钟模式

外部阻容 (RC)模式支持使用外部 RC 电路。对时钟 精度要求不高时,这使设计人员有了很大的频率选择空 间,且保持成本最低。有 RC 和 RCIO 两种模式。 在 RC 模式下, RC 电路连接到 OSC1。 OSC2/CLKOUT 输出 RC 振荡频率的 4 分频。 该信号可用来为外部电路、 同步、校准、测试或其他应用需求提供时钟。图 3-5 给 出了外部 RC 模式的连接图。

振荡器模块有两个独立的内部振荡器,可配置或选取为 系统时钟源。 1. HFINTOSC(高频内部振荡器)出厂时已校准, 工作频率为 8 MHz。使用 OSCTUNE 寄存器 (寄存器 3-1) , 用户可通过软件调整 HFINTOSC 的频率,调整范围为 ±12%。 2. LFINTOSC (低频内部振荡器)未经校准,工作 频率为 31 kHz。 通过软件对 OSCCON 寄存器的内部振荡器频率选择位 IRCF<2:0> 进行操作,可选择系统时钟速度。 可通过 OSCCON 寄存器的系统时钟选择 (SCS)位, 在外部或内部时钟源之间选择系统时钟 (见第 3.6 节 “时钟切换” ) 。

图 3-5:
VDD REXT

外部 RC 模式
PIC? MCU

OSC1/CLKIN CEXT VSS FOSC/4 或 I/O(2) 建议值: OSC2/CLKOUT(1)

内部 时钟

3.5.1

INTOSC 和 INTOSCIO 模式

当在配置字寄存器 (CONFIG)中使用振荡器选择位 FOSC<2:0> 设置器件时,在 INTOSC 和 INTOSCIO 模 式下将内部振荡器配置为系统时钟源。 在 INTOSC 模式下, OSC1/CLKIN 可用作通用 I/O。 OSC2/CLKOUT 输出所选内部振荡器频率的 4 分频。 CLKOUT 信号可用来为外部电路、同步、校准、测试或 其他应用需求提供时钟。 在 INTOSCIO 模式下, OSC1/CLKIN 和 OSC2/CLKOUT 引脚可用作通用 I/O。

10 k? ≤ REXT ≤ 100 k?, <3V 3 k? ≤ REXT ≤ 100 k?, 3-5V CEXT > 20 pF, 2-5V



1: 该引脚的其他功能列在第 1.0 节 “器件概述” 中。 2: 输出取决于 RC 或 RCIO 时钟模式。

3.5.2

HFINTOSC

在 RCIO 模式下, RC 电路连接到 OSC1。 OSC2 成为 额外的通用 I/O 引脚。 I/O 引脚成为 PORTA 的 bit 4 (RA4) 。图 3-6 给出了 RCIO 模式的连接图。 RC 振 荡 器 频 率 是 供 电 电 压、电 阻 (REXT)和电容 (CEXT)值以及工作温度的函数。影响振荡器频率的其 他因素有: ? 电压门限值变化 ? 元件容差 ? 不同封装的电容 用户还应考虑因所使用的外部 RC 元件的容差而导致的 差异。

高 频 内 部 振 荡 器 (HFINTOSC)是 出 厂 时 已 校 准 的 8 MHz 内部时钟源。使用 OSCTUNE 寄存器 (寄存器 3-2) ,可通过软件调整 HFINTOSC 的频率。 HFINTOSC 的输出连接到后分频器和多路复用器 (见 图 3-1) 。使用 OSCCON 寄存器的 IRCF<2:0> 位,可 通过软件选择七个频率之一。 更多信息, 请参见第 3.5.4 节 “频率选择位 (IRCF) ” 。 将 OSCCON 寄存器的 ICRF<2:0> 位设置为 ≠ 000 选择 8 MHz 到 125 kHz 之间的任一频率,可使能 HFINTOSC。然后将 OSCCON 寄存器的系统时钟源 (SCS)位置 1,或通过将配置字寄存器 (CONFIG) 中的 IESO 置 1 使能双速启动。 OSCCON 寄存器的 HF 内部振荡器 (HTS)位用于显 示 HFINTOSC 是否稳定。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 23 页

PIC16F684
3.5.2.1 OSCTUNE 寄存器
HFINTOSC 在出厂时已校准,但可通过在软件中写入 OSCTUNE 寄存器 (寄存器 3-2)来进行调节。 OSCTUNE 寄存器的调节范围为 ±12%。OSCTUNE 寄 存器的缺省值为 0。该值是一个 5 位的二进制补码。 当 OSCTUNE 寄存器被修改时, HFINTOSC 频率将开 始转变为新频率。转变期间,代码将继续执行。是否已 发生频率转变并无明确的指示。 OSCTUNE 不影响 LFINTOSC 频率。 依赖于 LFINTOSC 时钟源频率的功能,如上电延时定时器 (PWRT)、看 门狗定时器 (WDT)、故障保护时钟监控器 (FSCM) 以及外设等,其工作不受频率改变的影响。

寄存器 3-2:
U-0 — bit 7 图注: R = 可读位 -n = POR 时的值 bit 7-5 bit 4-0

OSCTUNE:振荡器调节寄存器
U-0 — U-0 — R/W-0 TUN4 R/W-0 TUN3 R/W-0 TUN2 R/W-0 TUN1 R/W-0 TUN0 bit 0

W = 可写位 1=置1

U = 未实现位,读为 0 0 = 清零 x = 未知

未实现:读为 0 UN<4:0>:频率调节位 01111 = 最大频率 01110 = ? ? ? 00001 = 00000 = 振荡器模块运行在经过校准的频率上。 11111 = ? ? ? 10000 = 最小频率

DS41202F_CN 第 24 页

? 2008 Microchip Technology Inc.

PIC16F684
3.5.3 LFINTOSC 3.5.5
低频内部振荡器 (LFINTOSC)是未经校准的 31 kHz 内部时钟源。 LFINTOSC 的输出连接到后分频器和多路复用器 (见 图 3-1) 。通过软件对 OSCCON 寄存器的 IRCF<2:0> 位进行操作,选取 31 kHz。更多信息,请参见第 3.5.4 节“频率选择位(IRCF) ” ) 。 LFINTOSC 还是上电延 时定时器 (PWRT) 、看门狗定时器 (WDT)以及故障 保护时钟监控器 (FSCM)的时钟源。 选取 31 kHz (将 OSCCON 寄存器的 IRCF<2:0> 位设 置 为 000)为 系 统 时 钟 源 (OSCCON 寄 存 器的位 SCS = 1) ,或者使能以下任一项时, LFINTOSC 将被 使能: ? 双速启动 (配置字寄存器的位 IESO = 1 且 OSCCON 寄存器的位 IRCF = 000) ? 上电延时定时器 (PWRT) ? 看门狗定时器 (WDT) ? 故障保护时钟监控器 (FSCM) OSCCON 寄存器的 LF 内部振荡器(LTS)位用于指示 LFINTOSC 是否稳定。

HFINTOSC 和 LFINTOSC 时钟切换时 序

当在 LFINTOSC 和 HFINTOSC 之间切换时,新的振荡 器可能为了省电已经关闭(见图 3-6) 。在这种情况下, OSCCON 寄存器的 IRCF 位被修改之后、 频率选择生效 之前,存在一个延时。OSCCON 寄存器的 LTS 和 HTS 位将反映 LFINTOSC 和 HFINTOSC 振荡器的当前活动 状态。频率选择时序如下: 1. 2. 3. 4. 5. 6. OSCCON 寄存器的 IRCF<2:0> 位被修改。 如果新时钟是关闭的,开始一个时钟启动延时。 时钟切换电路等待当前时钟下降沿的到来。 CLKOUT 保持为低, 时钟切换电路等待新时钟上 升沿的到来。 现在 CLKOUT 连接到新时钟。OSCCON 寄存器 的 HTS 和 LTS 位按要求被更新。 时钟切换完成。

更多信息请参见图 3-1。 如果选取的内部振荡器速度在 8 MHz 到 125 kHz 之间, 选取新频率不存在启动延时。这是因为新旧频率都来自 经过后分频器和多路复用器的 HFINTOSC。 启动延时规范在第 15.0 节 “电气特性”中与振荡器相 关的表格中。

3.5.4

频率选择位 (IRCF)

8 MHz HFINTOSC 和 31 kHz LFINTOSC 的输出连接到 后分频器和多路复用器(见图 3-1) 。OSCCON 寄存器 的内部振荡器频率选择位 IRCF<2:0> 用于选择内部振荡 器的频率输出。可通过软件选择以下 8 个频率之一: ? 8 MHz ? ? ? ? ? ? ? 4 MHz (复位后的缺省值) 2 MHz 1 MHz 500 kHz 250 kHz 125 kHz 31 kHz 注: 任何复位后, OSCCON 寄存器的 IRCF<2:0> 位将被置为 110 且频率选择置 为 4 MHz。 用户可修改 IRCF 位来选择其他 频率。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 25 页

PIC16F684
图 3-6: 内部振荡器切换时序

HFINTOSC HFINTOSC

LFINTOSC (禁止 FSCM 和 WDT)

启振时间

2 周期同步

运行

LFINTOSC IRCF<2:0> 系统时钟 ≠0 =0

HFINTOSC HFINTOSC

LFINTOSC (禁止 FSCM 或 WDT)

2 周期同步

运行

LFINTOSC IRCF<2:0> 系统时钟

≠0

=0

LFINTOSC LFINTOSC

HFINTOSC

除非使能 WDT 或 FSCM, 否则 LFINTOSC 将关闭。

起振时间

2 周期同步

运行

HFINTOSC IRCF<2:0> 系统时钟 =0 ≠0

DS41202F_CN 第 26 页

? 2008 Microchip Technology Inc.

PIC16F684
3.6 时钟切换
通过软件对 OSCCON 寄存器的系统时钟选择 (SCS) 位进行操作,可将系统时钟源在外部和内部时钟源之间 切换。 当振荡器模块配置为 LP、 XT 或 HS 模式时,振荡器起 振定时器 (OST)使能 (见第 3.4.1 节 “振荡器起振 定时器 (OST) ” ) 。 OST 将暂停程序执行,直到完成 1024 次振荡计数。双速启动模式在 OST 计数时使用内 部振荡器进行工作,使代码执行的延时最大限度地缩 短。当 OST 计数到 1024 且 OSCCON 寄存器的 OSTS 位置 1 时,程序执行切换至外部振荡器。

3.6.1

系统时钟选择 (SCS)位

OSCCON 寄存器的系统时钟选择 (SCS)位选择用于 CPU 和外设的系统时钟源。 ? OSCCON 寄存器的位 SCS = 0 时,系统时钟源由 配置字寄存器 (CONFIG)中 FOSC<2:0> 位的配 置决定。 ? OSCCON 寄存器的位 SCS = 1 时, 根据 OSCCON 寄存器的 IRCF<2:0> 位所选的内部振荡器频率选 取系统时钟源。复位后, OSCCON 寄存器的 SCS 总是被清零。 注: 任何自动时钟切换 (可能产生自双速启动 或 故 障 保 护 时 钟 监 控 器)都 不 更 新 OSCCON 寄存器的 SCS 位。用户可监控 OSCCON 寄存器的 OSTS 位以确定当前的 系统时钟源。

3.7.1

双速启动模式配置

通过以下设定来配置双速启动模式: ? 配置字寄存器 (CONFIG)中的位 IESO = 1 ; 内部 / 外部切换位 (使能双速启动模式) 。 ? OSCCON 寄存器的位 SCS = 0。 ? 配置字寄存器 (CONFIG)中的 FOSC<2:0> 配置 为 LP、 XT 或 HS 模式。 在下列操作之后,进入双速启动模式: ? 上电复位 (POR)且上电延时定时器 (PWRT) 延时结束 (使能时)后,或者 ? 从休眠状态唤醒。 如果外部时钟振荡器配置为除 LP、 XT 或 HS 模式以外 的任一模式, 那么双速启动将被禁止。 这是因为 POR 后 或从休眠中退出时,外部时钟振荡器不需要稳定时间。

3.6.2

振荡器起振超时状态 (OSTS)位

OSCCON 寄存器的振荡器起振超时状态 (OSTS)位 用于指示系统时钟是来自外部时钟源,还是来自内部时 钟 源。外 部 时 钟 源 由 配 置 字 寄 存 器 (CONFIG)的 FOSC<2:0> 定义。OSTS 还特别指明在 LP、XT 或 HS 模式下,振荡器起振定时器 (OST)是否已超时。

3.7.2
1. 2. 3. 4. 5. 6. 7.

双速启动顺序

3.7

双速时钟启动模式

双速启动模式通过最大限度地缩短外部振荡器起振与代 码执行之间的延时,进一步节省了功耗。对于频繁使用 休眠模式的应用,双速启动模式将在器件唤醒后除去外 部振荡器的起振时间,从而可降低器件的总体功耗。 该模式使得应用能够从休眠中唤醒, 将 INTOSC 用作时 钟源执行数条指令,然后再返回休眠状态而无需等待主 振荡器的稳定。 注: 执行 SLEEP 指令将中止振荡器起振时间, 并使 OSCCON 寄存器的 OSTS 位保持清 零。

从上电复位或休眠中唤醒。 使用内部振荡器以 OSCCON 寄存器的 IRCF<2:0> 位设置的频率开始执行指令。 OST 使能,计数 1024 个时钟周期。 OST 超时,等待内部振荡器下降沿的到来。 OSTS 置 1。 系统时钟保持为低,直到新时钟下一个下降沿的 到来 (LP、 XT 或 HS 模式) 。 系统时钟切换到外部时钟源。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 27 页

PIC16F684
3.7.3 检查双速时钟状态
通过检查 OSCCON 寄存器的 OSTS 位的状态,可以确 定 单 片 机 是 否 如 配 置 字 寄 存 器 (CONFIG)中 FOSC<2:0> 位定义的那样运行于外部时钟源,抑或是 运行于内部振荡器。

图 3-7:

双速启动

HFINTOSC TOST OSC1 0 1 1022 1023

OSC2

程序计数器

PC - N

PC

PC + 1

系统时钟

DS41202F_CN 第 28 页

? 2008 Microchip Technology Inc.

PIC16F684
3.8 故障保护时钟监控器
3.8.3 故障保护条件清除
故障保护时钟监控器 (FSCM)使得器件在出现外部振 荡器故障时仍能继续工作。FSCM 能在振荡器起振延时 定时器 (OST)到期后的任一时刻检测振荡器故障。 FSCM 通过将配置字寄存器 (CONFIG)中的 FCMEN 位置 1 来使能。FSCM 可用于所有外部振荡模式(LP、 XT、 HS、 EC、 RC 和 RCIO) 。 复位、 执行 SLEEP 指令或翻转 OSCCON 寄存器的 SCS 位后,故障保护条件被清除。 OSCCON 寄存器的 SCS 位被修改后, OST 将重新启动。 OST 运行时,器件继 续从 OSCCON 中选定的 INTOSC 进行操作。 OST 超时 后,故障保护条件被清除,器件将从外部时钟源进行操 作。必须先清除故障保护条件,才能清零 OSFIF 标志 位。

图 3-8:

FSCM 框图
时钟监控器 锁存器 (CM) (边沿触发)

3.8.4

复位或从休眠中唤醒

外部 时钟

S

Q

LFINTOSC 振荡器 31 kHz (~32 ?s)

÷ 64 488 HZ (~2 ms)

R

Q

FSCM 设计为能在振荡器起振延时定时器(OST)到期 后的任一时刻检测振荡器故障。 OST 的使用场合为从休 眠状态唤醒后以及任何类型的复位后。 OST 不能在 EC 或 RC 时钟模式下使用,所以一旦复位或唤醒完成, FSCM 就处于激活状态。 当 FSCM 被使能时, 双速启动 也被使能。因此,当 OST 运行时,器件总是处于代码 执行阶段。 注: 由于振荡器起振时间的范围变化较大,在 振荡器起振期间 (即,从复位或休眠中退 出时) ,故障保护电路不处于激活状态。经 过 一 段 适 当 的 时 间 后,用 户 应 检 查 OSCCON 寄存器的 OSTS 位, 以验证振荡 器是否已成功起振以及系统时钟是否切换 成功。

采样时钟

检测到 时钟故障

3.8.1

故障保护检测

FSCM 模块通过将外部振荡器与 FSCM 采样时钟比较来 检测振荡器故障。 LFINTOSC 除以 64,就产生了采样 时钟。请参见图 3-8。故障检测器内部有一个锁存器。 在外部时钟的每个下降沿,锁存器被置 1。在采样时钟 的每个上升沿,锁存器被清零。如果采样时钟的整个半 周期流逝而主时钟依然未进入低电平,就检测到故障。

3.8.2

故障保护操作

当外部时钟出现故障时,FSCM 将器件时钟切换到内部 时钟源,并将 PIR2 寄存器的 OSFIF 标志位置 1。如果 在 PIR2 寄存器的 OSFIE 位置 1 的同时将该标志位置 1,将产生中断。器件固件随后会采取措施减轻可能由 故障时钟所产生的问题。系统时钟将继续来自内部时钟 源,直到器件固件成功重启外部振荡器并切换回外部操 作。 FSCM 所 选 的 内 部 时 钟 源 由 OSCCON 寄存器的 IRCF<2:0> 位决定。这使内部振荡器可以在故障发生前 就得以配置。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 29 页

PIC16F684
图 3-9: FSCM 时序图
采样时钟 振荡器 故障

系统时钟 输出 时钟监视器输出 (Q) OSCFIF

检测到 故障

检测 注:

检测

检测

系统时钟通常比采样时钟频率高很多。本例中为便于说明选用相对频率。

表 3-2:
名称 CONFIG(2) OSCCON OSCTUNE PIE1 PIR1

与时钟源相关的寄存器汇总
Bit 7 CPD — — — — Bit 6 CP IRCF2 — ADIE ADIF Bit 5 MCLRE IRCF1 — RCIE RCIF Bit 4 PWRTE IRCF0 TUN4 TXIE TXIF Bit 3 WDTE OSTS TUN3 SSPIE SSPIF Bit 2 FOSC2 HTS TUN2 CCP1IE CCP1IF Bit 1 FOSC1 LTS TUN1 TMR2IE TMR2IF Bit 0 FOSC0 SCS TUN0 TMR1IE TMR1IF POR 和 BOR 时的值 — -110 x000 ---0 0000 -000 0000 -000 0000 所有其他 复位值 (1) — -110 x000 ---u uuuu -000 0000 -000 0000

图注: x = 未知, u = 不变, – = 未实现单元读为 0。振荡器不使用阴影单元。 注 1: 其他 (非上电)复位包括正常工作期间的 MCLR 复位和看门狗定时器复位。 2: 所有寄存器位的操作请参见配置字寄存器 (寄存器 12-1) 。

DS41202F_CN 第 30 页

? 2008 Microchip Technology Inc.

PIC16F684
4.0 I/O 端口
此系列器件共有 12 个通用 I/O 引脚。 根据使能的外设不 同,有些 (或全部)引脚不能用作通用 I/O。通常使能 了一个外设后, 相关的引脚就不能用作通用 I/O 引脚了。 即使在 PORTA 引脚被用作模拟输入的时候,TRISA 寄 存器仍然控制 PORTA 引脚的方向。在将它们用作模拟 输入时, 用户必须确保 TRISA 寄存器中的位保持为置 1 状态。配置为模拟输入的 I/O 引脚始终读为 0。 注: 必须对 ANSEL 和 CMCON0 寄存器进行初 始化以将模拟通道配置为数字输入通道。 配置为模拟输入的引脚读为 0。

4.1

PORTA 和 TRISA 寄存器
例 4-1:
BCF CLRF MOVLW MOVWF BSF CLRF MOVLW MOVWF BCF

PORTA 是 6 位宽的双向端口。 PORTA 对应的数据方 向寄存器是 TRISA (寄存器 4-2) 。将 TRISA 位置 1 (= 1)可以使对应的 PORTA 引脚作为输入引脚 (即 禁止相应的输出驱动器) 。将 TRISA 位清零 (= 0)将 使对应的 PORTA 引脚作为输出引脚 (即使能输出驱动 器并将输出锁存器的内容置于所选的引脚上) 。 RA3 是 个例外,它只能作为输入引脚, TRIS 位始终读为 1。 例 4-1 给出了初始化 PORTA 的方法。 读 PORTA 寄存器 (寄存器 4-1)将读取引脚的状态而 写该寄存器将会写入端口锁存器。所有写操作都是读- 修改-写操作。因此,写一个端口就意味着读该端口的 引脚电平,修改读到的值,然后再将改好的值写入端口 数据锁存器。当 MCLRE = 1 时, RA3 读为 0。

初始化 PORTA
STATUS,RP0 PORTA 07h CMCON0 STATUS,RP0 ANSEL 0Ch TRISA ;Bank 0 ;Init PORTA ;Set RA<2:0> to ;digital I/O ;Bank 1 ;digital I/O ;Set RA<3:2> as inputs ;and set RA<5:4,1:0> ;as outputs STATUS,RP0 ;Bank 0

寄存器 4-1:
U-0 — bit 7 图注: R = 可读位 -n = POR 时的值 bit 7-6 bit 5-0

PORTA:PORTA 寄存器
U-0 — R/W-x RA5 R/W-0 RA4 R-x RA3 R/W-0 RA2 R/W-0 RA1 R/W-0 RA0 bit 0

W = 可写位 1=置1 未实现:读为 0 RA<5:0>:PORTA I/O 引脚位 1 = PORTA 引脚电平 > VIH 0 = PORTA 引脚电平 < VIL

U = 未实现位,读为 0 0 = 清零 x = 未知

寄存器 4-2:
U-0 — bit 7 图注: R = 可读位 -n = POR 时的值 bit 7-6 bit 5-0

TRISA:PORTA 三态寄存器
U-0 — R/W-1 TRISA5 R/W-1 TRISA4 R-1 TRISA3 R/W-1 TRISA2 R/W-1 TRISA1 R/W-1 TRISA0 bit 0

W = 可写位 1=置1 未实现:读为 0 TRISA<5:0>:PORTA 三态控制位 1 = PORTA 引脚配置为输入 (三态) 0 = PORTA 引脚配置为输出

U = 未实现位,读为 0 0 = 清零 x = 未知



1: 2:

TRISA<3> 始终读为 1。 在 XT、 HS 和 LP 振荡模式下, TRISA<5:4> 始终读为 1。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 31 页

PIC16F684
4.2 其他引脚功能
4.2.3 电平变化中断
PIC18F1220/1320 上的每一个 PORTA 引脚都具有电平 变化中断和弱上拉功能。 RA0 具有超低功耗唤醒功能。 下面三个小节将介绍这些功能。 每一个 PORTA 引脚均可分别配置为电平变化中断引 脚。 控制位 IOCAx 使能或禁止每个引脚的中断功能。 请 参见寄存器 4-5。在上电复位时禁止电平变化中断。 对于已允许电平变化中断的引脚,则将该引脚上的值同 上一次读 PORTA 时锁存的值进行比较。将上一次 “不 匹配”的输出一起作逻辑或运算,以便将 INTCON 寄存 器 (寄存器 2-3)中 PORTA 电平变化中断标志位 (RAIF)置 1。 该中断能唤醒休眠下的器件。用户在中断服务程序中通 过以下方式清除中断: a) b) 对 PORTA 进行读或写操作。这将结束引脚电平 不匹配条件。 将标志位 RAIF 清零。

4.2.1

ANSEL 寄存器

ANSEL 寄存器用于将 I/O 引脚的输入模式配置为模拟。 将相应的 ANSEL 位置为高电平将使对该引脚的所有读 操作结果为 0,并使该引脚的模拟功能正常进行。 ANSEL 位的状态对数字输出功能没有影响。TRIS 清零 且 ANSEL 置 1 的引脚仍将作为数字输出工作,但其输 出模式将为模拟。在对受影响端口执行读 – 修改 – 写指 令时,这将导致意外的操作。

4.2.2

弱上拉

每一个 PORTA 引脚(除 RA3)具有各自的可配置内部 弱上拉。控制位 WPUAx 使能或禁止每一个弱上拉。请 参见寄存器 4-4。当将端口引脚配置为输出时,其弱上 拉电 路 会 自 动 切 断。在 上 电 复 位 时,由 RAPU 位 (OPTION_REG<7>)禁止上拉功能。在 RA3 为 I/O 且 自动启动 RA3 的弱上拉功能。 配置为 MCLR 并禁止时, MCLR 上拉不受软件控制。

电平不匹配条件会继续将RAIF标志位置1。 而读PORTA 将结束不匹配条件并允许将 RAIF 标志位清零。锁存器 将保持最后一次读取的值不受 MCLR 和欠压复位的影 响。在这些复位之后,如果出现电平不匹配, RAIF 标 志位将继续被置 1。 注: 在执行任何 PORTA 操作时如果 I/O 引脚的 电平发生变化,则 RAIF 中断标志位可能不 会被置 1。

寄存器 4-3:
R/W-1 ANS7
bit 7

ANSEL:模拟选择寄存器
R/W-1 ANS6 R/W-1 ANS5 R/W-1 ANS4 R/W-1 ANS3 R/W-1 ANS2 R/W-1 ANS1 R/W-1 ANS0 bit 0

图注: R = 可读位 -n = POR 时的值 bit 7-0 W = 可写位 1=置1 U = 未实现位,读为 0 0 = 清零 x = 未知

ANS<7:0>:模拟选择位 在 AN<7:0> 引脚上分别进行模拟或数字功能的模拟选择。 1 = 模拟输入。引脚被分配为模拟输入 (1)。 0 = 数字 I/O。引脚被分配给端口或特殊功能。 1: 将某引脚设置为模拟输入将自动禁止数字输入电路、弱上拉以及电平变化中断 (如果有的话) 。相应 TRIS 位必须设置为输入模式以允许对该引脚的电压进行外部控制。



DS41202F_CN 第 32 页

? 2008 Microchip Technology Inc.

PIC16F684
寄存器 4-4:
U-0 —
bit 7

WPUA:弱上拉 PORTA 寄存器
U-0 — R/W-1 WPUA5 R/W-1 WPUA4 U-0 — R/W-1 WPUA2 R/W-1 WPUA1 R/W-1 WPUA0 bit 0

图注: R = 可读位 -n = POR 时的值 bit 7-6 bit 5-4 W = 可写位 1=置1 U = 未实现位,读为 0 0 = 清零 x = 未知

未实现:读为 0 WPUA<5:4>:弱上拉控制位 1 = 使能上拉 0 = 禁止上拉 未实现:读为 0 WPUA<2:0>:弱上拉控制位 1 = 使能上拉 0 = 禁止上拉 1: 2: 3: 4: 必须使能 OPTION 寄存器的全局 RABPU 位以使能各个上拉。 如果引脚处于输出模式 (TRISA = 0) ,则弱上拉器件被自动禁止。 在配置字寄存器中配置为 MCLR 时 RA3 上拉被使能,配置为 I/O 时上拉被禁止。 在 XT、 HS 和 LP 振荡模式下 WPUA<5:4> 始终读为 1。

bit 3 bit 2-0



寄存器 4-5:
U-0 —
bit 7

IOCA: 电平变化中断 PORTA 寄存器
U-0 — R/W-0 IOCA5 R/W-0 IOCA4 R/W-0 IOCA3 R/W-0 IOCA2 R/W-0 IOCA1 R/W-0 IOCA0 bit 0

图注: R = 可读位 -n = POR 时的值 bit 7-6 bit 5-0 W = 可写位 1=置1 U = 未实现位,读为 0 0 = 清零 x = 未知

未实现:读为 0 IOCA<5:0>:电平变化中断 PORTA 控制位 1 = 允许电平变化中断 0 = 禁止电平变化中断 1: 必须允许全局中断允许 (GIE)以使各中断被识别。 2: 在 XT、 HS 和 LP 振荡模式下 IOCA<5:4> 始终读为 1。



? 2008 Microchip Technology Inc.

DS41202F_CN 第 33 页

PIC16F684
4.2.4 超低功耗唤醒
注: 要了解更多信息,请参见应用笔记 AN879 “Using the Microchip Ultra Low-Power Wake-up Module” (DS00879) 。 RA0 上的超低功耗唤醒允许电压缓慢跌落,从而可在不 消耗额外电流的情况下,产生 RA0 电平变化中断。通过 将 ULPWUE 位(PCON<5>)置 1 选择该模式。这将产生 一个很小的灌电流,可用于将 RA0 上的电容放电。 要使用该功能, RA0 引脚应先被配置为输出高电平以对 电容充电,允许 RA0 的电平变化中断并且 RA0 要配置 为输入引脚。将ULPWUE 置 1 开始放电,执行 SLEEP 指令。当 RA0 上的电压下降到 VIL 后,器件将被唤醒并 执行下一条指令。如果 INTCON 寄存器的 GIE 位置 1, 器件将调用中断服务程序 (0004h) 。更多信息,请参 见第 4.2.3 节“电平变化中断”和第 12.4.3 节“PORTA 电平变化中断” 。 该功能提供了低功耗技术,可周期性地唤醒休眠下的器 件。延时取决于 RA0 上 RC 电路的放电时间。要了解 如何初始化超低功耗唤醒模块,请参见例 4-2。 串联电阻提供了 RA0 引脚的过电流保护功能, 允许在软 件中对延时进行校准 (见图 4-1)。可用定时器测量电 容的充放电时间。然后调整充电时间以提供所需的中断 延时。该技术可补偿温度、电压和元件精度所带来的影 响。超低功耗唤醒外设还可以配置为简单可编程低压检 测设备或温度传感器。

例 4-2:
BANKSEL MOVLW MOVWF BANKSEL BCF BCF BANKSEL BSF CALL BANKSEL BSF BSF BSF MOVLW MOVWF SLEEP

超低功耗唤醒的初始化
CMCON0 ; H’7’ ;Turn off CMCON0 ;comparators ANSEL ; ANSEL,0 ;RA0 to digital I/O TRISA,0 ;Output high to PORTA ; PORTA,0 ;charge capacitor CapDelay ; PCON ; PCON,ULPWUE ;Enable ULP Wake-up IOCA,0 ;Select RA0 IOC TRISA,0 ;RA0 to input B’10001000’ ;Enable interrupt INTCON ; and clear flag ;Wait for IOC

DS41202F_CN 第 34 页

? 2008 Microchip Technology Inc.

PIC16F684
4.2.5 引脚说明和引脚图 4.2.5.2 RA1/AN1/C1IN-/VREF/ICSPCLK
每个 PORTA 引脚都与其他功能复用。这里将简要说 明引脚及其复合功能。各功能如比较器或 A/D 转换器 (A/D Converter, ADC)的具体信息,请参见本数据手 册中的相关章节。 图 4-2 给出了此引脚的引脚图。 RA1/AN1/C1IN-/VREF/ ICSPCLK 引脚可配置为下列功能之一: ? ? ? ? ? 通用 I/O 连接至 ADC 的模拟输入 连接至比较器的模拟输入 ADC 的参考电压输入 在线串行编程时钟

4.2.5.1

RA0/AN0/C1IN+/ICSPDAT/ULPWU

图 4-1 给 出 了 此 引 脚 的 引 脚 图。 RA0/AN0/C1IN+/ ICSPDAT/ULPWU 引脚可配置为下列功能之一: ? ? ? ? 通用 I/O 连接至 ADC 的模拟输入 连接至比较器的模拟输入 在线串行编程 (In-Circuit Serial Programming?)数据 ? 超低功耗唤醒的模拟输入

图 4-1:

RA0 框图
模拟 (1) 输入模式 VDD 数据总线 写 WPUA 读 WPUA D 写 PORTA Q I/O 引脚 VSS + D 写 TRISA 读 TRISA 读 PORTA D 写 IOCA 读 IOCA Q Q D EN Q D EN 读 PORTA 至比较器 至 A/D 转换器 注 1: 模拟输入模式由比较器模式和 ANSEL 决定。 Q3 Q IULP 0 模拟 (1) 输入模式 1 VSS ULPWUE VT D Q RAPU VDD 弱

CK Q

CK Q

CK Q

CK Q

电平变化中断

? 2008 Microchip Technology Inc.

DS41202F_CN 第 35 页

PIC16F684
图 4-2:
数据总线 写 WPUA 读 WPUA

RA1 框图
模拟 (1) 输入模式 VDD 弱 RAPU

4.2.5.3

RA2/AN2/T0CKI/INT/C1OUT

图 4-3 给出了此引脚的引脚图。 RA2/AN2/T0CKI/INT/ C1OUT 引脚可配置为下列功能之一: ? ? ? ? ? 通用 I/O 连接至 ADC 的模拟输入 TMR0 的时钟输入 外部边沿触发的中断 来自比较器 1 的数字输出

D

Q

CK Q

D 写 PORTA

Q

VDD

图 4-3:
数据总线 I/O 引脚 写 WPUA 读 WPUA D

RA2 框图
Q Q RAPU C1OUT 使能 D Q Q C1OUT 1 0 I/O 引脚 VDD 模拟 (1) 输入模式 VDD 弱

CK Q

D 写 TRISA 读 TRISA 读 PORTA D 写 IOCA 读 IOCA

Q VSS 模拟 (1) 输入模式

CK

CK Q

Q Q D EN Q D EN Q3

写 PORTA

CK

CK Q

D 写 TRISA 读 TRISA 读 PORTA D 写 IOCA 读 IOCA CK CK

Q Q 模拟 (1) 输入模式 VSS

电平变化中断

读 PORTA 至比较器 至 A/D 转换器 1: 模拟输入模式由比较器模式和 ANSEL 决定。

Q Q Q D EN Q D EN Q3



电平变化中断

读 PORTA 至 Timer0 至 INT 至 A/D 转换器



1: 模拟输入模式由 ANSEL 产生。

DS41202F_CN 第 36 页

? 2008 Microchip Technology Inc.

PIC16F684
4.2.5.4 RA3/MCLR/VPP 4.2.5.5 RA4/AN3/T1G/OSC2/CLKOUT
图 4-4 给出了此引脚的引脚图。 RA3/MCLR/VPP 引脚可 配置为下列功能之一: ? 通用输入 ? 带弱上拉的主清零复位 图 4-5 给出了此引脚的引脚图。 RA4/AN3/T1G/OSC2/ CLKOUT 引脚可配置为下列功能之一: ? ? ? ? ? 通用 I/O 连接至 ADC 的模拟输入 Timer1 门控 (计数使能) 晶振 / 谐振器连接 时钟输出

图 4-4:

RA3 框图
VDD MCLRE 弱

图 4-5:
输入 引脚 VSS

RA4 框图
模拟 (3) 输入模式 CLK(1) 模式 VDD 弱 RAPU 振荡器 电路 CLKOUT 使能 D Q Q CLKOUT 使能 D Q Q VSS INTOSC/ RC/EC(2) CLKOUT 使能 模拟 输入模式 FOSC/4 1 0 I/O 引脚 VDD

数据总线 读 TRISA 读 PORTA D 写 IOCA 读 IOCA CK Q Q

复位 VSS

MCLRE

数据总线 写 WPUA 读 WPUA

D CK

Q Q

MCLRE

Q

D EN Q3

OSC1

Q

D EN 写 PORTA

电平变化 中断

CK

读 PORTA

写 TRISA 读 TRISA 读 PORTA

CK

D 写 IOCA 读 IOCA CK

Q Q Q D EN Q D EN Q3

电平变化中断

读 PORTA 至 T1G 至 A/D 转换器 注 1:CLK 模式为 XT、HS、LP 和 LPTMR1, 且 CLKOUT 使 能。 2:具有 CLKOUT 选项。 3:模拟输入模式来自 ANSEL。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 37 页

PIC16F684
4.2.5.6 RA5/T1CKI/OSC1/CLKIN
图 4-6 给 出了 此 引 脚的 引 脚 图。 RA5/T1CKI/OSC1/ CLKIN 引脚可配置为下列功能之一: ? ? ? ? 通用 I/O TMR1 时钟输入 晶振 / 谐振器连接 时钟输入

图 4-6:

RA5 框图
INTOSC 模式

数据总线 写 WPUA 读 WPUA

TMR1LPEN(1) VDD 弱

D CK

Q Q RAPU 振荡器 电路 OSC2

D 写 PORTA CK

Q Q

VDD

D 写 TRISA 读 TRISA 读 PORTA D 写 IOCA 读 IOCA CK CK

Q Q INTOSC 模式 VSS

I/O 引脚

Q Q Q D EN Q3

Q

D EN

电平变化中断

读 PORTA 至 Timer1



1: Timer1 的 LP 振荡器使能。

DS41202F_CN 第 38 页

? 2008 Microchip Technology Inc.

PIC16F684
表 4-1:
名称 ANSEL CMCON0
PCON

与 PORTA 相关的寄存器汇总
Bit 7 ANS7 C2OUT


Bit 6 ANS6 C1OUT


Bit 5 ANS5 C2INV
ULPWUE

Bit 4 ANS4 C1INV
SBOREN

Bit 3 ANS3 CIS


Bit 2 ANS2 CM2


Bit 1 ANS1 CM1
POR

Bit 0 ANS0 CM0
BOR

POR 和 BOR 时的值 1111 1111 0000 0000
--01 --qq

所有其他 复位值 1111 1111 0000 0000
--0u --uu

INTCON IOCA OPTION_REG PORTA TRISA WPUA 图注:

GIE — RAPU — — —

PEIE — INTEDG — — —

T0IE IOCA5 T0CS RA5 TRISA5 WPUA5

INTE IOCA4 T0SE RA4 TRISA4 WPUA4

RAIE IOCA3 PSA RA3 TRISA3 —

T0IF IOCA2 PS2 RA2 TRISA2 WPUA2

INTF IOCA1 PS1 RA1 TRISA1 WPUA1

RAIF IOCA0 PS0 RA0 TRISA0 WPUA0

0000 0000 --00 0000 1111 1111 --x0 x000 --11 1111 --11 -111

0000 0000 --00 0000 1111 1111 --uu uu00 --11 1111 --11 -111

x = 未知, u = 不变, – = 未实现单元读为 0。 PORTA 不使用阴影单元。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 39 页

PIC16F684
4.3 PORTC
例 4-3:
BANKSEL CLRF MOVLW MOVWF BANKSEL CLRF MOVLW MOVWF BCF

初始化 PORTC
PORTC PORTC 07h CMCON0 ANSEL ANSEL 0Ch TRISC STATUS,RP0 ; ;Init PORTC ;Set RC<4,1:0> to ;digital I/O ; ;digital I/O ;Set RC<3:2> as inputs ;and set RC<5:4,1:0> ;as outputs ;Bank 0

PORTC 是由 6 个双向引脚组成的通用 I/O。 引脚可以配 置为 I/O 或接到 A/D 转换器(ADC)或比较器的模拟输 入。要了解各个功能的特定信息 (如 CCP 或 ADC) , 请参见本数据手册的相应章节。 注: 必须对 ANSEL 和 CMCON0 寄存器进行初 始化以将模拟通道配置为数字输入通道。 配置为模拟输入的引脚读为 0。

寄存器 4-6:
U-0 —
bit 7

PORTC:PORTC 寄存器
U-0 — R/W-x RC5 R/W-x RC4 R/W-0 RC3 R/W-0 RC2 R/W-0 RC1 R/W-0 RC0 bit 0

图注: R = 可读位 -n = POR 时的值 bit 7-6 bit 5-0 W = 可写位 1=置1 U = 未实现位,读为 0 0 = 清零 x = 未知

未实现:读为 0 RC<5:0>: PORTC I/O 引脚位 1 = PORTC 引脚电平 > VIH 0 = PORTC 引脚电平 < VIL

寄存器 4-7:
U-0 —
bit 7

TRISC:PORTC 三态寄存器
U-0 — R/W-1 TRISC5 R/W-1 TRISC4 R/W-1 TRISC3 R/W-1 TRISC2 R/W-1 TRISC1 R/W-1 TRISC0 bit 0

图注: R = 可读位 -n = POR 时的值 bit 7-6 bit 5-0 W = 可写位 1=置1 U = 未实现位,读为 0 0 = 清零 x = 未知

未实现:读为 0 TRISC<5:0>:PORTC 三态控制位 1 = PORTC 引脚配置为输入 (三态) 0 = PORTC 引脚配置为输出

DS41202F_CN 第 40 页

? 2008 Microchip Technology Inc.

PIC16F684
4.3.1 RC0/AN4/C2IN+ 4.3.3 RC2/AN6/P1D
RC0 引脚可以配置为下列功能之一: ? 通用 I/O ? ADC 的模拟输入 ? 比较器的模拟输入 RC2 引脚可以配置为下列功能之一: ? 通用 I/O ? ADC 的模拟输入 ? 来自增强型 CCP 的数字输出

4.3.2

RC1/AN5/C2IN-

4.3.4

RC3/AN7/P1C

RC1 引脚可以配置为下列功能之一: ? 通用 I/O ? ADC 的模拟输入 ? 比较器的模拟输入

RC3 引脚可以配置为下列功能之一: ? 通用 I/O ? ADC 的模拟输入 ? 来自增强型 CCP 的数字输出

图 4-7:
数据总线

RC0 和 RC1 框图

图 4-8:
数据总线 VDD 写 PORTC I/O 引脚

RC2 和 RC3 框图
CCPOUT 使能 D CK Q Q CCPOUT 1 0 D Q Q 模拟输入 模式 (1) VSS I/O 引脚

D 写 PORTC CK

Q Q

VDD

D 写 TRISC 读 TRISC 读 PORTC CK

Q Q 模拟输入 模式 (1) VSS 写 TRISC 读 TRISC 读 PORTC

CK

至比较器 至 A/D 转换器 注 注 1: 模拟输入模式来自于 ANSEL 或比较器模式。

至 A/D 转换器 1: 模拟输入模式来自 ANSEL。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 41 页

PIC16F684
4.3.5 RC4/C2OUT/P1B 4.3.6 RC5/CCP1/P1A
RC4 引脚可以配置为下列功能之一: ? 通用 I/O ? 来自比较器的数字输出 ? 来自增强型 CCP 的数字输出 注: 使能 C2OUT 和 P1B 将在 RC4 上引发冲 突,造成不可预期的结果。所以,如果使 能了 C2OUT, 则不能将 ECCP 用于半桥或 全桥模式,反之亦然。 RC5 引脚可以配置为下列功能之一: ? 通用 I/O ? 来自增强型 CCP 的数字输入 / 输出

图 4-10:
数据总线

RC5 引脚框图

D 写 PORTC CK

Q Q

CCP1OUT 使能 CCP1OUT 1 0

VDD

图 4-9:

RC4 框图

C2OUT 使能 CCPOUT 使能 C2OUT 使能 C2OUT CCPOUT EN CCPOUT 数据总线 D 写 PORTC Q VSS 1 0 I/O 引脚 VDD 写 TRISC 读 TRISC 读 PORTC

I/O 引脚

D CK

Q Q VSS

CK Q

至增强型 CCP

D 写 TRISC 读 TRISC 读 PORTC

Q

CK Q



1: 端口 / 外设选择信号选择是端口数据还是外设输 出。

表 4-2:
名称 ANSEL CMCON0 PORTC TRISC 图注: Bit 7 ANS7

与 PORTC 相关的寄存器汇总
Bit 6 ANS6 C1OUT — — Bit 5 ANS5 C2INV RC5 TRISC5 Bit 4 ANS4 C1INV RC4 TRISC4 Bit 3 ANS3 CIS RC3 TRISC3 Bit 2 ANS2 CM2 RC2 TRISC2 Bit 1 ANS1 CM1 RC1 TRISC1 Bit 0 ANS0 CM0 RC0 TRISC0 POR 和 BOR 时的值 1111 1111 0000 0000 --xx 0000 --11 1111 所有其他 复位值 1111 1111 0000 0000 --uu uu00 --11 1111

C2OUT — —

x = 未知, u = 不变, – = 未实现单元读为 0。 PORTC 不使用阴影单元。

DS41202F_CN 第 42 页

? 2008 Microchip Technology Inc.

PIC16F684
5.0
? ? ? ? ?

TIMER0 模块

5.1

Timer0 的工作原理

Timer0 模块是 8 位定时器 / 计数器,具备以下特性: 8 位定时器 / 计数器寄存器 (TMR0) 8 位预分频器 (与看门狗定时器共用) 可编程内部或外部时钟源 可编程外部时钟边沿选择 溢出中断

作为定时器使用时,Timer0 模块可用作 8 位定时器或 8 位计数器。

5.1.1

8 位定时器模式

作为定时器使用时, Timer0 模块将在每个指令周期递增 (无预分频器) 。将 OPTION 寄存器的 T0CS 位清零选 择定时器模式。 当 TMR0 被写入时,写入后将立即禁止 2 周期递增。 注: 在 TMR0 被写入时,为了计入两个指令周 期的延时,可以调整写入 TMR0 寄存器的 值。

图 5-1 是 Timer0 模块的框图。

5.1.2

8 位计数器模式

作为计数器使用时, Timer0 模块将在 T0CKI 引脚的每个 上升沿递增。递增边沿由 OPTION 寄存器的 T0SE 位决 定。 将 OPTION 寄存器的 T0CS 位置 1 选择计数器模式。

图 5-1:
FOSC/4

TIMER0/WDT 预分频器的框图

数据总线 0 1 1 T0CKI 引脚 T0SE T0CS 1 8 0 8位 预分频器 0 溢出时将标志位 T0IF 置 1 同步 2 个周期 TMR0 8

PSA

WDTE SWDTEN

PSA

PS<2:0> 16 位 预分频器 31 kHz INTOSC 看门狗 定时器 WDTPS<3:0> 注 1: T0SE、 T0CS、 PSA 和 PS<2:0> 均为 OPTION 寄存器中的位。 2: SWDTEN 和 WDTPS<3:0> 为 WDTCON 寄存器中的位。 3: WDTE 位在配置字寄存器中。

1 WDT 超时

16

0

PSA

? 2008 Microchip Technology Inc.

DS41202F_CN 第 43 页

PIC16F684
5.1.3 软件可编程预分频器
Timer0 或看门狗定时器 (WDT)之一可使用一个软件 可编程预分频器,但两者不能同时使用。预分频器的分 配由 OPTION 寄存器的 PSA 位控制。要将预分频器分 配给 Timer0,必须将 PSA 位清零。 Timer0 模块的预分频比有 8 种选项,从 1:2 至 1:256。 预分频比可通过 OPTION 寄存器的 PS<2:0> 位进行选 择。 要使 Timer0 模块得到 1:1 的预分频比, 必须将预分 频器分配给 WDT 模块。 预分频器不可读写。当预分频器被分配给 Timer0 模块 时, 所有写入 TMR0 寄存器的指令均会将预分频器清零。 当预分频器被分配给 WDT 时,一条 CLRWDT 指令将同 时清零预分频器和 WDT。 当将预分频器从 WDT 切换到 Timer0 模块时, 必须执行 以下指令序列 (见例 5-2) 。

例 5-2:
CLRWDT

更改预分频器 (WDT → TIMER0)

;Clear WDT and ;prescaler BANKSEL OPTION_REG ; MOVLW b’11110000’ ;Mask TMR0 select and ANDWF OPTION_REG,W ; prescaler bits IORLW b’00000011’ ;Set prescale to 1:16 MOVWF OPTION_REG ;

5.1.4

TIMER0 中断

5.1.3.1

在 Timer0 和 WDT 模块间切换预分 频器

由于预分频器可分配给 Timer0 或 WDT,因此在切换预 分频比时可能产生不想要的器件复位。当把预分频器从 Timer0 切换到 WDT 模块时,必须执行例 5-1 所示的指 令序列。

TM0 寄存器从 FFh 溢出到 00h 时, Timer0 将产生中断。 INTCON 寄存器的 T0IF 中断标志位将在每次 TMR0 寄 存器溢出时被置 1,无论是否允许了 Timer0 中断。必须 用软件将 T0IF 位清零。 Timer0 中断允许位是 INTCON 寄存器的 T0IE 位。 注: 由于定时器在休眠时被冻结,因此 Timer0 中断无法将处理器从休眠中唤醒。

例 5-1:
BANKSEL TMR0 CLRWDT CLRF TMR0

更改预分频器 (TIMER0 → WDT)

5.1.5

TIMER0 与外部时钟配合使用

; ;Clear WDT ;Clear TMR0 and ;prescaler BANKSEL OPTION_REG ; BSF OPTION_REG,PSA ;Select WDT CLRWDT ; ; MOVLW b’11111000’ ;Mask prescaler ANDWF OPTION_REG,W ;bits IORLW b’00000101’ ;Set WDT prescaler MOVWF OPTION_REG ;to 1:32

Timer0 处理计数器模式时, T0CKI 输入和 Timer0 寄存 器的同步是通过采样内部相位时钟的 Q2 和 Q4 周期实 现的。 因此, 外部时钟源的高低周期必须满足第 15.0 节 “电气特性”中所列的时序要求。

DS41202F_CN 第 44 页

? 2008 Microchip Technology Inc.

PIC16F684
寄存器 5-1:
R/W-1 RAPU
bit 7

OPTION_REG:选项寄存器
R/W-1 INTEDG R/W-1 T0CS R/W-1 T0SE R/W-1 PSA R/W-1 PS2 R/W-1 PS1 R/W-1 PS0 bit 0

图注: R = 可读位 -n = POR 时的值 bit 7 W = 可写位 1=置1 U = 未实现位,读为 0 0 = 清零 x = 未知

RABPU: PORTA/PORTB 上拉使能位 1 = 使能 PORTA/PORTB 上拉 0 = PORTA/PORTB 上拉由各端口锁存器值使能 INTEDG:中断沿选择位 1 = 在 INT 引脚的上升沿中断 0 = 在 INT 引脚的下降沿中断 T0CS:TMR0 时钟源选择位 1 = T0CKI 引脚的跳变 0 = 内部指令周期时钟 (FOSC/4) T0SE: TMR0 时钟源边沿选择位 1 = 在 T0CKI 引脚的下降沿递增 0 = 在 T0CKI 引脚的上升沿递增 PSA:预分频器分配位 1 = 预分频器分配给 WDT 0 = 预分频器分配给 Timer0 模块 PS<2:0>:预分频比选择位
位值 000 001 010 011 100 101 110 111 TMR0 分频比 1:2 1:4 1:8 1 : 16 1 : 32 1 : 64 1 : 128 1 : 256 WDT 分频比 1:1 1:2 1:4 1:8 1 : 16 1 : 32 1 : 64 1 : 128

bit 6

bit 5

bit 4

bit 3

bit 2-0



1: 有一个专用的 16 位 WDT 后分频器。更多信息请参见第 12.6 节 “看门狗定时器 (WDT) ” 。

表 5-1:
名称 TMR0 INTCON OPTION_REG TRISA 图注:

与 TIMER0
Bit 7

相关的寄存器汇总
Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR 和 BOR 时的值 所有其他 复位值

Bit 6

Timer0 模块寄存器 GIE PEIE T0IE RAPU INTEDG — — T0CS

xxxx xxxx uuuu uuuu INTE T0SE RAIE PSA T0IF PS2 INTF PS1 RAIF PS0 0000 0000 0000 0000 1111 1111 1111 1111

TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 --11 1111 --11 1111

– = 未实现单元,读为 0, u = 不变, x = 未知。 Timer0 模块不使用阴影单元。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 45 页

PIC16F684
注:

DS41202F_CN 第 46 页

? 2008 Microchip Technology Inc.

PIC16F684
6.0 带门控的 TIMER1 模块
6.1 Timer1 的工作原理
Timer1 模块是 16 位定时器 / 计数器,具备以下特性: ? 一对 16 位定时器 / 计数器寄存器 (TMR1H:TMR1L) ? 可编程内部或外部时钟源 ? 3 位预分频器 ? 可选 LP 振荡器 ? 同步或异步操作 ? 通过比较器或 T1G 引脚的 Timer1 门控 (计数使 能) ? 溢出中断 ? 溢出时唤醒 (仅限外部时钟且异步模式时) ? 捕捉 / 比较功能的时基 ? 特殊事件触发 (带 ECCP) ? 比较器输出与 Timer1 时钟同步 图 6-1 是 Timer1 模块的框图。 Timer1 模块是 16 位递增计数器,通过一对寄存器 TMR1H:TMR1L 访问。对 TMR1H 或 TMR1L 的写操作 将直接更新计数器。 与内部时钟源配合使用时,该模块为定时器。与外部时 钟源配合使用时,该模块可用作定时器或计数器。

6.2

选择时钟源

T1CON 寄存器的 TMR1CS 位用于选择时钟源。当 TMR1CS = 0 时,时钟源为 FOSC/4。 TMR1CS = 1 时, 时钟源由外部提供。

时钟源
FOSC/4 T1CKI 引脚

TMR1CS 0 1

图 6-1:

TIMER1 框图
TMR1GE TMR1ON 溢出时将标志位 TMR1IF 置 1 至 C2 比较器模块 Timer1 时钟 EN 0 1
振荡器

T1GINV

TMR1(1) TMR1H TMR1L

同步时钟输入

OSC1/T1CKI

* 1 FOSC/4 内部时钟

T1SYNC 预分频器 1, 2, 4, 8 0 2 T1CKPS<1:0> TMR1CS 1 同步检测 (2)

OSC2/T1G

T1OSCEN FOSC = 100 FOSC = 000 T1GSS 休眠 SYNCC2OUT 0

* 注

ST 缓冲器在使用 LP 振荡器时为低功耗型,使用 T1CKI 时为高速型。

1: Timer1 寄存器在上升沿递增。 2: 休眠时不进行同步。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 47 页

PIC16F684
6.2.1 内部时钟源
选择内部时钟源时, TMR1H:TMR1L 这对寄存器将在 FOSC 的某个倍数递增,倍数由 Timer1 预分频器决定。 Timer1 振荡器被使能时, TRISA5 和 TRISA4 位置 1。 RA5 和 RA4 位读为 0 且 TRISA5 和 TRISA4 位读为 1。 注: 振荡器在使用前需要一段起振和稳定时 间。这样,应将 T1OSCEN 置 1 并在使能 Timer1 前应有一段适当的延时。

6.2.2

外部时钟源

选择外部时钟源时, Timer1 模块可作为定时器,也可作 为计数器工作。 计数时,Timer1 在外部时钟输入 T1CKI 的上升沿递增。 此外,计数器模式时钟可同步到单片机系统时钟,也可 异步运行。 若需外部时钟振荡器 (且单片机使用不带 CLKOUT 的 INTOSC) ,则 Timer1 可使用 LP 振荡器作为时钟源。 注: 在计数器模式下,发生以下任何一个或多 个情况后,计数器在首个上升沿递增前, 必须先经过一个下降沿: ? ? ? ? POR 复位后使能 Timer1 写入 TMR1H 或 TMR1L Timer1 被禁止 T1CKI 为高电平时 Timer1 被禁止 (TMR1ON = 0) ,然后在 T1CKI 为 低电平时 Timer1 被使能 (TMR1ON = 1) 。

6.5

Timer1 工作于异步计数器模式下

若 T1CON 寄存器的控制位 T1SYNC 置 1, 则外部时钟 输入不同步。定时器与内部相位时钟异步递增。若选择 了外部时钟源,则定时器将在休眠时继续运行,并可在 溢出时产生中断,唤醒处理器。然而,读写定时器时应 特别谨慎 (见第 6.5.1 节 “在异步计数器模式下读写 Timer1” ) 。 注: 从同步操作切换为异步操作时,有可能错 过一次递增从异步操作切换为同步操作 时,有可能多产生一次递增。

6.5.1

在异步计数器模式下读写 TIMER1

定时器运行于外部异步时钟时, 读取 TMR1H 或 TMR1L 将确保读操作有效 (由硬件负责) 。然而,应该注意的 是,用两个 8 位值来读取 16 位定时器本身就会产生某 些问题,这是因为定时器可能在两次读操作之间产生溢 出。 对于写操作,建议用户直接停止计数器,然后写入所期 望的值。如果寄存器正进行递增计数,对定时器寄存器 进 行 写 操 作,可 能 会 导 致 写 入 竞 争,从 而 可 能 在 TMR1H:TMR1L 这对寄存器中产生不可预测的值。

请参见图 6-2

6.3

Timer1 预分频器

Timer1 有四种预分频选项,可对时钟输入进行 1、 2、 4 或 8 分频。 T1CON 寄存器的 T1CKPS 位控制预分频计 数器。 预分频计数器不可直接读写;但当发生对 TMR1H 或 TMR1L 的写操作时,预分频计数器被清零。

6.4

Timer1 振荡器

OSC1 (输入)引脚与 OSC2 (放大器输出)引脚之间 内置有一个低功耗 32.768 kHz 晶振。 将 T1CON 寄存器 的 T1OSCEN 控制位置 1 使能振荡器。 休眠时振荡器继 续工作。 Timer1 振荡器与系统 LP 振荡器共用。 这样,Timer1 就 只能在主系统时钟来自内部振荡器或振荡器处于 LP 模 式时使用此模式。用户必须提供软件延时以确保振荡器 正常起振。

DS41202F_CN 第 48 页

? 2008 Microchip Technology Inc.

PIC16F684
6.6 Timer1 门控 6.9 ECCP 捕捉 / 比较时基
模块使用一对 Timer1 门控源可软件配置为 T1G 引脚或比较器 C2 的输 出。这使器件可直接使用 T1G 为外部事件定时,或使用 比较器 C2 对模拟事件定时。 Timer1 门控源的选择请参 见 CM2CON1 寄存器 (寄存器 8-3) 。这个特性可以简 化Δ - Σ A/D 转换器和许多其他应用的程序。 有关Δ - Σ A/D 转 换 器 的 更 多 信 息,请 参 见 Microchip 网站 (www.microchip.com) 。 注: T1CON 寄存器的 TMR1GE 位必须置 1 以 更 将 T1G 或 C2OUT 用作 Timer1 门控源。 多有关选择 Timer1 门控源的信息,请参见 CM2CON1 寄存器 (寄存器 8-3) 。 工作于捕捉或比较模式时, ECCP TMR1H:TMR1L 寄存器作为时基。

在捕捉模式下, TMR1H:TMR1L 这对寄存器的值在发生 某个配置好的事件时被复制到 CCPR1H:CCPR1L 这对 寄存器中。 在比较模式下,当 CCPR1H:CCPR1L 这对寄存器的值 与 TMR1H:TMR1L 的值匹配时, 将触发一个事件。 该事 件可以是特殊事件触发。 更多信息请参见第 11.0 节 “增强型捕捉 / 比较 /PWM+ (带自动关闭和死区)模块” 。

使用 T1CON 寄存器的 T1GINV 位可翻转 Timer1 门控, 不论其来自 T1G 引脚还是比较器 C2 的输出。 这将配置 Timer1 以确保事件之间存在低电平有效或高电平有效 的时间。

6.10

ECCP 特殊事件触发器

当 ECCP 配置为触发特殊事件时,触发器会将 TMR1H:TMR1L 这对寄存器清零。 该特殊事件不会产生 Timer1 中断。 ECCP 模块仍可配置为产生 ECCP 中断。 在此工作模式下, CCPR1H:CCPR1L 这对寄存器成为 了 Timer1 的周期寄存器。 Timer1 应同步为 FOSC 以充分利用特殊事件触发器。 Timer1 异步工作可导致错过特殊事件触发器。 当对 TMR1H 或 TMR1L 的写操作与一个 ECCP 特殊事 件触发器同时发生时,写操作具有优先权。 更多信息请参见第 11.2.4 节 “特殊事件触发器” 。

6.7

Timer1 中断

Timer1 的一对寄存器 (TMR1H:TMR1L) 递增至 FFFFh 后返回 0000h。 Timer1 计满返回时, PIR1 寄存器的 Timer1 中断标志位被置 1。为确保计满返回时产生中 断,您必须将以下位置 1: ? ? ? ? T1CON 寄存器的 TMR1ON 位 PIE1 寄存器的 TMR1IE 位 INTCON 寄存器的 PEIE 位 INTCON 寄存器的 GIE 位 注: TMR1H:TTMR1L 这对寄存器和 TMR1IF 位 应在允许中断前清零。

6.11

比较器同步

在中断服务程序中将 TMR1IF 位清零将清除中断。

用于使 Timer1 递增的时钟还可用于同步比较器输出。 这 功能可在比较器模块中使能。 将比较器用于 Timer1 门控时,比较器输出应同步为 Timer1。这将在比较器发生变化时确保 Timer1 不错过 递增。 更多信息请参见第 8.9 节 “比较器 C2 输出与 Timer1 同 步” 。

6.8

Timer1 在休眠模式下的工作原理

只有在设定异步计数器模式时, Timer1 才能在休眠模式 下工作。在该模式下,可使用外部晶振或时钟源信号使 计数器递增。要设置定时器以唤醒器件: ? ? ? ? ? ? 必须将 T1CON 寄存器的 TMR1ON 位置 1 必须将 PIE1 寄存器的 TMR1IE 位置 1 必须将 INTCON 寄存器的 PEIE 位置 1 必须将 T1CON 寄存器的 T1SYNC 位置 1 必须将 T1CON 寄存器的 TMR1CS 位置 1 可将 T1CON 寄存器的 T1OSCEN 位置 1

溢出时器件将被唤醒并执行下一条指令。 若 INTCON 寄 存 器 的 的 GIE 位 置 1,器 件 将 调 用 中 断 服务程序 (0004h) 。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 49 页

PIC16F684
图 6-2:
T1CKI = 1 TMR1 使能时

TIMER1 递增边沿

T1CKI = 0 TMR1 使能时



1: 箭头所指为计数器递增。 2: 在计数器模式下,在时钟的首个递增上升沿之前必须先经过一个下降沿。

6.12

Timer1 控制寄存器

如寄存器 6-1 所示, Timer1 控制寄存器 (T1CON)用 于控制 Timer1 并选择 Timer1 模块的各种功能。

寄存器 6-1:
R/W-0 T1GINV
bit 7
(1)

T1CON:TIMER1 控制寄存器
R/W-0 TMR1GE(2) R/W-0 T1CKPS1 R/W-0 T1CKPS0 R/W-0 T1OSCEN R/W-0 T1SYNC R/W-0 TMR1CS R/W-0 TMR1ON bit 0

图注: R = 可读位 -n = POR 时的值 bit 7 W = 可写位 1=置1 U = 未实现位,读为 0 0 = 清零 x = 未知

T1GINV:Timer1 门控翻转位 (1) 1 = Timer1 门控为高电平有效 (门控为高电平时 Timer1 计数) 0 = Timer1 门控为低电平有效 (门控为低电平时 Timer1 计数) TMR1GE:Timer1 门控使能位 (2) 如果 TMR1ON = 0: 此位被忽略 如果 TMR1ON = 1: 1 = Timer1 在 Timer1 门控不活动时打开 0 = Timer1 打开 T1CKPS<1:0>:Timer1 输入时钟预分频比选择位 11 = 1:8 预分频比 10 = 1:4 预分频比 01 = 1:2 预分频比 00 = 1:1 预分频比 T1OSCEN:LP 振荡器使能控制位 如果无 CLKOUT 振荡器的 INTOSC 处于激活状态: 1 = LP 振荡器被使能用于 Timer1 时钟 0 = LP 振荡器关闭 否则: 此位被忽略

bit 6

bit 5-4

bit 3

DS41202F_CN 第 50 页

? 2008 Microchip Technology Inc.

PIC16F684
寄存器 6-1:
bit 2

T1CON:TIMER1 控制寄存器 (续)
T1SYNC:Timer1 外部时钟输入同步控制位 TMR1CS = 1: 1 = 不同步外部时钟输入 0 = 同步外部时钟输入 TMR1CS = 0: 此位被忽略。 Timer1 使用内部时钟 TMR1CS:Timer1 时钟源选择位 1 = 来自 T1CK1 引脚 (上升沿)的外部时钟 0 = 内部时钟 (FOSC/4) TMR1ON:Timer1 打开位 1 = 使能 Timer1 0 = 停止 Timer1

bit 1

bit 0



1: 无论门控源为何, T1GINV 位均将翻转 Timer1 门控逻辑。 2: 必须将 TMR1GE 位置 1 以使用 T1G 引脚或 C2OUT,使用哪个引脚作为 Timer1 的门控源由 CM2CON1 寄存器的 T1GSS 位选择。

表 6-1:
名称 CMCON1 INTCON PIE1 PIR1 TMR1H TMR1L T1CON 图注: Bit 7 — GIE EEIE EEIF

与 TIMER1 相关的寄存器汇总
Bit 6 — PEIE ADIE ADIF Bit 5 — T0IE CCP1IE CCP1IF Bit 4 — INTE C2IE C2IF Bit 3 — RAIE C1IE C1IF Bit 2 — T0IF OSFIE OSFIF Bit 1 T1GSS INTF TMR2IE TMR2IF Bit 0 C2SYNC RAIF TMR1IE TMR1IF POR 和 BOR 时的值 ---- --10 0000 0000 0000 0000 0000 0000 xxxx xxxx xxxx xxxx T1OSCEN T1SYNC TMR1CS TMR1ON 0000 0000 所有其他 复位值 ---- --10 0000 0000 0000 0000 0000 0000 uuuu uuuu uuuu uuuu uuuu uuuu

16 位 TMR1 寄存器的最高有效位的保持寄存器 16 位 TMR1 寄存器的最低有效位的保持寄存器 T1GINV TMR1GE T1CKPS1 T1CKPS0 x = 未知, u = 不变, — = 未实现,读为 0。 Timer1 模块不使用阴影单元。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 51 页

PIC16F684
注:

DS41202F_CN 第 52 页

? 2008 Microchip Technology Inc.

PIC16F684
7.0
? ? ? ? ?

TIMER2 模块

Timer2 模块是一个 8 位定时器,具备以下功能: 8 位定时器寄存器 (TMR2) 8 位周期寄存器 (PR2) TMR2 与 PR2 匹配时中断 软件可编程预分频比 (1:1、 1:4 或 1:16) 软件可编程后分频比 (1:1 至 1:16)

TMR2 和 PR2 寄存器均完全可读写。 任何复位时, TMR2 寄存器置为 00h 且 PR2 寄存器置为 FFh。 将 T2CON 寄存器中的 TMR2ON 位置 1 可打开 Timer2。 将 TMR2ON 位清零可关闭 Timer2。 Timer2 预分频器由 T2CON 寄存器的 T2CKPS 位控制。 Timer2 后分频器由 T2CON 寄存器的 TOUTPS 位控制。 预分频器和后分频器计数器在以下情况下被清零: ? 发生了向 TMR2 的写入操作。 ? 发生了向 T2CON 的写入操作。 ? 发生了任一器件复位 (上电复位, MCLR 复位, 看门狗定时器复位或欠压复位) 。 注: T2CON 被写入时 TMR2 不清零。

Timer2 的框图请参见图 7-1。

7.1

Timer2 的工作原理

Timer2 模块的时钟输入是系统指令时钟(FOSC/4) 。该 时钟送入 Timer2 预分频器,其预分频比有 1:1、 1:4 或 1:16 三种选择。随后预分频器的输出被用于递增 TMR2 寄存器。 TMR2 和 PR2 的值被不断比较以确定何时匹配。TMR2 将从 00h 开始递增直到与 PR2 的值相同。匹配时将发 生以下两种情况: ? TMR2 在下一递增周期复位为 00h。 ? Timer2 后分频比递增 Timer2/PR2 比较器的匹配输出送入 Timer2 后分频器。 后分频器的选项范围为 1:1 至 1:16。 Timer2 后分频器的 输出用于将 PIR1 寄存器的 TMR2IF 中断标志置 1。

图 7-1:

TIMER2 框图
TMR2 输出 将标志位 TMR2IF 置 1

FOSC/4

预分频器 1:1, 1:4, 1:16 2 T2CKPS<1:0>

TMR2 比较器

复位

EQ PR2

后分频器 1:1 至 1:16 4 TOUTPS<3:0>

? 2008 Microchip Technology Inc.

DS41202F_CN 第 53 页

PIC16F684
寄存器 7-1:
U-0 —
bit 7

T2CON:TIMER2 控制寄存器
R/W-0 TOUTPS3 R/W-0 TOUTPS2 R/W-0 TOUTPS1 R/W-0 TOUTPS0 R/W-0 TMR2ON R/W-0 T2CKPS1 R/W-0 T2CKPS0 bit 0

图注: R = 可读位 -n = POR 时的值 bit 7 bit 6-3 W = 可写位 1=置1 U = 未实现位,读为 0 0 = 清零 x = 未知

未实现:读为 0 TOUTPS<3:0>:Timer2 输出后分频比选择位 0000 =1:1 后分频比 0001 =1:2 后分频比 0010 =1:3 后分频比 0011 =1:4 后分频比 0100 =1:5 后分频比 0101 =1:6 后分频比 0110 =1:7 后分频比 0111 =1:8 后分频比 1000 =1:9 后分频比 1001 =1:10 后分频比 1010 =1:11 后分频比 1011 =1:12 后分频比 1100 =1:13 后分频比 1101 =1:14 后分频比 1110 =1:15 后分频比 1111 =1:16 后分频比 TMR2ON:Timer2 打开位 1 = Timer2 打开 0 = Timer2 关闭 T2CKPS<1:0>:Timer2 时钟预分频比选择位 00 = 预分频比为 1 01 = 预分频比为 4 1x = 预分频比为 16

bit 2

bit 1-0

表 7-1:
名称 INTCON PIE1 PIR1 PR2 TMR2 T2CON
图注:

与 TIMER2 相关的寄存器汇总
Bit 7 GIE EEIE EEIF Bit 6 PEIE ADIE ADIF Bit 5 T0IE CCP1IE CCP1IF Bit 4 INTE C2IE C2IF Bit 3 RAIE C1IE C1IF Bit 2 T0IF OSFIE OSFIF Bit 1 INTF TMR2IE TMR2IF Bit 0 RAIF TMR1IE TMR1IF POR 和 BOR 时的值 0000 0000 0000 0000 0000 0000 1111 1111 0000 0000 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 TOUTPS2 所有其他 复位值 0000 0000 0000 0000 0000 0000 1111 1111 0000 0000 -000 0000

Timer2 模块周期寄存器 8 位 TMR2 寄存器的保持寄存器



TOUTPS3

x = 未知, u = 不变, — = 未实现读为 0。 Timer2 模块不使用阴影单元。

DS41202F_CN 第 54 页

? 2008 Microchip Technology Inc.

PIC16F684
8.0 比较器模块
8.1 比较器概述
比较器用于接口模拟电路与数字电路,它将两个模拟电 压相比较并提供一个表示两者相对幅度数字值。比较器 由于提供了独立于程序执行以外的模拟功能,因而对于 混合信号构建模块是相当有用的。模拟比较器模块包含 以下特性: ? ? ? ? ? ? ? ? ? ? ? 独立比较器控制 可编程输入选择 有内部 / 外部比较器输出 可编程输出极性 电平变化中断 从休眠中唤醒 PWM 关闭 Timer1 门控 (计数使能) 输出与 Timer1 时钟输入同步 SR 锁存器 可编程和固定参考电压 注: 只有比较器 C2 可连接到 Timer1。 图 8-1 所示为单比较器及模拟输入电平和数字输出之间 的关系。当 VIN+ 的模拟电压小于 VIN- 的模拟电压时, 比较器输出数字低电平。当 VIN+ 的模拟电压大于 VIN的模拟电压时,比较器输出数字高电平。

图 8-1:
VIN+ VIN-

单比较器
+ – 输出

VINVIN+

输出

注:

比较器输出的黑色区域表示由于输入失 调和响应时间的原因导致的不确定性。

此器件包含两个比较器,如图 8-2 和图 8-3 所示。两个 比较器均无法单独配置。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 55 页

PIC16F684
图 8-2: 比较器 C1 输出框图

C1INV 复用器 注 C1

至 C1OUT 引脚

端口引脚

D Q1 EN

Q 读 CMCON0

至数据总线

将 C1IF 位置 1 D Q3*RD CMCON0 复位 1: Q1 和 Q3 为四相系统时钟 (FOSC)的相位。 . 2: 休眠模式下 Q1 保持为高电平。 EN Q

CL

图 8-3:

比较器 C2 输出框图
C2SYNC C2INV C2 D Timer1 时钟源 (1) Q 0 1 端口引脚 复用器 注 至 Timer1 门控 至 C2OUT 引脚

D Q1 EN

Q 读 CMCON0

至数据总线

将 C2IF 位置 1 D Q3*RD CMCON0 复位 EN Q

CL

1: 比较器输出在 Timer1 时钟源的下降沿被锁存。 2: Q1 和 Q3 为四相系统时钟 (FOSC)的相位。 3: 休眠模式下 Q1 保持为高电平。

DS41202F_CN 第 56 页

? 2008 Microchip Technology Inc.

PIC16F684
8.1.1 模拟输入连接考虑事项
注 1: 读取 PORT 寄存器时,所有配置为模拟输 入的引脚均将读为 0。根据输入规范,配 置为数字输入的引脚将转变成模拟输入。 2: 在任何定义为数字输入的引脚上若有模拟 电平,将导致输入缓冲器消耗超出规范的 电流。 图 8-4 所示为模拟输入的简化电路。由于模拟输入引脚 与数字输入共用连接, 因此它们具有连接到 VDD 和 VSS 的反向偏置 ESD 保护二极管。因此模拟输入电压必须 介于 VSS 和 VDD 之间。如果输入电压与该范围的绝对 值偏差超过 0.6V,其中一个二极管将正向偏置,从而可 能发生闭锁。 建议为模拟输入源连接一个最大为 10 k? 的源阻抗。另 外,连接到模拟输入引脚的外部元件,如电容或稳压二 极管,应具有极小的泄漏电流以将引入误差减到最小。

图 8-4:

模拟输入模型
VDD Rs < 10K AIN VA CPIN 5 pF VT ≈ 0.6V VT ≈ 0.6V RIC 至 ADC 输入 ILEAKAGE ±500 nA

Vss 图注: CPIN = 输入电容 ILEAKAGE = 各种节点引起的引脚泄漏电流 RIC = 互联电阻 = 源阻抗 RS = 模拟电压 VA VT = 门限电压

? 2008 Microchip Technology Inc.

DS41202F_CN 第 57 页

PIC16F684
8.2 比较器的配置
比较器有八种工作模式。 CMCON0 寄存器的 CM<2:0> 位用于选择这些模式,如图 8-5 所示。 I/O 线随着模式 的变化而变化并指定为如下功能: ? 模拟功能 (A) :数字输入缓冲器被禁止 ? 数字功能 (D) :比较器数字输出,覆盖端口功能 ? 正常端口功能 (I/O) :与比较器无关 表示为 “A”的端口引脚将读为 0,无论 I/O 引脚或 I/O 控制 TRIS 位的状态如何。用作模拟输入的引脚还应将 其对应的 TRIS 位置 1 以禁止数字输出驱动器。表示为 “D” 的引脚应将其对应的 TRIS 位清零以使能数字输出 驱动器。 注: 在比较器模式改变期间应禁止比较器中断 以防止意外中断。

图 8-5:

比较器 I/O 的工作模式
两个独立比较器 CM<2:0> = 100
C1 关闭 (1) C1INC1IN+ C2INC2IN+
A A A A

比较器复位 (POR 默认值) CM<2:0> = 000 A VINC1INC1IN+ A C2INA

VINVIN+ VINVIN+
C2 C2OUT C1 C1OUT

VIN+ VINVIN+

C2IN+ A

C2

关闭 (1)

三个输入复用到两个比较器 CM<2:0> = 001
C1INC1IN+
A A

一个独立比较器 CM<2:0> = 101 VINVIN+ VINVIN+
C2 C2OUT C1 C1OUT C1INC1IN+
I/O I/O

CIS = 0 CIS = 1

VINVIN+ VINVIN+
C2 C2OUT C1 Off(1)

C2INC2IN+

A A

C2INC2IN+

A A

四个输入复用到两个比较器 CM<2:0> = 010
C1INC1IN+ C2INC2IN+
A A

CIS = 0 CIS = 1

VINVIN+ VINVIN+
C2 C2OUT C1 C1OUT

两个带输出的公共参考比较器 CM<2:0> = 110 A VINC1INVIN+
C1OUT (引脚) D C1

C1OUT

A A

CIS = 0 CIS = 1

C2INC2IN+

A A

VINVIN+
C2 C2OUT

来自 CVREF 模块

D C2OUTP (引脚)

两个公共参考比较器 CM<2:0> = 011
C1INC1IN+ C2INC2IN+
A I/O

VINVIN+ VINVIN+
C2 C2OUT C1 C1OUT

比较器关闭 (功耗最低) CM<2:0> = 111 I/O VINC1INC1IN+ I/O C2INI/O

VIN+ VINVIN+

C1

Off(1)

A A

C2IN+ I/O

C2

Off(1)

图注: 注

A = 模拟输入,端口始终读为 0 I/O = 正常端口 I/O

CIS = 比较器输入开关 (CMCON0<3>) D = 比较器数字输出

1: 读为 0,除非 CxINV = 1.

DS41202F_CN 第 58 页

? 2008 Microchip Technology Inc.

PIC16F684
8.3 比较器的控制 8.4 比较器的响应时间
CMCON0 寄存器 (寄存器 8-1)提供了对比较器以下 功能的控制: ? ? ? ? 模式选择 输出状态 输出极性 输入开关 在比较器的一个输入源发生改变或选择了另一个参考电 压后,比较器的输出在一段时间内无法确定。这段时间 称为响应时间。比较器的响应时间随参考电压的稳定时 间不同而不同。因此,在确定比较器输入改变时的总响 应时间时,必须将这两个时间考虑在内。详情请参见第 15.0 节 “电气特性”中比较器和参考电压规范。

8.3.1

比较器输出状态

8.5

比较器中断的工作原理

每个比较器的状态均可通过 CMCON0 寄存器中相关的 CxOUT 位由内部读取。 CM<2:0> = 110 时,比较器输 出到 CxOUT 引脚。选定该模式后,相关 CxOUT 引脚 的 TRIS 位必须清零以使能输出驱动器。

8.3.2

比较器输出极性

翻转比较器输出与交换比较器输入的效果相同。比较器 的输出极性可通过将 CMxCON0 寄存器的 CxPOL 位置 1 翻转。 将 CxPOL 位清零将产生同相输出。表 8-1 所示 为包括极性控制在内的输出状态与输入条件的比较。

表 8-1:
输入条件

比较器输出状态—输入条件
CxINV 0 0 1 1 CxOUT 0 1 1 0

只要比较器的输出值有所变化,比较器的中断标志就可 以被置 1。变化的识别是通过由两个锁存器和一个异或 门组成的失配电路 (见图 8-2 和图 8-3)来实现的。当 读取 CMxCON0 寄存器时, 一个锁存器被比较器输出电 平更新。 该锁存器保存该值直到下次读取 CMxCON0 寄 存器或发生复位。失配电路的另一个锁存器被系统时钟 的每个 Q1 更新。在 Q1 时钟周期,当比较器输出的变 化送达第二个锁存器时,将产生失配条件。此时,失配 的两个锁存器中有着相反的输出电平,这两个电平被异 或 门 检测 到 并 输 送给 中 断 电 路。失配 条 件 将 持续 到 CMxCON0 寄存器被读取或比较器输出返回到先前的状 态为止。 注: 对 CMCON0 寄存器的写操作也将清除不匹 配条件,这是因为所有写操作均在写周期 的开始包含一个读操作。

VIN- > VIN+ VIN- < VIN+ VIN- > VIN+ VIN- < VIN+ 注:

软件需保存比较器输出的状态信息以确定所发生的实际 变化。 PIR1 寄存器的 CxIF 位是比较器中断标志。该位必须用 软件清零以复位。由于可以向该寄存器写入 1,有可能 产生一个仿真中断。 必须将 PIE1 寄存器的 CxIE 位和 INTCON 寄存器的 PEIE 和 GIE 位全都置 1 以允许比较器中断。 如果以上任一位 清零,则中断未被允许,但在中断条件发生时,PIR1 寄 存器的 CxIF 位仍将置 1。 用户可在中断服务程序中通过以下方法清除中断: a) b) 对 CMCON0 的任何读或写操作。这将结束不匹 配条件。 将中断标志 CxIF 清零。

CxOUT 指寄存器位和输出引脚。

8.3.3

比较器输入开关

在以下模式下,比较器的翻转输入可以在模拟引脚之间 切换: ? CM<2:0> = 001 (仅限比较器 C1) ? CM<2:0> = 010 (比较器 C1 和 C2) 在以上模式下,两个引脚均处于模拟模式下,而无论哪 个引脚被选为输入。 CMCON0 寄存器的 CIS 位控制比较 器的输入开关。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 59 页

PIC16F684
如果不匹配条件持续下去, 则 CxIF 中断标志不会清零。 读 CMCON0 将结束不匹配条件并允许 CxIF 位被清零。

8.6

休眠时的工作原理

图 8-6:
Q1 Q3 CxIN+ CxOUT

不读 CMCON0 时的比较器中断时序

TRT

如果在比较器进入休眠模式前将其使能,它将在休眠期 间保持激活状态。比较器消耗的额外电流在第 15.0 节 “电气特性”中单独列出。如果不使用比较器唤醒器件, 可将比较器关闭,使其在休眠期间的功耗降至最低。通 过选择 CMCON0 寄存器的 CM<2:0> = 000 或 CM<2:0> = 111 模式,可将比较器关闭。 比较器输出变化可将器件从休眠模式唤醒。要使能比较 器唤醒休眠的器件的功能,必须将 PIE1 寄存器的 CxIE 位和 INTCON 寄存器的 PEIE 位置 1。器件从休眠唤醒 后,将始终执行紧随休眠指令之后的一条指令。如果 INTCON 寄存器的 GIE 位也被置 1,器件将执行中断服 务程序。

将 CMIF 置 1 (电平) CMIF 用软件复位

图 8-7:
Q1 Q3 CxIN+ CxOUT

读取 CMCON0 时的比较器中断时序

8.7
TRT

复位的影响

将 CMIF 置 1 (电平) CMIF 由 CMCON0 读操作清零 用软件复位

器件复位将强制 CMCON0 和 CMCON1 寄存器为其复 位 状 态。这 迫 使 比 较 器 模 块 处 于 比 较 器 复 位 模 式 (CM<2:0> = 000) 。这样,所有比较器输入均为模拟 输入,且比较器被禁止,消耗最少的电流。



1: 如 果 在 读 操 作 正 在 执 行 时 不 得 不 改 变 CMxCON0 寄存器 (CxOUT) (Q2 周期 的起始) ,则 PIR1 寄存器的 CxIF 中断标 志不一定会被置 1。 2:当任一比较器先被使能时,比较器模块中 的偏置电路可产生无效的比较器输出,直 到偏置电路稳定为止。 应留有 1 ?s 偏置电 路稳定时间,然后在使能比较器中断前清 除失配条件,并将中断标志清零。

DS41202F_CN 第 60 页

? 2008 Microchip Technology Inc.

PIC16F684
寄存器 8-1:
R-0 C2OUT bit 7 图注: R = 可读位 -n = POR 时的值 bit 7 W = 可写位 1=置1 U = 未实现位,读为 0 0 = 清零 x = 未知

CMCON0:比较器配置寄存器
R-0 C1OUT R/W-0 C2INV R/W-0 C1INV R/W-0 CIS R/W-0 CM2 R/W-0 CM1 R/W-0 CM0 bit 0

C2OUT:比较器 2 输出位 C2INV = 0 时: 1 = C2 VIN+ > C2 VIN0 = C2 VIN+ < C2 VINC2INV = 1 时: 1 = C2 VIN+ < C2 VIN0 = C2 VIN+ > C2 VIN-

bit 6

C1OUT:比较器 1 输出位 C1INV = 0 时: 1 = C1 VIN+ > C1 VIN0 = C1 VIN+ < C1 VINC1INV = 1 时: 1 = C1 VIN+ < C1 VIN0 = C1 VIN+ > C1 VIN-

bit 5

C2INV:比较器 2 输出翻转位 1 = C2 输出翻转 0 = C2 输出不翻转 C1INV:比较器 1 输出翻转位 1 = C1 输出翻转 0 = C1 输出不翻转 CIS:比较器输入开关位 CM<2:0> = 010 时: 1 = C1IN+ 连接至 C1 VINC2IN+ 连接至 C2 VIN0 = C1IN- 连接至 C1 VINC2IN- 连接至 C2 VINCM<2:0> = 001 时: 1 = C1IN+ 连接至 C1 VIN0 = C1IN- 连接至 C1 VINCM<2:0>:比较器模式选择位 (见图 8-5) 000 = 比较器关闭。 CxIN 引脚配置为模拟 001 = 三个输入复用到两个比较器 010 = 四个输入复用到两个比较器 011 = 两个公共参考比较器 100 = 两个独立比较器 101 = 一个独立比较器 110 = 两个带输出的公共参考比较器 111 = 比较器关闭。 CxIN 引脚配置为数字 I/O

bit 4

bit 3

bit 2-0

? 2008 Microchip Technology Inc.

DS41202F_CN 第 61 页

PIC16F684
8.8 比较器 C2 门控 Timer1 8.9 比较器 C2 输出与 Timer1 同步
可使用此功能为模拟事件的持续时间或间隔定时。将 CMCON1 寄存器的 T1GSS 位清零将使 Timer1 根据比 较器 C2 的输出递增。这要求 Timer1 打开且门控使能。 详情请参见第 6.0 节 “带门控的 Timer1 模块” 。 当比较器用作 Timer1 门控源时,建议通过将 C2SYNC 位置 1 将比较器 C2 与 Timer1 同步。这将确保 Timer1 在递增时若比较器变化, Timer1 不会错过递增。 通过将 CMCON1 寄存器的 C2SYNC 位置 1 可将比较器 C2 的输出与 Timer1 同步。使能时,比较器输出在 Timer1 时钟源的下降沿被锁存。 Timer1 使用预分频器 时,比较器输出在预分频后被锁存。为了防止竞争情 况,比较器输出在 Timer1 时钟源下下降沿被锁存,而 Timer1 在时钟源的上升沿递增。更多信息,请参见比较 器框图(图 8-2 和图 8-3) 以及 Timer1 框图(图 6-1)。

寄存器 8-2:
U-0 — bit 7 图注: R = 可读位 -n = POR 时的值 bit 7-2 bit 1

CMCON1:比较器配置寄存器
U-0 — U-0 — U-0 — U-0 — U-0 — R/W-1 T1GSS R/W-0 C2SYNC bit 0

W = 可写位 1=置1

U = 未实现位,读为 0 0 = 清零 x = 未知

未实现:读为 0 T1GSS:Timer1 门控源选择位 (1) 1 = Timer1 门控源为 T1G 引脚 (引脚应配置为数字输入) 0 = Timer1 门控源为比较器 C2 的输出 C2SYNC:比较器 C2 输出同步位 (2) 1 = 输出与 Timer1 时钟的下降沿同步 0 = 异步输出 1: 请参见第 6.6 节 “Timer1 门控” 。 2: 请参见图 8-3。

bit 0



DS41202F_CN 第 62 页

? 2008 Microchip Technology Inc.

PIC16F684
8.10 比较器参考电压
比较器参考电压模块为比较器提供了一个内部产生的参 考电压。它有以下特性: ? ? ? ? ? 独立于比较器操作以外 两个 16 级电压范围 输出钳位到 VSS 与 VDD 成比例 固定参考电压 (0.6V)

公式 8-1: CVREF 输出电压 V RR = 1 (低电压范围) (low range): : CVREF = (VR<3:0>/24) × V DD (高电压范围) V RR = 0 (high range): :
CV REF = (VDD/4) + (VR<3:0> × VDD/32) 由于模块的构造所限, 无法实现 VSS 至 VDD 的满量程。 请参见图 8-8。

VRCON 寄存器 (寄存器 8-3)控制参考电压模块,如 图 8-8 所示。

8.10.3

输出钳位至 VSS

8.10.1

独立工作

通过将 VRCON 按如下配置可将 CVREF 输出电压设置 为 VSS,从而不消耗功率: ? VREN = 0 ? VRR = 1 ? VR<3:0> = 0000 这使比较器可进行过零检测而不消耗额外的CVREF模块 电流。

比较器参考电压与比较器配置不相关。将 VRCON 寄存 器的 VREN 位将使能参考电压。

8.10.2

输出电压的选择

CVREF 参考电压有两种范围,每种均为 16 个电平。范 围的选择由 VRCON 寄存器的 VRR 位控制。 这 16 个电 平由 VRCON 寄存器的 VR<3:0> 位设置。 CVREF 输出电压由以下公式确定:

8.10.4

输出与 VDD 成比例

比较器的参考电压由 VDD 而来, 因此 CVREF 输出随 VDD 的波动而变化。比较器参考电压的绝对准确度在第 15.0 节 “电气特性”中列出。

寄存器 8-3:
R/W-0 VREN bit 7 图注: R = 可读位 -n = POR 时的值 bit 7

VRCON:参考电压控制寄存器
U-0 — R/W-0 VRR U-0 — R/W-0 VR3 R/W-0 VR2 R/W-0 VR1 R/W-0 VR0 bit 0

W = 可写位 1=置1

U = 未实现位,读为 0 0 = 清零 x = 未知

VREN:CVREF 使能位 1 = CVREF 电路通电 0 = CVREF 电路断电,无泄漏电流 IDD 且 CVREF = VSS。 未实现:读为 0 VRR: CVREF 范围选择位 1 = 低电平范围 0 = 高电平范围 未实现:读为 0 VR<3:0>:CVREF 值选择位 (0 ≤ VR<3:0> ≤ 15) VRR = 1 时:CVREF = (VR<3:0>/24) * VDD VRR = 0 时:CVREF = VDD/4 + (VR<3:0>/32) * VDD

bit 6 bit 5

bit 4 bit 3-0

? 2008 Microchip Technology Inc.

DS41202F_CN 第 63 页

PIC16F684
图 8-8: 比较器参考电压框图
16 级 8R VDD 8R 16-1 模拟 MUX VREN CVREF 至 比较器 输入
15 14 2 1 0

R

R

R

R

VRR

VR<3:0>(1) VREN VR<3:0> = 0000 VRR



1: 必须小心以确保 VREF 处于比较器的共模输入范围 内。详情请参见第 15.0 节 “电气特性” 。

表 8-2:
名称 ANSEL CMCON0 CMCON1 INTCON PIE1 PIR1 PORTA PORTC TRISA TRISC VRCON 图注:

与比较器和参考电压模块相关的寄存器汇总
Bit 7 ANS7 C2OUT — GIE EEIE EEIF — — — — VREN Bit 6 ANS6 C1OUT — PEIE ADIE ADIF — — — — — Bit 5 ANS5 C2INV — T0IE CCP1IE CCP1IF RA5 RC5 Bit 4 ANS4 C1INV — INTE C2IE C2IF RA4 RC4 Bit 3 ANS3 CIS — RAIE C1IE C1IF RA3 RC3 Bit 2 ANS2 CM2 — T0IF OSFIE OSFIF RA2 RC2 Bit 1 ANS1 CM1 T1GSS INTF TMR2IE TMR2IF RA1 RC1 TRISA1 TRISC1 VR1 Bit 0 ANS0 CM0 C2SYNC RAIF TMR1IE TMR1IF RA0 RC0 TRISA0 TRISC0 VR0 POR 和 BOR 时的值 1111 1111 0000 0000 ---- --10 0000 0000 0000 0000 0000 0000 --x0 x000 --xx 0000 --11 1111 --11 1111 0-0- 0000 所有其他 复位值 1111 1111 0000 0000 ---- --10 0000 0000 0000 0000 0000 0000 --uu uu00 --uu uu00 --11 1111 --11 1111 0-0- 0000

TRISA5 TRISA4 TRISA3 TRISA2 TRISC5 TRISC4 TRISC3 TRISC2 VRR — VR3 VR2

x = 未知, u = 不变, – = 未实现,读为 0。比较器不使用阴影单元。

DS41202F_CN 第 64 页

? 2008 Microchip Technology Inc.

PIC16F684
9.0 模拟数字转换器 (ADC)模块
模数转换器 (Analog-to-digital Converter, ADC)可将 模拟输入信号转换为相应的 10 位二进制表征值。该系列 器件采用多个模拟输入复用到一个采样保持电路。采样 保持电路的输出与转换器的输入相连接。转换器通过逐 次逼近法产生 10 位二进制值, 并将转换结果保存在 ADC 结果寄存器 (ADRESL:ADRESH)中。 ADC 参考电压可用软件选择为 VDD 或施加在外部参考引 脚上的电压。 ADC 可在转换完成时产生中断。该中断可用于将器件从 休眠唤醒。 图 9-1 所示为 ADC 的框图。

图 9-1:

ADC 框图
VDD
VCFG = 0

VREF

VCFG = 1

RA0/AN0 RA1/AN1/VREF RA2/AN2 RA4/AN3 RC0/AN4 RC1/AN5 RC2/AN6 RC3/AN7 4 CHS <3:0> VSS ADRESH GO/DONE ADFM ADON A/D 10 0 = 左对齐 1 = 右对齐 10 ADRESL

? 2008 Microchip Technology Inc.

DS41202F_CN 第 65 页

PIC16F684
9.1
? ? ? ? ? ?

ADC 的配置

9.1.4

转换时钟

配置和使用 ADC 时,必须考虑以下功能: 端口配置 通道选择 ADC 参考电压的选择 ADC 转换时钟源 中断控制 转换结果的格式

转换时钟源可通过 ADCON1 寄存器的 ADCS 位用软件 选择。有以下七种时钟选项: ? ? ? ? ? ? FOSC/2 FOSC/4 FOSC/8 FOSC/16 FOSC/32 FOSC/64

9.1.1

端口配置

? FRC (专用内部振荡器) 完成一位 (bit)的转换时间定义为 TAD。完成 10 位转 换需要 11 个 TAD 周期,如图 9-2 所示。 进行正确的转换必须满足相应的 TAD 规范。更多信息请 参见第 15.0 节 “电气特性”中的 A/D 转换要求。表 9-1 所示为正确选择 ADC 时钟的示例。 注: 除非使用的是 FRC,否则任何系统时钟频 率的变化均会改变 ADC 时钟频率,这将对 ADC 结果产生负面影响。

ADC 可用于转换模拟和数字信号。转换模拟信号时,应 将相关的 TRIS 和 ANSEL 位置 1 将 I/O 引脚应配置为模 拟功能。更多信息请参见相应的端口章节。 注: 如果定义为数字输入的引脚上存在模拟电 压,可导致输入缓冲器传导过大的电流。

9.1.2

通道选择

ADCON0 寄存器的 CHS 位决定将哪个通道连接到采样 保持电路。 改变通道时,开始下一次转换前需要一个延时。更多信 息请参见第 9.2 节 “ADC 的工作原理” 。

9.1.3

ADC 参考电压

ADCON0 寄存器的 VCFG 位提供对正参考电压的控制。 正参考电压可以是 VDD,也可以是外部电压源。负参考 电压始终连接到参考地。

表 9-1:
ADC 时钟源 FOSC/2 FOSC/4 FOSC/8 FOSC/16 FOSC/32 FOSC/64 FRC 图注: 注 1: 2: 3: 4:

ADC 时钟周期 (TAD)—器件工作频率 (VDD ≥ 3.0V)
ADC 时钟周期 (TAD) ADCS<2:0> 000 100 001 101 010 110 x11 20 MHz 100 200 ns(2) ns(2) 器件频率 (FOSC) 8 MHz 250 500 ns(2) ns(2) 4 MHz 500 1.0 ns(2) ?s(2) 1 MHz 2.0 ?s 4.0 ?s 8.0 ?s(3) 16.0 ?s(3) 32.0 ?s(3) 64.0 ?s(3) 2-6 ?s(1,4)

400 ns(2) 800 ns(2) 1.6 ?s 3.2 ?s 2-6 ?s(1,4)

1.0 ?s(2) 2.0 ?s 4.0 ?s 8.0 ?s(3) 2-6 ?s(1,4)

2.0 ?s 4.0 ?s 8.0 2-6 ?s(3) 16.0 ?s(3) ?s(1,4)

阴影单元超出了建议范围。 在 VDD > 3.0V 的情况下, FRC 时钟源的典型 TAD 时间为 4 ?s。 这些值违反了最小 TAD 时间要求。 要加快转换,建议选择其他时钟源。 当器件频率大于 1 MHz 时,只有在休眠中进行转换才建议使用 FRC 时钟源。

DS41202F_CN 第 66 页

? 2008 Microchip Technology Inc.

PIC16F684
图 9-2: 模数转换 TAD 周期
TCY to TAD TAD1 TAD2 TAD3 TAD4 TAD5 TAD6 TAD7 TAD8 TAD9 TAD10 TAD11 b9 转换开始 保持电容从模拟输入断开 (典型时间为 100 ns) 将 GO/DONE 位置 1 装载 ADRESH 和 ADRESL 寄存器, GO 位清零, ADIF 位置 1, 保持电容连接到模拟输入 b8 b7 b6 b5 b4 b3 b2 b1 b0

9.1.5

中断

9.1.6

更多信息请转换结果的格式

ADC 模块可使中断在模数转换完成时产生。 ADC 中断 村志为 PIR1 寄存器中的 ADIF 位。 ADC 中断使能为 PIE1 寄存器中的 ADIE 位。 ADIF 位必须用软件清零。 注: 无论 ADC 中断是否被允许, ADIF 位在每 次转换完成时均置 1。

10 位 A/D 转换结果有两种格式,即左对齐和右对齐。 ADCON0 寄存器的 ADFM 位控制输出格式。 图 9-3 所示为两种输出格式。

器件工作或处于休眠状态时均可产生中断。如果器件处 于休眠状态,中断将唤醒器件。从休眠唤醒时,始终执 行 SLEEP 指令后的那条指令。 如果用户试图唤醒器件并 恢复顺序执行代码,必须禁止全局中断。如果允许全局 中断,代码执行将转至中断服务程序。

图 9-3:

10 位 A/D 转换结果格式
ADRESH ADRESL LSB bit 0 10 位 A/D 结果 bit 7 未实现:读为 0 LSB bit 0 未实现:读为 0 bit 7 10 位 A/D 结果 bit 0 bit 0

(ADFM = 0)

MSB bit 7

(ADFM = 0) bit 7

MSB

? 2008 Microchip Technology Inc.

DS41202F_CN 第 67 页

PIC16F684
9.2
9.2.1

ADC 的工作原理
启动转换

9.2.5

特殊事件触发器

要使能 ADC 模块,必须将 ADCON0 寄存器的 ADON 位置 1。将 ADCON0 寄存器的 GO/DONE 位置 1 将启 动模数转换。 注: 应在打开 ADC 的那条指令中将 GO/DONE 位置 1。请参见第 9.2.6 节 “A/D 转换步 骤” 。

ECCP 特殊事件触发器可在软件不干预的情况下周期性 地进行 ADC 测量。发生触发事件时, GO/DONE 位由 硬件置 1, Timer1 计数器复位为零。 特殊事件触发器的使用并不确保正常 ADC 定时。确保 满足 ADC 定时要求是用户的责任。 更多信息请参见第 11.0 节 “增强型捕捉 / 比较 /PWM+ (带自动关闭和死区)模块” 。

9.2.2

转换完成

9.2.6
1.

A/D 转换步骤

转换完成时, ADC 模块将: ? 将 GO/DONE 位清零 ? 将 ADIF 标志位置 1 ? 用新的转换结果更新 ADRESH:ADRESL 寄存器

以下是使用 ADC 进行模数转换的步骤示例: 配置端口: ? 禁止引脚输出驱动器 (见 TRIS 寄存器) ? 将引脚配置为模拟 配置 ADC 模块: ? 选择 ADC 转换时钟 ? 配置参考电压 ? 选择 ADC 输入通道 ? 选择转换结果的格式 ? 打开 ADC 模块 3. 配置 ADC 中断 (可选) : ? 将 ADC 中断标志清零 ? 允许 ADC 中断 ? 允许外设中断 ? 允许全局中断 (1) 4. 5. 6. 等待所需的采集时间 (2) 将 GO/DONE 置 1 启动转换 通过以下情况之一等待 ADC 转换完成: ? 查询 GO/DONE 位 ? 等待 ADC 中断 (允许中断时) 读取 ADC 结果 将 ADC 中断标志清零 (必允许中断) 。 注 1: 如果用户试图将器件从休眠中唤醒并顺序 执行代码,则可禁止全局中断。 2: 请参见第 9.3 节 “A/D 采集时间要求” 。

2.

9.2.3

终止转换

如果转换必须在完成前被终止,可用软件将 GO/DONE 清零。 ADRESH:ADRESL 寄存器不会被未完成的模数 转换采样更新。相反, ADRESH:ADRESL 这对寄存器 将保持先前转换的值。此外,启动另一次采集前,需等 待 2 TAD 的延时。延时后,所选通道的输入采集将自动 启动。 注: 器件复位将强制所有寄存器回到其复位状 态。这样, ADC 模块就被关闭,并且任何 待处理的转换均被终止。

9.2.4

休眠模式下 ADC 的工作

ADC 模块可在休眠期间工作。这要求将 ADC 时钟源置 于 FRC 选项。选定 FRC 时钟源后, ADC 将再等待一条 指令后才开始转换。 这使 SLEEP 指令得以执行, 从而降 低转换期间的系统噪声。如果允许 ADC 中断,转换完 成后器件将从休眠唤醒。如果禁止 ADC 中断, ADC 模 块在转换完成后关闭,尽管 ADON 位保持置 1 状态。 如果 ADC 时钟源不是 FRC,执行一条 SLEEP 指令将使 当前转换中止,并且 ADC 模块被关闭,尽管 ADON 位 保持置 1 状态。

7. 8.

DS41202F_CN 第 68 页

? 2008 Microchip Technology Inc.

PIC16F684
例 9-1: A/D 转换
;This code block configures the ADC ;for polling, Vdd reference, Frc clock ;and AN0 input. ; ;Conversion start & polling for completion ; are included. ; BANKSEL ADCON1 ; MOVLW B’01110000’ ;ADC Frc clock MOVWF ADCON1 ; BANKSEL TRISA ; BSF TRISA,0 ;Set RA0 to input BANKSEL ANSEL ; BSF ANSEL,0 ;Set RA0 to analog BANKSEL ADCON0 ; MOVLW B’10000001’ ;Right justify, MOVWF ADCON0 ; Vdd Vref, AN0, On CALL SampleTime ;Acquisiton delay BSF ADCON0,GO ;Start conversion BTFSC ADCON0,GO ;Is conversion done? GOTO $-1 ;No, test again BANKSEL ADRESH ; MOVF ADRESH,W ;Read upper 2 bits MOVWF RESULTHI ;store in GPR space BANKSEL ADRESL ; MOVF ADRESL,W ;Read lower 8 bits MOVWF RESULTLO ;Store in GPR space

? 2008 Microchip Technology Inc.

DS41202F_CN 第 69 页

PIC16F684
9.2.7 ADC 寄存器定义 ADCON0: A/D 控制寄存器 0
R/W-0 VCFG U-0 — R/W-0 CHS2 R/W-0 CHS1 R/W-0 CHS0 R/W-0 GO/DONE R/W-0 ADON bit 0

以下寄存器用于控制 ADC 的工作。

寄存器 9-1:
R/W-0 ADFM bit 7 图注: R = 可读位 -n = POR 时的值 bit 7

W = 可写位 1=置1 ADFM: A/D 转换结果格式选择位 1 = 右对齐 0 = 左对齐 VCFG: 参考电压位 1 = VREF 引脚 0 = VDD 未实现:读为 0 CHS<2:0>:模拟通道选择位 000 = AN0 001 = AN1 010 = AN2 011 = AN3 100 = AN4 101 = AN5 110 = AN6 111 = AN7

U = 未实现位,读为 0 0 = 清零 x = 未知

bit 6

bit 5 bit 4-2

bit 1

GO/DONE:A/D 转换状态位 1 = A/D 转换正在进行。将本位置 1 启动一次 A/D 转换。 A/D 转换完成时此位由硬件自动清零。 0 = A/D 转换完成 / 不在进行中 ADON:ADC 使能位 1 = 使能 ADC 0 = 禁止 ADC,不消耗工作电流

bit 0

寄存器 9-2:
U-0 — bit 7 图注: R = 可读位 -n = POR 时的值 bit 7 bit 6-4

ADCON1: A/D 控制寄存器 1
R/W-0 ADCS2 R/W-0 ADCS1 R/W-0 ADCS0 U-0 — U-0 — U-0 — U-0 — bit 0

W = 可写位 1=置1 未实现:读为 0

U = 未实现位,读为 0 0 = 清零 x = 未知

ADCS<2:0>: A/D 转换时钟选择位 000 = FOSC/2 001 = FOSC/8 010 = FOSC/32 x11 = FRC (时钟来自专用内部振荡器 = 500 kHz 最大值) 100 = FOSC/4 101 = FOSC/16 110 = FOSC/64 未实现: 读为 0

bit 3-0

DS41202F_CN 第 70 页

? 2008 Microchip Technology Inc.

PIC16F684
寄存器 9-3:
R/W-x ADRES9 bit 7 图注: R = 可读位 -n = POR 时的值 bit 7-0 W = 可写位 1=置1 ADRES<9:2>:ADC 结果寄存器位 10 位转换结果的高 8 位 U = 未实现位,读为 0 0 = 清零 x = 未知

ADRESH:ADC 结果高位寄存器 (ADRESH) , ADFM = 0
R/W-x ADRES8 R/W-x ADRES7 R/W-x ADRES6 R/W-x ADRES5 R/W-x ADRES4 R/W-x ADRES3 R/W-x ADRES2 bit 0

寄存器 9-4:
R/W-x ADRES1 bit 7 图注: R = 可读位 -n = POR 时的值 bit 7-6 bit 5-0

ADRESL: ADC 结果低位寄存器 (ADRESL) , ADFM = 0
R/W-x ADRES0 R/W-x — R/W-x — R/W-x — R/W-x — R/W-x — R/W-x — bit 0

W = 可写位 1=置1 ADRES<1:0>: ADC 结果寄存器位 10 位转换结果的低 2 位 保留:不要使用

U = 未实现位,读为 0 0 = 清零 x = 未知

寄存器 9-5:
R/W-x — bit 7 图注: R = 可读位 -n = POR 时的值 bit 7-2 bit 1-0

ADRESH: ADC 结果高位寄存器 (ADRESH) , ADFM = 1
R/W-x — R/W-x — R/W-x — R/W-x — R/W-x — R/W-x ADRES9 R/W-x ADRES8 bit 0

W = 可写位 1=置1 保留:不要使用 ADRES<9:8>: ADC 结果寄存器位 10 位转换结果的高 2 位

U = 未实现位,读为 0 0 = 清零 x = 未知

寄存器 9-6:
R/W-x ADRES7 bit 7 图注: R = 可读位 -n = POR 时的值 bit 7-0

ADRESL: ADC 结果低位寄存器 (ADRESL) , ADFM = 1
R/W-x ADRES6 R/W-x ADRES5 R/W-x ADRES4 R/W-x ADRES3 R/W-x ADRES2 R/W-x ADRES1 R/W-x ADRES0 bit 0

W = 可写位 1=置1 ADRES<7:0>: ADC 结果寄存器位 10 位转换结果的低 8 位

U = 未实现位,读为 0 0 = 清零 x = 未知

? 2008 Microchip Technology Inc.

DS41202F_CN 第 71 页

PIC16F684
9.3 A/D 采集时间要求
为了使 ADC 达到规定的精度,必须使充电保持电容 (CHOLD) 充满至输入通道的电平。 模拟输入模型请参见 图 9-4。源阻抗 (RS)和内部采样开关 (RSS)阻抗直 接影响电容 CHOLD 的充电时间。采样开关 (RSS)阻抗 随器件电压(VDD)的变化而变化,参见图 9-4。建议模 拟信号源的最大阻抗为 10 k?。采集时间随着源阻抗的 降低而缩短。在选择 (或改变)模拟输入通道后,必须 在开始转换前完成采集。可以使用公式 9-1 来计算最小 采集时间。该公式假设误差为 1/2 LSb (ADC 转换需要 1024 步) 。 1/2 LSb 误差是 ADC 达到规定精度所允许的 最大误差。

公式 9-1:

采集时间示例

外部电阻 10 k?, 5.0V VDD 假设 : 温度 = 50°C,
TACQ = 放大器稳定时间 + 保持电容充电时间 + 温度系数 = TAMP + TC + TCOFF = 5 ?s + TC + [( 温度 - 25°C)(0.05 ?s/°C)] TC 值可以用以下公式近似计算 : -? V APPLIED ? 1 – ? 2047?
---------? RC ? V APPLIED ? 1 – e ? ? ? -------? RC ? V APPLIED ? 1 – e ? ? ? – Tc – TC

1

= =

V C H O LD

;[1] 在 1/2 lsb 误差范围内对 VCHOLD 充电

V CHOLD

;[2] 依照 VAPPLIED 对 VCHOLD 充电

1 -) = V APPLIED ( 1 – 2047

; 结合 [1] 和 [2]

求解 TC :

T C = – C HOLD ( R IC + R SS + R S ) ln(1/2047)
= 1.37 ?s

=-10 pF(1 k? + 7 k? + 10 k?) ln0.004885

因此 :
TACQ = 5 ?s + 1.37 ?s + [(50°C - 25°C)(0.05 ?s/°C)] = 7.67 ?s



1: 由于参考电压 (VREF)将自身消去,因此对公式没有影响。 2: 充电保持电容 (CHOLD)在每次转换后并不放电。 3: 模拟输入的最大建议源阻抗为 10 k?。这是为了满足引脚泄漏规范。

DS41202F_CN 第 72 页

? 2008 Microchip Technology Inc.

PIC16F684
图 9-4: 模拟输入模型
VDD Rs VA ANx CPIN 5 pF VT = 0.6V RIC ≤ 1k ILEAKAGE ±500 nA 采样开关 SS Rss CHOLD = 10 pF VSS/VREF-

VT = 0.6V

图注 :

CPIN = 输入电容 = 门限电压 VT I LEAKAGE = 由各种结点引起的 泄漏电流 = 互联电阻 RIC = 采样开关 SS = 采样保持电容 CHOLD

6V 5V VDD 4V 3V 2V

RSS

5 6 7 8 9 10 11 采样开关 (k?)

图 9-5:

ADC 传递函数

满量程范围

3FFh 3FEh 3FDh 3FCh ADC 输出代码 3FBh 满量程 跳变 1 LSB 理想值

004h 003h 002h 001h 000h 1 LSB 理想值

模拟输入电压

VSS/VREF-

零量程 跳变

VDD/VREF+

? 2008 Microchip Technology Inc.

DS41202F_CN 第 73 页

PIC16F684
表 9-2:
名称 ADCON0 ADCON1 ANSEL ADRESH ADRESL INTCON PIE1 PIR1 PORTA PORTC TRISA TRISC 图注: Bit 7 ADFM — ANS7

与 ADC 相关的寄存器汇总
Bit 6 VCFG ADCS2 ANS6 Bit 5 — ADCS1 ANS5 Bit 4 CHS2 ADCS0 ANS4 Bit 3 CHS1 — ANS3 Bit 2 CHS0 — ANS2 Bit 1 GO/DONE — ANS1 Bit 0 ADON — ANS0 POR 和 BOR 时的值 0000 0000 -000 ---1111 1111 xxxx xxxx xxxx xxxx INTE C2IE C2IF RA4 RC4 TRISA4 TRISC4 RAIE C1IE C1IF RA3 RC3 TRISA3 TRISC3 T0IF OSFIE OSFIF RA2 RC2 TRISA2 TRISC2 INTF TMR2IE TMR2IF RA1 RC1 TRISA1 TRISC1 RAIF TMR1IE TMR1IF RA0 RC0 TRISA0 TRISC0 0000 0000 0000 0000 0000 0000 --x0 x000 --xx 0000 --11 1111 --11 1111 所有其他 复位值 0000 0000 -000 ---1111 1111 uuuu uuuu uuuu uuuu 0000 0000 0000 0000 0000 0000 --uu uuuu --uu uuuu --11 1111 --11 1111

A/D 结果寄存器高字节 A/D 结果寄存器低字节 T0IE GIE PEIE EEIE EEIF — — — — ADIE ADIF — — — — CCPIE CCPIF RA5 RC5 TRISA5 TRISC5

x = 未知, u = 不变, — = 未实现读为 0。 ADC 模块不使用阴影单元。

DS41202F_CN 第 74 页

? 2008 Microchip Technology Inc.

PIC16F684
10.0 数据 EEPROM 存储器
数据 EEPROM 在正常工作期间(整个 VDD 范围)是可 读写的。该存储器并不直接映射到文件寄存器空间。而 是通过特殊功能寄存器来间接寻址。 有以下 4 个 SFR 用 于读写该存储器: ? EECON1 ? EECON2 (非物理实现的寄存器) ? EEDAT ? EEADR EEDAT 寄存器存放 8 位要读写的数据,而 EEADR 寄 存器存放要被访问的 EEPROM 单 元 的地址。 PIC18F1220/1320 具有 256 字节的数据 EEPROM,地 址范围从 0h 到 FFh。 EEPROM 数据存储器允许以字节为单位进行读写。字 节写操作将自动擦除目标存储单元并写入新数据(即先 擦后写) 。EEPROM 数据存储器可以反复擦写很多次。 写入时间由片上定时器控制。写入时间会因为电压、温 度及芯片的不同而发生变化。请参见第 15.0 节 “电气 特性”里的交流规范来了解准确的限制。 如果数据存储器有代码保护, CPU 仍可继续对数据 EEPROM 存储器进行读写操作。器件编程器无法再访 问数据 EEPROM 的数据, EEPROM 单元读为零。

寄存器 10-1:
R/W-0 EEDAT7
bit 7

EEDAT:EEPROM 数据寄存器
R/W-0 EEDAT6 R/W-0 EEDAT5 R/W-0 EEDAT4 R/W-0 EEDAT3 R/W-0 EEDAT2 R/W-0 EEDAT1 R/W-0 EEDAT0 bit 0

图注: R = 可读位 -n = POR 时的值 bit 7-0 W = 可写位 1=置1 U = 未实现位,读为 0 0 = 清零 x = 未知

EEDATn,要从数据 EEPROM 读取或向数据 EEPROM 写入的字节值

寄存器 10-2:
R/W-0 EEADR7
bit 7

EEADR:EEPROM 地址寄存器
R/W-0 EEADR6 R/W-0 EEADR5 R/W-0 EEADR4 R/W-0 EEADR3 R/W-0 EEADR2 R/W-0 EEADR1 R/W-0 EEADR0 bit 0

图注: R = 可读位 -n = POR 时的值 bit 7-0 W = 可写位 1=置1 U = 未实现位,读为 0 0 = 清零 x = 未知

EEADR:指定在 256 个单元中要进行 EEPROM 读 / 写操作的一个单元

? 2008 Microchip Technology Inc.

DS41202F_CN 第 75 页

PIC16F684
10.1 EECON1 和 EECON2 寄存器
EECON1 是控制寄存器, 它的低 4 位是物理实现的。 高 4 位未实现,读为 0。 控制位 RD 和 WR 分别启动读操作和写操作。用软件只 能将这些位置 1 而无法清零。当读操作或写操作完成 后,由硬件将其清零。由于不能用软件将 WR 位清零, 可有效防止写操作意外或提前终止。 将 WREN 位置 1 将允许一次写操作。上电时将清零 WREN 位。 当正常的写操作被 MCLR 复位或 WDT 复位 中断时, WRERR 将被置 1。在这些情况下,用户可以 在复位后检查 WRERR 位,将其清零并重写相应的单 元。数据和地址将被清空。因此,需要重新对 EEDAT 和 EEADR 寄存器进行初始化。 写操作结束时, PIR 寄存器的中断标志位 EEIF 将被置 1。此标志位必须用软件清零。 EECON2 不是物理寄存器。 读 EECON2 得到的是全 0。 EECON2 寄存器仅在数据 EEPROM 写入过程中使用。 注: 当对数据 EEPROM 进行写操作 ( WR = 1 )时,不应修改 EECON1、 EEDAT 和 EEADR 寄存器。

寄存器 10-3:
U-0 —
bit 7

EECON1:EEPROM 控制寄存器
U-0 — U-0 — U-0 — R/W-x WRERR R/W-0 WREN R/S-0 WR R/S-0 RD bit 0

图注: S = 只可置 1 的位 R = 可读位 -n = POR 时的值 bit 7-4 bit 3 W = 可写位 1=置1 U = 未实现位,读为 0 0 = 清零 x = 未知

未实现:读为 0 WRERR:EEPROM 错误标志位 1 = 写操作提前终止 (正常工作期间发生的任何 MCLR 复位、 WDT 复位或欠压检测) 0 = 写操作完成 WREN:EEPROM 写使能位 1 = 允许写周期 0 = 禁止对数据 EEPROM 进行写操作 WR:写控制位 1 = 启动写周期 (一旦完成写操作,硬件会将该位清零。软件只能将 WR 位置 1 而不能清零。 ) 0 = 写入数据 EEPROM 的周期完成 RD:读控制位 1 = 启动EEPROM读操作 (读取需要一个周期。 RD位由硬件清零。 软件只能将RD位置1而不能清零。 ) 0 = 不启动 EEPROM 读操作

bit 2

bit 1

bit 0

DS41202F_CN 第 76 页

? 2008 Microchip Technology Inc.

PIC16F684
10.2 读数据 EEPROM 存储器
要读取数据存储单元, 用户必须将地址写入 EEADR 寄 存器,然后将 EECON1 寄存器的控制位 RD 置 1,如 例 10-1 所示。在紧接着的下一周期, EEDAT 寄存器就 有数据了。因此该数据可由下一条指令读取。 EEDATA 将保持这个值直到用户下一次从该单元读取或向该单元 写入数据时 (在写操作过程中) 。 写过程启动后, 将 WREN 位清零不会影响该写周期。 除 非将 WREN 位置 1,否则不能将 WR 位置 1。 写周期完成后, WR 位将由硬件清零, 同时 EE 写完成中 断标志位 (EEIF)被置 1。用户可以允许此中断或查询 该位。 PIR1 寄存器的 EEIF 位必须用软件清零。

10.4

写校验

例 10-1:
BANKSEL MOVLW MOVWF BSF MOVF

读数据 EEPROM
EEADR ; CONFIG_ADDR ; EEADR ;Address to read EECON1,RD ;EE Read EEDAT,W ;Move data to W

根据应用情况,将写入数据 EEPROM 的实际值与要写 入的值进行核对(见例 10-3)是一种很好的编程习惯。

例 10-3:
BANKSEL MOVF BSF

写校验
EEDAT EEDAT,W ; ;EEDAT not changed ;from previous write EECON1,RD ;YES, Read the ;value written EEDAT,W STATUS,Z ;Is data the same WRITE_ERR ;No, handle error ;Yes, continue

10.3

写数据 EEPROM 存储器
XORWF BTFSS GOTO :

要写入 EEPROM 数据存储单元,用户必须先把该单元 的地址写入 EEADR 寄存器并且把数据写入 EEDAT 寄 存器。 然后用户必须按特定顺序开始写入每个字节。 如 例 10-2 所示。

例 10-2:
BANKSEL BSF BCF BTFSC GOTO MOVLW MOVWF MOVLW MOVWF BSF BSF

写读数据 EEPROM
EECON1 ; EECON1,WREN ;Enable write INTCON,GIE ;Disable INTs INTCON,GIE ;See AN576 $-2 ; 55h ;Unlock write EECON2 ; AAh ; EECON2 ; EECON1,WR ;Start the write INTCON,GIE ;Enable INTS

10.4.1

使用数据 EEPROM

数据 EEPROM 是高耐久性的并可字节寻址的阵列,已 对其进行优化,可存储频繁更改的信息 (例如程序变量 或其他经常更新的数据) 。当一个扇区内的变量频繁变 动,而另一个扇区内的变量不变,那么就有可能超出对 EEPROM 的总写入次数(规范 D124)却不超出单个字 节的总写入次数 (规范 D120 和 D120A) 。如果出现这 种情况,就必须对阵列进行刷新。出于这个原因,应将 不经常变动的变量(如常数、ID 和校准值等)保存在闪 存存储器中。

如果没有完全按照以上顺序 (将 55h 写入 EECON2, 将 AAh 写入 EECON2,然后将 WR 位置 1)逐字节写 入,写操作将不会开始。在这个代码段执行过程中,强 烈建议禁止中断。在必需序列执行过程中会进行周期计 数。当计数值与执行必需序列所需的周期不等时,数据 无法写入 EEPROM。 此外, 必须将 EECON1 中的 WREN 位置 1 以使能写操 作。这种机制可防止由于代码执行错误 (异常) (即程 序失控) 导致误写数据 EEPROM。 除非更新 EEPROM, 用户应始终保持 WREN 位清零。 WREN 位无法由硬件 清零。

? 2008 Microchip Technology Inc.

必需的序列

DS41202F_CN 第 77 页

PIC16F684
10.5 避免误写操作 10.6 代码保护时数据 EEPROM 的操作
有些情况下,用户可能不希望向数据 EEPROM 存储器 写入数据。 EEPROM 存储器有各种机制以防对 EEPROM 误写。上电时, WREN 被清零。而且,上电延时定时器 (延时 64 ms)也可以防止误写 EEPROM。 写操作启动序列和 WREN 位可以共同预防在以下情况 下发生误写: ? 欠压 ? 电源毛刺 ? 软件故障 数据存储 器的代码保护功 能可通过将配置 字寄存器 (寄存器 12-1)中的 CPD 位清零来实现。 启用数据存储器的代码保护功能后, CPU 能够将数据从 数据 EEPROM 中读出或向其中写入数据。如果启用了 数据存储器的代码保护功能,建议同时启用程序存储器 的代码保护功能。这将通过将未使用的程序存储单元编 程为 0 (这将作为 NOP 执行) ,避免有人通过编写额外 的可以输出数据存储器内容的程序来访问数据存储器。 将程序存储器中未使用的单元编程为 0 同样有助于避免 数据存储器的代码保护被破坏。

表 10-1:
名称 INTCON PIR1 PIE1 EEDAT EEADR EECON1 图注: 注 1:

与数据 EEPROM 相关的寄存器 / 位
Bit 7 GIE EEIF EEIE EEDAT7 — Bit 6 PEIE ADIF ADIE EEDAT6 — Bit 5 T0IE CCP1IF CCP1IE EEDAT5 — Bit 4 INTE C2IF C2IE EEDAT4 — Bit 3 RAIE C1IF C1IE EEDAT3 WRERR Bit 2 T0IF OSFIF OSFIE EEDAT2 WREN Bit 1 INTF TMR2IF TMR2IE EEDAT1 WR Bit 0 RAIF TMR1IF TMR1IE EEDAT0 RD POR 和 BOR 时的值 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ---- x000 ---- ---所有其他 复位值 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 ---- q000 ---- ----

EEADR7 EEADR6 EEADR5 EEADR4 EEADR3 EEADR2 EEADR1 EEADR0

EECON2(1) EEPROM 控制寄存器 2 x = 未知, u = 不变,- = 未实现 (读为 0) , q = 取值视情况而定。 数据 EEPROM 模块不使用阴影单元。 EECON2 不是物理寄存器。

DS41202F_CN 第 78 页

? 2008 Microchip Technology Inc.

PIC16F684
11.0 增强型捕捉 / 比较 /PWM+ (带自 动关闭和死区)模块
表 11-1 所示为 ECCP 模块所需的定时器资源。

增强型捕捉 / 比较 /PWM 模块是一种用户可用来对不同 事件进行定时和控制的外设。在捕捉模式下,此外设可 对事件的持续时间定时。比较模式使用户可在一段预定 时长后触发外部事件。 PWM 模式可生成频率可变的脉 宽调制信号和占空比。

表 11-1:
捕捉

ECCP 模式——所需的定时器资源
定时器资源 Timer1 Timer1 Timer2

ECCP 模式 比较 PWM

寄存器 11-1:
R/W-0 P1M1 bit 7 图注: R = 可读位 -n = POR 时的值 bit 7-6

CCP1CON:增强型 CCP1 控制寄存器
R/W-0 P1M0 R/W-0 DC1B1 R/W-0 DC1B0 R/W-0 CCP1M3 R/W-0 CCP1M2 R/W-0 CCP1M1 R/W-0 CCP1M0 bit 0

W = 可写位 1=置1

U = 未实现位,读为 0 0 = 清零 x = 未知

P1M<1:0>:PWM 输出配置位 如果 CCP1M<3:2> = 00、 01 或 10: xx =P1A 配置为捕捉 / 比较输入; P1B、 P1C 和 P1D 配置为端口引脚 如果 CCP1M<3:2> = 11: 00 = 单输出; P1A 调制; P1B、 P1C 和 P1D 配置为端口引脚 01 = 全桥正向输出; P1D 调制; P1A 有效; P1B 和 P1C 无效 10 = 半桥输出; P1A 和 P1B 调制,带有死区控制; P1C 和 P1D 配置为端口引脚 11 = 全桥反向输出; P1B 调制; P1C 有效; P1A 和 P1D 无效 DC1B<1:0>:PWM 占空比最低有效位 捕捉模式: 未使用。 比较模式: 未使用。 PWM 模式: 这些位是 PWM 占空比的低 2 位。高 8 位在 CCPR1L 中。 CCP1M<3:0>:ECCP 模式选择位 0000 = 捕捉 / 比较 /PWM 关闭 (复位 ECCP 模块) 0001 = 未使用 (保留) 0010 = 比较模式,匹配时翻转输出 (CCP1IF 位置 1) 0011 = 未使用 (保留) 0100 = 捕捉模式,每个下降沿 0101 = 捕捉模式,每个上升沿 0110 = 捕捉模式,每 4 个上升沿 0111 = 捕捉模式,每 16 个上升沿 1000 = 比较模式,匹配时输出置 1 (CCP1IF 位置 1) 1001 = 比较模式,匹配时输出清零 (CCP1IF 位置 1) 1010 = 比较模式,匹配时产生软件中断 (CCP1IF 位置 1, CCP1 引脚不受影响) 1011 = 比较模式, 触发特殊事件 (CCP1IF 位置 1, CCP1 复位 TMR1 或 TMR2, 且如果 A/D 模块被使 能,启动一次 A/D 转换) 1100 = PWM 模式; P1A 和 P1C 高电平有效; P1B 和 P1D 高电平有效 1101 = PWM 模式; P1A 和 P1C 高电平有效; P1B 和 P1D 低电平有效 1110 = PWM 模式; P1A 和 P1C 低电平有效; P1B 和 P1D 高电平有效 1111 = PWM 模式; P1A 和 P1C 低电平有效; P1B 和 P1D 低电平有效

bit 5-4

bit 3-0

? 2008 Microchip Technology Inc.

DS41202F_CN 第 79 页

PIC16F684
11.1 捕捉模式
11.1.2 TIMER1 模式选择
在捕捉模式下,当在 CCP1 引脚上发生某一事件时, CCPR1H:CCPR1L 捕捉 TMR1 寄存器中的 16 位值。事件 定义为以下之一, 并由 CCP1CON 寄存器的 CCP1M<3:0> 位进行配置: ? ? ? ? 每个下降沿 每个上升沿 每 4 个上升沿 每 16 个上升沿 为使 CCP 模块使用捕捉特性, Timer1 必须运行在定时 器模式或同步计数器模式。在异步计数器模式下,捕捉 操作可能无法进行。

11.1.3

软件中断

当捕捉模式改变时,可能会产生一次误捕捉中断。用户 应该保持 PIE1 寄存器的 CCP1IE 位清零以避免误中断。 此外, 用户还应在任何这种工作模式改变之后清零PIR1 寄存器的中断标志位 CCP1IF。

进行捕捉后, PIR1 寄存器中的中断请求标志位 CCP1IF 被置 1。该位必须用软件清零。如果在 CCPR1H 和 CCPR1L 这对寄存器中的值被读出之前又发生另一次捕 捉, 那么原来的捕捉值会被新捕捉值覆盖 (见图 11-1) 。

11.1.4

CCP 预分频器

11.1.1

CCP1 引脚配置

CCP1CON 寄存器的 CCP1M<3:0> 位指定了 4 种不同 的预分频比。每当关闭 CCP 模块,或 CCP 模块不在捕 捉模式时,预分频计数器都将被清零。任何复位都会将 预分频计数器清零。 从一个捕捉预分频比切换到另一个不会清零预分频器并 可能产生一次中断。要避免意外操作,在改变预分频比 前应将 CCP1CON 寄存器清零,以关闭 CCP 模块(见 例 11-1) 。

在捕捉模式下, 应该通过将相关的 TRISC 控制位置 1 将 CCP1 引脚配置为输入。 注: 如果 CCP1 引脚配置为输出,则写端口将 产生一次捕捉条件。

图 11-1:

捕捉模式工作原理框图
预分频器 ÷ 1, 4, 16 标志位 CCP1IF 置 1 (PIR1 寄存器)

例 11-1:
BANKSEL CCP1CON CLRF MOVLW
CCPR1L

在捕捉预分频比间切换

CCP1 引脚 和 边沿检测 CCP1CON<3:0> 系统时钟 (FOSC) 捕捉 使能

CCPR1H

MOVWF
TMR1H TMR1L

;Set Bank bits to point ;to CCP1CON CCP1CON ;Turn CCP module off NEW_CAPT_PS ;Load the W reg with ; the new prescaler ; move value and CCP ON CCP1CON ;Load CCP1CON with this ; value

DS41202F_CN 第 80 页

? 2008 Microchip Technology Inc.

PIC16F684
11.2 比较模式
11.2.2 TIMER1 模式选择
在比较模式下, 16 位 CCPR1 寄存器值被不断与 TMR1 的一对寄存器的值相比较。发生匹配时, CCP 模块可 能: ? ? ? ? ? 翻转 CCP1 输出 将 CCP1 输出置 1 将 CCP1 输出清零 触发特殊事件 产生软件中断 在比较模式下, Timer1 必须运行在定时器模式下或同步 计数器模式下。比较操作在异步计数器模式下可能不能 正常工作。

11.2.3

软件中断模式

当选择产生软件中断模式(CCP1M<3:0> = 1010)时, CCP 模块并不得到 CCP1 引脚的控制权 (见 CCP1CON 寄存器) 。

引脚上的动作取决于CCP1CON寄存器的CCP1M<3:0> 控制位的值。 所有比较模式均可产生中断。

11.2.4

特殊事件触发器

当选定了特殊事件触发模式 (CCP1M<3:0> = 1011) 时, CCP 模式将会: ? ? 复位 Timer1 若 ADC 使能,则启动一次 ADC 转换

图 11-2:

比较模式的工作框图
CCP1CON<3:0> 模式选择 将 CCP1IF 中断标志置 1 (PIR1) 4 CCPR1H CCPR1L Q S R 输出 逻辑 比较器 TMR1H TMR1L

在此模式下, CCP 模块不得到 CCP1 引脚的控制权 (见 CCP1CON 寄存器) 。 一旦 TMR1H:TMR1L 这对寄存器和 CCPR1H:CPR1L 这 对寄存器之间发生匹配,便会发生 CCP 的特殊事件触 发输出。 TMR1H:TMR1L 寄存器在 Timer1 时钟的下一 个上升沿到来之前不会复位。这使 CCPR1H:CCPR1L 寄存器可作为 Timer1 的 16 位可编程周期寄存器。 注 1: CCP 模块的特殊事件触发不会将 PIR1 寄 存器的中断标志位 TMR1IF 置 1。 2: 在生成特殊事件触发的时钟边沿和复位 Timer1 的时钟边沿之间,通过更改 CCPR1H 和 CCPR1L 这对寄存器的内容 来移除匹配条件,可以预防复位的发生。

CCP1 引脚

匹配

TRIS 输出使能 特殊事件触发器 特殊事件触发器将:

? ? ?

清零 TMR1H 和 TMR1L 寄存器。 不会将 PIR1 寄存器的中断标志位 TMR1IF 置 1。 将 GO/DONE 位置 1 启动 ADC 转换。

11.2.1

CCP1 引脚的配置

用户必须通过清零相关的 TRIS 位将 CCP1 引脚配置为 输出。 注: 清零 CCP1CON 寄存器将强制 CCP1 比较 输出锁存为缺省低电平。 这不是 PORTC 的 I/O 数据锁存。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 81 页

PIC16F684
11.3 PWM 模式
PWM 模式将在 CCP1 引脚产生脉宽调制信号。其占空 比,周期和分辨率由以下寄存器决定: ? ? ? ? PR2 T2CON CCPR1L CCP1CON PWM 输出 (图 11-4)由时基 (周期)和一段输出保 持为高电平 (占空比)的时间组成。

图 11-4:

CCP PWM 输出
周期

脉冲宽度

TMR2 = PR2 TMR2 = CCPR1L:CCP1CON<5:4>

在脉宽调制 (Pulse-Width Modulation, PWM) 模式下, CCP 模块在 CCP1 引脚上产生高达 10 位分辨率的 PWM 输出。 由于 CCP1 引脚与 PORT 数据锁存器复用, 必须 将该引脚的 TRIS 清零以使能 CCP1 引脚输出驱动器。 注: 将 CCP1CON 寄存器清零将放弃对 CCP1 引脚的控制。

TMR2 = 0

图 11-3 所示为 PWM 工作的简化框图。 图 11-4 所示为 PWM 信号的典型波形。 欲了解将 CCP 模块设置为 PWM 操作的详细步骤,请 参见第 11.3.7 节 “PWM 工作的设置” 。

图 11-3:

简化的 PWM 框图
CCP1CON<5:4>

占空比寄存器 CCPR1L

CCPR1H(2) (从动) CCP1 比较器
(1)

R S

Q

TMR2

TRIS 比较器

PR2

清零 Timer2, 翻转 CCP1 引脚并 锁存占空比



1: 8 位的定时器 TMR2 寄存器与 2 位的系统时钟 (FOSC)或 2 位的预分频器共同组成 10 位时 基。 2: 在 PWM 模式下, CCPR1H 是只读寄存器。

DS41202F_CN 第 82 页

? 2008 Microchip Technology Inc.

PIC16F684
11.3.1 PWM 周期 公式 11-2: 脉冲宽度
PWM 周期由 Timer2 的 PR2 寄存器指定。用公式 11-1 可计算 PWM 周期。

脉冲宽度 Pulse Width = ( CCPR1L:CCP1CON<5:4> ) ?
) T OSC ? (TMR2预分频值 Prescale Value)

公式 11-1:

PWM 周期 公式 11-3:

PWMPeriod 周期 = [ ( PR2 ) + 1 ] ? 4 ? T OSC ? PWM ) (TMR2 预分频值 Prescale Value) 当 TMR2 等于 PR2 时,下一次递增周期将发生以下三 个事件:。 ? ? ? TMR2 被清零。 CCP1 引脚被置 1 (例外:若 PWM 占空 比 = 0%,引脚不被置 1) 。 PWM 占空比从 CCPR1L 锁存到 CCPR1H。 注: 确定 PWM 频率时不使用 Timer2 寄存器 (见第 7.1 节 “Timer2 的工作原理” ) 。

占空比

CCPR1L:CCP1CON<5:4> ) 占空比 Duty Cycle Ratio = ( ---------------------------------------------------------------------4 ( PR2 + 1 ) CCPR1H 寄存器和 2 位的内部锁存器用于为 PWM 占空 比提供双缓冲。双缓冲对 PWM 的无毛刺工作起着非常 重要的作用。 8 位定时器 TMR2 寄存器与 2 位的内部系统时钟 (FOSC) 或 2 位的预分频器连接,组成 10 位时基。如果 Timer2 预分频器置为 1:1 则使用系统时钟。 当 10 位时基与 CCPR1H 及 2 位的锁存器匹配时, CCP1 引脚被清零 (见图 11-3) 。

11.3.2

PWM 占空比

通过对以下几个寄存器写入 10 位值可指定 PWM 占空 比 : CCPR1L 寄存器和 CCP1CON 寄存器的 DC1B<1:0> 位。 CCPR1L 包含八个 MSb, CCP1CON 寄存器的 DC1B<1:0> 位包含两个 LSb。 CCP1CON 寄存器的 CCPR1L 和 DC1B<1:0> 可在任何时候被写入。占空比 直到周期完成时 (即 PR2 和 TMR2 寄存器发生匹配时) 才被锁存到 CCPR1H 中。使用 PWM 时, CCPR1H 寄 存器是只读的。 公式 11-2 用于计算 PWM 脉宽。 公式 11-3 用于计算 PWM 占空比。

11.3.3

PWM 分辨率

分辨率决定某个周期的有效占空比。例如, 10 位分辩率 有 1024 个分立的占空比,而 8 位分辩率则有 256 个分 立的占空比。 PR2 为 255 时产生 10 位的最大 PWM 分辩率。分辩率 是 PR2 寄存器值的函数,如公式 11-4 所示。

公式 11-4:

PWM 分辩率

log [ 4 ( PR2 + 1 ) ] 位 Resolution = ----------------------------------------bits 分辩率 log ( 2 )

注:

如果脉宽大于周期, 那么分配的 PWM 引脚 将保持不变。

表 11-2:

PWM 频率和分辩率示例 (FOSC = 20 MHz)
PWM 频率 1.22 kHz 16 0xFF 10 4.88 kHz 4 0xFF 10 19.53 kHz 1 0xFF 10 78.12 kHz 1 0x3F 8 156.3 kHz 1 0x1F 7 208.3 kHz 1 0x17 6.6

定时器预分频比 (1、 4 或 16) PR2 的值 最大分辨率 (位)

表 11-3:

PWM 频率和分辩率示例 (FOSC = 8 MHz)
PWM 频率 1.22 kHz 16 0x65 8 4.90 kHz 4 0x65 8 19.61 kHz 1 0x65 8 76.92 kHz 1 0x19 6 153.85 kHz 1 0x0C 5 200.0 kHz 1 0x09 5

定时器预分频比 (1、 4 或 16) PR2 的值 最大分辨率 (位)

? 2008 Microchip Technology Inc.

DS41202F_CN 第 83 页

PIC16F684
11.3.4 休眠模式下的工作 11.3.7
1. 2. 3. 4. 5.

PWM 工作的设置

在休眠模式下, TMR2寄存器不递增, 模块的状态不变。 如果 CCP1 引脚正在驱动一个值,它将继续驱动该值。 器件唤醒时, TMR2 将继续先前的状态。

应按照以下步骤将 CCP 模块配置为 PWM 工作: 将相关的 TRIS 位置 1 禁止 PWM 引脚(CCP1) 的输出驱动器。 装裁 PR2 寄存器以设置 PWM 周期。 用适当的值装载 CCP1CON 寄存器将 CCP 模块 配置为 PWM 模式。 装载 CCPR1L 寄存器和 CCP1CON 寄存器的 DC1B<1:0> 设置 PWM 占空比。 配置并启动 Timer2: ? 将 PIR1 寄存器的 TMR2IF 中断标志位清零。 ? 装载 T2CON 寄存器的 T2CKPS 位设置 Timer2 预分频比。 ? 将 T2CON 寄存器的 TMR2ON 位置 1 使能 Timer2。 重新开始一个 PWM 周期后,使能 PWM 输出: ? 等待 Timer2 溢出 (PIR1 寄存器的 TMR2IF 位置 1) 。 ? 将相关的 TRIS 位清零使能 CCP1 引脚的输出驱 动器。

11.3.5

系统时钟频率的改变

PWM 频率来自系统时钟频率。系统时钟频率的任何改 变将导致 PWM 频率的改变。详情请参见第 1.0 节 “器 件概述” 。

11.3.6

复位的影响

任何复位均将强制所有端口为输入模式, 并强制 CCP 寄 存器为其复位状态。

6.

DS41202F_CN 第 84 页

? 2008 Microchip Technology Inc.

PIC16F684
11.4 PWM (增强模式)
增强型 PWM 模式可在最多四个输出引脚上产生高达 10 位分辩率的PWM信号。 它通过四种PWM输出模式做到 : ? ? ? ? 单 PWM 半桥 PWM 全桥 PWM,正向模式 全桥 PWM,反向模式 PWM 输出与 I/O 引脚复用,并被指定为 P1A、 P1B、 P1C 和 P1D。 PWM 引脚的极性可配置,可通过将 CCP1CON 寄存器中的 CCP1M 位进行适当置 1 选择极 性。 表 11-4 所示为每个增强型 PWM 模式的引脚分配。 图 11-5 所示为增强型 PWM 模块的简化框图。 注: 一开始使能 PWM 时, 要防止产生不完整的 波形, ECCP 模块在产生 PWM 信号前应先 等待新的 PWM 周期开始。

要选择增强型 PWM 模式, CCP1CON 寄存器的 P1M 位 必须被正确置 1。

图 11-5:

增强型 PWM 模式的简化框图示例
DC1B<1:0> P1M<1:0> 2 CCP1M<3:0> 4

占空比寄存器 CCPR1L

CCP1/P1A TRIS CCPR1H (从动) 比较器 R Q 输出 控制器 P1C TMR2 (1) S P1D 清零 Timer2, 翻转 PWM 引脚并 锁存占空比 PWM1CON TRIS TRIS P1B TRIS

CCP1/P1A

P1B

P1C

比较器

P1D

PR2



1: 8 位定时器 TMR2 寄存器与 2 位内部 Q 时钟或 2 位预分频器连接,组成 10 位时基。



1: 必须正确配置每个 PWM 输出的 TRIS 寄存器值。 2: 清零 CCP1CON 寄存器将放弃所有 PWM 输出引脚的 ECCP 控制权。 3: 增强型 PWM 模式所不使用的任何引脚均可用于其他引脚功能。

表 11-4:
ECCP 模式 单 PWM 半桥 PWM 全桥,正向 全桥,反向

不同 PWM 增强模式的引脚分配示例
P1M<1:0> 00 10 01 11 CCP1/P1A 是 是 是 是 P1B 是 是 是 是 P1C 是 否 是 是 P1D 是 否 是 是

? 2008 Microchip Technology Inc.

DS41202F_CN 第 85 页

PIC16F684
图 11-6:
P1M<1:0>

PWM (增强模式)输出关系示例 (高电平有效状态)
单 PWM 0 PR2+1 脉冲宽度 周期

00

(单输出)

P1A 调制 P1A 调制

延时 (1)

延时 (1)

10

(半桥)

P1B 调制 P1A 有效 P1B 无效 P1C 无效 P1D 调制 P1A 有效

01

(全桥, 正向)

11

(全桥, 反向)

P1B 调制 P1C 有效 P1D 无效

关系:

? ? ?



周期 = 4 * TOSC * (PR2 + 1) * (TMR2 预分频比 ) 脉冲宽度 = TOSC * (CCPR1L<7:0>:CCP1CON<5:4>) * (TMR2 预分频比 ) 延时 = 4 * TOSC * (PWM1CON<6:0>) 1: 死区延时使用 PWM1CON 寄存器设置 (第 11.4.6 节 “可编程死区延时模式” ) 。

DS41202F_CN 第 86 页

? 2008 Microchip Technology Inc.

PIC16F684
图 11-7:
P1M<1:0>

PWM (增强模式)输出关系示例 (低电平有效状态)
单 PWM 0 脉冲宽度 周期 (单输出) P1A 调制 P1A 调制 PR2+1

00

10

(半桥)

延时 (1)

延时 (1)

P1B 调制 P1A 有效 P1B 无效 P1C 无效 P1D 调制 P1A 无效

01

(全桥, 正向)

11

(全桥, 反向)

P1B 调制 P1C 有效 P1D 无效

关系:

? ? ?

周期 = 4 * TOSC * (PR2 + 1) * (TMR2 预分频比 ) 脉冲宽度 = TOSC * (CCPR1L<7:0>:CCP1CON<5:4>) * (TMR2 预分频比 ) 延时 = 4 * TOSC * (PWM1CON<6:0>) 1: 死区延时使用 PWM1CON 寄存器设置 (第 11.4.6 节 “可编程死区延时模式” ) 。



? 2008 Microchip Technology Inc.

DS41202F_CN 第 87 页

PIC16F684
11.4.1 半桥模式
在半桥模式下,有两个引脚用作输出以驱动推挽负载。 PWM 输出信号被输出到 CCP1/P1A 引脚, 而互补 PWM 输出信号被输出到 P1B 引脚 (见图 11-6) 。此模式可 用于半桥应用,如图 11-17 所示,或用于全桥应用,此 时用两个 PWM 信号调制四个功率开关。 在半桥模式下,可使用编程死区延时防止半桥功率器件 中出现穿通电流。PWM1CON 寄存器的 PDC<6:0> 位用 于设置将输出驱动为有效前的指令数。如果该值大于占 空比,则相应的输出在整个周期中将保持无效状态。死 区延时操作的详情请参见第 11.4.6 节 “可编程死区延时 模式” 。 由于 P1A 和 P1B 输出与 PORT 数据锁存器复用,必须 清零相关的 TRIS 位以将 P1A 和 P1B 配置为输出。

图 11-8:

半桥 PWM 输出示例
周期 脉冲宽度 Period

P1A

(2)

td P1B(2)
(1)

td

(1)

(1)

td = 死区延时 注 1: 此时, TMR2 寄存器等于 PR2 寄存器。 2: 所示输出信号为高电平有效。

图 11-9:

半桥应用示例

标准半桥电路 ( “推挽” ) FET 驱动器 P1A

+ 负载

FET 驱动器 P1B

+ -

半桥输出驱动全桥电路 V+

FET 驱动器 P1A 负载

FET 驱动器

FET 驱动器 P1B

FET 驱动器

DS41202F_CN 第 88 页

? 2008 Microchip Technology Inc.

PIC16F684
11.4.2 全桥模式
在全桥模式下,所有四个引脚均用作输出。图 11-10 所 示为一个全桥应用示例。 在正向模式下, CCP1/P1A 引脚驱动为有效状态, P1D 引脚为调制输出,而 P1B 和 P1C 则被驱动为无效状态, 如图 11-11 所示。 在反向模式下,P1C 驱动为有效状态,P1B 引脚为调制 输出,而 P1A 和 P1D 则被驱动为无效状态,如图 11-11 所示。 P1A、 P1B、 P1C 和 P1D 输出与 PORT 数据锁存器复 用。必须清零相关 TRIS 位以将 P1A、 P1B、 P1C 和 P1D 引脚配置为输出。

图 11-10:

全桥应用示例
V+

FET 驱动器 P1A

QA

QC

FET 驱动器

P1B FET 驱动器

负载 FET 驱动器

P1C

QB

QD

VP1D

? 2008 Microchip Technology Inc.

DS41202F_CN 第 89 页

PIC16F684
图 11-11: 全桥 PWM 输出示例
正向模式 周期 P1A(2) 脉冲宽度 P1B(2)

P1C(2)

P1D(2)
(1) (1)

反向模式 周期 脉冲宽度 P1A(2) P1B(2) P1C(2)

P1D(2)
(1) (1)



1: 此时, TMR2 寄存器等于 PR2 寄存器。 2: 所示输出信号为高电平有效。

DS41202F_CN 第 90 页

? 2008 Microchip Technology Inc.

PIC16F684
11.4.2.1 在全桥模式下改变方向
在全桥模式下,CCP1CON 寄存器的 P1M1 位可供用户 控制正 / 反方向。当应用固件改变方向控制位时,模块 将在下一个 PWM 周期改变方向。 用软件改变 CCP1CON 寄存器的 P1M1 位可启动方向改 变。在当前 PWM 周期前的四个 Timer2 周期,发生以 下时序: ? ? ? 调制输出 (P1B 和 P1D)被置于无效状态。 相关的未调制输出 (P1A 和 P1C)切换为相反 方向驱动。 在下一个周期恢复 PWM 调制。 全桥模式不提供死区延时。在调制一个输出时,一般不 需要死区延时。但有一种情况需要死区延时。当以下两 个条件同时成立时即发生需要死区延时的情况: 1. 2. 输出占空比达到或接近 100% 时 PWM 输出方向 改变。 功率开关(包括功率器件和驱动器电路)的关断 时间大于导通时间。

此时序的图示请参见图 11-12。

图 11-13 所示为点空比接近 100% 时, PWM 方向从正 向变为反向的示例。此示例中,在时间 t1 处, P1A 和 P1D 输出变为无效,而 P1C 输出变为有效。由于功率 器件的关断时间大于导通时间,穿通电流将流过功率器 件 QC 和 QD (见图 11-10)并持续时间“t” 。当 PWM 方向由反向变为正向时,同样的情况将发生在功率器件 QA 和 QB 上。 如果某个应用要求在占空比很高时改变 PWM 方向,以 下提供了两种消除穿通电流的方法: 1. 2. 改变方向前将减小 PWM 占空比。 使用能使开关的关断时间快于导通时间的开关驱 动器。

其他防止穿通电流的方法也可能存在。

图 11-12: PWM 方向改变示例
信号 周期 (1) 周期

P1A (高电平有效) P1B (高电平有效) P1C (高电平有效) P1D (高电平有效) 脉冲宽度 注 1: CCP1CON 寄存器的方向位 P1M1 可在 PWM 周期的任何时刻被写入。 2: 改变方向时, P1A 和 P1C 信号在当前 PWM 周期结束前切换。此时 P1B 和 P1D 调制信号无效。此时长为 4 次 Timer2 计数。
(2)

脉冲宽度

? 2008 Microchip Technology Inc.

DS41202F_CN 第 91 页

PIC16F684
图 11-13: 占空比接近 100% 时 PWM 方向变化示例
正向周期 t1 反向周期

P1A P1B P1C P1D PW

PW TON

外部开关 C TOFF 外部开关 D 可能存在的 穿通电流 T = TOFF – TON



1: 图示的所有信号均为高电平有效。 2: TON 为功率开关 QC 及其驱动器的导通延时。 3: TOFF 为功率开关 QD 及其驱动器的关断延时。

11.4.3

启动考虑事项

使用任何 PWM 模式时,应用硬件中必须在 PWM 输出 引脚上使用适当的外部上拉 / 下拉电阻。 注: 单片机从复位退出时, 所有 I/O 引脚均为高 阻态。在单片机以正确的信号电平驱动 I/O 引脚或激活 PWM 输出前, 外部电路必须使 功率开关置于关断状态。

CCP1CON 寄存器的 CCP1M<1:0> 位可供用户选择每对 PWM 输出引脚 (P1A/P1C 和 P1B/P1D)的输出信号为 高电平有效还是低电平有效。 PWM 输出极性必须在使能 PWM 引脚的输出驱动器前选定。 我们不建议在 PWM 引 脚的输出驱动器使能时改变极性配置,因为这可能会损 坏应用电路。 在 PWM 模块初始化时,P1A、P1B、P1C 和 P1D 输出 锁存器可能不在正确的状态下。将 PWM 引脚的输出驱 动器与增强型 PWM 模式同时使能可能导致应用电路的 损坏。 增强型 PWM 模式必须在正确的输出模式下使能、 并且在 PWM 引脚的输出驱动器被使能前完成一整个 PWM 周期。 一整个 PWM 周期是否完成可通过查看 PIR1 寄存器的 TMR2IF 位在第二个 PWM 周期开始时是否置 1 查看。

DS41202F_CN 第 92 页

? 2008 Microchip Technology Inc.

PIC16F684
11.4.4
E 增强型 PWM 自动关闭模式 PWM 模块支持自动关闭模式, 它会在发生外部关闭事件 时禁止 PWM 输出。自动关闭模式会将 PWM 输出引脚 置于预定状态。该模块用于防止 PWM 损坏应用。 使用 ECCPAS 寄存器的 ECCPASx 位可选择自动关闭 源。关闭事件可由以下产生: ? ? ? ? INT 引脚出现逻辑 0 比较器 C1 比较器 C2 在固件中将 ECCPASE 位置 1 关闭状态由 ECCPAS 寄存器的 ECCPASE (自动关闭 事件状态)位指示。如果该位为 0, PWM 引脚正常工 作。如果该位为 1, PWM 输出处于关闭状态。 发生关闭事件时,将出现两个状况: ECCPASE 位置 1。 ECCPASE 保持置 1 状态直到被固 件清零或发生了自动重启(见第 11.4.5 节“自动重启模 式” ) 。 使能的 PWM 引脚被异步置于其关闭状态。 PWM 输出引 脚被分为两对 [P1A/P1C] 和 [P1B/P1D]。两对引脚的状 态由 ECCPAS 寄存器的 PSSAC 和 PSSBD 位决定。每 对引脚均可置于以下三种状态之一: ? ? ? 驱动为逻辑 1 驱动为逻辑 0 三态 (高阻态)

寄存器 11-2:
U-0 ECCPASE bit 7 图注:
R = 可读位 -n = POR 时的值

ECCPAS:增强型捕捉 / 比较 /PWM 自动关闭控制寄存器
U-0 ECCPAS2 R/W-0 ECCPAS1 R/W-0 ECCPAS0 R/W-0 PSSAC1 R/W-0 PSSAC0 R/W-0 PSSBD1 R/W-0 PSSBD0 bit 0

W = 可写位 1=置1

U = 未实现位,读为 0 0 = 清零 x = 未知

bit 7

ECCPASE:ECCP 自动关闭事件状态位 1 = 发生了自动关闭事件; ECCP 输出处于关闭状态 0 = ECCP 输出正常工作 ECCPAS<2:0>:ECCP 自动关闭源选择位 000 =禁止自动关闭 001 =比较器 1 输出变化 010 =比较器 2 输出变化 011 =比较器 1 或 2 之一变化 100 =INT 引脚电压为 VIL 101 =INT 引脚电压为VIL 或比较器 1 变化 110 =INT 引脚电压为 VIL 或比较器 2 变化 111 =INT 引脚电压为 VIL 或比较器 1/2 之一变化 PSSACn:P1A 和 P1C 引脚关闭状态控制位 00 = 驱动引脚 P1A 和 P1C 为 0 01 = 驱动引脚 P1A 和 P1C 为 1 1x = P1A 和 P1C 引脚为三态 PSSBDn:P1B 和 P1D 引脚关闭状态控制位 00 = 驱动引脚 P1B 和 P1D 为 0 01 = 驱动引脚 P1B 和 P1D 为 1 1x = P1B 和 P1D 引脚为三态

bit 6-4

bit 3-2

bit 1-0

? 2008 Microchip Technology Inc.

DS41202F_CN 第 93 页

PIC16F684
注 1: 自动关闭条件是基于电平的信号,而非基 于边沿的信号。只要电平不变,自动关闭 就不变。 2: 自动关闭条件下禁止写入 ECCPASE 位。 3: 一旦自动关闭条件被清除并且 PWM 重启 (通过固件或自动重启) ,PWM 信号将始 终在下一个 PWM 周期开始时重启。

图 11-14: 固件重启时的 PWM 自动关闭 (PRSEN = 0)
PWM 周期 关闭事件 ECCPASE 位 PWM 活动 正常 PWM PWM 周期开始 发生关闭事件 ECCPASE 用固件 清零 恢复 PWM 关闭事件 被清除

11.4.5

自动重启模式

增强型 PWM 可配置为在自动关闭条件被清除时自动重 启 PWM 信号。 通过将 PWM1CON 寄存器中的 PRSEN 位置 1 可使能自动重启。 使能自动重启时,只要自动关闭条件有效, ECCPASE 位就保持置 1。当自动关闭条件被清除时, ECCPASE 位将被硬件清零,恢复正常工作。

图 11-15: 自动重启使能时的 PWM 自动关闭 (PRSEN = 1)
PWM 周期 关闭事件 ECCPASE 位 PWM 活动 正常 PWM PWM 周期开始 发生关闭事件 关闭事件 被清除 恢复 PWM

DS41202F_CN 第 94 页

? 2008 Microchip Technology Inc.

PIC16F684
11.4.6 可编程死区延时模式 图 11-16: 半桥 PWM 输出示例
周期 脉冲宽度 P1A(2) td P1B(2)
(1)

在所有功率开关均调制为 PWM 频率的半桥应用中,功 率开关从关断到导通通常需要较长的时间。如果上下两 个功率开关同时动作 (一个导通另一个关断) ,在一个 开关完全关断前,两个开关可能在一个很短的时间内同 时导通。在这段很短的时间内,在两个功率开关中会流 ,使桥路 过极高的电流 (穿通 (shoot-through)电流) 的电源短路。为避免在开关时出现这种极具破坏力的穿 通电流,通常使任一功率开关的导通时间延后,以使另 一个开关有时间完全关断。 在半桥模式下,使用数字可编程死区延时来避免穿通电 流破坏桥路的功率开关。信号从无效状态变为有效状态 时 发 生 延 时。请 参 见 图 11-17 中 的 图 解 说 明。相关 PWM1CON 寄存器 (寄存器 11-3)的低七位以单片机 的指令周期 (TCY,即 4 TOSC)为单位设置延时期限。

周期

td

(1)

(1)

td = 死区延时 注 1: 此时, TMR2 寄存器等于 PR2 寄存器。 2: 所示输出信号为高电平有效。

图 11-17: 半桥应用示例
标准半桥电路 (“ 推挽 ”) FET 驱动器 P1A V+

+ V 负载

FET 驱动器 P1B

+ V -

V-

? 2008 Microchip Technology Inc.

DS41202F_CN 第 95 页

PIC16F684
寄存器 11-3:
R/W-0 PRSEN bit 7 图注:
R = 可读位 -n = POR 时的值 W = 可写位 1=置1 U = 未实现位,读为 0 0 = 清零 x = 未知

PWM1CON:增强型 PWM 控制寄存器
R/W-0 PDC6 R/W-0 PDC5 R/W-0 PDC4 R/W-0 PDC3 R/W-0 PDC2 R/W-0 PDC1 R/W-0 PDC0 bit 0

bit 7

PRSEN:PWM 重启使能位 1 = 自动关闭时, ECCPASE 位在退出关闭事件时自动清零) PWM 自动重启 0 = 自动关闭时,必须用软件将 ECCPASE 清零以重启 PWM PDC<6:0>:PWM 延时计数位 PDCn = 预定 PWM 信号应转变为有效与 PWM 信号实际转为有效之间的 FOSC/4 (4 * TOSC) 周期数 1: 双速启动并选择了 LP、 XT 或 HS 时,或使能了故障保护模式时,该位复位为 0。

bit 6-0



表 11-5:
名称 CCPR1L CCPR1H CCP1CON CMCON0 CMCON1 ECCPAS INTCON PIE1 PIR1 PR2

捕捉 / 比较 /PWM 相关的寄存器汇总
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 POR 和 BOR 时的值 所有其他 复位值

捕捉 / 比较 /PWM 寄存器 1 的低字节 捕捉 / 比较 /PWM 寄存器 1 的高字节 P1M1 P1M0 DC1B1 DC1B0 C2OUT — GIE EEIE EEIF C1OUT — PEIE ADIE ADIF C2INV — T0IE CCP1IE CCP1IF C1INV — INTE C2IE C2IF PDC4 CCP1M3 CIS — RAIE C1IE C1IF PDC3

xxxx xxxx uuuu uuuu xxxx xxxx uuuu uuuu CCP1M2 CCP1M1 CCP1M0 0000 0000 0000 0000 CM2 — PSSAC0 T0IF OSFIE OSFIF PDC2 CM1 T1GSS PSSBD1 INTF TMR2IE TMR2IF PDC1 CM0 0000 0000 0000 0000 C2SYNC ---- --10 ---- --10 PSSBD0 0000 0000 0000 0000 RAIF TMR1IF PDC0 0000 0000 0000 0000 0000 0000 0000 0000 1111 1111 1111 1111 0000 0000 0000 0000 TMR1CS TMR1ON 0000 0000 uuuu uuuu xxxx xxxx uuuu uuuu xxxx xxxx uuuu uuuu 0000 0000 0000 0000 TRISA3 TRISC3 TRISA2 TRISC2 TRISA1 TRISC1 TRISA0 TRISC0 --11 1111 --11 1111 --11 1111 --11 1111 TMR1IE 0000 0000 0000 0000

ECCPASE ECCPAS2 ECCPAS1 ECCPAS0 PSSAC1

Timer2 模块周期寄存器 PWM1CON PRSEN PDC6 PDC5 T1CON T2CON TMR1L TMR1H TMR2 TRISA TRISC 图注: T1GINV —

TMR1GE T1CKPS1 T1CKPS0 T1OSCEN T1SYNC

TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 -000 0000

16 位 TMR1 寄存器最低有效位的保持寄存器 16 位 TMR1 寄存器最高有效位的保持寄存器 Timer2 模块寄存器 — — — — TRISA5 TRISC5 TRISA4 TRISC4

– = 未实现单元,读为 0, u = 不变, x = 未知。捕捉 / 比较 /PWM 不使用阴影单元。

DS41202F_CN 第 96 页

? 2008 Microchip Technology Inc.

PIC16F684
12.0 CPU 的特殊功能
12.1 配置位
PIC16F684 有许多功能, 旨在最大限度地提高系统可靠 性,通过减少外部元件将成本降至最低,并提供省电工 作模式和代码保护功能。 这些功能包括: ? 复位 - 上电复位 (POR) - 上电延时定时器 (PWRT) - 振荡器起振定时器 (OST) - 欠压复位 (BOR) ? 中断 ? 看门狗定时器 (WDT) ? 振荡器选择 ? 休眠 ? 代码保护 ? ID 地址单元 ? 在线串行编程 PIC16F684 有两个定时器提供必要的上电延时。一个 是振荡器起振定时器 (OST) ,旨在确保芯片在晶体振 荡器达到稳定之前始终处于复位状态。另一个是上电延 时定时器 (PWRT) ,仅在上电时提供 64 ms (标称 值)的固定延时,用来确保器件在供电电压稳定之前处 于复位状态。还有当器件发生欠压时使器件复位的电 路,该电路可使用上电延时定时器,提供至少 64 ms 的 复位延时。有了这三种片上功能,绝大多数应用就无需 再外接复位电路了。 休眠模式的设计是为了提供了电流极低的掉电模式。用 户可通过以下方法将器件从休眠模式唤醒: ? 外部复位 ? 看门狗定时器唤醒 ? 中断 有几种振荡器模式可供选择,以使器件适应各种应用。 选择 INTOSC 可节约系统成本,而选择 LP 晶振可以节 能。通过配置位的设定可选择 不同选项 (见 寄存器 12-1) 。 注: 地址 2007h 超出了用户程序存储器空间范 围。它属于特殊配置存储器空间 (2000h3FFFh),只能在编程时对其进行访问。更 多 信 息,请 参 见 “PIC12F6XX/16F6XX Memory Programming Specification” (DS41204) 。 可以通过对配置位编程 (读为 0)或不编程 (读为 1) 来选择不同的器件配置, 如寄存器 12-1 所示。 这些位映 射到程序存储器地址单元 2007h 中。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 97 页

PIC16F684
寄存器 12-1:
— bit 15

CONFIG:配置字寄存器
— — — FCMEN IESO BOREN1 BOREN0 bit 8

CPD bit 7
图注: R = 可读位 -n = POR 时的值

CP

MCLRE

PWRTE

WDTE

FOSC2

FOSC1

FOSC0 bit 0

W = 可写位 1=置1

P = 可编程 0 = 清零

U = 未实现位,读为 0 x = 未知

bit 15-12 bit 11

未实现: 读为 1 FCMEN:故障保护时钟监视器使能位 1 = 使能故障保护时钟监视器 0 = 禁止故障保护时钟监视器 IESO:内部外部切换位 1 = 使能内部外部切换模式 0 = 禁止内部外部切换模式 BOREN<1:0>:欠压复位选择位 (1) 11 = 使能 BOR 10 = 工作时使能 BOR 且休眠时禁止 BOR 01 = BOR 由 PCON 寄存器的 SBOREN 位控制 00 = 禁止 BOR CPD:数据代码保护位 (2) 1 = 禁止数据存储器代码保护 0 = 使能数据存储器代码保护 CP:代码保护位 (3) 1 = 禁止程序存储器代码保护 0 = 使能程序存储器代码保护 MCLRE:RA3/MCLR 引脚功能选择位 (4) 1 = RA3/MCLR 引脚功能为 MCLR 0 = RA3/MCLR 引脚功能为数字输入, MCLR 内部连接到 VDD PWRTE:上电延时定时器使能位 1 = 禁止 PWRT 0 = 使能 PWRT WDTE:看门狗定时器使能位 1 = 使能 WDT 0 = 禁止 WDT,同时它呆通过 WDTCON 寄存器的 SWDTEN 位使能 FOSC<2:0>:振荡器选择位 111 =RC 振荡器:RA4/OSC2/CLKOUT 引脚为 CLKOUT 功能, RA5/OSC1/CLKIN 连接 RC 110 =RCIO 振荡器:RA4/OSC2/CLKOUT 引脚为 I/O 功能, RA5/OSC1/CLKIN 连接 RC 101 =INTOSC 振荡器:RA4/OSC2/CLKOUT 引脚为 CLKOUT 功能, RA5/OSC1/CLKIN 为 I/O 功能 100 = INTOSCIO 振荡器:RA4/OSC2/CLKOUT 引脚为 I/O 功能, RA5/OSC1/CLKIN 为 I/O 功能 011 =EC:RA4/OSC2/CLKOUT 引脚为 I/O 功能, RA5/OSC1/CLKIN 连接 CLKIN 010 =HS 振荡器:RA4/OSC2/CLKOUT 和 RA5/OSC1/CLKIN 上连接高速晶体 / 谐振器 001 = XT 振荡器:RA4/OSC2/CLKOUT 和 RA5/OSC1/CLKIN 上连接晶体 / 谐振器 000 = LP 振荡器:RA4/OSC2/CLKOUT 和 RA5/OSC1/CLKIN 上连接低功耗晶体

bit 10

bit 9-8

bit 7

bit 6

bit 5

bit 4

bit 3

bit 2-0



1: 2: 3: 4:

使能欠压复位不会自动使能上电延时定时器。 关闭代码保护时,整个数据 EEPROM 都将被擦除。 关闭代码保护时,整个程序 EEPROM 都将被擦除。 在 INTOSC 或 RC 模式下当 MCLR 有效时,内部时钟振荡器被禁止。

DS41202F_CN 第 98 页

? 2008 Microchip Technology Inc.

PIC16F684
12.2 校准位
欠压复位 (BOR) 、上电复位 (POR)和 8 MHz 内部 振荡器(HFINTOSC)均在出厂时经过校准。其校准值 均 存 储 在 校 准 字 寄 存 器 (2009h)的 熔 丝 中。利 用 “PIC12F6XX/16F6XX Memory Programming Specification” (DS41244)中所述的整块擦除序列无 法擦除校准字,因此无需重新编程。 有些寄存器不受任何复位的影响;在上电复位时它们的 状态未知,而在其他复位时状态不变。大多数寄存器在 以下复位时会复位到各自的 “复位状态” : ? ? ? ? 上电复位 MCLR 复位 休眠期间的 MCLR 复位 WDT 复位

12.3
a) b) c) d) e) f)

复位

TPIC16F684 有以下几种不同类型的复位: 上电复位 (POR) 正常工作期间的 WDT 复位 休眠期间的 WDT 复位 正常工作期间的 MCLR 复位 休眠期间的 MCLR 复位 欠压复位 (BOR)

WDT 唤醒不会导致寄存器像 WDT 复位那样复位, 这是 因为唤醒被视为恢复正常工作。 TO 和 PD 位在不同的 复位情形下会分别被置 1 或清零,如表 12-2 所示。软 件可使用这些位判断复位的性质。所有寄存器详细复位 状态如表 12-4 所示。 图 12-1 给出了片上复位电路的简化框图。 MCLR 复位路径上有一个噪声滤波器,用来检测并滤除 小脉冲。关于脉冲宽度规范,请参见第 15.0 节 “电气 特性” 。

图 12-1:

片上复位电路的简化框图

外部复位 MCLR/VPP 引脚 WDT 模块 VDD 上升 检测 VDD 上电复位 欠压 (1) 复位 BOREN SBOREN S

SLEEP WDT 超时复位

OST/PWRT OST 10 位纹波 (异步) 计数器 OSC1/ CLKI 引脚 PWRT LFINTOSC 11 位纹波计数器 R Q 片选

使能 PWRT 使能 OST



1: 请参见配置字寄存器 (寄存器 12-1) 。

? 2008 Microchip Technology Inc.

DS41202F_CN 第 99 页

PIC16F684
12.3.1 上电复位 (POR) 图 12-2: 建议的 MCLR 电路
VDD

在 VDD 达到足以使器件正常工作的电平之前,片上上电 复位电路将使器件保持在复位状态。要有效利用 POR, 只要将 MCLR 引脚通过一个电阻连接到 VDD 即可。 需要 一个最大上升时间才能达到 VDD。详见第 15.0 节“电气 特性” 。如果使能了欠压复位,那么该最大上升时间规 范将不再适用。欠压复位电路将使器件保持在复位状 态,直到 VDD 达到 VBOR (见第 12.3.4 节 “欠压复位 (BOR) ” ) 。 注: 当 VDD 降低时,上电复位电路不会产生内 部复位。要重新使能上电复位, VDD 必须 至少保持 100 ?s 的 Vss 电压。
SW1 (可选)

R1 1 k? (或更大) R2

PIC? MCU

MCLR 100 ? (需要与电容共用) C1 0.1 ?F (可选 , 非关键元件)

当器件开始正常工作 (退出复位状态)时,器件的工作 参数 (即电压、频率和温度等)必须得到满足,以确保 其正常工作。如果不满足这些条件,那么器件必须保持 在复位状态,直到满足工作条件为止。

“Power-up 更 多 信 息,请 参 见 应 用 笔 记 AN607, Trouble Shooting” (DS00607) 。

12.3.3

上电延时定时器 (PWRT)

12.3.2

MCLR

PIC16F684 在 MCLR 复位路径中有一个噪声滤波器。 该滤波器检测并滤除小脉冲。 应注意, WDT 复位不会将 MCLR 引脚驱动为低电平。 若施加在 MCLR 引脚上的电压超出规范值,则在 ESD 事件发生期间可导致 MCLR 复位且器件中流过超过规 范值的过电流。因此, Microchip 建议不要把 MCLR 引 脚直接连接到 VDD。 建议使用图 12-2 给出的 RC 网络。 通过清零配置字寄存器中的 MCLRE 位,可使能内部 MCLR 选项。当 MCLRE = 0 时,在内部产生芯片的复 位信号。当 MCLRE = 1 时, RA3/MCLR 引脚变成外部 复位输入。 在这种模式下,RA3/MCLR 引脚具有到 VDD 的弱上拉功能。

上电延时定时器仅在上电时(上电复位或欠压复位)提 供一个 64 ms (标称值)的固定延时。上电延时定时器 采用 LFINTOSC 振荡器作为时钟源,工作频率为 31 kHz。更多信息,请参见第 3.5 节“内部时钟模式” 。 只要 PWRT 处于活动状态,芯片就保持在复位状态。 配 PWRT 延时使 VDD 有足够的时间上升到所需的电平。 置位 PWRTE 可以禁止(如果置 1)或使能(如果清零 或被编程)上电延时定时器。虽然不是必需的,但是在 使能欠压复位时也应使能上电延时定时器。 由于以下原因不同芯片的上电延时定时器的延时也各不 相同: ? VDD 差异 ? 温度差异 ? 制造工艺差异 详见直流参数 (第 15.0 节 “电气特性” ) 。

注:

在 MCLR 引脚的低于 VSS 的电压尖峰,包 括大于 80 mA 的电流, 可导致闭锁。 因此, 在 MCLR 引脚上施加 “低”电平时,应使 用阻值在 50-100? 的串联电阻,而不是将 该引脚直接拉到 VSS。

DS41202F_CN 第 100 页

? 2008 Microchip Technology Inc.

PIC16F684
12.3.4 欠压复位 (BOR)
配置字寄存器中的 BOREN0 和 BOREN1 位用于选择 4 种欠压复位模式中的一种。其中添加了两种允许使用软 件或硬件对 BOR 的 使 能 进 行 控 制 的 模式。当 BOREN<1:0> = 01 时, 可由 PCON 寄存器的 SBOREN 位使能 / 禁止 BOR,从而能用软件对其进行控制。通过 选择 BOREN<1:0>,可使欠压复位在休眠时被自动禁 止,从而节约功耗;而在唤醒后被重新使能。在此模式 下,SBOREN 位被禁止。关于配置字的定义,请参 见寄存器 12-1。 如果 VDD 下降到 VBOR 以下,且持续时间超过参数值 (TBOR) (见第 15.0 节 “电气特性” ) ,欠压状况将使 器件复位。不管 VDD 的变化速率如何,上述情况都会发 , 生。如果 VDD 低于 VBOR 的时间少于参数值 (TBOR) 则不一定会发生复位。 任何复位 (上电复位

推荐相关:

16F684中文说明书.pdf

16F684中文说明书 - PIC16F684 数据手册 采用纳瓦技术的 14


PIC16F684中文资料.pdf

PIC16F684中文资料_电子/电路_工程科技_专业资料。PIC16F684


PIC使用手册_图文.pdf

说明 1)外部输入电源为必须为5V,极性为内正外负,如下图所示: 注意:使用错误...16F684 16F688 *16F73 16F737 *16F74 16F747 16F76 16F767 16F77 16F777...


APP021_使用手册.pdf

APP021_使用手册_信息与通信_工程科技_专业资料。app021开发板电路原理图MICROCHIP...iphone4完全中文版使用手... 21页 免费 16F684中文说明书 192页 免费 单片机...


ICD2使用说明书.doc

软件附在随机光盘中,也可到网站上下载.软件详细使用说明请查阅 MPLAB IDE 中文...PIC16F630/676 PIC16F627A/628A/648A PIC16F716 PIC16F684 PIC16F688 PIC...


B型编程器使用说明书.doc

B 型编程器 编程器 使用说明书 (使用前请仔细阅读) 使用前请仔细阅读) 上海...PIC16F630/676/684 2.3.4 烧录 C61F120/132/21 母片为 PIC12F629/675/...


L90多功能编程器使用说明书.pdf

既适合于电子和电脑爱好者使用,也适合于电子电 脑维修人员和单片机开发人员使用...器使用说明 -5- PIC12F675 , PIC16F676 , PIC16F684 ,PIC16F767, PIC16F...


mplab ICD2-0625烧写器使用说明.doc

PIC16F630/676 PIC16F627A/628A/648A PIC16F716 PIC16F684 PIC16F688 PIC...更多错误类型,请查看MPLAB帮助文档和 ICD2中文说明书。 下编译通过的程序, 5、...


icd2使用指南.pdf

PIC16F630! PIC16F636! PIC16F639* PIC16F648A! PIC16F676! PIC16F684! ...! 需要仿真头,详情见ICD2使用说明。 !! 需要PIC10F2XX系列通用编程适配器。 ...


K150单片机编程器使用说明_图文.pdf

K150单片机编程器使用说明 - PIC 系列K150单片机编程器、下载器用户操作说明书... K150单片机编程器使用说明_电子/电路_...16F684 PIC16F685 PIC16F689 PIC16F689...

网站首页 | 网站地图
All rights reserved Powered by 酷我资料网 koorio.com
copyright ©right 2014-2019。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com