Hallo zusammen,
ich möchte für meine mündliche Abiprüfung Thema
Mikrocontroller/Assembler ein einfaches Assembler Programm schreiben,
das bei einem Tastendruck eine LED anschaltet und bei einem erneuten
Druck wieder ausschaltet.
Hierzu habe ich das folgende Programm geschrieben, was auch im AVR
Siumlator funktioniert wie es soll:
1 | .include "m8def.inc"
|
2 |
|
3 | ldi r20, low (RAMEND)
|
4 | out SPL, r20
|
5 |
|
6 | ldi r20, high (RAMEND)
|
7 | out SPH, r20
|
8 |
|
9 | ldi r18, 0b01000000
|
10 | out DDRD, r18
|
11 |
|
12 | loop: SBIC PIND, 2 ; Nächsten Befehl überspringen wenn Taster gedrückt
|
13 | rcall AnAus
|
14 | rjmp loop
|
15 |
|
16 | AnAus: in r20, PORTD
|
17 | com r20 ; Alle Bits invertieren
|
18 | andi r20, 0b01000000 ; Alle Bits außer LED-Bit 0 setzen
|
19 | out PORTD, r20 ; Nach PORTD ausgeben
|
20 | ret
|
Leider brennt die LED nur während ich den Taster gedrückt halte, wenn
ich loslasse geht sie wieder aus.
Hat einer von euch eine Idee woran es liegen könnte?
Entprellen kommt hier nicht in Frage, da das Programm möglichste einfach
zu halten. Selbst wenn es wegen dem Prellen nicht funktioniert, würde
die LED wenigstens manchmal anbleiben.
Vielen Dank Schonmal für eure Hilfe,
Gruß Philipp