第05章 单片机定时计数器 习题解答解读.docx

上传人:b****1 文档编号:14427480 上传时间:2023-06-23 格式:DOCX 页数:18 大小:35.65KB
下载 相关 举报
第05章 单片机定时计数器 习题解答解读.docx_第1页
第1页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第2页
第2页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第3页
第3页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第4页
第4页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第5页
第5页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第6页
第6页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第7页
第7页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第8页
第8页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第9页
第9页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第10页
第10页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第11页
第11页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第12页
第12页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第13页
第13页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第14页
第14页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第15页
第15页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第16页
第16页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第17页
第17页 / 共18页
第05章 单片机定时计数器 习题解答解读.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

第05章 单片机定时计数器 习题解答解读.docx

《第05章 单片机定时计数器 习题解答解读.docx》由会员分享,可在线阅读,更多相关《第05章 单片机定时计数器 习题解答解读.docx(18页珍藏版)》请在冰点文库上搜索。

第05章 单片机定时计数器 习题解答解读.docx

第05章单片机定时计数器习题解答解读

第05章单片机定时计数器习题解答

一、填空题

1.MCS-51单片机中有   2   个   16    位的定时器/计数器。

2.定时器/计数器T0可以工作于方式  0、1、2、3    。

3.方式0为13位定时器/计数器。

4.若系统晶振频率为12MHz,则T0工作于定时方式1时最多可以定时   65536  µs。

5.欲对300个外部事件计数,可以选用定时器/计数器T1的模式  0 或模式  1  。

6.TMOD中的M1M0=11时,定时器工作于方式3。

7.若系统晶振频率为6MHz,则定时器可以实现的最小定时时间为2µs。

8.MCS-51单片机工作于定时状态时,计数脉冲来自单片机内部的机器周期。

9.MCS-51单片机工作于计数状态时,计数脉冲来自单片机外部事件。

10.当GATE=0时,则当软件控制位TR0=1时启动T0开始工作。

二、简答题

1.定时器/计数器T0和T1各有几种工作方式?

简述每种工作方式的特点。

如何控制定时器/计数器的工作方式?

答:

T0可以工作于方式0,1,2,3;T1可以工作于方式0,1,2

方式0:

是13位定时/计数器,由TLX的低5位(TLX的高3位未用)和THX高8位组成。

方式1:

TLX和THX组成16位定时/计数器。

方式2:

方式2为自动重装初值的8位定时/计数器。

方式3只适用于定时/计数器T0,当T0工作在方式3时,TH0和TL0被分为两个独立的8位计数器。

TMOD用来控制定时计数器的工作方式,位结构如下:

D7

D6

D5

D4

D3

D2

D1

D0

GATE

M1

M0

GATA

M1

M0

←T1方式字段→

←T0方式字段→

C/T:

定时或计数功能选择位。

1为计数方式,0为定时方式。

GATE:

门控位,用于控制定时/计数器的启动是否受外部中断请求信号的影响。

GATE=0,软件控制位TR0(TR1)=1启动定时/计数器开始计数。

GATE=1,软件控制位TR0(TR1)=1,INT0(INT1)引脚为高电平时启动定时/计数器开始计数。

M1、M0:

定时/计数器工作方式选择位,如下表所示。

M1

M0

工作方式

方式说明

0

0

方式0

13位定时/计数器

0

1

方式1

16位定时/计数器

1

0

方式2

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

1

1

方式3

T0为两个独立的8位计数器,T1为波特率发生器

2.设MCS-51单片机的晶振频率fOSC=6MHz,分别讨论定时器/计数器0在各种工作方式下的最长定时时间。

答:

由fosc=6MHz可知,一个机器周期T=2us,由于是加1计数,所以最长定时应是计数初值最小时(即为0时)的定时时间。

方式0:

(213–0)×2us=214us=16384us=16.384ms

方式1:

(216–0)×2us=217us=131.072ms

方式2、3:

(28–0)×2us=29us=0.512ms

当fosc=6MHz,即T=2us时各种方式下的定时时间,若fosc=12MHz,则最长定时时间将缩短一半。

3.编写程序3.编写程序从P1.0引脚输出频率为1KHz的方波。

设晶振频率为6MHz。

答:

利用T1定时中断。

解:

fosc=6MHz。

1机器周期=2uS。

1KHz方波周期=1mS,半个方波周期=500uS。

500uS÷2uS=250

若选择方式2工作,计算初值:

256-250=6

ORG0000H

AJMPMAIN

ORG001BH;T1的中断矢量

LJMPT1INT

MAIN:

MOVTMOD,#20H

MOVTH0,#6

MOVTL0,#6

SETBET1

SETBEA

SETBTR1

HERE:

AJMPHERE;原地等待中断

T1INT:

CPLP1.0;中断服务:

P1.0取非

RETI;中断返回

END

4.利用定时器/计数器1定时中断控制

1.编写程序用P1.7驱动LED发光二极管亮1秒灭1秒地闪烁,设时钟频率为12MHz。

答:

时钟频率为12MHz,1个机器周期1us,1秒闪烁一次,0.5秒P1.7求反1次。

0.5S=500ms=500000us,方式1最大计数65536,让T1工作于方式1,计数50000次中断一次,初值=65536-50000=15536=3CB0H

用R7记录中断次数,计满10个中断为500ms秒。

ORG0000H

AJMPMAIN

ORG001BH

AJMPPT1INT

ORG0030H

START:

MOVR7,#00H

MOVTMOD,#10H

MOVTL1,#0B0H

MOVTH1,#3CH

SETBEA

SETBET1

SETBTR1

HERE:

SJMPHERE

PT1INT:

MOVTL1,#0B0H

MOVTH1,#03CH

INCR7

CJNER7,#10,PEND

MOVR7,#00H

CPLP1.7

PEND:

RETI

END

5.利用MCS-51单片机定时器/计数器设计一个数字秒表。

定时范围:

00-99秒;两位LED数码管显示。

设时钟频率为6MHz。

基本原理:

利用定时器方式2产生0.5毫秒时间基准,循环2000次,定时1秒。

答:

电路如图所示

把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“数码显示模块”区域中的任一个a-h端口上;要求:

P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。

把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“数码显示模块”区域中的任一个a-h端口上;要求:

P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。

把“单片机系统“区域中的P3.5/T1用导线连接到”独立式键盘“区域中的SP1端口上;

开始时,显示“00”,第1次按下SP1后就开始计时。

第2次按SP1后,计时停止。

第3次按SP1后,计时归零

选择定时工作方式2;工作方式2就具有自动重装载功能,即自动加载计数初值,在这种工作方式中,16位计数器分为两部分,即以TL0为计数器,以TH0作为预置寄存器,初始化时把计数初值分别加载至TL0和TH0中,当计数溢出时,由预置寄存器TH0以硬件方法自动给计数器TL0重新加载。

汇编源程序

TCNTAEQU30H;时间计数

TCNTBEQU31H

SECEQU32H

KEYCNTEQU33H;按键计数

SP1BITP3.5

ORG00H

LJMPSTART

ORG0BH

LJMPINT_T0

START:

MOVKEYCNT,#00H

MOVSEC,#00H

MOVA,SEC

MOVB,#10

DIVAB

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

MOVA,B

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP2,A

MOVTMOD,#02H;

SETBET0

SETBEA

WT:

JBSP1,WT;直接寻址位为1转移(按键按下时SP1为0)

LCALLDELY10MS

JBSP1,WT;接着SP1变为1

INCKEYCNT

MOVA,KEYCNT

CJNEA,#01H,KN1

SETBTR0;TR0置1,启动定时器T0,允许定时/计数器计数

MOVTH0,#06H;用于自动恢复定时初值

MOVTL0,#06H;置T0定时初值250us

MOVTCNTA,#00H

MOVTCNTB,#00H

LJMPDKN

KN1:

CJNEA,#02H,KN2

CLRTR0

LJMPDKN

KN2:

CJNEA,#03H,DKN;可以不要

MOVSEC,#00H

MOVA,SEC

MOVB,#10

DIVAB

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

MOVA,B

MOVDPTR,#TABLE;可以不要

MOVCA,@A+DPTR

MOVP2,A

MOVKEYCNT,#00H

DKN:

JNBSP1,$;直接寻址为0转移

LJMPWT

DELY10MS:

MOVR6,#20

D1:

MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET;子程序返回

INT_T0:

INCTCNTA

MOVA,TCNTA

CJNEA,#100,NEXT

MOVTCNTA,#00H

INCTCNTB

MOVA,TCNTB

CJNEA,#4,NEXT

MOVTCNTB,#00H

INCSEC

MOVA,SEC

CJNEA,#100,DONE

MOVSEC,#00H

DONE:

MOVA,SEC

MOVB,#10

DIVAB

MOVDPTR,#TABLE;可以不要

MOVCA,@A+DPTR

MOVP0,A

MOVA,B

MOVDPTR,#TABLE;可以不要

MOVCA,@A+DPTR

MOVP2,A

NEXT:

RETI

TABLE:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

END

C语言源程序

#include

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00};

unsignedcharsecond;

unsignedcharkeycnt;

unsignedinttcnt;

voidmain(void)

{

unsignedchari,j;

TMOD=0x02;

ET0=1;

EA=1;

second=0;

P0=dispcode[second/10];

P2=dispcode[second%10];

while

(1)

{

if(P3_5==0)

{

for(i=20;i>0;i--)

for(j=248;j>0;j--);

if(P3_5==0)

{

keycnt++;

switch(keycnt)

{

case1:

TH0=0x06;

TL0=0x06;

TR0=1;

break;

case2:

TR0=0;

break;

case3:

keycnt=0;

second=0;

P0=dispcode[second/10];

P2=dispcode[second%10];

break;

}

while(P3_5==0);

}

}

}

voidt0(void)interrupt1using0

{

tcnt++;

if(tcnt==400)

{

tcnt=0;

second++;

if(second==100)

{

second=0;

}

P0=dispcode[second/10];

P2=dispcode[second%10];

}

}

三、Proteus仿真

1.在Proteus下,仿真实现5.4节内容。

答:

全自动洗衣机定时控制Proteus仿真

洗衣机中所需的定时功能并不复杂,可以利用单片机提供的定时器方便实现。

设洗衣机有三段定时时间,分别为:

进水阶段定时2秒,洗涤阶段定时4秒,甩干阶段定时2秒。

并分别用三个LED发光二极管表示进水、洗涤、甩干三个环节的工作状态。

其中如果发光二极管A亮,表示进水工作正在进行;发光二极管B亮,表示洗涤工作正在进行;发光二极管C亮,表示甩干工作正在进行。

发光二极管熄灭时,说明相应的定时已到,工作停止。

图5-7给出了Proteus仿真电路图。

图5-6全自动洗衣机定时控制PROTUES仿真电路图

图5-6中,S表示洗衣机启动开关,开关按下洗衣机开始工作。

首先是进水定时控制,表示正在进水的LED发光二极管A点亮。

当进水控制的定时时间到时,进水工作停止,发光二极管A灭灯;接着开始洗涤工作定时,发光二极管B点亮;洗涤工作结束后,开始甩干工作定时,发光二极管C点亮。

当洗衣功能结束时,三个指示灯都熄灭,表示洗衣工作结束,并接通扬声器LS1鸣声提醒。

汇编语言参考程序如下:

ORG0000H;在0000H单元存放转移指令

LJMPMAIN;转移到主程序

ORG000BH;计数/定时器T0的中断入口地址

LJMPTime0;转到中断子程序Time0

ORG0100H;主程序从0100H开始

MAIN:

JBP2.0,MAIN;判按键是否按下,为0即按下,顺序执行,否则等待。

LACLLDISPLY;有键按下,延时去抖动

JBP2.0,MAIN;再判有键按下

MOVP1,#0EH;确定键按下,A灯亮,开始放水定时

MOVR0,#00H;R0放3个阶段的工作标志

MOVR1,#00H;R1放定时器的中断计数

SETBEA;开中断总开关

SETBET0;开定时器T0的中断开关

MOVTMOD,#01H;设定时器T0工作方式1

MOVTH0,#3CH;定时50ms高8位初值

MOVTL0,#0B0H;定时50ms低8位初值

SETBTR0;允许计数

SIMP$;循环等待

END;汇编结束

Time0:

;定时器T0中断子程序

CJNER0,#00H,L1;R0的内容为标志,若R0=0,执行第1阶段定时(放水功能)

INCR1;R1内容加1

CJNER1,#40H,L4;若累计满40次,即计时满2s

MOVP1,#0DH;A灯灭,结束放水,B灯亮,开始洗涤

MOVR1,#00H;R1内容清0,重新从0开始计数

INCR0;R0内容加1,准备第2阶段的定时

SJMPL4;转L4,送初值,中断返回

L1:

CJNER0,#01H,L2;若R0=1,执行第2阶段定时(洗涤功能)

INCR1;R1内容加1

CJNER1,#80H,L4;若累计满80次,即计时满4s

MOVP1,#0BH;B灯灭,结束洗涤,C灯亮,开始甩干

MOVR1,#00H;R1内容清0,重新从0开始计数

INCR0;R0内容加1,准备第3阶段的定时

SJMPL4;转L4,送初值,中断返回

L2:

CJNER0,#02H,L3;若R0=2,执行第3阶段定时(甩干功能)

INCR1;R1内容加1

CJNER1,#40H,L4;若累计满40次,即计时满2s

MOVR1,#00H;将Countor清0,重新从0开始计数

INCR0;R0内容加1,准备第4阶段的工作

L3:

MOVP1,#07H;灯全灭,洗衣机结束工作

CPLP3.7;扬声器提醒

L4:

MOVTH0,#3CH;定时器T1的高8位重新赋初值

MOVTL0,#0B0H;定时器T1的低8位重新赋初值

RETI;中断返回

C语言参考程序如下:

#include//包含51单片机寄存器定义的头文件

sbitP20=P2^0;//将P20位定义为P2.0引脚

sbitP37=P3^7;//将P37位定义为P3.7引脚

unsignedcharCountor;//设置全局变量,储存定时器T1中断次数

unsignedcharf=0;//设置全局变量,作为区分不同阶段的定时

voiddelay1()//延时函数

{

intq;

for(q=0;q<500;q++);

}

voidmain(void)//主函数

{

if(P20==0)//若P2.0=0,说明键按下,执行语句,否则一直等待。

{

delay1();//有键按下,延时去抖动

if(P20==0)//再判有键按下

{

P1=0x0e;//A灯亮,开始放水定时

EA=1;//开总中断

ET0=1;//定时器T0中断允许

TMOD=0x01;//使用定时器T0的模式1

TH0=(65536-46083)/256;//定时器T0的高8位赋初值,定时50ms

TL0=(65536-46083)%256;//定时器T0的高8位赋初值

TR0=1;//启动定时器T0

}

while

(1);//无限循环等待中断

}

}

voidTime0(void)interrupt1using0//“interrupt”声明函数为中断服务函数

{

if(f==0)//f为标志变量,若f=0,执行第1阶段定时(放水功能)

{

Countor++;//Countor加1

if(Countor==40)//若累计满40次,即计时满2s

{

P1=0x0d;//A灯灭,结束放水,B灯亮,开始洗涤

Countor=0;//将Countor清0,重新从0开始计数

f++;//f加1,准备第2阶段的定时

}

}

if(f==1)//若f=1,执行第2阶段定时(洗涤功能)

{

Countor++;//Countor加1

if(Countor==80)//若累计满80次,即计时满4S

{

P1=0x0B;//B灯灭,结束洗涤,C灯亮,开始甩干

Countor=0;//将Countor清0,重新从0开始计数

f++;//f加1,准备第3阶段的定时

}

}

if(f==2)//若f=2,执行第3阶段定时(甩干功能)

{

Countor++;//Countor加1

if(Countor==40)//若累计满60次,即计时满3S

{

P1=0x07;//灯全灭,洗衣机结束工作

Countor=0;//将Countor清0,重新从0开始计数;

f++;//f加1,准备进入第4阶段。

}

}

if(f==3)//若f=3,执行进入第4阶段工作(扬声器提醒)

{

P1=0x07;//灯全灭,洗衣机结束工作

P37=~P37;//扬声器提醒

Countor=0;//将Countor清0,重新从0开始计数;

}

TH1=(65536-46083)/256;//定时器T1的高8位重新赋初值

TL1=(65536-46083)%256;//定时器T1的低8位重新赋初值

}

2.在Proteus下,仿真实现简答题第5题内容。

答:

请参考第5题答案。

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2