Hallo,
ein IF kennt der PIC (in Assembler) nicht. Statt dessen gibt es Befehle, um ein Bit zu testen und entsprechend des Ergebnisses irgendwohin zu springen.
Angenommen der Zustand deiner Alarmanlage steht in einem Register (z.B. in 0x14) und hat verschiedene Werte von 1 bis 3. Dann gehen folgenden Befehle:
Code:
movlw  1  ; W-Register mit 1 laden 
xorwf  0x14,w    ; W-Register mit Register 0x14 xoren und in W speichern
btfsc STATUS,Z  ; Teste, ob das ZERO flag im Status-Register gesetzt ist
goto ALARM1      ; Wenn ja, gehe zu ALARM1
movlw  2            ; W-Register mit 2 laden
xorwf  0x14,w     ; W-Register mit Register 0x14 xoren und in W speichern
btfsc STATUS,Z   ; Teste, ob das ZERO flag im Status-Register gesetzt ist
goto ALARM2      ; Wenn ja, gehe zu ALARM2
goto ALARM3      ; ok, es kann nur 3 sein. Gehe zu ALARM3
Der xor Befehl setzt immer dann das ZERO flag, wenn die beiden gexorten Werte gleich waren, ansonsten löscht er es.
Und der btfsc Befehl testet ein bestimmtes Bit. Wenn es gelöscht ist, überspringt er den nächsten Befehl. Wenn das Bit gesetzt ist, führt er den nächsten Befehl aus.
Es hilft, den btfsc Befehl beim Programmieren immer gedanklich "auszusprechen", also
"btfsc = bit test flag and skip if clear"
oder (genau der gegenteilige Befehl)
"btfss = bit test flag and skip if set"

Ich hoffe, die Erklärungen helfen.
Gruß
Phaidros