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

© MCS Electronics, 1995-2007

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

READEEPROM

Action

Reads the content from the DATA EEPROM and stores it into a variable.

Syntax

READEEPROM var , address

Remarks

Var

The name of the variable that must be stored

Address

The address in the EEPROM where the data must be read from.

 

 

This statement is provided for backwards compatibility with BASCOM-8051. You can also use the ERAM variable instead of READEEPROM :

Dim V as Eram Byte 'store in EEPROM

Dim B As Byte 'normal variable

B = 10

V = B 'store variable in EEPROM

B = V 'read from EEPROM

When you use the assignment version, the data types must be equal!

According to a data sheet from ATMEL, the first location in the EEPROM with address 0, can be overwritten during a reset so don't use it.

You may also use ERAM variables as indexes. Like :

Dim ar(10) as Eram Byte

When you omit the address label in consecutive reads, you must use a new READEEPROM statement. It will not work in a loop:

Readeeprom B , Label1

Print B

Do

Readeeprom B

Print B Loop

Until B = 5

This will not work since there is no pointer maintained. The way it will work :

ReadEEprom B , Label1 ' specify label

ReadEEPROM B ' read next address in EEPROM

ReadEEPROM B ' read next address in EEPROM

page -608-

© MCS Electronics, 1995-2007

See also

WRITEEEPROM , $EEPROM

ASM

NONE

Example

'-----------------------------------------------------------------------------

 

------------

: eeprom2.bas

'name

'copyright

: (c) 1995-2005, MCS Electronics

'purpose

: shows how to use labels with READEEPROM

'micro

: Mega48

'suited for demo

: yes

'commercial addon needed

: no

'-----------------------------------------------------------------------------

------------

$regfile = "m48def.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

 

'first dimension a variable

Dim B As Byte

Dim Yes As String * 1

'Usage for readeeprom and writeeprom : 'readeeprom var, address

'A new option is to use a label for the address of the data

'Since this data is in an external file and not in the code the eeprom data 'should be specified first. This in contrast with the normal DATA lines which must

'be placed at the end of your program!!

'first tell the compiler that we are using EEPROM to store the DATA $eeprom

'the generated EEP file is a binary file.

'Use $EEPROMHEX to create an Intel Hex file usable with AVR Studio. '$eepromhex

'specify a label Label1:

Data 1 , 2 , 3 , 4 , 5 Label2:

Data 10 , 20 , 30 , 40 , 50

'Switch back to normal data lines in case they are used $data

'All the code above does not generate real object code 'It only creates a file with the EEP extension

page -609-

 

© MCS Electronics, 1995-2007

'Use the new label option

 

Readeeprom B , Label1

'prints 1

Print B

'Succesive reads will read the next value

'But the first time the label must be specified so the start is known

Readeeprom B

'prints 2

Print B

Readeeprom B , Label2

'prints 10

Print B

Readeeprom B

'prints 20

Print B

'And it works for writing too :

'but since the programming can interfere we add a stop here Input "Ready?" , Yes

B = 100

Writeeeprom B , Label1 B = 101

Writeeeprom B

'read it back

 

Readeeprom B , Label1

'prints 1

Print B

'Succesive reads will read the next value

 

'But the first time the label must be specified so the start is known

Readeeprom B

'prints 2

Print B

End

 

READMAGCARD

Action

Read data from a magnetic card.

Syntax

READMAGCARD var , count , 5|7

Remarks

Var

A byte array the receives the data.

Count

A byte variable that returns the number of bytes read.

5|7

A numeric constant that specifies if 5 or 7 bit coding is used.

 

 

There can be 3 tracks on a magnetic card.

Track 1 stores the data in 7 bit including the parity bit. This is handy to store alpha numeric data.

On track 2 and 3 the data is stored with 5 bit coding.

The ReadMagCard routine works with ISO7811-2 5 and 7 bit decoding.

The returned numbers for 5 bit coding are:

Returned

ISO characterT

 

 

page -610-

© MCS Electronics, 1995-2007

number

 

0

0

1

1

2

2

3

3

4

4

5

5

6

6

7

7

8

8

9

9

10

hardware control

11

start byte

12

hardware control

13

separator

14

hardware control

15

stop byte

 

 

Example

'-----------------------------------------------------------------------------

 

------------

: magcard.bas

'name

'copyright

: (c) 1995-2005, MCS Electronics

'purpose

: show you how to read data from a magnetic card

'micro

: Mega48

'suited for demo

: yes

'commercial addon needed

: no

'-----------------------------------------------------------------------------

 

------------

 

$regfile = "m48def.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

 

'[reserve some space]

Dim Ar(100) As Byte , B As Byte , A As Byte

'the magnetic card reader has 5 wires

'red

- connect to +5V

'black

- connect to GND

'yellow

- Card inserted signal CS

'green

- clock

'blue

- data

'You can find out for your reader which wires you have to use by connecting +5V

'And moving the card through the reader. CS gets low, the clock gives a clock pulse of equal pulses

'and the data varies

page -611-

© MCS Electronics, 1995-2007

'I have little knowledge about these cards and please dont contact me about magnectic readers

'It is important however that you pull the card from the right direction as I was doing it wrong for

'some time :-)

'On the DT006 remove all the jumpers that are connected to the LEDs

'[We use ALIAS to specify the pins and PIN register]

'all pins are

_mport Alias Pinb

connected to PINB

'data line (blue)

_mdata Alias 0

PORTB.0

'CS line (yellow)

_mcs Alias 1

PORTB.1

'clock line

_mclock Alias 2

(green) PORTB.2

 

Config Portb = Input

'we only need bit

0,1 and 2 for input

'make them high

Portb = 255

Do

'print a message

Print "Insert magnetic card"

Readmagcard Ar(1) , B , 5

'read the data

Print B ; " bytes received"

 

For A = 1 To B

'print the bytes

Print Ar(a);

Next

 

Print

 

Loop

 

'By sepcifying 7 instead of 5 you can read 7 bit data

 

REM

Action

Instruct the compiler that comment will follow.

Syntax

REM or '

Remarks

You can and should comment your program for clarity and your later sanity. You can use REM or ' followed by your comment.

All statements after REM or ' are treated as comments so you cannot use statements on the same line after a REM statement.

Block comments can be used too:

'( start block comment

print "This will not be compiled ') end block comment

page -612-