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
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
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
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
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