自动控制网移动版

自动控制网 > 自动化 > 单片机 >

单片机定时/计数器

单片机应用技术中,常要求有一些实时时钟,以实现定时或延时控制;也常要求有一些计数器,实现对外部事件的计数控制。MCS-51单片机片内有两个16位的可编程的定时/计数器T0、T1,以满足这方面的需要。

1、定时/计数器的结构及工作原理

定时/计数器的核心是一个加1计数器(有的是减1计数器),加1计数器的脉冲有两个来源,一个是外部脉冲源,另一个是系统的时钟振荡器。计数器对两个脉冲源之一进行计数,每输入一个脉冲,计数值加1。当计数到计数器为全1时,再输入1个脉冲就使计数值回零,同时从最高位溢出一个脉冲使定时/计数控制寄存器TCON的TF0或TF1置1,作为计数器的溢出中断标志位。

两个16位的定时/计数器T0、T1分别由两个8位的特殊功能寄存器TH0、TL0,TH1、TL1组成,用来存放定时/计数初值。它们可以别程序控制为不同的组合状态(13位、16位、两个分开的8位),形成定时/计数器的四种工作方式,这些设置可以通过工作方式寄存器TMOD的相应位进行控制。定时/计数器的启动和停止可以由定时/计数器控制寄存器TCON进行控制。TMOD、TCON的内容可以由软件编程设置。

2、工作方式寄存器TMOD

工作方式寄存器TMOD用于选择定时/计数器的工作模式和工

作方式,字节地址为89H,其格式如表1:

表1  工作方式寄存器TMOD

D7

D6

D5

D4

D3

D2

D1

D0

GATE

C/T

M1

M0

GATE

C/T

M1

M0

TMOD的高 4位控制T1,低4位控制T0。各位定义如下

GATE:门控位。GATE=0时,仅由运行控制位TR0或TR1置1来启动定时/计数器运行。GATE=1

时,由运行控制位TR0或TR1置1和外部中断引脚 INT0或INT1上的高电平共同来启动定

时/计数器的运行。

C/T:计数模式定时模式选择位。C/T=0为定时模式。 C/T=1为计数模式,计数器对外部引脚P3.4、 P3.5的外部脉冲进行计数。

M1、M0:定时/计数器工作方式选择位。M1、M0共有4种编码,对应4种工作方式,如表2          表2   M1、M0对应工作方式

M1

M0

工作方式

0

0

方式0,13位定时/计数器

0

1

方式1,16位定时/时数器

1

0

方式2,初值自动重新装入的8位定时/计数器

1

1

方式3,仅适用于T0,分成两个8位定时/计数器,关闭T1

3、定时/计数器控制寄存器TCON

TCON的字节地址为88H,,用于控制定时 /计数器的启动,其格式如表3.9 :

表3  定时/计数器控制寄存器TCON

D7

D6

D5

D4

D3

D2

D1

D0

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

低4位与外部中断有关,高4位的功能如下:

TR0:定时/计数器0的运行控制位。TR0=1,启动定时/计数器0的必要条件,还与GATE

位状态有关。TR0=0,停止定时/计数器0。

TF0:T0溢出标志位。当定时/计数器计数溢出时,该位置1。使用查询方式时,应以软件

方法及时将该位清0。使用中断方式时,进入中断服务程序后由硬件自动清0。

TR1:定时/计数器1的运行控制位。TR1=1,启动定时/计数器1的必要条件,还与GATE

位状态有关。TR1=0,停止定时/计数器1。

TF1:T1溢出标志位。当定时/计数器计数溢出时,该位置1。使用查询方式时,应以软件方法及时将该位清0。使用中断方式时,进入中断服务程序后由硬件自动清0。

4、定时/计数器实际应用

由上面介绍可知,定时/计数器时可编程的,所以在任何一个定时/计数器开始定时或计数之前,必须对TMOD的各位进行软件编程设置,将初值写入THX、TLX(X=0、1),置位 TCON相应位来实现启动和停止定时/计数器。

例题 设计一个程序,要求定时/计数器0为 定时状态,工作于方式0下,定时时间为 2ms,每隔2ms将P1口所接8置发光二极管亮灭状态左移一位,已知晶振频率为6MHZ。分别用查询方式和中断方式实现。

首先要对定时/计数器工作方式进行设定,按题目要求TMOD各位应为00000001B。

接着来计算初值:题目要求定时,则对内部机器周期进行计数。每个机器周期包括12个振荡周期,晶振为6MHZ,则1个机器周期=12个振荡周期=2us。题目要求定时时间为2ms,那么应数1000次机器周期,1000次之后要求计数器产生溢出。由于要求工作方式1,即16位定时/计数器。那么应装入定时/计数器得初值为2的16-1000=64536。 转换为16进制为0FC18H,分别装入TH0和TL0。最后编写程序置位TR0启动定时器。

采用查询方式:ORG 0000H

MAIN:MOV A,#01H

LOOP0:MOV TMOD,#01H       ;T0初始化

MOV TH0,#0FCH       ;装入定时初值

MOV TL0,#18H

MOV P1,A            ;点亮最右边一位发光二极管

SETB TR0            ;启动T0

LOOP1:JNB TF0,LOOP1    ;   ;查询TF0,等待定时时间到

RLC A               ;定时时间到,左移一位

CLR TF0            ;软件清TF0位

JMP LOOP0          ;返回,重装初值

采用中断方式:ORG 0000H

AJMP MAIN       ;转主程序

ORG 000BH       ;T0中断入口,只有一个中断,可以放在此处

MOV TH0,#0FCH   ;重新装入初值   

MOV TL0,#18H

RLC A           ;左移一位

MOV P1,A        ;送P1口

RETI            ;中断返回 

MAIN:MOV TMOD,#01H   ;T0初始化

MOV TH0,#0FCH   ;定时初值

MOV TL0,#18H

MOV A,#01H

SETB TR0       ;启动定时器0

SETB EA        ;CPU开放中断

SETB ET0       ;允许T0中断

SJMP $         ;等待

    本文已影响
    最近关注
    0基础免费学PLC,扫描观看

    扫描上方二维码免费观看PLC视频课程