www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Gibt es den Befehl


Autor: peter2 (peter zimmer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
gibt es einen Befehl mit dem ich einen Ganzen port überwachen kann? Also 
wie "sbic" bloß das er den ganzen PortD überwachen soll. Wenn dann was 
los ist soll er weitergehen. Ich könnte zwar auch 8 mal sbic einsetzen 
aber gibt es da keine andere Möglichkeit?
Danke schon mal.
Peter

Autor: thkaiser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann sich mit einer "Krücke" helfen, indem man den alten Wert in 
einem Register speichert.


wait:
     in temp,PIND
     cp temp,alt
     breq wait  ;nix los, also warten

     mov alt,temp ;aktuellen Zustand speichern

     ;ab hier den Code schreiben, in dem der Port
     ;ausgewertet wird

     rjmp wait

Autor: peter2 (peter zimmer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke werde es mir mal genauer anschauen. Also einen direkten befehl 
gibt es nich.
Peter

Autor: peter2 (peter zimmer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
was macht den der Befehl "breq wait"? das habe ich im datenblatt nicht 
gefunden!
Peter

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Seite 29 im akutuellen DOC0856.pdf von ATMEL

Autor: peter2 (peter zimmer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verstehe die beschreibung net ganz. Ich habe folgendes aus dem 
90s4433 Datenböatt seite 114 gefunden:
if (z=1) then PC<-- +k+1
Kann mir das jemand genauer erklären?
Peter

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt sog. Status-Flags (SREG). Ist ein Vergleich oder eine 
arithmetische Operation =0, wird i.a. das Zero-Flag gesetzt.
BREQ = BRanch if EQual (Springe bei Gleichheit -> Zero-Flag=1)
BRNE = BRanch if Not Equal
usw.
Nicht alle Befehle beeinflussen die Status-Flags - im Befehlssatz sind 
die entsprechenden Infos zu finden.

Autor: peter2 (peter zimmer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also der befehl prüft die das Zeroflag und geht weiter oder nach wait 
zurück.Aber das gibt doch im Programm keinen sinn.
Kann mir jemand das programm dann mal genauer erklären?
Peter

Autor: mikki merten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hilft ja dieser Link weiter:
http://www.avrbeginners.net/

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wait:
*** Lesen des aktuellen Zustands des kompletten Ports***
*** und speichern in "temp"                          ***

     in temp,PIND

*** Vergleiche "temp" mit "alt". Hinter "temp" und   ***
*** "alt" verbergen sich Register. In "alt" ist der  ***
*** alte Zustand des Port gespeichert. Beim aller-   ***
*** ersten durchlauf ist "alt" nicht definiert, also ***
*** wird der Vergleich höchstwahrscheinlich ein      ***
*** "ungleich" zum Ergebnis haben. Nach dem "cp"     ***
*** Befehl ist das Zero-Flag gesetzt, wenn           ***
*** "temp" = "alt". Andernfalls ist es nicht gesetzt.***

     cp temp,alt

*** Da wir detektieren wollen, ob sich am Port etwas ***
*** getan hat, springen wir zur Schleife zurück, bis ***
*** "temp" <> "alt"                                  ***

     breq wait ;nix los, also warten

*** Damit für den nächsten Durchlauf "alt" definiert ***
*** ist, wird der aktuelle Port-Zustand in dieses    ***
*** Register geladen.                                ***

     mov alt,temp ;aktuellen Zustand speichern

     ;ab hier den Code schreiben, in dem der Port
     ;ausgewertet wird

     rjmp wait

Ausführlicher kann ich jetzt aber nimmer....  ;-)

Autor: peter2 (peter zimmer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich glaube ich habe es verstanden. davor muss ich ja dann noch
R16=alt
r17=temp
oder kennt der assempler die variablen schon?!
Danke für die guten erklärung.
Peter

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.