codeschloss in asm

OP #1719487
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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.