La técnica de programación requiere tanto de entradas como de salidas. Las filas
están conectadas a las patillas de salida y las columnas a las de entrada.
Se comienza el testeo colocando a ‘0’ la primera fila, y a ‘1’ las restantes. Si la
tecla pulsada estuviese en la columna ‘0’, ésta colocaría en su línea un ‘0’ lógico.
Bastará con hacer un muestreo de las columnas, buscando el 0, para saber la tecla exacta
que fue pulsada en la matriz.
Si no es pulsada ninguna tecla en una fila, las entradas se encuentran en estado
flotante, razón por la qu e son necesarias las resistencias de polarización internas, que
mantienen las entradas a nivel alto. Dichas resistencia permiten conectar el teclado
matricial sin añadir componentes externos. Su activación se realiza a través del bit
RBPU del registro OPTION.
El programa ejemplo, llamado Teclado.asm, gestiona un teclado hexagesimal (4 filas
y 4 columnas) situado en la puerta B. Con el LED situado en RA4 marcaremos si hay o
no una tecla pulsada (se encenderá si alguna lo está), mientras que con el resto de
LED’s conectados al puerto A indicaremos el número binario equivalente a la tecla
pulsada.
El WatchDog no está siendo controlado, con lo que le sugerimos que lo desactive
para la simulación.
LIST P = 16F84
;Indicamos el modelo de PIC a utilizar
; Definición de registros
opcion
leds
EQU
EQU
0X01
0X05
TRISA
teclado
EQU
EQU
0X05
0x06
TRISB
estado
EQU
EQU
0X06
0X03
;Dirección del registro OPTION
;Hemos conectado los LED's al puerto A
;La dirección 0x05 corresponde al registro porta
;
(puerto A) en el banco0
;
y TRISA en banco 1
;Hemos conectado el teclado al puerto B
;La dirección 0x06 corresponde al registro
;
portb (puerto B) en el banco1
;
y TRISB en banco 1
; La dirección del registro de estado es la 0x03
; Definición de bits
banco
EQU
5
pulsada
rbpu
Z
C
EQU
EQU
EQU
EQU
4
7
2
0
;
;
;
;
;
;
Bit del registro de estado correspondiente
al banco de datos
Bit del LED que indica si una hay teclas pulsadas
Bit que activa las resistencias internas del puerto B
Bit de registro W con valor cero
Bit del acarreo. Se pone en el bit 0 al rotar un registro.
58