找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4759|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机外部中断1返回后不继续执行程序

[复制链接]
跳转到指定楼层
楼主
ID:31196 发表于 2011-11-2 14:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include <reg52.h>
char code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit P14=P1^4;

void delay(unsigned int z)
{
 unsigned int x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--);
  
}
void main()
{
  unsigned int j;
  P14=0;
  EA=1;
  EX0=1;
  EX1=1;
  P0=0xfe;
  while(1)
  {
   for(j=0;j<8;j++)
   {
    P0=table[j];
    delay(500);
   }
  }
 
}
void KEY1() interrupt 0
{
 char j;
 for(j=7;j>-1;j--)
  {
   P0=table[j];
   delay(500);
  }
 
 
}

void KEY2() interrupt 1
{
 char t;
 for(t=3;t>-1;t--)
  {
   P0=table[t];
   delay(500);
  }
}
按P3。2的键,中断正常执行,返回后从断点处继续执行,正常,但按P3.3的键后中断不正常,本意是从第四个灯亮,但却从最后一个灯往回亮,执行后,返回主程序也不是从中断处执行的,而是从第一个灯亮。真奇怪。各位帮我一下


[此贴子已经被作者于2011-11-2 14:33:29编辑过]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:31196 发表于 2011-11-3 17:36 | 只看该作者
没人研究中断吗?我自己找出问题了,原来是void key2()interrupt 1 这里写错了,要用interrupt 2来实现,interrupt指的是定时器中断。外部中断用的是interrupt 0 和interrupt 2.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表