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

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

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

Добавлен: 12.06.2025

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

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

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

© MCS Electronics, 1995-2007

X must point to the target string, Z must point to the source string.

The generated ASM code : (can be different depending on the micro used ) ;##### Z = Ucase(s)

Ldi R30,$60

Ldi R31,$00 ; load constant in register Ldi R26,$6D

Rcall _Ucase

Example

$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

Dim S As String * 12 , Z As String * 12

S = "Hello World"

Z = Lcase(s)

Print Z

Z = Ucase(s)

Print Z

End

UDPREAD

Action

Reads data via UDP protocol.

Syntax

Result = UDPREAD( socket , var, bytes)

Remarks

Result

A byte variable that will be assigned with 0, when no errors occured.

When an error occurs, the value will be set to 1.

When there are not enough bytes in the reception buffer, the routine will

wait until there is enough data or the socket is closed.

socket

The socket number you want to read data from(0-3).

Var

The name of the variable that will be assigned with the data from the socket.

Bytes

The number of bytes to read.

Reading strings is not supported for UDP.

When you need to read a string you can use the OVERLAY option of DIM.

There will be no check on the length so specifying to receive 2 bytes for a byte will

page -701-


© MCS Electronics, 1995-2007

overwrite the memory location after the memory location of the byte.

The socketstat function will return a length of the number of bytes + 8 for UDP. This because UDP sends also a 8 byte header. It contains the length of the data, the IP number of the peer and the port number.

The UDPread function will fill the following variables with this header data:

Peersize, PeerAddress, PeerPort

You need to DIM these variables in your program when you use UDP.

Use the following line :

Dim Peersize As Integer , Peeraddress As Long , Peerport As Word

Make sure you maintain the shown order.

See also

CONFIG TCPIP, GETSOCKET , SOCKETCONNECT, SOCKETSTAT , TCPWRITE, TCPWRITESTR, CLOSESOCKET , SOCKETLISTEN , UDPWRITE, UDPWRITESTR

Example

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

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

: udptest.bas

'name

'copyright

: (c) 1995-2005, MCS Electronics

'purpose

: start the easytcp.exe program after the chip is

programmed and

press UDP button

'

'micro

: Mega161

'suited for demo

: no

'commercial addon needed

: yes

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

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

$regfile = "m161def.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 Sock_stream = $01

' Tcp

Const Sock_dgram = $02

' Udp

Const Sock_ipl_raw = $03

' Ip Layer Raw

Sock

' Mac Layer Raw

Const Sock_macl_raw = $04

Sock

' Confirm Socket

Const Sel_control = 0

Status

' Confirm Tx Free

Const Sel_send = 1

Buffer Size

' Confirm Rx Data

Const Sel_recv = 2

page -702-


© MCS Electronics, 1995-2007

Size

'socket status

' Status Of

Const Sock_closed = $00

Connection Closed

' Status Of Arp

Const Sock_arp = $01

Const Sock_listen = $02

' Status Of

Waiting For Tcp Connection Setup

' Status Of

Const Sock_synsent = $03

Setting Up Tcp Connection

' Status Of

Const Sock_synsent_ack = $04

Setting Up Tcp Connection

' Status Of

Const Sock_synrecv = $05

Setting Up Tcp Connection

' Status Of Tcp

Const Sock_established = $06

Connection Established

' Status Of

Const Sock_close_wait = $07

Closing Tcp Connection

' Status Of

Const Sock_last_ack = $08

Closing Tcp Connection

' Status Of

Const Sock_fin_wait1 = $09

Closing Tcp Connection

' Status Of

Const Sock_fin_wait2 = $0a

Closing Tcp Connection

' Status Of

Const Sock_closing = $0b

Closing Tcp Connection

' Status Of

Const Sock_time_wait = $0c

Closing Tcp Connection

' Status Of

Const Sock_reset = $0d

Closing Tcp Connection

' Status Of Socket

Const Sock_init = $0e

Initialization

' Status Of Udp

Const Sock_udp = $0f

Const Sock_raw = $10

' Status of IP RAW

$lib "tcpip.lbx"

' specify the

tcpip library

' display a

Print "Init , set IP to 192.168.0.8"

message

' before we use

Enable Interrupts

config tcpip , we need to enable the interrupts

Config Tcpip = Int0 , Mac = 12.128.12.34.56.78 , Ip = 192.168.0.8 , Submask = 255.255.255.0 , Gateway = 0.0.0.0 , Localport = 1000 , Tx = $55 , Rx = $55

'Use the line below if you have a gate way

'Config Tcpip = Int0 , Mac = 12.128.12.34.56.78 , Ip = 192.168.0.8 , Submask = 255.255.255.0 , Gateway = 192.168.0.1 , Localport = 1000 , Tx = $55 , Rx = $55

Dim Idx As Byte

' socket number

Dim Result As Word

' result

Dim S(80) As Byte

Dim Sstr As String * 20

' temp bytes

Dim Temp As Byte , Temp2 As Byte

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

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

'When you use UDP, you need to dimension the following variables in exactly the same order !

Dim Peersize As Integer , Peeraddress As Long , Peerport As Word

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

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

' a handy function

Declare Function Ipnum(ip As Long) As String

'like with TCP, we need to get a socket first

page -703-


© MCS Electronics, 1995-2007

'note that for UDP we specify sock_dgram

Idx = Getsocket(idx , Sock_dgram , 5000 , 0) ' get socket for UDP mode, specify port 5000

Print "Socket " ; Idx ; " " ; Idx

'UDP is a connection less protocol which means that you can not listen, connect or can get the status

'You can just use send and receive the same way as for TCP/IP. 'But since there is no connection protocol, you need to specify the destination IP address and port

'So compare to TCP/IP you send exactly the same, but with the addition of the IP and PORT

Do

Temp = Inkey()

' wait for

terminal input

' ESC pressed

If Temp = 27 Then

Sstr = "Hello"

Result = Udpwritestr(192.168.0.3 , 5000 , Idx , Sstr , 255)

End If

' get number of

Result = Socketstat(idx , Sel_recv)

bytes waiting

If Result > 0 Then

Print "Bytes waiting : " ; Result

'the first 8 bytes

Temp2 = Result - 8

are always the UDP header which consist of the length, IP number and port

address

' read the result

Temp = Udpread(idx , S(1) , Result)

For Temp = 1 To Temp2

' print result

Print S(temp) ; " " ;

Next

Print

' these are

Print Peersize ; " " ; Peeraddress ; " " ; Peerport

assigned when you use UDPREAD

' print IP in

Print Ipnum(peeraddress)

usual format

'

Result = Udpwrite(192.168.0.3 , Peerport , Idx , S(1) , Temp2)

write the received data back

End If

Loop

'the sample above waits for data and send the data back for that reason temp2 is subtracted with 8, the header size

'this function can be used to display an IP number in normal format

Function Ipnum(ip As Long) As String

Local T As Byte , J As Byte

Ipnum = ""

For J = 1 To 4 T = Ip And 255

Ipnum = Ipnum + Str(t)

If J < 4 Then Ipnum = Ipnum + "."

Shift Ip , Right , 8

Next

End Function End

UDPWRITE

Action

Write UDP data to a socket.

page -704-