你好,请问aa>>=1,放在if(dsio==1) aa|=0x80;的前面和后面有什么不同?
unsigned char i;
for(i=0;i<8;i++)
{
//aa>>=1;放在这边和放在后面有什么不同?
if(dsio==1)
aa|=0x80;
aa>>=1;放在这边和放在前面有什么不同?
dsclk=1;
_nop_;
dsclk=0;
_nop_;
return aa;
}
这个是DS1302的读字节函数?放在前后读出数据不一样?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你好,如果这样的话,当i=0时,我假设bit=0000 0000(即第一个为低电平),而aa是未知的,如果aa=1001 1001那岂不是把bit这第一个字节给丢失了,这样每次读之前是不是应该给aa赋值即aa=0000 0000。
还有个问题:bit是第一个(假设高电平)传输时是等于0000 0001还是1000 0000,为什么第二个就变成0000 0010或者0100 0000.
DS1302这个我知道具体原因,但是没想明白,原因是传完地址以后,一个周期的传完地址以后下降沿立刻传输读数据,所以会出现那种现象,但是没想明白!
- void read()
- {
- unsigned char i,aa=0;
- for(i=0;i<8;i++)
- {
- uchar bit=0;
- bit=dsio;
- aa|=(bit>>i);
- dsclk=1;
- _nop_;
- dsclk=0;
- _nop_;
-
- }
- return aa;
- }
复制代码一周热门 更多>