第6章MCS-51单片机的定时/计数器教学重点:定时器的4种工作方式,定时器的综合应用教学难点:定时器的4种工作方式教学时数:2学时教学内容:定时器的定时、计数功能及有关寄存器,定时器的4种工作方式,定时器的综合应用教学方式:课堂讲授教学要求:了解定时器的定时与计数功能。理解定时器的相关寄存器。掌握定时器的4种工作方式。掌握定时器的综合应用。6.1定时器的定时与计数功能1.定时器的计数功能所谓计数是指对单片机外部所发生的事件进行累计。外部事件的发生以脉冲的形式表示,因此计数功能的实质就是对外部脉冲进行计数。检测一个1到0的跳变需要2个机器周期,故外部输入脉冲的最高频率为振荡频率的1/24。虽然计数器对输入脉冲的占空比无特殊要求,但为了确保某个电平在变化之前被采样一次,要求电平的保持时间至少是一个完整的机器周期。2.定时器的定时功能定时器的定时功能也是通过计数的方式来实现的,只是此时的计数脉冲来自单片机内部,由振荡器经12分频后提供,即每个机器周期提供一个计数脉冲。所以在定时状态下,每个机器周期定时器自动加1直至计满溢出。6.2定时器的有关寄存器MCS-51内部定时器的各种功能均在寄存器TCON及TMOD的控制下实现。6.2.1定时器控制寄存器(TCON)6.2.2定时器工作方式控制寄存器(TMOD)注意该寄存器不能进行位寻址,只能使用字节传送指令设置其内容。6.3定时器的4种工作方式6.3.1工作方式0①最大计数量:②已知要求的计数量n,则计数器的初值为:③最大定时时间:④已知要求的定时时间t,则定时器的初值为:求得初值以后,应将x分配到TL0和TH0:【例6-1】设定时器T0选择工作方式0,定时状态,定时时间1ms,fosc=6MHz。试确定T0初值,计算最大定时时间tmax。解:①计算最大定时时间②计算计数器的初值转换为二进制数:x=1111000001100B取x的低5位送TL0的低5位,TL0的高3位取0,则(TL0)=00001100B=0CH。取x的高8位送给TH0,则(TH0)=11110000B=0F0H。【例6-2】设单片机晶振频率为fosc=12MHz,使用定时器T1以方式0产生周期为2ms的等宽连续方波,并由P1.0输出(用中断方式完成)。解:欲产生周期为2ms的等宽连续方波,只需在P1.0端以1ms为周期交替输出高低电平即可。因此定时时间应为1ms。①计算计数初值使用12MHz晶振,一个机器周期为1μs。设待求计数初值为x,则:将x表示为二进制形式:x=1110000011000B,故(TH1)=0E0H,(TL1)=18H。③TMOD寄存器初始化定时器T1为方式0:M1M0=00;定时状态:T/C=0;为实现定时器T1的运行控制,GATE=0。定时器T0不用,有关位设定为0。因此TMOD寄存器应初始化为00H。ORG0000HAJMPSTARTORG001BHLJMPPITO1ORG0100HSTART:MOVSP,#60HMOVTMOD,#00HMOVTH1,#0E0HMOVTL1,#18HCLRP1.0SETBEASETBET1SETBTR1SJMP$PITO1:MOVTL1,#18HMOVTH1,#0E0HCPLP1.0RETIEND6.3.2工作方式1【例6-3】设单片机晶振频率为fosc=12MHz,使用定时器T1以方式1产生周期为2ms的等宽连续方波,并由P1.0输出(用查询方式完成)。解:本例同例6-2,基本定时时间为1ms。①计算计数初值将x表示为二进制形式:x=1111110000011000B,故(TH1)=0FCH,(TL1)=18H。②TMOD寄存器初始化定时器T1为方式1:则M1M0=01;定时功能:T/C=0;为实现定时器T1的运行控制,GATE=0。定时器T0不用,有关位设定为0。因此TMOD寄存器应初始化为10H。ORG0000HSTART:MOVTMOD,#10HCLRP1.0MOVTL1,#18HMOVTH1,#0FCHSETBTR1LOOP:JNBTF1,$MOVTL1,#18HMOVTH1,#0FCHCLRTF1CPLP1.0SJMPLOOPEND6.3.3工作方式2相关参数的计算如下:【例6-4】用定时器T0以工作方式2计数,每计100次进行累加器加1操作。解:①计算计数初值所以,(TH0)=9CH,(TL0)=9CH②TMOD寄存器初始化M1M0=10,T/C=1,GATE=0因此(TMOD)=06HORG0000HAJMPSTARTORG0100HSTART:MOVIE,#00HMOVTMOD,#06HMOVTH0,#9CHMOVTL0,#9CHSETBTR0LOOP:JBCTF0,LOOP1SJMPLOOPLOOP1:INCASJMPLOOPEND例6-5使用定时器T0以方式2产生频率为5KHz的连续方波,并由P1.0输出(用查询方式完成)。设单片机晶振频率为fosc=6MHz。解:频率为5KHz,则周期为200μs,基本定时时间为100μs。①计算计数初值所以,(TH0)=0CEH,(TL0)=0CEH。②TMOD寄存器初始化定时器T0为方式2:则M1M0=10;定时功能:T/C=0;为实现定时器T0的运行控制,GATE=0。定时器T1不用,有关位设定为0。因此TMOD寄存器应初始化为02H。ORG0000HSTART:MOVTMOD,#02HCLRP1.0MOVTL0,#0CEHMOVTH0,#0CEHSETBTR0LOOP:JNBTF0,$CLRTF0CPLP1.0SJMPLOOPEND6.3.4工作方式31.工作方式3下的定时器02.工作方式3下的定时器16.4定时器的综合应用【例6-6】利用定时器1编写1s的定时程序(假设单片机系统的振荡频率为6MHz)。解:定时程序一般都做成子程序,以便被其他程序调用。用定时器来实现定时,主要考虑定时器的最大定时时间是否大于或等于要求的定时时间。如果不能满足要求,就要另外设置一个软计数器,对定时器基本定时的次数进行累计。1.确定定时器工作方式因为振荡频率为6MHz,所以定时器0在各种工作方式下的最大定时时间分别为:①方式0:②方式1:③方式2:可见三种工作方式下的最大定时时间都小于要求的定时时间,在这种状况下,为了减少中断或定时到的次数,避免响应误差或中间重置误差,使定时更精确,常选用定时时间最长的一种方式,即方式1。2.确定基本定时时间确定基本定时时间的原则:基本定时时间尽量长且必须与要求的定时时间成整数倍关系。据此可选择定时器的基本定时时间为125ms,控制软计数器的累计次数为8次,即可实现1s定时要求。3.计算初值因此,(TL0)=0DCH,(TH0)=0BH。ORG1000HDEL_1S:PUSHACCMOVTMOD,#10H;定时器1、方式1、定时状态MOVTL1,#0DCHMOVTH1,#0BH;送125ms定时初值MOVR2,#8;设置软计数器,使8×125ms=1sSETBTR1;启动定时器1LOOP:JNBTF1,$;判断基本定时(125ms)是否到MOVTL0,#0DCHMOVTH0,#0BHCLRTF1;清除溢出标志DJNZR2,LOOP;判断1s定时是否到CLRTR1;关闭定时器1RET;1s定时结束【例6-7】用单片机的定时器设计一个工频频率计,并用发光二极管以二进制形式显示所测频率(设单片机的振荡频率为6MHz)。在实际应用中,我们经常需要测量市电频率,如图6-6所示电路即是一个比较简单的在线频率测量电路。市电经过变压器降压后,经过零电压比较器将交流信号变为方波,为防止干扰,在比较器输出和定时/计数器的计数输入引脚T0之间加了一个施密特触发器。利用发光二极管来对测量到的当前频率进行显示。本频率计的测量方法采用直接测量法。即测量1秒内在T0引脚上出现的下降沿的个数,这就是市电的频率值。因为市电频率在50Hz左右,所以将定时器0设置为计数状态、方式2,用来对输入信号累计,其初值为0,即(TH0)=00H,(TL0)=00H;将定时器1设置为定时状态、方式1,基本定时时间为125ms,根据例6-6可知其初值为:(TH1)=0BH,(TL1)=0DCH。ORG0000HAJMPMAINORG001BHAJMPT_1ORG0100HMAIN:MOVSP,#60HMOVP1,#00MOVTMOD,#16HMOVTL0,#00HMOVTH0,#00HMOVTH1,#0BHMOVTL1,#0DCHMOVR3,#8SETBEASETBET1ORLTCON,#01010000BSJMP$T_1:DJNZR3,EXITANLTCON,#10001111BMOVA,TL0CPLAMOVP1,AMOVTH0,#00HMOVTL0,#00HMOVTH1,#0BHMOVTL1,#0DCHMOVR3,#8ORLTCON,#01010000BRETIEXIT:MOVTH1,#0BHMOVTL1,#0DCHRETIEND