定时器模块:

定时器是一个简单的模块,以及几乎大多数微控制器。计时器可以用作计时器/计数器。计时器的大小从控制器变化到控制器。PIC16F84A具有一个8位定时器模块。计时器的非常基本的操作是依靠,没有别的!在定时器模式下,模块将自动增加每个指令周期(指令周期与时钟周期)和计数器模式,它在引脚RA4(3RD引脚)上给出的脉冲的每个上升/下降沿增加。。由于它是一个8位计时器,因此它可以从00h到ffh(00000000到11111111)。在FFH之后,它通知控制器已发生溢出(引发中断),然后滚动回00H,然后再次延续。

Prescalar:

Prescalar也是一个8位计数器。它既不是可读性也不是可写的,但它是通过option_reg寄存器的配置位来设置的。简单地单词,它可用于缩放定时器模块,如我们缩放图形页面。例如,每个指令周期的计时器增量,我们知道微控制器能够每秒执行一百万条指令。由于计时器是8位计数器,它超出了我们的想法!为此目的,使用PersCalar,用于预期为1:8,每个8个指令周期的计时器增量。因此,计时器将溢出比上一个场景慢。

定时器中断:

显然,当计数从FFH到00h时,定时器会提高中断。为了表明已经发生溢出,定时器设置INTCON寄存器的第二位。但是在可以重新启用中断之前,必须在即将到来的ISR(中断服务例程)中清除该位。

中断:

通常,可以假设中断作为微控制器的高优先级工作。如果微控制器正在执行程序并且如果中断出现中断,那么它将为中断服务并继续使用该程序。(类似于您在计算机中观看电影时,以及邮件男人呼叫您 - 您所做的?暂停电影,去,收到你的邮件并回来恢复电影。就像这样你可以得到很多中断。例如,考虑您的微控制器正在执行一个长程序。但是,外围连接到控制器迫切需要一些时髦的数学结果,现在外围设备将通过给出其问题位置的起始内存地址来提高中断。然后,控制器将为外围设备(这称为ISR - 中断服务例程)执行该计算工作,然后继续执行其剩余位置的程序。现在,控制器如何知道它离开程序的位置?在这里,您的微控制器是智能化的!It saves the contents of its program counter (memory address of the next instruction to be executed) on to a stack and when it finishes the interrupt service routine which is always terminated with RETURN, the controller retrieves the next instruction’s memory address and continues the execution of the program.

16F84A有四个中断源。

  • 通过RB0引脚外部中断
  • 定时器溢出中断
  • 端口B更改中断(引脚RB4至RB7)
  • 数据EEPROM写完全中断。

有一个名为INTCON的寄存器,用于控制(启用/禁用)并记录这些中断。

通过设置/清除INTCON寄存器的第四位,可以启用/禁用RB0中断。当RB0上有一个有效的边缘触发中断时,将设置INTCON寄存器的第一位(在再次启用此中断之前必须在ISR中清除)。

如前所述,定时器溢出将设置INTCON寄存器的第二位。可以通过设置/清除INTCON寄存器的第五位来启用/禁用此中断。

PORTB引脚7至4处的输入变化将设置INTCON寄存器的ZEROTH位,并且该中断可以由INTCON寄存器的第三位控制。

完成数据EEPROM写周期后,设置中断标志。该中断由INTCON寄存器的第六引脚控制。

作者

1评论

Baidu