TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Algec en 31 de Mayo de 2006, 04:38:19

Título: Pasar Un PIN como parametro a una funcion
Publicado por: Algec 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,,,,,,);
Título: Re: Pasar Un PIN como parametro a una funcion
Publicado por: maunix 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
Título: Re: Pasar Un PIN como parametro a una funcion
Publicado por: Algec 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.
Título: Re: Pasar Un PIN como parametro a una funcion
Publicado por: jfh900 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
Título: Re: Pasar Un PIN como parametro a una funcion
Publicado por: maunix 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


Título: Re: Pasar Un PIN como parametro a una funcion
Publicado por: Algec en 01 de Junio de 2006, 05:36:41
Muchas gracias tirare por ese camino a ver si funciona como yo quiero.