Liste der Anhänge anzeigen (Anzahl: 2)
mare_crisium,
bin ratlos...
FIFO8_V02.asm ist unveraendert die Version von Dir.
Bei LernPrgrm_FIFO_TEST_V02.asm habe ich doch nur die
.equ FIFO_FROM_SERIAL_CAP = 211 anstatt die 23 geschrieben.
Die anderen Aenderungen sind in einer V03 gemacht... :-k
Hier noch der Codeabschnitt....beim Aufruf von FIFO8_WRITE.
Ist FIFO_FROM_SERIAL_CAP <64 fuellt sich der RAM, bei >64 springt er zum Ende der Prozedur (FIFO8_WR_EXIT:).
Code:
; Hauptprogramm
;
; Jetzt füllen wir mal FIFO_FROM_SERIAL mit 1,2,3,4 ... bis sie voll ist
clr r16
ldi zl,low(FIFO_FROM_SERIAL)
ldi zh,high(FIFO_FROM_SERIAL)
RS_00:
inc r16
rcall FIFO8_WRITE
brts RS_00 ; wenn Schreiben erfolgreich, weiter schreiben
; so jetzt ist sie voll
Liste der Anhänge anzeigen (Anzahl: 2)
robo_wolf,
der Grund für das Problem besteht darin, dass der ATmega beim Vergleichen von "signed integer"-Werten ausgeht. Wenn Bit7 von FIFO_CAP gesetzt ist, stellt das für ihn eine negative Zahl dar. Wenn jetzt der Zähler auch 0x00 ist - die Kapazität ist auf alle Fälle kleiner. Deshalb führt er das Programm auf direktem Weg zum EXIT.
Die Lösung des Problems habe ich in _V03 eingebaut (nicht ohne Kommentar ;-) ). Ich hoffe, das Wochenende ist gerettet!
Ciao,
mare_crisium
Liste der Anhänge anzeigen (Anzahl: 2)
Guten Abend mare_crisium,
- weiter am FIFO -
habe in den Code nun noch die beiden Prozeduren FIFO8_FLUSH und FIFO8_GETCOUNT eingefuegt.
Leider weis ich nicht genau wo und wann sie aufzurufen sind.
FIFO8_GETCOUNT kann bei jedem MAIN-Durchlauf aufgerufen werden...
FIFO8_FLUSH setzt ein Fehlverhalten voraus. Dieses muss erst erkannt werden, bevor der FIFO resetet wird.
Kannst Du mir da noch ein paar Infos geben?