(知识点)计数器的工作原理及计算方法!

定时器的本质8051的基本定时器有Timer0和Timer1,STC15F2K61S的定时器有T0、T1、T2。定时器的软件编程以定时器T0为例,定时器编程的步骤为:基本定时器实验运用定时器进行“延时”是最基本的应用。与前面的“软件延时”对应,采用定时器延时的方式,我们成为“硬件延时”。

计数器是一种基本的数字电路,可以对输入的数字时钟(脉冲)进行计数。 按计数方向可分为加法计数器、减法计数器、可逆计数器等。

小数加计数器如下图

加法计数器由数字时钟驱动。 如上图所示,每个上升沿的到来将计数值加一,其值为0–>9。 每次值满时都会生成进位(溢出)信号。 。

定时器的本质

定时器的本质是由已知频率(周期)的数字时钟(脉冲)驱动的计数器。 例如,对于上面的计数器,如果已知驱动时钟为1MHz,则每个时钟周期为1us,十个计数周期为10us,其溢出周期为10us,也可以视为定时10us。 如果要计时5us,就数5个周期就可以了。 8051的基本定时器包括Timer0和Timer1,STC15F2K61S的定时器包括T0、T1和T2。 T0的基本结构如下图所示(其他定时器基本类似)

(知识点)计数器的工作原理及计算方法!

定时器T0的核心是一个16位、可配置的加法计数器。 配置寄存器包括:时钟源选择、模式控制、加载(初始值)、中断使能等。

定时器软件编程

以定时器T0为例,定时器编程步骤为:

(1)确定定时器/计数器的工作模式—-初始化:TMOD

(2)定时器0/1工作频率1T或12T:AUXR

(3)定时器0/1的时钟输出是否为:AUXR2

(4) 计算定时器/计数器的初始计数值并装入TH 和TL 寄存器。

(5)中断设置(特殊功能寄存器IE、IP):EA

(6) 启动定时器/计数器(TCON):TR0/TR1

相关寄存器:

计时初始值的计算:

前面提到,定时器是一个16位加法计数器,对输入脉冲从0到65535(2^16-1)进行计数,然后结转。 软件使用溢出标志TF0来确定时序。 因此,计数器从初始值到溢出65535的脉冲数是多少,这个脉冲计数值就是定时器的定时周期数。 例如工作时钟为12MHz,默认频率为12分频,即加法计数器的计数脉冲为1MHz,即计数周期为1us。 如果要计时1ms,则需要计数1ms/1us=1000个计数周期。 首先将初始值设置为(65536-1000),那么当计数器溢出时,总共计数65536-(65536-1000)=1000个周期。

因此,定时器初始值x的计算公式为:

其中fosc是工作频率,t是所需的定时时间。

基本定时器实验

使用定时器进行“延迟”是最基本的应用。 对应之前的“软件延时”,采用定时器延时的方式,我们就变成了“硬件延时”。

LED灯的硬件电路如附件所示

LED灯L1闪烁

设置为每50ms开关一次(延时太短,人眼无法辨别LED灯闪烁)。 根据STC-ISP下载界面默认的11.0592MHz时钟频率除以12计算,计数器的初始值应为65536-50ms*11.0592MHz/12=65536-46080=19456

定时器初始化代码为:

TMOD=0;

辅助=0;

TH0=19456/256; //除法四舍五入得到高8位

TL0=19456%256; //取余数并得到低8位

ET0=1;EA=1; //使能中断,不使用中断,应清除

TR0=1; //打开定时器,相当于一个开关

(1)采用轮询方式

(知识点)计数器的工作原理及计算方法!

(2)使用中断法

定时器T0的中断号为1

(知识点)计数器的工作原理及计算方法!

LED灯单灯流水从左向右

设计分析:这里采用定时中断的方式,设置一个LED灯显示变量x(8位分别对应8个LED灯,主程序根据这个显示变量来控制LED灯的亮灭),就变成了两个过程:主程序不断输出控制LED;中断服务程序定期改变控制变量。

(知识点)计数器的工作原理及计算方法!

单片机

徐工怎么学习单片机?我的单片机学习之路!!

2024-2-17 18:06:13

单片机

Arduino编程语言入门难吗?入门教程:语法符号

2024-2-17 19:02:54

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索