导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→51中C语法逻辑问题,大侠快来解惑[guest]

 *第17860篇: 51中C语法逻辑问题,大侠快来解惑

  
楼 主:guest 2003年12月4日10:40
 51中C语法逻辑问题,大侠快来解惑
我在做51外部中断程序中碰到这样的怪事,我的中断程序如下,可以进中断。我设置了一个静态bit变量auto_flag来标志两次进中断后执行的程序,DOWN和UP是IO输出,但是我发现在单步的时候能区分auto_flag等于0或1,分别执行两个分支,但是一旦跑起来就只执行else部分,既auto_flag==0分支,我实在搞不懂了,大侠解惑呀!!!

static bit bdata auto_flag=0;


void INT0_ISR(void) interrupt 0    using 0
{
    EA=0;
    auto_flag=!auto_flag;
    DOWN=0;
    UP=0;
                    
    if(auto_flag==1) 
    {    
        up_flag=!up_flag;
        down_flag=!down_flag;
        autodriction_flag=!autodriction_flag;
        if(autodriction_flag==1)
            {    
                DOWN=0;
                UP=1;
            }
        if(autodriction_flag==0)    
            {                
            UP=0;
            DOWN=1;
            }
                            
        
    }
    else
    {    
        UP=0;
        DOWN=0;
        
    }
    EA=1;
    return;        
}

事实上我的程序的思想是这样的:按一个键来触发中断,(不论初始状态)按第一次UP=1,down=0,第二次UP=0,down=0,第三次UP=0,down=1。第四次UP=0,down=0,第五次UP=1,down=0,以此类推,不应该有观察不到的呀,我的UP和DOWN确实接的灯来看现象的,我现在在ELSE内的断点,发现每按动一次进的中断直接到ELSE内,这样我不明白,应该有间隔一次它不会跳进去的呀,可是单步却又正常,真是复了一句话实践得到真理,可这真理却不是我需要的,见鬼!!!

还有没有其他的实现方法,大侠支招

  
2楼:wbwu 2003年12月5日17:13
 Re:51中C语法逻辑问题,大侠快来解惑
将外部中断0设为后沿触发方式,试试!
  
3楼:lhjing999 2003年12月7日10:04
 这是C51的编译问题,为避开此问题,可少
这是C51的编译问题,为避开此问题,可少用IF  ELSE 机构,WHILE 结构,多用SWITCH 方式
  
4楼:guest 2003年12月7日16:25
 有可能是键抖动的问题,加去抖动电路试一下
有可能是键抖动的问题,加去抖动电路试一下。

>>>>>>对该主题发表你的看法

本主题贴数4,分页: [第1页]


[上一篇主题]:昏头了,请DX帮忙。。。。

[下一篇主题]:请教有高温环境下非接触式传输经验的高手