单片机/MCU论坛
直播中

jacheng

10年用户 54经验值
擅长:可编程逻辑 嵌入式技术 接口/总线/驱动 控制/MCU
私信 关注
[问答]

MSP430F149的DS1302读取字节函数问题?

/*******************************************
函数名称:Read1Byte
功    能:从DS1302读出1个字节的数据
参    数:无
返回值  :读出的一个字节数据
********************************************/
uchar Read1Byte(void)
{
    uchar i;
    uchar rdata = 0X00;

    DS_SDA_IN;  //SDA对应的IO设置为输入状态
    DS_RST1;    //REST=1

    for(i = 8; i > 0; i--)
    {
        DS_SCL1;
        delay(10);
        DS_SCL0;
        delay(10);
        rdata >>= 1;
        if(DS_SDA_BIT)  rdata |= 0x80;
    }
   
    return(rdata);
}


上述为MSP430F149的官方例程,功能是从DS1302中读出1个字节的数据。通过将程序与时序对比,发现加红的两句代码是不是出错了?为什么移位之后还要将数据与0x80相或呢?这样做不就会改变读取的数据吗?430小白一个,麻烦各位大侠指点一下,小弟不胜感激。

回帖(2)

晓晓江南

2018-2-25 11:57:54
如果每次读取的二进制数存入到rdata的高位并向右移位一次,再与0x80作或运算,这样就不会改变读取的数据.
举报

jacheng

2018-2-25 13:23:14
引用: 晓晓江南 发表于 2018-2-25 11:57
如果每次读取的二进制数存入到rdata的高位并向右移位一次,再与0x80作或运算,这样就不会改变读取的数据.

读取的二进制是放在高位,即第7位,右移1位就到了第6位,然后再与0x80相或不就又给第7位置1了吗?这样就改变了读取的数据了,难道不是这样吗?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分