# Comunicacion PC<->PIC con visual basic 2005



## sebitronic (Oct 27, 2009)

Hola, soy nuevo en esto de programar aplicaciones en visual basic para pc,lo que estoy tratando de lograr es conectar un PIC16F876A via serie RS232C con un formato 96158N1 con la computadora, pero no pasa nada, lo que deberia hacer seria que al marcar uno de los ocho items en la ventana de la pc me encendiece un led correspondiente al item en el puerto B del micro.
Aca les dejo el prgrama del micro y el de la pc.
Desde ya muchas gracias.


```
PC 

<Microsoft.VisualBasic.ComClass()> <System.Serializable()> Public Class Form1
    Dim dato As Byte

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.Text = ("Entrenadora")

    End Sub


    Private Sub LED1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LED1.CheckedChanged

        If LED1.Checked = True Then
            dato = dato + 1
        Else
            dato = dato - 1
        End If

    End Sub

    Private Sub LED2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LED2.CheckedChanged

        If LED2.Checked = True Then
            dato = dato + 2
        Else
            dato = dato - 2
        End If

    End Sub

    Private Sub LED3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LED3.CheckedChanged

        If LED3.Checked = True Then
            dato = dato + 4
        Else
            dato = dato - 4
        End If

    End Sub

    Private Sub LED4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LED4.CheckedChanged

        If LED4.Checked = True Then
            dato = dato + 8
        Else
            dato = dato - 8
        End If

    End Sub

    Private Sub LED5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LED5.CheckedChanged

        If LED5.Checked = True Then
            dato = dato + 16
        Else
            dato = dato - 16
        End If

    End Sub

    Private Sub LED6_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LED6.CheckedChanged

        If LED6.Checked = True Then
            dato = dato + 32
        Else
            dato = dato - 32
        End If

    End Sub

    Private Sub LED7_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LED7.CheckedChanged

        If LED7.Checked = True Then
            dato = dato + 64
        Else
            dato = dato - 64
        End If

    End Sub

    Private Sub LED8_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LED8.CheckedChanged

        If LED8.Checked = True Then
            dato = dato + 128
        Else
            dato = dato - 128
        End If

    End Sub

    Private Sub Bsend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bsend.Click

        ' Send strings to a serial port.
        Using com1 As IO.Ports.SerialPort = _
                My.Computer.Ports.OpenSerialPort("COM1")
            com1.WriteLine(dato)
        End Using
        MsgBox(dato, 0, "Sebitronic")

    End Sub

    Private Sub Bclose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Bclose.Click
        End
    End Sub

End Class
```

PIC 


```
LIST  P=16F876A
			#INCLUDE "P16F876A.INC"



LOOP		MOVLW	B'10010000'
		MOVWF	RCSTA
		BSF		STATUS,5
		CLRF		TRISB
		MOVLW	B'00000100'
		MOVWF	TXSTA
		MOVLW	D'75'
		MOVWF	SPBRG
		BCF		STATUS,5

LOOP1	MOVF		RCREG,W	
		MOVWF	PORTB
		GOTO		LOOP1
		
END
```


PD: tambien les adjunto el programa de la pc

PD: el micro Corre a 12MHz


----------



## Meta (Nov 8, 2009)

Hola:

Mira este manual sobre comunicación del puerto serie con Visual Basic .net y Visual C++.
http://www.abcdatos.com/tutoriales/tutorial/v12.html

Para Visual C# es este que es más completo.
http://www.abcdatos.com/tutoriales/tutorial/z9521.html

Saludo.


----------



## sebitronic (Nov 8, 2009)

Meta, muchisimas gracias, mefuiste de mucha ayuda.


----------



## Meta (Nov 8, 2009)

De nada, me extrañó que nadie no te dijera que esos manuales no te lo indicasen.

¿Ya te funcionó literalmente tu aplicación o aún estás haciendo pruebas?


----------



## sebitronic (Dic 5, 2009)

Disculpa por la tardanza de la respuesta, sinceramente me averguenza decir cual fue el error que tenia. tenia mal el valor del registro SPBRG del micro tenia el baurate con 100 baudios por debajo de lo necesario.
Saludos.


----------



## Meta (Dic 5, 2009)

Todos cometemos errores de algún tipo.

Si te funciona todo nos lo hace saber para verlo. Tengo ganas de hacer uno.


----------



## sebitronic (Dic 5, 2009)

si la aplicacion ya la termine y la presente era para una expo de la escu.


----------



## Meta (Dic 5, 2009)

Muy buena la presentación.

Está mejor de lo que cería la apariencia. Ahora entiendo el motivo de que ocupa demasiado el archivo, jejeje.

Lo que no se para que pusiste lo de la barra que llega hasta 255.

Felicidades y buen trabajo.

PD: _Cosas así se deben mostrar más._


----------



## sebitronic (Dic 6, 2009)

Gracias, la barra es para regular una luz por PWM, la pc le envia el valor de la barra, igual a ahora cuando tengo que que hacer regulacion de una luz no la hago mas lineal, ahora uso esta funcion:
                        P=x^2/4
donde P es el valor a escribir en el registro ccpr1l y x es el balor de la barra que va desde 0 a 31.


----------



## Meta (Dic 6, 2009)

Muy bena idea. Contigo sacas ideas.


----------



## sebitronic (Dic 16, 2009)

Gracias, la idea me sugio despues de observar la falta de lienalidad de los led al controlarlos regulando la corriente que los atraviesa.


----------

