8051 interfacing met 24c08

C

CosaNostra

Guest
wilde weten of ik kan aansluiten van de SDA en SCL pinnen op alle pennen van MC of zijn er specifieke pinnen waaraan ik moet verbinden deze pinnen

Ten tweede wilde ik weten wanneer de 24c08 geheugen is voltooid is het opnieuw opstarten automatisch of moet ik iets doen om het geheugen te wissen

en ten slotte wanneer schriftelijke aan externe geheugen is het noodzakelijk om het adres elke keer of is het geheugen increment automatisch

 
Elke microcntroller algemene I / O-pin zal doen ..voeg externe pullups ..

U hoeft niet te wissen dit geheugen,
het schrijven van nieuwe gegevens overschrijft oude gegevens ..

Geef het adres van de eerste byte en blijven schrijven van een blok gegevens (Page Mode) ..max. lengte is 16 (1 15) ..zie Byte Schrijf Page Schrijf op:
http://www.rennes.supelec.fr/ren/fi/elec/ftp/docs/i2c/24c16.pdf

Groeten,
IanP

 
dus hoe zit het met de SCL ding
isnt het somsort van een klok en konden u plz soort geef me een voorbeeld circuit

 
dus als het geheugen vol is, gaat het terug naar het eerste adres automatisch of heb ik nodig om terug te keren naar het eerste adres mijn zelfvertrouwen

 
Citaat:

Na de ontvangst van elk gegeven woord, de IS24CXX

reageert onmiddellijk met een bevestigingsknop op SDA lijn,

en de drie lager (24C01/24C02) of vier lager (24C04 /

24C08/24C16) bestel datawoord adres bits internverhoogd worden met een, terwijl de hogere orde bits van de gegevensIf the master device
woord adres constant blijven.

Als de master apparaat

moet meer dan N 1 (N = 7 voor 24C01 / 2 en

N = 15 voor 24C04/08/16) woorden, voorafgaand aan de afgifte van het STOP -conditie, het adres teller zal rollen, en deOnce all N 1
eerder geschreven gegevens worden overschreven.

Zodra alle N 1

(N = 7 voor 24C01 / 2 en N = 15 voor 24C04/08/16) bytes worden

ontvangen en de STOP toestand is verzonden door de

Meester, de interne programmeringscyclus begint.

 
Citaat:

hoe zit psen en ale en allemaal zijn ze verricht
 
Deze pagina bevat interfacing 8051 en 24cxxx EEPROM:

http://mcu-programming.blogspot.com/2006/09/eeproms-interfacing.html

Het kan helpen een beetje.

 
volgende is de ASM-bestand naar de interface 24C08 seriële geheugen

NAAM Control_AT24Cxx

; Deze verzameling van routines kunt AT89C2051 een microcontroller te lezen
En schrijf de AT24Cxx familie van seriële CMOS EEPROM's.Deze versie van de
; Code is alleen compatibel met de AT89C2051 te wijten aan de locatie van de
; Gegevens en stack buffer in het RAM-geheugen.De code kan worden aangepast om te werken met de
; AT89C1051 door het verplaatsen of de grootte van de buffer en stack te passen in de
; Kleinere hoeveelheid RAM beschikbaar in de AT89C1051.Merk op dat de minimale
; Grootte van de buffer wordt bepaald door de grootte van de AT24Cxx.
;
; Alle vijf AT24Cxx apparaat operaties worden ondersteund.Schrijf byte, Huidige
; Adres Lees en Random Lees worden uitgevoerd door de functies WRITE_BYTE,
; READ_CURRENT en READ_RANDOM, respectievelijk.Page Sequentiële Lees en Schrijf
; Zijn speciale gevallen van functies WRITE_BLOCK en READ_BLOCK, respectievelijk.
; WRITE_BLOCK en READ_BLOCK proces van een byte van het aantal bytes
; Op een pagina en de overdracht van gegevens tussen de AT24Cxx en het RAM-buffer.
;
; De code ondersteunt meerdere AT24Cxx apparaten per bus, elk met een unieke
; Adres bepaald door de bedrading van het adres pinnen (A0, A1, A2).De
; Drie-bit programmeerbare adres wordt doorgegeven aan het WRITE_BYTE, READ_CURRENT,
; READ_RANDOM, WRITE_BLOCK en READ_BLOCK functies, waar het wordt gecombineerd
; Met de AT24Cxx vaste adres (FADDR) en gebruikt om een apparaat op de
; Bus.Verwijzen naar de familie AT24Cxx fiches voor extra informatie over
; Apparaat aanpakken.
;
; Functies BYTE_FILL, VERIFY_BYTE_FILL, PAGE_FILL en VERIFY_PAGE_FILL zijn
; Artefacten uit de debug-proces en dienen ter illustratie van het gebruik van de
; Apparaat lezen en schrijven van functies met een AT24C64.Tot wijziging van de code voor een
; Verschillende leden van de familie AT24Cxx gewoon opnieuw de waarden van GROOTTE
(Het aantal bytes per apparaat) en PSIZE (het aantal bytes per pagina).
; Als u de waarde invullen, herdefiniëren VUL.Als u de programmeerbare gedeelte
; Van het apparaat adres, herdefiniëren PADDR tot een waarde van nul tot zeven.
;
; De code voldoet aan alle AT24Cxx familie timing wanneer uitgevoerd door een
; AT89Cx051 microcontroller met een 12 MHz klok.Code wijzigingen kunnen worden
; Vereist als een snellere klok vervangen.FADDR EQU 0a0h; vaste adres voor AT24Cxx EEPROM's
PADDR EQU 0; programmeerbare adres (0 .. 7)
SIZE EQU 2000h; bytes per AT24C64
PSIZE EQU 32; bytes per pagina voor AT24C64
VUL EQU 55h; voorbeeld vullen waarde

; Register definities.

index EQU r0; buffer pointer
kount EQU r1; byte count registreren
zdata EQU r1; gegevens registreren
addr_lo EQU r2; 2-byte-adres registreren
addr_hi EQU r3;

; Microcontroller verbindingen met AT24Cxx seriële bus lijnen.

SCL BIT p1.2; seriële klok
SDA BIT p1.3; seriële gegevensDSEG om 20u

ORG 40H
buffer: DS PSIZE; opslag voor lezen / schrijven van gegevens

ORG 60H; stapel oorsprong
stapel: DS 20H; stapel diepteCSEG

ORG 0000H; power on / reset vector
JMP on_reset

ORG 0003H; externe interrupt 0 vector
RETI; undefined

ORG 000BH; timer 0 overflow vector
RETI; undefined

ORG 0013H; externe onderbreken 1 vector
RETI; undefined

ORG 001BH; timer 1 overflow vector
RETI; undefined

ORG 0023H; seriële I / O-interruptvector
RETI; undefined

ORG 0080H; beginnen code ruimte
USING 0; registreren bank nul
on_reset:
mov sp, # (stack-1); initialiseren stack pointer

; Initialize AT24Cxx seriële buslijnen.

setb SDA, hoge
setb SCL, hogeoproep byte_fill
JC fout

oproep verify_byte_fill
JC fout

oproep page_fill
JC fout

oproep verify_page_fill
JC fout

fout:
JMP $byte_fill:

; Vul elke byte in een AT24Cxx met dezelfde waarde.
; Brandt een adres in een tijd (pagina-modus wordt niet gebruikt).
; Retourneren CY ingesteld om aan te geven schrijven timeout.
; Destroys A, B, DPTR, XDATA, ADDR_HI: ADDR_LO.

mov zdata, # VUL; opgericht vullen gegevens
mov dptr, # 0; initialiseren adres aanwijzer
X51:
mov addr_lo, DPL,
opzetten adres
mov addr_hi, DPH;

mov b, # 120; retry counter
X52:
mov a, # PADDR; programmeerbaar adres
oproep write_byte; probeert te schrijven
jnc x53; springen als schrijven OK

djnz b, X52; probeer het opnieuw
setb c; ingestelde timeout fout vlag
JMP X54; afslag
x53:
incl. dptr; voorschot adres aanwijzer
; Mov a, DPL; controleren lage byte
; Cjne een, # (LOW GROOTTE), X51, springen, zo niet de laatste
mov a, DPH; controleren hoge byte
cjne a, # (HOGE MAAT), X51, springen, zo niet de laatste
clr c; duidelijke fout vlag
X54:
retverify_byte_fill:

; Controleer of alle bytes in een AT24Cxx overeenkomen met een waarde invullen.
; Leest en controleert een byte in een tijd (pagina-modus wordt niet gebruikt).
; Voert een Willekeurig Lees functie te initialiseren de interne
; Adres counter en controleert de inhoud van het eerste adres.
; Vervolgens voert meerdere huidige adres Lees functies voor stap
; Door de resterende aanpassen.
; Retourneren CY ingesteld om aan te geven lees timeout of vergelijken mislukken.
; Destroys A, B, DPTR.

mov dptr, # 0; initialiseren adres aanwijzer / counter
mov addr_lo, DPL,
opzetten adres
mov addr_hi, DPH;

mov b, # 120; retry counter
x81:
mov a, # PADDR; programmeerbaar adres
oproep read_random; proberen te lezen
jnc x82; springen als gelezen OK

djnz b, x81; probeer het opnieuw
JMP x86; ingesteld fout vlag en afrit
x82:
cjne een, # FILL, x86; springen indien vergelijken fout
JMP x85; doen resterende adressen
x83:
mov a, # PADDR
oproep read_current
JC x87; springen als lezen niet

cjne een, # FILL, x86; springen indien vergelijken fout
x85:
incl. dptr; voorschot adres aanwijzer
mov a, DPH; controleren hoge byte
cjne a, # (HOGE MAAT), x83; springen, zo niet de laatste
clr c; duidelijke fout vlag
JMP x87; afslag
x86:
setb c; ingesteld fout vlag
x87:
retpage_fill:

; Vul elke byte in een AT24Cxx met dezelfde waarde.
; Brandt een pagina per keer.
; Retourneren CY ingesteld om aan te geven schrijven timeout.
; Destroys A, B, DPTR, KOUNT, index, ADDR_HI: ADDR_LO.

; Eerste vullen buffer.

mov b, # PSIZE; bytes per pagina
mov-index, # buffer; wijs buffer
x61:
mov @ index # VUL; gebracht vullen waarde in de buffer
incl. index; voorschot aanwijzer
djnz b, x61; volgende byte

; Kopieer buffer te apparaat, een pagina per keer.

mov dptr, # 0; initialiseren adres aanwijzer
x62:
mov addr_lo, DPL,
opzetten adres
mov addr_hi, DPH;
mov kount, # PSIZE; bytes per pagina

mov b, # 120; retry counter
x63:
mov a, # PADDR; programmeerbaar adres
oproep write_block; probeert te schrijven
jnc x64; springen als schrijven OK

djnz b, x63; probeer het opnieuw
setb c; ingestelde timeout fout vlag
JMP x66; afslag
x64:
; Toevoegen paginaformaat aan te pakken aanwijzer.

mov a, DPL; krijgen lage byte
add a, # PSIZE; toevoegen paginaformaat
mov DPL, a; opslaan lage byte
jnc X65; springen indien hoge byte niet beïnvloed
incl. DPH; increment hoge byte
X65:
; Cjne een, # (LOW GROOTTE), x62; springen als lage byte niet afgelopen
mov a, DPH; controleren hoge byte
cjne a, # (HOGE MAAT), x62; springen, zo niet de laatste
clr c; duidelijke fout vlag
x66:
retverify_page_fill:

; Controleer of alle bytes in een AT24Cxx overeenkomen met een waarde invullen.
; Leest en controleert een pagina per keer.
; Retourneren CY ingesteld om aan te geven lees timeout of vergelijken mislukken.
; Destroys A, B, DPTR, KOUNT, index, ADDR_HI: ADDR_LO.

; Kopiëren apparaat pagina naar buffer.

mov dptr, # 0; initialiseren adres aanwijzer
x71:
mov addr_lo, DPL,
opzetten adres
mov addr_hi, DPH;
mov kount, # PSIZE; bytes per pagina

mov b, # 120; retry counter
x72:
mov a, # PADDR; programmeerbaar adres
oproep read_block; proberen te lezen
jnc x74; springen als gelezen OK

djnz b, x72; probeer het opnieuw
x73:
setb c; ingesteld fout vlag
JMP x77; afslag
x74:
; Controleer buffer inhoud.

mov b, # PSIZE; bytes per pagina
mov-index, # buffer; wijs buffer
x75:
cjne @ index # FILL, x73; springen indien vergelijken mislukt
incl. index; voorschot aanwijzer
djnz b, x75; volgende byte

; Toevoegen paginaformaat aan te pakken aanwijzer.

mov a, DPL; krijgen lage byte
add a, # PSIZE; toevoegen paginaformaat
mov DPL, a; opslaan lage byte
jnc x76; springen indien hoge byte niet beïnvloed
incl. DPH; increment hoge byte
x76:
; Cjne een, # (LOW GROOTTE), x71; springen als lage byte niet afgelopen
mov a, DPH; controleren hoge byte
cjne a, # (HOGE MAAT), x71; springen, zo niet de laatste
clr c; duidelijke fout vlag
x77:
retwrite_block:

; Schrijf uit een byte naar een pagina van de gegevens naar een AT24Cxx.
; Called met programmeerbare adres in A,
het adres van de eerste byte
; Registreren paar ADDR_HI: ADDR_LO, gegevens in de buffer, byte count
; Registreren KOUNT.
; Niet wachten schrijven cyclus te voltooien.
; Retourneren CY ingesteld om aan te geven dat de bus is niet beschikbaar
, Of dat het apparaat niet gericht te erkennen.
; Destroys A, KOUNT, INDEX.

oproep starten
JC X38; afbreken als de bus niet beschikbaar

rl a; programmeerbare adres bits 3:1
KNO-een, # FADDR; toevoegen vast adres
clr acc.0; vermelden schrijfbewerking
oproep shout; sturen apparaat adres
JC x37; afbreken indien geen erkennen

mov a, addr_hi; sturen hoge byte van het adres
oproep shout;
JC x37; afbreken indien geen erkennen

mov a, addr_lo; sturen lage byte van het adres
oproep shout;
JC x37; afbreken indien geen erkennen

mov-index, # buffer; wijs buffer
x36:
mov a, @ index; gegevens krijgen
oproep shout; u gegevens
JC x37; afbreken indien geen erkennen

incl. index; voorschot buffer pointer
djnz kount, x36; volgende byte
clr c; duidelijke fout vlag
x37:
oproep stoppen
X38:
retread_block:

; Lezen van een byte naar een pagina van de gegevens van een AT24Cxx.
; Voert een Willekeurig Lees die wordt uitgebreid tot een Sequentiële Lees
; Wanneer meer dan een byte lezen.Aangeroepen met programmeerbare adres
; In A,
het adres van de eerste byte in het register paar ADDR_HI: ADDR_LO,
; Byte tellen in het register KOUNT.
; Retourneert gegevens in de buffer.Retourneren CY ingesteld om aan te geven dat de bus is
; Niet beschikbaar is of dat het apparaat niet gericht te erkennen.
; Destroys A, KOUNT, INDEX.

; Stuur dummy write commando aan te pakken eerste byte.

oproep starten
JC x35; afbreken als de bus niet beschikbaar

rl a; programmeerbare adres bits 3:1
KNO-een, # FADDR; toevoegen vast adres
mov-index, een opslaan kopie van apparaatadres
clr acc.0; vermelden schrijfbewerking
oproep shout; sturen apparaat adres
JC x34; afbreken indien geen erkennen

mov a, addr_hi; sturen hoge byte van het adres
oproep shout;
JC x34; afbreken indien geen erkennen

mov a, addr_lo; sturen lage byte van het adres
oproep shout;
JC x34; afbreken indien geen erkennen

; Stuur gelezen commando en ontvangen van gegevens.

oproep starten,
de tweede start voor lezen
JC x34; afbreken als de bus niet beschikbaar

mov a, index; krijgen apparaat adres
setb acc.0; specificeren lees operatie
oproep shout; sturen apparaat adres
JC x34; afbreken indien geen erkennen

mov-index, # buffer; wijs buffer
X31:
oproep scheenbeschermers; ontvangen van gegevens byte
mov @ index, a; gegevens opslaan

cjne kount, # 1, x32; springen, zo niet de laatste byte
oproep NAK; niet erkennen laatste byte
JMP x33; gedaan
x32:
oproep ACK; erkennen byte
incl. index; voorschot buffer pointer
djnz kount, x31; volgende byte
x33:
clr c; duidelijke fout vlag
x34:
oproep stoppen
x35:
retwrite_byte:

; AT24Cxx Byte Schrijf functie.
; Called met programmeerbare adres in A byte adres in
; Registreren paar ADDR_HI: ADDR_LO, gegevens in het register XDATA.
; Niet wachten schrijven cyclus te voltooien.
; Retourneren CY ingesteld om aan te geven dat de bus is niet beschikbaar
, Of dat het apparaat niet gericht te erkennen.
; Destroys A.

oproep starten
JC x49; afbreken als de bus niet beschikbaar

rl a; programmeerbare adres bits 3:1
KNO-een, # FADDR; toevoegen vast adres
clr acc.0; vermelden schrijfbewerking
oproep shout; sturen apparaat adres
JC x48; afbreken indien geen erkennen

mov a, addr_hi; sturen hoge byte van het adres
oproep shout;
JC x48; afbreken indien geen erkennen

mov a, addr_lo; sturen lage byte van het adres
oproep shout;
JC x48; afbreken indien geen erkennen

mov a, zdata; gegevens krijgen
oproep shout; u gegevens
JC x48; afbreken indien geen erkennen

clr c; duidelijke fout vlag
x48:
oproep stoppen
x49:
retread_current:

; AT24Cxx huidige adres Lees functie.
; Called met programmeerbare adres A. Retourneert gegevens in A.
; Retourneren CY ingesteld om aan te geven dat de bus is niet beschikbaar
, Of dat het apparaat niet gericht te erkennen.

oproep starten
JC x45; afbreken als de bus niet beschikbaar

rl a; programmeerbare adres bits 3:1
KNO-een, # FADDR; toevoegen vast adres
setb acc.0; specificeren lees operatie
oproep shout; sturen apparaat adres
JC x44; afbreken indien geen erkennen

oproep scheenbeschermers; ontvangen van gegevens byte
oproep NAK; niet erkennen byte
clr c; duidelijke fout vlag
x44:
oproep stoppen
x45:
retread_random:

; AT24Cxx Random Lees functie.
; Called met programmeerbare adres in A byte adres in
; Registreren paar ADDR_HI: ADDR_LO.Retourneert gegevens in A.
; Retourneren CY ingesteld om aan te geven dat de bus is niet beschikbaar
, Of dat het apparaat niet gericht te erkennen.

push-b
mov b, a; opslaan kopie van programmeerbare adres

; Stuur dummy write commando om interne adres.

oproep starten
JC x47; afbreken als de bus niet beschikbaar

rl a; programmeerbare adres bits 3:1
KNO-een, # FADDR; toevoegen vast adres
clr acc.0; vermelden schrijfbewerking
oproep shout; sturen apparaat adres
JC X46; afbreken indien geen erkennen

mov a, addr_hi; sturen hoge byte van het adres
oproep shout;
JC X46; afbreken indien geen erkennen

mov a, addr_lo; sturen lage byte van het adres
oproep shout;
JC X46; afbreken indien geen erkennen

; Call huidige adres Lees functie.

mov a, b; krijgen programmeerbaar adres
oproep read_current
JMP x47; afslag
X46:
oproep stoppen
x47:
pop b
retstart:

; Stuur START, gedefinieerd als hoog-op-laag SDA met SCL hoog.
; Terugkeren met SCL, SDA laag.
; Retourneren CY ingesteld als de bus is niet beschikbaar.

setb SDA
setb SCL

; Controleer de bus beschikbaar.

JNB SDA, x40; springen indien niet hoog
JNB SCL, x40; springen indien niet hoog

nop; handhaven setup uitstel en vertraging cyclus
clr SDA
nop; dwingen houden vertraging
nop;
nop;
nop;
nop;
clr SCL

clr c; duidelijke fout vlag
JMP X41
x40:
setb c; ingesteld fout vlag
X41:
rethalte:

; Stuur STOP, gedefinieerd als lage tot hoge SDA met SCL hoog.
; SCL verwachting laag bij binnenkomst.Rendement met SCL, SDA hoog.

clr SDA
nop; handhaven SCL laag en gegevens setup
nop
setb SCL
nop; handhaven setup vertraging
nop;
nop;
nop;
nop;
setb SDA
retshout:

; Shift een byte naar de AT24Cxx, meest significante bit eerste.
; SCL, SDA verwachting laag bij binnenkomst.Rendement met SCL laag.
; Called met gegevens te sturen in A.
; Retourneren CY ingesteld om aan te geven wegens slaaf te erkennen.
; Destroys A.

push-b
mov b, # 8; bit counter
X42:
RLC a; verplaatsen beetje in CY
mov SDA, c; output bits
nop; handhaven SCL laag en gegevens setup
setb SCL; verhogen klok
nop; handhaven SCL hoog
nop;
nop;
nop;
clr SCL; vervolgkeuzelijst klok
djnz b, X42; volgende bits

setb SDA; release SDA voor ACK
nop; handhaven SCL laag en TAA
nop;
setb SCL; verhogen ACK klok
nop; handhaven SCL hoog
nop;
nop;
nop;
mov c, SDA; krijgen ACK bit
clr SCL; vervolgkeuzelijst ACK klok

pop b
retscheenbeschermers:

; Shift in een byte van de AT24Cxx, meest significante bit eerste.
; SCL verwachting laag bij binnenkomst.Rendement met SCL laag.
; Retourneren ontvangen gegevens byte in A.

setb SDA; maken SDA een input

push-b
mov b, # 8; bits tellen
x43:
nop; handhaven SCL laag en gegevens setup
nop;
nop;
setb SCL; verhogen klok
nop; handhaven SCL hoog
nop;
mov c, SDA; input bit
RLC a; verplaatsen beetje in byte
clr SCL; vervolgkeuzelijst klok
djnz b, x43; volgende bits

pop b
retACK:

; Klok een erkennen bit (laag).
; SCL verwachting laag bij binnenkomst.Rendement met SCL, SDA laag.

clr SDA; ACK bit
nop; handhaven SCL laag en gegevens setup
nop;
setb SCL; verhogen klok
nop; handhaven SCL hoog
nop;
nop;
nop;
clr SCL; vervolgkeuzelijst klok
retNAK:

; Klok een negatieve erkennen bit (hoog).
; SCL verwachting laag bij binnenkomst.Rendement met SCL laag, SDA hoog.

setb SDA; NAK bits
nop; handhaven SCL laag en gegevens setup
nop;
setb SCL; verhogen klok
nop; handhaven SCL hoog
nop;
nop;
nop;
clr SCL; vervolgkeuzelijst klok
retEINDESorry, maar je moet inloggen om dit onderdeel te bekijken koppelingseisen

 

Welcome to EDABoard.com

Sponsor

Back
Top