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

© MCS Electronics, 1995-2007

'perform another ATR

Bcreset

Input "expression " , S

Bccall Calc(0 , &H20 , 1 , 0 , 0 , S) Print "Answer : " ; S

'----and now perform an ATR as a function

Dim Buf(25) As Byte , I As Byte

Buf(1) = Bcreset()

For I = 1 To 25

Print I ; " " ; Hex(buf(i))

Next

'typical returns : 'TS = 3B

'T0 = EF 'TB1 = 00 'TC1 = FF

'TD1 = 81 T=1 indication

'TD2 = 31 TA3,TB3 follow T=1 indicator

'TA3 = 50

or

20

IFSC ,50 =Compact Card, 20 = Enhanced Card

'TB3 = 45

BWT blocl waiting time

64 20 5A

43 31

32

33

00 00

'T1 -Tk = 42

61

73

69

63

43

61

72

'

B

a

s

i

c

C

a

r

d

Z

C 1

2

3

 

'and another test

'define the procedure in the BasicCard program

Bcdef Paramtest(byte , Word , Long )

'dim some variables

Dim B As Byte , W As Word , L As Long

'assign the variables

B = 1 : W = &H1234 : L = &H12345678

Bccall Paramtest(0 , &HF6 , 1 , 0 , 0 , B , W , L) Print Hex(sw1) ; Spc(3) ; Hex(sw2)

'and see that the variables are changed by the BasicCard ! Print B ; Spc(3) ; Hex(w) ; " " ; Hex(l)

'try the echotest command

 

Bcdef Echotest(byte)

 

Bccall Echotest(0 , &HC0 , &H14 , 1 , 0 , B)

 

Print B

'end program

End

CONFIG CLOCK

Action

Configures the timer to be used for the TIME$ and DATE$ variables.

Syntax

CONFIG CLOCK = soft | USER [, GOSUB = SECTIC]

page -321-

© MCS Electronics, 1995-2007

Remarks

Soft

Sectic

Use SOFT for using the software based clock routines. Use USERto write/use your own code in combination with an I2C clock chip for example.

This option allows to jump to a user routine with the label sectic.

Since the interrupt occurs every second you may handle various tasks in the sectic label. It is important that you use the name SECTIC and that you return with a RETURN statement from this label.

The usage of the optional SECTIC routine will use 30 bytes of the hardware stack. This option only works with the SOFT clock mode. It does not work in USER mode.

When you use the CONFIG CLOCK directive the compiler will DIM the following variables automatic : _sec , _min , _hour, _day , _month , _year

The variables TIME$ and DATE$ will also be dimensioned. These are special variables since they are treated different. See TIME$ and DATE$.

The _sec, _min and other internal variables can be changed by the user too. But of course changing their values will change the DATE$/TIME$ variables.

The compiler also creates an ISR that gets updates once a second. This works only for the 8535, M163 and M103 and M603, or other AVR chips that have a timer that can work in asynchrony mode.

For the 90S8535, timer2 is used. It can not be used my the user anymore! This is also true for the other chips async timer.

Notice that you need to connect a 32768 Hz crystal in order to use the timer in async mode, the mode that is used for the clock timer.

When you choose the USER option, only the internal variables are created. With the USER option you need to write the clock code yourself.

See the datetime.bas example that shows how you can use a DS1307 clock chip for the date and time generation.

Numeric Values to calculate with Date and Time:

SecOfDay: (Type LONG) Seconds elapsed since Midnight. 00:00:00 start with 0 to 85399 at 23:59:59.

SysSec: (Type LONG) Seconds elapsed since begin of century (at 2000-01-01!). 00:00:00 at 2000-01-01 start with 0 to 2147483647 (overflow of LONG-Type) at 2068-01-19 03:14:07

DayOfYear: (Type WORD) Days elapsed since first January of the current year.

First January start with 0 to 364 (365 in a leap year)

SysDay: (Type WORD) Days elapsed since begin of century (at 2000-01-01!). 2000-01-01 starts with 0 to 36524 at 2099-12-31

DayOfWeek: (Type Byte) Days elapsed since Monday of current week. Monday start with 0 to Sunday = 6

With the numeric type calculations with Time and date are possible. Type 1 (discrete Bytes) and 2 (Strings) can be converted to an according numeric value. Than Seconds (at SecOfDay and SysSec) or Days (at DayOfYear, SysDay), can be added or subtracted. The Result can be converted back.

page -322-

© MCS Electronics, 1995-2007

See also

TIME$ , DATE$ , CONFIG DATE

ASM

The following ASM routines are called from datetime.lib _soft_clock. This is the ISR that gets called once per second.

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

'[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!

page -323-

© MCS Electronics, 1995-2007

'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

CONFIG CLOCKDIV

Action

Sets the clock divisor.

Syntax

CONFIG CLOCKDIV = constant

Remarks

constant The clockdivision factor to use. Possible values are 1 , 2 , 4 , 8 ,16 , 32 ,64 , 128 and 256.

The options to set the clock divisor is available in most new chips. Under normal conditions the clock divisor is one. Thus an oscillator value of 8 Mhz will result in a systemclock of 8 Mhz. With a clock divisor of 8, you would get a system clock of 1 Mhz.

Low speeds can be used to generate an accurate system frequency and for low power consumption.

Some chips have a 8 or 16 division enabled by default by a fuse bit.

You can then reprogram the fuse bit or you can set the divisor from code.

When you set the clock divisor take care that you adjust the $CRYSTAL directive also. $CRYSTAL specifies the clock frequency of the system. So with 8 Mhz clock and divisor of 8 you would specify $CRYSTAL = 1000000.

page -324-