In general, you just save the prior state of the port, register, etc.. then compare the current state to that state to check for changes.
From: http://www.myke.com/basic.htm
Bob Fehrenbach has passed on a number of his snippets for inclusion in my web page and have shown up in this book. The first detects the change in a bit and saves the new data for later execution. This code can be used to detect changes in the I/O Ports, Timers, or other registers that can be updated externally to the software execution.movf Reg, w andlw Mask ; Mask out unused bits xorwf old, w ; Compare to previous value btfsc STATUS, Z ; If Zero set, bits are the Same goto no_change xorwf old ; Bits are different, Store New ; pattern in "old"
Also: