پاسخ : دقیق نبودن ساعت 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
دیدگاه