打印

请教一个关于嵌套中断的程序

[复制链接]
1557|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rcwust2009|  楼主 | 2010-1-7 23:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是我的一个设计图:下载就可以可看到。
这是实验的要求:按下K1(P3.2)左右4个LED交替闪烁,按下K2(P3.3),LED闪亮。
但是我一旦按K1以后,无论K2是否断开,led一直左右交替闪烁!无法再次让led再次全部闪烁,即程序一直在执行外部中断1。
我想设计一个嵌套中断实验,当k2按下时能让led再次全部闪烁,但是尝试几番均失败,想请教一下高手们!
这是源代码:#include<reg51.h>
void delay()
{
unsigned int i,j;
for(i=0;i<1000;i++)
for(j=0;j<125;j++);
}
void main()
{
unsigned char a;
//使用花样数据使灯闪烁的方式
unsigned  char design[9]={0XFF,0XFE,0XFD,0XF7,0XEF,0XDF,0XBF,0X7F} ;
//P1=0XFF;
for(;;)
{  //P1=0XFF;
for(a=0;a<9;a++)
{
  delay();
  P1=design[a];
  }
  EA=1;   //开放总中断
  EX0=1;   //允许外部中断0中断
  EX1=1;   //允许外部中断1中断
  IT0=0;   //设置外部中断0为沿边中断方式
  IT1=0;   //设置外部中断1为沿边中断方式
  IP=1;   //设置中断优先级
  }
}
//以下是外部中断0中断服务子程序
void int0_int(void) interrupt 0
{
for(;;)
{
P1=0XF0;
delay();
P1=0X0F;
delay();

}
}                1
void  int1_int() interrupt  2
{
for(;;)
{
P1=0xff;
delay();
P1=0;
delay();
}
}

QQ截图未命名.jpg.rar

23.01 KB

相关帖子

沙发
awey| | 2010-1-7 23:35 | 只看该作者
你的中断服务程序是个死循环,一旦陷进去就出不来了。

使用特权

评论回复
板凳
HWM| | 2010-1-8 09:20 | 只看该作者
思路不对。

要让中断服务程序能象“线程”那样平行处理,还得有“操作系统”的支持,至少是一个线程调度机制。

使用特权

评论回复
地板
魔龙之心| | 2010-1-8 10:20 | 只看该作者
其实是你的中断优先级设错了,IP=4才对。

使用特权

评论回复
5
rcwust2009|  楼主 | 2010-1-8 12:05 | 只看该作者
回复2楼:
  但是我设计一个外部的中断优先级的时候,外部中断还是无法响应的,CPU也无法查询到我的中断状态。例如将函数 void  int1_int() interrupt  2 改为如下的函数:
     void  int1_int() interrupt  2
{
PX0=1;  //设置外部中断0为高级中断优先级
for(;;)
{
P1=0xff;
delay();
P1=0;
delay();
}
PX0=0;  //关闭外部中断0的优先级
}


当在执行中断函数1的时候,首先就将外部中断0设置为高级优先级,CPU查询到以后就记录了,当检测到外部中断0有请求的时候就会转向执行的,但是实际的结果却不是这样的。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

107

帖子

1

粉丝