当前位置:文档之家› 单片机中断实验报告

单片机中断实验报告

人的一生要疯狂一次,无论是为一个人,一段情,一段旅途,或一个梦想
------- 屠呦呦
实验三定时器中断实验
一、实验目的
1、掌握51单片机定时器基本知识;
2、掌握定时器的基本编程方法;
3、学会使用定时器中断。

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

三、实验设备
PC 机一台、单片机实验箱
主要器件:AT89C52、7SEG-BCD、
四、实验步骤
1、使用Proteus设计仿真原理图;
2、使用Keil设计程序;
3、联合调试仿真。

五、实验流程图
六、实验程序与结果
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit F=P2^1;
void timer1_init()
{
TMOD=0x10;//将定时器1设置为工作方式1
TH1=(65536-6000)/256;//定时器每加一时间为1/fsoc,定时时间为1/500
//(1/500)s/(1/3000000)s=6000
TL1=(65536-6000)%256;//fsoc=3000000,所以装入16位定时器中值为65536-6000 EA=1;
ET1=1;
TR1=1;
}
void main()
{
timer1_init();
while(1);
}
void timer1() interrupt 3
{
TH1=(65536-6000)/256;//每次进入中断,重装初值TL1=(65536-6000)%256;
F=~F;//每次进入中断P1.1口取反
}
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit F=P2^1;
void timer0_init()
{TMOD=0x01;//将定时器0设置为工作方式1
TH0=(65536-83)/256;//定时器每加一时间为1/fsoc,定时时间为2Khz,既500us
//500us/6us=83.3333
TL0=(65536-83)%256;//fsoc=6000000,所以装入16位定时器中值为65536-83
EA=1;
ET0=1;
TR0=1;
}void main()
{
timer0_init();
while(1);
}
void timer0() interrupt 1
{
TH0=(65536-83)/256;//每次进入中断,重装初值
TL0=(65536-83)%256;
F=~F;//每次进入中断P1.1口取反,表示定时时间到
}
#include<reg51.h> // 包含51单片机寄存器定义的头文件
#define seg_data P1
#define seg_data2 P3
#define uint unsigned int
sbit D1=P2^0; //将D1位定义为P2.0引脚
uint counter=0;
unsigned int unit=0,decade=0,avs=0;//time=0;
/************************************************************** 函数功能:主函数
**************************************************************/ void main(void)
{
uint time,time1,temp1,temp2,temp3;
seg_data=0;
seg_data2=0;
TMOD=0x11; //使用定时器T0的模式2
TH0=0xFC; //定时器T0的高8位赋初值 1000-500
TL0=0x18; //定时器T0的低8位赋初值
TH1=(65536-50000)/256; //定时器T1的高8位赋初值TL1=(65536-50000)%256; //定时器T1的低8位赋初值
EA=1; //开总中断
ET0=1; //定时器T0中断允许
ET1=1;
TR0=1; //启动定时器T0
TR1=1;
while(1)//无限循环等待中断
{
temp1=(decade&0x0F)<<4;
temp2=unit&0x0F;
time=temp2|temp1;
seg_data=time;
temp3=avs&0x0F;
time1=temp3;
seg_data2=time1;
}
}
{
D1=~D1; //按位取反操作,将P2.0引脚输出电平取反TH0=0xFF; //定时器T0的高8位赋初值 1000-500
TL0=0x06; //定时器T0的低8位赋初值
}
void Time1(void) interrupt 3
{
counter++;
if(counter>19)
{
unit++;
counter=0;
}
if(unit>9)
{decade++;
unit=0;
}
if(decade>5)
{
avs++;
decade=0;
}
if(avs>9)
{
avs=0;
}
TH1=(65536-50000)/256; //定时器T1的高8位赋初值
TL1=(65536-50000)%256; //定时器T1的低8位赋初值
TF1=0;
}
七、实验心得
通过本次课程设计使我感受到它是一门综合性、实践性较强的课程,使我体会到要想综合运用所学的理论知识,提高我的设计能力,必须增加实际操作的环节。

这次课程设计不仅培养了我们的实际动手能力,更检验了我们对本门课学习的情况,培养我们严肃认真的学习态度。

真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,并能用设计报告表达设计思想和结果的能力正是我这次课程的目的。

相关主题