Universidad Antonio Nariño

Aplicación Industrial de Micros
Código: 444405


 CAPITULO 5
Experimentos de hardware


5.1 Exploración de teclado


 FIG. 5.1.1 Hardware correspondiente al experimento de exploración de teclado

Para la lectura del teclado debemos tener en cuenta la disposición de las filas y las columnas como se observa en la FIGURA 5.1.2 con la cual realizando la operación allí descrita se debe obtener un número consecutivo de las teclas en la organización aquí mostrada. Luego, mediante el acceso a una tabla se decodifica la tecla leída para obtener el patrón final observado en el diagrama del hardware FIG. 5.1.1.
Ej. Sí se oprimiése la tecla C del teclado ( FIG. 5.1.1), el código de exploración correspondiente a esta es el 13d (FIG. 5.1.2) que debe ser representado como el 1100b en las salidas DCBA ( FIG. 5.1.1).
 

 FIG. 5.1.2 Distribución del teclado, numeración en filas y columnas y la fórmula para hallar la tecla oprimida

En este experimento se realiza la emulación del integrado decodificador de teclado 74C922 en cuanto a su funcionamiento, pero de acuerdo a la configuración de hardware de la FIG. 5.1.1.
 

Listado del programa para exploración de teclado:

    list p=16f84
#include <p16f84.inc>    ;archivo de encabezado por Microchip®
;
;ESTE PROGRAMA EMULA UN 74C922 DECODIFICADOR DE TECLADO
;
CONTFIL EQU  0x12      ;Contador de Filas
CONTCOL EQU  0x13      ;Contador de Columnas
COLKBD EQU  0x14       ;DATO EN COLUMNAS
Temp EQU 0x15
R1 EQU 0x16            ;Variable para Retardo
R2 EQU 0x17            ;Variable para Retardo
R3 EQU 0x18            ;Variable para Retardo
R4 EQU 0x19            ;Variable para Retardo
COUNT EQU 0x1A
CHAR EQU 0x1B          ;Almacenamiento temporal SCAN
AUX EQU 0x1C           ;Variable Auxiliar

#define _z STATUS,2
#define _c STATUS,0
#define OE PORTA,4
#define BANK0  bcf STATUS,RP0
#define BANK1  bsf STATUS,RP0
;
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
    ORG 0x00
MAIN
    BANK1
    CLRF TRISA
    BANK0
    CLRF PORTA
    NOP
    NOP
Muestre
    BCF OE
RUSCAN
    CALL SCAN
    XORLW 0x00      ;espera una Tecla
    BTFSC _z
    GOTO Muestre
    MOVWF PORTA
    MOVLW .50
    MOVWF COUNT
LOOPSCAN
    CALL DEL5MS
    DECFSZ COUNT,1
    GOTO LOOPSCAN
    GOTO RUSCAN
;***************************************************************************
DEL5MS
    MOVLW .12
    MOVWF R1
    MOVLW 7
    MOVWF R2
    MOVLW 1
    MOVWF R3
    MOVLW 1
    MOVWF R4
LOOPDEL5
    DECFSZ R1,F
    GOTO LOOPDEL5
    DECFSZ R2,F
    GOTO LOOPDEL5
    DECFSZ R3,F
    GOTO LOOPDEL5
    DECFSZ R4,F
    GOTO LOOPDEL5
    NOP
    RETURN
;***************************************************************
;RETORNA W=00 NO HAY TECLA OPRIMIDA,
;RETORNA W=COD SI TECLA OPRIMIDA.
;**************************************************************
SCAN
    BANK1
    MOVLW 0x0F        ;el puerto que lee teclado <0:3> filas (in)
    MOVWF TRISB
    BANK0
    MOVLW 0x01
    MOVWF CONTCOL
    MOVLW 0x7F
    MOVWF COLKBD
RSTFIL
    CLRF CONTFIL      ;RESET CONT FILAS
    MOVF COLKBD,W
    MOVWF PORTB       ;COLOCAR UN CERO EN COLUMNAS
    nop
    nop
    nop
    MOVF PORTB,W       ;LEER FILAS DE TECLADO
    MOVWF AUX
    RLF AUX,F
    RLF AUX,F
    RLF AUX,F
    RLF AUX,F
TESTFIL
    RLF AUX,F
    BTFSS _c
    GOTO ACERTADO
    INCF CONTFIL,F
    MOVF CONTFIL,W
    XORLW 0x04
    BTFSS _z
    GOTO TESTFIL

    BSF _c
    RRF COLKBD,F      ;rotacion del cero a colocar
    INCF CONTCOL,F
    MOVF CONTCOL,W
    XORLW 0x05
    BTFSS _z
    GOTO RSTFIL
    RETLW 0x00

ACERTADO
    MOVF CONTFIL,W
    XORLW 0x00
    BTFSC _z
    GOTO ESCERO
    MOVLW 0x00
MUL
    ADDLW 0x04
    DECFSZ CONTFIL
    GOTO MUL
SUMACOL
    ADDWF CONTCOL,W
    CALL TABKBD
    RETURN
TABKBD
    addwf PCL,F
    retlw 0       ;inválido
    retlw 0x10
    retlw 0x11
    retlw 0x12
    retlw 0x13
    retlw 0x14
    retlw 0x15
    retlw 0x16
    retlw 0x17
    retlw 0x18
    retlw 0x19
    retlw 0x1A
    retlw 0x1B
    retlw 0x1C
    retlw 0x1D
    retlw 0x1E
    retlw 0x1F
ESCERO
    MOVLW 0x00
    GOTO SUMACOL
    end



  índice de capítulo