STCC单片机定时计数器.pptx
《STCC单片机定时计数器.pptx》由会员分享,可在线阅读,更多相关《STCC单片机定时计数器.pptx(121页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 本章主要内容:定时器/计数器的组成与功能,工作模式和工作方式,以及与其相关的4个特殊功能寄存器TMOD、TCON、T2CON、T2MOD各位的定义及其编程,最后介绍定时器/计数器的编程及应用实例。6.1 STC89C52单片机定时器/计数器的组成6.2 定时/计数器0和16.3 定时/计数器2第1页/共121页2 STC89C52定时/计数器由T0、T1、T2和看门狗定时器WDT_CONTR组成,T0由特殊功能寄存器TH0、TL0构成,T1由特殊功能寄存器TH1、TL1构成,T2由特殊功能寄存器TH2、TL2和RXAP2H、RCAP2L构成。6.1 STC89C52 定时器/计数器的组成第
2、2页/共121页36.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的应用第3页/共121页4 STC89C51RC/RD+系列单片机内部设置的两个16位定时器/计数器0和1都具有定时和计数两种工作模式,在特殊功能寄存器TMOD中有一位控制位 来选择T0或T1为定时器还是计数器,定时器或计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。
3、只是计数脉冲来源不同:如果计数脉冲来源于系统时钟,则为定时方式,此时定时/计数器每12个时钟或每6个时钟得到一个计数脉冲,计数值加1;如果计数脉冲来自单片机外部引脚(T0为,T1为P3.5),则为计数方式,每来一个计数脉冲加1。第4页/共121页5当定时器/计数器工作在定时模式时,可在烧录用户程序时在STC-ISP编程器中设置如图4-12是系统时钟/12还是系统时钟/6后让T0和T1进行计数。当定时/计数器工作在计数模式时,对外部计数脉冲计数不分频。图4-12 计数脉冲倍速设置 5第5页/共121页6 结论:单片机中的定时器和计数器是一个东西,只不过计数器用来记录外界发生的事情,而定时器则是由
4、单片机提供的一个非常稳定的计数源。第6页/共121页7 综上所述,我们已知定时器/计数器是一种可编程部件,所以在其开始工作之前,CPU必须将一些命令(控制字)写入定时器/计数器。这个过程称为定时器/计数器的初始化。当CPU用软件给定时器设置了某种工作方式之后,定时器就会按设定的工作方式独立运行,不再占用CPU的操作时间,除非定时器计数溢出,才可能中断CPU当前操作。第7页/共121页6.2.1 定时器/计数器0和1的相关寄存器STC89C52单片机与定时/计数器0和1的相关寄存器见表6-2所示.表6-2 定时器/计数器的0和1相关寄存器第8页/共121页9GATEC/T M10MGATE C/
5、T1M0M控 制 T 1控 制 T 089H和T 类同01M0M00011011方 式方式0 13位方式1 16位方式2 自动重装方式3 适用T001定时器模式计数器模式01与INT 无关00与INT 有关 1.定时/计数器工作模式寄存器TMOD(89H)M1M0:方式选择位C/T :功能选择位GATE:门控位第9页/共121页10GATE=1时,若TR1=1,并且 INT1=1,允许T1计数 若TR1=0,或INT1=0,都禁止T1计数 GATE=0,若TR1=1,允许计数;若TR1=0,禁止计数 返回第10页/共121页11 由于在不同方式下计数器位数不同,因而最大计数值(量程)也不同。方
6、式0:M=213=8192 方式1:M=216=65536 方式2:M=28=256 方式3:T0定时器分成两个8位计数器,两个M均256,T1停止计数。返回第11页/共121页12TR1(0):运行控制位 2.定时/计数器控制寄存器TCON(88H)TF1(0):溢出标志位第12页/共121页13 定时器/计数器的初始化初始化的步骤如下:确定工作方式-对TMOD赋值置定时或计数的初值-可直接写入TH0(1),TL0(1)根据需要开放定时器/计数器的中断启动定时器/计数器。当实现了启动要求之后,定时器就按规定的工作方式和初值开始计数或定时。第13页/共121页14 因为定时器/计数器是作“加1
7、”计数,并在计满溢出时产生中断,初值X可以这样计算:X =M -计数值(计数次数)例1:在6MHZ主频下,要求产生1ms的定时,计算初值分析:因为定时器每“加1”一次所需的时间为2s,如果要产生1ms的定时,需加500次,500即为计数值。方式1下工作:初值 X=M-计数值=65536-500=FE0CH例2:计100个外部脉冲,产生中断请求,计数初值x x=M-100第14页/共121页15若Fosc=12MHz,在P1.0 输出周期为400us方波,定时/计数器工作方式2,问计数初值为多少?初始化程序?机器周期=12/Fosc=1us,(256-X)*1us=200usX=56=38HMO
8、VTMOD,#02HSETBET0SETBEAMOVTL0,#38HMOVTH0,#38HSETBTR0第15页/共121页166.2.2 定时/计数器0和1的四种工作方式 由上节可知,通过对TMOD中的M1M0的设置,可以选择四种工作方式。也就是每个定时器可构成4种电路结构模式。在模式0、1和2,T0和T1的工作方式相同,在模式3,两个定时器的方式不同。下面以T1为例,分述各种工作方式的特点和用法。第16页/共121页1方式方式0第17页/共121页2方式方式1第18页/共121页3方式方式2这种工作方式可省去用户软件中重装常数的程序,并可产生相当精度的定时时间。第19页/共121页4方式方
9、式 3该方式只适用于定时器T0,T0被拆成两个独立的8位计数器TH0和TL0。TH0不能作为外部计数模式第20页/共121页21T0工作在方式3下T1的各种工作方式T0工作在方式3时,T1可定为方式0、方式1和方式2,用来作为串行口的波特率发生器,或不需要中断的场合,定时器T1处于方式3时相当于TR1=0,停止计数。T1运行的控制条件只有运行的控制条件只有2个个,即即C/T和和M1,M0.第21页/共121页226.2.3 定时/计数器0或1的应用 定时/计数器的应用编程主要需考虑:根据应用要求,通过程序初始化,正确设置控制字,正确计算计数初值,编写中断服务程序,适时设置控制位等。通常情况下,
10、设置顺序大致如下:l工作方式控制字(TMOD、T2CON)的设置;l计数初值的计算并装入THx、TLx、RCAP2H、RCAP2L;l中断允许位ETx、EA的设置,使主机开放中断;l启/停位TRx设置;第22页/共121页2351系列单片机T0或T1是属于加法计数器,因此就不能直接将实际的计数值作为计数初值送入计数寄存器THx,TLx中,而必须将实际计数值以28、213、216为模求补,以其补码作为计数初值设置THx和TLx。设:实际计数值为X,计数器长度为n(n=8、13、16),则应装入计数器THx和TLx的计数初值为2n-X,式中2n为取模值。例如:工作方式0,以213为模,工作方式1,
11、以216为模等,计数初值:(X)补=2n-X。第23页/共121页24定时模式,是对机器周期计数,而机器周期与选定主频密切相关,因此,需要根据应用系统选定的主频来确定机器周期值,现以主频为6MHz为例,则机器周期为:注意:对于传统51系列单片机,式(1)中分子取值为12,而对于STC89C52单片机,式(1)中分子取值是根据计数脉冲倍速设置来定(参见教材图4-12),若单片机选12T,则式(1)分子为12,若选6T,则式(1)分子为6。若没有特别提出,书中STC89C52单片机都选12T模式。第24页/共121页25实际定时时间Tc=x Tp式中Tp为机器周期,Tc为所需定时时间,x为所需计数
12、次数,主频和Tc一般是已知值,在求得Tp后就可求得所需计数值x,再求x的补码,即求得定时的计数初值。(x)补=2n-x例如:设定时时间为2ms,机器周期Tp为2s,可求得定时计数次数为:设选用工作方式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进制码即可。第25页/共121页266.2.3 定时/计数器0或1的应用
13、1.方式0、1的应用【例6.1】设STC89C52单片机系统时钟频率fCLK为6MHZ,要在P引脚上输出1个周期为2毫秒、占空比为50%的方波信号.1ms1msT=2ms 图引脚输出波形第26页/共121页解:(1)计算初值:单片机工作在12T模式1机器周期=2s=210-6s,T0工作方式0定时1ms计数次数为:选择工作方式0,n=13,定时计数初值:(x)补=213-500=7692=1E0CHX=1111000001100B则TH0=F0H,TL0=0CH第27页/共121页28(2)初始化程序:l工作方式控制字(TMOD、T2CON)的设置;TMOD=00H,定时方式0l计 数 初 值
14、 的 计 算 并 装 入 THx、TLx、RCAP2H、RCAP2L;TH0=F0H,TL0=0CHl中断允许位ETx、EA的设置,使主机开放中断;ET0=1,EA=1,l启/停位TRx设置;TR0=1第28页/共121页29方法一、中断方式:ORG 0000H LJMP MAIN ORG 000BH LJMP T0P ORG 0100HMAIN:MOV SP,#60H;设置堆栈指针 MOV TMOD,#00H;T0为定时、方式0、门控GATE0=0 MOV TL0,#0CH;装载计数初值 MOV TH0,#0F0H SETB TR0;启动定时器0计数 SETB ET0;允许定时器0中断 SE
15、TB EA;允许CPU中断HERE:AJMP HERE;踏步等待第29页/共121页30/*中断服务子程序*/T0P:MOV TL0,#0CH;重装载计数初值 MOV TH0,#0FEH RETI END 第30页/共121页31方法二:软件查询解:(1)计算初值:机器周期=2s=210-6s,T0工作方式1计数初值:(x)补=65036=FEOCH则TH0=0FEH,TL0=0CH 第31页/共121页32 ORG0000HSTART:MOVSP,#60H;设置堆栈区 MOV TMOD,#01H;T0定时方式1门控GATE0=0 SETB TR0;启动定时器0计数L1:MOV TH0,#0F
16、EH;装载计数初值 MOVTL0,#0CH LOOP1:JNB TF0,LOOP1;判计数溢出?没有,踏步等待 CLRTF0;溢出,清溢出标志位 输出求反 SJMPL1 END第32页/共121页33中断方式、C51编程#includesbit P10=P10;void main()SP=0X60;/*设置堆栈指针*/TMOD=0 x1;/*定时器0:定时、工作方式1、门控GATE0=0*/TL0=0 x0c;/*装载计数初值*/TH0=0 xfe;TR0=1;/*启动定时器0计数*/ET0=1;/*允许定时器0中断*/EA=1;/*允许CPU中断*/while(1);第33页/共121页34
17、 void timer0int(void)interrupt 1 TL0=0 x0c;/*重装载计数初值*/TH0=0 xfe;输出求反*/第34页/共121页35【例 6.2】设 STC89C52单 片 机 系 统 时 钟 频 率 fCLK为6MHZ,请编出利用定时/计数器T0在P引脚上产生周期为2秒,占空比为50%的方波信号的程序1.主程序任务:(1)设定T0工作方式1,单片机工作在12T模式,则机器周期为2s,最大定时=2161s(2)定时常数的设定:TC=216-(100ms/2s)=15536=3CB0H每隔100ms中断一次,中断10次为1s即:TH0应装3CH,TL0应装B0H。
18、第35页/共121页36(3)中断管理:允许T0中断,开放总中断 即:IE应装10000010B。(4)启动定时器T0:SETBTR0(5)设置软件计数器初值:(如使用R7)即R7应装0AH(6)动态停机:SJMP$第36页/共121页372.中断服务程序任务:(1)恢复T0常数;(2)软件计数器减1;(3)判断软件计数器是否为0。为0时,改变P状态,并恢复软件计数器初值;不为0时中断返回。第37页/共121页38;主程序:ORG 0000HAJMP MAIN ORG 000BHAJMP TOINTORG 0030H MAIN:MOVSP,#60HMOV TMOD,#01H程序总清单:第38页
19、/共121页39MOV TH0,#3CHMOV TL0,#0B0HMOV IE,#82HSETB TR0MOV R7,#0AHHERE:SJMPHERE第39页/共121页40;中断服务子程序TOINT:MOVTL0,#0B0HMOVTH0,#3CHDJNZR7,NEXTMOVR7,#0AHNEXT:RETIEND第40页/共121页41#include#define uchar unsigned charuchar COUNT=0;sbit P11=P11;void main()SP=0 x60;/*设置堆栈指针*/TMOD=0 x1;/*设置T0为定时,工作方式1,GATE0=0*/TL0
20、=0 xb0;/*装载定时计数初值=100ms*/TH0=0 x3c;IE=0 x82;/*定时计数溢出中断允许,CPU中断允许*/TR0=1;/*启动定时器0计数*/COUNT=0 xa;/*软件计数初值=10*/while(1)/*踏步等待中断*/第41页/共121页42void timer0int(void)interrupt 1/*定时器0中断函数*/TL0=0 x0b;TH0=0 x3c;/*重新装载定时计数初值*/switch(COUNT)/*判断定时1S吗?*/case 0:P11=!P11;COUNT=0 xa;break;/*1S定 时 到,P1.1输出求反*/default
21、:COUNT=COUNT-1;break;/*没到1S,软件计数值减1*/第42页/共121页43方式2的应用【例6-3】将T0(P3.4)引脚上发生负跳变信号作为P1.0引脚产生方波的启动信号。要求P1.0脚上输出周期为1ms的方波,如图6-5所示(系统时钟6MHz)。图6-5 负跳变触发输出一个周期为1ms的方波第43页/共121页44T0方式2计数,计数初值:TH0=0FFH,TL0=0FFHT1方式2定时,定时初值:第44页/共121页45方法一:(中断方式)ORG 0000H LJMP MAIN ;跳向主程序MAIN ORG 000BH ;T0的中断入口 LJMP T0XINT;T0
22、中断服务程序 ORG 001BH;T1的中断入口LJMP T1TIME;T1中断服务程序 第45页/共121页46 ORG 0030H;主程序入口 MAIN:MOV SP,#60H;设堆栈区 MOV TMOD,#26H;T0方式2计数,T1方式2定时 MOV TL0,#0FFH;T0置初值,计1个脉冲 MOV TH0,#0FFH SETB ET0;允许T0中断第46页/共121页47MOV TL1,#06H;T1置初值 MOV TH1,#06HSETB ET1 ;允许T1产生定时中断 SETB EA;总中断允许 SETB TR0;启动T0计数 HERE:AJMP HERE第47页/共121页4
23、8/*T0中断服务子程序*/T0XINT:CLRTR0 ;停止T0计数 SETBTR1 ;启动T1定时 RETI/*T1中断服务子程序*/RETIEND第48页/共121页49方法二:(C程序清单)#include sbit P10=P10;void main()SP=0X60;/*设堆栈指针*/TMOD=0 x26;/*T0方式2计数,T1方式2定时*/TL0=0 xff;/*T0设置计数初值,计1个脉冲*/TH0=0 xff;第49页/共121页50TL1=0 x06;/*T1设置定时初值*/TH1=0 x06;ET0=1;/*允许T0中断*/ET1=1;/*允许T1中断*/EA=1;/*
24、允许总中断*/TR0=1;/*启动T0计数*/while(1)/*踏步等待中断*/第50页/共121页51/*计数器0中断服务子程序*/void timer0 xint(void)interrupt 1TR0=0;/*禁止计数器0计数*/TR1=1;/*启动定时器1*/*定时器1中断服务子程序*/void timer1Tint(void)interrupt 3 P10=!P10;/*P1.0输出求反*/第51页/共121页52【例6.4】假设某STC89C52应用系统的2个外部中断源已被占用,设置定时器T1工作在方式0,作波特率发生器用.现要求增加1个外部中断源,并控制引脚输出1个频率5KHz
25、(周期为200us)的方波.fosc=12MHZ.T0(P3.4)100sTH0为方式3定时TL0为方式3计数(做外部中断源)100sP1.0方式3的应用第52页/共121页53T0工作方式3:初值计算:TL0计一个脉冲 TL0=0FFHTH0定时100s,定时初值:TH0=9CHORG0000H LJMPMAIN ORG 000BH ;TL0中断入口地址 LJMP TL0INT ;跳向TL0中断服务子程序,ORG 001BH ;TH0占用T1的中断资源LJMP TH0INT ;跳向TH0中断服务子程序第53页/共121页54 ORG 0100H ;主程序入口MAIN:MOV TMOD,#07
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STCC 单片机 定时 计数器
限制150内