Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura Escuela de Ingeniería Electrónica Digital III Problema de Ingeniería Nº 2 Start up y aplicación para sistema con 80C86 Autor/es: Grupo Nº Nombre y Apellido Corrigió Nº de Legajo Calificación 2015 Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura Escuela de Ingeniería Electrónica 1. Índice 1. ÍNDICE .................................................................................................................... 2 2. INTRODUCCIÓN .................................................................................................... 2 3. OBJETIVOS............................................................................................................ 2 4. PROBLEMA............................................................................................................ 4 5 REQUISITOS DEL INFORME ................................................................................ 6 6 SOLUCIÓN/ES PROPUESTA/S ............................................................................. 7 7 CONCLUSIONES ................................................................................................... 7 8 BIBLIOGRAFÍA ...................................................................................................... 7 9 ANEXO A: ESQUELETO MÓDULO STARTUP ..................................................... 7 10 ANEXO B: MAPA DE MEMORIA (USUARIO) ....................................................... 9 11 ANEXO C: CAPTURA DE NMI............................................................................. 10 2. Introducción El presente Problema de Ingeniería aborda las primeras etapas del diseño de software de un sistema de microcómputo sin sistema operativo, es decir, las rutinas básicas para el funcionamiento del sistema de hardware desarrollado. 3. Objetivos El objetivo principal de este problema es lograr que el alumno adquiera la capacidad de diseñar el software de un sistema de microcómputo sin sistema operativo y desarrollar destrezas en la programación de aplicaciones. El problema se plantea en base a un microprocesador Intel 80C86 con un mapa de memoria y Entrada / Salida dado, implementando el diseño del software necesario para el manejo de una interfase Página 2 de 9 Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura Escuela de Ingeniería Electrónica de display multiplexado de 4 dígitos que en conjunto con los cuatro pulsadores existentes, conformarán dos Timers Programables hasta 99 segundos. 4. Problema 1.1. Realizar un diagrama de flujo describiendo el proceso de generación del programa partiendo desde la escritura del programa fuente hasta la grabación final de la memoria de almacenamiento del mismo. Indicar TODAS las herramientas de software y hardware utilizadas en el proceso y explicar claramente su función. 1.2. Realizar un módulo STARTUP.ASM que cumpla las siguientes funciones: 1.2.1. Definir todas las secciones a utilizar y agruparlas convenientemente. 1.2.2. Tomar el control del sistema después del reset. 1.2.3. Inicializar el área reservada para variables con valores iniciales considerando que podrían existir módulos adicionales al STARTUP.ASM 1.2.4. Inicializar el área reservada para variables sin valores iniciales considerando que podrían existir módulos adicionales al STARTUP.ASM 1.2.5. Inicializar el área destinada a la Pila del sistema (Stack) asignando a la misma toda la memoria RAM sobrante luego de reservar e inicializar las variables. 1.2.6. Capturar el servicio de NMI ( Ver ANEXO C) 1.2.7. Habilitar la interrupción NMI escribiendo un 0FFh en la dirección dada por la etiqueta NMI_KEY en el espacio de entrada / salida. 1.2.8. Generar un salto a una rutina llamada _main ubicada en el módulo USUARIO.ASM. Nota: Para la realización del modulo STARTUP.ASM puede utilizar el esqueleto ubicado en el Anexo A al final de este trabajo practico. 4.3. Realizar un módulo USUARIO.ASM que implemente dos timers de cuenta descendente con las siguientes caracteristicas: BH o El valor actual de los timers podrá examinarse en el display utilizando la tecla “S4” para conmutar entre timer1 y timer2: o El timer en display podrá ser disparado o detenido utilizando la tecla “S3” para conmutar el estado. o El valor inicial del timer en display podrá ser ajustado mediante los pulsadores S1 (incrementar) y S2 (decrementar) cuando se encuentre en estado detenido. ( valor máximo programable = 99 segundos) o Un timer debe continuar su evolución aun cuando no se encuentre en el display. (conservar el valor programado si esta detenido y decrementarse correctamente si esta disparado) o Para la presentación en display deberá utilizar un servicio del sistema monitor a través de la SWI int 42h, el cual mostrará en display el contenido de los Registros BX y AX (codificados en 7 segmentos) de la siguiente manera. BL ( número de Timer) AH TIMERi THi AL TIMERi TLi Página 3 de 9 Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura Escuela de Ingeniería Electrónica i Nota: No debe realizar la rutina de multiplexado de display, ya que la misma esta resuelta en el sistema Monitor. o TECLADO: Para la detección del teclado deberá utilizar un servicio del sistema monitor a través de la SWI int 43h, el cual devuelve en AL el valor de la variable de scaneo de teclado. TECLA VALOR DEVUELTO EN AL o S4 08h S3 04h S2 02h S1 01h TEMPORIZACIONES: Para las temporizaciones deberán implementarse servicios que utilicen la interrupción NMI. (una vez habilitada, la NMI produce una interrupción cada 200us) 4.4 Ensamblar los módulos STARTUP.ASM y USUARIO.ASM de manera de formar un único archivo ejecutable capaz de funcionar sobre el sistema. El programa debe ser ensamblado SIN ERRORES. 4.5 Indicar todas las secciones utilizadas en ambos módulos e indicar su función específica (BSS, DATA, TEXT, etc). Ayuda: Definir en el segmento de código una tabla de bytes que contenga los codigos 7 segmentos de los dígitos hexadecimales. TABLA db db db db 0EEh, 028h, 0CBh, 06Bh, 02Dh, 067h, 0E7h, 026h, 0EFh, 02Fh, 0AFh, 0E5h, 0C6h, 0E9h, 0C7h, 087h ; ; ; ; 0,1,2,3 4,5,6,7 8,9,A,B C,D,E,F El punto decimal se encuentra vinculado al Bit4 de cada display Página 4 de 9 Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura Escuela de Ingeniería Electrónica Circuito del Periferico 4 3 2 1 D D 8 8 8 8 8 x3 30 R DL ? L E D Ro jo # CS C Dis_ 1 DISPL AY K Co mu n sa Disp lay a a sb b sc b c f g sd d se c e e d sf f dp sg g sd p dp c om +5V 7 6 4 2 1 9 10 5 Dis2 DISPL AY K Co mu n 7 sa Disp lay a 6 a sb b 4 sc b c f g 2 sd d 1 se c e e 9 d sf f 10 dp sg g 5 sd p dp c om sf sa sd p sd se sc sb sg Dis_ 3 DISPL AY K Co mu n 7 sa Disp lay a 6 a sb b 4 sc b c f g 2 sd d 1 se c e e 9 d sf f 10 dp sg g 5 sd p dp c om 16 15 14 13 12 11 10 9 1 2 3 4 5 6 7 8 D2 D1 D4 D6 D7 D5 D3 D0 Dis_ 4 DISPL AY K Co mu n 7 sa Disp lay a 6 a sb b 4 sc b c f g 2 sd d 1 se c e e 9 d sf f 10 dp sg g 5 sd p dp c om RP? R? 1 0K #W R Q1 BC3 37 Q2 BC3 37 Q3 BC3 37 Q4 BC3 37 # RD C R? 1 0K R? 1 0K R? 1 0K E4 E3 E2 E1 L A0 L A1 L A2 R? Led 4 70 R D4 1 N41 48 D3 1 N41 48 D2 1 N41 48 D1 1 N41 48 s? SW -PB s? SW -PB s? SW -PB s? SW -PB B B Co mu n Pulsa do r R? 3 K3 Interface a Sistem a uP A A Inter fac e de E /S para Intel 8086 Tamaño: A4 Fecha: Archivo: 1 2 3 Ver. 2 -May-2 00 5 1 .0 Hora: Rev. A 1 5:3 4:3 9 Revisó: Ing. GustavoMinnucci Pag. 1 / 1 Digital III Fac. de Ingeni ería Electrónica Universidad Nacional de Rosario Rosario - Santa Fe - Argentina D:\Work\EC A\Prot el 9 9 \CPU Dig it al 3 \CPU Digit al 3.Dd b - IO_8 08 6 4 5. Requisitos del Informe Se incorporarán los listados de los programas FUNCIONANDO. Los mismos deberán haber sido ensamblados, linkeados y simulados SIN ERRORES. Todos los programas fuentes deberán estar comentados de manera clara y sintética indicando las funcionalidades de las distintas rutinas y subrutinas. Se adjuntarán los archivos de listado resultantes de la compilación. (archivos Listing .lst) Todos los cálculos, razonamientos, y justificaciones deben quedar registrados en este informe. No incluir introducciones teóricas Página 5 de 9 Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura Escuela de Ingeniería Electrónica 6. Solución/es propuesta/s 7. Conclusiones 8. Bibliografía Se sugiere la utilización de la siguiente bibliografía: - Hojas de datos del: 80c86, Am29F040, K6T1008, 74HC374, y de todo otro dispositivo lógico usado. - Los microprocesadores Intel, Barry Brey, tercera Ed. - 9. Anexo A: Esqueleto Módulo STARTUP Esqueleto Módulo STARTUP: model small extrn _main:near CGROUP DGROUP FINRAM LOADER_RAM DS_SYS GROUP _TEXT, _TEXTEND GROUP _DATA, _DATAEND, _BSS, _BSSEND, _STACK equ equ equ 1040h 1000h FINRAM-LOADER_RAM ; Apunta al segmento de datos del sistema. _TEXT _TEXT segment public 'CODE' ends ; Segmento de código. _TEXTEND end_of_code _TEXTEND segment public 'CODE' label byte ends ; Segmento marcador de fin de código. _DATA _DATA segment public 'DATA' ends ; Segmento de datos inicializados. _DATAEND end_of_data _DATAEND segment byte public 'DATA' label byte ends ; Segmento marcador fin de datos inicializados. _BSS _BSS segment byte public 'BSS' ends ; Segmento de datos sin inicialización. _BSSEND end_of_bss _BSSEND segment public 'BSS' label byte ends ; Segmento marcador fin de dato sin inicializar. Página 6 de 9 Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura Escuela de Ingeniería Electrónica _STACK _STACK segment public 'PILA' ends ; segmento marcador de comienzo de PILA. assume cs:CGROUP, ds:DGROUP _TEXT segment public 'CODE' STARTUP proc near NMI_KEY equ 04000h ; Inicio de volcado de DATA a RAM. mov cx, offset end_of_data mov ax, cs mov bx, offset CGROUP:end_of_code shr bx, 4 add ax, bx mov ds, ax mov si, 0 mov di, 0 mov ax, DS_SYS mov es, ax cld rep movsb ;ds:si -> es:di (cx) ; Inicio de volcado de BSS a RAM e inicialización de variables. ; Introduzca código de usuario ; Inicialización de la PILA. ; Introduzca código de usuario ; Inicialización de DS. mov ax, DS_SYS mov ds, ax ; Captura de NMI ; Introduzca código de usuario ; Habilitación NMI. ; Introduzca código de usuario ; Salto a rutina _main en Modulo USUARIO. ; Introduzca código de usuario. STARTUP endp _TEXT ends end Página 7 de 9 Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura Escuela de Ingeniería Electrónica 10. Anexo B: Mapa de memoria (Usuario) Mapa de Memoria del sistema: MAPA de MEMORIA (MODO USUARIO) Direcciones Tamaño Dispositivo 0xFFFFF FLASH … Memoria FLASH … 512 Kb (Ultimos 256 Kb de Flash1 y Flash2) 256 Kb Memoria FLASH Paginada 128 Kb Área Libre … … 0xA0000 0x9FFFF FLASH … 0x60000 0x5FFFF … 0x40000 0x3FFFF … 8 Kb RAM Área Reserva para el programa Monitor (NO USAR) 0x3E000 0x3DFFF RAM … 120 Kb Memoria RAM 0x00000 Áreas Particulares y Reservadas: El sistema Monitor ocupa 8 K de RAM (direcciones 0x3FFFF – 0x3E000) las cuales NO deberán ser alteradas. El área destinada al Stack deberá estar ubicada convenientemente de acuerdo al criterio de diseño adoptado. Justificar la elección del área asignada. El área destinada a la Tabla de Vectores de Interrupción (IVT - Interrupt Vector Table) corresponde al 1er Kb del mapa (direcciones 0x003FF – 0x00000). Página 8 de 9 Universidad Nacional de Rosario Facultad de Ciencias Exactas, Ingeniería y Agrimensura Escuela de Ingeniería Electrónica 11. Anexo C: Captura de NMI. La “captura” de NMI consiste en leer y guardar el vector (inicializado por el monitor) que se encuentra en la posición “2” de la IVT y posteriormente reemplazarlo por otro vector que apunte a los servicios que se deberá implementar. Una vez finalizados los servicios “del usuario”, es necesario que se pase el control (utilizando el vector guardado) al resto de los servicios de NMI (servicios del monitor: teclado, display, etc.) Nota 1: Tener en cuenta que el tiempo entre NMI es solo de 200 uS y que los servicios de teclado y display consumirán parte de ese tiempo. Además, el programa principal también necesita una parte de ese tiempo para correr. Por todas estas consideraciones, los servicios que vayan a implementarse deberán producir la minima carga posible (pocas instrucciones) sobre la CPU. Nota 2: Tener en cuenta que el servicio debe guardar los registros que vaya a utilizar y recuperarlos antes de pasar el control a los servicios del monitor. Además se debe dejar la pila en el mismo estado en que se encontraba al aceptar la NMI. Página 9 de 9