📄 eeprom.c
字号:
#include<intrins.h>
#include "EEPROM.h"
#include "C8051f.h"
extern unsigned char EEPROMTime;
sbit EEPROM_SDA = P2^2;
sbit EEPROM_SCL = P2^3;
sbit a0 = ACC^0;
sbit a1 = ACC^1;
sbit a2 = ACC^2;
sbit a3 = ACC^3;
sbit a4 = ACC^4;
sbit a5 = ACC^5;
sbit a6 = ACC^6;
sbit a7 = ACC^7;
void s24(void) //起始函数
{
EEPROM_SCL = 0;
EEPROM_SDA = 0;
_nop_();
EEPROM_SCL = 1;
EEPROM_SDA = 1;
_nop_();
EEPROM_SDA = 0;
_nop_();
EEPROM_SCL = 0;
}
void p24(void) //停止函数
{
EEPROM_SCL = 0;
EEPROM_SDA = 0;
_nop_();
EEPROM_SCL = 1;
_nop_();
EEPROM_SDA = 1;
_nop_();
EEPROM_SCL = 0;
EEPROM_SDA = 0;
}
unsigned char rd24(void) //从24c16读一字节数据
{
ACC = 0x00;
EEPROM_SDA = 0;
EEPROM_SCL = 0;
EEPROM_SCL = 1; a7 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SCL = 1; a6 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SCL = 1; a5 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SCL = 1; a4 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SCL = 1; a3 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SCL = 1; a2 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SCL = 1; a1 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SCL = 1; a0 = EEPROM_SDA; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SDA = 0;
EEPROM_SCL = 1; _nop_();_nop_();_nop_();_nop_();
EEPROM_SCL = 0; //24c16的一位回答位。
return(ACC);
}
void wd24(unsigned char dd) //向24c16写一字节数据
{
ACC = dd;
EEPROM_SDA = a7; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SDA = a6; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SDA = a5; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SDA = a4; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SDA = a3; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SDA = a2; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SDA = a1; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SDA = a0; EEPROM_SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); EEPROM_SCL = 0;
EEPROM_SCL = 1;
EEPROM_SCL = 0;
}
/*
unsigned char EEPROM_Read(unsigned int address)
{
unsigned char dd;
s24();
wd24(0xa0);
_nop_();_nop_();_nop_();_nop_();
EEPROM_SCL = 0;
wd24(address);
_nop_();_nop_();_nop_();_nop_();
EEPROM_SCL = 0;
s24();
wd24(0xa1);
EEPROM_SCL = 0;
dd = rd24();
p24();
return(dd);
}
void EEPROM_Write(unsigned int address,unsigned char dd)
{
s24();
wd24(0xa0);
EEPROM_SCL = 0;
wd24(address);
EEPROM_SCL = 0;
wd24(dd);
EEPROM_SCL = 0;
p24();
}
*/
unsigned char EEPROM_Read(unsigned int address)
{
unsigned char dd;
dd = ((address&0x7ff)/256) << 1;
s24();
wd24(0xa0|dd);
EEPROM_SCL = 0;
wd24(address);
EEPROM_SCL = 0;
s24();
wd24(0xa1|dd);
EEPROM_SCL = 0;
dd = rd24();
p24();
return(dd);
}
void EEPROM_Write(unsigned int address,unsigned char dd)
{
unsigned char ddd;
ddd = ((address & 0x7ff)/256) << 1;
s24();
wd24(0xa0|ddd);
EEPROM_SCL = 0;
wd24(address);
EEPROM_SCL = 0;
wd24(dd);
EEPROM_SCL = 0;
p24();
EEPROMTime = 0; //time为定时器时间参考,time增加1代表1ms,如果没有用定时器,取消该行
while (1)
{
s24();
wd24(0xa0|ddd);
EEPROM_SDA = 1;
if (EEPROM_SDA == 0) break;
if (EEPROMTime > 10) break; //此行防止由于eeprom器件损坏后的死循环
EEPROM_SCL = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -