zs17771433015 发表于 2023-7-13 00:24:23

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

#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 = work_Adata & 0xff00;
                        initbuf = work_Adata & 0x00ff;
                        initbuf = tuiLi_Adata & 0xff00;
                        initbuf = tuiLi_Adata & 0x00ff;
                        initbuf = reHu_Adata & 0xff00;
                        initbuf = reHu_Adata & 0x00ff;
                        EEPROM_write_n(address_init, initbuf, 6);
                        delay_ms(1);
                        EEPROM_read_n(address_init, initbuf, 6);
                        dat1 = initbuf * 0xff + initbuf;
                        dat2 = initbuf * 0xff + initbuf;
                        dat3 = initbuf * 0xff + initbuf;
               
                        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 == mima)
{
        mimaSta = 1;
        work_Adata_max =initbuf * 0xff +        initbuf;
        I_work220 =         initbuf * 0xff +        initbuf;
        I_work380 =         initbuf * 0xff +        initbuf;

        initbuf = 0;
        initbuf = 0;
        initbuf = 0;
        initbuf = 0;
        initbuf = 0;
        initbuf = 0;
        initbuf = 0;
        EEPROM_read_n(address_init, initbuf, 6);

        work_Adata = initbuf * 0xff +        initbuf;
        tuiLi_Adata = initbuf * 0xff +        initbuf;
        reHu_Adata = initbuf * 0xff +        initbuf;
}
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 = mima;
                initbuf = I_work & 0xff00;
                initbuf = I_work & 0x00ff;
                initbuf = I_work220 & 0xff00;
                initbuf = I_work220 & 0x00ff;
                initbuf = I_work380 & 0xff00;
                initbuf = I_work380 & 0x00ff;
                EEPROM_write_n(0x0000, initbuf, 7);
                delay_ms(1);
                EEPROM_read_n(0x0000, initbuf, 7);
                dat1 = initbuf * 0xff + initbuf;
                dat2 = initbuf * 0xff + initbuf;
                dat3 = initbuf * 0xff + initbuf;
       
                if((dat1 == I_work) && (dat2 == I_work220) && (dat3 == I_work380) && (mima == initbuf))
                {
                        mimaSaveFlag = 0;
                        mimaMode = 3;               
                }        
        }

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

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


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



zhp 发表于 2023-7-13 09:04:27

本帖最后由 zhp 于 2023-7-13 09:20 编辑

取高字节的表达式和合并两个字节的表达式是不是应该是像下面这样

如果你原来的程序测试也正确,那只有一种可能,高字节始终为0,
否则绝不可能正确

页: [1]
查看完整版本: STC8H3K64S2连续读6位,只有前几位正确