ich war hier: InitTimer

Version [75284]

Dies ist eine alte Version von InitTimer erstellt von FabianEndres am 2017-01-01 20:56:56.

 

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:

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.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki