Autor Tema: Pasar Un PIN como parametro a una funcion  (Leído 2587 veces)

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

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Pasar Un PIN como parametro a una funcion
« en: 31 de Mayo de 2006, 04:38:19 »
No consigo pasarle un pin como parametro a una funcion, como seria posible algo asi
funcion(...PIN_B0,,,,,,);

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Pasar Un PIN como parametro a una funcion
« Respuesta #1 en: 31 de Mayo de 2006, 14:43:03 »
No consigo pasarle un pin como parametro a una funcion, como seria posible algo asi
funcion(...PIN_B0,,,,,,);

No sé que compilador de C usas pero en C18 esto no es posible.

La razón está en que al compilarse el código , las instrucciones de acceso a bits son 'fijas' y no variables.  No hay forma de indicarle a la instrucción que bit del puerto usar salvo que uno haga un case pero ya no estaríamos pasando el pin en cuestión como parámetro sino una variable que tenga una relación con un pin luego en el código.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Pasar Un PIN como parametro a una funcion
« Respuesta #2 en: 31 de Mayo de 2006, 16:51:25 »
Uso CCS, la verdad si es asi es jodido lo que quiero hacer, que es una rutina estandar para manejar sevos, pasandole solo el pin que debe activar y el angulo al que debe ir, se llamaria a la funcion de forma independiente.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Pasar Un PIN como parametro a una funcion
« Respuesta #3 en: 31 de Mayo de 2006, 17:18:42 »
Por que no utilizas el asm para asignar el valor en la función?.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Pasar Un PIN como parametro a una funcion
« Respuesta #4 en: 31 de Mayo de 2006, 23:16:40 »
Uso CCS, la verdad si es asi es jodido lo que quiero hacer, que es una rutina estandar para manejar sevos, pasandole solo el pin que debe activar y el angulo al que debe ir, se llamaria a la funcion de forma independiente.

El problema es el siguiente

Puedes pasar el PUERTO como parámetro porque el puerto en definitiva tiene una dirección de memoria.

Lo que no puedes pasar es es PIN como tal (que sería un bit dentro de un registro) como parámetro porque no hay ninguna función en ensamblador que permita en función de una 'variable' modificar un bit directamente de un puerto.  Para ser mas claro

bsf PORTA,5  en esta instrucción,  no hay ninguna instruccion en los pics en que el 5 sea un parámetro, simplemente es un dato fijo.

No hay una función que sea bsf PORTA,w y donde uno le cargue al w un valor entre 0 y 7.

Entonces lo que puedes hacer es algo asi como OR's pero no estarías pasando el pin como parámetro sino algo que lo represente.

Por ejemplo

PORTA = PORTA | 0x01 <-- estamos seteando el bit 0 del registro PORTA.

Entonces la función se podria llamar algo asi como

Código: C
  1. void SetearBit(unsigned char *PORT,
  2.                      unsigned char pin)
  3.  
  4. {
  5.   if (pin==0) {  *(PORT) = *(PORT) OR 0x01; }
  6.   if (pin==1) {  *(PORT) = *(PORT) OR 0x02; }
  7. }

Es solo a modo de ejemplo y para sugerirte una idea, pudieras usar un switch case para reducir el código.

Saludos


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Pasar Un PIN como parametro a una funcion
« Respuesta #5 en: 01 de Junio de 2006, 05:36:41 »
Muchas gracias tirare por ese camino a ver si funciona como yo quiero.