?? 24c04.c
字號:
#include<reg52.h>
#include<intrins.h>
#define ucahr unsigned char
#define uint unsigned int
sbit SDA=P3^7;
sbit SCL=P3^6;
#define SomeNOP(); { _nop_(); }
delay32()
{
unsigned int i=300;
while(i--);
}
/*--------------------------------------------------------------------------------
調用方式:void I2CStart(void) ﹫2001/07/0 4
函數說明:私有函數,I2C專用
---------------------------------------------------------------------------------*/
void I2CStart(void)
{
EA=0;
SDA=1; SCL=1; SomeNOP();//INI
SDA=0; SomeNOP(); //START
SCL=0;
}
/*--------------------------------------------------------------------------------
調用方式:void I2CStop(void) ﹫2001/07/0 4
函數說明:私有函數,I2C專用
---------------------------------------------------------------------------------*/
void I2CStop(void)
{
SCL=0; SDA=0; SomeNOP(); //INI
SCL=1; SomeNOP(); SDA=1; //STOP
EA=1;
}
/*--------------------------------------------------------------------------------
調用方式:I2CAck(void) ﹫2001/07/0 4
函數說明:私有函數,I2C專用,等待從器件接收方的應答
---------------------------------------------------------------------------------*/
WaitAck(void)
{
bit Errorbit;
SDA=1;
SCL=1;
Errorbit=SDA;
SCL=0;
return(Errorbit);
}
/*--------------------------------------------------------------------------------
調用方式:void SendAck(void) ﹫2001/07/0 4
函數說明:私有函數,I2C專用,主器件為接收方,從器件為發送方時,非應答信號。
---------------------------------------------------------------------------------*/
void SendNotAck(void)
{
SDA=1; SomeNOP();
SCL=1; SomeNOP();
SCL=0;
}
/*--------------------------------------------------------------------------------
調用方式:void I2CSend(unsigned char ch) ﹫2001/07/0 5
函數說明:私有函數,I2C專用
---------------------------------------------------------------------------------*/
void I2CSendByte(unsigned char ch)
{
unsigned char i=8;
while(i--)
{
SCL=0;_nop_();
SDA=(bit)(ch&0x80); ch<<=1; SomeNOP();
SCL=1; SomeNOP();
}
SCL=0;
}
/*--------------------------------------------------------------------------------
調用方式:unsigned char I2CReceive(void) ﹫2001/07/0 5
函數說明:私有函數,I2C專用
---------------------------------------------------------------------------------*/
unsigned char I2CReceiveByte(void)
{
unsigned char i=8;
unsigned char dat=0;
SDA=1;
while(i--)
{
dat<<=1;
SCL=0;SomeNOP();
SCL=1;SomeNOP();
dat|=SDA;
}
SCL=0;
return(dat);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*-------------------------------------------------------------------------------------*/
/* 向AT24C02的任意地址寫入一個字節 */
/*=====================================================================================*/
void Write_24c04( unsigned char add,unsigned char dat)
{
I2CStart();
I2CSendByte(0xA0);
WaitAck();
// I2CSendByte((char)(add>>8));delay32(); //如果使用的芯片是AT24C02、AT24C64、AT24C128、AT24C256的話 那么這句話就不需要屏蔽了
// WaitAck();
I2CSendByte(add);delay32();
WaitAck();
I2CSendByte(dat);delay32();
WaitAck();
I2CStop();
}
/*-------------------------------------------------------------------------------------*/
/* 從AT24C02的任意地址讀入一個字節 */
/*=====================================================================================*/
unsigned char Read_24C04(unsigned char add)
{
unsigned char a;
I2CStart();
I2CSendByte(0xA0);
WaitAck();
//I2CSendByte((char)(add>>8)); //如果使用的芯片是AT24C02、AT24C64、AT24C128、AT24C256的話 那么這句話就不需要屏蔽了
//WaitAck();
I2CSendByte(add);
WaitAck();
I2CStart();
I2CSendByte(0xA1);
WaitAck();
a=I2CReceiveByte();
SendNotAck();
I2CStop();
return(a);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -