下面注释的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;}