c语言 16位拆成,将16位数据拆成两个8位存EEPROM,读出时数据变了

/*****************************************

定义菜单的默认值

*******************************************/

MP1 const P1Rom={

0,                //地址

9600,

'A','S','5','0',//名字

1,        //a

0,        //b

1,        //采集时间 1S,2S,3S,5S,10S,20S,30S,60S可选

//------------------------------------- crc

IDK,                //ID

0,                        //crc 2009-2-20

};

MENUASC        const MenuAsc[]={

Int,        //设备的地址

Int,        //波特率

//--------------------------------- 1#

CHAR4,        //从机的名字

Float,        //计算参数

Float,        //计算参数

Int,                //初始角度!

};

//******************************************************************************

//计算参数的地址

//******************************************************************************

unsigned char *GetAdr(unsigned char IndeX,unsigned char *Adr){

unsigned char i,k=0;

for(i=0;i

return (Adr+k);

}

/**********************************************************

校验字节

***********************************************************/

unsigned char GetJiaoData(unsigned char *pBuf,unsigned int Long){

unsigned char j;

j=0;

while (Long--)        j += *pBuf++;

return j;

}

//************************************************************

//M=0是常用菜单;=1是备用菜单

//************************************************************

void WriteToEexx(unsigned int adr){

if(adr==rom_MP_ADR || adr==rom_MP_ADR_ghost){

Mp1.ID=IDK;

Mp1.crc=0;

Mp1.crc=GetJiaoData((unsigned char *)&Mp1,sizeof(Mp1));

WrFlash((unsigned int *)&Mp1,rom_MP_ADR,sizeof(Mp1));                          //全部写入一次!

WrFlash((unsigned int *)&Mp1,rom_MP_ADR_ghost,sizeof(Mp1));                  //全部写入一次!

}

}

//**********************************************************************************

//初始化菜单参数到2个地址的ROM中

void Init_MP1(unsigned int adr){

memcpy((unsigned char *)&Mp1,(unsigned char *)&P1Rom,sizeof(Mp1));

WriteToEexx(adr);

JB_Sn();

}

//**********************************************************************************

//返回=1 校验OK

//**********************************************************************************

//***********************************************************************************

//返回数据正确标志=0 ok;=1数据坏!

unsigned char Rd_MP_Dat(unsigned char *p,unsigned int adr){

MP1 *pr;

unsigned char sum;

RdFlash(p,adr,sizeof(MP1));          //全部读出来!

pr=(MP1 *)p;

sum=pr->crc;

pr->crc=0;

if(sum==GetJiaoData(p,sizeof(MP1)) && pr->ID ==IDK){//继续读菜单

pr->crc=sum;

sum=0;

}else{

sum=1;

}

return sum;

}

/***********************************************************************************

如果FIRST!=fIRST写入FLASHROM中

************************************************************************************/

void ReadMP(unsigned int adr){

if(adr==rom_MP_ADR){

if(Rd_MP_Dat((unsigned char *)&Mp1,adr)){

if(Rd_MP_Dat((unsigned char *)&Mp1,rom_MP_ADR_ghost))                Init_MP1(adr); //读取程序默认的参数表

}

}

}

//************************************************************************************/

void Jb_First(){

ReadMP(rom_MP_ADR);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值