UNIVERSIDAD A U T ~ N O M AMETROPOLITANA IZTAPALAPA PROYECTO DE INVESTIGACI~N: Sistema'maestro esclavo 80188 - 8031 para aplicaciones generales de control. /y Rojas García Víctor G. Cortés León Héctor Sinodal: Ing. Gonzalo Duch,.i Saiichez mayo 1998. cc) ÍNDICE Introducción, 1 La tarjeta de experimentación para microprocesador 80 188,4 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 188, 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 Estados, 19 Interrupción (bit O), 19 Operación de DMA (bit 1), 20 Error (bit 5),20 Evento (bits 4 a 2), 20 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 Apendice A Listados de Programas, 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 l a 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 inaestroesclavo. 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 disp1ay. 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 188), 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-8031 . 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 MICROPROCESADOR 80188. EXPERIMENTACION PARA 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 188 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 80188 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 80188 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: 0 Una memoria ROM de 8 Kbytes (2764). Una memoria RAM estática de 8 Kbytes (3234). 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. Se presenta a continuación un diagrama a bloques del sistema iníniino con microprocesador 80 188. ROM 27C64 RAM 62C64 74LS373 80188 16Mhz - Qii UART 8250 ECLADO 8279 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 80188 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,D X 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 l a 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 80188 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~NDEL 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~NDE LOS ELEMENTOS PRINCIPALES DE LA INTERFACE Esta parte describe brevemente las características mas importantes de el microprocesador 80 188 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 80188 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~NENTRE EL SISTEMA MÍNIMO Y EL MICROCONTROLADOR. El sistema mínimo basado en el microprocesador 80 188 se comunica con el microcontrolador atraves del sistema de memoria y de los registros de 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 188, 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: 7 6 5 4 3 2 1 0 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 movimiento de el motor a efectuarse será a la derecha. 0 0 1 que el 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 80188 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: 7 6 5 4 3 2 1 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 80188 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 80188 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 lizar la misma secuencia de valores para los SW’s pero en dirección contraria. 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 &unrango 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 APENDICE A LISTADOS DE PROGRAMAS I11 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 ; REVISA HASTA QUE EL DISPLAY ... ; ESTE DESOCUPADO. ............................................................................. LIMPIAR MACRO MOV AL,OlH VERIFICAR OUT DX,AL ENDM ; LIMPIA TODO EL DISPLAY Y... ; PONE CURSOR AL INICIO. ............................................................................. MENSAJE MACRO LOCAL MENS MENS: MOVAX,CX XLAT MOV SI,BX VERIFICAR INC DX OUT DX,AL MOV BX,SI LOOP MENS ENDM ; DESPLIEGA EL MENSAJE ; DE LA TABLA APUNTADA ; POR BX ... ............................................................................. LIMPIA-RENGLON MACRO LOCAL CLS MOV AL,OCSH VERIFICAR OUT DX,AL ENDM ; COLOCA EL CURSON EN LA POS. 4 ; DEL RENGLON 2 DEL DISP. - ............................................................................. CHECKSUM MACRO LIMPIAR MOV AL,83H VERIFICAR OUT DX,AL ; LUGAR 3 DEL DISPLAY ; DESPLEGAR EL MENSAJE MOV BX,OFFSET VER-ROM ; CHECK-ROM EN DISPLAY.. . MOV CX,OOO9H MENSAJE ENDM ............................................................................. DIRECROM MACRO LOCAL SEGNUM,TRI,ESPERA MOV AX,OFEOOH MOV DS,AX MOV AL,46H VERIFICAR INC DX OUT DX,AL MOV AX,DI AND AX,OFOOOH MOV DX,CX MOV CL,O4H SHR Ax,CL MOV CX,DX CMP AH,OlH JNE SEGNüM MOV AL,46H VERIFICAR INC DX OUT DX,AL ; ESCRIBE F ; PROTEGE VALOR DE CX ; REALIZA UN CORRIMIENTO A LA DERECHA ; RECUPERA VALOR DE CX ; VERIFICA EL SEGUNDO NUMERO ; DE LA DIRECCION ; ESCRIBE EL SEGUNDO NUMERO (F) JMP TRI SEGIWM: MOV AL,45H VERIFICAR INC DX OUT DX,AL TRI: ; ESCRIBE EL SEGUNDO NUMERO (E) 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 ; ESCRIBE EL TERCER NUMERO ; PROTEGE EL VALOR DE CX SHR Ax,CL MOV CX,DX ; RECUPERA EL VALOR DE CX MOV BX,OFFSET NLTMERO XLAT VERIFICAR INC DX OUT DX,AL MOV AX,DI AND AX,OOOFH ; ESCRIBE EL CUARTO NUMERO ; BUSCA EL QUINTO NUMERO MOV BX,OFFSET NUMERO XLAT VERIFICAR INC DX OUT DX,AL MOV BX,CX MOV CX,0050H ESPERA: LOOP ESPERA MOV CX,BX ENDM ; ESCRIBE EL QUINTO NUMERO ;PROTEGEELVALORDECX ; RECUPERA EL VALOR DE CX ............................................................................. ERR-ROM MACRO LIMPIAR ; DESPLIEGA EL MENSAJE MOV BX,OFFSET ROM-MAL ; ERROR-ROM EN DISPLAY.. . MOV CX,0009H MENSAJE ENDM ............................................................................. ROMBIEN MACRO LOCAL REPITE,AQUI SUB cx,cx LIMPIAR MOV BX,OFFSET ROM-OK MOV CX,0008H MENSAJE ; ESCRIBE EL MENSAJE ; ROM-BIEN EN DISPLAY.. . ; GENERA MOV BL, 10D REPITE: MOV CX,60000D AQUI: LOOP AQUI DEC BL CMP BL,OOD JNZ REPITE ENDM ;UN - - - ; RETARDO... ............................................................................. CHEKRAM MACRO LIMPIAR MOV AL,83H VERIFICAR OUT DX,AL ; LUGAR 3 DEL DISPLAY MOV BX,OFFSET VER-RAM DESPLIEGA EL MENSAJE - ; CHECK-RAM EN DISPLAY.. MOV CX,0009H MENSAJE MOV AL,OC4H VERIFICAR OUT DX,AL 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 1H E DESP-1 MOV AX,'O' VERIFICAR INC DX OUT DX,AL JMP B3 DESP-1: MOV AX,'l' VERIFICAR INC DX OUT DX,AL B3: MOVAX,DI AND AX,OOFOOH MOV CL,OSH S H R AX.CL B2: ; ESCRIBE CUARTO NUMERO (O) ; ESCRIBE CUARTO NUMERO (1) MOV BX,OFFSET NUMERO XLAT VERIFICAR INC DX OUT DX,AL ; ESCRIBE TERCER NUMERO MOVAX,DI AND AX,OOOFOH MOV CL,O4H SHR AX,CL 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 LIMPIAR ; DESPLIEGA EL MENSAJE MOV BX,OFFSET RAM-MAL ; ERROR-RAM EN DISPLAY ... MOV CX,0009H MENSAJE - ENDM ............................................................................. RAM-OK MACRO LOCAL REP,AQ LIMPIAR ; DESPLIEGA EL MENSAJE MOV BX,OFFSET RAM-OKEY MOV CX,0008H ; RAM-BIEN EN DISPLAY ... MENSAJE MOV BL, 10D REP: MOV CX,60000D AQ: LOOPAQ DEC BL CMF' BL,OOD JNZ REP ; GENERA - ;UN - ; RETARDO... ENDM CODESG SEGMENT ASSUME CS:CODESG,SS:STACK ORG lFFOH MOV DX,OFFAOH MOV AX,OFE3DH OUT DX,AL DB OEAH D W OOOOOH D W OFEOOH ; PROGRAMACION DEL UMCS : CON TRES CICLOS DE ESPERA - ORG OOOOH MOV DX,OFFA2H MOV AX,OO 1FDH OUT DX,AL MOV DX,OFFA4H MOV AX,0003DH OUT DX,AL ; PROGRAMACION DEL LMCS ; CON TRES CICLOS DE ESPERA ; PROGRAMACION DE PACS MOV DX,OFFA6H MOV AX,81FDH OUT DX,AL ; PROGRAMACION DEL MMCS MOV DX,OFFA8H MOV AX,883DH OUT DX,AL ; INICIALIZACION DE MPCS MOV SP,2000H XOR AX,AX MOV SS.AX ; INICIALIZACION DE LA ; PILA ... - .......................................................................... ; INICIALIZACION DEL REFRESCO DE MEMORIA. XOR AX,AX MOV DX,OFFCAH MOV AX, I47FH ; REGISTRO DE CONTROL DEL DMA OUT DX,AX MOV DX,OFFCóH MOV AX,OOOOH MOV DX,AX MOV DX,OFFC4H MOV AX,0500H MOV AX,OOOOH OUT DX,AX ; PARTE ALTA DEL DMA DESTINO ; 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 ; SE ESTABLECE CADA TIEMPO DE INT. MOV AX3D OUT DX,AX ; TERMINA INICIALIZACION DE REFRESCO DE MEMORIA MOV DX,0080H . MOV CX,OAOOOH RTDO: LOOP RTDO MOV AL,38H OUT 80H.AL ; ESTABLECE MODO DE DISPLAY MOV CX,O5000H LOOP RTD 1 RTD 1 : OUT 80H,AL RTD2: MOV CX,02500H LOOP RTD2 OUT 80H.AL MOV AL,38H VERIFICAR OUT DX,AL MOV AL,OFH VERIFICAR OUT DX,AL LIMPIAR MOV AL,O6H VERIFICAR OUT DX.AL MOV AL,85H VERIFICAR OUT DX,AL ...................... ; PARA 2 LINEAS Y CARACTERES : DE 5x7 ; HABILITA DISPLAY Y CURSOR ; MODO DE DESPLAZAMIENTO DEL ; CURSOR : 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 DB OEAH ; ESCRIBE CHEKSUM EN DISP. D W 1OOOH DW OFEOOH ORG lOOOH LIMPIA-RENGLON DIRECROM MOV AL,ES:[DI] ADD CX,AX INC DI CMP DI, lFFEH JNE SALTO JMP SIGUE SALTO: DB OEAH D W 1OOOH DW OFEOOH SIGUE: 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 ERROR-ROM: ERR-ROM HLT ROMFINE: ROM-BIEN ; 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. : REGRESA A SUMAR MIENTRAS ; DI<=lFFFD... - ; SI EXISTE ERROR EN ROM ; SI NO EXISTE ERROR EN ROM CONTI: MOV AX,OOOOH MOV ES,AX S U B DI,DI SUB cx,cx S U B 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 ; ESCRIBE EN CADA LOCALIDAD 20H NOP : CODIGO DE LOS ESPACIOS EN BLANCO. NOP 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 CIW DI,2000H JF3 BRINCO2 JMPOKRAM ; SALTA A COMPARAR MIENTRAS SI<2000H BRINC02: DB OEAH DW 1900H DW OFEOOH ORG 1700H ERROR-RAM HLT OKRAM: RAM-OK : SI HUBO ALGUN ERROR _-__________--_ PROGRAMACION DEL 8250 (CONTROLADOR UART) -----------------MOV DX, 103H MOV AL,80H OUT DX.AL ; PONE DLAB EN I MOV DX,O lOOH MOV AX, 192 OUT DX,AX : ESCOGE EL BAUD GENERADOR EN 600 MOV DX, 103H MOV AL,87H OUT DX,AL IN AL,DX AND AL,7FH OUT DX,AL MOV DX, 104H MOV AL,OBH OUT DX,AL ; CONFIGURA PALABRA DE 8 BITS CON 2 BITS ; DE PARADA Y SIN PARIDAD. ; MODIFICA EL VALOR DE DLAB PARA PONERLO : EN O. ; APUNTA AL REGISTRO DE CONTROL DE MODEM ; PARA LEVANTAR LAS LINEAS RTS,DTR Y OUT2 DB O E M DW 035OH DW OFEOOH ORG 035OH CALL CHECKDRAM CALL LIW-PUERTO CALL INICIO CALL PROCESS CALL MENSA-FINAL DB OEAH DW OOOOH DW 800OH ; LIMPIAR PUERTO. ; INICILIZAR CAPTURA. ; REALIZAR CAPTURA DE CODIGO. ; REALIZA UN SALTO HACIA EL ; PROGRAMA EJECUTABLE BAJADO ; EN LA RAM. HLT __----------------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 ; DESPLIEGA EL MENSAJE MOV BX,OFFSET VER-DRAM ; CHECK-RAM EN DISPLAY.. . MOV CX,OOOAH MENSAJE MOV AL,OC4H VERIFICAR OUT DX,AL MOV AX,800OH MOV ESAX SUB DI,DI SUB cx,cx SUB AX,Ax CELDA: - LIMP1A-RENGLON CALL DELOY MOV AL,20H ; ESCRIBE EN CADA LOCALIDAD 20H MOV ES:[DI],AL ; CODIGO DE LOS ESPACIOS EN BLANCO. NOP NOP NOP NOP NOP NOP NOP NOP NOP ; LEE EN BL EL VALOR DE CADA LOCALIDAD MOV BL,ES: [DI] ; COMPARA SI:VALOR ESCRITO=VALORLEIDO CMP BL,AL ; NO, ENTONCES HAY ERROR EN RAM JNEDRAMMAL JMP OK2 OK2: INCDI CMP DI,4000H JB CELDA : SALTA A COMPARAR MIENTRAS SI<2000H JMP OKDRAM DRAMMAE: ERROR-RAM HLT OKDRAM: RAM-OK : SI HUBO ALGUN ERROR ; SI DRAM CORRECTA POP ES POP DX POP cx POP BX POP A x RET CHECKDRAM ENDP DESCARGA PROC NEAR PUSH CX PUSH BX PUSH DX PUSH DS MOV CX,8000H MOV DS,CX XOR CX,CX MOV SI,CX ; INICIALIZA EL DS Y SI PARA LA ; DESCARGA. (LOCALIDAD SOOOH) CICLO: CALL RECIVEBYTE CMP AL,255 JNE METE MOV BL,DS:[SI-11 CMP AL,BL JNEMETE MOV BL,DS:[SI-2] CMP AL,BL JE FIN-DESCAR ; R E C I E UN BYTE DE CODIGO ; OBJETO ; VERIFICA QUE EL VALOR RECIVIDO NO ; SEA FIN DE ARCHIVO ; SALTA A METER DATO. ; 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: POP DS POP DX POP BX POP cx RET DESCARGA ENDP _-______-_ LIMPIA EL PUERTO SERIAL PARA UNA CORRECTA RECEPCION -----------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 CHEQUEO: IN AL,DX ; TESTE0 PARA VERIFICAR LA ; POSIBILIDAD DE HABER "DESPERTADO" AND AL,OOOOOOO 1B CMP AL,OOOOOOO 1B JNE CHEQUEO ; SI APENAS HABIA SALIDO DE SU ; ESTADO DE RESET. SE LIMPIA EL ; PUERTO DEL 8250. MOV DX, 1OOH IN AL,DX FINAL: POP DX POP A x RET LIMPPUERTO ENDP _-___-___---INICIALIZA A C PTUR DE COD INICIO PROC NEAR PUSH AX PUSH BX PUSH CX LIMPIAR ; ESCRIBE EL MENSAJE MOV BX,OFFSET ESP-DESC ; 'ESPERANDO DESCARGA' MOV CX, 15D MENSAJE CALL RECIVE-BYTE - ; ESPERA HASTA RECIBIR UN BYTE POP cx POP BX POP AX RET 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 LIMPIAR ;ESCRIBE EL MENSAJE MOV BX,OFFSET DESCANDO ; 'DESCARGANDO....I MOV CX, 15D MENSAJE - ; PROCEDIMIENTO QUE REALIZA CALL DESCARGA ; LA DESCARGA D E I CODIGO ; EJECUTABLE EN LA RAM LIMPIAR ;ESCRIBE EL MENSAJE MOV BX,OFFSET FIN-DESC ; 'FIN DE DESCARGA' MOV CX, 15D MENSAJE - CALL RETARDO POP cx POP BX RET PROCESS ENDP -------------- RETARDO PARA PODER VISUALIZAR EL DISPLAY ------------------RETARDO PROC NEAR MOV BX,OOOEH CIERO: MOV CX,60000D FINAN : LOOP FINAN DEC BX CMP BX,OOOOH JNE CIERO RET RETARDO ENDP -------- RETARDO UTILIZADA0 EN LA REVISION DE MEMORIA DINAMICA ------------DELOY PROC NEAR PUSH CX CIER: MOV CX,60D FINA: LOOP FINA POP cx RET DELOY ENDP --------------- RECIBE UN BYTE A TRAVES DEL PUERTO SERIAL ----------------RECIVE-BYTE PROC NEAR MOV DX, 105H TESTEA : IN AL,DX AND AL,00000001B CMP AL,00000001B JNE TESTEA MOV DX, lOOH IN AL,DX RET RECIVE-BYTE ENDP ; TESTE0 PARA VERIFICAR LA ; POSIBILIDAD DE RECIvlR DATO ; 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 MOV CX, 13 ; MENSAJE: "EJECUTANDO EL MOV BX,OFFSET EJECUTA MENSAJE . ; PROGRAMA EN RAM'' ... -' CALL POSICIONA MOV CX, 16 MOV BX,OFFSET EJECUTA2 MENSAJE CALL RETARDO LIMPIAR RET MENSAFINAL ENDP .......................................................................... NUMERO: DB 48,49,50,51,52,53 ; TABLA PARA DESPLEGAR VALOR DB 54,55,56,57 ; 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' ROM-OK : DB ' NEIB-MOR' RAM-OKEY DB ' NEIB-MAR' VER-DRAM DB ' MARD-KCEHC' ; MENSAJES QUE SE DESPLIEGAN - : DURANTE LA VERIFICACION DE ; LA MEMORIA ROM ;Y DURANTE LA ; VERIFICACION DE LA MEMORIA ; RAM... ESP-DESC : DB ' .CSED ODNAREPSE' : MENSAJES QUE SE DESPLIEGAN DESCANDO DB ' ....ODNAGRACSED' ; DURANTE LA DESCARGA DEL PROFIN-DESC : DB ' AGRACSED ED NIF' ; GRAMA EJECUTABLE ... EJECUTA : DB ' LE ODNATUCEJE' EJECUTA2 : DB ' MARD NE AMARGOW ............................................................................ CODESG ENDS END ........................................................................... 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/97 ........................................................................... #include <stdlib. h> #include <stdio.h> #include <string. h> #include <conio.h> #include <graphics.h> #define MIN-X #define M A X X #define MIN-Y #define MAX-Y 10 70 5 20 #define MAXNOM 30 #define MAX-RET 19 /* Referentes a la ventana de presentacion /* resultados. */ */ /* Maxima longitud del nombre del archivo a /* transmitir. *I /* Maxima cantidad de tiempo en los retardos. */ void inicializacion(); void ventana 0; void apertura (); /* Funciones necesarias para realizar el pro- */ void puntos (); I* grama de descarga. */ void mensaje-inial (); void proceso (); void mensaje-final (); void envia (); FILE *archivo; /* Referentes al nombre del archivo a abrir */ char nombre[MAX-NOM]; /* y su apuntador de archivo asociado. */ main() { clrscr(); inicializacion(); textmode(2); textmode(C80); ventana (); apertura(); I* realiza la apertura de cierto archivo ejecuta*! ble para su posterior transmision. mensaje-inial() ; /* realiza la transmision del archivo serialmente proceso(); byte por byte hacia la tarjeta. *I mensaje-final(); envia(); textmode(2); /* restablece el modo texto original. , */ return( 1); void inicializacion(void) ......................................................................... Descripcion: Inicializacion del puerto serie de la P.C ........................................................................ 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 a s 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 asm int 14h /* INIC. DEL PUERTO SERIAL */ I* A 600 BAUDS. *I asm sor as,ax asm mov ds,03fSh asm in al,ds asm pop d s asm pop c s asm pop b s asm pop a s I void ventana() ......................................................................... Descripcion: Establece la ventana donde se realizaran las operaciones 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++) { I a for (mg=MIN-X; mg <= MAX-X; mg++) cprintf (" "); cprintf ("\n"); 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 gotohy (21,3); scanf ("%sol, nombre); \not); /* verifica que la extension del archivo sea .ese *I 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 gotoxy (18,6); delline(); insline(); cprintf ("%s",nombre); getch(): clrscr(); textinode(2); exit( I); 1: %SI'); , void puntos(void) ...................................................................... Descripcion: Utilizada para la presentacion de resultados en las comparaciones. ..................................................................... { int indice = O; for (indice = O; indice<= 45; indice++) { cprintf ("."); delay (MAX-RET);1 void mensaje-final(void) ...................................................................... Descripcion: Despliega mensaje sobre el exito en la descarga del archivo ejecutable. ..................................................................... { puntos(); gotoxy (18,lO); cprintf (" Descarga Finalizada\n"); gotoxy (1,111; 1 void mensaje-inial(void) ...................................................................... Descripcion: Despliega mensaje sobre el proceso de descarga del archivo ejecutable. ..................................................................... goto'q (17,6); cprintf ("Descargando archivo %s",nombre); void proceso (void) ...................................................................... Descripcion: Realiza l a transferencia del archivo hacia el sistema minimo byte por byte. ..................................................................... { 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 asrn mov dx,03f8h asm out dx,al delay (MAX-RET); /* MANDA EL PRIMER CARACTER CO- */ /* MO AVISO DE QUE EL PROCESO */ /* DE DESCARGA VA A COMENZAR. */ while (caracter != EOF) { asrn mov bx,O asm mov ax,caracter asm mov dx,03fgh asrn out dx,al delay (MAX-RET); caracter = getc(archiv0); delay (MAX-RET) ; /* ESTE CICLO MANDA A PUERTO */ /* SERIAL EL ARCHIVO HASTA */ /*LLEGAR AL ULTIMO BYTE */ 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 d s 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 asm out ds,al 1 while (caracter!='q'); asm pop dx asm pop cx asm pop bs asm pop ax /* MANDAR A PUERTO SERIAL EL VALOR */ /* DEL CAñACTER TECLEADO... */ ........................................................................... ;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 ORG OOH A M P INICIO ; VECTOR DE INTERRUPCION DEL RESET ORG 03H AJMP COMANDO ; VECTOR DE INTERRUPCION EXTERNA O ; codigo principal ORG 2BH INICIO: SETB EX0 SETB EA MOV SP,#56H ; HABILITA INTERRUPCION EXT. O ; HABILITA LAS INTERRUPCIONES ; INICIALIZA EL STACK MOV 53H,#00H MOV 54H,#00H MOV 55H,#00H 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 ; INICIALIZA LOS REGISTROS ; CONTADOR (54H)Y REG-AUX(55H). 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 ; ENMASCARA EL COMANDO. CJNE R2,#OFH,COMANDOl CALL OBTEN-RETI 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 JMP AVANZA AVANZA: CLR P1.0 CLR P1.1 SETB P1.2 SETB P1.3 MOVR5,#35H . JMP ETIQUETA ETIQUETA: MOV R7,#35H DJNZ R7,$ DJNZ R5,ETIQUETA SETB P1.0 CLR P1.l CLR P1.2 SETB P1.3 MOV R5,#35H JMP ETIQUETA 1 ETIQUETA 1: MOV R7,#35H DJNZ R7,$ DJNZ R5,ETIQUETAl SETB P1.0 SETB P1.l CLR P1.2 CLR P1.3 MOV R5,#35H JMP ETIQUETA2 ETIQUETA2: MOV R7,#35H DJNZ R7,$ DJNZ RS,ETIQUETA2 CLR P1.0 SETE3 P1.l SETB P1.2 CLR P1.3 MOV R5,#35H JMP ETIQUETA3 ETIQUETA3 : MOV R7,#35H DJNZ R7,$ DJNZ RS,ETIQUETA3 RET ........................................................................... : RUTINA DEL COMANDO 2. MUEVE MOTOR EN CONTRA DE MANECILLAS DEL RELOJ ATRAS: JMP RETROCEDE RETROCEDE: CLR P1.O CLR P1.l SETB P1.2 SETB P1.3 MOV R5,#35H JMP ETIQUETA4 ETIQUETA4: MOV R7,#35H DJNZ R7,$ DJNZ RS,ETIQUETA4 CLR P1.O SETB P1.l SETB P1.2 CLR P1.3 MOV R5,#35H JMP ETIQUETA5 ETIQUETA5 : MOV R7,#35H DJNZ R7,$ DJNZ R5,ETIQUETAS SETB P1.O SETB P1.l CLR P1.2 CLR P1.3 MOV R.5,#3.5H JMP ETIQUETA6 ETIQUETAG: MOV R7,#35H DJNZ R7,$ DJNZ R5,ETIQUETAó SETB P1 .O CLR P1.l CLR P1.2 SETB P1.3 MOV R5,#35H JMP ETIQUETA7 ETIQUETA7: MOV R7,#35H DJNZ R7,$ DJNZ RS,ETIQUETA7 RET ........................................................................... ; RUTINA DEL COMANDO 4. QUE MOVERA CIERTO NUMERO DE PASOS A LA DERECHA AL ; MOTOR PASOS-ADELANTE JMP AVANZAPASS AVANZA-PAS S : CLR P1.0 CLRP1.l SETB P1.2 SETB P1.3 MOV R5,#50H JMP ETIQUETAS ETIQUETAS: MOV R7,#50H DJNZ R7,$ DJNZ R5,ETIQUETAS DEC A CJNE A,#OOH,PASOD2 JMP SAL-PAS-AD PASOD2: SETB Pl.0 CLRP1.l CLR P1.2 SETB P1.3 MOV R5,#50H JMP ETIQUETA9 ETIQUETA9 : MOV R7,#50H DJNZ R7,$ DJNZ RS,ETIQUETA9 DEC A CJNE A,#OOH,PASOD3 JMF’ SAL-PAS-AD PASOD3 SETB P1.0 SETB P1.l CLR P1.2 CLR P1.3 MOV R5,#50H JMP ETIQUETA 1O ETIQUETA10: MOV R7,#50H DJNZ R7,$ DJNZ R5,ETIQUETAlO DEC A CJNE A,#OOH,PASOD4 JMP SALPAS-AD PASOD4 CLR P1.0 SETB P1.l SETB P1.2 CLR P1.3 MOV R5,#50H JMP ETIQUETA 1 1 ETIQUETA 11: MOV R7,#50H DJNZ R7,$ DJNZ R5,ETIQUETAll DEC A CJNE A,#OOH,AVANZAPASS SAL-PAS-AD RET ............................................................................ ; RUTINA DEL COMANDO 4. QUE MOVERA CIERTO NUMERO DE PASOS A LA IZQUIERDA ; ALMOTOR PASOS-ATRAS: JMP RETROCEDE-PASS RETROCEDEPASS : CLR P1.0 CLR P I . l SETB P1.2 SETB P1.3 MOV R5,#50H JMP ETIQUETA 12 ETIQUETA 12: MOV R7,#50H DJNZ R7,$ DJNZ RS,ETIQUETAl2 DEC A CJNE A,#OOH,PASOT2 JMP SALPAS-AT PASOT2 CLR P1.0 SETB P1.l SETB P1.2 CLR P1.3 MOV R5,#50H JMP ETIQUETA 13 ETIQUETA 13: MOV R7,#50H DJNZ R7,$ DJNZ RS,ETIQUETA13 DEC A CJNE A,#OOH,PASOT3 JMP SALPAS-AT PASOT3 SETB P1.0 SETB P1.l CLR P1.2 CLR P1.3 MOV R5,#50H JMP ETIQUETA 14 ETIQUETA 14: MOV R7,#50H DJNZ R7,$ DJNZ RS,ETIQUETAl4 DEC A CJNE A,#OOH,PASOT4 JMP SALPAS-AT PASOT4 SETB P1.0 CLR P1.l CLR P1.2 SETB P1.3 MOV R5,#50H JMP ETIQUETA 15 ETIQUETA 15: MOV R7,#50H DJNZ R7,$ DJNZ R5,ETIQUETAlS DEC A CJNE A,#OOH,RETROCEDEPASS SALPAS-AT RET ........................................................................... ; RUTINA QUE OBTIENE EL NUMERO DE PASOS QUE SE MOVERA EL MOTOR OBTEN-NüM: ; RESPALDO DE R2 MOV 52H,R2 INC 54H ; CONTADOR DE TIPO DE NLJM. MOV R2,54H CJNE R2,#OlH,SEG-NüM MOV 55H,A MOV R2,52H RET 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 ___-__--__-_-______ INICIA CODIGO PNNCIPAL ORG OOOOH ------------------ PUSH E S PUSH DS MOV AX,8000H MOV DS,AX MOV AL,3FH OUT O 1H.AL MOV AL,ODOH OUT OIH,AL MOV AL,90H OUT OlH,AL ; PROGAMA RELOJ PARA EL 8279 ; PARA LIMPIAR RENGLONES DE DISPLAY RAM ; PROGRAMA Read FIFO/Sensor RAM COMIENZO: CALL MENUPRINCIPAL : PROCEDIMIENTOS UTILIZADOS: ; LLAMA AL MENU PRINCIPAL MENU-PRINCIPAL PROC NEAR ; este procedimiento desplliega el men&principal ; de inicio. - PUSH AX PUSH BX PUSH CX PUSH DX PUSH DS INIMENS 1: ; DESPLIEGUE DEL MENU INICIAL: CALL LIMPIAR ; "MOVER MOTOR MOV CX, 12 MOV BX,OFFSET MENU1-1 ; 1.DER 2.IZQ"... CALL MENSAJE - 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 ; OBTIENE RESPUESTA DEL TECLADO. ; SACA DATO OBTENIDO AL DISPLAY. JE MENU3 JMP INIMENS1 MENU2 : MOV AL,81H J M P SALMENUl MENU3: MOV AL,82H SALMENUl: CALL LIW-PUERTO CALL COMANDO-AL CALL MENU-2 POP DS POP DX POP cx POP BX POP Ax RET MEW-PRINCIPAL ENDP ; LIMPIAR PUERTO. ; MANDAR DATO HACIA EL MICROC. ; LLAMAR AL MENU 2 PUSH BX PUSH CX PUSH DX PUSH DS INIMENU2: ;DESPLIEGA EN DISPLAY EL CALL LIMPIAR MOV CX, 15 ; MENU: ; 1.PASOS 2.CONT. MOV BX,OFFSET MENU2-1 ; 3.SALIR " ... CALL MENSAJE 'I CALL RENGLON2 MOV CX,8 MOV BX,OFFSET MENU2-2 CALL MENSAJE CICLO2: CALL TECLA CALL SACA-DISPLAY CMP AL,49D JB CICLO2 ; VERIFICA QUE EL COMANDO ; ESTE ENTRE 1 Y 2. CMP AL3 1D JA CICLO2 CMP AL,49 JE PASOS CMP AL,50 JE CONT CMP AL,51 JE SALIDA JMP INIMENUZ SALIDA: DB OEAH DW 00150H D W 08000H ; SI SE ESCOGIO OPCION 3 SE ; SALTA AL MENU INICIAL. PASOS: ; SI SE ESCOGIO OPCION 1 SE MOV AL,84H ; ENVIA COMANDO DE RECONOCI-CALL LIW-PUERTO ; MIENTO (MOVIMIENTO A PASOS) CALL COMANDO-AL ; Y SE LLAMA AL SIGUIENTE MENU. CALL MENU-3 JMP sALMENu2 - ; SI SE ESCOGIO OPCION 2 SE CONT: ; ENVIA COMANDO DE RECONOCI-MOV AL,83H ; MIENTO (MOVIMIENTO CONTINUO) CALL LIMPPUERTO ; Y SE LLAMA AL SIGUIENTE MENU. CALL COMANDO-AL CALL MEW4 sALMENu2: POP DS POP DX POP cx POP BX RET MENU-2 ENDP PUSH AX PUSH BX PUSH CX PUSH DX PUSH DS ; DESPLEGAR EN DISPLAY EL MENCALL LIMPIAR ; SAJE: MOV CX, 15 MOV BX,OFFSET MENU3-1 ; CUANTOS PASOS ... CALL MENSAE I' 'I CALL RENGLON2 MOV CX, 1 MOV BX,OFFSET MENu3-2 CALL MENSAJE CICLO3 : CALL OBTEN-NüM SUB AH,AH MOV AH& AND AL,OFH OR AL,OSOH CALL LIMPPUERTO CALL COMANDO-AL MOV &,AH AND AX,OOOFOH SHR AX,OlH ; OBTENER EL W R O DE PASOS ; QUE VA A REALIZAR EL MOTOR ; Y ENVIAR DICHO NUMERO HACIA ; EL MICROCONTROLADOR... - S H R AX,OIH SHR AX,OlH S H R Ax.0lH OR AL,080H CALL LIMPPUERTO CALL COMANDO-AL DB O E A H 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: CALL LIMPIAR ; DESPLIEGA EN DISPLAY EL ; MENSAE " SALIR Y ES-MOV CX, 12 MOV BX,OFFSET MENU4-2 ; PERA A QUE EL USUARIO PRE; SIONE UNA S, MOMENTO EN EL CALL MENSAJE ; CUAL SE MANDA A PARAR AL MO; TOR ... CICLO4: CALL TECLA CALL SACA-DISPLAY 'I CMP AL,'s' JE SALIR CMP AL,'S' .JE SALIR JMP INIMENUS SALIR: MOV AL,SFH SALMEIWS: CALL LIMP-PUERTO CALL COMANDO-AL DB OEAH DW 00 150H DW 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 OUT DX,AL ; MANDA A PUERTO 181 EL VALOR CONTENIDO ; EN EL REGISTRO AL. AND AL,OFH OUT DX,AL POP DS POP DX POP cx RET COMANDO-AL ENDP ............................................................................ LIMPPUERTO PROC NEAR ; este procedimiento limpia el puerto serial. PUSH AX PUSH DX PUSH DS MOV DX, 105H IN L , D X ; TESTE0 PARA VERIFICAR LA AND &,O 1lOOOOOB CMP A L , O 11OOOOOB JE FINAL ; POSIBILIDAD DE HABER "DESPERTADO" CHEQUEO: IN AL,DX AND AL,OOOOOOO 1B ; SI APENAS HABIA SALIDO DE SU CMP AL,OOOOOOO 1B ; ESTADO DE RESET. SE LIMPIA EL JNECHEQUEO ; PUERTO DEL 8250. MOV DX, lOOH IN AL.DX FINAL: POP DS POP DX POP Ax RET 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 CALL VERIFICAR OUT DX,AL ; COLOCA EL CURSON EN LA POS. 4 : DEL RENGLON 2 DEL DISP. POP DS POP DX POP Ax RET LIMPIA-RENGLON ENDP PUSH AX PUSH DX 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 CALL VERIFICAR OUT DX,AL ; COLOCAR EL CURSOR AL INICIO ; 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 XLAT CALL VERIFICAR INC DX OUT DX,AL LOOP MENS ; DESPLIEGA EL MENSAJE ; DE LA TABLA APUNTADA ; POR BX 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 SACA-DISPLAY ENDP PUSH BX PUSH CX - PUSH DX PUSH SI INI-OBTEN-NUM: XOR AX,AX MOV SI,AX BUSCANUM: CALL TECLA CMP AL,'E' JE RETURNVAL NüMVAL: CMPAL,39H JA BUSCANUM JMP SACANüMS RETURNVAL: CMP S1,OOOOH JE BUSCANUM JMP OBTENVAL ; SI LA TECLA OPRIMIDA ES ENTER ; SE MANDA A VALIDAR ESTA TECLA ... ; SI LA TECLA OPRIMIDA NO ES UN ; NUMERO (AL>39), SE REGRESA A ; OBTENER NUEVO VALOR.. . - ; SI SI (REGISTRO) = O, NO HAN ; ENTRADO NUMEROS, ENTONCES ; EL RETURN AUN NO ES VALIDO... SACANLJMS: ; SE MANDA A DISPLAY EL NUMERO CALL SACA-DISPLAY ; QUE SE TECLEO ... SUB AL,30H PUSH AX INC SI CMP SI,0003H JE OBTENVAL JB BUSCANUM ; SE OBTIENE EL VALOR DECIMAL DE ; LA TECLA OPRIMIDA ( S I E M P F DIGITO) ; Y SE GUARDA EN PILA ; SI SI (REGISTRO) = 3. NO SE ; ESPERAN MAS ENTRADAS; ; SI S K 3 , SE ESPERA RETURN... :AHORASE OBTIENE EL VALOR DECIMAL, DEL NUMERO ENTRADO DESDE EL TECLADO OBTENVAL: XOR BX,BX UNIDAD: POPAX ADD BX,AX DEC SI CMP S1,OOOOH JA DECENA JMP TERM DECENA: POPAX MOV CX, 10D MUL cx ADD BX,AX : SE SACA UNIDAD ; SUMAR A BX UNIDADES ; SI SI >= 2, EXISTEN DECENAS ... ; SE SACA DECENA (EN AX) ; AX <- AX*10 ; SUMAR A BX DECENAS DEC SI CMP S1,OOOOH JA CENTENA JMP TERM CENTENA: POPAX MOV CX, lOOD MUL cx ADD BX,AX DEC SI TERM: MOVAX,BX CMP AX,lD JB OBTEN CMP AX,200D JA OBTEN JMP SAL-OBTEN-NUM ; SI SI =< 1, EXISTEN CENTENAS ... ; SE SACA CENTENA ; AX <- AX*100 ; S U M A R A BX CENTENAS ; MOVER A AX EL RESULTADO OBTEN: CALL RENGLON2 JMP INI-OBTEN-NUM SALOBTEN-NUM: POP SI POP DX POP cx POP BX RET OBTEN-NUM ENDP PUSH BX PUSH DX PUSH DS MOV AX,08000H MOV DS,AX WELVE: XOR AX,AX MOV AL,SOH OUT OlH,AL IN AL,OIH AND AL,07H JZ VUELVE ; PREPARA PARA RECIBIR SEYAL ; DE UNA TECLA : VERIFICA SI SE HA OPRIMIDO TECLA ; WELVE HASTA QUE SE OPRIME TECLA XOR AX,= OBTIENE DE LA TABLA COD-TECLA MOV BX, OFFSET COD-TECLA ; EL CODIGO DE LA TECLA OPRIMIDA.. IN AL,OOH ~ - XLAT POP DS POP DX POP BX RET TECLA ENDP ............................................................................ ; mensajes utilizados para el despliegue de men&. MENU1-1 MENü1-2 : DB ' :ROTOM REVOM' : DB ' QZI.2 RED.1' MENü2-1 MENü2-2 : DB ' .TNOC.2 SOSAP. 1' MENü3-1 MENü3-2 : DB ' :?SOSAP SOTNAUC' : DB' ' MENü4-1 MENU4-2 : DB ' ?)s/S( RILAS' BLANCO :DB' : DB ' RiLAS.3' : DB ' RARAP. 1' 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 '-','Q','E','U','T','O,'+',2Oh 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 ;( 4 c H 2 K a PO O n \/ I I 4NtOU mmmm 4 N bl Iu1 iD Pm aaaaaaaa v m aI -4b I 1 A L BUS D E D A T O S D E L MC 8 0 1 8 8 WR RD I 1 I I L-pp-1 I VICTOR ROJAS GARCIA / HECTOR CORTES LEON T i t l e CONTROL D E U E M O R I A DINRMICA S r z e pocument A Number FE l ....... ..... .. ROJQ-BLñNCO I j 1w12 j 11.5U :STEP: I. D R I V E R P ñ R ñ EL M O T O R DE P A S O S ñ at-: November 27. 19971S h e e t Of I BIBLIOGRAFÍA LIBROS Y PUBLICACIONES 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, 1991. 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 188 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 186/80 188 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 1isr .litin Example 805 1 Board Desisgti, A low-cost development system Dirección: http://www .ece.orst.edu/-pau1/805 1-goodies/dev-board-testing.htin1 About the 805 1 microcoiitroller Dirección: littp://www.proaxis.com/-iguanalabs/8051pin.jpg 28