eeprom bits are missing out

L

Lats

Guest
Hallo allerseits,
Ich
schreibe einige Werte aus 89c51 zu eeprom 24c02 aber die Bits fehlen werden.Ich habe die EEPROM-Routinen, ich auch ausprobiert, die Verzögerungen.Ich
habe mit SCL
und SDA Pins des EEPROM auf Port P1, versucht die Verbindung verschiedener Pull-up-Widerstände auch (10k, 4.7k, 2,2
k und sogar Null-Widerstand), aber coundln't um das Ergebnis, was kann das Problem bitte helfen Sie mir! aus.thnx

 
<img src="http://gallery.dpcdn.pl/imgc/News/56858/g_-_550x412_-_s_56858x20140802092910_0.jpg" alt="image" />Sentyment do retro-sprzętu jest w nas duży i tak się składa, że przez lata udało nam się zebrać całkiem niezłą kolekcję. Nasze zbiory zaprezentujemy w kilku odcinkach, a zaczynamy od Atari Portfolio.



16-bitowe Portfolio to urządzenie mobilne, które dzisiaj nazwalibyśmy Palmtopem lub PocketPC. Atari wypuściło sprzęt w 1989 roku i utrzymywało, że jest to pierwszy kieszonkowy PeCet, co jednak...<img src="http://feeds.feedburner.com/~r/dobreprogramy/Aktualnosci/~4/lKqNAgXv-E8" height="1" width="1"/>

Read more...
 
Ich schlage vor, zwei Dinge:
- Wenn Sie eine Chance haben, einen Dual-Channel-ocilloscope und versuchen Sie zu "sehen", was tatsächlich geschieht, SCK und SDA Linien, kann man beobachten, "fehlende Bits"?..
- Post-Code, ich bin ziemlich sicher, dass jemand so sehr wie Senf, ob es ..

Grüße,
IanP

 
thnx Ianp für die Beantwortung.Unten ist der Code.Ich habe viel Teil der IT-Anwendung aus einer Datei aus www.maxim-ic.com
Code:
; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxDELAYNS:

;

MOV DR7, # 00H

LOOPD:

INC DR7

MOV A, DR7

CJNE A, # 0FFh, LOOPD

RET

; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

DELAYRS:

MOV DR6, # 046H

MOV DR5, # 001H

LOOPC:

JB START_STOP_INT, RET_DELAY

JB MENU_INT, RET_DELAY

INC DR6

ACALL DELAYNS

MOV A, DR6

JNZ LOOPC

DEC DR5

MOV A, DR5

JNZ LOOPC

RET_DELAY:

RET

; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

READ_EEPROM:ACALL DELAYRSMOV R0, # 42H; schreiben von 42h Standort 89c51 RAM

MOV EE_ADDR, # 00H; schreiben zu 00h Standort EEPROM

MOV R3, # 02H; zu lesen, 2-Byte, dh von 42h bis 43h,BACK_READ:

ACALL EE_READ

MOV @ R0, EE_DATAINC R0

INC EE_ADDRDJNZ R3, BACK_READMOV R0, # 42H

MOV EE_ADDR, # 00H

MOV R3, # 02H

RET

; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

WRITE_EEPROM:

MOV R0, # 42H

MOV EE_ADDR, # 00H

MOV R3, # 02H
BACK_WRITE:

MOV EE_DATA, @ R0

ACALL EE_WRITEACALL DELAYNS

ACALL DELAYNS

ACALL DELAYNS

ACALL DELAYNS

ACALL DELAYNS

ACALL DELAYNS

ACALL DELAYNS

ACALL DELAYNS

ACALL DELAYNS

ACALL DELAYNS

ACALL DELAYNS

ACALL DELAYNS

ACALL DELAYNS

ACALL DELAYNSINC R0

INC EE_ADDRDJNZ R3, BACK_WRITEMOV R0, # 42H

MOV EE_ADDR, # 00H

MOV R3, # 02H

RET

; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxEE_WRITE: ACALL EE_START; SEND A FLAGGE AN DEN START EEPROM

MOV A, # 0A0H; Geben Sie einen EEPROM WRITE @ Adresse 0H

ACALL SHOUT; SHIFT OUT die Geräteadresse

JC WR_ABORT; ABORT IF NO ACK vom EEPROM

MOV A, EE_ADDR; GET EEPROM Speicheradresse

ACALL SHOUT; SHIFT OUT Die Speicheradresse

JC WR_ABORT; ABORT IF NO ACK vom EEPROM

MOV A, EE_DATA; die Daten geschrieben werden

ACALL SHOUT; SHIFT die Daten

JC WR_ABORT;

CLR C;

WR_ABORT:

ACALL EE_STOP; SEND STOP Bedingung EEPROM

; WAIT FOR WRITE ZEITPUNKT DER 24C02) (10ms

; NIMMT DIE EEPROM 10ms intern die Daten.
Sie können entweder

;, Die Ein Mikrocontroller im Wartezustand, oder setzen Sie mit der Ausführung,

; KEEPING der Tatsache, dass die EEPROM-Daten werden nicht gespeichert 10ms!RET; GO BACK TO MAIN PROGRAM

; LESEN SIE DIE EEPROM-Daten - zunächst "dummy write"

EE_READ:

MOV EE_DATA, # 00H; CLEAR Alte Daten

ACALL EE_START; SEND A START Flagge EEPROM

MOV A, # 0A0H; Geben Sie einen WRITE AN EEPROM @ Adresse 0H

ACALL SHOUT; PERFORM "dummy write"

JC RD_ABORT; ABORT IF NO ACK

MOV A, EE_ADDR; LOAD EEPROM Speicher

, Von dem aus READ

ACALL SHOUT; WRITE EEPROM Speicher

JC RD_ABORT; ABORT IF NO ACK

, Jetzt die Daten lesen!

ACALL EE_START; SEND A START FLAG

MOV A, # 0A1H; Geben Sie einen aus EEPROM

ACALL SHOUT; SHIFT OUT EEPROM ANSCHRIFT

JC RD_ABORT; ABORT IF NO ACK

ACALL SHIN; Verschiebung der Daten aus EEPROM

MOV EE_DATA, A; Speicherung der Daten

ACALL NAK; SEND A NAK (NO BESTÄTIGEN) AUF DIE

; EEPROM

CLR C; CLEAR FehlerkennzeichenRD_ABORT:

ACALL EE_STOP; alles geschieht

RET;

; EE_START BIT-Bangs ein START-Sequenz für das EEPROM (HI-TO-LOW SDA TRANSITION

; Mit SCL HIGH).

EE_START:

Setb SDA

Setb SCL; beide BITS

NOP; DELAY

CLR SDA; Startbedingung; SDA HI LOW TRANSITION

NOP

NOP; EEPROM ACCESS TIME DELAY

CLR SCL

CLR C; CLEAR Fehlerkennzeichen

RET; alles geschieht

; EE_STOP Sendet eine STOP Reihenfolge an den EEPROM (von niedrig nach hoch SDA TRANSITION

; Mit SCL HIGH).

EE_STOP:

CLR SDA

NOP

NOP

Setb SCL

NOP

NOP; SETUP TIME DELAY

Setb SDA; SEND A STOP CONDITION

RET

; SHOUT Verschiebungen DATA auf den EEPROM

SHOUT:

PUSH B

MOV B, # 8; B SAVE und LOAD BIT COUNTEEOUT:

RLC A; SHIFT BIT LEFT (RLC = ROTATE links durch

, Carry)

MOV SDA, C; GET DATA BIT AUS CARRY

NOP

Setb SCL; UHR IN 1-BIT

NOP; CLOCK HIGH TIME

CLR SCL; Uhr ist jetzt niedrig

DJNZ B, EEOUT; DO IT 8 TIMES

Setb SDA, SDA RELEASE FÜR ACK

NOP

NOP

Setb SCL; ACK CLOCK

NOP

MOV C, SDA; SIE DIE ACK

CLR SCL; löschen Sie die CLOCK-BIT

POP B; RESTORE UNABHÄNGIG B

RET

; SHIN SHIFT DATEN IN DER EEPROM

SHIN:

Setb SDA, SDA MAKE AN INPUT

PUSH B

MOV B, # 8; SAVE-B-und SET-Bit-ZählerEEIN:

NOP

Setb SCL; Uhr

NOP

NOP; EEPROM ACCESS TIME

Setb SDA; SET = 1 so als Input

MOV C, SDA; LESEN 1-BIT

RLC A; BIT SHIFT LEFT

CLR SCL; CLEAR CLOCK BIT

DJNZ B, EEIN; GET NEXT BIT, wenn weniger als 8 Bit LESEN

POP B

RET

; ACK sendet ein EEPROM ACKNOWLDEGEACK:

CLR SDA

NOP

NOP

Setb SCL; Uhr Die ACK

NOP

CLR   SCL         ; BRING CLOCK LOW
RETNAK:; NAK sendet eine NO BESTÄTIGEN

Setb SDA

NOP

NOP

SETB   SCL         ; CLOCK THE NAK
NOP

CLR SCL; BRING CLOCK LOW

RET

; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 

Welcome to EDABoard.com

Sponsor

Back
Top