当前位置:首页 >> 信息与通信 >>

单片机操作at24c02c程序


#include<reg52.h> #include<intrins.h> #define uchar unsigned char sbit SCK=P3^0; //串行时钟端

sbit SDA=P3^1;//串行数据端 /********************************************* **********

***********************************/ /*start(); stop(); write_b(); read_b(); ACKwrite();//写入一个字节数据接收 IC 的低电平响应 信号 ACKread();//读出一个字节数据,MCU 给出一个低电 平的响应信号给 IC readbyte(); //从指定地址读出一个数据 read_byte(); //从指定地址读出一串数据 writebyte(); //向指定地址内写入一位数据 write_byte(); //从指定地址写入 1 页数据,at24c02 每页 一次只能写入 4 个字节数据,写入地址为高六位(低两 位均视为 0)(at24c04 每页可写入 16 个数据) cur_addr_read();//从当前地址中读出多位数据

sequential_read();//从指定地址中读出连续的多位数据 */ /********************************************* *********************************************/ void delay(int x) { uchar i; for(;x>0;x--) for(i=110;i>0;i--);

}

/********************************************* *********************************************/ void start() { SCK=0; SDA=1; SCK=1; _nop_(); SDA=0; _nop_();

SCK=0;

} /********************************************* *********************************************/

void stop() { SCK=0; SDA=0; SCK=1; _nop_(); SDA=1; _nop_(); SCK=0;

}

/*********************************************

*********************************************/ void ACKread()// 读出一个数据,MCU 给出一个低电 平的响应信号 { SDA=0; SCK=1; _nop_();

_nop_(); SCK=0;

} bit ACKwrite() //写入一个数据,检测 24C02 返回的响 应信号 { bit error; _nop_();

SCK=1;

_nop_(); _nop_(); _nop_(); error=SDA;

SCK=0;

return error; } /********************************************* *********************************************/

void write_b(uchar dat) //写数据 { char i; SCK=0; for(i=0;i<8;i++) { dat<<=1; SDA=CY; SCK=1;

_nop_(); _nop_(); SCK=0;

}

ACKwrite(); } /********************************************* *********************************************/

uchar read_b() //读数据 { char i; uchar temp=0; SDA=1; //读数据需释放总线 ┅ for(i=0;i<8;i++) { 让总线处于空闲(很 重要8嫠逫 C 可以进行读写操作,否则芯片没有动作

SCK=1;

_nop_();

_nop_(); temp=temp<<1|SDA; //高电平后数据稳定,开始读操 作

SCK=0; _nop_(); _nop_();

}

return temp;

}

/********************************************* *********************************************/

uchar readbyte(uchar addr) //从任意地址中读出数据 {

start(); write_b(0xa0);

write_b(addr);

start(); write_b(0xa1);

ACC=read_b(); SDA=1; SCK=1; stop(); return ACC;

}

/*********************************************

*********************************************/ void current_addr_read(uchar count,uchar q[]) //从当前 地址开始读出多个数据 { uchar i; start(); write_b(0xa1); for(i=0;i<count-1;i++) { q[i]=read_b(); ACKread();

} q[i]=read_b(); SDA=1;

_nop_(); SCK=1; SCK=0; stop();

}

/********************************************* *********************************************/

void sequential_read(uchar addr,uchar i,uchar *p) //从当 前地址 ADDR 连续读出 i 个数据,放在 P 数组中 { start(); write_b(0xa0); write_b(addr);

current_addr_read(i,p);

} /********************************************* *********************************************/

void writebyte(uchar addr,uchar dat ) //单个字节写入指 定地址 addr { start();

write_b(0xa0); write_b(addr); //stop(); //start(); //write_b(0xa0); 间 write_b(dat); stop(); delay(10); 也可以这么写, 只是浪费 MCU 时

} /********************************************* *********************************************/

void page_write(uchar addr,uchar *p) 每次可写入 4 字节数据 { char i; start(); write_b(0xa0); write_b(addr&0xfc); for(i=0;i<4;i++)

//page write

{

write_b(*p); p++;

}

stop(); delay(10); }

/********************************************* *********************************************/ /********************************************* *********************************************/ void main() { int i; uchar *p; uchar t[8]={0,0,0,0};

p="abcd1234";

writebyte(0x00,0x11); for(i=0;i<8;i++) writebyte(i,0xff); sequential_read(0x00,8,t);

//current_addr_read(8,t);

page_write(0,p);

page_write(0x04,p+4); sequential_read(0x00,8,t);

while(1) for(i=0;i<8;i++) //测试写入的与读出的是否相等 { P1=t[i]; delay(100); P2=readbyte(0x00+i); if(t[i]==readbyte(0x00+i))

P0=0; else P0=0xff;

}

}

Proteus 里的仿真图片


相关文章:
单片机操作at24c02c程序
单片机操作at24c02c程序_信息与通信_工程科技_专业资料。AT24C02C,用单片机操作存储芯片,AT24CXX系列芯片都可操作,需注意一些小的细节,如AT24C08页写可一次写...
C51编写的AT24C02详细的读写程序
(uchar *nContent,uchar nAddr, uchar nLen) */ /* 单片机 P2 口接 74...主程序 功能:实现存储器 EEPROM AT24C02 的数据读写操作 ---*/...
(单片机设计)AT24C02的读写程序
(单片机设计)AT24C02的读写程序_电子/电路_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档(单片机设计)AT24C02的读写程序_电子/电路_工程科技_专业...
AT24C02程序
有关于 AT24C02 存储器的操作,C 语言部分看不懂 unsigned long D[17] IRc...AT24C02程序 暂无评价 4页 免费 AT24C02资料加C程序及注... 8页 5下载...
AT24C02操作方法及程序(含时序图)
AT24C02操作方法及程序(含时序图)_电子/电路_工程科技_专业资料。总线工作原理 I2C 总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有在...
单片机拓展AT24C02,使之可以进行读写操作
单片机程序设计实践教程... 18页 免费 51单片机I2C 对AT24C02可... 2页 2...用​单​片​机​进​行​拓​展​a​t​2​4​c​...
单片机C语言的AT24C02的时钟程序
单片机的C语言程序设计—... 6页 免费 AT24C02 C语言驱动程序—... 3页 ...基​于​单​片​机​C​语​言​的​时​钟​程​序...
基于51单片机的AT24C02断电数据保护 程序
基于51单片机AT24C02断电数据保护 程序_电子/电路_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档 基于51单片机AT24C02断电数据保护 程序_电子/电路...
AT24C02EEPROM读写程序
程序是针对 AT89S52 单片机编制的 EEPROM 读写程序(2013.8.4 测试通过) ;本程序在 4MHZ、12MHZ 和 24MHZ 分别测试通过 ;AT24C02 的 A0、A1、A2 均...
单片机对存储器AT24C02页读,写程序
单片机对存储器AT24C02页读,写程序_信息与通信_工程科技_专业资料。51单片机AT24C02的页读/写程序,已经过实际应用/*** 定义控制存储器操作程序 ***...
更多相关标签:
at24c02程序 | at24c02读写程序 | at24c02驱动程序 | at24c02程序流程图 | at24c02的读写程序 | at24c02页读写程序 | at24c02掉电程序 | stc11f02e单片机c程序 |