|
/*********************************************************************
功能:產(chǎn)生IIC起始信號(hào)
備注:時(shí)鐘數(shù)據(jù)線拉高進(jìn)入空閑狀態(tài),然后再時(shí)鐘線高電平情況下
拉低數(shù)據(jù)局限進(jìn)入起始狀態(tài),拉低時(shí)鐘線鉗位總線準(zhǔn)備發(fā)送
wx:mcu6666(單片機(jī)項(xiàng)目交流合作)
***********************************************************************/
void IIC_Start(void)
{
SDAH();
SCLH();
I2CWait();
SDAL();
I2CWait();
SCLL();
}
/*********************************************************************
功能:產(chǎn)生停止信號(hào)
備注: 時(shí)鐘高電平期間數(shù)據(jù)線向高電平方向跳變
***********************************************************************/
void IIC_Stop(void)
{
SDAL();
SCLL();
I2CWait();
SCLH();
I2CWait();
SDAH();
I2CWait();
}
/********************************************************************
功能:檢測(cè)應(yīng)答信號(hào)
返回:1:失敗
0 :成功
備注:作為發(fā)送方的時(shí)候等待接收的應(yīng)答信號(hào)
**********************************************************************/
unsigned char IIC_Wait_Ack(void)
{
unsigned char flag;
SDAH();
I2CWait();
SCLH();
I2CWait();
if(SDA)
flag=1;
else
flag=0;
SCLL();
return flag;
}
/**********************************************************************
功能:產(chǎn)生應(yīng)答信號(hào)
備注:數(shù)據(jù)線低電平應(yīng)答
***********************************************************************/
void IIC_Ack(void)
{
SCLL();
SDAL();
I2CWait();
SCLH();
I2CWait();
SCLL();
}
#if 0
/***************************************************************************
功能:產(chǎn)生非應(yīng)答信號(hào)
備注:數(shù)據(jù)線高電平非應(yīng)答
***************************************************************************/
void IIC_NAck(void)
{
SCLL();
SDAH();
I2CWait();
SCLH();
I2CWait();
SCLL();
}
#endif
/****************************************************************************
功能:發(fā)送一個(gè)字節(jié)
入口:要發(fā)送的字節(jié)備注:
****************************************************************************/
void IIC_Send_Byte(unsigned char txd)
{
unsigned char t;
SCLL();
for(t=0;t<8;t++)
{
if((txd&0x80)>>7)//MSB:高位在前
SDAH();
else
SDAL();
txd<<=1;
I2CWait();
SCLH();
I2CWait();
SCLL();
}
}
/****************************************************************************
功能:讀一個(gè)字節(jié)
備注:讀成功發(fā)送ack信號(hào)
*****************************************************************************/
unsigned char IIC_Read_Byte(void)
{
unsigned char i,receive=0;
for(i=0;i<8;i++ )
{
SCLL();
I2CWait();
SCLH();
I2CWait();
receive<<=1; //MSB:高位在前
if(SDA)
{
receive += 1;
}
}
IIC_Ack(); //發(fā)送ACK
return receive;
}
/******************************************************************************
功能:再eep中讀出一個(gè)字節(jié)
入口:16字節(jié)的地址
*******************************************************************************/
unsigned char AT24CXX_ReadOneByte(unsigned int ReadAddr)
{
unsigned char temp;
unsigned char addrH,addrL;
addrH=ReadAddr>>8;
addrL=ReadAddr&0xff;
IIC_Start();
IIC_Send_Byte(0xa0); //進(jìn)入寫模式
IIC_Wait_Ack();
IIC_Send_Byte(addrH); //發(fā)送高地址
IIC_Wait_Ack();
IIC_Send_Byte(addrL); //發(fā)送低地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0xa1); //進(jìn)入讀模式
IIC_Wait_Ack();
temp= IIC_Read_Byte();
IIC_Stop();//產(chǎn)生一個(gè)停止條件
return temp;
}
/**************************************************************************
功能:向地址中寫一個(gè)數(shù)據(jù)
入口:1,地址 2,數(shù)據(jù)
作者:jzb 2020年1月6日
備注:
******************************************************************************/
void AT24CXX_WriteOneByte(unsigned int WriteAddr,unsigned char DataToWrite)
{
unsigned char addrH,addrL;
addrH=WriteAddr>>8;
addrL=WriteAddr&0xff;
IIC_Start();
IIC_Send_Byte(0xa0);
IIC_Wait_Ack();
IIC_Send_Byte(addrH); //發(fā)送高地址
IIC_Wait_Ack();
IIC_Send_Byte(addrL); //發(fā)送低地址
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite); //發(fā)送字節(jié)
IIC_Wait_Ack();
IIC_Stop();//產(chǎn)生一個(gè)停止條件
}
|
評(píng)分
-
查看全部評(píng)分
|