实验名称定时器实验.docx

上传人:b****0 文档编号:9033701 上传时间:2023-05-16 格式:DOCX 页数:15 大小:636.39KB
下载 相关 举报
实验名称定时器实验.docx_第1页
第1页 / 共15页
实验名称定时器实验.docx_第2页
第2页 / 共15页
实验名称定时器实验.docx_第3页
第3页 / 共15页
实验名称定时器实验.docx_第4页
第4页 / 共15页
实验名称定时器实验.docx_第5页
第5页 / 共15页
实验名称定时器实验.docx_第6页
第6页 / 共15页
实验名称定时器实验.docx_第7页
第7页 / 共15页
实验名称定时器实验.docx_第8页
第8页 / 共15页
实验名称定时器实验.docx_第9页
第9页 / 共15页
实验名称定时器实验.docx_第10页
第10页 / 共15页
实验名称定时器实验.docx_第11页
第11页 / 共15页
实验名称定时器实验.docx_第12页
第12页 / 共15页
实验名称定时器实验.docx_第13页
第13页 / 共15页
实验名称定时器实验.docx_第14页
第14页 / 共15页
实验名称定时器实验.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验名称定时器实验.docx

《实验名称定时器实验.docx》由会员分享,可在线阅读,更多相关《实验名称定时器实验.docx(15页珍藏版)》请在冰点文库上搜索。

实验名称定时器实验.docx

实验名称定时器实验

实验名称:

定时器实验

实验目的:

1、熟悉MCS-51的定时器原理

2、掌握MCS-51定时器使用方法

3、掌握MCS-51的定时中断

实验原理:

MCS-51系列单片机中,有两个内置16位可编程的定时器/计数器T0、T1,共4种工作方式。

一、定时器/计数器的结构

1、方式0(13位定时/计数器)

2、方式1(16位定时/计数器)

3、

4、方式2(8位重复定时/计数器)

5、方式3(8位定时/计数器,仅T0)

二、定时器/计数器的编程

控制寄存器:

1、TMOD:

选择定时器/计数器T0、T1的工作模式和工作方式。

1)GATE——门控位

0:

以TRX(X=0,1)来启动定时器/计数器运行。

1:

用外中断引脚(INT0*或INT1*)上的高电平和TRX来启动定时器/计数器运行。

2)M1、M0——工作方式选择位

M1M0工作方式

00方式0,13位定时器/计数器。

01方式1,16位定时器/计数器。

10方式2,8位常数自动重新装载

11方式3,仅适用于T0

3)C/-T——计数器模式和定时器模式选择位

0:

定时器模式。

1:

计数器模式。

2、TCON:

控制T0、T1的启动和停止计数,同时包含了T0、T1的状态。

1)TF1、TF0——计数溢出标志位

2)TR1、TR0——计数运行控制位

1:

启动定时器/计数器工作

0:

停止定时器/计数器工作

实验内容:

1、通过查询定时器状态,在P1.0产生近似10kHz的方波

2、利用定时中断,在中断处理程序中每秒通过P1.0切换一次逻辑笔的电平

3、利用计数器测量信号发生器产生的不同频率的方波周期,并在寄存器中显示结果。

实验设计:

1、要求在P1.0处产生10khz的方波,即周期为100us,则P1.0的逻辑电平每50us需跳变一次。

我们所使用的MCU晶振为11.0592MHz,所以定时器的定时初值为

,采用方式二,n=8,可解得N约为210,转换成十六进制数即为0D2H,故初始化时定时器的初值为0D2H。

然后启动定时器,不断查询定时器的溢出标志TF0,一旦定时时间到即TF0=1,则将P1.0逻辑电平取反,并将溢出标志清零,重新开始定时,如此反复循环。

流程图:

电路图:

代码及注释:

ORG8000H;硬件仿真程序

LJMPMAIN

ORG8100H;硬件仿真程序

MAIN:

SETBP1.0;给P1.0一个初值

MOVTMOD,#02H;T0工作于定时方式2

MOVTH0,#0D2H;设置定时初值50us

MOVTL0,#0D2H

SETBTR0;启动定时器T0工作

BACK:

JBCTF0,BACK1;定时时间50us到即TF0=1转BACK1,并使TF0=0

SJMPBACK;定时时间未到继续查询

BACK1:

CPLP1.0;对电平状态取反

NOP;加入一条指令的延时,防抖动

SJMPBACK

END

2、实验要求逻辑笔的状态每秒改变一次,但是我们一个定时器最大定时时间为

其最大定时时间远远小于1s,所以仅用一个定时器是不够的,故采用一个定时器和一个计数器配合使用。

一个定时器产生一个周期为100ms的方波信号,即每50ms进入定时器中断对计数信号P1.3取反,计数器对该信号计数,计满10次则进入计数器中断,改变逻辑笔电平。

定时器的初值

,采用方式1,n=16,解得N=19456,转换为十六进制数为4C00H;计数器的初值

,采用方式2,n=8,解得N=246,转换为十六进制数为0F6H。

主程序流程图:

中断程序流程图:

(T0定时中断)

中断程序流程图:

(T1计数中断)

电路图(修改后加上了逻辑笔的电路):

代码及注释:

ORG8000H;硬件仿真程序

LJMPMAIN

ORG800BH;定时器T0中断入口地址

LJMPINTT0

ORG801BH;定时器T1中断入口地址

LJMPINTT1

ORG8100H;硬件仿真程序

MAIN:

CLRP1.0;给P1.0一个初态

SETBP1.3;P1.3作为T1的外部计数脉冲信号

MOVTMOD,#61H;T0、T1方式初始化,T0工作于定时方式1,T1工作于计数方式2

MOVTH1,#0F6H;设置T1计数初值

MOVTL1,#0F6H;方式2会重装计数初值,初始只需将TH1、TL1装入相同的初值

MOVTH0,#4CH;设置T0计数初值

MOVTL0,#00H

SETBTR0;启动T0工作

SETBTR1;启动T1工作

SETBPT0;设置T0为高优先级中断

CLRPT1;设置T1为低优先级中断

SETBET0;开放T0中断

SETBET1;开放T1中断

SETBEA;开放CPU的中断

SJMP$;等待中断

ORG8400H;定时器T0中断服务程序

INTT0:

MOVTH0,#4CH;重装T0计数初值,为下一次定时做准备

MOVTL0,#00H

CPLP1.3;T0中断,50ms到对P1.3求反一次得到周期为100ms的脉冲串

RETI;中断返回

ORG8500H;定时器T1中断服务程序

INTT1:

CPLP1.0;T1中断,1s时间到,改变逻辑笔的电平

RETI;中断返回

END

3、频率即为单位时间内脉冲的个数。

故要测试T0引脚上脉冲的频率,可利用T1定时1个单位时间(1s),T0对外部脉冲计数,在此期间所计的脉冲数即为待测频率值。

由于晶振频率为11.0592MHz,机器周期为12/11.0592us,若选T1工作在方式1下,其最大定时时间为71ms,远远小于1s。

因此利用T1完成1s的定时任务还必须配合相应软件来实现。

可设计一个T1定时次数计数器,若设T1定时50ms,当该计数器值为20时,定时1s到。

则当T1开始定时时,T0立即对外部脉冲进行计数,定时时间1s到,T0停止计数,此时T0的计数值即为信号的频率。

由上个实验计算值可知T1的初值为4C00H。

流程图:

电路图:

代码及注释:

CONTEQU72H;CONT为定时器T1的定时次数

ORG8000H;硬件仿真程序

LJMPMAIN

ORG8100H;硬件仿真程序

MAIN:

MOVTMOD,#15H;T0工作于计数方式1,T1工作于定时方式1

MOVTH0,#00H;T0计数初值置0

MOVTL0,#00H

MOVTH1,#4CH;T1定时50ms

MOVTL1,#00H

MOVCONT,#20;计数器初始化,20

SETBTR1;启动T1定时

SETBTR0;启动T0计数

BACK:

JNBTF1,BACK;等待定时50ms到

CLRTF1;定时器T1溢出中断标志清零

MOVTH1,#4CH

MOVTL1,#00H;T1重装定时初值,为下次定时做准备

DECCONT;循环次数减1

MOVA,CONT

JNZBACK;计数次数不到20次,继续等待

CLRTR0;1s时间到,T0停止计数

MOV71H,TH0

MOV70H,TL0;存结果

SJMP$

END

实验结果记录及分析:

1、用示波器在P1.0处观察到稳定的周期方波,其频率为10.00khz。

但是一开始实验时在P1.0处观测到的方波非常不稳定,方波波形像是由两个频率相近的方波叠加而成的,频率范围在9.8~10.2KHz之间。

这是因为在实验程序中设置T0工作于定时方式2。

工作中,当TL0的内容被计满溢出时,除同步方式0、1置位TF0,产生溢出中断请求外,还自动将TH0中不变的初值重新装入TL0。

这一过程中系统会对中断溢出标志进行自动清零,由于计算出的定时初值N为近似值210,且自动清零时会产生很小的延时,这些延时的累积会产生一定的误差,故输出波形的频率会有细微的差别,从而产生抖动。

因此,在实验中我对程序进行了一些修改,即在查询转入程序的电平取反CPLP1.0后加入了一条NOP指令,以加入一条指令的延时。

修改后再观察P1.0口的波形即可得到稳定的10KHz方波。

实验时,发现有些同学将T0设置于工作在定时方式1,所测波形的频率也会有些偏差,这是因为方式1在查询情况下,定时器计满溢出时系统不会对中断溢出标志进行自动清零,需在程序中加入一条CLRTF0指令,对其进行手动清零。

而这条指令的加入会改变循环周期,增加延时,从而产生输出频率与预期频率的偏差。

为得到所需频率的方波,T0的定时初值应重新设定,应比按公式计算出的初值稍小一些。

2、实验中可观察到逻辑笔的红灯和绿灯每1s切换一次。

用示波器观察P1.0口的输出波形,可看到稳定的方波波形,周期为1.02s。

这个实验中通过两个中断完成产生周期为1s的方波的功能。

如实验设计中所说明的这是因为要产生1s的定时,一个定时器不够用,需要两个定时器的配合才能完成。

所以我在设置中断时,将定时器设定为高优先级,计数器设定为低优先级,先进行50ms的定时,每次定时时间到,计数器则进行加1计数,由此完成1s的定时。

在实验1中有讨论到在查询情况T0工作于定时方式1时,由于系统不会对中断溢出标志进行自动清零,需在查询转入程序中加一条CLRTF0指令进行转入清零。

但是在中断程序中则不用考虑这个问题,在TF0为1的情况下系统会自动对TF0清零并转向中断服务程序。

不过在中断时对TF0清零的操作也会占用极少的时间,故每次的定时会产生很微小的延时,在10次计数中会进行一定的累积,所以最后测得的周期为1.02s,有很小的误差。

3、通过信号源产生不同频率的方波的信号,在1s中对信号的脉冲进行计数,得到信号的频率,在存储单元70H和71H中可看到计数结果,将存储类型改为float,可以十进制显示结果。

选取十个不同频率的方波信号,测得的数据结果如下所示:

 

待测频率与实测频率关系

待测频率(KHz)

1.838

2.225

3.546

4.473

7.052

实测频率(KHz)

1.838

2.226

3.547

4.474

7.054

相对误差(%)

0.0000

0.0449

0.0282

0.0224

0.0284

待测频率(KHz)

10.230

15.270

20.320

24.840

30.080

实测频率(KHz)

10.238

15.276

20.328

24.844

30.088

相对误差(%)

0.0782

0.0393

0.0394

0.0161

0.0266

由待测频率与实测频率的关系表及关系图中,可看出实测频率与待测频率几乎一致,只有非常小的误差。

而随着频率的升高,相对误差也有细微的变化,但都在同一个数量级上。

由于频率变高时,信号源的输出频率不稳定,所测频率与待测频率的相对误差变化较大。

不过从理论上来说,频率越高相对误差应该越小,因为在定时中产生的细小误差在越大的频率中体现得越不明显。

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

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

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

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