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
void SetearBit(unsigned char *PORT,
unsigned char pin)
{
if (pin==0) { *(PORT) = *(PORT) OR 0x01; }
if (pin==1) { *(PORT) = *(PORT) OR 0x02; }
}
Es solo a modo de ejemplo y para sugerirte una idea, pudieras usar un switch case para reducir el código.
Saludos