![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
' ============================================================================ ' Verzögerungsschleife mit Vielfachen von 100µs auf den kleinen OM-Controllern ' In OCBASIC 1.12a_e1 für Open-Macro von Dietmar Harlos am 22. Oktober 2018 ' ============================================================================ ' Zu diesem Zweck kann man eine FOR..NEXT-Schleife oder ein entsprechendes ' Äquivalent in Assembler einsetzen. Nur richtig exakt wird das ganze nur ' dann, wenn für die Dauer der Schleife die Interrupts deaktiviert werden. ' Auf den kleinen OM-Controllern entsprechen 100µs: ' 3.2e6*100e-6 = 320 Taktzyklen. ' Somit ist nur eine Implementierung in Assembler sinnvoll. ' Durch Aufruf der Verzögerungsroutine per SYS statt per GOSUB können einige ' Taktzyklen eingespart werden. Ansonsten ist natürlich zu beachten, daß auch ' für die Ausführung des Hauptprogramms einige Zeit benötigt wird. ' Die Open-Micro, Open-Mini und Open-Midi unterstützen keine WORD-Variablen. ' --- Definitionen für das System -------------------------------------------- INCLUDE "omac.def" 'Definitionen für die Open-Macro ' --- Definitionen des Anwenders --------------------------------------------- DIM a,b,c BYTE 'einige Variablen DIM wa,wb WORD ' --- Das Hauptprogramm ------------------------------------------------------ PrintSpc=ON 'SPACE vor einem dezimalen PRINT ausgeben ' "TIM Counter Register (TCNT)"-Takt: 3.2e6/64 = 50 kHz, ist aber modulo 1000 a=TIMER : wa=TCNTH SHL 8 OR TCNTL SYS hundertmikrosekunden 100 '100*100µs = 0.01 Sekunden = 10 ms b=TIMER : wb=TCNTH SHL 8 OR TCNTL ?a;wa '" 0 9" \ (527-9)/50e3 = ?b;wb '" 0 527" / 0.01036 Sekunden End2Host=ON 'Nach Programmende in den Host-Modus END 'Programmende, Neustart mit der Enter-Taste ' --- Subroutinen ------------------------------------------------------------ ' Anzahl 100-µs-Einheiten warten. ' Anzahl Taktzyklen: (2+105*3+3)*anzahl = 320*anzahl ' das sind: 320/3.2e6 = 0.0001 Sekunden = 100 µs PROC hundertmikrosekunden(anzahl) INLASM ! sei 'Interrupts deaktivieren #hundertmikrosekunden_bigloop ! ldx #105 '2 TZ #hundertmikrosekunden_100us ! dbnzx hundertmikrosekunden_100us '3 TZ ! dbnza hundertmikrosekunden_bigloop '3 TZ ! cli 'Interrupts wieder aktivieren ! rts END PROC ' --- Programmende ---------------------------------------------------------- Passender Link: Bedienungsanleitung zur Open-Macro und Open-Maxi Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |