All pastes #1869901 Raw Edit

Miscellany

public text v1 · immutable
#1869901 ·published 2010-04-20 16:51 UTC
rendered paste body
/*
 *  p7.c
 *  
 *
 *  Created by Israel Zuiga, et al. on 19/04/10.
 *  Copyright 2010 Universidad de Colima. All rights reserved.
 *
 * 
 *offset
 *1 a consideration or amount that diminishes or balances the effect of a contrary one : an offset against taxable profits.
 *2 the amount or distance by which something is out of line : these wheels have an offset of four inches.
 *
 */
#include <16F877a.H>
#device ADC=10
#include <stdlib.h>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, bits=8, parity=N)
int opc;
char str[10];
int ban,ban2=0,bancs=0;
//Version de Firmaware: v. 0.1

#int_rda
void rda_isr()
{
   while(kbhit()){//espera a la llegada de los 8 bits
      delay_us(10);
      if(kbhit()){
         if (bancs==0){/*off set*/
            opc=getc();/*recibe comando*/
            if ((opc>96) && (opc < 107) )
               opc=opc - 32;
            ban=1;
            }
         else{
            gets(str);//obtener cadena
            ban2=1;
         }
      }
   }
}

void seleccion()
{
   printf("\n.::Selecciona el modo de operacion::.");
   printf("\n\n  Modo ejecucion: [a] Modo configuracion: [b]  ");
}
void modoc()
{
   printf(".:Menu de Conf.:.");
   printf("\n [c] Offset");
   printf("\n [d] Cadencia");
   printf("\n [e] resolucion");
   printf("\n [f] firmware");
   printf("\n [g] regresar al inicio");
}

//Inicia la parte principal del programa
void main()
{
   //Conversion de ADC
   float decimal;
   int16 valor=0;//Resultado de ADC
   int cadencia=1;//Lapso de tiempo para tomar una muestra
   int aux=0;
   float offset=0;//Valor a considerar para generar un balance en medicion
   int resolucion = 0;
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_adc_ports(RA0_analog);
   set_adc_channel(0);
   //Lineas para interrupcion RDA RS232
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);
   //LLamada a menu principal
   seleccion();
   //Inicializacion de variables
   opc=0;
   ban=0;
   while (TRUE) {
      if (ban==1) {
         ban=0;
         switch (opc) {
            //Modo Ejecucion
            case 65:{
               printf("\n Entrando al Modo Ejecucion. Salir con [r]");
               printf("Temperatura: ");
               ban=1;
               aux=cadencia-1;
               while (ban==1){
                  delay_ms(1000);
                  aux+=1;
                  if (aux==cadencia){
                     valor=read_adc();
                     valor=(valor>>resolucion);
                     decimal=(float)valor/2.048;
                     decimal=decimal + offset;
                     if ((decimal <10) || (decimal > -10))
                        printf("\b\b\b\b\b\b\b");
                     else
                        printf("\b\b\b\b\b\b");
                     printf("%fc",decimal);
                     aux=0;
                  }
                  if (opc==82){
                     ban=0;
                     printf("\nEl medidor de temperatura ha parado\n");
                     seleccion();
                  }
               }
               break;
            }
            //Modo Configuracion
            case 66: {
               modoc();
               break;
            }
            //Offset
            case 67: {
               printf("\n Offset");
               printf("\n Offset debe ser entre 2 y -2. Indicando su signo");
               printf("\n P.ejemplo: +1.3, -1.5");
               printf("\n Escribe un valor para el Offset:");
               while (bancs==1) {
                  if (ban2==1) {
                     offset=atof(str);
                     ban2 = 0;
                     bancs = 0;
                     modoc();
                  }
               }
               break;
            }
            //Cadencia
            case 68:
            {
               printf("\n Cadencia");
               printf("\n 10 seg. = [0]");
               printf("\n 9 seg. = [9]");
               printf("\n 8 seg. = [8]");
               printf("\n,,,");
               printf("\n 1 seg. = [1]");
               ban=1;
               while (ban==1){
                  if ((opc>47) && (opc<58)){
                     cadencia=opc-47;
                     ban=0;
                     modoc();
                  }
               }
               break;
            }
               //Resolucion
            case 69:
            {
               printf("\n Resolucion");
               printf("\n 8bits [x] \n 9bits [y] \n 10bits [z]");
               ban=1;
               while (ban==1){
                  if (opc !=69){
                     switch (opc){
                        case 88:{
                           resolucion=2;
                           ban=0;
                           modoc();
                           break;
                        }
                        case 89:{
                           resolucion=1;
                           ban=0;
                           modoc();
                           break;
                        }
                        case 90:{
                           resolucion=0;
                           ban=0;
                           modoc();
                           break;
                        }
                        default:{
                           printf("\n Nel   \n");
                           ban=0;
                           modoc();
                           break;
                        }
                     }
                  }                     
               }
               break;
            }
               
               
               //Firmwarez
            case 70:
            {
               printf("\n Este uC tiene la version .12345 Release Candidate");
				printf("\n En 5 segundos regresaras al menu");
               delay_ms(5000);
               modoc();
               break;
               
            }
               
            //Regresar al inicio
            case 71:
            {
               seleccion();
               break;
            }
            //comandos sin funcion
            default:{
               seleccion();
               break;
            }






            }
      }
   }
}