www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik vielleicht mal ne blöde (frage warum funktioniert das ?? )


Autor: hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok ok ich bin ein newbie mit asm und avr :)
aber hab mal viel mit dem 368er gemacht ...
hab da nen source zusammen gestückelt...



;------------------------------------------------
; Timer 0
;------------------------------------------------

.include "4433def.inc"
.def temp = r16
.def counter = r17
.def leds = r18
.equ start = 256 - 244
.equ loops = 10;

rjmp reset           ; Reset Handler
reti                           ; IRQ0 Handler
reti                                 ; IRQ1 Handler
reti                 ; Timer1 Capture Handler
reti                 ; Timer1 compare Handler
reti                 ; Timer1 Overflow Handler
rjmp timer0          ; Timer0 Overflow Handler
reti                 ; SPI Transfer Complete Handler
reti                 ; UART RX Complete Handler : RXCIE
reti                 ; UDR Empty Handler
reti                 ; UART TX Complete Handler
reti                 ; ADC Conversion Complete Interrupt Handler
reti                 ; EEPROM Ready Handler
reti                 ; Analog Comparator Handler

reset:
    ldi temp, RAMEND
    out SP, temp    ; set stack pointer

    ldi temp, 0xFF
    out DDRB, temp ; PORTB configured for output
    ldi temp, 0xFF
    out PORTB, leds ; LEDs ausschalten

    ldi temp, 1<<TOIE0  ; 0000 0010
    out TIMSK, temp  ; timer 0 interrupt ein
    ldi temp, start
    out TCNT0, temp ; Startwert des Timers
    ldi temp, 0b00000101
    out TCCR0, temp  ; ; Timer starten mit Vorteiler 1024

    ldi counter, loops
    ldi leds, 0xFF

    sei ; interrupts generell aktivieren

main:
    loop:
        rjmp loop


;--------------------------------------------------
timer0:
    dec counter
    brne restart
        ldi counter, loops
        rol leds
        out PORTB, leds
    restart:
        ldi temp, start
        out TCNT0, temp ; Timer fängt wieder von vorn an
reti

und jetzt meine fragen ....
in der zeile:
    ldi temp, 0xFF
    out PORTB, leds ; LEDs ausschalten
werden da nicht alle leds eingeschalten ??
wegen dem komentar das stammt nicht von mir ...

und dann wenn timer0 aufegrufen wird
und "rol leds" ... sollte dann nicht lauter 1er
gerollt werden ?? aber es macht genau das was ich
eigentlich wollte es wird 1 led aus geschaltet und wandert dann im 
"kreis" nur weiß ich nicht warum
kann mir das jemand erklären ??

Autor: mng (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn die LEDs zwischen +Ub und dem Controller hängen werden sie 
ausgeschaltet wenn die Portpins auf HIGH gehn, das stimmt schon. An 
beiden Seiten 5V = kein Strom :-D Und was das andere angeht: rol rotiert 
nicht nur die Bits im Register sondern zusätzlich das Carry, und wenn im 
Carry ne 0 war dann haste Deine 0 zwischen den ganzen 1sen.

mng

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.