Lauflicht mit ROL AVR Assembler

OP #2030133
Lesenswert?

Hallo,

ich bin noch blutiger Anfänger was µC angeht. ;)

Ich habe hier einen ATtiny2313 auf dem Pollin Board.
Über die 40polige Leiste habe ich 8 LEDs am Port B des tiny 
angeshlossen.
Das funktioniert auch wunderbar.

Jetzt wollte ich ein Lauflicht mittels Bitrotation (ROL) programmieren.
Auch das funktioniert. Aber zwichen LED 7 aus und LED 0 an ist halt eine 
längere Pause. Da ja noch das Carry Bit "durchlaufen" wird.

Gibt es da einen Assembler Befehl zum Bitrotieren der das Carry Bit 
nicht berücksichtigt. Also direkt Bit 7 in bit 0 schiebt?

hier mal mein kleines Programm:
1
include "tn2313def.inc"
2

3

4
        ldi r16,0xFF
5
        out DDRB,r16    ;PORTB Ausgang
6

7

8
        ldi r19,0x01
9
main:
10
        out PORTB,r19    ;r19 auf PORTB ausgeben
11
        rcall longdelay  ;Pause
12
        rol r19          ;Bits in r19 links rotieren
13
        rjmp main
14

15

16
longdelay:
17
        clr r16
18
        clr r17
19
        ldi r18,0x03
20
delay:
21
        dec r16
22
        brne delay
23
        dec r17
24
        brne delay
25
        dec r18
26
        brne delay
27
        ret
OP #2030149
Lesenswert?

hm, wenn ich die Doku zu LSL richtig verstehe,würde das mit dem Programm 
wie es jetzt ist ja nur einmal dürchlaufen, oder?

Man müsste dann noch das C Flag des SREG (weiss noch nicht was das ist 
;) )
auf 1 testen und wenn es 1 ist r19 wieder mit 0x01 laden.

Würde das gehen so gehen?

        ldi r19,0x01
main:
        out PORTB,r19
        rcall longdelay
        lsl r19
        WENN SREG C-Flag 1 DANN
        ldi r19,0x01
        rjmp main
OP #2030181
Lesenswert?

also ich habs jetzt so gemacht
1
start:
2
        ldi r19,0x01
3
main:
4
        out PORTB,r19
5
        rcall longdelay
6
        lsl r19
7
        brcs start
8
        rjmp main

Es kommt mir zwar so vor als ob umschalten von LED7 auf LED0 etwas 
länger dauert. Aber das sind doch nur 2 Befehele (der Sprung nach start 
und das laden von r19) mehr. Das dürfete man doch eigentlich nicht 
merken oder?
OP #2030243
Lesenswert?

glaub nich ;)
War wohl Einbildung...

Habs nun ein Lauflicht mit vor und zurück hinbekommen.
Macht irgendwie Spaß damit rumzuspielen. Vielleicht hab ich ja ein Hobby 
gefunden. Mal schauen..

wen es interessiert hier mal das fertige Lauflicht Programm
1
include "tn2313def.inc"
2

3
        ldi r16,0xFF    ;r16 mit 255 laden
4
        out DDRB,r16    ;alle pins von PORTB Ausgang
5

6
        ldi r19,0x01    ;r19 mit 1 laden
7
forwards:
8
        out PORTB,r19           ;r19 auf PORTB ausgeben
9
        rcall longdelay         ;Pause
10
        lsl r19                 ;r19 ein Bit nach links schieben
11
        cpi r19,0b10000000      ;LED7 an?
12
        brne forwards           ;falls nicht weiter
13

14
backwards:
15
        out PORTB,r19           ;r19 auf PORTB ausgeben
16
        rcall longdelay         ;Pause
17
        lsr r19                 ;r19 ein Bit nach rechts schieben
18
        cpi r19,0b00000001      ;LED0 an?
19
        brne backwards          ;falls nicht weiter
20
        rjmp forwards           ;nächster Durchlauf
21

22
longdelay:
23
        clr r16                 ;r16 null setzen
24
        clr r17                 ;r17 null setzen
25
delay1:
26
        dec r16                 ;r16 -= 1
27
        brne delay1             ;if r16 != 0 -> Sprung
28
        dec r17                 ;r17 -= 1
29
        brne delay1             ;if r17 != 0 -> Sprung
30
        ret                     ;return

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