EEPROM 24C1024

M

mak_goel

Guest
Pozdrav Everbody.
I m vlasništvo Skupštine kodiranje kao ispod 24C08 da radi sa 8051.Ali opet, im se suočava s problemom izvoditi 24C1024 sa istim kodiranja & hardver.Pl javite mi vaša valueble prijedloge za rješavanje problema.;--------------- EERPROM MODUL START ------------------------------- ---------------------------------------

Write_L_C:
MOV EEAddr, # 00h; WR adresu ..
MOV R0, # 3Ch
; MOV ByteCnt, # 04h; Pošaljite 4 bytes ..

EE_W_Loop:
MOV EEData, @ R0
LCALL EE_Write
INC R0
INC EEAddr
LCALL Delay_20ms
; DJNZ ByteCnt, EE_W_Loop
Močiti

EE ;--------------- PROČITATI ----------------------------

Read_L_C:
MOV EEAddr, # 00h; RD adresu ..
MOV R0, # 3Ch
; MOV ByteCnt, # 04h; Get 4 bytes ..

EE_R_Loop:
LCALL EE_READ
@ MOV R0, EEData
INC R0
INC EEAddr
LCALL Delay_20ms
; DJNZ ByteCnt, EE_R_Loop
Močiti

;--------------- Rutine ZA EEPROM 24C02, sa A1 = A2 = A0 = 0 -------------------
Jedan bajt ..

EE_WRITE:
LCALL EE_START; Pošalji ZASTAVE NA POČETAK EEPROM ..
MOV A, # 0A0H; navesti WRITE EEPROM @ 0H ADRESA ..
LCALL SH_OUT; SHIFT OUT Uređaj ADRESA ..
JC WR_ABORT; pobaciti ako ne ack OD EEPROM ..
MOV A, EEAddr; DOBITI EEPROM memorijske adrese ..
LCALL SH_OUT; SHIFT OUT Memory ADRESA ..
JC WR_ABORT; pobaciti ako ne ack OD EEPROM ..
MOV A, EEData; dobiti podatke biti napisan ..
LCALL SH_OUT; SHIFT OUT PODATAKA ..
JC WR_ABORT
CLR C
WR_ABORT:
LCALL EE_STOP; POŠALJI STOP STANJE NA EEPROM ..
; Pričekate WRITE TIME OF THE 24C02 () 10ms ..
; THE EEPROM I TO 10ms interno Store podataka.Možete ..
; Stavite mikro U DRŽAVNOJ Čekaj, ILI nastaviti sa izvršenju
, Imajući na umu da EEPROM podaci nisu pohranjeni u 10ms!..
Močiti; GO BACK TO GLAVNI PROGRAM ..

;--------------- Pročitali EEPROM PODACI - prvo izvršite 'Dummy WRITE' ---------------
Jedan bajt ..

EE_READ:
MOV EEData, # 00H; vedro STARO PODACI ..
LCALL EE_START; Pošalji ZASTAVE NA POČETAK EEPROM ..
MOV A, # 0A0H; navesti pisati EEPROM @ 0H ADRESA ..
LCALL SH_OUT; izvesti 'Dummy WRITE' ..
JC RD_ABORT; pobaciti ako ne ack ..
MOV A, EEAddr; Load EEPROM memoriji iz kojeg možeš pročitati ..
LCALL SH_OUT; WRITE EEPROM memoriji ..
JC RD_ABORT; pobaciti ako ne ack ..
; ODMAH PROČITATI PODATAKA!..
LCALL EE_START; Pošalji START ZASTAVE ..
MOV A, # 0A1H; navesti iščitati iz EEPROM-a ..
LCALL SH_OUT; SHIFT OUT EEPROM ADRESA ..
JC RD_ABORT; pobaciti ako ne ack ..
LCALL SH_IN; promjenu u podacima iz EEPROM-a ..
MOV EEData, A; pohraniti PODACI ..
LCALL NAK; Pošalji NAK (NO PRIHVAĆATE) u EEPROM-u ..
CLR C; vedro ERROR ZASTAVE ..
RD_ABORT:
LCALL EE_STOP sve učinio ..
Močiti

;--------------- EE_START BIT-BANGS početni slijed NA EEPROM (HI-to-NISKE SDA PRIJELAZ SA VISOKA SCL) ..
EE_START:
SETB SDAPin
SETB SCLPin; SET OBOJE BITS ..
NOP; kašnjenje ..
CLR SDAPin; START USLOV - HI SDA na niske TRANZICIJE ..
NOP
NOP; EEPROM PRISTUP kašnjenje ..
CLR SCLPin
CLR C; vedro ERROR ZASTAVE ..
Močiti sve učinio ..
;--------------- EE_STOP šalje STOP slijed NA EEPROM (nizak-to-VISOKA SDA PRIJELAZ SA VISOKA SCL) ..
EE_STOP:
CLR SDAPin
NOP
NOP
SETB SCLPin
NOP
NOP; Setup kašnjenje ..
SETB SDAPin; Pošalji STOP USLOV ..
Močiti

;--------------- SH_OUT smjenama PODACI do EEPROM ---------------------
SH_OUT:
Push B
MOV B, # 8,
spasi B i opterećenja BIT TAČKA ..
EE_OUT:
RLC A; SHIFT BIT lijevo (RLC = Zakreni ulijevo KROZ nositi) ..
MOV SDAPin, C; GET DATA BIT OD nositi ..
NOP
SETB SCLPin; sata u 1-bitni ..
NOP; SAT krajnje vrijeme ..
CLR SCLPIN; sat ODMAH NISKE ..
DJNZ B, EE_OUT; to učiniti 8 puta ..
SETB SDAPin; RELEASE SDA ZA ack ..
NOP
NOP
SETB SCLPin; ack SAT ..
NOP
MOV C, SDAPin; dobiti ack ..
CLR SCLPin; brisanje SAT BIT ..
POP B; Restore Whatever B BILA ..
Močiti

;--------------- SH_IN SHIFT DATA iz EEPROM-a -----------------------
SH_IN:
SETB SDAPin; NAPRAVITE SDA AN ULAZ ..
Push B
MOV B, # 8,
spasi B I BIT SET Counter ..
EE_IN:
NOP
SETB SCLPin; SET SAT ..
NOP
NOP; EEPROM vrijeme pristupa ..
SETB SDAPin; SET = 1 SO USED AS ULAZ ..
MOV C, SDAPin; PROČITATI 1-bitni ..
RLC A; SHIFT BIT LIJEVO ..
CLR SCLPin; vedro SAT BIT ..
DJNZ B, EE_IN; DOBITI SLJEDEĆA BIT AKO manje od 8 BITS PROČITATI ..
POP B
Močiti

;--------------- Ack šalje EEPROM ACKNOWLDEGE ----------------------
Ack:
CLR SDAPin
NOP
NOP
SETB SCLPin; SAT THE ack ..
NOP
CLR SCLPin; Dozovi SAT NISKE ..
Močiti

;--------------- Šalje NAK NE PRIHVAĆATE ----------------------------
NAK:
SETB SDAPin
NOP
NOP
SETB SCLPin; SAT THE NAK ..
NOP
CLR SCLPin; Dozovi SAT NISKE ..
Močiti

 
Bok,

Vi canot koristiti brzinu čitanja / pisanja rutine od 24c08 za 24c1024.Down učitati tablični od 24c1024.U morati koristiti adresu 10bit modu za read / write.How za čitanje / pisanje jasno je zapisano u pdf file.Make promjena u programu prema tablični ..

Pozdravi
Sajeev

 
24XX512.h
# uključiti "i2c.h" / * Need i2c autobusom * /

# define EEPROMS_ID 0xA0 / * Microchip 24xx512 * /

nepotpisani pougljiti EEPROM_get (nepotpisano int addr)
(
nepotpisani pougljiti dat;

I2C_start (); / * Start i2c autobusom * /

I2C_write (EEPROMS_ID); / * Connect to EEPROM * /
I2C_write (addr & 0xF0); / * Upit RAM adresu (bajt visina) * /
I2C_write (addr & 0x0F); / * Upit RAM adresu (bajt Low) * /

I2C_start (); / * Start i2c autobusom * /

I2C_write (EEPROMS_ID 1); / * Connect to EEPROM za Pročitaj * /
dat = I2C_read (); / * Primi podatke * /

I2C_noack ();

I2C_stop (); / * Zaustavi autobus i2c * /

povratak dat;
)

poniłtava EEPROM_set (nepotpisano int addr, nepotpisan pougljiti val)
(
I2C_start ();

I2C_write (EEPROMS_ID); / * Connect to EEPROM * /
I2C_write (addr & 0xF0); / * Upit RAM adresu (bajt visina) * /
I2C_write (addr & 0x0F); / * Upit RAM adresu (bajt Low) * /

I2C_write (val); / * Napisati sec naveden na adresi RAM-a * /

I2C_stop (); / * Zaustavi autobus i2c * /
)Added nakon 2 minute:

i2c.h# define SDA P2_2 / * Set P2.7 = SDA * /
# define SCL P2_3 / * Set P2.6 = SCL * /
# define I2C_DELAY 0x0F / * Za kašnjenje i2c autobusom * /

poniłtava I2C_delay (void)
(
nepotpisani pougljiti I;

for (i = 0; i <I2C_DELAY; i );
)

poniłtava I2C_clock (void)
(
I2C_delay ();

SCL = 1; / * Start sat * /

I2C_delay ();

SCL = 0; / * Vedro SCL * /
)

poniłtava I2C_start (void)
(
if (SCL)
SCL = 0; / * Vedro SCL * /

SDA = 1; / * Postavi SDA * /
SCL = 1; / * Postavi SCL * /

I2C_delay ();

SDA = 0; / * Vedro SDA * /

I2C_delay ();

SCL = 0; / * Vedro SCL * /
)

poniłtava I2C_stop (void)
(
if (SCL)
SCL = 0; / * Vedro SCL * /

SDA = 0; / * Vedro SDA * /
I2C_delay ();

SCL = 1; / * Postavi SCL * /

I2C_delay ();

SDA = 1; / * Postavi SDA * /
)

bitni I2C_write (nepotpisano pougljiti dat)
(
bitni data_bit;
nepotpisani pougljiti I;

for (i = 0; i <8; i ) / * petlja 8 Za vrijeme (slanje podataka 1 bajt) * /
(
tata & data_bit = 0x80; / * Filter MSB bitni držati na data_bit * /
SDA = data_bit; / * Pošalji data_bit da SDA * /

I2C_clock (); / * Poziv za slanje podataka na i2c autobusom * /

dat dat = <<1;
)

SDA = 1; / * Postavi SDA * /

I2C_delay ();

SCL = 1; / * Postavi SCL * /

I2C_delay ();

= data_bit SDA; / * Provjerite Priznajete * /
SCL = 0; / * Vedro SCL * /

I2C_delay ();

povratak data_bit; / * Ako send_bit = 0 i2c vrijedi * /
)

nepotpisani pougljiti I2C_read (void)
(
bitni rd_bit;
nepotpisani pougljiti ja, dat;

dat = 0x00;

for (i = 0; i <8; i ) / * Za petlji čitaju podatke bajt 1 * /
(
I2C_delay ();

SCL = 1; / * Postavi SCL * /

I2C_delay ();

= rd_bit SDA; / * Imajte za provjeru Priznajete * /
dat dat = <<1;
dat = dat | rd_bit; / * Imajte bitni podaci u dat * /

SCL = 0; / * Vedro SCL * /
)

povratak dat;
)

poniłtava I2C_ack ()
(
SDA = 0; / * Vedro SDA * /

I2C_delay ();

I2C_clock (); / * Poziv za slanje podataka na i2c autobusom * /

SDA = 1; / * Postavi SDA * /
)

poniłtava I2C_noack ()
(
SDA = 1; / * Postavi SDA * /

I2C_delay ();

I2C_clock (); / * Poziv za slanje podataka na i2c autobusom * /

SCL = 1; / * Postavi SCL * /
)Added nakon 49 sekundi:

glavni# uključiti <AT89X51.H>
# uključuju <24xx512.h>

nepotpisani int del, i, x, temp;

pougljiti getCharacter (void)
(
pougljiti chr; / / varijabla je držati novi znak
dok (RI! = 1) (;)
chr = SBUF;
RI = 0;
povratak (chr);
)
poniłtava poslati (pougljiti a)
(
SBUF = a;
a (TI! = 1);
TI = 0;
)

poniłtava glavna (void) (
pougljiti chr;
int i = 0, j = 0, count = 0, inc = 47; / / inc = 47
int index = 0;
P1 = 0X00;
P2 = 0X00;

SCON = 0x50; / / mod 1, 8-bitni uart, omogućite prijemnik
TMOD = 0x20; / / timer 1, mod 2, 8-bitni prekrcati
TH1 = 0XE6; / / 1200
TL1 = 0XE6;
TR1 = 1;
TI = 0;
SBUF = 0;

a (1) (
svoj kod

)
)

 

Welcome to EDABoard.com

Sponsor

Back
Top