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