打印

每次循环都是0

[复制链接]
1616|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuww|  楼主 | 2022-2-3 09:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void write_byte(uchar bdat)
{

uchar i,j;

for(i=0;i<8;i++)

{



j=(bdat>>i)&0x01;

//j=bdat>>i;

//j=j&1;

write_bit(j);


}

}大家看一下程序,这程序的原意是分离出一个字节每一位,可调试j 每次循环都是0,而j=bdat>>i;j=j&1;这两条语句代替调正常,可奇怪的把程序仿真还正常用运行

使用特权

评论回复
沙发
renyaq| | 2022-2-3 09:16 | 只看该作者
你在汇编窗口看下就知道咋回事了,一般是显示刷新咋成的,前一个语句执行完了,但是j的数值还没有刷新,在write_bit(j)之前加个nop语句好像就可以了;

使用特权

评论回复
板凳
huangchui| | 2022-2-3 09:19 | 只看该作者
好像不是那么回事啊,单步运行,八次for循环,j都直是0

使用特权

评论回复
地板
stly| | 2022-2-3 09:21 | 只看该作者
别的地方有没有j这个变量?

使用特权

评论回复
5
huangchui| | 2022-2-3 09:23 | 只看该作者
调试时先不优化程序

使用特权

评论回复
6
juventus9554| | 2022-2-3 21:46 | 只看该作者

keil的版本要用新一点的,我以前遇到的情况和你是一样的 ,后来换了个新版本就好了

使用特权

评论回复
7
pengf| | 2022-2-3 21:48 | 只看该作者
直接定义     uchar bdata I2CDATA;

使用特权

评论回复
8
dengdc| | 2022-2-3 22:00 | 只看该作者
sbit I2CDATA_0 = I2CDATA^0;

使用特权

评论回复
9
zhuww|  楼主 | 2022-2-3 22:02 | 只看该作者
嗯,那我按大家的说法挨个排查一下

使用特权

评论回复
10
tpgf| | 2022-3-2 15:58 | 只看该作者
不能这样看变量值吧

使用特权

评论回复
11
八层楼| | 2022-3-2 16:09 | 只看该作者
确定进入循环代码了吗

使用特权

评论回复
12
观海| | 2022-3-2 16:16 | 只看该作者
这么看是没啥事儿的

使用特权

评论回复
13
guanjiaer| | 2022-3-2 16:37 | 只看该作者
自加一之后也是0?

使用特权

评论回复
14
heimaojingzhang| | 2022-3-2 16:45 | 只看该作者
临时变量应该不至于啊

使用特权

评论回复
15
keaibukelian| | 2022-3-2 16:50 | 只看该作者
得看bdat变量是什么

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

893

主题

8252

帖子

1

粉丝