Microcontroladores PIC... :-p sólo tú puedes solucionar ese problema.
Pero tu problema del lado de la PC con VB, tiene varias soluciones:
Puedes declarar dos tipos de datos, uno que contenga un integer, y otro con contenga dos bytes. De este modo, usas LSet para embutir un tipo de dato en el otro, y ya tienes tu dato de 16bits. Otra opción es usar la API, para acomodar byte a byte sobre el integer. El siguiente code te puede servir...
Código:
Option Explicit
Private Declare Sub RtlMoveMemory Lib "kernel32" ( _
ByRef Destination As Any, _
ByRef Source As Any, _
ByVal Length As Long)
Private Type WORD_BYTE
ByteLo As Byte
ByteHi As Byte
End Type
Private Type WORD_INT
IntFull As Integer
End Type
Private Sub Form_Load()
Dim tmpInt As Integer
Dim tmpWrdInt As WORD_INT
Dim tmpWrdByt As WORD_BYTE
Dim tmpBytArr(1) As Byte
'*******************************************
'Usand LSet y definiciones de tipos de datos
'Fácil de usar, pero hay que definir dos
'tipos de datos para simular algo que se
'puede hacer en C con uniones
'*******************************************
'Asignar el byte bajo
tmpWrdByt.ByteLo = 0
'Asignar el byte alto
tmpWrdByt.ByteHi = 4
'&H0400
'Embutirlo en la variable int
LSet tmpWrdInt = tmpWrdByt
Debug.Print tmpWrdInt.IntFull
'*******************************************
'Usando la API
'Hay que declarar la llamada a la función
'RtlMoveMemory y tener cuidado al
'utilizarla o puedes causar un
'error grave en el programa.
'*******************************************
tmpBytArr(0) = 0
tmpBytArr(1) = 4
'&H0400
'Acomodar el primer byte en el byte bajo del int
RtlMoveMemory tmpInt, tmpBytArr(0), 1&
'Acomodar el segundo byte en el byte alto del int
RtlMoveMemory ByVal VarPtr(tmpInt) + 1, tmpBytArr(1), 1&
Debug.Print tmpInt
End Sub