STC51从入门到精通(汇编)~~~ 第七讲:80C51的定时器/计数器

发布者:码上奇迹最新更新时间:2022-04-24 来源: eefocus关键字:STC51  80C51  定时器  计数器 手机看文章 扫描二维码
随时随地手机看文章

7.1 定时器/计数器

7.1.1 定时器/计数器的组成

7.1.2 定时器/计数器的工作原理

1、定时方式

定时方式时,T记录80C51内部振荡器输出的脉冲(机器周期信号)个数。

每一个机器周期使T0或T1的计数器增加1,直至计满回零自动产生溢出中断请求。


2、计数方式

计数方式时,T的功能是计来自T0(P3.4)T1(P3.5)的外部脉冲信号的个数。


7.1.3定时器/计数器的控制

定时器/计数器是一种可编程的部件,在其工作之前必须将控制字写入工作方式和控制寄存器,用以确定工作方式,这个过程称为定时器/计数器的初始化。

1、工作方式寄存器TMOD (89H)

(1) M1、M0:工作方式控制位


(2) C/(/T):计数器/定时器方式选择位


C/ (/T)=0,设置为定时方式。定时器计数80C51片内脉冲,亦即对机器周期(振荡周期的12倍)进行计数。

C/ (/T)=1,设置为计数方式,计数器对来自T0(P3.4)或T1(P3.5)端的外部脉冲进行计数。

 

(3) GATE:门控位


GATE=0时,只要用软件使TR0(或TR1)置1就可以启动定时器,而不管/INT0(/INT0控制T0的运行)或/INT1(/INT1控制T1的运行)的电平是高还是低(参见后面的定时器结构图)。

GATE=1时,只有/INT0(或/INT1)引脚为高电平且由软件使TR0(或TR1)置1时,才能启动定时器工作。

 

2、控制寄存器TCON(88H)

TCON的高4位:定时器的运行控制位和溢出标志位;

低4位:外部中断触发方式控制位和锁存外部中断请求源;


(1) 定时器T0运行控制位TR0

TR0由软件置位和清零来启动或关闭T0。

(2) 定时器T0溢出标志位TF0

当T0被允许计数以后,T0从初值开始加1计数,当T0溢出时,由硬件自动使中断触发器TF0置1,并向CPU申请中断。当CPU响应中断进入中断服务程序后,TF0又被硬件自动清0。TF0也可以用软件清0。

(3) TR1:定时器T1运行控制位。其功能与TR0相同。

(4) TF1:定时器T1溢出标志位。其功能与TF0相同。

(5) IE1: 外部中断1请求标志位。

(6) IT1: 外部中断1触发方式控制位。

(7) IE0: 外部中断0请求标志位。

(8) IT0: 外部中断0触发方式控制位。


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

7.2.1 工作方式0


方式0为13位的计数器,由TL0的低5位和TH0的8位组成,TL0的高3位未用,TL0低5位计数溢出时向TH0进位,TH0计数溢出时,向中断标志位TF0进位(硬件置位TF0),并申请中断。T0是否溢出可查询TF0是否被置位,以产生T0中断。

方式0定时,定时时间为:to=(213- Xo) xTm=(213-X0) x(12/ fosc)

式中X0为计数初值,Tm为机器周期,fosc为 晶振频率。方式0计数时,最大计数值为2^13=8192 (个外部脉冲)。


7.2.2 工作方式1

方式1为16位的定时器/计数器

t1=(2^16- X0) XTm=(2^16-X0)X (12/ fosc)

计数工作方式:最大计数值为2^16=65536(个外部脉冲)

 

7.2.3 工作方式2

方式2为自动重装载的8位定时器/计数器,在方式2时,16位计数器被拆成2个,TL0用作8位计数器,TH0用作计数初值寄存器。

t2=(2^8- X0) XTm=(2^8-X0)X (12/fosc)

计数工作方式时,最大计数值为2^8=256 (个外部脉冲)

 


7.2.4 工作方式3

T0分为两个独立的8位计数器TL0和TH0。TL0可以作为8位定时器或外部事件计数器,TH0被 固定为一个8位定时器方式。


7.3 定时器/计数器初始化和应用举例

7.3.1 定时器/计数器初始化

1、初始化的步骤

(1) 确定工作方式,即根据题目要求先给TMOD送一个方式控制字;

(2) 计算计数初值/定时初值,并写入TH0、TL0或TH1、TL1中;

(3) 根据需要给中断允许寄存器IE选送中断控制字和中断优先级寄存器IP选送中断优先级字,以开放相应中断和设定中断优先级。

(4) 给TCON送命令控制字,以启动或禁止定时器/计数器的运行。


2、计数器初值的计算

x0 = M-C

M-计数器模式:


方式0时2^13

方式1时2^16

方式2、方式3时2^8


3、定时器初值的计算

定时时间T的计算公式:T=XxTm =(M-x0)xTm

定时初值:x0=M-T/Tm


7.3.2 定时器/计数器应用举例

1、方式0的应用

例:利用T0方式0产生1 ms的定时,在P1.2 引脚上输出周期为2ms的方波。设单片机晶振频率fosc=12MHz。

解:


(1) 确定工作方式:(TMOD)=00H

(2) 计算1 ms定时时T0的初值

      机器周期:T= 1 / foscX12 = 1us,

      计数个数:X =1ms/lus = 1000

      设T0的计数初值为,则

      X0= (213-X)

          = 8192-1000

          = 7192 D

      解得: T0初值=7192=1C18H=0001 1100 0001 1000

                11100000 B=E0H赋给TH0,低5位00011000=18H赋给TL0。


ORG 0000H

AJMP MAIN ; 转主程序MAIN

ORG 000BH

AJMP IT0P ; 转T0中断服务程序IT0P

ORG 1000H

MAIN: MOV SP, #60H ; 设堆栈指针

MOV TH0 , #0E0H ; 给定时器T0送初值

MOV TL0 , #18H ; 送定时初值

MOV TMOD, #00H ; 设置T0为方式0, 定时

SETB EA ; CPU开中断

SETB ET0 ; T0允许中断

SETB TR0 ; 启动T0定时

HERE: SJMP HERE ; 等待中断

2、方式1的应用

方式1中,寄存器是以全部16位参与操作。


3、方式2的应用

当T0(P3.4)引脚每输入一个负脉冲时,使P1.0输出一一个500us的同步脉冲。设晶振频率为6MHz,请编程实现该功能。

(1) 确定工作方式

计数时:(TMOD) = 0000 0110B = 06H

定时时:(TMOD) = 0000 0010B = 02H

(2) 计算初值

机器周期T= 12 / fosc = 12/6MHZ = :2μs

计数时:计数个数X= 1

计数初值:X0= (256-X)= (256-1) =255=0FFH,

                  (TH0)=(TL0)=0FFH

定时时:计数个数X=T/ Tm= 500μs / 2μs =250

定时初值=256- X=256 - 250= 6,

(TH0) = (TL0)= 06H


START: MOV TMOD, #06H ; T0方式2, 外部计数方式

MOV TH0, #0FFH ; T0计数初值

MOV TL0, #0FFH

SETB TR0 ; 启动T0计数

LOOPl: JBC TF0, PTF01; 查询T0溢出标志, TF0= 1时转移, 且TF0= 0(查P3.4负跳变)

SJMP LOOPl

PTF01: CLR TR0 ; 停止计数

MOV TMOD, #02H ; T0方式2, 定时

MOV TH0, #06H ; T0定时500μs初值

MOV TL0, #06H

CLR P1.0 ; P1.0清0

SETB TR0 ; 启动定时500μs

LOOP2: JBC TF0, PTF02 ; 定时到TF0=l 转移, 且TF0= 0(第一个500μs到否?)

SJMP LOOP2

PTF02: SETB P1.0 ; P1.0置1(到了第一个500μs)

CLR TR0 ; 停止计数

SJMP START

4、方式3的应用

 


5、GATE位的应用

例:利用GATE门控位测量从/I/N/T/1引脚输入的正脉冲宽度。


6、扩大计数个数和定时时间


例:利用MCS-51单片机的定时器/计数器,产生电.子时钟的1s基时,并且由P1.7输出2s的方波。fosc=12MHz。

———————————————

关键字:STC51  80C51  定时器  计数器 引用地址:STC51从入门到精通(汇编)~~~ 第七讲:80C51的定时器/计数器

上一篇:STC51从入门到精通(汇编)~~~ 第八讲:串行通信技术
下一篇:STC51从入门到精通(汇编)~~~ 第一讲:概述

推荐阅读最新更新时间:2024-11-13 11:18

stm32f103,407系列的定时器的理解与代码
作为一个学习32不久的菜鸟,写这篇博客主要还是为了分享一下自己的理解,以后自己忘了也可以来看一下。前几天在玩oled屏,想把按键控制舵机显示在oled上,于是把之前在f407系列的32的pwm.c文件修改了一下,加了进去,发现竟然没用,以前也是会移植修改代码都没问题,但是这回百思不得其解,仔细检查了一遍,都把函数里一个一个量点进去核对都没问题,后来一查手册,原来这个pwm输出用的是TIM13,但是f103系列只有11个定时器; 103系列定时器:2个高级定时器,4个普通定时器,2个基本定时器,2个看门狗定时器,1个系统嘀嗒定时器 这8个定时器都是16位的,它们的计数器的模式(TIM_CounterMode)除了基本定时器T
[单片机]
stm32f103,407系列的<font color='red'>定时器</font>的理解与代码
使用Stm32Cubemx配置定时器正交编码模式详解
这篇文章也是本人做完一个项目后抱着想记录点东西巩固下知识同时又想给后来的技术同伴一点参考的想法写下来的,和本人之前有关中颖芯片的博文意图是一致的。看完本篇文章可以了解stm32芯片如何配置定时器正交编码模式的同时对cubemx也会有一定的了解。这款工具很好用,很方便,希望所有用st芯片的伙伴们都能掌握它的用法,使用一种工具很快能上手,主要是大家要了解标准库和HAL库之间的一些微小机制区别就很容易了,这篇文章不打算讲这些,要不跑题了,有空的话专门写一篇文章,不过大家也可以在网上找到很多资料,废话不多说了下一段进入主题。 这里假设大家都下了cubemx软件,对软件具有一定的熟悉度。用stm32f030系列来为例吧。
[单片机]
使用Stm32Cubemx配置<font color='red'>定时器</font>正交编码模式详解
NEC V850 之 定时器TMM0
时钟的事情搞定了,下面就是和时间有关系的定时器了。看了下有3个定时器分别是AA,AB,M。其中M是最简单的一个,只有一个功能就是计数。感觉和STM32的systick有异曲同工之妙。就是为操作系统留的心跳时钟啊。所以先搞他吧。 先说说这个TMM的时钟特性吧,有一个16位的比较寄存器(TM0CMP0),最大计数范围就是0~65535了。另外定时器TMM0不支持自动重装初值,所以在中断服务函数里除了要清标志位还要重新装入初值。然后这个定时器机器简单只有一个可屏蔽中断就是溢出中断。 下面说下他的计数时间的计算方法。关于系统时钟和内部设备时钟在上一篇博文里说过了,系统时钟如果是32MHz,那么内部设备时钟也是32MHz,如果想分频只有在具
[单片机]
NEC V850 之 <font color='red'>定时器</font>TMM0
八8进制计数器
两位以上的数需要74LS90芯片级连,即低位芯片计数满后, 低位的最高位作为进位,送到高一位芯片的CP端。
[模拟电子]
八8进制<font color='red'>计数器</font>
STM8单片机定时器1编码器功能使用详解
编码器简介 这里使用的编码器是点位编码器,点位编码器在各种仪器上使用的比较多。它的具体参数这里就不说了。 它的外形如下: 引脚功能如下: 这里使用的是带开关功能的,所以有5个引脚,如果不带开关的话,就只有3个引脚。编码器左右两个比较大的引脚只是启固定作用的,是不带任何功能的。 上面一排的3个引脚就是编码器的信号输出引脚,中间的引脚接地线,左右两个分别是信号输出引脚。底下两个引脚主要是按键引脚,按键未按下时;两个引脚不通,当按键按下时,两个引脚导通。 这里要注意一点,上面一排引脚中的GND和下面一排的GND在编码器内部是不通的,使用时在电路板上可以将这两个引脚连通接地。 硬件接线图 硬件接线图如下: A端子和
[单片机]
STM8单片机<font color='red'>定时器</font>1编码器功能使用详解
一种高效率的定时器管理模块设计
引 言 定时器是通信协议正常运行的基本要素之一,主要用于各种定时和帧重传的任务。通信协议在单片机系统上实现所使用的定时器,定时精度要求不高,但数量要求比较大。由于硬件资源有限,不可能为每一个单独任务分配一个硬件定时器,只能通过单个硬件定时器模拟多个软件定时器的方法,来满足协议中的定时应用需要。 用一定的数据结构将这些软件定时器组织起来,并提供统一的调用接口,称为“定时器管理”。目前定时器管理主要有2种实现方法: ①静态数组法。将定时器节点存储在数组中。优点是逻辑简单,占用ROM较少。但这种方案有明显的缺点:当硬件定时器中断发生时,要对所有定时器节点进行减法操作,时间开销很大,且时延不确定(与定时器数目相关)。 ②delta
[单片机]
一种高效率的<font color='red'>定时器</font>管理模块设计
80C51存储器与C51内存优化
80C51在物理结构上有四个存储空间:片内程序存储器、片外程序存储器、片内数据存储器和片外数据存储器。但在逻辑上,即从用户使用的角度上,80C51有三个存储空间:片内外统一编址的64KB的程序存储器地址空间(用16位地址)、256B的片内数据存储器的地址空间(用8位地址,其中128B的专用寄存器地址空间仅有21个字节有实际意义)以及64KB片外存储器地址空间。 1、程序存储器 程序存储器用于存放编好的程序和表格常数。80C51片内有4KB ROM,片外16位地址线最多可扩展64KB ROM,两者是统一编址的。如果EA端保持高电平,80C51的程序计数器PC在0000H——0FFFH范围内(即前4KB地址)是执行片内ROM的程序。当
[单片机]
三菱plc编程定时器编程咋输入
三菱PLC(Programmable Logic Controller,可编程逻辑控制器)是一种广泛应用于工业自动化控制领域的设备。在三菱PLC中,定时器是实现时间控制功能的重要组件。本文将详细介绍三菱PLC定时器的编程方法和应用场景。 1. 定时器的基本概念 定时器是一种用于测量时间间隔的设备,它可以在PLC程序中实现延时、计时等功能。三菱PLC中的定时器有多种类型,包括T、TW、TD等,每种类型的定时器都有其特定的应用场景。 2. 定时器的分类 2.1 T型定时器 T型定时器是最常用的定时器类型,它可以设置一个预设的时间值,当PLC程序运行到定时器指令时,定时器开始计时,直到达到预设时间后,定时器输出一个信号。 2.2 T
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved