您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 周国运单片机原理及应用(C语言版)6
单片机原理及应用(C语言版)第6章MCS-51单片机定时器/计数器中国水利水电出版社第6章MCS-51单片机定时器/计数器目录6.1MCS-51定时器/计数器的结构及原理6.2定时器T0、T16.3定时器T26.4定时器应用举例本章主要讨论MCS-51单片机定时器/计数器T0、T1、T2的逻辑结构、工作原理、使用方法和应用。本章为单片机的主要内容,也是学习第七章串行口的基础。第6章MCS-51单片机的定时器/计数器6.1MCS-51单片机定时器/计数器的结构及原理主要内容6.1.1MCS-51单片机定时器的结构6.1.2MCS-51单片机定时器的工作原理6.1.3定时器/计数器的控制寄存器6.1.1MCS-51单片机定时器的结构MCS-51单片机定时器/计数器逻辑结构图CPU中断溢出溢出溢出定时器0定时器1定时器2TMODT2CONT2MODTCONTH0TL0TH1TL1TH2TL2RCAP2LRCAP2H模式模式T2(P1.0)T1(P3.5)T2EX(P1.1)T0(P3.4)模式控制控制控制中断重装捕获6.1.1MCS-51单片机定时器的结构MCS-51主要由如下构成:①三个16位的可编程定时器/计数器:定时器/计数器0、1和2。②每个定时器有两部分构成:THx和TLx③特殊功能寄存器TMOD和TCON,主要对T0和T1进行控制。④特殊功能寄存器T2MOD和T2CON,主要对T2进行控制,RCAP2H、RCAP2L为T2服务。⑤引脚P3.4、P3.5、P1.0,为计数脉冲输入。⑥定时器T0、T1和T2是3个中断源,可以向CPU发出中断请求。6.1.2MCS-51单片机定时器的工作原理定时器/计数器T0、T1、T2的内部结构简图如下图所示。C/T=0中断请求振荡器TLx(8位)THx(8位)Txn分频TFxC/T=1控制TRx6.1.2MCS-51单片机定时器/计数器的工作原理从上图可以看出:①定时器的实质是一个加1计数器。②C/T=0,为定时器计数频率:fosc/12计数信号由片内振荡电路提供,振荡脉冲n分频送给计数器,每个机器周期计数器值增1。③C/T=1,为计数器计数信号由Tx引脚(P3.4、P3.5和P1.0)输入,每输入一有效信号,相应的计数器中的内容进行加1计数器的最高计数频率为:fosc/241)每1个输入脉冲的下降沿使计数器计1个数;2)每1个机器周期对引脚采样1次,当上1个机器周期采样为高、本机器周期采样为低为1个下降沿6.1.2MCS-51单片机定时器/计数器的工作原理④控制信号TRx=1时,定时器启动。⑤当定时器由全1加到全0时计满溢出,TFx=1,向CPU申请中断;同时,定时器从0开始继续计数。6.1.3定时器/计数器0、1的控制寄存器1、T0、T1的工作模式寄存器TMOD功能:确定定时器的工作模式。其格式为:TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0GATE——外部门控制位。GATE=1,使用外部控制门,且TRx=1当P3.2(P3.3)为高时启动定时器。6.1.3定时器/计数器的方式和控制寄存器GATE=0,不使用外部门控制计数器C/T——定时或计数方式选择位C/T=0,为定时器;C/T=1,为计数器计数采样:CPU在每机器周期的S5P2期间,对计数脉冲输入引脚进行采样。若前一机器周期采样值为1,下一机器周期采样值为0,则计数器增1,即下降沿计数。6.1.3定时器/计数器的方式和控制寄存器M1、M0——工作模式选择位。表6-1定时器/计数器的工作模式M1M0工作模式功能00模式013位定时/计数01模式116位定时/计数10模式28位初值自动重装定时/计数11模式3定时器0:TL0可8位定时/计数,TH0为8位定时器。定时器1:无此方式6.1.3定时器/计数器的方式和控制寄存器2、T0、T1的控制寄存器TCONTCON(88H)D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0TF1、TF0:T1、T0的溢出标志位计数溢出,TFx=1。中断方式:自动清零;查询方式:软件清零。6.1.3定时器/计数器的方式和控制寄存器TR1、TR0:T1、T0启停控制位。置1,启动定时器;清0,关闭定时器。IE1、IE0:外部中断1、0请求标志位IT1、IT0:外部中断1、0触发方式选择位注意:GATE=1,TRx与P3.2(P3.3)的配合。6.2定时器T0、T1的工作模式及应用主要内容6.2.1模式16.2.2模式26.2.3模式36.2.4T0、T1应用6.2.1模式1模式0与模式1的区别仅仅是计数器的位数不同,前者是13位,后者是16位,其它完全相同,现在一般都不使用模式0,故不讲。当设置M1M0=01时,选择模式1,为16位定时器/计数器。模式1原理结构模式1原理结构由4部分构成(下页图):信号源运行控制计数器溢出标志6.2.1模式1的逻辑结构及应用图6-6T0模式1原理结构模式0是出于与MCS-48单片机的兼容振荡器12分频TL0(8位)TH0TF0+&T0(P3.4)TR0(P3.2)GATEC/T=0C/T=1中断(8位)01运行控制计数器溢出标志信号源6.2.1模式1的逻辑结构及应用信号源C/T设为1,为计数器,用P3.4引脚脉冲C/T设为0,为定时器,用内部脉冲运行控制GATE=1,由外部信号控制运行此时应该设置TR0=1P3.2引脚为高电平,T0运行GATE=0,由内部控制运行TR0设置为1,T0运行6.2.2模式2M1M0=10时,选择模式2,为8位定时器/计数器,且初值自动重装。模式2原理结构原理结构如下页图所示,由4部分构成:信号源运行控制计数器溢出标志在能够满足计数要求时,尽可能地选择模式2。6.2.2模式2图6-7T0模式2原理结构振荡器12分频T0(P3.4)TR0TF0中断GATE+&C/T=0C/T=1TL0(8位)TH0(8位)P3.201运行控制计数器溢出标志信号源6.2.3模式31、T0模式3的结构特点M1M0=11,选择模式3。逻辑结构如图6-8和6-9所示:结构:TL0、TH0分为两个独立的8位计数器TL0:8位定时器/计数器使用T0所有的资源和控制位TH0:8位定时器使用T1所有的资源(中断向量、中断控制ET1、PT1)和控制位(TR1、TF1)6.2.3模式3图6-8模式3下T0的原理结构图振荡器12分频TR1振荡器T0(P3.4)TR0TF1GATE+&C/T=0C/T=1TL0(8位)TH0P3.2中断中断TF012分频(8位)6.2.3模式32、T0模式3时T1的工作模式T1可以模式0~模式2工作。T1的结构如图6-9所示由于TF1及中断矢量被TH0占用,所以T1仅用作波特率发生器或其它不用中断的地方。T1作波特率发生器,其计数溢出直接送至串行口。设置好工作方式,串行口波特率发生器开始自动运行。TMOD中T1的M1M0=11,T1停止工作,因为T1没有模式3。6.2.3模式3图6-9T0模式3时T1的原理结构串行口重新装入C/T=0C/T=1C/T=1C/T=0T1(P3.5)T1(P3.5)(a)T1模式1振荡器12分频振荡器12分频串行口TH1(8位)TL1(8位)TL1(8位)TH1(8位)(b)T1模式26.2.4T0、T1应用1、定时器/计数器工作模式的选择方法(1)首先计算计数值N对定时器,设已知定时时间为t,则对应的计数值N与t的关系为(因每个机器周期计一个数):t=N×机器周期所以N=t/机器周期对计数器,便直接给出了计数值N。(2)由N确定工作模式原则尽可能选择模式2若N≤256选择模式2,否则选择模式1。(3)模式3的选择如果定时器/计数器不够用,需要多个8位定时器/计数器时,选择T0以模式3工作。6.2.4T0、T1应用2、定时器/计数器初值X的计算方法因为X+N=28或X+N=216所以X=28-N或X=216-N(1)对定时器的初值X已知定时时间为t,则N=t/机器周期所以X=28-t/机器周期或X=216-t/机器周期(2)对计数器的初值XX=28-N或X=216-N6.2.4T0、T1应用例6-1对单片机的定时器/计数器0进行编程,用中断方式实现从P1.0引脚产生周期为1000µs的方波。设单片机的振荡频率为12MHz。分析:(1)方波产生原理将T0设为定时器,计算出合适的初值,定时到了之后对P1.0引脚取反即可。(2)选择工作模式计算计数值NP1.06.2.4T0、T1应用定时时间t:周期为1000µs的方波要求t=周期/2=1000/2=500(µs)对应计数值:N=t/机器周期=500/1=500N=500256,所以选择模式1。模式字:TMOD=00000001B=0x01(3)初值XX=65536–N=65036=0xfe0c方波周期T定时时间t6.2.4T0、T1应用C语言程序:#includereg52.h//包含特殊功能寄存器库sbitP1_0=P1^0;//定义位变量voidmain(){TMOD=0x01;//T0用模式1、定时TL0=0x0c;TH0=0xfe;//设置定时器的初值ET0=1;//允许T0中断EA=1;//允许CPU中断TR0=1;//启动定时器while(1);//等待中断}6.2.4T0、T1应用voidtime0_int(void)interrupt1{//中断服务程序TL0=0x0c;TH0=0xfe;//定时器重赋初值P1_0=~P1_0;//P1.0取反,输出方波}汇编语言程序:ORG0000HSJMPMAINORG000BHLJMPTIME06.2.4T0、T1应用MAIN:;主程序MOVSP,#0DFH;设置堆栈指针MOVTMOD,#01H;T0模式1定时MOVTL0,#0CH;置定时初值MOVTH0,#0FEHSETBET0;定时器T0开中断SETBEA;CPU开中断SETBTR0;启动定时器T0SJMP$;等待定时器溢出TIME0:;中断服务程序MOVTL0,#0CHMOVTH0,#0FEH;重装定时初值CPLP1.0;P1.0取反RETI;中断返回END6.2.4T0、T1应用例6-2试对MCS-51单片机编程,用定时器/计数器0定时,实现从P1.0输出周期为500µs的方波。设单片机的振荡频率为12MHz分析:(1)选择工作模式需要计算计数值N先定时时间t:周期为500µs的方波要求t=周期/2=500/2=250(µs)计算计数值N:N=t/机器周期=250/1=250N=250256,所以选择模式2。6.2.4T0、T1应用模式字:TMOD=00000010B=0x02(2)初值计算(256-X)×1µs=250µsX=6则TH0=TL0=6(3)程序:采用中断处理方式的程序:方波周期T定时时间t6.2.4T0、T1应用C语言程序(中断方式):#includereg52.h//包含特殊功能寄存器库sbitP1_0=P1^0;voidmain(){TMOD=0x02;//设置工作模式TL0=0x06;TH0=0x06;//为定时器赋初值ET0=1;//允许定时0中断EA=1;TR0=1;//启动定时器0while(1);//等待中断}voidtime0_int(void)interrupt1{P1_0=~P1_0;}6.2.4T0、T1应用中断方式汇编语言程序:ORG0000HLJMPMAINORG000BH;中断处理程序CPLP1.0RETIORG0030H;主程序MAIN:MOVSP,#0DFHMOVTMOD,#02HMOVTL0,#06HMOVTH0,#06HSETBET0;允许定时器0中断SETBEA;允许CPU中断SETBTR0;启动定时器0SJMP$;等待中断END6.2.4T0、T1应用采用查询方式C语言程序:#includereg52.hsbitP1_0=P1^0;voidmain(){TMOD=0x02;TL0=0x06;TH0=
本文标题:周国运单片机原理及应用(C语言版)6
链接地址:https://www.777doc.com/doc-3991297 .html