TODOPIC
Lenguajes de programación para PC => Visual Basic => Mensaje iniciado 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
-
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.
-
y como hago para enviar el 00010001 en binario
-
como NO SERIA ASI?
lo que tengo es que mandar el BYTE con los 8 bits cual serie la forma correcta de mandarlo
-
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.
-
espero que alguien me pueda solucionar ese problema
-
NECESITO ayuda en este tema alguien ayude
-
Nunca viene mal pedir las cosas con un por favor y un gracias
-
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.
-
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
-
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)








Espero hayas entendido...Exitos.
-
Ah! y perdona el ingles...es que mi programando a veces invento palabras o bien las defino en otros idiomas



...jaja exitos..