TODOPIC
Lenguajes de programación para PC => Visual Basic => Mensaje iniciado por: jwg en 06 de Marzo de 2004, 09:26:00
-
Hola, estoy comunicando un pic con uart a una pc usando Vb6, ya que no manejo este ultimo, tuve que convertir en el micro el dato a transmitir a ascii, lo cual es una solucion mas que a medias, alguien me podria indicar como manejar datos de 16 bit , obviamente en binario en el vb6.
Ej: quiero transmitir el resultado de una medicion de 10bits , recibir los dos byte y poderlos manejar en vb.
Gracias desde ya
-
Bien te digo como lo hago yo que es darle el trabajo al PC que para eso corre mas.
El PIC envia el dato directamente en hexadecimal
Recibo en el puerto un caracter ascii de ese valor hexadecimal que es del tipo string, lo que hago es convertir dicho valor en un valor decimal (recibo un string de 2 caracteres para la resolucion de 10bits que comentas)
//////////////////////////////////////////////////////////////////////////
Public Function pasarAsciiDato(cad As String) As Integer
Dim rdo As Boolean
Dim carAscii As String
Dim carHex As String
Dim carDec As Integer
"a partir de un caracter ascii recibido en el puerto,
"obtenemos el dato asociado
"If cad <> vbNullString Then
carAscii = Asc(cad)
carHex = Hex(carAscii)
carDec = pasarHexADecimal(carHex)
"End If
pasarAsciiDato = carDec
End Function
//////////////////////////////////////////////////////////////////////////////////
Esta funcion nos devuelve el valor decimal de los 10bits que enviaste por el puerto.
aqui esta definida la funcion pasarHexADecimal()
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Public Function pasarHexADecimal(InputData As String) As Double
""
"" Converts Hexadecimal to Decimal
""
Dim i As Integer
Dim DecOut As Double
Dim Lenhex As Integer
Dim HexStep As Double
"" Zeroise the output
DecOut = 0
"" The length of the input
""
InputData = UCase(InputData)
Lenhex = Len(InputData)
""
"" Check to make sure its a valid Hex Number
""
For i = 1 To Lenhex
If IsNumeric(Mid(InputData, i, 1)) Then
""
GoTo NumOk
ElseIf Mid(InputData, i, 1) = "A" Then
GoTo NumOk
ElseIf Mid(InputData, i, 1) = "B" Then
GoTo NumOk
ElseIf Mid(InputData, i, 1) = "C" Then
GoTo NumOk
ElseIf Mid(InputData, i, 1) = "D" Then
GoTo NumOk
ElseIf Mid(InputData, i, 1) = "E" Then
GoTo NumOk
ElseIf Mid(InputData, i, 1) = "F" Then
GoTo NumOk
Else
MsgBox "El número no es hexadecimal", vbCritical
Exit Function
End If
NumOk:
Next i
HexStep = 0
""
""
"" Convert the Number to Decimal
""
For i = Lenhex To 1 Step -1
HexStep = HexStep * 16
If HexStep = 0 Then
HexStep = 1
End If
If Mid(InputData, i, 1) = "0" Then
DecOut = DecOut + (0 * HexStep)
ElseIf Mid(InputData, i, 1) = "1" Then
DecOut = DecOut + (1 * HexStep)
ElseIf Mid(InputData, i, 1) = "2" Then
DecOut = DecOut + (2 * HexStep)
ElseIf Mid(InputData, i, 1) = "3" Then
DecOut = DecOut + (3 * HexStep)
ElseIf Mid(InputData, i, 1) = "4" Then
DecOut = DecOut + (4 * HexStep)
ElseIf Mid(InputData, i, 1) = "5" Then
DecOut = DecOut + (5 * HexStep)
ElseIf Mid(InputData, i, 1) = "6" Then
DecOut = DecOut + (6 * HexStep)
ElseIf Mid(InputData, i, 1) = "7" Then
DecOut = DecOut + (7 * HexStep)
ElseIf Mid(InputData, i, 1) = "8" Then
DecOut = DecOut + (8 * HexStep)
ElseIf Mid(InputData, i, 1) = "9" Then
DecOut = DecOut + (9 * HexStep)
ElseIf Mid(InputData, i, 1) = "A" Then
DecOut = DecOut + (10 * HexStep)
ElseIf Mid(InputData, i, 1) = "B" Then
DecOut = DecOut + (11 * HexStep)
ElseIf Mid(InputData, i, 1) = "C" Then
DecOut = DecOut + (12 * HexStep)
ElseIf Mid(InputData, i, 1) = "D" Then
DecOut = DecOut + (13 * HexStep)
ElseIf Mid(InputData, i, 1) = "E" Then
DecOut = DecOut + (14 * HexStep)
ElseIf Mid(InputData, i, 1) = "F" Then
DecOut = DecOut + (15 * HexStep)
Else
MsgBox "ERROR pasando a decimal", vbCritical
End If
Next i
pasarHexADecimal = DecOut
eds:
End Function
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Espero que te sirva
-
Muy interesante. Es una de las dudas que tenía, porque yo hice algo parecido y sólo me salían caracteres basura. La duda que tengo es cómo hago para que el micro mande el tipo de datos que necesito a VB. Estoy usando Pic Basic y tengo entendido que los datos se pueden pasar de varias maneras (decimal, binario...), el tema es: de que manera lo tengo que hacer en el pic para que funcione con el ejemplo de adolfoadc?
Yo pensaba que obtenía basura porque el micro enviaba ascii y mscomm acepta ansi.