ImpulsDauerMessung unter DOS
-
Fast jeder µ-Controller hat ein Timer-System mit dem man, nach einer bestimmten Zeit (µs) bzw. einer bestimmten Anzahl von CPU-Takten,
einen Interupt auslösen kann. Damit kann man "nebenbei" ImpulsDauerMessungen durchführen, und z.B. Datentelegramme (beliebiger Struktur) empfangen und senden.
Ich habe schon einige Anwendungen gesehen, die über die Handshakeleitungen der COM-Schnittstelle Datentelegramme empfangen bzw. senden können (z.B. Packet-Radio).
Jetzt meine Frage:
Wie realisiert man ImpulsDauerMessung unter DOS (oder Win) ?
-
Das muesste ueber den Timer Interrupt 8 gehen.
Wenn Du der englischen Sprache maechtig bist, koennte dir dieser Link (Ist auch in der Asm-FAQ) helfen:
http://www.nondot.org/sabre/os/articlesDort dann unter Miscellaneous Hardware => PIT
Ich persoenlich finde den Artikel von Mark Feldman sehr gut.Anm: wenn du den Intervall, in dem der int8 ausgeloest wird aenderst, funktioniert das Programm nicht mehr in Windows.
[ Dieser Beitrag wurde am 30.07.2002 um 19:37 Uhr von Nobuo T editiert. ]
-
Danke Nobuo T,
ich hatte schon festgestellt, daß es einen Timer geben muß der
irgend einen Counter 18,2 mal pro Sekunde inkrementiert, dessen
Wert mit der C-Funktionbiostime()
gelesen werden kann.
Das da ein Interupt8 incl. etwas Hardware dahinter steckt,
wußte ich nicht.
Ich muß mir das PIT demnächst etwas näher ansehen.Kann ich eigentlich die PIT-Intervalle im µs-Bereich ungestraft
verändern, da doch die SystemZeit irgentwie damit aktualisiert wird?
Ich bin eben doch nur ein GelegenheitsProgrammierer
unter C, C++ und manchmal asm.
-
In dem Artikel von mr. Feldman werden auch Methoden vorgeschlagen, wie du verhindern kannst, dass sich die Systemuhr verstellt, wenn du den PIT-Counter aenderst.
Du kannst zB. in deinem int8 handler auch einen counter einbauen, so dass der uerspruengliche int 8 nur jedes 2. mal aufgerufen wird, o.ae.Wenn es dich allerdings nicht stoert, dass deine Systemuhr verstellt wird, kannst den alten int8 auch einfach gar nicht mehr aufrufen. Wenn das System neu bootet, sollte eigentlich wieder die richtige Uhrzeit eingestellt sein...