TODOPIC
Lenguajes de programación para PC => Visual Basic => Mensaje iniciado por: ENO45 en 04 de Febrero de 2006, 11:25:00
-
hola me podrian explicar como funciona (con un ejemplo asi lo entiendo mas rapido) la interrupcion por recepcion del MScomm porque segun lo que lei la recepcion por time no es conveniente
-
Hola que tal,
Bueno la rutina de interrupcion por recepcion de caracter es muy sencilla:
"Aqui entrara cada vez que algo ocurra en el puerto serie
Private Sub MSComm1_OnComm()
Dim dato_rec As String "definimos variable para recoger byte recibido
"dependiendo de lo que halla causado la int hacemos una cosa u otra
Select Case MSComm1.CommEvent
" Errores(no muy importantes, aunque depende de lo que estes haciendo)
Case comEventBreak " A Break was received.
Case comEventCDTO " CD (RLSD) Timeout.
Case comEventCTSTO " CTS Timeout.
Case comEventDSRTO " DSR Timeout.
Case comEventFrame " Framing Error.
Case comEventOverrun " Data Lost.
Case comEventRxOver " Receive buffer overflow.
Case comEventRxParity " Parity Error.
Case comEventTxFull " Transmit buffer full.
Case comEventDCB " Unexpected error retrieving DCB]
" Eventos(nos interesa el de receive)
Case comEvCD " Change in the CD line.
Case comEvCTS " Change in the CTS line.
Case comEvDSR " Change in the DSR line.
Case comEvRing " Change in the Ring Indicator.
Case comEvReceive " Received RThreshold # of chars.
"en las propiedades del mscomm dependiendo de como lo hayas configurado se generará esta int cada caracter recibido, cada dos,...
InBuff = MSComm1.Input "cogemos el dato del puerto
"Recuerda que estara en formato ascii
Case comEvSend " There are SThreshold number of
" characters in the transmit buffer.
Case comEvEOF " An EOF character was found in the
" input stream.
End Select
End Sub
Y mas o menos ya estaria, mira bien las propiedades de configuracion, es decir:
With MSComm1
.CommPort = 2
.Handshaking = 2 - comRTS
.RThreshold = 1 "Cada caracter recibido(8 bits) se genera la int
.RTSEnable = True
.Settings = "9600,n,8,1"
.SThreshold = 1
.PortOpen = True
" Leave all other settings as default values.
End With
Ya me contaras si te funciona o no.
SalU2
-
hola a mi lo que me interesaria conocer (ejemplo) es la interupcion cuando entra un BYTE por el puerto serie, como seria eso, cual de todas las partes que pusiste iria.
perdon por mi desconocimiento del tema
Nacha4
-
Hola,
Bueno, creo que estaba claro en el mensaje, pero lo repito,
Cada vez que ocurra algo en el puerto serie entra en la interrupcion, ahora tienes que ver si lo que ha producido la interrupcion es la llegada de 8 bits, que en concreto es el evento "Recieve", y ya esta; ahora coges el dato y haces con el lo que quieras.
Ya me contaras si tienes mas problemas.
SalU2
-
hola te molesto de nuevo pero no entiendo lo que hice con tu programa es lo sigiente pero no tengo respuesta, yo quiero que lop que mande aparesca en text1 pero no pasa nada
Private Sub boton_Click()
MSComm1.Output = "a"
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvCD " Change in the CD line.
Case comEvCTS " Change in the CTS line.
Case comEvDSR " Change in the DSR line.
Case comEvRing " Change in the Ring Indicator.
Case comEvReceive " Received RThreshold # of chars.
dato_rec = MSComm1.Input
Text1.Text = dato_rec
Case comEvSend " There are SThreshold number of
Case comEvEOF " An EOF character was found in the input stream.
End Select
End Sub
With MSComm1
.CommPort = 2
.Handshaking = 2 - comRTS
.RThreshold = 1 "Cada caracter recibido(8 bits) se genera la int
.RTSEnable = True
.Settings = "9600,n,8,1"
.SThreshold = 1
.PortOpen = True
" Leave all other settings as default values.
End With