![]() ![]() INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo Tommy! Wenn Du die Echtzeituhr und gleichzeitig eine PWM mit höherer Frequenz benötigst, würde ich den PWM-Takt auf z.B. 200 Hz erhöhen und nur jeden vierten Timer-Overflow-Interrupt an das Betriebssystem weiterleiten. Auf der OM kannst Du in jeden Systeminterrupt eine eigene Assembler-Interruptroutine (IIAR) einbinden und am Ende dieser Routine durch Setzen oder Löschen des Carry-Flags bestimmen, ob das Betriebssystem den aktuellen Interrupt auswerten soll oder nicht. Wenn Du nur jeden vierten Interrupt durchläßt, läuft die Echtzeituhr trotz höherem Timer-Overflow-Takt ganz normal weiter. Der folgende Code demonstriert das... INCLUDE "OM.DEF" DEFINE TOflZaehler FREERAM2 ' --- Die Assembler-Interruptroutine ---------------------------------------- ' Das Schluesselwort INLASM kennzeichnet die folgende PROCEDURE als ' Inline-Assemblerroutine (IAR). Dadurch, und dass sie unmittelbar ' am Anfang des Programms steht, wird sie zu einer IIAR, also zu einer ' Interrupt-Inline-Assemblerroutine, die bei einem aktivierten User- ' Interrupt gestartet wird. Der OCBASIC-Compiler setzt automatisch ein ' "GOTO main" vor die Routine. PROC TOFL_iiar INLASM ! cbeqa #iTOFL,TOFL_iiar_1 ! jmp TOFL_iiar_end+2 #TOFL_iiar_1 ! inc TOflZaehler ! lda TOflZaehler ! cmp #4 ! bne TOFL_iiar_2 ! clr TOflZaehler ! clc ! rts #TOFL_iiar_2 ! sec ! rts END PROC #TOFL_iiar_end 'Direkt hier hinter muss die naechste IIAR folgen ' --- Das Hauptprogramm ----------------------------------------------------- #main TOflZaehler=0 'Zaehler auf Null setzen UIRTofl=ON 'IIAR bei Timer-Overflow-Interrupt aufrufen TSC=&b01000100 '200 Hz PWM-, gleich TOFL-Takt WHILE TRUE WAIT TIMER=0 PRINT second WAIT TIMER<>0 WEND Viele Grüße Dietmar Meine Homepage: http://ccintern.dharlos.de |
Antwort schreiben |