单片机实验报告

  • 格式:doc
  • 大小:138.00 KB
  • 文档页数:3

实验三 定时器中断实验

一、实验目的

1、掌握51单片机定时器基本知识;

2、掌握定时器的基本编程方法;

3、学会使用定时器中断。

二、实验内容

1、利用定时器中断产生频率为10HZ、5HZ的方波,并在示波器观测波形;

2、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示。

三、实验原理

例子:当晶振为12M时机器周期为1微秒,要实现2毫秒的定时,需要2000个机器周期,对于51单片机内部定时器来说,最大只能定时65536个机器周期,能定时65.535毫秒。如果要求定时更长,必须借助软件循环进行扩展。例如:当需要得到500毫秒的定时中断定时,设定时为50毫秒时,再扩展10倍可得到500毫秒的定时,选择模式1,每个50ms中断一次,设初值为X,根据下面公式,可求得X的值。

36161050101212)2(X

有关定时计数器的特殊功能寄存器,请参考课本。

四、实验步骤

1、使用Proteus设计仿真原理图;

2、使用Keil设计程序;

3、联合调试仿真。

五、实验结果

1、利用定时器设计一个秒表,计数范围为0—59,并在数码管实时显示的程序

2、利用定时器中断产生频率为10HZ、5HZ的方波,并在示波器观测波形的程序

#include

#define uchar unsigned char

sbit aa= P0^0; sbit cc=P0^1;

uchar m100=0,m200=0,second,i=0;

void main()

{

TMOD=0x01; //定时器0工作方式为1

TH0=(65536-50000)/256; //装初值

TL0=(65536-50000)%256;

EA=1; //开总中断

ET0=1; //开定时器中断

TR0=1; //开启定时器

while(1)

{

P2=i/10;

P3=i%10;

}

//等待中断

}

void timer0() interrupt 1 ////100ms 200ms 1s

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

m100++ ;

m200++ ;

second++;

if(m100==2) //12M晶振 定时5*50MS=250MS

{

m100=0;

aa=!aa;

}

if(m200==4) //12M晶振 定时5*50MS=250MS

{

m200=0;

cc=!cc; }

if(second==20) //12M晶振 定时5*50MS=250MS

{

second=0;

i++;

if(i>60)

i=0;

}

}

实验结果波形图

六、实验心得

开始实验的时候,什么都不懂,经过老师的指导,做出了实验。