Доброго времени суток формутчане , появился у меня еще один вопрос связный с подключением часовой микросхемы 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"
Вот. Зарание спасибо тем кто откликнется