Also ich habe im Datenblatt mal gelesen, dass der erste Impuls möglicherweise verfälscht sein kann, wenn man das OCR-Register im "laufenden Betrieb" ändert. Für die meisten PWM-Anwendungen mag der erste Impuls nicht besonders wichtig sein - aber hier wäre das natürlich fatal.

Was hältst Du von folgendem Ansatz:

Code:
Dim Impuls(4) as Word    'Ist ein Array aus 4 Word-Variablen
Dim Index as Byte           'Zum Durchzählen von Impuls(1) bis Impuls(4)
Dim Flag as Bit            'Zeigt Timer1-Interrupt an
Config PORTX.Y = Output          'Ausgangs-Pin

On Timer1 Timer1_ISR
Enable Timer1
Enable Interrupts


Do
...
...
If Flag = 1 then
  Flag = 0
 
  If PORTX.Y = 1 then
   PORTX.Y = 0
   Timer1 = Timer1 + 64429     'Nächster Überlauf in 0,3 ms
  Else
   PORTX.Y = 1
   If Index = 4 then Index = 1 Else Index = Index + 1
   Timer1 = Timer1 + Impuls(Index)
  End if
End if
...
...
Loop


On Timer1_ISR:
Flag=1
Return
Im Rest der Hauptschleife kannst Du Dich dann darum kümmern, dass die Werte Impuls(1) bis Impuls(4) per RS232 aktualisiert werden. Sie bestimmen, wie lange Timer1 bis zu seinem nächsten Überlauf braucht, und somit die Dauer der High-Impulse. Logischerweise berechnen sie sich so: Impuls = 65535 - (3686400 * Impulslänge in Sekunden).

Diese Idee ist allerdings nicht getestet, noch nicht mal compiliert, weil ich hier gerade kein Bascom habe. Aber vielleicht reicht ja die Idee schon...