📄 at24c02d读写.c
字号:
#include<reg51.h>
#include<intrins.h> //与空操作有关 左,右,上,下移动有关
typedef unsigned char uchar;
#define WRITE24C02 0xA0
#define READ24C02 0xA1
sbit SDA=P2^1;
sbit SCL=P2^2;
void I2C_start(void);
void I2C_stop(void);
void I2C_send_ack(void);
bit TestAck();
void I2C_write_byte(uchar);
uchar I2C_read_byte(void);
void AT24C02_write(uchar,uchar *,uchar);
void AT24C02_read(uchar,uchar *,uchar);
void delay_ms(uchar);
void main (void)
{
uchar buffer1[3]={1,2,3};
uchar buffer2[3];
AT24C02_write(0x010,buffer1,3);
AT24C02_read(0x010,buffer2,3);
while(1)
{}
}
void I2C_start(void)
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
void I2C_stop(void)
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
void I2C_send_ack(void)
{
SDA=0;
SCL=1;
SCL=0;
SDA=1;
}
bit TestAck(void)
{
bit ErrorBit;
SDA=1;
{}
SCL=1;
ErrorBit=SDA;
SCL=0;
return(ErrorBit);
}
void I2C_write_byte(uchar input)
{
uchar temp;
for(temp=7;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input<<1;
}
}
uchar I2C_read_byte(void)
{
uchar temp, rbyte=0;
for(temp=8;temp!=0;temp--)
{
SCL=1;
rbyte=rbyte<<1;
rbyte=rbyte|((uchar)(SDA));
SCL=0;
}
return(rbyte);
}
void AT24C02_write(uchar adr, uchar *buf,uchar N)
{
I2C_start();
I2C_write_byte(WRITE24C02);
while(TestAck());
I2C_write_byte(adr);
while(TestAck());
for(;N!=0;N--)
{
I2C_write_byte(*buf);
while(TestAck());
buf++;
}
I2C_stop();
delay_ms(50);
}
void AT24C02_read(uchar adr, uchar *buf,uchar N)
{
I2C_start();
I2C_write_byte(READ24C02);
while(TestAck());
while(N!=1)
{
*buf=I2C_read_byte();
buf++;
N--;
}
*buf=I2C_read_byte();
I2C_send_noack();
I2C_stop();
}
void delay_ms(uchar n)
{
uchar i,j;
for(i=n;i>0;i--)
for(j=0;j<200;j++);
}
/* 调试,出错: Build target 'Target 1'compiling AT24C02D读写.c...AT24C02D读写.C(56): error C100: unprintable character 0xB9 skipped !!!!!除注释外,各行不能有其它字符 本错是因AT24C02D读写.C(56): error C100: unprintable character 0xB2 skipped 注释时,把字符漏到起它行上而没觉察,删除,错除. 页面太大,看不过来AT24C02D读写.C(63): error C236: 'I2C_write_byte': different length of parameter listsTarget not created 在原型声明中,有形参uchar,却为void.改,通过 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -