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
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 ...
Entschuldigung , hätte besser lesen sollen ... Du willst ja lesen . Hast Du den DPTR richtig geladen ?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.