- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
19定时器计数器应用举例.
课 题 定时器/计数器应用举例
授课方式:讲授
教学目的:
1.掌握定时器/计数器初值的计算方法。
2.掌握定时器/计数器应用程序的编制方法。
重点、难点:
重点:定时器/计数器初值的计算方法,定时器/计数器应用程序的编制方法。
难点:定时器/计数器初值的计算方法,定时器/计数器工作方式的选择。
教学过程:
导入:
实例:通过定时器/计数器控制小喇叭进行音乐演奏实例引起学生兴趣。
上一次课我们主要介绍了AT89C51单片机内部有两个定时器/计数器T0和T1,其核心是计数器,基本功能是加1,对外部事件脉冲计数是计数器,对片内部机器周期的脉冲计数则是定时器。
AT89C51单片机定时器器/计数器的方式控制寄存器TMOD(89H),用来设置T0,T1的工作方式.控制寄存器TCON(88H):,用来控制T0,T1的启动和停止。四种工作方式的特点。
那我们如何对单片机定时器/计数器的初始化,如何编写实际的应用程序?
我们前面介绍的广告灯的设计P1口接LED灯要实现闪烁效果,灯的亮灭需要延时,具体做法是通过编写软件延时子程序来实现的,其程序如下:
ORG 0000H
SJMP START
ORG 0080H
START:
MOV P1,#00H;灯亮
CALL DELAY
MOV P1,#0FFH;灯灭
CALL DELAY
SJMP START
DELAY:
MOV R3,#20
D1:MOV R4,#20
D2:MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
DJNZ R3,D1
RET
END
那如果通过定时器/计数器来实现延时,该如何编写程序呢?
一、方式 0 的应用
图1方式1(13位计数器)示意图
方式0构成一个13位定时器/计数器。16位加法计数器(TH0和TL0)只用了13位,其中TH0占高8位,TL0占低5位(只用低5位,高三位未用)。当TL0低5位溢出时自动向TH0进位,而TH0溢出时向中断位TF0进位(硬件自动置位),并申请中断。
例 1 用定时器1、方式0实现1s延时.(晶振12MHz)
解:因为方式0采用13位计数器,其最大定时时间为:8192*1μs=8.192ms,因此,我们可选定时时间为5ms,再循环200次.定时时间选定后再确定计数值.
计数值=5ms/1μs=5*1000=5000
因13位计数器中TL1的高3位未用,应填写0,TH1占高8位,
TH1:(8192-5000)/32 TL1:(8192-5000)MOD 32
采用方式0定时,固TMOD=00H
编写1s延时子程序如下:
DELAY:
MOV R3,#200 ;置5ms计数循环初值
MOV TMOD,#00H ;设定时器为方式0
MOV TH1,# (8192-5000)/32 ;置定时初值
MOV TL1,# (8192-5000)MOD 32
SETB TR1 ;启动T1
LP1:
JBC TF1,LP2 ;查询计数溢出
SJMP LP1 ;未到5ms继续计数
LP2:
MOV TH1,# (8192-5000)/32 ;重新置定时初值
MOV TL1,# (8192-5000)MOD 32
DJNZ R3,LP1 ;未到1s继续循环
RET ;返回主程序
END
二、方式1的应用
图2 方式1(16位计数器)示意图
方式1构成16位定时器/计数器,其结构与操作几乎与方式0完全相同,唯一的差别是两者的计数位数不同。
例 2 用定时器0、方式1实现1s延时.(晶振12MHz)
解:计数值=5ms/1μs=5*1000=5000
TH1:(65536-5000)/256 TL1:(65536-5000)MOD 256
采用方式0定时,固TMOD=01H
编写1s延时子程序如下:
DELAY:
MOV R3,#200 ;置5ms计数循环初值
MOV TMOD,#01H ;设定时T0器为方式1
MOV TH0,# (65536-5000)/256 ;置定时初值
MOV TL0,# (65536-5000)MOD 256
SETB TR0 ;启动T0
LP1:
JBC TF0,LP2 ;查询计数溢出
SJMP LP1 ;未到5ms继续计数
LP2:
MOV TH0,# (65536-5000)/256 ;重新置定时器初值
MOV TL0,# (65536-5000)MOD 256
文档评论(0)