首页 理论教育 能够准确描述内容,并包含目标关键词

能够准确描述内容,并包含目标关键词

时间:2023-11-16 理论教育 版权反馈
【摘要】:3)根据需要,开放定时器中断:对寄存器IE置初值。例5-3:若晶振频率为6MHz,当定时/计数器工作方式为2时,初值为56时的定时时间。可见,定时初值与单片机所选的晶振、定时/计数器的工作方式和所要求的定时时间有关。要实现1s的定时,先用定时/计数器1做一个50ms的定时器,再循环20次。在这种情况下,定时/计数器的溢出标志位TF1、TF0可由程序指令清0。

能够准确描述内容,并包含目标关键词

首先要通过软件对MCS-51系列单片机进行初始化。初始化包括下述几个步骤:

1)确定工作方式字:对TMOD寄存器正确赋值

2)确定定时器初值:计算初值,并直接将初值写入寄存器THx、TLx。由于计数器采用加法计数,通过溢出产生中断标志,因此不能直接输入所需的“计数值”,而是要从计数器的最大值减去“计数值”才是应置入THx、TLx的初值。

3)根据需要,开放定时器中断:对寄存器IE置初值。

4)启动定时器:对寄存器TCON中的TR1或TR0置1,置1后计数器即按规定的工作方式和初值开始计数。

设计数器的最大值为M,在不同的工作方式中,M可以为213(方式0)、216(方式1)、28(方式2、3),则置入的初值可这样来计算,即计数方式时,初值=M-“计数值”;定时方式时,初值=M-

(“定时时间”/T)。其中,T为机器周期,是单片机时钟脉冲周期的12倍。若定时/计数器工作在方式1,则N=16,计数容量为65536。若从0开始计数,当计到第65536个

计数时,计数器内容由FFFFH变为1000H,因16位加一计数器只能容纳16位数,所以计数产生溢出,

定时/计数器的中断标志位(TF0或TF1)被置1,请求中断。与此同时,计数器内容变为0。定时/计

数器计数起点不一定要从0开始。计数起点可根据需要预先设定为0或任何小于计数容量的值。这个预

先设定的计数起点值称为“计数初值”(以下简称初值)。显然,从该初值开始计数,直到计数溢出,

计数容量为(2N-初值)。所以,当定时/计数器的工作方式确定后,其所能计的计数容量(2N-初值)

就由初值决定。定时/计数器作定时器用时的初值计算:定时时间=(2N-初值)×机器周期初值=2N-定时时间/机器周期其中,机器周期=12/fOSC。所以又有初值=2N-(定时时间×fOSC)/12。显然,初值为0时的定时时间最大,称最大定时时间。例5-1:设定时时间为2ms,机器周期Tp为2μs,可求得定时计数次数x

978-7-111-54295-7-Chapter05-23.jpg

解:设选用工作方式1,N=16,则应设置的定时计数初值。

x)补=2N-x=216-x=65536-61000=64536=FC18H则将其分解成两个8位十六进制数,低8位18H装入TLx,高8位FCH装入THx中。

工作方式0、1、2的最大计数次数分别为8192、65536和256。对于外部事件计数模式,只需根据实际计数次数值以28、213、216为模求补,求补后变换成两个十六进制码即可。

例5-2:①若晶振频率为12MHz,当定时/计数器分别工作在工作方式为1、2的情况下的最大定时时间为多少?②求工作方式为1时定时时间为50ms的初值;③求工作方式为2时定时时间为200μs时的初值。

解:因晶振频率为12MHz,所以机器周期,即定时脉冲的周期就是1μs,即10-6s。方式1、2的N分别为16、8。

①由公式:定时时间=(2N-初值)×机器周期,分别求得:

方式1时,最大定时时间为65536μs=65.536ms。

方式2时,最大定时时间为256μs。

②当定时时间为50ms即50×10-3s,代入公式,初值=2N-定时时间/机器周期,求得初值为15536。

③当定时时间为200μs即200×10-6s,代入公式,初值=2N-定时时间/机器周期,求得初值为56。

例5-3:若晶振频率为6MHz,当定时/计数器工作方式为2时,初值为56时的定时时间。

解:因晶振频率为6MHz,所以,机器周期,即定时脉冲的周期就是2μs。因工作方式为2,所以,N=8。将它们和初值56代入公式,求得定时时间为400×10-6s=400μs。

可见,定时初值与单片机所选的晶振、定时/计数器的工作方式和所要求的定时时间有关。初值越大,定时时间越短。

978-7-111-54295-7-Chapter05-24.jpg

图5-7 P1.0输出周期为400μs方波(www.xing528.com)

例5-4:如图5-7所示,若fOSC=12MHz,在P1.0输出周期为400μs方波,定时/计数器为工作方式2,问计数初值为多少?并编写初始化程序。

解:机器周期为12/fOSC=1μs

定时时间为(256-x)×1μs=200μs

x=56=38H

定时/计数器为工作方式2,初始化程序如下:

MOV TMOD,#02H

SETB ET0

SETB EA

MOV TL0,#38H

MOV TH0,#38H

SETB TR0

例5-5:用定时/计数器1(T1)的工作方式1,采用查询方法设计一个定时1s的程序段。

解:问题分析,这是采用查询定时器/计数器1(T1)溢出标志方法设计延时子程序的例子,因采用12MHz的晶振频率,最大定时为65.536ms。要实现1s的定时,先用定时/计数器1做一个50ms的定时器,再循环20次。设置R0寄存器初值为20。每查询到定时器溢出标志为1时,则进行清溢出标志、重置定时器初值、判R0中内容减1后是否为0等操作。若非0返回LP1作循环,若为0(已循环20次)则结束子程序。因采用查询方法,而非中断方法,所以不要开通中断允许。在这种情况下,定时/计数器的溢出标志位TF1、TF0可由程序指令清0。程序设计如下:

DELAY:MOV R0,#20;置50ms定时循环计数初值

MOV TMOD,#10H;置T1工作方式1

MOV TH1,#03CH;置T1初值

MOV TL1,#0B0H

SETB TR1;启动T1

LP1:JB TF1,LP2;若查询溢出标志位TF1为1跳转到LP2

SJMP LP1;未到50ms定时继续加1计数

LP2:CLR TF1;清TF1为0

MOV TH1,#3CH;重置定时器初值

MOV TL1,#0B0H

DJNZ R0,LP1;未到1s继续循环

CLR TR1;关T1

SJMP $

END

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈