#include "at898252.h"
#include "delay.h"

extern bit F_TIMER;

void init_timer_int(void)
{

 TR0 = TF0 = 0; // garantizar las condiciones iniciales adecuadas 
 TMOD |= 0x01;
 TMOD &= 0xF1;	// modo1, temporizador, control soft.

 ET0=1;			//Habilitamis Int del Timer0
 EA=1;			//Habilitamos Int global

}

void delay_ms(UINT msg)
{
	UINT desbordes;		//La definimos aqui para q la pueda usar la rutina de interupcion
	unsigned long nl;
	UINT resto,div,resto_div;
	init_timer_int();	//Preparamos para las int del timer
	nl =(unsigned long) 1000 * msg; /* ciclos */ 
	div=nl/65536;
	desbordes = div + 1; /* incluye deborde del resto */
	resto_div=nl%65536;
	resto = 65536 - resto_div;
	TL0 = resto & 0x00FF;
	TH0 = resto >> 8;
	TR0 = 1; /* timer corriendo */
	while (desbordes);
/*	//Sino usamos int:
	{
		if(TF0=1)
		{
			desbordes--;
			TF0=0;
		}//Fin del if

	}//Fin del while
*/
}//Fin de delay_ms



void InteTimer_0() interrupt 1	//Rutina de interrupcion del timer0
{
	if(desbordes--==0)
	{
		F_TIMER=1;
	} 
}

//Funcion que crea el delay necesario para ajutar la Fs requerida
//Usamos el timer2 pq el 1 esta en uso por elpuerto serie

void init_timer_freq_s(UCHAR frecuencia)
{
 unsigned long tiemp_sample;
 UINT resto,div,resto_div;
 F_TIMER=0;
 frecuencia=frecuencia*10;	//Por el puerto serie nos llega la decima parte de la freq deseada
 tiemp_sample=(unsigned long)1000000/frecuencia ; //Esto nos devuelve en microsegundos el tiempo de sample
//Ahora tendremos q pasar el tiempo de Ts de us a ciclos de maquina
//! cilco maq= 1,0850694444444444444444444444444 us
 tiemp_sample=(unsigned long)(tiemp_sample*1000)/1085;
 div=tiemp_sample/65536;
 desbordes = div + 1; /* incluye deborde del resto */
 resto_div=tiemp_sample%65536;
 resto = 65536 - resto_div;
 TL0 = resto & 0x00FF;
 TH0 = resto >> 8;
 TR0 = 1; /* timer corriendo */
}

