你好,请问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的读字节函数?放在前后读出数据不一样?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
- for(i=0;i<8;i++)
- {
- aa>>=1;
- if(dsio==1)
- {
- aa|=0x80;
- }
- }
- for(i=0;i<8;i++)
- {
-
- if(dsio==1)
- {
- aa|=0x80;
- }
- aa>>=1;
- }
复制代码放在前边,第一次读取数据是正确的,第二次以后数据就是错的,解决方法是:将aa处理之后进行释放,给他赋值为0;推荐放在后边。
左移右移有时容易搞混!
"for(i=0;i<8;i++)
{
//aa>>=1;
if(dsio==1)
aa|=0x80;
aa>>=1;"
"假设要读取的数据为IO=0101 1001
aa为任意八位数据,假定aa=1000 1110"
原始数据 aa=1000 1110
i=0 0100 0111
i=1 0010 0011
i=2 0001 0001
i=3 0100 1000
i=4 0110 0100
i=5 0011 0010
i=6 0101 1001
i=7 0010 1100
用第二个是错的,会多出来一个移位,但是只有这样写才能读出数据,写在前面读不出数据?
写在后面是对的,写在前面是错的,但是我分析应该写在前面!此程序为DS1302读程序!
一周热门 更多>