📄 24021.c
字号:
#include <reg52.h>
#include <intrins.h>
//*================*//
//*对24C02的操作 *//
//*日期:2004/09/08 *//
//*版本:V1.01 *//
//*================*//
//定义CLK,DATA,和WP的引脚
sbit sda =P1^7;//
sbit sclk =P1^6;
sbit iic_en =P1^5;
//定义EEROM读写的地址
#define cont_write 0xa0
#define cont_read 0xa1
extern unsigned char data temp[8] ;
//=============================================
void delay (void) //写入每字节后延时8ms
{
unsigned int loop;
for(loop=2000;loop>0;loop--)
{
_nop_( );
}
}
void start_2402 (void)
{
sda=1;
_nop_();
_nop_();
sclk=0;
_nop_();
_nop_();
sclk=1;
_nop_();
_nop_();
sda=0;
_nop_();
_nop_();
sclk=0;
}
void stop_2402 (void)
{
sda=0;
_nop_();
_nop_();
sclk=1;
_nop_();
_nop_();
sda=1;
}
void outbyt(unsigned char da)
{
unsigned char loop;
for (loop=0;loop<8;loop++)
{
da=da<<1;
sda=CY;
_nop_();
_nop_();
sclk=1;
_nop_();
_nop_();
sclk=0;
}
}
unsigned char inbyte (void)
{
unsigned char loop,da=0;
for (loop=0;loop<8;loop++)
{
da=da<<1;
sda=1;
_nop_();
_nop_();
da=da|sda;
sclk=1 ;
_nop_();
_nop_();
sclk=0;
}
return(da);
}
void ack (void) //应答信号
{
sda=0;
_nop_();
_nop_();
sclk=1;
_nop_();
_nop_();
sclk=0;
}
void noack(void) //无应答
{
sda=1;
_nop_();
_nop_();
sclk=1;
_nop_();
_nop_();
sclk=0;
}
void wr_2402 (unsigned char t_addr,unsigned char num)
{
unsigned char loop;
iic_en=0;
_nop_( );
_nop_( );
_nop_( );
_nop_( );
for(loop=0;loop<num;loop++)
{
sda=1;
_nop_( );
_nop_( );
sclk=0;
_nop_( );
_nop_( );
start_2402( );
outbyt(0xa0);
ack( );
outbyt(t_addr);
ack( );
outbyt(temp[loop]);
ack( );
stop_2402( );
delay( );
t_addr++;
}
iic_en=1;
}
void rd_2402 (unsigned char s_addr,unsigned char num)
{
unsigned char loop;
start_2402();
outbyt (0xa0) ;
ack();
outbyt(s_addr);
ack();
start_2402();
outbyt (0xa1);
for (loop=0;loop<num;loop++)
{
ack();
temp[loop]=inbyte();
}
noack();
stop_2402();
}
///////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -