基于AT89C51的AT24C02 IIC 示例程序

如题所述

第1个回答  2009-03-28
void 24c64_start() //启动读写程序
{
SDA=1;_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=1;_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();
}

void 24c64_stop() //停止操作
{
SDA=0;_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=1;_nop_();_nop_();_nop_();_nop_();_nop_();
}

void 24c64_ack() //应答
{
SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();
}

void 24c64_delay_iic(int n) //延时
{
int i;
for(i=1;i<n;i++)
{;}
}

void shift8(char a) //8位移位输出
{
data uchar i; //在data区定义的无符号字符型局部变量
com_data=a; //a传递给com_data,con_data为bdata区定义的一个字符型全局变量
for(i=0;i<8;i++)
{
SDA=mos_bit;//com_data的最高位mos_bit移位输出
SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//产生时钟脉冲
com_data=com_data*2;//com_data左移一位
}
}

void wr_24c64(char a,char b) //将RAM中b地址单元的数据写入24C64中的a地址单元中
{
data uchar command;
_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=1;_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();
24c64_start();
command=160;
shift8(command);
24c64_ack;
shift8(a);
24c64_ack;
shift8(b);
24c64_ack;
24c64_stop;
_nop_();_nop_();_nop_();_nop_();_nop_();
}本回答被网友采纳

Warning: Invalid argument supplied for foreach() in /www/wwwroot/aolonic.com/skin/templets/default/contents.html on line 45
相似回答