weiss jetzt nicht, wie ich den code so poste wie ihr, daher mache ich das so als text.



$regfile = "m128def.dat"
$framesize = 32
$swstack = 256
$hwstack = 64
$lib "dcf77.lib" 'LIB für DCF77
$external Dcf77


Declare Sub Dcf77
Declare Sub Lcd_print(byval Lcd_text As String , Byval Lcd_posx As Byte , Byval Lcd_posy As Byte , Byval Fontsize As Byte , Byval Lcd_fcolor As Byte , Byval Lcd_bcolor As Byte)


'----------------------------------------------------------------------
Lcd_port Alias Portb 'Port B
Ddrb = &B01100110 'Port B: 4 Pins output

Const Kommando = 0 'Eine folgendes Kommando wird durch "1" eingeleitet
Const Parameter = 1 'Eine folgende Parameterübergabe wird durch "0" eingeleitet

Const Rs = 6
Const Cs = 5
Const Sdata = 2
Const Sclk = 1 'd.h. Port B.1


Const Blau = &B00000011 'Vordefinierte Konstanten für die Farbwerte machen das Programmiererleben leichter:
Const Gelb = &B11111100
Const Rot = &B11100000
Const Gruen = &B00011100
Const Schwarz = &B00000000
Const Weiss = &B11111111
Const Hellgruen = &B00111110
Const Dunkelgruen = &B00010100
Const Dunkelrot = &B10100000
Const Dunkelblau = &B00000010
Const Hellblau = &B00011111
Const Orange = &B11111000

'================================================= ==========================
' Includes für DCF77

Config Date = Dmy , Separator = . 'deutsches Datumsformat
Config Clock = Soft 'Softclock aktivieren
' (läuft mit Timer2!)
Config Timer1 = Timer , Prescale = 8 'Timer 40Hz
Const Startwert = 15543 'Für 16MHz
Timer1 = Startwert
On Timer1 Tim1_isr 'Überlauf 40x/s
Enable Interrupts
Disable Timer1 'zunächst ausschalten

'---------------------- Pin für DCF Eingang definieren ---------------------
'Jeder Portpin kann benutzt werden.
'Auch in der "Dcf77.lib" entsprechend anpassen !!!

Config Pind.3 = Input 'DCF77 Eingang
Portd.3 = 1 'Pullup ein

Config Pind.5 = Output
Set Portd.5

Config Pind.7 = Input
Portd.7 = 1


Dim Count As Word
Count = 0

'--------------------- Variablen der DCF77.lib -----------------------------

Dim _dayofweek As Byte , Dcfstatus As Byte , Dcfflags As Byte
'_dayofweek -> 1..7 (Mo..So)
'Dcfstatus -> Bit0: intern Bit4: Stundenparität OK
' Bit1: intern Bit5: Uhr nach DCF gestellt
' Bit2: 58 Impulse empfangen Bit6: Datum nach DCF gestellt
' Bit3: Parität OK Bit7: Uhr nach DCF stellen
' ACHTUNG: Bits 0..4 NUR LESEN!!!
'Dcfflags -> Bit0 (R) : Reserve-Antenne des DCF77-Senders
' Bit1 (A1): Ankündigung des Wechsels MEZ <-> MESZ
' Bit2 (Z1): \__ Z1/Z2: 10 = MESZ, 01 = MEZ
' Bit3 (Z2): /
' Bit4 (A2): Ankündigung einer Schaltsekunde
' Bit5 (S) : Startbit f. Zeitinformationen (immer 1)

'Interne Variablen der DCF77.lib:
Dim Dcfcounter As Byte , Dcfbuffer As Byte , Dcfimpulse As Byte
Dim Dcfparity As Byte , Dcfhsec As Byte , Dcftemp(7) As Byte
Dim Dcfpau As Byte , Dcfimp As Byte 'Nur für Debug!
Dim Helper As String * 3
'---------------------------------------------------------------------------

Dcfstatus = 0

Dcfstatus.7 = 0 'Uhr nach DCF stellen: AUS
Dcfstatus.5 = 1 'Uhrzeit inaktuell
Dcfstatus.6 = 1 'Datum inaktuell

' End für DCF77
'================================================= ==========================
Date$ = "01.01.06"
Time$ = "01:00:00"


Gosub Lcd_init
Gosub Lcd_cls 'Display löschen



'-------------------------------------------------------------------------------
'Hauptprogramm
'-------------------------------------------------------------------------------


Do 'endless loop

Call Lcd_print( "started" , 1 , 10 , 0 , Weiss , Blau)

' If _min = 0 And Dcfstatus.7 = 0 Then '1x pro Stunde:
If Pind.7 = 0 Then
Dcfstatus.5 = 0 'Zeit inaktuell
Dcfstatus.6 = 0 'Datum inaktuell
End If
'Wenn Uhr oder Datum inaktuell, dann nach DCF stellen:
'Timer1 ist nur aktiv, solange DCF-Empfang läuft!!!
If Dcfstatus.5 = 0 Or Dcfstatus.6 = 0 Then
Dcfstatus.7 = 1
Enable Timer1
Call Lcd_print( "Ena" , 1 , 3 , 0 , Weiss , Blau)

Helper = Str(dcfstatus)
Call Lcd_print(helper , 1 , 4 , 0 , Rot , Weiss)

Else
Dcfstatus.7 = 0
Disable Timer1
Call Lcd_print( "Dis" , 5 , 3 , 0 , Weiss , Rot)

End If

Call Lcd_print(time$ , 1 , 1 , 0 , Weiss , Blau)
Call Lcd_print(date$ , 1 , 2 , 0 , Weiss , Blau)

Helper = Str(dcfstatus)
Call Lcd_print(helper , 1 , 4 , 0 , Rot , Weiss)

Helper = Str(dcfcounter)
Call Lcd_print(helper , 1 , 6 , 0 , Rot , Weiss)
Helper = Str(dcfbuffer)
Call Lcd_print(helper , 6 , 6 , 0 , Rot , Weiss)
Helper = Str(dcfimpulse)
Call Lcd_print(helper , 11 , 6 , 0 , Rot , Weiss)
Helper = Str(dcfparity)
Call Lcd_print(helper , 16 , 6 , 0 , Rot , Weiss)
Helper = Str(dcfpau)
Call Lcd_print(helper , 1 , 7 , 0 , Gruen , Weiss)
Helper = Str(dcfimp)
Call Lcd_print(helper , 6 , 7 , 0 , Gruen , Weiss)

If Pind.3 = 0 Then
Portd.5 = 0
Else
Portd.5 = 1
End If

Loop

End 'end program


'================================================= ==============================


Tim1_isr:
Call Dcf77
Return

die restlichen definitionen für dasd farbdisplay habe ich weggelöscht, weil die tun nichts zur sache. sonst wars das aber.
mit pinD.7 starte ich den DCF, später mal wird das dann über die zeit erfolgen (aber das wäre für die tests jetzt recht unpraktisch)
ich kann mir leider nicht erklären warum der impulse-counter über die 58 hinausläuft obwohl zu diesem zeitpunktdie zwei parity's auf 1 stehen.

vielen dank für allfällige tips
günter