of 21 /21
 UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE INGENIERÍA ESCUELA DE INGENIERÍA ELÉCTRICA DEPARTAMENTO DE ELECTRÓNICA, COMPUTACIÓN Y CONTROL MICROPROCES ADORES I INFORME #2: TECLADO NUMERICO PARA EL MICROCONTROLADOR 8051 Realizado por:  Vales Montes, Elena Esther C.I.:18836867 CARACAS 21/06/2010

Proyecto Con 8051

Embed Size (px)

Text of Proyecto Con 8051

UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE INGENIERA ESCUELA DE INGENIERA ELCTRICA DEPARTAMENTO DE ELECTRNICA, COMPUTACIN Y CONTROL MICROPROCESADORES I

INFORME #2: TECLADO NUMERICO PARA EL MICROCONTROLADOR 8051

Realizado por: Vales Montes, Elena Esther C.I.:18836867 CARACAS 21/06/2010

TABLA DE CONTENIDO Objetivo............................................................................................................................................................... 3 Marco teorico ..................................................................................................................................................... 3 Dispositivos entrada-salida ........................................................................................................................... 3 Teclado ............................................................................................................................................................ 3 Comunicaciones seriales ............................................................................................................................... 4 El Circuito MAX-232.................................................................................................................................... 5 Metodologia ........................................................................................................................................................ 5 Proceso de diseo .............................................................................................................................................. 6 Hardware ......................................................................................................................................................... 6 Estructura. .................................................................................................................................................. 6 Funcionamiento. ........................................................................................................................................ 6 Diagramas de Flujo................................................................................. Error! Marcador no definido. Software ........................................................................................................................................................10 Descripcin de cada proceso: ................................................................................................................10 Subprocesos: .............................................................................................................................................14 Proceso de almacenamiento en memoria RAM interna. ...................................................................17 Proceso de comunicacin entre el microcontrolador y el computador va RS232: .......................17 Presentacion y Analisis de Resultados ..........................................................................................................18 Conclusiones.....................................................................................................................................................19 Bibliografia ........................................................................................................................................................19 ANEXOS (codigo en keil)..............................................................................................................................20

2

OBJETIVO Elaborar un teclado matricial de 16 teclas para ser conectado a uno de los puertos del microcontrolador 89S52 y disear todas las rutinas necesarias para que el microcontrolador sea capaz de mostrar cada una de las teclas introducidas en una pantalla a travs de comunicacin serial. MARCO TEORICO Dispositivos entrada-salida Estos dispositivos son bsicamente un conjunto de interfaces que permiten la comunicacin entre diferentes bloques funcionales de un sistema. Estos dispositivos tambin son llamados dispositivos perifricos. Existen tres formas de realizar la entrada o salida de informacin a travs de dispositivos perifricos: 1. Por encuesta: Sondeo peridico de la unidad de control al dispositivo. Se pierde tiempo pero es una forma sencilla. 2. Por interrupciones: el dispositivo indica el momento de una transferencia de datos. Ante un evento se genera entonces la comunicacin. 3. Acceso directo a memoria: el dispositivo opera directamente sobre la memoria si la unidad de control se lo permite. Teclado El teclado es un perifrico que permite a un usuario introducir datos, rdenes o instrucciones a un sistema. Los teclados utilizados en las computadoras, celulares y otros dispositivos funcionan a travs de un proceso de scaneo; la fabricacin de los teclados se basa en una matriz de interruptores dispuestos en filas y en columnas las cuales mientras el interruptor esta en reposo no se tocan. Al pulsar una tecla se cierra un circuito elctrico y se enva a la unidad de procesamiento una seal que contiene informacin acerca de la posicin de la tecla presionada. El microcontrolador responsable del funcionamiento del teclado se encuentra muestreando peridicamente la matriz para detectar cuando una tecla ha sido pulsada, a partir de la fila y columna que ha sido pulsada entonces se reconoce la tecla pulsada. Cuando el controlador del teclado reconoce que se ha pulsado una tecla genera un cdigo asociado a ella, el cual es enviado a la unidad procesadora despus de solicitarle a la misma que atienda al dispositivo. En los teclados de computadora existe el llamado cdigo SCAN el cual es la seal enviada por el teclado a la computadora cuando se pulsa una tecla. Es en estos casos la CPU la que a partir de la posicin determina cual tecla ha sido pulsada (cdigo ASCII correspondiente) y lo hace por medio de rutinas de interrupcin que son invocadas cuando el controlador del teclado genera una peticin de interrupcin. Estas rutinas leen el cdigo enviado por el controlador y lo asocian con la tecla pulsada por el usuario. 3

Comunicaciones seriales El puerto serial de las computadoras es conocido como puerto RS-232. Un puerto serie es una interfaz fsica de comunicacin en serie a travs de la cual se transfiere informacin mandando o recibiendo un bit. En las siguientes figuras se tienen los esquemas del conector DB-9 utilizado en esta prctica:

Figure 2: Conector hembra

Figure 1: Descripcin de los pines

Figure 3: Conector Macho

Se tiene especial inters en las comunicaciones seriales asncronos. En la comunicacin serial asncrona, no son necesarios los pulsos de reloj. La duracin de cada bit est determinada por la velocidad con la cual se realiza la transferencia de datos. Un resumen de las principales caractersticas del protocolo RS 232 es:

4

Los 1 lgicos se representan con niveles de tensin negativos. Los 0 lgicos se representan con niveles de tensin positivos. En una comunicacin Asincrnica se necesitan bits de Start y de Stop. Los bits de Paridad se utilizan para verificar la integridad de la informacin El Circuito MAX-232 Este circuito soluciona los problemas de niveles de voltaje cuando se requiere enviar unas seales digitales sobre una lnea RS-232. Este chip se utiliza en aquellas aplicaciones donde no se dispone de fuentes dobles de +12 y 12 Volts. El MAX 232 hace conversiones de tensin del protocolo RS 232 a tensiones TTL y viceversa. En la siguiente figura se tiene un esquema de la conexin entre el microcontrolador y la computadora a travs del circuito Max 232

METODOLOGIA Proceso de diseo: 1. Hardware: se decidi si se iba a utilizar la interrupcin externa o no, se realizo en fsico el teclado utilizando interruptores de 4 terminales que facilitaron la construccin del circuito impreso. 2. Software: se intent que el programa principal solo consistiera de una instruccin de espera, de manera que cada tarea se realizara nicamente cuando fuese necesario o solicitado por un dispositivo (teclado o puerto serial)

5

PROCESO DE DISEO Hardware El diseo del teclado utiliza la interrupcin externa del microcontrolador para determinar cuando una tecla ha sido presionada y as evitar la comprobacin cada vez que se realice el scaneo.Estructura. El teclado est constituido por un arreglo de de 4 filas y 4 columnas y por un total de 16 interruptores los cuales al ser presionados cortocircuitan la fila y la columna correspondiente.

Las filas del teclado se comunican mediante 4 cables con el nible alto del puerto 1, as mismo sucede con las columnas, las cuales a travs de 4 cables se comunican con el nible bajo del puerto 1. Estos 4 cables de las columnas tambin pasan por un Indicador, en nuestro caso una compuerta and. La salida de esta compuerta and llega al pin 2 del puerto 3 del microcontrolador.

Figure 6: Detalle fila

Figure 5: Detalle columna

Figure 4: Detalle conexin microprocesador

Funcionamiento. La disposicin anteriormente hecha va a permitir realizar a travs del microcontrolador un proceso de escaneo, en el cual cada fila, por un tiempo de 5ms va a estar configurada como salida con un nivel de tensin bajo, mientras esto ocurre las dems filas tendrn un nivel de tensin alto (configuradas como entradas). Las columnas por su parte (nible bajo del puerto) siempre van a estar configuradas como entradas, de esta manera la salida del Indicador (compuerta and) ser 1.

En el momento en el que se presione una tecla quedara en cortocircuito la fila con la columna respectiva, y cuando se proceda a realizar el escaneo el nivel bajo colocado en la fila tambin ser visto en la columna, entonces un bit del nible bajo del puerto 1 habr recibido un cero, y consecuentemente la salida de la compuerta and tambin ser cero indicando que se ha presionado una tecla. Es necesario recordar que el pin 2 del puerto 3 es el responsable de atender interrupciones externas, de este modo, se le avisa al microcontrolador que una tecla se ha presionado y a partir de all comienza una serie de procesos dirigidos por el microcontrolador como lo son: 6

1. 2. 3. 4.

Eliminacin del rebote. Verificacin de la tecla, bsqueda en memoria code del carcter presionado. Espera a soltar la tecla. Envo del carcter por va serial a una computadora.

De acuerdo a lo anteriormente descrito podemos sintetizar el diseo del teclado en el siguiente diagrama de bloques:

Figure 7: Diagrama de bloques del funcionamiento del teclado y microprocesador

7

Figure 8: Esquemtico de la conexin realizada entre el teclado y el microprocesador

Para construir el teclado se utilizaron 16 switches de 4 pines, los pines tienen continuidad de a pares, es decir los pines que estn de un mismo lado se comportan como uno solo. El esquema circuital de los mismos as como el layout correspondiente realizados con el programa Eagle se presentan a continuacin:

Figure 9: Esquemtico del circuito impreso del teclado

8

Figure 10: PCB correspondiente con el teclado (EAGLE)

9

SoftwareDescripcin de cada proceso: a. Programa principal: se inicializan los registros de forma conveniente i. PCON en 00h, no se duplica la velocidad de comunicacin serial y no configuramos el modo de baja energa. ii. TCON en 00h, inicializamos los flag de over flow de los timer y configuramos la interrupcin externa por nivel, despus de cada interrupcin se resetea por programa IE1. iii. IP en 03h, se da alta prioridad a interrupcin externa y para el timer, la interrupcin serial tiene baja prioridad. iv. SCON en 40h, se configura la comunicacin serial en 8 bits uart y se borra el flag de interrupcin IT. v. DPH en 00h, el DPTR constituye el puntero de la tabla de memoria code que contiene el cdigo de la tecla que ha sido presionada, aqu se inicializa la parte alta de este puntero. vi. TMOD 21h, se configura el timer 0 en modo de 16 bits y el timer 1 en modo de 8 bits con autorecarga. vii. TL0 en 00h y TH0 en EEh, se configura la cuenta del timer cero para el proceso de escaneo, este escaneo es de 5 ms. viii. En Acc y B se guarda el inicio de de la tabla de memoria RAM en donde se guardaran las teclas presionadas que no puedan enviarse inmediatamente. ix. P1 en 7Fh, se inicializa el puerto 1 en un valor conveniente para el escaneo del teclado. x. F0 y PSW.1 en 0, F0 es un flag que indica que la funcin del timer 0 es la espera del rebote, se coloca en cero para indicar que esa no es su funcin actual. Por su parte el registro PSW.1 indica que el timer est a la espera de que se suelte una tecla, se coloca en cero para indicar que el timer no est ejecutando esa funcin actualmente. xi. IE en 93h, se habilitan las interrupciones externa, la del timer 0 y la serial. xii. TH1 y TL1 en FDh, se configura la comunicacin serial a 9600 baudios. xiii. Bits 4 y 6 del TCON a 1, para iniciar la cuenta de los timer. xiv. Jmp $, el programa queda a la espera de algn suceso. b. Interrupcin externa: Esta interrupcin es habilitada cuando alguna de las columnas tiene un valor lgico de cero (mas adelante explicaremos que el proceso de escaneo es realizado nicamente a las filas), de esta manera si alguna tecla es presionada la columna correspondiente tomar un valor lgico de cero, y al pasar todas las columnas por una and si alguna tecla es presionada y si el valor predeterminado de estas columnas es uno, entonces al presionarse cualquier tecla esta interrupcin se activar. Al entrar en esta interrupcin se guardan en pila los valores de los punteros de la tabla de RAM interna, se inhabilitan las interrupciones y se detiene la cuenta del timer, a continuacin guardamos el valor presente en el puerto 1, y se procede a

10

configurar una espera de 65ms correspondiente a una espera antirebote, seguidamente se activa la bandera F0 que indica que la funcin que est desempeando el timer es la de espera del rebote. Por ltimo se sacan los registros de la pila y se inicia la cuenta del timer. Tambin se inhabilita la interrupcin del timer, esto para evitar que los rebotes originen falsos registros del puerto, es decir, para no originar esperas consecutivas de rebote. c. Interrupcin del timer: el timer controla tres procesos, el escaneo, la comprobacin de la tecla (verificar y evitar el rebote), y comprobar que se suelte la tecla, a continuacin se describe el proceso seguido: Se guardan en pila los punteros de la tabla de RAM interna, se verifica el valor de las banderas, si F0 vale 1 entonces se salta a la etiqueta que se encarga de procesar el rebote, si PSW.1 vale 1 entonces se procede a comprobar si la tecla ha sido soltada, si ambas banderas valen cero entonces el proceso correspondiente es el escaneo. i. Proceso de escaneo: en primer lugar se detiene la cuenta del timer y se procede a guardar en el registro Acc el valor del puerto 1 (recurdese que en el programa principal se defini al bit ms significativo como una salida de valor bajo y al resto de los bits como entradas) acto seguido se procede a rotar a la derecha cada uno de los bits de Acc, esto trae como consecuencia que paulatinamente se configura como salida alguno de los bits del puerto, es importante recordar, que el teclado posee 4 filas y 4 columnas, de este modo, como se quiere que el escaneo se haga solo a las filas se conectaran por conveniencia las filas del teclado a los 4 bits ms significativos del puerto 1, en tanto las columnas sern conectadas a los cuatro bits menos significativos. Este proceso requiere adems de preguntar peridicamente si ya se terminaron de escanear las cuatro filas para as recomenzar el escaneo desde la fila cero. De este modo una vez guardado en Acc el valor presente en el puerto (estado anterior) se procede a verificar si el bit que se estaba escaneando era el bit 4 (Acc.4=0), si es as se reinicia el valor del puerto en 7Fh, de lo contrario se rotan los bits para as seguir con el escaneo de las filas subsecuentes. Se coloca el nuevo valor de Acc en el puerto y se activa la interrupcin externa (esto es por precaucin, recordemos que esta fue desactivada en la rutina de interrupcin externa y dependiendo de cmo se desarrollen los procesos y por fenmenos explicados ms adelante se requiere garantizar que se active esta interrupcin aunque no parezca necesario). Despus de esto se vuelve a iniciar la cuenta en 5 ms y se salta a la etiqueta FIN2 donde se sacan de la pila todos los registros y se habilitan todas las interrupciones (en otros procesos del timer estas se deshabilitan y es requerido habilitarlas nuevamente) ii. Proceso de verificacin de tecla pulsada: Despus de que una tecla es pulsada y pasa el tiempo configurado para la espera antirebote se habilita la interrupcin del timer y entonces, despus de verificar que el valor de la 11

bandera F0 es 1 se salta a la etiqueta rebote, en la cual se inhabilitan todas las interrupciones (para seguir sugerencia de la practica), se borra el valor de la bandera, se resetea nuevamente el bit que indica interrupcin por nivel y se procede a la verificacin de la tecla. Como en la interrupcin externa el valor del puerto fue guardado en una variable, ahora se compara el valor de est con el valor actual del puerto, de ser diferentes se salta a la etiqueta FIN2 (en este proceso se observa que es esencial reactivar todas las interrupciones aunque en el anterior no pareca necesario). No obstante si lo que ve el puerto a continuacin es igual a lo que se vio hace 50 ms entonces se procede a hacer la validacin del cdigo, se activa la bandera PSW.1 que indica que una tecla ha sido presionada. Ya que lo que llega del puerto es un indicador de la posicin de la tecla pulsada es importante considerar varias situaciones, entre ellas que el usuario del teclado presione varias teclas a la vez, en este caso, se configura el teclado para que no escriba ningn carcter, para lo cual se tomo en consideracin los posibles cdigos generados si SOLO UNA TECLA es presionada, para ello se requiere manipular el valor proveniente del puerto, en tal sentido debemos recordar que en el nible alto del puerto esta la informacin referente a las filas y en el nible bajo la referente a las columnas, por ello al multiplicar el valor del puerto (previamente guardado en Acc) por 10h se habr separado la informacin de la fila de la de las columnas y se procede a hacer una verificacin tomando en consideracin cual es el cdigo generado si solo se presiona una tecla (este proceso se explicara con ms detalle en el apartado donde se explica la tabla de memoria code), de esta manera si se presiona ms de una tecla el cdigo generado ser diferente del que podra tomar si solo se presionara una tecla (piense en un sistema de coordenadas, si se activan dos teclas a la vez se estar haciendo referencia a dos filas o columnas simultneamente y al ser esto detectado se salta inmediatamente a la etiqueta FIN2). Si despus de la confirmacin resulta que solo se presiono una tecla entonces se guarda en el DPL el valor correspondiente a la coordenada de la fila y en Acc el de la columna, y a travs de la instruccin movc A,@A+DPTR se tiene acceso a la tabla que contiene el valor correspondiente a la tecla presionada. Acto seguido se verifica si la tecla presionada fue la tecla borrar, de ser as se va a una rutina especial que se encarga de borrar, de no ser as se verifican los punteros de la tabla RAM interna (para ello se sacan de pila los respectivos valores de la misma). Esta tabla RAM tiene como funcin servir de buffer, de este modo si existiese algn dato pendiente o en proceso de envo no se perder el valor presionado a menos que se llene la memoria del buffer. Esta tabla de memoria es necesaria en el proceso de borrado en el cual se requiere el envo de tres caracteres. De este modo se verifica que los punteros tengan igual valor, de ser as entonces no existe ningn dato pendiente y se puede 12

enviar inmediatamente el valor de la tecla presionada enviando el valor de Acc al Sbuf y saltando a la etiqueta de espera, en caso contrario se debe guardar en la posicin correspondiente del buffer para lo cual se saltara a la etiqueta buf, en la cual se incrementa el puntero B (direccin actual de la tabla) mientras se deja fijo Acc (puntero de inicio de la tabla), el registro de inicio de tabla siempre se mantiene vacio y esto es lo que permite saber si no hay datos pendientes (ya que esta comparacin se hace a partir del valor de los punteros). Despus de incrementar la direccin actual se verifica que el buffer no est lleno, de estarlo no se escribe nada y se salta a la etiqueta espera (para esperar soltar botn), sin embargo, si hay espacio suficiente se guarda en la posicin correspondiente del buffer y se guarda el valor de los nuevos punteros. En el caso que la tecla presionada sea la tecla borrar se va a la etiqueta borrara donde se comprueba que hay espacio suficiente en el buffer, acto seguido se llama a la subrutina borrar que comprueba si hay datos pendientes o no y enva los tres caracteres (atrs blanco y atrs) de acuerdo a lo requerido. Todo este proceso explicado anteriormente son los procesos de Verificacin de Tecla y Almacenamiento de Cdigo de Tecla. Ntese que si estos procesos resultan exitosos o positivos segn los requerimientos ya explicados se va a la etiqueta espera, en la cual se inhabilita la interrupcin externa (para evitar problemas si el usuario decide jugar con el teclado) y se inicia una cuenta de espera despus de la cual se verificar si se ha soltado la tecla, se lleva a 1 la bandera PSW.1 para indicar que la prxima funcin del timer es precisamente la Verificacin de Tecla liberada, se inicia la cuenta y se salta a la etiqueta FIN2. iii. Verificacin de Tecla liberada: despus del proceso anterior y si se presiono una tecla, la siguiente interrupcin del timer ser verificar si una tecla se ha soltado, para lo cual se salta a la etiqueta dejaron una vez que se verifique el valor de la bandera PSW.1, ah basta con verificar el nible bajo del puerto, para lo cual se lleva a Acc el valor del puerto 1, se complementan todos los bits de Acc (si la tecla ha dejado de presionarse entonces el nible bajo ser cero), se multiplica Acc por 10h (ahora Acc ser 00h si la tecla ha dejado de presionarse), de este modo si no se ha soltado la tecla se vuelve a la etiqueta espera de lo contrario se va a la etiqueta solto donde se reanuda la cuenta para el escaneo, se habilita la interrupcin externa y se borra la bandera PSW.1, despus de lo cual se salta a FIN2. d. Interrupcin serial: una vez que un dato termina de enviarse va serial se habilita la interrupcin serial, aqu se verifica si existen datos pendientes por enviarse, de ser as se procede a hacer un corrimiento de los registros de la tabla de RAM interna despus de lo cual se salta a la etiqueta trans donde se borra la bandera TI y se recupera el puntero de inicio de tabla, el puntero de posicin actual es modificado en

13

esta interrupcin. De no haber dato pendiente se salta directamente a la etiqueta trans.Subprocesos:

a. Programacin de los timer: i. Escaneo: el escaneo se realiza cada 5 ms y se configura el timer 0 en modo de 16 bits, de esta manera TL0 y TH0 sern 00h y EEh respectivamente. ii. Rebote y espera a liberacin de tecla, se realiza cada 65 ms, TL0 y TH0 00h y 16h. iii. Baud rate del timer 1: se configura segn el set de instrucciones dado en clase a FDh para los 9600 baudios. iv. Se programa la interrupcin externa por nivel, esto permite evitar problemas a la hora de manipular el teclado. b. Con cada interrupcin de tiempo: 1. Salida del cdigo de fila y lectura del cdigo de columna: en el caso del proceso de escaneo la lectura de las columnas, si nadie presiona una tecla, se mantiene en 1 todo el tiempo (nible bajo en 1), por su parte, de manera recursiva las filas (bits del nible bajo)estarn cambiando a salidas 0, de manera grafica tenemos:Acc.7 0 1 1 1 0 FILAS Acc.6 Acc.5 1 1 0 1 1 0 1 1 1 1 Acc.4 1 1 1 0 1 Acc.3 1 1 1 1 1 COLUMNAS Acc.2 Acc.1 1 1 1 1 1 1 1 1 1 1 Acc.0 1 1 1 1 1

2.

Despus de presionada una tecla, la lectura de las columnas depender de cul de ellas ha sido presionada. Una vez que la tecla ha sido liberada la salida del cdigo fila y lectura del cdigo columna se corresponder con la ltima fila escaneada antes de presionarse la tecla. 3. Actualizacin de banderas y memorizacin de cdigos. Las banderas F0 y PSW.1 se activan o desactivan de acuerdo al proceso, cada vez que una tecla es presionada la bandera F0 pasa su valor lgico a 1, despus de verificar el rebote se lleva a cero. Por su parte la bandera PSW.1 siempre permanece en alto hasta que la tecla no sea soltada (se lleva a 1 una vez que se establece que la tecla presionada es vlida) 4. Variables: se definen la variable de 8 bits valor guarda el valor del puerto cuando se activa la interrupcin externa, se utiliza para posterior comparacin.

14

5. Definir tabla de memoria Code para la codificacin del teclado y codificacin de tecla pulsada:

Como se explico previamente, en esta prctica se vali de la posicin de las teclas para su codificacin, a continuacin se presenta un esquema del valor que tendra el puerto si SOLO UNA de las teclas fuese presionada de acuerdo con el esquema general del teclado:Tecla 1 2 3 + 4 5 6 7 8 9 * Del 0 = / F3 P1.7 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 F2 P1.6 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 F1 P1.5 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 F0 P1.4 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 C3 P1.3 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 C2 P1.2 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 C1 P1.1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 C0 P1.0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 Valor E7 EB ED EE D7 DB DD DE B7 BB BD BE 77 7B 7D 7E

15

Es conveniente ahora repasar el proceso de bsqueda en la tabla de memoria code el valor de la tecla pulsada, en primer lugar se dijo que el valor del puerto se llevaba a Acc se intercambiaban los nibles (alto columna, bajo filas) y luego se multiplicaba por 10, de este modo de acuerdo a la tecla presionada se tendr:Tecla 1 2 3 + 4 5 6 7 8 9 * Del 0 = / Acc(Filas) E0 E0 E0 E0 D0 D0 D0 D0 B0 B0 B0 B0 70 70 70 70 B(columnas) 07 0B 0D 0E 07 0B 0D 0E 07 0B 0D 0E 07 0B 0D 0E

Puede observarse claramente que solo existen 4 valores de filas y 4 columnas validos si solo se presiona una tecla, es bajo esta premisa que se resuelve el inconveniente de varias teclas presionadas a la vez, pues en el cdigo se revisa primero el cdigo de las filas, si lo que se recibe del puerto es diferente de alguno de los valores filas entonces se estn presionando varias teclas a la vez y por lo tanto se decide no enviar nada por el puerto, una vez verificadas las filas se procede a verificar las columnas, si lo que se ley del puerto es diferente de alguno de estos datos entonces se presiono ms de una tecla y por lo tanto se decide no enviar nada al puerto (tecla no valida). Una vez establecido cuando una tecla es vlida o no entonces se procede a su bsqueda en tabla de memoria code, la tabla fue definida de la siguiente forma:

16

De este modo justificamos la inicializacin del DPH en 00h y el hecho de guardar en DPL el valor de la fila y en A el de la columna, puesto que con ello se hace uso de la instruccin movc A,@A+DPTR. Ntese que la posicin de memoria correspondiente a la tecla borrar (en el circulo) tiene como valor 00h, este valor es el que se usa para discriminar si esta tecla ha sido presionada, es decir, se revisa si el valor obtenido de la tabla es 00h, si lo es entonces se va a la etiqueta borrara y se realiza el proceso ya explicado.Proceso de almacenamiento en memoria RAM interna. a. Definir tabla en memoria Ram interna: esta tabla est localizada a partir de la direccin 60h, la tabla se llama buffer y tiene una longitud de 9 bytes (recurdese que uno de ellos siempre permanece vacio por motivos prcticos). b. Acc y B son los punteros de la tabla en memoria RAM, Acc indica el inicio de la tabla mientras que B indica la direccin actual, para guardar en la tabla simplemente se incrementa el puntero de direccin actual y se escribe el valor de la tecla a almacenar en dicha direccin. En el caso de la interrupcin serial, una vez que se enva el dato y se verifica si hay datos pendientes se procede a enviar el dato de la direccin 61h y se corre cada uno de los datos pendientes, despus de lo cual la direccin actual se decremento. Este proceso se repite hasta que no quedan ya datos pendientes por enviar. Proceso de comunicacin entre el microcontrolador y el computador va RS232: El puerto serial del microcontrolador es un puerto FULL DUPLEX, lo cual significa que puede transmitir y recibir datos simultneamente (pines 10 y 11 del integrado). El receptor contiene un Buffer, que le permite comenzar a recibir un segundo dato sin necesidad de que el primero haya sido completamente ledo. Sin embargo si el primer byte permanece sin ser ledo hasta el final de la recepcin del segundo dato, ste se perder. El dato de la Recepcin y de la Transmisin se encuentra en el registro SBUF del SFR (espacio de funciones especiales). El registro SCON contiene todos los parmetros que permiten controlar el funcionamiento del puerto serial y establecer su modo de trabajo. Como previamente se explic la comunicacin est configurada en modo 1 a 9600 baudios. En el modo 1 se transmiten 10 bits por Tx o recibidos por Rx (en este caso solo es de inters la transmisin serial). Estos 10 bits son los 8 bits de informacin (del menos significativo al mas significativo), un bit de inicio en nivel 0 y un bit de parada en nivel 1(vase figura 0 del marco terico). Se inicia la transmisin de un dato por cualquier instruccin que escriba en el registro SBUF. La seal de escritura en SBUF, tambin carga un 1 dentro de la novena posicin del registro de corrimiento de transmisin y establece en la unidad de Control Tx una demanda de transmisin. La transmisin comienza en el estado 1 en la primera fase del ciclo de mquina siguiente, en el primer pulso proporcionado por el circuito divisor (%16 de la frecuencia dada por el Timer 1). Es

17

decir, los datos de entrada estn sincronizados por el circuito divisor %16, y no por la escritura en SBUF. La transmisin comienza con la activacin de la seal SEND, la cual introduce el bit de START en TxD. Un periodo ms tarde (segunda fase del estado 1) la seal DATA es activada, la cual permite la salida de los bits que se transmitirn por TxD. El primer pulso de corrimiento ocurre un perodo despus de esto.

Figure 11: Diagrama de estados de la comunicacin serial del microcontrolador 8051 (manual del microcontrolador 8051 Alejandro Vega 1999)

El protocolo de transmisin RS232 fue explicado en el marco terico, ah se explica en qu consisten los niveles de tensin del protocolo y como es el puerto DB-9 de la computadora. PRESENTACION Y ANALISIS DE RESULTADOS Despus del proceso de programacin y diseo se realizaron las pruebas correspondientes, las cuales consistieron en conectar el teclado previamente construido al puerto del micro y a su vez este micro se conecto a la computadora va serial. A travs del programa hyperterminal se visualizaron los resultados, se procedi a tocar cada una de las teclas y a hacer diversas combinaciones con las teclas. Se observ lo siguiente: Todas las teclas funcionaban y enviaban los respectivos caracteres al ser presionadas una a una (se debe presiona fuertemente para que la computadora reconozca el carcter, esto se piensa es un problema de hardware). Al presionar mas de una tecla a la vez NO se escribe nada, es decir el micro no enva ningn caracter va serial. Al dejar una tecla presionada durante mucho tiempo esta solo se escribe una vez. Si se mantiene presionada una tecla, y mientras se hace esto se presiona otra tecla, entonces el microprocesador no enva nada. El proceso de borrado se realiz con xito.

18

El programa resulto en 604 lneas de code (informacin suministrada por el Keil al compilar el programa). Salvo el hecho que el programa qued bastante grande y quizs pueda hacerse ms eficiente, ste cumple con su funcin, es decir, enva caracteres desde un teclado numrico hacia la computadora va comunicacin serial de manera exitosa y segn los requerimientos solicitados. CONCLUSIONES Se logr cumplir el objetivo de la prctica, es decir se pudo elaborar exitosamente un teclado matricial de 16 teclas para ser conectado a uno de los puertos del microcontrolador 89S52 y disear todas las rutinas necesarias para que el microcontrolador sea capaz de mostrar cada una de las teclas introducidas en una pantalla a travs de comunicacin serial. BIBLIOGRAFIA Arellano, E. S. (Desconocido). Curso de microcontroladores I. desconocido. (s.f.). DB styles. Recuperado el 10 de Junio de 2010, de http://www.ve7ed.com/documents/db_style.html Prez, E. L. (1998). INGENIERIA EN MICROCONTROLADORES Tutorial del Protocolo RS-232. Ciudad de Mexico. Vega, A. (Agosto-Dicieembre de 1999). Manual del microcontrolador 8051. Desconocida.

19

ANEXOS (CODIGO EN KEIL)

20

21