codeschloss in asm

OP #1719487
Lesenswert?

moinsen...

nachdem ich vor ein paar tagen mit asm und dem mega16 angefangen habe, 
hätte ich mal eine frage:

ich habe heute mein codeschloss zum laufen bekommen. nur denke ich das 
das programm noch nicht das gelbe vom ei ist.


- tasten 1 bis 8 am port A
- ausgang port B
- momentan nur 2 stelliger code

<>

anfang:
zahl1:

in   r16, pina
cpi   r16, 0x00
breq   zahl1      ;prüfen das keine taste gedrückt ist

in   r16, pina
cpi  r16, 0x01
brne  anfang     ;prüfen das taste 1 gedrückt ist
                    ;sonst zurück auf anfang
wait1:

in  r16, pina
cpi  r16, 0x00
brne  wait1      ;warten bis taste losgelassen wird

zahl2:
in  r16, pina
cpi  r16, 0x00
breq  zahl2     ;prüfen das keine taste gedrückt ist

in  r16, pina
cpi  r16, 0x10
brne  anfang    ;prüfen das taste 5 gedrückt ist
                   ;sonst zurück auf anfang

wait2:
in  r16, pina
cpi  r16, 0x00
brne  wait2       ;warten bis taste losgelassen ist

ausgabe:
ldi  r16, 0xff
out  portb, r16  ;port b einschalten

ldi  r16, 0xfe
ldi  r17, 0xfe
ldi  r18, 0x0a
zeit1:
dec  r16
cpi  r16, 0x00
brne  zeit1
dec  r17
cpi  r17, 0x00
brne  zeit1
dec  r18
cpi  r18, 0x00
brne  zeit1      ;zeitschleife

ldi  r16, 0x00
out  portb, r16  ;portb ausschalten

rjmp  anfang      ;zurück zum anfang


<>

warscheinlich hab ich es mir sehr umständlich gemacht, aber immerhin 
selber geschrieben.
währe schön wenn jemand verbesserungsvorschläge hat.
Gast #1719521
Lesenswert?

Nimm eine Schleife, die z.B. 4 mal durchläuft:

1. Ziffer aus dem Flash laden
2. Warten, bis sie gedrückt wird
3. Warten, bis sie losgelassen wird

Bei falscher Taste die Zählvariable zurücksetzen,
nach der Schleife Codeschloss öffnen.
Gast #1719687
Lesenswert?

AVR-Tutorial: Speicher - Flash
Speichere die Zahlen als 1, 2, 4, 8, 16, 32, 64 oder 128 im Flash.
Du lädst die Adresse der ersten Zahl in den Z-Pointer.
Dann zählst du von Drei bis auf Null, überprüfst den kompletten Port 
(das schließt mit ein, dass keine andere Taste gedrückt ist), nach jedem 
Durchlauf addierst du eins zum Z-Pointer, wenn du mit dem Zählen bei 
Null angelangt bist, brichst du ab.
Eine Zeitverzögerung bei Falscheingabe wäre auch noch sinnvoll.

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