gracias meta y pepechip aqui les voy a dejar el codigo para que me digan entonces cualquier pregunta me avisan
list p=16F877
include P16F877.inc
__config 0x3F18
cblock 0x20
NUM
TECLA
endc
NUM.7 equ b'11011000' ; 7
NUM.8 equ b'00000000' ; 8
NUM.9 equ b'00010000' ; 9
NUM.4 equ b'00011001' ; 4
NUM.5 equ b'00010010' ; 5
NUM.6 equ b'00000010' ; 6
NUM.1 equ b'11011001' ; 1
NUM.2 equ b'01000100' ; 2
NUM.3 equ b'01010000' ; 3
LET.A equ b'00001000' ; A
NUM.0 equ b'10000000' ; 0
LET.b equ b'00000011' ; b
NAC1 EQU 20H
NAC2 EQU 21H
NAC3 EQU 22H
NAC4 EQU 23H
NAC5 EQU 24H
NAC6 EQU 25H
QP1 EQU 26H
QP2 EQU 27H
QP3 EQU 28H
QP4 EQU 29H
QP5 EQU 30H
QP6 EQU 31H
loops EQU 32H
loops2 EQU 33H
org 0x00
goto INICIO
org 0x04
retfie
org 0x05
; ETAPA DE MULTIPLEXADO
MULTIPLEX
DIGITON1 movf NAC1,W
movwf TRISC
BSF PORTC,4
CALL RETARDO
BCF PORTC,4
DIGITON2 movf NAC2,W
movwf TRISC
BSF PORTC,5
CALL RETARDO
BCF PORTC,5
DIGITON3 movf NAC3,W
movwf TRISC
BSF PORTC,6
CALL RETARDO
BCF PORTC,6
DIGITON4 movf NAC4,W
movwf TRISC
BSF PORTC,7
CALL RETARDO
BCF PORTC,7
DIGITON5 movf NAC5,W
movwf TRISC
BSF PORTD,4
CALL RETARDO
BCF PORTD,4
DIGITON6 movf NAC6,W
movwf TRISC
BSF PORTD,5
CALL RETARDO
BCF PORTD,5
DIGITOQ1 movf QP1,W
movwf TRISD
BSF PORTD,6
CALL RETARDO
BCF PORTD,6
DIGITOQ2 movf QP2,W
movwf TRISD
BSF PORTD,7
CALL RETARDO
BCF PORTD,7
DIGITOQ3 movf QP3,W
movwf TRISD
BSF PORTA,0
CALL RETARDO
BCF PORTA,0
DIGITOQ4 movf QP4,W
movwf TRISD
BSF PORTA,1
CALL RETARDO
BCF PORTA,1
DIGITOQ5 movf QP5,W
movwf TRISD
BSF PORTA,2
CALL RETARDO
BCF PORTA,2
DIGITOQ6 movf QP6,W
movwf TRISD
BSF PORTA,3
CALL RETARDO
BCF PORTA,3
RETURN
RETARDO
movlw 02h
movwf loops
top2 movlw d'110'
movwf loops2
top nop
nop
nop
nop
nop
nop
decfsz loops2
goto top
decfsz loops
goto top2
retlw 0
INICIO
bsf STATUS,RP0
movlw 0xF0
movwf TRISB
movlw b'00000000'
movwf TRISC
movlw b'00000000'
movwf TRISD
movlw b'100000'
movwf TRISA
movlw b'111'
movwf TRISE
bcf STATUS,RP0
bcf OPTION_REG,NOT_RBPU
CLRF TRISD
CLRF TRISC
PRINCIPAL BTFSS PORTA, 5
call CLRNAC
BTFSS PORTE, 2
call CLRQP
BTFSS PORTE, 1
call QUINIELA
BTFSS PORTE, 0
call NACIONAL
CALL MULTIPLEX
GOTO PRINCIPAL
CLRNAC clrf NAC1
clrf NAC2
clrf NAC3
clrf NAC4
clrf NAC5
clrf NAC6
RETURN
CLRQP clrf QP1
clrf QP2
clrf QP3
clrf QP4
clrf QP5
clrf QP6
RETURN
NACIONAL call TECLADO
movwf NAC1
call TECLADO
movwf NAC2
call TECLADO
movwf NAC3
call TECLADO
movwf NAC4
call TECLADO
movwf NAC5
call TECLADO
movwf NAC6
RETURN
QUINIELA call TECLADO
movwf QP1
call TECLADO
movwf QP2
call TECLADO
movwf QP3
call TECLADO
movwf QP4
call TECLADO
movwf QP5
call TECLADO
movwf QP6
RETURN
;**************************************************
;** Rutina que escanea un teclado matricial 3x4 **
;** recorriendo un 0 por cada una de sus filas y **
;** leyendo el estado de cada columna, si la co- **
;** lumna se encuentra con un estado logico alto **
;** no se presiono ninguna tecla, si se encuen- **
;** tra en bajo (0) entonces se detecta la tecla **
;** presionda **
;**************************************************
TECLADO clrf TECLA
movlw b'00001110'
movwf PORTB
CHECA_COL
btfss PORTB,4
goto ANTIRREBOTES
incf TECLA,f
btfss PORTB,5
goto ANTIRREBOTES
incf TECLA,f
btfss PORTB,6
goto ANTIRREBOTES
incf TECLA,f
; Si no se detecto ninguna pulsacion se realiza una comparacion
; entre la variable TECLA y el numero "12", si TECLA es menor que
; 12 el "0" en las filas del puerto B se recorre hacia la izquierda
; hacia la siguiente fila, si TECLA es igual a "12" la rutina del
; TECLADO vuelve a comenzar
movlw d'12'
subwf TECLA,w
btfsc STATUS,Z
goto TECLADO
bsf STATUS,C
rlf PORTB,f
goto CHECA_COL
;*********************************************************
;** Rutina que elimina los rebotes y ademas decodifica **
;** la tecla pulsada y regresa el valor binario necesa- **
;** para desplegar los numeros de 0 a b en un display **
;** de 7 segmentos conectado al puerto A **
;*********************************************************
ANTIRREBOTES
B1 btfsc PORTB,4
goto B1
B2 btfsc PORTB,5
goto B2
B3 btfsc PORTB,6
goto B3
B4 btfsc PORTB,7
goto B4
movf TECLA,w
return
DECOD_TECLA
addwf PCL,f
retlw b'0111' ;NUM.7
retlw b'1000' ;NUM.8
retlw b'1001' ;NUM.9
retlw b'0100' ;NUM.4
retlw b'0101' ;NUM.5
retlw b'0110' ;NUM.6
retlw b'0001' ;NUM.1
retlw b'0010' ;NUM.2
retlw b'0011' ;NUM.3
retlw b'1010' ;LET.A
retlw b'0000' ;NUM.0
retlw b'1011' ;LET.b
END