Przepraszam, że tak długo nie odpowiadałem . Załączam kod Bascom:
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 9600
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
$lib "ds1307clock.lib"
Config Sda = Portb.2
Config Scl = Portb.3
Config Portb.4 = Input
Config Portb.1 = Input
Const Ds1307w = &HD0
Const Ds1307r = &HD1
S1 Alias Pinb.4
S2 Alias Pinb.1
Portb.4 = 0
Portb.1 = 0
Portb.4 = 1
Portb.1 = 1
Dim I As Byte
Dim Znak As String * 10
Dim Znak2 As String * 2
Dim Znak4 As String * 2
Dim _sec2 As Byte
Dim _min2 As Byte
Dim _hour2 As Byte
Config Clock = User
Cls
Enable Interrupts
Cursor Off
Do
I = Ischarwaiting()
If I = 1 Then
Cls
Input Znak
Locate 1 , 2 : Lcd Znak
Waitms 1000
Znak2 = Mid(znak , 4 , 2)
Znak4 = Mid(znak , 1 , 2)
Gosub Ustaw_czas
Print Time$
End If
Locate 1 , 1 : Lcd Time$
Loop
End
Dim Weekday As Byte
Getdatetime:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
Setdate:
_day2 = Makebcd(_day2) : _month2 = Makebcd(_month2) : _year2 = Makebcd(_year2)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 4
I2cwbyte _day2
I2cwbyte _month2
I2cwbyte _year2
I2cstop
Return
Settime:
_sec2 = Makebcd(_sec2) : _min2 = Makebcd(_min2) : _hour2 = Makebcd(_hour2)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec2
I2cwbyte _min2
I2cwbyte _hour2
I2cstop
Return
Ustaw_czas:
_hour2 = _hour
_min2 = _min
_sec2 = _sec
_min2 = Val(znak2)
_hour2 = Val(znak4)
_sec2 = 0
Gosub Settime
'Goto Ustaw_czas
Return
Wczoraj spalił mi się ds1307 (nic nie wytrzyma 12V napięcia, nawet atmega:) ), więc muszę się na razie wstrzymać z testami.
Pozdrawiam!