《《单片机应用及控制技术》第7章-定时计数器.ppt》由会员分享,可在线阅读,更多相关《《单片机应用及控制技术》第7章-定时计数器.ppt(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第7章章 定时定时/计数器计数器上海电子信息职业技术学院上海电子信息职业技术学院 何永艳主编何永艳主编7.1 定时定时/计数概述计数概述80C51单片机内部有两个定时/计数器T0和T1,其核心是计数器,基本功能是加1。这两个计数器都是由两个8位的RAM单元组成的,即每个计数器都是16位的计数器,从0-65535。7.1.1 定时定时/计数器的概念计数器的概念1.定时功能对片内机周脉冲计数,是定时器。2.计数器功能对外部事件脉冲(下降沿)计数,是计数器。定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚输入。且外部脉冲的最高频率不能超过时钟频率的1/24。7.1.2.定时定时/计数器的功能
2、计数器的功能7.2 定时定时/计数器的方式控制寄存器计数器的方式控制寄存器7.2.1.定定 时时/计计 数数 器器 控控 制制 寄寄 存存 器器TCON(88H)7.2.2 定定时时/计计数数器器工工作作方方式式控控制制寄寄存存器器TMOD7.3 定时定时/计数器的四种工作方式计数器的四种工作方式7.3.1 工作方式工作方式0 定时/计数器的工作方式0称之为13位定时/计数器方式它由TL0/1的低5位和TH0/1的8位构成13位的计数器此时TL0/1的高3位未用。7.3.2 工作方式工作方式1 工作方式1是16位的定时/计数器方式,将TMOD的M1M0设为01即可。7.3.3 工作方式工作方式
3、2 工作方式工作方式2-自动再装入预置数的工作方式自动再装入预置数的工作方式。预置数放。预置数放T0或或T1的高的高8位中,在工作方式位中,在工作方式2中只有低中只有低8位参与计数而高位参与计数而高8位是不参与计数的,位是不参与计数的,用作预置数的存放,这样计数范围就小了。用作预置数的存放,这样计数范围就小了。通常工作方式通常工作方式2用于波特率发生器。工作方式用于波特率发生器。工作方式2特别适合于用作较精特别适合于用作较精确的脉冲信号发生器确的脉冲信号发生器7.3.4 工作方式工作方式3 在这种工作方式下T0被拆成2个独立的定时/计数器来用。其中TL0可以构成8位的定时器或计数器工作方式,而
4、TH0则只能作为定时器用。7.3.5 定时定时/计数方法计数方法51系列单片机的计数器是16位的,也就是最大的计数值范围是0-65535,因此计数器计到65536个脉冲就会产生溢出。定时时间和计数值可以编程设定,其方法是在计数器内设置一个初值,然后加1计满后溢出。调整计数器初值,可调整从初值到计满溢出的数值,即调整了定时时间和计数值。80C51定时/计数初值计算公式:7.4 7.4 定时定时/计数器的应用计数器的应用使用定时器实时或计数时,需要先对定时器进行设置,即进行初始化等步骤,应用步骤如下:1.合理选择定时/计数器工作方式2.计算定时/计数器定时初值(按上述公式1计算)3.编制应用程序1
5、)定时/计数器的初始化。包括定义TMOD、写入定时初值、设置中断系统、启动定时/计数器运行等。2)正确编制定时/计数器中断服务程序。注意是否需要重装定时初值,若需要连续反复使用原定时时间,且未工作在方式2,则应在中断服务程序中重装定时初值。3)若讲定时/计数器用于计数方式,则外部事件脉冲必须从P3.4(T0)或P3.5(T1)引脚输入。且外部脉冲的最高频率不能超过时钟频率的1/24。7.4.1 定时定时/计数器应用步骤计数器应用步骤【例7.1】利用定时/计数器T0,产生200us的定时,并使P1.0引脚上输出周期为400us的方波,设系统时钟频率为12 MHz。解:由于晶振为12 MHz,所以
6、机器周期T为1 us。定时时间为200us,定时时间比较短,可以用工作方式0、1、2、3来定时。现举例分别用工作方式1、2两种方式编程。1.用工作方式2实现定时1)计算计数初值XT0初值28200us/1us=256-200=56=38H即TH0=38H,TL0=38H2)求T0的方式控制字TMOD:M1M0=10,GATE=0,C/T=0,可取方式控制字为02H;3)编写源程序:(1)查询方式ORG 0000HLJMP MAIN;跳转至主程序ORG 0100HMAIN:MOV TMOD,#02H;置T0工作于方式2MOV TH0,#38H ;装入T0初值MOV TL0,#38H SETB T
7、R0;启动T0LOOP:JBC TF0,LOOP1;查询定时时间到否?AJMP LOOP;LOOP1:CLR P1.0;P1.0取反输出AJMP LOOP;继续生成波形END(2)中断方式 ORG 0000H LJMP MAIN ;跳转到主程序 ORG 000BH ;T0的中断入口地址 LJMP DVT0 ;转向中断服务程序 ORG 0100H MAIN:MOV TMOD,#02H ;置T0工作于方式2 MOV TH0,#38H ;装入T0初值 MOV TL0,#38H SETB ET0 ;T0开中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0 SJMP$;等待中断 DVT0
8、:CPL P1.0 ;P1.0取反输出 RETI ;中断返回 END2.用工作方式1实现定时1)计算计数初值XT0初值216200us/1us=65336=FF38H即TH0=0FFH,TL0=38H2)求T0的方式控制字TMOD:M1M0=01,GATE=0,C/T=0,可取方式控制字为01H;3)编写源程序:(1)查询方式ORG 0000HLJMP MAIN;跳转至主程序ORG 0100HMAIN:MOV TMOD,#01H;置T0工作于方式1 MOV TH0,#0FFH ;装入T0初值 MOV TL0,#38H SETB TR0;启动T0LOOP:JBC TF0,LOOP1;查询定时时间
9、到否?AJMP LOOP;LOOP1:CLR P1.0;P1.0取反输出 MOV TH0,#0FFH ;重置T0初值 MOV TL0,#38H AJMP LOOP;继续生成波形 END(2)中断方式ORG 0000H LJMP MAIN ;跳转到主程序 ORG 000BH ;T0的中断入口地址 LJMP DVT0 ;转向中断服务程序 ORG 0100H MAIN:MOV TMOD,#01H ;置T0工作于方式2 MOV TH0,#0FFH ;装入计数初值 MOV TL0,#38H SETB ET0 ;T0开中断 SETB EA ;CPU开中断 SETB TR0 ;启动T0 SJMP$;等待中断
10、 DVT0:CPL P1.0 ;P1.0取反输出 MOV TH0,#0FFH ;重置T0初值 MOV TL0,#38H RETI ;中断返回 END【例7.2】测量在(P3.3)端出现的正脉冲的宽度。可用示波器观察。解:门控制位GATE使定时器计数器T1的启动计数受INT1的控制;当GATE为1,TR1为1时,只有INT1引脚输入高电平时,T1才允许计数,利用GATE的这个功能,可测试INT1引脚(P3.3)上正脉冲的宽度(机器周期数)。源程序如下:ORG 0040H MOV TMOD,#90H;定时器T1模式1、定时功能 MOV TH1,#00H;设定初值 MOV TL1,#00H;JBP3
11、.3,$;等待INT1变低 SETBTR1;启动T1 JNBP3.3,$;等待INT1变高 JBP3.3,$;开始计数,等待变低 CLR TR1;停止计数 END【例7.3】已知晶振12MHZ,要求利用定时器T0使图中发光二极管进行秒闪烁。解:发光二极管进行秒闪烁。即一秒钟一亮一暗,亮500ms,暗500 ms。晶振12MHz,每机周1s,T0方式1最大定时只能65ms余。取T0定时50ms,计数10次,即可实现500ms定时。计算定时初值 T0初值=216-50000s/1s =6553650000=15536=3CB0H TH0=3CH;TL0=0B0H。设置TMOD:0000 0 0 0
12、1 B=01H 编制程序如下:ORG 0000H ;复位地址LJMP MAIN;转主程序ORG 000BH ;T0中断入口地址LJMPIT0;转T0中断服务程序ORG 0100H ;主程序首地址MAIN:MOV TMOD,#01H;置T0定时器方式1MOV TH0,#3CH ;置T0初值50mSMOV TL0,#0B0H MOV IE,#10000010B;T0开中 MOV R7,#0AH ;置50mS计数器初值 SETBTR0;T0运行SJMP$;等待中断IT0:CPL P1.7;P1.7取反输出 MOV TH0,#3CH ;重新装入T0初值50mSMOV TL0,#0B0H RETI END