5定时器实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子信息工程学系实验报告
课程名称:单片机原理及接口应用
实验项目名称:51定时器实验实验时间:
班级:姓名:学号: 一、实验目的:
熟悉keil 仿真软件、protues 仿真软件的使用和单片机定时程序的编写。了解51单片机中定时、计数的概念,熟悉51单片机内部定时/计数器的结构与工作原理。掌握中断方式处理定时/计数的工作过程,掌握定时/计数器在C51中的设置与程序的书写格式以及使用方法。
二、实验环境:
软件:KEILC51单片机仿真调试软件,proteus 系列仿真调试软件
三、实验原理:
1、51单片机定时计数器的基本情况
8051型有两个十六位定时/计数器T0、T1,有四种工作方式。MCS -51系列单片机的定时/计数器有几个相关的特殊功能寄存器:
方式控制寄存器TMOD ;
加法计数寄存器TH0、TH1(高八位);TL0、TL1(低八位); 定时/计数到标志TF0、TF1(中断控制寄存器TCON ) 定时/计数器启停控制位TR0、TR1(TCON )
定时/计数器中断允许位ET0、ET1(中断允许寄存IE ) 定时/计数器中断优先级控制位PT0、PT1(中断优IP ) 2、51单片机的相关寄存器设置 方式控制寄存器TMOD:
TMOD 的低四位为T0的方式字,高四位为T1的方式字。TMOD 不能位寻址,必须整体赋值。 TMOD 各位的含义如下: 1.工作方式选择位M1、M0
M1、M0的状态决定定时器的工作方式:
3、51单片机定时器的工作过程(逻辑)方式一 方式1:当M1M0=01时,定时器工作于方式1。
T1工作于方式1时,由TH1作为高8位,TL1作为低8位,构成一个十六位的计数器。若T1工作于定时方式1,计数初值为a ,晶振频率为12MHz ,则T1从计数初值计数到溢出的定时时间为t=(216-a )μS 。 4、51单片机的编程
使用MCS -51单片机的定时/计数器的步骤是: 4.1.设定TMOD ,确定:
工作状态(用作定时器/计数器);
工作方式;
控制方式。
如:T1用于定时器、方式1,T0用于计数器、方式2,均用软件控制。则TMOD的值应为:00010110,即0x16。
4.2.设置合适的计数初值,以产生期望的定时间隔。由于定时/计数器在方式0、方式1和方式2时的最大计数间隔取决于使用的晶振频率fosc,如下表所示,当需要的定时间隔较大时,要采用适当的方法,即将定时间隔分段处理。
计数初值的计算方法如下,设晶振频率为fosc,则定时/计数器计数频率为fosc/12,定时/计数器的计数总次数T_all在方式0、方式1和方式2时分别为213=8192、216=65536和28=256,定时间隔为T,计数初值为a,则有
T=12×(T_all–a)/fosc
a=T_all–T×fosc/12
a=–T×fosc/12(注意单位)
THx=a/256;TLx=a%256;
4.3.确定定时/计数器工作于查询方式还是中断方式,若工作于中断方式,则在初始化时开放定时/计数器的中断及总中断:
ET0=1;EA=1;
还需要编写中断服务函数:
voidT0_srv(void)interrupt1using1
{
TL0=a%256;
TH0=a/256;
中断服务程序段}
4.4.启动定时器:TR0(TR1)=1。
四、实验内容过程及结果分析:
利用protues仿真软件设计一个可以显示秒表时间的显示电路。利用实验板上的一位led数码管做显示,利用中断法编写定时程序,控制单片机定时器进行定时,所定时间为1s。刚开始led数码管显示9,每过一秒数码管显示值减一,当显示到0时返回9,依此反复。然后设计00-59的两位秒表显示程序。
(1)实现个位秒表,9-0
用protues进行流水灯的仿真需要的元件有AT89C51、CAP、BUTTON、LED-BLUE、RES、CRYSTAL、画出仿真图Protues仿真图
使用keil仿真软件编写程序和使用c51编写并进行调试。仿真结果如下图所示
仿真结果图
程序:
#include
unsignedchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
unsignedchara; unsignedchari=0; voiddelay(charz) {charx,y;
for(x=z;x>0;x--)
for(y=123;y>0;y--); }
main()
{TMOD=0x10;
TH1=-50000/256; TL1=-50000%256; EA=1;ET1=1;TR1=1;
while(1);
}
voidtime()interrupt3 {TH1=-50000/256;
TL1=-50000%256;
a++;
if(a==10)
{a=0; P2=0xfe;
P0=tab[9-i]; i++;
if(i==10)
i=0;
}
}
(2)实现两位秒表,00-59
使用keil仿真软件编写程序和使用c51编写并进行调试。仿真结果如下图所示仿真结果图
程序:
#include
unsignedchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
unsignedchara; unsignedchari=0; voiddelay(charz) {charx,y;
for(x=z;x>0;x--)
for(y=123;y>0;y--); }
main()
{TMOD=0x10;
TH1=-50000/256;
TL1=-50000%256;
EA=1;ET1=1;TR1=1; while(1)
{P2=0xfe;
P0=tab[i/10];
delay(5); P2=0xfd;
P0=tab[i%10];
delay(5);
}
}
voidtime()interrupt3 {TH1=-50000/256;
TL1=-50000%256;
a++;
if(a==10)
{a=0;
i++;
if(i==60)
{i=0;
}
}}
五、实验心得:
通过实验熟悉keil仿真软件、protues仿真软件的使用和单片机定时程序的编写。了解51单片机中定时、计数的概念,熟悉51单片机内部定时/计数器的结构与工作原理。掌握中断方式处理定时/计数的工作过程,掌握定时/计数器在C51中的设置与程序的书写格式以及使用方法。