相关文章

看一看:pic167f877简介

看一看:PIC 16F877–体系结构和内存组织

看一看:PIC16F877中的寄存器存储器组织

看一看:PIC16F877中的EEPROM/闪存组织

PIC16F877中的定时器模块

PIC 16F877基本上有三个定时器模块。这些定时器模块终端还与其他功能多路复用,以处理备用功能。这些定时器模块通常由符号timer-0、timer-1和timer-2表示。这些模块有助于在芯片内执行各种定时和计数功能。

定时器-0模块

定时器-0模块的主要定时/计数功能如下所示。

  • 定时器-0模块内置8位定时器/计数器
  • 它可以很容易地读/写
  • 内置8位软件可编程预标量功能
  • 轻松选择内部/外部时钟脉冲
  • 从FFh值到00h值溢出的中断
  • 外部时钟脉冲的边缘选择

定时器-0模块的框图如下图所示。定时器模式通常通过清除寄存器中的T0CS位来选择。在定时器模式下,当定时器0模块随每个指令周期增加时,写入TMR0寄存器,在接下来的两个指令周期内禁止增加。用户可以通过将调整后的值写入TMR0寄存器来解决此问题。通过在计数器模式下设置位T0CS来选择计数器模式。定时器0将在引脚RA4/T0CKI的每个上升沿或下降沿上递增。递增边缘由定时器0源边缘选择位T0SE确定。清除位T0SE选择上升沿。预定标器在定时器0模块和看门狗定时器之间互斥共享。

定时器-0框图
定时器-0框图

定时器-0中断

TMR0中断仅在TMR0寄存器从值FFh溢出到00h时激活。此溢出设置位TMR0IF。可通过清除位TMR0IE来屏蔽中断。在重新启用该中断之前,必须通过定时器0模块中断服务例程清除软件中的位TMR0IF。TMR0中断无法将处理器从睡眠中唤醒,因为计时器在睡眠期间关闭。与定时器0模块相关的主寄存器如下表所示。

在计时器0中注册内存组织
在计时器0中注册内存组织

定时器1模块

定时器1模块是一个16位定时器/计数器单元。也就是说,它由两个8位(8+8)寄存器(TMR1H,TMR1L)组成,这些寄存器易于读写。TMR1寄存器是TMR1H和TMR1L的一对,它的值从0000h增加到FFFFh,并滚动到0000h。

定时器1模块基本上在两种不同模式下工作。他们是

1) 定时器模式

2) 计数器模式

在定时器模式下,通过使用时钟选择位(TMR1CS)选择定时器1模块的工作模式。定时器1在每个指令周期中增加。但在计数器模式下,它会在外部时钟输入的每个上升沿上增加。定时器1引脚可通过设置/清除控制位(TMR1ON)轻松启用/禁用。该定时器1引脚还具有内部复位输入功能。它可以由两个CCP模块中的任何一个生成。

下图给出了定时器1模块的框图。

定时器-1框图
定时器-1框图

定时器模式下的定时器1操作

通过清除TMR1CS位,可以轻松选择定时器模式。在此模式下,定时器的输入时钟为FOSC/4。同步控制位T1SYNC无效,因为内部时钟始终同步。计时器1在同步模式下的操作

计数器模式

通过设置定时器1同步计数器选择位(TMR1CS),选择同步计数器模式。在此模式下,当设置位T1OSCEN时,引脚RC1/T1OSI/CCP2上时钟输入的每个上升沿上的定时器递增,或当位T1OSCEN清除时,引脚RC0/T1OSO/T1CKI上的定时器递增。

计时器1计数器操作

定时器1通常在两种模式下工作。定时器1可在同步或异步模式下工作,具体取决于定时器1同步计数器选择(TMR1CS)位的设置。当定时器1使用外部源递增时,递增发生在上升沿上。在计数器模式下启用计时器1后,在计数器开始增加之前,模块必须首先具有下降沿。计时器1在同步模式下的操作

计数器模式

通过设置位TMR1CS选择计数器模式。在此模式下,当设置位T1OSCEN时,引脚RC1/T1OSI/CCP2上时钟输入的每个上升沿上的定时器递增,或当位T1OSCEN清除时,引脚RC0/T1OSO/T1CKI上的定时器递增。如果清除T1SYNC,则外部时钟输入与内部相位时钟同步。同步在预分频器阶段之后完成。预分频器级是一个异步纹波计数器。

在此配置中,在睡眠模式期间,由于同步电路关闭,即使存在外部时钟,计时器1也不会增加。然而,预分频器将继续增加。

异步计数器模式下的计时器1操作

如果设置了控制位T1SYNC(T1CON<2>),则外部时钟输入不同步。计时器继续与内部相位时钟异步递增。计时器将在睡眠期间继续运行,并可在溢出时生成中断,从而唤醒处理器。但是,需要在软件中采取特殊预防措施来读取/写入计时器。在异步计数器模式下,计时器1不能用作捕获或比较操作的时基。

定时器1振荡器

晶体振荡器电路内置在引脚T1OSI(输入)和T1OSO(放大器输出)之间。它通过设置控制位T1OSCEN(T1CON<3>)启用。该振荡器为低功率振荡器,额定值高达200 kHz。它将在睡眠期间继续运行。它主要用于32 kHz晶体。下表显示了定时器1振荡器的电容器选择。定时器1振荡器与LP振荡器相同。

用户必须提供软件延时,以确保振荡器正确启动。各种频率的电容器选择如下表所示。

定时器-1的电容器选择
定时器-1的电容器选择

定时器1定时器/计数器模块的寄存器内存组织如下表所示。

在计时器1中注册内存组织
在计时器1中注册内存组织

定时器2模块

定时器2是一个带有预分频器和后分频器的8位定时器。它可用作CCP模块PWM模式的PWM(脉宽调制)时基。定时器2模块的框图如下图所示。

定时器-2框图
定时器-2框图

TMR2寄存器可读写,并在任何设备重置时清除。输入时钟(FOSC/4)具有1:1、1:4或1:16的预刻度选项,由控制位T2CKPS1:T2CKPS0(T2CON<1:0>)选择。定时器2模块有一个8位周期寄存器PR2。计时器2的值从00h开始递增,直到与PR2匹配,然后在下一个递增周期重置为00h。PR2是一个可读写寄存器。复位时,PR2寄存器初始化为FFh。TMR2的匹配输出通过一个4位后定标器(该后定标器提供1:1到1:16的缩放比例,包括1:1到1:16的缩放比例)生成TMR2中断(锁存在标志位TMR2IF(PIR1<1>)。定时器2可以通过清除控制位TMR2ON(T2CON<2>)来关闭,以最小化功耗。

定时器2模块的寄存器存储器组织如下表所示。

在计时器2中注册内存组织
在计时器2中注册内存组织

关于PIC16F877教程的下一篇文章:

1.PIC16F877中的CCP模块

作者

1.评论

  1. 瑞吉里

    ‘在定时器模式下,当定时器0模块随每个指令周期增加时,写入TMR0寄存器,在接下来的两个指令周期内禁止增加。’

    我不能理解这一点。。请告诉我哪两个指令周期??

Baidu