1 / 39

第 5 章定时 / 计数器

第 5 章定时 / 计数器. 本章要点. 定时 / 计数器的工作原理 定时 / 计数器的控制寄存器和方式寄存器 定时 / 计数器的工作方式、计数初值的设置以及各种工作方式下的应用编程. 5.1 定时 / 计数器的结构及工作原理. 5.1.1 定时 / 计数器的结构. MCS-51 单片机内部由两个 16 位可编程的定时 / 计数器,即定时器 T0 和定时器 T1 。 既可以用作定时器,又可用作计数器。. 基本部件是两个 8 位的计数器。由 TH0 和 TL0 组成 T0 ,由 TH1 和 TL1 组成 T1 ,它们都是以 加 1 的方式完成计数。

beau-dixon
Download Presentation

第 5 章定时 / 计数器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5章定时/计数器

  2. 本章要点 • 定时/计数器的工作原理 • 定时/计数器的控制寄存器和方式寄存器 • 定时/计数器的工作方式、计数初值的设置以及各种工作方式下的应用编程

  3. 5.1 定时/计数器的结构及工作原理 5.1.1 定时/计数器的结构 • MCS-51单片机内部由两个16位可编程的定时/计数器,即定时器T0和定时器T1。 • 既可以用作定时器,又可用作计数器。

  4. 基本部件是两个8位的计数器。由TH0和TL0组成T0,由TH1和TL1组成T1,它们都是以加1的方式完成计数。基本部件是两个8位的计数器。由TH0和TL0组成T0,由TH1和TL1组成T1,它们都是以加1的方式完成计数。 • 特殊功能寄存器TMOD控制定时/计数器的工作方式,TCON控制定时/计数器的启动运行并记录T0、T1的溢出标志。 • 通过初始化编程,可以预置计数初值、指定其工作方式及控制其运行

  5. 5.1.2 定时/计数器的工作原理 1.定时器的工作原理 • 在作定时器使用时,输入的计数脉冲是由晶体振荡器的输出经12分频后得到的,所以定时器也可以看作对机器周期计数的计数器。 • 如果晶振频率为12 MHz,则定时器每接收一个输入脉冲的时间为1us。

  6. 2.计数器的工作原理 • 当它用作计数器时,它对接到相应的外部引脚T0(P3.4) 或T1(P3.5)上的外部事件计数。 • 当检测到输入引脚上的电平由高跳变到低时,计数器就加1。 注意:计数器在每个机器周期采样外部输入,当采样值在这个机器周期为高,在下一个机器周期为低时,则计数器加1。 因此计数器需要两个机器周期来识别一个从高到低的跳变,故最高计数速率为晶振的1/24。

  7. 5.2 定时/计数器的方式和控制寄存器 1. 定时/计数器的方式寄存器TMOD • 高4位用于定时/计数器1,低4位用于定时/计数器0。

  8. 控制T1 • 控制T0 • TMOD(89H) • GATE:门控位。用来确定对应的外部中断请求引脚是否参与T0或T1的操作控制。 当GATE=0时,TR0或TR1被置位时,T0或T1被允许开始计数; 当GATE=1时,不仅要TR0或TR1置位,还需要P3口的/INT0或/INT1脚为高电平,才允许开始计数。 后一种情况下一般用于测量外部脉冲的宽度。

  9. TMOD(89H) • :定时器方式或计数器方式选择。 • 时,为定时方式,其计数器输入为晶振的12分频,即对机器周期计数。 • 时,为计数方式,计数器的输入来自T0(P3.4)和T1(P3.5)端的外部脉冲。 • 控制T1 • 控制T0

  10. M1M0 :定时/计数器的四种工作方式选择。

  11. 2. 定时/计数器控制寄存器TCON • 特殊功能寄存器TCON用于控制定时器的操作及对定时器中断的控制。特殊功能寄存器TCON既能按字节寻址(88H),又能按位寻址。

  12. TCON(88H) • TF1:T1的溢出标志。当T1计数溢出时由硬件则自动置1;在CPU响应中断处理时由硬件清0。也可由程序查询后清零(非中断方式)。 • TR1:T1的运行控制位。该位置1或清0用来实现启动或停止定时/计数器。 • TF0:T0的溢出标志 ;TR0:T0的运行控制位 。 • TMOD和TCON寄存器在复位时其每一位均清0。

  13. 5.3 定时/计数器的工作方式 1.方式0(了解) • 当M1M0设置为00时,定时/计数器选定为方式0工作。在这种方式下,计数器由THx中的8位和TLx中的低5位组成长度为13位的计数器。TLx中的高3位未用。 • 它的计数范围为0~8191(213=8192)。

  14. 振荡器 ÷12 K TH1 8位 TL1 低5位 TF1 T1(P3.5)脚 中断 TR1 GATE INT1脚 定时/计数器T1(T0)方式0逻辑图

  15. 2.方式1(常用) • 方式1 是THx和TLx组成一个16位计数器。它的计数范围为0~65535(216=65536)。

  16. 3.方式2(常用) • 可以自动装载计数初值(计数初值自动恢复)的8位计数器,THx作为赋值寄存器。 • THx由软件设置初值。当TLx产生溢出时,CPU一方面使溢出标志TFx置1,同时把THx中的8位数据重新装入TLx中。 • 方式2常用于精确定时控制和产生串行通信用的波特率。 • 但它的缺点是定时位数较少(最多只能定时256个周期)。

  17. 4.方式3(了解) • 方式3只适用于定时计数器T0。T1不能工作在方式3 • 当T0定义为方式3时,将使TL0和TH0分成两个相互独立的8位计数器。

  18. 当T1用作串行口波特率发生器时,才将T0定义为方式3,以增加一个8位计数器。当T1用作串行口波特率发生器时,才将T0定义为方式3,以增加一个8位计数器。

  19. 5.4 定时/计数器的编程举例 5.4.1计数初值的计算 设计数器最大计数值为M,则不同的工作方式,最大计数值M不同。 • 方式0:M=213=8192 • 方式1:M=216=65536 • 方式2、3:M=28=256

  20. 置入计数初值X的计算公式如下: 1.计数器方式:X=M-计数值 2.定时器方式:(M-X)×T=定时值 故,X=M - 定时值 / T • 其中T为计数周期,是单片机时钟的12分频,即单片机机器周期。当晶振为6 MHz时,T=2us,当晶振为12 MHz时,T=1us。

  21. 【例6-1】单片机晶振为12MHZ,要求T0产生500µs定时,计算计数初值X。【例6-1】单片机晶振为12MHZ,要求T0产生500µs定时,计算计数初值X。 解: 由于计数周期T=1µs,产生500µs定时,则需要“+1”计数500次,定时器方能产生溢出。 (1)采用方式0: X=213-500=7692=1E0CH; 11110000 01100B; 11110000 00001100B; F0H 装入TH0 0CH装入TL0;

  22. (2)如果采用方式1: • X=216-500=65036=FE0CH; • 采用方式1时,则程序段如下: • TH1=(65536-500)/256; • TL1=(65536-500)%256;

  23. 5.4.2定时/计数器的初始化 初始化一般有以下几个步骤: ①确定工作方式----对方式寄存器TMOD赋值。 ②预置定时或计数初值----直接将初值写入TH0、TL0或TH1、TL1中。 ③根据需要对中断允许寄存器有关位赋值,以开放或禁止定时/计数器中断。 ④启动定时/计数器,使TCON中的TR1或TR0置1,计数器即按确定的工作方式和初值开始计数或定时。

  24. 着重介绍方式1、方式2的应用 5.4.3应用举例

  25. 1.定时器方式1的应用

  26. 【例6-5】采用12MHz晶振,在P1.0脚上输出周期为2.5s,占空比为20%的脉冲信号。【例6-5】采用12MHz晶振,在P1.0脚上输出周期为2.5s,占空比为20%的脉冲信号。 解: • 设置定时器0为工作方式1, TMOD=0x01; • 对于12MHz晶振,使用定时器最大定时为六十多ms,取10ms定时。 • 由于占空比为20%,高电平应为50次中断。 • 晶振=12MHz,定时10ms,则定时器的计数次数X为: X=10*10-3/机器周期=10*10-3/(12/ 12*10-6)=10000

  27. #include<reg51.h> #define uchar unsigned char char time; uchar period=250; uchar high=50; sbit p1_0=P1^0; void time0( ) interrupt 1 using 1 { TH0=(65536-10000)/256; TL0=(65536-10000)%256; if (++time==high) p1_0=0 ; else if (time==period ) { time=0; p1_0=1; } }

  28. void main( ) { TMOD=0x01; //设置定时器0为工作方式1 TH0=(65536-10000)/256; TL0=(65536-10000)%256; EA=1; //开总中断 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 while(1); //等待中断 }

  29. 2.计数器方式的应用举例 【例6-6】用T1来计数,工作于方式2,要求每计满100次,将P1.0端取反。 解: • 设置T1为工作方式2,计数方式, TMOD=0x60 • 计数初值 X=28-100=156=9CH • TH1=TL1=9CH

  30. C51程序如下: #include<reg51.h> void main( ) { TMOD=0x60; //设置T1为工作方式2,计数方式 TH1=0x9C; TL1=0x9C; //装入T1的计数初值 TR1=1; //启动定时/计数器1 for( ; ; ) { while ( !TF1); //查询等待TF1为1 p1_0=~ p1_0; //p1_0取反 TF1=0; } }

  31. 外部中断源的扩展方法之2 【例6-8】设T0为方式2(自动装入计数初值的8位计数器)计数方式工作时,编程实现只要对外来事件计数一次就产生中断请求解: 时间常数的计算: 方式2工作时,当计数到256时计数器就产生溢出。设时间常数为X,当发生一次外来事件时就溢出,则: X+1=256 X=256-1=11111111B=0FFH

  32. 设置T0为方式2,计数方式,时间常数为0FFH,允许中断,并令CPU开放中断。设置T0为方式2,计数方式,时间常数为0FFH,允许中断,并令CPU开放中断。 C51初始化程序段如下: TMOD=0x06; TL0=0x FF; TH0=0x FF; IE=0x82; TR0=1;

  33. 3.门控位的应用(TMOD) • 当GATE=1时,定时器的运行将同时受TRx位和外部中断引脚电平的控制。 • 只有在TRx=1,同时 =1时才能启动计数;若 =0,则停止计数。 • 利用这一特点可以极为方便地用于测试外部输入脉冲的宽度。

  34. 为低时,T1停止计数 (P3.3) 为高时,T1开始计数 【例6-9】利用T1的门控位GATE测试 /INT1(P3.3)引脚上出现的正脉冲宽度,设fosc=12 MHz,将所测得的高8位值存入变量H,低8位值存入变量L中。分析:设外部脉冲由/INT1(P3.3)输入,T1工作于定时器方式,选择操作模式1 ,GATE设为1,测试时,应在/INT1为低电平时,设置TR1为1,一旦/INT1变为高电平时,就启动计数;/INT1再次变化时,停止计数。此计数值即为被测正脉冲的宽度。

  35. C51程序如下: #include<reg51.h> #define uchar unsigned char uchar H,L; sbit p3_3=P3^3; void main( ) { TMOD=0x90; //设置T1为工作方式1,定时方式 TH1=0x00; TL1=0x00; //装入T1的计数初值0 while(p3_3) ; //等待P3.3变低 TR1=1; while(!p3_3) ; //等待P3.3变高,启动计数 while(p3_3) ; //等待P3.3再次变低 TR1=0; H= TH1; //存计数值到变量H和L L= TL1; }

  36. 被测脉冲宽度的计算式为: 式中fcout为定时器的计数频率等于fosc/12;n为定时器中的计数值。

  37. 使用时注意的问题: 1、运行中读定时器/计数器 • 在改变定时器的内容之前,先使其停止运行,这是比较简单的方法。 • MCS-51的定时器/计数器在运行时,都可以对其读和写,先读高8位,再读低8位,最后再读一次高8位与前一次的结果比较。

  38. 小结 • 定时/计数器的工作原理 • 定时/计数器的控制寄存器和方式寄存器 • 定时/计数器的工作方式、计数初值的设置以及各种工作方式下的应用编程(方式1、2是重点,定时、计数应用是重点) 作业: P169、四、2

More Related