定时/计数器的工作方式:

来自:@阿滨
3年前
已收藏
收藏
阅读数
207
回复数
0

定时/计数器有4种工作方式,即方式0、方式1、方式2、方式3。在工作原理方面大同小异,只是在计数容量和计数模式方面有些差别。 1.方式0: 当TMOD的MIMO为00时,定时/计数器工作于方式0,为13位的定时/计数器。如


图1-28所示是T1(或T0)在方式0时的逻辑电路结构,T0的结构和操作与T1完全相同。 由图1-28可知:16位加法计数器(TH1和TL1)只用了13位。其中,TH1占高8位,TL1占低5位(只用低5位,高3位未用)。当TL1低5位溢出时自动向TH1进位,而TH1溢出时向中断位TF1进位(硬件自动置位),并申请中断。
实际应用中,无论定时时间还是计数值都是不固定的。例如要求每计数100个脉冲就引起中断,或者输出宽度为10ms的脉冲,那么应该如何处理呢?可以不让定时器从0开始,而是从某个数值开始计时或计数,这就涉及计时/计数的初值问题。先给定时/计数器一个初值,让它启动时就在这个初值的基础上开始计时或计数,直到计满为止,让所计时间或计数正好达到预定数值。图1-29给出计数初值示意。这就像运动场上赛跑时,终点是固定的,起跑地点选在不同位置,所跑的路程或时间也就不一样。
2.方式1: 当TMOD的M1M0为01时,定时器工作于方式1,其逻辑电路结构如图1-30所示。 由图1-30可知,方式1构成一个16位定时/计数器,其结构与操作几乎完全与方式0相同,区别是两者计数位数不同。设定时器1初值为x,作定时器用时其定时时间为
3.方式2: 当TMOD的M1M0为10时,定时/计数器工作于方式2,其逻辑电路结构如图1-31所示。由图1-31可知,方式2中16位加法计数器的TH1和TL1具有不同功能,其中,TL1是8位计数器,TH1是重置初值的8位缓冲器。
方式0和方式1用于循环计数在每次计满溢出后,计数器全部为0,第二次计数还须重置计数初值。这导致编程麻烦,而且影响定时时间精度。方式2具有计数初值自动装入功能,适合用作较精确的定时脉冲信号发生器。设定时器1初值为x,其定时时间为:
方式2中16位加法计数器被分割为两个,TL1用作8位计数器,TH1用以保持初值。 在程序初始化时,TL1和TH1由软件赋予相同的初值。一旦TL1计数溢出,TF1将被置位,同时TH1中的初值装入TL1,从而进入下一次计数,重复循环不止。 【例】如图1-32所示为汽车电控系统中点火电路模型。发动机有四缸,安装在凸轮轴上的传感器信号转子上有24个齿,用带永久磁铁和铁芯的线圈作感应器件。当凸轮轴带动信号转子转动时,线圈中将因磁场变化而产生周期性的电压信号,经整形电路整形后变为一系列脉冲信号。信号转子转一圈,将有24个脉冲输入微控制器T0引脚。试编写点火控制程序,要求凸轮轴每转一圈点火4次。 分析:从电路图可以看出,当P1.0=0时点火线圈初级断电,次级点火。按题目要求,T0每采集到6个脉冲应给P0一次低电平。用定时器T0、方式2计外部输入的脉冲数,采用中断方式,6个脉冲中断一次。每次中断就令P1.0=0。
注意:本例只是点火电路模型,并未考虑点火线圈通、断电时间的比例以及点火提前角等问题,实际的控制软件要复杂得多。

上一篇下一篇
参与回答(0条评论)
用户头像
上传
用户头像
{{item.nickname}}{{item.pubtime}}回复
回复图片
用户头像
上传
用户头像
{{item1.nickname}}回复 {{item1.othername}} {{item1.pubtime}} 回复
回复图片
用户头像
上传
查看全部回复{{item.replylist_count}}条 查看全部
收起回复 收起全部
{{isLoadList==1?'加载中...':(isLoadList==2&&(list.length <=3||(list.length>3&&!is_hidden))?'没有更多内容了':'查看更多回答')}}
返回顶部

返回顶部