Una cosa mas, que PIC estas usando (veo que es un PIC18xx pero no se cual)?. Y para probar las cosas deberias quitar la mayor cantidad de cosas y solo dejar lo que te esta dando problemas.
Que supongo que es lo del OpenTimerx(), por que este lo configura y habilita
Estas intentando leer tambien pulsos externos? o Solo internos ?
Otro problema mas, no tenes un Loop infinito en el main, hay una llave de mas,
Solo decirte que acomode las rutinas de interrupcion, agregue un par de cosas, quite otras y las puse en otro lugar, y TENES MILLONES de variables para algo muy simple, no se por que tantas hay definidas. encima muchas definidas como variables de 32 bits!
ejemplo pap1 pap2 , estas guardando tipos char, que son de 8 bits! en variables de 32...
los tmr, incluso suponiendo que sean de 16 bits, estas usando 32 para eso. desperdiciando los otros 16, lo demas realmente no tengo idea para que son por eso no puedo decir mas nada sobre esas.
E identa tu codigo, lo hace mas legible. Gracias a eclipse que me lo hace solo :/ fue un poco mas simple
unsigned char data;
int a;
char *buffer;
char r1[14],pas1[4],pas2[4],pas3[4];
int i=0,i1=0,i2=0,i3=0; // No se para que TANTOS indices
int i4,len,p,p1;
unsigned long newpaso1,newpaso2,newpaso3;
unsigned long oldpaso1=0; // Variable para ...
unsigned long oldpaso2=0; // Variable para ...
int ia,ib,ic,v_pap;
char j=0,cual,brazo_listo2=1;
//volatile bit brazo_listo2;
long pass1=3200,pass2=800,k=0,tmr1=0,tmr0=0;
unsigned int tmr1,tmr3
char pap1[3]={'e','e','e'}; // Variable de ...
char pap2[3]={'e','e','e'}; // Variable de ...
long h1=0; // Variable usada en ....
long h2=0; // Variable usada en ....
bool serialA_listo=false,brazo_listo,recibi_a=false,llenar_pap=true;
void interrupt interrupcionDeAlta(void)
{
if(PIR1bits.TMR1IF==1)
{
WriteTimer1(tmr1);
PIR1bits.TMR1IF=0;
if(h2<pap1[j]*2)
{
LATBbits.LATB0=!LATBbits.LATB0;
h2++;
brazo_listo2=2;
}
//else
if(h2==pap1[j]*2)
{
pap1[j]='e';
brazo_listo2=1;
j++;
if(j==3)j=0;
}
}
if(PIR2bits.TMR3IF==1){
WriteTimer3(tmr3);
PIR2bits.TMR3IF=0;
if(h1<pap2[j]*2)
{
LATBbits.LATB2=!LATBbits.LATB2;
h1++;
brazo_listo2=2;
}
//else
if(h1==pap2[j]*2)
{
pap2[j]='e';brazo_listo2=1;j++;
if(j==3)j=0;
}
}
if(PIR1bits.RCIF==1){
data = getcUSART();
//getsUSART(r1,data); // Esto esta MAL MAL MAL
for(i2=0;i2<data;i2++)
{
if(r1[i2]=='a')
recibi_a=true;
}
}
}
void putch(char c){
while(!TXIF);
TXREG = c;
}
void main(void) {
TRISB=0;
OpenUSART(USART_TX_INT_OFF &USART_RX_INT_ON &USART_ASYNCH_MODE &
USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 25);//brgh=25 => 48mhz
while(BusyUSART());
OpenTimer1( TIMER_INT_ON & T1_16BIT_RW & T1_SOURCE_INT & T1_PS_1_2 );
OpenTimer3( TIMER_INT_ON & T3_16BIT_RW & T3_SOURCE_INT & T3_PS_1_2 );
WriteTimer1(tmr1);
WriteTimer3(tmr3);
// Falta leer la USART para limpiar el flag de la misma
PIR1bits.TMR1IF=0;
PIR2bits.TMR3IF=0;
INTCONbits.PEIE=1;
INTCONbits.GIE=1;
while(1)
{
}
}