您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 第06章 MCS-51单片机定时计数器
1.定时/计数器的结构2.定时/计数器的工作方式3.定时/计数器的应用4.单片机音乐第6章定时/记数器本章内容SingleChipMicrocomputer概述通常采用以下三种方法来实现定时或计数:1.硬件法硬件定时功能完全由硬件电路完成,不占用CPU时间。但当要求改变定时时间时,只能通过改变电路中的元件参数来实现,很不灵活。2.软件法软件定时是执行一段循环程序来进行时间延时,优点是无额外的硬件开销,时间比较精确。但牺牲了CPU的时间。3.可编程定时器/计数器MSC-51单片机定时/计数器的结构定时电路集成在芯片中,称为定时器/计数器。MCS-51的单片机内有两个16位可编程的定时器/计数器,分别称为定时器/计数器0和定时器/计数器1,它们具有四种工作方式,其控制字和状态均在相应的特殊功能寄存器中,通过对控制寄存器的编程,就可方便地选择适当的工作方式。定时/计数器结构定时器/计数器的控制寄存器1.工作方式控制寄存器(TMOD)位D7D6D5D4D3D2D1D0位符号GATEC/M1M0GATEC/M1M0←T1方式字段→←T0方式字段→GATE:门控位。GATE=0启动不受/INT0或/INT1的控制;GATE=1启动受/INT0或/INT1的控制。C/:外部计数器/定时器方式选择位。C/=0定时方式;C/=1计数方式。M1M0:工作模式选择位。M1M0模式说明00013位定时/计数器,高八位TH(7--0)+低五位TL(4--0)01116位定时/计数器,TH(7--0)+TL(7--0)1028位计数初值自动重装,TL(7--0)TH(7--0)113T0运行,而T1停止工作,8位定时/计数。TTTTT2.定时/计数器控制寄存器(TCON)位D7D6D5D4D3D2D1D0位符号TF1TR1TF0TR0IE1IT1IE0IT0TR0:定时/计数器0运行控制位。软件置位,软件复位。与GATE有关,分两种情况:GATE=0时:若TR0=1,开启T0计数工作;若TR0=0,停止T0计数。GATE=1时:若TR0=1且/INT0=1时,开启T0计数;若TR0=1但/INT0=0,则不能开启T0计数。若TR0=0,停止T0计数。TR1:定时/计数器1运行控制位。用法与TR0类似。定时器/计数器的工作方式1.定时/计数器工作方式0工作方式0是13位计数结构的工作方式,其计数器由TH的全部8位和TL的低5位构成,TL的高3位没有使用。当C/T=0时,多路开关接通振荡脉冲的12分频输出,13位计数器以次进行计数。这就是定时工作方式。当C/T=1时,多路开关接通计数引脚(T0),外部计数脉冲由银南脚T0输入。当计数脉冲发生负跳变时,计数器加1,这就是我们常称的计数工作方式定时/计数器工作方式0逻辑结构在工作方式0下,计数器的计数值由下式确定:N=213-X=8192-X计数值范围是:1~8192(213)定时器的定时值由下式确定:T=N*Tcy=(8192-X)*Tcy2.定时/计数器工作方式1当M1,M0=01时,定时/计数器处于工作方式1,此时,定时/及数器的等效电路如图所示可以看出,方式0和方式1的区别仅在于计数器的位数不同,方式0为13位,方式1则为16位,由TH0作为高8位,TL0为低8位,有关控制状态字与方式0相同。则只需将工作方式0的计算公式中的213改为216就可得到工作方式1的计数值计算公式和定时时间计算公式。定时/计数器工作方式1逻辑结构3.定时/计数器工作方式2当M1,M0=10时,定时/计数器处于工作方式2,此时,定时/及数器的等效电路如图所示定时/计数器工作方式2逻辑结构具有自动重装载功能,即自动加载计数初值,在这种工作方式中,16位计数器分为两部分,以TL0为计数器,以TH0作为预置寄存器,当计数溢出时,TH以硬件方法自动给计数器TL0重新加载。工作在方式2下,计数器的计数值由下式确定:N=28-X=256-X计数范围为:1~256定时器的定时值由下式确定:T=N*Tcy=(256-X)*Tcy4.定时/计数器工作方式3当M1,M0=11时,定时/计数器处于工作方式3,此时,定时/计数器的等效电路如图所示定时/计数器工作方式3等效电路工作方式3只适用于定时/计数器T0。当T0工作在方式3时,TH0和TL0被分为两个独立的8位计数器。TL0可作为定时器或计数器使用,占用了T0本身的控制信号TF0和TR0。TH0只能作为定时器使用,且占用了定时/计数器T1的两个控制信号TR1和TF1。当T0工作于方式3时,T1只能工作在方式0、方式1或方式2,并且由于已没有计数溢出标志位TF1可供使用,只能把计数溢出直接送给串行口,作串行口的波特率发生器使用。等效电路图如下方式3下的T1作为波特率发生器等效电路TH1(8位)TL1(8位或5位)12分频OSCTL1(8位)TH1(8位)12分频OSCC/T=0C/T=1C/T=0C/T=1串行口串行口T1(P3.5)T1(P3.5)T1工作方式0(或1)T1工作方式2定时/计数器应用举例在使用定时/计数器时,应做好四件事:设置TMOD以选择工作方式;计算并设置计数初值THX,TLX;设置IE、IP以规定中断的开放/禁止及优先级;设置TCON以启动/停止定时/计数器的工作。1.工作方式0的应用设单片机晶振频率fosc=6MHZ,使用定时器1以方式0产生周期为600μs的等宽方波脉冲,并由P1.7输出,以查询方式完成。解:(1)计算计数初值欲产生周期为600μs的等宽方波脉冲,只需在P1.7端以300μs为周期交替输出高低电平即可,因此定时时间应为300μs。设待求计数初值为N,则:(213-N)×2×10-6=300×10-6N=8042=1F6AH=0001111101101010B将低5位01010B=0A写入TL1,将高8位有效值11111011B=FBH写入TH1中。(2)TMOD初始化为把定时/计数器1设定为方式0,则M1M0=00。为实现定时功能应使C/=0,为实现定时器启动应使GATE=0,因此设定工作方式控制寄存器TMOD=00H。(3)由TR1启动和停止定时器TR1=1为启动,TR1=0为停止参考程序如下:ORG1000HSTART:MOVTCON,#00H;清TCONMOVTMOD,#00H;工作方式设定MOVTH1,#0FBH;计数初值设定MOVTL1,#0AHMOVIE,00H;关中断SETBTR1;启动TR1LOOP0:JBCTF1,LOOP1;查询是否溢出SJMPLOOP0LOOP1:MOVTH1,#0FBH;重设初值MOVTL1,#0AHCPLP1.7;输出取反SJMPLOOP0END2.工作方式1应用已知某生产线的传送带上不断地有产品单向传送,产品之间有较大间隔,如图6-6所示。使用光电开关统计一定时间内的产品个数。假定红灯亮时停止统计,红灯灭时才在上次统计结果的基础上继续统计,试用单片机定时/计数器T1的方式1完成该项产品的计数任务。解:(1)初始化:GATE=1,C/T=1,M0M1=01,故TMOD=11010000B=0D0H,TCON=00(2)T1在方式1时,溢出产生中断,且计数器回零,故在中断服务程序中,需用R0计数中断次数,以保护累积计数结果。(3)启动T1计数,开T1中断。参考程序如下:ORG0000HAJMPSTARTORG001BHAJMPT1INTORG0100HSTART:MOVSP,#60HMOVTCON,#00HMOVTMOD,#0D0HMOVTH1,#0FFH图6-7:产品传送带原理图MOVTL1,#0FFHMOVR0,#00HMOVP3,#28H;置P3.5,P3.3为输入状态SETBTR1SETBET1SETBEAMAIN:LCALLDISP…ORG0A00HT1INT:INCR0MOVTH1,#0FFHMOVTL1,#0FFHRETIDISP:…RETEND3.工作方式2的应用使用定时器T0以方式2产生200微秒定时,在P1.0输出周期为400微秒的连续方波。已知晶振频率fosc=6MHz。(1)计算计数初值(256-N)×2×10-6=200×10-6N=156=9CH(2)TMOD初始化工作方式2时,M1M0=10,实现定时功能C/=0,GATE=0。定时器1不用,无关位设定为0,可得TMOD=02H。参考程序如下:ORG000BHLJMPLOOP0ORG0200HSTART:MOVTCON,#00HMOVTMOD,#02H;定时器方式2MOVTH0,#9CH;计数初值MOVTL0,#9CHSETBEA;允许总中断SETBET0;T0中断允许SETBTR0;启动T0HERE:SJMPHERE;等待中断ORG0500H;中断服务程序LOOP0:CPLP1.0RETIEND4.工作方式3的应用假设有一个用户系统中已使用了两个外部中断源,并置定时器T1于方式2,作串行口波特率发生器用,现要求再增加一个外部中断源,并由P1.0口输出一个5Hz的方波(假设晶振频率为6MHz)。在不增加其它硬件开销时,可把定时/计数器T0置于工作方式3,利用外部引脚T0端作附加的外部中断输入端,把TL0预置为0FFH,这样在T0端出现由1至0的负跳变时,TL0溢出,申请中断,相当于边沿激活的外部中断源。在方式3下,TH0总是作8位定时器用,可以靠它来控制由P1.0输出的5kHz方波。由P1.0输出5kHz的方波,即每隔100μs使P1.0的电平发生一次变化。则TH0中的初始值:X=M-N=256-100/2=206。下面是有关的程序:MOVTL0,#0FFHMOVTH0,#206MOVTL1,#BAUD;BAUDMOVTH1,#BAUDMOVTMOD,#27H;置T0工作方式3,TL0工作于计数MOVTCON,#55H;启动定时器T0、T1,置外部中断0和1为边沿激活方式MOVIE,#9FH;开放全部中断TL0溢出中断服务程序(由000BH单元转来):TL0INT:MOVTL0,#0FFH;外部引脚T0引起中断处理程序RETITH0溢出中断服务程序(由001BH转来):TH0INT:MOVTH0,#206CPLP1.0RETI此处串行口中断服务程序、外中断0和外中断1的中断服务程序没有列出。5.定时器作外部中断源应用MCS—51单片机有两个定时器/计数器,当它们选择计数工作方式时,T0或T1引脚上的负跳变将使T0或T1计数器加1,若把定时器/计数器设置成计数工作方式,计数初值设定为满量程,一旦计数从外部引脚输入一个负跳变信号,计数器T0或T1加1,产生溢出中断,这样,便可把外部计数输入端T0(P3.4)或T1(P3.5)扩展为外部中断源输入。将T1设置为工作方式2(自动恢复常数)及外部计数方式,计数器TH1、TLl初值设置为FFH,当计数输入端T1(P3.5)发生一次负跳变,计数器加1并产生溢出标志,向CPU申请中断,中断处理程序使累加器A内容加1,送P1口输出,然后返回主程序。编程如下:ORG0000HAJMPMAINORG0013HAJMPINTMAIN:MOVSP,#53HMOVTMOD,#60H;T1方式2,计数MOVTL1,#0FFHMOVTH1,#0FFHSETBTR1;启动T1SETBET1;T1中断允许SETBEA;CPU中断开放LOOP:SJMPLOOP;等待INT:INCA;T1中断处理MOVP1,ARETI;中断返回END单片机音乐声音的频谱范围为20Hz-200KHz,人的耳朵能辨别的声音频率大概在200Hz-20KHz。利用定时/计数器可以方便地产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,改变定时/计数器的初值,即可改变频率,即改变音调。用延时程序或另一个定时器控制某一频率信号持续的时间长短,就可以控制节拍。音调和节拍是音乐的两大要素,有了音调和节拍,就可以演奏音乐了。演奏音乐主要是控制音符和节拍,音符对应于不同的声音频率,而节拍表达的是音符持续的时间。通过设
本文标题:第06章 MCS-51单片机定时计数器
链接地址:https://www.777doc.com/doc-4021665 .html