`
javababy1
  • 浏览: 1166636 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

51单片机定时器计数器中断总结

 
阅读更多

一.TMOD:定时器计数度器模式寄存器

M1M0:定时/计数器一共有四种工作方式,就是用M1M0来控制的,2位正好是四种组合。

1. 工作方式1

工作方式1是16位的定时/计数方式,将M1M0设为01即可,其它特性与工作方式0相同。

工作方式2

在介绍这种式方式之前先让我们思考一个问题:上一次课我们提到过任意计数及任意定时的问题,比如我要计1000个数,可是16位的计数器要计到65536才满(若初值为0,记数1后变成0001H,计数65535后变成0FFFFH,再计数1次变成65536,溢出了,各位都为0了,然后申请中断。所以是能计数65536个的,虽然最后一次溢出了。),怎么办呢?我们讨论后得出的办法是用预置数,先在计数器里放上64536,再来1000个脉冲,不就行了吗?是的,但是计满了之后我们又该怎么办呢?要知道,计数总是不断重复的,流水线上计满后马上又要开始下一次计数,下一次的计数还是1000吗?当计满并溢出后,计数器里面的值变成了0(为什么,可以参考前面课程的说明),因此下一次将要计满65536后才会溢出,这可不符合要求,怎么办?当然办法很简单,就是每次一溢出时执行一段程序(这通常是需要的,要不然要溢出干吗?)可以在这段程序中做把预置数64536送入计数器中的事情。所以采用工作方式0或1都要在溢出后做一个重置预置数的工作,做工作当然就得要时间,一般来说这点时间不算什么,可是有一些场合我们还是要计较的,所以就有了第三种工作方式��自动再装入预置数的工作方式。

既然要自动得新装入预置数,那么预置数就得放在一个地方,要不然装什么呢?那么预置数放在什么地方呢?它放在T(0/1)的高8位,那么这样高8位不就不能参与计数了吗?是的,在工作方式2,只有低8位参与计数,而高8位不参与计数,用作预置数的存放,这样计数范围就小多了,当然做任可事总有代价的,关键是看值不值,如果我根本不需要计那么多数,那么就可以用这种方式。看图4,每当计数溢出,就会打开T(0/1)的高、低8位之间的开关,计预置数进入低8位。这是由硬件自动完成的,不需要由人工干预。

通常这种式作方式用于波特率发生器(我们将在串行接口中讲解),用于这种用途时,定时器就是为了提供一个时间基准。计数溢出后不需要做事情,要做的仅仅只有一件,就是重新装入预置数,再开始计数,而且中间不要任何延迟,可见这个任务用工作方式2来完成是最妙不过了。

工作方式3

这种式作方式之下,定时/计数器0被拆成2个独立的定时/计数器来用。其中,TL0可以构成8位的定时器或计数器的工作方式,而TH0则只能作为定时器来用。我们知道作定时、计数器来用,需要控制,计满后溢出需要有溢出标记,T0被分成两个来用,那就要两套控制及、溢出标记了,从何而来呢?TL0还是用原来的T0的标记,而TH0则借用T1的标记。如此T1不是无标记、控制可用了吗?是的。

一般情况处,只有在T1以工作方式2运行(当波特率发生器用)时,才让T0工作于方式3的。

定时器/计数器的定时/计数范围

工作方式0:13位定时/计数方式,因此,最多可以计到2的13次方,也就是8192次。

工作方式1:16位定时/计数方式,因此,最多可以计到2的16次方,也就是65536次。

工作方式2和工作方式3,都是8位的定时/计数方式,因此,最多可以计到2的8次方,也说是256次。

预置值计算:用最大计数量减去需要的计数次数即可。

C/T:前面我们说过,定时/计数器即可作定时用也可用计数用,到底作什么用,由我们根据需要自行决定,也说是决定权在我们��编程者。如果C/T为0就是用作定时器(开关往上打),如果C/T为1就是用作计数器(开关往下打)。顺便提一下:一个定时/计数器同一时刻要么作定时用,要么作计数用,不能同时用的,这是个极普通的常识,几乎没有教材会提这一点,但很多初学者却会有此困惑。

GATE:看图,当我们选择了定时或计数工作方式后,定时/计数脉冲却不一定能到达计数器端,中间还有一个开关,显然这个开关不合上,计数脉冲就没法过去,那么开关什么时候过去呢?有两种情况

1. GATE=0,分析一下逻辑,GATE非后是1,进入或门,或门总是输出1,和或门的另一个输入端INT1无关,在这种情况下,开关的打开、合上只取决于TR1,只要TR11,开关就合上,计数脉冲得以畅通无阻,而如果TR1等于0则开关打开,计数脉冲无法通过,因此定时/计数是否工作,只取决于TR1

GATE=1,在此种情况下,计数脉冲通路上的开关不仅要由TR1来控制,而且还要受到INT1引脚的控制,只有TR1为1,且INT1引脚也是高电平,开关才合上,计数脉冲才得以通过。这个特性可以用来测量一个信号的高电平的宽度,想想看,怎么测?

二.TCON: 定时器计数度器控制寄存器

1. 中断请求源:

(1)外部中断请求源:即外中断0和1,经由外部引脚引入的,在单片机上有两个引脚,名称为INT0、INT1,也就是P3.2、P3.3这两个引脚。在内部的TCON中有四位是与外中断有关的。

IT0:INT0触发方式控制位,可由软件进和置位和复位,IT0=0,INT0为低电平触发方式,IT0=1,INT0为负跳变触发方式。这两种方式的差异将在以后再谈。

IE0:INT0中断请求标志位。当有外部的中断请求时,这位就会置1(这由硬件来完成),在CPU响应中断后,由硬件将IE0清0。

IT1、IE1的用途和IT0、IE0相同。

(2)内部中断请求源

TF0:定时器T0的溢出中断标记,当T0计数产生溢出时,由硬件置位TF0。当CPU响应中断后,再由硬件将TF0清0。

TF1:与TF0类似。

TI、RI:串行口发送、接收中断

三.中断允许寄存器IE

在MCS-51中断系统中,中断的允许或禁止是由片内可进行位寻址的8位中断允许寄存器IE来控制的。见下表

EA

总开关

X

X

ES

串行口中断允许

ET1

定时器1中断允许

EX1

外中断1中断允许

ET0

定时器0中断允许

EX0

外中断0中断允许

其中EA是总开关,如果它等于0,则所有中断都不允许。

ES-串行口中断允许

ET1-定时器1中断允许

EX1-外中断1中断允许。

ET0-定时器0中断允许

EX0-外中断0中断允许

四.中断优先级寄存器IP

中断优先级中由中断优先级寄存器IP来高置的,IP中某位设为1,相应的中断就是高优先级,否则就是低优先级。

X

X

X

PS

串口

PT1

定时器1

PX1

外中断1

PT0

定时器0

PX0

外中断0

五个中断源的请求地址

外中断0:0003H

定时器0:000BH

外中断1:0013H

定时器1:001BH

串口 :0023H

源文档 <http://hi.baidu.com/%B1%E0%B3%CC%BC%BC%CA%F5%CA%D5%BC%AF/blog/item/ca9eff596ec9e189800a18f8.html>

分享到:
评论

相关推荐

    51单片机 定时器0中断点亮LED灯.rar

    51单片机 定时器0中断 点亮小灯的一个小程序参考 希望对你有所帮助 以下给出一部分代码 #include "int_0time.h" //自定义的头文件 void Timer0_Tint(void) //初始化定时器0 { // AUXR &= 0X7F; //定时/计数器辅助...

    MCS-51单片机定时器和计数器区别的理解

    在51单片机的学习过程中,我们经常会发现中断、计数器/定时器、串口是学习单片机的难点,对于初学者来说,这几部分的内容很难理解。本文就来介绍一下MCS-51单片机定时器和计数器区别。

    基于Proteus仿真51单片机定时器、计数器应用实验

    (1)利用单片机定时器/计数器设计一个秒表,由 P0 口连接 LED 灯,采用 BCD 码 显示,发光二极管亮表示 1,暗则表示 0,计满 100s 后从头开始,依次循环。利用一只 按键控制秒表的启、停。请在 Proteus 中画出电路...

    51单片机计数器与定时器的区别

    在51单片机的学习过程中,我们经常会发现中断、计数器/定时器、串口是学习单片机的难点,对于初学者来说,这几部分的内容很难理解。下面就来学习一下

    51单片机定时器使用经验总结

    单片机定时器的使用可以说非常简单,只要掌握原理,有一点的C语言基础就行了。要点有以下几个: 1. 一定要知道英文缩写的原形,这样寄存器的名字就不用记了。 理解是最好的记忆方法。好的教材一定会给出所有英文...

    基于51单片机的定时器程序

    基于51单片机的定时器程序

    51单片机定时器、计数器汇编程序.txt

    以51系列单片机为控制器,实现按键次数的统计工作,并在计满一定的次数后可以产生预定的输出;采用中断方式,对按键的计数及产生的输出放在中断服务模块当中,每当按键按下便产生一次中断,没有按键按下时,主程序...

    实验6_单片机定时计数实验_单片机定时器_外部计数器_

    AT89C51中有两个定时/计数器,其中定时/计数器1(T1)作定时器用,定时1S;定时/计数器0(T0)作计数器用;外部输入的脉冲信号由模拟数字时钟DCLOCK产生;用虚拟的计数器COUNTER TIMER进行计数;将单片机的计数结果...

    c语言控制51单片机模拟实验 定时器/计数器、外部中断实验

    c语言控制51单片机模拟实验 定时器/计数器、外部中断实验

    8051单片机定时器详解

    51单片机定时器 51 单片机是一种广泛应用于嵌入式系统中的微控制器,其内部集成了多个定时器模块,可以用于各种定时、计数、PWM 等应用。 51 单片机定时器的基本原理是利用定时器模块内部的计数器来实现定时功能。...

    C单片机0-9999每秒加1计数器源码

    摘要:VC/C++源码,系统相关,计数器  0-9999每秒加1计数器,基于C程序写的51单片机计数器控制程序,控制计数器在0-9999每秒加1,可了解到定时器0中断外理中键扫描和显示,以及定时器的模式选定等。

    定时器计数器的基本结构及工作原理

    80C51单片机内部设有两个16位的可编程定时器/计数器。可编程的意思是指其功能(如工作方式。定时时间。量程。启动方式等)均可由指令来确定和改变。在定时器/计数器中除了有两个16位的计数器之外,还有两个特殊功能...

    51单片机Proteus仿真实例 定时器控制数码管动态显示 (2)

    51单片机Proteus仿真实例 定时器控制数码管动态显示 (2)51单片机Proteus仿真实例 定时器控制数码管动态显示 (2)51单片机Proteus仿真实例 定时器控制数码管动态显示 (2)51单片机Proteus仿真实例 定时器控制数码管动态...

    51单片机C语言程序(二)定时/计数器 中断

    51单片机C语言程序(二)定时/计数器 中断

    C51(外部中断、定时器、计数器).zip

    自己整理的 51单片机中断、定时器、计数器 说明,代码已经封装,可直接在main中调用,并带有proteus仿真

    单片机定时器的使用总结.doc

    单片机定时器的使用 第一部分:51系列定时器 定时/计数器 0 和定时/计数器1都有4种定时模式。 16位定时器对内部机器周期进行技术,机器周期加1,定时器值加1,1MHZ模式下,一 个机器周期为1us 。 定时器工作模式...

    单片机原理及应用:第5章 80C51的中断系统及定时计数器.ppt

    单片机原理及应用:第5章 80C51的中断系统及定时计数器.ppt

    基于51单片机的计数器设计.doc

    利用单片机定时器/计数器中断设计计数器,0到99的累加。 2.综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解 ,具备设计单片机应用系统的能力。 3.通过本次课程设计加深对单片机掌握...

    基于单片机的数字脉宽调制器

    给出了PWM信号的特点和MCS-51单片机定时器/计数器的特性,以控制液压比例阀的PWM为例,详细介绍了该方法的具体实现,并分析了该PWM的性能。分析结果表明,设计的PWM能够满足一般应用,解决了单片机中定时器/计数器资源...

Global site tag (gtag.js) - Google Analytics