的EEPROM 24C1024

M

mak_goel

Guest
您好Everbody。
余米大会有如下的经营,8051 24C08编码。但同样,即时面临的问题
, 运行相同的编码及硬件24C1024。特等让我知道你的valueble建议解决这个问题。;--------------- EERPROM模块阶段------------------------------- ---------------------------------------

Write_L_C:
检验手段EEAddr,#从00;西铁的地址..
检验手段R0,#3通道
;检验手段ByteCnt,#4小时;发送4个字节..

EE_W_Loop:
检验手段EEData,@ R0
LCALL EE_Write
公司R0
公司EEAddr
LCALL Delay_20ms
; DJNZ ByteCnt,EE_W_Loop
退赛

;---------------读电子工程----------------------------

Read_L_C:
检验手段EEAddr,#从00;路地址..
检验手段R0,#3通道
;检验手段ByteCnt,#4小时;获得4个字节..

EE_R_Loop:
LCALL EE_READ
检验手段@ R0,EEData
公司R0
公司EEAddr
LCALL Delay_20ms
; DJNZ ByteCnt,EE_R_Loop
退赛

;--------------- EEPROM的例程的24C02,按照A2 =格A1 =累啊= 0 -------------------
;一个字节..

EE_WRITE:
LCALL EE_START;寄阶段标志EEPROM的..
检验手段甲,#0A0H;指定一个@地址0小时..写的EEPROM
LCALL SH_OUT;输出设备的地址位移..
Jc的WR_ABORT;若没有应答从EEPROM中止..
检验手段甲,EEAddr;得到的EEPROM内存地址..
LCALL SH_OUT;输出位移的内存地址..
Jc的WR_ABORT;若没有应答从EEPROM中止..
检验手段甲,EEData;获取数据写入..
LCALL SH_OUT;有关数据..位移
Jc的WR_ABORT
CLR的ç
WR_ABORT:
LCALL EE_STOP;发送停止条件的EEPROM ..
;等待的24C02写入时间为10ms()..
; EEPROM的时间为10ms国内存储数据。您可以..
;放入处于等待状态,或继续执行的微控制器,
;记住,EEPROM数据是不相称的存储10ms的!..
退赛,返回主计划..

;---------------读EEPROM的数据-首先执行'虚写'---------------
;一个字节..

EE_READ:
检验手段EEData,#从00;清除旧数据..
LCALL EE_START;寄阶段标志的EEPROM ..
检验手段甲,#0A0H;指定一个写到EEPROM @地址0小时..
LCALL SH_OUT;执行'虚写'..
Jc的RD_ABORT;若没有应答中止..
检验手段甲,EEAddr;负荷的EEPROM存储单元中
, 读取..
LCALL SH_OUT;写的EEPROM内存位置..
Jc的RD_ABORT;若没有应答中止..
而现在读取数据!..
LCALL EE_START;寄阶段旗..
检验手段甲,#0A1H;指定阅读从EEPROM ..
LCALL SH_OUT;输出EEPROM的地址位移..
Jc的RD_ABORT;若没有应答中止..
LCALL SH_IN;在数据从EEPROM SHIFT键..
检验手段EEData,阿;存储数据..
LCALL否定确认;寄否定确认(无应答)向EEPROM ..
CLR的荤,清除错误标志..
RD_ABORT:
LCALL EE_STOP;全部完成..
退赛

;--------------- EE_START位,邦斯甲启动序列到EEPROM(嗨到低SDA的过渡,SCL高电平)..
EE_START:
SETB SDAPin
SETB SCLPin;套两个位..
NOP产品向导;延迟..
CLR的SDAPin;阶段条件- SDA的喜低变..
NOP产品向导
NOP产品向导; EEPROM的存取时间延迟..
CLR的SCLPin
CLR的荤,清除错误标志..
退赛,全部完成..
;--------------- EE_STOP序列发送停止向EEPROM(低到高的SDA的过渡,SCL高电平)..
EE_STOP:
CLR的SDAPin
NOP产品向导
NOP产品向导
SETB SCLPin
NOP产品向导
NOP产品向导;设定时延..
SETB SDAPin;发出停止条件..
退赛

;--------------- SH_OUT位移数据输出到EEPROM ---------------------
SH_OUT:
单键乙
检验手段乙,#8;节省乙和负荷位计数..
EE_OUT:
肺总量甲; SHIFT键位左(肺总量=向左7860携带)..
检验手段SDAPin,荤,获得数据位从融资..
NOP产品向导
SETB SCLPin,在1个时钟位..
NOP产品向导;时钟高电平时间..
CLR的SCLPIN;时钟现已低..
DJNZ乙,EE_OUT;做8次..
SETB SDAPin;释放的应答SDA的..
NOP产品向导
NOP产品向导
SETB SCLPin;应答钟..
NOP产品向导
检验手段荤,SDAPin;收到ACK信息..
CLR的SCLPin,清理中的时钟位..
持久性有机污染物乙,乙的RESTORE无论是..
退赛

;--------------- SH_IN位移数据从EEPROM中-----------------------
SH_IN:
SETB SDAPin,使数SDA的安输入..
单键乙
检验手段乙,#8;节省乙和SET位计数器..
EE_IN:
NOP产品向导
SETB SCLPin;系列时钟..
NOP产品向导
NOP产品向导; EEPROM的存取时间..
SETB SDAPin;设置= 1,以便作为输入..
检验手段荤,SDAPin,阅读1位..
肺总量甲; SHIFT键位左..
CLR的SCLPin;清除钟位..
DJNZ乙,EE_IN;获得如果不那么下一位大于8位读..
持久性有机污染物乙
退赛

;---------------发送一个应答的EEPROM ACKNOWLDEGE ----------------------
应答:
CLR的SDAPin
NOP产品向导
NOP产品向导
SETB SCLPin;时钟的应答..
NOP产品向导
CLR的SCLPin;把时钟低..
退赛

;---------------否定确认发送无应答----------------------------
否定确认:
SETB SDAPin
NOP产品向导
NOP产品向导
SETB SCLPin;时钟的否定确认..
NOP产品向导
CLR的SCLPin;把时钟低..
退赛

 
嗨,

您卡诺使用读/写24c1024.Down负荷的24c1024.U数据表24c08程序需要使用10位地址模式读/ write.How读/写清楚在PDF file.Make更改程序的书面根据数据表..

关心
Sajeev

 
24XX512.h
#包括“i2c.h”/ *需要I2C总线* /

#定义EEPROMS_ID 0xA0 / * Microchip的24xx512 * /

无符号字符EEPROM_get(无符号整型地址)

无符号字符逸;

I2C_start(); / *启动I2C总线* /

I2C_write(EEPROMS_ID)/ *连接到EEPROM * /
I2C_write(地址&0xF0); / *请求RAM地址(Hight字节)* /
I2C_write(地址&0x0F); / *请求RAM地址(低字节)* /

I2C_start(); / *启动I2C总线* /

I2C_write(EEPROMS_ID 1)/ *连接到EEPROM的读* /
逸= I2C_read()/ *接收数据* /

I2C_noack();

I2C_stop()/ *停止I2C总线* /

返回逸;


无效EEPROM_set(无符号整型地址为unsigned char val)将

I2C_start();

I2C_write(EEPROMS_ID)/ *连接到EEPROM * /
I2C_write(地址&0xF0); / *请求RAM地址(Hight字节)* /
I2C_write(地址&0x0F); / *请求RAM地址(低字节)* /

I2C_write(val)的; / *写在RAM上指定的地址*秒/

I2C_stop()/ *停止I2C总线* /
)2分钟后添加:

i2c.h#定义SDA的P2_2 / *设置P2.7 = SDA的* /
#定义中线P2_3 / *设置P2.6 =中线* /
#定义I2C_DELAY 0x0F / *延误I2C总线* /

无效I2C_delay(无效)

无符号的字符一;

为(1 = 0;“I2C_DELAY,我 );


无效I2C_clock(无效)

I2C_delay();

沙田至中环线= 1; / *开始时钟* /

I2C_delay();

沙田至中环线= 0; / *清除沙田至中环线* /


无效I2C_start(无效)

如果(沙中线)
沙田至中环线= 0; / *清除沙田至中环线* /

SDA的= 1; / *设置SDA的* /
沙田至中环线= 1; / *设置沙* /

I2C_delay();

SDA的= 0; / *清除SDA的* /

I2C_delay();

沙田至中环线= 0; / *清除沙田至中环线* /


无效I2C_stop(无效)

如果(沙中线)
沙田至中环线= 0; / *清除沙田至中环线* /

SDA的= 0; / *清除SDA的* /
I2C_delay();

沙田至中环线= 1; / *设置沙* /

I2C_delay();

SDA的= 1; / *设置SDA的* /


位I2C_write(无符号字符逸)

位data_bit;
无符号的字符一;

为(1 = 0;“8,我 )/ * For循环8时(发送数据1字节)* /

data_bit =逸&0x80; / *过滤的MSB位坚持data_bit * /
SDA的= data_bit; / *发送data_bit的SDA的* /

I2C_clock(); / *征集数据发送到I2C总线* /

逸=逸“”1;


SDA的= 1; / *设置SDA的* /

I2C_delay();

沙田至中环线= 1; / *设置沙* /

I2C_delay();

data_bit = SDA的; / *检查确认* /
沙田至中环线= 0; / *清除沙田至中环线* /

I2C_delay();

返回data_bit; / *如果send_bit = 0 I2C是有效* /


无符号字符I2C_read(无效)

位rd_bit;
无符号的字符我,逸;

逸= 0x00;

为(1 = 0;“8,我 )/ * For循环读取数据,1字节* /

I2C_delay();

沙田至中环线= 1; / *设置沙* /

I2C_delay();

rd_bit = SDA的; / *保持了检查确认* /
逸=逸“”1;
逸=逸| rd_bit; / *请溢位数据* /

沙田至中环线= 0; / *清除沙田至中环线* /


返回逸;


无效I2C_ack()

SDA的= 0; / *清除SDA的* /

I2C_delay();

I2C_clock(); / *征集数据发送到I2C总线* /

SDA的= 1; / *设置SDA的* /


无效I2C_noack()

SDA的= 1; / *设置SDA的* /

I2C_delay();

I2C_clock(); / *征集数据发送到I2C总线* /

沙田至中环线= 1; / *设置沙* /
)49秒后增加:

主要的#包括<AT89X51.H>
#包括“24xx512.h”

无符号整型德尔,我十,温度;

字符getCharacter(无效)

字符人权中心; / /变量来保存新的字符
而(里!= 1)(;)
人权中心= SBUF的;
里= 0;
返回(人权中心);

无效发送(字符1)

SBUF的= 1;
同时公司(TI = 1);
德州仪器= 0;


无效的主要(无效)(
字符人权中心;
廉政= 0,J = 0时,计数= 0,公司= 47; / /公司= 47
廉政指数= 0;
小= 0X00;
的P2 = 0X00;

SCON的= 0x50; / /模式1,8位UART,使接收器
TMOD = 0x20; / /定时器1,模式2,8位重载
TH1 = 0XE6; / / 1200
TL1 = 0XE6;
TR1的= 1;
德州仪器= 0;
SBUF的= 0;

而(1)(
您的代码




 

Welcome to EDABoard.com

Sponsor

Back
Top