;*******************************************************************************
;*
;*      Titel:  Unterprogramm zur Nutzung des RTC DS1307 ueber I2C
;*              (SR_RTC_DS1307_sample.asm)
;*
;*      Datum:  01/01/11        Version:        0.3
;*      Autor:  WEIGU
;*
;*      Informationen zur Beschaltung:
;*      Prozessor:      ATmega32A        Quarzfrequenz:  16MHz
;*      Eingaenge:
;*      Ausgaenge:
;*
;*      Informationen zur Funktionsweise:
;*
;*
;*******************************************************************************
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;       Reservierungen und Zuweisungen
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.EQU    ERRLED   = 0            ;1 falls Fehler LED erwuenscht sons 0
.EQU    ERRDDR   = DDRD         ;LED zur Anzeige eines Uebetragungsfehler
.EQU    ERRPORT  = PORTD
.EQU    ERRPNr   = 7

;-------------------------------------------------------------------------------
;	Daten senden (8 Datenbyte)
;-------------------------------------------------------------------------------
RTCSND: rcall	I2CSTA		;Startbit senden + Kontrolle
        cpi     r25,0x08
        brne    RTCSNE
        ldi	r24,0xD0	;Adresse des RTC DS1307 (Maxim 1101000) senden
	rcall	I2CSND		;(Bit 2^0 = 0 schreiben) + Kontrolle
        cpi     r25,0x18
        brne    RTCSNE
	ldi	r24,0x00	;Adresszeiger = 0 senden + Kontrolle
	rcall	I2CSND
        cpi     r25,0x28        
        brne    RTCSNE
        ;8 Datenbyte senden + Kontrolle
        lds     r24,RTCTAB+0    ;Sekunden
        rcall   I2CSND
        cpi     r25,0x28        
        brne    RTCSNE
        lds     r24,RTCTAB+1    ;Minuten
        rcall   I2CSND
        cpi     r25,0x28
        brne    RTCSNE
        lds     r24,RTCTAB+2    ;Stunden
        rcall   I2CSND
        cpi     r25,0x28
        brne    RTCSNE
        lds     r24,RTCTAB+3    ;Wochentag
        rcall   I2CSND
        cpi     r25,0x28
        brne    RTCSNE
        lds     r24,RTCTAB+4    ;Tag
        rcall   I2CSND
        cpi     r25,0x28
        brne    RTCSNE
        lds     r24,RTCTAB+5    ;Monat
        rcall   I2CSND
        cpi     r25,0x28
        brne    RTCSNE
        lds     r24,RTCTAB+6    ;Jahr
        rcall   I2CSND
        cpi     r25,0x28
        brne    RTCSNE
        lds     r24,RTCTAB+7    ;Kontrollregister
        rcall   I2CSND
        cpi     r25,0x28
        brne    RTCSNE
        rjmp    RTCSNR
RTCSNE: .IF (ERRLED == 1)
        sbi     ERRDDR,ERRPNr   ;Ausgang fuer Fehler LED initialisieren
        sbi     ERRPORT,ERRPNr  ;Fehler LED ein
        .ENDIF
RTCSNR: rcall   I2CSTO          ;Stoppbit senden
        ret

