首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2012-04-23 
DS1302 的读字节程序下面注释的3行不太明白,读字节也是从高位传起啊,一个8位的数据为什么要先左移一位?然

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;} 

热点排行