TODOPIC

Lenguajes de programación para PC => Visual Basic => Mensaje iniciado por: ENO45 en 18 de Enero de 2006, 22:58:00

Título: envio de un Byte por Puerto serie
Publicado por: ENO45 en 18 de Enero de 2006, 22:58:00
tengo que enviar un byte por el puerto serie lo que hago es esto

Private Sub boton1_Click()
MSComm1.Output = "00010011"
End Sub

no lo pude probar porque no compre el max232 quiero saber si esta bien y si manda ese byte
Título: RE: envio de un Byte por Puerto serie
Publicado por: Colores en 19 de Enero de 2006, 19:05:00
No, no está bien. Lo que vas a conseguir con eso es que envíe "00010011" como texto, no como el valor 19 en binario. MsComm solo envía cadenas de texto.
Título: RE: envio de un Byte por Puerto serie
Publicado por: ENO45 en 20 de Enero de 2006, 01:12:00
y como hago para enviar el 00010001 en binario
Título: RE: envio de un Byte por Puerto serie
Publicado por: ENO45 en 20 de Enero de 2006, 01:46:00
como NO SERIA ASI?
lo que tengo es que mandar el BYTE con los 8 bits cual serie la forma correcta de mandarlo
Título: RE: envio de un Byte por Puerto serie
Publicado por: Colores en 20 de Enero de 2006, 10:08:00
No podés enviar una variable del tipo BYTE, solo envía strings. Si intentás enviar un BYTE supongo que te dará un error de tipos o enviará qién sabe qué... Hay otras maneras de solucionar esos problemas.
Título: RE: envio de un Byte por Puerto serie
Publicado por: ENO45 en 20 de Enero de 2006, 10:18:00
espero que alguien me pueda solucionar ese problema
Título: RE: envio de un Byte por Puerto serie
Publicado por: ENO45 en 22 de Enero de 2006, 17:27:00
NECESITO ayuda en este tema alguien ayude
Título: RE: envio de un Byte por Puerto serie
Publicado por: LordLafebre en 22 de Enero de 2006, 22:33:00
Nunca viene mal pedir las cosas con un por favor y un gracias desquiciado Ardiendo
Título: RE: envio de un Byte por Puerto serie
Publicado por: BrunoF en 23 de Enero de 2006, 00:47:00
Hola.

Dim datoBin As Long
Dim datoInt As Integer
Dim Recorre As Integer
Dim Ready2Send As String * 1

Private Sub Form_Load()

datoBin = 1000000   "no debe superar los 8 digitos de largo(1 byte)

DatoInt = 0
For Recorre = 0 To Len(CStr(DatoBin)) - 1
DatoInt = DatoInt + ((2 ^ Recorre) * CInt(Mid(CStr(DatoBin), Len(CStr(DatoBin)) _
- Recorre, 1)))
Next

Ready2Send = Chr(DatoInt)

End Sub

Carga en datobin el valor que quieras en binario. Ej. 11111110  (eso seria igual a 254 )

ReadytoSend contiene el valor ASCII correspondiente al binario ingresado en DatoBin(en el ejemplo cargue 1000000 = .64, por lo tanto Ready2Send devuelve @ que es el ASCII correspondiente.)

Envia el String Ready2Send al control del puerto serial.

Exitos.
Título: RE: envio de un Byte por Puerto serie
Publicado por: ENO45 en 23 de Enero de 2006, 11:56:00
hola brunof me podes esplicar que haces en esta parte

DatoInt = 0
For Recorre = 0 To Len(CStr(DatoBin)) - 1
DatoInt = DatoInt + ((2 ^ Recorre) * CInt(Mid(CStr(DatoBin), Len(CStr(DatoBin)) _
- Recorre, 1)))
Next

y despues para enviare el byte hago

Private Sub boton1_Click()
MSComm1.Output = Ready2Send
end sub

o entendi todo mal
desde ya muchas gracias
Título: RE: envio de un Byte por Puerto serie
Publicado por: BrunoF en 23 de Enero de 2006, 14:19:00
Bueno...si ya configuraste el control de COM serial, entonces hace asi:


Private Sub boton1_Click()

MSComm1.Output = Bin2String(10000000) " reemplaza 10000000 por el valor que quieras enviar(8 decimales max) o bien una variable cargada con el valor que quieras enviar.
                                     
End Sub


Private Function Bin2String(DatoBin As Long) As String

Dim DatoInt As Integer
Dim Recorre As Integer

DatoInt = 0
For Recorre = 0 To Len(CStr(DatoBin)) - 1
DatoInt = DatoInt + ((2 ^ Recorre) * CInt(Mid(CStr(DatoBin), Len(CStr(DatoBin)) _
- Recorre, 1)))
Next

Bin2String = Chr(DatoInt)

End Function

Lo que hace el programa es tomar el DatoBin(que es un long, pero en el cual en realidad cargas un binario(ceros y uno SI O SI)) y utilizarlo como cadena de texto,y asi poder analizar cada uno de sus digitos.
Si el digito leido es un 1 entonces se eleva 2 al exponente correspondiente a la posicion del digito leido en la cadena.

o sea: si hago

MSComm1.Output = Bin2String(1100001) "

por ejemplo:

Lee el primer digito de der a izq ( o sea, el 1) y hace:

DatoInt = DatoInt(= cero inicialmente) + 2 elevado a la cero ( =1) * digito leido ( =1)

Lee ahora el segundo digito de der a izq ( o sea, el 0 ) y hace:

DatoInt = DatoInt(= 1) + 2 elevado a la uno ( =2) * digito leido ( =0)

Lee ahora el tercer digito de der a izq ( o sea, otro 0 ) y hace:

DatoInt = DatoInt(= 1) + 2 elevado a la dos ( =4) * digito leido ( =0)

Lee ahora el cuarto digito de der a izq ( o sea, otro 0 ) y hace:

DatoInt = DatoInt(= 1) + 2 elevado a la tres ( =8) * digito leido ( =0)

Lee ahora el quinto de der a izq ( o sea, otro 0 ) y hace:

DatoInt = DatoInt(= 1) + 2 elevado a la cuatro ( =16) * digito leido ( =0)

Lee ahora el sexto digito de der a izq ( o sea, un 1 ) y hace:

DatoInt = DatoInt(= 1) + 2 elevado a la cinco ( =32) * digito leido ( =1)

Lee ahora el septimo digito de der a izq ( o sea, otro 1 ) y hace:

DatoInt = DatoInt(=1+32) + 2 elevado a la seis ( =64) * digito leido ( =1)

Entonces al final: DatoInt=1+32+64 = 97

Al final pasa el valor 97 al codigo ASCII para transformarlo en String, que es lo que necesitas para poder enviarlo x el control COM
Entonces la funcion devuelve el caracter correspondiente al valor decimal 97.

Resumiendo, la linea queda:

MSComm1.Output = "a"  "ya que a = 97 en ASCII (presiona alt + 97 en un editor de texto y fijate lo que sale)Sonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa GiganteSonrisa Gigante

Espero hayas entendido...Exitos.
Título: RE: envio de un Byte por Puerto serie
Publicado por: BrunoF en 23 de Enero de 2006, 14:22:00
Ah! y perdona el ingles...es que mi programando a veces invento palabras o bien las defino en otros idiomaslocolocolocoloco...jaja exitos..