Here's a version that saves the changes and then checks if wither input went high (but doesn't check high to lows):
movf PORTB,w ;get current state xorwf last_in,w ;compare to previous xorwf last_in,f ;save changes andwf last_in,w ;did either go high? andlw (1<<4)||(1<<5) ;only want bits 4 and 5 skpnz goto nolowtohighs ; either bit4 or bit5 went from 0 to 1 ... nolowtohighs
Here's one that does a check and then saves the changes (and will allow you to test high to lows if you want)
movf PORTB,w ;get current state movwf temp xorwf last_in,w ;compare to previous andwf temp,w ;did either go high? andlw (1<<4)||(1<<5) ;only want bits 4 and 5 skpnz goto save changes ; low to high change - do whatever btfsc temp,4 do whatever for bit 4 going high btfsc temp,5 do whatever for bit 5 going high save_changes: movf temp,w xorwf last_in,w xorwf last_in,f
Also:
See also:
Andrew D. Vassallo says:
Bob Ammerman says:; compare register "last_inputs" to current PORTB reading ; ; direct computation of ~last_inputs & new_value comf last_inputs,W andwf PORTB,W andlw (1<<4)|(1<<5) skpz goto got_a_0_to_1