Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BASCOM AVR, help reference (2007).PDF
Скачиваний:
292
Добавлен:
12.08.2013
Размер:
17.02 Mб
Скачать

© MCS Electronics, 1995-2007

 

For Count = 1 To 2

'for number of

data items

 

Read A : Print Count ; " " ; A

 

Next

 

Restore Dta3

 

Read S : Print S

 

Read S : Print S

 

Restore Dta4

'long type

Read L : Print L

'demonstration of readlabel

' location is used

Dim W As Iram Word At 8 Overlay

by restore pointer

 

'note that W does not use any RAM it is an overlayed pointer to the data

pointer

' loadlabel

W = Loadlabel(dta1)

expects the labelname

 

Read B1

 

Print B1

 

End

Dta1:

Data &B10 , &HFF , 10

Dta2:

Data 1000% , -1%

Dta3:

Data "Hello" , "World"

'Note that integer values (>255 or <0) must end with the %-sign 'also note that the data type must match the variable type that is 'used for the READ statement

Dta4:

Data 123456789&

'Note that LONG values must end with the &-sign

'Also note that the data type must match the variable type that is used 'for the READ statement

DAYOFWEEK

Action

Returns the Day of the Week of a Date.

Syntax

Target = DayOfWeek()

Target = DayOfWeek(bDayMonthYear)

Target = DayOfWeek(strDate)

Target = DayOfWeek(wSysDay)

Target = DayOfWeek(lSysSec)

Remarks

Target

A Byte – variable, that is assigned with the day of the week

 

 

page -422-

 

 

 

© MCS Electronics, 1995-2007

BDayMonthYear

A Byte – variable, 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 Word – variable, which holds the System Day (SysDay)

LSysSec

A Long – variable, which holds the 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 Week 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.

5.With a System Second - Number

The Return-Value is in the range of 0 to 6, Monday 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 , CONFIG DATE , CONFIG CLOCK, SYSDAY, SYSSEC

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

 

'use i2c for the clock

 

#if Clockmode = 1

' we use build in

Config Clock = Soft

 

page -423-

© MCS Electronics, 1995-2007

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

page -424-

©MCS Electronics, 1995-2007

'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

' we have

Strdate = "04-11-02"

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

' Load RTC-Clock

_sec = 12 : _min = 30 : _hour = 18

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

page -425-

© MCS Electronics, 1995-2007

/ 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"

' ANSI-Date

Strdate = "02-11-29"

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

page -426-

©MCS Electronics, 1995-2007

'=================== 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)

page -427-

© MCS Electronics, 1995-2007

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

page -428-

© MCS Electronics, 1995-2007

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

page -429-

© MCS Electronics, 1995-2007

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:

' Generate start

I2cstart

code

' send address

I2cwbyte Ds1307w

I2cwbyte 0

' start address in

1307

 

I2cstart

' Generate start

code

' send address

I2cwbyte Ds1307r

I2crbyte _sec , Ack

' MINUTES

I2crbyte _min , Ack

I2crbyte _hour , Ack

' Hours

I2crbyte Weekday , Ack

' Day of Week

I2crbyte _day , Ack

' Day of Month

page -430-