Hab hier mal n Democode für den SPI RTC-4553
Uhrenbaustein

Code:
'----------------------------------------------------------
' Programm initialisieren
'----------------------------------------------------------
'$dbg
'
' ACHTUNG JTAG per Fuse abschalten !!!!
'
' SPI RTC an MISO MOSI CS0 = PortC.7   CS1 = PortC.6  RW = PortC.5
' Habe noch SRF04 Ultraschallenfernungssensor an PortC.2 und PortC.3
' Ist nicht besonders elegant gecodet, aber kann ja je nach Bedarf
' eventbasierend individuell umgebaut werden.
'
' Nur zur Verdeutlicheung der Grundfunktionen der RTC-4553 Uhrenfunktion

$regfile = "m16def.dat"
$crystal = 8000000

$baud = 19200

Declare Function Ultrasonic() As Integer                    ' Funktionen deklarieren
Declare Function Spitransfer(byval Outbyte As Byte ) As Byte

Dim A As Byte                                               ' variablen deklarieren
Dim I As Byte
Dim X As Byte
Dim Temp As Word
Dim Tempint As Integer
Dim Tempstr As String * 16

Enable Interrupts

Config Pinc.2 = Output
Config Pinc.3 = Input
Config Portc.5 = Output
Config Portc.6 = Output
Config Portc.7 = Output

' Konstanten deklarieren
Const Setyear = &B00001011
Const Setmonth = &B00001001
Const Setday = &B00000111
Const Sethour = &B00000100
Const Setminute = &B00000010

Rtcwr Alias Portc.5
Rtccs1 Alias Portc.6
Rtccs0 Alias Portc.7
Rtccs1 = 1
Rtccs0 = 0

' SPI konfigurieren und initialisieren
Config Spi = Hard , Interrupt = Off , Data Order = Lsb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0
Spiinit

' RTC-4553 initialisieren
Rtcwr = 0
X = Spitransfer(&B00001111)                                 'c3 (Initialisierung)
X = Spitransfer(&B00011101)                                 'c1 (Initialisierung)
Rtcwr = 1

Do
   Tempstr = ""
   For A = &B00001100 To 0 Step -1                          ' absteigende Reihenfolge
      X = Spitransfer(a)                                    ' sena Anfrage
      X = Spitransfer(0)                                    ' empfange Antwort
      X = X And &B11110000
      Shift X , Right , 4
      Tempstr = Tempstr + Str(x)                            ' Zahlenwert in String umwandeln und an String anreihen
   Next A
   I = Inkey()                                              ' UART abfragen
   Select Case I                                            ' Je nach Zeichen Funktion auslösen
     Case &H79:                                             ' wenn y
        Rtcwr = 0
        X = Spitransfer(setyear)
        Rtcwr = 1
     Case &H6D:                                             ' wenn m
        Rtcwr = 0
        X = Spitransfer(setmonth)
        Rtcwr = 1
     Case &H64:                                             ' wenn d
        Rtcwr = 0
        X = Spitransfer(setday)
        Rtcwr = 1
     Case &H68:                                             ' wenn h
        Rtcwr = 0
        X = Spitransfer(sethour)
        Rtcwr = 1
     Case &H69:                                             ' wenn i
        Rtcwr = 0
        X = Spitransfer(setminute)
        Rtcwr = 1
   End Select
   Waitms 200
   Print Tempstr ; "  ";                                    ' Ausgabe Datum und Uhrzeitstring
   Tempint = Ultrasonic()                                   ' Entfernung per SRF04 messen
   Tempint = Tempint * 10                                   ' in cm umrechnen
   Tempint = Tempint / 62
   Print Tempint                                            'Enfernung ausgeben
Loop
End


Function Ultrasonic() As Integer
   Portc.2 = 0
   Pulseout Portc , 2 , 20
   Pulsein Ultrasonic , Pinc , 3 , 1
End Function

Function Spitransfer(byval Outbyte As Byte) As Byte
   Spdr = Outbyte                                           ' SPI-Ausgabe
   Do
   Loop Until Spsr.spif = 1                                 ' Warten bis Byte raus ist
   Spitransfer = Spdr                                       ' Rückgabewert auslesen
End Function
End