KEIL编译正确单片机运行错误? 求高手啊

uchar a1,b1。dflag是总数不能大于四,当a1为0后,用dflag-(b1%0x10);当a1不为0,则判断b1+dflag是否大于4,如果大于四,则不动作,小于四则dflag=dflag+(b%0x10)并将a1左移4位。(因为a1为2个单数的组合)
if(a1/0x10==bflag)
{
if(((a1<<4)/0x10)==0)
{
dflag=dflag-(b1%0x10);
b1=0;
a1=0;
}
else
{
if((dflag+(b1%0x10))<=0x04)
{
a1=a1<<4;
dflag=dflag+(b1%0x10);
yiweiflag=1;
}
}
}
a1的范围是1至5整数,由其他单片机发送
b1的范围是0至4整数,由其他单片机发送

经不断复查。最后发现if((dflag+(b1%0x10))<=0x04)
有问题,把0x04改到大于0x10就能运行了。
但是问题在于我在keil里0x04是完美运行的啊。。。好奇怪啊(我保证其他单片机发送的数据也正确,求证过了)

朋友,你要达到的目的如果只是以上那段要求的话,第一句 if(a1/0x10==bflag)就多了,在这我需要提示的是,你在第一句用的是a1的高4位与bflag做的比较!!!
其他单看你语法,都是对的,所以不能指出什么问题,我想是你的逻辑上出现的问题,我只能提供书写简化的建议如下(以下指令与楼主程序达到目的是一样的)
if(a1/16==bflag) //判断a1的高4位等于bflag
{
if(a1%16==0) //a1的低4位等于0
{
dflag=dflag-(b1%16);
b1=0;
a1=0;
}
else
{
if((dflag+(b1%16))<=4)
{
a1=a1<<4; //这里a1变掉了,所以要特别注意,不能用同一个a1进行循环
dflag=dflag+(b1%16);
yiweiflag=1;
}
}
}
另外,程序注释的部分,麻烦你特别看下,是不是你需要达到的目的,如果不是的话,你可能就需要改动你自己的程序了
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-03
ia1/0x10==bflag;
if(!a1==0)//不等于0时候
{ if(( b1+dflag)<4)

dflag=dflag+(b%0x10)
a1=a1<<4;
dflag=dflag+(b1%0x10);
yiweiflag=1;
}

dflag =dflag-(b1%0x10);
这个应该是你描述的意思吧追问

不是啊。if((dflag+(b1%0x10))<=0x04)
这句我在keil里运行很好啊,但是单片机就不行,烧进去就错误

追答

你说的错误是指结果 不对呢?还是压根不能运行啊?

第2个回答  2011-08-03
更新一下,编译器版本试一下追问

跟编译器没关系吧。。

追答

我做的程序在uv3编译的就不能正常工作,改为uv4后就没问题了。

第3个回答  2011-08-03
dsdfsa追问

dsdfsa妹啊

追答

型号选错了吧

keil编译没有错误为什么烧进单片机不运行
Keil没有报错只能说明逻辑没有错误,但是不能运行有两方面原因:第一是你的程序设计有问题。第二是单片机硬件电路的问题。请在单片机可以正常工作的情况下,检查程序中各个子程序,引脚定义等等。

KEIL编译时没问题 运行时出现*** error 65: access violation at C:0x...
这种多半是因为程序写的不够严谨,没有形成闭环,所以在运行时,程序跑飞了。从信息看,你的程序试图将0000地址的code作为变量访问,但一般单片机都会出于防止代码剽窃的目的而设计硬件电路,防止这种情况的发生。

keil3 编译问题 编译通过,能下载到单片机里。 但却不能用?
软件已经破解成功,警告是指:存在 调用 却未 声明 的 外部函数。不过却是 main 函数,需要更详细的信息进行分析。如 工程中的 所有 文件名称,主文件中的 main函数,被调用的其他函数 的声明 等。

求大佬解疑:为什么用keil在仿真上可以用,在单片机上就啥反应也没呢...
您好:①首先麻烦您先确认自己有没有把程序烧录到单片机里面去;②如果您确认程序编译通过,且烧录到单片机中去了,那么后面需要确认的是,端口的定义以及原理图是不是有问题?

单片机C8051F410显示编译成功,但是程序不能运行。 Program Size: data...
keil软件没有注册只能运行code小于2KB的程序,或者target options>target>code rom size 选项选择错误 要选择large: 64K program

KEIL 单片机编程问题,好多错误。求大神帮改一下。万分感激
write_string(2,0," 平顶山市卫校 "); write_string(3,0," "); Send_threelines(0x10,0); \/\/语音播报 } } }}现在,已经可以编译了。原文中,就缺少很多变量和函数。题主应该给出全面的程序。

keil软件生成的的hex文件烧制到单片机里打开单片机没反应是怎么...
编写的程序错误,或者硬件有问题,估计是你程序有问题多,很多时候即使编译没有错误和警告,也经常会达不到想要的效果,程序都是要耐心调试后才能达到想要的效果的

单片机C语言keil编译出现错误,寄存器容量不足,怎么改正,急!!!_百度...
我用keil2,keil4编译都没有问题的。重新建一个工程,再试下。下图就是用keil4编译的结果。估计是没有破解。或者破解的不对。

单片机 keil软件编程提示错误,求解决…… 想知道这些都是什么个意思...
如果你在下图所示中的 Memory Model 里设置成 Small:variables in DATA,则DATA空间很快便用完,导致data空间不够用。解决的办法有两种,一是通过更改Memory Model设置,可以设置成pdata或xdata,以便有足够大的空间,但这又带来新的问题,程序运行速度减慢,而且code代码也会加大,因为如果一个局部变量被...

单片机汇编程序在keil中编译成功,但是Proteus中却仿真不了
编译成功 只能证明语法正确 可能你的硬件有问题,也可能程序就不对,单步执行一下吧。。看看 ,也可能protus的问题 以前我做数码管的动态显示。。就不行。。。放在开发板上就行。

相似回答