📄 seprom.c
字号:
/*************************************************************
* Serial EEPROM READ & WRITE *
*************************************************************/
#define UINT unsigned int
#define UCHAR unsigned char
#include <W77E58.H>
#include <INTRINS.H>
sbit SCLK = P1^5;
sbit SDAT = P1^4;
sbit ALOD = P1^2;
sbit ACLK = P1^1;
sbit ADAT = P1^0;
#define BSTART {SDAT=1;SCLK=1;awhile();\
SDAT=0;awhile();\
SCLK=0;}
#define BSTOP {SDAT=0;awhile();\
SCLK=1;awhile();\
SDAT=1;}
#define BOUT(B) {SDAT=B;awhile();\
SCLK=1;awhile();\
SCLK=0;awhile();}
#define BIN(BUF) {SDAT=1;awhile();\
SCLK=1;awhile();\
BUF|=SDAT;awhile();\
SCLK=0;}
#define ABOUT(B) {ACLK=1;ADAT=B;awhile();\
ACLK=0;awhile();}
extern bit EEWRDIS,EEBLANK;
/****************************************************************************/
void awhile(void)
{
_nop_();
_nop_();
_nop_();
}
/*****************************************************************************/
void ee_write(UINT xdata *dp,UINT addr,UCHAR n)
{
UCHAR i;
do{
while(EEWRDIS);
i=addr>>8;
i=(i & 0x07)<<1;
BSTART
transmit(0xa0|i);
transmit((UCHAR)addr);
for(i=0;i<8;i++)
{
if(n){
transmit(*dp);
transmit(*dp>>8);
dp++;n--;
}
else
break;
}
BSTOP
EEWRDIS=1;
addr+=16;
}while(n);
}
void ee_write_char(UCHAR *dp,UINT addr,UCHAR n)
{
UCHAR i;
do{
while(EEWRDIS);
i=addr>>8;
i=(i & 0x07)<<1;
BSTART
transmit(0xa0|i);
transmit((UCHAR)addr);
for(i=0;i<16;i++)
{
if(n){
transmit(*dp);
dp++;n--;
}
else
break;
}
BSTOP
EEWRDIS=1;
addr+=16;
}while(n);
}
void protect(UINT xdata *dp,UINT addr)
{
UCHAR i;
while(EEWRDIS);
i=addr>>8;
i=(i & 0x07)<<1;
BSTART
transmit(0xa0|i);
transmit((UCHAR)addr);
for(i=0;i<8;i++)
{
transmit(*dp);
transmit(*dp>>8);
dp++;
}
BSTOP
}
UCHAR ee_read(UINT xdata *dp,UINT addr,UCHAR n)
{
data UCHAR i;
while(EEWRDIS);
i=addr>>8;
i=(i & 0x07)<<1;
BSTART
transmit(0xa0|i);
transmit((UCHAR)addr);
BSTART
transmit(0xa1|i);
for(i=0;i<n;i++)
{
*dp=receive(1);
*dp|=receive(1)<<8;
dp++;
}
receive(0);
BSTOP
return((UCHAR)*(dp-n) & (UCHAR)(*(dp-n)>>8));
}
UCHAR ee_read_char(UCHAR *dp,UINT addr,UCHAR n)
{
UCHAR i;
while(EEWRDIS);
i=addr>>8;
i=(i & 0x07)<<1;
BSTART
transmit(0xa0|i);
transmit((UCHAR)addr);
BSTART
transmit(0xa1|i);
for(i=0;i<n;i++)
{
*dp=receive(1);
dp++;
}
receive(0);
BSTOP
return(*(dp-n));
}
/*************************************************************************/
void dac5620(UINT sd,UCHAR ch)
{
data UCHAR i;
ch<<=6;
if(sd>>8){
ch|=0x20;sd>>=1;}
i=3;
do{
ch<<=1;ABOUT(CY)
}while(--i);
i=8;ch=sd;
do{
ch<<=1;ABOUT(CY)
}while(--i);
ALOD=0;
awhile();
ALOD=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -