我用的AT24c64,可写了程序怎么也调不出来,请高手指点一下,程序如下:
void Delay_ms(uint t)
{
for(;t!=0;t--);
}
/**********************************************
**函数名称:void Start(void)
**函数功能:24c64开始信号
**说 明:无
***********************************************/
void Start(void)
{
SDA=1;
SCL=1;
Delay_ms(200);
SDA=0;
Delay_ms(200);
SCL=0;
}
/**********************************************
**函数名称:void Stop(void)
**函数功能:24c64停止信号
**说 明:无
***********************************************/
void Stop(void)
{
SCL=0;
SDA=0;
Delay_ms(200);
SCL=1;
Delay_ms(200);
SDA=1;
}
/***************************************************************************
void Ack(void)
{
SDA=0;
SCL=1;
_nop_();
_nop_();
SCL=0;
SDA=1;
} */
/***************************************************************************/
void NoAck()
{
SDA=1;
SCL=1;
Delay_ms(200);
SCL=0;
}
/***************************************************************************/
bit TestAck()
{
bit ErrorBit;
SDA=1;
SCL=1;
ErrorBit=SDA;
SCL=0;
return(ErrorBit);
}
/*****************************************************************
**函数名称:bit Write8Bit(uchar input)
**函数功能:写入一个字节
**说 明:无
/*****************************************************************/
void Write8Bit(uchar input)
{
uchar temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input<<1;
}
}
/********************************************************
**函数名称:void Write24c64_byte(uint add,uchar date)
**函数功能:往24c64中的某一地址写入一个字节的数据
**入口参数:uint add:数据地址(0000--8192)
uchar date:具体写入的数据
/*******************************************************/
void Write24c64_byte(uint add,uchar date)
{
Start();
Write8Bit(add);
TestAck();
Write8Bit(date);
TestAck();
Stop();
Delay_ms(1000);
}
/********************************************************
**函数名称:void Write24c64(uint add,uint date)
**函数功能:往24c64中的某一地址写入2个字节的数据
**入口参数:uint add:数据地址(0000--8192)
uint date:具体写入的数据
/*******************************************************/
void Write24c64(uint add,uint date)
{
uchar temp_L,temp_H;
temp_L = (uchar)(date&0xff); //取低8位
temp_H = (uchar)(date>>8); //取高8位
Write24c64_byte(add,temp_L); //写低8位
Write24c64_byte(add+1,temp_H); //写高8位
}
/********************************************************
**函数名称:uchar Read8Bit(void)
**函数功能:实现从24c64中读出一个字节的数据
**说 明:无
**********************************************************/
uchar Read8Bit(void)
{
uchar temp,rbyte=0;
for(temp=8;temp!=0;temp--)
{
SCL=1;
rbyte=rbyte<<1;
rbyte=rbyte|((uchar)(SDA));
SCL=0;
}
return(rbyte);
}
/*****************************************************
**函数名称:uchar Read24c64_byte(uint add)
**函数功能:从24c64中的某一地址取出一个字节的数据
**入口参数:uint add :存储器中的某一地址
****************************************************/
uchar Read24c64_byte(uint add)
{
uchar date;
Start();
Write8Bit(add>>8);
TestAck();
Write8Bit(add);
TestAck();
Start();
date = Read8Bit();
NoAck();
Stop();
return date;
}
/*****************************************************
**函数名称:uint Read24c64(uint add)
**函数功能:从24c64中的某一地址取出2个字节的数据
**入口参数:uint add :存储器中的某一地址
****************************************************/
uint Read24c64(uint add)
{
uint temp, date;
Start();
Write8Bit(add>>8);
TestAck();
Write8Bit(add);
TestAck();
Start();
temp = Read8Bit();
date = temp<<8;
NoAck();
Stop();
add = add+1;
Start();
Write8Bit(add>>8);
TestAck();
Write8Bit(add);
TestAck();
Start();
temp = Read8Bit();
date = temp+date;
NoAck();
Stop();
return date;
} |