BrunoF,
Muchas gracias, seguí tus recomendaciones y quedo bien de bien el programa (sos un grosso).
Explico como funciona todo el sistema (PIC 18F4550).
1 - Cuando la PC le manda 1<CR>, el PIC le responde 1<CR> he inmediatamente le me manda 510 muestras de los que tiene en el puerto B.
2 - El programa en VB6 numera los datos recibidos y los muestra en un textlist
3 - Cuando el PIC termina de mandar los datos queda a la espera, si le mando 1<CR> leer el paso 1.
Un detalle con el programa de VB6: cuando le pido al PIC que mande los datos (envía 1<CR> hacia el PIC), hay un temporizador que sigue enviando 1<CR> hasta que el PIC responde con 1<CR>.
Bueno, después de todas las recomendaciones que recibí el programa quedo así:
Option Explicit '
'-------------------Definición de variables-------------------
Dim entrada As String 'variable usada para los datos de entrada
Dim salida As String 'variable usada para los datos de salida
Dim n As Double 'variable contador de entrada
'-------------------Fin definición de variables-------------------
'-------------------Se carga la ventana---------------------------
Private Sub form_load()
salida = 0 'inicializo variables
entrada = 0 'inicializo variables
n = 0 'inicializo variables
tmrTimer.Enabled = False 'deshabilito el timer
lblEstado.Caption = "Bienvenido" 'mensaje de bienvenida
End Sub
'-------------------Fin carga de ventana--------------------------
'-------------------Cierro la ventana-----------------------------
Private Sub Form_Unload(Cancelar As Integer)
If MsgBox("¿Realmente desea salir?", vbYesNo Or _
vbQuestion Or vbDefaultButton1, "Confirmación") = vbNo Then 'msgbox con botónes si-no, con foco en no e icono de pregunta
If cmdCon.Caption = "Desconectar" Then 'si cerramos, mira si el puerto esta conectado para desconectarlo
puerto.PortOpen = False
Cancelar = True
Else
Cancelar = True
End If
Else
Cancelar = False 'si no cerramos el programa
End If
End Sub
'------------------fin cierro la ventana---------------------------
'-------------------Botón conectar--------------------------------
Private Sub cmdCon_Click()
On Error GoTo msgError 'sí hay un error llama a la etiqueta msgError
If cmdCon.Caption = "Conectar" Then 'si el botón conectar dice conectar
puerto.CommPort = txtCom 'utilizo el número de com escrito en la caja de texto
puerto.PortOpen = True 'abro el puerto de comunicaciónes
cmdCon.Caption = "Desconectar" 'cambio la escritura del botón conectar a Desconectar
lblEstado.Caption = "Puerto COM" & puerto.CommPort & " abierto" 'etiqueta estado con el mensaje del com abierto
Else
tmrTimer.Enabled = False 'deshabilito el timer
puerto.PortOpen = False 'cierro el puerto de comunicaciones
cmdCon.Caption = "Conectar" 'Cambio la escritura del botón a conectar
lblEstado.Caption = "Puerto COM" & puerto.CommPort & " cerrado" 'etiqueta estado con el mensaje del com cerrado
End If
Exit Sub
msgError: 'Etiqueta error
If Err.Number <> 0 Then
MsgBox "Se ha producido el siguiente error:" & vbCrLf & _
Err.Number & ", " & Err.Description, 48, "Oops! Falló...." 'msgbox que indica el error con el icono 48 (crítico)
End If
End Sub
'------------------Fin botón conectar------------------------------
'------------------botón recibir------------------------------------
Private Sub cmdRecibir_Click()
n = 0
If cmdCon.Caption = "Desconectar" Then 'si el botón conectar dice desconectar, entonces...
entrada = 0 'fuerzo entrada a 0 para que se envíe la solicitud de datos
tmrTimer.Enabled = True 'habilito el timer de envio de solicitud de datos
Else
MsgBox "Primero elija el puerto COM y luego presione conectar", 48, "No se ha conectado un puerto COM" 'si no me conecte me salta éste cartel
End If
End Sub
'-----------------fin Botón enviar---------------------------------
'-----------------Temporizador---------------------------------
Private Sub tmrTimer_Timer()
lblEstado.Caption = "Enviando pedido" 'label indica que se está enviando el pedido
puerto.Output = "1" + Chr(13) 'mándo 1 por el puerto más el caracter ASCII 13 <CR>
End Sub
'-----------------Fin Temporizador---------------------------------
'-----------------Botón Borrar-----------------------------------
Private Sub cmdReset_Click()
n = 0 'inicializo n
lstRecibido.Clear 'limpio la lista, queda en blanco
End Sub
'-----------------Fin botón borrar--------------------------------
'-----------------Procedimiento al recibir datos---------------------------------
Private Sub puerto_OnComm() 'procedimiento que se ejecuta cada vez que hay un evento en el puerto serie
If puerto.CommEvent = comEvReceive Then
entrada = puerto.Input 'lo que llega lo mando a la variable entrada
If entrada = "1" & vbCr Then 'la variable entrada es 1<CR>....
tmrTimer.Enabled = False 'deshabilito el timer
lblEstado.Caption = "confirmación OK" 'el label me indica que recibio la confirmación
Else
AnalizeAsyncBuffer (entrada) 'enviar trama a ser analizada...
End If
End If
End Sub
'-----------------Fin Procedimiento al recibir datos---------------------------------
'-----------------Procedimiento que analiza los datos de entrada---------------------------------
Public Sub AnalizeAsyncBuffer(ByVal inpBuff As String)
Static step As Integer
Static msgTmp As String
Dim i As Integer
For i = 1 To Len(inpBuff) 'desde 1 hasta el número de caracteres que contenga entrada
Select Case Mid(inpBuff, i, 1) 'revisa cada caracter recibido
Case "0" To "9" 'casos en el que el caracter es un valor de 0 al 9
If step < 3 Then
msgTmp = msgTmp & Mid(inpBuff, i, 1)
step = step + 1
Else 'trama invalida. reiniciar...
msgTmp = vbNullString
step = 0
End If
Case vbLf
If step = 3 Then
step = step + 1
Else
msgTmp = vbNullString 'trama invalida. reiniciar...
step = 0
End If
Case vbCr
If step = 4 Then
AddIncomingData (msgTmp)
msgTmp = vbNullString 'trama invalida. reiniciar...
step = 0
End If
Case Else
msgTmp = vbNullString 'trama invalida. reiniciar...
step = 0
End Select
Next
End Sub
Private Sub AddIncomingData(ByVal dataStr As String)
n = n + 1 'incremento n para contar los datos que me llegan
lstRecibido.AddItem n & " - " & dataStr, 0 'agrego los datos a la lista
End Sub
Me quedan comentar alguna lineas.
Muchas gracias a todo por sus aportes. Doy por solucionado el problema, aunque si tienen algún otro aporte es más que bienvenido.
Un Abrazo!
PD: les dejo una captura de la ventana del programa.