Hola huichoman, de nuevo por aquí.
He empezado a quitar de aquí y de allá y tanto he querido quitar para dejarlo sencillo que al final no me funcionaba. Llevo peleando unas cuantas horas y al final como casi todo el error era una chorrada, había borrado la puesta a 0 inicial de un array de caracteres.
He intentado adaptar la programación a lo que tú quieres.
Estos son los programas:
Para el PIC1:
#include <18F4550.h>
#fuses XTPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN,NOPBADEN
#use delay(clock=48000000)
#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7)
#use fast_io(B)
#include "usb_cdc.h"
char a[5];
int j,k;
#int_rda
void recepcion_serie()
{
if(kbhit())
{
a[j] = getc();
j++;
}
}
void main(void)
{
char c;
int x;
set_tris_b(0x00);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
output_high(pin_b7);
output_low(pin_b6);
usb_cdc_init();
usb_init();
while(!usb_cdc_connected()) {}
output_low (pin_b7);
output_high (pin_b6);
for (x=0;x<6;x++) //Fundamental inicializarlas, de lo contrario no va bien
a[x] =0;
while (1)
{
usb_task();
if(usb_enumerated())
{
if (usb_cdc_kbhit())
{
c=usb_cdc_getc();
putc(c);
}
if(j==4)
{
disable_interrupts(INT_RDA);
output_bit(PIN_B0,bit_test(a[0],0));
output_bit(PIN_B1,bit_test(a[1],0));
output_bit(PIN_B2,bit_test(a[2],0));
output_bit(PIN_B3,bit_test(a[3],0));
for (k=0;k<4;k++)
usb_cdc_putc(a[k]);
j=0;
enable_interrupts(INT_RDA);
}
}
}
}
Para el PIC2:
#include <16f876.h>
#fuses XT, NOPROTECT, NOWRT, PUT, NOWDT, NOLVP, NOCPD, BROWNOUT
#use delay(clock=4000000)
#use rs232(baud=9600, BITS=8, PARITY=N, xmit=pin_c6, rcv=pin_c7)
#use fast_io(B)
#byte port_b=6
int j=0,n;
char c;
#int_rda
void recepcion_serie()
{
if(kbhit())
{
c = getc();
j=1;
}
}
void main(void)
{
set_tris_b(0x00);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
output_b(0x00);
while(1)
{
if(j==1)
{
disable_interrupts(INT_RDA);
if(c=='0')
output_bit(PIN_B0,1);
if(c=='1')
output_bit(PIN_B1,1);
if(c=='2')
output_bit(PIN_B2,1);
if(c=='3')
output_bit(PIN_B3,1);
if(c=='*')
output_b(0x00);
for (n=0;n<4;n++)
putc(bit_test(port_b,n) + '0');
j=0;
enable_interrupts(INT_RDA);
}
}
}
Un saludo