I'm not acquainted with the PIC microcontroller, so I'll give a more general answer. (edit: PIC-specific answer added at the bottom of this post)
Especially smaller microcontrollers, like 8-bit and their derivatives, are limited in what they can do in a single instruction. An instruction may contain the target address for a jump, but not two of them, so then-else
is out. You only have the if-then
part, but that's enough. There are two approaches. Some controllers let you jump to a given address if a condition is met, others only let you skip the next instruction. In the former case your code will look as follows:
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
If you can only skip the next instruction you'll write something like
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
The test itself has also limited possibilities. Like you can't pass two numbers to compare them. What you do is load the accumulator with the first number and in the next instruction subtract the second number. This will cause condition codes like the zero and carry flags to be set/cleared. Conditional instructions will test for those flags. So if you want to write if A = B then do-equal else do-not-equal
this would become
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
Important: the instruction set manual will tell you which condition codes will be affected by a given instruction. For instance, in the Z80 the ld
instruction (for "load accumulator") will not change any flags. So here loading the accumulator is not sufficient to determine if the data is zero.
edit
OK, so I did some research and I found the following:
The PIC has only 2 conditional jump instructions, BTFSS
and BTFSC
.
BTFSS: Bit Test F, Skip if Set
Syntax: BTFSS f,b
where f is a register [0..127]
and b is the bit in that register to be tested [0..7]
Description: If bit in register is 0
the next instruction is executed. If the bit is 1
the next instruction is discarded and a NOP
is executed instead.
BTFSC: Bit Test F, Skip if Clear
Syntax: BTFSC f,b
where f is a register [0..127]
and b is the bit in that register to be tested [0..7]
Description: If bit in register is 1
the next instruction is executed. If the bit is 0
the next instruction is discarded and a NOP
is executed instead.