پاسخ : دقیق نبودن ساعت DS1307
کامپیوتر
کامپیوتر
$regfile = "m16def.dat"
$crystal = 4000000
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1_
, Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Config Lcd = 16 * 2
Config Portb = Input
Portb = 255
Config Sda = Portd.6
Config Scl = Portd.5
Const Ds1307w = &HD0
Const Ds1307r = &HD1
Config Clock = User
Config Debounce = 5
Dim T As Word , Avrt As Word , N As Byte
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Cls
Cursor Off
Locate 1 , 1 : Lcd "Clock & Temp"
Locate 2 , 1 : Lcd "Marzieh Jandouni"
Wait 2
Cls
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cstop
Do
Waitms 10
Locate 1 , 1 : Lcd "Time:" ; Time$
Locate 2 , 1 : Lcd "Temp:" ; Avrt ; " 'C"
Gosub Setting
Gosub Temp
Loop
Getdatetime:
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cstart
I2cwbyte Ds1307r
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Nack
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
Return
Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cwbyte _min
I2cwbyte _hour
I2cstop
Return
Setting:
Debounce Pinb.0 , 0 , _hour , Sub
Debounce Pinb.1 , 0 , _min , Sub
Debounce Pinb.2 , 0 , _sec , Sub
Return
_sec:
Incr _sec
If _sec > 59 Then _sec = 0
_sec = Makebcd(_sec)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 0
I2cwbyte _sec
I2cstop
Return
_min:
Incr _min
If _min > 59 Then _min = 0
_min = Makebcd(_min)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 1
I2cwbyte _min
I2cstop
Return
_hour:
Incr _hour
If _hour > 23 Then _hour = 0
_hour = Makebcd(_hour)
I2cstart
I2cwbyte Ds1307w
I2cwbyte 2
I2cwbyte _hour
I2cstop
Return
Temp:
Avrt = 0
For N = 0 To 10
Incr N
T = Getadc(0)
Avrt = Avrt + T
Waitus 10
Next N
Avrt = Avrt / 10
Avrt = Avrt * 500
Avrt = Avrt / 1023
Return
End
دیدگاه