Hallo,
habe mir von myAVR einen µkontroller und das entsprechende Lehrbuch dazu
geholt. Einziges Problem ist, dass es keine Lösungen zu den Aufgaben
gibt.
Ich wollte einen Lauflicht Programmieren, welches ich mit 2 Taster nach
links und nach rechts schiebe.
ich bekomme leider nur die eine Richtung hin, ich denke ich habe iwo
einen Denkfehler.
1 ; Start , Power ON , Reset
2 main : ldi r16 , lo8 ( RAMEND )
3 out SPL , r16
4 ldi r16 , hi8 ( RAMEND )
5 out SPH , r16
6 ; Hier Init - Code eintragen .
7 ldi r16 , 0 b11111111 ; High in r16 Laden
8 out DDRB , r16 ; PINS PortB als Ausgang
9 cbi DDRD , 2 ; PD . 2 wird als Eingang
10 cbi DDRD , 3
11 ldi r16 , 0 b00001100 ; PULL UP
12 out PORTD , r16 ; PD . 2 Wird auf High gesetzt
13 ldi r16 , 0 b00000000
14 ldi r17 , 0 b00000000
15 ldi r18 , 0 b10000001
16 ; ---------------------------------------------------------------------------
17 mainloop : ; Eingabe
18 getkey : in r24 , PIND
19 sbrc r24 , 2 ; Ü berspringt wenn GEDR Ü CKT wird bzw wenn NULL
20 rjmp getkey
21 ; warten ...........
22 inc r16
23 brne warte
24 inc r17
25 brne warte
26 ; Verarbeitung
27 rol r18
28 ; AUSAGABE
29
30
31
32 out PORTB , r18
33
34
35 warte : rjmp mainloop
Mein Ansatz:
1 ; Start , Power ON , Reset
2 main : ldi r16 , lo8 ( RAMEND )
3 out SPL , r16
4 ldi r16 , hi8 ( RAMEND )
5 out SPH , r16
6 ; Hier Init - Code eintragen .
7 ldi r16 , 0 b11111111 ; High in r16 Laden
8 out DDRB , r16 ; PINS PortB als Ausgang
9 cbi DDRD , 2 ; PD . 2 wird als Eingang
10 cbi DDRD , 3
11 ldi r16 , 0 b00001100 ; PULL UP
12 out PORTD , r16 ; PD . 2 Wird auf High gesetzt
13 ldi r16 , 0 b00000000
14 ldi r17 , 0 b00000000
15 ldi r18 , 0 b10000001
16 ; ---------------------------------------------------------------------------
17 mainloop : ; Eingabe
18 getkey : in r24 , PIND
19 sbrc r24 , 2 ; Ü berspringt wenn GEDR Ü CKT wird bzw wenn NULL
20 rjmp getkey
21 ; warten ...........
22 inc r16
23 brne warte
24 inc r17
25 brne warte
26 ; Verarbeitung
27 rol r18
28 ; AUSAGABE
29
30
31
32 out PORTB , r18
33
34
35 getkey1 : in r24 , PIND
36 sbrc r24 , 3 ; Ü berspringt wenn GEDR Ü CKT wird bzw wenn NULL
37 rjmp getkey1
38 ; warten ...........
39 inc r16
40 brne warte
41 inc r17
42 brne warte
43 ; Verarbeitung
44 ror r18
45 ; AUSAGABE
46
47
48
49 out PORTB , r18
50
51
52 warte : rjmp mainloop
Leider ohne Erfolg.
Ich hoffe ihr könnt mir helfen.
Gruß
Linda
21.06.2016 22:48 :
Bearbeitet durch User
Linda K. schrieb:
> Ich hoffe ihr könnt mir helfen.
Hier:
1 ; Start , Power ON , Reset
2 main : ldi r16 , lo8 ( RAMEND )
3 out SPL , r16
4 ldi r16 , hi8 ( RAMEND )
5 out SPH , r16
6 ; Hier Init - Code eintragen .
7 ldi r16 , 0 b11111111 ; High in r16 Laden
8 out DDRB , r16 ; PINS PortB als Ausgang
9 cbi DDRD , 2 ; PD . 2 wird als Eingang
10 cbi DDRD , 3
11 ldi r16 , 0 b00001100 ; PULL UP
12 out PORTD , r16 ; PD . 2 Wird auf High gesetzt
13 ldi r16 , 0 b00000000
14 ldi r17 , 0 b00000000
15 ldi r18 , 0 b10000001
16 ; ---------------------------------------------------------------------------
17
18 GetKey : in r24 , PIND
19 sbrs r24 , 2 ; Ü berspringt wenn NICHT GEDR Ü CKT
20 rjmp GoLeft ; * Gedrueckt , Left Shift
21 sbrc r24 , 3 ; Ü berspringt wenn GEDR Ü CKT
22 rjmp GetKey
23 GoRight : ror r18 ; * Right Shift
24 rjmp OutPort
25 GoLeft : rol r18
26 OutPort : out PORTB , r18
27 Delay : inc r16
28 brne Delay
29 inc r17
30 brne Delay
31 rjmp GetKey
21.06.2016 23:15 :
Bearbeitet durch User
Vielen dank, das ging sehr schnell.
Ich hatte einen Denkfehler.
Ab jetzt werde ich evtl öfters nerven ;)
Gruß
Linda
Linda K. schrieb:
> Ab jetzt werde ich evtl öfters nerven ;)
Tu das.
Und nein, normales fragen nervt hier keinen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.