EXAMEN PARCIAL 1 Roly Sandro Gutierrez Benito 5 de enero de 2024 Docente: Alex Jhon Quispe Mescco 1 1. Pregunta Implementar una calculadora, en base al microprocesador intel 8086, que realice las operaciones de suma y resta utilizando un PPI en la direccion base de 0x90; utilice los puertos A, B y C como entradas y salidas según le convenga. La visualización debe de realizarse sobre leds conectados a uno de los puertos del PPI y las entradas para ingresar los numeros de 4 bits, asi como la seleccion de la operacion de 1 bit, deberá estar conectada tambien a uno de los puertos del PPI. 1.1. Diagrama circuital completo A B C D E F G H I J 0 0 1 1 ADR[0..19] AD[0:.15] 2 2 U2 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 A[16..19] AD[0..15] 1 11 U1 ADR0 ADR1 ADR2 ADR3 ADR4 ADR5 ADR6 ADR7 2 5 6 9 12 15 16 19 ADR8 ADR9 ADR10 ADR11 ADR12 ADR13 ADR14 ADR15 OE LE 3 16 15 14 13 12 11 10 9 74HC373 U3 1 11 OE 74LS244 220 D[0..7] D0 D1 D2 D3 D4 D5 D6 D7 OE LE 74HC373 A[16..19] U9 U4 A16 A17 A18 A19 5 3 4 7 8 13 14 17 18 1 11 D0 D1 D2 D3 D4 D5 D6 D7 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 2 5 6 9 12 15 16 19 ADR16 ADR17 ADR18 ADR19 ADR1 U8 ADR[0..19] Rd NOT WR ADR2 U17 NOT OE LE ADR4 ADR3 ADR5 1 2 3 ADR7 ADR6 ADR0 6 4 5 A B C 74HC373 D[0..15] AD[0..15] 6 U5 AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 2 3 4 5 6 7 8 9 19 1 A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 18 17 16 15 14 13 12 11 D0 D1 D2 D3 D4 D5 D6 D7 18 17 16 15 14 13 12 11 D8 D9 D10 D11 D12 D13 D14 D15 U18 E1 E2 E3 34 33 32 31 30 29 28 27 5 36 9 8 35 6 15 14 13 12 11 10 9 7 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 DSW2 D0 D1 D2 D3 D4 D5 D6 D7 PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 RD WR A0 A1 RESET PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 CS PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 74HC138 in0 in1 in2 in3 in4 in5 in6 in7 4 3 2 1 40 39 38 37 18 out0 19 out1 20 out2 21 out3 22 out4 23 out5 24 out6 25 out7 1 2 3 4 5 6 7 8 DIPSW_8 16 15 14 13 12 11 10 9 4 in5 in4 M/IO Rd WR in7 in6 18 16 14 12 RN4 R1 220 5 14 15 16 17 13 12 11 10 out1 out0 Y0 Y1 Y2 Y3 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 in1 in0 1 4 A0 A1 A2 A3 D0 D1 D2 D3 D4 D5 D6 D7 out3 out2 U7:A 2 4 6 8 8086 3 4 7 8 13 14 17 18 out4 AD8 AD9 AD10 AD11 AD12 AD13 AD14 AD15 in3 in2 25 34 27 26 32 29 28 out7 out6 out5 AD[0..15] A[16..19] ALE/QS0 BHE DT/R/S1 DEN/S2 RD WR/LOCK M/IO/S0 2 5 6 9 12 15 16 19 1 2 3 4 5 6 7 8 RESET READY INTA/QS1 INTR HOLD/GT1 HLDA/GT0 TEST NMI MN/MX CLK Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 ON 21 22 24 18 31 30 23 17 33 19 D0 D1 D2 D3 D4 D5 D6 D7 OFF 3 3 4 7 8 13 14 17 18 8255A 6 CE AB/BA 74HC245 U6 AD8 AD9 AD10 AD11 AD12 AD13 AD14 AD15 7 2 3 4 5 6 7 8 9 19 1 A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 7 CE AB/BA 74HC245 8 8 FILE NAME: 9 DESIGN TITLE: partial_exam.pdsprj partial_exam.pdsprj DATE: 9 1/5/2024 PATH: Z:\home\roly\Documents\Proteus\PPI_8255\partial_exam.pdsprj PAGE: BY: @AUTHOR BOARD: @BOARD A B C D E F G Figura 1: Diagrama del circuito en Proteus. 2 H I REV: @REV 1 of 1 TIME: 9:12:56 AM J 1.2. Explicación detallada del funcionamiento de todo el desarrollo del examen Figura 2: Control de buses. En la Figura (2) se puede una sección del todo el diagram del circuito mostrado en la Figura (1). En este framento se encuentra todo el circuito para el control de buses: se está manipulando las 20 direcciones del microprocesador 8086 y sus 16 bits para datos. En otras palabras, se tiene el bus de datos y direcciones. Ası́ como el control de escritura y/o lectura de datos. Como se pide que el PPI se habilie en la dirección 0x90, entonces se tuvo que hacer una modificación a los 8 bits de entrada del bus de direcciones [ADR7 ..ADR0 ]. ADR1 y ADR2 serán negados para que puedan ir a A1 y a A2 respectivamente. El bit ADR7 irá directamente al enable (E1 ) del decodificador y ADR4 estará conectado al pin A del decodificador. Las demás conexiones serán realizadas como se puede observar en la Figura (3). De esa forma, se logrará hacer que el PPI tenga como dirección base a 0x90. A continuación se muestra la conexión del decodificador para la dirección requerida: Figura 3: Decodificador del PPI para la dirección 0x90. 3 Una vez hecho el decodificador para el PPI, ahora se configuró el harware para que el puerto a y C del PPI sean hardware de entrada, y el puerto B como salida. Para los puertos de entrada se prefirió hacer uso de displays de 7 segmentos para una mejor visualización de los números de 4 bits a ingresar. De la misma forma, para la salida. Cabe aclarar que solo por el puerta A se ingresan los 2 números de 4 bits, y que por el puerto C se ingresa el valor del selector. Este selector será quien ordene al microprocesador para que realice la operación de suma o resta. Como se pidió un selector de 1 bits, entonces de los 8 bits del puerto C, solo se está usando el bit menos significativo (C0 ) y los demás estarán conectados a tierra. El bit de selección consta de un switch en una configuración modo pull-up. Todo esto se puede observar en la Figura (4) Figura 4: Acondicionamiento para el harware de entrada y salida del PPI. 1.3. Presentación del código de programa debidamente comentado a colores .model tiny .stack 0x200 ; Implementación de una calculadora de 4 bits (suma y resta) ; Para la solución, se hizo prácticamente el dise~ no de un alu ; con 1 bit de selección para la suma o resta. Si el selector ;tiene un valor de 0, se hará la suma. En caso contrario, ;(selector = 1) se hará la resta. ;modelo del código asembler ;segmento de memoria .data pa equ 0x96 pb equ 0x94 pc equ 0x92 reg equ 0x90 ;1001 ;1001 ;1001 ;1001 .code main: mov dx, reg ;registro para acceder al command register 0110 0100 0010 0000 puerto de entrada para ambos números de 4 bits puerto de salida para el resultado puerto de entrada para el selector de la operación configuración de la ppi (dirección base) 4 mov al, 10011001b out dx, al jmp leer selector: mov dx, pc in al, dx cmp al, 0x0 je sumar jne restar ;valor para configurar la ppi ;configuración de la ppi: PORTA, PORTC: entrada, PORTB: salida ;saltar para leer la información de los puertos de entrada ;leer la entrada del selector ;comparar con 0 ;si es 0, entonces hará la suma ;si no es 0, entonces hará la resta leer: ;leer el primer número de 4 bits mov dx, pa in al, dx ;leer los números de 4 bits mov bl, al and bl, 0x0f ;conservar los 4 bits menos significativos ;leer el segundo número de 4 bits mov bh, al and bh, 0xf0 ;conservar los 4 bits más significativos shr bh, 4 ;hacer un desplazamiento hacia la derecha jmp selector ;ir al selector para la operación sumar: add bl, bh mov al, bl jmp mostrar ;realizar la suma ;sumar los dos números de 4 bits restar: sub bl, bh mov al, bl jmp mostrar ;realizar la resta ;restar los dos números de 4 bits mostrar: mov dx, pb out dx, al jmp leer end main ;mostrar el resultado de la operación por el puerto b ;saltar a esa referencia para mostrarlo por el puerto de salida (p ;saltar a esa referencia para mostrarlo por el puerto de salida (p ;mandar el valor del registro al (resultado de la operación) al pu ;nuevamente hacer la lectura de datos end 5 1.4. Funcionamiento correcto Para poder observar el correcto funcionamiento, se harán cuatro pruebas para la suma, y también para la resta. En el caso de la la suma, el selector debe estar en 0. Esto quiere decir que el switch estará en conectado a tierra para generar un 0 en el bit menos significativo del puerto C, como se muestra en lo siguiente Figura (5): Figura 5: Switch de entrada del selector de 1 bits Ahora, se mostrarán las 4 pruebas que se realizaron para la suma: Selector en 0 1ra pruba: 4 + 1 = 5 2da pruba: 3 + 5 = 8 3ra pruba: 7 + 6 = D(7 + 6 = 13) 4ta pruba: F + F = 1E(15 + 15 = 30) (a) Suma de 4 y 3. (b) Suma de 3 y 5 (c) Suma de 7 y 6 (d) Suma de 15 y 15 (F y F) Figura 6: Add your own figures before compiling 6 Ahora, se mostrarán las 4 pruebas que se realizaron para la resta: Selector en 1 1ra pruba: 3 − 2 = 1 2da pruba: 7 − 5 = 2 3ra pruba: F − 9 = 6(15 − 9 = 6) 4ta pruba: F − F = 0(15 − 15 = 0) (a) Suma de 4 y 3. (b) Suma de 3 y 5 (c) Suma de 7 y 6 (d) Suma de 15 y 15 (F y F) Figura 7: Add your own figures before compiling Nota: El sumador y restador que se implementó, es en hexadecimal, no en BCD, por eso es que en Figura (6c),(6d), (7c) y (7d) se obtienen esos resultados. 7