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:20 编辑
取高字节的表达式和合并两个字节的表达式是不是应该是像下面这样
如果你原来的程序测试也正确,那只有一种可能,高字节始终为0,
否则绝不可能正确
页:
[1]