当前位置: 代码迷 >> 单片机 >> DS1302 的读字节程序,该如何处理
  详细解决方案

DS1302 的读字节程序,该如何处理

热度:134   发布时间:2016-04-28 16:00:41.0
DS1302 的读字节程序
下面注释的3行不太明白,读字节也是从高位传起啊,
一个8位的数据为什么要先左移一位?
然后判断SDA ==1?
数据dat|=0x80 有什么用?读取最高位数据吗?dat最高位为0,与0x80 与运算 就成1了啊!诚心求救!希望解释的通俗一点,本人十足的入门级!
C/C++ code
uchar DS1302ReadByte(){    uchar i,dat;    delayus();    for(i=0;i<8;i++)    {    dat<<=1;                    //    if(SDA == 1)                //        dat|=0x80;          //    SCLK=1;    delayus(2);    SCLK=0;    delayus(2);    }    return dat;}



------解决方案--------------------
你这个代码有问题,右移才对
 dat|=0x80 的意思是对dat最高位置1,右移的目的就是把最高位空出来

C/C++ code
uint8 DS1302_ReadByte(){    uint8 i;    uint8 dat = 0;    for (i=0; i<8; i++)             //8位计数器    {        DS1302_SCLK = 0;            //时钟线拉低        _nop_();                    //延时等待        _nop_();        dat >>= 1;                  //数据右移一位        if (DS1302_IO)             dat |= 0x80;            //读取数据                    DS1302_SCLK = 1;            //时钟线拉高        _nop_();                    //延时等待        _nop_();    }    return dat;}