Knight rider lauflicht

OP #1887256
Lesenswert?

Hallo alle zusammen,

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

4
init:
5

6
  ldi akku, 0b11110111
7
  out PORTB, akku
8

9
links:
10
  cpi akku, 0b01111111
11
  breq rechts
12
  lsl akku
13
  inc akku
14
  out PORTB, akku
15
  rjmp links
16

17
rechts:
18
  cpi R16, 0b11111110
19
  breq links
20
  lsr akku
21
  ori akku, 0b10000000
22
  out PORTB, akku
23
  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
#1887299
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
#1887325
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 :-)
Gast #1887602
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

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