Autor Tema: Dudas uso de funciones en CCS  (Leído 3217 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Lord_Duran

  • PIC12
  • **
  • Mensajes: 76
Dudas uso de funciones en CCS
« 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.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Dudas uso de funciones en CCS
« Respuesta #1 en: 31 de Agosto de 2010, 22:01:07 »
no es necesario replicar tu mensaje en varios topicos, con uno seria suficiente
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Dudas uso de funciones en CCS
« Respuesta #2 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!
No contesto mensajes privados, las consultas en el foro

Desconectado Lord_Duran

  • PIC12
  • **
  • Mensajes: 76
Re: Dudas uso de funciones en CCS
« Respuesta #3 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"


 

anything