InitTimer
Syntax:
int InitTimer(unsigned short time);
Beschreibung:
Die Funktion initialisiert Zähler 0 und 1 in Modus 3 und Zähler 2 in Modus 2. Weiterhin werden die Startwerte von Zähler 0 und 1 so modifiziert, dass am Takteingang von Zähler 2 eine Frequenz von f=1Khz anliegt. Der übergebene Parameter time entspricht nach der fehlerfreien Ausführung der Funktion dem Startwert von Zähler 2. Dadurch ist es möglich, Frequenzen mit einer Periodendauer von T=time*1ms zu erzeugen. Zum Start der Zähler 1 und 2 müssen die Freigaben GATE 1 und GATE 2 über den Parallel-Baustein (PC1 und PC2) freigeschaltet werden.
Parameter:
time | Multiplikator zur Bestimmung der Periodendauer am Ausgang von Zähler 2, T=time*1ms |
Rückgabewert:
Rückgabe | Bedeutung |
0 | OK |
1 | Fehler |
Bemerkung:
Da das System PCS2002 keine ereignisgesteuerten Funktionsaufrufe (Interrupts) unterstützt, muss bei Anwendungen, die eine präzise Zeitbasis erfordern, ständig der Ausgang des Zählers 2 beziehungsweise das interne Zählregister selbst abgefragt und ausgewertet werden. Diese unter der Bezeichnung Polling bekannte Vorgehensweise, führt immer zu einem von der Zyklusgeschwindigkeit abhängigem Messfehler.Ein weiterer Faktor der das Messergebnis negativ beeinflusst ist die Tatsache, dass es sich bei den unterstützten Windows-Plattformen nicht um echtzeitfähige Betriebssysteme handelt. Dies führt zu einer von der Systemauslastung abhängigen und somit unkalkulierbaren Verzögerung der "Polling-Zyklusgeschwindigkeit."
Beispiel:
/*Das folgende Beispiel zählt die seit dem Programmstart vergangenen Sekunden und gibt diese am Bildschirm aus. Die Erzeugung der Zeitbasis erfolgt dabei mit dem Peripheriebaustein 8253. */
unsigned char new_value=0, old_value=0;
unsigned short sec = 0;
if( ! OpenPLXDevice())
{
InitTimer(1000);
Freigaben G1 und G2 setzen
StdInit8255();
WriteByte(PORT_C,0x06);
solange keine Taste gedrückt wird...
while(!_kbhit())
{
// Polling-Schleife, erkennt über PC 7 eine Flanke an OUT 2, wenn S2 in Pos. OUT2 ist
do{
old_value=new_value;
ReadByte(hDevice,PORT_C,&new_value);
new_value=new_value&0x80;
}while(!((new_value)&&(!old_value)));
sec++;
printf("%d\n", sec); Bildschirmausgabe
}
ClosePLXDevice();
}else
printf("Fehler");
Diese Seite wurde noch nicht kommentiert.