打印
[51单片机]

DS1302时钟问题

[复制链接]
1139|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yexinsuso|  楼主 | 2013-11-24 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在学51,关于DS1302的时序问题,一般读一字节数据是这种unsigned char output(void)
{
        unsigned char i,dat=0;
        for(i=8;i>0;i--)
                {
                        dat>>=1;
                        if(DS1302_IO)dat|=0x80;
                        CLK=1;
                        CLK=0;
                }
                return (dat);
}
但是我有一直疑问:这一个字节数据到底是怎么样的过程被读出??if(DS1302_IO)dat|=0x80;这句话不是把所有的位都置1了吗??求大神能仔细帮我剖析这段代码,谢谢了

相关帖子

沙发
ningling_21| | 2013-11-24 19:14 | 只看该作者
总共循环8次,一次只读出一个位。

这个只是把最高位写为1,其它位不变。

使用特权

评论回复
板凳
chenyu988| | 2013-11-25 14:52 | 只看该作者
最高位,假设为a置1,下一次循环来了后右移1位,变成了第七位,。。。当8次循环结束后,a变成了最低位,最后一次的数据是最高位

使用特权

评论回复
地板
ayb_ice| | 2013-11-25 15:38 | 只看该作者
每次都在移位嘛(同时清零一位)

使用特权

评论回复
5
yexinsuso|  楼主 | 2013-11-27 12:01 | 只看该作者
ningling_21 发表于 2013-11-24 19:14
总共循环8次,一次只读出一个位。

这个只是把最高位写为1,其它位不变。 ...

谢谢关注,那数据读出来的时候应该是一位一位的吧?那我觉得改成if(DS1302_IO)dat|=(bit) 1   应该更好理解,但是这样结果显示就不正确了,为什么呢??

使用特权

评论回复
6
yexinsuso|  楼主 | 2013-11-27 12:03 | 只看该作者
chenyu988 发表于 2013-11-25 14:52
最高位,假设为a置1,下一次循环来了后右移1位,变成了第七位,。。。当8次循环结束后,a变成了最低位,最 ...

谢谢关注,那为什么要在  if(DS1302_IO)   的条件下执行移位操作呢??

使用特权

评论回复
7
yexinsuso|  楼主 | 2013-11-27 12:03 | 只看该作者
ayb_ice 发表于 2013-11-25 15:38
每次都在移位嘛(同时清零一位)

谢谢关注,我很笨,请问怎么体现出“ 清零 ”的呢??

使用特权

评论回复
8
yexinsuso|  楼主 | 2013-11-27 12:08 | 只看该作者
chenyu988 发表于 2013-11-25 14:52
最高位,假设为a置1,下一次循环来了后右移1位,变成了第七位,。。。当8次循环结束后,a变成了最低位,最 ...

谢谢关注,我觉得数据是一位一位传出来的,那每次dat的数据都在变。为什么要在if(DS1302_IO)的前提下移位,如果DS1302_IO 不等于1,岂不是少操作一次,即dat少移位一次,那最终传出来来的dat不是不完整的吗??

使用特权

评论回复
9
戈卫东| | 2013-11-27 12:22 | 只看该作者
典型的移位寄存器访问......

使用特权

评论回复
10
ningling_21| | 2013-11-27 12:47 | 只看该作者
yexinsuso 发表于 2013-11-27 12:01
谢谢关注,那数据读出来的时候应该是一位一位的吧?那我觉得改成if(DS1302_IO)dat|=(bit) 1   应该更好理 ...

dat是字符型变量,不能被赋值为 位变量 的值。

使用特权

评论回复
11
ayb_ice| | 2013-11-27 13:57 | 只看该作者
yexinsuso 发表于 2013-11-27 12:03
谢谢关注,我很笨,请问怎么体现出“ 清零 ”的呢??

dat>>=1;

这是C标准规定的,我也没有办法

使用特权

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

本版积分规则

15

主题

26

帖子

0

粉丝