找回密码
 立即注册

QQ登录

只需一步,快速开始

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

帮忙看看这个中断程序有没有问题?

[复制链接]
跳转到指定楼层
楼主
ID:28560 发表于 2011-3-15 19:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//用软件仿真可以,烧在51hei板上只有刚按第一次有反应,后面再按就不取反了 ,
#include <reg51.h>
#include <absacc.h>
#define unit unsigned int
#define uchar unsigned char

sbit L0=P0^0;
sbit L1=P0^1;
sbit L2=P0^2;
sbit L3=P0^3;

void delays(void)
{
uchar i;
for(i=300;i>0;i--);
}


void main(void)
{
P1=0x00;        // 初始化端口
EA=1; IT0=1; EX0=1;      // 初始化外中断标志位
while(1)
{ 
         delays();        // 键的消抖延时函数
}
}


/* 外中断0的中断服务子程序 */
void intersvr0(void)  interrupt 0 using 1
{
L3=!L3;       // 灯L3状态取反
L2=!L2;       // 灯L2状态取反
L1=!L1;       // 灯L1状态取反
L0=!L0;       // 灯L0状态取反
} 
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:28560 发表于 2011-3-15 22:04 | 只看该作者

 ,自己顶一下

回复

使用道具 举报

板凳
ID:1 发表于 2011-3-16 03:16 | 只看该作者

我在开发板上试验了了一下你这个程序,存在的问题是你没有做按键的消抖处理,所以导致整个程序很不稳定,按下了中断按键灯有点乱来.

回复

使用道具 举报

地板
ID:1 发表于 2011-3-16 16:05 | 只看该作者

给你一个解决办法: 

 当用外部中断的方法实现按键的检测时,由于存在按键抖动,这样我们在按下按键时,会出现多次进入中断的现象,最好的解决办法是在程序中我们进行相应的处理:

 
void int_key() interrupt 0//外部中断1服务程序

{
  EX0=0;//关外部中断1
  delay_ms(100);
  if(s1==0) //s1是外部中断对应的IO口
  {
   s1_num++; //这里是用户自己编写的程序
   s1_num%=4;//这里是用户自己编写的程序
   di();//这里是用户自己编写的程序
  }

while(!s1);

EX0=1;//开外部中断

}

delay_ms(100),if(s1==0)是必需要有的,延时是为了消抖,if(s1==0)是为了看看延时后是否还为低电平,如果还为低电平那确实是按下按键了,并且这样可以有效地做到一次按键只进入一次中断,当然delay_ms(100)这个延时时间不能太长,否则正常的按键也会在延时后,因为时间太长手已经松开变为高电平,而判断错误。这个中断是下降沿触发。

回复

使用道具 举报

5#
ID:29055 发表于 2011-5-24 02:43 | 只看该作者
谢谢 版主这么详细的解释,我先收藏了.
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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