Forum: Mikrocontroller und Digitale Elektronik AT90S1200


von Niklas Bernhard (Gast)


Lesenswert?

Hallo

Habe die folgende Zeilen in den AT90S1200 geladen.
Haut leider nicht hin.
Led funktionieren mit einem Blinkprogramm.
Die Schalter haben 10 K Pullup Widerstände drin.
Danke für eure Hilfe



         ldi r16, 0xFF
         out 0x17, r16
         ldi r16, 0x00
         out 0x11, r16
loop:
         in r16, 0x10
         out 0x18, r16
         rjmp

von Peter (Gast)


Lesenswert?

HAllo,
Wenn ich das richtig sehe fehlt dort die includedatei und bei rjmp wohin 
er springen sollen! Ausserdem wird die leuchtdiode dauerleuchten da du 
es nicht verfolgen kannst! So ein Prozessor hat 8 Mhz das heißt minimum 
4mio befehle die Sekunde.
Peter

von Niklas Bernhard (Gast)


Lesenswert?

Hallo

Oh.

Sorry. Habe beim Komentare weglöschen das Wort loop mit weggelöscht. Ich 
habe gedacht, das ich die includedatei nur
brauche, wenn ich nicht mit direkten Speicheradressen arbeite
sondern mit Namen wie z.B. DDRB usw.
Das Blinkprogramm hat so hingehaut.
Und das mit dem Blinken verstehe ich überhaupt nicht.
Ich lese doch sehr schnell den Zustand der Schalter ein.
Und schreibe sehr schnell den Zustand wieder raus.
Ob ein oder aus.
Aber bei mir bleibt sie immer dunkel.

Danke

Bernhard

von Peter Zimmer (Gast)


Lesenswert?

Probiere es doch lieber mal mit! Wird dich doch nicht umbringen!
Peter

von Dieter Brüggemann (Gast)


Lesenswert?

Hallo Niklas
Dein Prgramm sieht so aus.

         ldi r16, 0xFF
         out 0x17, r16
         ldi r16, 0x00
         out 0x11, r16
loop:
         in r16, 0x10
         out 0x18, r16          Hier liegt der Fehler PORT B
         rjmp

 Hier meine Änderungen

         ldi r16, 0xFF            Port B als Eingang
         out 0x17, r16
         ldi r16, 0x00            Port D als Ausgang
         out 0x11, r16
loop:
         in r16, 0x16            Port B einlesen
         out 0x12, r16           Ausgabe auf Port D
         rjmp loop

Sieht aber schön sowas im Simulator

Hoffe es stimmt so.

MFG

Dieter

von Martin (Gast)


Lesenswert?

Hi Niklas,

Hmmm, abgesehen von dem fehlendem loop und der direkten 
Registeraddressangabe, schaut dein Code wie im AVR-Tutorial aus 
(http://www.mikrocontroller.net/tutorial/io-basics.htm).
Hab dein Code mit dem Simulator getestet (nur noch das loop eingefügt) 
und es geht. Vieleicht noch mal die externen Beschaltung überprüfen. 
Vorallem die Schalter Beschaltung an Port D.

@Dieter: Leider war deine Hoffnung falsch.
         ldi r16, 0xFF Port B als Eingang
         out 0x17, r16
0xFF macht ein Port zum Ausgang
         ldi r16, 0x00 Port D als Ausgang
         out 0x11, r16
und 0x00 einen Port zum Eingang.
Damit stimmt dann auch das einlesen und ausgeben auch nicht.
Wenn es bei dir im Simulator geht würde ich micht wundern?


Gruss Martin

von Dieter Brüggemann (Gast)


Lesenswert?

Hallo Markus

Natürlich hast Du Recht. Nach ein paar Bit's für den Körper sieht man 
den Wald vor lauter Bäumen nicht mehr.

Hier also die Lösung ??


         ldi r16, 0x00 ;Port B als Eingang
         out 0x17, r16
         ldi r16, 0xFF ;Port D als Ausgang
         out 0x11, r16
loop:
         in r16, 0x16 ;Port B einlesen
         out 0x12, r16 ;Ausgabe auf Port D
         rjmp loop

MFG
Dieter

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.