hola amigos estoy haciendo un proyecto donde requiero comunicacion USART entre 2 pics 16f627a y 16f877a, pero no se que pasa y no recibe nada, ayudas por favor, aqui les mando los codigos:
DEL TX:
#include <16F627A.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,PUT,NOLVP,BROWNOUT,NOCPD
#use delay(clock=4000000,RESTART_WDT)
#use RS232(BAUD=2400, BITS=8, PARITY=N, XMIT=PIN_B2, RCV=PIN_B1, RESTART_WDT)
#byte TRISA=0x85 // Definicion TRISA
#byte CMCON=0x1F // Definicion CMCON
int8 n=0x29;
int8 n1=0x55;
//int8 i,j;
//--------------------------------------------------------
void enviar_trama()
{
delay_ms(1000);
putc(n);
delay_ms(500);
putc(n1);
delay_ms(500);
}
//--------------------------------------------------------
#INT_EXT
Ext_Int_Handler()
{
disable_interrupts(INT_EXT); // Deshabilita interrupcion EXT
enviar_trama();
delay_ms(25); // Rebote de contactos
enable_interrupts(INT_EXT); // Habilita interrupcion EXT
}
//--------------------------------------------------------
void main()
{
CMCON=0x07; // Comparadores OFF y pines como I/O
TRISA=0xFE; // PORTA entrada
ext_int_edge(H_TO_L);
enable_interrupts(INT_EXT); // Habilita interrup. EXT
enable_interrupts(GLOBAL); // Habilita interrup. GLOBAL
sleep();
}
DEL RX:
#include <16F877A.h>
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,BROWNOUT,NOCPD,NOWRT
#use delay(clock=4000000,RESTART_WDT)
#use RS232(BAUD=2400, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7,RESTART_WDT)
#byte TRISC=0xC0
#byte port_c=7
int1 cont1;
int8 i;
int8 trama;
int8 trama1;//=0b00000000;
#INT_RDA
void serial_isr()
{
disable_interrupts(INT_RDA);
trama=getc();
if(trama==0x29)
{
output_high(PIN_B6);
delay_ms(250);
output_low(PIN_B6);
trama1=getc();
if(trama1==0x55)
{
output_high(PIN_B7);
delay_ms(250);
output_low(PIN_B7);
}
}
enable_interrupts(INT_RDA);
}
#INT_EXT
Ext_Int_Handler()
{
disable_interrupts(INT_EXT);
if(cont1==0)
{
for(i=0;i<=7;i++)
{
if(bit_test(trama,i))
{output_high(PIN_B5);}
else
{output_low(PIN_B5);}
delay_ms(1000);
}
cont1=1;
output_low(PIN_B5);
}
else
{
for(i=0;i<=7;i++)
{
if(bit_test(trama1,i))
{output_high(PIN_B5);}
else
{output_low(PIN_B5);}
delay_ms(1000);
}
cont1=0;
output_low(PIN_B5);
}
enable_interrupts(INT_EXT);
}
void main()
{
output_high(PIN_E0);
output_low(PIN_E1);
ext_int_edge(H_TO_L);
enable_interrupts(INT_EXT); // Habilita interrup. EXT
enable_interrupts(INT_RDA); // Habilita interrup. dato recibido en USART
enable_interrupts(GLOBAL); // Habilita interrup. GLOBAL
cont1=0;
while(1);
}