




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1
在测控系统中,常常需要有实时时钟和计数器,以实现定时控制以及对外界事件进行计数。传统8051系列单片机有二个16位定时/计数器,它们是定时/计数器0、定时/计数器1,STC89C52单片机在此基础上增加一个16位定时/计数器2,它们简称为:T0、T1和T2。
编辑ppt2本章主要内容:定时器/计数器的组成与功能,工作模式和工作方式,以及与其相关的4个特殊功能寄存器TMOD、TCON、T2CON、T2MOD各位的定义及其编程,最后介绍定时器/计数器的编程及应用实例。6.1STC89C52单片机定时器/计数器的组成6.2定时/计数器0和16.3定时/计数器2编辑ppt3STC89C52定时/计数器由T0、T1、T2和看门狗定时器WDT_CONTR组成,T0由特殊功能寄存器TH0、TL0构成,T1由特殊功能寄存器TH1、TL1构成,T2由特殊功能寄存器TH2、TL2和RXAP2H、RCAP2L构成。6.1STC89C52定时器/计数器的组成编辑ppt46.2定时/计数器0和1STC89C51RC/RD+系列单片机的定时/计数器0和1,与传统8051的定时/计数器完全兼容。当定时器1作波特率发生器时,定时器0可以当两个8位定时器使用。6.2.1定时器/计数器0和1的相关寄存器6.2.2定时/计数器0和1的四种工作方式6.2.3定时/计数器0或1的应用编辑ppt5
STC89C51RC/RD+系列单片机内部设置的两个16位定时器/计数器0和1都具有定时和计数两种工作模式,在特殊功能寄存器TMOD中有一位控制位来选择T0或T1为定时器还是计数器,定时器或计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来源于系统时钟,则为定时方式,此时定时/计数器每12个时钟或每6个时钟得到一个计数脉冲,计数值加1;如果计数脉冲来自单片机外部引脚(T0为P3.4,T1为P3.5),则为计数方式,每来一个计数脉冲加1。编辑ppt6
当定时器/计数器工作在定时模式时,可在烧录用户程序时在STC-ISP编程器中设置如图4-12是系统时钟/12还是系统时钟/6后让T0和T1进行计数。当定时/计数器工作在计数模式时,对外部计数脉冲计数不分频。图4-12计数脉冲倍速设置6编辑ppt7
结论:单片机中的定时器和计数器是一个东西,只不过计数器用来记录外界发生的事情,而定时器则是由单片机提供的一个非常稳定的计数源。编辑ppt8综上所述,我们已知定时器/计数器是一种可编程部件,所以在其开始工作之前,CPU必须将一些命令(控制字)写入定时器/计数器。这个过程称为定时器/计数器的初始化。当CPU用软件给定时器设置了某种工作方式之后,定时器就会按设定的工作方式独立运行,不再占用CPU的操作时间,除非定时器计数溢出,才可能中断CPU当前操作。编辑ppt6.2.1定时器/计数器0和1的相关寄存器STC89C52单片机与定时/计数器0和1的相关寄存器见表6-2所示.表6-2定时器/计数器的0和1相关寄存器编辑ppt10GATEC/TM10MGATEC/T1M0M控制T1控制T089H和T类同01M0M00011011方式方式013位方式116位方式2自动重装方式3适用T001定时器模式计数器模式01与INT无关00与INT有关
1.定时/计数器工作模式寄存器TMOD(89H)M1M0:方式选择位C/T:功能选择位GATE:门控位编辑ppt11GATE=1时,若TR1=1,并且INT1=1,允许T1计数若TR1=0,或INT1=0,都禁止T1计数GATE=0,若TR1=1,允许计数;若TR1=0,禁止计数返回编辑ppt12由于在不同方式下计数器位数不同,因而最大计数值(量程)也不同。方式0:M=213=8192
方式1:M=216=65536方式2:M=28=256
方式3:T0定时器分成两个8位计数器,两个M均256,T1停止计数。返回编辑ppt13TR1(0):运行控制位
2.
定时/计数器控制寄存器TCON(88H)
TF1(0):溢出标志位编辑ppt14
定时器/计数器的初始化初始化的步骤如下:确定工作方式----------对TMOD赋值置定时或计数的初值---------可直接写入TH0(1),TL0(1)根据需要开放定时器/计数器的中断启动定时器/计数器。当实现了启动要求之后,定时器就按规定的工作方式和初值开始计数或定时。编辑ppt15因为定时器/计数器是作“加1”计数,并在计满溢出时产生中断,初值X可以这样计算:
X=M-计数值(计数次数)
例1:在6MHZ主频下,要求产生1ms的定时,计算初值分析:因为定时器每“加1”一次所需的时间为2μs,如果要产生1ms的定时,需加500次,500即为计数值。方式1下工作:初值X=M-计数值=65536-500=FE0CH例2:计100个外部脉冲,产生中断请求,计数初值x x=M-100编辑ppt16若Fosc=12MHz,在P1.0 输出周期为400us方波,定时/计数器工作方式2,问计数初值为多少?初始化程序?
机器周期=12/Fosc=1us,
(256-X)*1us=200usX=56=38HP1.0MOV TMOD,#02HSETB ET0SETB EAMOV TL0,#38HMOV TH0,#38HSETB TR0编辑ppt176.2.2定时/计数器0和1的四种工作方式
由上节可知,通过对TMOD中的M1M0的设置,可以选择四种工作方式。也就是每个定时器可构成4种电路结构模式。在模式0、1和2,T0和T1的工作方式相同,在模式3,两个定时器的方式不同。下面以T1为例,分述各种工作方式的特点和用法。编辑ppt1.方式0 编辑ppt2.方式1编辑ppt3.方式2这种工作方式可省去用户软件中重装常数的程序,并可产生相当精度的定时时间。编辑ppt4.方式3该方式只适用于定时器T0,T0被拆成两个独立的8位计数器TH0和TL0。TH0不能作为外部计数模式编辑ppt22T0工作在方式3下T1的各种工作方式T0工作在方式3时,T1可定为方式0、方式1和方式2,用来作为串行口的波特率发生器,或不需要中断的场合,定时器T1处于方式3时相当于TR1=0,停止计数。T1运行的控制条件只有2个,即C/T和M1,M0.编辑ppt236.2.3定时/计数器0或1的应用定时/计数器的应用编程主要需考虑:根据应用要求,通过程序初始化,正确设置控制字,正确计算计数初值,编写中断服务程序,适时设置控制位等。通常情况下,设置顺序大致如下:工作方式控制字(TMOD、T2CON)的设置;计数初值的计算并装入THx、TLx、RCAP2H、RCAP2L;中断允许位ETx、EA的设置,使主机开放中断;启/停位TRx设置;编辑ppt24
51系列单片机T0或T1是属于加法计数器,因此就不能直接将实际的计数值作为计数初值送入计数寄存器THx,TLx中,而必须将实际计数值以28、213、216为模求补,以其补码作为计数初值设置THx和TLx。设:实际计数值为X,计数器长度为n(n=8、13、16),则应装入计数器THx和TLx的计数初值为2n-X,式中2n为取模值。例如:工作方式0,以213为模,工作方式1,以216为模等,
计数初值:(X)补=2n-X。编辑ppt25
定时模式,是对机器周期计数,而机器周期与选定主频密切相关,因此,需要根据应用系统选定的主频来确定机器周期值,现以主频为6MHz为例,则机器周期为:
注意:对于传统51系列单片机,式(1)中分子取值为12,而对于STC89C52单片机,式(1)中分子取值是根据计数脉冲倍速设置来定(参见教材图4-12),若单片机选12T,则式(1)分子为12,若选6T,则式(1)分子为6。若没有特别提出,书中STC89C52单片机都选12T模式。编辑ppt26
实际定时时间Tc=x•Tp式中Tp为机器周期,Tc为所需定时时间,x为所需计数次数,主频和Tc一般是已知值,在求得Tp后就可求得所需计数值x,再求x的补码,即求得定时的计数初值。(x)补=2n-x例如:设定时时间为2ms,机器周期Tp为2μs,可求得定时计数次数为:
设选用工作方式1,n=16,则应设置的定时计数初值为:(x)补=2n-x=216-x=65536-1000=64536=FC18H,则将其分解成两个8位十六进制数,低8位18H装入TLx,高8位FCH装入THx中。工作方式0、1、2的最大计数次数分别为8192、65536和256。对外部事件计数模式,只需根据实际计数次数求补后变换成两个16进制码即可。编辑ppt276.2.3定时/计数器0或1的应用1.方式0、1的应用【例6.1】设STC89C52单片机系统时钟频率fCLK为6MHZ,要在P1.0引脚上输出1个周期为2毫秒、占空比为50%的方波信号.P1.01ms1msT=2ms
图6-7P1.0引脚输出波形编辑ppt解:(1)计算初值:单片机工作在12T模式1机器周期=2μs=2×10-6s,T0工作方式0定时1ms计数次数为:选择工作方式0,n=13,定时计数初值:(x)补=213-
500=7692=1E0CHX=1111000001100B则TH0=F0H,TL0=0CH编辑ppt29(2)初始化程序:工作方式控制字(TMOD、T2CON)的设置;TMOD=00H,定时方式0计数初值的计算并装入THx、TLx、RCAP2H、RCAP2L;TH0=F0H,TL0=0CH中断允许位ETx、EA的设置,使主机开放中断;ET0=1,EA=1,启/停位TRx设置;TR0=1编辑ppt30方法一、中断方式:
ORG0000HLJMPMAINORG000BHLJMPT0PORG0100HMAIN: MOVSP,#60H ;设置堆栈指针MOVTMOD,#00H ;T0为定时、方式0、门控GATE0=0MOVTL0,#0CH ;装载计数初值MOVTH0,#0F0HSETBTR0 ;启动定时器0计数SETBET0 ;允许定时器0中断SETBEA ;允许CPU中断HERE:AJMPHERE ;踏步等待编辑ppt31/***********中断服务子程序*************/T0P:MOVTL0,#0CH ;重装载计数初值MOVTH0,#0FEHCPLP1.0 ;P1.0输出求反RETIENDKeiluVision4编辑ppt32方法二:软件查询 解:(1)计算初值: 机器周期=2μs=2×10-6s,T0工作方式1 计数初值: (x)补=65036=FEOCH 则TH0=0FEH,TL0=0CH
编辑ppt33
ORG 0000HSTART:
MOV SP,#60H ;设置堆栈区
MOV TMOD,#01H;T0定时方式1门控GATE0=0
SETB TR0 ;启动定时器0计数L1: MOV TH0,#0FEH ;装载计数初值
MOV TL0,#0CH LOOP1:
JNB TF0,LOOP1;判计数溢出?没有,踏步等待
CLR TF0 ;溢出,清溢出标志位
CPL P1.0 ;P1.0输出求反
SJMP L1
END编辑ppt34中断方式、C51编程
#include<reg52.h>sbitP10=P1^0;voidmain(){ SP=0X60; /*设置堆栈指针*/ TMOD=0x1; /*定时器0:定时、工作方式1、门控GATE0=0*/ TL0=0x0c; /*装载计数初值*/ TH0=0xfe; TR0=1; /*启动定时器0计数*/ ET0=1; /*允许定时器0中断*/ EA=1; /*允许CPU中断*/ while(1){; }}编辑ppt35
void
timer0int(void)
interrupt
1{
TL0=0x0c; /*重装载计数初值*/TH0=0xfe;P10=!P10; /*P1.0输出求反*/}编辑ppt36【例6.2】设STC89C52单片机系统时钟频率fCLK为6MHZ,请编出利用定时/计数器T0在P1.1引脚上产生周期为2秒,占空比为50%的方波信号的程序1.主程序任务:(1)设定T0工作方式1,单片机工作在12T模式,则机器周期为2μs,最大定时=216х2μs=131.072ms<1s(2)定时常数的设定:TC=216-(100ms/2μs)=15536=3CB0H每隔100ms中断一次,中断10次为1s即:TH0应装3CH,TL0应装B0H。编辑ppt37(3)中断管理:允许T0中断,开放总中断即:IE应装10000010B。(4)启动定时器T0:SETB TR0(5)设置软件计数器初值:(如使用R7)即R7应装0AH(6)动态停机:SJMP
$编辑ppt382.中断服务程序任务: (1)恢复T0常数; (2)软件计数器减1; (3)判断软件计数器是否为0。为0时,改变P1.1状态,并恢复软件计数器初值;不为0时中断返回。编辑ppt39 ;主程序:
ORG
0000H
AJMP
MAIN
ORG
000BH
AJMP
TOINT
ORG
0030HMAIN: MOV
SP,#60H
MOV
TMOD,#01H程序总清单:编辑ppt40MOV TH0,#3CHMOV TL0,#0B0HMOVIE,#82HSETB TR0MOVR7,#0AHHERE:SJMP HERE编辑ppt41;中断服务子程序TOINT: MOV TL0,#0B0H MOV TH0,#3CH DJNZ R7,NEXT CPL P1.1 MOV R7,#0AHNEXT: RETIENDKeiluVision4编辑ppt42
C程序清单:文件名:6-2.C#include<reg52.h>#defineucharunsignedcharucharCOUNT=0;sbitP11=P1^1;voidmain(){ SP=0x60; /*设置堆栈指针*/ TMOD=0x1;/*设置T0为定时,工作方式1,GATE0=0*/ TL0=0xb0;/*装载定时计数初值=100ms*/ TH0=0x3c; IE=0x82; /*定时计数溢出中断允许,CPU中断允许*/ TR0=1; /*启动定时器0计数*/ COUNT=0xa; /*软件计数初值=10*/ while(1){ /*踏步等待中断*/ }}编辑ppt43voidtimer0int(void)interrupt1{/*定时器0中断函数*/ TL0=0x0b;TH0=0x3c;/*重新装载定时计数初值*/switch(COUNT){ /*判断定时1S吗?*/ case0:{P11=!P11;COUNT=0xa;break;}/*1S定时到,P1.1输出求反*/ default:{COUNT=COUNT-1;break;}/*没到1S,软件计数值减1*/}}编辑ppt44方式2的应用【例6-3】将T0(P3.4)引脚上发生负跳变信号作为P1.0引脚产生方波的启动信号。要求P1.0脚上输出周期为1ms的方波,如图6-5所示(系统时钟6MHz)。图6-5负跳变触发输出一个周期为1ms的方波编辑ppt45T0方式2计数,计数初值:TH0=0FFH,TL0=0FFHT1方式2定时,定时初值:
编辑ppt46 方法一:(中断方式) ORG
0000H LJMP MAIN ;跳向主程序MAIN ORG
000BH ;T0的中断入口 LJMP T0XINT
;T0中断服务程序 ORG 001BH ;T1的中断入口 LJMP T1TIME ;T1中断服务程序编辑ppt47
ORG0030H ;主程序入口MAIN:MOVSP,#60H ;设堆栈区
MOVTMOD,#26H ;T0方式2计数,T1方式2定时
MOVTL0,#0FFH ;T0置初值,计1个脉冲
MOVTH0,#0FFH
SETBET0 ;允许T0中断编辑ppt48
MOVTL1,#06H ;T1置初值MOVTH1,#06H SETBET1 ;允许T1产生定时中断SETBEA ;总中断允许SETBTR0 ;启动T0计数
HERE: AJMPHERE编辑ppt49
/**********T0中断服务子程序***********/T0XINT: CLR TR0;停止T0计数 SETB TR1;启动T1定时 RETI/**********T1中断服务子程序***********/T1TIME: CPL P1.0 ;P1.0取反 RETI ENDKeiluVision4编辑ppt50 方法二:(C程序清单)#include<reg52.h>sbitP10=P1^0;voidmain(){SP=0X60; /*设堆栈指针*/TMOD=0x26;/*T0方式2计数,T1方式2定时*/ TL0=0xff;/*T0设置计数初值,计1个脉冲*/ TH0=0xff; 编辑ppt51
TL1=0x06; /*T1设置定时初值*/ TH1=0x06; ET0=1; /*允许T0中断*/ ET1=1; /*允许T1中断*/ EA=1; /*允许总中断*/ TR0=1; /*启动T0计数*/ while(1){ /*踏步等待中断*/ }}编辑ppt52/******计数器0中断服务子程序******/voidtimer0xint(void)interrupt1{ TR0=0; /*禁止计数器0计数*/TR1=1; /*启动定时器1*/}/******定时器1中断服务子程序******/voidtimer1Tint(void)interrupt3{ P10=!P10; /*P1.0输出求反*/}编辑ppt53【例6.4】假设某STC89C52应用系统的2个外部中断源已被占用,设置定时器T1工作在方式0,作波特率发生器用.现要求增加1个外部中断源,并控制P1.0引脚输出1个频率5KHz(周期为200us)的方波.fosc=12MHZ.T0(P3.4)100μsTH0为方式3定时TL0为方式3计数(做外部中断源)100μsP1.0方式3的应用例题6-4图定时器P1.0输出的方波信号编辑ppt54T0工作方式3:初值计算:TL0计一个脉冲TL0=0FFHTH0定时100μs,定时初值:TH0=9CH ORG 0000H LJMP MAIN ORG 000BH;TL0中断入口地址LJMP TL0INT;跳向TL0中断服务子程序,ORG 001BH;TH0占用T1的中断资源 LJMPTH0INT;跳向TH0中断服务子程序编辑ppt55
ORG0100H
;主程序入口MAIN: MOV TMOD,#07H
;T0方式3,T1方式0定时
MOV TL0,#0FFH
;设置TL0计数初值
MOV TH0,#9CH
;设置TH0定时初值
SETB TR0
;启动T0计数
MOV IE,#8AH
;设置各中断允许,CPU允许HERE:AJMPHERE
;循环等待编辑ppt56TL0INT:
MOVTL0,#0FFH ;重装TL0计数初值
SETBTR1
;启动TH0定时
RETITH0INT:
MOVTH0,#9CH ;重装TH0定时初值
CPL P1.0 ;P1.0输出求反
RETI
ENDKeiluVision4编辑ppt57查询方式#include<reg52.h>sbitP10=P1^0;voidtimer1int(void);voidmain(){ TMOD=0x07; TL0=0xff; TH0=0xa2; TR0=1; P10=1; while(1){ if(TF0){TL0=0xff;TR1=1;TF0=0;} if(TF1){timer1int();TF1=0;} }}voidtimer1int(){ TH0=0xa2;/*重装初值影响精度,修正值为A2H*/P10=!P10;}KeiluVision4编辑ppt58门控位GATE的应用【例6.5】门控GATE1使定时/计数器T1启动计数受控。当GATE1为1,TR1为1时,只有引脚输入高电平,T1才被允许计数,故可测引脚P3.3上正脉冲宽度(机器周期数)。解:门控为1,定时器启动计数受外部输入电平的影响,可测外部输入脉冲宽度。被测脉冲输入P3.3(
),T1为定时方式。编辑ppt59GATE=1,若TR1=1,INT1=1,计数开始GATE=1,若TR1=0或INT1=0,计数停止TR1=1返回图6-6编辑ppt60设计思路:1.建立被测脉冲:设置定时/计数器0定时、工作方式2,门控GATE0=0,定时溢出使P3.0引脚求反,从而输出周期为1ms方波作为被测脉冲,P3.0输出信号连接到P3.3引脚,编辑ppt612.测量方法:采用查询方式来测量P3.3引脚输入正脉冲宽度,设置定时/计数器1为定时工作方式1,GATE1=1,则利用(P3.3)引脚和TR1信号控制定时器1计数(启、停),当GATE1=1时,=1且TR1=1,启动定时器1计数,若=0,或者TR1=0,禁止定时器计数,如图6-6所示。将计数器的TH1计数值送P2口,TL1计数值送P1口显示。编辑ppt623.计数初值的计算:计算定时器0工作方式2时,T0计数初值为:定时/计数器1设置为定时工作方式1,计片内脉冲,从0开始计数,初值为0000H,即TH1=00H,TL1=00H。编辑ppt63方法一、查询方式的汇编程序
ORG 0000HRESET:
AJMPMAIN
;复位入口转主程序
ORG 000BH
CPL P3.0 RETI
ORG 0030H
;主程序入口MAIN:
MOV SP,#60H
MOV TMOD,#92H
;T0方式2定时, ;T1为方式1定时,门控为1
MOV TL1,#00H
MOV TH1,#00H
MOV TL0,#06H
MOV TH0,#06H
SETB TR0
SETB ET0
SETB EA
编辑ppt64LOOP0: JB P3.3,LOOP0 ;等待为低电平
SETB TR1 ;如为低电平,设置TR1=1LOOP1: JNB P3.3,LOOP1 ;等待升高电平LOOP2: JB P3.3,LOOP2 ;=1,启动T1计数,
CLR TR1 ;=0,停止T1计数
CLR TR0
MOV P2,TH1 ;T1计数值送显示器
MOV P1,TL1 AJMP LOOP0 ENDKeiluVision4编辑ppt65执行以上程序,使引脚上出现的正脉冲宽度以机器周期数的形式显示在数码管上值:TH0=00H,TL0=FBH,则脉冲宽度TW=FBH×2μs=502μs,理论值为500μs。编辑ppt66
中断方式从图6-6中知,外部中断1引脚P3.3第一次下降沿信号,产生第一次中断触发,在中断服务程序中设置TR1=1,由于此时不能启动定时器1工作,当脉冲信号出现P3.3上升沿时,自动启动定时器1计数,而当脉冲信号出现P3.3第2次下降沿,即降为0,自动停止定时器1计数,则在中断服务程序中使TR1=0,从启动T1计数到停止T1计数所记录的计数值乘以机器周期值就是正脉冲的宽度。编辑ppt67方法二:中断方式ORG 0000HRESET: AJMPMAIN;复位入口地址,转主程序 ORG 000BH AJMP T0TIME ORG 0013H AJMP INT1INT ORG0030H ;主程序入口地址MAIN: MOV SP,#60H ;设置堆栈指针
编辑ppt68
MOV
TMOD,#92H;T1为方式1定时,GATE1=1,T0方式2定时
MOV
TL1,#00H
;设置T1定时初值
MOV TH1,#00H MOV TL0,#06H ;设置T0定时初值 MOV TH0,#06H SETB TR0 ;启动T0计数 SETB ET0 ;允许T0中断 SETB IT1 ;设置外部中断1下降沿触发中断 SETB EX1 ;允许外部中断1的中断请求 SETB EA ;允许CPU总中断 CLR 00H;设置中断标志,该位为0,中断一次,为1中断2次LOOP0: MOV P2,TH1 ;T1计数值送显示器 MOV P1,TL1 AJMP LOOP0编辑ppt69T0TIME: CPLP3.0 ;P3.0输出求反 RETIINT1INT: JB00H,INT12;第2次中断?是,转INT12 SETB TR1 ;第1次,启动定时器1计数 SETB 00H ;建立中断标志 RETIINT12: CLR TR1 ;第2次中断,禁止定时器计数 RETI END编辑ppt70方法三:C51程序#include<reg52.h>sbitP30=P3^0;sbitflag=PSW^5;voidmain(){ SP=0X60; TMOD=0x92; TL0=0x06; TH0=0x06; TL1=0x0; TH1=0x0;编辑ppt71
TR0=1; IT1=1; IE=0x86; flag=0; while(1){ P2=TH1; P1=TL1; }}编辑ppt72voidtimer0int(void)interrupt1{ P30=!P30;}voidint1int(void)interrupt2{ if(flag==0){TR1=1;flag=1;}elseTR1=0;}KeiluVision4编辑ppt73执行以上程序,使引脚上出现的正脉冲宽度以机器周期数的形式显示在数码管上值:TH0=00H,TL0=F9H,则脉冲宽度为:TW=F9H×2μs=249×2μs=498μs,理论值为500μs。编辑ppt746.3定时/计数器2定时/计数器2是一个16加法(或减法)计数器,通过设置特殊功能寄存器T2CON中的位可将其设置为定时器或计数器,设置特殊功能寄存器T2MOD中的DCEN位可将其作为加法(向上)计数器或减法(向下)计数器。6.3.1与定时器/计数器2相关的寄存器6.3.2定时/计数器2的三种工作方式6.3.3定时/计数器2应用编辑ppt756.3.1与定时器/计数器2相关的寄存器与T2相关的寄存器见表6-5所示,T2控制寄存器T2CON与模式寄存器T2MOD相应位配置来确定T2用于定时还是计数模式、T2的工作方式,T2的启停和中断触发方式,TL2和TH2用于装载T2的计数值,RCAP2L和RCAP2H用于装载捕获值或重新装载值。编辑ppt76表6-5与定时/计数器2相关的寄存器返回编辑ppt771、T2MOD寄存器是定时器/计数器2的模式寄存器,字节地址为C9H,不可位寻址。特殊功能寄存器T2MOD的格式如表6-6所示。D7D6D5D4D3D2D1D0T2MOD—————
—
T2OEDCEN
表6-6特殊寄存器T2MOD格式T2OE:定时/计数器2时钟输出使能位,当T2OE=1的时候,允许时钟输出到P1.0。DCEN:定时/计数器2的向下计数使能位。DCEN=1时,定时/计数器2向下计数,否则向上计数。返回返回97编辑ppt78
2、T2CON寄存器是T2控制寄存器,用于设置T2工作模式:定时或计数,T2的三种工作方式:捕获、重新装载、波特率发生器,字节地址为C8H,可位寻址。特殊功能寄存器T2CON的格式如表6-7所示。表6-7特殊寄存器T2CON格式D7D6D5D4D3D2D1D0T2CONTF2EXF2RCLKTCLKEXEN2TR2
位地址CFHCEHCDHCCHCBHCAHC9HC8H编辑ppt79(1):T2的捕获/重装载标志,只能通过软件的置位或清除。=1且EXEN2=1时,T2EX引脚(P1.1)负跳变产生捕获=0且EXEN2=0时,定时器2溢出或T2EX引脚(P1.1)负跳变都可使定时器2自动重装载,若RCLK=1或TCLK=1时,控制位不起作用的,定时器被强制为溢出时自动重装载模式。(2):定时/计数器2的模式选择位,只能通过软件的置位或清除;=0,定时/计数器2为内部定时模式;=1:定时/计数器2为外部计数模式,下降沿触发。编辑ppt80(3)TR2:定时/计数器2的启动控制标志;TR2=1:启动T2计数;TR2=0:停止T2计数。(4)EXEN2:T2的外部使能标志,用来选择定时/计数器工作方式,只能通过软件的置位或清除;EXEN2=0:禁止外部时钟触发T2,T2EX引脚(P1.1)负跳变对T2不起作用。EXEN2=1且T2未用作串行口波特率发生器时,允许外部时钟触发T2,即T2EX(P1.1)引脚负跳变产生捕获或重装,并置位EXF2,申请中断。编辑ppt81(5)TCLK:串行口发送时钟标志,只能通过软件的置位或清除。TCLK=1,将T2溢出脉冲作为串行口模式1或模式3的发送时钟,TCLK=0,将T1溢出脉冲作为串行口模式1或模式3的发送时钟。(6)RCLK:串行口接收时钟标志,只能通过软件的置位或清除;RCLK=1,将T2溢出脉冲作为串行口模式1或模式3的接收时钟,RCLK=0,将T1溢出脉冲作为串行口模式1或模式3的接收时钟编辑ppt82(7)EXF2:T2的捕获或重装的标志,必须用软件清0。当EXEN2=1且T2EX引脚(P1.1)负跳变产生T2的捕获或重装时,EXF2置位。当T2中断允许时,EXF2=1将使CPU进入中断服务子程序,即EXF2只能当T2EX引脚(P1.1)负跳变且EXEN2=1时才能触发中断,使EXF2=1。在递增或递减计数器模式(DCEN=1)中,EXF2不会引起中断。(8)TF2:T2溢出标志位,T2溢出时置位,并申请中断,只能用软件清除。但T2作为波特率发生器使用的时候(即RCLK=1或TCLK=1),T2溢出时不对TF2置位。编辑ppt836.3.2定时/计数器2的三种工作方式T2和T0或T1有所区别,T2工作方式由特殊功能寄存器T2CON来设定如表6-8所示,T2的三种工作方式是:自动重装初值的16位定时/计数器、捕获事件和波特率发生器。编辑ppt84T2的3种工作方式设定见表6-8所示RCLK+TCLK
TR2工作方式00116位自动重装01116位捕获1X1波特率发生器XX0关闭表6-8定时/计数器2的三种工作方式编辑ppt85
1.自动重装方式:当定时器2工作于自动重装载方式时,可通过C/T2#配置为定时器或计数器,并且可编程控制向上或向下计数,计数方向通过特殊功能寄存器T2MOD(见表6-6)的DCEN位来选择的,DCEN置为“0”,定时器2默认为向上计数,当DCEN置位“1”时,则定时器2通过T2EX引脚来确定向上计数还是向下计数(见图6-8)。编辑ppt86(1)当DCEN=0时见图6-7所示,定时器2自动设置为向上计数,在这种方式下,T2CON中的EXEN2控制位有两种选择,若EXEN2=0,定时器2为向上计数至0FFFFH溢出,置位TF2激活中断,同时把16位计数寄存器RCAP2H和RCAP2L重装载,RCAP2H和RCAP2L的值可由软件预置。若EXEN2=1,定时器2的16位重装载由溢出或外部输入端T2EX从1至0的负跳变触发。这个脉冲使EXF2置位,如果中断允许,同样产生中断。编辑ppt87(2)当DCEN=1时,如图6-8所示,定时器T2向上或向下计数。在这种模式下,T2EX引脚控制着计数的方向。T2EX上的一个逻辑1使得T2递增计数,计到0FFFFH溢出,并置位TF2,若中断允许,还将产生中断。定时器的溢出也使得RCAP2H和RCAP2L中的16位值重新加载到TH2和TL2中。T2EX上的一个逻辑0使得T2递减计数。当TH2和TL2计数到等于RCAP2H和RCAP2L中的值的时候,计数器下溢,置位TF2,并将0FFFFH值加载到TH2和TL2中。T2上溢或下溢,外部中断标志位EXF2被锁死。在这种工作模式下,EXF2不能触发中断。编辑ppt882.捕获方式:在捕获方式下,通过T2CON控制位EXEN2来选择两种选项。(1)当EXEN2=0,此时,T2是一个16位定时器还是计数器由T2CON中来选择,溢出时置位TF2标志,若T2中断允许(ET2=1)将会引起中断,如图6-9所示。编辑ppt89(2)当EXEN2=1,T2仍是一个16位定时器或计数器,但增加一个功能:外部输入T2EX引脚(P1.1)1至0的负跳变将使得TH2和TL2中的值分别捕捉到RCAP2H和RCAP2L中。T2EX的跳变会引起T2CON中的EXF2置位。捕捉模式如图6-9所示。在该方式中,TH2和TL2无重新装载值,当T2EX引脚产生捕获事件时,计数器仍以T2引脚(P1.0)脉冲或振荡频率1/12(或1/6)计数。注意:EXF2像TF2一样会引起中断(EXF2中断向量与定时器2溢出中断地址相同002BH,在T2中断服务程序中可以通过查询TF2和EXF2来确定引起中断的事件)。编辑ppt903.波特率发生器通过设置T2CON(见表6-7)中的TCLK或RCLK可选择T1或T2作为串行口波特率发生器。当TCLK=0时,定时器T1作为串行口发送波特率发生器;当TCLK=1时,定时器T2作为串行口发送波特率发生器;RCLK对串行口接收波特率有同样作用,通过对TCLK、RCLK的设置,串行口能够得到不同来源的发送和接收的波特率。波特率一个通过定时器T1产生,另一个通过定时器T2产生。编辑ppt91
如图6-10所示为T2工作于波特率发生器模式逻辑结构图,该工作模式与自动重装模式相似,当T2溢出时,波特率发生器模式使得T2的寄存器用RCAP2H和RCAP2L中的16位数值重新装载,寄存器RCAP2H和RCAP2L值由软件预置.编辑ppt92(1)T2配置为计数方式时,外部时钟信号由T2引脚引入,当工作于方式1或方式3时,波特率由下面公式确定:方式1和方式3的波特率=定时器T2溢出率/16(2)T2可配置为定时方式,在多数应用情况下,一般配置成定时模式(=0)。T2作为波特率发生器与作为定时器操作有所不同,作为定时器时,它会在每个机器周期递增(1/6或1/12晶振频率);然而,T2作为波特率发生器,它的波特率计算公式如下:式中,n=16(6时钟模式)或n=32(12时钟模式),(RCAP2H,RCAP2L)是RCAP2H和RCAP2L寄存器内容,为16位无符号整数。编辑ppt93T2作为波特率发生器如图6-10所示,只有在T2CON中RCLK=1或TCLK=1时,波特率工作方式才有效。在波特率发生器工作方式中,TH2的溢出并不置位TF2,也不产生中断。即使T2作为串行口波特率发生器,也不要禁止T2中断。如果EXEN2(T2外部使能标志)被置位,T2EX引脚上1到0的负跳变,则会置位EXF2(T2外部中断标志位),但不会使(RCAP2H,RCAP2L)重装载到(TH2,TL2)中.
注意:当T2作为波特率发生器,T2EX可以作为一个附加的外部中断源使用。编辑ppt94
4.可编程时钟输出STC89C51RC/RD+系列单片机,可设定T2通过P1.0引脚输出时钟,P1.0引脚除作为通用I/O外,还有两个功能可供选用:用于T2的外部计数输入T2时钟信号输出(占空比为50%)如图6-11为时钟信号输出和外部事件计数方式的示意图。当工作频率为16MHz时,时钟输出频率范围为61Hz到4MHz。编辑ppt95当设置T2为时钟发生器时,即(T2CON.1)为0,T2OE(T2MOD.1)为1,必须由TR2(T2CON.2)启动或停止定时器。
时钟输出频率取决于晶振频率和定时器2捕捉寄存器(RCAP2H,RCAP2L)的重新装载值,如公式所示:
其中,n=2(6时钟/机器周期),n=4(12时钟/机器周期)编辑ppt96
6.3.3定时/计数器2应用
自动重装方式【例6-6】设STC89C52单片机系统时钟频率fCLK为12MHZ,使用定时/计数器T2工作方式于自动重装方式,请编写程序使得在P1.6引脚上输出周期为2毫秒占空比为50%的方波信号。
知识点:与定时/计数器2相关的特殊功能寄存器T2MOD、T2CON、IE、IP、IPH各位物理意义,定时/计数器T2入口地址,定时/计数器T2工作方式确定。编辑ppt97设计步骤:(1)求定时初值N:设置定时/计数器T2为16位自动重装载方式,工作模式为定时,我们选择向上计数,即DCEN=0,取EXEN2=0,定时器T2为向上计数至0FFFFH溢出,置位TF2激活中断,TF2需软件清零。(x)补=216-1ms/1μs=65536-1000=64536=FC18H(2)确定特殊功能寄存器T2CON、T2MOD、IE、IP、IPH值T2CON=04H(自动重装载=0、定时=0,启动T2工作TR2=1),T2MOD=00H(向上计数DCEN=0,T2时钟输出不使能,即T2OE=0)IE=A0H(允许T2中断请求,即ET2=1,总中断允许,即EA=1)IP=20H(设置PT2=1,其它位为0)IPH=20H(设置PT2H=1,其余位为0),即PT2HPT2=11,设置定时/计数器2中断优先级为第4级。编辑ppt98(3)确定定时/计数器2中断服务子程序入口地址为002BH.(4)编写主程序和中断服务子程序2.程序清单(1)汇编语言程序清单T2CONEQU0C8H ;定义T2CON寄存器字节地址为C8HT2MODEQU0C9H ;定义T2MOD寄存器地址为C9HTF2EQUT2CON.7 ;定义定时/计数器2计数溢出标志位ET2EQUIE.5 ;定义定时/计数器2中断允许标志位RCAP2LEQU0CAH ;定义RCAP2L寄存器字节地址为CAHRCAP2HEQU0CBH;定义RCAP2H寄存器字节地址为CBHTL2EQU0CCH ;定义TL2寄存器字节地址为CCHTH2EQU0CDH ;定义TH2寄存器字节地址为CDHIPHEQU0B7H ;定义IPH寄存器字节地址为B7H编辑ppt99ORG 0000H AJMP MAIN ORG 002BH ;定时/计数器2中断入口地址 LJMP PT2INT ORG 0100HMAIN: MOV SP,#60H ;设置堆栈区 MOV T2MOD,#00H;置T2向上计数且时钟输出不使能 MOV T2CON,#04H;置T2自动重装载定时且启动T2 MOV TH2,#0FCH ;装载定时器2的定时初值 MOV TL2,#18H编辑ppt100 MOV RCAP2L,#18H ; MOV RCAP2H,#0FCH MOV IE,#0A0H ;允许T2中断,EA允许 MOV IP,#20H ;置T2为第4级中断优先级 MOV IPH,#20H SETB P1.6 ;预置P1.6=1HERE:SJMP HERE;踏步等待中断编辑ppt101PT2INT: CLR TF2 ;清计数溢出标志 CPL P1.6 ;P1.6输出求反 RETI ENDKeiluVision4编辑ppt102(2)C语言程序清单#include<REG52.H>sbit P16=P1^6; /*定义位变量P16*/sfr T2MOD=0xC9; /*定义特殊功能寄存器T2MOD*/Sfr IPH=0xB7; /*定义特殊功能寄存器IPH*/voidmain(){ /*主函数*/ SP=0X60; /*设置堆栈指针*/ T2MOD=0x00; /*设置定时器2向上计数且时钟输出不使能*/ T2CON=0x04;/*设置定时器2自动重装载、定时且启动T2计数 TL2=0x18;TH2=0xfc; /*装载定时器2的定时初值*/ RCAP2H=0xfc;RCAP2L=0x18;/*装载定时器2的定时初值*/
编辑ppt103 IE=0xa0; /*允许T2中断请求,总中断允许*/ IP=0x20;IPH=0x20;/*设置T2为第4级中断优先级*/ while(1){ /*踏步等待中断*/ }}voidtimer1int(void)interrupt5{ TF2=0; /*清定时溢出标志*/ P16=!P16; /*P1.6输出求反*/}编辑ppt104捕获方式【例6-7】设STC89C52单片机系统时钟频率为12MHZ,T2工作方式为捕获方式,将捕获的计数值低8位送P3口,高8位送P2口,我们用频率仪和示波器观察P1.1引脚捕获脉冲频率值和波形。电路仿真图如例题6-7图所示。编辑ppt105设计步骤:据题意知T2工作方式为捕获方式,T2CON中EXEN2选择两种选项,此处选择EXEN2=1,即外部捕获,选定时模式选择向上计数,即DCEN=0捕获脉冲:是利用T0定时工作方式1,使P1.5输出周期为2ms的方波,该方波接入到P1.1引脚作为捕获脉冲。(1)求定时初值N:为了捕获P1.1引脚脉冲频率值,利用P1.1引脚负跳变触发定时器T2外部中断,第一次中断时,启动定时器T2开始计数,此时定时器T2的最初计数值为0,即TH2=00H,TL2=00H,而此时捕获值RCAP2L=00H,RCAP2H=00H;到第二次中断时,禁止定时器T2计数,此时捕获寄存器内容就是记录机器周期个数,可求出输出脉冲频率值。T0选择定时工作方式1,输出周期为2ms方波,则定时器0的初值:.即TH0=0FCH,TL0=18H。编辑ppt106T2采用外部捕获,则T2CON=09H,T2选择的是向上计数,则T2MOD=00H允许T2中断请求,允许总中断,则IE=A0H;T0工作方式1、定时、门控GATE0=0则TMOD=01H。
例题6-7软件由四部分组成:主程序、显示子程序、定时器0中断服务子程序和定时器2中断服务子程序。编辑ppt1073.程序清单(1)汇编语言T2CON EQU0C8HT2MOD EQU0C9HCP EQUT2CON.0TR2 EQUT2CON.2EXEN2 EQUT2CON.3EXF2 EQUT2CON.6TF2 EQUT2CON.7ET2 EQUIE.5RCAP2L EQU0CAHRCAP2H EQU0CBHTL2 EQU0CCHTH2 EQU0CDHIPH EQU0B7H编辑ppt108 ORG 0000H AJMP MAIN ORG 000BH LJMP PT0INT ORG 002BH LJMP PT2INT ORG 0100HMAIN: MOV SP,#60H MOV TMOD,#01H ;T0定时,工作方式1 MOV TH0,#0FCH ;T0定时初值 MOV T
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网上如何签租赁合同协议
- 项目工程补充协议书模板
- 给工地提供劳务合同范本
- 电梯文明施工责任协议书
- 网店代运营协议合同范本
- 矿山金属冶炼转让协议书
- 球鞋合同解约协议书范本
- 法律合同保密协议书范本
- 自愿提前解除合同协议书
- 环保低压泵租赁合同范本
- 战术搜索教学课件
- 公园水面安全管理办法
- 2025年福建厦门港务控股集团有限公司招聘考试笔试试题(含答案)
- 2025年长三角湖州产业招聘笔试备考题库(带答案详解)
- 2025包头辅警考试真题
- 2025至2030中国高端英语培训行业市场发展分析及发展趋势与投资机会报告
- 地质灾害治理工程施工安全管理制度
- 2025年茶艺师职业技能鉴定考试试卷(含答案)
- 中央党校师资管理制度
- 人教版(2024)七年级下册英语期末模拟测试卷(含答案)
- 公司电子发票管理制度
评论
0/150
提交评论