Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Ports abfragen Kategorie: Programmierung (von André H. - 12.01.2012 1:11)
Als Antwort auf Re: Ports abfragen von Volker - 9.01.2012 20:44
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, C-Control II Station, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.1
Hallo Volker,

> Wenn die Ports als Counter laufen, kann ich den Zustand der Ports nach dem Pegelwechesel noch
> abfragen?
> Beispiel:
>
>
> if ports.getcount(0)
>    {
>     if ports.get(0) == -1
>      {
>       tue etwas
>      }
>     else
>      {
>       tue etwas anderes
>      }
>     }
>


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:
if ports.get(8) { tuedies(); } else { tuedas(); }
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:
thread jedesekunde
{byte second;
 wait second!=system.second();
 second=system.second();
 //ab hier der Code, der jede Sekunde ausgeführt werden soll.
 // ..
}

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


Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Ports abfragen (von Volker - 13.01.2012 22:59)