• Sábado 16 de Noviembre de 2024, 09:23

Autor Tema:  Transmitir Puerto Serie Modo Binario  (Leído 2336 veces)

sirespi

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
Transmitir Puerto Serie Modo Binario
« en: Viernes 27 de Agosto de 2004, 12:09 »
0
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

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
Re: Transmitir Puerto Serie Modo Binario
« Respuesta #1 en: Viernes 27 de Agosto de 2004, 13:38 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
Re: Transmitir Puerto Serie Modo Binario
« Respuesta #2 en: Viernes 27 de Agosto de 2004, 16:58 »
0
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
  1.  
  2. For x = 1 To 5 Step 1
  3.    var(x - 1) = Mid(bin, x, 1)
  4. Next x
  5.  
  6.  

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
  1.  
  2.  
  3.  
  4. Private Sub Form_Load()
  5.    Dim var(15) As Integer
  6.    Dim x As Integer
  7.    Dim Valor As Long
  8.    Dim bin As String
  9.    Dim potencia
  10.    Dim Agregado As String
  11.  
  12. bin = "11111"
  13. 'bin = "11"
  14. 'bin = "110"
  15. 'bin = "11110000111001"
  16. 'bin = "1000000000000000"
  17.  
  18. Agregado = AgregarCero(bin)
  19.  
  20. For x = 16 To 1 Step -1
  21.    var(x - 1) = Val(Mid(Agregado, x, 1)) 'Notar el uso de la función val
  22. Next x
  23.  
  24. Valor = 0
  25. 'For x = 16 To 1 Step -1
  26. For x = 1 To 16 ' es lo mismo que lo anterior
  27.    Valor = Valor + (var(x - 1) * (2 ^ (16 - x)))
  28. Next x
  29. Text1.Text = Valor
  30.  
  31. End Sub
  32.  
  33.  
  34. Private Function AgregarCero(NumBin As String) As String
  35.    Dim longitud As Integer
  36.    Dim ParteNueva As String
  37.    Dim NuevoNum As String
  38.    Dim k As Integer
  39.   
  40.    longitud = Len(NumBin)
  41.   
  42.    For k = 1 To 16 - longitud
  43.       ParteNueva = ParteNueva & "0"
  44.    Next k
  45.       NuevoNum = ParteNueva + NumBin
  46.       AgregarCero = NuevoNum
  47. End Function
  48.  
  49.  
  50.  
  51.  

Bueno, espero que esto te resulte de utilidad. Revísalo y luego me dices.
Suerte.

sirespi

  • Miembro activo
  • **
  • Mensajes: 64
    • Ver Perfil
Re: Transmitir Puerto Serie Modo Binario
« Respuesta #3 en: Viernes 27 de Agosto de 2004, 23:30 »
0
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.