Click here to load reader

Sistema'maestro esclavo 80188 8031 para aplicaciones

  • View
    0

  • Download
    0

Embed Size (px)

Text of Sistema'maestro esclavo 80188 8031 para aplicaciones

UNIVERSIDAD A U T ~ N O M A METROPOLITANA IZTAPALAPA
PROYECTO DE INVESTIGACI~N:
/y Rojas García Víctor G. Cortés León Héctor
Sinodal: Ing. Gonzalo Duch,.i Saiichez
mayo 1998. cc)
El sistema mínimo con microprocesador 80 188,4
El Microprocesador 80188 de Intel, 7 La Unidad de Ejecución, 7
Los registros de propósito general, 7 Los registros índice apuntadores, 8 La unidad lógica y aritmética, 8 El registro de banderas, 8
Las banderas de estado, 8 Las banderas de control, 9
La unidad de interface del canal, 10 Los registros de segmento, 10 El sumador dedicado de 20 bits, 11 El apuntador de instrucciones, 11
Interface entre el sistema mínimo con el microcontrolador 803 1, 12
Breve descripción del sistema, 13
Descripción de los elementos principales de la interface, 14 Microprocesador 80 1 88, 14 microcontrolador 803 1, 15
Interacción entre el sistema mínimo y el microcontrolador, 16 Comandos y Estados, 17
Comandos, 17 Interrupción (bit7), 18 Operaciones (bits 3 a O), 18
Interrupción (bit O), 19 Operación de DMA (bit 1), 20 Error (bit 5),20 Evento (bits 4 a 2), 20
Estados, 19
I
Descripción de la implementación, 2 1 Reset, 21 Envío de Comandos, 21 Transferencias de DMA, 22 Lectura del registro de estado, 23
Conclusiones, 25
Bibliografía, 26
Programa para recibir archivos ejecutables en la UAM-188 (desempac . asm), Programa para descargar desde una PC un archivo ejecutable (descarga.c),
Programa controlador de motor de pasos para el MC 803 1 (ctrlmot.asm),
Programa de interface para controlar un motor de pasos, para la UAM-188 (intermot.asm),
INTRODUCCION
En un mundo cada vez mas automatizado* , es importante para los estudiantes de Ingeniería Electrónica conocer los dispositivos electrónicos y tecnologías utilizadas en dicha automatización. De esta manera, juzgamos importante el profundizar en el estudio y conocimiento de microcircuitos (MC) de alta y muy alta escala de integración (LSI y VLSI, respectivamente), y explorar algunas de las aplicaciones prácticas que estos dispositivos pueden tener en la actualidad.
El presente proyecto tiene como objetivo el realizar la combinación entre un sistema mínimo basado en el microprocesador &O 188 de Intel" (la plataforma mas utilizada en computadoras personales en todo el mundo actualmente) y un microcontrolador de la misma familia (80C3 1).
Sistemas que realizan procesamientos de entraddsalida y comunicación serial de datos requieren un tratamiento muy intensivo en cuanto a la programación.
En muchos sistemas convencionales, la unidad central de procesamiento (microprocesador) realiza la mayoría de las comunicaciones y las operaciones de entraddsalida, en adición a las tareas principales, resultando así en un sistema lento e ineficiente.
Una solución a este problema sería dividir las tareas entre procesadores para incrementar la eficiencia en la programación y el uso de los recursos del sistema mínimo. En el presente proyecto se propone como solución la combinación entre el microprocesador 80 188 y el microcontrolador 80C3 1 de Intel". Así, contaremos con un sistema donde el microprocesador 80188 contará con el poder de procesamiento y manipulación de la memoria, mientras que el microcontrolador proveerá al sistema de la inteligencia para las operaciones de entrada y salida y la comunicación de datos.
* Los autores del presente reporte hemos reflexionado acerca de las implicaciones sociales de la cada vez mas creciente automatización de las labores que anteriormente correspondían a las manos e inteligencia de los hombres. Pensamos en el creciente desempleo que puede generar el que las labores otrora de los humanos, sean ahora delegadas a las mgquinas electrónicas, si la nueva tecnología no es aplicada sabiamente. Sin embargo, confiamos en que la ética y la razón llevaran a los hacedores de conocimiento a contribuir en la mejor aplicación de las nuevas tecnologías por el bien de la especie humana. Nosotros, bajo el original espíritu universitario, pondremos nuestro granito de arena.. .
1
En el proyecto de ingeniería electrónica I se ,construyó el sistema mínimo basado en el microprocesador 80188, el cual cuenta con la capacidad de manejar 8 Kbytes de memoria ROM y 8 Kbytes de memoria RAM, el uso de un microcircuito controlador de teclado 8279, el empleo de un desplegado de cristal líquido, así como de una UART (8250) para la comunicación serial del sistema; adicionalmente se realizó la implementación para el manejo de 16 Kbytes de memoria dinámica (DRAM), incrementando así el manejo de memoria RAM.
Para la implantación del sistema mínimo se recurrió a la téciiica de soldadura sobre tarjeta de circuito impreso. La tarjeta utilizada fue elaborada por el área de Ing. Biomédica del Departamento de Ingeniería Electrónica de la U.A.M. Iztapalapa, y es utilizada comúnmente en los cursos de Sistemas Digitales que en la Universidad se imparten. Posteriormente haremos una descripción detallada de dicha tarjeta de experimentación.
En el proyecto de Ingeniería Electrónica 11 se construyó una interfaz lógica que permite la interconexión y acoplamiento entre el microprocesador 80 188 y el microcontrolador 803 1 , utilizando una configuración de inaestro- esclavo. De esta manera se obtuvo un nuevo sistema extendido que puede ser utilizado para diversas aplicaciones de control, comunicación de bajo nivel y/o procesamiento de entrada salida, y que al mismo tiempo cuenta con el poder de procesamiento para el manejo de grandes programas como puede ser el de una interfaz amigable para el usuario que requiera la utilización de teclado y di sp 1 ay.
Adicionalmente se encontró conveniente elaborar una utilería de software que permite transmitir, vía el puerto serial controlado por el microprocesador, programas ejecutables (reconocibles por el MC 80 1 88), desde una computadora personal hacia la memoria RAM del sistema. Finalizada la transferencia del programa ejecutable, el MC 80 188 puede pasar a ejecutar el programa recién instalado en RAM. De esta manera, se cuenta con un sistema que puede ser transportable, utilizando las baterías adecuadas, y con la gran posibilidad de elaborar variados programas de interfaz, para diversas aplicaciones de control, sin tener que recurrir al grabado de memorias ROM.
2
La utilería mencionada consta de dos programas:
0 Un programa elaborado en lenguaje C de alto nivel que permite abrir un archivo ejecutable y enviarlo, vía el puerto serial de una computadora personal, hacia el puerto serial del sistema maestro-esclavo 80 188-803 1 . Un programa elaborado en lenguaje ensamblador de bajo nivel y que se instala en la memoria ROM del sistema, inicializando el puerto serial, y encargándose de recibir el programa ejecutable enviado desde la PC y de instalarlo en memoria RAM. También se encarga este programa de transferir el control del microprocesador 80 188 de memoria ROM a memoria RAM (al programa ejecutable recién recibido).
Para la prueba final del sistema se escogió una aplicación de control de un motor de pasos. Un motor de este tipo puede ser manipulado para girar en uno u otro sentido, cambiar de velocidad de giro o producir una serie de movimientos muy precisos. Este tipo de control sobre motores de paso es muy utilizado en aparatos de gran precisión como pueden ser los reproductores de alta fidelidad de cintas magnéticas, reproductores de discos compactos, ploters, impresoras, etc.
3
LA TARJETA DE EXPERIMENTACION PARA MICROPROCESADOR 80188.
La tarjeta de circuito impreso para el montaje del sistema mínimo basado en el microprocesador 80188, utilizada en el proyecto de ingeniería, es un diseño elaborado en el paquete CAD SMART-WORKTM. Está construida con circuito impreso en ambas caras sin el proceso de trough-hole. De está manera, fue necesario iniciar la preparación de la tarjeta realizando manualmente el proceso de Trough-hole con el fin de interconectar ambas caras de la misma.
La tarjeta impresa es la parte principal para poder construir un sistema mínimo y que se diseñó pensando en los siguientes'objetivos:
Utilizar en aplicaciones específicas un microprocesador de la familia 8OX8X y los periféricos mas utilizados en las tarjetas madres de las computadoras personales. Desarrollar aplicaciones que sean trasladables a una computadora personal del tipo IBM y compatibles. Utilizar un microprocesador con varios periféricos integrados a fin de conocer las ventajas que tienen en el diseño y construcción de prototipos el utilizar dispositivos electrónicos de muy alta escala de integración.
EL SISTEMA MINIM0 CON MICROPROCESADOR 80188.
En una época en que los sistemas electrónicos tienden a la miniaturización con fines de transportabilidad, comodidad y fácil manejo, es necesario escoger en el diseño electrónico dispositivos VLSI (Muy Alta Escala de Integración). De esta manera, en el diseño del sistema mínimo se seleccionó un microprocesador 80188 de Intel que además de la Unidad Central de Procesamiento incluye los siguientes periféricos:
0 Un generador de reloj hasta una frecuencia de 8 Mhz. Dos canales independientes de Acceso Directo a Memoria (DMA). Un controlador de interrupciones programable. Tres temporizadores programables de 16 bits. Lógica programable para señales de habilitación tanto para memoria como para el espacio de entradaísalida.
4
Adicionalmente el microprocesador 80 1 88 proporciona, de manera simultánea, las señales de control en modo mínimo y modo máximo, dando al usuario la posibilidad de extender el sistema de acuerdo a sus propias necesidades.
El inicroprocesador 801 88 es un rnicrocircuito de 68 terminales y que se encuentra disponible en varias presentaciones de encapsulado. En este caso se seleccionó la presentación PLCC (Plastic Lead Chip Carrier), que es un MC de forma cuadrada (2.5 cm. por lado aproximadamente) con 17 terminales por lado y que se monta sobre una base. Se seleccionó esta presentación ya que es la que presenta, con las herramientas actuales, las mayores facilidades en el diseño y construcción de un circuito impreso. Adicionalmente, por las mejoras en su diseño, el empleo de un microprocesador 80188, permitió reducir considerablemente el número de microcircuitos adicionales.
Los periféricos integrados en el 801 88 se controlan mediante registros que forman parte de un bloque de control interno mapeado en las últimas doscientas cincuenta y seis localidades del espacio de entradaísalida (E/S). Dicho bloque de control tiene la posibilidad de ser reubicado, tanto en el inisino espacio de E/S, como en espacio de memoria. No se requiere de ninguna instrucción especial para tener acceso a los registros del bloque de control y pueden ser accesados en cualquier momento que el programador o usuario así lo requieran.
Además del microprocesador, la tarjeta de experimentación cuenta con las conexiones necesarias para poder integrar los siguientes componentes:
Una memoria ROM de 8 Kbytes (2764). Una memoria RAM estática de 8 Kbytes (3234).
0 Controlador de teclado y despliegue (8279). Controlador de comunicación serial, UART (8250). Cristal de cuarzo de 16 Mhz.
5
La tarjeta de experimentación, para mayor comodidad y flexibilidad, solo contiene los componentes básicos del sistema mínimo; sin embargo, se adicionaron conectores tipo peine, para poder acoplar teclado y display, y además una “ranura”, con una configuración de canal PC-XT, que permita agregar, en una tarjeta adicional de propósito general, la circuitería específica que requiera el usuario. En dicha “ranura” quedan a disposición del usuario todas las señales necesarias para realizar el acoplamiento con la tarjeta adicional de propósito general que pueden ser de teclado despliegue, adquisición, comunicación, etc.
ROM 27C64
Se presenta a continuación un diagrama a bloques del sistema iníniino con microprocesador 80 1 88.
RAM 62C64
ii TECLADO
DIAGRAMA A BLOQUES DE SISTEMA MINIM0 CON MICROPROCESADOR 80 188.
6
EL MICROPROCESADOR 80188 DE INTEL.
La unidad central de procesamiento (CPU) del microprocesador 80 188 es prácticamente la misma que la del 8086 o la del 8088; sin embargo, el 801 88 tiene la particularidad el incorporar dos unidades independientes de procesamiento: una es la Unidad de Ejecución (EU), y la segunda es la Unidad de Interface del Canal (BIU). La EU decodifica y ejecuta las instrucciones y la BIU realiza todas las operaciones del canal del sistema como son los ciclos de recuperación de código (ciclos de FETCH), lectura y escritura de datos. Las dos unidades de la CPU pueden trabajar de manera independiente y paralela, que es una de las características de los microprocesadores de la tercera generación. Esta particularidad hace al 80 188 un' microprocesador mas veloz que sus predecesores pues, en la mayor parte de la ejecución de un programa, la unidad de ejecución tendrá disponible, en una cola de instrucciones que la BIU se encarga de llenar, el código de la siguiente instrucción a ejecutar.
L a Unidad de Ejecución.
La EU es la responsable de decodificar y ejecutar todas las instrucciones, básicamente está constituida por los cuatro registros de propósito general, dos registros base, dos registros apuntadores, un registro de banderas y una Unidad Aritmética Lógica (ALU). Debido a que la EU no tiene conexión directa con el canal del sistema, obtiene las instrucciones de una cola de cuatro bytes que forma parte de la BIU. Cuando una instrucción requiere accesar a la memoria o a un periférico, la BIU ejecuta los ciclos de canal necesarios ya sea para leer o escribir los datos.
Los registros de propósito general.
Se trata de los registros denominados : AX, BX, CX, DX y pueden ser utilizados completos o bien dividirse en una parte alta: AH, BH, CH, DH y en una parte baja: AL, BL, CL, DL. Es decir, que cada registro puede utilizarse como uno de 16 bits o como dos de 8 bits. Cualquiera de los registro sirve como acumulador en las operaciones aritméticas y lógicas. Sin embargo en algunas instrucciones es necesario utilizar ciertos registros específicos.
7
Los registro indice apuntadores.
Los registros BP, SP, SI y DI solo pueden ser utilizados coinpletos, es decir como registros de 16 bits. BP realiza la función de apuntador base en el segmento de pila y para varias formas de direccionamiento. SP es el apuntador del segmento de pila. SI es un apuntador a un arreglo fuente de datos y DI es un apuntador a un arreglo destino de datos. Los cuatro registros pueden ser utilizados en los diversos modos de dirreccionamiento del microgrocesador.
La Unidad lógica y aritmética.
En esta unidad se realizan todas las operaciones lógicas y aritméticas que puede ejecutar el microprocesador. El resultado de estas operaciones afecta a los diferentes bits del registro de banderas, lo cual resulta de utilidad en la ejecución de instrucciones condicionales de transferencia del programa.
El registro de banderas.
Este registro posee seis banderas de estado y tres banderas de control. Las banderas de estado reflejan el resultado de una operación aritmética o lógica y permiten al programa cambiar la secuencia de su ejecución, dependiendo del valor de alguna de dichas banderas.
Las banderas de Estado.
Las banderas de estados son las que se describen a continuación:
Bandera de Acarreo (CF). Cuando se activa esta bandera, en alto, indica que ocurrió un acarreo del bit mas significativo como resultado de una operación lógica o aritmética.
Bandera de Paridad (PF). Cuando se activa esta bandera, en alto, indica que el resultado de una operación tiene paridad par. Este hecho es utilizado para el chequeo de errores y solo se realiza en los 8 bits menos significativos.
Bandera de Acarreo Auxiliar (AF). Cuando se activa esta bandera, en alto, indica que ocurrió un acarreo del bit 3 al bit 4 en el registro destino. Esta bandera es utilizada por las instrucciones de ajuste decimal y ajuste ascii.
8
Bandera de Cero (ZF). Cuando se activa esta bandera, en alto, indica que el resultado de una operación aritmética o lógica fue cero.
Bandera de Signo (SF). Cuando se activa esta bandera, en alto, indica que el resultado de una operación aritmética es negativo. Las instrucciones que afectan a esta bandera se ejecutan en aritmética de complemento a 2, en las que el bit mas significativo indica el signo.
Bandera de Sobreflujo (OF). Cuando esta bandera se activa, en alto, indica que el resultado de una operación excede en tamaño al del registro destino.
Las banderas de control.
Las banderas de control son las que se describen a continuación:
Bandera de Trampa (TF). Cuando esta bandera se activa, en alto, el procesador pasa a ejecutar instrucción por instrucción con fines de depuración. Para poder activar esta bandera es necesario realizar un enmascaramiento sobre el registro de banderas.
Bandera de Habilitación de Interrupción. Cuando se activa esta bandera, en alto, se habilitan las interrupciones enmascarables que están dedicadas a los periféricos del sistema.
Bandera de Dirección. Cuando esta bandera se activa, en alto, las instrucciones de cadenas ejecutan un autodecremento de las direcciones fuente y destino. En otro caso, cuando la bandera es cero, las instrucciones se ejecutan con un incremento de las direcciones fuente y destino.
9
La Unidad de Interface del Canal.
La unidad de interface del canal (BIU) está constituida de cuatro registros de segmento, registros de comunicación interna, un apuntador de instrucciones, una cola de cuatro bytes, la lógica de control del canal y un sumador dedicado para formar la dirección fisica. La BIU se encarga de interactuar directamente con el canal del sistema, ejecutando todos los ciclos necesarios, y permite a la unidad de ejecución obtener el código, operandos y datos que requiere. De esta manera, mientras la unidad de ejecución decodifica y ejecuta una instrucción, la BIU ejecuta un ciclo de lectura, almacenando al mismo tiempo, en la cola, el byte contenido en la siguiente localidad de memoria. Es decir, que en un alto porcentaje del programa, la EU tiene disponible, en la cola de cuatro bytes, el código de la siguiente instrucción a ejecutar. Es así que se obtiene una mayor velocidad en la ejecución de los programas, pues la EU y la BIU trabajan de manera paralela.
Los registros de segmento.
Para poder direccionar al espacio de memoria del sistema, que para la familia 8086/8088 es de hasta 1 Mbyte, divididos en segmentos de 64 Kbytes, se recurre al uso de registros de segmento. Los registros de segmento disponibles son los siguientes:
Segmento de Código (CS). Contiene la dirección del segmento de 64 Kbytes donde se encuentra el programa en ejecución. Segmento de Datos (DS). Contiene la dirección,de un segmento de ineinoria que contenga datos de programa. Segmento Extra (ES). Usualmente es utilizado como un segmento de datos. Segmento de Pila (SS). Contiene la dirección del segmento de memoria donde se coloca la pila.
Hemos mencionado que el 80188 puede direccionar hasta 1 Mbyte de memoria, para lo cual son necesarios 20 bits de dirección; sin embargo, ni la EU ni la BIU contienen algún registro de 20 bits, por lo cual es necesario contar con un mecanismo para obtener la direccion de 20 bits y de esto se encarga el sumador dedicado que se describe a continuación.
10
El sumador dedicado de 20 bits.
La dirección fisica de memoria la forma el sumador dedicado contenido en la BIU. Para esto, hace uso del registro de segmento, mas un desplazamiento dado por el apuntador de instrucciones (IP). Para entender mejor el funcionamiento del sumador dedicado damos un ejemplo: en la inicialización, el 80188 comienza ejecutando el código contenido en la dirección FFFFOH. En este caso el contenido de todos los registros del 80188 es OOOOH, con excepción del CS que se inicializa en FFFFH. La dirección de 20 bits se forma en el sumador dedicado mediante la suma de CS, multiplicado por 16, mas el desplazamiento, esto es:
CS X 16 FFFFH X 16 = FFFFOH
IP OOOOH +
Dirección + FFFFOH .
El apuntador de instrucciones.
El registro apuntador de instrucciones (IP) es de 16 bits y siempre apunta a la dirección de la siguiente instrucción. Este registro no puede ser accesado directamente por alguna instrucción. Sin embargo, de manera indirecta, existe la posibilidad de cambiar su valor, guardar su valor e incluso sacarlo del segmento de pila.
11
INTERFACE ENTRE EL SISTEMA MÍNIMO CON EL MICROCONTROLADOR 8031
Sistemas que requieren procesamiento de entradaísalida y transmisión serial de datos necesitan un tratamiento muy intensivo referente a la programación. Este tipo de tareas consumen una gran cantidad de recursos e inteligencia, de tal suerte que, en varios sistemas convencionales, en adición a rutinas esenciales todas estas tareas son realizadas por la unidad central de procesamiento, provocando con ello sistemas lentos e ineficientes.
En un sistema ideal, la labores son divididas entre procesadores para incrementar el poder y flexibilidad de los recursos. Una solución interesante es la combinación entre el sistema mínimo basado en el microprocesador 80188 y el microcontrolador 803 1. En una combinación como esta, el microprocesador provee la inteligencia del sistema con su poder de procesamiento, mientras el microcontrolador realiza las fiinciones de entradaísalida. De esta forma el sistema no se limita al solo procesamiento del inicroprocesador, sino que mientras el microprocesador realiza ciertas tareas de proceso, el microcontrolador le ayuda coil el trabajo, llevando a cabo labores que demandarían tiempo y esfuerzo al microprocesador.
Este trabajo describe un método alterno para realizar la interface entre un microprocesador como el 801 88 y un microcontrolador como el 803 1. El circuito de interface se muestra en la Figura 1 , el cual puede realizarse con un dispositivo de lógica programable o con un arreglo de compuertas. Ambos procesadores trabajaran asíncronamente y a distintas velocidades. Con esta técnica, la transferencia de datos a 200 Kbyrtes por segundo puede lograrse entre el microcontrolador trabajando a 12MHz y el microprocesador trabajando a 8mhz.
12
BREVE DESCRIPCI~N DEL SISTEMA
Para llevar a cabo la implementaron de la interface entre el sistema mínimo y el microcontrolador existen tres configuraciones:
1) PILA (FIFO) 2) PUERTO DUAL (DPRAM) 3) MAESTROESCLAVO
En esta descripción no se discutirán las dos primeras configuraciones, por ser muy caras en cuanto a los recursos que demandan y a la complejidad para llevar a cabo su implementación, por sus bondades en cuanto al costo y a la complejidad de impleinentación, solo se mencionara la tercera configuración.
En la configuración maestro/esclavo el sistema mínimo trata al microcontrolador como un periférico mas, como un circuito con un bus de datos de 8 bits, y sin líneas de dirección. (ver Figura 1). El sistema mínimo puede leer estados de operación, y enviar comandos al microcontrolador en cualquier momento. De esta forma, el microcontrolador, se convierte en esclavo del microprocesador, mientras que el microprocesador disminuye así su carga de trabajo y conserva su poder de procesamiento para otras tareas.
Con este esquema, una de las potenciales ventajas que se tienen es que no es necesario estar programando en ensamblador para el microcontrolador cada vez que se requiera realizar una aplicación (esto es si se tienen operaciones básicas muy bien definidas para el microcontrolador). Con programar una vez las funciones que realizara el microcontrolador, el diseñador se tendrá que preocupar por solo mandar los comandos adecuados a la interface, y el resto lo hará el microcontrolador. Incluso personas ajenas al diseño solo tendrán que saber que comandos enviar para llevar a cabo cierta función, mientras que la manera en que se programa al microcontrolador (direccionamientos, instrucciones lógicas y aritméticas, etc.,) estará oculta para sus ojos, logrando con esto cierta abstracción.
13
DESCRIPCI~N DE LOS ELEMENTOS PRINCIPALES DE LA INTERFACE
Esta parte describe brevemente las características mas importantes de el microprocesador 80 1 88 y el microcontorlador 803 1. Para mas información acerca de estos componentes el lector puede referirse a los manuales de microcontroladores y a los manuales de componentes de microsisteinas de Intel. Para el caso del microprocesador, en los capítulos llamados: "SISTEMA MINIM0 CON MICROPROCESADOR 801 88 y EL MICROPROCESADOR 80188 DE INTEL" se tiene mas información. Si le son familiares estos componentes puede evitar la lectura de la siguiente descripción.
Microprocesador 80188
El 80188 es un procesador de 8-bits' comúnmente usado para aplicaciones de control, y básicamente tiene el mismo conjunto de instrucciones que su antecesor el 8088. El 80188 puede accesar hasta lMbyte de ineinoria y ejecutar instrucciones mas rápidamente que el 8088. Con una velocidad de selección de 8,lO y 12 Mhz este microprocesador es muy usado para tareas de control.
Entre sus atributos, tiene integrado un controlador de DMA con dos canales que pueden ser compartidos por miiltiples periféricos. Cada canal es capaz de transferir datos hasta 1 Mbyte de por segundo a 8Mliz. Este controlador de DMA puede ser programado para realizar una transferencia de un bloque de datos, transferencia tipo "ráfaga", y transferencias para intervalos de tiempo. También puede transferir datos por peticiones externas.
Junto con el controlador de DMA, el 80 188 cuenta con un controlador de interrupciones integrado, el que pude responder a fuentes internas y externas de interrupción, así como a peticiones de interrupción' de temporizadores y canales de DMA. El controlador de interrupciones puede ser configurado para generar direcciones de vectores de interrupción internas, tal como sucede con los microcontroladores o puede ser configurado para interrupciones externas como el popular controlador de interrupciones 8259.
14
El controlador de interrupciones puede ser configurado para ser un controlador esclavo de un controlador de interrupciones externo o puede ser maestro para uno o dos 8259’s cada uno de los cuales puede controlar a ocho 8259’s. Cuando se configura en la forma anteriormente descrita (maestro) puede soportar hasta 128 interrupciones externas.
Tres temporizadores son integrados al microprocesador en un chip. Los dos primeros temporizadores (O y 1) pueden ser configurados para ser contadores de 16 bits, o como contadores de eventos externos. Si se configuran como temporizadores, pueden ser activados por software o por un evento externo. Esos temporizadores tienen una terminal de salida, la cual presenta transiciones cada vez que uno de los temporizadores llega a una cuenta máxima, de tal forma que esa terminal externa puede ser usada para generar seííales lógicas. El teinporizador 2 es interno y no tiene terminal de salida, y puede ser usado como un preescalador para los otros temporizadores, así como también puede ser utilizado para generar peticiones de DMA al controlador de DMA.
Gracias a estas facilidades es que la lógica externa para construir un sistema mínimo se ve reducida drásticamente cuando se usan chips como estos.
Microcontrolador 8031
Sin tantas facilidades integradas, ni tan versátil, el 803 1 es un procesador de 8 bits, el cual puede accesar un espacio de memoria de 64 Kbytes. De forma un tanto extraña este procesador tiene dos espacios de memoria cada uno de 64Kbytes, el primero es destinado a memoria de programa (ROM) y el otro a datos (RAM).
Este micocontrolador cuenta con 4 puertos, cada uno de 8 bits, los cuales proporcionan 32 líneas de entradaísalida. Puesto que este microcontrolador no tiene terminales dedicadas para direcciones ni datos, es que se utilizan 2 puertos para servir como líneas multiplexadas de direcciones y datos.
15
A diferencia de otros miembros de su familia, este microcontrolador no tiene memoria de programa interna, por lo que necesariamente accesa las instrucciones externamente, cuenta con una memoria RAM interna de 128 bytes, los cuales pueden ser expandidos a 64Kbytes con ayuda de memoria externa.
Este procesador tiene integrado un controlador de interrupciones el cual solo soporta 5 interrupciones con 2 niveles de prioridad. También se tienen presentes dos temporizadores que pueden ser configurados como contadores de 8 o16 bits. Finalmente el 8031 cuenta con un, canal serial completamente bidireccional el cual proporciona la comunicación del microcontrolador con el mundo exterior.
INTERACCI~N ENTRE EL SISTEMA MÍNIMO Y EL MICROCONTROLADOR.
El sistema mínimo basado en el microprocesador 80 188 se comunica con de el microcontrolador atraves del sistema de memoria y de los registros
ComandolDato y de Estado.
Toda la lógica que “une” al sistema mínimo con el microcontrolador puede ser visto como una “caja negra”, como se indica en diagrama de la Figura 1 mostrada anteriormente, donde el bloque de chip de interface puede ser incluso un arreglo de compuertas o un circuito programable.
Las líneas de Chip select (CS) y de intekupción son usadas para la comunicación entre el microcontrolador y el sistema. La interrupción la utiliza el microcontrolador para atraer la atención del 80188, mientras que la línea de Chip select es usada por el 80188 para atraer la atención del microcontrolador hacia un nuevo comando.
Existen 2 tipos de transferencias en el bus de datos: CoinaiidoíEstado y transferencia de Datos. Las transferencias de CoinandoEstado siempre son realizadas por el microprocesador. Transferencias de Datos son requeridas por el microcontrolador y son llevadas a cabo por el controlador de DMA del microprocesador .
16
El 80 188 escribe un comando usando las líneas CS y WR e interrumpe al microcontrolador. Una vez interrumpido el microcontrolador realiza la lectura del comando, lo decodifica y realiza las acciones asociadas con él, en la terminación de sus actividades el microcontrolador reporta los resultados y los escribe en el registro de Estado lo que conduce a una interrupción al microprocesador 80 1 88, este cuando es interrumpido realiza la lectura del registro de Estado utilizando las líneas CS y RD y elimina la fuente de interrupción.
Cualquier dato o parámetro asociado con los comandos, si es que se necesitan, son transferidos entre el sistema de memoria y el microcontrolador usando Dh4A. Cuando el microcontrolador requiere acceso a la memoria para una transferencia de datos o parámetros, activa la línea de petición de DMA de el 80188 para que se lleve a cabo el proceso de transferencia. El 80188 prepara un bloque de datos en memoria, después se programa al controlador de DMA para transferir dicho bloque de datos y finalmente se transfiere.
COMANDOS Y ESTADOS
Esta parte especifica el formato de los comandos enviados al microcontrolador y la forma de los estados reportados por este en la completación de un evento. Estas definiciones están hechas en base a la aplicación que se considero dar al microcontrolador (control de un motor de pasos), si se quiere, se puede modificar la forma de estos comandos según la aplicación que se le quiera dar al microcontrolador.
Comandos
Un comando es proporcionado al microcontrolador, escribiéndolo en el registro ComandoDato e interrumpiendo al microcontrolador. El comando
puede ser proporcionado en cualquier momento, pero en caso de que no pueda ser aceptado, la operación es tratada como una instrucción NOP (no operar) y será ignorada. (aun cuando el microcontrolador haya realizado la decodificacion del comando).
17
Formato:
Interrupción (Bit 7)
El bit 7 INT, si se pone en alto junto a la primer linea de chip que va a la interface , produce una interrupción por hardware hacia el 803 1. Este es el único modo de interrumpir al microcontrolador, puesto que en el estado de reset este bit es O.
Operaciones (Bits 3 a O)
B3 B2 B1 Bo O 0 0 1
Movimiento a la derecha: Indica al microcontrolador que el movimiento de el motor a efectuarse será a la derecha.
O 0 1 0
Movimiento a la izquierda: Indica al microcontrolador que el movimiento de el motor a efectuarse será a la derecha.
0 0 1 1
Movimiento continuo: Indica al microcontrolador que el movimiento de el motor a ser efectuado será continuo hasta obtener la orden de paro, según el sentido elegido en alguno de los dos comandos anteriores.
18
0 1 0 0
Movimiento por pasos: Esta instrucción en conjunción con alguiio de dos primeros comandos, le indica al microcontrolador que el movimiento que deberá efectuar el motor será un cierto numero de pasos o anguloso de acuerdo a alguno de los dos sentidos. Para este comando no es necesaria la orden de paro después de el movimiento efectuado.
1 1 1 1
Detener movimiento: Ordena al microcontrolador que cese el movimiento de el motor si es que estaba trabajando en forma continua en algún sentido.
Estados
El microcontrolador provee la información acerca de la ultima operación que fue ejecutada, vía el registro de Estado.
El microcontrolador reporta los eventos, actualizando el registro de Estado y levantando la señal de INTERRUPCIÓN hacia el microprocesador. Al poner en 1 el bit O del registro de Estado, se interrumpe al 801 88 y en la rutina de atención a la interrupción, se lee el registro de Estado, al misino tiempo que se desactiva la seííal de interrupción.
Formato:
Interrupción (Bit O)
El bit de interrupción se pone en 1 junto a la interrupción por hardware. Levantando este bit se indica la ocurrencia de un evento. Este bit se limpia por software cuando el microprocesador 80 188 lee el estado y utiliza el registro de Comando para limpiar el bit de interrupción, poniendo un 1 en el bit 7 del registro de comando.
19
Operación De DMA (Bit 1)
El bit de DMA, cuando se pone en 1, indica que una operación de DMA esta en progreso. Este bit se pone en 1 si el comando recibido por el microcontrolador requiere una transferencia de datos o parámetros. En cambio si se limpia este bit, la línea que hace la petición de DMA, DRQ estará inactiva. Para resumir, el bit de DMA cuando esta limpio indica que no se requiere ninguna transferencia de datos/parámetros o que se completo una operación de DMA.
Error (Bit 5)
El bit de error E, cuando se pone en 1, indica que un evento generado por cierto comando tiene una advertencia o una posible fuente de error, o por otro lado indica que el comando que se le mando al inicrocontrolador no file valido.
Evento (Bits 4 a 2)
El campo de evento indica porque el microcontrolador necesita la atención del inicroprocesador.
Los siguientes eventos pueden ocurrir.
NOTA : De la forma en que se estructuro el programa de aplicación y al modo en que opera el motor de pasos, no fue necesario utilizar el registro de estados (favor de ver listados de programas), de manera que si el lector quisiera implementar este registro, debería adecuar10 a la aplicación que vaya a realizar, en nuestro caso no fue necesario configurar el registro.
20
DESCRIPCIÓN DE LA IMPLEMENTACIÓN
Para la implementación de la interface, existen 2 alternativas, la primera utiliza uno de los puertos de el microcontrolador para el manejo del registro de Estado, minimizando asi el Hardware.
Sin embargo, por la naturaleza de el 8031 aparte de ese puerto, hay que sacrificar otros dos para el direccionamiento del programa del microcontrolador, hay que añadir a esto que del ultimo puerto restante, hay algunas líneas que se utilizan para proveer señales de lectura y escritura de datos (por ejemplo de los comandos enviados por el microprocesador y del reporte de estado de una operación hecha por el microcontrolador). De este modo prácticamente todos los puertos están ocupados, por esta razóii no utilizamos esta implementacióii, a fin de ahorrar el uso de un puerto.
Como alternativa, utilizaremos un latch externo a fin de guardar el byte de estado en este latch. La figura 1 muestra el diagrama esquemático de la interface entre algunas líneas del microprocesador 80 1 88 y el microcontrolador 8031.
Después de el reset del 80188 por hardware, el inicrocoiitrolador también entra en su estado de reset. Los registros de ambos procesadores se inicializan tal como se detalla en los manuales de Intel. La señal de reset limpia también las interrupciones hacia el microprocesador y hacia el microcontrolador. FF3 (Flip-Flop3) y FF2 (Flip-Flop2) respectivameiite .
Envio De Comandos
Un latch bidireccional (74LS646) es usado para el registro de ComandoDato. Cuando el 80188 escribe un comando hacia el registro de ComandoDato, interrumpe al microcontrolador. La interrupción es generada solo cuando el bit 7 de el registro de comando es puesto a 1.
Cuando el 80188 activa las líneas PCS3 y WR para escribir un comando, el FF2 se pone en 1 y el FF3 se limpia. La salida de el FF2 es la interrupción hacia el inicrocoiitrolador, una transición de alto a bajo en esta línea interrumpirá al microcontrolador.
21
Dicha sefial de interrupción se limpia tan pronto como el microcontrolador lee y decodifica el comando de el registro de ComandoDato.
La salida de el FF3 es la interrupción hacia el 801 88 y al mismo tiempo es el bit 7 de el registro de comando (INT) esta interrupción, como la que interrumpe al microcontrolador, debe limpiarse de inmediato, indicando con esto que el estado reportado ya no es valido o actual.
Transferencias de DMA
Dentro de la rutina de atención a la interrupción, el comando es decodificado por el microcontrolador. Si dicho comando requiere una transferencia de DMA, el microcontrolador levantara el bit de DMA de el registro de Estado el cual activa la petición de DMA (DRQ). DRQ causa que el controlador de DMA realice una transfereiicia de datos o paráinetros. Cuando se hace una transferencia hacia o desde el registro de Comaiido/Dato la salida de el FF1 se pondrá en 1 y la seííal DRQ ira inactiva de nuevo.
El controlador de DMA transfiere un byte desde el sistema de memoria hacia el registro de ComandoDato. El dato es guardado cuando las líneas PCS4 y WR son activas. Cuando se activan PCS4 y WR limpian al FFI . El microcontrolador monitorea la salida de el FFI por poleo sobre el bit P3.3 del puerto 3. Cuando este bit se liinpia el microcontrolador lee el dato de el registro de ComandoDato.
Una transferencia inversa (desde el registro de ComandoíDato hacia memoria) se realiza activando las líneas PCS4 y RD. Otra vez cuando se activan estas líneas, vuelven a limpiar el registro de ComandoDato y así ahora, el microcontrolador escribirá el siguiente dato en el registro de Comando/Dato. (a diferencia cuando leía).-
Cuando se lleva la “completa” transferencia de datos, el microcontrolador limpia el bit de Dina del registro de Estado y así se deshabilita la seííal DRQ, de tal suerte que se actualiza de nueva cuenta el registro de estado, interrumpiendo al microprocesador.
22
Lectura Del Registro De Estado
El comando mandado al inicrocoiitrolador es escrito y el estado leído con la misma linea de Chip PCS3, aunque el estado es leído a través de el 74LS245 y el comando escrito a el registro de ComandoDato. El microcontrolador actualiza el byte de estado para cualquier cambio que ocurra en las tareas que completa o realiza. En orden para leer el el Estado, el 80188 activa la línea PCS3 y luego activa la línea RD. El contenido de el estado es puesto en el bus de datos a través de el 74LS245 y capturado posteriormente por el inicroprocesador, simultáneamente a la lectura del estado, el microprocesador cancela la interrupción externa provocada por el microcontrolador, y vuelve a estar listo para mandar comandos.
INTERFACE ENTRE EL MICROCONTROLADOR 8031 Y EL MOTOR DE PASOS
Las salidas de los pines de dispositivos programables tales como microprocesadores y microcontroladores, suelen ser muy bajas en cuanto a la cantidad de corriente . Si se desea controlar algunos elementos de potencia como luces, calentadores, solenoides y motores, es necesario adaptar las salidas de los pines de los dispositivos programables a los elementos de potencia por medio de una interface adecuada.
El diagrama “interface entre el motor y el microcontrolador 803 1 ”, muestra un circuito susceptible a ser utilizados para proveer de una interface entre el motor de pasos con el puerto numero 1 de el microcontrolador.
Desde que los buffers están invertidos (c.i 7406), un nivel alto en el puerto de salida de el microcontrolador producirá un nivel bajo en la salida de el buffer, este nivel bajo activa el transistor PNP el cual provee de corriente al terminal del motor al cual esta unido.
Suponiendo que SWl y SW2 están activados. Y después apagando SW2 y activando SW4 se producirá un paso en el motor. Cambiando a SW3 y SW2 a un nivel alto se producirá un nuevo paso en el sentido de las manecillas de el reloj. Después de eso, cambiando a SW2 y SWl en un nivel alto de nuevo se producirá otro paso en el mismo sentido. Se puede repetir la secuencia hasta que el motor haya girado hasta la posición deseada.
23
Para hacer girar el motor en sentido contrario solo es necesario ut misma secuencia de valores para los SW’s pero en dirección contraria.
lizar la
Una mirada mas cercana a la secuencia de las salidas de los buffers (SW’s) muestran un hecho interesante. Para tomar el primer paso en sentido de las manecillas de el reloj es necesario poner SW2 y SWI en nivel alto, mientras los demás bits están en nivel bajo. Para proseguir con el sentido de giro solo es necesario hacer una rotación de un bit hacia la derecha, por cada paso que se desee. El 1 de SW1 se pasa a SW4, el 1 de SW2 se pasa a SWI, y así con los demás bits. Para un giro en sentido contrario se sigue la misma secuencia, salvo que la rotación de bits, debe hacerse a la izquierda. La producción de estas secuencias puede ser fácilmente implementada por un programa hecho para el microcontrolador siguiendo el sentido de giro, segiiii se desee. Una nota importante es que después de que se emite cierto código para un paso, debe haber un retardo antes de poder emitir el siguiente código, esto a fin de evitar un traslape de códigos que “confiindan” al motor.
Dicho retardo debe implementarse según el tipo de motor de pasos que se este utilizando y la respuesta que este tenga, (el retardo adecuado para el usuario, deberá obtenerse mediante prueba y error).
Antes de terminar debe hacerse mención a algunos puntos de el circuito de interface. El motor que nosotros usamos tiene &un rango de voltaje nominal de 5.5 V. Esto significa que se pudo diseñar un circuito para operar con aproximadamente 6.5V en los emisores de los diversos transistores (5.5 V para el motor mas 1 V a través de el transistor). Para rangos bajos de pasos esto funciona bien, pero si se desean rangos mayores de pasos y una mayor torca, es necesario utilizar un voltaje mayor y por consiguiente unas resistencias limitadoras de corriente.
El hecho es que si se afiaden mas resistencias en serie, se decreinenta la constante de tiempo L R lo cual permite que la corriente en el motor cambie rápidamente.
24
CONCLUSIONES
Este trabajo mostró un método alternativo para la combinación entre dos procesadores, con lo cual buscamos hacer tin sistema eficiente, en cuanto a que las tareas de procesamiento y control fueron divididas, dejando el trabajo de control para un circuito dedicado como el microcontrolador 8031 y las tareas de procesamiento al microprocesador 80188. Así mismo se busco cierta independencia con respecto a herramientas para la grabación de memorias eprom, al elaborar un programa que transmitiera serialmente código objeto (elaborado en la computadora), a una región de la memoria del sistema mínimo para ser ejecutado posteriormente, de esta forma se garantiza cierta portabilidad de los programas al depender de pocas herramientas para su elaboración.
La configuración de la interface entre los dos procesadores es bastante general, y puede adaptarse a las necesidades que tenga cualquier usuario, no obstante, es absolutamente necesario que se configuren los comandos y los reportes de los resultados que tenga el sistema, según la aplicación que vaya a ser implementada.
Posiblemente la interface entre los dos procesadores pueda ser inejorada por otros métodos, distintos al expuesto en este trabajo, pero tanto la complejidad, como el costo de implementación de el sistema, lo hacen preferible a otros tipos de interface.
Finalmente los listados de todos los programas involucrados en el trabajo, así como los diagramas de la interface se muestran a continuación.
25
PAGE 80,132 COMMENT *
ESTE PROGRAMA OBTIENE EL CODIGO EJECUTABLE DE UN ARCHIVO, VIA LOS PUERTOS SERIALES DE UNA PC (EL TRANSMISOR) Y DEL - SISTEMA UAM-188 (EL RECEPTOR). EL CODIGO EJECUTABLE ES COLOCADO EN MEMORIA DINAMICA Y TRANSFERIDO EL CONTROL DE -
- EJECUCION A LA DRAM. *
VERIFICAR MACRO LOCAL REVISA
PUSH BX MOV BX,AX MOV DX,0082H
REVISA: SUB AX,AX IN AL,DX AND AL,80H JNZ REVISA MOV DX,0080H MOV AX,BX POP BX
ENDM
; LIMPIA TODO EL DISPLAY Y... ; PONE CURSOR AL INICIO.
ENDM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MENSAJE MACRO LOCAL MENS MENS: MOVAX,CX ; DESPLIEGA EL MENSAJE -
XLAT ; DE LA TABLA APUNTADA - MOV SI,BX VERIFICAR INC DX OUT DX,AL MOV BX,SI LOOP MENS
; POR BX ...
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
MOV AL,OCSH ; COLOCA EL CURSON EN LA POS. 4 - VERIFICAR OUT DX,AL
; DEL RENGLON 2 DEL DISP.
ENDM
; LUGAR 3 DEL DISPLAY
; CHECK-ROM EN DISPLAY.. .
MOV AX,OFEOOH MOV DS,AX
MOV AL,46H VERIFICAR INC DX OUT DX,AL ; ESCRIBE F
MOV AX,DI AND AX,OFOOOH MOV DX,CX MOV CL,O4H SHR Ax,CL MOV CX,DX
JNE SEGNüM MOV AL,46H VERIFICAR INC DX OUT DX,AL JMP TRI
MOV AL,45H VERIFICAR INC DX OUT DX,AL
; PROTEGE VALOR DE CX
; REALIZA UN CORRIMIENTO A LA DERECHA ; RECUPERA VALOR DE CX
; DE LA DIRECCION ; ESCRIBE EL SEGUNDO NUMERO (F)
CMP AH,OlH ; VERIFICA EL SEGUNDO NUMERO -
SEGIWM: ; ESCRIBE EL SEGUNDO NUMERO (E)
TRI: MOVAX,DI AND AX,OFOOH XCHG AL,AH MOV BX,OFFSET NUMERO XLAT
VERIFICAR INC DX OUT DX,AL MOV DX,CX MOV AX,DI AND AX,OOFOH MOV CL,04H SHR Ax,CL MOV CX,DX
; ESCRIBE EL TERCER NUMERO ; PROTEGE EL VALOR DE CX
; RECUPERA EL VALOR DE CX
MOV BX,OFFSET NLTMERO
; ESCRIBE EL CUARTO NUMERO
; BUSCA EL QUINTO NUMERO
MOV BX,OFFSET NUMERO XLAT
; ESCRIBE EL QUINTO NUMERO
MOV CX,BX ENDM
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ERR-ROM MACRO
; ERROR-ROM EN DISPLAY.. .
; ROM-BIEN EN DISPLAY.. .
MOV BL, 10D ; GENERA - REPITE: MOV CX,60000D ;UN - AQUI: LOOP AQUI ; RETARDO ...
DEC BL CMP BL,OOD JNZ REPITE
ENDM
; LUGAR 3 DEL DISPLAY
MOV CX,0009H MENSAJE
; CHECK-RAM EN DISPLAY..
ENDM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DIRECRAM MACRO LOCAL DESP_l,B3,B2,B 1,AGUANTA
MOV AX,OFEOOH MOV DS,AX
MOV AX,DI AND AX,OFOOOH MOV CL,04H SHR AX,CL CMP A H , O 1 H E DESP-1 MOV A X , ' O ' VERIFICAR INC DX OUT DX,AL JMP B3
DESP-1: MOV AX,'l' VERIFICAR INC DX OUT DX,AL
AND AX,OOFOOH MOV CL,OSH S H R AX.CL
; ESCRIBE CUARTO NUMERO (O)
; ESCRIBE CUARTO NUMERO (1)
AND AX,OOOFOH MOV CL,O4H SHR AX,CL
; ESCRIBE TERCER NUMERO B2: MOVAX,DI
MOV BX,OFFSET NüMERO XLAT VERIFICAR INC DX OUT DX,AL ; ESCRIBE SEGUNDO NUMERO
B1: MOVAX,DI AND AX,OOOOFH MOV BX,OFFSET NUMERO
XLAT VERIFICAR INC DX OUT DX,AL ; ESCRIBE PRIMER NUMERO
MOV CX,0050H AGUANTA: LOOP AGUANTA ENDM
ERROR-RAM MACRO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
; ERROR-RAM EN DISPLAY ...
; RAM-BIEN EN DISPLAY ...
MOV BL, 10D ; GENERA - REP: MOV CX,60000D ;UN - AQ: LOOPAQ ; RETARDO ...
DEC BL CMF' BL,OOD JNZ REP
ENDM
ORG OOOOH MOV DX,OFFA2H
; CON TRES CICLOS DE ESPERA
MOV DX,OFFA4H MOV AX,0003DH OUT DX,AL
; PROGRAMACION DE PACS
; PROGRAMACION DEL MMCS
; INICIALIZACION DE MPCS
MOV SP,2000H ; INICIALIZACION DE LA - XOR AX,AX ; PILA ... MOV SS.AX
.......................................................................... ; INICIALIZACION DEL REFRESCO DE MEMORIA.
XOR AX,AX
MOV DX,OFFCAH MOV AX, I47FH ; REGISTRO DE CONTROL DEL DMA
OUT DX,AX
; PARTE ALTA DEL DMA DESTINO
MOV DX,OFFC4H MOV AX,0500H MOV AX,OOOOH OUT DX,AX
; PARTE BAJA DEL DMA DESTINO
MOV DX,OFFC2H MOV AX,0008H OUT DX,AX
; PARTE ALTA DEL DMA FUENTE
MOV DX,OFFCOH MOV AX,OOOOH OUT DX,AX
; PARTE BAJA DEL DMA FUENTE
MOV DX,OFF66H MOV AX,OCOO 1H OUT DX,AX
; PALABRA DE CONTROL DEL TIMER2
MOV DX,OFF62H MOV AX3D OUT DX,AX
; SE ESTABLECE CADA TIEMPO DE INT.
; TERMINA INICIALIZACION DE REFRESCO DE MEMORIA
MOV DX,0080H . MOV CX,OAOOOH
MOV AL,38H OUT 80H.AL
RTD 1 :
OUT 80H.AL
; ESTABLECE MODO DE DISPLAY
MOV AL,OFH VERIFICAR OUT DX,AL LIMPIAR
; HABILITA DISPLAY Y CURSOR
; MODO DE DESPLAZAMIENTO DEL
: LUGAR 6 DEL DISPLAY
...................... RUTINA DE VERIFICACION DE ROM .......................
MOV AX,OFEOOH MOV DS,AX MOV ES,AX SUB DI,DI SUB cx,cx SUB Ax,= CHECKSUM ; ESCRIBE CHEKSUM EN DISP.
DB OEAH
D W 1 OOOH DW OFEOOH
ORG lOOOH LIMPIA-RENGLON DIRECROM MOV AL,ES:[DI] ADD CX,AX INC DI CMP DI, lFFEH JNE SALTO JMP SIGUE
; LIMPIA SEGUNDO RENGLON DEL DISP. ; DESPLIEGA DIRECCION QUE SE C E C A . ; CARGA VALOR DE DIRECCION ACTUAL.
; SUMA A CX EL VALOR EN AL OBTENIDO.
SALTO: DB OEAH : REGRESA A SUMAR MIENTRAS - D W 1 OOOH D W OFEOOH
DEC DI XOR BX,BX MOV BH,ES:[DI+2] MOV BL,ES:[DI+lJ CMP CX,BX JNE ERROR-ROM J M P ROMFINE
; DI<=lFF FD...
ROMFINE: ROM-BIEN ; SI NO EXISTE ERROR EN ROM
CONTI: MOV AX,OOOOH MOV ES,AX
S U B DI,DI SUB cx,cx SUB AX.Ax
C H E W ; ESCRIBE MENSAJE CHECKRAM EN DISPLAY
DB OEAH DW l9OOH DW OFEOOH
ORG 1900H LIMPIA-RENGLON CALL DELOY DIRECRAM MOV AL,20H MOV ES:[DI],AL NOP NOP
; ESCRIBE EN CADA LOCALIDAD 20H : CODIGO DE LOS ESPACIOS EN BLANCO.
NOP NOP NOP NOP NOP NOP NOP MOV BL,ES:[DI] CMP BL,AL JNE BRINCO1 JMP OK
; LEE EN BL EL VALOR DE CADA LOCALIDAD : COMPARA SI: VALOR ESCRITO=VALOR LEIDO : NO, ENTONCES HAY ERROR EN RAM
BRINCO 1 : DB OEAH DW 1700H DW OFEOOH
OK: INCDI
; SALTA A COMPARAR MIENTRAS SI<2000H
BRINC02: DB OEAH DW 1900H DW OFEOOH
ORG 1700H ERROR-RAM HLT
: SI HUBO ALGUN ERROR
MOV DX, 103H MOV AL,80H OUT DX.AL
; PONE DLAB EN I
: ESCOGE EL BAUD GENERADOR EN 600
MOV DX, 103H MOV AL,87H OUT DX,AL
; CONFIGURA PALABRA DE 8 BITS CON 2 BITS ; DE PARADA Y SIN PARIDAD.
IN AL,DX AND AL,7FH : EN O. OUT DX,AL
; MODIFICA EL VALOR DE DLAB PARA PONERLO
MOV DX, 104H MOV AL,OBH OUT DX,AL
; APUNTA AL REGISTRO DE CONTROL DE MODEM ; PARA LEVANTAR LAS LINEAS RTS,DTR Y OUT2
DB O E M DW 035OH D W OFEOOH
ORG 035OH
CALL CHECKDRAM CALL LIW-PUERTO ; LIMPIAR PUERTO. CALL INICIO ; INICILIZAR CAPTURA. CALL PROCESS CALL MENSA-FINAL
; REALIZAR CAPTURA DE CODIGO.
; EN LA RAM.
__---------------- PROCEDIMIENTO DE VERIFICACION DE DRAM ------------------
CHECKDRAM PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH ES
LIMPIAR MOV AL,82H VERIFICAR OUT DX,AL
; LUGAR 2 DEL DISPLAY
; CHECK-RAM EN DISPLAY.. .
MOV AX,800OH MOV ESAX
CELDA:
LIMP1 A-RENGLON CALL DELOY MOV AL,20H MOV ES:[DI],AL NOP NOP NOP NOP NOP NOP NOP NOP NOP MOV BL,ES: [DI] CMP BL,AL JNEDRAMMAL JMP OK2
; ESCRIBE EN CADA LOCALIDAD 20H ; CODIGO DE LOS ESPACIOS EN BLANCO.
; LEE EN BL EL VALOR DE CADA LOCALIDAD ; COMPARA SI: VALOR ESCRITO=VALORLEIDO
; NO, ENTONCES HAY ERROR EN RAM
OK2: INCDI
DRAMMAE: ERROR-RAM HLT
: SI HUBO ALGUN ERROR
; SI DRAM CORRECTA
POP ES POP DX POP cx POP BX POP Ax RET
CHECKDRAM ENDP
PUSH CX PUSH BX PUSH DX PUSH DS
MOV CX,8000H MOV DS,CX ; INICIALIZA EL DS Y SI PARA LA XOR CX,CX MOV SI,CX ; DESCARGA. (LOCALIDAD SOOOH)
CICLO: CALL RECIVEBYTE ; RECIE UN BYTE DE CODIGO
; OBJETO
CMP AL,255 JNE METE MOV BL,DS:[SI-11 CMP AL,BL JNEMETE
; VERIFICA QUE EL VALOR RECIVIDO NO ; SEA FIN DE ARCHIVO
; SALTA A METER DATO.
MOV BL,DS:[SI-2] CMP AL,BL JE FIN-DESCAR ; SALTA AL FINAL DE LA DESCARGA.
METE: NOP NOP NOP NOP NOP NOP NOP NOP MOV DS:[SI],AL INC SI JMP CICLO
; COMO VALOR RECIVIDO NO FUE FIN DE : ARCHIVO, ENTONCES METE EL VALOR
: EN LA RAM Y VA POR OTRO VALOR.
FIN-DESCAR:
DESCARGA ENDP
LIMPPUERTO PROC NEAR PUSH AX PUSH DX
MOV DX. 105H
IN AL,DX AND AL,Ol lOOOOOB CMP A L , O 1 lOOOOOB JE FINAL
; TESTE0 PARA VERIFICAR LA ; POSIBILIDAD DE HABER "DESPERTADO"
CHEQUEO: IN AL,DX
MOV DX, 1 OOH IN AL,DX
FINAL: POP DX POP Ax RET
LIMPPUERTO ENDP
LIMPIAR
A C PTUR
; SI APENAS HABIA SALIDO DE SU ; ESTADO DE RESET. SE LIMPIA EL
; PUERTO DEL 8250.
MOV BX,OFFSET ESP-DESC ; ESCRIBE EL MENSAJE - MOV CX, 15D MENSAJE
; 'ESPERANDO DESCARGA'
INICIO ENDP
PROCESS PROC NEAR ; REALIZA LA TAREA DE RECEPCION DEL CODIGO OBJETO EN ALGUNA POSICION ; CONOCIDA DE LA MEMORIA RAM.
PUSH BX PUSH CX
; ESCRIBE EL MENSAJE - ; 'DESCARGANDO ....I
; PROCEDIMIENTO QUE REALIZA ; LA DESCARGA DEI CODIGO
; EJECUTABLE EN LA RAM CALL DESCARGA
LIMPIAR MOV BX,OFFSET FIN-DESC MOV CX, 15D MENSAJE
; ESCRIBE EL MENSAJE - ; 'FIN DE DESCARGA'
CALL RETARDO
PROCESS ENDP
RETARDO PROC NEAR
DEC BX CMP BX,OOOOH JNE CIERO RET
RETARDO ENDP
DELOY PROC NEAR PUSH CX
CIER: MOV CX,60D FINA: LOOP FINA
POP cx RET
RECIVE-BYTE PROC NEAR
MOV DX, 105H
TESTE A : ; TESTE0 PARA VERIFICAR LA
; POSIBILIDAD DE RECIvlR DATO
RECIVE-BYTE ENDP
; RECIVE VALOR DEL PUERTO
POSICIONA PROC NEAR ; POSICIONA EL CURSOR EN LA COLUMNA CERO DEL RENGLON DOS.
MOV AL,OCOH VERIFICAR OUT DX,AL RET
POSICIONA ENDP
MENSAFINAL PROC NEAR ; DESPLIEGA COMO ULTIMO MENSAJE ("EJECUTANDO EL PROGRAMA EN RAM")
LIMPIAR
; DESPLIEGA EN DISPLAY EL - '
CALL POSICIONA
CALL RETARDO LIMPIAR RET
; DE LA DIRECCION QUE SE - DB 65,66,67,68,69,70 : CHECA.
............................................................................ VER-ROM : DB ' MOR-KCEHC' VER-RAM : DB ' MAR-KCEHC' ROM-MAL : DB ' M O R - R O W ' RAMMAL DB ' MAR-RORRE' ; VERIFICACION DE LA MEMORIA -
; MENSAJES QUE SE DESPLIEGAN - : DURANTE LA VERIFICACION DE - ; LA MEMORIA ROM ;Y DURANTE LA -
ROM-OK : DB ' NEIB-MOR' ; RAM... RAM-OKEY DB ' NEIB-MAR' VER-DRAM DB ' MARD-KCEHC'
ESP-DESC : DB ' .CSED ODNAREPSE' DESCANDO DB ' .... ODNAGRACSED'
: MENSAJES QUE SE DESPLIEGAN - ; DURANTE LA DESCARGA DEL PRO-
FIN-DESC : DB ' AGRACSED ED NIF' EJECUTA : DB ' LE ODNATUCEJE' EJECUTA2 : DB ' MARD NE AMARGOW
; GRAMA EJECUTABLE ...
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Descripcion: Programa encargado de descargar (transmitir serialmente)
un programa ejecutable realizado en la P.C a la memoria ram del sistema minimo como medio de optimizar el uso de la P.C.
CORTES LEON HECTOR ROJAS GARCIA VICTOR
PROYECTO I1 PROF. GONZALO DUCHEN
/ m / 9 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
#include <stdlib. h> #include <stdio.h> #include <string. h> #include <conio.h> #include <graphics.h>
#define MIN-X 10 #define M A X X 70 /* Referentes a la ventana de presentacion */
#define MAX-Y 20 #define MIN-Y 5 /* resultados. */
#define MAXNOM 30
#define MAX-RET 19
/* Maxima longitud del nombre del archivo a /* transmitir. *I /* Maxima cantidad de tiempo en los retardos. */
void inicializacion(); void ventana 0; void apertura ();
void mensaje-inial (); void proceso (); void mensaje-final (); void envia ();
/* Funciones necesarias para realizar el pro- */ void puntos (); I* grama de descarga. */
FILE *archivo; char nombre[MAX-NOM]; /* y su apuntador de archivo asociado. */
/* Referentes al nombre del archivo a abrir */
main() { clrscr();
mensaje-final(); envia(); textmode(2); /* restablece el modo texto original. , */
I* realiza la apertura de cierto archivo ejecuta- ble para su posterior transmision.
byte por byte hacia la tarjeta.
*!
return( 1);
void inicializacion(void)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
I* inicializa el UART de la P.C a 600 baudios con dos bits de parada y sin paridad con interrupcion del BIOS *I
asm push as asm push bx asm push c s asm push d s
asm sor ax,ax asm mov bs,as asm mov cs,as asm mov ds,as asm mov a1,0110011 lb I* A 600 BAUDS. *I asm int 14h
/* INIC. DEL PUERTO SERIAL */
asm sor as,ax asm mov ds,03fSh asm in al,ds
asm pop d s asm pop c s asm pop bs asm pop a s
I
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . del programa.
{ int fg,mg; testmode (CSO); textcolor(BLACK) ; textbackground(3);
window (MIN-X,MIN-Y,MAX-X,MAX-Y); for (fg=MIN-Y; fg <= MAX-Y; fg++) { for (mg=MIN-X; mg <= MAX-X; mg++) cprintf (" "); cprintf ("\n");
a I
void apertura(void) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Descripcion: Hace la peticion al usuario sobre el nombre del archivo
a ser transferido hacia el sistema minimo. En caso de no existir dicho archivo se abortara el programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
gotoxy (18,2); delhe(); insline(); cprintf ("Anote el nombre del archivo
scanf ("%sol, nombre);
\not); gotohy (21,3);
if (!strstr (nombre,".exe") && ! strstr (nombre,".EXE")) { gotoxy (18,4); dellineo; insline(); cprintf ("El nombre del archivo es erroneo \n"); getch(); testmode(2); /* restablece el modo texto original. */ exit( 1);
3;
I* abre el archivo en caso de esistir */ if ((archivo = fopen (nombre,"rb")) == NüLL) { ,
goto,xy (18,5); dellhe(); insline(); cprintf ("No puedo abrir el archivo %SI');
gotoxy (18,6); delline(); insline(); cprintf ("%s",nombre); getch(): clrscr(); textinode(2); exit( I);
1:
void puntos(void) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Descripcion: Utilizada para la presentacion de resultados en las com-
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . paraciones.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . {
1
Descripcion: Despliega mensaje sobre el proceso de descarga del ar-
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . chivo ejecutable.
void proceso (void)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
{ int caracter;
delay (MAX-RET) ; asm push as asrn push bx asm push cx asm push dx
caracter = getc(archiv0); asm mov bx,O asrn inov ax,caracter /* DE DESCARGA VA A COMENZAR. */ asrn mov dx,03f8h asm out dx,al delay (MAX-RET);
/* MANDA EL PRIMER CARACTER CO- */ /* MO AVISO DE QUE EL PROCESO */
while (caracter != EOF) {
asrn mov bx,O /* ESTE CICLO MANDA A PUERTO */ asm mov ax,caracter /* SERIAL EL ARCHIVO HASTA */ asm mov dx,03fgh /*LLEGAR AL ULTIMO BYTE */ asrn out dx,al delay (MAX-RET); caracter = getc(archiv0); delay (MAX-RET) ; 1 fclose(arc1iivo);
/* envia los dos ultimos bytes (bandera) para indicar la finalizacion de la transferencia del archivo */
delay(MAX-RET); caracter = 255; asm mov bs,O asm mov ax,caracter asm mov dx,03fgh asrn out dx,al
delay(MAX-RET); asm mov bx,O asrn mov as,caracter asm mov dx,03fSh asm out dx,al
asm pop ds asrn pop cx asm pop bx asmpogas 1
void envia(void) { int caracter;
asm push a s asm push bx asm push cx asm push dx
do { asm mov bx,O caracter=getche(); asm mov ax,caracter asm mov dx,03füh /* DEL CAñACTER TECLEADO.. . */ asm out ds,al 1 while (caracter!='q');
/* MANDAR A PUERTO SERIAL EL VALOR */
asm pop dx asm pop cx asm pop bs asm pop ax
........................................................................... ; PROGRAMA QUE SE INSTALA EN LA MEMORIA ADJUNTA AL MICROCONTROLADOR 803 1; ; ELPROGRAMA SE ENCARGA DE RECIBIR ORDENES ENVIADAS DESDE EL SISTEMA ; MINIMO; CON MICROPROCESADOR 80188 Y PRODUCIR LAS SALIDAS A UN PUERTO DEL ; 803 1 PARA CONTROLAR UN MOTOR DE PASOS.
CORTES LEON HECTOR ROJAS GARCIA VICTOR G.
; vectores de intempcion
; VECTOR DE INTERRUPCION DEL RESET
ORG 03H AJMP COMANDO
; codigo principal
ORG 2BH
INICIO: ; HABILITA INTERRUPCION EXT. O ; HABILITA LAS INTERRUPCIONES
; INICIALIZA EL STACK
; INICIALIZA LOS REGISTROS ; CONTADOR (54H)Y REG-AUX(55H).
TESTEOa MOV R2,#03H
TESTE0 CJNE R2,#02H,TESTEO CJNE Rl,#OlH,RUTINA2
RUTINA 1 CJNE RO,#OlH,PASOSDER CALL ADELANTE CJNE R 1 ,#02H,RUTINA 1 JMP TESTEOa
PASOSDER CALL PASOS-ADELANTE MOV 54H,#00H MOV 55H,#00H JMP TESTEOa
RUTINA2 CJNE RO,#OlH,PASOSIZQ CALL ATRAS CJNE R1,#02H,RUTINA2 JMP TESTEOa
PASOSIZQ CALL PASOSATRAS MOV 54H,#00H MOV 55H,#00H JMP TESTEOa
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . : RUTINA DE ATENCION A LA INTERRUPCION EXTERNA
COMANDO: MOV DPTR,#lOOH MOVX A,@DPTR ANL A,#OFH
; SELECCIONA REGISTRO PARA LECTURA
COMANDO1 CJNE A,#OlH,COMAND02 MOV Rl,#OlH RETI
COMAND02: CJNE A,#02H,COMAND03 MOV R 1 ,#OOH RETI
COMANDO3 : CJNE A,#03H,COMAND04 MOV RO,#OlH MOV R2,#02H RETI
COMAND04: CJNE A,#04H,COMANDO5 MOV RO,#OOH MOV R2,#OFH RETI
COMANDOS: CJNE A,#04H,SALIDA MOV RO,#OOH MOV R2,#02H RET1
SALIDA: MOV R 1 ,#02H RET1
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; RUTINA DEL COMANDO 2. MLJEVE MOTOR EN SENTIDO DE LAS MANECILLAS DEL RELOJ;
ADELANTE
AVANZA:
ETIQUETA:
MOV R5,#35H JMP ETIQUETA 1
MOV R7,#35H DJNZ R7,$ DJNZ R5,ETIQUETAl
ETIQUETA 1 :
MOV R5,#35H JMP ETIQUETA2
MOV R7,#35H DJNZ R7,$ DJNZ RS,ETIQUETA2
ETIQUETA2:
MOV R5,#35H JMP ETIQUETA3
MOV R7,#35H DJNZ R7,$ DJNZ RS,ETIQUETA3 RET
ETIQUETA3 :
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . : RUTINA DEL COMANDO 2. MUEVE MOTOR EN CONTRA DE MANECILLAS DEL RELOJ
ATRAS:
MOV R5,#35H JMP ETIQUETA4
MOV R7,#35H DJNZ R7,$ DJNZ RS,ETIQUETA4
ETIQUETA4:
MOV R5,#35H JMP ETIQUETA5
MOV R7,#35H DJNZ R7,$ DJNZ R5,ETIQUETAS
ETIQUETA5 :
MOV R.5,#3.5H JMP ETIQUETA6
MOV R7,#35H DJNZ R7,$ DJNZ R5,ETIQUETAó
ETIQUETAG:
MOV R5,#35H JMP ETIQUETA7
MOV R7,#35H DJNZ R7,$ DJNZ RS,ETIQUETA7 RET
ETIQUETA7:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; RUTINA DEL COMANDO 4. QUE MOVERA CIERTO NUMERO DE PASOS A LA DERECHA AL ; MOTOR
PASOS-ADELANTE
MOV R5,#50H JMP ETIQUETAS
MOV R7,#50H DJNZ R7,$ DJNZ R5,ETIQUETAS DEC A CJNE A,#OOH,PASOD2 JMP SAL-PAS-AD
ETIQUETAS :
MOV R5,#50H JMP ETIQUETA9
MOV R7,#50H DJNZ R7,$ DJNZ RS,ETIQUETA9 DEC A CJNE A,#OOH,PASOD3 JMF’ SAL-PAS-AD
ETIQUETA9 :
MOV R5,#50H JMP ETIQUETA 1 O
MOV R7,#50H DJNZ R7,$ DJNZ R5,ETIQUETAlO DEC A CJNE A,#OOH,PASOD4 JMP SALPAS-AD
ETIQUETA10:
MOV R5,#50H JMP ETIQUETA 1 1
MOV R7,#50H DJNZ R7,$ DJNZ R5,ETIQUETAll
ETIQUETA 1 1 :
SAL-PAS-AD RET
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; RUTINA DEL COMANDO 4. QUE MOVERA CIERTO NUMERO DE PASOS A LA IZQUIERDA ; ALMOTOR
PASOS-ATRAS:
MOV R5,#50H JMP ETIQUETA 12
MOV R7,#50H DJNZ R7,$ DJNZ RS,ETIQUETAl2 DEC A CJNE A,#OOH,PASOT2 JMP SALPAS-AT
ETIQUETA 12:
MOV R5,#50H JMP ETIQUETA 13
MOV R7,#50H DJNZ R7,$ DJNZ RS,ETIQUETA13 DEC A CJNE A,#OOH,PASOT3 JMP SALPAS-AT
ETIQUETA 13 :
MOV R5,#50H JMP ETIQUETA 14
MOV R7,#50H DJNZ R7,$ DJNZ RS,ETIQUETAl4 DEC A CJNE A,#OOH,PASOT4 JMP SALPAS-AT
ETIQUETA 14:
MOV R5,#50H JMP ETIQUETA 15
MOV R7,#50H DJNZ R7,$ DJNZ R5,ETIQUETAlS DEC A CJNE A,#OOH,RETROCEDEPASS
ETIQUETA 15 :
S ALPAS-AT RET
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ; RUTINA QUE OBTIENE EL NUMERO DE PASOS QUE SE MOVERA EL MOTOR
OBTEN-NüM: MOV 52H,R2 INC 54H MOV R2,54H CJNE R2,#OlH,SEG-NüM MOV 55H,A MOV R2,52H RET
; RESPALDO DE R2 ; CONTADOR DE TIPO DE NLJM.
SEG-NUM: SWAP A ADD A35H MOV R2,#02H RET
END ; FIN DEL PROGRAMA
COMMENT * PROGRAMA DE INTERFACE PARA CONTROLAR UN MOTOR DE PASOS: DESPLIEGA LOS MENSAJES PARA MOVER EL MOTOR EN EL SENTIDO DE LAS MANECILLAS DEL RELOJ O EN SENTIDO CONTRARIO. SE PUEDE ESCOGER ENTRE MOVER EL MOTOR EN FORMA CONTINUA O POR PASOS (MAXIM0 200 PASOS). EL PROGRAMA SE ENCARGA DE ENVIAR SEYALES HACIA EL MICROCONTROLADOR 803 1 INDICANDOLE QUE ACCION REALIZAR CON EL MOTOR.
ROJAS GARCIA VICTOR G. CORTES LEON HECTOR *
CODSG SEGMENT ASSUME CS:CODSG
MOV AX,8000H MOV DS,AX
MOV AL,ODOH OUT OIH,AL
MOV AL,90H OUT OlH,AL
; PROGRAMA Read FIFO/Sensor RAM
: PROCEDIMIENTOS UTILIZADOS:
MENU-PRINCIPAL PROC NEAR ; este procedimiento desplliega el men& principal - ; de inicio.
PUSH AX PUSH BX PUSH CX PUSH DX PUSH DS
INIMENS 1 :
CALL LIMPIAR
; DESPLIEGUE DEL MENU INICIAL: MOV CX, 12 ; "MOVER MOTOR -
CALL RENGLON2
MOV CX, 12 MOV BX,OFFSET MENU1-2 CALL MENSAJE
CICLO: CALL TECLA CALL SACA-DISPLAY CMP AL,49 JE MENU2 CMP AL30 JE MENU3 JMP INIMENS1
; OBTIENE RESPUESTA DEL TECLADO. ; SACA DATO OBTENIDO AL DISPLAY.
MENU2 : MOV AL,81H J M P SALMENUl
MENU3: MOV AL,82H
; LLAMAR AL MENU 2 ; MANDAR DATO HACIA EL MICROC.
CALL MENU-2
POP DS POP DX POP cx POP BX POP Ax RET
MEW-PRINCIPAL ENDP
INIMENU2:
CALL LIMPIAR ; DESPLIEGA EN DISPLAY EL - MOV CX, 15 ; MENU: MOV BX,OFFSET MENU2-1 CALL MENSAJE ; 3.SALIR " ...
; 'I 1.PASOS 2.CONT.
CICLO2: CALL TECLA CALL SACA-DISPLAY
CMP AL,49D JB CICLO2 CMP AL3 1D JA CICLO2
; VERIFICA QUE EL COMANDO ; ESTE ENTRE 1 Y 2.
CMP AL,49 JE PASOS CMP AL,50 JE CONT CMP AL,51 JE SALIDA JMP INIMENUZ
SALIDA: ; SI SE ESCOGIO OPCION 3 SE - DB OEAH DW 00150H D W 08000H
; SALTA AL MENU INICIAL.
PASOS: ; SI SE ESCOGIO OPCION 1 SE - MOV AL,84H CALL LIW-PUERTO
; ENVIA COMANDO DE RECONOCI-- ; MIENTO (MOVIMIENTO A PASOS) -
CALL COMANDO-AL
JMP sALMENu2
; Y SE LLAMA AL SIGUIENTE MENU. CALL MENU-3
CONT: ; SI SE ESCOGIO OPCION 2 SE - MOV AL,83H CALL LIMPPUERTO
; ENVIA COMANDO DE RECONOCI-- ; MIENTO (MOVIMIENTO CONTINUO) -
CALL COMANDO-AL CALL MEW4 sALMENu2:
; Y SE LLAMA AL SIGUIENTE MENU.
POP DS POP DX POP cx POP BX RET
MENU-2 ENDP
PUSH AX PUSH BX PUSH CX PUSH DX PUSH DS
CALL LIMPIAR ; DESPLEGAR EN DISPLAY EL MEN- MOV CX, 15 ; SAJE: MOV BX,OFFSET MENU3-1 CALL MENSAE
; I' CUANTOS PASOS 'I ...
MOV CX, 1 MOV BX,OFFSET MENu3-2 CALL MENSAJE
CICLO3 : ; OBTENER EL W R O DE PASOS - CALL OBTEN-NüM SUB AH,AH
; QUE VA A REALIZAR EL MOTOR - ; Y ENVIAR DICHO NUMERO HACIA -
MOV AH& AND AL,OFH OR AL,OSOH
; EL MICROCONTROLADOR ...
OR AL,080H CALL LIMPPUERTO CALL COMANDO-AL
DB OEAH DW 00150H D W 08000H
; SALIR AL MENU PRINCIPAL.
POP DS POP DX POP cx POP BX POP Ax RET
MENU-3 ENDP
............................................................................ M E N U 4 PROC NEAR ; este procedimiento despliega el men& n£mero cuatro ; del programa y espera respuesta del usuario.
PUSH AX PUSH BX PUSH CX PUSH DX PUSH DS
INIMENUS:
; DESPLIEGA EN DISPLAY EL - ; MENSAE " SALIR 'I Y ES--
; PERA A QUE EL USUARIO PRE- ; SIONE UNA S, MOMENTO EN EL -
; CUAL SE MANDA A PARAR AL MO- ; TOR ...
CICLO4: CALL TECLA CALL SACA-DISPLAY
CMP AL,'s' JE SALIR CMP AL,'S' .JE SALIR JMP INIMENUS
SALIR: MOV AL,SFH
DB OEAH DW 00 150H D W 08000H
POP DS POP DX POP cx POP BX POP A x RET
MENU-4 ENDP
............................................................................ COMANDO-AL PROC NEAR ; este procedimiento realiza la ejecucign del comando indicado por ; el cgdigo de AL
PUSH CX PUSH DX PUSH DS
MOV DX,0181H ; MANDA A PUERTO 181 EL VALOR CONTENIDO - OUT DX,AL ; EN EL REGISTRO AL.
AND AL,OFH OUT DX,AL
COMANDO-AL ENDP
PUSH AX PUSH DX PUSH DS
MOV DX, 105H
IN L , D X ; TESTE0 PARA VERIFICAR LA
AND &,O 1 lOOOOOB CMP A L , O 1 1 OOOOOB JE FINAL
; POSIBILIDAD DE HABER "DESPERTADO"
CHEQUEO: IN AL,DX AND AL,OOOOOOO 1B CMP AL,OOOOOOO 1B JNE CHEQUEO
MOV DX, lOOH IN AL.DX
; SI APENAS HABIA SALIDO DE SU ; ESTADO DE RESET. SE LIMPIA EL
; PUERTO DEL 8250.
LIMPPUERTO ENDP
............................................................................ VERIFICAR PROC NEAR ; este procedimiento realiza la verificacien de disponibilidad ; del display
PUSH AX PUSH BX PUSH DS
MOV DX,0082H REVISA: SUB AX,AX
IN AL,DX AND &,SOH JNZ REVISA MOV DX,0080H
; REVISA HASTA QUE EL DISPLAY.. ; ESTE DESOCUPADO.
POP DS POP BX POP Ax
RET VERIFICAR ENDP
............................................................................ LIMPIAR PROCNEAR ; este procedimiento limpia todo el display y coloca el cursor al inicio.
PUSH AX PUSH DX PUSH DS
MOV AL,OlH CALL VERIFICAR OUT DX.AL
; LIMPIA TODO EL DISPLAY Y.. ; PONE CURSOR AL INICIO.
POP DS POP DX POP Ax RET
LIMPIAR ENDP
............................................................................ LIMPIA-RENGLON PROC NEAR ; este procedimiento limpia el rengien 2 del display y coloca el cursor ; en la posicien 4.
PUSH AX PUSH, DX PUSH DS
MOV AL,OCSH ; COLOCA EL CURSON EN LA POS. 4 - CALL VERIFICAR OUT DX,AL
: DEL RENGLON 2 DEL DISP.
POP DS POP DX POP Ax RET
LIMPIA-RENGLON ENDP
MOV AL,OCOH CALL VERIFICAR OUT DX,AL
MOV CX, 16 ; LIMPIAR EL RENGLON 2 DEL - MOV BX,OFFSET BLANCO ; DISPLAY. CALL MENSAE
MOV AL,OCOH ; COLOCAR EL CURSOR AL INICIO - CALL VERIFICAR OUT DX,AL
; DEL RENGLON 2 DEL DISPLAY.
POP DX POP AX RET
RENGLON2 ENDP
PUSH AX PUSH BX PUSH CX PUSH DX PUSH DS
MENS: MOVAX,CX ; DESPLIEGA EL MENSAJE - XLAT ; DE LA TABLA APUNTADA - CALL VERIFICAR ; POR BX INC DX OUT DX,AL LOOP MENS
POP DS POP DX POP cx POP BX POP AX RET
MENSAJE ENDP
............................................................................ SACA-DISPLAY PROC NEAR ; envja a display el caracter contenido en el registro AL.
CALL VERIFICAR INC DX OUT DX.AL
RET
JE RETURNVAL CMP AL,'E' ; SI LA TECLA OPRIMIDA ES ENTER -
; SE MANDA A VALIDAR ESTA TECLA ...
NüMVAL: CMPAL,39H ; SI LA TECLA OPRIMIDA NO ES UN - JA BUSCANUM ; NUMERO (AL>39), SE REGRESA A - JMP SACANüMS ; OBTENER NUEVO VALOR.. .
RETURNVAL: CMP S1,OOOOH JE BUSCANUM
; SI SI (REGISTRO) = O, NO HAN - ; ENTRADO NUMEROS, ENTONCES -
JMP OBTENVAL ; EL RETURN AUN NO ES VALIDO ...
SACANLJMS: CALL SACA-DISPLAY ; SE MANDA A DISPLAY EL NUMERO -
; QUE SE TECLEO ...
SUB AL,30H PUSH AX
; SE OBTIENE EL VALOR DECIMAL DE - ; LA TECLA OPRIMIDA (SIEMPF DIGITO) -
INC SI ; Y SE GUARDA EN PILA
CMP SI,0003H ; SI SI (REGISTRO) = 3. NO SE - JE OBTENVAL JB BUSCANUM
; ESPERAN MAS ENTRADAS; ; SI S K 3 , SE ESPERA RETURN...
:AHORA SE OBTIENE EL VALOR DECIMAL, DEL NUMERO ENTRADO DESDE EL TECLADO
OBTENVAL: XOR BX,BX
UNIDAD: POPAX : SE SACA UNIDAD ADD BX,AX DEC SI CMP S1,OOOOH JA DECENA JMP TERM
; SUMAR A BX UNIDADES
; SI SI >= 2, EXISTEN DECENAS ...
DECENA: POPAX ; SE SACA DECENA (EN AX) MOV CX, 10D MUL cx ADD BX,AX
; AX <- AX*10 ; SUMAR A BX DECENAS
DEC SI CMP S1,OOOOH JA CENTENA JMP TERM
; SI SI =< 1, EXISTEN CENTENAS ...
CENTENA: POPAX MOV CX, lOOD MUL cx ADD BX,AX DEC SI
; SE SACA CENTENA
; AX <- AX*100 ; S U M A R A BX CENTENAS
TERM: MOVAX,BX ; MOVER A AX EL RESULTADO CMP AX,lD JB OBTEN CMP AX,200D JA OBTEN JMP SAL-OBTEN-NUM
OBTEN: CALL RENGLON2 JMP INI-OBTEN-NUM
SALOBTEN-NUM:
OBTEN-NUM ENDP
MOV AX,08000H MOV DS,AX
; DE UNA TECLA
IN AL,OIH AND AL,07H JZ VUELVE
: VERIFICA SI SE HA OPRIMIDO TECLA ; WELVE HASTA QUE SE OPRIME TECLA
XOR AX,=
IN AL,OOH MOV BX, OFFSET COD-TECLA OBTIENE DE LA TABLA COD-TECLA -
; EL CODIGO DE LA TECLA OPRIMIDA.. ~
XLAT
TECLA ENDP
MENU1-1 MENü1-2
MENü2-1 MENü2-2 : DB ' RiLAS.3'
: DB ' .TNOC.2 SOSAP. 1'
BLANCO : D B ' I
............................................................................ ; tabla para codificar el teclado utilizado con el sistema minimo.
COD-TECLA : DB ',',20h,20h,'V','X','N','/"40h DB '.',20h,'Z','B','C','M',20h,20h DB ':',20h,'S','H','F','K1,'=',20h
DB 'L',20h,'A','G','D',",';',20h DB 'P',20h,'W,'Y','R','I','*',131~ DB 20h,'2','4','8','6','0',20h,20h DB 20h,'1','3','7','j','9',20h,OSh
DB '-','Q','E','U','T','O,'+',2Oh
aaaaaaaa v 4 N bl I u1 iD P m
m aI -4b
l
A L BUS D E DATOS D E L MC 8 0 1 8 8
I VICTOR ROJAS GARCIA / HECTOR CORTES LEON
T i t l e
S r z e p o c u m e n t Number
CONTROL D E U E M O R I A DINRMICA
FE
ñ I at-: November 27. 19971 Sheet Of
BIBLIOGRAFÍA
0 Microprocesosrs and interfacing. Programing and hardware Douglas V. Hall Segunda Edición Editorial McGraw-Hill E.U.A., 1992.
Lenguaje ensamblador para microcomputadoras IBM J. Terry Godfi-ey Traducción de la primera edición en inglés Editorial Prentice-Hall Hispanoamericana México, 199 1.
0 Desarrollo y Programación de Sistemas Digitales, Familia de microprocesadores Intel MCS5 1 SO3 1 - SO5 1 - 875 1
Victoriano Angel Martínez Sánchez Editorial Addison- Wesley Iberoamericana U.S.A, 1993.
Tarjeta de Experimentación Para un Microprocesador SO 1 88 Silverio E. León Julio, Agustín Suárez F., Enrique Hernández M. Editado por la UAM, unidad Iztapalapa, Dpto de Ing. Eléctrica Mexico, D. F.
Microprocessors Systems M. Sami, L. Thompson, L. Mezzalira (Eds.)
Digital position control by means of a dedicated microcomputer J. Billingsley and H. Singli
North - Holland Publishing Company O EUROMICRO, England, 1980.
26
MANUALES
Fast and LS TTL Quinta edición, segunda impresión Editado por @Motorola, Inc. U.S.A., 1992.
Application Note, Small DC Motor Control Jafar Modares, Eco Aplications Editado por @Intel Co. U.S.A., 1988.
Application Brief, DRAM RefresldControl with the 80 1 86/80 1 88 Steve Farrer, Applications Engineer Editado por @Intel Co. U.S.A., 1987.
Application Note, An Introduction to the Intel MCS-5 1 Single-Chip Microcomputer Fainily
John Wharton, Microcontroller Aplications Editado por @Intel Co. U.S.A., 1980.
0 80 188 High Integration 8-bit Microprocessor Editado por @Intel Co. U.S.A., 1989.
0 Character LCD Modules Interface Data, LCD Matrix Modules Editado por @AND Co. U.S.A., 1991.
27
PÁGINAS EN INTERNET
The 805 1 inicrocontroller, A Resourse and Tutorial for the 805 1 Developer Provided courtesy of Vault Information Services
Dirección: http ://www .vaultbbs. com/-csteiner/80 5 1 isr .litin
Example 805 1 Board Desisgti, A low-cost development system
http://www .ece.orst.edu/-pau1/805 1 -goodies/dev-board-testing.htin1 Dirección:
About the 805 1 microcoiitroller Dirección: littp://www.proaxis.com/-iguanalabs/805 1 pin.jpg
28