mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Lauflicht


Autor: Marcus Bertrand (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich mache gerade meine ersten Gehversuche mit dem Atmega8 und wollte
mit assembler ein Lauflicht realisieren (wie knight rider). Ich habe
den Befehl LSL verwendet. Bin richtig der Annahme das wenn ich den Wert
1 in ein register lade und einmal links shifte, dass ich dann den Wert 2
in diesem Register habe (dann 4,8,16...)?

Gruß Marcus

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, stimmt ! Aber du mußt immer auch das Carry-Flag beachten, daß wird
nämlich bei LSL mitgeschoben.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, ich habe Schrott geschrieben. Das Carry wird nut bei ROL
mitgeschoben, bei LSL wandert lediglich Bit 7 ins Carry.

Autor: Marcus Bertrand (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die Antwort,
ich habe aber jetzt ein anderes Problem. Die LED's leuchten jetzt
schön der Reihe nach auf aber nicht so wie ich es wollte. Ich wollte
das jeweils immer nur eins an ist, aber jetzt bleiben die an die
angesprochen wurden. Hier unten mal mein Programm, vielleicht stell ich
mir das Bitweise verschieben auch falsch vor. Kann mir jemand sagen was
mein Fehler ist?

.include "m8def.inc"       ;Definitionsdatei einbinden, ggf. durch
                             ;2333def.inc ersetzen

         ldi r16, 0xFF       ;0xFF ins Arbeitsregister r16 laden
         out DDRB, r16       ;Inhalt von r16 ins IO-Register DDRB
ausgeben

         ldi r17, 0b11111110 ;0b11111110 in r16 laden
anfang:
  out PORTB, r17      ;r16 ins IO-Register PORTB ausgeben
  lsl r17      ;bitweise linksschieben
  ldi r18, 0xFa    ;lade wert 250 nach zählreg. 18
  ldi r19, 0xFa    ;""
  ldi r20, 0x02    ; wert 2 nach zählreg. 20
loop:
  nop
  nop
  Nop
  nop
  nop
  nop
  dec r18
  cpi r18, 0
  brne loop
  dec r19
  cpi r19, 0
  brne loop
  dec r20
  cpi r20, 0
  brne loop
  rjmp anfang

Autor: AxelR. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist doch richtig.
Durchs Linksschieben rutschen Dir ja von "Rechts" die Nullen nach.
Deine LED's leuchten nur, wenn der Ausgang LOW-Aktiv ist?
scheint so.
Wenn Du nicht das Carry-Bit mit einbeziehen willst (da laufen die
Einsen hin), verwende in dem Fall ROL oder invertiere vor der
Portausgabe dein Ergebnis und lade am Anfang R17 mit 0b00000001. Dann
laufen Sie nun wenigstens 1x durch.
AR.

Autor: condor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Machs doch so !

         ldi r17, 1 ;0b11111110 in r16 laden
anfang:
  mov r21,r17
  com r21
  out PORTB, r21      ;r16 ins IO-Register PORTB ausgeben
  lsl r17      ;bitweise linksschieben
  ldi r18, 0xFa    ;lade wert 250 nach zählreg. 18
  ldi r19, 0xFa    ;""
  ldi r20, 0x02    ; wert 2 nach zählreg. 20
loop:
  nop
  nop
  Nop
  nop
  nop
  nop
  dec r18
  cpi r18, 0  ; kanst du weglassen
  brne loop
  dec r19
  cpi r19, 0   ; kanst du weglassen
  brne loop
  dec r20
  cpi r20, 0  ; kanst du weglassen
  brne loop
  rjmp anfang

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So müßte es gehen:

.nolist
.include "m8def.inc"
.list

.equ    xtal = 4000000          ;4MHz
.equ    wait = xtal / 6         ;1s

init:   ldi     r16, 0xFF
        out     ddrb, r16

main:   cpi     r16, 0b11111110
        ror     r16
        out     portb, r16

        ldi     r28, byte1(wait)
        ldi     r29, byte2(wait)
        ldi     r30, byte3(wait)
        ldi     r31, byte4(wait)
delay:  sbiw    r29:r28, 1
        sbci    r30, 0
        sbci    r31, 0
        brcc    delay

        rjmp    main


Peter

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.