Hola a todos, estoy teniendo muchos problemas con las comunicaciones RS232 entre PIC-PC.
No hace nada, ni escribe ni recibe y no se donde puede estar el fallo, he cambiado el PIC y el MAX y sigue sin hacer nada y no se ya por donde seguir.
Os dejo las conexiones que he echo y el codigo por si me sobra o me falta algo.
Al lado de las patillas del MAX indico la tensión que he medido con el polimetro por si os orienta un poco más.
Las conexiones que he echo son:
PC MAX232
2 ----> 14(-10.5V)
3 ----> 13(0V)
5 ----> 15
MAX232 PIC
11(5.13v) ----> 17(C6)
12(5.13V) ----> 18(C7)
Aunque algunas veces la tensión en las patillas 11 y 12 del MAX tienen 0.37 V
El codigo es el siguiente:
#include <16F876.h>
#fuses HS,NOPROTECT,NOPUT,NOWDT,NOBROWNOUT,NOLVP,NOCPD //configuramos el pic
#use delay (clock=8000000) //configuramos el reloj
#USE RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7,STREAM=COM_A)
//Rutina de atencion de interrupcion para el puerto serie Com_A
#INT_RDA
RDA_isr(){
char rxa;
disable_interrupts(INT_RDA); //deshabilidatos la interrupcion
if(kbhit(COM_A)){
rxa=getc(COM_A);
fprintf(COM_A,"Dato en A recibido %c.",rxa);
}
enable_interrupts(INT_RDA); //habilidatos la interrupcion
}
// Programa Principal
void main(void){
set_tris_a(0x00); //Configuramos el puerto A como salidas digitales
set_tris_b(0x00); //Configuramos el puerto B como salidas digitales
set_tris_c(0x00); //Configuramos el puerto C como salidas digitales
enable_interrupts(INT_RDA); //int puerto serie*/
enable_interrupts(GLOBAL); //todas int
while(TRUE){ // bucle infinito de la aplicación
output_high(PIN_B7); //Encender
delay_ms(500);
output_low(PIN_B7); //Apagar
delay_ms(500);
}
}
Muchas gracias.