计数器

目前常用的单片机中往往都配备了定时器/计数器。在AT89S52芯片内包含有三个16位的定时器/计数器:T0、T1和T2,其核心是加1计数器。我们主要要求掌握T0和T1的结构和功能。学习中要注意从电路结构上来理解功能的实现。定时器/计数器方式寄存器TMOD和定时器/计数器控制寄存器TCON是用以设定定时器/计数器的工作方式、定时或计数功能,控制启动或停止以及产生溢出中断的重要模块,应该对这两个寄存器中的逐位的定义和功能进行学习和掌握。

“图1:T0和T1的基本构成"
图1:T0和T1的基本构成

一、定时器/计数器的功能

AT89S52单片机定时器/计数器的基本部件是两个8位的计数器(T1计数器分为高8位TH1和低8位TL1,T0计数器的高8位是TH0,低8位是TL0)。如图1所示。

定时器/计数器的核心是一个加1计数器,在作定时器使用时,它对机器周期进行计数,每过一个机器周期计数器加1,直到计数器计满溢出。

当它用作对外部事件计数时,计数器接相应的外部输入引脚T0(P3.4)或T1(P3.5)并在每个机器周期的S5P2时采样,当采样到1—0的负跳变时,计数器加1。

二、定时器/计数器的结构

AT89S52单片机内部的定时/计数器的结构如图2所示。定时器T0由特殊功能寄存器TL0(低8位)和TH0(高8位)构成,定时器T1由特殊功能寄存器TL1(低8位)和TH1(高8位)构成。每个寄存器均可单独访问。

“图2
图2 定时器/计数器的内部结构

1、定时/计数的基本概念

定时和计数是日常生活和生产中最常见和最普遍的问题。

定时器和计数器功能基本上都是使用相同的逻辑实现的,而且这两个功能都包含输入的计数信号,本质上都是对脉冲计数。计数器用来计数并指示在任意间隔内输入信号(事件)的个数,而定时器则对规定间隔内输入的信号个数进行计数,用来指示经历的时间。

在单片机中,定时/计数器作定时功能用时,对机器周期计数(由单片机的晶体振荡器经过12分频后得到),因每次计数的周期是固定的,所以根据它计数的多少就可以很方便的计算出它计数的时间。如图3所示。

“图3
图3 计数与定时

2、溢出的基本概念

从一个生活中的例程看起:一个水盆在水龙头下,水龙头没关紧,水一滴滴地滴入盆中。盆的容量是有限的,水滴持续落下,盆中的水持续变满,最终有一滴水使得盆中的水满了,这就是“溢出”。

如果一个空的盆要1万滴水滴进去才会满,开始滴水之前可以先放入一部分水,叫做计数初值。如果现在要计数9000,那么可以先放入1000滴水,也就是计数初值为1000,再计数9000就可以溢出产生中断。

单片机中通常采用计数初值的办法,如果每个脉冲是1微秒,则计满256个脉冲需时256微秒,如果现在要定时100微妙,只要在计数器里面先放进156,然后计数100就可以就可以溢出产生中断了。如图4所示。

“图4
图4 定时器/计数器的溢出

3、定时/计数的主要方法

实现定时或计数,主要有三种方法。

(1)软件延时

软件延时利用微处理器执行一个延时程序段实现。因为微处理器执行每条指令都需要一定时间,通过指令的循环实现软件延时。软件定时具有不使用硬件的特点,但却占用了大量CPU时间。另外,软件定时精度不高,在不同系统时钟频率下,执行一条指令的时间不同,同一个软件延时程序的定时时间也会不同。

(2)硬件定时

硬件定时采用数字电路中的分频器将系统时钟进行适当分频产生需要的定时信号,也可以采用单稳电路或简易定时电路(如常用的555定时器)由外接RC(电阻、电容)电路控制定时时间。这样的定时电路较简单,利用不同分频倍数或改变电阻阻值、电容容值使定时时间在一定范围内改变。

(3)可编程的硬件定时

可编程定时器/计数器最大特点是可以通过软件编程来实现定时时间的改变,通过中断或查询方法来完成定时功能或计数功能。这种电路不仅定时值和定时范围可用程序改变,而且具有多种工作方式,可以输出多种控制信号,具备较强的功能。

来源:网络
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:
cathy@eetrend.com)。

围观 242

一、作用

定时器/计数器以定时器的作用最为突出。一般来说涉及到定时器,都可以算作定时器算法。简单的如秒表等。复杂的如果系统内核的定时算法等。在学习单片机的路上,必学会定时器。

二、工作原理

定时器/计数器的原理其实没那么难。

定时器也就是一个计数器。而每计一个数的时间是一定的,于是就等价了定时器。51的定时器是从你设置的初值开始计数,直到他所能达到的最高数值为止。即:

定时时间 =(最大值 – 初值)X 每计一个数的时间

最大值因不同模式而定,初值需要你设计。

当达到定时器最大值的时候,就会触发定时器标志置位。当开启全局中断和定时器中断的时候,定时器标记置位会触发定时器中断函数,执行玩中断后,标记会自动复位。备注:如果没有触发中断函数,标记不会自动复位。

三、定时器术语理解

1、溢出:当定时器达到定时或者计数标准的时候,定时器就处在溢出停止状态。

2、溢出标记:当定时器溢出的时候,定时器标志就会置位。

3、初值:设计者自行设计的定时器计数的起步值。定时器是从这个值开始定时或者计数到最大值。

4、初值的计算:定时器有装载定时计数的寄存器,只要对这个寄存器进行操作即可。

四、工作模式寄存器TMOD,地址89H(不可按位寻址)

51单片机的定时计数器

GATE:定时操作开关控制位。当GATE=1时,INT0或INT1引脚为高电平,同时TCON中的TR0或TR1控制位为1时,计时/计数器0或1才开始工作。若GATE=0,则只要将TR0或TR1控制位设为1,计时/计数器0或1就开始工作。

C/T:定时器/计数器功能的选择位。C/T=1为计数器,通过外部引脚T0或T1输入计数脉冲。C/T=0时为定时器,由内部系统时钟提供计时工作脉冲。

M1和M0为定时器工作模式选择位。

定时器的工作模式如图2所示:

51单片机的定时计数器

五、控制寄存器TCON,地址位88H(可按位寻址)

51单片机的定时计数器

TF1:定时器T1溢出标志,可由程序查询和清零,TF1也是中断请求源,当CPU响应T1中断时由硬件清零。

TF0:定时器T0溢出标志,可由程序查询和清零,TF0也是中断请求源,当CPU响应T0中断时由硬件清零。

TR1:T1充许计数控制位,为1时充许T1计数。

TR0:T0充许计数控制位,为1时充许T0计数。

备注:其他位供其他功能使用

六、控制寄存器T2CON

51单片机的定时计数器

TF2:T2溢出中断标志。TF2必须由用户程序清“0”。当T2作为串口波特率发生器时,TF2不会被置“1”。

EXF2:定时器T2外部中断标志。EXEN2为1时,当T2EX(P1.1)发生负跳变时置1中断标志DXF2,EXF2必须由用户程序清“0”。

TCLK:串行接口的发送时钟选择标志。TCLK=1时,T2工作于波特率发生器方式。

RCLK:串行接口的接收时钟选择标志位。RCLK=1时,T2工作于波特率发生器方式。

EXEN2:T2的外部中断充许标志。

C/T2:外部计数器/定时器选择位。C/T2=1时,T2为外部事件计数器,计数脉冲来自T2(P1.0);C/T2=0时,T2为定时器,振荡脉冲的十二分频信号作为计数信号。

TR2:T2计数/定时控制位。TR1为1时充许计数,为0时禁止计数。

CP/RL2:捕捉和常数自动再装入方式选择位。为1时工作于捕捉方式,为0时T2工作于常数自动再装入方式。当TCLK或RCLK为1时,CP/RL2被忽略,T2总是工作于常数自动再装入方式。

定时器2工作模式如图5所示:

51单片机的定时计数器

七、定时器应用技巧

1、定时器定时长度扩展。可以人为的加入变量,每当定时器溢出,变量进行自加。这样就可以无限的扩展定时时间长度。

2、定时器误差问题。因为在执行定时器中断的时候,执行里面指令肯定要耗时。所以减少误差的就两种办法:简化中断服务程序;将定时器中断的程序外迁。

转自:武力戡乱的博客

围观 460

定时/计数器结构(T0和T1)
51单片机 | 定时/计数器原理及结构
16位寄存器T0、T1分别由TH0、TL0和TH1、TL1四个8位计数器组成

  • 定时器的区别:

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

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

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

注:T0或T1都不能同时既做定时器也做计数器

补充:

  • 计数器工作原理:

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

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

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

  • S5P2:

    S5P2指的是第5个时钟周期的相位2。

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

使用的寄存器

  • TCON控制寄存器:启动和停止定时/计数器的计数,并控制定时器的工作状态,不能按位寻址
  • 51单片机 | 定时/计数器原理及结构
  • TMOD方式寄存器:设置定时器的工作方式,选择定时或计数的功能,可以按位寻址。(和中断共用寄存器,高四位为定时计数器使用,低四位为中断使用)
  • 51单片机 | 定时/计数器原理及结构51单片机 | 定时/计数器原理及结构

    注:GATE逻辑结构此处略过

工作方式:

  • 方式0
    • 计算公式:
      51单片机 | 定时/计数器原理及结构
    • 最大计数:8192个机器周期
    • 工作原理:
      13位计数器,使用TL0的低5位和TH0的高8位组成,TL0的低5位溢出时向TH0进位。TH0溢出时发出中断请求。
      51单片机 | 定时/计数器原理及结构
  • 方式1
    • 计算公式:
      51单片机 | 定时/计数器原理及结构
    • 最大计数:65536个机器周期
    • 工作原理:
      16位计数器,TL0作为低8位,TH0作为高8位
      51单片机 | 定时/计数器原理及结构
  • 方式2:自动重装初值的8位计数方式
    • 计算公式:
      p.s.晶振频率必须选择12的整数倍,因为定时器的频率是晶振频率的1/12。
      51单片机 | 定时/计数器原理及结构
    • 最大计数:256个机器周期
    • 优点:
      适合做比较精准的脉冲信号发生器
    • 缺点:
      51单片机 | 定时/计数器原理及结构
    • 工作原理:
      计数器溢出后,计数器自动将上次设置的初值重装。
      51单片机 | 定时/计数器原理及结构
  • 方式3:p.s.只能用于定时/计数器T0,T0工作在方式3时,T1不要使用在有中断的场合。通常该种情况下T1用作串口波特率发生器
    • 工作原理:
      将T0分成两个独立的8位定时/计数器TL0和TH0。

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

      TH0也是8位定时/计数器,但由于TL0占用了TF0和TR0,因此TH0占用定时器TF1和TR1(所以T1不能用)
      51单片机 | 定时/计数器原理及结构

时钟周期/机器周期计算:
51单片机 | 定时/计数器原理及结构

定时/计数器初始化

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

转自: hugh.dong

围观 292

在51单片机的学习过程中,我们经常会发现中断、计数器/定时器、串口是学习单片机的难点,对于初学者来说,这几部分的内容很难理解。但是我个人觉得这几部分内容是单片机学习的重点,如果在一个学期的课堂学习或者自学中没有理解这几部分内容,那就等于还没有掌握51单片机,那更谈不上单片机的开发了,我们都知道在成品的单片机项目中,有很多是以这几部分为理论基础的,万年历是以定时器为主的,报警器是以中断为主的,联机通讯是以串口为主的。

计数器和定时器的本质是相同的,他们都是对单片机中产生的脉冲进行计数,只不过计数器是单片机外部触发的脉冲,定时器是单片机内部在晶振的触发下产生的脉冲。当他们的脉冲间隔相同的时候,计数器和定时器就是一个概念。

在定时器和计数器中都有一个溢出的概念,那什么是溢出了。呵呵,我们可以从一个生活小常识得到答案,当一个碗放在水龙头下接水的时候,过了一会儿,碗的水满了,就发生溢出。同样的道理,假设水龙头的水是一滴滴的往碗里滴,那么总有一滴水是导致碗中的水溢出的。在碗中溢出的水就浪费了,但是在单片机的定时计数器中溢出将导致一次中断,至于什么是中断我们下次再讲,这里只是初步的提下概念,中断就是能够打断系统正常运行,而去运行中断服务程序的过程,当服务程序运行完以后又自动回到被打断的地方继续运行。

在定时器计数器中,我们有个概念叫容量,就是最大计数量。方式0是2的13次方,方式1是2的13次方,方式2是2的8次方,方式3是2的8次方。把水滴比喻成脉冲,那么导致碗中水溢出的最后一滴水的就是定时计数器的溢出的最后一个脉冲。

在各种单片机书本中,在介绍定时计数器时都讲到一个计数初值,那什么是计数初值呢?在这里我们还是假设水滴碗。假设第一百滴水能够使碗中的水溢出,我们就知道这个碗的容量是100。问题1,我如何才能使碗接到10滴水就溢出呢?呵呵,我可以想象,如果拿一个空碗去接水,那么还是得要100滴水才能溢出,但是如果我们拿一个已经装有水的碗拿去接,那就不用100滴了。到此我们可以算出,要使10滴水让碗中的水溢出,那么碗中就先要装90滴水。

在定时计数器中,这90滴水就是我们所谓的初始值。问题2,在一个车间我们如何利用单片机对100件产品进行计件,并进行自动包装呢?

我们可以利用计数器计数100,在中断中执行一个自动包装的动作就可以了。

在这里计数初值有3个,假设有方式0:计数初值=8912(2的13次方)—100=8812。方式1:计数初值=65536(2的16次方)—100=65436。方式0:计数初值=256(2的8次方)—100=156。

根据所得的初始值,再将其转换为16进制或者2进制,就可以进行计数或者定时了。当然要让程序完全的运行起来还需要相应的寄存器进行设置。

来源:网络

围观 363

作者: Avi Avanindra,Devardhi Mandya,Cypress

网络路由器带有用于性能监控、流量管理、网络追踪和网络安全的统计计数器。计数器用来记录数据包到达和离开的次数以及特定事件的次数,比如当网络出现坏包时。数据包的到达会使多个不同的统计计数器发生更新;但一台网络设备中的统计计数器的数量及其更新速度常常受到存储技术的限制。

管理统计计数器需要高性能的存储器才能满足多重的读—修改—写操作。本文将描述一种使用IP方法的独特统计计数器,这种计数器的一端可以连接网络处理器(NPU),另一端可以连接Xilinx公司的QDR-IV存储控制器。QDR-IV统计计数器IP是一种带有QDR-IV SRAM、为网络交流管理和其他计数器应用提供高效统计计数器的软IP。

1、QDR-IV SRAM概述

QDR-IV SRAM配备两个双向数据端口A和B,可以在一个时钟周期内完成两次数据写入或两次数据读取操作,或一次读写结合的操作。因此,这一特点带来了额外的灵活性,架构师可将之用于读/写并不一定平衡的应用中。每个端口在两个时钟沿均可进行数据传输(DDR(双倍数据速率)操作),工作模式为突发式,每个时钟周期的突发长度为两个字(每个字为X18或X36)。地址总线为通用型,其上升沿和下降沿能分别为端口A和端口B提供地址。部分制造商的QDR-IV SRAM还可支持嵌入式ECC(错误检查和纠正),可从根本上消除软错误,提高存储器陈列的可靠性。

QDR-IV SRAM分为两种:高性能 (HP) QDR-IV和超高性能 (XP) QDR-IV。HP设备的最大运行频率为667 MHz,而XP设备的最大运行频率为1066 MHz。QDR-IV XP能够通过将存储空间分成分成8个内存条来增加性能,用地址的3个最低有效位(LSB)表示。要求的存储方案是在同一周期内存取不同的内存条。从一个周期到另一周期,所有的内存条均可存取,系统设计师可通过规划系统架构来相应地分配记忆库地址,以充分发挥极速存储器的RTR性能。这样,开发人员可以在降低总系统成本的同时大幅提高性能。

2、统计计数器IP

QDR IV统计计数器是一种带有QDR-IV SRAM,并且为网络交流管理和其他计数器应用提供统计计数器的软IP。该IP采用支持系统管理存取端口的读—修改—写逻辑。该IP的一端可以连接网络处理单元(NPU),另一端可以连接 QDR-IV存储控制器。由于该统计计数器支持400Gbps及更快速率的线卡,因此性能仅受限于所使用的FPGA和QDR-IV设备。

3、统计计数器IP的运行

图1是使用QDR-IV和统计计数器IP的用例。典型的网络处理单元(NPU)以800M的每秒配对物更新速率发送统计(STATS)更新请求。每一项STATS请求包含在一个72位字中带有两个计数器(数据包和字节计数)的入口/出口包命令令牌。整个计数器缓存数据以1秒为间隔,更新到系统存储器中的终身计数器(通常为DRAM)。这一来自NPU的回读被称为处理器(PROCS)更新请求。PCIe接口用于传输计数器缓存数据以更新终身计数器。下图显示了STATS IP的设置和与Xilinx存储控制器、PCIe总线和NPU连接的QDR-IV存储器。

基于 QDR-IV SRAM 实现网络流量管理统计计数器 IP设计
图1:带统计IP、NPU和存储器的完整基础架构

统计IP适用于HP和XP QDR-IV存储器。其运行模式通过位于IP设计顶层接口的单一参数控制。两个计数器(数据包和字节)的每个流地址为单72位字。一个144Mb QDR-IV SRAM支持四百万计数器。该设计所要求的IP接口数量与所使用的QDR-IV SRAM的数量相当。

正如模块图所示,NPU通过4x25Gbps链路将统计和处理请求推送到IP中。IP的运行频率为存储器存取频率的四分之一,并且使用四条被称为“通道”的平行数据路径以匹配存储器带宽。在存储接口HP和XP运行模式中,端口A作为读取端口,端口B作为写入端口。每项统计请求对保存在与该请求相关的独特存储位置中的计数器数据进行读—修改—写操作。

读写请求通过分阶段来延迟与QDR-IV存储器读取延迟以及存储控制器延迟的匹配。分阶段设计也作为本地缓存累积延迟过程中的服务更新请求。在HP模式中,没有统计/处理器更新地址限制通过四根通道中的任何一根。地址的发生可能是随机的,并且无需给每根通道分配特定类型的地址。但由于在XP模式中存储器的区块结构和限制与其相关,因此通道0和1被分配到保存入口流数据的奇数地址位置,通道2和3被分配到保存出口流数据的偶数地址位置。这一独特的安排可以预防可能在XP模式中发生的分块限制位置。
处理器发出的一秒钟回读请求常见于这两种运行模式。整个存储位置需要以一秒钟间隔回读,因此处理器不发出连续请求,并且以一秒钟间隔时间分布。该活动在每次通过处理器请求读取后复位存储器位置。

4、统计IP架构

图2中的STATS_IP架构模块图标出了三个子部件:每条通道的同地址比较管道(SACOMP)区块、请求-复用-解复用(REQ_MXDMX_CHn)区块以及每条QDR IV应用通道1个的4个A-B通道配对计数器逻辑(ABCH_CTRL_CHn)区块实例。

基于 QDR-IV SRAM 实现网络流量管理统计计数器 IP设计
图2:统计IP架构

SACOMP模块图包含两个管道阶段,其中一个用于通过比较将同一时钟周期上的所有四条通道进行压缩(SACOMP_ChN-to-All),另一个用于对单一通道上的同一地址进行双向(突发2)比较(SACOMP_B2BChN)。当两条或更多条通道在指定的时间实例中为同一地址时,优先性最高的通道积累地址相同的通道上出现的数据,而所有其他优先性较低、地址相同的通道都将失效。这确保了单一统计请求覆盖所有地址相同的通道,从而预防出现任何数据一致性问题。比较和积累算法对所有可能的情况进行快速评估。此外,在单根通道上,如果有同一存储位置的双向统计更新请求,则最新请求失效,其数据通过之前发生的请求积累。这样能够确保任何同一地址位置的双向存取不会在QDR-IV存储设备定义的读取延迟中发生。

图2所示的请求-复用– 解复用(RQMXDMXChn)区块接收对应通道数的处理器更新请求和统计更新请求。由于处理器更新请求的间隔时间固定,因此RQMXDMXchN选择对应下一个时钟服务的处理器请求,并且通过“请求就绪”回压信号停止统计请求。在开始处理每个一秒更新请求后,RQMXDMXchN停止配置时钟数(默认为10)的处理器请求通道以确保不会提供连续的一秒更新请求服务。停止信号发送至NPU,确保在回压信号失效前不会产生新的请求。该机制能够在不堵塞这一设计的情况下处理统计和处理器请求。

在最终阶段,A-B通道配对计数器逻辑(ABCH_CTRLn)对每项统计请求实施实际的读—修改—写机制,同时确保对每一项处理器请求进行最新读取。该阶段包含读取-延时管道逻辑、控制复用、读写管道和QDR-IV控制器接口逻辑。读写延时管道考虑了内存和控制器延迟。来自邻近通道和同一通道控制复用的反馈机制杜绝所有数据一致性问题发生的可能性。管道中的请求流发起统计和处理器更新。控制复用(CTRL_MUX)区块区分处理器和统计请求,从而使当前数据能够作为处理器读取数据转发或者推送到控制器接口区块以便进行进一步处理。控制器接口区块将实际的读写请求转换为端口A和端口B上的控制器特定命令。

5、QDR-IV接口运行和应用通道映射

统计流四通道和一秒(处理器)更新四通道接口作为应用通道。QDR IV控制器采用带有为QDR IV端口A和端口B定义的专用四通道端口界面的4:1/1:4通道复用/解复用功能。QDR-IV控制器以固定顺序对通道进行复用和解复用,应用端和以4X时钟频率运行的QDR IV设备端之间的顺序为ch0、ch1、ch2和ch3。图3为所假设的QDR-IV控制器顺序和建议的QDR IV HP统计计数器解决方案和QDR IV XP统计计数器解决方案应用通道映射。

基于 QDR-IV SRAM 实现网络流量管理统计计数器 IP设计
图3 QDR-IV接口4:1/1:4 复用/解复用和应用通道映射

在QDR-IV HP统计计数器中,端口A和端口B 的请求独立于地址并按照Ch0-Ch1-Ch2-Ch3顺序的排列。这是因为HP模式无区块要求,并且端口A和端口B上的请求可能包含同一位置的地址。但在QDR-IV XP统计计数器中,端口A和端口B的请求是以奇数-偶数-奇数-偶数为顺序的排列的,这样端口A和端口B在同一时钟周期中就不会出现两个属于同一区块的地址。

基于 QDR-IV SRAM的QDR IV 统计计数器IP为网络流量管理和其他计数器的应用提供了高效的统计计数方案。了解更多关于QDR-IV SRAM的相关信息,敬请访问:http://www.cypress.com/search/all/QDR-iv

围观 237
订阅 RSS - 计数器