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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.