TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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:
nombre_de_la_funcion() {
instruccion;
instruccion;
.
.
instruccion; }o este otro:
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:
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 //ir a sube y luego regresar y el otro //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.
-
no es necesario replicar tu mensaje en varios topicos, con uno seria suficiente
-
no es necesario replicar tu mensaje en varios topicos, con uno seria suficiente
Exactamente, no es necesario!
...pero tengo entendido que tambien puede no recibir nada, sera que tampoco puede no entregar nada????
Claro, puede no retornar ninguna variable.
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!
-
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:
#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"