c51 单片机编程中断问题,中断后不能继续返回main函数,哪位高手看一下我的程序,多谢了

#include<reg52.h>//必要的头文件#include<absacc.h>//必要的头文件sbitKEY_BIT=P3^3;//连接按键的IO口sbitLED... #include <reg52.h>//必要的头文件
#include <absacc.h>//必要的头文件

sbit KEY_BIT = P3^3;//连接按键的IO口
sbit LED_BIT = P1^6;//74HC573的L端

unsigned char speed = 10;//流动速度
unsigned char dir = 0;//增减方向

void my_delay_10ms(unsigned int n)//10mS延时函数
{
unsigned int i,j; //定义2个无符号整型变量。

while(n --)
{
for(i=13;i>0;i--) //通过软仿观察得知
for(j=200;j>0;j--); //此处延时10mS
}
}

void init_int1(void)//初始化INT1
{
IP = 0x00;
EX1 = 1;// INT1中断开
IT1 = 1;// INT1下降沿触发(为0则为低电平触发)
}

void int1_srv() interrupt 2//INT1中断服务函数,中断向量标号2
{
my_delay_10ms(1);//延时消抖
KEY_BIT = 1;//读MCS51的IO口之前要先对其置1
if(KEY_BIT == 0)//按键仍然是按下状态
{
//while(KEY_BIT == 0);//等待按键抬起
if(dir == 1)//加1方向
{
if(speed < 10)//未到极限值
{
speed ++;
}
else//加1到极限值
{
speed = 9;
dir = 0;//方向改为减1
}
}
if(dir == 0)//减1方向
{
if(speed > 1)//未到极限值
{
speed --;
}
else//减1到极限值
{
speed = 2;
dir = 1;//方向改为加1
}
}
}

}

void main(void)//主函数
{
LED_BIT = 1;//74HC573的L引脚置高电平,使其处于直通状态
P2 = 1;

init_int1();//初始化INT1
EA = 1;//开全局中断

while(1)//条件总为真,死循环
{
my_delay_10ms(speed * 1);//延时
P2 = P2 << 1;//左移一位
if(P2 == 0)//移出去了?
{
P2 = 1;//赋初值,最下边LED亮
}
}
}
是不是INT1引脚要撤销低电平?怎么实现啊?请高手指点,多谢了
展开
 我来答
zzetcos
2010-11-07 · TA获得超过133个赞
知道答主
回答量:37
采纳率:0%
帮助的人:52.9万
展开全部

void int1_srv() interrupt 2//INT1中断服务函数,中断向量标号2

 my_delay_10ms(1);//延时消抖

 KEY_BIT = 1;//读MCS51的IO口之前要先对其置1

 if(KEY_BIT == 0)//按键仍然是按下状态

 {

  //while(KEY_BIT == 0);//等待按键抬起

    这部分就不用了。使用边沿触发,不必在等待按键抬起,因为第一个下降沿已经出发了中断。如果硬件是现成开发板的话就不用这么麻烦了,如果是自制电路板,记得在P3.3加上10uF防抖电容,防抖电路可参考图片。

    我的建议不一定对,但请尝试一下。

liu_jiao_feng
2010-11-16 · 超过24用户采纳过TA的回答
知道答主
回答量:170
采纳率:0%
帮助的人:55.1万
展开全部
void tuichu(void )
{
EX1 = 0;// INT1中断关
}
在中断中调运此函数即可
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式