ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.06.2025

Просмотров: 8348

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

© MCS Electronics, 1995-2007

For the AVR-DOS filesystem, MODE may be INPUT, OUTPUT, APPEND or BINARY.

Channel The number of the channel to open. Must be a positive constant >0.

For the AVR-DOS filesystem, the channel may be a positive constant or a numeric variable. Note that the AVD-DOS filesystem uses real filehandles. The software UART does not use real file handles.

UART

The statements that support the device arePRINT , INPUT , INPUTHEX , INKEY and WAITKEY

Every opened device must be closed using the CLOSE #channel statement. Of course, you must use the same channel number.

In DOS the #number is a DOS file number that is passed to low level routines. In BASCOM the channel number is only used to identify the channel but there are no file handles. So opening a channel, will not use a channel. And closing the channel is only needed to make the syntax compatible with VB.

What is the difference?

In VB you can close the channel in a subroutine like this:

OPEN "com1:" for binary as #1

Call test

Close #1

End

Sub test

Print #1, "test"

End Sub

This will work since the filenumber is a real variable in the OS.

In BASCOM it will not work : the CLOSE must come after the last I/O statement:

OPEN "com1:" for binary as #1

Call test

End

Sub test

Print #1, "test"

End Sub

Close #1

The INPUT statement in combination with the software UART, will not echo characters back because there is no default associated pin for this.

AVR-DOS

The AVR-DOS file system uses real file handles. This means that the CLOSE statement can be used at any place in your program just as with VB.

page -582-

© MCS Electronics, 1995-2007

See also

CLOSE , CRYSTAL, PRINT, LINE INPUT , LOC , LOF , EOF

Example

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

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

: open.bas

'name

'copyright

: (c) 1995-2005, MCS Electronics

'purpose

: demonstrates software UART

'micro

: Mega48

'suited for demo

: yes

'commercial addon needed

: no

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

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

$regfile = "m48def.dat"

' specify the used

micro

' used crystal

$crystal = 10000000

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

Dim B As Byte

'Optional you can fine tune the calculated bit delay 'Why would you want to do that?

'Because chips that have an internal oscillator may not

'run at the speed specified. This depends on the voltage, temp etc. 'You can either change $CRYSTAL or you can use

'BAUD #1,9610

'In this example file we use the DT006 from www.simmstick.com 'This allows easy testing with the existing serial port

'The MAX232 is fitted for this example.

'Because we use the hardware UART pins we MAY NOT use the hardware UART 'The hardware UART is used when you use PRINT, INPUT or other related statements

'We will use the software UART.

Waitms 100

'open channel for output

Open "comd.1:19200,8,n,1" For Output As #1 Print #1 , "serial output"

'Now open a pin for input

Open "comd.0:19200,8,n,1" For Input As #2

'since there is no relation between the input and output pin 'there is NO ECHO while keys are typed

Print #1 , "Number" 'get a number

Input #2 , B 'print the number

Print #1 , B

page -583-


© MCS Electronics, 1995-2007

'now loop until ESC is pressed

'With INKEY() we can check if there is data available

'To use it with the software UART you must provide the channel

Do

'store in byte

B = Inkey(#2)

'when the value > 0 we got something

If B > 0 Then

'print the

Print #1 , Chr(b)

character

End If

Loop Until B = 27

Close #2

Close #1

'OPTIONAL you may use the HARDWARE UART

'The software UART will not work on the hardware UART pins 'so you must choose other pins

'use normal hardware UART for printing 'Print B

'When you dont want to use a level inverter such as the MAX-232 'You can specify ,INVERTED :

'Open "comd.0:300,8,n,1,inverted" For Input As #2

'Now the logic is inverted and there is no need for a level converter 'But the distance of the wires must be shorter with this

End

OUT

Action

Sends a byte to a hardware port or internal or external memory address.

Syntax

OUT address, value

Remarks

Address

The address where to send the byte to in the range

of 0-FFFF hex.

Value

The variable or value to output.

The OUT statement can write a value to any AVR memory location.

It is advised to use Words for the address. An integer might have a negative value and will write of course to a word address. So it will be 32767 higher as supposed. This because an integer has it's most significant bit set when it is negative.

To write to XRAM locations you must enable the External RAM access in the Compiler Chip Options.

page -584-


© MCS Electronics, 1995-2007

You do not need to use OUT when setting a port variable. Port variables and other registers of the micro can be set like this : PORTB = value , where PORTB is the name of the register.

See also

INP , PEEK , POKE

Example

Out &H8000 , 1 'send 1 to the databus(d0-d7) at hexaddress 8000

End

PEEK

Action

Returns the content of a register.

Syntax

var = PEEK( address )

Remarks

Var

Numeric variable that is assigned with the content of the memory

location address

Address

Numeric variable or constant with the address location.(0-31)

Peek() will read the content of a register.

Inp() can read any memory location

See also

POKE , CPEEK , INP , OUT

Example

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

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

: peek.bas

'name

'copyright

: (c) 1995-2005, MCS Electronics

'purpose

: demonstrates PEEk, POKE, CPEEK, INP and OUT

'micro

: Mega48

'suited for demo

: yes

'commercial addon needed

: no

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

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

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

page -585-


© MCS Electronics, 1995-2007

for the SW stack

' default use 40

$framesize = 40

for the frame space

Dim I As Integer , B1 As Byte

'dump internal memory

For I = 0 To 31

'only 32 registers

in AVR

'get byte from

B1 = Peek(i)

internal memory

";

Print Hex(b1) ; "

'Poke I , 1

'write a value into memory

Next

'new line

Print

'be careful when writing into internal memory !!

'now dump a part ofthe code-memory(program)

For I = 0 To 255

'get byte from

B1 = Cpeek(i)

internal memory

";

Print Hex(b1) ; "

Next

'note that you can not write into codememory!!

Out &H8000 , 1

'write 1 into XRAM

at address 8000

'return value from

B1 = Inp(&H8000)

XRAM

Print B1

End

POKE

Action

Write a byte to an internal register.

Syntax

POKE address , value

Remarks

Address

Numeric variable with the address of the memory location to set. (0-31)

Value

Value to assign. (0-255)

See also

PEEK , CPEEK , INP , OUT

Example

Poke 1 , 1 'write 1 to R1

End

page -586-