⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24c64.h

📁 24C64读写程序
💻 H
字号:
//------------------------------------------------------------------------------
//24C64.H
//------------------------------------------------------------------------------


#ifndef __24C64_H__
#define __24C64_H__

# define uchar unsigned char
# define uint unsigned int




 sbit I2C_SCK=P3^7;
 sbit I2C_SDA=P3^6;

 bit I2C_Start(void); 
void I2C_Stop(void); 
//void I2C_Ack(void); 
void I2C_Nack(void); 
bit I2C_Send_Byte( uchar); 
uchar I2C_Receive_Byte(void); 
void AT24C64_R(void *mcu_address,uint AT24C64_address,uint count); 
void AT24C64_W(void *mcu_address,uint AT24C64_address,uint count); 
void Delay_10_uS(void) 
{ 
char i=10; 
while(i--); 
} 
void Delay_N_mS( uint n_milisecond) /* n mS delay */ 
{ 
uchar i; 
while(n_milisecond--) 
{ 
i=37; 
while(i--); 
} 
} 
bit I2C_Start(void) 
{ 
Delay_10_uS(); 
I2C_SDA =1; 
Delay_10_uS(); 
I2C_SCK =1; 
Delay_10_uS(); 
if ( I2C_SDA == 0) return 0; 
if ( I2C_SCK == 0) return 0; 
I2C_SDA = 0; 
Delay_10_uS(); 
I2C_SCK = 0; 
Delay_10_uS(); 
return 1; 
} 
void I2C_Stop(void) 
{ 
Delay_10_uS(); 
I2C_SDA = 0; 
Delay_10_uS(); 
I2C_SCK = 1; 
Delay_10_uS(); 
I2C_SDA = 1; 
Delay_10_uS(); 
} 
//void I2C_Ack(void) 
//{ 
//Delay_10_uS(); 
//I2C_SDA=0; 
//Delay_10_uS(); 
//I2C_SCK=1; 
//Delay_10_uS(); 
//I2C_SCK=0; 
//Delay_10_uS(); 
//} 
void I2C_Nack(void) 
{ 
Delay_10_uS(); 
I2C_SDA=1; 
Delay_10_uS(); 
I2C_SCK=1; 
Delay_10_uS(); 
I2C_SCK=0; 
Delay_10_uS(); 
} 
bit I2C_Send_Byte( uchar d) 
{ 
uchar i = 8; 
bit bit_ack; 
while( i-- ) 
{ 
Delay_10_uS(); 
if ( d &0x80 ) I2C_SDA =1; 
else I2C_SDA =0; 
Delay_10_uS(); 
I2C_SCK = 1; 
Delay_10_uS(); 
I2C_SCK = 0; 
d = d << 1; 
} 
Delay_10_uS(); 
I2C_SDA = 1; 
Delay_10_uS(); 
I2C_SCK = 1; 
Delay_10_uS(); 
bit_ack = I2C_SDA; 
I2C_SCK =0; 
Delay_10_uS(); 
return bit_ack; 
} 
uchar I2C_Receive_Byte(void) 
{ 
uchar i = 8, d; 
Delay_10_uS(); 
I2C_SDA = 1; 
while ( i--) 
{ 
d = d << 1; 
Delay_10_uS(); 
I2C_SCK =1; 
if ( I2C_SDA ) d++; 
Delay_10_uS(); 
I2C_SCK =0; 
} 
return d; 
} 
void AT24C64_W(void *mcu_address,uint AT24C64_address,uint count) 
{ 
 
while(count--) 
{ 
I2C_Start(); 
/*I2C_Send_Byte( 0xa0 + AT24C64_address /256 *2);*/ /* 24C16 USE */ 
I2C_Send_Byte( 0xa0 ); 
I2C_Send_Byte( AT24C64_address/256 ); 
I2C_Send_Byte( AT24C64_address %256 ); 
I2C_Send_Byte( *(uchar*)mcu_address ); 
I2C_Stop(); 
Delay_N_mS(10); /* waiting for write cycle to be completed */ 
((uchar*)mcu_address)++; 
AT24C64_address++; 
} 


} 
void AT24C64_R(void *mcu_address,uint AT24C64_address,uint count) 
{ 

while(count--) 
{ 
I2C_Start(); 
/*I2C_Send_Byte( 0xa0 + AT24C64_address / 256 *2 );*/ /* 24C16 USE */ 
I2C_Send_Byte( 0xa0 ); 
I2C_Send_Byte( AT24C64_address/256 ); 
I2C_Send_Byte( AT24C64_address % 256 ); 
I2C_Start(); 
/*I2C_Send_Byte( 0xa1 + AT24C64_address /256 *2 );*/ 
I2C_Send_Byte( 0xa1 ); 
*(uchar*)mcu_address = I2C_Receive_Byte(); 
I2C_Nack(); 
I2C_Stop(); 
((uchar*)mcu_address)++; 
AT24C64_address++; 
} 
}
//------------------------------------------------------------------------------
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -