B&K 4070A Manual Do Utilizador

Página de 88
 
 
BK Precision 4070A User Manual Rev.2.2 
67 
 
    IF PointVal < 0 THEN PointVal = PointVal + 2: j = 32768! 
    a = INT(PointVal * j)             ' Get a number 0 to 65535 
 
    a = INT(a / 16)      ' Mask off lower 4 bits ($FFF0) 
    a = a * 16 
 
   IF PointNumber = 2 THEN a = a OR &H8  ' Set SYNC Out bit for second point 
   a$ = HEX$(a)                          ' Convert the integer to hexadecimal 
 
' For negative values, the HEX$ fctn will return a 32 bit value, ie $FFFF FFD8, 
' so chop off all but the last 4 chars 
 
  IF a < 0 THEN a$ = RIGHT$(a$, 4) 
  PRINT #1, a$                 ' Send hex point to 4070A 
  RETURN 
 
'------------------------- Send Binary data to 4070A ------------------------ 
' This is the fastest way to send points to the 4070A since it transfers 
'  the data point with only 2 characters. It is also the least forgiving 
'  as far as getting the data sent correctly. 

'  Each data point is a 16 bit word which is sent to the 4070A in two bytes. 
'  The high byte is sent first, followed by the low byte. 
'  The 16 bit value is in "two's complement" format, which represents a number 
'   from -1.0 to +1.0 as follows: 

'                 8000 ---- E000 ---- FFFF,0 ---- 4000 ---- 7FFF 
'                 -1.0      -.5        0.0         +.5      +1.0 

' Although a 16 bit value is sent to the 4070A, the Arbitrary Waveform system 
'  uses a 12 bit D/A converter, so not all 16 bits are used. Only the uppermost 
'  12 bits are used to form the arbitrary waveform point. 


' Rules for Binary format: 

' 1. IMMEDIATELY after the "B" character in the header the 4070A expects the  
'    first high byte of data point 1. No whitespace is allowed after the "B"  
'    in Binary mode. 

' 2. The high byte of each data point is sent first, followed by the low byte. 

' 3. The SYNC Out output is controlled by bit #3 in the low byte. If this bit  
'    is set to 1, SYNC Out is set high. If this bit is set to 0, SYNC Out 
'    is set low. 
'------------------------------------------------------------------------------ 
 
SendBinary: 
 
   IF PointNumber = 1 THEN PRINT #1, "WB";  ' Put header info before 1st data 
                                           ' point. Must not have CR or LF after 
 
' Convert the value in PointVal to a two's complement hex number 
    j = 32767 
    IF PointVal < 0 THEN PointVal = PointVal + 2: j = 32768! 
    
    a = INT(PointVal * j)             ' Convert -1.0,+1.0 to 0,65535 
 
    a = INT(a / 16)                   ' Only the uppermost 12 bits are used, so 
    a = a * 16                        ' Mask off the lower 4 bits (AND fff0) 
 
   IF PointNumber = 2 THEN a = a OR &H8  ' Set SYNC Out bit for second point 
 
' If you let Basic send a 16 bit variable to a port, it will send the low byte