单片机定时器的应用与误差纠正

发布者:huanhui最新更新时间:2006-12-11 来源: 电源技术应用关键字:MCS-51  寄存器  计数 手机看文章 扫描二维码
随时随地手机看文章
1 前言
  
定时器是MCS-51单片机非常重要的组成部分,由于其应用与单片机的其他硬件相关,存在着一定的复杂性[1]。而定时器是单片机应用中解决某类复杂问题的最有为效的方法,应用非常广泛。随着定时要求的提高,在定时处理过程中所带来的误差需要校正[2],本文就MCS-51单片机的使用方法与误差校正方法进行了讨论,并给出通用算法与程序。

2 定时器工作方式与方式设置

  
MCS-51单片机有两路独立的定时器,每路定时器有4种工作方式(0~3),方式0是13位计数结构,计数器由TH全部8位与TL的低5位构成;方式1是16位计数结构,计数器由TH与TL全部8位共16位组成;方式2是8位计数结构方式,计数器由TL8位组成,与其他方式不同的是,当定时溢出时,硬件自动将TH的值装入TL中,有自动加载功能。前三种工作方式,两路定时器的设置与使用完全相同,但在工作方式3下,两路定时器有很大差别,只有0路定时器可以工作在方式3下,1路定时器只能工作在方式0~2下,在工作方式3下,0路定时器被拆分成两个独立的8位计数器TL0与TH1,其中0路定时器的各控制位和引脚信号全归TL0使用,因此TH0只能做简单的定时器使用,其控制位占用了1路定时器的控制位,如果0路定时器工作在方式3下,1路定时器由于让出了所属控制位,通常作为串行口波特率发生器[3]。
  
定时器的工作方式选择主要依靠设置TMOD寄存器的值,其各位定义如下:

位序
B7
B6
B5
B4
B3
B2
B1
B0
位符号
GATE
C/T
M1
M0
GATE
C/T
M1
M0

其中,B0~B3用来控制0路定时器,B4~B7用来控制1路定时器。
  
GATE位为门控位,主要确定定时器启动的方式,如果GATE=0,则用TR0(TR1)位启动/关闭定时器,如果GATE=1,则以外中断请求信号(INT0或INT1)启动定时器。
  
C/T位为定时与计数选择位,C/T=0为定时方式,C/T=1为计数方式。
  M0、M1为工作方式选择位
  M1M0=00方式0M1M0=10方式2
  M1M0=01方式1M1M0=11方式3
  
选择定时器工作方式,应根据上述规定向寄存器TMOD中写入相应数,如设置0路定时器工作在定时方式0下,1路定时器工作在方式1下,则应用下列指令设置:
  
MOVTMOD,#10H

3 定时器的处理方式与计数初值的计算

  
MCS-51单片机的定时器采用增值计数法,在定时工作方式下,启动定时器后,每机器周期CPU硬件会自动给相应计数器加1,直至超出对应计数器所能表示的最大值,发生定时溢出,硬件自动将TF0(TF1)置位,用户可以通过查询TF0(TF1)位判断定时是否溢出,如果此时定时中断处于开放状态,将引发相应定时中断,MCS-51响应中断,根据相应中断地址(0路定时中断的中断入口地址为000B,1路为001B)执行中断处理程序。
  
定时编程有两种基本方式,一种方式为查询方式,在启动定时时关闭相应定时中断,然后循环检测TF0(TF1)进行相应处理;另一种方式为中断方式,启动定时时开放相应定时中断,并将定时溢出处理程序编写为中断处理程序形式通过在相应中断入口地址(000B,001B)放置跳转指令转入定时溢出处理程序。
  
定时器工作方式选定后,定时溢出时间唯一取决于计数器的初值,如何根据应用需要确定计数器初值,也是定时器应用的一个重要问题。假定单片机机器周期为K0,所选定的定时方式计数器为n位,所实现的定时时间长度为T,则有:
  
    (2n-x)K0=T(1)
  
  其中x为计数器的初值,根据式1可以求出初值x为:

    x=2n-(T/K0)(2)

4 定时器的编程步聚和各步聚的通用程序
  
  定时器应用编程主要分为以下几个步聚。

4.1步骤1根据定时要求求计数初值x
  
  首先根据单片机时钟频率f确定单片机机器周期k0,即:

  k0=12/f(3)
  
在实际应用中,单片机时钟频率f一般为6mHz或12mHz,所以单片机机器周期k0=2μs或1μs,然后根据选定的工作方式确定计数器位数n,将所得k0与n代入式2,求出计数初值x,并根据所选择的计数方式将x的值分入TH0(TH1)与TL0(TL1)。

4.2步骤2编写初始化程序
  
初始化程序与定时编程方式有关,中断方式初始化程序如下(以0路定时器为例):

  movTMOD,#n(规定定时工作方式)
  movTH0,#n1(设置计数器低位)
  movTL1,#n2(设置计数器高位)
  setBEA(开放中断)
  setBET0(开放定时中断0)
  setBTR0(启动定时)
  
  查询方式初始化程序如下:
  movTMOD,#n(规定定时工作方式)
  movTH0,#n1(设置计数器低位)
  movTL1,#n2(设置计数器高位)
  clrET0(开放定时中断0)
  setBTR0(启动定时)

  其中#n1和#n2与计数初值x有关,如果采用方式2,有#n1=#n2,所有初始化程序都以0路定时器为例,如果用1路定时器,则将程序中的寄存器和控制位的下标1改为0。

4.3步骤3编制定时处理程序
  
  中断方式处理程序如下:
  org000B
  1jmpb1
  b1:clrEA
  movTH0,#n1
  movTH1,#n2
  定时处理语句段
  reti
  其中,0路定时器为000B,如果为1路定时器为001B,如果定时器工作在方式2,则不需要给TH0、TH1重新赋值。
  查询方式处理程序如下:
  L1:jbcTF0,LO1
  sjmpL1
  LO1:movTH0,#n1
  movTH1,#n2
  定时处理语句段
  sjmpL1

5 定时的误差校准
  
由于单片机的机器周期为1μs~2μs,定时误差一般应在0μs~20μs之内,对于一般应用,此误差可以忽略,但是对于精确度要求比较高的应用场合,此误差必须进行校正。定时误差是定时溢出后转入执行定时处理语句段之间所耗费的时间,此时间主要由定时溢出转入定时处理语句段所必须执行的指令或硬件过程产生。
  
定时误差校准的简单原理是:在定时溢出响应后,停止定时器计数,读出当时计数值(它反映了定时响应的延迟时间),然后将完成这一任务的程序段执行时间考虑进去,作为修正因子校正定时初值,以下程序段以中断处理方式为例:
  clrEA
  clrTR1
  clrc
  movA,#n0
  clrTR0
  subbA,TL0
  subbA,#08
  movTL0,A
  movA,#n1
  subbA,TH0
  movTH0,A
  setbTR0
  定时处理语句段
  reti
  
由于执行从指令clrTR0(停止计数)到指令setbTR0(重新开启计数)之间的指令需8个机器周期,应将此消耗考虑进去。上述程序将定时误差缩小在1个机器周期内。
关键字:MCS-51  寄存器  计数 引用地址:单片机定时器的应用与误差纠正

上一篇:单片机定时器的应用与误差纠正
下一篇:P87LPC767单片机及其在微功耗智能定位器中的应用

推荐阅读最新更新时间:2024-12-17 15:02

STM32中控制I/O口的寄存器
引言 STM32的I/O口由软件配置,有八种模式:输入悬浮、输入上拉、输入下拉、模拟输入、开漏输出、推挽输出、推挽式复用功能及开漏复用功能。 每个I/O口由7个寄存器控制,分别是: 模式配置的端口寄存器 32位 CRL、CRH 数据寄存器 32位 IDR、ODR 置位/复位寄存器 32位 BSRR 复位寄存器 16位 BRR 锁存寄存器 32位 LCKR 主要介绍一下CRL、CRH、IDR、ODR 一 CRL、CRH CRL控制低8位I/O口,CRH控制高8位I/O口,下图是《STM32参考手册》和《原子教你玩STM32》中关于CRL的介绍。CRL共32位,每四位控制一个I/O口
[单片机]
再造STM32---第四部分:新建工程---寄存器
4.1 新建工程: 4.1.1 新建本地工程文件夹: 为了工程目录更加清晰,我们在本地电脑上新建 1 个文件夹用于存放整个工程,如命名为“LED”,然后在该目录下新建 2 个文件夹,具体如下: 表格 8 工程目录文件夹清单 表格 9 工程目录文件夹内容清单 4.1.2 新建工程: 打开 KEIL5,新建一个工程,工程名根据喜好命名,我这里取 LED-REG,直接保存在 LED 文件夹下。 1. 选择 CPU 型号: 这个根据你开发板使用的 CPU 具体的型号来选择, 我的F429选STM32F429IGT 型号。如果这里没有出现你想要的 CPU 型号,或者一个型号都没有,那么肯定是你的 KE
[单片机]
再造STM32---第四部分:新建工程---<font color='red'>寄存器</font>版
基于MCS-51单片机和CAN总线控制器实现总线节点的设计
CAN(Controller Area Network)即控制器局域网络。由于其具有较强的抗干扰能力、通讯中没有地址的概念及节点数不受限制等优点,已经被广泛应用于汽车、数控机床、仪器仪表、现场总线控制等领域。在CAN总线的节点设计中,目前应用较多的是通过单片机的控制来实现。有的单片机已经嵌入了CAN控制器的功能,比如Philips的P8XC592,Motorola的68HC05X4等,但这类单片机的应用并不普及,而且价格相对较高。对于目前应用最为普及、价格也很便宜的MCS-51系列单片机,本身并不嵌有CAN控制器的功能。下面就给出一种基于MCS-51单片机和SJA1000的CAN总线节点设计方法。 1、 CAN总线简介 CAN
[单片机]
基于<font color='red'>MCS-51</font>单片机和CAN总线控制器实现总线节点的设计
MCS-51系列单片机位控制转移指令(5)
布尔处理功能是MCS-51系列单片机的一个重要特征,这是出于实际应用需要而设置的。布尔变量也即开关变量,它是以位(bit)为单位进行操作的。 在物理结构上,MCS-51单片机有一个布尔处理机,它以进位标志做为累加位,以内部RAM可寻址的128个为存储位。 既然有布尔处理机功能,所以也就有相应的布尔操作 指令 集,下面我们分别谈论。 .位控制转移指令(5) 位控制转移指令是以位的状态作为实现程序转移的判断条件,介绍如下: JC rel ; (CY)=1转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。 JNC rel ; (CY)=0转移,(PC)+2+rel→PC,否则程序往下执行,(PC
[单片机]
【51单片机学习过程记录】7 中断之 定时计数器0 操作前理解
声明:【51单片机学习过程记录】全是我自己学习、实践所记录的过程,我只是菜鸟,所有论点和观点仅代表我个人,不能确定是这个技术的真理。我的目的是学习和有可能成为可以向别人分享的经验,因此有错误我会虚心接受,并认真改正。 1 由数据手册可知,89c52rc单片机有六个中断,分别为 外部中断0 外部中断1定时计数器0 定时计数器1定时计数器2 以及串口中断,一共六个。 2 如何理解继而操作定时器0? A大概了解:定时器,其实就是单片机的机器周期计数器,工作原理就是 当给计数器设定初始值并开启后,定时计数器会自动计算,到达设定的时间后会产生中断。(当然,更详细还是需要专门查看定时计数器去深入了解) B操作:需要参考另外一个
[单片机]
【51单片机学习过程记录】7 中断之 定时<font color='red'>计数</font>器0 操作前理解
80C51复位标志位的设置与应用研究
引言   设置复位标志位便于区分不同原因引发的复位,作为一种新技术被越来越多的新型单片机所采纳。例如Philips公司的P87LPC700和 P89LPC900系列、Freescale公司(原Motorola半导体部)的MC68HC05系列和MC68HC08系列、Sunplus公司的 SPMC65系列、Microchip公司的PIC系列等,内部都设计了专门用于记录各种复位标志的状态寄存器。   MC68HC08系列有一个复位状态寄存器,负责记录6种复位标志位:上电复位、引脚复位、看门狗复位、非法指令复位、非法地址复位和欠压复位。SPMC65系列有一个系统控制寄存器,负责记录5种复位标志位:上电复位、外部复位、看门狗复位、非法地
[应用]
寄存器的分类及作用
一、存储器与寄存器 1.1、存储器 存储器在cpu外、一般指硬盘、u盘,切断电源仍可以保存资料的设备。 特点:容量大。 缺点:读写速度慢。 1.2、寄存器 寄存器是中央处理器内的组成部份。它跟CPU有关。 内存和寄存器是为了解决存储器读写速度而产生的多级存储机制。 寄存器亦称缓存,一般是指由基本触发器结构衍生出来的D触发,一般是一些与非门构成的结构,一般整合在CPU内,其读写速度更CPU的运行速度基本匹配。由于其性能优越,所以价格昂贵。一般好的CPU也就只有几MB的2级缓存,1级缓存更小。 不同的寄存器有不同的作用,如通用寄存器(GR)可以存放操作数、操作数的地址或中间结构;指令寄存器(IR)用以存放当前正在执行的指令。
[单片机]
<font color='red'>寄存器</font>的分类及作用
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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