89s8253 proggen

Gast #533753
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
Gast #533886
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
Gast #533889
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
#533895
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 ???
#539271
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
Gast #539902
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
#540676
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren