IF语句条件满足却进不去

xuelian922 2008-08-25 04:57:12
这段时候改个程序遇到个很奇怪的问题,在中 断中我明明把命令字置1了,但是在main程序里面却进不了 if(CmdValid)这个条件判断语句里面。请问各位高手是什么原因啊?我是新手,实在是不知道为什么啊?!在此谢谢各位啦!

void main(void)
{
char idata status;

init();

init_serialcomm();

status = M500PcdConfig();

Idle_init(); //Initialize and prepare for Idle subroutine process

while(1)

{ TOGGLE_WD();

if(CmdValid) 这里老进不去

{
LED(OFF);
Tdelay_10ms(10);
LED(ON);

cmdexecution();

CmdValid = FALSE;

Idle=FALSE;
else 发送串数据返回是01后但是程序还是跑到这来了
{
LED(OFF);
Tdelay_10ms(30);
LED(ON);
Tdelay_10ms(10);
}

}
}void com_UART(void) interrupt 4 using 1
{

unsigned char idata chek,c;

TOGGLE_WD();
if(RI)
{
c=SBUF;
RI=0;

oldstate=nowstate;
nowstate=0;

switch(oldstate)
{
case 0:
if(c==0xAB)
{
TIME_OUT=50;
chek=c;
nowstate=1;

break;
}
else
{
nowstate=0;


break;
}
case 1:
if(c<=0x2f&&c>=0x20)
{
TIME_OUT=50;
REBuffer[0]=c;
chek^=c;
nowstate=2;


}
else
{
nowstate=0;}

break;

case 2:
TIME_OUT=50;
REBuffer[1]=c;
chek^=c;
nowstate=3;
index=0;

break;
case 3:
TIME_OUT=50;
if(index {
REBuffer[2+index]=c;
chek^=c;
index++;
nowstate=3;
break;
}

if(c==chek)
{
CmdValid=1; 这里在串口调试器上看到是01
SBUF=CmdValid;
while(!TI);
TI=0;
}
else
{
SBUF=0xFF;
CmdValid=0;
while(!TI);
TI=0;

}
break;
default: break;
}
}
if(TI&&!RI)
{
TI=0;
chek=0;
index=0;
}

}
}
希望各位高手帮我看下
...全文
1370 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuelian922 2008-08-27
  • 打赏
  • 举报
回复
谢谢大家的帮助,现在问题解决了,原来是我的Tdelay_10ms延迟程序里有用到CmdValid,当它为1时就不能实现延迟。当中断将其置1后进入if(CmdValid) 但是没有立即就置0,延迟程序不能进入使得led关了立即就亮,肉眼看不出来灯闪了所以一直以为没有进入。
谢谢各位!大家说的方法都很好,对我有很大帮助
用户 昵称 2008-08-26
  • 打赏
  • 举报
回复
我怀疑你的程序在某处阻塞了,单步执行试试,保证断点之前每个语句都能执行。
season030441 2008-08-26
  • 打赏
  • 举报
回复
单片机的程序。估计是由于优化问题这个变量没有被重新读取。你可以用个最简单的办法在那里直接写1看看能不能进去。
pangqi022 2008-08-25
  • 打赏
  • 举报
回复
你来VC群 问单片机的程序晕!!!!
schlafenhamster 2008-08-25
  • 打赏
  • 举报
回复 1
可能被优化掉了,要这样定义:
volatile int CmdValid;

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧