A ver, pongo un trozo y lo explico porque el programa entero es bastante largo.
En este codigo, cuando recibo desde el ordenador un FF llamo a una funcion comunicarseConOtroPIC() en la que en primer lugar le envio una trama a ese pic, y me quedo esperando su contestacion, una vez ha llegado la contestacion, veo como es y salgo de la funcion, y logicamente termina la interrupcion provocada por el ordenador.
El problema es que en algunas ocasiones, el otro PIC no contesta, y me quedo encerrado esperando su contestacion. Por ese motivo queria programa un Timer, el cual, si en por ejemplo 1 segundo, no se recibe contestacion, pues que saliera de la funcion.
#int_ext
void ext_isr(){
if(kbhit(Canal_PC) && fgetc(Canal_PC) == 0xFF){
comunicarseConOtroPIC();
}
}
comunicarseConOtroPIC(){
//Envio una trama al otro PIC
for(i=0;i<14;i++){
fputc(trama,Canal_WC);
}
//Espero contestacion del otro PIC y capturo su contestacion
do{
if(kbhit(Canal_WC)){
bufferRecepWC[posBuffWC] = fgetc(Canal_WC);
if(bufferRecepWC[0] == 0xFF){
posBuffWC++;
}
}
}while(bufferRecepWC[posBuffWC - 1]!=0x02);
posBuffWC=0;
do{
longitud = fgetc(Canal_WC);
}while(longitud == 0xFF || longitud == 0x02); //Para que no se me cuele un FF ó 02 como longitud
do{
bufferRecepWC[posBuffWC] = fgetc(Canal_WC);
posBuffWC++;
}while(posBuffWC<(longitud-1));
posBuffWC=0;
finTrama = fgetc(Canal_WC);
//...
//Una vez recibida toda la trama, la trato, viendo lo que me ha llegado, y salgo de la función.
//...
}