Presentation is loading. Please wait.

Presentation is loading. Please wait.

第7章 定时/计数器 教学目的:了解80C51系列单片机内部定时器/计数器的结构与工作原理;能够采用查询方式对定时器/计数器的4种工作模式编程、应用。 教学重点:1. 定时/计数器的工作原理; 2. 定时器方式1、2的编程、应用。 教学难点:1.定时/计数器控制寄存器的设置 2.定时初值的设置.

Similar presentations


Presentation on theme: "第7章 定时/计数器 教学目的:了解80C51系列单片机内部定时器/计数器的结构与工作原理;能够采用查询方式对定时器/计数器的4种工作模式编程、应用。 教学重点:1. 定时/计数器的工作原理; 2. 定时器方式1、2的编程、应用。 教学难点:1.定时/计数器控制寄存器的设置 2.定时初值的设置."— Presentation transcript:

1 第7章 定时/计数器 教学目的:了解80C51系列单片机内部定时器/计数器的结构与工作原理;能够采用查询方式对定时器/计数器的4种工作模式编程、应用。 教学重点:1. 定时/计数器的工作原理; 2. 定时器方式1、2的编程、应用。 教学难点:1.定时/计数器控制寄存器的设置 2.定时初值的设置

2 7.1 定时/计数器T0、T1概述 7.1.1  定时器/计数器T0、T1的结构 图 C51定时器/计数器T0、T1原理结构框图

3 80C51单片机内部有两个16位的可编程定时/计数器 T0、T1,其组成如图6-1。可编程是指其功能如工作方式、定时时间、量程、启动方式等均可由指令来确定和改变。
有6个8位寄存器用于T0、T1的控制与管理 ,其访问地址依次为8AH~8DH,每个寄存器均可单独访问。 16位的T0、T1寄存器是用于存放定时或计数初值与当前值的,两个特殊功能寄存器 TCON和TMOD 是用于管理与控制定时/计数器 工作的。

4 7.1.2 定时/计数器的原理 16位的定时/计数器实质上是一个加1计数器,其控制电路受软件控制、切换。通过软件可以设置为4种工作方式(详见6.3节),每种方式都可以用作定时或者计数。不同的工作方式,计数器长度分别为:16位、13位和8位。 当选择定时器工作方式时,对片内振荡器的12分频信号计数,实现定时;当选择计数器工作方式时,对引脚Ti端的事件计数。 当计数溢出时, 标志位TFi置位, 并可以请求中断。

5 7.2 定时/计数器的控制方法 7.2.1 定时/计数器寄存器
7.2 定时/计数器的控制方法 定时/计数器寄存器 1.工作方式寄存器 TMOD:设置定时器/计数器的工作方式及控制模式, TMOD在SFR的字节地址为89H。 M1 M0 工作方式 功能描述 方式0 13位计数器 方式1 16位计数器 方式2 自动再装入8位计数器 方式3 定时器0:分成两个8位计数器 定时器1:只能工作在方式0、1、2

6 2. 定时/计数器控制寄存器TCON 控制寄存器TCON:控制定时器的启、停和定时器的溢出标志。 TCON在SFR的字节地址为88H,可位寻址。 TF1 TR1 TF0 TR0 IE1 IT1 IE0 位7 TF1——定时器1溢出标志。 位6 TR1——定时器1运行控制位。 位5 TF0——定时器0溢出标志。 位4 TR0——定时器0运行控制位。 位3 IE1——外部中断1请求标志。 位2 IT1——外部中断1触发方式选择位。 位1 IE0——外部中断0请求标志。 位0 IT0——外部中断0触发方式选择位。

7 7.2.2 定时/计数器的初始化与启动 初始化步骤一般如下: 1. 确定工作方式——对TMOD赋值。 2. 预置定时或计数的初值——可直接将初值写入TH0、TL0或TH1、TL1。 3. 根据需要开放定时/计数器的中断——直接对IE寄存器的定时器中断位赋值 。 在对T0和T1初始化后,即可准备启动定时/计数器工作。

8 7.2.3 定时/计数器初值的确定方法 现假设最大计数值为M,那么各方式下的M值如下: 方式0:M=213=8192
因为定时/计数器是做“加1”计数,并在计满溢出时产生中断,因此初值X可以这样计算: X = M - 计数值 举例说明,如果 80C51时钟频率为6MHz,要求产生1ms的定时。 则…….

9 7.3 定时器T0、T1的工作方式 通过对M1、M0位的设置, T0可选择4种工作方式,T1可选择3种工作方式。本节将介绍这4种工作方式的结构、特点及工作过程。

10 方式0和方式1 :结构和工作原理基本相同,只是方式0 为13位计数器方式,方式1 为16位计数器方式。
图7-2 T0(或T1)方式1结构

11 方式2:计数常数可自动再装入的8位计数器方式。
图7-3 T0(或Tl)方式2结构

12 方式3:T1作波特率发生器,T0可以构成两个独立的计数器。

13 图7-5 T0方式3下的T1结构 (a)T1方式1(或方式0) (b) T1方式2

14 定时器/计数器的复位状态:工作方式0、选择内部启动、计数器停止工作、溢出中断标志清零。
定时器/计数器的初始化:对TMOD赋值确定工作方式 ;预置定时或计数的初值 ;根据需要开放定时器/计数器的中断 ;启动定时/计数器工作。 计数器初值=最大计数值 -要求的计数值 定时时间=(最大计数值 -计数器初值) 机器周期 计数的“飞读”:解决计数器工作过程中,正确读取计数值的问题,避免由于低位计数器的溢出而导致读数的粗大误差。以定时器T0为例: RP: MOV A,TH ;读TH0 MOV R0,TL ;读TL0 CJNE A,TH0,RP ;比较两次读得的TH0, 不等则重读 MOV R1,A RET

15 7.4 定时器T0、T1应用举例 例1、用定时器T1定时,完成日历时钟秒、分、时的定时。设晶振频率为12 MHz。
AT89S51单片机在方式1定时时间的最大值TMAX为: TMAX=M×12/fOSC=65536×12/(12×106Hz)=65536μs=65.536ms 显然不能满足1s的定时时间要求,因此需要设置一个软件计数器,对分、时的计数同样通过软件完成。在此采用片内50H、51H、52H、53H单元分别进行秒、分、时以及24h的计数。 可要求T1定时50ms,此时T1的初始值X为: (M-X)×1×10-6=50×10-3 X=65536-50000=15536=3CB0H

16 汇编语言源程序如下: MOV 50H,#20 ;定时1s循环次数 MOV 51H,#60 ;定时1min循环次数 MOV 52H,#60 ;定时1h循环次数 MOV 53H,#24 ;24h循环次数 MOV TMOD,#10H ;设定时器1为方式1 MOV TH1,#3CH ;赋初值 MOV TL1,#0B0H SETB TR1 ;启动T1 L2: JBC TF1,L1 ;查询计数溢出,当TF1为1,转移到L1,同时将该位清0 SJMP L2

17

18 L1: MOV TH1,#3CH;重赋初值 MOV TL1,#0B0H DJNZ 50H,L2 ;未到1s继续循环 MOV 50H,#20 DJNZ 51H,L ;未到1min继续循环 MOV 51H,#60 DJNZ 52H,L2 ;未到1h继续循环 MOV 52H,#60 DJNZ 53H,L2 ;未到24h继续循环 MOV 53H,#24 SJMP L2 ;反复循环

19 C51语言程序如下: #include <REG51.H> //包含51单片机SFR库 #define Sec_data //定义秒计数上限 #define Min_data //定义分计数上限 #define Hou_data //定义1小时计数上限 #define Day_data //定义1天计数上限 unsigned char Second,Minute,Hour,Day; //定义各变量 void main (void) { TMOD = 0x10; //设定时器1为方式1 TH1 = 0x3c; //赋初值 TL1+ = 0xb0; TR1 = 1; //启动T1 for (Day =0;Day<Day_data;Day++) // 天计数循环

20 for(Hour=0;Hour<Hou_data;Hour++) //时计数循环
{ for(Minute=0;Minute<Min_data;Minute++) //分计数循环 for(Second=0;Second<Sec_data;Second++) // 秒计数循环 while(TF1 ==0); TF1 = 0; // 标志位清零 TH1 =0x3c; //重赋初值 TL1 +=0xb0; }

21 例2、用定时器T0方式2计数,要求每计满100次,将P1.0端取反。。
解:外部计数信号由T0(P3.4)脚引入,每产生1次负跳变计数器加1,由程序查询TF0。方式2具有初值自动重装入功能,初始化后不必再置初值。 初值X=256-100=156D=9CH TH0=TL0=9CH,TMOD=06H 源程序如下: MOVT MOD,#06H;设置T0为方式2计数 MOV TH0,#9CH;赋初值 MOV TL0,#9CH SETB TR0;启动T0 DEL: JBC TF0, REP;查询计数溢出 SJMP DEL REP: CPL P1.0;输出取反

22 #include <REG51.H> //包含51单片机SFR库 sbit Pout=P1^0 ; //定义输出位
void main (void) {   TMOD = 0x06; //设定时器工作方式 TH0 = 0x9c; //赋初值 TL0 = 0x9c; //赋初值 TR0 = 1; //启动T0 while(1) while(TF0 ==0); //等待定时器时间到 TF0 = 0; //标志位清零 Pout = !Pout; //反相输出 }

23 7.5 定时/计数器T2 7.5.1 T2的寄存器 1.T2CON控制寄存器 位7 TF2—— T2的溢出中断标志。
EXF2 RCLK TCLK EXEN2 TR2 C/ T2 CP/RL2 位7 TF2—— T2的溢出中断标志。 位6 EXF2—— T2外部中断标志。 位5 RCLK—— 串行口接收时钟选择标志。 位4 TCLK—— 串行口发送时钟选择标志。 位3 EXEN2—— T2的外部允许控制位。 位2 TR2—— T2的计数控制位。 位1 C/—— 定时器或计数器功能选择位。 位0 CP/—— 捕捉或常数重装方式选择位。

24 2.方式控制寄存器T2MOD 位7~位2 -无作用,可为任意值。 位1 DCEN-T2加1/减1计数允许位。
TF2 EXF2 RCLK TCLK EXEN2 TR2 DCEN T2OE 位7~位2 -无作用,可为任意值。 位1 DCEN-T2加1/减1计数允许位。 位0 T2OE-T2的输出允许位。

25 7.5.2  定时器T2的工作方式 T2共有6种工作方式,除了可以作为一般的定时/计数外,还增加了4种不同的工作方式,分别为:捕捉方式、常数自动重装入方式、波特率发生器方式和时钟输出方式。


Download ppt "第7章 定时/计数器 教学目的:了解80C51系列单片机内部定时器/计数器的结构与工作原理;能够采用查询方式对定时器/计数器的4种工作模式编程、应用。 教学重点:1. 定时/计数器的工作原理; 2. 定时器方式1、2的编程、应用。 教学难点:1.定时/计数器控制寄存器的设置 2.定时初值的设置."

Similar presentations


Ads by Google