TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: diegocipo en 17 de Enero de 2014, 16:36:13

Título: Comunicación pc - pic con rs232 en ccs
Publicado por: diegocipo en 17 de Enero de 2014, 16:36:13
Tengo un problema en la comunicación, puedo enviarle datos al pic, pero el pic devuelve cualquier cosa, además los puts y los printfs no los devuelve, solo algunas veces devuelve el putc correcto. ¿que puede ser?
Adjunto el codigo


char recep;

#int_RDA
void  RDA_isr(void)
{
recep=getchar();

}






 void main(void)
{
int valor;
valor=0;
TRISB=0xFF;
ANSEL=0x00;
setup_oscillator(OSC_4MHZ);
setup_adc_ports(NO_ANALOGS); //Selecciona terminales
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
while(1){// ciclo for infinito
if(input(SW1))   //lee entrada
{
output_high(LED);
delay_ms(1000);
output_high(LED1);
delay_ms(2000);
}
else {
output_low(LED);
delay_ms(300);
output_low(LED1);
delay_ms(300);
}

if(recep=='q'){
output_high(LED1);
delay_ms(1000);
puts("recibido");
disable_interrupts(global);
enable_interrupts(global);
}
 else {
output_low(LED1);
delay_ms(50);
printf("valor");
delay_ms(100);
putc(recep);
disable_interrupts(global);
enable_interrupts(global);
}
}
}
Título: Re: Comunicación pc - pic con rs232 en ccs
Publicado por: camhost1 en 18 de Enero de 2014, 13:53:09
Verifica que los baud rate y demas esten sincronizados, ya que por lo describes uno va a una velocidad diferente del otro.
Título: Re: Comunicación pc - pic con rs232 en ccs
Publicado por: elgarbe en 18 de Enero de 2014, 16:02:01
podrías poner el código completo?

Saludos
Título: Re: Comunicación pc - pic con rs232 en ccs
Publicado por: diegocipo en 21 de Enero de 2014, 00:09:24
 #include <16f887.h>
#fuses  NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP, XT
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #use delay(clock=8000000)
 #use rs232 (baud=9600, xmit=PIN_C6, rcv=PIN_C7, bits=8, parity=N)
 #BYTE TRISA=0x85
 #BYTE PORTA=0x05
 #BYTE TRISB=0x86
 #BYTE PORTB=0x06
 #BYTE TRISE=0x89
 #BYTE PORTE=0x09
#BYTE ANSEL=0x188
#define LED PIN_C0
#define SW1 PIN_B0
#define SW2 PIN_B1
#define LED1 PIN_C1

char recep;

#int_RDA
void  RDA_isr(void)
{
recep=getchar();

}






 void main(void)
{
int valor;
valor=0;
TRISB=0xFF;
ANSEL=0x00;
//setup_oscillator(OSC_8MHZ); para oscilador interno
setup_adc_ports(NO_ANALOGS); //Selecciona terminales
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
while(1){// ciclo for infinito
if(input(SW1))   //lee entrada
{
output_high(LED);
delay_ms(1000);
output_high(LED1);
delay_ms(2000);
}
else {
output_low(LED);
delay_ms(300);
output_low(LED1);
delay_ms(300);
}

if(recep=='q'){
output_high(LED1);
delay_ms(1000);
puts("recibido");
disable_interrupts(global);
enable_interrupts(global);
}
 else {
output_low(LED1);
delay_ms(50);
printf("valor");
delay_ms(100);
putc(recep);
disable_interrupts(global);
enable_interrupts(global);
}
}
}