关于如何编写精确延时函数的学习(一)

关于定时器的使用

《手把手教你学C51单片机》
根据教材以及视频课程的讲解,了解到单片机中定时器的存在以及使用方法,具体的描述,由于我还不是很熟悉博客的排版,所以留作以后在进行详细描述。
大体上我可以认为单片机中有两个寄存器是与定时功能相关的。
一、TCON
二、TMOD
在说明这两个特殊寄存器是如何使用之前,我们要做的是将前几篇文中所说的单片机的工作原理来进行说明。
首先,单片机电路由5V电源供电,但是仅仅是接上电源。单片机是无法进行指令的执行的。我们可以将单片机的工作场景想象成人类爬楼梯或者下楼梯。膝盖关节动一下就可以做出一个动作。
而晶振电路就可以认为是单片机电路的关节或者膝盖。
我们在单片机电路中选用的晶振频率为11.0592MHz。就此我们可以引出一个重要概念:时钟频率。很简单,这就是单片机的时序中最小的计量单位。
可以想象成为我们手表上的最小的刻度单位。

时钟周期和机器周期

接下来我们介绍另一个重要的概念:机器周期。机器周期是指单片机完成一个操作的最短时间。如今的单片机一般来说,性能是比较强的,一般来说,一个机器周期就等于一个时钟周期。也就是说,晶振动一下,单片机就能执行一个操作。但是,之前在标准架构下的单片机,一个机器周期需要花费12个时钟周期,也就是说,晶振振荡12次,单片机才能完成1个指令的执行。
(关于机器周期和时钟周期的概念最好是要清楚,其实这么记住就行,时钟周期是可以根据晶振的频率来进行计算出来的,但是机器周期无法计算,只能根据单片机的性能、运算速度来计量。)

寄存器的讲解

首先我要要知道,单片机的计时或者计算原理就是十分简单的加减法运算。
而每次单片机进行运算时,需要将运算得到的值存储起来。
这就引出了定时值存储寄存器:T0和T1;要将这个寄存器用语言描述起来并不是十分方便。总的来时就是T0存储寄存器被分为了高八位和低八位,分别被称为TH0和TL0。T1也是同理。
意思就是说在一个存储寄存器中我们总共可以存放0~65536个数值,而一旦超出这个值之后,该寄存器的数值就将回到0.
那么,我们是否可以理解为我们在单片机中,定时或者计数65536次呢?
其实不是的,我们利用编程思维来说,我们可以使用顺序逻辑叠加,或者是嵌套的思维,来提高定时器的使用次数或者是定时器程序的规模。
这样我们就引出了下一个寄存器:TCON(定时器控制寄存器)。
(当然了,如大家所知,我现在还是个半吊子,教材上所说TCON是可位寻址的,我就先简单的理解为,我是可以对该寄存的当中的某一位进行单个赋值,来控制寄存器的状态的。)
接着说,TCON寄存器总共有8位。
7:TF1 定时器1溢出标志;
6:TR1 定时器1运行控制位;
5:TF0 定时器0溢出标志;
4:TR0 定时器0运行控制位;
3:
2:
1:
0:
其余的3~1位,我们先不提,但是,从上面的描述我们可以看出,要想使用定时器的话。我们需要先打开定时器,让定时器开始工作。以定时器T0为例的话:
我们要对TR0置低电平,然后定时器0就开始工作了;
了解了这个其实还不够,我们还要对另一个重要的概念——溢出,有一定的深度的理解。要知道定时器总共有16位,计数值的上限为65536次。那超过这个数值之后呢?
其实很简单,设置进位。
我们的TCON寄存中设了TF位,一旦超过了上限值,我们就会将TF置1,这样的话,我们就可以利用编程语句(其实就是简单的加法来进行计数了)。当溢出发生后,TF1置,我们可以定义另一个变量(比如x),我们判断TF1==1,然后将x++;然后将TF再次置0(软件清零)。这样的话我们既可以进行叠加计算了。
算了,不写了,累了。我先拿已经懂了的练练手。下午再写。
加油xdm。奥利给@!@!@!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值