Buenas a tod@s,
A ver, tengo un problema con una comunicación serial, que me está trayendo de cabeza...
Intento crear una comunicación serie entre un programa en un PC y un PIC18f4520, pero antes pues voy probando lo básico, que es a enviar y recibir con un terminal y la PCB donde está el micro.
Para enviar no tengo ningún problema, pero no puedo recibir nada... Si incluyo un "getc()" en el código del bucle infinito, se bloquea el micro, si lo intento a través de la rutina int_RDA no hace ni caso. Os adjunto el código del programa#include <18f4520.h>
#use delay(clock=20000000) //Meto 20M por el cristal, a ver como va
#fuses XT, NOWDT, PUT, NOWRT, HS
//#use fast_io(B)
#use standard_io(C)
#byte CMCON = 0xFB4
#use rs232(baud=9600,xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)
//Variables globales de programa
int16 retPreTrig = 100; //100 us para el pretrigger
int16 retardo = 59;
int16 ventana = 7;
int Pulsador = 0;
char ch;
#INT_RDA
void serial_isr()
{
ch = getchar();
output_high(PIN_B6);
delay_ms(1000);
output_low(PIN_B6);
putc(ch);
}
#INT_COMP
void isr(void)
{
if(Pulsador == 1)
{
//delay_ms(retardo);
while(C1OUT != 1)
{
}
if(C1OUT == 1)
{
delay_us(retPreTrig);
output_high(PIN_C1);
delay_ms(retardo);
output_high(PIN_C0);
delay_ms(ventana);
output_low(PIN_C0);
output_low(PIN_C1);
Pulsador = 0;
}
}
}
void main()
{
//Configuración de puertos e interrupciones
CMCON = 0b00000110;
setup_comparator(A0_A3_A1_A2);
setup_vref(VREF_HIGH|15|VREF_F5);
set_tris_b(0x00);
set_tris_a(0x0F);
set_tris_c(0x80);
enable_interrupts(INT_RDA);
enable_interrupts(INT_COMP);
enable_interrupts(GLOBAL);
output_c(0);
output_b(0);
//hilo principal
while(TRUE)
{
delay_ms(100);
if(input(PIN_B7)==1)
{
//putc('1');
printf("HOLA");
putc(ch);
output_high(PIN_B6);
delay_ms(1000);
output_low(PIN_B6);
}
}
}
Estoy haciendo diversas pruebas y ya no se porque falla la verdad...
Agradezco cualquier ayuda.
Un saludo!