Hola a todos,
He hecho un nuevo descubrimiento, os pego el código que estoy utilizando, a ver si vosotros entendéis mejor que yo lo que sucede:
#include <18f4520.h>
#use delay(clock=20000000) //Meto 20M por el cristal, a ver como va
#fuses NOWDT, PUT, NOWRT, HS
#use fast_io(B)
#use standard_io(C)
#use rs232(baud=9600,xmit=PIN_C6, rcv=PIN_C7, bits=8, parity=N, ERRORS)
//Variables globales de programa
int bandera = 0;
char ch;
#INT_RDA
void serial_isr(void)
{
ch=getchar();
bandera = 1;
}
void main()
{
//Configuración de puertos e interrupciones
set_tris_b(0x80);
set_tris_a(0x0F);
set_tris_c(0x80);
//output_c(0);
output_low(PIN_C6);
output_b(0);
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
//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);
}
if(bandera==1)
{
output_toggle(PIN_B6);
printf("retardo = %c ",ch);
bandera=0;
}
/*if(kbhit()==1)
{
ch=getchar();
output_high(PIN_B6);
delay_ms(1000);
output_low(PIN_B6);
putc(ch);
}*/
}
}
Pues resulta que, si dejo ese output_c(0) sin comentar (al principio del main) me funciona el micro sólo para recibir datos, pero no es capaz de enviar nada, sin embargo si lo dejo comentado (o con el PIN_C7 sin tocar) me funciona la transmisión solamente pero no la recepción. No tengo ni idea de lo que pasa pero acotando he visto que el fallo está ahí.
A ver que se os ocurre a vosotros.
Muchas gracias por cualquier ayuda y un saludo!