No estoy familiarizado con el microcontrolador PIC, así que daré una respuesta más general. (edición: respuesta específica de PIC agregada al final de esta publicación)
Los microcontroladores especialmente pequeños, como 8 bits y sus derivados, están limitados en lo que pueden hacer en una sola instrucción. Una instrucción puede contener la dirección de destino para un salto, pero no dos de ellas, por lo que then-else
está fuera. Solo tienes la parte if-then
, pero eso es suficiente. Hay dos enfoques. Algunos controladores le permiten saltar a una dirección dada si se cumple una condición, otros solo le permiten omitir la siguiente instrucción. En el primer caso, su código tendrá el siguiente aspecto:
if-test-succeeds goto test-success
test-failed first instruction of 'else' block
...
goto continue
test-success first instruction of 'then' block
...
continue first instruction after if-then-else
Si solo puedes omitir la siguiente instrucción, escribirás algo como
if-test-succeeds skip next instruction
goto test-failed
test-success first instruction of 'then' block
...
goto continue
test-failed first instruction of 'else' block
...
continue first instruction after if-then-else
La prueba en sí también tiene posibilidades limitadas. Como no puedes pasar dos números para compararlos. Lo que hace es cargar el acumulador con el primer número y en la siguiente instrucción restar el segundo número. Esto hará que los códigos de condición como el cero y los indicadores de acarreo se establezcan / borren. Las instrucciones condicionales probarán esas banderas. Así que si quieres escribir if A = B then do-equal else do-not-equal
esto se convertiría en
load accumulator with A
subtract B from accumulator
if zero-flag set goto do-equal
do-not-equal first instruction of 'else' block
...
goto continue
do-equal first instruction of 'then' block
...
continue first instruction after if-then-else
Importante: el manual del conjunto de instrucciones le indicará qué códigos de condición se verán afectados por una instrucción determinada. Por ejemplo, en la Z80 la instrucción ld
(para "acumulador de carga") no cambiará ninguna marca. Entonces, cargar el acumulador es no suficiente para determinar si los datos son cero.
editar
OK, así que hice una investigación y encontré lo siguiente:
El PIC tiene solo 2 instrucciones de salto condicional, BTFSS
y BTFSC
.
BTFSS : Prueba de bits F, Omitir si está configurado
Sintaxis: BTFSS f, b
donde f es un registro [0..127]
y b es el bit en ese registro para ser probado [0..7]
Descripción: Si el bit en el registro es 0
, se ejecuta la siguiente instrucción. Si el bit es 1
, la siguiente instrucción se descarta y en su lugar se ejecuta un NOP
.
BTFSC : Prueba de bits F, omitir si está claro
Sintaxis: BTFSC f, b
donde f es un registro [0..127]
y b es el bit en ese registro para ser probado [0..7]
Descripción: Si el bit en el registro es 1
, se ejecuta la siguiente instrucción. Si el bit es 0
, la siguiente instrucción se descarta y en su lugar se ejecuta un NOP
.