Hi all,

I trying to send a two byte word down the pipe but I cannot get the received data to equal what's been sent. ASCII char are fine as each is one byte long. I can send a one byte number like 255 and all good. I'm not quite sure if I load a word variable with two bytes from the buffer, like word.byte0=buff[0], word.byte1=buff[2] is where the problem is? The number being transmitted is not ASCII but is a number 0 to FFFF, scratching my head now. Any ideas?

Thanks
John

Code:
asm
     __CONFIG    _CONFIG1L, _PLLDIV_1_1L & _CPUDIV_OSC1_PLL2_1L & _USBDIV_2_1L
   __CONFIG    _CONFIG1H, _FOSC_HSPLL_HS_1H
   __CONFIG    _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L & _VREGEN_ON_2L
   __CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
   __CONFIG    _CONFIG3H, _PBADEN_OFF_3H
   __CONFIG    _CONFIG4L, _LVP_OFF_4L & _XINST_OFF_4L
endasm
DEFINE OSC 48
 
INCLUDE "cdc_desc.bas" 'Descriptor file    for CDC    serial demo
;--- Setup Interrupts ------------------------------------------------------
INCLUDE "DT_INTS-18.bas"     ; Base Interrupt System
INCLUDE "ReEnterPBP-18.bas"  ; Include if using PBP interrupts
Include "modedefs.bas"
;------LCD -----//
' Set LCD Data port
DEFINE LCD_DREG PORTD
'     'Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_DBIT 4
'    ' Set LCD Register Select port
DEFINE LCD_RSREG PORTD
'     'Set LCD Register Select bit
DEFINE LCD_RSBIT 2
'      'Set LCD Enable port
DEFINE LCD_EREG PORTD
'     'Set LCD Enable bit
DEFINE LCD_EBIT 3
'      'Set LCD bus size (4 or 8 bits)
DEFINE LCD_BITS 4
'      'Set number of lines on LCD
DEFINE LCD_LINES 2
'      'Set command delay time in us
DEFINE LCD_COMMANDUS 2000
'     ' Set data delay time in us
DEFINE LCD_DATAUS 50
 
buffer Var byte[5]
buffer2 var BYTE[2]

cnt    Var    Byte

position var word

 
ASM                                        
INT_LIST  macro     ; IntSource,          Label,  Type, ResetFlag?
        INT_Handler     USB_INT,  _DoUSBSERVICE,   ASM,  yes
        INT_Handler     INT_INT,    _Handle_INT,   PBP,  yes
    endm
    INT_CREATE             ; Creates the Low Priority interrupt processor
    INT_ENABLE  USB_INT   ;we will do this after we initialize USB
    INT_ENABLE  INT_INT
ENDASM

;----[Initialise USB and Interrupts]----------------------------------------
    PAUSE 100                    ; Allow VUSB to stabilize
    USBINIT                      ; initialize the USB driver
    USBSERVICE                   ; service it once
    UIE = $7F                    ; enable USB interrupts
    UEIE = $9F                   ; enable USB Error interrupts
@   INT_ENABLE  USB_INT
;----[Main program loop]----------------------------------------------------
lcdout $FE, 1, "Begin"
pause 1000
Main:
    cnt = 2        ' Specify input buffer size

    USBIn 3, buffer2, cnt, main
'lcdout $FE, 1, str buffer2\4 'this displays ASCII ok provided cnt=4
position.byte0=buffer2[0]
position.byte1=buffer2[1] 
 
 lcdout $FE, 1, DEC position
 
outloop:
    USBOut 3, buffer2, 2, outloop
GOTO Main
;----[Interrupt handler -- Service USB]-------------------------------------
DoUSBSERVICE:
      USBSERVICE                   ; Run the SERVICE routines
@ INT_RETURN
;----[Interrupt handler -- INT]
Handle_INT:
 ; something here
@ INT_RETURN