Microprocesadores I Práctica #6 “Manejo de un Teclado” Trabajo en

Anuncio
Ing. O. Richer
Microprocesadores I
Práctica #6
“Manejo de un Teclado”
Trabajo en Grupo
Conecte un teclado de tipo membrana de 4 X 4 con arreglo matricial como se muestra en
la siguiente figura:
P1.1
P1.0
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
Desarrolle un programa en lenguaje ensamblador para el microcontrolador 8051 que
inicie a partir de la localidad 2000H, que funcione como un driver de display, es decir:
1. Genere una señal de strobe (lógica positiva) con duración de 100 useg. cada vez que se
detecte una tecla oprimida.
2. Elimine los rebotes generados por la tecla oprimida utilizando la rutina en software
analizada en clase, de manera que solo una tecla sea detectada cada vez que ésta se
oprime.
3. Genere un buffer con la información que va leyendo del teclado. El buffer deberá
iniciar en la localidad 30H de la memoria de datos (RAM) interna del microcontrolador.
El buffer no deberá extenderse mas allá de la localidad 50H. Cuando el buffer se llene, el
siguiente byte almacenado deberá de ser almacenado sobre el primer byte del buffer.
Verifique:
•Mediante el uso de un osciloscopio la generación y duración de la señal de strobe.
•La eliminación de rebotes y correcta detección de las teclas oprimidas, examinando la
memoria de datos residente del microcontrolador.
Utilice el simulador para probar el correcto funcionamiento de su programa antes de
cargar el programa al microcontrolador e interaccionar con el hardware.
Precauciones:
Inicie el monitoreo de las teclas programando el pin P1.4 como un pin de escritura,
escribiendo un cero. Determine si una de las teclas del primer renglón ha sido oprimida.
Repita el mismo procedimiento para los pines P1.5, P1.6 y P1.7 del microcontrolador . La
detección de la tecla oprimida se hará al detectar un cero por los pines P1.0, P1.1, P1.2 o
P1.3 según el renglón que se estuviera monitoreando en ese momento.
Note que si se tratara de monitorear las teclas utilizando la lógica positiva terminaría
leyendo siempre unos por los pines P1.0 ... P1.3 sin importar si la tecla está o no
oprimida.
Una idea preliminar:
Si consideramos una interconexión entre el teclado y el puerto 1 dada por la mostrada a
continuación y asumiendo que las teclas tuvieran asignado el caracter mostrado:
P1.1
P1.2
P1.0
P1.4
P1.3
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
P1.5
P1.6
P1.7
Una forma de detectar la tecla oprimida desde software sería la siguiente:
TECLA:
ORG 2000H
DB EEH, 00H, EDH, 01H, EBH, 02H, ...
Es decir, la tabla que inicia con la etiqueta TECLA contiene primero el caracter que
debemos leer del puerto 1 y enseguida a este caracter, se especifica la tecla oprimida. Por
ejemplo, para examinar el primer renglón lo que tendríamos que hacer es escribir al
puerto 1 el caracter 11101111B. Todos los pines del puerto 1 serían 1 excepto el pin P1.4.
Este pin está escribiendo un 0 en el primer renglón del taclado. Note que los cuatro bits
menos significativos son 1 lo que define a los pines P1.0 a P1.3 como puertos de lectura.
Si la tecla 0 estuviera siendo oprimida en ese momento, cuando leamos el puerto 1 lo que
vamos a leer será el caracter 11101110B. Este caracter expresado en hexadecimal viene a
ser el EEH, el cual corresponde al primer caracter de la tabla en software definida
anteriormente. Note que el caracter que le sigue en la tabla es el caracter correspondiente
a la tecla oprimida, es decir el 00H. Si al escribir al puerto 1 el caracter 11101111B lo que
leemos de este puerto fuera el caracter 11101101B, ahora el caracter oprimido sería el
01H.
Un trozo del programa que podría ser utilizado para barrer el teclado y al detectar una
tecla oprimida, elimine rebotes y direccione la tabla TECLA para determinar la tecla
correspondiente, se presenta a continuación:
LOOP:
CICLO:
ORG 2100H
MOV DPTR, #TECLA
MOV A, #11101111B
MOV R0, A
MOV P1, A
MOV A, P1
MOV R1, A
ORL A, #11110000B
CPL A
JNZ SI
MOV A, R0
SETB C
RLC A
JNC LOOP
SJMP CICLO
;Apuntamos al inicio de la tabla
;Vamos a checar el primer renglón
;Guardamos temporalmente lo que escribimos
;Examinamos primer renglón
;Vemos si existe tecla oprimida
;Guardamos temporalmente lo que leímos
;Ponemos nibble superior 1´s
;Si existió tecla oprimida habrá un 1
;Tecla oprimida detectada --> Go to SI
;No se encontró tecla oprimida
;Vamos a examinar siguiente renglón
;Debe andar un 0 en el nibble superior
;Si el 0 no ha llegado al carry...seguimos
;Llegamos al último renglón...volvemos al 1°
SI:
...por ahí va la cosa...termina el desarrollo utilizando tu ingenio y creatividad...
¡¡¡Tú puedes!!!
Pre-reporte:
Entregue al instructor una copia del programa debidamente documentado el día del
laboratorio para el cual fue encargada la realización de esta práctica. De igual forma,
incluya un diagrama esquemático del hardware utilizado para el desarrollo de la práctica.
Muestre al instructor el correcto funcionamiento de su práctica.
Reporte:
Entregue como reporte los puntos siguientes:
1. Elabore una lista de errores que fueron detectados durante el ensamblado de su
programa y explique cómo resolvió cada uno de estos errores.
2. Un listado del programa donde cada nemónico deberá de ir acompañado de su código
maquinal. El ensamblador ASM51 maneja una opción para proporcionar dicho
listado.
3. Comente sobre el algoritmo utilizado para eliminar rebotes y detectar la tecla
oprimida. Describa el procedimiento con palabras. Incluya el diagrama de flujo.
4. No olvide incluir en su reporte cada una de las partes que se pide: portada, objetivo,
procedimiento, resultados, comentarios y conclusiones...
Descargar