首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

请问大侠们一个关于51读时序的有关问题

2012-04-03 
请教大侠们一个关于51读时序的问题下面程序是51读取时钟芯片DS1302数据的源码ACC7ACC^7IOP2^5uchar read

请教大侠们一个关于51读时序的问题
下面程序是51读取时钟芯片DS1302数据的源码
ACC7=ACC^7
IO=P2^5
uchar read_byte()
{
RST=1;
for(a=8;a>0;a--)
{
ACC7=IO; //这个是把IO口的数据赋值给ACC^7
SCLK=1;
SCLK=0; //下降沿1302送出数据到IO口
  到这里数据能送到ACC7上吗?我感觉数据送出来后只送到了IO上而已,由于没有再赋值所以无法送到ACC7上。 ACC=ACC>>1;

}
return (ACC);

是否ACC7=I0这条语句,只要之后IO数值变化后就能直接传送到ACC7而不需要再次赋值呢?多谢!


[解决办法]
是否ACC7=I0这条语句,只要之后IO数值变化后就能直接传送到ACC7而不需要再次赋值呢?多谢!
当然不是了,每次都要读的
for(a=8;a>0;a--)
{
ACC=ACC>>1;
ACC7=IO; //这个是把IO口的数据赋值给ACC^7
SCLK=1;
SCLK=0; //下降沿1302送出数据到IO口
}
return (ACC);
[解决办法]
呵呵。你这个程序是反着写的。。第一次循环无意义。、
那个acc7=io实际上赋的是上次循环中下降沿写的值。
你这个循环就有8次,实际有效移位只有7次而已
[解决办法]
C语言不支持位操作,可以这样:
ACC=0;
for(a=8;a>0;a--)
{
ACC=ACC>>1;
IF(IO==1)
ACC|=IO;
SCLK=1;
SCLK=0;
}

热点排行