2024年1月13日发(作者:孔贝)
#pragma sfr
#pragma di
#pragma ei
#pragma NOP
#define uchar unsigned char
#define uint unsigned int
#define SECOND P8.2
#define PM_SECOND PM8.2
#define BATEST
#define PM_BATEST
#define TIME_SCL
#define PM_TIME_SCL
#define PU_TIME_SCL
#define TIME_SDA
#define PM_TIME_SDA
#define PU_TIME_SDA
#define PM_ACK
#define WSlave_Addr
#define RSlave_Addr
void NEC_int()
{
WDTE=0xAC;
CMC=0x00;
CSC=0x80;
CKC=0x09;
PER0=0xFF;
PER1=0x01;
OSMC=0x00;
OSTS=0x01;
}
void delay3us()
{
NOP();NOP();
NOP();NOP();
NOP();NOP();
NOP();NOP();
NOP();NOP();
NOP();NOP();
}
void wait100us()
{
int i;
P15.6
PM15.6
P5.5
PM5.5
PU5.5
P5.4
PM5.4
PU5.4
PM0.2
0x64
0x65
for(i=0;i<200;i++)
{
NOP();
NOP();
}
}
void Start()
{
TIME_SDA=1;
delay3us();
TIME_SCL=1;
delay3us();
TIME_SDA=0;
delay3us();
TIME_SCL=0;
delay3us();
}
void Stop()
{
TIME_SDA=0;
delay3us();
TIME_SCL=1;
delay3us();
TIME_SDA=1;
delay3us();
}
int Write(x)
{
int i;
PM_TIME_SDA=0;
PM_TIME_SCL=0;
for(i=0;i<8;i++)
{
TIME_SCL=0;
if(x&0x80)
TIME_SDA=1;
else
TIME_SDA=0;
delay3us();
TIME_SCL=1;
delay3us();
x=x<<1;
}
TIME_SCL=0;
delay3us();
PM_TIME_SDA=1;
TIME_SCL=1;
delay3us();
i=0;
while(TIME_SDA)
{
if(++i>10)
{TIME_SCL=0;
return(0);
}
}
TIME_SCL=0;
PM_TIME_SDA=0;
return(1);
}
uchar Read()
{
int i;
uchar rdata=0;
PM_TIME_SDA=1;
PM_TIME_SCL=0;
delay3us();
TIME_SCL=0;
for(i=0;i<8;i++)
{
rdata=rdata<<1;
TIME_SCL=1;
NOP();
NOP();
if(TIME_SDA==1)
rdata++;
TIME_SCL=0;
NOP();
NOP();
}
return rdata;
}
int Ram_write()
{
int i;
WDTE=0xAC;
PM_TIME_SDA=0;
PM_TIME_SCL=0;
wait100us();
Start();
if(Write(WSlave_Addr)==0)
{
Stop(); return(0);
}
if(Write(0x00)==0)
{
Stop(); return(0);
}
Write(0x59);
Write(0x58);
Stop();
return(1);
}
void main()
{
int i,j=2;
uchar data=0xFF;
PU_TIME_SDA=1;
PU_TIME_SCL=1;
NEC_int();
j=Ram_write();
Start();
Write(WSlave_Addr);
Write(0x01);
Start();
Write(RSlave_Addr);
data=Read();
Stop();
}
2024年1月13日发(作者:孔贝)
#pragma sfr
#pragma di
#pragma ei
#pragma NOP
#define uchar unsigned char
#define uint unsigned int
#define SECOND P8.2
#define PM_SECOND PM8.2
#define BATEST
#define PM_BATEST
#define TIME_SCL
#define PM_TIME_SCL
#define PU_TIME_SCL
#define TIME_SDA
#define PM_TIME_SDA
#define PU_TIME_SDA
#define PM_ACK
#define WSlave_Addr
#define RSlave_Addr
void NEC_int()
{
WDTE=0xAC;
CMC=0x00;
CSC=0x80;
CKC=0x09;
PER0=0xFF;
PER1=0x01;
OSMC=0x00;
OSTS=0x01;
}
void delay3us()
{
NOP();NOP();
NOP();NOP();
NOP();NOP();
NOP();NOP();
NOP();NOP();
NOP();NOP();
}
void wait100us()
{
int i;
P15.6
PM15.6
P5.5
PM5.5
PU5.5
P5.4
PM5.4
PU5.4
PM0.2
0x64
0x65
for(i=0;i<200;i++)
{
NOP();
NOP();
}
}
void Start()
{
TIME_SDA=1;
delay3us();
TIME_SCL=1;
delay3us();
TIME_SDA=0;
delay3us();
TIME_SCL=0;
delay3us();
}
void Stop()
{
TIME_SDA=0;
delay3us();
TIME_SCL=1;
delay3us();
TIME_SDA=1;
delay3us();
}
int Write(x)
{
int i;
PM_TIME_SDA=0;
PM_TIME_SCL=0;
for(i=0;i<8;i++)
{
TIME_SCL=0;
if(x&0x80)
TIME_SDA=1;
else
TIME_SDA=0;
delay3us();
TIME_SCL=1;
delay3us();
x=x<<1;
}
TIME_SCL=0;
delay3us();
PM_TIME_SDA=1;
TIME_SCL=1;
delay3us();
i=0;
while(TIME_SDA)
{
if(++i>10)
{TIME_SCL=0;
return(0);
}
}
TIME_SCL=0;
PM_TIME_SDA=0;
return(1);
}
uchar Read()
{
int i;
uchar rdata=0;
PM_TIME_SDA=1;
PM_TIME_SCL=0;
delay3us();
TIME_SCL=0;
for(i=0;i<8;i++)
{
rdata=rdata<<1;
TIME_SCL=1;
NOP();
NOP();
if(TIME_SDA==1)
rdata++;
TIME_SCL=0;
NOP();
NOP();
}
return rdata;
}
int Ram_write()
{
int i;
WDTE=0xAC;
PM_TIME_SDA=0;
PM_TIME_SCL=0;
wait100us();
Start();
if(Write(WSlave_Addr)==0)
{
Stop(); return(0);
}
if(Write(0x00)==0)
{
Stop(); return(0);
}
Write(0x59);
Write(0x58);
Stop();
return(1);
}
void main()
{
int i,j=2;
uchar data=0xFF;
PU_TIME_SDA=1;
PU_TIME_SCL=1;
NEC_int();
j=Ram_write();
Start();
Write(WSlave_Addr);
Write(0x01);
Start();
Write(RSlave_Addr);
data=Read();
Stop();
}