Hallo zusammen!
Ich sitze seit zwei Stunden vor meinem Quellcode und wundere mich, warum
er nicht das tut, was er soll (wie das für Code so üblich ist ;)
Aufgefallen ist mir, dass das ret scheinbar nicht zurückspringt.
Hier ein Minimalbeispiel:
1 | .include "m8def.inc" ; Definitionsdatei für den Prozessortyp einbinden
|
2 |
|
3 | .org 0x0000
|
4 | ldi r16, 0xFF ;
|
5 | out DDRB, r16 ; Port B als Ausgang
|
6 |
|
7 | ldi r16, 0xFF ;
|
8 | out DDRD, r16 ; Port D als Ausgang
|
9 | main:
|
10 | ldi r16, 0b11111111 ; grüne LED an
|
11 | out PORTB, r16 ;
|
12 |
|
13 | rcall led
|
14 |
|
15 | ldi r16, 0b11111111 ; rote led an
|
16 | out PORTD, r16 ;
|
17 |
|
18 | ende: rjmp ende ; Endlosschleife
|
19 |
|
20 | led:
|
21 | ldi r16, 0b00001111 ; gelbe LED an (rote noch aus)
|
22 | out PORTD, r16
|
23 | ret
|
Als HW ist eine grüne LED an PB(2), eine gelbe LED an PD(2) und eine
rote LED an PD(4, also das höhere Nibble).
Der Code soll die grüne, dann die gelbe und schließlich die rote LED
anschalten.
Wenn ich den Code ausführe, leuchten aber nur die grüne und die gelbe
LED.
Die Verbindungen sind alle überprüft und mein µC ist ein ATMega8.
Die Wahl der Pins ist bei mir irrelevant.
Habe ich irgendetwas richtig dummes übersehen oder funktioniert das so
bei euch?
Beste Grüße
Johannes S.