No hay ningún mecanismo en HT-PIC para pasar un bit de registro como parámetro. Hay una variedad de formas en las que se puede lograr un resultado de este tipo, que involucra varios compromisos con respecto a la velocidad de ejecución, el código del sitio de la llamada y el código del método llamado.
El enfoque más simple es probablemente pasar una máscara de bits como un parámetro y una dirección o un desplazamiento de dirección de E / S como un segundo. Si la dirección siempre estará en uno de los bancos superiores, o siempre en uno de los bancos inferiores, esto significará pasar dos bytes de parámetros.
Si los bits de interés de E / S siempre estarán dentro de un pequeño grupo de registros (por ejemplo, PORTA-PORTH), se podrían comprimir ambas piezas de información de manera razonablemente eficiente en un byte; Yo sugeriría que para codificar los bits 4-7, uno tenga los cuatro bits superiores representando una máscara de bits, tenga establecido el bit 3 y los bits 0-2 representen un desplazamiento de dirección de E / S. Para los bits 0-3, haga que los 4 bits superiores representen una máscara de bits desplazada a la izquierda 4 bits, el bit 3 se borre y que los bits 0-2 representen el desplazamiento de la dirección. Si uno puede permitirse un par de ubicaciones globales para mantener la dirección y la máscara de bits, entonces podría tener una rutina:
void calcIo(uint8_t portBit)
{
ioPort = (&PORTA)+(portBit & 7);
ioBit = portBit & 0xF0;
if (!portBit & 8)
ioBit = (ioBit << 4) | (ioBit >> 4); // Allow SWAPF
}
La última declaración de aspecto extraño debería permitir que el compilador use una instrucción condicional SWAPF en ioBit [la expresión (ioBit << 4)
siempre será cero, si no estuviera allí, el compilador se sentiría obligado a enmascararlos bits].