找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1497|回复: 2
收起左侧

单片机+SPI-E2PROM读取的程序问题

[复制链接]
ID:578842 发表于 2021-11-22 22:00 | 显示全部楼层 |阅读模式
对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?

回复

使用道具 举报

ID:624769 发表于 2021-11-22 22:52 | 显示全部楼层
如果移位再最后,

那么,做完最后一次  dat |= 0x01,之后, 假定是 0xFF;  即 11111111 。 你再次移位, 最高位移出,最低为补0, 就变成了 0xFE 即 11111110, 同理,由于移位的时候,都是最高位舍弃,最低为补0 所以你的 else 是不需要的,只要判断了 SO == 1    然后 dat |= 0x01; 即可, 因为你不给最低位置1,最低位就是默认的0。

评分

参与人数 1黑币 +15 收起 理由
wps10025 + 15 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:578842 发表于 2021-11-23 06:30 | 显示全部楼层
188610329 发表于 2021-11-22 22:52
如果移位再最后,

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

多谢多谢,明白了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表