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

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

   guest 
guest发表的帖子 

 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内,这样我不明白,应该有间隔一次它不会跳进去的呀,可是单步却又正常,真是复了一句话实践得到真理,可这真理却不是我需要的,见鬼!!!

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


发表时间:2003年12月4日10:40:47

  
回复该帖

本主题共有 4 帖,分页:>>>>>该主题的所有内容[4]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  45937.[详细]Re:51中C语法逻辑问题,大侠快来解惑
摘要:将外部中断0设为后沿触发方式,试试!......(35字)
- [wbwu][1096次] 2003年12月5日

  45966.[详细]这是C51的编译问题,为避开此问题,可少用IF ELSE 机构,W..
摘要:这是C51的编译问题,为避开此问题,可少用IF  ELSE 机构,WHILE 结构,多用SWITCH 方式......(81字)
- [lhjing999][1164次] 2003年12月7日

  45986.[详细]有可能是键抖动的问题,加去抖动电路试一下。
摘要:有可能是键抖动的问题,加去抖动电路试一下。......(42字)
- [guest][1233次] 2003年12月7日

[上一篇帖子]:昏头了,请DX帮忙。。。。有一个数组A[1]....1[8]要分别取出他的BIT组成一个新的BYTE
[下一篇帖子]:(1)比较器 (2)关耦 (3)三极管