Доброго времени суток формутчане , появился у меня еще один вопрос связный с подключением часовой микросхемы DS 1307 к микроконтроллеру ATmega 16 . В интернете много статей по подключению программно этой микросхемы но все примеры к сожалению 
 
 приведены на других языках программирования таких как ASM , C++ .А по Басику нету . Но есть пример работы с этими часами в хелпе.
Но вот НО! Я уже пару дней мучаюсь с программой их хелпа а часики мои на роботе все никак не хотят идти   

 .
Я был бы очень признателен тем людям которые могли бы выложить пример работы с часами а именно как :
*Нужно показывать только дату и текущее время .
*И как можно реализовать такой алгоритм :
-Робот едет вперёд (к примеру) сработал датчик 1 и пошёл отсчет времени по секундам , робот едет дальше , опять сработал тот же датчик 1 и отсчет времени прекратился , а результат отображался на дисплее . 
(если можно примерчик кратенький )
Вот программа с которой я работаю 
- Код: Выделить всё • Развернуть
- 'Version 2.2 New
 
 'Creator - Sorokin Oleg akk "Gelios"
 
 'Programm Robot RC5N5p2
 
 $regfile = "m16def.dat"                                    'используемый Микроконтроллер
 
 $crystal = 16000000                                        'Частота работы микроконтроллера 16 МГц
 
 $baud = 9600
 
 $hwstack = 32                                              ' default use 32 for the hardware stack
 
 $swstack = 10                                              ' default use 10 for the SW stack
 
 $framesize = 40                                            ' default use 40 for the frame space
 
 Const Clockmode = 1
 
 #if Clockmode = 1
 
 Config Clock = Soft
 
 Disable Interrupts
 
 #else
 
 Config Clock = User
 
 Config Sda = Portc.1
 
 Config Scl = Portc.0
 
 Const Ds1307w = &HD0                                       ' Addresses of Ds1307 clock
 
 Const Ds1307r = &HD1
 
 #endif
 
 Config Date = Ymd , Separator = -
 
 $lib "lcd4.lbx"
 
 $lib "mcsbyte.lbx"
 
 'Библиотека lcd4.lbx использует следующее подключение -
 
 ' указываем конфигурацию подключения дисплея к портам МК
 
 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                                        'используем дисплей на 2 строчки по 16
 
 Config Adc = Single , Prescaler = Auto , Reference = Avcc  'конфигурация АЦП
 
 Config Portd.0 = Input
 
 Config Rc5 = Pind.0                                        'PD0 - вход RC-5
 
 Config Portd.2 = Output : Prav_vpered Alias Portd.2
 
 Config Portd.3 = Output : Lev_vpered Alias Portd.3
 
 Config Portd.4 = Output : Lev_nazad Alias Portd.4
 
 Config Portd.5 = Output : Prav_nazad Alias Portd.5
 
 Config Portd.6 = Output : Led Alias Portd.6
 
 Config Portd.7 = Input : Sb1 Alias Portd.7
 
 'часы нужно подключать PC1-PC0
 
 Config Portc.2 = Input : Ir_1 Alias Portc.2                '*
 
 Config Portc.3 = Input : Ir_2 Alias Portc.3
 
 Config Portc.4 = Input : Ir_3 Alias Portc.4                '*                                                   $PROG &H00,&H00,&H00,&H00' generated. Take care that the chip supports all fuse bytes.$PROG &H00,&H00,&H00,&H00' generated. Take care that the chip supports all fuse bytes.
 
 Config Portc.5 = Input : Ir_4 Alias Portc.5
 
 'Подключить ацп чтобы мерить напряжение на акамуляторе PA0
 
 Config Porta.1 = Input : L1 Alias Porta.1
 
 Config Porta.2 = Input : L2 Alias Porta.2
 
 Config Porta.3 = Input : L3 Alias Porta.3
 
 Config Porta.4 = Input : L4 Alias Porta.4
 
 Config Porta.5 = Input : L5 Alias Porta.5
 
 Config Porta.6 = Input : L6 Alias Porta.6
 
 Declare Sub On_off
 
 Declare Sub P_plis
 
 Declare Sub P_minys
 
 Declare Sub Vol_plis
 
 Declare Sub Vol_minys
 
 Declare Sub Zariad
 
 Declare Sub Leds
 
 Declare Sub 4asiki
 
 Dim Address As Byte                                        'Объявляем переменные
 
 Dim Command As Byte
 
 Dim A As Byte
 
 Dim P_plis As Byte
 
 Dim P_minys As Byte
 
 Dim Vol_plis As Byte
 
 Dim Vol_minys As Byte
 
 Dim On_off As Byte
 
 Dim Zariad As Byte
 
 Dim W As Word
 
 Dim Volt As Single
 
 Dim Leds As Byte
 
 Dim Lvar1 As Long
 
 Dim Mday As Byte
 
 Dim Bweekday As Byte , Strweekday As String * 10
 
 Dim Strdate As String * 8
 
 Dim Strtime As String * 8
 
 Dim Bsec As Byte , Bmin As Byte , Bhour As Byte
 
 Dim Bday As Byte , Bmonth As Byte , Byear As Byte
 
 Dim Lsecofday As Long
 
 Dim Wsysday As Word
 
 Dim Lsyssec As Long
 
 Dim Wdayofyear As Word
 
 Enable Interrupts
 
 Start Adc
 
 '************************************************************************************
 '
 ''''''''''''''''''''''''''''Начало программы '''''''''''''''''''''''''''''''''''''''
 
 '************************************************************************************
 
 
 
 Cls
 
 Lcd "Ёpёіeї xo·ЗёЅ"                                         'Привет хозяин
 
 Waitms 500
 
 Lowerline
 
 Lcd "©гaАё ! =)"
 
 Waitms 500
 
 Cls                                                         'Удачи ! =)
 
 Cursor Off
 
 
 
 Do
 
 Getrc5(address , Command)                                  'Прием команды ПДУ
 
 If Address = 0 Then                                        'Затем – ее выполнение
 
 Command = Command And &B01111111
 
 
 
 If Command = 12 Then                                     'Выключаем все (клавиша ОN-OFF)
 
 Call On_off
 
 End If
 
 
 
 If Command = 32 Then                                    'Средний вперед (клавиша P+)
 
 Call P_plis
 
 End If
 
 
 
 If Command = 33 Then                                   'Средний назад (клавиша P-)
 
 Call P_minys
 
 End If
 
 
 
 If Command = 16 Then                                  'Резко направо (клавиша VOL+)
 
 Call Vol_plis
 
 End If
 
 
 
 If Command = 17 Then                                 'Резко налево (клавиша VOL-)
 
 Call Vol_minys
 
 End If
 
 
 
 If Command = 8 Then                                 'Заряд в %
 
 Call Zariad
 
 End If
 
 
 
 If Command = 9 Then                                ' Включаем Фары
 
 Call Leds
 
 
 End If
 
 
 
 If Command = 7 Then                               'Часики включаем тока ХЗ как =))
 
 Call 4asiki
 
 End If
 
 '*************************************************************************************************************
 
 '*************************************************** ЧАСЫ ****************************************************
 
 '*************************************************************************************************************
 _day = 1
 
 _month = 1
 
 _year = 1
 
 _sec = 12
 
 _min = 13
 
 _hour = 14
 
 
 If _year > 50 Then
 
 Exit Do
 
 End If
 
 
 
 _sec = _sec + 7
 
 If _sec > 59 Then
 
 Incr _min
 
 _sec = _sec - 60
 
 End If
 
 
 
 _min = _min + 2
 
 If _min > 59 Then
 
 Incr _hour
 
 _min = _min - 60
 
 End If
 
 
 
 _hour = _hour + 1
 
 If _hour > 23 Then
 
 Incr _day
 
 _hour = _hour - 24
 
 End If
 
 
 
 _day = _day + 1
 
 
 
 
 
 If _day > 28 Then
 
 Select Case _month
 
 Case 1
 
 Mday = 31
 
 Case 2
 
 Mday = _year And &H03
 
 If Mday = 0 Then
 
 Mday = 29
 
 Else
 
 Mday = 28
 
 End If
 
 Case 3
 
 Mday = 31
 
 Case 4
 
 Mday = 30
 
 Case 5
 
 Mday = 31
 
 Case 6
 
 Mday = 30
 
 Case 7
 
 Mday = 31
 
 Case 8
 
 Mday = 31
 
 Case 9
 
 Mday = 30
 
 Case 10
 
 Mday = 31
 
 Case 11
 
 Mday = 30
 
 Case 12
 
 Mday = 31
 
 End Select
 
 If _day > Mday Then
 
 _day = _day - Mday
 
 Incr _month
 
 If _month > 12 Then
 
 _month = 1
 
 Incr _year
 
 End If
 
 End If
 
 End If
 
 If _year > 99 Then
 
 Exit Do
 
 End If
 
 
 
 Lsecofday = Secofday()
 
 Lsyssec = Syssec()
 
 Bweekday = Dayofweek()
 
 Wdayofyear = Dayofyear()
 
 Wsysday = Sysday()
 
 
 
 Cls
 Locate 1 , 4
 Lcd Time$ ; " "
 Locate 2 , 4
 Lcd Date$ ; " "
 
 
 End If
 
 
 
 
 Loop
 
 '************************************************************************************
 
 '''''''''''''''''''''''''''''''''Конец программы'''''''''''''''''''''''''''''''''''''
 
 '************************************************************************************
 
 Sub On_off
 
 For A = 0 To 7
 
 Reset Porta.a : Reset Portb.a : Reset Portc.a : Reset Portd.a
 
 Next A
 
 End Sub
 
 
 
 Sub P_plis
 
 Cls
 
 Cursor Off
 
 Waitms 30
 
 Locate 1 , 4
 
 Lcd "Bѕepeг P+ "                                        'Вперед
 
 Set Prav_vpered : Set Lev_vpered                        'Включаем М1, М2 вперед
 
 Waitms 180                                              'и через 180 мс выключаем
 
 Reset Prav_vpered : Reset Lev_vpered
 
 Waitms 20
 
 Set Lev_nazad : Set Prav_nazad                          'Тормозим в течение 20 мс
 
 Waitms 20
 
 Reset Lev_nazad : Reset Prav_nazad
 
 End Sub
 
 
 
 Sub P_minys
 
 Cls
 
 Cursor Off
 
 Waitms 30
 
 Locate 1 , 4
 
 Lcd "Ha·aг P-"                                          'Назад
 
 Set Prav_nazad : Set Lev_nazad                          'Включаем М1, М2 назад
 
 Waitms 180                                              'и через 180 мс выключаем
 
 Reset Prav_nazad : Reset Lev_nazad
 
 Waitms 20
 
 Set Prav_vpered : Set Lev_vpered                        'Тормозим в течение 20 мс
 
 Waitms 20
 
 Reset Prav_vpered : Reset Lev_vpered
 
 End Sub
 
 
 
 Sub Vol_plis
 
 Cls
 
 Cursor Off
 
 Waitms 30
 
 Locate 1 , 4
 
 Lcd "Haѕpaіo VOL+"                                    'Направо
 
 Set Prav_vpered : Set Lev_nazad                       'Включаем M1 назад, М2 вперед
 
 Waitms 80                                             'и через 80 мс выключаем
 
 Reset Prav_vpered : Reset Lev_nazad
 
 Waitms 20
 
 Set Prav_nazad : Set Lev_nazad                        'Тормозим в течение 20 мс
 
 Waitms 20
 
 Reset Prav_nazad : Reset Lev_vpered
 
 End Sub
 
 
 
 Sub Vol_minys
 
 Cls
 
 Cursor Off
 
 Waitms 30
 
 Locate 1 , 4
 
 Lcd "Ha»eіo VOL-"                                   'Налево
 
 Set Prav_nazad : Set Lev_vpered                     'Включаем M1 назад, М2 вперед
 
 Waitms 80                                           'и через 80 мс выключаем
 
 Reset Prav_nazad : Reset Lev_vpered
 
 Waitms 20
 
 Set Prav_vpered : Set Lev_nazad                     'Тормозим в течение 20 мс
 
 Waitms 20
 
 Reset Prav_vpered : Reset Lev_nazad
 
 End Sub
 
 
 
 
 
 Sub Zariad
 
 Cls
 
 Cursor Off
 
 Waitms 30
 
 Volt = W / 10.35
 
 Lcd "Ёpoіepєa ·apЗгa"                               'Проверка заряда
 
 W = Getadc(0)                                       'считываем результат с пина 0 порта А.
 
 Lowerline                                           ' позиция курсора
 
 Lcd "AбЁ(0):" ; Volt ; " %"                         'АЦП
 
 Waitms 2000
 
 End Sub
 
 
 
 
 
 Sub Leds                                           ' Включаем подсветку робота
 
 Set Led                                           'Включаем фары и мигаем 2 раза
 
 Waitms 300
 
 Reset Led
 
 Waitms 150
 
 Set Led
 
 Waitms 300
 
 Reset Led
 
 Waitms 150
 
 Set Led
 
 End Sub
 
 
 
 Sub 4asiki
 
 
 
 End Sub
 
 
 
 'only when we use I2C for the clock we need to set the clock date time
 
 
 #if Clockmode = 0
 
 
 'called from datetime.lib
 
 Dim Weekday As Byte
 
 Getdatetime:
 
 I2cstart                                                    ' Generate start code
 
 I2cwbyte Ds1307w                                            ' send address
 
 I2cwbyte 0                                                  ' start address in 1307
 
 
 
 I2cstart                                                    ' Generate start code
 
 I2cwbyte Ds1307r                                            ' send address
 
 I2crbyte _sec , Ack
 
 I2crbyte _min , Ack                                         ' MINUTES
 
 I2crbyte _hour , Ack                                        ' Hours
 
 I2crbyte Weekday , Ack                                      ' Day of Week
 
 I2crbyte _day , Ack                                         ' Day of Month
 
 I2crbyte _month , Ack                                       ' Month of Year
 
 I2crbyte _year , Nack                                       ' Year
 
 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                                                    ' Generate start code
 
 I2cwbyte Ds1307w                                            ' send address
 
 I2cwbyte 4                                                  ' starting address in 1307
 
 I2cwbyte _day                                               ' Send Data to SECONDS
 
 I2cwbyte _month                                             ' MINUTES
 
 I2cwbyte _year                                              ' Hours
 
 I2cstop
 
 Return
 
 
 
 Settime:
 
 _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
 
 
 
 #endif
 
 
 
 
 
 Weekdays:
 
 Data "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday" , "Saturday" , "Sunday"
 
 
 
 
 
 
 
А вот пример из хелпа 
- Код: Выделить всё • Развернуть
- 'name                     : datetime_test1,bas
 
 'copyright                : (c) 1995-2005, MCS Electronics
 
 'purpose                  : show how to use the Date-Time routines from the DateTime.Lib
 
 'micro                    : Mega103
 
 'suited for demo          : no
 
 'commercial addon needed  : no
 
 '-----------------------------------------------------------------------------------------
 
 
 
 $regfile = "m103def.dat"                                    ' specify the used micro
 
 $crystal = 4000000                                          ' used crystal frequency
 
 $baud = 19200                                               ' use baud rate
 
 $hwstack = 32                                               ' default use 32 for the hardware stack
 
 $swstack = 10                                               ' default use 10 for the SW stack
 
 $framesize = 40                                             ' default use 40 for the frame space
 
 
 
 Const Clockmode = 1
 
 'use i2c for the clock
 
 
 
 #if Clockmode = 1
 
 Config Clock = Soft                                         ' we use build in clock
 
 Disable Interrupts
 
 #else
 
 Config Clock = User                                         ' we use I2C for the clock
 
 'configure the scl and sda pins
 
 Config Sda = Portd.6
 
 Config Scl = Portd.5
 
 
 
 'address of ds1307
 
 Const Ds1307w = &HD0                                        ' Addresses of Ds1307 clock
 
 Const Ds1307r = &HD1
 
 #endif
 
 
 
 
 
 'configure the date format
 
 Config Date = Ymd , Separator = -                           ' ANSI-Format
 
 'This sample does not have the clock started so interrupts are not enabled
 
 ' Enable Interrupts
 
 
 
 'dim the used variables
 
 Dim Lvar1 As Long
 
 Dim Mday As Byte
 
 Dim Bweekday As Byte , Strweekday As String * 10
 
 Dim Strdate As String * 8
 
 Dim Strtime As String * 8
 
 Dim Bsec As Byte , Bmin As Byte , Bhour As Byte
 
 Dim Bday As Byte , Bmonth As Byte , Byear As Byte
 
 Dim Lsecofday As Long
 
 Dim Wsysday As Word
 
 Dim Lsyssec As Long
 
 Dim Wdayofyear As Word
 
 
 
 
 
 
 
 
 
 ' =================== DayOfWeek =============================================
 
 ' Example 1 with internal RTC-Clock
 
 
 
 _day = 4 : _month = 11 : _year = 2                          ' Load RTC-Clock for example - testing
 
 Bweekday = Dayofweek()
 
 Strweekday = Lookupstr(bweekday , Weekdays)
 
 Print "Weekday-Number of " ; Date$ ; " is " ; Bweekday ; " = " ; Strweekday
 
 
 
 
 
 ' Example 2 with defined Clock - Bytes (Day / Month / Year)
 
 Bday = 26 : Bmonth = 11 : Byear = 2
 
 Bweekday = Dayofweek(bday)
 
 Strweekday = Lookupstr(bweekday , Weekdays)
 
 Strdate = Date(bday)
 
 Print "Weekday-Number of Day=" ; Bday ; " Month=" ; Bmonth ; " Year=" ; Byear ; " is " ; Bweekday ; " (" ; Date(bday) ; ") = " ; Strweekday
 
 
 
 
 
 ' Example 3 with System Day
 
 Wsysday = 2000                                              ' that is 2005-06-23
 
 Bweekday = Dayofweek(wsysday)
 
 Strweekday = Lookupstr(bweekday , Weekdays)
 
 Print "Weekday-Number of System Day " ; Wsysday ; " (" ; Date(wsysday) ; ") is " ; Bweekday ; " = " ; Strweekday
 
 
 
 
 
 
 
 ' Example 4 with System Second
 
 Lsyssec = 123456789                                         ' that is 2003-11-29 at 21:33:09
 
 Bweekday = Dayofweek(lsyssec)
 
 Strweekday = Lookupstr(bweekday , Weekdays)
 
 Print "Weekday-Number of System Second " ; Lsyssec ; " (" ; Date(lsyssec) ; ") is " ; Bweekday ; " = " ; Strweekday
 
 
 
 
 
 
 
 
 
 ' Example 5 with Date-String
 
 Strdate = "04-11-02"                                        ' we have configured Date in ANSI
 
 Bweekday = Dayofweek(strdate)
 
 Strweekday = Lookupstr(bweekday , Weekdays)
 
 Print "Weekday-Number of " ; Strdate ; " is " ; Bweekday ; " = " ; Strweekday
 
 
 
 
 
 
 
 
 
 ' ================= Second of Day =============================================
 
 ' Example 1 with internal RTC-Clock
 
 _sec = 12 : _min = 30 : _hour = 18                          ' Load RTC-Clock for example - testing
 
 
 
 Lsecofday = Secofday()
 
 Print "Second of Day of " ; Time$ ; " is " ; Lsecofday
 
 
 
 
 
 ' Example 2 with defined Clock - Bytes (Second / Minute / Hour)
 
 Bsec = 20 : Bmin = 1 : Bhour = 7
 
 Lsecofday = Secofday(bsec)
 
 Print "Second of Day of Sec=" ; Bsec ; " Min=" ; Bmin ; " Hour=" ; Bhour ; " (" ; Time(bsec) ; ") is " ; Lsecofday
 
 
 
 
 
 ' Example 3 with System Second
 
 Lsyssec = 1234456789
 
 Lsecofday = Secofday(lsyssec)
 
 Print "Second of Day of System Second " ; Lsyssec ; "(" ; Time(lsyssec) ; ") is " ; Lsecofday
 
 
 
 
 
 ' Example 4 with Time - String
 
 Strtime = "04:58:37"
 
 Lsecofday = Secofday(strtime)
 
 Print "Second of Day of " ; Strtime ; " is " ; Lsecofday
 
 
 
 
 
 
 
 ' ================== System Second ============================================
 
 
 
 ' Example 1 with internal RTC-Clock
 
 ' Load RTC-Clock for example - testing
 
 _sec = 17 : _min = 35 : _hour = 8 : _day = 16 : _month = 4 : _year = 3
 
 
 
 Lsyssec = Syssec()
 
 Print "System Second of " ; Time$ ; " at " ; Date$ ; " is " ; Lsyssec
 
 
 
 
 
 ' Example 2 with with defined Clock - Bytes (Second, Minute, Hour, Day / Month / Year)
 
 Bsec = 20 : Bmin = 1 : Bhour = 7 : Bday = 22 : Bmonth = 12 : Byear = 1
 
 Lsyssec = Syssec(bsec)
 
 Strtime = Time(bsec)
 
 Strdate = Date(bday)
 
 Print "System Second of " ; Strtime ; " at " ; Strdate ; " is " ; Lsyssec
 
 
 
 
 
 ' Example 3 with System Day
 
 
 
 Wsysday = 2000
 
 Lsyssec = Syssec(wsysday)
 
 Print "System Second of System Day " ; Wsysday ; " (" ; Date(wsysday) ; " 00:00:00) is " ; Lsyssec
 
 
 
 
 
 ' Example 4 with Time and Date String
 
 Strtime = "10:23:50"
 
 Strdate = "02-11-29"                                        ' ANSI-Date
 
 Lsyssec = Syssec(strtime , Strdate)
 
 Print "System Second of " ; Strtime ; " at " ; Strdate ; " is " ; Lsyssec       ' 91880630
 
 
 
 
 
 
 
 
 
 ' ==================== Day Of Year =========================================
 
 ' Example 1 with internal RTC-Clock
 
 _day = 20 : _month = 11 : _year = 2                         ' Load RTC-Clock for example - testing
 
 Wdayofyear = Dayofyear()
 
 Print "Day Of Year of " ; Date$ ; " is " ; Wdayofyear
 
 
 
 
 
 ' Example 2 with defined Clock - Bytes (Day / Month / Year)
 
 Bday = 24 : Bmonth = 5 : Byear = 8
 
 Wdayofyear = Dayofyear(bday)
 
 Print "Day Of Year of Day=" ; Bday ; " Month=" ; Bmonth ; " Year=" ; Byear ; " (" ; Date(bday) ; ") is " ; Wdayofyear
 
 
 
 
 
 
 
 ' Example 3 with Date - String
 
 Strdate = "04-10-29"                                        ' we have configured ANSI Format
 
 Wdayofyear = Dayofyear(strdate)
 
 Print "Day Of Year of " ; Strdate ; " is " ; Wdayofyear
 
 
 
 
 
 ' Example 4 with System Second
 
 
 
 Lsyssec = 123456789
 
 Wdayofyear = Dayofyear(lsyssec)
 
 Print "Day Of Year of System Second " ; Lsyssec ; " (" ; Date(lsyssec) ; ") is " ; Wdayofyear
 
 
 
 
 
 ' Example 5 with System Day
 
 Wsysday = 3000
 
 Wdayofyear = Dayofyear(wsysday)
 
 Print "Day Of Year of System Day " ; Wsysday ; " (" ; Date(wsysday) ; ") is " ; Wdayofyear
 
 
 
 
 
 ' =================== System Day ======================================
 
 ' Example 1 with internal RTC-Clock
 
 _day = 20 : _month = 11 : _year = 2                         ' Load RTC-Clock for example - testing
 
 Wsysday = Sysday()
 
 Print "System Day of " ; Date$ ; " is " ; Wsysday
 
 
 
 
 
 ' Example 2 with defined Clock - Bytes (Day / Month / Year)
 
 Bday = 24 : Bmonth = 5 : Byear = 8
 
 Wsysday = Sysday(bday)
 
 Print "System Day of Day=" ; Bday ; " Month=" ; Bmonth ; " Year=" ; Byear ; " (" ; Date(bday) ; ") is " ; Wsysday
 
 
 
 
 
 ' Example 3 with Date - String
 
 Strdate = "04-10-29"
 
 Wsysday = Sysday(strdate)
 
 Print "System Day of " ; Strdate ; " is " ; Wsysday
 
 
 
 ' Example 4 with System Second
 
 Lsyssec = 123456789
 
 Wsysday = Sysday(lsyssec)
 
 Print "System Day of System Second " ; Lsyssec ; " (" ; Date(lsyssec) ; ") is " ; Wsysday
 
 
 
 
 
 
 
 ' =================== Time ================================================
 
 ' Example 1: Converting defined Clock - Bytes (Second / Minute / Hour) to Time - String
 
 Bsec = 20 : Bmin = 1 : Bhour = 7
 
 Strtime = Time(bsec)
 
 Print "Time values: Sec=" ; Bsec ; " Min=" ; Bmin ; " Hour=" ; Bhour ; " converted to string " ; Strtime
 
 
 
 
 
 ' Example 2: Converting System Second  to Time - String
 
 Lsyssec = 123456789
 
 Strtime = Time(lsyssec)
 
 Print "Time of Systemsecond " ; Lsyssec ; " is " ; Strtime
 
 
 
 
 
 ' Example 3: Converting Second of Day to Time - String
 
 Lsecofday = 12345
 
 Strtime = Time(lsecofday)
 
 Print "Time of Second of Day " ; Lsecofday ; " is " ; Strtime
 
 
 
 
 
 ' Example 4: Converting System Second to defined Clock - Bytes (Second / Minute / Hour)
 
 
 
 Lsyssec = 123456789
 
 Bsec = Time(lsyssec)
 
 Print "System Second " ; Lsyssec ; " converted to Sec=" ; Bsec ; " Min=" ; Bmin ; " Hour=" ; Bhour ; " (" ; Time(lsyssec) ; ")"
 
 
 
 
 
 
 
 ' Example 5: Converting Second of Day to defined Clock - Bytes (Second / Minute / Hour)
 
 Lsecofday = 12345
 
 Bsec = Time(lsecofday)
 
 Print "Second of Day " ; Lsecofday ; " converted to Sec=" ; Bsec ; " Min=" ; Bmin ; " Hour=" ; Bhour ; " (" ; Time(lsecofday) ; ")"
 
 
 
 ' Example 6: Converting Time-string to defined Clock - Bytes (Second / Minute / Hour)
 
 Strtime = "07:33:12"
 
 Bsec = Time(strtime)
 
 Print "Time " ; Strtime ; " converted to Sec=" ; Bsec ; " Min=" ; Bmin ; " Hour=" ; Bhour
 
 
 
 
 
 
 
 ' ============================= Date ==========================================
 
 
 
 ' Example 1: Converting defined Clock - Bytes (Day / Month / Year) to Date - String
 
 Bday = 29 : Bmonth = 4 : Byear = 12
 
 Strdate = Date(bday)
 
 Print "Dat values: Day=" ; Bday ; " Month=" ; Bmonth ; " Year=" ; Byear ; " converted to string " ; Strdate
 
 
 
 
 
 ' Example 2: Converting from System Day to Date - String
 
 Wsysday = 1234
 
 Strdate = Date(wsysday)
 
 Print "System Day " ; Wsysday ; " is " ; Strdate
 
 
 
 
 
 ' Example 3: Converting from System Second to Date String
 
 Lsyssec = 123456789
 
 Strdate = Date(lsyssec)
 
 Print "System Second " ; Lsyssec ; " is " ; Strdate
 
 
 
 
 
 ' Example 4: Converting SystemDay to defined Clock - Bytes (Day / Month / Year)
 
 
 
 Wsysday = 2000
 
 Bday = Date(wsysday)
 
 Print "System Day " ; Wsysday ; " converted to Day=" ; Bday ; " Month=" ; Bmonth ; " Year=" ; Byear ; " (" ; Date(wsysday) ; ")"
 
 
 
 
 
 ' Example 5: Converting Date - String to defined Clock - Bytes (Day / Month / Year)
 
 Strdate = "04-08-31"
 
 Bday = Date(strdate)
 
 Print "Date " ; Strdate ; " converted to Day=" ; Bday ; " Month=" ; Bmonth ; " Year=" ; Byear
 
 
 
 
 
 ' Example 6: Converting System Second to defined Clock - Bytes (Day / Month / Year)
 
 Lsyssec = 123456789
 
 Bday = Date(lsyssec)
 
 Print "System Second " ; Lsyssec ; " converted to Day=" ; Bday ; " Month=" ; Bmonth ; " Year=" ; Byear ; " (" ; Date(lsyssec) ; ")"
 
 
 
 
 
 
 
 ' ================ Second of Day elapsed
 
 
 
 Lsecofday = Secofday()
 
 _hour = _hour + 1
 
 Lvar1 = Secelapsed(lsecofday)
 
 Print Lvar1
 
 
 
 Lsyssec = Syssec()
 
 _day = _day + 1
 
 Lvar1 = Syssecelapsed(lsyssec)
 
 Print Lvar1
 
 
 
 
 
 Looptest:
 
 
 
 ' Initialising for testing
 
 _day = 1
 
 _month = 1
 
 _year = 1
 
 _sec = 12
 
 _min = 13
 
 _hour = 14
 
 
 
 
 
 
 
 Do
 
 If _year > 50 Then
 
 Exit Do
 
 End If
 
 
 
 _sec = _sec + 7
 
 If _sec > 59 Then
 
 Incr _min
 
 _sec = _sec - 60
 
 End If
 
 
 
 _min = _min + 2
 
 If _min > 59 Then
 
 Incr _hour
 
 _min = _min - 60
 
 End If
 
 
 
 _hour = _hour + 1
 
 If _hour > 23 Then
 
 Incr _day
 
 _hour = _hour - 24
 
 End If
 
 
 
 _day = _day + 1
 
 
 
 
 
 If _day > 28 Then
 
 Select Case _month
 
 Case 1
 
 Mday = 31
 
 Case 2
 
 Mday = _year And &H03
 
 If Mday = 0 Then
 
 Mday = 29
 
 Else
 
 Mday = 28
 
 End If
 
 Case 3
 
 Mday = 31
 
 Case 4
 
 Mday = 30
 
 Case 5
 
 Mday = 31
 
 Case 6
 
 Mday = 30
 
 Case 7
 
 Mday = 31
 
 Case 8
 
 Mday = 31
 
 Case 9
 
 Mday = 30
 
 Case 10
 
 Mday = 31
 
 Case 11
 
 Mday = 30
 
 Case 12
 
 Mday = 31
 
 End Select
 
 If _day > Mday Then
 
 _day = _day - Mday
 
 Incr _month
 
 If _month > 12 Then
 
 _month = 1
 
 Incr _year
 
 End If
 
 End If
 
 End If
 
 If _year > 99 Then
 
 Exit Do
 
 End If
 
 
 
 Lsecofday = Secofday()
 
 Lsyssec = Syssec()
 
 Bweekday = Dayofweek()
 
 Wdayofyear = Dayofyear()
 
 Wsysday = Sysday()
 
 
 
 
 
 Print Time$ ; " " ; Date$ ; " " ; Lsecofday ; " " ; Lsyssec ; " " ; Bweekday ; " " ; Wdayofyear ; " " ; Wsysday
 
 
 
 
 
 Loop
 
 End
 
 
 
 
 
 'only when we use I2C for the clock we need to set the clock date time
 
 #if Clockmode = 0
 
 'called from datetime.lib
 
 Dim Weekday As Byte
 
 Getdatetime:
 
 I2cstart                                                    ' Generate start code
 
 I2cwbyte Ds1307w                                            ' send address
 
 I2cwbyte 0                                                  ' start address in 1307
 
 
 
 I2cstart                                                    ' Generate start code
 
 I2cwbyte Ds1307r                                            ' send address
 
 I2crbyte _sec , Ack
 
 I2crbyte _min , Ack                                         ' MINUTES
 
 I2crbyte _hour , Ack                                        ' Hours
 
 I2crbyte Weekday , Ack                                      ' Day of Week
 
 I2crbyte _day , Ack                                         ' Day of Month
 
 I2crbyte _month , Ack                                       ' Month of Year
 
 I2crbyte _year , Nack                                       ' Year
 
 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                                                    ' Generate start code
 
 I2cwbyte Ds1307w                                            ' send address
 
 I2cwbyte 4                                                  ' starting address in 1307
 
 I2cwbyte _day                                               ' Send Data to SECONDS
 
 I2cwbyte _month                                             ' MINUTES
 
 I2cwbyte _year                                              ' Hours
 
 I2cstop
 
 Return
 
 
 
 Settime:
 
 _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
 
 
 
 #endif
 
 
 
 
 
 Weekdays:
 
 Data "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday" , "Saturday" , "Sunday"
 
Вот. Зарание спасибо тем кто откликнется  
