📄 eeprom.c
字号:
#include <Reg932.h>
#include <stdio.h>
unsigned long int EEPROMreadLong(unsigned char adr);
void EEPROMwriteLong(unsigned char adr, unsigned long int dat);
void EEPROMwrite(unsigned char adr, unsigned char dat)
{
EA=0; // disable Interrupts during write
DEECON=(unsigned char)((adr>>8)&0x01); // mode: write byte, set address
DEEDAT=dat; // set write data
DEEADR=(unsigned char) adr; // start write
EA=1;
while((DEECON&0x80)==0); // wait until write is complete
}
unsigned char EEPROMread(unsigned char adr)
{
DEECON=(unsigned char)((adr>>8)&0x01); // mode: read byte, set adress
DEEADR=(unsigned char) adr; // start read
while((DEECON&0x80)==0); // wait until read is complete
return DEEDAT; // return data
}
void EEPROMwritestr(unsigned char EEPROMadr, unsigned char *dat,unsigned char len)
{
unsigned char i;
unsigned char CRC=0;
for(i=0;i<len;i++)
{
EEPROMwrite(EEPROMadr + i, dat[i] );
CRC = CRC + dat[i];
}
EEPROMwrite(EEPROMadr + len, CRC );
}
unsigned char EEPROMreadstr(unsigned char EEPROMadr, unsigned char *dat,unsigned char len)
{
unsigned char i;
unsigned char CRC=0;
for(i=0;i<len;i++)
{
dat[i] = EEPROMread( EEPROMadr + i );
CRC = CRC + dat[i];
}
i = EEPROMread( EEPROMadr + len );
if (CRC == i)
return 1;
return 0;
}
void EEPROMwriteLong(unsigned char adr, unsigned long int dat)
{
EA=0; // disable Interrupts during write
DEECON=0x00; // mode: write byte, set address
DEEDAT= (unsigned char)(dat & 0x000000FF); // set write data
DEEADR= adr; // start write
EA=1;
while((DEECON&0x80)==0); // wait until write is complete
EA=0; // disable Interrupts during write
DEECON=0x00; // mode: write byte, set address
DEEDAT= (unsigned char)((dat>>8) & 0x000000FF); // set write data
DEEADR= adr+1; // start write
EA=1;
while((DEECON&0x80)==0); // wait until write is complete
EA=0; // disable Interrupts during write
DEECON=0x00; // mode: write byte, set address
DEEDAT= (unsigned char)((dat>>16) & 0x000000FF); // set write data
DEEADR= adr+2; // start write
EA=1;
while((DEECON&0x80)==0); // wait until write is complete
EA=0; // disable Interrupts during write
DEECON=0x00; // mode: write byte, set address
DEEDAT= (unsigned char)((dat>>24) & 0x000000FF); // set write data
DEEADR= adr+3; // start write
EA=1;
while((DEECON&0x80)==0); // wait until write is complete
}
unsigned long int EEPROMreadLong(unsigned char adr)
{
unsigned long int val;
DEECON=0x00; // mode: read byte, set adress
DEEADR=(unsigned char) adr; // start read
while((DEECON&0x80)==0); // wait until read is complete
val = (unsigned long)DEEDAT;
DEECON=0x00; // mode: read byte, set adress
DEEADR=(unsigned char) adr+1; // start read
while((DEECON&0x80)==0); // wait until read is complete
val = val + ((unsigned long)DEEDAT << 8);
DEECON=0x00; // mode: read byte, set adress
DEEADR=(unsigned char) adr+2; // start read
while((DEECON&0x80)==0); // wait until read is complete
val = val + ((unsigned long)DEEDAT << 16);
DEECON=0x00; // mode: read byte, set adress
DEEADR=(unsigned char) adr+3; // start read
while((DEECON&0x80)==0); // wait until read is complete
val = val + ((unsigned long)DEEDAT << 24);
return val; // return data
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -