发布时间 : 星期六 文章I2C程序(AT24C1024)测试通过的更新完毕开始阅读
return(receive_data);
}
//********************************************* //向AT24C1024写入数据 //********************************************* void write_1024(uchar send[]) {
int i; start();
write_byte(0xa0);
check_ACK();
write_byte(0x00); check_ACK(); write_byte(0x00); check_ACK();
for(i=0;i<16;i++)
{
//启动总线 //发送器件地址
//发送器件片内高8位地址 //检查从机是否应答
//发送器件片内低8位地址 //写16个数
//将sind[]数组里面的数据写入AT24C1024
write_byte(send[i]);
check_ACK();
} stop();
//停止总线
}
//********************************************* //从AT24C1024读出数据 //********************************************* void read_1024(uchar receive_data[]) {
uchar i; start(); write_byte(0xa0);
check_ACK(); write_byte(0x00); check_ACK(); write_byte(0x00); check_ACK(); start(); write_byte(0xa1); check_ACK(); for(i=0;i<16;i++)
//启动总线 //发送器件地址
//检查从机是否应答
//发送器件片内高8位地址 //发送器件片内低8位地址
//再次启动总忂
//发读命令
//读16个数
//读出来的数据存到receivedata[]
//是否读完,未读完全部数
{
receive_data[i]=read_byte();
数组中 if(i==15) 据,则应答0
NoACK(); else
ACK(); } stop();
}
void main()
{
uchar send_data[16]={1,9,8,8,0,5,2,3,1,9,8,8,0,9,0,6}; uchar receive_data[16]={0};
据
while(1) {
delay(300); write_1024(send_data); delay(1000);
read_1024(receive_data);
P3=receive_data[2]; } }
//停止总线
//要写入到AT24C1024数据 //存储从AT24C1024读出的数
//延时等待蕊片复位 //调用写AT24C1024程序 //AT24C1024写入延时
//调用读AT24C1024程序