Gast
#725852
Hallo liebe Mikrocontroller Fans,
ich steige in der Programmierung mit dem Atmega8 und hier ist mein 2.
selbstgeschriebenes Code.
Mein Ziel ist binär vorwärtszählen, nach tastendruck, also:
1.Tastendruck : Led: 00000001
2.Tastendruck : Led: 00000010
3.Tastendruck : Led: 00000011
usw
aber nachdem ich das Code auf die Platine geflascht habe, zeigen die
Leds folgend:
Led: 00000001 (also 1 dezimal)
Also es zählt ab 1 (dezimal) statt ab 0(dezimal)
was mache ich denn falsch?
Danke schon mal
Hier das COdes:
.equ DDRD =$11
.equ DDRB =$17
.equ PINB =$16
.equ PORTD =$12
.def temp1 =r19
.def temp2 =r20
ldi r16,0xFF ; Port D als Ausgang
out DDRD,r16
ldi r16,0x00 ; Port B als Eingang (wo die Taster angeschossen sind)
out DDRB,r16
ldi r17,0x00 ; initialieren den register mit 0d
ldi r16, 0xFF ;Alle Leds an
out PORTD, r16
warten:
sbis PINB, 0 ;solange keine Taste gedrückt wird
rjmp warten ; wird gewartet, dann wenn gedrückt
; springt raus
ldi temp1, 0xFF ; wegen Entprellung habe ich temp1
warten2:
ldi temp2, 0xFF ; und temp2 definiert, die werden
warten3:
dec temp2 ; bis 0x00 decrementiert nach dem
brne warten3 ; Tastendruck, damit der µC das Loslassen
dec temp1 ; nicht merkt also
brne warten2 ; ein paar millisekunden
inc r17 ; dann wir r17 incrementtiert und
out PORTD, r17 ; seinen Wert wird ausgeben
warten4:
sbic PINB,0 ; wenn die Taste losgelassen ist dann
rjmp warten4 ; springt aus dem Schleifen sonst warten
cpi r17, 0xFF ; wenn r17 den wert 256 erreicht hat, dann
breq ende ; springt zum ende, sonst springt wieder zum
rjmp warten ; warten
ende:
rjmp ende