Ja, ich habe mal an den Anfängen gerührt und einen alten (aber neuen) AT89S51 zum Leben erwecken versucht. Der Erfolg leider mäßig. Inzwischen ist die Experimentierschaltung soweit reduziert: - Spannungsversorgung - ISP – Connector - 8 x LED + Vorwiderstand (zu +5V) an Port 2.0 bis 2.7 - 8 x Pull-Up-Widerstand (10KOhm) an Port 0.0 bis 0.7 - 8 x Dil - Schalter gegen Masse ebenfalls an Port 0.0 bis 0.7 - und natürlich der Quarz (12 MHz) mit den beiden Kondensatoren - /EA liegt an „H“ (+5V) Versuche ich nun ein einfaches Programm zu laden und auszuführen, zB. eines, das ein Bitmuster an Port 2 ausgibt dann funktioniert das nur, wenn Port 0.6 (exklusiv)ODER Port 0.5 auf „L“ – Pegel gesetzt werden. Tue ich das nicht flackern die LEDs nach einem nicht zu ergründenden Muster recht schnell. Mini – „Programm“: org 00h ajmp 100h org 100h mov p0,#0FFH mov p1,#0FFH mov p2,#0FFH mov p3,#0FFH mov p2,#0FCH END Zum editieren (Assembler) verwende ich µVision2 und zum Übertragen die ISP – Software von Atmel + den zugehörigen Adapter (Parallelport). Ich vermute, dass ich beim Initialisieren der Ports einen Fehler mache, weiß aber nicht welchen. Vielleicht kann mir ein erfahrener User hier behilflich sein? LG und vielen Dank hempfer
Was macht dein Programm nach dem END? Lass ihn auf der Stelle treten -> Endlosschleife!
Vielen Dank an "nur mal so"! - Das hätte ich nicht gedacht! Tatsächlich war das die Ursache. Am Ende einen Sprung nach 100h eingebaut und es läuft so wie erwartet. Machen die Prozessoren, wenn man sie ohne weitere Aufgabe lässt, was sie wollen? Auf alle Fälle nochmals vielen Dank an den Gast! - Wieder habe ich was dazu gelernt Freundliche Grüße Ralph
> Machen die Prozessoren, wenn man sie ohne weitere Aufgabe lässt, was sie > wollen? Nein, sie machen das, was im Programmspeicher steht - kleiner aber feiner Unterschied... Ralf
Ralf schrieb: >> Machen die Prozessoren, wenn man sie ohne weitere Aufgabe lässt, was sie >> wollen? > Nein, sie machen das, was im Programmspeicher steht - kleiner aber > feiner Unterschied... > > Ralf Ja klar, nur stehen nach dem Ende des geladenen Mini - "Programm" bis zum Speicherende nur "FF"! Keinerlei Anweisungen irgendetwas auf dem Port 2 auszugeben. Ralph
> Ja klar, nur stehen nach dem Ende des geladenen Mini - "Programm" bis > zum Speicherende nur "FF"! > Keinerlei Anweisungen irgendetwas auf dem Port 2 auszugeben. Ja, bis zum Speicherende... und was kommt nach dem Ende? Richtig! Dein Programm geht wieder von vorne los ;) Wenn ein Befehl an der letzten Speicheradresse abgearbeitet wurde, zeigt der Programmcounter wieder auf den Anfang des Programmspeichers, also 0x0000. Ralf
> Wenn ein Befehl an der letzten Speicheradresse abgearbeitet wurde, > zeigt der Programmcounter wieder auf den Anfang des Programmspeichers > , also 0x0000. Sicher? Oder zeigt er auf einen Speicherbereich, der gar nicht existiert, so dass der Prozessor zufällige Befehle vorfindet?
0xFF = "MOV R7, A" Er macht also ~65000 mal "MOV R7, A" und dann läuft Dein Programm wieder von vorne los.
Ralf schrieb: >> Ja klar, nur stehen nach dem Ende des geladenen Mini - "Programm" bis >> zum Speicherende nur "FF"! >> Keinerlei Anweisungen irgendetwas auf dem Port 2 auszugeben. > Ja, bis zum Speicherende... und was kommt nach dem Ende? Richtig! Dein > Programm geht wieder von vorne los ;) > > Wenn ein Befehl an der letzten Speicheradresse abgearbeitet wurde, zeigt > der Programmcounter wieder auf den Anfang des Programmspeichers, also > 0x0000. > > Ralf Das würde ja bedeuten, dass ich mir den Sprung am Ende nach 100h auch sparen könnte. Der Effekt wäre dann der gleiche! Das kann die Ursache doch nicht sein!? Gruß Ralph
Stefan schrieb: > Sicher? Oder zeigt er auf einen Speicherbereich, der gar nicht > existiert, so dass der Prozessor zufällige Befehle vorfindet? Konkret beim AT89S51 greift er nach den internen 4kB auf den externen Bus zu (P0, P2). Ralph H. schrieb: > - 8 x Pull-Up-Widerstand (10KOhm) an Port 0.0 bis 0.7 Was dann auch als 0xFF dekodiert wird bis zur Adresse 0xFFFF. Beim AT89S2051 ist der Adreßpointer aber nur 11Bit groß, da kommt schon nach der Adresse 0x07FF die 0x0000.
Ralph schrieb: > Das würde ja bedeuten, dass ich mir den Sprung am Ende nach 100h auch > sparen könnte. Der Effekt wäre dann der gleiche! Nö, Du hast ein Delay von ~65000 Zyklen.
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.