Autor Tema: Paso de valores desde y hacia funciones  (Leído 8186 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Paso de valores desde y hacia funciones
« Respuesta #15 en: 29 de Agosto de 2007, 15:37:42 »
Me autorespondo: Si, anda 10 puntos  :-/ :-/
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Paso de valores desde y hacia funciones
« Respuesta #16 en: 29 de Agosto de 2007, 15:38:11 »
Otra mas, y no molesto mas!

Esto funcionara? Deberia hacer una pause de "demora" segundos:

//Funcion pausa_seg. Hace una pausa de un segundo.
//demora que recibe como parametro.
void pausa_seg(int demora) {
   int i;
   for (i=0; i<=demora; i++) {
       delay_ms(1000); }
   
}


(es que el for-next escrito asi me da escalofrios todavia... :D)

Sacale el =.

Deberia funcionar.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Paso de valores desde y hacia funciones
« Respuesta #17 en: 29 de Agosto de 2007, 15:42:08 »
Claro, el = hace que sea "demora+1", no?  :?
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Paso de valores desde y hacia funciones
« Respuesta #18 en: 29 de Agosto de 2007, 15:42:28 »
Yes! :D O le sacas el igual, o inicializas i=1.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Paso de valores desde y hacia funciones
« Respuesta #19 en: 29 de Agosto de 2007, 15:44:25 »
IMPRESIONANTE VELOCIDAD DE RESPUESTA!!!!!!! :shock: :shock:

Gracias a todos.

Cambie a

   if (input(PIN_A1==1)) programa_aux = programa_aux++;
   if (input(PIN_A0==1)) programa_aux = programa_aux+2;

Pero el resultadoes el mismo....

QUE TARADO! Acabo de ver los ==1, que me quedaron de gusto.
...


si se pueden poner los =1 y sería así:

   if (input(PIN_A1)==1)...

aunque sería redundar, porque en C se asume true cuando preguntas por el resultado de una función booleana, el caso contrario

   if (input(PIN_A1)==0) = if(!input(PIN_A1))

en ccs true=1 y false=0


PD: hay que poner un cronómetro para saber en cuanto tiempo respondemos cada uno  :D
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Paso de valores desde y hacia funciones
« Respuesta #20 en: 29 de Agosto de 2007, 15:44:57 »
Espectacular. ¿Estare en condiciones para el 2/10?  :mrgreen:
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Paso de valores desde y hacia funciones
« Respuesta #21 en: 29 de Agosto de 2007, 15:46:08 »
Gracias Pedro!

Sabia lo de que se asume true. E incluso puedo evitarme los "void" al declarar las funciones, pero los dejo por que el codigo queda igual de largo, y a mi me resulta mas claro si a esas cosas las "veo" escritas. :)
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Paso de valores desde y hacia funciones
« Respuesta #22 en: 30 de Agosto de 2007, 09:56:55 »
Te felicito Ariel, en tan corto tiempo y venido del Basic, la forma elegante y ordenada en que programas. :-/
Este es uno de los bastiones del C, la elegancia de la programacion.
El otro se aprende con el tiempo, y es aprender a realizar funciones y librerias reusables en muchos proyectos... :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Paso de valores desde y hacia funciones
« Respuesta #23 en: 30 de Agosto de 2007, 10:01:13 »
Gracias master!

Es que la prolijidad es imprescindible si prentendes entender el codigo años mas tarde.
Me gusta MUCHO el C. Ese que pase fue mi primer programita, y es obvio que se debe poder hacer mas corto o de otra manera, pero me gusto que salvo el problema con la lectura de pines que originó este hilo, funciono de una! :)

Saludos.
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Paso de valores desde y hacia funciones
« Respuesta #24 en: 31 de Agosto de 2007, 12:14:02 »
... y es obvio que se debe poder hacer mas corto o de otra manera...


Diste en el clavo Ariel. El primer paso es lograr hacer funcionar el programa. El segundo paso optimizarlo.
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Paso de valores desde y hacia funciones
« Respuesta #25 en: 03 de Septiembre de 2007, 04:35:11 »
Pues a mí me gusta más hacerlo así:

Código: C
  1. #byte PORTB=0xF81
  2. #bit  TeclaTest  =  PORTB.2
  3.  
  4. if (TeclaTest)
  5.     ... tecla pulsada

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Paso de valores desde y hacia funciones
« Respuesta #26 en: 03 de Septiembre de 2007, 07:27:59 »
Hola Manolo!
Es una buena idea, queda mucho mas claro.
En Basic yo usaba algo asi (que se parece mucho a lo que propones):

Código: [Seleccionar]
Symbol teclatest = PORTB.2

if teclatest then
... tecla pulsada

Asi que no me va a costar adaptarme a esa manera de programar. :)
Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Paso de valores desde y hacia funciones
« Respuesta #27 en: 19 de Febrero de 2008, 14:46:37 »
Hola!
Tengo otro problema con una funcion, asi que he "resucitado" este hilo.

La idea es la siguiente: Tengo un pulsador en A0, que se pone a +V al presionarlo. Cuando esto ocurre, el programa salta a una funcion que se encarga de contar de 1 a 6 repetidamente hasta que se suelte el pulsador. Cuando esto ocurre, se muestra un valor en el PORTB, y se regresa al programa principal.

Sin embargo, he colocado algunas"señales" en el codigo para seguirle el rasto a medida que se ejecuta, y si bien salto a la funcion al presionar el pulsador, nunca entra dentro del bucle "do....while" que hay dentro de ésta.

Por supuesto, se trata de un circuito que simula un dado.El codigo esta bien comentado, y es sencillo:

Código: [Seleccionar]
#include <16f627a.h>           //PIC utilizado         
#fuses XT,NOWDT,NOPROTECT,PUT  //Configuramos los fuses
#use delay (clock=4000000)     //Oscilador a 4Mhz
#use fast_io(b)                //Optimizamos E/S del PORTB

#BYTE PORTB = 0x06             //El PORTB está en 0x06

//Variables globales--------------------------------------------------
//La tabla dado tiene el valor del PORTB para cada numero posible.
int dado [6]={0x01,0x08,0x09,0x0A,0x0B,0x07};

//Prototipo de funciones ---------------------------------------------
void lanzo_dado(void);

//------Programa principal--------------------------------------------
void main(void)
{
   set_tris_a(0xFF);           //configuro el PORTA completo como entrada.
   set_tris_b(0x00);           //configuro el PORTB completo como salida.
   
   disable_interrupts(GLOBAL); //todas las interrupciones desactivadas

   do{                         //bucle principal
      //Apago los leds
      PORTB = 0x80;
      if(input(PIN_A0)){       //Si elpulsador esta en alto...
            lanzo_dado();      //...lanzo el dado y muestro el resultado
      }
      }while(TRUE);            //Repito el bucle.       
}
//--------------------------------------------------------------------
//Esta funcion lanza el dado y muestra el resultado
//--------------------------------------------------------------------
void lanzo_dado(void) {
      char i=0;             //i contendrá el valor del dado en cada momento.

      do{                   //bucle principal
         i++;               //Sumo 1 a i
         PORTB = 0x40;
         if (i == 7) {      //Si pasa de 6...
            i = 1;          //...empiezo de 1 otra vez.
         }
      }while(PIN_A0);       //Repito el bucle hasta que se suelte el pulsador.
      PORTB = 0x20;
      //Ahora, muestro el valor de "i" en los LEDs:
      PORTB =  dado [i];
      delay_ms(5);      //Espero 5 segundos, y vuelvo al programa ppal.
}
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Paso de valores desde y hacia funciones
« Respuesta #28 en: 19 de Febrero de 2008, 14:54:04 »
Hola Arielito!

¿Y el antirebote?

O bien, cambiando la condicion  while(PIN_A0) a while(bit_test(porta,0))

Saludos!
« Última modificación: 19 de Febrero de 2008, 14:56:20 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Paso de valores desde y hacia funciones
« Respuesta #29 en: 19 de Febrero de 2008, 15:09:10 »
En el Do--While estas testeando mal la condicion.
PIN A0 es una constante con un valor determinado, no sirve como condicion, porque no es una variable.

Deberias comprobar asi:

Código: [Seleccionar]
      do{                   //bucle principal
         i++;               //Sumo 1 a i
         PORTB = 0x40;
         if (i == 7) {      //Si pasa de 6...
            i = 1;          //...empiezo de 1 otra vez.
         }
      }while(input(PIN_A0));       //Repito el bucle hasta que se suelte el pulsador.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.


 

anything