7 votos

La forma más rápida de cambiar el estado de un bit en ASM

¿Cuál es la manera más rápida de cambiar el estado de un bit1 en el MPASM para el 14 bits mejorada del conjunto de instrucciones? (Estoy trabajando con un PIC16F1829)

El código tiene que ser independiente, me refiero a que puede ser llamado en cualquier momento, sin saber el valor de los bits en ese momento.

Criterios clave es la velocidad de aquí: un programa con menos ciclos de instrucción es mejor. El número de ciclos de instrucciones se calcula como el número cuando el bit es 0 + el número cuando el bit es 1, dividido por 2.

1: con alternar me refiero a que el código tiene que ser similar a pin=!pin en C

14voto

xilun Puntos 261

Usted podría tratar de la siguiente mediante un XOR:

movlw 0x01 ; move 0x01 to W register
xorwf lat, F ; XOR W with port & store result in port latch

Una exclusiva O operación de preservar los valores en bits donde los bits en el registro de trabajo se ponen a cero y de invertir los valores en donde se encuentra. Así también se puede utilizar la misma técnica para alternar varios bits.

1voto

Camil Staps Puntos 7589

Se me ocurrió esto:

;                                                           Cycles if 1 | Cycles if 0
btfss    port, pin  ; skip next instruction if 1            1           | 1
goto     $+3        ; pin=0, goto PC+3                      1           | 2
bcf      port, pin  ; pin=1, clear pin and...               1           | 
goto     $+2        ;   ...proceed program                  2           |
bsf      port, pin  ; pin=0, set pin and proceed program                | 1           +
; ...                                                       ---------------------------
;                                                           5             4

Esto lleva 4 o 5 ciclos de instrucciones. Es algo más rápido posible?

1voto

ianb Puntos 659

¿Cuál es la manera más rápida de cambiar el estado de un bit1 en MPASM para el 14 bits mejorada del conjunto de instrucciones? (Estoy trabajando con un PIC16F1829)

El código tiene que ser independiente, me refiero a que puede ser llamado en cualquier de momento, sin saber el valor de los bits en ese momento.

Criterios clave es aquí la velocidad: un programa con menos ciclos de instrucción es mejor. El número de ciclos de instrucciones se calcula como el número de cuando el bit es 0 + el número cuando el bit es 1, dividido por 2.

1: con palanca me refiero a que el código tiene que ser similar a la de pin=!el pasador en C

He asumido que el bit desea alternar es parte de un registro que tiene "no le interesa" en las otras partes y, por tanto, de intercambio nibbles iba a funcionar. Usted nunca dijo que no podía trabajar así y si eres tan corto de los registros que usted necesita de los demás bits, a continuación, una reescritura de código o MCU actualización es recomendada.

Iba a necesitar para la instalación de 11110000 (cualquier patrón haría proporcionar bn no es igual bn+4) al principio, pero después de eso, cada vez que quiera invertir uno de los bits que se utiliza: -

swapf f,d

Es un ciclo de operación y no necesita 1 en el w ajuste de registro.

Por supuesto, en el resto del programa se tendría que adherirse a este método para cambiar los bits, PERO de nuevo, no he dicho que no puedes, en otras palabras BCF o BSF instrucciones están fuera de la ley.

Pensé acerca de gira pero giran través de transportar y esto sería, probablemente, corruptos cosas - yo no he escrito el código PIC en más de 20 años, así que perdón debería estar en la vanguardia de su mente cuando se reduzca la votación!!!

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X