Adjunto el codigo que tengo:
#include <16f876A.h>
#include <string.h>
#zero_ram
#fuses xt, wdt, put, nobrownout, nolvp
#use delay (clock=4 Mhz, restart_wdt)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#USE RS232(STREAM=com_hard, BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7, BITS=8, ENABLE=PIN_c5, restart_wdt, timeout=2) //UART HARDWARE
#USE RS232(stream=com_soft, baud=9600, xmit=pin_a5, RCV=PIN_B0, bits=8, force_sw, restart_wdt, timeout=1) //UART SOFTWARE
#byte RCREG= 0x1A
#byte RCSTA= 0x18
#byte porta= 0x05
#byte PORTB= 0x06
#byte portc= 0x07
#bit OERR= 0x18.1
#bit FERR= 0x18.2
#bit CREN= 0x18.4
//SALIDAS
#define buzz PIN_C0
#define pausa pin_A0
#define led PIN_A2
#define stat_rx pin_A3
int i=0; //puntero de for y de descargas RDA
int j=0; //puntero para RDA
int k=0; //puntero para EXT
int c=34; //34 = comillas
int d=26; //26 tecla control
int puerto=0;
int unidad=0;
int decena=0;
int led1=0;
int led2=0;
short flag_env_at1=0;
short flag_pausa=0;
short flag_test=0;
char source[50], dest[50], ctrlZ[5];
***********************************************
***********************************************
#int_rda //RECIBE INFORMACION DESDE EL CANAL
void rx_rfid (void){
output_high (stat_rx); //indica que está recibiendo
for(i=0;i<50;i++)
source[j++]=getc();
disable_interrupts (int_rda);
cren=0;
if (source[0]=='S' && source[1]==decena && source[2]==unidad && source[7]=='C' && source[8]=='M' && source[9]=='M' )
[color=red][font=Verdana][b][u]flag_env_at1=1; //tag invalido acceso denegado [/u][/b][/font][/color]
else
flag_pausa=1; //caso contrario debe detener el canal por un delay X
cren=1;
enable_interrupts (int_rda);
j=0;
output_low (stat_rx); //recepcion correcta
}
***********************************************
***********************************************
void main(void)
{
cren=0;
setup_wdt(WDT_2304MS);
setup_adc_ports(NO_ANALOGS); // all pins digital
port_b_pullups (true);
set_tris_a(0b00000000);
set_tris_b(0b00111111);
set_tris_c(0b10001000);
porta=0;
portb=0;
portc=0;
enable_interrupts (int_ext);
ext_int_edge (h_to_l);
enable_interrupts (int_rda);
cren=1;
enable_interrupts (global);
strcpy (ctrlZ, "^Z");
while(true)
{
if(flag_env_at1){ //si la bandera se activó en RDA
[color=red][b]memcpy(dest, &source[11], 9); //recorta los primeros 11 bytes de source y los pone en dest los siguientes 9
strcat (dest, ctrlZ); // añade el contenido de ctrlZ a dest
fprintf (com_soft, "Resultado %s", dest);[/b][/color]
delay_ms(100);
restart_wdt();
flag_env_at1=0;
}