AT89S52 a nejaka externi EEPROM ???
Moderátor: Moderátoři
AT89S52 a nejaka externi EEPROM ???
Zdravim. Kazdy jednou zacina a ja se nyni seznamuji s mikroprocesory a to konkretne na AT89S52. Chytlo me to, ale zacina mi chybet nejaka EEPROM pro ukladani dat. Hledal jsem na netu neco srozumitelneho pro zacatecnika, ale marne. Nemate nekdo nejakou radu, doporuceni, odkaz, nebo cokoliv pro srozumitelne a jednoduche uvedeni do teto problematiky ja rozchodit jednoduche propojeni nejake seriove EEPROM (napr. 24Cxxx s procesorem AT89S52)? Budu moc rad! Diky
to by jsi byl moc hodny. Kdyz tak to posli na alvr@seznam.cz. ja se na to kouknu a nad z toho budu chytrejsi:-) A bude to chodit s tim procesorem AT89S52? Predem diky!
- ZdenekHQ
- Administrátor
- Příspěvky: 25593
- Registrován: 21 črc 2006, 02:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
Pošlu to sem, ale je to odladěný,upravený a tudíž poněkud méně přehledný než "syrovej" kód. Chodí na všech 89C5x, 89S5x či 89C2051 atd.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
pozri si toto http://hw.cz/Teorie-a-praxe/Programovan ... o-x51.html
obsahuje popis rutin pre komunikaciu mcu x51 s pamatou 24Cxx
obsahuje popis rutin pre komunikaciu mcu x51 s pamatou 24Cxx
- ZdenekHQ
- Administrátor
- Příspěvky: 25593
- Registrován: 21 črc 2006, 02:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
Mám to v druhý mašině.alvr píše:kdy to tady das?
Řešení je hromada, jenom každej programátor má svůj styl a občas jeden druhýho nechápe
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
- ZdenekHQ
- Administrátor
- Příspěvky: 25593
- Registrován: 21 črc 2006, 02:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
Tady jsem našel jednu zálohu:
Kód: Vybrat vše
;=====================================================================
;
; Cteni probiha od adresy E_adresa porad dopredu
; Zapis je jen v ramci poslednich 3 bitu stranky
Zapis_8b:
;********
mov E_wradr,a ;kam to patri do EEPROM
mov E_wram,#Buf_eepr ;pozice bufferu
clr w1_byte
call E_write ;zapise jen 8 byte
ret
Nacti_8b: ; v aku je odkud
;*********
mov E_adresa,a ;adresa v eeprom
mov E_pkrok,#8d
mov E_ram,#Buf_eepr ;kam nacist
clr w1_byte
call E_read
ret
;************************************
;******** EEPROM *********
;************************************
; NOVA ZKRACENA PROCEDURA
; =======================
;
;*********************
;*** INIT I2C
;*********************
Clear_i2c:
clr scl
clr Stav
nop
nop
setb sda
mov r1,#32d ;max pocet chyb init eeprom
mov r0,#9
Cl_1:
nop
nop
setb scl
nop
nop
mov c,sda
jc Cl_2
mov r0,#9 ;prisel nulovy bit,musim znovu
;KONTROLA CHYB
;=============
dec r1
mov a,r1
jnz Cl_2
setb Stav
ret ;chyba init eeprom
Cl_2:
nop
nop
clr scl
nop
nop
djnz r0,Cl_1
nop
nop
;sda = 1 = vstupni
;scl = 0 = ready
call Start_bit
ret
E_read:
;******
clr Wr_och
call E_rea2
ret
E_write:
;*******
clr Wr_och
call E_wri2
ret
;======*************************==================
;======PODPROGRAMY - START + STOP + ACK ...=======
;======*************************==================
Start_bit:
;*********
setb sda ;toto se predpoklada
nop
nop
setb scl
nop
nop
nop
clr sda
nop
nop
nop
clr scl
nop
nop
setb sda
;KONECNY STAV
;============
;clr = 0
;sda = 1
ret
Sd_DWA:
;********
mov r0,#8 ;8 cyklu
Sen_1:
rlc a
mov sda,c
nop
nop
setb scl
nop
nop
nop
clr scl
nop
djnz r0,Sen_1
setb sda
ret
Test_ack:
;*******
setb sda ;ACK
nop
nop
setb scl
nop
nop
mov c,sda
nop
nop
clr scl
nop
nop
mov Stav,c
ret
Posli_ack:
;*********
clr sda ;ACK
nop
nop
setb scl
nop
nop
nop
clr scl
nop
nop
setb sda
nop
ret
Stop_bit:
;********
nop
clr sda ;STOP bit
nop
nop
setb scl
nop
nop
nop
setb sda
nop
nop
clr scl
nop
nop
setb sda
nop
nop
ret
;******************************************
;*** CTENI EEPROM ***
;******************************************
E_rea2:
;posle start + device adress
;Stav ... 0 = OK , 1= ERROR
clr scl
nop
nop
setb sda
clr Stav
;*********
;START BIT
call Start_bit ;1
;***********************
;DEVICE ADRESS
mov a,#10100000b ;1010+adresa+R/W bit
; 0 = dummy write
call Sd_DWA ;2 device adr
call Test_ack ;3 test ACK
jnb Stav,Sen_1aa
ret ;neprislo ACK
Sen_1aa:
setb sda ;jako vstupni
;*********************
;WORD ADRESS
mov a,E_adresa
mov r0,#8
call Sd_DWA ;4
call Test_ack ;5
;***********************************
;TED ZNOVU START BIT + DEVICE ADRESS
call Start_bit ;6
mov a,#10100001b ;1010+adresa+R/W bit
mov r0,#8 ;8 cyklu
call Sd_DWA ;7
call Test_ack ;8
jnb Stav,Sen_1bb
ret ;neprislo ACK
Sen_1bb:
;****************
;****** cteni dat
;****************
mov r2,E_pkrok ;pocet kroku
mov r1,E_ram ;kam nacist
jnb w1_byte,Sr_1st ;neni to jen 1 byte jako adr apod. ?
mov r2,#1
mov r0,#8 ;1 krok, 1 byte
;adresa MUSI byt zadana !!!!
Sr_1st:
mov r0,#8
Sr_1:
setb scl
nop
nop
mov c,sda
rlc a ;ulozim do aku,LSB se posila jako posl.
clr scl
nop
nop
djnz r0,Sr_1
nop
nop
mov b,a
;***********************************************
;OCHRANA PAMETI ZASOBNIKU, JEN PRO TUTO APLIKACI
mov a,r1
clr c
cjne a,#ZASOBNIK,Och_1
Och_1:
jc Och_OK
setb Wr_och
setb Stav
ret
Och_OK:
mov a,b
mov @r1,a ;ted to ulozim na adresu r1
inc r1
nop
nop
djnz r2,Sr_3
jmp Sr_10
Sr_3:
call Posli_ack
jmp Sr_1st
Sr_10: ;NO ACK + STOP
setb sda
nop
nop
setb scl
nop
nop
nop
clr scl
nop
nop
setb sda
call Stop_bit ;9
clr Stav ;proslo to....
clr w1_byte
ret
;******************************************
;*** ZAPIS DO EEPROM ***
;******************************************
E_wri2:
;Stav ... 0 = OK , 1= ERROR (no ACK)
clr scl
nop
nop ;pro jistotu
setb sda
clr Stav
call Start_bit ;11
mov a,#10100000b ;1010+adresa+R/W bit
mov r0,#8 ;8 cyklu
call Sd_DWA ;12
call Test_ack ;13
jnb Stav,Wer_1a
ret ;konec zapisu,chyba !!!
Wer_1a:
;*********************
;WORD ADRESS
mov r0,#8
mov a,E_wradr ;adresa pro 24C02 ma 8 bitu
call Sd_DWA ;14
call Test_ack ;15
jnb Stav,Wen_y
ret ;neprislo ACK
Wen_y:
mov r1,E_wram
mov r2,#8 ;8 bytu na stranku
jnb w1_byte,Wer_5
mov r2,#1 ;jen 1 byte
Wer_5:
mov r0,#8
mov a,@r1
Wer_1: ;TOTO JE ZAPIS VEN !!!
rlc a ;NEPLEST S CTENIM !!!!
mov sda,c
nop
nop
setb scl ;VEN
nop
nop
nop
clr scl
nop
djnz r0,Wer_1
nop
nop
;------------------
;zapsal jsem 8 bitu
;------------------
call Test_ack ;16 ack
jnb Stav,Wer_2
setb Stav ;neodpovedel ACK
ret ;konec zapisu,chyba !!!
Wer_2:
nop
nop
inc r1
djnz r2,Wer_5
Wer_10:
;STOP
;*****
call Stop_bit ;17
clr w1_byte
call Wait_10ms
call Wait_10ms
ret
;=================================
;===== KONEC AKCE EEPROM =======
;=================================
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
- ZdenekHQ
- Administrátor
- Příspěvky: 25593
- Registrován: 21 črc 2006, 02:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
Obecně:
Stav - bit, 0=OK, 1= nějaká chyba při zápisu/čtení
w1_byte - bit, 0= čte/zapisuje celou stránku, 1= čte jen 1 byte
Zápis:
E_wram - adresa bufferu EEPROM v RAM paměti ATMEL
E_wradr - adresa v paměti EEPROM
Čtení:
E_adresa - adresa v EEPROM
E_pkrok - kolik bytů číst
E_ram - na jakou pozici v RAM Atmelu
Procedury:
Zapis_8b - zápis stránky EEPROM
Nacti_8b - čtení stránky EEPROM
Clear_i2c - inicializace EEPROM / I2C
nebo přímo
E_read
E_write
Potřebné podprogramy:
Wait_10ms - čekací smyčka 10ms
Pokud zapisuješ celou stránku, musí být poslední 3 bity v adrese nula (adresa dělitelná osmi).
Stav - bit, 0=OK, 1= nějaká chyba při zápisu/čtení
w1_byte - bit, 0= čte/zapisuje celou stránku, 1= čte jen 1 byte
Zápis:
E_wram - adresa bufferu EEPROM v RAM paměti ATMEL
E_wradr - adresa v paměti EEPROM
Čtení:
E_adresa - adresa v EEPROM
E_pkrok - kolik bytů číst
E_ram - na jakou pozici v RAM Atmelu
Procedury:
Zapis_8b - zápis stránky EEPROM
Nacti_8b - čtení stránky EEPROM
Clear_i2c - inicializace EEPROM / I2C
nebo přímo
E_read
E_write
Potřebné podprogramy:
Wait_10ms - čekací smyčka 10ms
Pokud zapisuješ celou stránku, musí být poslední 3 bity v adrese nula (adresa dělitelná osmi).
Naposledy upravil(a) ZdenekHQ dne 22 kvě 2008, 21:26, celkem upraveno 2 x.
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
- ZdenekHQ
- Administrátor
- Příspěvky: 25593
- Registrován: 21 črc 2006, 02:00
- Bydliště: skoro Brno
- Kontaktovat uživatele:
Ale každopádně pošlu originál pro 24C16, teď nevím, jestli to není jen pro 24C02 (ovšem to je jedno, jen to nenaadresuje celou paměť).
Pro moje oslovení klidně použijte jméno Zdeněk
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]
Správně navržené zapojení je jako recept na dobré jídlo.
Můžete vynechat půlku ingrediencí, nebo přidat jiné,
ale jste si jistí, že vám to bude chutnat[?]