Code:
$crystal = 4000000
$regfile = "m32def.dat"

Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.2 , Rs = Portc.0
Config Lcdbus = 4

Config Pind.2 = Input                                       'extern INT0

' Empfangsstatus auf LED ausgeben, damit man sieht,
' ob der AVR auch arbeitet
Config Pina.0 = Output

Set Portd.2
Set Porta.0

' Wert des Prescaler durch Testen ermittelt.
Config Timer0 = Timer , Prescale = 256                      '4000000 / 256 = 15625 Hz
Const Startwert = 100                                       'Überlauf 256 - Startwert 100 = 156  ( 15625 Hz / 156 = 100,1 Hz ) => 10ms
Load Timer0 , Startwert

Dim I As Byte
Dim J As Byte
Dim K As Byte

Dim Impuls As Byte
Dim Pause As Integer
Dim Sekunde As Byte
Dim Wert As Byte
Dim Paritaet As Byte
Dim Checker As Byte
Dim Wochentag As String * 14
Dim Temp As String * 2

Wochentag = "MoDiMiDoFrSaSo"                                ' String mit Kuerzel der Wochentage

Dim Werte_bit(6) As Byte
Dim Werte_start(6) As Byte
Dim Minute(42) As Byte                                      ' Enthaelt die Sekunden-Impulse 0 und 1

' Arrays für Startposition und Laenge der Daten im Array Minute()
Werte_start(1) = 4                                          'Minuten
Werte_bit(1) = 6
Werte_start(2) = 12                                         'Stunden
Werte_bit(2) = 5
Werte_start(3) = 19                                         'Tag
Werte_bit(3) = 5
Werte_start(4) = 25                                         'Wochentag
Werte_bit(4) = 2
Werte_start(5) = 28                                         'Monat
Werte_bit(5) = 4
Werte_start(6) = 33                                         'Jahr
Werte_bit(6) = 7

Impuls = 0
Pause = 0
Sekunde = 0
Checker = 0
' Checker = 0 : Start
' Checker = 1 : Aktuelle Messung nicht erfolgreich
' Checker = 2 : Daten schenen in Ordnung zu sein

Config Int0 = Falling                                       '-> bei negiertem DCF-Signal,
                                         'sonst Config Int0 = Rising !!!
Enable Interrupts
Enable Int0
Enable Timer0                                               'enable the interrupt

On Int0 Zaehle Nosave
On Ovf0 Tim0_isr                                            'Überlauf alle 10ms

Cls
Cursor Off

Lcd "-- --.--.-- --:--:--"                                  ' Display bei Start

Do                                                          'endless loop
  nop
Loop

End                                                         'end program


' Routine zaehlt Sekunden und wertet Impuls- und Pausenzeit aus.
Zaehle:
   'Für Debug eingebaut: (zeigt Impuls und Pausenlänge)
   'Locate 3 , 1 : Lcd "Imp: " ; Impuls
   'Locate 3 , 10 : Lcd "Pau: " ; Pause
Incr Sekunde
   If Sekunde > 18 Then
         K = Sekunde - 18
         If Impuls > 17 Then
            Minute(k) = 1
         Else
            Minute(k) = 0
         End If
   End If
   Locate 1 , 19
   Wert = Makebcd(sekunde)                                  ' Umweg ueber BCD, dann fuehrende 0
   Lcd Bcd(wert)                                            ' Sekunde anzeigen
         If Pause < 300 And Pause > 200 Then                'Minutenanfang
                  If Checker = 0 Then                       ' Checker-Flag setzen
                  Checker = 1
                  Else
                  Checker = 2
                  Gosub Check_parity
                  End If
         Sekunde = 0                                        ' Sekunde 0 setzen
         Locate 1 , 19
         Lcd "00"                                           ' und anzeigen
         End If
   If Checker = 2 Then
      Gosub Dekoder
      Checker = 1
   End If
Impuls = 0
Pause = 0
Return

' Timer incrementiert die Zaehler
Tim0_isr:
Load Timer0 , Startwert
         If Pind.2 = 0 Then
         Incr Impuls
         Set Porta.0
         Else
         Incr Pause
         Reset Porta.0
         End If
Return


' Ueberprufung der empfangenen Daten
Check_parity:
Locate 4 , 1
Lcd Sekunde                                                 ' Debug-Ausgabe bei schlechtem Empfaenger

' Stimmt die Zahl der Sekunden?
If Sekunde <> 59 Then
   Checker = 1
End If

'pruefe Minutenparitaet
Paritaet = 0
For I = 4 To 10
   Paritaet = Paritaet + Minute(i)
Next I
Paritaet = Paritaet And 1
If Paritaet <> Minute(11) Then
   Checker = 1
End If

Paritaet = 0

'pruefe Stundenparitaet
For I = 12 To 17
   Paritaet = Paritaet + Minute(i)
Next I
Paritaet = Paritaet And 1
If Paritaet <> Minute(18) Then
   Checker = 1
End If
'Lcd Checker

'pruefe Rest
Paritaet = 0
For I = 19 To 40
   Paritaet = Paritaet + Minute(i)
Next I
Paritaet = Paritaet And 1
If Paritaet <> Minute(41) Then
   Checker = 1
End If
'Lcd Checker

Return



' Daten im Minuten-Array dekodieren und ausgeben.
Dekoder:
' Schleife, weil kompakter
For K = 1 To 6
   Wert = 0
   J = Werte_start(k) + Werte_bit(k)
   For I = J To Werte_start(k) Step -1
      Shift Wert , Left
      Wert = Wert + Minute(i)
   Next I
   J = Werte_start(k)
   Minute(j) = Wert
Next K

' Wochentag aus String schneiden.
K = Minute(25) * 2
K = K - 1
Temp = Mid(wochentag , K , 2)

' Raus damit, aufs LCD
Locate 1 , 1
Lcd Temp ; " " ; Bcd(minute(19)) ; "." ; Bcd(minute(28)) ; "." ; Bcd(minute(33))
Lcd " " ; Bcd(minute(12)) ; ":" ; Bcd(minute(4))

Return
Ich habe hier obrigen Code gefunden.

Was muss ich machen:
-wenn ich das ganze mit 10 MHz betreiben will?
-Stunde, Minute und Tag als Variable verwenden will mit denen ich z.B.
if hour = 10.35 then
...
machen will.


Mfg

EDE