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