Forum: Mikrocontroller und Digitale Elektronik 89s8253 proggen


von MC (Gast)


Lesenswert?

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

von Felix M. (Gast)


Lesenswert?

Auf welchem Controller läuft das ProggerProg ???
Kannst Du mal den Code posten ?

von MC (Gast)


Lesenswert?

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

von MC (Gast)


Lesenswert?

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

von Dirk H. (arm-dran)


Lesenswert?

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

von MC (Gast)


Angehängte Dateien:

Lesenswert?

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

von MC (Gast)


Lesenswert?

Tag an alle,
wollte nur kurz fragen ob mir überhaupt jemand weiterhelfen kann?
Bis irgendwann,
MC

von Markus 8. (markus_8051)


Lesenswert?

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

von MC (Gast)


Lesenswert?

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

von MC (Gast)


Lesenswert?

@Markus 8051,
weißt du vielleicht, warum ich den 89s8253 nicht proggen kann?
Wie hasst du den denn "zu Fuß" programmiert?
Bis irgendwann,
MC

von michael (Gast)


Lesenswert?

glaube mich zu erinnern, daß sich der at89S8252 und at89S8253 gerade was 
die programmierung betrifft unterscheiden.
hast du das berücksichtigt?

von MC (Gast)


Lesenswert?

Fals ich keinen Fehler habe, sollte der Programmieralgorythmus aus dem 
Datenblatt des 89s8253 im Programm umgesetzt sein.

von Markus 8. (markus_8051)


Lesenswert?

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

von MC (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.