找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[已解决]一个关于用键盘实现外部中断的问题

[复制链接]
跳转到指定楼层
楼主
ID:7020 发表于 2008-11-20 12:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟最近初学单片机,用C语言编程,买了一块板子,想用单片机的外部中断做几个试验,我想实现的效果是当  单片机上电之后,小灯闪烁,然后当按下一个按键之后产生外部中断,小灯停止闪烁一段时间之后,另外一个小灯闪烁, 就是这么一个简单的功能,可是无奈我对单片机的中断执行过程不是很清楚,写出的程序,上电之后发现单片机并不响应键盘的外部中断!还是上电时的初始状态,哪位大哥(大姐也行)能贴一下代码帮我解决一下这个问题么?(我的单片机独立键盘由P1.0-P1.3口控制,8个LED灯由P0口控制)下面是我写的代码

#include <reg52.h>
sbit key0=P1^0; //按键位
sbit D=P3^2; //外部中断口
void keydelay(int z)//消抖延时函数
{
 int x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--);
 }

void delaytime(int ms)//控制小灯的闪烁
{
 int x,y;
 for(x=ms;x>0;x--)
 for(y=200;y>0;y--);
}

void main()
{
 IT0=0; 
 EA=1;
 EX0=1;
 P1=0xff; //独立键盘位置1
 while(1)
 {
  if(key0==0) // 判断键盘是否按下
  keydelay(15);//消抖
  if(key0==0)
  {
   D=0;//产生外部中断
  while(!key0); 
  }

 while(1)//上电时小灯闪烁
   {
    P0=0xfe;
    delaytime(10);
    P0=0xff;
    delaytime(10);
   } 
  } 
}

void extinter() interrupt 0 //中断处理

P0=0xff; //灯灭
delaytime(5);
while(1)
 {
  P0=0x7f;
  delaytime(10);
  P0=0xff;
  delaytime(10);
 }

}

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

使用道具 举报

沙发
ID:7040 发表于 2008-11-20 17:42 | 只看该作者
你的中断没有打开,所以单片机是不会响应中断的,将主程序改为下面就可以了.
 
void main()
{
 IT0=1; 
 EA=1;
 EX0=1; 
   //开中断
 P1=0xff; //独立键盘位置1
 while(1)
 {
  if(key0==0) // 判断键盘是否按下
  keydelay(15);//消抖
  if(key0==0)
  {
   D=0;//产生外部中断
  while(!key0); 
  }
 while(1)//上电时小灯闪烁
   {
    P0=0xfe;
    delaytime(10);
    P0=0xff;
    delaytime(10);
   } 
  } 
}

回复

使用道具 举报

板凳
ID:7020 发表于 2008-11-21 11:22 | 只看该作者

那个的确是一个错误(大意了!不好意思!)但是改过以后运行还是不行啊!老师对我说是由于INT0口不能通过软件置0来响应中断!不知道是不是这个原因...

回复

使用道具 举报

地板
ID:7020 发表于 2008-11-21 12:38 | 只看该作者

问题解决了!就是那个原因,我换了一种触发外部中断方式就可以了

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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