DS1302有关问题求指教

2019-03-24 19:36发布

在定入单字节中为什么是for(i=0;i<8;i++)
        {
        sck=0;
        sda=dat&0x01;//取出dat的第0位数据写入1302 数据由低位开始传
        dat=dat>>1;
        sck=1;
        }这个时候的SDA是怎么样放的,为什么是与上0X01呢?而读出单字节的for(i=0;i<8;i++)
        {
                value=value>>1;
                sck=0;
                if(sda)
                value=value|0x80; //将1取出,写在dat的最高位
                sck=1;
        }这里又是为什么呀?写入读出后的SDA是高位到低位还是低位到高位,

求个详细的解释呀,,,,越细越好呀 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
小小白
1楼-- · 2019-03-25 01:09

           首先你要明白在这里是串行读写,一个时间内对于SDA来说只可能是高或低电平,对于写字节来说比如我要写一个01010011,我应该怎么办呢?肯定是先写入最后一位1了,我们一看就是1,但是电脑比较sb,他看不出来。。。必须去认为给他处理,既要把01010011的其他位都给干掉,怎么干呢?这个思路有点像IP地址里面子网掩码的作用,就是和0x01与,与过之后除了最后一位保留原来的的值其他都被干成0了,这个是我们想要的结果。。。。与之后对于任何一个数来说都已有两个值0x00和0x01,然后就对了。。。。。

        至于读其实写理解了,读就简单了,楼主自己想一下撒, 有不懂的再来和大家探讨撒。。。

 

[ 本帖最后由 小小白 于 2011-11-15 09:43 编辑 ]
小小白
2楼-- · 2019-03-25 06:34
我忘记说了,在写这些程序的时候记住了,对于51单片机来说,外部低电平能把IO口拉低但是外部高电平不能把IO口拉高
辛昕
3楼-- · 2019-03-25 10:14
 精彩回答 2  元偷偷看……
Dele_chen
4楼-- · 2019-03-25 15:14
读的时候 为什么是或上0X80而不是与0X80呢,那个写进去后是11001010吗?还是原本的01010011.
辛昕
5楼-- · 2019-03-25 18:55
你这个到底是写还是读?
Dele_chen
6楼-- · 2019-03-26 00:42
想问是之前小小白说那的那个写,写出来后的SDA是11001010还是原本的01010011。。。但为什么在读出来的时候不是与上0x80而是或呢?或的时候能读出0来吗

一周热门 更多>