Für dieses Forum muß Javascript im Browser aktiviert werden!
Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C2 Quellcode formatieren: <code>Quellcode</code> ASM Quellcode formatieren: <asm>Quellcode</asm> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! > Hallo Volker, > > > Wenn die Ports als Counter laufen, kann ich den Zustand der Ports nach dem Pegelwechesel noch > > abfragen? > > Beispiel: > > > > <code> > > if ports.getcount(0) > > { > > if ports.get(0) == -1 > > { > > tue etwas > > } > > else > > { > > tue etwas anderes > > } > > } > > </code> > > Ja, das geht. > Allerdings macht das nicht viel Sinn. > Denn, wenn Du auf eine Flanke reagierst, ist der Portzustand danach meist immer gleich. > D.h. bei einer low-high-Flanke liegt am Port immer ein High-Pegel an. > Bei Reaktion auf high-low-Flanken entsprecht ein Low-Pegel. > Außer der Impuls war so kurz, daß dieser bis zur Abfrage nicht mehr anliegt. > > In Deinem Code hast Du aber einen kleinen Fehler. > Die Counter Ports sind die Ports P1H.0 bis P1H.3 (=Ports 8 bis 11) > Bei ports.getcount() entsprechen diese auch den Indizies 0 bis 3. > Bei direkten Portzugriffen mit ports.get() und ports.set() sind das aber die Indizies 8 bis 11. > > Übrigens solltest Du bei If-Abfragen, bei denen Du nur auf True oder False prüfen willst, > nicht auf "== -1" prüfen. > Schreibe einfach folgendes: > <code> if ports.get(8) { tuedies(); } else { tuedas(); } </code> > Denn dann sparst Du Dir zwei VM-Instruktionen, was die Ausführung beschleunigt > und noch 4 Byte Speicher spart. > > > > Außerdem brauche ich noch einen Timerinterrupt. Also ein Programmteil der zyklisch so jede Sekunde > > aufgerufen und ausgeführt wird. Das könnte man ntürlich mit dem freilaufenden Timer machen (Timerwert > > abspeichern und ständig vergleichen, ob eine Sekunde abgelaufen ist). > > Oder aber einem eigenen Thread? Wie sind da Eure Erfahrungen? > > Nein, einen Timerinterrupt brauchts Du hier nicht. > Wenn ein Teil des Programms unabhängig von anderen Aufgaben jede Sekunde abgearbeitet > werden soll, ist ein eigener Thread durchaus sinnvoll. > Am einfachsten ist folgende Methode: > <code>thread jedesekunde > {byte second; > wait second!=system.second(); > second=system.second(); > //ab hier der Code, der jede Sekunde ausgeführt werden soll. > // .. > } </code> > Lediglich beim ersten Durchlauf wird die Pause etwas kürzer als eine Sekunde sein. > Aber das kann man noch mit einem initilisieren der second-Variable und einer Schleife > innerhalb des Threads lösen. > > MfG André H