第6章 AT8S51单片机定时器计数器

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
6.1 概述
一.T0概述 1.T0—16位计数器 占两字节 TH0—地址8CH TL0—地址8AH 复位后(T0)=0000H 计数范围0000H~0FFFFH 216 最大=65536 不能位寻址 不能按字操作 (分别从低8位,高8位 送数) P3.4 P3.5 P3.2 P3.3 2.T0的基本功能 ①对送入TL0的脉冲,使之增1 外部计数状态—对 P3.4 T0 脚的脉冲计数 两个计数源 内部定时—对机器周期计数
第6章 AT89S51 单片机定时器/计数器

主要内容 定时/计数器的工作原理模式 定时/计数器的工作方式 定时/计数器的应用
1
ห้องสมุดไป่ตู้
6.1 概述
(1) 定时器/计数器的概念
内部计数器 定时/计数器 外部计数器 计数器 定时器
(2) AT89S51的定时器/计数器简介 2个16位的定时/计数器,有多种工作方式。 定时/计数器工作在定时模式时,计数脉冲信号来 自单片机的内部,计数速率是晶振频率的1/12,当计 数器启动后,每个机器周期计数器自动加1。 定时/计数器工作在计数模式时,计数器对外部脉 冲进行计数,计数器计P3.4(T0脚)P3.5(T1脚)负跳变 次数。每产生一次负跳变,计数器自动加1。
13
1F90H=0001 1111 1001 1100B
TH0 TL0
17
6.4 定时器/计数器的应用程序设计
6.4.1 T/C的计数初值C的计算和装入
对T0而言,计数初值的高8位装入TH0,低5位装入TL0的低5 位,TL0的高3位无效,可补零。
将11111100B=FCH,装入TH0,XXX11100B装入TL0 由指令表示为: TH0=0xFC; TL0=0x1C;
10
6.3 定时器/计数器的工作方式及工作原理
6.3.2 T0、T1的方式1
设定 M1M0=1 为16位定时计数器 原理同方式 1 最大计数范围 0~216=65536=64k
11
6.3 定时器/计数器的工作方式及工作原理
6.3.3 方式2
12
6.3 定时器/计数器的工作方式及工作原理
6.3.3 方式2 可自动重转初值的8位定时器/计数器 最大计数值 28 只有TL0做计数。TH0中的初始化程序装入TH0初值 每当TL0溢出时,TH0的内容自动装入TL0位,使之可 以循环计数。
16
6.4 定时器/计数器的应用程序设计
6.4.1 T/C的计数初值C的计算和装入 1、计数初值C的求法 计数方式:C=最大计数值-计数个数X 0 213=8192 1 216=65536 2、3 28=256 定时方式:最大计数值-定时时间/机器周期T 2、T/C在不同工作方式下的初值装入方式 1)方式0:13位 要装入1F90H初值时
2)方式1,16位方式 初值低8位装入TL0 高8位装入TH0 TH0=0xFF; TL0 =0x9C; 3)方式2、初值既要装入TH0,也要装入TL0用指令表示为 TH0=0x9C; TL0=0x9C;
18
6.4 定时器/计数器的应用程序设计
6.4.2 T/C初始化编程 初始化内容包括 1)根据定时时间或计数要求,计算初值 2)设置工作方式控制字 TMOD 3)装初值 THx TLx 4)启动T/C(软件或外部信号) TRx 如工作于中断方式,需开EA及ETx,并编写中断服 务程序。
i--;
if(i<=0) {P1=~P1; i=100; } }
/*循环次数减1*/
/*P1口按位取反*/ /*重新设置循环次数*/
24
6.4.4 计数器的应用
【例6-2】 采用定时器T1的方式1的中断计数方式,如图613所示,计数输入引脚T1(P3.5)上外接开关K1,作为计 数信号输入。按4次K1后,P1口的8只LED闪烁不停。 (1)设置TMOD寄存器
void main( )
{TMOD=0x50; */ TH0=0xff;
/*主函数*/
/*设置定时器T1为方式1计数
/*向TH0写入初值的高8位*/
28
TL0=0xfc;
EA=1; ET1=1; TR1=1; while(1) ; } /*以下为定时器T1的中断服务程序*/ void T1_int(void) interrupt 3 {for(;;) {P1=0xff; Delay(500) ; P1=0; Delay(500); }
5
5.2 定时器/计数器的工作方式选择及控制
(一) 定时/计数器的工作方式寄存器(TMOD, 89H )
T1
D7 D6 D5 M1 D4 M0 D3 D2 T0 D1 M1 D0 M0
GATE C/T
GATE C/T
∆ M1 0 0 1 1
M0 0 1 0 1
——工作方式选择位 P133表6—1 0 13 1 16 2 自8 3 T0分TH0,TL0计数器 T1 停止计数
6
6.2 定时器/计数器的工作方式选择及控制
(一) 定时/计数器的工作方式寄存器(TMOD, 89H )
T1
D7 D6 D5 M1 D4 M0 D3 D2 T0 D1 M1 D0 M0
GATE C/T
GATE C/T
∆ C T — 工作状态选择位 =1 为计数状态 =0 为定时状态 ∆ GATE——门控位 =1 时允许P3.2 和TR0联合控制T0 =0 时 禁止P3.2控制T0,只由TR0控制
此工作方式可省去用户软件中重装初值的指令的执行时 间,简化定时初值的计算方法,可相当精确地确定定时
时间。
13
6.3 定时器/计数器的工作方式及工作原理
6.3.4 方式3
14
6.3 定时器/计数器的工作方式及工作原理
6.3.4 方式3
15
6.3 定时器/计数器的工作方式及工作原理
6.3.4 方式3 把T0分为两个8位定时/计数器 P138 图6-10 使单片机具有三个定时/计数器 定时器T1没有方式3, 如设为方式3, T1停止计数 ∆ TL0可做定时/计数器 占用T0的TCON和TMOD中的 控制位和标志位 ∆ TH0只能作为定时器使用, 占用T1的资源TR1和TF1 ∆此时T1仍可用方式0、1、2, 但不能使用中断方式 ∆只有T1用作串行口波特率发生器时,T0才工作在方式 3,此时T1多用于方式2
2
6.1 概述
∆ 它们最低位的脉冲,将使它们自动加1,带进位
TH0 TL0
本质上讲是两个16位计数器;每输入一个脉冲增1 两种工作状态 四种工作方式 0 1 2 3 ∆ 与之有关的 四个管脚 P3.4 P3.5 P3.2 P3.3 七个SFR T0 T1 TCON TMOD SP IE IP 中断申请
TMOD3 GATE
T0方式0的逻辑结构
9
6.3 定时器/计数器的工作方式及工作原理
TCON.4(主控位) 1 启动T0 控制逻辑 (GATE +P3.2)x(TR0)=门控电平= 0 停止 T0 1.13位; 2.内部定时,外部计数; 3.中断; 4.启/停控制逻 TR0无论在什么情况下,都可软件控制T0启/停 GATE=0 条件下,P3.2脚不能控制T0启/停 GATE=1 可控制T0的启/停。
T1工作在方式1,应使TMOD的M1、M0=01;设置计数器
工作模式C/T*=1;对T0的运行控制仅由TR0来控制,应使 GATE0=0。定时器T0不使用,各相关位均设为0。所以, TMOD寄存器应初始化为0x50。
25
图6-13
由外部计数输入信号控制LED的闪烁
26
(2)计算T1计数初值
由于每按4次K1,计数一次,因此计数器的初值为655364=65532,将其转换成16进制后为:0xfffc,因此,TH0=0xff, TL0=0xfc。 (3)设置IE寄存器
本例由于采用定时器T1中断,因此需将IE寄存器中的EA、
ET1位置1。 (4)启动和停止定时器T1 将定时器控制寄存器TCON中的TR1=1,则启动定时器T1 计数;TR1=0,则停止定时器T1计数。 参考程序如下:
27
#include <reg51.h>
void Delay(unsigned int i)/* 定义延时函数Delay( ),i是形式参数,不 能赋初值*/ {unsigned int j; for(;i>0;i--) /* 变量i由实际参数传入一个值,因此i不能赋初值*/ for(j=0;j<125;j++) {; } } /*空函数*/
4
6.1 概述
②T0两种工作状态( C T ) 位 (TMOD.2) =0 为内部定时 C T =1 为外部计数 ③T0可读可写 写T0就是对之赋初值 读T0就是检查T0当前的计数结果存 入单片机寄存器中 MOV DPTR,#DADA (此一条按字操作) ④中断功能 T0溢出时 计数结果为0000H 进位丢 失—CY(CY短时间还有)置位中断申请标志位 TF0 TCON.5 ⑤T0的启停可以被脚 P3.2 ,TR0位 GATE位所控制 T1同T0
22
#include<reg51.h>
Char i=100; void main( ) /*给变量i赋初值*/
{TMOD=0x01; 式1*/
TH0=0xee;
/*设置定时器T0为方
/*向TH0写入初值的高8位*/
TL0=0x00;
P1=0x00; EA=1;
/*向TL0写入初值的低8位*/
/*P1口8只LED点亮*/ /*总中断允许*/
ET0=1;
TR0=1; while(1) ; */ }
/*定时器T0中断允许*/
/*启动定时器T0*/ /*无穷循环,等待定时中断
23
/*以下为定时器T0的中断服务程序*/ void T0_int(void) interrupt 1 {TH0=0xee; T0溢出*/ TL0=0x00; /*给T0装入16位初值,计4608个数后,
21
则5000=(216 −X)12/11.0592
得:X = 60928,转换成16进制后为:0xee00,其中0xee装入 TH0,0x00装入TL0。 (3)设置IE寄存器 本例由于采用定时器T0中断,因此需将IE寄存器中的EA、
ET0位置1。
(4)启动和停止定时器T0 将定时器控制寄存器TCON中的TR0=1,则启动定时器T0; TR0=0,则停止定时器T0定时。 参考程序如下:
图4-7)。下面采用定时器T0的方式1的定时中断方式,使P1口
外接的8只LED每0.5s闪亮一次。
20
(1)设置TMOD寄存器
定时器T0工作在方式1,应使TMOD寄存器的M1、M0=01; 应设置C/=0,为定时器工作模式;对T0的运行控制仅由TR0来 控制,应使GATE0=0。定时器T1不使用,各相关位均设为0。 所以,TMOD寄存器应初始化为0x01。 (2)计算T0计数初值 设定时时间5ms(即5000µ s),设定时器T0的计数初值为X, 假设晶振的频率为11.0592MHz,则定时时间为:定时时间 =(216−X)12/晶振频率
8
6.3 定时器/计数器的工作方式及工作原理
6.3.1 T0的方式0—13位定时/计数器
最大计数范围:0~213=8k=8192 ∆T0分为低5位和高8位 T0方式0的结构 M1 M0 =00
TMOD TMOD0 TMOD1 TMOD2 M0 M1 C/T 0 振荡器 0 T0引脚 1 INTO引脚 ≥1 ÷12 C/T=0 K C/T=1 A & B 控制 TH0 TL0 (5位) (8位) TF0 TR0 中断 TCON
7
6.2 定时器/计数器的工作方式选择及控制
(二) 定时/计数器控制寄存器(TCON) 控制定时/计数器的启停,反映定时/计数器是否计满。
用于外中断 TCON 地址88H 可位寻址
D7 TF1 D6 TR1 D5 TF0 D4 TR0 D3 IE1 D2 IT1 D1 IE0 D0 IT0
∆ TF0、(TF1)——T0、(T1)计数溢出标志位 =1 溢出时,硬件置1,否则清0 =0未溢出 ∆ TR0 (TR1)——T0(T1)的启/停控制位 软件置1时 启动T0 TR0=1时要判断 GATE位是否允许 P3.2启动 T0 ∆ 复位时 (TCON)=00H——禁止T0、T1计数
19
6.4 定时器/计数器的编程和应用 在4种工作方式中,方式0与方式1基本相同,只是计数器的
计数位数不同。方式0为13位计数器,方式1为16位计数器。由
于方式0是为兼容MCS-48而设,且其计数初值计算复杂,所以 在实际应用中,一般不用方式0,而采用方式1。 6.4.3 P1口外接的8只LED每0.5s闪亮一次。 【例6-1】在AT89S51单片机的P1口上接有8只LED(电路见
相关文档
最新文档