实验名称定时器实验.docx
- 文档编号:23410941
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:15
- 大小:636.39KB
实验名称定时器实验.docx
《实验名称定时器实验.docx》由会员分享,可在线阅读,更多相关《实验名称定时器实验.docx(15页珍藏版)》请在冰豆网上搜索。
实验名称定时器实验
实验名称:
定时器实验
实验目的:
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
由待测频率与实测频率的关系表及关系图中,可看出实测频率与待测频率几乎一致,只有非常小的误差。
而随着频率的升高,相对误差也有细微的变化,但都在同一个数量级上。
由于频率变高时,信号源的输出频率不稳定,所测频率与待测频率的相对误差变化较大。
不过从理论上来说,频率越高相对误差应该越小,因为在定时中产生的细小误差在越大的频率中体现得越不明显。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 名称 定时器