第六章 定时器及应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定时器的4种模式及应用
每种工作模式对应的最大计数值 模式0 :13位计数器 213=8192 模式1 :16位计数器 216=65536 模式2 :8位计数器 28=256 模式3 :8位计数器 28=256 定时初值: 对机器周期进行计数。T:定时时间,X:初值,N:计数器位数, fosc:系统时钟频率 (2N-X) ×12/fosc=T X=2N-fosc/12×T 计数初值: 对外部脉冲计数,计数值根据要求确定。N:计数器位数,X:初值, 则: X=2N-计数值
程序清单:
START:MOV TMOD,#06H;T0模式2,计数 MOV TH0,#0FFH;计数初值 MOV TL0,#0FFH CLR P1.1;P1.1初态为0 SETB TR0 LOOP: JBC TF0,LP1;检测外部信号负跳变 SJMP LOOP; LP1: CLR TR0;关定时器 MOV TMOD,#02H;T0改变为定时200us ,模式2 MOV TH0,#156;定时的计数初值 MOV TL0 ,#156 SETB P1.1;P1.1输出1 CLR P1.0; P1.0输出0 SETB TR0;启动定时
第六章 定时器及应用
§6.1 定时器概述
§6.2 定时器的控制 §6.3 定时器的四种模式及应用 §6.4 思考题与习题
定时器概述
实现定时或计数,通常采用以下三种方法: 1、硬件法 硬件定时功能完全由硬件电路完成,不占用CPU时间。但 当要求改变定时时间时,只能通过改变电路中的元件参数来 实现,很不灵活 2、软件法 软件定时是执行一段循环程序来进行时间延时。优点是无 需额外的硬件开销,时间比较准确,但牺牲了CPU的时间。 3、可编程定时器/计数器 8051内部提供了2个可编程的定时器/计数器T0、T1,它 们可以用于定时或对外部脉冲计数,还可以作为串行口的波 特率发生器。定时器达到预定定时时间或计数满时,给出溢 出标志,还可以发出内部中断
8051定时/计数器逻辑结构
T0、T1的内部结构框图
定时器/计数器0、1的初始化编程
定时器的控制
工作模式寄存器TMOD
GATE=1,T0、T1的启动由INTi引脚和TRi位共同控制。只有INTi引脚为高电 平时,TRi置“1”才能启动定时/计数器。 GATE=0,T0、T1由软件设置TRi来控制启动。TRi=1,启动;TRi=0,停止
定时器概述
组成:6个SFR寄存器,包括TMOD、TCON、TH0和 TL0、TH1和TL1。 定时/计数器的核心:一个加1计数器,完成加1计数功 能。 定时功能:若是对单片机内部的机器周期进行计数, 从而得到定时时间,这就是定时功能。每个机器周期 计数器加1 计数功能:若是对单片机的T0、T1引脚输入信号进行 计数,即计数功能,当外部输入信号出现下降沿时, 计数器加1。 定时功能和计数功能的设定和控制都是通过软件来设 定的。
定时/计数器工作模式3
在T0模式3时,T1仍可设置为方式0~2。由于 TR1和TF1被T0的TH0占用,计数器开关K已 被接通,此时仅用T1的C/T控制T1运行。计数 器溢出时,只能将输出送入串行口或用于不需 要中断的场合。 在一般情况下,当T1用作串行口波特率发生器 时,T0才设置为工作模式3。此时,常把定时 器T1设置为模式2,用作波特率发生器。
定时器/计数器的工作方式
TMOD用于控制T0和T1的工作方式,低4位用于控制T0, 高4位用于控制T1 M1M0:工作方式控制位,对应的工作方式如下图:
控制寄存器TCON
TCON用于控制定时/计数器的启、停、溢出标志和外部中断信号 触发方式。 TFi:T0、T1溢出位。当计数溢出时,由硬件自动使TFi置1,并 向CPU申请中断,中断响应后硬件自动清0。TFi也可作为程序查 询的标志位,在查询方式下由软件清0。 TRi:T0、T1运行控制位。TRi=1,启动计数,TRi=0,停止计 数
② 设置工作模式寄存器TMOD TMOD=0001 0000B=10H ③ 启动定时计数器
模式1举例
ORG 2000H MOV TMOD,#10H SETB TR1 LOOP:MOV TH1,#0D8H MOV TL1,#0F0H JNB TF1,$ CLR TF1 CPL P1.1 SJMP LOOP END
采用定时器溢出中断方式的程序 ORG 0000H ; 主程序 RESET: AJMP MAIN ; 跳过中断服务程序区 ORG 000BH ;定时器T0中断矢量 AJMP PE ;转入中断服务程序 ORG 0030H MAIN: MOV TMOD,#00H;设置T0为模式0 MOV TL0,#0CH;计数初值写入 MOV TH0,#0F0H SETB EA ;CPU开中断 SETB ET0 ;T0中断允许 SETB TR0 ;启动定时 HERE:SJMP HERE ;等待中断 ORG 0120H ;中断服务程序 PE: MOV TL0,#0C0H;重装计数初值 MOV TH0,#0F0H CPL P1.0 ;P1.0取反 RETI ;中断返回
测试脉宽举例
MOV TMOD,#09H;T0定时,模式1 MOV TH0,#00H;T0计数初值0000H MOV TL0,#00H MOV R0,#20H;RAM的地址指针 LOOP1:JB P3.2,LOOP1;等待INT0变低 SETB TR0;启动T0准备计数 LOOP2:JNB P3.2,LOOP2;等待INT0变高 LOOP3:JB P3.2,LOOP3 ;等待INT0再次变低 CLR TR0;INT0变低停止计数 MOV @R0,TL0;存入计数值 INC R0 MOV @R0,TH0
;中断服务程序入口
TMOD,#60H ;设置T1为模式2,外部计数方式 TL1Байду номын сангаас#9CH ;T1计数器初值 TH1,#9CH IE,#88H ; 定时器开中断 TR1 ;启动T1计数 HERE ;等待中断
工作模式2举例
例2、由P3.4引脚(T0)输入一低频脉冲信号,要求P3.4每 发生一次负跳变时,P1.0输出一个200us的同步负脉冲, 同时P1.1输出一个400us的同步正脉冲。已知晶振频率为 6MHz,初态为P1.0为高,P1.1为低。
思路:外部信号由T1(P3.5)引脚输入,每发生一次 负跳变计数器加1,每输入100个脉冲,计数器发生溢出中 断,中断服务程序将P1.0取反一次 T1的计数初值: X= 28 -100=156=9CH,因此,TH1=TL1=9CH TMOD=0110 0000B=60H
工作模式2举例
程序清单: ORG LJMP ORG CPL RETI MAIN: MOV MOV MOV MOV SETB HERE: SJMP 0000H MAIN 001BH P1.0
思路:T0工作于模式2,外部事件计数方式,初值为FFH(一次计数就产 生中断),查询TF0,为1后改为200us定时,设置P1.0和P1.1状态。第一 次200us 定时完成,设置P1.0和P1.1状态,继续第二次200us定时,第二 次定时完成,设置P1.0和P1.1状态,恢复初值FFH,循环。即:反复改 变计数值。
定时/计数器工作模式2
模式2是能自动重装计数初值的8位计数器。低8位作计数 器使用,高8位保存计数初值 定时方式计数初值:X=28-T×fosc/12 计数方式计数初值:X=28-计数值
工作模式2举例
例1、利用定时器T1的模式2对外部信号计数。 要求每计满100次,将 P1.0端取反。
定时/计数器工作模式1
模式1是16位定时/计数器,与模式0的区别是计数器的长 度。比模式0常用。 定时时间T: T=(216-X) ×12/fosc =(216-X) ×机器周期 计数初值:X=216-计数值
模式1举例
例:用定时器T1产生一个50Hz的方波,由P1.1输 出,采用查询的方式进行控制,设晶体频率为 12MHz。 ① 确定计数初值 方波周期T=20ms,用T1定时10ms,P1.1取反输 出,计数初值X:T =(216-X) ×12/fosc =10 ×10-3
LOOP1:JBC TF0,LP2;第1个200us到否 SJMP LOOP1;未到等待 LP2: SETB P1.0 ;到了恢复P1.0 LOOP2: JBC TF0,LP3;第2个200us到否 SJMP LOOP2 LP3: CLR P1.1 CLR TR0;关定时器 AJMP START
定时/计数器工作模式3
LOOP: AJMP LOOP;等待中断 PIP0 : MOV TL0,#9CH;T0中断处理程序 CPL P1.0 RETI PIT1: MOV TH0,#38H;T1中断处理程序 CPL P1.1 RETI
利用GATE测试外部输入脉冲宽度
GATE=0时,定时器的启动只受TRi位控制 GATE=1时,定时器的启动受TRi位和外部中 断信号INTi的共同控制。只有当INTi引脚为1, 同时TRi=1时才能启动计数; INTi引脚为0时 停止计数。 换个角度看,当GATE=1时,定时器实际记录 的时间就是相应INTi引脚上高电平的持续时间。 通过反相器,则可测得相应引脚的低电平的持 续时间。两个时间之和即为该引脚上输入波形 的周期,其倒数为输入波形的频率,还可算出 占空比等参数。
ORG 2000H START:AJMP MAIN ORG 000BH AJMP PIT0;转入T0中断处理入口 ORG 001BH AJMP PIT1;转入T1中断处理入口 ORG 2100H MAIN: MOV SP,#60H MOV TMOD,#03H;模式3 MOV TL0,#9CH;定时200us初值 MOV TH0,#38H;定时400us初值 MOV TCON,#50H;启动TL0,TH0计数 MOV IE,#8AH,开T0、T1中断
定时器/计数器工作模式0
模式0为13位计数器 定时时间T: T=(213-X) ×12/fosc=(213-X) ×机器周期 计数初值:X=213-计数值
振荡器 ÷12
Tcy S2 C/T=0 S1 T1引脚 TR1 C/T=1
TL1 低5位 TH1 8位
TF1
中断
…
&
GATE 1 ≥1
采用查询TF0状态方式:
ORG 2000H MOV TMOD,#00H;写入方式控制字 MOV TL0,#0CH;计数初值写入 MOV TH0,#0F0H SETB TR0;启动T0 LOOP:JBC TF0,PE;TF0=1溢出转移PE,清TF0 AJMP LOOP;未溢出 PE: MOV TL0,#0C0H;重装计数初值 MOV TH0,#0F0H CPL P1.0 AJMP LOOP END
INT1引脚
工作模式0举例
例:应用定时器T0产生1ms定时,并使P1.0输出周期为 2ms的方波,已知晶振频率为6MHz 初值X: (213-X) ×12/(6×106)=1×10-3 X=7692=1E0CH,二进制表示为X=0001 1110 0000 1100 TH0=0F0H(高8位),TL0=0CH(低5位)
T0模式3结构图
T0模式3下,T1结构
工作模式3举例
例:应用T0模式3,分别设定200us和400us定时, 并使P1.0和P1.1分别产生周期为400us和800us 方波,已知晶振频率为6MHz,采用中断方式。 200us计数初值: (28-X) ×2×10-6=200×10-6,X=156=9CH 400us计数初值: (28-X) ×2×10-6=400×10-6,X=56=38H
利用GATE测试外部输入脉冲宽度
测试原理(以T0为例,GATE=1,TR0=1)
测试脉宽举例
例:利用T0门控位GATE来测试由INT0(P3.2) 引脚输入的正脉冲宽度,已知晶振为12MHz, 所测得的高8位值存入片内RAM的21H单元, 低8位值存入片内20H单元中。 思路:采用T0工作模式1(16位计数), GATE=1,TR0=1,初值为0000H
模式3下,T0和T1的结构、功能不同 T0模式3: TL0和TH0分成两个互相独立的8位计数器。 其中TL0用原T0的各控制位、引脚和中断 源, 即GATE0、TR0、TF0和T0引脚、INT0引脚 TH0只有内部定时,占用定时器T1的TR1和 TF1 T1无模式3: 将T1设置为方式3 ,会使T1立即停止计数。