You are on page 1of 14

Estudio y realizacin de un enlace Bluetooth para el sistema de desarrollo basado en el MC68HC11

149

ANEXO II

CONTROL PUERTO SERIE

El programa Control Puerto Serie ha sido creado en Visual Basic 6.0 y permite configurar y usar el puerto serie. Consta de un formulario que es la interfaz del programa.

Ilustracin II-1: interfaz del programa Control Puerto Serie.

Ingeniera de Telecomunicacin

Ivn Cuenca Zaldvar

Estudio y realizacin de un enlace Bluetooth para el sistema de desarrollo basado en el MC68HC11

150

II.1

Descripcin de la interfaz
La interfaz consta de cuatro marcos: puerto, velocidad, transmisin y

recepcin. Puerto: aqu elegimos el puerto que se va a utilizar. Es posible elegir un puerto distinto escribindolo en el mismo cuadro de texto. Una vez elegido, el puerto se abre al pulsar el botn Abrir. Inmediatamente este botn cambia su ttulo por Cerrar, ya que para abrir otro puerto tendremos que cerrar este previamente. Bajo este marco se hallan dos botones que permiten activar o desactivar las lneas RTS y DTR, que controlan las seales RESET y XIRQ de la tarjeta de desarrollo del MC68HC11. Estos botones permanecen deshabilitados mientras el puerto est cerrado. Velocidad: podemos optar por cinco velocidades de transmisin, que se seleccionan al elegirlas con el ratn, o bien podemos escribir la velocidad deseada en el mismo cuadro. En este caso, la velocidad escrita se selecciona al pulsar el botn Seleccionar. La velocidad escrita queda guardada en el men desplegable. Transmisin: en este marco podemos escribir cadenas de texto para enviarlas por el puerto serie. En el cuadro superior podemos escribir texto ASCII estndar. Lo que escribamos queda guardado en el men desplegable. En el inferior podemos escribir cdigos hexadecimales. Las cajas de seleccin permiten aadir los caracteres <CR> ($0D en hexadecimal) y <LF> ($0A en hexadecimal). El botn Enviar permanece deshabilitado mientras el puerto est cerrado. Al pulsarlo se enva el contenido de la caja ASCII seguido del contenido de la caja hexadecimal y los caracteres especiales que hallamos marcados. Pulsando Borrar borramos el contenido de las cajas de texto. Recepcin: los caracteres recibidos son representados en los cuadros de texto de este marco. Podemos ver los caracteres en formato hexadecimal, ASCII o ambos a la vez pulsando el botn situado bajo Borrar. El ttulo de este botn nos indica el formato que aparecer al
Ingeniera de Telecomunicacin Ivn Cuenca Zaldvar

Estudio y realizacin de un enlace Bluetooth para el sistema de desarrollo basado en el MC68HC11

151

pulsarlo. Cuando visualizamos ambos formatos a la vez, existe una correspondencia entre las lneas de ambos cuadros, es decir, se representan los mismos caracteres en las mismas lneas de los dos cuadros, aunque una lnea est en formato ASCII y la otra en hexadecimal. El botn Borrar borra el contenido de ambos cuadros de texto.

II.2

Listado de cdigos del programa Control Puerto Serie


El programa Control Puerto Serie consta de un formulario con los

controles necesarios para el manejo del puerto serie y un mdulo con diversas funciones necesarias para el programa.
II.2.1 Cdigo del formulario principal

El listado del cdigo del formulario principal es el siguiente:


Public num_car As Integer 'nmero de caracteres recibidos por el 'puerto serie antes de completar una lnea 'de las ventanas de recepcin Ascii/Hex. Public num_car_Asc As Integer 'nmero de caracteres recibidos por el 'puerto serie antes de completar una 'lnea en las ventanas de recepcin 'Ascii y Hex. Public textoAsc As String Public textoHex As String Public textoAsc_Cr As String 'caracteres recibidos que se representan 'en la ventana Ascii. 'caracteres recibidos que se representan 'en la ventana Hex. 'caracteres recibidos que se representan 'en la parte Ascii de las ventanas 'Ascii/Hex. Public textoHex_Cr As String 'caracteres recibidos que se representan 'en la parte Hex de las ventanas 'Ascii/Hex. Private Sub cboVelocidad_Click()

Ingeniera de Telecomunicacin

Ivn Cuenca Zaldvar

Estudio y realizacin de un enlace Bluetooth para el sistema de desarrollo basado en el MC68HC11 'Se selecciona la velocidad del puerto serie utilizado. comControl.Settings = cboVelocidad.Text & ",n,8,1" End Sub Private Sub cmdAbrirPuerto_Click() 'Este procedimiento abre o cierra el puerto serie, segn en qu 'estado se encuentre. Adems habilita o deshabilita las lneas 'RTS, DTR y el botn Enviar. If comControl.PortOpen = False Then 'Selecciona el puerto. comControl.CommPort = Val(Right(cboPuerto.Text, 1)) comControl.PortOpen = True 'Una vez abierto el puerto, slo podremos cerrarlo. cmdAbrirPuerto.Caption = "Cerrar" cmdRTS.Enabled = True cmdDTR.Enabled = True cmdEnviar.Enabled = True Else comControl.PortOpen = False

152

'Si estaba abierto lo cerramos. 'Una vez cerrado, slo 'podemos abrirlo.

cmdAbrirPuerto.Caption = "Abrir" cmdRTS.Enabled = False cmdDTR.Enabled = False cmdEnviar.Enabled = False End If End Sub Private Sub cmdAsciiHex_Click()

'Este procedimiento permite ver los caracteres recibidos como 'caracteres Ascii, caracteres hexadecimales o ambas 'representaciones. If cmdAsciiHex.Caption = "Ascii/Hex" Then cmdAsciiHex.Caption = "Hex" 'Para ver la ventana 'Ascii/Hex.

Ingeniera de Telecomunicacin

Ivn Cuenca Zaldvar

Estudio y realizacin de un enlace Bluetooth para el sistema de desarrollo basado en el MC68HC11 txtRecepcionAsc.Height = 1095 txtRecepcionAsc.Width = 3795 txtRecepcionHex.Visible = True 'Hacemos visible la ventana 'Hex. txtRecepcionAsc.Text = textoAsc_Cr 'Representamos los 'caracteres recibidos en 'la ventana Ascii. txtRecepcionHex.Text = textoHex_Cr 'Representamos los 'caracteres recibidos en 'la ventana Hex. 'Situamos el cursor al final de la cadena, para aadir 'caracteres a continuacin. txtRecepcionAsc.SelStart = Len(txtRecepcionAsc.Text) txtRecepcionHex.SelStart = Len(txtRecepcionHex.Text) ElseIf cmdAsciiHex.Caption = "Hex" Then cmdAsciiHex.Caption = "Ascii" txtRecepcionAsc.Visible = False txtRecepcionHex.Top = 240 txtRecepcionHex.Left = 120 txtRecepcionHex.Height = 2535 txtRecepcionHex.Width = 6015 txtRecepcionHex.Visible = True txtRecepcionHex.Text = textoHex 'Hacemos visible la ventana 'Hex. 'Cambiamos el tamao de la 'ventana Ascii.

153

'Para ver la ventana Hex.

'Ocultamos la ventana Ascii.

'Establecemos el tamao y posicin 'de la ventana Hex.

'Representamos los caracteres 'Hex.

txtRecepcionHex.SelStart = Len(txtRecepcionHex.Text) Else cmdAsciiHex.Caption = "Ascii/Hex" txtRecepcionHex.Visible = False txtRecepcionAsc.Height = 2535 txtRecepcionAsc.Width = 6015 txtRecepcionAsc.Visible = True txtRecepcionHex.Top = 1560 txtRecepcionHex.Left = 120 txtRecepcionHex.Height = 1095 'Hacemos visible la ventana 'Ascii. 'Ajustamos la posicin de la 'ventana Hex. 'Para ver la ventana Ascii. 'Ocultamos la ventana Hex. 'Ajustamos el tamao de la 'ventana Ascii.

Ingeniera de Telecomunicacin

Ivn Cuenca Zaldvar

Estudio y realizacin de un enlace Bluetooth para el sistema de desarrollo basado en el MC68HC11 txtRecepcionHex.Width = 7095 txtRecepcionAsc.Text = textoAsc

154

'Representamos los caracteres 'Ascii.

txtRecepcionAsc.SelStart = Len(txtRecepcionAsc.Text) End If End Sub Private Sub cmdBorrarRx_Click() 'Borramos el contenido de las ventanas de recepcin. Adems 'inicializamos las variables de nmero de caracteres recibidos. textoAsc = "" textoHex = "" textoAsc_Cr = "" textoHex_Cr = "" txtRecepcionAsc.Text = "" txtRecepcionHex.Text = "" num_car = 0 num_car_Asc = 0 End Sub Private Sub cmdBorrarTx_Click() 'Borramos el contenido de las ventanas de tansmisin. cboEnvioAsc.Text = "" txtEnvioHex.Text = "" End Sub Private Sub cmdDTR_Click() 'Habilitamos o deshabilitamos, segn su estado, la lnea DTR. If comControl.DTREnable = True Then cmdDTR.Caption = "DTR ON" comControl.DTREnable = False Else

Ingeniera de Telecomunicacin

Ivn Cuenca Zaldvar

Estudio y realizacin de un enlace Bluetooth para el sistema de desarrollo basado en el MC68HC11 cmdDTR.Caption = "DTR OFF" comControl.DTREnable = True End If End Sub Private Sub cmdEnviar_Click() 'Enviamos por el puerto serie el contenido de las ventanas de 'transmisin y los caracteres especiales, si estn habilitados. Dim existe As Boolean: existe = False comControl.Output = cboEnvioAsc.Text & _ convHex_Ascii(txtEnvioHex.Text) & car_CRLF For i = 0 To cboEnvioAsc.ListCount 'Si el contenido de la ventana Ascii no se haba transmitido 'anteriormente, lo guardamos. If cboEnvioAsc.Text = cboEnvioAsc.List(i) Then existe = True End If Next i If existe = False Then cboEnvioAsc.AddItem cboEnvioAsc.Text End If End Sub Private Sub cmdRTS_Click() 'Habilitamos o deshabilitamos, segn su estado, la lnea RTS. If comControl.RTSEnable = True Then cmdRTS.Caption = "RTS ON" comControl.RTSEnable = False Else cmdRTS.Caption = "RTS OFF" comControl.RTSEnable = True End If

155

Ingeniera de Telecomunicacin

Ivn Cuenca Zaldvar

Estudio y realizacin de un enlace Bluetooth para el sistema de desarrollo basado en el MC68HC11 End Sub Private Sub cmdSelecVel_Click() 'Establecemos la velocidad del puerto serie. Dim existe As Boolean: existe = False comControl.Settings = cboVelocidad.Text & ",n,8,1" For i = 1 To cboVelocidad.ListCount 'Si la velocidad no se encuentra en la lista, la aadimos. If cboVelocidad.Text = cboVelocidad.List(i) Then existe = True End If Next i If existe = False Then cboVelocidad.AddItem cboVelocidad.Text End If End Sub Private Sub comControl_OnComm()

156

'Cuando se recibe un carcter o cadena de caracteres por el puerto 'serie, los almacenamos en las variables que representan el 'contenido de las ventanas de recepcin. Dim i As Integer Dim cad_rx As String 'cadena recibida por el puerto serie. 'Representacin Ascii de un carcter 'de la cadena recibida. Dim car_rx_Hex As String 'Representacin hexadecimal de un 'carcter de la cadena recibida. If comControl.CommEvent = comEvReceive Then 'Se ha recibido una 'cadena. cad_rx = comControl.Input For i = 1 To Len(cad_rx) Dim car_rx_Asc As String

Ingeniera de Telecomunicacin

Ivn Cuenca Zaldvar

Estudio y realizacin de un enlace Bluetooth para el sistema de desarrollo basado en el MC68HC11

157

'Aadimos un carcter en representacin Ascii a la cadena 'de la ventana de recepcin Ascii. textoAsc = textoAsc & Extrae_car_Asc(cad_rx, i) 'Aadimos un carcter en representacin Ascii a la cadena 'de la ventana de recepcin Ascii/Hex. textoAsc_Cr = textoAsc_Cr & Extrae_car_Asc(cad_rx, i) 'Aadimos un carcter en representacin Hex a la cadena de 'la ventana de recepcin Hex. textoHex = textoHex & Extrae_car_Hex(cad_rx, i) 'Aadimos un carcter en representacin Hex a la cadena de 'la ventana de recepcin Ascii/Hex. textoHex_Cr = textoHex_Cr & Extrae_car_Hex(cad_rx, i) num_car = num_car + 1 num_car_Asc = num_car_Asc + 1 'Si hemos recibido una cadena <CR><LF> estamos en una 'nueva lnea de las ventanas Ascii. If Right(textoAsc, 2) = vbCrLf Then num_car_Asc = 0 End If 'Cuando hemos recibido 53 caracteres en la ventana de 'recepcin Ascii, saltamos a la siguiente lnea. If num_car_Asc = 53 Then textoAsc = textoAsc & vbCrLf num_car_Asc = 0 End If 'Si hemos recibido una cadena "0D0A" estamos en una nueva 'lnea de la ventana Hex de la representacin Ascii/Hex. If Right(textoHex, 4) = "0D0A" Then

Ingeniera de Telecomunicacin

Ivn Cuenca Zaldvar

Estudio y realizacin de un enlace Bluetooth para el sistema de desarrollo basado en el MC68HC11 textoHex_Cr = textoHex_Cr & vbCrLf num_car = 0 End If 'Si hemos recibido 32 caracteres en las ventanas de 'recepcin Ascii/Hex, saltamos a la siguiente lnea. If num_car = 32 Then textoAsc_Cr = textoAsc_Cr & vbCrLf textoHex_Cr = textoHex_Cr & vbCrLf num_car = 0 End If Next i 'Representamos las cadenas recibidas en las ventanas de 'recepcin que correspondan, segn la seleccin del botn 'Ascii/Hex. If cmdAsciiHex.Caption = "Hex" Then txtRecepcionAsc.Text = textoAsc_Cr txtRecepcionHex.Text = textoHex_Cr Else txtRecepcionAsc.Text = textoAsc txtRecepcionHex.Text = textoHex End If 'Situamos el cursor al final de las cadenas de las ventanas. txtRecepcionAsc.SelStart = Len(txtRecepcionAsc.Text) txtRecepcionHex.SelStart = Len(txtRecepcionHex.Text) End If End Sub Private Sub Form_Load() 'Al iniciar la aplicacin establecemos los valores iniciales de 'variables y propiedades. num_car = 0 num_car_Asc = 0

158

Ingeniera de Telecomunicacin

Ivn Cuenca Zaldvar

Estudio y realizacin de un enlace Bluetooth para el sistema de desarrollo basado en el MC68HC11 textoAsc = "" textoHex = "" txtRecepcionAsc.Height = 2535 txtRecepcionAsc.Width = 6015

159

'Establecemos el ttulo del botn RTS segn el estado de la lnea 'RTS. If comControl.RTSEnable = False Then cmdRTS.Caption = "RTS ON" Else cmdRTS.Caption = "RTS OFF" End If 'Establecemos el ttulo del botn DTR segn el estado de la lnea 'DTR. If comControl.DTREnable = False Then cmdDTR.Caption = "DTR ON" Else cmdDTR.Caption = "DTR OFF" End If 'Inicialmente el puerto esta cerrado, por lo que deshabilitamos 'los botones RTS, DTR y Enviar. cmdRTS.Enabled = False cmdDTR.Enabled = False cmdEnviar.Enabled = False End Sub Private Sub txtEnvioHex_Change() 'Si escribimos algo en la ventana de transmisin hexadecimal, lo 'ponemos en maysculas y situamos el cursor al final del texto. txtEnvioHex.Text = UCase(txtEnvioHex.Text) txtEnvioHex.SelStart = Len(txtEnvioHex.Text) End Sub

Ingeniera de Telecomunicacin

Ivn Cuenca Zaldvar

Estudio y realizacin de un enlace Bluetooth para el sistema de desarrollo basado en el MC68HC11

160

II.2.2 Cdigo del mdulo mod_conversion

Este mdulo consta de cuatro funciones:


Function convHex_Ascii(cadena_in As String) As String 'Esta funcin convierte cada pareja de nmeros hexadecimales de 'una cadena en una cadena de caracteres ASCII a los que 'representan las parejas de nmeros hexadecimales. Dim valor_dec As Integer: valor_dec = 0 'Valor decimal de un 'nmero hexadecimal de dos 'cifras. Dim a As Boolean: a = True 'Indica si consideramos la unidad '(False) o la decena (True) de un 'nmero hexadecimal de dos cifras. Dim b As Integer convHex_Ascii = "" For i = 1 To Len(cadena_in) b = Asc(Mid(cadena_in, i, 1)) If b < 58 Then b = b - 48 Else b = b - 55 End If If a = True Then a = False Else valor_dec = valor_dec + b 'Si es la unidad lo sumamos a 'lo que ya tenamos. 'Ahora obtenemos el carcter ASCII del nmero decimal y lo 'aadimos a la cadena. convHex_Ascii = convHex_Ascii & Chr(valor_dec) a = True End If Next i 'El prximo ser la decena. 'Si es la decena multiplicamos por 16. 'El prximo ser la unidad. valor_dec = b * 16 'Cdigo ASCII de un carcter 'de la cadena. 'Si es un nmero. 'Valor decimal del nmero hexadecimal. 'Si es una letra. 'Valor decimal del nmero hexadecimal. 'valor decimal temporal del nmero 'hexadecimal.

Ingeniera de Telecomunicacin

Ivn Cuenca Zaldvar

Estudio y realizacin de un enlace Bluetooth para el sistema de desarrollo basado en el MC68HC11

161

End Function Function Extrae_car_Asc(cadena_in As String, num As Integer) As String 'Esta funcin devuelve el caracter en posicin num de la cadena de 'entrada. Si este caracter es el cdigo ASCII 0, lo cambiamos por 'el 1 para evitar que termine la representacin de caracteres 'recibidos por el puerto serie. If Mid(cadena_in, num, 1) = Chr(0) Then Extrae_car_Asc = Chr(1) Else Extrae_car_Asc = Mid(cadena_in, num, 1) End If End Function Function Extrae_car_Hex(cadena_in As String, num As Integer) As String 'Esta funcin devuelve el nmero hexadecimal correspondiente al 'cdigo ASCII del caracter de la cadena de entrada situado en 'posicin num. Si el nmero hexadecimal tiene un solo dgito, 'aadimos un 0 al principio. If Len(CStr((Hex(Asc(Mid(cadena_in, num, 1)))))) = 1 Then Extrae_car_Hex = "0" _ & CStr((Hex(Asc(Mid(cadena_in, num, 1))))) Else Extrae_car_Hex = CStr((Hex(Asc(Mid(cadena_in, num, 1))))) End If End Function Function car_CRLF() As String 'Esta funcin devuelve los caracteres <CR>, <LF> o <CR><LF> en 'funcin de lo que est marcado en los cuadros de seleccin del 'marco Transmisin. If frmPuertoSerie.chkCR.Value = 0 Then If frmPuertoSerie.chkLF.Value = 0 Then

Ingeniera de Telecomunicacin

Ivn Cuenca Zaldvar

Estudio y realizacin de un enlace Bluetooth para el sistema de desarrollo basado en el MC68HC11 car_CRLF = "" Else car_CRLF = Chr(10) End If Else If frmPuertoSerie.chkLF.Value = 0 Then car_CRLF = Chr(13) Else car_CRLF = Chr(13) & Chr(10) End If End If End Function

162

Ingeniera de Telecomunicacin

Ivn Cuenca Zaldvar

You might also like