
c51程序 关于ACC累加器的使用?
voidds1302_InputByte(uchardat){uchari;ACC=dat;for(i=0;i<8;i++){P0_0=ACC_0;//defineACC...
void ds1302_InputByte(uchar dat)
{
uchar i;
ACC=dat;
for(i=0;i<8;i++)
{
P0_0=ACC_0;//define ACC_0 ACC^0
ACC>>=1;
}
}上面的函数用ACC送数据,经我验证这样写是错误的。for(i=0;i<8;i++)这8次循环语句我猜测它编译出的汇编程序用到了ACC。然后循环体里我又用它传送数据。我没有意识到循环体也用到ACC所以实际送出的ACC_0的值是错的、或者for循环也出错。
经改动如下:
void InputByte(uchar dat)
{
uchar i,temp;
temp=dat;
for(i=0;i<8;i++)
{
P0_0=(bit)(temp&0x01);
temp>>=1;
}
}这样改后,程序就能正确运行。。证明用到for(i=0;i<8;i++)的时候,循环体内部能用ACC.
void ds1302_InputByte(uchar dat)
{
uchar i;
ACC=dat;
for(i=8;i>0;i--)
{
P0_0=ACC_0;//define ACC_0 ACC^0
ACC>>=1;
}
}这样改也是正确的。。for(i=8;i>0;i--)是不是说明这个语句就没有用到ACC?for(i=0<8;i++)这个语句用到了。
是不是for(i=8;i>0;i--)这个语句要比for(i=0<8;i++)要好呀?我没用过汇编,不太了解汇编
想请高手指导下相关问题。。不知我说的对不? 展开
{
uchar i;
ACC=dat;
for(i=0;i<8;i++)
{
P0_0=ACC_0;//define ACC_0 ACC^0
ACC>>=1;
}
}上面的函数用ACC送数据,经我验证这样写是错误的。for(i=0;i<8;i++)这8次循环语句我猜测它编译出的汇编程序用到了ACC。然后循环体里我又用它传送数据。我没有意识到循环体也用到ACC所以实际送出的ACC_0的值是错的、或者for循环也出错。
经改动如下:
void InputByte(uchar dat)
{
uchar i,temp;
temp=dat;
for(i=0;i<8;i++)
{
P0_0=(bit)(temp&0x01);
temp>>=1;
}
}这样改后,程序就能正确运行。。证明用到for(i=0;i<8;i++)的时候,循环体内部能用ACC.
void ds1302_InputByte(uchar dat)
{
uchar i;
ACC=dat;
for(i=8;i>0;i--)
{
P0_0=ACC_0;//define ACC_0 ACC^0
ACC>>=1;
}
}这样改也是正确的。。for(i=8;i>0;i--)是不是说明这个语句就没有用到ACC?for(i=0<8;i++)这个语句用到了。
是不是for(i=8;i>0;i--)这个语句要比for(i=0<8;i++)要好呀?我没用过汇编,不太了解汇编
想请高手指导下相关问题。。不知我说的对不? 展开
展开全部
我也曾遇到你说的这个问题,巧的很,也是写DS1302的程序,我觉得与ACC关系不大。因为
我当时并没有使用ACC的位变量,而是你第二种方式(temp&0x01)。当用for(i=0;i<8:i++)时就是不行(怕写错,反复写了几次,都不行),只有改为for(i=8;i>0:i--)时就正常。当时也是百思不得其解。当我把整个程序写完以后,再回头研究这个问题时,发现改为for(i=0;i<8:i++)时竟然又正常了。到现在我也不明白开始为何不行,也记不清其间又改动了什么。
理论上讲两个应该完全等效。一般情况下效果应该完全相同。但我确确实是遇到上述现象,这也是我写程序历史唯一碰到的一次。
我后来在某些书上看到,使用for(i=8;i>0:i--)比for(i=0;i<8:i++)优化,速度也更快。
这里回答你,主要做个关注,看看有没有人也遇到同样的问题,并知道问题的所在。
补充:网上搜了一下,我更同意时序的观点。供参考
http://bbs.21ic.com/icview-44006-1-1.html
另外,我觉得还可能与MCU 芯片有关,我出现问题时用的是STC89C52。你可以写到华邦的78E51试试,因为我好几次发现将文件写到STC芯片有问题时,而华邦的芯片却完全正常。
我当时并没有使用ACC的位变量,而是你第二种方式(temp&0x01)。当用for(i=0;i<8:i++)时就是不行(怕写错,反复写了几次,都不行),只有改为for(i=8;i>0:i--)时就正常。当时也是百思不得其解。当我把整个程序写完以后,再回头研究这个问题时,发现改为for(i=0;i<8:i++)时竟然又正常了。到现在我也不明白开始为何不行,也记不清其间又改动了什么。
理论上讲两个应该完全等效。一般情况下效果应该完全相同。但我确确实是遇到上述现象,这也是我写程序历史唯一碰到的一次。
我后来在某些书上看到,使用for(i=8;i>0:i--)比for(i=0;i<8:i++)优化,速度也更快。
这里回答你,主要做个关注,看看有没有人也遇到同样的问题,并知道问题的所在。
补充:网上搜了一下,我更同意时序的观点。供参考
http://bbs.21ic.com/icview-44006-1-1.html
另外,我觉得还可能与MCU 芯片有关,我出现问题时用的是STC89C52。你可以写到华邦的78E51试试,因为我好几次发现将文件写到STC芯片有问题时,而华邦的芯片却完全正常。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询