实验报告6 中断及服务程序设计.doc
文本预览下载声明
.
.
实验报告6 中断及服务程序设计
姓名: 学号:
学院:光电与信息工程学院 班级:网络工程2班
实验目的
掌握单片机中断系统的工作原理
掌握单片机中断优先级的概念
实验环境
1. PC机 1台
2. wave6000
内容与步骤
以定时器0、1为例,设计中断服务程序,及优先级别控制。
过程分析
#includereg51.h
#includeintrins.h
unsigned char x=0xfe;
unsigned int x0=0;//记录计时器0中断后中断服务执行的次数
unsigned int x1=0;//记录计时器1中断后中断服务执行的次数
sbit p1=P1;
void delay() //延迟程序
{
unsigned int i,j;
for(i=0;i10;i++)
for(j=0;j10;j++);
}
void main()
{
TMOD=0x11;
PT1=1; //定时器1优先
PT0=0;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1);
}
void time0() interrupt 1
{
unsigned char a;
TL0=35536%256; //30ms中断一次
TH0=35536/256;
for(a=0;a8;a++) //重复执行8次
{
P1=0; //点亮所有灯的LED
delay();
P1=0xff; //熄灭所有的LED
delay();
}
x0++;
}
void time1() interrupt 3 //先点亮一个,后点亮两个,……直到点亮八个,又重新开始
{
unsigned char b;
TL1=15536%256; //50ms中断一次
TH1=15536/256;
delay();
P1=x;
for(b=0;b8;b++)
{
x=x1;
P1=x;
}
x=0xfe;
delay();
x1++;
}
截图分析:
在定时器0和定时器1中设置两个中断点。
开启中断器查看,事先将TF0,TF1打钩
进行跟踪,程序开始出现中断,进入定时器1(优先级决定)
观察光标的执行情况。
定时器1设置50ms中断一次,定时器0设置30ms中断一次.
当程序在执行过程中,虽然定时器1的优先级高,但由于中断时间较长,所以会存在定时器0的运行阶段,如图。
接下来,定时器0运行一段时间后,又会再一次轮到定时器1工作
如此重复下去,定时器1可以中断正在执行的定时器0,前提是优先级高的中断时间要长,否则很难看出效果。不然总是会有一个定时器一直在执行中断。可以根据实验中外接LED来观察更加明显的效果。
执行全速运行,观察中断服务程序执行情况。
X1/X0这个比例不是3/5,原因是实验中外接LED来观察更加明显的效果,所以多了延迟函数delay()。之前的实验报告的延迟时间设置得太长,导致优先级高的中断一直处于抢占地位。所以这次的延迟时间稍微修改了一下。根据中断服务程序的执行时间不同,这个比例也会不同。
结果总结
总结:
这次实验是程序中断服务,采用定时器0,定时器1,其工作方式都采用方式1,为了体现优先级,主程序设置定时器1的优先级最大,但默认未设置的情况下则是定时器0最大。在编写程序的时候为了上机操作可以观察到明显的变化,借助外接LED灯。为了能交替的产生不同类型的中断,将优先级高的中断时间设置得较长一些,这样就可以使优先级低的中断可以插进来执行。实验初次运行时执行不下去,后来在两个中断程序中都加了断点,才可以执行下去。在开启了定时器查看后,很明显的观察到了2个定时器中断程序的交替进行。实验中外接LED来观察更加明显的效果,所以多了延迟函数delay()。在之前的基础上还增加了变量X0,X1表示定时器中断后中断服务函数的运行次数,这样更加明显的看到了中断嵌套的出现。
思考题:1.外部中断0和外部中断1的处理方法。
答: 外部中断 0(!INT0) 、外部中断 1(!INT1) 属于同级中断源,在C51单片机的引脚是P3.2和P3.3,分电平触发和边沿触发。当IT0=0(IT1=0)时,!INT0(!INT1)为低电平触发方式,cpu在每个机器周期的S5P2期间对!INT0(!INT1)采样。一旦在P2.3(P2.3)引脚
显示全部