当前位置:文档之家› 51单片机定时器实验

51单片机定时器实验

电子信息工程学系实验报告
课程名称:单片机原理
实验项目名称:51定时器实验 实验时间:2012-11-27
班级:测控081 姓名: 学号:810707132
实 验 目 的:
熟悉keil 仿真软件、伟福仿真器的使用和C51定时程序的编写。

了解51单片机中定时、计数的概念,熟悉51单片机内部定时/计数器的结构与工作原理。

掌握中断方式处理定时/计数的工作过程,掌握定时/计数器在C51中的设置与程序的书写格式以及使用方法。

实 验 原 理:
定时分类及原理
1.软件定时:即让机器执行一个程序段,这段程序本身没有具体的执行目的,只是为了磨时间。

执行这段程序所需要的时间就是延时时间。

这种程序前面已设计过。

这种方法定时占用CPU 执行时间,降低了CPU 利用率。

此次实验使用的是MCS-51系列单片机。

2.数字电路硬件定时:采用小规模集成电路器件如555,外接定时部件(电阻和电容)构成。

这样的定时电路简单,但要改变定时范围,必须改变电阻和电容,这种定时电路在硬件连接好以后,修改不方便。

3.可编程定时/计数器:是为方便微型计算机系统的设计和应用而研制的,它是硬件定时,又很容易地通过软件来确定和改变它的定时值,通过初始化编程,能够满足各种不同的定时和计数要求,因而在嵌入式系统的设计和应用中得到广泛的应用。

8051型单片机有两个十六位定时/计数器T0、T1,有四种工作方式,跟定时/计数器相关的特殊功能寄存器有这样几个: 方式控制寄存器TMOD
M1、M0的状态决定定时器的工作方式,定时和外部事件计数方式选择位C/T ,GATE 与TR0、TR1配合决定定时/计数器的启停。

加法计数寄存器TH0、TH1 (高八位)TL0、TL1(低八位); 定时/计数到标志TF0、TF1(中断控制寄存器TCON ); 定时/计数器启停控制位TR0、TR1(TCON );
定时/计数器中断允许位ET0、ET1(中断允许寄存IE ); 定时/计数器中断优先级控制位PT0、PT1(中断优IP )。

定时/计数器的工作方式 MCS -51的定时器有方式0、方式1、方式2和方式2这3种工作方式。

1.方式0
当M1M0=00时,定时器工作于方式0。

方式 0为13位的计数器,由TL0的低5位和TH0的8位组成,TL0低5位计数溢出时向TH0进位,TH0计数溢出时
置位溢出标志TF0。

若T0工作于定时方式,设计数初值为a,晶振频率为12MHz,则T0从初值开始计数到溢出的定
时时间为 t=(213-a)×1μS。

2. 方式1
当M1M0=01时,定时器工作于方式1。

T1工作于方式1时,由TH1作为高8位,TL1作为低8位,构成一个十六位的计数器。

若T1工作于定时方式1,计数初值为 a,晶振频率为12MHz,则T1从计数初值计数到溢出的定时时间为t =(216-a)μS。

3. 方式2
M1M0=10时,定时器/计数器工作于方式2,方式2为自动恢复初值的 8位计数器。

TL1作为8位计数器,TH1作为计数初值寄存器。

t =(28-a)μS。

单片机内部的定时计数模块,在定时时,对工作频率的12分频进行计数,先记入TL后记入TH,直到溢出为止,根据
TL、TH内的初值不同可以定出不同的时间;在计数工作方式时,对T0(T1)引脚的输入脉冲进行计数,将计数值记入TL、
TH。

当定时/计数溢出时,会引起中断。

设置合适的计数初值,以产生期望的定时间隔。

由于定时/计数器在方式0、方式1和方式2时的最大计数间隔取决于使用的晶振频率fosc,如下表所示,当需要的定时间隔较大时,要采用适当的方法,即将定时间隔分段处理。

计数初值与定时时间的关系为:T = 12×(T_all – a)/fosc定时间隔为T,计数初值为a。

所以有计数初值a =–T×fosc/12,THx = a / 256,TLx = a % 256。

定时器均有一个最大定时时间,对于长时间的定时需要,可以将定时间隔为固定的较小时间,通过另设一全局变量ah1用于计数,累加固定的较小定时时间来进行。

确定定时/计数器工作于查询方式还是中断方式,若工作于中断方式,则在初始化时开放定时/计数器的中断及总中断: ET0 = 1; EA = 1;
还需要编写中断服务函数:
void T0_srv(void) interrupt 1 using 1
{
TL0 = a % 256;
TH0 = a / 256;
中断服务程序段
}
4.启动定时器:TR0(TR1)= 1。

实验设备与器件
硬件:微机、WAVE单片机仿真器、单片机实验板、跳帽若干
软件:KEIL C51单片机仿真调试软件,伟福V系列仿真调试软件
实验内容:
利用实验板上的一位LED数码管做显示,利用中断法编写定时程序,控制单片机定时器进行定时,所定时间为1S。

刚开始LED数码管显示0,每过1S数码管的显示值增加1,当显示到59时返回0,依此反复。

实验的程序代码如下:
#include<reg51.h>
void mDelay (unsigned int Delay)
{unsigned int b;
for(;Delay>0;Delay--)
{for(b=0;b<124;b++)
{;}
}}
int i,j,k,a;
i=-1;
j=0;
k=0;
unsigned char code tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main()
{TMOD=0x01;
a=-0.1*6*1000000/12;
TH0=a/256;
TL0=a%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
void t0( )interrupt 1
{TH0=a/256;
TL0=a%256;
k++;
if(k==10)
{k=0;
i++;
if(i==10){i=0;j++;}
if(j==6){i=0;j=0;}
{P2=0xfe;
P0=tab[i];
mDelay(6000);
P2=(P2<<1)|0x01;
P0=tab[j];
mDelay(14000);}
}}
实验结果及分析:
本题实验的记数结果如下:
实验分析如下:
本实验是通过定时器来达成在LED数码管从00秒到59秒的显示过程的。

首先,利用定时器先实现定时100ms,在累计记数到10次后就得到了1秒的效果,接着在LED数码管上相应的显示01,当到09时把十位记上1,以此类推得到在LED 数码管上从00显示到59,最后,再置00。

这样就达到了实验效果。

实验心得:
通过本次LED数码管进行51定时器实验,让我知道了对教材应该熟悉,因为教材是基础的,只有把基础的搞好了才能够进行其它层次的学习。

其次此次试验我还懂得了有时候可以通过软件的仿真来验证书上的一些理论行的东西。

通过C语言的编程,对LED灯的控制及51定时器的应用让我对单片机理解更加明了。

附录:
延时函数:
void mDelay(unsigned int Delay)
{ unsigned int i;
for(;Delay>0;Delay--)
{ for(i=0;i<124;i++)
{;}
}}。

相关主题