当前位置:文档之家› 单片机技术公开课

单片机技术公开课


二、方式1的应用
16位计 数器
图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延时子程序如下:

方式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/11μs=5*1000=5000 因13位计数器中TL1的高3位未用,应填写0,TH1占 高8位, TH1:(8192-5000)/32 TL1:(8192-5000)MOD 32 采用方式0定时,固TMOD=00H 编写1s延时子程序如下:
课 题 定时器/计数器应用举例
能力目标: 能应用定时器/计数器进行定时。能编写工作方 式0和工作方式1实现1s定时的延时子程序。 教学目的: 掌握定时器/计数器初值的计算方法。 掌握定时器/计数器应用程序的编制方法。
教学过程:
引入实例:通过定时器/计数器控制小喇叭进行 音乐演奏实例引起学生兴趣。 上一次课我们主要介绍了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
小结:



1、89C51定时器/计数器初值计算公式为:T初=M定时时间/机器周期时间。其中M与工作方式有关。 方式0时,M=213;方式1时,M=216;机器周期时 间与主振频率有关,1机器周期时间=12/fosc。如, 当fosc =12MHz时,1机器周期=1μs;当fosc =6MHz时,1机器周期时间=2μs。 2、定时计数器初始化包括定义TMOD、写入定时 初值、启动定时器/计数器运行等。 3、编制定时器/计数器程序,应注意要重装定时初值。源自
DELAY: MOV R3,#20 D1:MOV R4,#20 D2:MOV R5,#248 DJNZ R5,$ DJNZ R4,D2 DJNZ R3,D1 RET END
那如果通过定时器/计数器来实现延时, 该如何编写程序呢?
一. 方式 0 的应用
13位计 数器
图1 方式0(13位计数器)示意图







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 ;返回主程序
作业:
1、已知单片机时钟频率fosc =6MHz,当要求定时时 间为2ms或5ms,定时器分别工作在方式0、方式1, 定时器计数初值各是多少?工作方式控制字TMOD 的值为多少? 2、编写程序实现定时器T1实现0.2s的延时。





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 DJNZ R3,LP1 ;未到1s继续循环 RET ;返回主程序
相关主题