Você está na página 1de 6

I:\Teclado Matricial\TECLADO_MATRICIAL.

ASM lunes, 02 de noviembre de 2009 10:10

TITLE "Manejo de Teclado matricial y dos displays de 7 segmentos"


SUBTITLE "SUMADOR DOS DIGITOS DECIMALES CON TECLA #"
AUTOR "Jairo Miguel Vergara Avila"
PROCESSOR 16F887

INCLUDE P16F887.INC

;Palabra de configuracion OSCILADOR XT


__CONFIG _CONFIG1,_LVP_OFF&_FCMEN_OFF&_IESO_OFF&_BOR_OFF&_CPD_OFF&_CP_OFF&
_MCLRE_OFF&_PWRTE_ON&_WDT_OFF&_INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2,_WRT_OFF&_BOR21V

;Definición de Entradas/Salidas
#DEFINE DIS_UNI PORTA,1 ;Activar transistor NPN para habilitar display de las unidades
#DEFINE DIS_DEC PORTA,2 ;Activar transistor NPN para habilitar display de las decenas

CBLOCK 0X20
AUXA,AUXB,AUXC,UNIDADES,DECENAS,TECLA_TEMP,TECLA,CUENTATECLA,DATO1,DATO2,TEM
ENDC
;*******************************************************************************************
ORG 0X00
GOTO PPAL

;Configuración de registros del PIC16F887


CONFIG_PIC
; BANCO 4
BANKSEL ANSEL
CLRF ANSEL
CLRF ANSELH
; BANCO 1
BANKSEL TRISD
MOVLW B'00001111'
MOVWF TRISD
MOVLW B'00000001'
MOVWF TRISB
MOVLW B'11111001'
MOVWF TRISA
BANKSEL PORTA
CLRF DECENAS
CLRF UNIDADES
CLRF TECLA
CLRF CUENTATECLA
RETURN
;********************************************************************************
;Rutina de retardo para visualización
RETARDO
MOVLW .1
MOVWF AUXA
RETAR3 MOVLW .2
MOVWF AUXB
-1-
I:\Teclado Matricial\TECLADO_MATRICIAL.ASM lunes, 02 de noviembre de 2009 10:10

RETAR2 MOVLW .10


MOVWF AUXC
RETAR1 DECFSZ AUXC,F
GOTO RETAR1
DECFSZ AUXB,F
GOTO RETAR2
DECFSZ AUXA,F
GOTO RETAR3
RETURN
;***************************************************************************************
;Tabla para activación de segmentos en display de cátodo común
TABLA_DISPLAY_CC
ADDWF PCL,F
RETLW ;0
B'01111110'
RETLW ;1
B'00001100'
RETLW ;2
B'10110110'
RETLW ;3
B'10011110'
RETLW ;4
B'11001100'
RETLW ;5
B'11011010'
RETLW ;6
B'11111010'
RETLW ;7
B'00001110'
RETLW ;8
B'11111110'
RETLW ;9
B'11001110'
RETLW ;A = *
B'10010010'
RETLW ;B = #
B'11101101'
;**************************************************************************
;Rutina para visualización de valor en display
VISUAL_CC
MOVF UNIDADES,W ;Dato para visualizar en el disply de las unidades
CALL TABLA_DISPLAY_CC
MOVWF PORTB
BSF DIS_UNI
NOP
BCF DIS_DEC
NOP
CALL RETARDO
CLRF PORTB
MOVF DECENAS,W ;Dato para visualizar en el disply de las decenas
CALL TABLA_DISPLAY_CC
MOVWF PORTB
BCF DIS_UNI
NOP
BSF DIS_DEC
NOP
CALL RETARDO
CLRF PORTB
RETURN

;********************************************************************************
-2-
I:\Teclado Matricial\TECLADO_MATRICIAL.ASM lunes, 02 de noviembre de 2009 10:10

;FILAS EN RD7:RD4 (SALIDAS) Y COLUMNAS EN RD3:RD0 (ENTRADAS)

TECLADO MOVLW B'11101111' ;PONER PRIMERA FILA EN CERO


MOVWF PORTD ; | C1 | C2 |C3 |
NOP ; F1 | 1 | 2 | 3 |
MOVF PORTD,W ; F2 | 4 | 5 | 6 |
MOVWF TECLA_TEMP ; F3 | 7 | 8 | 9 |
; F4 | * | 0 | # |
F1_C1 MOVLW B'11101101' ;
XORWF TECLA_TEMP,W ;|FILAS |COLUM.|TECLA|
BTFSS STATUS,Z ;| 1110 | 1101 | 03 |
GOTO F1_C2 ;| | 1011 | 02 |
MOVLW 03 ;TECLA <3> ;| | 0111 | 01 |
MOVWF TECLA ;| 1101 | 1101 | 06 |
RETURN ;| | 1011 | 05 |
;| | 0111 | 04 |
F1_C2 MOVLW B'11101011' ;| 1011 | 1101 | 09 |
XORWF TECLA_TEMP,W ;| | 1011 | 08 |
BTFSS STATUS,Z ;| | 0111 | 07 |
GOTO F1_C3 ;| 0111 | 1101 |# |
MOVLW 02 ;TECLA <2> ;| | 1011 | 00 |
MOVWF TECLA ;| | 0111 | * |
RETURN ;
F1_C3 MOVLW B'11100111'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F2_C1
MOVLW 01 ;TECLA <1>
MOVWF TECLA
RETURN

F2_C1 MOVLW B'11011111' ;PONER SEGUNDA FILA EN CERO


MOVWF PORTD
NOP
MOVF PORTD,W
MOVWF TECLA_TEMP
MOVLW B'11011101'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F2_C2
MOVLW 06 ;TECLA <6>
MOVWF TECLA
RETURN
F2_C2 MOVLW B'11011011'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F2_C3
MOVLW 05 ;TECLA <5>
MOVWF TECLA
RETURN
-3-
I:\Teclado Matricial\TECLADO_MATRICIAL.ASM lunes, 02 de noviembre de 2009 10:10

F2_C3 MOVLW B'11010111'


XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F3_C1
MOVLW 04 ;TECLA <4>
MOVWF TECLA
RETURN

F3_C1 MOVLW B'10111111' ;PONER TERCERA FILA EN CERO


MOVWF PORTD
NOP
MOVF PORTD,W
MOVWF TECLA_TEMP
MOVLW B'10111101'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F3_C2
MOVLW 09 ;TECLA <9>
MOVWF TECLA
RETURN
F3_C2 MOVLW B'10111011'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F3_C3
MOVLW 08 ;TECLA <8>
MOVWF TECLA
RETURN
F3_C3 MOVLW B'10110111'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F4_C1
MOVLW 07 ;TECLA <7>
MOVWF TECLA
RETURN

F4_C1 MOVLW B'01111111' ;PONER CUARTA FILA EN CERO


MOVWF PORTD
NOP
MOVF PORTD,W
MOVWF TECLA_TEMP
MOVLW B'01111101'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO F4_C2
MOVLW 0B ;TECLA <#>
MOVWF TECLA
RETURN
F4_C2 MOVLW B'01111011'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
-4-
I:\Teclado Matricial\TECLADO_MATRICIAL.ASM lunes, 02 de noviembre de 2009 10:10

GOTO F4_C3
MOVLW 00 ;TECLA <0>
MOVWF TECLA
RETURN
F4_C3 MOVLW B'01110111'
XORWF TECLA_TEMP,W
BTFSS STATUS,Z
GOTO FIN_TECLADO
MOVLW 0A ;TECLA <*>
MOVWF TECLA
FIN_TECLADO
RETURN

;*****************************************************

SUMA CALL TECLADO


MOVF PORTD,W
ANDLW 0F
MOVWF TEM
MOVLW 0F
XORWF TEM,W
BTFSC STATUS,Z
RETURN ;SI NO HAY TECLA PULSADA

MOVLW 00
XORWF CUENTATECLA,W
BTFSS STATUS,Z
GOTO TECLA2
CLRF UNIDADES
CLRF DECENAS
MOVF TECLA,W
MOVWF DATO1
MOVWF UNIDADES
INCF CUENTATECLA
GOTO SOLTARON
TECLA2 MOVLW 01
XORWF CUENTATECLA,W
BTFSS STATUS,Z
GOTO TECLA3
MOVF TECLA,W
MOVWF DATO2
MOVWF UNIDADES
INCF CUENTATECLA
GOTO SOLTARON
TECLA3 CALL TECLADO
CALL VISUAL_CC
MOVF TECLA,W
XORLW 0B
BTFSS STATUS,Z
GOTO TECLA3 ;NO ES TECLA <#> PARA SUMAR
-5-
I:\Teclado Matricial\TECLADO_MATRICIAL.ASM lunes, 02 de noviembre de 2009 10:10

CLRF CUENTATECLA
MOVF DATO2,W
ADDWF DATO1,W
CALL BINBCD8

SOLTARON CALL VISUAL_CC


MOVLW 0F
ANDWF PORTD,W
XORLW 0F
BTFSS STATUS,Z
GOTO SOLTARON
RETURN

;***********************************************************
;Conversión de binario de 8 bits (dos dígitos) a BCD

BINBCD8 CLRF DECENAS


MOVWF UNIDADES
BIN8 MOVLW .10
SUBWF UNIDADES,W
BTFSS STATUS,C
RETURN
MOVWF UNIDADES
INCF DECENAS,F
GOTO BIN8

;********************************************************
;Programa principal
PPAL CALL CONFIG_PIC
BUCLE CALL SUMA
CALL VISUAL_CC
GOTO BUCLE

END

-6-

Você também pode gostar