最近一直有个问题困扰着我,一个让我很受伤的问题,最近调了两个程序,最后总是得不到应有的结果,反反复复检查了好几天都没有调出来,最近终于发现了问题所在,两个程序都是for循环出的错,但是这个问题让我想破头也不知道原因,为什么这样会错了呢?
问题一:
源程序见附件https://static.assets-stash.eet-china.com/album/old-resources/2008/10/22/dbd7dae8-4913-4dfa-9a47-c98da8156e11.rar,其中Ds1302.h中有一个函数如下:
void DS1302InputByte(unsigned char d) //实时时钟写入一字节(内部函数)
{
unsigned char i;
ACC = d;
for (i=8;i>0;i--)
{
DS1302_IO = ACC0; // ACC0=ACC^0
DS1302_CLK = 1;
DS1302_CLK = 0;
ACC = ACC >> 1;
}
}
问题如下:
如果for 循环是(i=8;i>0;i--)一切正常,仿真也没有问题,但是写成(i=0;i<8;i++)的话就仿真不出来了,如果是(i=1;i<9;i++)的话又能正常了,不知道有什么玄机,想破头也没有想出来,哪位高手指点一下迷津啊????
问题二:
这是一个18B20的初始化程序,函数功能是给18B20写一个字节,
void write_18b20(uchar dat)
{
uchar i,j;
bit flag;
for(i=8;i>0;i--)
{
flag=dat&0x01;
dat>>=1;
if(flag)
{
TMDAT=0;
j++;j++;
TMDAT=1;
for(j=8;j>0;j--);
}
else
{
TMDAT=0;
for(j=8;j>0;j--);
TMDAT=1;
j++;j++;
}
}
}
红体的for循环,如果是for(j=8;j>0;j--)或者for(j=0;j<8;j++)时程序都会出现错误的结果,但是如果改为for(j=9;j>1;j--),程序就能正常了
我觉得这两个问题都是相同的问题,一定是我某个地方的知识没有掌握,由于身边没有人可以请教,所以恳请高手们帮我指出问题的所在,提携一下我这个后进青年,不胜感激!!
用户1370329 2009-2-13 14:09
用户1140564 2008-10-23 17:16