📄 eep.c
字号:
/*-------------------------------------------------------------------------*/
#include <absacc.h>
#include <reg52.h>
#include <eep.h>
#include <intrins.h>
#include <lcd.h>
/*-------------------------------------------------------------------------*/
//#define s_delay(); {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
/*-------------------------------------------------------------------------*/
bit start_bit(void);
void stop_bit(void);
//void ack(void);
void no_ack(void);
bit write_byte(unsigned char);
unsigned char read_byte(void);
/*----------------------------------------------------------------*/
bit start_bit(void)
{
bit jump=1;
sda=1;
scl=1;
if((sda & scl)==0) //error
jump=1;
else
jump=0;
s_delay();
sda=0;
s_delay();
scl=0;
return jump;
}
/*----------------------------------------------------------------*/
void stop_bit(void)
{
sda=0;
s_delay();
scl=1;
s_delay();
sda=1;
}
/*----------------------------------------------------------------
void ack(void)
{
sda=0;
s_delay();
scl=1;
s_delay();
scl=0;
} */
/*----------------------------------------------------------------*/
void no_ack(void)
{
sda=1;
s_delay();
scl=1;
s_delay();
scl=0;
}
/*----------------------------------------------------------------*/
bit write_byte(unsigned char number)
{
unsigned char i;
bit temp;
for(i=0;i<8;i++)
{
sda=number&0x80;
s_delay();
scl=1;
s_delay();
scl=0;
s_delay();
number=number<<1;
}
sda=1;
s_delay();
scl=1;
s_delay();
i=0;
if(sda && (i<10))
{
_delay500us(1);
i++;
}
temp=sda;
scl=0;
return temp;
}
/*----------------------------------------------------------------*/
unsigned char read_byte(void)
{
unsigned char i,number;
number=0;
sda=1;
for(i=0;i<8;i++)
{
s_delay();
number=number<<1;
scl=1;
s_delay();
if(sda)
number+=1;
scl=0;
}
return(number);
}
/*----------------------------------------------------------------*/
void _write_eep_byte(unsigned int address,unsigned char number)
{
if(start_bit()==0)
if(write_byte(0xa0|((((unsigned char *) &address)[0])<<1))==0)
if(write_byte(((unsigned char *) &address)[1])==0)
if(write_byte(number)==0)
stop_bit();
_delay500us(200);
}
/*----------------------------------------------------------------*/
unsigned char _read_eep_byte(unsigned int address)
{
unsigned char number;
if(start_bit()==0)
{
if(write_byte(0xa0|((((unsigned char *) &address)[0])<<1))==0)
if(write_byte(((unsigned char *) &address)[1])==0)
if(start_bit()==0)
{
if(write_byte(0xa1|((((unsigned char *) &address)[0])<<1))==0)
{
number=read_byte();
no_ack();
}
}
}
stop_bit();
return(number);
}
/*----------------------------------------------------------------
void _write_eep_word(unsigned int address,unsigned int number)
{
_write_eep_byte(address,((unsigned char *)&number)[0]);
address++;
_write_eep_byte(address,((unsigned char *)&number)[1]);
}
/*----------------------------------------------------------------
unsigned int _read_eep_word(unsigned int address)
{
unsigned int number;
((unsigned char *)&number)[0]=_read_eep_byte(address);
address++;
((unsigned char *)&number)[1]=_read_eep_byte(address);
return number;
}
/*----------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -