Hallo zusammen,
ich habe für die ganzen Aufgaben nur einen Timer laufen. Der läuft mit 8KHz über, weil er auch noch RC5 empfangen soll.
Ich benutze allerdings nicht mehr die DCF-Routine von Bascom, sondern meine eigene, weil ich da flexibler bin.
Der Sekundentakt (Interrupt) setzt ein Flag, das im Hauptprogramm abgefragt wird. Dann werden alle 7 DS1820 ausgelesen und anschließend sofort wieder die Konvertierung gestartet. Daher keine extra Wartezeit. Wenn der Sekundentakt wieder das Flag setzt, sind die DS1820 längst fertig.
Das DCF- und das RC5-Signal liegen an externen Interrupt Eingängen. Die Interruptroutinen setzen auch wieder jeweils ein Flag, welches im Hauptprogramm abgefragt wird.
Das ganze sieht dann so aus:
Code:
Do
   If Interrupt_vektor.7 = 1 Then
       'Verarbeitung der eingehenden RC5 Signale
   Endif
   If Interrupt_vektor.6 = 1 Then
       'Verarbeitung der eingehenden DCF Signale
   Endif
   If Interrupt_vektor.5 = 1 Then
       'Konvertierung der Temperaturen
   Endif
loop

Get_rc5_isr:                                                'Verarbeiten der RC5 Impulse
   'Print #1 , "Received Get_rc5 Interrupt"
   Incr Bit_nummer
   Interrupt_vektor.7 = 1
Return

Dcf_empfang_isr:                                            'Impuls auf Pind.1
   'Print #1 , "Received Dcf_empfang Interrupt"
   Interrupt_vektor.6 = 1
Return

Sectic:
   'Print #1 , "Received Sectic Interrupt"
   Debug_main = Ja
   Interrupt_vektor.5 = 1
Return
Alles kann parallel laufen.

Gruß

Rolf