前言
在单片机中,对于广大初学者来说,定时器、计数器此章节不仅应用广泛,而且还是单片机入门的敲门砖。在此,笔者就以此章节为重点,对定时器/计数器学习做出基本介绍。
-------------------------------------------------------------------------------------------------**
提示:以下是本篇文章正文内容,下面案例仅供参考
定时器/计数器模块的基本用途
如今,在许多世界著名的半导体制造公司开发型号繁多的单片机芯片内部,定时器/计时器模块是一种基本上普遍配置的常用外围设备模块,区别仅在于:配备的数量和规格不同(如:规格是否附带预分频器和后分频器等)。此类模块(即外围模块)主要应用于3类场合:
- 单片机在其端口引脚上,向外部电路送出一系列符合一定时序规范的方波信号。举几个生活中几个常见的例子,便于初学者理解。比如:空调机中的变频控制,电器设备的提示音的音调产生。当然,程序员在程序执行过程中,有必要插入一定时长的延时。
- 单片机不仅在端口引脚上“送出”信号,还要检测外部电路“输送进来”的方波信的脉宽、周期等,便于单片机其接收外部电路或通信信号。如:遥控电视机中的红外控信号的接收等。
- 单片机对其端口引脚上输入的由外部事件产生的触发信号进行精确计数,依据计数结果来控制完成相应的动作。*如:在水杯的生产车间里,传送带上的水杯盖子,可借助红外线透射方式,获得触发信号并送入单片机中完成对水杯数量的计数工作。(在此读者可领悟到单片机计时器的强大之处,水杯数量不仅快速计数而且能保证数据的准确性)
PIC定时器/计数器TMR0模块
1.特性:
- 是一个8位宽的由时钟信号上升沿触发的循环累加计数寄存器TMR0
- 具有一个可选用的8位可编程预分频器
- 具有溢出中断功能
- 用户用软件方式可直接读出或写入计数器的内容
- 当使用外部触发信号作为时钟信号源可由程序定义上升沿或下降沿触发有效
- 用于累加的信号源可选择内部(即定时器模式)或外部时钟信号源(即计数器模式)
2.与TMR0模块相关的寄存器
在PIC16F单片机的特殊功能寄存器(SFR)共有4个:
- 累加计数寄存器TMR0(8位宽,范围即0~255)
- 中断控制寄存器INTCON
- 选项寄存器OPTION_REG
- 端口RA方向控制寄存器TRISA
<一>选项寄存器OPTION_REG
选项寄存器是一个可读、写的寄存器,有关各位的含义如下:
1.PS2-PS0: 分频器分频比选择位
- PSA:分频器分配位
说明:
1=分频器分配给WDT(看门狗)
0=分频器分配给TMR0
3.T0SE:TMR0的时钟源触发边沿选择位 。只有当TMR0工作处于计数器模式时,该位才发挥作用
说明:
- 1=下降沿触发TMR0递增
- 0=上升沿触发TMR0递增
4.T0CS:TMR0时钟源选择位
说明:
- 1=计数器**TMR0时钟源
- 0=定时器**TMR0时钟源
**<二>中断控制寄存器INTCON
中断控制寄存器同样也是可读/写的寄存器,与此有关的各位含义如下:
1.TOIF:TMR0溢出标志位(即:溢出中断标志)
说明:
- 1=TMR0发生溢出
- 0=TMR0未发生溢出
2.TOIE:TMR0溢出中断使能位
说明:
- 1=允许TMR0溢出后产生中断
- 0=屏蔽TMR0溢出后产生中断
3.GIE:全局中断总使能位
- 1=允许CPU响应所有外围设备模块产生的中断请求
- 0=禁止CPU响应所有外围设备模块产生的中断请求
<三>端口RA方向控制寄存器TRISA***
TRISA4:与TMR0有关的只有一个位,当TMR0工作处于计数器模式时,要求改脚必须设定为输入方式,作为T0CKI信号专用输入引脚
- 1=端口引脚RA4设定为输入,以便改脚送进T0CKI信号
<四>TMR0累加计数寄存器***
工作模式:
0=定时器(计数器的触发信号 取自内部指令周期)
说明:
指令周期信号作为累加计数器的时钟信号源。一旦往计数器中写入初始值后,TMR0便重新启动累加计数。
- 在没有分频器的情况下,TMR0会在每个指令周期信号(等于晶体振荡器产生的主时钟周期的4倍)。
- 在设置分频器的情况下,TMR0会在每次收到由分频器将指令周期信号分频一个固定倍数后产生的信号时自动加1。
- 1=计数器(计数器的触发信号取自外部引脚T0CKI电平的上升沿/下降沿)
说明:并不是外部触发信号的跳变沿一送入,TMR0就立即进行加1操作,而是需要经过一个同步逻辑—该触发信号与系统时钟进行同步之后,才能进入累加计数器TMR0,引发一次加1操作。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了定时器/计时器的使用理论方法,对于程序代码的具体使用,笔者会另外重新开个帖子说明。最后,喜欢本文的粉丝朋友可以动动小手点击关注或收藏!