Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Teclado - PIC - 16f887, Ejercicios de Electrónica Digital y Analógica

Programa que lee la tecla presionada en un teclado matricial 4x4

Tipo: Ejercicios

2019/2020

Subido el 08/02/2020

kerr-javier
kerr-javier 🇨🇴

1 documento

1 / 7

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
;Programa que lee la tecla presionada en un teclado matricial 4x4
;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=16F887
#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
pf3
pf4
pf5

Vista previa parcial del texto

¡Descarga Teclado - PIC - 16f887 y más Ejercicios en PDF de Electrónica Digital y Analógica solo en Docsity!

;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.

GOTO TEST_COLUMNAS

NULL_TECLA

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