void interrupt()
{
     if(PIR1.RCIF)
     {
            if(RCREG>47&&RCREG<58)
            {
                contador++;
                switch(contador)
                {
                case 1:
                d1=RCREG-48;
                break;

                case 2:
                d2=RCREG-48;
                break;

                case 3:
                d3=RCREG-48;
                break;

                }
                Numero=((d1*100)+(d2*10)+d3);
            IntToStr(Numero, TEXTO2);
            configuracion();
            RESET_LCD();
            CONFIG_SET();
            ENABLE();
            DISPLAY_ON_OFF();
            ENABLE();
            CLEAR_DISPLAY();
            ENABLE();
            ENTRY_MODE_SET();
            ENABLE();
            CADENA1();                                           //Cadena de Texto 1era Linea
            SET_DDRAM();
            ENABLE();
            CADENA2();                                           //Cadena de Texto 2da Linea
            }

            if(RCREG>96&&RCREG<108)
            {
                  Boton=RCREG;
                  switch(Boton)
                  {
                      case 97:
                           Motor=5;
                      break;
                      
                      case 98:
                           Motor=4;
                      break;
                      
                      case 99:
                           Motor=3;
                      break;

                      case 100:
                           Motor=1;
                      break;
                      
                      case 101:
                           Motor=0;
                      break;
                      
                      case 102:
                           PORTB=0x00;
                           PORTB.RB2=1;
                           PWM_CFG();
                           Periodo(256);
                           Valor=(Numero*2.5)+200;
                           Ancho_Pulso(Valor);
                      break;
                      
                      case 103:
                           d1=0;
                           d2=0;
                           d3=0;
                           contador=0;
                      break;
                      
                      case 104:
                           PORTB=0x00;
                           switch(Motor)
                           {
                                  case 0:
                                       PORTB.RB0=1;
                                  break;
                                  
                                  case 1:
                                       PORTB.RB1=1;
                                  break;
                                  
                                  case 3:
                                       PORTB.RB3=1;
                                  break;
                                  
                                  case 4:
                                       PORTB.RB4=1;
                                  break;
                                  
                                  case 5:
                                       PORTB.RB5=1;
                                  break;
                           }
                            if(Motor>0)
                           {
                                  Numero=72;
                           }
                           if(Motor==0)
                           {
                                  Numero=105;
                           }
                           PWM_CFG();
                           Periodo(256);
                           Valor=(Numero*2.5)+200;
                           Ancho_Pulso(Valor);
                      break;
                      
                      case 105:
                           PORTB=0x00;
                           switch(Motor)
                           {
                                  case 0:
                                       PORTB.RB0=1;
                                  break;

                                  case 1:
                                       PORTB.RB1=1;
                                  break;

                                  case 3:
                                       PORTB.RB3=1;
                                  break;

                                  case 4:
                                       PORTB.RB4=1;
                                  break;

                                  case 5:
                                       PORTB.RB5=1;
                                  break;
                           }
                           if(Motor>0)
                           {
                                  Numero=68;
                           }
                           if(Motor==0)
                           {
                                  Numero=45;
                           }
                           PWM_CFG();
                           Periodo(256);
                           Valor=(Numero*2.5)+200;
                           Ancho_Pulso(Valor);
                      break;
                      
                      case 106:
                           PORTB=0x00;
                      break;
                  }
            }
     }
}
int main(void)

{
	uint8_t tecla;
	uint32_t retardo;

    contador_periodo=0;
	periodo_calibracion=10;//100ms

	ganancia=1;//

	amplitud_max=775;//2.5V
	amplitud_min=465;//1.5V
	contador=0;
    amplitud=amplitud_max-amplitud_min;//775-465=310

   mitad_periodo=periodo_calibracion/2;
   offset=amplitud_max-amplitud;


	//Generacion de señal cuadrada

	///
	//paso=(float)(amplitud_max/periodo);
		InicializarTimer ();
		Periodo(INTERVALO);
		InicializarLed ();

		HabilitaInterrupcion();
		//InicializarTecla ();
		InicializarDAC ();
		InicializarADC ();
		InicializarUSART();

		for(;;){


				tecla=LeerTecla();
				//amplitud=amplitud_max-amplitud_min;


						switch(tecla)
						    {
			     		  case TECLA1:/*aumenta la ganancia 1.1, su  equivalente adc 341*/


			     			   ganancia=ganancia*1.1;
			     			   amplitud_max=amplitud_max*ganancia;
			     			   amplitud_min=amplitud_min*ganancia;
			     			   amplitud=amplitud_max-amplitud_min;
			     			   offset=amplitud_max-amplitud;

			     			   contador=0;
							   break;

						   case TECLA2:/* atenuo la señal 0.8 */
							   ganancia=ganancia*0.8;

							   amplitud_max=amplitud_max*ganancia;
							   amplitud_min=amplitud_min*ganancia;
							   amplitud=amplitud_max-amplitud_min;
							   offset=amplitud_max-amplitud;

							   contador=0;

						        break;

					       case TECLA3:/*aumento el offset 100mv*/

					    	   //31 es el equivalente a 0.1V=100mV
					    	   if (amplitud_max<TOPE_MAX)
					    	      {
					    	   amplitud_max=amplitud_max+31;
					    	   amplitud_min=amplitud_min+31;
					    	   amplitud=amplitud_max-amplitud_min;
					    	   offset=offset+31;
					    	    contador=0;
					    	      }

					    	   	 break;

					       case TECLA4:/*disminuyo offset 100mv=0.1v*/
					    	   //31 es el equivalente a 0.1V=100mV
					    	   if (amplitud_min>TOPE_MIN)//equivalente a 0.2V
					    	      {
					    	      amplitud_max=amplitud_max-31;
					    	      amplitud_min=amplitud_min-31;
					    	      amplitud=amplitud_max-amplitud_min;
					    	      offset=offset-31;
					    	      contador=0;
					    	      }

					    	   break;
						    }

						if (tecla!=0){  //para el antirebote
							//retardo

							for(retardo=0;retardo<10000000;retardo++);
							/*ApagarTodos();*/

						          }
				        }


		while (TRUE);
}