Saludos kano2468
Estuve revisando tus programas y noté que aún no incluyes la palabra de configuración el tus códigos.
Ahora más que nada es importante que la incluyas, pues cambiaste de 4MHz a 20MHz.
Y el compilador usará XT_OSC y necesitas usar HS_OSC
También estará el Watch Dog Timer habilitado, y eso te puede estar reseteando el microcontrolador.
Es recomendable habilitar el fuse PWRTE "Power Up Timer" para estabilizar voltajes al iniciar.
En cuanto al fuse BOREN "Brown-Out Reset" puede quedar habilitado.
Su uso provocará un reset cuando exista un bajo voltaje en la alimentación del PIC.
Por lo tanto, si tu fuente de alimentación es estable, y con suficiente amperaje, puede quedar habilitado.
Tienes que tener en cuenta esto cuando trabajas con la misma fuente para activar motores, válvulas, etc.
El símbolo $ usado en el Select Case puede ser cualquiera, ése es un símbolo muy usado, por eso lo usé.
Pero puedes usar el que quieras, no es para saber si el caractér es basura.
En ese caso lo que se utilizaría es la opción "Else".
Así cualquier dato no incluido en la selección, entrará en la parte contraria "Else".
Pasando al programa en Visual Basic, es recomendable el uso de
Option Explicit
Para esto tienes dos opciones...
Puedes escribir Option Explicit en la cabecera del programa, o ir al menú Herramientas/Opcio
nes...
Ahí seleccionas "Requerir declaración de variables"
Con esto obligas al compilador a que detecte los tipos de variables no declaradas en el programa.
Y en tu código existen errores por no usar esta sentencia.
Si miras bien tu programa, sobre todo en los bucles For del Timer1, verás que escribes... For y = o To 2
En vez de For y = 0 To 2
Te recomiendo que en vez de usar un timer, uses el evento OnComm del control MSComm32
Así la recepción de datos no estará limitada por la temporización de Timer1, y podrás tener más control.
Otra recomendación es que tengas un control sobre los posibles errores que puedan ocurrir.
Por ejemplo... ¿Qué pasaría si tu programa fuera ejecutado en una PC que no tiene puertos seriales?
Obviamente se producirá en error que terminará tu programa abruptamente. Y eso no es deseado.
En cuanto a hacer comparaciones con cadenas de texto, no lo veo funcional.
Solamente puedes guardar un byte dentro de la variable de recepción. Y en tu programa comparas cadenas.
Es mejor que envíes un caractér ó número, y posteriormente lo compares.
También te recomiendo que no diseñes formularios tan grandes, no todos tienen grandes resoluciones de pantalla.
Puedes hacer uso de las API de Windows para saber la resolución de la pantalla, y dar aviso al usuario.
Cuando un programa es mayor en tamaño que la resolución en pixeles de la pantalla, éste se sale.
Se pierde visibilidad de los controles, quedando incomodo para el usuario.
En estos casos lo que se hace, es crear formularios redimensionables que se puedan ajustar a la pantalla.
Trata en lo posible de no usar gráficos pesados, eso hace que tu programa ocupe mucha memoria.
Siempre son buen vistos los programas ligeros, de rápida carga, y menos consumo de recursos.
"Por eso me gustan los programas realizados en ensamblador de 32 bits"
MASM32
Nota que tu programa compilado "*.exe" pesa más de 4Mb y no tiene mucho código.
Eso es debido al uso de gráficos que puedes sustituir por mensajes, o imágenes GIF.
Ahora que si te gusta la programación gráfica puedes usar
DirectX para VB y verás mejores resultados.
Saludos y suerte.