跳转到主要内容

51单片机 | 定时/计数器原理及结构

judy 提交于

定时/计数器结构(T0和T1)
<img src="http://mcu.eetrend.com/files/2018-02/wen_zhang_/100010259-35431-1.png&q…; alt="51单片机 | 定时/计数器原理及结构">
16位寄存器T0、T1分别由TH0、TL0和TH1、TL1四个8位计数器组成

<ul>
<li>
<p>定时器的区别:</p>

<ul>
<li>T0可分成2个独立的8位定时器,而定时器1则不能;</li>
<li>T1可作为串口的波特率发生器,而定时器0则不能。</li>
</ul>
</li>
<li>
<p>工作原理</p>

<ul>
<li>用途:定时器和计数器</li>
<li>核心:加1计数器</li>
<li>原理:每来一个脉冲则加1计数器加1,当加到全1时再来一个脉冲使加1计数器归零,同时加1计数器的溢出使TCON寄存器中的TF0(或TF1)置1,向CPU发出中断请求</li>
<li>
<p>脉冲来源:</p>

<ul>
<li>定时器:脉冲来源是由系统的时钟晶振器输出脉冲源提供</li>
<li>计数器:脉冲来源是由T0或T1引脚(P3.4或P3.5)输入的外部脉冲源提供</li>
</ul>
</li>
</ul>
</li>
</ul>

<font color="#aa8812">注:T0或T1都不能同时既做定时器也做计数器</font>

<strong>补充:</strong>

<ul>
<li>
<p>计数器工作原理:</p>

<p>用作计数器时,对T0或T1引脚的外部脉冲计数,如果前一个机器周期采样值为1,后一个机器周期采样值为0 ,则说明有一个脉冲,计数器加1。</p>

<p>在每个机器周期的S5P2期间采样引脚输入电平。新的计数初值于下一个机器周期的S3P1期间装入计数器。</p>

<p>此种方式需要两个机器周期来检测一个1-&gt;0负跳变信号,因此最高的计数频率为时钟频率的1/24。</p>
</li>
<li>
<p>S5P2:</p>

<p>S5P2指的是第5个时钟周期的相位2。</p>

<p>晶体振荡器的振荡信号从XTAL2端输入到片内的时钟发生器上,时钟发生器是一个二分频触发器电路,它将振荡器的信号频率除以2,向CPU提供了两相时钟信号P1和P2。时钟信号的周期称为机器状态时间S,它是振荡周期的2倍。在每个时钟周期(即机器状态时间S)的前半周期,相位1(即P1信号)有效,在每个时钟周期的后半周期,相位2(即P2信号)有效。</p>
</li>
</ul>

使用的寄存器

<ul>
<li>TCON控制寄存器:启动和停止定时/计数器的计数,并控制定时器的工作状态,不能按位寻址</li>
<center><img width="600" src="http://mcu.eetrend.com/files/2018-02/wen_zhang_/100010259-35432-2.png&q…; alt="51单片机 | 定时/计数器原理及结构"></center>
<li>TMOD方式寄存器:设置定时器的工作方式,选择定时或计数的功能,可以按位寻址。(和中断共用寄存器,高四位为定时计数器使用,低四位为中断使用)</li>
<center><img width="600" src="http://mcu.eetrend.com/files/2018-02/wen_zhang_/100010259-35433-3.png&q…; alt="51单片机 | 定时/计数器原理及结构"><img width="600" src="http://mcu.eetrend.com/files/2018-02/wen_zhang_/100010259-35434-4.png&q…; alt="51单片机 | 定时/计数器原理及结构"></center>
<font color="#aa8812">注:GATE逻辑结构此处略过</font>
</ul>

工作方式:
<ul>
<li>方式0
<ul>
<li>计算公式:
<img src="http://mcu.eetrend.com/files/2018-02/wen_zhang_/100010259-35435-5.png&q…; alt="51单片机 | 定时/计数器原理及结构"></li>
<li>最大计数:8192个机器周期</li>
<li>工作原理:
13位计数器,使用TL0的低5位和TH0的高8位组成,TL0的低5位溢出时向TH0进位。TH0溢出时发出中断请求。
<img src="http://mcu.eetrend.com/files/2018-02/wen_zhang_/100010259-35436-6.png&q…; alt="51单片机 | 定时/计数器原理及结构"></li>
</ul>
</li>
</ul>

<ul>
<li>方式1
<ul>
<li>计算公式:
<img src="http://mcu.eetrend.com/files/2018-02/wen_zhang_/100010259-35437-7.png&q…; alt="51单片机 | 定时/计数器原理及结构"></li>
<li>最大计数:65536个机器周期</li>
<li>工作原理:
16位计数器,TL0作为低8位,TH0作为高8位
<img src="http://mcu.eetrend.com/files/2018-02/wen_zhang_/100010259-35438-8.png&q…; alt="51单片机 | 定时/计数器原理及结构"></li>
</ul>
</li>
</ul>

<ul>
<li>方式2:自动重装初值的8位计数方式
<ul>
<li>计算公式:
p.s.晶振频率必须选择12的整数倍,因为定时器的频率是晶振频率的1/12。
<img src="http://mcu.eetrend.com/files/2018-02/wen_zhang_/100010259-35439-9.png&q…; alt="51单片机 | 定时/计数器原理及结构"></li>
<li>最大计数:256个机器周期</li>
<li>优点:
适合做比较精准的脉冲信号发生器</li>
<li>缺点:
<img src="http://mcu.eetrend.com/files/2018-02/wen_zhang_/100010259-35440-10.png&…; alt="51单片机 | 定时/计数器原理及结构"></li>
<li>工作原理:
计数器溢出后,计数器自动将上次设置的初值重装。
<img src="http://mcu.eetrend.com/files/2018-02/wen_zhang_/100010259-35441-11.png&…; alt="51单片机 | 定时/计数器原理及结构"></li>
</ul>
</li>
</ul>

<ul>
<li>方式3:p.s.只能用于定时/计数器T0,T0工作在方式3时,T1不要使用在有中断的场合。通常该种情况下T1用作串口波特率发生器
<ul>
<li>工作原理:
将T0分成两个独立的8位定时/计数器TL0和TH0。

TL0为正常的8位定时/计数器,计数器溢出后置位TF0,申请中断,之后重装初值。

TH0也是8位定时/计数器,但由于TL0占用了TF0和TR0,因此TH0占用定时器TF1和TR1(所以T1不能用)
<img src="http://mcu.eetrend.com/files/2018-02/wen_zhang_/100010259-35442-12.png&…; alt="51单片机 | 定时/计数器原理及结构"></li>
</ul>
</li>
</ul>

时钟周期/机器周期计算:
<img src="http://mcu.eetrend.com/files/2018-02/wen_zhang_/100010259-35443-13.png&…; alt="51单片机 | 定时/计数器原理及结构">

定时/计数器初始化

<ul>
<li>对TMOD赋值,确定T0和T1的工作方式</li>
<li>计算初值,并将其写入TH.x和TL.x</li>
<li>使用中断方式时对IE寄存器赋值开发中断</li>
<li>使TR0或TR1置位,启动定时/计数器</li>
</ul>

转自: <a href="http://www.cnblogs.com/hughdong/p/6878070.html">hugh.dong</a&gt;