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
Lesezeichen