TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: gazu_n en 23 de Febrero de 2006, 22:59:00
-
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);
}
-
Hola.
Hay varias cosas que pude checar en tu código.
Primero, no necesitas deshabilitar las interrupciones cuando las estas atendiendo, porque automaticamente el compilador genera el código para hacerlo por ti.
Segundo, en el código del TX al utilizar la directiva #use RS232, no se si estas oucpando el UART del PIC, porque si NO te falta agregar FORCE_SW, por cierto seria bueno que ocuparas ERRORS en la directiva de #use RS232 del RX, para verificar si hubo errores en la transmision...............
-
gracias por la ayuda, ya pille el error era problema de hardware, de todas formas muchas gracias y estaremos charlando sobre otros tema
-
ahora con este codigo, como podria hacer para que se comuniquen estos pics via RF a traves de los modulos TLP434 y RLP434, alguien tiene idea sobre esto???, porque yo no puedo por ninguna forma, no se me ocurre nada
ayudas por favor