INFORME LAB 3 TECLADO MATRICIAL Microcontroladores y Microprocesadores.docx

download INFORME LAB 3 TECLADO MATRICIAL Microcontroladores y Microprocesadores.docx

of 9

Transcript of INFORME LAB 3 TECLADO MATRICIAL Microcontroladores y Microprocesadores.docx

Microcontroladores y MicroprocesadoresUNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA

ESCUELA DE CIENCIAS BSICAS TECNOLOGA E INGENIERA

COMPONENTE PRCTICO

309696 MICROPROCESADORES Y MICROCONTROLADORES

INTEGRANTESJOHN ALEXANDER RUBIO CHAVEZ 74185810YAMID URIEL BARRERA74085337

JUAN AMAYA (TUTOR DE PRACTICA)

DIRECTORHECCTOR URIEL VILLAMIL GONZALEZGRUPO 309696_6

NOVIEMBRE DE 2014

Ejercicio 1.2.2: Control de un teclado matricial mnimo 4x3 (comercialmente como teclado telefnico) o 4x4 y control de acceso por clave de seguridad de cuatro (4) dgitos, ver apartado de acciones que debe ejecutarse en la prctica, el teclado enel caso del 4x3 debe contener: Los diez (10) dgitos (0, 1, 2, 3, 4, 5, 6, 7, 8, 9). Una tecla # (en teclados comerciales) se tomara como accin de ingreso de clave para ser evaluada por el sistema microcontrolado. Una tecla * (en teclados comerciales) se tomara como accin de borrado de clave y regreso a estado inicial, para recibir un nuevo intento de clave.Los indicadores que deben tenerse son del tipo LED, solo uno de ellos debe encender a la vez y su funcin se describe como: LED Amarillo o Azul, indica que el sistema y teclado est listo para recibir una nueva clave. LED Verde, indica que el usuario a digitado una clave correcta. LED Rojo, indica que el usuario a digitado una clave incorrecta.Las acciones que debe cumplir la prctica son: Grabar una clave de 4 dgitos en la memoria no voltil del micro o EEPROM, para el ejercicio la clave debe ser semestre/ao, por ejemplo para el segundo semestre de 2014 seria (0214).

Codigo

LIST P=16F84a INCLUDE "P16F84a.INC" __config _CP_OFF &_PWRTE_OFF& _WDT_OFF & _XT_OSC

RADIX HEX ;rige Numeracion hexadecimal errorlevel -302 ;Suprime error de bancos

pc equ 2h ;contador de programastatus equ 3h ;registro de estados y bits de controlptoa equ 5h ;puertosptob equ 6htrisa equ 85h ;configuracion puerto atrisb equ 86h ;configuracion puerto bopt_reg equ 81hcta1 equ 20hcta2 equ 21hTecla equ 22hdigi1 equ 23hdigi2 equ 24hdigi3 equ 25hdigi4 equ 26hPaso equ 27hz equ 02h ;flag de cero ;> ORG 00h ;Direccion del Vector de RESET GOTO INICIO ;Comienza el programa

ORG 05h ;detras del Vector Interrupcion T_Conv ADDWF PCL,1 RETLW '0' ;Tecla n0 = 0 RETLW '1' ;Tecla n1 = 1 RETLW '4' ;Tecla n2 = 4 RETLW '7' ;Tecla n3 = 7 RETLW '*' ;Tecla n4 = A RETLW '2' ;Tecla n5 = 2 RETLW '5' ;Tecla n6 = 5 RETLW '8' ;Tecla n7 = 8 RETLW '0' ;Tecla n8 = 0 RETLW '3' ;Tecla n9 = 3 RETLW '6' ;Tecla n10 = 6 RETLW '9' ;Tecla n11 = 9 RETLW '#' ;Tecla n12 = B

retardo movlw .255 movwf cta2decre decfsz cta2,1 goto decre decrex decfsz cta1,1 goto retardo retlw 0 EscDato bsf STATUS,RP0 ;Direccion en EEADR,dato en EEDATA. bsf EECON1,WREN movlw 55h movwf EECON2 movlw 0AAh movwf EECON2 bsf EECON1,WR nopBuEscDa btfsc EECON1,WR goto BuEscDa bcf STATUS,RP0 return

LeeDato movwf EEADR ; Se la paso al registro de direcciones de la EEPROM bsf STATUS,5 ;EEADR posee la direccin a leer bsf EECON1,RD nop bcf STATUS,RP0 movfw EEDATA Movwf Tecla return KB_Scan ;Escanea el teclado CLRF Tecla ;Borra Tecla y INCF Tecla,1 ;prepara Tecla para primer cdigo. MOVLW .127 ;Saca 0 a la primera fila MOVWF PORTB ;de la Puerta B NOP ;Nada para estabilizacin de seal. Cheq_Col Nop Nop Nop BTFSS PORTB,4 ;Primera columna = 0 GOTO antirebotes ;Sale si se ha pulsado tecla. INCF Tecla,1 ;Si no tecla pulsada, incrementa tecla. BTFSS PORTB,3 ;Segunda columna = 0 GOTO antirebotes ;Sale si se ha pulsado tecla. INCF Tecla,1 ;Si no tecla pulsada, incrementa tecla. BTFSS PORTB,2 ;Tercera columna = 0 GOTO antirebotes ;Sale si se ha pulsado tecla. INCF Tecla,1 ;Si no tecla pulsada, incrementa tecla. BTFSS PORTB,1 ;Cuarta columna = 0 GOTO antirebotes ;Sale si se ha pulsado tecla. INCF Tecla,1 ;Si no tecla pulsada, incrementa Tecla.

Ultima_Tecla ;comprueba si se a escaneado todo el teclado MOVLW d'13' ;Carga W con el nmero de Teclas + 1. SUBWF Tecla,0 ;y lo compara con el valor actual de Tecla. BTFSC STATUS,2 ;Si Tecla + 1 = valor actual. GOTO NTeclas ;No ha sido pulsada ninguna tecla. BSF STATUS,0 ;Pone a 1 Bit C. RRF PORTB,1 ;as la Fila 1 pasa a 1 con la rotacin a derecha. GOTO Cheq_Col NTeclas Movlw 'Z' ;Coloca variable Tecla a 0 MOVWF Tecla RETURN ;y regresa.

antirebotes ;ahora se espera a que la tecla sea soltada para evitar rebotes ;y reactivaciones de tecla ;esta parte puede ser eliminada si para nuestro proyecto no es necesaria ;o es un inconveniente.Espera1 BTFSS PORTB,4 ;Si no se suelta la tecla FILA 1 GOTO Espera1 ;vuelve a esperar.Espera2 BTFSS PORTB,3 ;Si no se suelta la tecla FILA 2 GOTO Espera2 ;vuelve a esperar.Espera3 BTFSS PORTB,2 ;Si no se suelta la tecla FILA 3 GOTO Espera3 ;vuelve a esperar.Espera4 BTFSS PORTB,1 ;Si no se suelta la tecla FILA 4 GOTO Espera4 ;vuelve a esperar. MOVfw Tecla ;pone en w el numero contenido en la variable CALL T_Conv ;llama a la tabla de conversion y retorna MOVWF Tecla ;con el valor en hexadecimal y lo pone en la variable. RETURN INICIO bsf status, 5 ;selecciona el banco de memoria 1 movlw 00h ;ra3 intrada ,configura el puerto a movwf trisa ;bit 3 entrada, demas bits salidas. movlw 1eh ;configura el puerto b movwf trisb ;como salidas bcf opt_reg,7 ;activamos resistencias PULL UP bcf status, 5 ;selecciona el banco de memoria 0 clrf ptoa clrf ptob ;------------------------Senal de buen inicio bsf ptoa,0 movlw .150 movwf cta1 call retardo bcf ptoa,0 movlw .50 movwf cta1 call retardo bsf ptoa,0 movlw .150 movwf cta1 call retardo ;---------- movlw 00h movwf EEADR movlw '0' movwf EEDATA Call EscDato movlw 01h movwf EEADR movlw '2' movwf EEDATA Call EscDato movlw 02h movwf EEADR movlw '1' movwf EEDATA Call EscDato movlw 03h movwf EEADR movlw '3' movwf EEDATA Call EscDato ;---------- ciclo clrf digi1 clrf digi2 clrf digi3 clrf digi4 clrf Paso bsf ptoa,0

ciclox1 call KB_Scan movlw 'Z' ;Comparar si hubo tecla pulsada xorwf Tecla,0 ;comparo, si son iguales status,z =1 si no, z=0 btfsc status, z ;si es cero, no es igual, z =1 si no, z=0 Goto ciclox1 ;nueva clave movlw '*' ;preguntar si es nueva clave xorwf Tecla,0 ;comparo, si son iguales status,z =1 si no, z=0 btfsc status, z ;si es cero, no es igual, z =1 si no, z=0 Goto NueCla ;nueva clave movlw '#' ;verificar clave xorwf Tecla,0 ;comparo, si son iguales status,z =1 si no, z=0 btfsc status, z ;si es cero, no es igual, z =1 si no, z=0 Goto Confir1 ;va a comparar ;almacenar la tecla digitada. movlw 00h ;ver para almacenar el digito 1 xorwf Paso,0 ;comparo, si son iguales status,z =1 si no, z=0 btfss status, z ;si es cero, no es igual, z =1 si no, z=0 Goto verel2 ;va a comparar movfw Tecla movwf digi1 incf Paso,1 goto ciclox1 verel2 movlw 01h ;ver para almacenar el digito 2 xorwf Paso,0 ;comparo, si son iguales status,z =1 si no, z=0 btfss status, z ;si es cero, no es igual, z =1 si no, z=0 Goto verel3 ;va a comparar movfw Tecla movwf digi2 incf Paso,1 goto ciclox1

verel3 movlw 02h ;ver para almacenar el digito 3 xorwf Paso,0 ;comparo, si son iguales status,z =1 si no, z=0 btfss status, z ;si es cero, no es igual, z =1 si no, z=0 Goto verel4 ;va a comparar movfw Tecla movwf digi3 incf Paso,1 goto ciclox1 verel4 movlw 03h ;ver para almacenar el digito 3 xorwf Paso,0 ;comparo, si son iguales status,z =1 si no, z=0 btfss status, z ;si es cero, no es igual, z =1 si no, z=0 Goto verel4 ;va a comparar movfw Tecla movwf digi4 goto ciclox1 Confir1 movlw 00h Call LeeDato Movfw Tecla xorwf digi1,0 ;comparo, si son iguales status,z =1 si no, z=0 btfss status, z ;si es cero, no es igual, z =1 si no, z=0 goto ledrojo

movlw 01h Call LeeDato Movfw Tecla xorwf digi2,0 ;comparo, si son iguales status,z =1 si no, z=0 btfss status, z ;si es cero, no es igual, z =1 si no, z=0 goto ledrojo movlw 02h Call LeeDato Movfw Tecla xorwf digi3,0 ;comparo, si son iguales status,z =1 si no, z=0 btfss status, z ;si es cero, no es igual, z =1 si no, z=0 goto ledrojo movlw 03h Call LeeDato xorwf digi4,0 ;comparo, si son iguales status,z =1 si no, z=0 btfss status, z ;si es cero, no es igual, z =1 si no, z=0 goto ledrojo goto ledverde NueCla movlw 00h movwf EEADR movfw digi1 movwf EEDATA Call EscDato movlw 01h movwf EEADR movfw digi2 movwf EEDATA Call EscDato movlw 02h movwf EEADR movfw digi3 movwf EEDATA Call EscDato movlw 03h movwf EEADR movfw digi4 movwf EEDATA Call EscDato goto ledverde ledrojo bcf ptoa,0 bsf ptoa,2 movlw .250 movwf cta1 call retardo movlw .250 movwf cta1 call retardo bsf ptoa,0 bcf ptoa,2 Goto ciclo ledverde bcf ptoa,0 bsf ptoa,1 movlw .250 movwf cta1 call retardo movlw .250 movwf cta1 call retardo bsf ptoa,0 bcf ptoa,1 Goto ciclo

end