#include "at898252.h"
#include "protocolo.h"
#include "adc0808.h"
#include "visual.h"
#include "delay.h"
#include "rs232.h"
#include "lcd_4bit.h"

#define	OSC			11059200L	//Frecuencia del cristal
#define FAUX		(OSC / (12 * 16))
#define BAUDRATE	57600

#define MOD_VISUAL	0x00
#define MOD_CONT	0x01
#define MOD_N_SAMPL	0x02

//extern UCHAR idata buffer[8] ; 
//Variable donde se almacena en rs232.c
extern UCHAR dato_en_serie;

//Definimos las flags
extern bit F_COM;
extern bit F_MASQ;
extern bit F_FREQ;
extern bit F_N_SAMPL;
extern bit F_MANDADO;
extern bit F_ARRANCAR;
extern bit F_TIMER;
extern bit salir;

//Variables donde almacenamos los datos y comandos

extern UCHAR COM;
extern UCHAR MASQ;
extern UCHAR FREQ;
extern UCHAR N_SAMPL;

//Buffer donde almacenamos los 8 canales del adc
extern UCHAR idata buffer[8] ; 

void mostrar_parametros(void)
{
	display("F:");
	mostrar_dato(FREQ);
	display("S:");
	mostrar_dato(N_SAMPL);
	display("M:");
	mostrar_dato(MASQ);
}

void recibir(void)
{
	if (F_COM==1) 
	{
		COM=dato_en_serie; 
		F_COM=0; 
		F_MASQ=1;
	}
	else
	{
		if (F_MASQ==1) 
		{ 
			MASQ=dato_en_serie; 
			F_MASQ=0;
			F_FREQ=1;
		}
		else
		{
			if (F_FREQ==1) 
			{ 
				FREQ=dato_en_serie; 
				F_FREQ=0; 
				F_N_SAMPL=1;
			}
			else
			{
				if (F_N_SAMPL==1) 
				{ 
					N_SAMPL=dato_en_serie; 
					F_N_SAMPL=0; 
					F_COM=1;F_ARRANCAR=1;
				}
			}
		}
	}
}//Fin de recibir



void mandar(void)
{
 UCHAR i;
 UCHAR cont;
 if (COM==MOD_N_SAMPL)
 {
	lcd_clrscr();
	display("Modo N.S.");
	poner_linea_2();
	mostrar_parametros();
	for (;N_SAMPL>0;N_SAMPL--)	//Mientras queden samples por mandar
	{
		init_serie_int();
		init_timer_int();
		init_timer_freq_s(FREQ);
		barrido_con_mascara(MASQ); //Leemos los canales que nos han pedido
		for(cont=0;cont<8;cont++)
		{
			enviar_serie_int(buffer[cont]); //Mandamos los 8 bytes de los 8 canales
		}
		while (F_TIMER==0); ///Esperamos hasta que se cumpla Ts(tiempo de sampleo)
	}
	return;//Ya hemos hecho todas las lecturas y salimos
 }
 if (COM==MOD_CONT)
 {
	lcd_clrscr();
	display("Modo continuo");
	poner_linea_2();
	mostrar_parametros();
	init_serie_int();
	init_timer_int();
	init_timer_freq_s(FREQ);

	while(salir!=1)
	{
		barrido_con_mascara(MASQ); //Leemos los canales que nos han pedido
		for(cont=0;cont<8;cont++)
		{
			enviar_serie_int(buffer[cont]); //Mandamos los 8 bytes de los 8 canales
		}
		while (F_TIMER==0); ///Esperamos hasta que se cumpla Ts(tiempo de sampleo)
	}
	return;
 }
 if (COM==MOD_VISUAL)
 {
	while(salir!=1)
	{i=ver(i);}
 }
}
