Hola, pues aqui estoy con un esquema del codigo
en mi caso necesitaba que se enviase un byte por la usart como maximo cada 333,33 miliseg tenia ocupados el tmr0, y tmr1 con otros usos y en el bucle principal de programa poca cosa, se me ocurrio hacer una rutina de demora que sumandole el tiempo del bucle principal sumara 333ms y al final de este enviara una señal de
active sensing, decia que no pudiese superar ese tiempo no que no tarde menos, pero si tardaba muy poco este byte de estatus se mezclaba con otras cadenas de datos, pues a cada envio de la usart el programa retornaba a la parte del bucle principal del programa,donde se encontraba cuando se produjo una interrupcion, acortando el tiempo de este antes de enviar la susodicha señal.
Al principio de cada subrutina he puesto a uno el bit por el que pregunta en el programa cuando la ha terminado, pero antes de cada envio pongo todos los bits por los que se puede preguntar en el bucle a cero asi al final de cada subrutina si ha habido un envio por la usart el programa retorna al principio cuando esta finaliza.
PROGRAMA
BCF STATUS,RP0
RETRO_4 CALL DEMORA_4 ;RETRASO DE 75MS
BTFSS LECTOR,7 ;SI ESTÁ A UNO SALTA Y CONTINUA NORMALMENTE
GOTO RETRO_4 ;SI ESTABA A CERO HACE UN RETRASO DE 50MS
BSF LECTOR,7 ;LO PONE A UNO PARA QUE LO PONGA A CERO DEMORA_4
RETRO_3 CALL DEMORA_3 ;RETRASO DE 75MS
BTFSS LECTOR,6 ;SI ESTÁ A UNO SALTA Y CONTINUA NORMALMENTE
GOTO RETRO_4 ;SI ESTABA A UNO HACE UN RETRASO DE 50MS
BSF LECTOR,6 ;LO PONE A UNO PARA QUE LO PONGA A CERO DEMORA_3
RETRO_2 CALL DEMORA_2 ;RETRASO DE 75MS
BTFSS LECTOR,5 ;SI ESTÁ A UNO SALTA Y CONTINUA NORMALMENTE
GOTO RETRO_4 ;SI ESTABA A CERO HACE UN RETRASO DE 50MS
BSF LECTOR,5 ;LO PONE A UNO PARA QUE LO PONGA A CERO DEMORA_2
RETRO_1 CALL DEMORA_1 ;RETRASO DE 75MS
BTFSS LECTOR,4 ;SI ESTÁ A UNO SALTA Y CONTINUA NORMALMENTE
GOTO RETRO_4 ;SI ESTABA A CERO HACE UN RETRASO DE 50MS
BCF LECTOR,4 ;LO PONE A UNO PARA QUE LO PONGA A CERO DEMORA_1
RETRO CALL CUE_SSP ;LLAMADA QUE NO PERMITE QUE TMR1 SOBREPASE 128-128
CALL REFRESCO_TMR0 ;REFRESCA TMR0 EN CASO DE HABER SALTADO UN STOP
BTFSS LECTOR,3 ;TESTEA QUE HAYA SIDO CORREGIDO EL TIMER Y EL SPP_REG ANTES DE EL ENVIO
GOTO RETRO_4
BSF LECTOR,3 ;LO PONE A UNO PARA QUE LO PONGA A UNO CUE_SPP
MOVF SENSING,W ;MUEVE SENSING INFO http://www.eumus.edu.uy/docentes/jure/midi/#2.3.5
MOVWF REG_ENV_USART
CALL ENVIAR_USART ;Y LO ENVIA POR LA USART
BCF LECTOR,3
GOTO PROGRAMA
END
gracias y un saludo