$regfile = "m16def.dat" $crystal = 4000000 $lib "ds1307clock.lib" Config Sda = Portc.1 Config Scl = Portc.0 ' Address des DS1307 $D0=schreiben $D1=lesen Const Ds1307w = &HD0 Const Ds1307r = &HD1 ' Einstellen der Datum-/Zeitfunktion in BASCOM dabei werden automatisch ' die Variablen _year,_month,_day,_hour,_min,_sec im BCD Format angelegt Config Clock = User ' Datumsformat deutsch Tag.Monat.Jahr und als Trennzeichen den Punkt Config Date = Dmy , Separator = . Dim Anzeige As Byte Dim Anzeige1 As Byte Dim Sekeiner As Integer Dim Sekeiner2 As Integer Dim Sekzehner As Integer Dim Mineiner As Integer Dim Mineiner2 As Integer Dim Minzehner As Integer Dim Stdeiner As Integer Dim Stdeiner2 As Integer Dim Stdzehner As Integer Dim Wotag As Integer Dim Tageiner As Integer Dim Tageiner2 As Integer Dim Tagzehner As Integer Dim Monateiner As Integer Dim Monateiner2 As Integer Dim Monatzehner As Integer Dim Jahreiner As Integer Dim Jahreiner2 As Integer Dim Jahrzehner As Integer Dim Bcdsek As Integer Dim Bcdmin As Integer Dim Bcdstd As Integer Dim Bcdtag As Integer Dim Bcdmon As Integer Dim Bcdjahr As Integer Dim Seku As Integer Dim Minu As Integer Dim Stdu As Integer Dim Tag As Integer Dim Mon As Integer Dim Jahr As Integer Dim _date As Byte Ddrd = &B11111111 Ddrc = &B11111100 Ddra = &B11111111 Ddrb = &B11111111 Do I2cstart I2cwbyte Ds1307w I2cwbyte 0 I2cstart I2cwbyte Ds1307r I2crbyte Seku , Ack Bcdsek = Makedec(seku) Sekzehner = Bcdsek / 10 Sekeiner2 = Sekzehner * 10 Sekeiner = Bcdsek - Sekeiner2 I2crbyte Minu , Ack Bcdmin = Makedec(minu) Minzehner = Bcdmin / 10 Mineiner2 = Minzehner * 10 Mineiner = Bcdmin - Mineiner2 I2crbyte Stdu , Ack Bcdstd = Makedec(stdu) Stdzehner = Bcdstd / 10 Stdeiner2 = Stdzehner * 10 Stdeiner = Bcdstd - Stdeiner2 I2crbyte Wotag , Ack 'Ganz wichtig I2crbyte Tag , Ack Bcdtag = Makedec(tag) Tagzehner = Bcdtag / 10 Tageiner2 = Tagzehner * 10 Tageiner = Bcdtag - Tageiner2 I2crbyte Mon , Ack Bcdmon = Makedec(mon) Monatzehner = Bcdmon / 10 Monateiner2 = Monatzehner * 10 Monateiner = Bcdmon - Monateiner2 I2crbyte Jahr , Nack Bcdjahr = Makedec(jahr) Jahrzehner = Bcdjahr / 10 Jahreiner2 = Jahrzehner * 10 Jahreiner = Bcdjahr - Jahreiner2 I2cstop For Anzeige = 2 To 7 Portc.anzeige = 1 Anzeige1 = Anzeige - 2 Portb.anzeige1 = 1 If Anzeige = 7 Then Porta = Lookup(sekeiner , Segmente) 'Sekeiner setzen If Anzeige = 6 Then Porta = Lookup(sekzehner , Segmente) 'Sekzehner setzen If Anzeige = 5 Then Porta = Lookup(mineiner , Segmente) 'Mineiner setzen If Anzeige = 4 Then Porta = Lookup(minzehner , Segmente) 'Minzehner setzen If Anzeige = 3 Then Porta = Lookup(stdeiner , Segmente) 'Stdeiner setzen If Anzeige = 2 Then Porta = Lookup(stdzehner , Segmente) 'Stdzehner setzen If Anzeige1 = 0 Then Portd = Lookup(jahreiner , Segmente) 'tageiner If Anzeige1 = 1 Then Portd = Lookup(jahrzehner , Segmente) 'tagzehner If Anzeige1 = 2 Then Portd = Lookup(monateiner , Segmente) 'Mineiner setzen If Anzeige1 = 3 Then Portd = Lookup(monatzehner , Segmente) 'Minzehner setzen If Anzeige1 = 4 Then Portd = Lookup(tageiner , Segmente) 'Stdeiner setzen If Anzeige1 = 5 Then Portd = Lookup(tagzehner , Segmente) 'Stdzehner setzen Waitms 1 Portc.anzeige = 0 Portb.anzeige1 = 0 'Print Jahreiner Next Loop End Segmente: Data &B01000000 '0 Data &B01111001 '1 Data &B00100100 '2 Data &B00110000 '3 Data &B00011001 '4 Data &B00010010 '5 Data &B00000010 '6 Data &B01111000 '7 Data &B00000000 '8 Data &B00010000 '9 Setdate: _day = 7 : _date = 09 : _month = 09 : _year = 8 '_day = 7 ist wichtig _day = Makebcd(_day) : _date = Makebcd(_date) : _month = Makebcd(_month) : _year = Makebcd(_year) I2cstart ' Generate start code I2cwbyte Ds1307w ' send address I2cwbyte 3 I2cwbyte _day I2cwbyte _date ' Send Data to SECONDS I2cwbyte _month ' MINUTES I2cwbyte _year ' Hours I2cstop Return Settime: _sec = 00 : _min = 8 : _hour = 6 _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour) I2cstart ' Generate start code I2cwbyte Ds1307w ' send address I2cwbyte 0 ' starting address in 1307 I2cwbyte _sec ' Send Data to SECONDS I2cwbyte _min ' MINUTES I2cwbyte _hour ' Hours I2cstop Return