© MCS Electronics, 1995-2007
BDayMonthYear |
A Byte, which holds the Day-value followed by Month(Byte) and Year |
|
(Byte) |
StrDate |
A String, which holds a Date-String in the format specified in the |
|
CONFIG DATE statement |
WSysDay |
A Variable (Word) which holds a System Day (SysDay) |
LsysSec |
A Variable (Long) which holds a System Second (SysSec) |
|
|
The Function can be used with five different kind of Input:
1.Without any parameter. The internal Date-values of SOFTCLOCK (_day, _month, _year) are used.
2.With a user defined date array. It must be arranged in same way (Day, Month, Year) as the internal SOFTCLOCK date. The first Byte (Day) is the input by this kind of usage. So the Day of the Year can be calculated of every date.
3.With a Date-String. The date-string must be in the Format specified in the Config Date Statement.
4.With a System Day Number (WORD)
5.With a System Second Number (LONG)
The Return-Value is in the Range of 0 to 364 (365 in a leap year). January the first starts with 0.
The function is valid in the 21th century (from 2000-01-01 to 2099-12-31).
See also
Date and Time Routines , SysSec , SysDay
Example
See DayOfWeek
DATE$
Action
Internal variable that holds the date.
Syntax
DATE$ = "mm/dd/yy" var = DATE$
Remarks
The DATE$ variable is used in combination with the CONFIG CLOCK directive.
The CONFIG CLOCK statement will use the TIMER0 or TIMER2 in asynchrone mode to create an interrupt that occurs every second. In this interrupt routine the_Sec, _Min and _Hour variables are updated. The _dat, _month and _year variables are also updated. The date format is in the same format as in VB.
© MCS Electronics, 1995-2007
When you assign DATE$ to a string variable these variables are assigned to the DATE$ variable.
When you assign the DATE$ variable with a constant or other variable, the _day, _month and _year variables will be changed to the new date.
The only difference with VB is that all data must be provided when assigning the date. This is done for minimal code. You can change this behavior of course.
The async timer is only available in the M103, 90S8535, M163 and M32(3), Mega128, Mega64, Mega8. For other chips it will not work.
As new chips are launched by Atmel, and support is added by MCS, the list above might not be complete. It is intended to serve as an example for chips with a timer that can be used in asynchrone mode. So when your micro has a timer that can be used in asynchrone mode, it should work.
Do not confuse DATE$ with the DATE function.
ASM
The following ASM routines are called.
When assiging DATE$ : _set_date (calls _str2byte)
When reading DATE$ : _make_dt (calls _byte2str)
See also
TIME$ , CONFIG CLOCK , DATE
Example
'----------------------------------------------------------------------------- |
|
------------ |
: megaclock.bas |
'name |
'copyright |
: (c) 1995-2005, MCS Electronics |
'purpose |
: shows the new TIME$ and DATE$ reserved variables |
'micro |
: Mega103 |
'suited for demo |
: yes |
'commercial addon needed |
: no |
'-----------------------------------------------------------------------------
------------
$regfile = "m103def.dat" |
' specify the used |
micro |
' used crystal |
$crystal = 4000000 |
frequency |
' use baud rate |
$baud = 19200 |
$hwstack = 32 |
' default use 32 |
for the hardware stack |
' default use 10 |
$swstack = 10 |
for the SW stack |
' default use 40 |
$framesize = 40 |
for the frame space |
|
'With the 8535 and timer2 or the Mega103 and TIMER0 you can 'easily implement a clock by attaching a 32768 Hz xtal to the timer 'And of course some BASCOM code
'This example is written for the STK300 with M103
Enable Interrupts
© MCS Electronics, 1995-2007 |
|
'[configure LCD] |
'address for E and |
$lcd = &HC000 |
RS |
'address for only |
$lcdrs = &H8000 |
E |
'nice display from |
Config Lcd = 20 * 4 |
bg micro |
'we run it in bus |
Config Lcdbus = 4 |
mode and I hooked up only db4-db7 |
'tell about the |
Config Lcdmode = Bus |
bus mode |
|
'[now init the clock] |
' ANSI-Format |
Config Date = Mdy , Separator = / |
Config Clock = Soft |
'this is how |
simple it is |
|
'The above statement will bind in an ISR so you can not use the TIMER anymore! 'For the M103 in this case it means that TIMER0 can not be used by the user anymore
'assign the date to the reserved date$ 'The format is MM/DD/YY
Date$ = "11/11/00"
'assign the time, format in hh:mm:ss military format(24 hours)
'You may not use 1:2:3 !! adding support for this would mean overhead 'But of course you can alter the library routines used
Time$ = "02:20:00" |
|
'--------------------------------------------------- |
|
'clear the LCD display |
|
Cls |
|
Do |
'cursor home |
Home |
Lcd Date$ ; " " ; Time$ |
'show the date and |
time |
|
Loop |
|
'The clock routine does use the following internal variables: '_day , _month, _year , _sec, _hour, _min
'These are all bytes. You can assign or use them directly _day = 1
'For the _year variable only the year is stored, not the century
End
DATE
Action
Returns a date-value (String or 3 Bytes for Day, Month and Year) depending of the Type of the Target
Syntax
bDayMonthYear = Date(lSysSec)
bDayMonthYear = Date(lSysDay)
bDayMonthYear = Date(strDate)
page -434-
© MCS Electronics, 1995-2007
strDate = Date(lSysSec) strDate = Date(lSysDay) strDate = Date(bDayMonthYear)
Remarks
StrDate |
A Date-String in the format specified in the |
|
CONFIG DATE statement |
LsysSec |
A LONG – variable which holds the System Second (SysSec = |
|
TimeStamp) |
LsysDay |
A WORD – variable, which holds then System Day (SysDay) |
BDayMonthYear A BYTE – variable, which holds Days, followed by Month (Byte) and Year (Byte)
Converting to String:
The target string must have a length of at least 8 Bytes, otherwise SRAM after the target-string will be overwritten.
Converting to Soft clock date format (3 Bytes for Day, Month and Year):
Three Bytes for Day, Month and Year must follow each other in SRAM. The variable-name of the first Byte, the one for Day must be passed to the function.
See also
Date and Time Routines , DAYOFYEAR, SYSDAY
Example
'----------------------------------------------------------------------------- |
|
------------ |
: datetime_test1,bas |
'name |
'copyright |
: (c) 1995-2005, MCS Electronics |
'purpose |
: show how to use the Date-Time routines from the |
DateTime.Lib |
: Mega103 |
'micro |
'suited for demo |
: no |
'commercial addon needed |
: no |
'----------------------------------------------------------------------------- |
|
------------ |
|
$regfile = "m103def.dat" |
' specify the used |
micro |
' used crystal |
$crystal = 4000000 |
frequency |
' use baud rate |
$baud = 19200 |
$hwstack = 32 |
' default use 32 |
for the hardware stack |
' default use 10 |
$swstack = 10 |
for the SW stack |
' default use 40 |
$framesize = 40 |
for the frame space |
|
Const Clockmode = 1 |
|
© MCS Electronics, 1995-2007 |
|
'use i2c for the clock |
|
#if Clockmode = 1 |
' we use build in |
Config Clock = Soft |
clock |
|
Disable Interrupts |
|
#else |
' we use I2C for |
Config Clock = User |
the clock |
|
'configure the scl and sda pins |
|
Config Sda = Portd.6 |
|
Config Scl = Portd.5 |
|
'address of ds1307 |
' Addresses of |
Const Ds1307w = &HD0 |
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) |
|