Measurement Computing Personal488 rev.3.0 For DOS & Windows 3.Xi User Manual

Page 95

Advertising
background image

8H. Turbo C

II. SOFTWARE GUIDES - 8. Driver488/DRV

II-80

Personal488 User’s Manual, Rev. 3.0

int cklpint(void)
int _false_(void)
int (*ieee_cki)(void) = _false_
void no_op(void)
void (*ieee_isr)(void) = no_op

Driver488/DRV signals interrupts, which are enabled with the

ARM

command, by causing the light

pen signal to appear “true.” The

CKLPINT

checks that Driver488/DRV is able to service an

interrupt (the response from

IOCTL_RD

is

0

) and then checks if an interrupt is pending by

checking the light pen status. The

IEEEWT

routine (described below) calls the function pointed to

by

IEEE_CKI

to determine if an

IEEE

interrupt needs to be serviced. The

IEEE_CKI

normally

points to the function

_false_

which always returns zero (

0

). To enable interrupt checking

IEEE_CKI

must be redirected to point to

CKLPINT

. Interrupt checking is disabled by pointing

IEEE_CKI

back to

_false_

. Once an interrupt has been detected,

IEEEWT

calls the interrupt

service routine pointed to by

IEEE_ISR

to service the interrupt. The

IEEE_ISR

initially points to

no_op

, a function that does nothing, but it may be redirected as needed to specify the appropriate

interrupt service routine for each part of a program.

•

_IEEEWT

and

_IEEERD

are very similar to the unbuffered _

WRITE

and _

READ

routines provided

in the C library.

int _ieeewt(int handle,char chars[])
int _ieeerd(int handle,char chars[],int size)
#define ieeewt(chars) _ieeewt(ieee,chars)
#define ieeerd(chars) _ieeerd(ieee,chars,sizeof(chars))

The

_IEEEWT

differs from _

WRITE

in that it checks for Driver488/DRV interrupts before writing,

determines the number of characters to write by using

STRLEN

, and prints an error message if an

error has occurred during writing. The

_IEEERD

differs from _

READ

only in that it prints an error

message if an error has occurred during reading.

IEEEWT

and

IEEERD

(without the leading

underscore) write and read to the file

IEEE

. Notice that

IEEERD

uses

SIZEOF

to determine the

number of characters to read. This only works if

SIZEOF

can determine the number of bytes in the

receive buffer,

chars

. This means

chars

must be an array of known size, for example,

char chars[256]

, not

char*chars

.

•

IEEEPRTF

and

IEEESCNF

are IEEE 488 versions of

PRINTF

and

SCANF

, respectively.

int ieeeprtf(char *format, ...)
int ieeescnf(char *format, ...)

The

IEEEPRTF

accepts a format string and a list of arguments. It formats its arguments according

to the specified format and sends the formatted string to Driver488/DRV. The

IEEESCNF

accepts

a format string and pointers (to the types specified in the format string). It reads a string of up to
256 bytes from Driver488/DRV, terminates it with a zero, converts it according to the format
string, and places the converted values into the variables pointed to by the specified pointers.

•

RAWMODE

sets the file specified by

handle

for “raw mode” I/O.

int rawmode(int handle);

In “raw mode” MS-DOS does not interpret the characters received from the file. In particular,

control-Z

is not taken as end-of-file. “Raw mode” is usually appropriate for IEEE 488

communications because it does not interfere with the transfer of binary data and because it is
much more efficient than “non-raw mode” I/O.

•

IEEEINIT

establishes communications with Driver488/DRV and configures it for use with C.

int ieeeinit(void);

It first opens the file

IEEE

for both reading and writing and puts the file descriptor into

IEEE

. It

then puts the file into “raw mode”. Driver488/DRV is then initialized by sending the

IOCTL

“BREAK”

and

RESET

commands. Normal output from C is terminated by a new-line (line feed)

character, and returned strings should be terminated by a null, so

EOL OUT LF

and

EOL IN $0

commands are then issued. Finally a

FILL ERROR

command is issued to enable

SEQUENCE - NO

DATA AVAILABLE

error detection. If an error is detected during any of these commands,

IEEEINIT

returns a

-1

, otherwise it returns a zero (

0

).

Advertising