Forum: Mikrocontroller und Digitale Elektronik Diverse Probleme T89C51


von Alex (Gast)


Lesenswert?

Hallo zusammen,

Nachdem ich hier wirklich gut geholfen wurde meinen T89C51AC2 zu
programmieren habe ich jetzt noch diverse Probleme. Ich mache in
circuit programming  mit FLIP. Nachdem ich mit FLIP mein Programm in
den Controller geflasht habe u. einen Reset gemacht habe, läuft es
nicht selbstständig los (Natürlich PSEN vorher wieder auf High gelegt).
Wenn ich in diesem Zustand nochmal mit FLIP connecte bekomme ich keinen
Time Out Fehler. D.h. der Bootloader ist wieder gestartet worden. Dann
habe ich mir mal in den Datenblättern die Bedingungen für den
Bootloader Start angeguckt. Hardware Condition=> NEIN u. Bootloader
Jump Bit GESETZT. So sollte der meine Applikation bei einem Reset
ausführen. Macht er aber nicht...???

Hardware Condition JA => PSEN=0, EA=1
Hardware Condition NEIN => PSEN=1, EA=1

Wenn ich allerdings bei FLIP den "Start Application" Button drücke
läuft mein Proggie sofort los (PSEN=1). Kapiere ich irgendwie nicht...

So, 2. und noch viel wichtigeres Problem ist der EEPROM Lesezugriff.
Ich habe ein Programm geschrieben was aus einer Tabelle im EEPROM Daten
rausholen soll und mir im Display anzeigt. Die Daten habe ich vorher
mit FLIP schon im EEPROM abgelegt. Wenn diese nachher in meinem
Programm ausgelesen werden, bekomme ich da lauter Pfeile im Display
dargestellt (also schonmal kein FF). Zum Test ob das Display mir die
Daten richtig darstellt, habe ich mal einige Testwörter direkt im
Programmspeicher deklariert. Das funktioniert einwandfrei.
Also liegts zu 99% am EEPROM lesen. Da geht irgendwas schief.
So ungefähr sieht mein Unterprogramm aus.

clr EA          ; Alle Interrupts aus
mov EECON,#02h  ; EEPROM wird gemapped für Movx befehl
movx A,@DPTR    ; EEPROM Adressierte Speicherzelle in Akku lesen
mov DATEN,A     ; Akku in Daten sichern
mov EECON,#00h  ; unmap EEPROM
ret

Gibts da noch irgendeinen Trick ?

Wäre für ein bischen Unterstützung dankbar...
Gruß
Alex

von buz11 (Gast)


Lesenswert?

Eventuell so :

clr EA          ; Alle Interrupts aus
mov EECON,#02h  ; EEPROM wird gemapped für Movx befehl
mov A,@DPTR    ; EEPROM Adressierte Speicherzelle in Akku lesen
movx DATEN,A     ; Akku in Daten sichern
mov EECON,#00h  ; unmap EEPROM
ret

kleiner , aber feiner Unterschied ...

von buz11 (Gast)


Lesenswert?

Entschuldigung , hätte besser lesen sollen ...

Du willst ja lesen .

Hast Du den DPTR richtig geladen ?

von buz11 (Gast)


Lesenswert?

Fehlt irgendwo ' INC DPTR '  ?

von Alex (Gast)


Lesenswert?

Hi Buz11

Erstmal danke für die Antwort. Ich habe den DPTR mit $0000 geladen. Ich
hoffe das stimmt so. Weil ich beschreibe das EEPROM ja auch ab $0000.
Aber irgendwie will das noch nicht so richtig. Hab mir jetzt mal ein
Programm geschrieben was mir den EEPROM Inhalt durchscannen soll. Der
DPTR wird immer erhöht und die Daten an einem Port ausgegeben. Ich
bekomme immer den Datenwert E0 geliefert. Das kann ja irgendwie schon
nicht sein. 1. Habe ich in meiner Tabelle diesen Datenwert nicht, und
2. Wenn ich an einer falschen Stelle lesen würde müßte ich ja ständig
FF bekommen.
Also ist da irgenwas anderes faul. Ich verbringe jetzt schon Stunden
damit, aber finde den Fehler nicht...
Ich bin jetzt noch dabei mir den DPTR aufs Display ausgeben zu lassen
und die EEPROM Daten wieder auf dem Port (zum Test). Hab das Programm
aber noch nicht fertig.
Wenn jemand aber noch einen Tip hat, nur her damit...


Gruß
Alex

von Eugen Mailaender (Gast)


Lesenswert?

Hallo,

nach dem Schreiben des(der) Datenbytes musst du noch den Befehl zum
Programmieren dess Eeproms geben:
EECON = 0x50;
EECON = 0xA0;
vergiss nach nicht eventuell wieder die Interrupts freizugeben.

Hoffe, dass ich dir helfen konnte

Gruesse
Eugen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.