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

目录

7.1 定时器/计数器

7.1.1 定时器/计数器的组成

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

7.1.3 定时器/计数器的控制

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

7.2.1 工作方式0

7.2.2 工作方式1

7.2.3 工作方式2

7.2.4 工作方式3

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

7.3.1 定时器/计数器初始化

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


7.1 定时器/计数器

7.1.1 定时器/计数器的组成

STC51从入门到精通(汇编)~~~ 第七讲:80C51的定时器/计数器_第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:工作方式控制位
STC51从入门到精通(汇编)~~~ 第七讲:80C51的定时器/计数器_第2张图片

(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

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

  • 方式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 (个外部脉冲)
     

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

7.2.4 工作方式3

T0分为两个独立的8位计数器TL0和TH0。TL0可以作为8位定时器外部事件计数器TH0被 固定为一个8位定时器方式
STC51从入门到精通(汇编)~~~ 第七讲:80C51的定时器/计数器_第5张图片

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,请编程实现该功能。
STC51从入门到精通(汇编)~~~ 第七讲:80C51的定时器/计数器_第6张图片

(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引脚输入的正脉冲宽度。
STC51从入门到精通(汇编)~~~ 第七讲:80C51的定时器/计数器_第7张图片

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

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

你可能感兴趣的:(STC51从入门到精通(汇编))