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.