单片机实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}
}
实验结果波形图
六、实验心得
开始实验的时候,什么都不懂,经过老师的指导,做出了实验。