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

上传人:b****8 文档编号:12696410 上传时间:2023-06-07 格式:DOCX 页数:21 大小:231.20KB
下载 相关 举报
第05章单片机定时计数器习题集解答.docx_第1页
第1页 / 共21页
第05章单片机定时计数器习题集解答.docx_第2页
第2页 / 共21页
第05章单片机定时计数器习题集解答.docx_第3页
第3页 / 共21页
第05章单片机定时计数器习题集解答.docx_第4页
第4页 / 共21页
第05章单片机定时计数器习题集解答.docx_第5页
第5页 / 共21页
第05章单片机定时计数器习题集解答.docx_第6页
第6页 / 共21页
第05章单片机定时计数器习题集解答.docx_第7页
第7页 / 共21页
第05章单片机定时计数器习题集解答.docx_第8页
第8页 / 共21页
第05章单片机定时计数器习题集解答.docx_第9页
第9页 / 共21页
第05章单片机定时计数器习题集解答.docx_第10页
第10页 / 共21页
第05章单片机定时计数器习题集解答.docx_第11页
第11页 / 共21页
第05章单片机定时计数器习题集解答.docx_第12页
第12页 / 共21页
第05章单片机定时计数器习题集解答.docx_第13页
第13页 / 共21页
第05章单片机定时计数器习题集解答.docx_第14页
第14页 / 共21页
第05章单片机定时计数器习题集解答.docx_第15页
第15页 / 共21页
第05章单片机定时计数器习题集解答.docx_第16页
第16页 / 共21页
第05章单片机定时计数器习题集解答.docx_第17页
第17页 / 共21页
第05章单片机定时计数器习题集解答.docx_第18页
第18页 / 共21页
第05章单片机定时计数器习题集解答.docx_第19页
第19页 / 共21页
第05章单片机定时计数器习题集解答.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

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

第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或模

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

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

8.

单片机内部的机器周

单片机外部事件

启动T0开始工作。

MCS-51单片机工作于定时状态时,计数脉冲来自期_。

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

10.当GATE=0寸,则当软件控制位TR0=1时

简答题

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

C/T

M1

M0

GAT

C/T

M1

M0

1

A

JT1方式子段t

JT0方式字段

C/T:

定时或计数功能选择位。

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

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

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

GATE=1软件控制位TR0(TR1)=1,INTO(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单片机的晶振频率fOS=6MHz分别讨论定时器/计数器0在各种工作方式下的最

长定时时间。

答:

由fosc=6MHz可知,一个机器周期T=2us,由于是加1计数,所以最长定时应是

计数初值最小时(即为0时)的定时时间。

方式0:

(213-0)x2us=214us=16384us=16.384ms

方式1:

(216-0)X2us=217us=131.072ms

方式2、3:

(28-0)x2us=29us=0.512ms当fosc=6MHz即T=2us时各种方式下的定时时间,若fosc=12MHz,则最长定时时间将缩短一半。

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

设晶振频率为6MHz

答:

禾U用T1定时中断。

fosc=6MHz1机器周期=2uS。

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

500uS-2uS=250

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

256-250=6

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定时中断控制P1.7驱动LED发光二极管亮1秒灭1秒地闪烁,设时

钟频率为12MHz

答:

时钟频率为12MHz1个机器周期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

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秒。

答:

电路如图所示

把“单片机系统”区域中的PO.O/ADO—P0.7/AD7端口用8芯排线连接到“数

码显示模块”区域中的任一个a—h端口上;要求:

PO.O/ADO对应着a,P0.1/AD1

对应着b,……,PO.7/AD7对应着h0

把“单片机系统”区域中的P2.O/A8—P2.7/A15端口用8芯排线连接到“数

码显示模块”区域中的任一个a—h端口上;要求:

P2.O/A8对应着a,P2.1/A9

对应着b,……,P2.7/A15对应着ho

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

SP1端口上;

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

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

第3次按SP1后,计时归零

选择定时工作方式2;工作方式2就具有自动重装载功能,即自动加载计数初值,在这

始化时把计数初值分别加载至TL0和TH0中,当计数溢出时,由预置寄存器TH0以硬件方法自动给计数器TL0重新加载。

汇编源程序

TCNTA

EQU30H

;时间计数

TCNTB

EQU31H

SEC

EQU32H

KEYCNT

EQU33H

;按键计数

SP1

BITP3.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

 

LCALLDELY10MS

JBSP1,WT

INCKEYCNT

MOVA,KEYCNT

CJNEA,#01H,KN1

SETBTR0

MOVTH0,#06H

MOVTL0,#06H

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,$

LJMPWT

;接着SP1变为1

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

;用于自动恢复定时初值

;置T0定时初值250us

;可以不要

;可以不要

;直接寻址为0转移

 

 

D1:

INT_T0:

DONE:

NEXT:

MOVR6,#20

MOVR7,#248

DJNZR7,$

DJNZR6,D1

RET

INCTCNTA

MOVA,TCNTA

CJNEA,#100,NEXT

MOVTCNTA,#00H

INCTCNTB

MOVA,TCNTB

CJNEA,#4,NEXT

MOVTCNTB,#00H

INCSEC

MOVA,SEC

CJNEA,#100,DONE

MOVSEC,#00H

MOVA,SEC

MOVB,#10

DIVAB

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP0,A

MOVA,B

MOVDPTR,#TABLE

MOVCA,@A+DPTR

MOVP2,A

RETI

;子程序返回

;可以不要

;可以不要

 

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;

}

PO=dispcode[second/10];

P2=dispcode[second%10];

}

}

三、Proteus仿真

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

答:

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

 

5-7

亮,表示甩干工作正在进行。

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

给出了Proteus仿真电路图。

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

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

首先是进水定时控制,

表示正在进水的LED发光二极管A点亮。

当进水控制的定时时间到时,进水工作停止,发光

二极管A灭灯;接着开始洗涤工作定时,发光二极管B点亮;洗涤工作结束后,开始甩干工

作定时,发光二极管C点亮。

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

汇编语言参考程序如下:

ORG0000H;

在0000H单元存放转移指令

LJMPMAIN;

转移到主程序

ORG000BH;

计数/定时器TO的中断入口地址

LJMPTime0

;转到中断子程序Time0

ORG0100H;

主程序从O1OOH开始

MAIN:

JBP2.0,MAIN;

判按键是否按下,为O即按下,顺序执行,否则等待。

LACLLDISPLY;

有键按下,延时去抖动

JBP2.0,MAIN;

再判有键按下

MOVP1,#0EH;

确定键按下,A灯亮,开始放水定时

MOVR0,#00H;R0

放3个阶段的工作标志

MOVR1,#00H;R1

放定时器的中断计数

SETBEA;

开中断总开关

SETBET0;

开定时器TO的中断开关

MOVTMOD,#01H;

设定时器TO工作方式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=P2A0;

//将P20位定义为P2.0弓I脚

sbitP37=P3A7;

//将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;

EA=1;//

ET0=1;

//有键按下,延时去抖动

//再判有键按下

//A灯亮,开始放水定时开总中断

TMOD=0x01;//

使用定时器T0的模式1

TH0=(65536-46083)/256;

//定时器TO的高8位赋初值,定时50ms

TL0=(65536-46083)%256;

//定时器T0的高8位赋初值

TR0=1;

//启动定时器T0

//定时器T0中断允许

}

while

(1);

//无限循环等待中断

 

 

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

 

{

if(f==0)//f

{

Countor++;

if(Countor==40)

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

//Countor加1

//若累计满40次,即计时满2s

{

P1=0x0d;

//A灯灭,结束放水,B灯亮,开始洗涤

Countor=0;

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

f++;

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

}

if(f==1)

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

{

Countor++;

if(Countor==80)

{

P1=0x0B;

Countor=0;

f++;

}

}

if(f==2)

{

Countor++;

if(Countor==40)

{

P1=0x07;

Countor=0;

f++;

}

}

if(f==3)

{

P1=0x07;

P37=~P37;

Countor=0;

}

TH1=(65536-46083)/256;

TL1=(65536-46083)%256;}

//Countor加1

//若累计满80次,即计时满4S

//B灯灭,结束洗涤,C灯亮,开始甩干

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

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

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

//Countor加1

//若累计满60次,即计时满3S

//灯全灭,洗衣机结束工作

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

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

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

//灯全灭,洗衣机结束工作

//扬声器提醒

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

//定时器T1的高8位重新赋初值

//定时器T1的低8位重新赋初值

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

.\

答:

请参考第5题答案。

 

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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