Bueeeeeeeeeeeeeno, dandole y dandole... la mejor forma que pude hacerlo fue a lo malo (metiendome mas a lo assembler y asi). Verá, noc q coños hará el CCS en el timer0 cunado termina porque hay un GOTO hacia otro lado.. asi que (como antes ya lo habia echo) use la interrupcion global del CCS:
#INT_GLOBAL
void IntGlobal(void)
{
if (T0IF)
{
set_timer0(192);
output_toggle(TX_IR);
}
clear_interrupt(INT_TIMER0);
}
Así, todo lo que hacia el CCS en #INT_TIMER0 ya no la hará aqui. De esta forma, ya es posible escbriri 192 en la precarga como lo manda las ecuaciones y la teória.
Muy aparte, por mi programa en el while, por alguna razon, no regresaba al while o se trababa en un lugar a causa de esta nueva modificación... aun asi no era motivo para regresar al molesto #INT_TIMER0. Asi que a investigar, entonces intentando entender lo que hacia el CCS en el #INT_TIMER0 para que no pasara esto pero al mismo tiempo para que no demore tanto (sus benditos timer0 = 32...).. me tope con un ejemplo del CCS (concretamente ex_glint.c) que hacen uso de este tipo de interrupcion (global). Ahi, en assembler crean rutinas de salvaguarda o algo asi de registros del CORE delprocesador que hacen que no se malogre la rutina o lo que estaba haacineod el pic antes de la interrupcion y lo siga haciendo despues de esta. De esta forma, mi interrupcion final quedaria asi:
#INT_GLOBAL
void IntGlobal(void)
{
static int8 cont;
#asm
//store current state of processor
MOVWF save_w
SWAPF status,W
BCF status,5
BCF status,6
MOVWF save_status
// Save anything else your code may change
// You need to do something with PCLATH if you have GOTOs
// remember to check to see what interrupt fired if using more than one!!
#endasm
if (T0IF)
{
set_timer0(200);
if (++cont < 32)
output_toggle(TX_IR);
else if (cont < 64)
output_low(TX_IR);
else
cont = 0;
us++; //1000us / 14us = 71.4285 veces.
}
clear_interrupt(INT_TIMER0);
#asm
// restore processor and return from interrupt
SWAPF save_status,W
MOVWF status
SWAPF save_w,F
SWAPF save_w,W
#endasm
}
A causa, de algunas cosa mas que tenia que hace en el timer, tuve que poner la precarga a 200. Pero igual se mantiene y todo corre de las mil maravillas =D!!!
Muchas gracias a todos por su atención y apoyo!
Ya vamos caminando!!
Un gran saludo!