ds1302读引脚时为什么可以不对I/O口写1

[复制链接]
3400|4
 楼主| soch 发表于 2010-4-4 21:49 | 显示全部楼层 |阅读模式
uchar uc_RTOutputByte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >>1;
//T_IO=1;//这里为什么不加这条语句呢?不是读引脚 吗?
ACC7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
NE5532 发表于 2010-4-4 21:53 | 显示全部楼层
T_IO有被设置为输出的时候么?
下次提问的时候注意把环境说清楚,不是任何人都能猜到你用的51的!!
 楼主| soch 发表于 2010-4-4 21:57 | 显示全部楼层
sbit T_CLK = P2^7; /*实时时钟时钟线引脚 */
sbit T_IO = P1^4; /*实时时钟数据线引脚 */
sbit T_RST = P1^5; /*实时时钟复位线引脚 */
不好意思,小弟初学,ds1302在下降沿输出数据,按我的本意思我是这么写的
for(i=8;i>0;i--)
{
   T_CLK = 1;
   T_CLK = 0;
   T_IO=1;
   ACC7 = T_IO;
    ACC = ACC >>1;

}
结果不行,而上面那个可以。
 楼主| soch 发表于 2010-4-4 22:09 | 显示全部楼层
怎么没有人回答啊?
NE5532 发表于 2010-4-5 08:53 | 显示全部楼层
T_IO=1;

for(i=7;i>0;i--)
{
   T_CLK = 1;
   T_CLK = 0;
   ACC7 = T_IO;
   ACC = ACC >>1;
}

T_CLK = 1;
T_CLK = 0;
ACC7 = T_IO;

51单片机,端口输出“1”是因为开漏输出,为了释放引脚以便读入,你的for循环整个都是读入过程,所以在外面做一次就够了。你的移位也有问题,读入的最后一个位被你移到Acc.6上去了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

41

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部