TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Lord_Duran en 31 de Agosto de 2010, 21:45:36

Título: Dudas uso de funciones en CCS
Publicado por: Lord_Duran en 31 de Agosto de 2010, 21:45:36
Saludos cordiales a todos los maestros del foro.

Tengo dudas sobre el uso de funciones en CCS, bueno, en si, de forma general se como se declara una funcion:

Código: [Seleccionar]
nombre_de_la_funcion() {
  instruccion;
  instruccion;
  .
  .
  instruccion; }
o este otro:
Código: [Seleccionar]
tipo nombre_de_funcion();
pero...no entiendo la diferencia entre los dos. Se que necesita recibir un dato de algun tipo y retorna otro dato de algun tipo, pero tengo entendido que tambien puede no recibir nada, sera que tampoco puede no entregar nada????

Esas dudas parten de lo que quiero hacer, bueno, parte del código que estoy trabajando es el siguiente, lo explicare abajo:
Código: [Seleccionar]
if (control == 0)  //AQUI TESTEAR EL RC3
         {
            output_high(PIN_C1);
            // ir a sube y luego regresar
            delay_ms(3000);
            // ir a paraA y luego regresar
            output_low(PIN_C1);
            control = 1;  //aqui ver el RC3
         }
donde estan los comentarios
Código: [Seleccionar]
//ir a sube y luego regresar y el otro
Código: [Seleccionar]
//ir a paraA y luego regresar  , "sube y "paraA" son los nombres de las funciones que quiero implementar, ambas funciones manejan el driver L293, obviamente, uno de ellos hace andar el motor, e lotro hace parar el motor, el código para ello se como hacerlo. Lo que no se es que si esas funciones regresan automáticamente a la proxima línea de donde se les llamo??, o es que se le tiene que hacer retornar con alguna otra línea de código???

Además, tambien quiero saver cómo es que se llama a la funcion especificada, en especial a una que no tiene que recibir nada.

Muchas gracias.
Título: Re: Dudas uso de funciones en CCS
Publicado por: jhozate en 31 de Agosto de 2010, 22:01:07
no es necesario replicar tu mensaje en varios topicos, con uno seria suficiente
Título: Re: Dudas uso de funciones en CCS
Publicado por: Suky en 31 de Agosto de 2010, 22:19:29
no es necesario replicar tu mensaje en varios topicos, con uno seria suficiente

Exactamente, no es necesario!

Citar
...pero tengo entendido que tambien puede no recibir nada, sera que tampoco puede no entregar nada????

Claro, puede no retornar ninguna variable.

Citar
Lo que no se es que si esas funciones regresan automáticamente a la proxima línea de donde se les llamo??, o es que se le tiene que hacer retornar con alguna otra línea de código???

Regresa a la siguiente linea de código.


Saludos!
Título: Re: Dudas uso de funciones en CCS
Publicado por: Lord_Duran en 31 de Agosto de 2010, 22:26:55
Saludos.
Lo tomare en cuenta.

Ahora, aparte de mi duda con las funciones, tambien tengo problemas con el código de lo que estoy haciendo, al compilar me sale como 57 errores.

El código es el siguiente:

Código: [Seleccionar]
#include <16F877A.h>
#device adc = 10
#FUSES XT, NOWDT, NOPROTECT, NOPUT, NOBROWNOUT
#use delay(clock=4000000)
#use fast_io(C)
#use fast_io(D)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)
#include <LCD4x20.C>

void main()
{
   set_tris_c(0xB0);
   set_tris_d(0xC0);
   //DECLARANDO VARIABLES DE CONTROL
   int1 control;
   int1 control1;
   int1 controlh;
   //FIN VARIABLES DE CONTROL
   int16 hum1;
   int16 hum2;
   int16 hum3;
   int16 temp1;
   int16 temp2;
   float tempt1;
   float tempt2;
   float humt1;
   float humt2;
   float humt3;
   float humS;
   float tempS;
   float RH;
   float p;
   setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
   setup_adc(ADC_CLOCK_INTERNAL);
   lcd_init();
   control = 0;
   control1 = 0;
   controlh = 0;
   while(1)
   {
      set_adc_channel(0);  //CANAL 0
      delay_us(10);
      temp1 = (read_adc() * 100);
      set_adc_channel(1);  //CANAL 1
      delay_us(10);
      temp2 = (read_adc() *100);
      tempt1 = temp1 * 0.0049;
      tempt2 = temp2 * 0.0049;
      tempS = (tempt1 + tempt2) / 2.0;   //TEMPERATURA A MANEJAR
      //*********** RUTINA DE CONTROL DE TEMPERATURA ****************
      if (tempS >= 28.0)
      {
         if (control == 0)  //AQUI TESTEAR EL RC3
         {
            output_high(PIN_C1);
            // ir a sube y luego regresar
            delay_ms(3000);
            // ir a paraA y luego regresar
            output_low(PIN_C1);
            control = 1;  //aqui ver el RC3
         }
      }
      if (tempS <= 20.0)
      {
         if (control == 1)
         {
            output_high(PIN_C3);
            //ir a baja y regresar
            delay_ms(3000);
            //ir a paraB y regresar
            output_low(PIN_C3);
            control = 0;
         }
         output_high(PIN_C2); //AIRE CALIENTE
         control1 = 1;
      }
      if (control1 == 1)
      {
         if (tempS <= 25.0)
         {
            output_high(PIN_C2);  //AIRE CALIENTE
         } else
           {
              output_low(PIN_C2);  //APAGA AIRE CALIENTE
              control1 = 0;
           }
      }
      //************ FIN RUTINA CONTROL TEMPERATURA *****************
      set_adc_channel(2);  //CANAL 2
      delay_us(10);
      hum1 = read_adc();
      set_adc_channel(3);  //CANAL 3
      delay_us(10);
      hum2 = read_adc();
      set_adc_channel(4);  //CANAL 4
      delay_us(10);
      hum3 = read_adc();
      //hum1t = (5.0 * hum1) / 1024.0;
      humt1 = hum1 * 0.0049;
      humt2 = hum2 * 0.0049;
      humt3 = hum3 * 0.0049;
      humS = (humt1 + humt2 + humt3) / 3;
      RH = (humS - 0.958) / 0.0307;   // HUMEDAD HA MANEJAR
      //******* RUTINA CONTROL DE HUMEDAD ****************
      if (RH >= 80.0)
      {
         output_low(PIN_C0);
      }
      if (RH <= 75.0)
      {
         output_high(PIN_C0);
         controlh = 1;
      }
      if (controlh == 1)
      {
         if (RH <= 77.0)
         {
            output_high(PIN_C0);
         }else
         {
            output_low(PIN_C0);
            controlh = 0;
         }
      }
      //*********** FIN RUTINA CONTROL HUMEDAD **************
      //printf(lcd_putc, "\fADC = %4ld", q);
      //printf(lcd_putc, "\nVoltage = %01.2fV", p);
      printf(lcd_putc, "\f   TEMPERATURA    ");
      printf(lcd_putc, "\n     %01.2f C", tempS);
      printf(lcd_putc, "\n HUMEDAD   ");
      printf(lcd_putc, "\n%01.2f PHS", RH);
      //TRANSMISION SERIAL
      printf("ADC = %4ld", tempt1);
      printf(" Temperatura = %01.2f C\r", tempS);  // El \r permite cambiar de línea
      printf("ADC = %4ld", hum3);
      printf(" humedad = %01.2f RH\r", RH);
      delay_ms(100);
   }
}

me sale como 57 errores, la mayoria de esos errores dice que las variables no estan declaradas, tambien, se hace problemas por los números que utilizo en los "if"