Tag an alle, möchte den 89s8253 von Atmel seriell über einen anderen Controller programmieren. Habe dafür ein Programm mit den Programmierroutinen aus dem Dateblatt geschrieben, doch es will einfach nicht funktionieren! Kann mir jemand helfen oder Tips oder Code geben? Vielen Dank schon mal im Voraus, MC
Auf welchem Controller läuft das ProggerProg ??? Kannst Du mal den Code posten ?
Das Progger-Programm läuft im Momment auf einem 89s8252. "p1.3" bildet das Reset-Signal des zu programmierenden µCs, "lcall spi" ist eine Routine zum Übertragen der Daten via SPI. Die Routine sieht so aus (Algorythmus aus Datenblatt übernommen):
1 | setb p1.3 ;Reset am Slave-Controller auf High setzen |
2 | |
3 | ;Freischalten des Programmiermodus |
4 | prog_init: mov a,#10101100b |
5 | lcall spi |
6 | mov a,#01010011b |
7 | lcall spi |
8 | mov a,#00000000b ;vervollständigen Befehl auf 4 Byte |
9 | lcall spi |
10 | mov a,#00000000b |
11 | lcall spi |
12 | |
13 | chip_erase: mov a,#10101100b |
14 | lcall spi |
15 | mov a,#10000000b |
16 | lcall spi |
17 | mov a,#00000000b |
18 | lcall spi |
19 | mov a,#00000000b |
20 | lcall spi |
21 | |
22 | ;übertragen der Daten aus speicher |
23 | mov dph,#00h ;Anfangsadresse für Codespeicher |
24 | mov dpl,#00h |
25 | prog_code: mov a,#00100000b ;Befehl: Code wird übertragen |
26 | lcall spi |
27 | mov a,dph |
28 | lcall spi |
29 | mov a,dpl |
30 | lcall spi |
31 | ; movx a,@dptr ;Code aus Speicher holen |
32 | mov a,#00000000b |
33 | lcall spi |
34 | inc dptr ;nächstes Codesegment auswählen |
35 | |
36 | mov a,dph ;Endadresse erreicht? |
37 | cjne a,#07h,prog_code |
38 | mov a,dpl |
39 | cjne a,#0FFh,prog_code |
40 | |
41 | ;Übertragung beenden |
42 | clr p1.3 |
Entschuldigt bitte, mir ist ein kleiner Fehler unterlaufen. Im Quellcode steht: ; movx a,@dptr ;Code aus Speicher holen mov a,#00000000b Die Zeilen stammen aus einem Versuch, ob ich den µC wenigstens auslesen kann. (Hat natürlich auch nicht geklappt) Eigentlich sollte da nur movx a,@dptr ;Code aus Speicher holen stehen. Danke für eure Hilfe, MC
MC wrote: > Entschuldigt bitte, mir ist ein kleiner Fehler unterlaufen. Im Quellcode > steht: > ; movx a,@dptr ;Code aus Speicher holen > mov a,#00000000b > Die Zeilen stammen aus einem Versuch, ob ich den µC wenigstens auslesen > kann. (Hat natürlich auch nicht geklappt) > Eigentlich sollte da nur > movx a,@dptr ;Code aus Speicher holen > stehen. > Danke für eure Hilfe, > MC Routine bitte als angehängtes Textfile posten, nicht im Thread. Und dann schon den kompletten Code. SPI Routine ???
Bitte entschuldigt, der komplette Quellcode befindet sich im Anhang. Die Datei ist vom CESY Assembler, sie kann im txt-Editor ganz normal gelesen werden. Danke für eure Hilfe, MC
Tag an alle, wollte nur kurz fragen ob mir überhaupt jemand weiterhelfen kann? Bis irgendwann, MC
Hallo MC, ich kenne mich zwar mit der 8051-Familie aus, auch speziell mit dem 89S8252, habe aber den 89S8253 "zu Fuß" programmiert. In wie weit hast Du den Fehler den schon versucht einzukreisen?. Kannst Du an der SPI die Daten auf ein Oszi legen, und schauen, ob die Bits richtig gesendet werden? Gruß, Markus_8051
Tag Markus 8051, habe mit nem Oszi die SPI-Übertragung überprüft. Sie ist beim Programmer-Controller einwandfrei. Habe daraufhin versucht, den zu programmierenden Controller auszulesen, worauf er aber nicht reagiert hat. Der Fehler muss entweder im Programm im Algrorythmus liegen oder die Programmierbefehle im Datenblatt sind falsch. Oder ich habe irgendwo im Programm einen Denkfehler. Übrigens ist der 89s8253 seinem Vorgänger (fast) gleich. Der einzigste Unterschied sind 4k mehr Programmspeicher. Bis irgendwann, MC
@Markus 8051, weißt du vielleicht, warum ich den 89s8253 nicht proggen kann? Wie hasst du den denn "zu Fuß" programmiert? Bis irgendwann, MC
glaube mich zu erinnern, daß sich der at89S8252 und at89S8253 gerade was die programmierung betrifft unterscheiden. hast du das berücksichtigt?
Fals ich keinen Fehler habe, sollte der Programmieralgorythmus aus dem Datenblatt des 89s8253 im Programm umgesetzt sein.
Sorry, habe schneller geschrieben als gedacht. Es muß natürlich heißen: "... habe aber den 89S8253 NIE "zu Fuß" programmiert." Bei Deinem Algorythmus ist mir aufgefallen: 1) Du hast die SPI mit dem Parameter LSB first initialisiert, der 89S8253 erwartet aber MSB first. (Zur besseren Übersicht kann man hier direkt die Bedeutung der Bits angeben, und nicht aufs Datenblatt verweisen) 2) nach Reset High sollten 64 Clks lang kein SPI-Takt anliegen. Diese Pause kann ich in deinem Programm nirgends umgesetzt finden. Gruß, Markus_8051
Tag Markus_8051, habe das Programm soweit abgeändert, trotzdem hat es nicht funktioniert. Woran kann das liegen? Bis irgendwann, MC
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.