📄 24c16.c
字号:
#include"reg51.h"
#define uc unsigned char
#define ui unsigned int
sbit SCL= P3^0;
sbit SDA= P3^1 ;
uc ack;
#define CMD_24C16W 0xA0 // 0xA0 = 1010 0000B // b7-b4 1010 : device address // b3-b1 000 : page address // b0 0 : write #define CMD_24C16R 0xA1 // 0xA0 = 1010 0000B // b7-b4 1010 : device address // b3-b1 000 : page address // b0 1 : read
void delay_clk(ui i) //延时
{
while(i--);
}
void send_byte(uc c) //发送命令或数据
{ uc i,chk_bit;
chk_bit=0x80;
SCL=0;
for(i=0;i<8;i++)
{
if((c&chk_bit)==0x80)
SDA=1;
else
SDA=0;
SCL=1;
delay_clk(3);
SCL=0;
delay_clk(3);
chk_bit>>=1;
}
SDA=1;
SCL=1;
delay_clk(3);
if(SDA==1)
ack=0;
SCL=0;
delay_clk(3);
SDA=0;
delay_clk(2);
}
uc read_byte(void)
{ uc sda_data=0x00;
uc i;
for(i=0;i<8;i++)
{ SCL=1;
delay_clk(3);
sda_data|=SDA;
sda_data<<=1;
SCL=0;
delay_clk(3);
}
delay_clk(2);
SDA=1;
delay_clk(3);
SCL=1;
delay_clk(4);
SCL=0;
delay_clk(3);
return(sda_data);
}
void i2c_start(void)
{ SDA=1;
SCL=1;
delay_clk(2);
SDA=0;
delay_clk(3);
SCL=0;
delay_clk(3);
}
void i2c_stop(void)
{ SDA=0;
SCL=1;
delay_clk(4);
SDA=1;
delay_clk(3);
}
//-------------------------------------
void i2c_write(int addr,uc c)
{ uc page=0x00;
uc cmd_24c16w;
page=(uc)(addr/256);
cmd_24c16w=CMD_24C16W|(page<<1);
ack=1;
i2c_start();
send_byte(cmd_24c16w);
addr%=256;
send_byte(addr);
send_byte(c);
i2c_stop();
} //-------------------------------------
uc i2c_read(int addr)
{ uc c;
uc page=0x00;
uc cmd_24c16r;
uc cmd_24c16w;
page=(uc)(addr/256);
cmd_24c16w=CMD_24C16W | (page<<1);
ack=1;
i2c_start();
send_byte(cmd_24c16w);
delay_clk(4);
addr%=256;
send_byte(addr);
SDA=1;
SCL=1;
delay_clk(4);
cmd_24c16r=CMD_24C16R | (page<<1);
i2c_start();
send_byte(cmd_24c16r) ;
delay_clk(4);
SDA=1;
c=read_byte();
i2c_stop();
return(c);
}
void main(void)
{ int addr;
uc c;
// uart_init();
for(addr=0;addr<2048;addr++)
i2c_write(addr,0x01); //2048
/* for(addr=0;addr<2048;addr++)
{ c=i2c_read(addr);
P1=c;
} */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -