Hola a todos. Tengo que realizar una comunicación usart entre dos pics 18f. Mientras el emisor envía valores numéricos el receptor los almacena y demás. Mi problema radica en que deseo que el receptor le envíe al emisor un código que lo habilite a este ultimo a enviar la información. Para ello he hecho los siguientes programas y lamentablemente no se realiza la comunicación. Sospecho que el problema esta en que al usar interrupciones de recepción el receptor nunca ejecuta la función putc(15), y no tengo idea de por que ocurre esto. Alguien puede ayudarme? Agrego los códigos a continuación:
Transmisor:
Receptor:
Desde ya les agradezco sus respuestas
Transmisor:
Código:
#include <18F2550.h>
#fuses XTPLL,USBDIV,PLL1,PUT,CPUDIV1,VREGEN,NOWDT,NOPROTECT,NOLVP,NODEBUG
#use delay(clock=48000000)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,bits=8,parity=n)
#byte porta=getenv("SFR:PORTA")
#byte portc=getenv("SFR:PORTC")
#byte portb=getenv("SFR:PORTB")
int val,valor;
#int_RDA
void RDA_isr()
{
delay_ms(250);
val=GETC();
if (val==15){
output_toggle(pin_a0);
PUTC(valor);
portb=(valor&0x0f);
delay_ms(100);
valor++;
}
}
void main()
{
portb=porta=portc=0;
set_tris_a(0b11111110);
set_tris_b(0xf0);
// set_tris_c(0b10111111);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(true)
{
}
}
Receptor:
Código:
#include <18F4550.h>
#fuses XTPLL,USBDIV,PLL1,PUT,CPUDIV1,VREGEN,NOWDT,NOPROTECT,NOLVP,NODEBUG
#use delay(clock=48000000)
#include <lcdpf.c>
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,bits=8,parity=n)
#byte porta=getenv("SFR:PORTA")
#byte portb=getenv("SFR:PORTB")
#byte portc=getenv("SFR:PORTC")
int8 val;
#int_RDA
void RDA_isr()
{
val=GETC();
output_toggle(pin_a0);
}
void main()
{ int i;
lcd_init();
porta=portc=portb=0;
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
set_tris_b(0x00);
set_tris_c(0b10000000);
set_tris_a(0xfe);
// set_tris_d(0xff);
WHILE(TRUE)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"usart=%3u ",val);
putc(15);
}
}
Última edición por un moderador: