您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > MCS―51单片机结构和原理
6.1定时和计数的基本概念6.2MCS-51单片机定时/计数器的结构和工作原理6.3定时/计数器工作模式及其应用6.4综合应用举例第6章定时器与计数器背景知识6.1定时和计数的基本概念背景知识TH1TL1TH0TL0TMODTCON为什么需要定时/计数器?根据规定的时间间隔完成某项控制功能为什么需要定时/计数器?根据规定的时间间隔完成某项控制功能根据需要的延时启动某项任务为什么需要定时/计数器?根据规定的时间间隔完成某项控制功能根据需要的延时启动某项任务检测外部事件发生的次数为什么需要定时/计数器?根据规定的时间间隔完成某项控制功能根据需要的延时启动某项任务检测外部事件发生的次数为什么需要定时/计数器?根据规定的时间间隔完成某项控制功能根据需要的延时启动某项任务检测外部事件发生的次数为什么需要定时/计数器?根据规定的时间间隔完成某项控制功能根据需要的延时启动某项任务检测外部事件发生的次数为什么需要定时/计数器?根据规定的时间间隔完成某项控制功能根据需要的延时启动某项任务检测外部事件发生的次数如何实现?软件延时采用延时电路实现固定的硬件延时采用可编程定时/计数器实现可编程定时/计数器(Timer/Counter,简称T/C)正是MCS-51单片机的一种重要的功能部件可编程定时/计数器(T/C)工作原理?例:往桶里滴水,考察其溢出时间:可编程定时/计数器(T/C)工作原理?例:往桶里滴水,考察其溢出时间:可编程定时/计数器(T/C)工作原理?例:往桶里滴水,考察其溢出时间:可编程定时/计数器(T/C)工作原理?例:往桶里滴水,考察其溢出时间:可编程定时/计数器(T/C)工作原理?例:往桶里滴水,考察其溢出时间:桶有多大?------定时/计数范围滴水的速度?----时钟源频率原来有多少水?--初值问题如何知道溢出?--溢出时的反应6.2.1定时/计数器概述图6-1定时/计数器结构图6-2定时/计数器控制逻辑6.2.2单片机定时/计数器的工作方式定时器工作方式设置为定时器工作方式时,基准时间由单片机的晶振经过12分频后获得的一个脉冲信号,即机器周期信号。机器周期信号输入到加1计数器,加1计数器实现每个机器周期使T0或T1的计数寄存器数值增加1,直至计满溢出,根据计数机器周期的次数可以得到定时时间。计数器工作方式设置为计数方式时,外部脉冲信号输入到引脚T0(P3.4)和T1(P3.5),CPU对外部脉冲信号进行采样计数,加1计数器由外部输入脉冲信号的下降沿触发计数。计数方式具体工作过程计数器在每个机器周期的S5P2期间采样T0和T1引脚的输入电平,若前一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。所以检测一个从1到0的跳变需要两个机器周期,即外部输入信号的周期应大于或等于两个机器周期,也就是说外部输入信号的频率必须小于晶振频率的1/24,若频率超过晶振频率的1/24,则无法准确计数脉冲个数。虽然对外部输入信号的占空比无特殊要求,但是为了确保输入信号电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期。对输入脉冲信号的基本要求如图6-3所示。机器周期机器周期图6-3对输入脉冲宽度的要求TMOD用于控制T0和T1的工作模式。TMOD不能位寻址,只能用字节设置定时器的工作模式,低半字节设置T0,高半字节设置T1。8051系统复位时,TMOD的所有位被清0。TMOD各位的定义格式如图所示6.2.3工作模式寄存器TMODGATEC/TM1M0GATEM1C/TM0定时器T1定时器T0TMOD(89H)D7D6D5D4D3D2D1D0M1和M0—操作模式控制位。两位可形成四种编码,对应于四种模式。TC/—计数器/定时器方式选择位0/TC设置为定时方式。定时器计数8051片内脉冲,即对机器周期计数1/TC设置为计数方式。计数器的输入来自T0(P3.4)或T1(P3.5)端的外部脉冲GATE—门控位。GATE=0,只要用软件使TR0(或TR1)置1就可以启动定时器,而不管INT0(或INT1)的电平是高还是低。GATE=1,只有INT0(或INT1)引脚为高电平且由软件使TR0(或TR1)置1时,才能启动定时器工作。TCON除可字节寻址外,各位还可位寻址。8051系统复位时,TCON的所有位被清0。TCON各位的定义格式如图所示。6.2.4启动控制寄存器TCON6.3定时/计数器工作模式及其应用6.3.1模式0及其应用6.3.2模式1及其应用6.3.3模式2及其应用6.3.4模式3及其应用6.3.1工作模式0及其应用1逻辑结构2模式0的应用1逻辑结构振荡器C/T=0—T0引脚INT0TF0TR0中断C/T=1—TL0(5位)TH0(8位)控制M0M1C/TGATEAB0012分频图6-7模式0时的逻辑结构图例6.4用T0定时,选择工作模式0,由单片机P1.0输出占空比为50%、周期为2ms的方波,晶振频率为12M。(T=2mS=2000uS)源程序如下:ORG0000HLJMPMAINORG000BHLJMPINT_TIME0ORG0030HMAIN:MOVTMOD,#00H;设置工作方式MOVTH0,#0E0H;设初始值:1110000000011000:;1C18H:7192MOVTL0,#18HSETBTR0;启动定时器SETBEA;开放定时器中断SETBET0SETBP1.0LJMP$INT_TIME0:MOVTH0,#0E0H;对定时器重新赋值MOVTL0,#18HCPLP1.0RETI2工作模式0应用6.3.2工作模式1及其应用1逻辑结构2模式1的应用1模式1的逻辑电路结构振荡器C/T=0—T1引脚INT1TF1TR1中断C/T=1—TL1(8位)TH1(8位)控制M0M1C/TGATEAB1012分频图6-8模式1逻辑结构图2模式1的应用举例例6.7用T1定时,选择工作模式1,由单片机P1.0输出50Hz的方波,晶振频率=12M。(T=20mS=20000uS)源程序如下:ORG0000HLJMPMAINORG0030HMAIN:MOVTMOD,#10H;设置T1为模式1SETBTR1;启动定时LOOP:MOVTH1,#0D8H;送初值:55536:MOVTL1,#0F0HJNBTF1,$;查询定时时间到否CLRTF1;产生溢出,清标志位CPLP1.1;取反SJMPLOOP;重复循环6.3.3工作模式2及其应用1逻辑结构2模式2的应用1模式2的逻辑电路结构重新装入12分频晶振C/T=0—T0引脚TF0C/T=1—TL0(8位)TH0(8位)控制M0M1C/TGATE01INT0TR0AB图6-9模式2逻辑结构2模式2的应用举例例6-10:利用定时器T1的模式2对外部信号计数。要求每计满100次,将P1.0引脚取反。源程序:ORG0000HLJMPMAINORG001BHLJMPINT_TIME1ORG0030HMAIN:MOVTMOD,#60H;设置T1为模式2,外部计数方式MOVTL1,#9CH;T1计数器初值:156MOVTH1,#9CHSETBEA;开放定时器中断SETBET1SETBTR1;启动T1计数HERE:SJMPHERE;等待中断INT_TIME1:CPLP1.0RETI6.4综合应用举例由于MCS-51单片机的定时/计数器是可编程的,因此在使用之前需要进行初始化。在编程时主要注意两点:第一要能正确写入控制字;第二能进行计数初值的计算。一般情况下,包括以下几个步骤:(1)确定工作方式,即对TMOD寄存器进行赋值。(2)计算计数初值,并写入寄存器TH0、TL0或TH1、TL1中。(3)根据是采用中断还是查询方式决定是否置位ETx允许T/C中断。(4)根据是采用中断还是查询方式决定是否置位EA使CPU开中断。(5)置位TRx启动计数。例6-11试选择定时/计数器T0测试INT0(P3.2)引脚上输入的被测脉冲宽度,已经晶振频率=12M分析:定时器可以用于测量脉冲宽度程序设计,测量外部脉冲宽度利用TMOD的门控位控制很方便,当设置GATE=1时,仅设置TR0(TR1)等于“1”,定时器不能被启动,还必须等外部脉冲高电平时,定时器才开始工作。测试过程如图6-11所示被测脉冲计数器启动计数器关闭图6-11被测脉冲波形例6-11源程序如下:ORG0000HLJMPMAINORG000BHLJMPINT_TIME0ORG0030HMAIN:MOVR2,#00H;如果被测脉冲宽度太长,则累计溢出次数MOVTMOD,#09H;设置T0为模式1,门控方式MOVTL0,#00H;设置初值MOVTH0,#00HSETBEA;开放T0中断SETBET0SETBTR0;INT0引脚高电平到来才会启动T0JNBP3.2,$;等待高电平到来JBP3.2,$;高电平到来,启动T0开始测量CLRTR0MOVR0,TH0;P3.2低电平,测量结束,保存结果MOVR1,TL0LJMP$INT_TIME0:INCR2MOVTL0,#00HMOVTH0,#00HRETI例6-12:电路如图6-12所示,P1.0引脚外接发光二极管D0,要求D0以1s的间隔闪烁。已知晶振频率=12M39383736353433322122232425262728P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P2710113029RXDTXDCLOCK373P10P11P12P13P14P15P16P17INT1INT0T1T0X1X212345678131215141918RDWR1716EA/VPRESET9X1X2VCCT1T0LCDDIRINTORESET6264RD6264WDVCC1KSP-R2SP-C310USP-C130pSP-C230pSP-CRY11M8031SP-U1NETLAB410图6-12例6-12电路原理图例6-12源程序代码:1S=1000000uS=20*50000ORG0000HLJMPMAINORG000BHLJMPINT_TIME0ORG0030HMAIN:MOVP1,#0FFH;灯的初态MOV30H,#00H;软件计数器预清0MOVTMOD,#01H;定时/计数器0工作于方式1MOVTH0,#3CHMOVTL0,#0B0H;初值15536,计50000次SETBEA;开总中断允许SETBET0;开定时/计数器0允许SETBTR0;定时/计数器0开始运行LOOP:AJMPLOOP;真正工作时,这里可写任意程序INT_TIME0:INC30H;定时器0的中断处理程序MOVA,30HCJNEA,#20,T_END;30H单元中的值到了20了吗?CPLP1.0;到了,取反P10MOV30H,#00H;清软件计数器T_END:MOVTH0,#3CHMOVTL0,#0B0H;重置定时常数RETI例6-13设一交通路口设红、黄、绿三盏交通灯,当红灯亮2s后,黄灯亮400ms,绿灯亮1s,试用单片机模拟交通灯控制分析:单片机采用发光二极管模拟交通灯控制,即利用P1.0~P1.2分别接红、黄、绿三个发光二极管。但是这里用到三个定时时间(2s、400ms、1s),难道每个定时时间都编写不同的定时程序,那么如果需要更多的定时时间,怎么办?这里还是采用软件定时器的方式,即找到这几个定时的时间的公约数,利用软件计数器就可以完成不同的延时。例6-13源程序如下:NumberOf50msEQU30H;定义软件定时器的计数次数ORG0000HLJMPMAINORG000BhLJMPINT_TIME0ORG0030HMAIN:CLRP1.0红灯亮MOVNumberOf50ms,#28H延时2sLCALLDELAYSETBP1.0红灯灭CLRP1.1黄灯亮MOVNumberOf50ms,#08H延时400msLCALLDELAYSETBP1.1黄灯灭CLRP1.2绿灯亮MOVNumberOf50m
本文标题:MCS―51单片机结构和原理
链接地址:https://www.777doc.com/doc-4021713 .html