Programación General > Visual Basic 6.0 e inferiores

 Transmitir Puerto Serie Modo Binario

(1/1)

sirespi:
Muy buenas, a ver si me podeis echar un cable. Intentare ser claro.

Necesito comunicarme con un pic mediante el puerto serie, con un programa de visual. Tengo todo ya en la mente pensado pero me surge la siguiente duda.Estoy usando visual basic 6, y por supuesto, el componente MSCOMM. Se que el pic al que me conecto, solo puede receibir 0 y 1. Entonces mi duda es la sigueinte. Segun he leido, una propiedad de este componente en la version 6 en inputmode, que permite modificar si se envia texto o binario. Yo hasta ahora, cuando usaba el puerto serie, si queria enviar algo ponia una cadena. En este caso, supongamos que quiero enviar 4 bits, ej:1010. SI dejo la propiedad inputmode a 0 y pongo MSCOMM.Output="1010" me lo pillaria el micro??? O tengo que poner la propiedad a 1??? SI la pongo a uno vale la misma orden MSCOMM.Output="1010" o se tiene que enviar de otra manera.

Lo miso me pasa para recibir , si el me manda 0 o 1, como se rellena mi buffer de entrada, con 0 y 1, o tengo que tocar algo para que me los coja en binario y no en ascii

Igual me he liado un poco al contaroslo. Por ultimo, y suponiendo que por fin logre recibir 0 y 1, imaginaos que recibo la cadena 1011. Quiero pasarla a decimal, tengo una funcioncilla por aqui que deberia hacermelo, pero no me rula. Me podeis poner algun codigo para pasar esa cadena de binario a decimal??? Luego sino, si tengo mas tiempo (estoy en el curro) os pongo mi funcion y me decis en que puede estar mal.


Un saludo y muchas gracias por todo. Saludos.

sirespi:
Bueno a ver, os pongo mi codigo. Suponiendo que la variable bin tiene los numero sen binario que me llegan por el puerto serie, con este codigo me convierte bien de binario a decimal pero solo para 5 bits, y yo necesito que lo haga para 16, es decir, los for  irian de 1 a 16, pero en cuanto pongo 6 o mas, casca. POr que???


Private Sub Form_Load()
Dim var(4) As Integer
Dim x As Integer
Dim Valor As Integer
Dim bin As String
bin = "11111"

For x = 1 To 5 Step 1
    var(x - 1) = Mid(bin, x, 1)
Next x

Valor = 0
For x = 1 To 5 Step 1
    Valor = Valor + (var(x - 1) * (2 ^ (5 - x)))
Next x
Text1.Text = Valor
End Sub


un saludo y gracias

DiabloRojo:
Qué tal sirespi?
Creo que el error está en la forma en que asignas cada elemento de la variable bin a la matríz. Tu colocas:


--- Código: Text --- For x = 1 To 5 Step 1   var(x - 1) = Mid(bin, x, 1)Next x  
Si por ejemplo bin="11" (3 en decimal) tendrías como resultado:

1 1 0 0 0   (24 en decimal)

que es muy distinto en binario a esto:

0 0 0 1 1   (3 en decimal)


Aquí te envío un ejemplo basado en tu código:


--- Código: Text ---   Private Sub Form_Load()   Dim var(15) As Integer   Dim x As Integer   Dim Valor As Long   Dim bin As String   Dim potencia   Dim Agregado As String bin = "11111"'bin = "11"'bin = "110"'bin = "11110000111001"'bin = "1000000000000000" Agregado = AgregarCero(bin) For x = 16 To 1 Step -1   var(x - 1) = Val(Mid(Agregado, x, 1)) 'Notar el uso de la función valNext x Valor = 0'For x = 16 To 1 Step -1For x = 1 To 16 ' es lo mismo que lo anterior   Valor = Valor + (var(x - 1) * (2 ^ (16 - x)))Next xText1.Text = Valor End Sub  Private Function AgregarCero(NumBin As String) As String   Dim longitud As Integer   Dim ParteNueva As String   Dim NuevoNum As String   Dim k As Integer      longitud = Len(NumBin)      For k = 1 To 16 - longitud      ParteNueva = ParteNueva & "0"   Next k      NuevoNum = ParteNueva + NumBin      AgregarCero = NuevoNumEnd Function    
Bueno, espero que esto te resulte de utilidad. Revísalo y luego me dices.
Suerte.

sirespi:
Bueno a ver DiabloRojo en pocas palabras........ ERES EL PUTO AMO.

Lo acabo de probar y funciona de #### madre. No se como lo has hecho porque son las 12 de la noche y acabo de llegar de currar, pero lo he probado y funciona de #### madre. Mañana me lo mirare con mas calma.

Acabas de ascender muchos puestos en mi lista de heroes. Ya si fueras capaz de decirme lo del puerto serie, como transmitir en binario en lugar de ascii, ya serias mi heroe absoluto.

Ahora en serio, mil gracias. Esto lo estoy haciendo para el proyecto fin de carrera, y entre el tutor que me esta metiendo prisa, el curro y lo paquete que soy, la llevo negra. Me acabas de ayuda un monton, de verdad que muchisimas gracias, me has salvado media vida. Si puedo hacer algo por ti sera un placer.

De nuevo muchisimas gracias.

Saludos.

Navegación

[0] Índice de Mensajes

Ir a la versión completa