找回密码
 立即注册
查看: 274|回复: 1

STC8H3K64S2连续读6位,只有前几位正确

[复制链接]

该用户从未签到

2

主题

1

回帖

24

积分

新手上路

积分
24
发表于 2023-7-13 00:24:23 | 显示全部楼层 |阅读模式
#define address_init 0x0400


////////////////////////////////////////////////////////////
//20ms定时执行
////////////////////////////////////////////////////////////
void Adata_save(void)
{
        u8 dat1,dat2,dat3;

        if((Adata_flag == 1) && (mimaSta == 1))
        {
                if(Adata_flag_cnt++ > 500)
                {
                        Adata_flag_cnt = 0;

                        EEPROM_SectorErase(address_init);
                        initbuf[0] = work_Adata & 0xff00;
                        initbuf[1] = work_Adata & 0x00ff;
                        initbuf[2] = tuiLi_Adata & 0xff00;
                        initbuf[3] = tuiLi_Adata & 0x00ff;
                        initbuf[4] = reHu_Adata & 0xff00;
                        initbuf[5] = reHu_Adata & 0x00ff;
                        EEPROM_write_n(address_init, initbuf, 6);
                        delay_ms(1);
                        EEPROM_read_n(address_init, initbuf, 6);
                        dat1 = initbuf[0] * 0xff + initbuf[1];
                        dat2 = initbuf[2] * 0xff + initbuf[3];
                        dat3 = initbuf[4] * 0xff + initbuf[5];
               
                        if((dat1 == work_Adata) && (dat2 == tuiLi_Adata) && (dat3 == reHu_Adata))
                        {
                                Adata_flag = 0;               
                        }                        
                }
        }
}

////////////////////////////////////////////////////////////
//开机执行
////////////////////////////////////////////////////////////
void data_init(void)
{
        delay_ms(200);
        delay_ms(200);
        delay_ms(200);
        delay_ms(200);
        delay_ms(200);
          EEPROM_read_n(0x0000, initbuf, 7);

  if(initbuf[0] == mima)
  {
        mimaSta = 1;
        work_Adata_max =  initbuf[1] * 0xff +        initbuf[2];
        I_work220 =         initbuf[3] * 0xff +        initbuf[4];
        I_work380 =         initbuf[5] * 0xff +        initbuf[6];

        initbuf[0] = 0;
        initbuf[1] = 0;
        initbuf[2] = 0;
        initbuf[3] = 0;
        initbuf[4] = 0;
        initbuf[5] = 0;
        initbuf[6] = 0;
        EEPROM_read_n(address_init, initbuf, 6);

        work_Adata = initbuf[0] * 0xff +        initbuf[1];
        tuiLi_Adata = initbuf[2] * 0xff +        initbuf[3];
        reHu_Adata = initbuf[4] * 0xff +        initbuf[5];
  }
  else
  {
        mimaSta = 0;
        mimaMode = 0;
       
        I_work = 30;
        I_work220 = 20;
        I_work380 = 20;
        led_data = I_work;       
  }
}
////////////////////////////////////////////////////////////
//20ms定时执行,只会执行一次
////////////////////////////////////////////////////////////
void write_Init_data(void)
{
        u16 dat1,dat2,dat3,dat4;

        if(mimaSaveFlag == 1)
        {
                EEPROM_SectorErase(0x0000);
                initbuf[0] = mima;
                initbuf[1] = I_work & 0xff00;
                initbuf[2] = I_work & 0x00ff;
                initbuf[3] = I_work220 & 0xff00;
                initbuf[4] = I_work220 & 0x00ff;
                initbuf[5] = I_work380 & 0xff00;
                initbuf[6] = I_work380 & 0x00ff;
                EEPROM_write_n(0x0000, initbuf, 7);
                delay_ms(1);
                EEPROM_read_n(0x0000, initbuf, 7);
                dat1 = initbuf[1] * 0xff + initbuf[2];
                dat2 = initbuf[3] * 0xff + initbuf[4];
                dat3 = initbuf[5] * 0xff + initbuf[6];
       
                if((dat1 == I_work) && (dat2 == I_work220) && (dat3 == I_work380) && (mima == initbuf[0]))
                {
                        mimaSaveFlag = 0;
                        mimaMode = 3;               
                }        
        }

        if(init_flag_save == 1)
        {
                 EEPROM_SectorErase(0x0000);
                 EEPROM_read_n(0x0000, initbuf, 7);
                 if(initbuf[0] != mima)
                 {
                           init_flag_save = 0;
                          mimaSta = 0;
                          mimaMode = 3;
                 }
        }
}

write_Init_data();每次都能读写正确


data_init();  只有数组的前3个读写正确,后面4个时不时出错



微信图片_20230713001904.png
回复 送花

使用道具 举报

  • TA的每日心情
    开心
    5 天前
  • 签到天数: 16 天

    [LV.4]偶尔看看III

    16

    主题

    719

    回帖

    2564

    积分

    超级版主

    积分
    2564
    发表于 2023-7-13 09:04:27 | 显示全部楼层
    本帖最后由 zhp 于 2023-7-13 09:20 编辑

    取高字节的表达式和合并两个字节的表达式是不是应该是像下面这样
    1.png
    如果你原来的程序测试也正确,那只有一种可能,高字节始终为0,
    否则绝不可能正确

    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-16 00:49 , Processed in 0.054972 second(s), 35 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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