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
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
Danke werde es mir mal genauer anschauen. Also einen direkten befehl gibt es nich. Peter
Hallo, was macht den der Befehl "breq wait"? das habe ich im datenblatt nicht gefunden! Peter
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
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.
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
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.... ;-)
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
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.