单片机实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三 定时器中断实验

一、实验目的

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 的值。

3616

1050101212)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;

}

}

实验结果波形图

六、实验心得

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

相关文档
最新文档