Przykładowa procedura zapisu i odczytu pamięci EEPROM 24C16/24C32 w assemblerze 8051
EEPROM
From: "Adam Berezowski" <pro_at_nospam_kki.net.pl>
Subject: EEPROM
Date: Tue, 11 May 1999 19:23:59 +0200
podeslijcie mi procedure zapisu i odczytu pamieci 24c16 lub 24c32
w asemblerze na 8051
Adam
From: jareka_at_nospam_dawid.com.pl (Jaroslaw Andrzejewski)
Subject: Re: EEPROM - i2c_51.txt (0/1)
Date: Tue, 18 May 1999 02:08:13 GMT
Tue, 11 May 1999 19:23:59 +0200, "Adam Berezowski" <pro_at_nospam_kki.net.pl>
napisał(-a):
podeslijcie mi procedure zapisu i odczytu pamieci 24c16 lub 24c32
w asemblerze na 8051
Niestety nie pamiętam kto jest autorem, ale bardzo "zgrabne"
procedurki załączam, bo na pewno będą przydatne nie tylko dla Ciebie,
a długie nie są.
--
Jarek Andrzejewski
From: jareka_at_nospam_dawid.com.pl (Jaroslaw Andrzejewski)
Subject: Re: EEPROM - i2c_51.txt (0/1)
Date: Tue, 18 May 1999 16:38:50 GMT
Tue, 18 May 1999 02:08:13 GMT, jareka_at_nospam_dawid.com.pl (Jaroslaw
Andrzejewski) napisał(-a):
Tue, 11 May 1999 19:23:59 +0200, "Adam Berezowski" <pro_at_nospam_kki.net.pl>
napisał(-a):
podeslijcie mi procedure zapisu i odczytu pamieci 24c16 lub 24c32
w asemblerze na 8051
Niestety nie pamiętam kto jest autorem, ale bardzo "zgrabne"
procedurki załączam, bo na pewno będą przydatne nie tylko dla Ciebie,
a długie nie są.
Niestety załącznik się nie załączył. Włączam więc tekst do treści:
Listing 1--I2C EEPROM-uC-Interface Routine
DEVADDR equ 0a0h ; EPROM I2C device address
scl bit p3.4
sda bit p3.5
; register usage
; r0 buf_ptr ; pointer to internal RAM buffer for block
transfers
; r1 count ; byte count for block transfers
; r2 addr_lo ; 2-byte memory address (up to 11 bits used)
; r3 addr_hi
; r4 scratch ; used internally
write_block: ; write block from RAM to EEPROM
acall send_full_address
jc fin
wblop:
mov a, _at_nospam_r0
inc r0
acall shift_out
jc stop
djnz r1, wblop
sjmp stop
write_byte: ; write single byte from ACC to EEPROM
push acc
acall send_full_address
pop acc
jc fin
acall shift_out
sjmp stop
read_block: ; read block from EEPROM to RAM
; 342 + 102 * nbytes
acall send_full_address
jc fin
acall send_devaddr_rd
jnc rb1
ret
rblop:
mov a, #0ffh ; input data from SDA and send ACK
acall shift
setb SDA
mov _at_nospam_r0, a
inc r0
rb1: djnz r1, rblop ; 2 + 102 * nbytes
acall shift_in_nak
mov _at_nospam_r0, a
inc r0
sjmp end_read
read_random: ; read random byte from EEPROM to ACC
; 448 C
acall send_full_address
jc fin
read_current: ; read next byte from active EEPROM page to
ACC
; 224 C
acall send_devaddr_rd
jc fin
acall shift_in_nak
end_read: ; 10 C
clr c
stop: ; Send STOP
; 9 C
clr SDA
setb SCL
nop
nop
nop
nop
setb SDA ; 4.7us after SCL
; SCL & SDA high.
ret
send_full_address: ; 220 C
clr c
acall send_devaddr ; send device address
jc fin
; send byte address
mov a, r2
sjmp soasc
send_devaddr_rd: ; 112 C
setb c
send_devaddr: ; 111 C
; Send START
setb SCL
jnb SCL, bbsy ; Check if bus available
jnb SDA, bbsy
clr SDA ; min. 4.7 us after SCL high
mov a, r3
rlc a
orl a, #DEVADDR
clr SCL ; min. 4.0 us after SDA low
; SCL & SDA low.
; send device id, 3 msbits of address and rw bit (from c)
soasc: ; 101 C
acall shift_out
jc stop
fin:
ret
bbsy: ; bus not available
setb c
ret
; Shift out/in a byte from/to A, msb first and ACK bit from/to C.
; SCL low, SDA high on entry and exit.
shift_in_nak: ; 96 C
mov a, #0ffh ; all ones - input data from SDA
shift_out: ; 95 C
setb c ; 9th bit - output NAK/release SDA for ACK
shift: ; 94 C
mov r4, #9 ; 8 bits + ack
shlop:
; 3.5 us CLK low to data valid
rlc a ; move bit into C
mov SDA, c
setb SCL
nop
nop
mov c, SDA
clr SCL ; min. 4 us
djnz r4, shlop
ret ; ACK in C
end
--
Jarek Andrzejewski
From: "Kumex" <kumex_at_nospam_polbox.com>
Subject: Re: EEPROM - i2c_51.txt (0/1)
Date: Tue, 18 May 1999 08:54:13 +0200
Jaroslaw Andrzejewski napisał(a) w wiadomości:
<3746ebaf.2587360_at_nospam_10.100.100.4>...
|Niestety nie pamiętam kto jest autorem, ale bardzo "zgrabne"
|procedurki załączam, bo na pewno będą przydatne nie tylko dla Ciebie,
|a długie nie są.
A nie ma zadnych zalacznikow. Gdzies obcielo.
Wklej jako tekst w tresc listu, to nie zgina.
Kumex.
From: "Piotr Zysek" <zysiu_at_nospam_bydgoszcz.multinet.pl>
Subject: Re: EEPROM
Date: Sat, 15 May 1999 14:16:00 +0200
Ja tez bym poprosil...
****************************************
Piotr Zysek
tel.(0-52) 379-86-77
e-mail: zysiu_at_nospam_bydgoszcz.multinet.pl
****************************************
Adam Berezowski napisał(a) w wiadomości:
<9JZZ2.9851$I1.174310_at_nospam_news.tpnet.pl>...
podeslijcie mi procedure zapisu i odczytu pamieci 24c16 lub 24c32
w asemblerze na 8051
Adam
From: "Venas" <visor_at_nospam_softel.gda.pl>
Subject: Re: EEPROM
Date: Sun, 16 May 1999 01:41:05 +0200
OK. Wysyłam na prive'y. Życzę miłej zabawy.
Pozdrawiam
Venas
Adam Berezowski wrote in message <9JZZ2.9851$I1.174310_at_nospam_news.tpnet.pl>...
podeslijcie mi procedure zapisu i odczytu pamieci 24c16 lub 24c32
w asemblerze na 8051
Adam