本帖最后由 512826028 于 2012-4-26 23:59 编辑
我是今天买了一个红外的遥控器,写了一个红外接收的程序。一开始,解码都正常。后来,我在中断中添加一个加一,和减一的代码。但是,结果出人意料,程序会自动运行两边。本意是这样的,按下一个键,表示加一,计数增加一。程序放在中断中进行,进入中断就关闭了EA,应该不会再自动重复进入中断吧?我先给大家上中断部分的程序。
/************************中断0解码服务子程序**********************/
void int0(void) interrupt 0
{
EA=0;
irdalow = IRDA_JIEMA();//得到解码的数据 这个数据只包括数据码!
Delay_ms(255);//
Delay_ms(255);//
if(irdalow == 0x0df2) //如果按下的向上,就减一
{
Delay_ms(200);
if(SCREEN_MUSIC>0)
SCREEN_MUSIC = SCREEN_MUSIC-1; //向上翻
}
if(irdalow == 0x0ef1)//如果按下的是向下,就加一
{
Delay_ms(200);
SCREEN_MUSIC = SCREEN_MUSIC+1; //向下翻
if(SCREEN_MUSIC>7) //不可以超出7
SCREEN_MUSIC=7;
LCD12864S_WCOM(0x86);//这句和下句是在LCD的指定位置显示出SCREEN_MUSIC的值。+0x30是转换成字符。
LCD12864S_WDATA(0x30+SCREEN_MUSIC);
}
Delay_ms(255);//
Delay_ms(255);//
SCREEN_DISP();//刷新显示函数
SCREEN_GUANGBIAO(SCREEN_MUSIC-SCREEN_ROW);//这个是控制光标位置的。移动光标。
Delay_ms(255);//
Delay_ms(255);//
EA=1;
}
我在说一下问题。这个中断程序就是这样。运行起来之后,我按下向下键,就会自动增加2,而不是一。为了能看出变化,我添加了LCD显示SCREEN_MUSIC值的语句,同时,在中断的多个地方,做了大量的延时处理,最后看出了程序执行的过程。
程序是直接运行了两边!按下“向下键”之后,在LCD上可以看到显示的SCREEN_MUSIC从0显示为1,然后移动一下光标。然后,LCD上又看到SCREEN_MUSIC的值变为2,又移动了一次光标。
这样,按下一次,程序就是增加的二!而且是从头到尾的执行了两遍!!
我真的不知道这个事什么问题导致的。希望大家都能帮帮。。。。。。。。。。。谢谢啦!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
那你把中断最后的EA = 1先去掉测试嘛!先干一次看对不对塞!
另外把你红外读取的函数展览出来塞!指不定问题出那里面呢!
一周热门 更多>