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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.