您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第8章-STC11F定时器计数器.
第7章STC11F单片机的定时器/计数器7.1单片机定时器/计数器结构与原理7.2单片机定时器/计数器的控制7.3单片机定时器/计数器的工作方式7.4单片机定时器/计数器的应用举例7.5单片机定时器/计数器的可编程时钟输出功能7.1定时器/计数器的结构与原理GATEC/TM1M0GATEC/TM1M0TH1TL1TH0TL0T1方式T0方式T1引脚T0引脚机器周期脉冲内部总线TMODTCONTF1TR1TF0TR0AUXRT0x12T1x12◆两个16位加1计数器,THx+TLx成。TMOD工作方式寄存器;TCON控制寄存器,控制Tx的启、停及设置溢出标志;AUXR辅助寄存器设定内部计数脉冲的分频系数。◆T0和T1,可由程序选择作为定时器或作为计数器使用,定时时间或计数值也可程序设定。定时频率是振荡频率的1/12,计数是负跳变时加1。◆定时器/计数器可用程序选择不同的工作方式,T0具有4种方式,T1具有3种方式。◆任一定时器/计数器在定时时间到或计数值到时,可由程序安排产生中断请求信号或不产生中断请求信号。1.工作方式寄存器TMOD(89H)控制T1控制T0M0M1C/TGATEM0M1C/TGATEB0B1B2B3B4B5B6B7注意:TMOD不能位寻址!7.2定时器/计数器的控制●GATE:门控位。GATE=0时,TRx置1,启动工作;GATA=1时,TRx置1,同时外部中断-INTx高电平时,启动工作。●C/-T:定时/计数模式选择位。C/-T=0定时;C/-T=1计数。●M1M0:工作方式设置位。具体定义方式如下表:M1M0工作方式方式说明00013位定时/计数器01116位定时/计数器102可自动重装入的8位定时/计数器113T0分为2个8位定时器,T1无此方式2.定时器/计数器控制寄存器TCON(88H)B7B6B5B4B3B2B1B0TF1TR1TF0TR0IE1IT1IE0IT0中断请求标志(已讲)触发方式(已讲)0低电平,1下降沿启动定时/计数器0停止,1启动7.2定时器/计数器的控制TRx:Tx运行控制位。TRx=1,Tx开始工作;TRx=0,Tx停止工作。TRx由软件置1或清0。TFx:溢出中断请求标志位。T0、T1计数溢出时,由硬件自动置位TFx=1。在中断允许下,发出中断请求信号;在中断禁止下,可查询TFx状态;响应中断后硬件自动清0。TFx也可有软件置位或清0,实现软中断。3.辅助寄存器AUXR(8EH单元,STC11F增加)B7B6B5B4B3B2B1B0T0x12T1x12UART_MOx6BRTR--BRTx12XRAMS1BRS7.2定时器/计数器的控制设置T0分频系数:0--foscd的12分频1--不分频设置T1分频系数:0--foscd的12分频1--不分频TL0低5位TH08位TF0S2&≥1÷12f0scS1T0引脚TR0GATET0X12“1”闭合中断请求1INT0C/T=0C/T=1不分频S301定时器/计数器T0有4种工作方式,T1没有工作方式3。1.方式0当M1M0=00时,方式0为13位定时器/计数器模式,由TL0的低5位+TH0的8位组成。7.3定时器/计数器的工作方式图7.3定时器/计数器0工作方式0的逻辑结构图●定时模式时,定时值T=(213-X)Tcy计数模式时,计数值为N=213-X初值还可以采用计数个数直接取补法获得。●门控位GATE具有特殊的作用:当GATE=0时,此时仅由TR0=1控制与门的开启,计数开始;当GATE=1时,当TR0=1时,外中断引脚信号引脚的高电平启动计数,外中断引脚信号引脚的低电平停止计数。这种方式常用来测量外中断引脚上正脉冲的宽度。●注:STC15系列改进为16位重装常数方式2.方式1当M1M0=01时方式,1为16位定时器/计数器模式,由TL0+TH0,其它控制逻辑与方式0相同。(上图TL0改8位全用)7.3定时器/计数器的工作方式★定时/计数值工作方式1计数时:计数值N由式N=65536–X决定,计数范围为1~65536(216)。工作方式1定时时:定时时间t由式t=(65536-X)Tcy决定。如果分频设定T0x12=0,则12分频,Tcy=12/fosc;分频设定T0x12=1,则不分频,Tcy=1/fosc。TL08位TH08位TF0S2&≥1÷12f0scS1T0引脚TR0GATET0X12“1”闭合中断请求1INT0C/T=0C/T=1不分频S3013.方式2当M1M0=10时,方式2为自动重装载的8位定时器/计数器模式。7.3定时器/计数器的工作方式TL0作为8位加法计数器使用,TH0作为初值寄存器用。TH0、TL0初值都由软件预置。TL0计数溢出时,置位TF0且重装载TL0。方式2的计数范围为M=1~256(28);方式2特别适合于用作较精确的脉冲信号发生器。S2&≥1÷12f0scS1T0引脚TR0GATET0X12“1”闭合1INT0C/T=0C/T=1不分频S301重装载信号TF0中断请求TL08位TH08位7.3定时器/计数器的工作方式图7.7定时器/计数器0工作方式3的逻辑结构图4.方式3当M1M0=11时,定时器/计数器0设定为工作方式3。将T0分成为两个独立的8位计数器TL0和TH0。方式3只适用于定时器T0,当定时器T1处于方式3时,相当于TR1=0,T1将停止工作。TL08位TF0S2&≥1÷12f0scS1T0引脚TR0GATET0X12“1”闭合中断请求1INT0C/T=0C/T=1不分频S301TH08位TF1S2÷12f0scT0X12中断请求不分频S301TR1控制资源的占用:TL0占用T0的全部控制位C/-T、GATE、TR0、TF0及-INT0,TL0既可作为定时器使用,也可作为计数器使用。TH0借用了T1的控制位TR1、TF1,此时TH0只能作为非门控方式的定时器使用。T1只能作为串口波特率发生器使用。设Tx运行于计数器模式,要求计数X个外部脉冲后T0(或T1)回零,则计数初值C的求取方法如下:7.3定时器/计数器的工作方式5计数初值的计算方法因为,计数器溢出的含义是指加满到计数器的模值2n(n位计数位数),即X+C=模=2n所以,C=2n–X=2n+(–X)=(X)补可见,计数初值的大小等于需要计数的个数X求补运算后的结果。设Tx运行于定时器模式,需定时tµs,则计数脉冲个数为X=t/Tcy,(Tcy为考虑分频系数后的时钟周期),同理可知,定时初值为(t/Tcy)求补。例:T0运行于计数器状态,工作于方式1(16位方式),要求外部引脚出现3个脉冲后,T0计满溢出而申请中断,试求计数初值C。解:C=(0003H)补=(0000,0000,0000,0011B)补=1111,1111,1111,1101B=FFFDH又例:T0运行于定时器状态,时钟振荡周期为12MHz,要求定时100µs。求不同工作方式时的定时初值。(设T0x12=0)B1000000001100方式0(13位方式):C=(64H)求补=0000001100100+1=1F9CH解:因为机器周期Tcy=(T0x12)/12MHZ=1µs;(T0x12)是分频值1、12所以要计数的机器周期个数为100,即64H。注意:定时器/计数器在工作方式0时的初值装入方法!(低5位,高8位)方式1(16位方式):C=(64H)求补=0000000001100100+1=FF9CH方式2(8位方式):C=(64H)求补=01100100+1=9CH7.3定时器/计数器的工作方式7.4定时器/计数器的应用举例课后作业,准备下节课堂调试要求在例题7.1基础上,晶振24MHz,修改程序,调试到LED在0.3~0.6秒之间频率闪烁。可通过查询方式和中断方式分别实现。下一节课先讲例题7.2、7.3,然后调试示例5和示例6对定时器/计数器初始化编程一般包括以下5个步骤:◆对TMOD赋值,以确定工作方式;◆对AUXR赋值,以确定分频系数;◆计算定时初值,并写入寄存器TH0、TL0或TH1、TL1中。◆置位EA、置位ETX,设置IP,允许中断及确定优先级(需要时)。◆置位TRX启动定时器/计数器。7.4定时器/计数器的应用举例注意!1)在正确编写中断服务程序,除考虑如何实现要求的定时/计数功能外,应注意是否需要恢复定时器的时间常数。2)对于较长范围的定时/计数,可以结合软件计数的方法予以扩展。3)外部输入脉冲的最高频率不能超过振荡频率的1/24,脉冲宽度应不小于一个机器周期。4)计算定时初值不要忘记分频系数(1、12)。例7.1若STC11F单片机的晶振频率为12MHz,要求利用T0方式0,定时分频系数12,P1.0引脚输出周期为2ms的方波(课本用T1方式1,10ms)。思路:若要产生周期为2ms的方波,只要每1ms将信号的幅值由0变到1或由1变到0即可,可采用取反指令CPL来实现。为了提高CPU的效率,可采用定时方式0中断,每1ms产生一次中断,在中断服务程序中将输出信号取反即可。7.4定时器/计数器的应用举例解:1)计算计数初值:要定时1ms,用方式0(13位定时器)就可实现。由于晶振为12MHz,所以机器周期Tcy为1s。所以:X=t/Tcy=1×10-3/1×10-6=1000=3E8H计数常数为:C=(3E8H)补=+1=1110000011000B=1C18H初值=1110,0000,XXX1,1000B=E018H00011111010002)确定TMOD内容:T0工作于定时器方式0,M1M0=00H、C/-T=0、GATE=0;定时器T1不用,取为全0,于是TMOD=00000000B=00H。3)程序设计(查询方式)ORG0000HAJMPMIAINMAIN:ORG0030H;主程序MOVTMOD,#00HMOVTH0,#0E0H;E018H;1mS初值MOVTL0,#18HSETBTR0;启动T0Check_TF0:JBCTF0Time_overflow;查询T0溢出标志SJMPCheck_TF07.4定时器/计数器的应用举例Time_overflow:CPLP1.0;输出方波MOVTH0,#0E0H;重装计数初值MOVTL0,#18HSJMPCheck_TF0END4)程序设计(中断方式)ORG0000HAJMPMIAINORG000BH;T0中断服务程序入口LJMPTime0_ISRORG0030H;主程序MAIN:MOVTMOD,#00HMOVTH0,#0E0H;E018H;1mS初值MOVTL0,#18HSETBEA;开全局中断SETBET0;允许T0中断SETBTR0;启动T0SJMP$;暂停,等待中断7.4定时器/计数器的应用举例Time0_ISR:CPLP1.0;输出方波MOVTH0,#0E0H;重装计数初值MOVTL0,#18HRETI;中断返回END7.4定时器/计数器的应用举例课堂调试示例工程5_定时器控制P0口输出7.4定时器/计数器的应用举例例7.2利用定时/计数器扩展外中断源法一:第六章3节补充:设置T0、T1下降沿触发TF0、TF1,引发中断T1CKLOBRTCLKO--T1_PIN_IERXD_PIN_IE--B0B1B2B3B4B5B6B7WAKE_CLKOT0_PIN_IET0CKLO置“1”各位可以使相应引脚的下降沿触发中断标志法二:置计数初值为满,一个脉冲引发中断EXT1_ISR:…….…….RETIENDORG0000HAJMPMIAINORG001BH;T1中断服务程序入口LJMPEXT1_ISRORG0100H;主程序MAIN:MOVTMOD,#60HMOVTH1,#0FFH;初值为满MOVTL1,#0FFHSETBEA;开全局中断SETBET1;允许T1中断SETBTR1;启动T1SJMP$;等待中断7.4定时器/计数器的应用举例演示工程示例6_定时器扩展外中断例7.3用定时器T1控制P1口LED灯从左到右,再从右到左轮换流水点亮,灯间隔1S。设晶振频率为12MH
本文标题:第8章-STC11F定时器计数器.
链接地址:https://www.777doc.com/doc-2112486 .html