![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo zusammen, wie immer gibt es auf der OM mehrere Realisierungsmöglichkeiten. Besonders auf der Open-Macro bietet es sich an, einfach den 16-Bit-Zähler (TCNTH:TCNTL) vom Timer Interface Module auszulesen, denn die OMAC kann bereits von Haus aus mit 16-Bit-Zahlen umgehen. Er zählt in 20 ms üblicherweise von 0 bis 999. So ergibt sich eine zeitliche Auflösung von 20 µs. Bei Auslesen des höherwertigen Bytes (TCNTH) wird der Inhalt des niederwertigen Bytes (TCNTL) in einem Buffer gesichert. Nachfolgendes Auslesen von TCNTH verändert nicht den Wert des gebufferten TCNTL, bis TCNTL ebenfalls ausgelesen wurde. Dadurch wird sichergestellt, daß High- und Lowbyte zum gleichen Zeitpunkt gelesen werden. Der Zähler läßt sich in BASIC oder Assembler auslesen. Der Assemblerbefehl LDHX liest sequentiell. Siehe CPU-Manual. ' 20 µs Timerauflösung auf der Open-Macro ' am 26. Mai 2007 von Dietmar Harlos INCLUDE "OMAC0.DEF" DEFINE TCNT WORD PrintSpc=ON WHILE TRUE PRINT TIMER; read_TCNT PRINT TCNT WEND END FUNCTION read_TCNT INLASM ! LDHX TCNTH ! STHX TCNT ! RTS END FUNCTION Das Programmbeispiel erzeugt Ausgaben wie die folgenden auf der seriellen Schnittstelle: 425 525 425 166 426 806 427 447 427 88 428 664 429 305 429 945 430 586 430 227 431 867 432 507 432 148 Natürlich kann man auch das TIM Counter Modulo Register (TMODH:TMODL) so anpassen, daß der 20-ms-Interrupt häufiger ausgeführt wird. Das Thema wurde bereits mehrfach hier im Forum behandelt. Selbstverständlich werden durch Ändern des Modulo-Registers nicht nur die TIMER-Variable, sondern auch vom TIM abhängige Funktionen (Uhr, PWM, etc.) beeinflußt. Schließlich könnte man Zeiten per FOR..NEXT- oder DBNZ-Schleife stoppen. Dann sollten aber, wie in den Beispielprogrammen beschrieben, die Interrupts deaktiviert werden. Denn wenn das Ausführen der Schleife durch eine Interruptroutine unterbrochen wird, führt das effektiv zu einer Verringerung der Programmausführungsgeschwindigkeit. > Bei der Einstellung Pause = 1 verstreicht eine Zeit von 20ms bis es weitergeht. Nicht ganz. Siehe OM-Manual. Grüße Dietmar Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |