无线电电子与电气工程百科全书 微控制器PIC16C84。 简短的介绍。 无线电电子电气工程百科全书 此描述并不完整,并且包含许多错误和拼写错误。 完整的文档可以从 Microchip 经销商处获得,其地址在文件末尾给出。 介绍 PIC16C84 属于 CMOS 微控制器系列。 不同之处在于它有一个用于程序的内部 1K x 14 位 EEPROM、8 位数据和 64 字节数据存储器的 EEPROM。 同时,它们具有低成本和高性能的特点。 熟悉 PIC16C5X 系列的用户可以查看新的和以前生产的控制器之间的详细差异列表。 所有指令都是一个字(14 位宽)并在一个周期内执行(400 MHz 时为 10 ns),除了跳转指令,它在两个周期内执行(800 ns)。 PIC16C84 具有四源中断和八级硬件堆栈。 外设包括一个 8 位定时器/计数器和一个 8 位可编程预分频器(实际上是一个 16 位定时器)和 13 条双向 I/O 线。 I/O 线的高负载能力(最大吸收 25mA,最大吸收 20mA)简化了外部驱动器,从而降低了整体系统成本。 汇编器、软件模拟器、在线仿真器(仅限 Microchip)和编程器支持基于 PIC16C84 控制器的开发。 PIC16C84 系列适用于从高速汽车和电动机控制电路到经济高效的远程收发器、指示仪器和通信处理器的广泛应用。 ROM 的存在允许您调整应用程序中的参数(发射器代码、发动机速度、接收器频率等)。 传统和表面贴装的小封装尺寸使该系列微控制器适用于便携式应用。 低廉的价格、经济性、速度、易用性和 I/O 灵活性使 PIC16C84 即使在以前未使用过微控制器的领域也具有吸引力。 例如,计时器、替换大型系统中的硬逻辑、协处理器。 需要补充的是,PIC16C84 的内置 EEPROM 编程器即使在组装和测试完成后,也可以根据特定要求轻松定制程序和数据。 这种可能性既可用于复制,也可用于在最终测试后输入校准数据。 功能概述 - 只有 35 个简单的命令; - 所有命令都在一个周期(400ns)内执行,除了转换命令-2个周期; - 工作频率 0 Hz ... 10 MHz(最小 400 ns 命令周期) - 14 位命令; - 8 位数据; - 1024 x 14 片上电可重编程程序存储器 (EEPROM); - 36 x 8 通用寄存器; - 15个特殊硬件寄存器SFR; - 64 x 8 用于数据的电可编程 EEPROM 存储器; - 八级硬件堆栈; - 数据和命令的直接、间接和相对寻址; - 四个中断源: . 外部输入 INT . RTCC 定时器溢出 . 端口 B 线路上的信号变化中断 . 数据写入 EEPROM 存储器完成后 外设和 I/O - 13 条 I/O 线,可单独设置; - 灌入/灌入电流以驱动 LED . 最大输入电流 - 25 mA . 最大流动电流 - 20 mA - 具有 8 位可编程预分频器的 8 位 RTCC 定时器/计数器; - 开机自动复位; - 重置时包含的计时器; - 发电机启动定时器; - 看门狗 WDT 定时器带有自己的内置发生器,提供更高的可靠性; - 用于保护代码的 EEPROM 安全位; - 经济的睡眠模式; - 用户可选择位设置内置振荡器的驱动模式: - RC 发生器:RC - 传统石英谐振器:XT - 高频石英谐振器:HS - 经济型低频晶体:LP - 内置EEPROM编程器,用于程序和数据存储器; 只使用了两条腿。 CMOS技术 - 经济的高速CMOS EPROM技术; - 建筑中的静态原则; - 宽范围的电源电压和温度: . 商用:2.0 ... 6.0 V,0...+70C . 工业:2.0 ... 6.0 V,-40...+70С . 汽车:2.0 ... 6.0 V,-40...+125С - 低消耗 . 3V、5MHz 典型值为 4 mA . 50V、2kHz 典型值为 32µA . 26V 时休眠模式的典型值为 2µA。 PIC16C84结构图 该架构基于数据和命令的独立总线和内存区域的概念(哈佛架构)。 数据总线和数据存储器 (RAM) 为 8 位宽,程序总线和程序存储器 (ROM) 为 14 位宽。 这个概念提供了一个简单而强大的指令集,旨在使位、字节和寄存器操作高速运行,并在指令获取和执行周期时间重叠。 14 位程序存储器宽度允许在一个周期内获取 14 位指令。 两级流水线提供一条指令的同时取指和执行,所有指令在一个周期内执行,不包括跳转指令。 PIC16C84 具有位于片内的 1K x 14 程序存储器。 可执行程序只能驻留在内置 ROM 中。 PIC16C84 和 PIC16C5x 的区别 1.命令长度增加到14位。 这使您可以使用增加的页面大小来组织 ROM 和 RAM:(2K 字节而不是 512 字节),(128 字节而不是 32 字节),分别。 2. 程序计数器高位寄存器 (PCLATH) 控制程序存储器中的页面切换。 在 PIC2C1X 晶振中用于此目的的页选择位 PA0、PA16、PA5 从 STATUS 寄存器中删除。 3、修改了内存分页和STATUS寄存器。 4. 新增四个命令:RETURN、RETFIE、ADDLW、SUBLW。 不再需要 TRIS 和 OPTION 这两个命令,但为了与 PIC16C5X 软件兼容而保留。 5. OPTION 和 TRIS 寄存器可按编号寻址。 6. 增加了处理中断的能力。 向量=0004h。 7. 堆栈大小增加到八级。 8.上电复位地址改为0000h。 9. 可识别五种不同类型的复位(从 SLEEP 模式退出)。 寄存器初始化已更改。 它们的设置不同,具体取决于重置的类型。 10.增加了通过中断退出睡眠模式。 11. 为了更可靠的启动,添加了以下硬件延迟:启动定时器(OST)和开机定时器(PWRT)。 在开启和退出睡眠模式时,可以有选择地使用这些定时器来避免不必要的延迟。 12. 当输入信号改变时,端口 B 有活动负载和中断。 13. RTCC 脚与端口脚 (RA4) 对齐。 14.寄存器地址07h(端口C)不存在,不是通用寄存器。 15. 存放间接寻址指针的寄存器 FSR (f4) 变成了 XNUMX 位宽。 16.实现了内置EEPROM编程机。 用户可以仅使用五个引脚对 PIC16C84 进行编程:Vdd、Vss、/MCLR/Vpp、RB6(时钟)、RB7(数据输入/输出)。 从 PIC16C5x 过渡到 PIC16C84 要将为 PIC16C5X 编写的代码转换为 PIC16C84 的代码,用户必须执行以下步骤: 1. 用 CALL、GOTO 命令替换选择程序存储器页面(位 PA2、PA1、PA0)的操作。 2. 检查所有计算的跳转操作(写入 PC 或添加到 PC 等)并确保为新芯片正确设置页位。 3. 消除数据存储器页面切换。 重新定义变量并为它们重新分配内存。 4.检查STATUS、OPTION、FSR寄存器中的条目,因为它们稍作修改。 5. 将上电复位向量更改为 0000h。 6. 请注意,地址 07h 是一个不存在的数据存储器地址。 外壳类型和版本 PIC16C8x 晶体的封装名称。 订购微电路时,封装类型会在标记中注明。 手机壳只有 18 个引脚。 PDIP - 普通塑料两排外壳。 用于晶体的 OTP EPROM 版本。 SOIC - 小型 DIP 表面贴装封装 微电路的执行分为三种类型:商业、工业和汽车电子。 它们的主要区别在于温度范围和工作电压。 商业执行 工作温度 0 ... +70 C 工作电压 3.0 ... 5.5 V 工业版 工作温度 -40 .... +85 C 工作电压 3.0 ... 5.5 V 车辆版本 工作温度 -40 ... +125 C 工作电压 3.0 ... 5.5 V 下单时标注 微电路的名称包括以下字段: <公司编号>-<发电机频率><温度范围>/<机身><备注> <公司编号可能是>:PIC16C84 - Vdd 范围 4...6 V PIC16LC84 Vdd 范围 2...6 V <发端频率>: 04 ---> 4 mHz 10 ---> 10 兆赫兹 温度范围为: - 从 0С 到 +70С 我从 -40С 到 +85С E 从 -40С 到 +125С 正文标有: P——普通塑料DIP SO-300 密尔 SOIC 示例: PIC16C84-04/Pxxx 4 mHz,商业版 PDIP 封装,Vdd 正常范围,带有 xxx 程序的掩码 ROM PIC16LC84-04I/SO 4 mHz,工业版,扩展功率范围,外壳=SOIC PIC16C84-10E/P 汽车版,10 mHz,PDIP,典型值。 食物 腿部布局 关于引脚的功能,请参见“引脚名称”或框图。 有关 PDIP 外壳类型等,请参阅外壳。 腿的目的 腿的名称及其功能用途。 电参数最大值 超出这些限制的参数可能会损坏芯片。 晶体长时间在其极限值运行会影响其可靠性。 注: 1. 每个机箱的总功耗不得超过 800mW。 耗散功率使用以下公式计算: Pdis= Vdd(Idd - Sum(Ioh)) + Sum ((Vdd - Voh)Ioh) + Sum (Vol Iol) 2. 将 /MCLR 引脚上的电压降至 Vss(ground) 以下会产生大于 80mA 的高电流,并可能损坏该线路。 因此,我们建议您通过一个 50-100 欧姆的终端电阻将信号施加到 /MCLR 引脚。 寄存器和 RAM 概述 RAM 区域组织为 128 x 8。可以通过 FSR 指针寄存器 (04h) 直接或间接寻址 RAM 单元。 这也适用于常量数据存储器的 EEPROM。 状态寄存器 (03h) 包含页面选择位,允许访问该芯片未来版本的四页。 但是,对于 PIC16C84,数据存储器仅存在到地址 02Fh。 前 12 个地址用于放置专用寄存器。 地址为 0Ch-2Fh 的寄存器可用作通用寄存器,即静态 RAM。 一些特殊用途的寄存器在两页上是重复的,有些则分别位于第 1 页上。 设置页面 1 时,访问地址 8Ch-AFh 有效地寻址页面 0。寄存器可以直接或间接寻址。 在这两种情况下,最多可以寻址 512 个寄存器。 直接寻址 当执行直接 9 位寻址时,低 7 位作为来自操作码的直接地址和来自状态寄存器 (1h) 的两个页指针位 (RP0,RP03)。 间接寻址 f4 - 间接地址指针 任何使用 f0(地址 00)作为寄存器的指令实际上都会访问存储在 FSR(04h)中的指针。 间接读取 f0 本身将导致 00h。 写入寄存器 f0 将隐含地看起来像 Nop,但可以更改状态位。 所需的 9 位地址由 8 位 FSR 寄存器的内容和状态寄存器中的 IRP 位组合而成。 请注意,一些特殊功能寄存器位于第 1 页。要寻址它们,您必须另外将状态寄存器中的 RP0 位设置为 XNUMX。 RTCC 定时器/计数器 RTCC 使能框图如下所示。 它包含元素“MUX” - 这是一个电子开关。 通过将 OPTION 寄存器中的 RTS 位复位为零来选择定时器模式。 在定时器模式下,RTCC 将从内部频率源递增 - 每个命令周期(无预分频器)。 将信息写入 RTCC 后,它将在两个指令周期后开始递增。 这发生在所有写入或读取-修改-写入 f1 的指令(例如,MOVF f1、CLRF f1)中。 这可以通过将调整后的值写入 RTCC 来避免。 如果需要在不停止计数的情况下检查 RTCC 是否为零,请使用 MOVF f1,W 指令。 通过将 OPTION 寄存器中的 RTS 位设置为 4 来选择计数器模式。 在此模式下,RTCC 将通过 EXT 事件的 RA0/RTCC 引脚上的上升沿或下降沿递增。 边沿的方向由 OPTION 寄存器中的 RTE 控制位决定。 RTE=0 时,将选择上升沿。 限幅器可与 RTCC 或看门狗定时器一起使用。 分频器连接选项由 OPTION 寄存器中的 PSA 位控制。 当 PSA=00 时,分频器将连接到 RTCC。 程序无法使用分隔符的内容。 除法系数 - 可编程。 当 RTCC 定时器/计数器在从 FFH 转换到 2h 时发生溢出时,会产生 RTCC 中断。 然后设置 INTCON<5> 寄存器中的 RTIF 请求位。 该中断可以被 INTCON<XNUMX> 寄存器中的 RTIE 位屏蔽。 处理中断时,RTIF 请求位必须由软件清零。 RTCC 中断无法将处理器从休眠状态唤醒,因为定时器在此模式下不起作用。 定时器问题 计算外部信号时可能会出现问题。 这些信号由内部时钟信号选通,请参见 SYNC 图。 输入信号的上升沿和 RTCC 增量时间之间存在一定的延迟。 选通在限制器之后完成。 在每个命令周期内轮询限制器输出两次以确定输入信号的上升沿和下降沿。 因此,Psout 信号必须为高电平和低电平至少两个时钟周期。 不使用限幅器时,Psout 会重复输入信号,因此对它的要求如下: Trth= RTCC 高电平时间 >= 2tosc+20ns Trtl= RTCC 低电平时间 >= 2tosc+20ns。 使用限幅器时,RTCC 输入除以分频器计数器中设置的数字。 限幅器之后的信号总是对称的。 Psout 高电平时间 = Psout 低电平时间 = NTrt/2, 其中,Trt 是 RTCC 输入周期, N 是分频器计数器的值 (2,4...256)。 在这种情况下,对输入信号的要求可以表示为: NTrt/2 >= 2tosc +20ns 或 Trt >= (4tosc + 40ns)/N。 使用限幅器时,其输入端的低电平和高电平信号电平必须至少为 10 ns。 因此,连接分频器时对外部信号的一般要求如下: Trt= RTCC 周期 >= (4tosc + 40ns)/N Trth = RTCC 高电平时间 >= 10ns Trtl = RTCC 低电平时间 >= 10ns。 由于限幅器输出由内部时钟提供时钟,因此在外部时钟的上升沿与实际 RTCC 增量时间之间存在轻微延迟。 这个延迟在 3tosc 和 7tosc 之间。 因此,事件间隔的测量将以 4tosc 的精度(在 400 MHz 石英时为 +-10ns)执行。 状态寄存器 寄存器 (f3) 包含 ALU 的算术标志、控制器复位状态和数据存储器的页选择位。 (f3) 可用于任何命令,就像任何其他寄存器一样。 但是,TO 和 PD 位由硬件设置,不能由软件写入状态。 使用状态寄存器执行命令时应牢记这一点。 例如,CLRF f3 指令会将除 TO 和 PD 位之外的所有位设置为 1,然后设置 Z=3 位。 执行此命令后,状态寄存器可能不为零值(由于 TO 和 PD 位)f000=100??XNUMX。 因此,建议仅使用 BCF、BSF、MOVWF 位设置命令来更改状态寄存器,而不更改其余状态位。 所有命令对状态位的影响可以在“命令说明”中看到。 软件状态标志 标志在状态寄存器中的位置如下: 对于 ADDWF 和 SUBWF 命令。 如果最高有效位操作导致进位,则设置该位。 通过添加第二个操作数的附加代码来执行减法。 执行移位指令时,该位总是从被移位源的 LSB 或 MSB 加载。 对于 ADDWF 和 SUBWF 命令。 如果第四位操作导致进位,则设置该位。 设置十进制进位位“DC”的机制是相同的,只是监视第四位的进位。 Z - 零结果标志: 如果算术或逻辑运算的结果为零,则设置。 PD - 掉电(数据存储模式): 在上电或 CLRWDT 命令时设置为“1”。 通过 SLEEP 命令复位为“0”。 TO - 超时。 看门狗定时器激活标志: 在上电和 CLRWDT、SLEEP 命令时设置为“1”。 WDT 定时器到期时复位为“0”。 RP1、RP0 - 用于直接寻址的数据存储器页面选择位: RP1,RP0: 00= 第 0 页 (00h-7Fh) 01= 第 1 页 (80h-FFh) 10= 第 2 页 (100h-17Fh) 11= 第 3 页 (180h-1FFh) 每页包含 128 个字节。 PIC16C84 芯片只使用 RP0。 在该芯片中,RP1 可以简单地用作通用读/写位。 但是,必须记住,在随后的开发中将使用它。 IRP - 用于间接寻址的数据存储器页面选择位: IRP0: 0= 页 0,1 (00h-FFh) 1= 第 2,3 页 (100h-1FFh) PIC16C84 晶振中的该位没有使用意义。 因此,它可以用作通用读/写位。 但是,我们必须记住,在随后的开发中,它将被使用。 硬件状态标志 硬件状态位 TO(超时)和 PD(断电)。 状态寄存器位“TO”和“PD”的状态可以确定导致“复位”的原因: - 只需打开电源, - 看门狗定时器的激活, - 由于看门狗定时器被触发而退出睡眠模式, - 通过外部信号 /MCLR。 只有以下事件会影响这些位的状态: 注意:TO 和 PD 位保持最新,直到表中列出的事件之一发生。 "0" - /MCLR 晶振输入的低电平脉冲不会改变 TO 和 PD 位的状态。 内置ROM的组织 PIC16C84 中的程序计数器为 13 位宽,可寻址 8Kx14 位程序存储器。 但是,在物理上,芯片上只有 1Kx14 内存(地址 0000h-03FFh)。 寻址高于 3FFh 的地址实际上是寻址相同的第一个千字节。 复位向量位于地址 0000h,中断向量位于地址 0004h。 PIC16C84 的 EEPROM 设计用于有限次数的擦/写周期。 要写入程序存储器,必须将晶振置于特殊模式,将编程电压 Vprg 施加到 /MCLR 引脚,电源 Vdd 必须在 4.5V ... 5.5V 范围内。 PIC16C84 不适合经常修改程序的应用。 写入程序存储器是逐位完成的,仅使用两个引脚按顺序进行。 PC 和 ROM 寻址 (f2)。 程序计数器 程序计数器的宽度为 13 位。 程序计数器低字节 (PCL) 可读写,位于寄存器 02h 中。 程序计数器高字节 (PCH) 不能直接读取或写入。 程序计数器的高字节可以通过地址为 0Ah 的 PCLATH 寄存器写入。 根据在 CALL、GOTO 指令期间是否将新值加载到程序计数器,或者正在写入程序计数器 (PCL) 的低字节,程序计数器的高位以不同方式从 PCLATH 加载,如如图所示。 GOTO、CALL 命令的情况 子程序的堆栈和返回 PIC16C84 晶振有一个 13 级 0 位宽的硬件堆栈。 堆栈区既不属于程序区也不属于数据区,堆栈指针对用户是不可访问的。 当执行 CALL 指令或处理中断时,程序计数器的当前值被压入堆栈。 当从子程序执行 RETLW 、 RETFIE 或 RETURN 指令时),堆栈的内容被弹出到程序计数器中。 PCLATH 寄存器 (XNUMXAh) 不会被堆栈操作更改。 EEPROM中的数据 非易失性 EEPROM 数据存储器。 EEPROM 数据存储器允许您读取和写入一个字节的信息。 写入一个字节时,会自动擦除先前的值并写入新数据(写入前擦除)。 所有这些操作都由内置的 EEPROM 写入器执行。 当电源关闭时,该存储器的内容将被保留。 PIC16C84 晶振有一个 64x8 位 EEPROM 数据存储器,允许在正常操作期间(在整个电源电压范围内)进行读写。 该存储器不属于 RAM 寄存器区域。 它通过两个寄存器进行访问:EEDATA <08h>,它包含用于读/写的八位数据和 EEADR <09h>,它包含被访问单元的地址。 此外,还有两个控制寄存器:EECON1 <88h> 和 EECON2 <89h>。 从 EEPROM 存储器读取数据时,将所需地址写入 EEADR 寄存器,然后将 RD EECON1<0> 位设置为 XNUMX。 数据将出现在 EEDATA 寄存器中的下一个命令周期并且可以读取。 EEDATA 寄存器中的数据被锁存。 写入 EEPROM 存储器时,必须先将所需地址写入 EEADR 寄存器,并将数据写入 EEDATA 寄存器。 然后执行产生直接记录的特殊命令序列: 移动LV 55小时 movwf EECON2 movlv 啊 movwf EECON2 bsf EECON1,WR ;设置 WR 位,开始记录 在执行这部分程序的过程中,必须禁用所有中断才能准确执行时序图。 录音时间—— 大约 10 毫秒。 实际写入时间会因电压、温度和单个晶体特性而异。 写结束时,WR 位自动置零,同时置位 EEIF 写完成标志,也是一个中断请求。 为防止意外写入数据存储器,EECON1 寄存器中提供了一个特殊的 WREN 位。 建议保持 WREN 位关闭,除非数据存储器需要刷新。 此外,设置 WREN 位的代码段和执行写入的代码段应存储在不同的地址,以避免在程序崩溃时意外执行它们。 EEPROM管理 EEPROM 的控制寄存器 EECON1 和 EECON2 寄存器 EECON1 寄存器(地址 88h)是一个 0 位宽的控制寄存器。 低五位是物理存在的,而高三位总是读为“XNUMX”。 寄存器 EECON1 地址 88h 上电复位 - 0000X000 RD 和 WR 控制位分别触发读取和写入。 它们只能以编程方式设置。 当读/写操作完成时由硬件清零。 禁用 WR 位的软件复位可防止写入过早结束。 RD - 读取位。 RD =1:开始读取 EEPROM 数据存储器。 阅读需要一个周期。 通过软件安装。 硬件复位。 WR - 写位。 WR =1 : 开始写入 EEPROM 数据存储器。 通过软件安装。 硬件复位。 WREN - EEPROM 写使能位。 WREN = 1:写使能。 WREN = 0:禁止写。 接通电源后,WREN 复位为零。 当写入过程被 /MCLR 复位信号或 WDT 定时器的复位信号中断时,设置 WRERR 错误标志。 我们建议您检查此 WRERR 标志,并在必要时覆盖其数据和地址存储在 EEDATA 和 EEADR 寄存器中的数据。 WRERR - 写入错误标志。 WRERR = 1:当 /MCLR 复位信号(在正常模式或 SLEEP 模式期间)或 WDT 复位信号在正常模式下中止写操作时,设置该标志。 当嵌入式自动机完成写入数据存储器时,设置 EEIF 标志。 它必须由软件复位。 EEIF - 写完成标志。 EEIF = 1:写入完成时设置标志。 对应的中断使能位是 INTCON 寄存器中的 EEIE。 中断的组织 PIC16C84 中的中断有四个来源: - 来自引脚 RB0/INT 的外部中断, - RTCC 计数器/定时器溢出中断, - 将数据写入 EEPROM 结束时中断 - 中断更改端口 RB<7:4> 引脚上的信号。 所有中断都具有相同的向量/地址 - 0004h。 但是,在中断控制寄存器 INTCON 中写入: - 从哪个源接收中断请求。 由相应的位标志写入。 这种中断可以单独屏蔽,也可以通过一个公共位屏蔽。 唯一的例外是 EEPROM 写结束中断。 该标志位于另一个 EECON1 寄存器中。 GIE 通用中断启用/禁用位(INTCON <7>)启用(如果=1)所有单独未屏蔽的中断或禁用(如果=0)它们。 通过设置/清零 INTCON 寄存器中的相应位,可以额外启用/禁用每个中断。 GIE 位在复位时设置为零。 处理中断时,将 GIE 位设置为零以禁用更多中断,将返回地址压入堆栈,并将地址 0004h 加载到程序计数器中。 外部事件的中断响应时间,例如来自 INT 引脚或端口 B 的中断,大约为五个周期。 这比 RTCC 定时器溢出中断等内部事件少一个周期。 反应时间总是一样的。 在中断处理程序中,中断的来源可以通过标志寄存器中的相应位来确定。 该标志位必须在子程序中由软件复位。 中断请求标志独立于相应的屏蔽位和 GIE 通用屏蔽位。 中断返回指令 RETFIE 终止中断程序并设置 GIE 位以再次启用中断。 查询和掩码寄存器 中断控制寄存器及其位 地址:0bh 重置时的值 = 0000 000? RBIF - 更改 RB 端口上的中断标志。 当 RB<7:4> 输入的信号改变时,该标志置位。 该标志以编程方式重置。 INTF - 中断标志 INT。 当 INT 引脚接收到来自外部中断源的信号时,该标志置位。 通过软件复位。 RTIF——RTCC 溢出中断标志。 该标志在 RTCC 溢出时置位。 该标志以编程方式重置。 RBIE - RBIF 中断启用/禁用位。 RBIE = 0 : 禁用 RBIE 中断 RBIE = 1 : 启用 RBIE 中断 INTE - 位启用/禁用 INT 中断。 INTE = 0 : 禁用 INT 中断 INTE = 1 : 启用 INT 中断 RTIE RTIF 中断使能/禁止位。 RTIE = 0 : 禁用 RTIE 中断 RTIE = 1:启用RTIE中断 EEIE - EEPROM 写中断启用/禁用位。 EEIE = 0 : 禁用 EEIF 中断 EEIE = 1 : 启用 EEIF 中断 GIE 所有中断使能/禁止位。 GIE = 0:禁用中断 GIE = 1:启用中断 在以下情况下会自动重置: - 打开。 - 在正常操作期间通过外部信号 /MCLR。 - 在 SLEEP 模式下通过外部信号 /MCLR。 - 在正常操作期间 WDT 定时器延迟结束时。 - 在 SLEEP 模式下 WDT 定时器延迟结束时。 外部中断 RB0/INT 引脚上的外部中断在上升沿(如果 OPTION 寄存器中的 bit6 INTEDG=1)或下降沿(如果 INTEDG=0)触发。 当在 INT 引脚上检测到上升沿时,INTF 请求位被置位(INTCON <1>)。 该中断可以通过将 INTE 控制位设置为零(INTCON <4>)来屏蔽。 INTF 请求位必须由中断程序清零,然后才能再次使能中断。 如果在进入此模式之前将 INTE 位设置为 XNUMX,则 INT 中断可以将处理器从 SLEEP 模式中唤醒。 GIE 位的状态也决定了处理器从 SLEEP 模式唤醒后是否会跳转到中断程序。 RTCC 中断 RTCC 计数器溢出(FFh->00h)将设置 RTIF 请求位(INTCON<2>)。 可以通过设置/清零 RTIE 屏蔽位(INTCON<5>)来启用/禁用该中断。 重置 RTIF 请求取决于处理程序。 RB端口中断 对 RB<7:4> 端口的四个输入上的信号进行任何更改都会将 RBIF 位(INTCON<0>)置 3。 可以通过设置 / 清零 RBIE 屏蔽位(INTCON<XNUMX>)来启用 / 禁用该中断。 重置 RBIF 请求取决于处理程序。 EEPROM中断 当自动数据写入 EEPROM 完成时,EEPROM 写结束中断请求标志 EEIF (EECON1<4>)置位。 该中断可以通过复位 EEIE 位(INTCON<6>)来屏蔽。 重置 EEIF 请求取决于处理程序。 寄存器/端口概述 晶体有两个端口:一个 5 位 RA 端口和一个 8 位 RB 端口,输入或输出逐位单独设置。 端口 A 线图 端口 A 是一个 5 位宽的端口,对应于 RA<4:0> 晶振的引脚。 RA<3:0> 线是双向的,RA4 线是开漏输出。 端口 A 的寄存器地址为 05h。 端口 A 的 TRISA 控制寄存器位于寄存器的第一页地址 85h。 TRISA<4:0> 是一个 5 位宽的寄存器。 如果 TRISA 控制寄存器中的某个位设置为 0,则相应的行将设置为输入。 零将线路切换到输出,同时将相应锁存寄存器的内容输出给它。 下面是端口 RA3..RAXNUMX 的示意图
端口 B 线图 端口 B 是一个双向端口,06 位宽(寄存器地址 86h)。 与端口 B 相关的 TRISB 控制寄存器位于寄存器的第一页地址 100h。 如果寄存器的控制 TRISB 位设置为 7,则相应的线将设置为输入。 零将线路切换到输出,同时将相应锁存寄存器的内容输出给它。 端口 B 的每个引脚在电源线上都有一个小的电阻负载(约 1µA)。 如果将此引脚编程为输出,它会自动禁用。 此外,RBPU OPTION<XNUMX> 控制位可以禁止(RBPU=XNUMX)所有负载。 上电复位也会关闭所有负载。 端口 B 的四根线(RB<7:4>)可以在其中任何一根的信号值发生变化时产生中断。 如果这些线路配置为输入,它们会被轮询并锁存到 Q1 读取循环中。 在每个指令周期中将输入信号的新值与旧值进行比较。 如果腿和锁存器中的信号值不匹配,则产生高电平。 “不匹配”检测器 RB4、RB5、RB6、RB7 的输出进行或运算并生成 RBIF 中断(存储在 INTCON<0> 中)。 任何配置为输出的线路都不参与此比较。 中断可以将晶振从 SLEEP 模式唤醒。 在中断处理程序中,通过以下方式之一重置中断请求: 1) 通过将 RBIE 位 INTCON<3> 清零来禁止中断。 2) 读取端口 B。这将结束比较状态。 3) 将 RBIF INTCON<0> 位清零。 这四条线路上的不匹配中断和软件可设置的内部有源负载可以提供一个简单的接口,例如键盘,可以从睡眠模式中唤醒按键。 支路 RB0 与外部中断输入 INT 组合。 名称 端口问题 组织双向端口时的问题 - 一些命令在内部以读+写方式执行。 例如,BCF 和 BSF 指令读取整个端口,修改一位,然后将结果输出回来。 这是需要谨慎的地方。 例如,寄存器 f5(端口 B)第 6 位的 BSF 指令首先读取所有 5 位。 然后操作第 6 位,并将字节的新值全部写入输出锁存器。 如果寄存器 f0 的另一位使用 i 作为双向 I/O(例如位 XNUMX)并且当前定义为输入,则该引脚上的输入将被读取并写回该引脚的输出锁存器,覆盖其先前状态。 只要该引脚保持在输入模式,就不会出现问题。 但是,如果第 0 行稍后切换到输出模式,它的状态将是未定义的。 外部电流源(“安装与”、“安装或”)不应“靠在”在输出模式下运行的支腿上。 产生的大电流会损坏晶体。 串行访问 I/O 端口 在命令周期结束时写入输出端口。 但读取时,数据必须在指令周期开始时稳定。 请注意在写入同一端口后立即读取。 这里有必要考虑在端子处建立电压的惯性。 在执行下一个读取命令之前,可能需要软件延迟以使引脚上的电压(取决于负载)稳定下来。 命令和符号概述 每个 PIC16C84 命令是一个 14 位字,按含义分为以下几部分: - 1. 操作码,-2. 一个或多个可能参与或不参与此指令的操作数的字段。 PIC16C84 指令集包括面向字节的指令、面向位的指令、常量操作和控制传输指令。 对于面向字节的命令,“f”表示要操作的寄存器; “d” - 位决定将结果放在哪里。 如果“d”=0,则结果将放在 W 寄存器中,如果“d”=1,则结果将放在命令中提到的“f”中。 对于面向位的指令,“b”表示指令所涉及的位的编号,“f”是该位所在的寄存器。 对于传输命令和常数操作,“k”表示一个八位或十一位常数。 所有命令都在一个命令周期内执行。 在两种情况下,指令的执行需要两个指令周期:-1。 条件检查和跳转,-2.结果改变程序计数器 命令执行。 一个命令周期由发生器的四个周期组成。 因此,对于 4 MHz 振荡器,命令周期执行时间将为 1 µs。 面向字节的命令 面向位的命令 过渡 注释和解释 注 1: 为了与 PIC16C5X 系列兼容,已将 TRIS 和 OPTION 命令放在命令列表中。 不建议使用它们。 在 PIC16C84 上,TRIS 和 OPTION 寄存器作为常规编号寄存器进行读/写。 请注意,未来的 PIC16CXX 开发可能不支持这些命令。 注 2:当修改 I/O 寄存器时,例如 MOVF 6,1,用于修改的值直接从芯片引脚读取。 如果编程为输出的引脚的输出锁存值为“1”,但该引脚上的外部信号由于外部“凸出”而为“0”,则将读取“0”。 注 3:如果该指令的操作数是寄存器 f1(如果允许,则 d=1),则除数(如果连接到 RTCC)将设置为零。 重置条件 在 PIC16C84 中,复位选项之间存在差异: 1) 上电复位。 2) 正常操作期间的外部复位/MCLR。 3) SLEEP 模式下的外部复位/MCLR。 4) 在正常操作期间,在 WDT 定时器延迟结束时复位。 5) 在 SLEEP 模式下 WDT 定时器延迟结束时复位。 某些特殊寄存器在复位时未初始化。 它们在上电时具有随机状态,不会随着其他类型的复位而改变。 特殊寄存器的其他部分被初始化为所有类型的复位的“复位状态”,除了在 SLEEP 模式下 WDT 定时器延迟结束时的复位。 只是这个复位被认为是正常操作中的暂时延迟。 还有一些例外。 程序计数器始终复位为零 (0000h)。 根据复位选项设置或清除 TO 和 PD 状态位。 软件使用这些位来确定复位的性质。 其复位后的数值如表所示。 复位后寄存器的状态如表所示。 那里接受符号:i-不改变,x - 未知,- 未执行,读为“0”。 ? - 将在写入 EEPROM 结束时设置 上电复位算法 PIC16C84 晶体具有内置的上电检测器。 在电源电压超过大约 1,2...1,8 伏的电平后,启动计时器开始计算时间延迟。 经过约 72ms 的延迟后,认为电压已达到其标称值,并开始另一个半时间延迟以稳定石英振荡器。 可编程配置位允许您启用或禁用内置启动定时器的延迟。 启动时间因晶体实例、功率和温度而异。 请参阅直流规格。 发电机稳定定时器计数来自已开始工作的发电机的 1024 个脉冲。 相信石英振荡器在此期间已进入模式。 使用 RC 发生器时,不进行稳定曝光。 然后启用外部复位等待定时器/MCLR。 当需要通过所有公共的 /MCLR 信号同步启动多个 PIC 控制器时,这是必要的。 如果没有接收到这样的信号,则在时间 Tost 之后生成内部复位信号并且控制器开始运行程序。 Tost 时间由 EEPROM 中的配置位编程。 这里存在一个问题,即 Vdd 上升太慢,所有延迟都在启动时,并且电源尚未达到其最小 Vdd(min) 健康值。 在这种情况下,我们建议使用外部 RC 链重置为 /MCLR。 下面是一个链条 这里可以在断电的情况下使用二极管对电容进行快速放电。 建议电阻 R < 40 kΩ,则不会超过 0,2V。 100欧姆电阻 看门狗定时器 看门狗定时器是一个完全独立的内置 RC 发生器,不需要任何外部电路。 即使主振荡器停止,它也会运行,就像 SLEEP 命令一样。 定时器产生一个复位信号。 可以通过将零写入特殊的 WDTE 配置位来禁用此类复位的生成。 该操作在烧录微电路的阶段进行。 延迟 WDT 标称 WDT 延迟为 18 ms(不使用分频器)。 它取决于温度、电源电压和微电路类型的特性。 如果需要较大的延迟,则可以将分频比高达 1:128 的内置分频器连接到 WDT; 这是通过写入选项寄存器来编程的。 在这里可以实现长达 2.5 秒的曝光。 如果 WDT 连接到 WDT,则“CLRWDT”和“SLEEP”命令会复位 WDT 和分频器。 这从一开始就开始延迟,并在一段时间内防止产生复位信号。 如果确实发生了来自 WDT 的复位信号,则状态寄存器 (f3) 中的“TO”位同时复位。 在高噪声应用中,OPTION 寄存器的内容容易出错。 因此,OPTION 寄存器必须定期更新。 需要注意的是,最差的组合是:Vdd=min, temperature=max 和 max 分频因子——这会导致最长的时间延迟,可能长达几秒。 发电机类型 PIC16C84 晶振可与四种内置振荡器配合使用。 用户可以对两个配置位(FOSC1 和 FOSC0)进行编程以选择以下四种模式之一:RC、LP、XT、HS。 PIC16... 晶体也可以由外部源提供时钟。 建立在石英或陶瓷谐振器上的振荡器在上电后需要一个稳定期。 为此,在 /MCLR 芯片引脚上的信号达到逻辑 18 后,内置振荡器启动定时器使器件保持复位状态约 XNUMX ms。 因此,在许多情况下,不需要与 /MCLR 关联的外部 RC 链。 内置发电机可在某些额定电源电压下运行: 注意力! 在低于 500 kHz 的频率下,当端口 A 的第 0 位被切换时,内部振荡器可能会产生错误的谐波脉冲。使用外部振荡器或内置 RC 振荡器时不会发生这种情况。 石英发生器 PIC16C84-XT、-HS 或 -LP 需要将晶体或陶瓷谐振器连接到 OSC1 和 OSC2 引脚。 标记如下:XT - 标准晶体振荡器,HS - 高频晶体振荡器,LP - 经济应用的低频振荡器。 “HS”振荡器可能需要 Rs 电阻器,尤其是在 20 MHz 以下以抑制谐波。 在 XT 模式下也可能需要使用 AT 条形切割谐振器。 陶瓷谐振器电容器的选择。 更高的电容会增加发电机的稳定性,但也会增加启动时间。 数值仅供参考。 在 HS 和 XT 模式下,可能需要串联电阻 Rs 以避免谐波。 rc 生成器。 当不需要速度和时序精度时,像 PIC16C84-RC 这样的 OTP 晶振可以节省资金并实现简单的 RC 振荡器。 频率是电源电压、电阻器 Rext、电容器 Cext 和温度的函数。 此外,振荡器频率会因批次而略有不同。 产生频率受晶壳本征电容的影响,其影响对于较小的 Cext 值是显着的。 还必须考虑 R 和 C 元素的漂移。 对于低于 2.2 kΩ 的 Rext 值,发电机可能不稳定或无法启动。 在非常高的 Rext 值(例如 1 MΩ)下,发生器变得对干扰、湿度和安装电流泄漏敏感。 推荐的 Rext 值介于 5 kΩ 和 100 kΩ 之间。 尽管振荡器可以在没有外部电容器 (Cext = 0) 的情况下运行,但我们建议使用大于 20 pF 的电容来提高稳定性。 在很少或没有 Cext 的情况下,振荡器频率高度依赖于安装电容。 散射越大,R 的值越大(C 的值越小(因为在这种情况下,安装电容的影响更加明显)。 振荡器频率除以 4 信号出现在 OSC2/CLKOUT 引脚上,可用于其他电路的测试或计时目的。 外部激励 选项寄存器 OPTION 寄存器(地址 81h)可用于读取和写入,并包含各种控制位,这些控制位决定了所连接的限幅器的配置:到 RTCC 或 WDT、外部中断 INT 的前面的符号和用于RTCC,RB端口上一个有源负载的连接。 寄存器选项地址 81h 上电值 = FFH PSA - 位连接分频器到:0 - RTCC 1-WDT RTE - 外部 RTCC 信号的边沿: 0 - RTCC 引脚上的上升沿增量 1 - RTCC 引脚上的负边沿增量 RTS - RTCC 的信号源 0 - 来自内部发生器的信号 1 - RTCC 腿上的外部信号 INTEDG - 信号沿 INT: 0 - 在 INT 引脚的下降沿中断 1 - INT 引脚上的上升沿中断 /RBPU - 到端口 B 的反向有源负载连接位。 /RBPU = 0:根据RB端口算法连接有源负载 /RBPU = 1:端口 B 有源负载始终禁用 分频器连接 可以在 RTCC 之前或看门狗定时器之后启用相同的 0 位计数器。 请注意,分隔器仅适用于这些设备之一。 我们重复一遍,如果分频器与 RTCC 一起工作,这意味着目前它不能与看门狗定时器一起工作,反之亦然。 计数器启用方案(参见 RTCC:RTCC 部分)。OPTION 寄存器中的 PSA 和 PS2-PS16 位确定分频器使用的设备以及分频因子设置。当分频器连接到 RTCC 时,写入 RTCC 的所有命令 (例如,CLRF 1 MOVWF 1, BSF XNUMX,x...等) 将复位分频器。当它连接到看门狗定时器时,限幅器与看门狗定时器一起复位CLRWDT命令。 可控 下面是一个从 RTCC 切换到 WDT 的程序片段 1. MOVLW B`xx0x0xxx` ;选择内部时钟和一个新的;除数。 如果 ; 除数的新值是 2. OPTION ;`000` 或 `001`,则必须临时选择 ;另一个除数。 3. CLRF 1 ; 复位 RTCC 和分频器。 4. MOVLW B`xxxx1xxx` ;选择WDT,不改变除数。 5. 选项 6. CLRWDT ; 复位 WDT 和分频器。 7. MOVLW B`xxxx1xxx` ;为除数选择一个新值。 8. 选项 仅当外部脉冲源已连接到 RTCC 时,才需要第 1 项和第 2 项。 第 7 项和第 8 项是必需的,当系数 除法应设置为“000”或“001”。 将分路器从 WDT 切换到 RTCC 1. CLRWDT ; 复位 WDT 和分频器。 2. MOVLW B`xxxx0xxx` ;选择 RTCC,除数的新值 ;信号源。 3. 选项 即使 WDT 被禁用,也应该使用这些程序。 配置字 PIC16C84 晶振有五个配置位存储在 EEPROM 中,并在芯片编程阶段设置。 这些位可以被编程(读为“0”)或不被编程(读为“1”)以选择适当的器件配置选项。 这些位位于地址 2007h 的 EEPROM 存储器中。 用户应该记住,该地址位于代码区下方,对程序不可用。 配置 EEPROM 单元。 CP - 代码保护位。 CP = 1:禁用安全代码 CP = 0:启用安全码 字中的其余位不使用,读取为 XNUMX。 个人标签 PIC16C84 晶振有四个位于(2000h-2003h)的字,用于存储用户识别码(ID)、校验和或其他信息。 与配置字一样,它们只能由程序员读取或写入。 没有程序可以访问它们。 如果晶振受到保护,建议用户仅使用每个字 ID 的低七位进行识别,高位写入 0。 然后即使在受保护的版本中也可以读取单词 ID。 保护程序不被读取 写入芯片的程序代码可以通过将配置字中的保护位 (CP) 设置为零来进行读保护。 无法以可以使用的方式读取程序的内容。 此外,如果设置了保护位,就无法更改程序。 这同样适用于 EEPROM 数据存储器的内容。 如果设置了保护,则 CP 位只能与晶体的内容一起被擦除。 EEPROM 程序存储器和数据存储器将首先被擦除,最后是 CP 代码保护位。 检查安装了保护的晶体。 读取受保护芯片时,读取任何内存地址都会得到类似于 0000000XXXXXXX(二进制)的结果,其中 X 为 0 或 1。要检查受保护芯片中内存的完整性,请遵循以下规则: 1) 编程并检查工作晶体的操作。 2)设置程序代码的保护,将程序存储器的内容读入参考文件。 3) 通过将其程序存储器与该参考的内容进行比较来测试任何受保护的晶体。 设置安全位后无法检查 EEPROM 数据存储器。 低功耗模式 SLEEP 模式由 SLEEP 命令进入。 使用该命令,如果 WDT 被使能,它被复位并开始计时,状态寄存器 (f3) 中的“PD”位被复位,“TO”位被置位,内部振荡器被关闭。 I/O 端口保持进入 SLEEP 模式之前的状态。 为了减少此模式下的电流消耗,应设置引脚以使晶体和外部电路之间没有电流流动。 输入引脚必须与外部高阻或低阻连接,以避免由浮动高阻输入引起的开关电流。 RTCC 也是如此。 Leg /MCLR 必须由 Vihmc 通电。 由于以下事件而退出 SLEEP 模式: 1. 外部复位 - 引脚 /MCLR 上的低电平脉冲。 2. WDT 触发时复位(如果启用) 3. 中断。 (INT 引脚中断,端口 B 变化中断,写入 EEPROM 数据完成中断)。 第一个事件重置整个设备。 其他两个事件表明程序继续运行。 状态寄存器 (f3) 中的“PD”位在上电时设置,但由“SLEEP”命令复位,可用于确定“唤醒”之前处理器的状态:处理器处于“SLEEP”(热启动)模式,或者只是断电(冷启动)。 “TO”位允许您确定导致退出 SLEEP 模式的原因:/MCLR 引脚上的外部信号,或 WDT 的操作。 要使器件通过中断从休眠模式唤醒,必须通过在 INTCON 寄存器中设置适当的掩码来使能中断。 退出 SLEEP 模式时,如果通用掩码禁用所有中断(GIE=0),将执行后台程序。 如果 GIE=1,则将执行中断程序。 电参数最大值 超出这些限制的参数可能会损坏芯片。 晶体长时间在其极限值运行会影响其可靠性。 注: 1. 每个机箱的总功耗不得超过 800mW。 耗散功率使用以下公式计算: Pdis= Vdd(Idd - Sum(Ioh)) + Sum ((Vdd - Voh)Ioh) + Sum (Vol Iol) 2. 将 /MCLR 引脚上的电压降至 Vss(ground) 以下会产生大于 80mA 的高电流,并可能损坏该线路。 因此,我们建议您通过一个 50-100 欧姆的终端电阻将信号施加到 /MCLR 引脚。 直流参数 直流规格:PIC16C84-04、PIC16C84-10。 (用于商业、工业、汽车性能)。 MEMEC波罗的海有限公司是 Memec International Components Group 和 Raab Karcher Electronics Group 的成员。 这组电子元件分销商是最新电子技术和半导体元件分销的领导者。 MEMEC波罗的海有限公司代表 MEMEC 集团公司,是 Microchip 和 Raychem 在俄罗斯、乌克兰、白俄罗斯和波罗的海国家的官方经销商。 MEMEC波罗的海有限公司 出版:N. Bolshakov, rf.atnn.ru 查看其他文章 部分 微控制器. 读和写 有帮助 对这篇文章的评论. 科技、新电子最新动态: 用于触摸仿真的人造革
15.04.2024 Petgugu全球猫砂
15.04.2024 体贴男人的魅力
14.04.2024
其他有趣的新闻: ▪ 新的高密度存储 ▪ 威尼斯正在下沉
免费技术图书馆的有趣材料: ▪ 文章具有倍压功能的同步检测器。 无线电电子电气工程百科全书 本页所有语言 www.diagram.com.ua |