mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Knight rider lauflicht


Autor: Heinz peter Posch (poschi8)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo alle zusammen,

ich habe mal eine Frage zu folgendem Code:
.INCLUDE "m32def.inc"
.def akku=R16

init:

  ldi akku, 0b11110111
  out PORTB, akku

links:
  cpi akku, 0b01111111
  breq rechts
  lsl akku
  inc akku
  out PORTB, akku
  rjmp links

rechts:
  cpi R16, 0b11111110
  breq links
  lsr akku
  ori akku, 0b10000000
  out PORTB, akku
  rjmp rechts

Was macht der Befehl, ori akku, 0b10000000, im Unterprogramm "rechts"???
Das Programm ist ein Lauflicht so wie bei Knight Rider, aber ich versteh 
diesen einen Befehl nicht ganz, also was der eben bewirkt.

Wäre toll wenn ihr mir helfen könntet, danke auf jeden Fall mal für eure 
Antworten!!! :)

Gruß,
Poschi

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Was macht der Befehl, ori akku, 0b10000000, im Unterprogramm "rechts"???

Setzt Bit7 auf 1.

Allerdings kann man

>lsr akku
> ori akku, 0b10000000

durch 'asr akku' ersetzen.


MfG Spess

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:

> Allerdings kann man
>
>>lsr akku
>> ori akku, 0b10000000
>
> durch 'asr akku' ersetzen.

Ich denke nicht, dass es dann noch funktioniert.
So wie 'links' geschrieben ist, ist akku gleich 0b01111111 wenn es das 
erste mal in 'rechts' hineingeht. Ein asr würde dann daraus 0b00111111 
machen.

daher muss man explizit das MSB setzen.

PS: Im Programm ist ein Fehler.
Du setzt die Pins nicht auf Ausgang!

init:

  ldi akku, 0b11110111
  out PORTB, akku



das muss
  out DDRB, akku
lauten und nicht PORTB

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann sein, dass mit dem Init-Teil die Ausgänge auf einen Anfangswert 
gesetzt werden sollen (aber Sinn macht es nicht). Das DDRB könnte 
ausserhalb des Code-Ausschnitts gesetzt werden.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Ich denke nicht, dass es dann noch funktioniert.

Stimmt. Also diesen Teil bitte ignorieren.

MfG Spess

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom schrieb:
> Kann sein, dass mit dem Init-Teil die Ausgänge auf einen Anfangswert
> gesetzt werden sollen (aber Sinn macht es nicht). Das DDRB könnte
> ausserhalb des Code-Ausschnitts gesetzt werden.

Möglich.
Auch möglich, dass es sich um die erste Anzeigestufe nach dem 
Einschalten handelt. Das 0b11110111 als Initialiwert könnte man so 
auffassen.

In dem Fall fehlt dann die Initialisierung des DDRB komplett. Ich glaube 
nämlich nicht daran, dass da noch etwas nicht gezeigt wurde :-)

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist auch egal, weil das so schnell durchlaufen würde, dass man eh nichts 
sieht.

Ich würd mal noch 2 Warteschleifen spendieren.

Autor: poschi8 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die vielen Antworte...
Und ja bei der Initialisierung habe ich mich vertan, das stimmt schon.
Aber mit ldi akku, 0b11110111 soll der Anfangswert defieniert werden.
Und die Geschwindikeit ist fürs erste auch kein Thema weil ich das nur 
für Schulische zwecke programmiert habe, also zum herzeigen das es geht, 
auf einen AVR werde ich das nicht wirklich rausschreiben.
Danke auf jeden Fall für alle eure Antworten :)

Gruß,
Poschi

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.