关于51单片机一个一个字节读数据的写法

2019-07-14 20:02发布

你好,请问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的读字节函数?放在前后读出数据不一样?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
fashaoyou01
1楼-- · 2019-07-16 03:20
猎国倾城 发表于 2016-12-10 15:43
你把程序改为这样试试,这样只移动7次。而你的程序不管是放在前面还是后面,都移动了8次。

你好,如果这样的话,当i=0时,我假设bit=0000 0000(即第一个为低电平),而aa是未知的,如果aa=1001 1001那岂不是把bit这第一个字节给丢失了,这样每次读之前是不是应该给aa赋值即aa=0000 0000。
还有个问题:bit是第一个(假设高电平)传输时是等于0000 0001还是1000 0000,为什么第二个就变成0000 0010或者0100 0000.
DS1302这个我知道具体原因,但是没想明白,原因是传完地址以后,一个周期的传完地址以后下降沿立刻传输读数据,所以会出现那种现象,但是没想明白!
猎国倾城
2楼-- · 2019-07-16 09:02
fashaoyou01 发表于 2016-12-12 14:20
你好,如果这样的话,当i=0时,我假设bit=0000 0000(即第一个为低电平),而aa是未知的,如果aa=1001 1001那岂不是把bit这第一个字节给丢失了,这样每次读之前是不是应该给aa赋值即aa=0000 0000。
还有个问题:bit是第一个(假设高电平)传输时是等于0000 0001还是1000 0000,为什么第二个就变成0000 0010或者0100 0000.
D ...
  1. void read()
  2. {
  3. unsigned char i,aa=0;
  4. for(i=0;i<8;i++)
  5. {
  6.      uchar bit=0;
  7.      bit=dsio;
  8.      aa|=(bit>>i);     
  9.      dsclk=1;
  10.      _nop_;
  11.      dsclk=0;
  12.      _nop_;

  13. }
  14.    return aa;
  15. }
复制代码

一周热门 更多>