



Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Programa que lee la tecla presionada en un teclado matricial 4x4
Tipo: Ejercicios
1 / 7
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!




;Programa que lee la tecla presionada en un teclado matricial 4x ;y lo muestra en display de 7 segmentos anodo común. ;Interrupcion por cambio en PORTB. ;Hardware se conecta de RD0-RD6 a segmentos a-g respectivamente ;De Fila1-Fila4 a RB0-RB3 y de Columna1-Columna4 a RB4-RB7 respectivamente LIST P=16F #include "p16f887.inc" __CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT __CONFIG _CONFIG2, _WRT_OFF & _BOR21V ;**** Definicion de variables **** NTECLA EQU 20h ; Numero de la tecla presionada W_TEMP EQU 21h ; Registro para guardar temporalmente W.- STATUS_TEMP EQU 22h ; Registro para guardar temporalmete STATUS CNT1 EQU 23H ; Contador para delay CNT0 EQU 24H ; Contador para delay ;**** Inicio del Micro **** ORG 0x00 ; Aquí comienza el micro.- GOTO INICIO ; Salto a inicio de mi programa.- ;**** Vector de Interrupcion **** ORG 0x04 ; Atiendo Interrupcion.- GOTO INTERRUPCION
;**** Programa principal **** ;**** Configuracion de puertos **** INICIO BANKSEL TRISA CLRF TRISA ; PORTA salida MOVLW B'11110000' ; Nibble superior entrada, nibble inferior salida MOVWF TRISB MOVLW B'10111111' ; RC7/RX entrada, MOVWF TRISC ; RC6/TX salida BANKSEL PORTA MOVLW B'11111111' ; Todos los bits en alto para que MOVWF PORTA ; inicialmente el display anodo comun este apagado CLRF PORTB CLRF PORTC BANKSEL ANSEL CLRF ANSEL ; PORTA digital BANKSEL ANSELH CLRF ANSELH ; PORTB digital BANKSEL OPTION_REG BCF OPTION_REG,7 ; Resistencias pull-up habilitadas BANKSEL WPUB MOVLW B'11110000' ; Resistencias pull-up de RB4 a RB7 habilitadas MOVWF WPUB BANKSEL TXSTA MOVLW B'00100100' ; Configuración USART MOVWF TXSTA ; y activación de transmisión BANKSEL SPBRG MOVLW .25 ; 1200 baudios
;**** Rutinas ***** ; Rastreamos Tecla presionada.- TECLA_PRESIONADA CLRF NTECLA ; Borra Numero de Tecla BANKSEL PORTB MOVLW B'00001110' ; Saca 0 a la primera fila MOVWF PORTB ; de PORTB NOP ; Para estabilizacion de señal. NOP NOP NOP TEST_COLUMNAS BTFSS PORTB,4 ; Primera columna = 0? GOTO SUELTA_TECLA ; Si. Sale si se ha pulsado tecla. INCF NTECLA,1 ; No. Incrementa nº tecla. BTFSS PORTB,5 ; Segunda columna = 0? GOTO SUELTA_TECLA ; Si. Sale si se ha pulsado tecla. INCF NTECLA,1 ; No. Incrementa nº tecla. BTFSS PORTB,6 ; Tercera columna = 0? GOTO SUELTA_TECLA ; Si. Sale si se ha pulsado tecla. INCF NTECLA,1 ; No. Incrementa nº tecla. BTFSS PORTB,7 ; Cuarta columna = 0? GOTO SUELTA_TECLA ; Si. Sale si se ha pulsado tecla. INCF NTECLA,1 ; No. Incrementa nº Tecla. ULTIMA_TECLA BTFSS PORTB,3 ; Ya se revisaron todas las filas? GOTO NULL_TECLA ; Si. Falsa alarma, no se ha presionado ninguna tecla. BSF STATUS,C ; No, seguimos con la siguiente. Pone a 1 Bit C RLF PORTB,1 ; asi la Fila 1 pasa a 1 con la rotaci¢n a izqda.
CLRF NTECLA ; Coloca variable Tecla a 0 (Ninguna) CLRF PORTB ; Dejamos Puerto para recibir otra tecla.- GOTO FIN ; y regresa. ; Ahora se espera a que la tecla sea soltada para evitar rebotes ; y reactivaciones de tecla SUELTA_TECLA ESPERA BTFSS PORTB,4 ; Si no se suelta la tecla FILA 1 GOTO ESPERA1 ; vuelve a esperar. ESPERA BTFSS PORTB,5 ; Si no se suelta la tecla FILA 2 GOTO ESPERA2 ; vuelve a esperar. ESPERA BTFSS PORTB,6 ; Si no se suelta la tecla FILA 3 GOTO ESPERA3 ; vuelve a esperar. ESPERA BTFSS PORTB,7 ; Si no se suelta la tecla FILA 4 GOTO ESPERA4 ; vuelve a esperar. CLRF PORTB ; Dejamos Puerto para recibir otra tecla. TX_DATO ;BANKSEL PIR ;BCF PIR1,TXIF ; Restaura el flag del transmisor BANKSEL TXREG MOVF NTECLA, MOVWF TXREG ; Mueve el byte a transmitir al registro de transmision TX_DAT_W BANKSEL TXSTA
RETLW 0X83 ;b RETLW 0XF8 ; RETLW 0X80 ; RETLW 0X90 ; RETLW 0XC6 ;C RETLW 0X86 ;E RETLW 0XC0 ; RETLW 0X8E ;F RETLW 0XA1 ;d ; Restauramos los valores de W y STATUS.- FIN BCF INTCON,RBIF ; Bandera interrupcion por teclado bajada BCF PIR1,TXIF ; Bandera interrupcion por recepcion bajada SWAPF STATUS_TEMP,0 ; Invertimos lo nibles de STATUS_TEMP MOVWF STATUS SWAPF W_TEMP,1 ; Invertimos los nibbles y lo guardamos en el mismo registro.- SWAPF W_TEMP,0 ; Invertimos los nibbles nuevamente y lo guardamos en W.- RETFIE ; Salimos de interrupción. ;.......................................... END