51单片机总结之定时器

来源:互联网 发布:mac照片如何复制粘贴 编辑:程序博客网 时间:2024/05/05 05:48

1.引言

我开始看单片机的书籍比较早,只有C语言基础而没有数电基础(不知道要学),所以我在很多地方概念都是模模糊糊的。尤其是什么控制位什么寄存器什么逻辑电路都不懂,只纯粹的想写C语言操作单片机就行了。现在有了一定的基础,发现了很多以前知其然不知其所以然的东西,所以在这里稍微的总结一下,同时我想可能对基础不扎实的同学有一定的帮助(其实我基础也不扎实~嘻嘻)。


2.定时器的控制寄存器

对硬件(单片机)的操作,从本质上将就是对寄存器的操作。一个寄存器通常是1字节,即8位。每一位(bit)可以联想成一个开关,打开这个开关就能做一件事,关闭这个开关就能停止做一件事。


8051系列的单片机中定时器由两个寄存器控制,这两个寄存器名称分别是TMOD(Time Mode,工作方式寄存器)和TCON(Time Configuration,控制寄存器)。因为这些寄存器是操作单片机中定时器的,有特殊功能作用,所以属于特殊功能寄存器而不是通用寄存器。另外想要记住这两个寄存器的名称也很简单,用英文全称来记忆。


下面先对两个控制寄存器各个位进行总结:

2.1 工作方式寄存器(TMOD)

TCOMD7D6D5D4D3D2D1D0位名称GATEC/TM1M0GATEC/TM1M0功能门控位定时/计数方式选择工作方式选择门控位定时/计数方式选择工作方式选择说明高4位控制T1低4位控制T0 TOMD的结构和各位名称、功能

51单片机有两个定时器,其中TMOD的高四位控制定时器1,低四位控制定时器0。

2.1.1 门控位(GATE)

我初学的时候没有用到这个位,不过我还是简单对它总结一下吧:

可以通过编程对这个位置1或清零。

当GATE = 0时,只要使TCON中的TR0或TR1置1,就可以启动定时器了。

当GATE = 1时,除了使TCON中的TR0和TR1置1以外,还需要外部中断INT0或INT1为高电平,才能启动定时器。即比GATE = 0时多一个启动条件。

2.1.2 定时/计数模式选择位(C/T)

其中C的英文全称是Count,意思是计数器。T是Timer,定时器。置1为选择计数器工作模式,置0为选择定时器工作模式。(T上面应该画一横的,表示低电平有效)。

当C/T = 0时,为定时模式。此时定时器计数的时间是一个机器周期,一个机器周期的时间长度和晶振频率有关。大家都知道周期T和频率f是互为倒数的关系。而知道了晶振频率fosc后,还要除以12(硬件内部结构12分频的结果),它的倒数就是一个机器周期。即如果单片机采用12MHz的晶振,那么机器周期就是1微秒。

每经过一个机器周期,定时器的数值就会加1,直到计数器产生溢出,最后产生中断执行自己写的程序,这个程序就是你想让单片机计数结束后做什么的程序。


当C/T = 1时,为计数模式,这里不详细总结了。


另外上电复位后,这里的控制位默认是0,即定时模式。

2.1.3 工作方式选择(M1和M2)

M1M0工作方式说明00方式013位定时器01方式116位定时器10方式28位自动重装定时器11方式3T0分成两个独立的8位定时器;T1停止使用 定时器工作方式设置表

2.1.4 注意事项

TMOD不能单独对一个位置1或清零。只能一个字节的写入TCOM设置定时器。

另外,CPU复位时TCOM所有的位都清零。

2.2 控制寄存器(TCON)

TCOND7D6D5D4D3D2D1D0位名称TF1TR1TF0TR0IE1IT1IE0IT0功能T1中断标志T1运行开关T0中断标志位T0运行开关---- TCON的结构、位名称和功能

这里主要关注TCON高四位,低四位是和外部中断有关的控制位。

2.2.1 溢出中断请求标志位(TFn)

标题上的TFn中的n表示0或1,即溢出中断请求标志位分别有TF0和TF1。TF的英文全称是Timer overflow Flag,即定时器溢出标志位。

当定时器Tn(n=0、1)计数溢出后,相应的TFn由硬件自动置1,然后向CPU申请中断,执行中断程序。

CPU响应中断后,硬件自动对TFn清零。


另外,TFn也可以在程序中置1或清零。

2.2.2 定时器运行控制位(TRn)

TR的英文全称是Timer Run,即定时器运行(控制位)。

当TRn = 1时,定时器n运行;

当TRn = 0是,定时器n停止。


3.定时器的结构

知道了如何控制定时器之后,现在再来看一下定时器的结构。

定时器的实质是加一计数器(16位),由高8位和低8位两个寄存器组成(THn和TLn)。


不同工作方式(M1M0控制),THn和TLn也有不同的功能。我最常用的是使用工作方式1——16位定时器。所以也只是稍微总结一下,因为足够用了,能做很多事情了。

在这个工作方式下,THn和TLn合起来作为16位计数器。由TLn作为低8位,THn作为高8位(因为L是low,H为High)。当16位计数器溢出时,TFn置1。然后产生中断,进入并执行中断程序。

若使用12MHZ的晶振,定时器每加1则需要1微秒时间,如果把THn和THn都置为00H,当定时器溢出并产生中断的时候,就已经过了65536微秒(2^13次方微秒)。

0 0
原创粉丝点击