Hola a todos, estoy liado con un proyecto donde he de trabajar con el puerto serie y un pic 18f4550, ahora mismo lo tengo montado, y gracias a las explicaciones que he ido encontrando he logrado comunicar con éxito el PC y el PIC.
El problema viene cuando quiero mandar un caracter ASCII desde VB.net al pic, si por ejemplo mando el ASCII "1" (código 49), el display que tengo montado en el pic me muestra "g" (código 103).
El código que uso (lo más simple que se me ha ocurrido para ir complicando poco a poco) es el siguiente:
VB.net 2010:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim data(1) As Byte
data(0) = Asc(1) 'Aquí es donde introduzco el caracter que deseo enviar.
SerialPort1.Write(data, 0, 1)
Label1.Text = data(0)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.Open()
End Sub
End Class
PIC CCS (he quitado algunas líneas de los FUSES para que sea más legible):
#use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7, bits=8, parity=N)
int ch=0;
#int_rda
void serial_isr()
{
ch=getchar();
}
void main()
{
lcd_init();
enable_interrupts(global);
enable_interrupts(int_rda);
while(1)
{
printf(lcd_putc,"\nValor %u",ch); //Ahora mismo lo que está imprimiendo es el valor del código ASCII que le llega, no el caracter.
}
}
Estoy seguro de que es alguna tontería que se me escapa por mi ignorancia, espero que alguien me pueda echar una mano.
El problema viene cuando quiero mandar un caracter ASCII desde VB.net al pic, si por ejemplo mando el ASCII "1" (código 49), el display que tengo montado en el pic me muestra "g" (código 103).
El código que uso (lo más simple que se me ha ocurrido para ir complicando poco a poco) es el siguiente:
VB.net 2010:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim data(1) As Byte
data(0) = Asc(1) 'Aquí es donde introduzco el caracter que deseo enviar.
SerialPort1.Write(data, 0, 1)
Label1.Text = data(0)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.Open()
End Sub
End Class
PIC CCS (he quitado algunas líneas de los FUSES para que sea más legible):
#use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7, bits=8, parity=N)
int ch=0;
#int_rda
void serial_isr()
{
ch=getchar();
}
void main()
{
lcd_init();
enable_interrupts(global);
enable_interrupts(int_rda);
while(1)
{
printf(lcd_putc,"\nValor %u",ch); //Ahora mismo lo que está imprimiendo es el valor del código ASCII que le llega, no el caracter.
}
}
Estoy seguro de que es alguna tontería que se me escapa por mi ignorancia, espero que alguien me pueda echar una mano.
Última edición: