📄 eeprom
字号:
C51编程:我对at24c256读写,遇到了一些问题 [blfman] [17次] 01-9-24 上午 10:30:43
您好,首先问一个可能是可笑的问题,:),当我给EEPROM送地址的时候,先送高地址还是
低地址?我现在是先送高,但是经常读出来的数据不正确(主要是高地址的部分容易出
错),或者就是存储的内容被改变了,请问这是怎么回事?请指教。
:)
上载一个24c256的keil c51 源程序。 [shiaf] [23次] 01-9-24 上午 11:47:31
文件上栽不了,就在这里贴上 [shiaf] [68次] 01-9-24 上午 11:50:14
// 24C64、24c128、24C256、24C512 EEPROM测试程序
// 程序设计:施爱飞
// 1998年5月27日
#include <reg52.h>
sbit 24CXX_SCL = P1^0;
sbit 24CXX_SDA = P1^1;
sbit ACC_0 = ACC^0;
sbit ACC_1 = ACC^1;
sbit ACC_2 = ACC^2;
sbit ACC_3 = ACC^3;
sbit ACC_4 = ACC^4;
sbit ACC_5 = ACC^5;
sbit ACC_6 = ACC^6;
sbit ACC_7 = ACC^7;
// buff = 数据缓冲区
// address = EEPROM 地址
// size = 数量
char READ_24CXX(unsigned char * buff,unsigned int address,unsigned char size)
{
unsigned char a;
24CXX_SCL = 1;
24CXX_SDA = 1;
24CXX_SDA = 0;
24CXX_SCL = 0;
ACC = 0xa0;
24CXX_SDA = ACC_7;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_6;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_5;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_4;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_3;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_2;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_1;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_0;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = 1;
24CXX_SCL = 1;
if(24CXX_SDA)
return -1;
24CXX_SCL = 0;
a = address>>8;
ACC = a;
24CXX_SDA = ACC_7;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_6;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_5;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_4;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_3;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_2;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_1;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_0;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = 1;
24CXX_SCL = 1;
if(24CXX_SDA)
return -1;
24CXX_SCL = 0;
a = address;
ACC = a;
24CXX_SDA = ACC_7;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_6;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_5;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_4;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_3;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_2;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_1;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_0;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = 1;
24CXX_SCL = 1;
if(24CXX_SDA)
return -1;
24CXX_SCL = 0;
24CXX_SCL = 1;
24CXX_SDA = 1;
24CXX_SDA = 0;
24CXX_SCL = 0;
ACC = 0xa1;
24CXX_SDA = ACC_7;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_6;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_5;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_4;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_3;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_2;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_1;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_0;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = 1;
24CXX_SCL = 1;
if(24CXX_SDA)
return -1;
24CXX_SCL = 0;
for(a=0;a<size;a++)
{
24CXX_SCL = 0;
ACC_7 = 24CXX_SDA;
24CXX_SCL = 1;
24CXX_SCL = 0;
ACC_6 = 24CXX_SDA;
24CXX_SCL = 1;
24CXX_SCL = 0;
ACC_5 = 24CXX_SDA;
24CXX_SCL = 1;
24CXX_SCL = 0;
ACC_4 = 24CXX_SDA;
24CXX_SCL = 1;
24CXX_SCL = 0;
ACC_3 = 24CXX_SDA;
24CXX_SCL = 1;
24CXX_SCL = 0;
ACC_2 = 24CXX_SDA;
24CXX_SCL = 1;
24CXX_SCL = 0;
ACC_1 = 24CXX_SDA;
24CXX_SCL = 1;
24CXX_SCL = 0;
ACC_0 = 24CXX_SDA
*buff = ACC;
buff++;
24CXX_SCL = 1;
}
24CXX_SCL = 0;
24CXX_SDA = 0;
24CXX_SCL = 1;
24CXX_SDA = 1;
return 0;
}
// buff = 数据缓冲区
// address = EEPROM 地址
// size = 数量
char WRITE_24CXX(unsigned char *buff,unsigned int address,unsigned char size)
{
unsigned char a;
24CXX_SCL = 1;
24CXX_SDA = 1;
24CXX_SDA = 0;
24CXX_SCL = 0;
ACC = 0xa0;
24CXX_SDA = ACC_7;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_6;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_5;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_4;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_3;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_2;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_1;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_0;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = 1;
24CXX_SCL = 1;
if(24CXX_SDA)
return -1;
24CXX_SCL = 0;
a = address>>8;
ACC = a;
24CXX_SDA = ACC_7;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_6;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_5;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_4;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_3;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_2;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_1;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_0;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = 1;
24CXX_SCL = 1;
if(24CXX_SDA)
return -1;
24CXX_SCL = 0;
a = address;
ACC = a;
24CXX_SDA = ACC_7;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_6;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_5;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_4;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_3;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_2;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_1;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_0;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = 1;
24CXX_SCL = 1;
if(24CXX_SDA)
return -1;
24CXX_SCL = 0;
for(a=0;a<size;a++)
{
ACC = *buff;
24CXX_SDA = ACC_7;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_6;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_5;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_4;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_3;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_2;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_1;
24CXX_SCL = 1;
24CXX_SCL = 0;
24CXX_SDA = ACC_0;
24CXX_SCL = 1;
24CXX_SCL = 0;
X24CXX_SDA = 1;
X24CXX_SCL = 1;
if(24CXX_SDA)
return -1;
24CXX_SCL = 0;
buff++;
}
24CXX_SCL = 0;
24CXX_SDA = 0;
24CXX_SCL = 1;
24CXX_SDA = 1;
return 0;
}
多谢多谢!我会认真学习:) [blfman] [3次] 01-9-24 下午 01:59:39
兄弟,你的程序真长啊,程序存储器不要钱? [何苦] [5次] 01-9-24 下午 06:54:31
兄弟,你有什么好办法在c51中实现汇编中的RLC A 功能?不要跟我说是c跟汇编混合编程。 [shiaf] [9次] 01-9-25 上午 08:42:26
搜索“循环移位” [大头小语] [1次] 01-9-25 下午 07:22:29
点击这里回复这篇贴子>>
_____________________________________________________________________________
Copyright?,C51BBS论坛 2000-2001
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -