mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STK500 ASM Problem


Autor: Sentcool (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich bin ein anfänger in sachen mikrocontroller und asm, ich würde gerne 
bei dem drücken von taster eins die led1 einschalten, und durch erneutes 
drücken des tasters die led wieder ausschalten.

das einschalten funktioniert, doch das ausschalten nicht.. das problem 
liegt am SBIS befehl, der scheint irgendwie nich zu funktionieren, weis 
sjemand wieso?


hier mein source:

Ich habe auf meinem board ein ATMEGA8515L

.include "8515def.inc"

ldi r16, 0xFF
out DDRB, r16       ; Port B ist Ausgang

ldi r16, 0x00
out DDRD, r16       ; Port D ist Eingang


ldi r16, 0xFF
out PORTB, r16      ; PORTB auf 0xFF setzen -> alle LEDs aus

loop: sbic PIND, 0        ; "skip if bit cleared",
                             nächsten Befehl  überspringen,
                             ; wenn Bit 0 im IO-Register
                             PIND =0 (Taste 0 gedrückt)

rjmp loop                 ; Sprung zu "loop:" -> Endlosschleife


cbi PORTB, 0              ; Bit 0 im IO-Register
                            PORTB auf 0 setzen -> 1. LED an

loop3:   sbis PIND, 0     ;warten bis taster losgelassen wird.

rjmp loop3

loop2:   sbic PIND, 0     ;warten bis taster erneut gedrückt wird

rjmp loop2

out PORTB, r16            ; leds ausschalten

ende:    rjmp loop        ; zurück zum loop


sorry, falls die formatierung nicht so gut is

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich bin nicht der Assemblermann, aber es sieht mir so aus, als ob 
PIND.0
nur nach dem Initialisieren "1" ist und wenn die Taste dann gedrückt 
wurde
"0" wird, aber nie wieder 1 erreicht. Dadurch "denkt" das SBIC in der 
Loop2
, es wäre nicht gemeint.

Für diese Angaben übernehmen wir kein GEWEHR!
;-)

MfG Paul

Autor: Martin Antoni (Firma: Siemens AG) (kazuki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die taster werden warscheinlich prellen, damit wird das verhalten nicht 
berechenbar

Autor: Sentcool (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das selbe hab ich mir auch schon gedacht, aber wie kann ich mein projekt 
dann realisieren? :) ... es muss doch eine möglichkeit geben den status 
der taster abzufragen in beide richtungen...

oder kennt ihr vll. eine ausweichende methode? ... p.s. wozu ist der 
befehl SBIS dann sonst gut? denn den kann man ja nur auf IO Register 
anwenden.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so macht man das auch nicht - der Controller "hängt" dann in Deinen 
Warteschleifen und kann nichts anderes erledigen.

1. Port abfragen, ob Taste betätigt (SBIC)
2. Zustand eines Bits eines Registers abfragen
3. wenn "0" -> LED ein und Bit im Register setzen ("1")
4. wenn "1" -> LED aus und Bit im Register löschen ("0")
5. warten bis Taster wieder losgelassen (SBIS)

Dann muß der Controller nur bei Tastenbetätigung warten.

Otto

Autor: Sentcool (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ähm ok, und für die ganz dummen in diesem forum, wie sähre das jetzt in 
asm aus?

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sieh mal ins Tutorium:

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Tasten

da sind einige Beispiele, welche Du versuchen kannst....

Autor: Sentcool (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, da werd ich mich doch gleich mal durcharbeiten.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.