4定时器计数器.docx

上传人:b****8 文档编号:23657455 上传时间:2023-05-19 格式:DOCX 页数:11 大小:19KB
下载 相关 举报
4定时器计数器.docx_第1页
第1页 / 共11页
4定时器计数器.docx_第2页
第2页 / 共11页
4定时器计数器.docx_第3页
第3页 / 共11页
4定时器计数器.docx_第4页
第4页 / 共11页
4定时器计数器.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

4定时器计数器.docx

《4定时器计数器.docx》由会员分享,可在线阅读,更多相关《4定时器计数器.docx(11页珍藏版)》请在冰豆网上搜索。

4定时器计数器.docx

4定时器计数器

定时器/计数器

1,定时器T1和T0是单片机内相互独立的两个资源。

2,定时器T1有两个加法计数器,分别是TH1和TL1;定时器T0有两个加法计数器,分别是TH0和TL0。

3,定时器的工作原理

(1)必须有可参考的基准时钟信号,即依靠晶振产生的时钟周期

(2)通过程序向定时器的加法计数器THx和TLx写入一个初值X。

(3)累加器在机器周期作用下进行累加,每个机器周期,其数值加1.

(4)当计数器由初值X累加到全1,然后再累加一次便会变成全0,并且产生溢出,此时累加的总次数为N次。

(5)这个溢出会使定时器的溢出标志位TFx由硬件自动设置为1,即TFx=1,从而产生定时事件。

该事件需要被CPU处理。

(6)定时器累加N次所用的时间也就是我们定时的时间T。

(7)CPU对定时事件的处理有两种方式:

一种是查询方式,一种是中断方式。

4,初值X的计算

(1)应用中,都是根据需要定时的时间T计算计数值N,再由N计算等到初值X。

用举例方式讲解X的计算方法。

(2)假设:

系统的时钟频率为12MHz(12*106),那么每秒钟一共有106个时钟周期。

即定时器的加法累加器每秒钟累加106次。

(3)如果定时为0.005秒,那么在0.005秒之内,定时器一共累加的次数为:

N=106次*0.005=5000。

(4)那么,定时器的初值X+5000=满值产生溢出定时事件发生TFx=1.

(5)所以X=满值-计数值5000

因此:

X=满值-计数值N

公式展开后:

X=满值-系统时钟频率/12*定时时间T

5,定时器的工作方式一用有4种

方式0:

13位的定时器/计数器

方式1:

16位的定时器/计数器

方式2:

8位的初值自动重装载定时器/计数器

方式3:

两个8位的定时器/计数器(只有T0有)

6,如果设置定时器的工作方式,那么对TMOD寄存器操作

7,定时器的启动控制位TRx和标志位TFx都是TCON寄存器中的控制位或状态位

8,设写入定时器的初值为X,那么在定时器各种方式下,X如何装载到初值寄存器中?

方式0(13位):

THx=X/32;TLx=X%32;

方式1(16位):

THx=X/256;TLx=X%256;

方式2(8位自动重装载):

THx=TLx=X;

9,如何确定使用定时器的哪种工作方式?

选择的依据:

根据计数值N来选定工作方式,原则是N<满值。

10,定时器每种工作方式下,初值的范围分别是多少?

范围是:

0~(满值-1)

方式0(13位):

0~8191;

方式1(16位):

0~65535;

方式2(8位自动重装载):

0~255;

11,如何进行定时器的初始化操作?

(1)必须根据要求选择方式,确定方式控制字,写入方式控制寄存器TMOD。

(2)必须根据要求计算定时/计数器的计数值,再由计数值求得初值,写入初值寄存器TH0、TL0(TH1、TL1)。

(3)可以根据需要开放定时/计数器中断(后面须编写中断服务程序):

置EA=1,ET0(ET1)=1

(4)必须设置定时/计数器控制寄存器TCON的值,启动定时/计数器开始工作:

TR0(TR1)=1

12,简答题:

设晶振频率为12MHz,如果定时时间为0.001秒,并且选择定时器T0工作,那么在13位工作方式和16位工作方式下,TH0和TL0寄存器的值分别应该是多少?

答:

计数值N=12*106/12*0.001=1000

13位方式下:

计数初值X=8192-1000=7192

TH0=7192/32=?

TL0=7192%32=?

16位方式下:

计数初值X=65536-1000=65436

TH0=65436/256=?

TL0=65436%256=?

13,按以下要求编程定时器的初始化程序:

设晶振频率为12MHz,如果定时时间为0.001秒,并且选择定时器T1,工作在方式一(16位)下,启用定时器中断。

TMOD=0x10;//设T1定工作方式1

TL1=(65536-1000)%256;

TH1=(65536-1000)/256;//写入初始值

TR1=1;

EA=1;

ET1=1;

14,简述MCS-51单片机内部的定时/计数器如何实现定时功能的

(1)定时器内部的计数器在机器周期作用下进行累加,每个机器周期,其数值加1.

(2)计数器由初值X累加到全1,然后再累加一次便会变成全0,并且产生溢出,此时累加的总次数为N次。

(3)这个溢出会使定时器的溢出标志位TFx由硬件自动设置为1,即TFx=1,从而产生定时事件。

该事件需要被CPU处理。

(4)定时器累加N次所用的时间也就是我们定时的时间T。

15,练习

(1)关于51单片机的定时器资源描述有误的一项是______

(A)51单片机内部一共包含两个独立的定时器资源

(B)每个定时器的核心部件是一个16位的加法计数器

(C)每个定时器的核心部件是一个16位的减法计数器

(D)定时器的核心部件对机器周期进行计数

(2)定时器工作时,其加法计数器对_____进行计数,从而实现定时功能

(A)时钟周期(B)指令周期(C)机器周期(D)状态

(3)定时器的工作方式选择需要设置______寄存器。

(A)TMOD(B)TCON(C)PCON(D)SCON

(4)启动定时器工作,需要设置______寄存器。

(A)TMOD(B)TCON(C)PCON(D)SCON

(5)启动定时器T1工作的语句是______

(A)TR1=1;(B)TR1=0;(C)TR0=1;(D)TR0=0;

(6)如果设置定时器T1工作在方式1,定时器T0工作在方式2,下面语句正确的一项是_______

(A)TMOD=0X21;(B)M1=1;M0=2;

(C)TMOD=0X12;(D)TCON=0X12;

(7)下面描述有误的一项是______

(A)定时器T1和T0都具有工作方式0

(B)定时器T1和T0都具有工作方式1

(C)定时器T1和T0都具有工作方式2

(D)定时器T1和T0都具有工作方式3

(8)定时器哪种工作方式具有初值自动重装载功能______

(A)方式0(B)方式1(C)方式2(D)方式3

(9)定时器哪种工作方式是16位的______

(A)方式0(B)方式1(C)方式2(D)方式3

(10)设晶振频率为12MHz,如果定时时间为0.005秒,并且选择定时器T0工作在13位工作方式,则计数器的初值设置应为______

(A)TH1=99;TL1=24;(B)TH1=156;TL1=8;

(C)TH1=12;TL1=120;(D)TH1=19;TL1=136;

(11)设晶振频率为12MHz,如果定时时间为0.005秒,并且选择定时器T0工作在16位工作方式,则计数器的初值应为______

(A)TH1=99;TL1=24;(B)TH1=156;TL1=8;

(C)TH1=12;TL1=120;(D)TH1=19;TL1=136;

(12)设晶振频率为12MHz,则加法累加器需要累加多少次溢出可以实现定时时间为0.005秒______

(A)5000(B)60000(C)5536(D)3192

(13)对下面操作描述有误的一项是______

(A)TR1=1;功能是设置定时器T1启动

(B)TF1=0;功能是清除T1的溢出标志位

(C)IT1=1;功能是使T1工作在定时方式下

(D)PT1=1;功能是设置T1为高中断优先级

(14)如果计算定时器T1的计数值N=5000,则不能选择哪种工作方式______

(A)13位(B)16位(C)8位初值自动重装载(D)13位或16位

(15)关于定时器的初始化操作描述有误的一项是_______

(A)必须设置计数初值

(B)必须设置工作方式

(C)必须启动定时器

(D)必须开放中断

(16)定时/计数器的方式0为_______位计数器。

(A)8位(B)13位(C)16位(D)自动重装入的8位计数器

(17)定时/计数器的定时是指:

___________。

(A)对时间计数(B)外部事件定时

(C)对内部时钟计数(D)外部事件计数

(18)当TMOD中的M1,M0为10时,定时器的工作方式为___________。

(A)方式0(B)方式1(C)方式2(D)方式3

(19)定时器1溢出后将对___________标志置1。

(A)IT1(B)TR1(C)TF1(D)TR0

(20)下列关于TH0和TL0的叙述正确的是___________。

(A)TH0和TL0均为16位寄存器。

(B)TH0存放计数值低8位,TL0存放计数值高8位。

(C)TH0存放计数值高8位,TL0存放计数值低8位。

(D)TH0和TL0必须为相同的值。

(21)当定时器工作在方式1,系统采用12MHh晶振时,若要定时器定时50ms,则定时器的初始值为___________。

(A)50(B)50000(C)65536(D)15536

(22)定时器是工作在计数还是定时方式由TMOD的___________位决定。

(A)C/T(B)GATE(C)IT(D)IE

(23)定时器T1的溢出标志为TF1,采用中断方式,当定时器溢出时,若CPU响应中断后,该标志___________。

(A)由软件清零(B)由硬件清零(C)随机状态(D)AB都可以

(24)定时器T0的溢出标志位TF0,采用查询方式,若查询到有溢出时,该标志___________。

(A)由软件清零        (B)由硬件自动清零         

(C)随机状态          (D)AB都可以

(25)决定定时器T0的定时时间间隔的寄存器是___________。

(A)TH0,TL0     (B)TH1,TL1    (C)TH0,TL1     (D)TH1,TL0

(26)MCS-51系列单片机内部有___________个16位可编程定时/计数器。

(A)1个(B)2个(C)3个(D)4个

16,编程:

P2口分别连接发光二极管的阴极,要求使用定时器定时,控制发光二极管的闪烁,且闪烁的频率为1秒钟,设晶振频率为12MHz。

【示例代码】

//定时0.05秒,20个0.05秒是1秒,N=50000,则X=65536-5000

#include

voidinitT0(){

TMOD=0X01;//设置T0工作在方式1下

TH0=(65536-50000)/256;//

TL0=(65536-50000)%256;

TR0=1;

EA=1;//开放T0的中断

ET0=1;

}

voidT0_service(void)interrupt1{

staticunsignedcharcnt=0;//=20,说明1秒钟到

TH0=(65536-50000)/256;//重新装载初值,使定时器重新工作

TL0=(65536-50000)%256;

cnt++;

if(cnt==20){

cnt=0;

P2=~P2;//led闪烁

}

}

main(){

initT0();

while

(1);

}

17,编程:

P2口分别连接发光二极管的阴极,要求使用定时器定时,控制发光二极管流水(1个亮,7个灭),且流水频率为1秒钟,设晶振频率为12MHz。

【分析】本道题目与上题的区别仅在于1秒钟后的操作有所不同,所以其余部分代码完全一样,只是中断函数需要更改:

voidT0_service(void)interrupt1{

staticunsignedcharldata=0xfe;

staticunsignedcharcnt=0;//=20,说明1秒钟到

TH0=(65536-50000)/256;//重新装载初值,使定时器重新工作

TL0=(65536-50000)%256;

cnt++;

if(cnt==20){

cnt=0;

P2=ldata;

ldata=(ldata<<1)|0x1;

if(ldata==0xff)

ldata=0xfe;

}

}

18,编程:

使用定时器T0的中断方式,使P2.1引脚能够输出周期为1S的方波,设晶振频率为12MHz。

【示例代码】

#include

sbitP21=P2^1;

voidinitT0(){

TMOD=0X01;//设置T0工作在方式1下

TH0=(65536-50000)/256;//

TL0=(65536-50000)%256;

TR0=1;

EA=1;//开放T0的中断

ET0=1;

}

voidT0_service(void)interrupt1{

staticunsignedcharcnt=0;//=20,说明1秒钟到

TH0=(65536-50000)/256;//重新装载初值,使定时器重新工作

TL0=(65536-50000)%256;

cnt++;

if(cnt==10){//0.5秒时间到,需要更改输出

cnt=0;

P21=~P21;

}

}

main(){

initT0();

while

(1);

}

19,编程:

已知晶振频率为12MHz,使用定时器T0定时,要求P1.0引脚输出高电平宽度为10ms,低电平宽度为20ms的矩形波(注:

1s=1000ms)。

【示例程序】

//定时10ms,加法计数器累加N=1000000*0.01=10000,则X=65536-10000

/定时20ms,加法计数器累加N=1000000*0.02=20000,则X=65536-20000

#include

sbitP10=P1^0;

voidinitT0(){

TMOD=0X01;//设置T0工作在方式1下

TH0=(65536-10000)/256;//

TL0=(65536-10000)%256;

TR0=1;

EA=1;//开放T0的中断

ET0=1;

}

voidT0_service(void)interrupt1{

staticbitflag=1;

if(flag){

P10=0;

TH0=(65536-20000)/256;//

TL0=(65536-20000)%256;

}

else{

P10=1;

TH0=(65536-10000)/256;//

TL0=(65536-10000)%256;

}

flag=~flag;

}

main{

initT0();

P10=1;

while

(1);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 销售营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1