Aqui la tienes:
Codigo:
rb_if movlw 0x0e
movwf portb ;Todas las columnas a 1 excepto la primera
comf portb,w
andlw 0xf0
btfss status,2 ;Comprueba si el pulsador está en la primera columna
goto col1
movlw 0x0d
movwf portb ;Todas las columnas a 1 excepto la segunda
comf portb,w
andlw 0xf0
btfss status,2 ;Comprueba si el pulsador está en la segunda columna
goto col2
movlw 0x0b
movwf portb ;Todas las columnas a 1 excepto la tercera
comf portb,w
andlw 0xf0
btfss status,2 ;Comprueba si el pulsador está en la tercera columna
goto col3
movlw 0x07
movwf portb ;Todas las columnas a 1 excepto la cuarta
comf portb,w
andlw 0xf0
btfss status,2 ;Comprueba si el pulsador está en la cuarta columna
goto col4
clrf tecla ;Ninguna tecla pulsada
goto ca_tclf ;Fin
col1 clrf tecla ;Borra el registro de las teclas
goto ca_tcl ;Calcula la tecla pulsada
col2 movlw 0x04
movwf tecla ;Precarga el valor 4 en el registro de las teclas
goto ca_tcl ;Calcula la tecla pulsada
col3 movlw 0x08
movwf tecla ;Precarga el valor 8 en el registro de las teclas
goto ca_tcl ;Calcula la tecla pulsada
col4 movlw 0x0c
movwf tecla ;Precarga el valor 12 en el registro de las teclas
goto ca_tcl ;Calcula la tecla pulsada
ca_tcl btfss portb,4 ;Suma 1 si el pulsador está en la primera fila
movlw 0x01
btfss portb,5 ;Suma 2 si el pulsador está en la segunda fila
movlw 0x02
btfss portb,6 ;Suma 3 si el pulsador está en la tercera fila
movlw 0x03
btfss portb,7 ;Suma 4 si el pulsador está en la cuarta fila
movlw 0x04
addwf tecla,f
ca_tclf ******* ;A partir de aqui, tendrás un número del 0 al 16
;guardado en el registro "tecla"
Para que funcione, tienes que activar las resistencias del pull-up en el puerto B, cargar el TRISB como "1111000" y borrar el puerto B para que salte la interrupción.
La parte alta del puerto B son la filas y la parte baja las columnas.