您的当前位置:首页正文

24c02驱动C代码(已调试)

2021-02-04 来源:帮我找美食网


代码前带//是已经注释掉的代码,可以不用。可以作为子程序被主程序调用。

程序已经在设备上使用,完全没问题!

#include

#include \"24c02.h\"

#include \"delay.h\"

//iic总线初始化

void iic_init(void)

{

sda=1; scl=1; }

//24c02开始程序

void iic_start()

//数据线拉高

//时钟线拉高

{

sda=1;

delay10us();

scl=1;

delay10us();

sda=0;

delay10us();

}

//24c02停止程序

void iic_stop()//停止

{

sda=0;

delay10us();

scl=1;

delay10us();

sda=1;

delay10us();

}

//24c02应答信号

void iic_respons() //应答,在数据传送8 位后,等待或者发送一个应答信号

{

uchar i;

scl=1;

delay10us();

while((sda==1)&&(i<250))i++;

scl=0;

delay10us();

}

//等待应答信号到来

//返回值:1,接收应答失败

// 0,接收应答成功

//u8 iic_wait_ack(void)

//{

// u8 ucErrTime=0;

// sda=1;delay10us();

// scl=1;delay10us();

// while(sda)

// {

// ucErrTime++;

// if(ucErrTime>250)

// {

// iic_stop();

// return 1;

// }

// }

// scl=0; // return 0;

//}

//产生ACK应答

//void iic_ack(void)

//{

// scl=0;

//时钟输出0

// sda=0;

// delay10us();

// scl=1;

// delay10us(); // scl=0;

//}

//不产生ACK应答 //void iic_nack(void)

//{

// scl=0;

// sda=1;

// delay10us();

// scl=1;

//高电平应持续4us以上

// delay10us();

// scl=0;

//}

//IIC发送一个字节

void iic_send_byte(uchar date)

{

uchar i;

scl=0;

for(i=0;i<8;i++)

{

date=date<<1;

sda=CY; //将要送入数据送入sda

scl=1; //scl 拉高准备写数据

delay10us();

scl=0; //scl 拉低数据写完毕

delay10us();

}

}

//IIC读出一个字节

u8 iic_read_byte()

{

uchar i,k;

for(i=0;i<8;i++)

{

scl=1; delay10us();

//scl 拉高准备读数据

k=(k<<1)|sda; //将sda 中的数据读出

scl=0; //scl 拉低数据写完毕

delay10us();

}

return k;

}

//通过iic总线向24c02写数据

void write_add(uchar address,uchar date)

{

iic_start();

iic_send_byte(0xa0); //写器件地址0xa0

iic_respons();

iic_send_byte(address);

iic_respons();

iic_send_byte(date);

iic_respons();

iic_stop();

}

//通过iic总线24c02中读数据

uchar read_add(uchar address)//从AT24C02 中读出数据

{

uchar date;

iic_start(); //先把要读的地址写进去,然后再读出来

iic_send_byte(0xa0); //写器件地址0xa0

iic_respons();

iic_send_byte(address);

iic_respons();

iic_start();

iic_send_byte(0xa1); //读器件地址0xa1

iic_respons();

date=iic_read_byte();

iic_stop();

return date;

}

因篇幅问题不能全部显示,请点此查看更多更全内容