在单片机应用技术中,常要求有一些实时时钟,以实现定时或延时控制;也常要求有一些计数器,实现对外部事件的计数控制。MCS-51单片机片内有两个16位的可编程的定时/计数器T0、T1,以满足这方面的需要。 本文来自www.eadianqi.com
1、定时/计数器的结构及工作原理 本文来自www.eadianqi.com 定时/计数器的核心是一个加1计数器(有的是减1计数器),加1计数器的脉冲有两个来源,一个是外部脉冲源,另一个是系统的时钟振荡器。计数器对两个脉冲源之一进行计数,每输入一个脉冲,计数值加1。当计数到计数器为全1时,再输入1个脉冲就使计数值回零,同时从最高位溢出一个脉冲使定时/计数控制寄存器TCON的TF0或TF1置1,作为计数器的溢出中断标志位。 自动控制网www.eadianqi.com版权所有
两个16位的定时/计数器T0、T1分别由两个8位的特殊功能寄存器TH0、TL0,TH1、TL1组成,用来存放定时/计数初值。它们可以别程序控制为不同的组合状态(13位、16位、两个分开的8位),形成定时/计数器的四种工作方式,这些设置可以通过工作方式寄存器TMOD的相应位进行控制。定时/计数器的启动和停止可以由定时/计数器控制寄存器TCON进行控制。TMOD、TCON的内容可以由软件编程设置。 本文来自www.eadianqi.com 2、工作方式寄存器TMOD 自动控制网www.eadianqi.com版权所有 工作方式寄存器TMOD用于选择定时/计数器的工作模式和工 自动控制网www.eadianqi.com版权所有
作方式,字节地址为89H,其格式如表1:
表1 工作方式寄存器TMOD 自动控制网www.eadianqi.com版权所有
TMOD的高 4位控制T1,低4位控制T0。各位定义如下 自动控制网www.eadianqi.com版权所有 GATE:门控位。GATE=0时,仅由运行控制位TR0或TR1置1来启动定时/计数器运行。GATE=1 自动控制网www.eadianqi.com版权所有 时,由运行控制位TR0或TR1置1和外部中断引脚 INT0或INT1上的高电平共同来启动定 自动控制网www.eadianqi.com版权所有
时/计数器的运行。 自动控制网www.eadianqi.com版权所有
C/T:计数模式定时模式选择位。C/T=0为定时模式。 C/T=1为计数模式,计数器对外部引脚P3.4、 P3.5的外部脉冲进行计数。 自动控制网www.eadianqi.com版权所有 M1、M0:定时/计数器工作方式选择位。M1、M0共有4种编码,对应4种工作方式,如表2 表2 M1、M0对应工作方式 本文来自www.eadianqi.com
3、定时/计数器控制寄存器TCON 本文来自www.eadianqi.com TCON的字节地址为88H,,用于控制定时 /计数器的启动,其格式如表3.9 : 本文来自www.eadianqi.com 表3 定时/计数器控制寄存器TCON 自动控制网www.eadianqi.com版权所有
低4位与外部中断有关,高4位的功能如下: 本文来自www.eadianqi.com TR0:定时/计数器0的运行控制位。TR0=1,启动定时/计数器0的必要条件,还与GATE 自动控制网www.eadianqi.com版权所有 位状态有关。TR0=0,停止定时/计数器0。 自动控制网www.eadianqi.com版权所有
TF0:T0溢出标志位。当定时/计数器计数溢出时,该位置1。使用查询方式时,应以软件 自动控制网www.eadianqi.com版权所有 方法及时将该位清0。使用中断方式时,进入中断服务程序后由硬件自动清0。 本文来自www.eadianqi.com TR1:定时/计数器1的运行控制位。TR1=1,启动定时/计数器1的必要条件,还与GATE 自动控制网www.eadianqi.com版权所有 位状态有关。TR1=0,停止定时/计数器1。 本文来自www.eadianqi.com TF1:T1溢出标志位。当定时/计数器计数溢出时,该位置1。使用查询方式时,应以软件方法及时将该位清0。使用中断方式时,进入中断服务程序后由硬件自动清0。 本文来自www.eadianqi.com 4、定时/计数器实际应用 自动控制网www.eadianqi.com版权所有 由上面介绍可知,定时/计数器时可编程的,所以在任何一个定时/计数器开始定时或计数之前,必须对TMOD的各位进行软件编程设置,将初值写入THX、TLX(X=0、1),置位 TCON相应位来实现启动和停止定时/计数器。 本文来自www.eadianqi.com
例题 设计一个程序,要求定时/计数器0为 定时状态,工作于方式0下,定时时间为 2ms,每隔2ms将P1口所接8置发光二极管亮灭状态左移一位,已知晶振频率为6MHZ。分别用查询方式和中断方式实现。 本文来自www.eadianqi.com 首先要对定时/计数器工作方式进行设定,按题目要求TMOD各位应为00000001B。 自动控制网www.eadianqi.com版权所有 接着来计算初值:题目要求定时,则对内部机器周期进行计数。每个机器周期包括12个振荡周期,晶振为6MHZ,则1个机器周期=12个振荡周期=2us。题目要求定时时间为2ms,那么应数1000次机器周期,1000次之后要求计数器产生溢出。由于要求工作方式1,即16位定时/计数器。那么应装入定时/计数器得初值为2的16-1000=64536。 转换为16进制为0FC18H,分别装入TH0和TL0。最后编写程序置位TR0启动定时器。 自动控制网www.eadianqi.com版权所有
采用查询方式:ORG 0000H 本文来自www.eadianqi.com
MAIN:MOV A,#01H 自动控制网www.eadianqi.com版权所有
LOOP0:MOV TMOD,#01H ;T0初始化 自动控制网www.eadianqi.com版权所有
MOV TH0,#0FCH ;装入定时初值 本文来自www.eadianqi.com MOV TL0,#18H 自动控制网www.eadianqi.com版权所有
MOV P1,A ;点亮最右边一位发光二极管 本文来自www.eadianqi.com
SETB TR0 ;启动T0 自动控制网www.eadianqi.com版权所有 LOOP1:JNB TF0,LOOP1 ; ;查询TF0,等待定时时间到 本文来自www.eadianqi.com
RLC A ;定时时间到,左移一位 本文来自www.eadianqi.com CLR TF0 ;软件清TF0位 本文来自www.eadianqi.com JMP LOOP0 ;返回,重装初值 本文来自www.eadianqi.com 采用中断方式:ORG 0000H 自动控制网www.eadianqi.com版权所有
AJMP MAIN ;转主程序 自动控制网www.eadianqi.com版权所有
ORG 000BH ;T0中断入口,只有一个中断,可以放在此处 本文来自www.eadianqi.com MOV TH0,#0FCH ;重新装入初值 本文来自www.eadianqi.com MOV TL0,#18H 本文来自www.eadianqi.com RLC A ;左移一位 本文来自www.eadianqi.com MOV P1,A ;送P1口 自动控制网www.eadianqi.com版权所有 RETI ;中断返回 本文来自www.eadianqi.com MAIN:MOV TMOD,#01H ;T0初始化 自动控制网www.eadianqi.com版权所有 MOV TH0,#0FCH ;定时初值 自动控制网www.eadianqi.com版权所有 MOV TL0,#18H 自动控制网www.eadianqi.com版权所有
MOV A,#01H 自动控制网www.eadianqi.com版权所有 SETB TR0 ;启动定时器0 自动控制网www.eadianqi.com版权所有 SETB EA ;CPU开放中断 自动控制网www.eadianqi.com版权所有
SETB ET0 ;允许T0中断 自动控制网www.eadianqi.com版权所有 SJMP $ ;等待 本文来自www.eadianqi.com
|