Forum: Mikrocontroller und Digitale Elektronik codeschloss in asm


von Martin G. (zombo)


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.

von MarioT (Gast)


Lesenswert?

Tasten prellen! Hast Du das Programm getestet?

von Martin G. (zombo)


Lesenswert?

tasten sind entprellt, und programm läuft.. ;-)

von Ich (Gast)


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.

von Ohforf S. (ohforf)


Lesenswert?

Für den praktischen Einsatz würde ich eher eine Matrixtastatur nehmen.
http://mezdata.de/ti-praxis/230_matrixtastatur/
Das sieht besser aus (und braucht ein paar Programmzeilen mehr).
Ausserdem eine Zeitverzögerung, wenn jemand einen falschen Code eingibt,
sonst kann man schnell alle Kombinationen durchprobieren.

von Ich (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.