标题: 单片机+SPI-E2PROM读取的程序问题 [打印本页]

作者: wps10025    时间: 2021-11-22 22:00
标题: 单片机+SPI-E2PROM读取的程序问题
对25AA02的读写底层读程序这样:
unsigned char EE_Read_Byte()
{
   unsigned char dat;
   unsigned char i;

   for(i=0;i<8;i++)
   {
           dat<<=1;
        AA_SCK=0;
           AA_SCK=1;
           if(SO!=0)
        {
           dat=dat|0x01;
        }
           else
        {
           dat=dat&0xfe;
        }
   }
   return dat;

}

仿真结果是255
unsigned char EE_Read_Byte()
{
   unsigned char dat;
   unsigned char i;

   for(i=0;i<8;i++)
   {

        AA_SCK=0;
           AA_SCK=1;
           if(SO!=0)
        {
           dat=dat|0x01;
        }
           else
        {
           dat=dat&0xfe;
        }
          dat<<=1;
   }
   return dat;

}

仿真结果是254


有没有大神指点一下,为什么移位操作位置不同会丢个1?


作者: 188610329    时间: 2021-11-22 22:52
如果移位再最后,

那么,做完最后一次  dat |= 0x01,之后, 假定是 0xFF;  即 11111111 。 你再次移位, 最高位移出,最低为补0, 就变成了 0xFE 即 11111110, 同理,由于移位的时候,都是最高位舍弃,最低为补0 所以你的 else 是不需要的,只要判断了 SO == 1    然后 dat |= 0x01; 即可, 因为你不给最低位置1,最低位就是默认的0。
作者: wps10025    时间: 2021-11-23 06:30
188610329 发表于 2021-11-22 22:52
如果移位再最后,

那么,做完最后一次  dat |= 0x01,之后, 假定是 0xFF;  即 11111111 。 你再次移位 ...

多谢多谢,明白了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1