Тут на досуге накидал код для включения освещения в нужное время. Использовал то что было под рукой, вроде как работает всё, да не уверен в правильности написания работы с EEPROM.
Cильно не бейте работаю с бейсиком 5 дней . Знание других языков равно нулю
Код: Выделить всё
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40
Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.2 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7
Config Lcd = 16 * 2
Cursor Off
Config Sda = Portc.1
Config Scl = Portc.0
Const Ds1307w = &HD0
Const Ds1307r = &HD1
Config Portd = Output : Portd = &B00000000
Config Clock = User
Config Date = Dmy , Separator = .
Dim H As Byte
Dim M As Byte
'===================EEPROM
$eepromhex
$eeprom
Timer_1_h:
Data 09 ' Начальные данные для таймера (часы)
Timer_1_m:
Data 57 ' Начальные данные для таймера (Минуты)
$data
'========
Time$ = "09:55:00"
Date$ = "04.03.10"
Readeeprom H , Timer_1_h
Readeeprom M , Timer_1_m
Do
If H = _hour And M = _min Then
Portd.5 = 1
End If
Locate 1 , 1
Lcd "Timer1 = " ; H ; ":" ; M
Locate 2 , 1
Lcd Time$
Loop
' Benutzer definierte Routinen die von der datetime.lib im BASCOM genutzt werden
Dim Weekday As Byte
Getdatetime:
I2cstart ' Start
I2cwbyte Ds1307w ' DS1307 schreiben
I2cwbyte 0 ' DS1307 Adresszeiger auf 0 stellen
I2cstart ' Start
I2cwbyte Ds1307r ' DS1307 lesen (ab vorher eingestellter Adresse 0)
I2crbyte _sec , Ack ' Sekunden
I2crbyte _min , Ack ' Minuten
I2crbyte _hour , Ack ' Stunden
I2crbyte Weekday , Ack ' Wochentag (in Dummy gelesen da von date$/time$ nicht genutzt)
I2crbyte _day , Ack ' Tag
I2crbyte _month , Ack ' Monat
I2crbyte _year , Nack ' Jahr
I2cstop
_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return
Setdate:
_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
I2cstart ' Start
I2cwbyte Ds1307w ' DS1307 schreiben
I2cwbyte 4 ' DS1307 Adresszeiger auf 4 (Byte 5) stellen
I2cwbyte _day ' Tag schreiben
I2cwbyte _month ' Monat schreiben
I2cwbyte _year ' Jahr schreiben
I2cstop
Return
Settime:
_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
I2cstart ' Start
I2cwbyte Ds1307w ' DS1307 schreiben
I2cwbyte 0 ' DS1307 Adresszeiger auf 0 stellen
I2cwbyte _sec ' Sekunden schreiben
I2cwbyte _min ' Minuten schreiben
I2cwbyte _hour ' Stunden schreiben
I2cstop
Return
