UNIVERSIDAD DE BUENOS AIRES Facultad de Ingeniería Docentes : Ing. Jorge A. Alberto (teóricas) Ing. Marisa Bauzá Ing. Graciela Ratto Ing. Marcela Perez Ing. Ricardo Arias Ing. Fernando Pucci Ing. Guillermo Campiglio P. Ignacio Martos Ing. Gerardo Stola Daniel Cabbibo Fernando Cofman Horario Teórica : Prácticas :
[email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected] [email protected]
Viernes 15 - 18 hs Martes 19 - 22 hs. Jueves 19 - 22 hs Viernes 11 - 14 hs
IMPORTANTE: Para aprobar la materia hay que contar con el 75% de asistencia a TODAS las clases prácticas, aprobar los parciales asignados por la cátedra y un proyecto.
Guía 1: Representación de la información Sistemas de numeración Binario : base 2 ; Octal : base 8 ; Hexadecimal : base 16 ; Decimal : base 10. Notación : (base,dígitos) ej : (2,8) base 2, con 8 dígitos Ejercicios : 1. Pasar los siguientes números naturales expresados en sistema decimal a : a) binario: 2,8 b) hexadecimal: 16,3 22
1
15
96
125
5
85
300
2. Pasar los siguientes números expresados en sistema decimal a : a) binario : 2,8 b) hexadecimal : 16,3 -24
-86
-125
-39
-129
3. Pasar a sistema decimal los siguientes números enteros Base 2 : 0010101010 1000111001011 10101111001 Base 8 : 6542 6267 1524 6173 356 Base16 : CAFE FEA ADE1A 4. Cuál es el número máximo y mínimo representable en los siguientes sistemas de numeración? Cuántos números se pueden representar? (2,6) con signo (2,16) sin signo (16,4) con signo (8,4) sin signo (2,X) sin signo/ con signo (16,X) sin signo/con signo 5. Escribir los siguientes números en notación a) Decimal empaquetado (BCD empaquetado, un dígito por nibble) b) Decimal desempaquetado (BCD desempaquetado, un dígito por byte) c) ASCII - cuántos bytes ocupan? 123
-245
87
98647 -87371
6. Cuántos números pueden almacenarse en 4 bytes si el formato es a) BCD Empaquetado b) BCD Desempaquetado c) Binario sin signo d) Binario con signo 7. Encuentre el equivalente decimal para el número de cuatro bits en complemento al módulo 1000. 8. Encuentre el equivalente decimal para el número de 4 bits en complemento al módulo 1111 9. Muestre la representación para (305)10 usando tres dígitos BCD. 10. Muestre la representación en complemento a 10 de (-305)10 usando tres dígitos BCD.
11. Complete la siguiente tabla para una representación en 5 bits y 8 bits (incluyendo el bit de signo) indicada a continuación. Muestre sus resultados como enteros en base 10 con signo Complemento al módulo con 5 bits
Complemento al módulo con 8 bits
Número mayor Número Negativo menor Cantidad de Números distintos
Aritmética binaria : 12. Sumar los siguientes números expresados en sistema binario sin signo - Especificar indicador de Carry (bit de Acarreo) a) 110101010 + 001001001 b) 101010111 + 100000011 c) 101100011 + 111100001 d) 110001101 + 111100000 13. Repetir lo anterior pero para la resta - Especificar indicador de borrow. (Hacer la resta, no se pide sumar en Complemento al módulo). 14. Sumar los siguientes números pero considerándolos con signo en complemento al módulo. a) 01100110 + 10011001 b) 11000101 + 00011110 c) 01101101 + 11001100 d) 11100011 + 10110001 15. Repetir lo anterior pero para la resta - Especificar indicador de borrow. (Hacer la resta, no se pide sumar en Complemento al módulo). 16. Muestre los resultados de sumar los siguientes pares de números de 5 bits (un bit de signo y cuatro de datos). Los números se encuentran en el convenio del Complemento al módulo. Indique si hay o no overflow en cada uno de los casos. (Se verifica mirando los acarreos desde el anteúltimo y último dígito, si son distintos: hay OV). 10110 10111
11110 11101
11111 01111
17. Una de las maneras de determinar si ocurrió overflow cuando se suman dos números es detectar que el resultado de sumar dos números positivos es negativo o que el resultado de sumar dos números negativos sea positivo. Las reglas del overflow son diferentes para la resta: hay overflow si el resultado de restar un número negativo de un número positivo es negativo o el resultado de restar un número positivo de un numero negativo es positivo. Reste los dos números que se muestran abajo y determine si ocurrió o no overflow (Números expresados en Complemento al módulo) 0101 - 0110
18. Sume los siguientes números en complemento al módulo como se indica a continuación, indique si hubo overflow. 1011101 0111011
19. Sume los siguientes números BCD naturales (sin signo o bien en complemento a 10) (641)10 y (259)10 . 20. Sume los siguientes números BCD usando la cantidad de dígitos que considere necesaria, (123)10 y (-178)10 .
Guía 2: Familias Lógicas 1. Ejercicios del libro Digital Design . Pinciples and Practices. Wakerly, John Problemas sugeridos: 3.1 3.11 3.23 3.67 3.91 3.94
3.25
3.26
3.36
3.53
3.56
Consigna: traer a la clase 5 preguntas con dudas o dificultades sobre los ejercicios. Utilizar, cuando sea necesario, las hojas de datos correspondientes a los dispositivos usados y traerlas a la práctica. 2. Calcular los márgenes de ruido en 1 y en 0 para una línea del bus de address reforzada con 74LS244 que debe manejar 2 cargas TTL y 10 cargas CMOS. 3. Dadas las hojas de datos de las familias TTL, TTL-LS y CMOS indicar los márgenes de ruido 4. Defina esquemas de conexiones válidas entre las distintas familias. 5. Qué ocurre si se conecta la salida de una compuerta CMOS alimentada con 5 v a la entrada de otra compuerta de la misma familia pero alimentada con 12v? Justifique. 6. Que ocurre si ahora se conectan al revés, es decir la salida de la CMOS @ 12 v a la entrada de la CMOS @ 5 v. Justifique este caso también. 7. Definir claramente FAN IN, FAN OUT y Margen de Ruido 8. Calcular los valores máximos y mínimos para una R de pull up de un circuito que tiene 3 salidas OC correspondientes a 3 compuertas NAND TTL std conectadas a 1 entrada de una compuerta NOR TTLLS.
Guía 3: Memorias 1. Diseñe una memoria RAM de 8K palabras de 32 bits usando chips RAM de 8K palabras de 8 bits cada una. 2. Diseñe una memoria RAM de 16K palabras de 4 bits usando chips RAM de 4K palabras de 4 bits cada una y un decodificador externo.
3. Dada una memoria RAM de n palabras de p bits: Muestre como construir una memoria RAM de n palabras de 4p bits usando estos chips. Utilice otros componentes lógicos que considere necesario. Muestre como construir una memoria RAM de 4n palabras de p bits usando los chips anteriores. 4. Cómo puede utilizarse una memoria 27C64 como memoria de 64Kb x 1. Cuál es su tiempo de acceso? 5. Cómo puede utilizarse una memoria 27C64 como memoria de 2Kb x 32? Cuál es su tiempo de acceso?. 6. Hacer (por lo menos) los siguientes ejercicios del capitulo 2 del libro de MacKenzie12 13
14 15
16 17
23 24
25 26
7. Cuántas líneas de direccionamiento se necesitan para acceder a una memoria de 8 Kbytes? Y para una de 8 Kbits? (bits de datos = 8) 8. Cuál es el tamaño del decodificador necesario para construir una memoria de 4Mbytes con unidades de 256 Kb? Dibujar el esquema.
Guía 4: Hardware básico y memorias 1. Cuál es duración de un ciclo de máquina cuando se opera un µC 8051 con un cristal de 4 MHz. 2. Cuántos cargas LS puede manejar el Port 0 del µC? Justificar su respuesta. 3. El terminal P2.2 esta conectado a la base de un transistor con Beta=100. Podrá el transistor manejar un LED conectado a su colector? Y al emisor? Se quema el port? Justifique su respuesta. 4. lndicar en una tabla como la de la figura 2, las señales del µC 8051 que se utilizan para conectar un banco de memoria. Explicar su función y con qué terminal del chip de memoria se conectan. a) Para una EPROM (Memoria de programa) b) Para una RAM estática Señal del µC
Propósito
Pin del chip de Memoria
Figura 2 5. Qué señales del bus de control de µC 8051 se usan para seleccionar RAM y EPROM (Memoria de programa) externas ? ¿Cómo identifica el µC que se está accediendo a memoria externa RAM o a memoria de programa? 6. Implementar un banco de memoria con dos RAM estáticas de 32 Kb para que se puedan conectar al µC, ocupando todo el espacio de memoria.
7.
Implementar un banco de 4K con chips de RAM de I K y 8 K de ROM usando el µC 8051
8. Diseñar el banco de memoria de un µC 8051 de tal manera de conectar: 1 chip EPROM de 16K x 8 bits (memoria de programa), 4 chips RAM de 1 K x 8 bits, 1 chip RAM 16K x 8 bits. 1 chip de I/O de 3 bytes x 8 bits Representar el esquema eléctrico del circuito. Usar multiplexores. Indicar las direcciones de inicio y fin de cada chip 9. Implementar un banco de 2K de EPROM y cinco (si, digo: 5) chips de 16 K de RAM. Indicar las direcciones de inicio y fin de cada chip. 10. Implementar un banco de memoria RAM 1 chip de 32K 3 chips de 1K 3 chips I/O de 128 Bytes usando multiplexores. Indicar las direcciones de inicio y fin de cada chip 11. Diseñar un banco de memoria RAM de 16 KB con memorias de 4 KB para el µC 8051 que comience en la dirección $4000 dado que las direcciones superiores ya están asignadas a otras memorias. Guía 5: Ensamblador básico. 1. Dar el código hexadecimal para las siguientes instrucciones, cant de ciclos, cant. de bytes que ocupan. Explicar el propósito de cada byte. Si el cristal es de 4 Mhz, cuánto tarda en ejecutarse cada instrucción? INC DEC MOV INC
A R6 A,@R0 $E0
2. Modos de direccionamiento 1. Para las siguientes instrucciones dar el contenido del Acumulador y de la posición de memoria (si es que alguna cambia) después de ejecutadas Las posiciones de memoria interna contienen los siguientes valores originales: Dirección de RAM interna $60 $61 $62 $63 $64
MOV MOV MOV INC MOV MOV
A,#DATA R0,A A,@R0 R0 @R0,A A,DATA
Label DATA
Contenido $F0 $10 $0A $00 $01
MOV (DATA+3), DATA 2. ¿Cuál es la diferencia entre MOV A, @R0 y MOV A,R0? 3. Para las instrucciones anteriores dar el código de operación de cada una. (Se puede usar el ensamblador para calcularlo) 4. ¿Cuál es la función de la instrucción MOVX y MOVC? 5. Asumiendo que el PSW contiene $C0 y el acumulador tiene $50, ¿qué queda después de ejecutar RLC A? 6. ¿Qué hace la siguiente instrucción: SETB $D7 ?
3.lnstrucciones aritmético-lógicas 1. Escribir un programa que sume 2 números de 8 bits y coloque el resultado en lo apuntado por el R1 del banco 3. 2. Escribir un programa que reste 2 números de 16 bits, considerándolos como enteros con signo. 3. Escribir un programa que sume 2 números con signo de 128 bits almacenados en memoria interna y coloque el resultado en el primer sumando. 4. Escribir un programa que cuente los caracteres que hay en una cadena de caracteres terminada en \0. 5. Escribir el menor código para dividir por 2 un número de a) 16 bits y b) con signo 16 bits. 6. Escribir un programa que cuente cuántos pulsos se presentan a la entrada de P1.2. Considerar que los pulsos no tienen ruido. 4. Trabajo Práctico: Ingresar los programas anteriores en la computadora, ensamblarlos y simularlos con el AvSim. Consultar a los docentes
Guía 6: Assembler - Ejercicios de programación: Nota: los programas deben estar comentados, completos, ensamblados y simulados. 1. Escribir un programa en assembler que convierta un número binario de 2 bytes a ASCII. 2. Escribir un programa que sume 2 números con signo de 16 bits. 3. Escribir un programa que multiplique 2 números sin signo de 8 bits. 4. Escribir un programa que genere un ciclo de espera de 10 mseg. Asuma un Xtal de 12 MHz. Considerar el caso teórico de cualquier frecuencia de reloj. 5. Escribir un programa que genere una onda de 4 µseg de pulso activo en alto cada 200 µseg. Asuma cristal de 12 Mhz. 6. Escribir un programa que implemente una compuerta NAND, una NOR y una XOR de 8 entradas y 1 salida. Ingresar y sacar las señales por distintos ports 7. Idem un flip-flop JK activado por flanco de bajada del clock 8. Escribir una macro que implemente el BGE y otra para el BLE 9. Dada una variable de tipo “string” definida en RAM externa (BUFFER) analizar cada carácter ASCII, y convertir los caracteres en mayúscula a minúscula y viceversa.
10. Conecte una llave DIP-Switch de 4 bits y un display de 7 segmentos a un µC 8051 de tal manera que puedan ser accedidos para lectura y escritura. Escriba un programa en lenguaje ensamblador que lea la llave y escriba en el display el número hexadecimal correspondiente.
11. A partir del ejercicio anterior para el conexionado con el display, escribir un programa que efectúe barrido dinámico de una variable almacenada en memoria de 4 dígitos BCD. 12. Escribir un programa que haga el debounce de un botón conectado en el pin P1.1 13. Escribir una programa que detecte si un botón ha sido apretado y si ha sido soltado usando el programa anterior para el debounce. Dejar en una variable bot_stat el estado del botón. 14. .- Explicar cual es la función del siguiente programa: defseg prog,start=0,absolute seg prog mov R0,#$50 mov SP,#$50 mov A,#'’Z' mov B,#('A'-1) lcall llena ; sigue el programa llena mov push push sjmp XX inc inc YY mov dec dec cjne dec dec otra ret
DPTR,#XX DPL DPH YY SP SP @R0,A R0 A A,B,otra SP SP
15. Escribir un programa que efectúe el barrido de un teclado numérico de 4x3 conectado en el P1 y por P2 mande el resultado de la tecla apretada expresado en ASCII de 7 bits. El bit 8 indicará con un 1 si la tecla fue presionada y con un 0 si fue soltada. 16. Al Port1 de un uC 8051 entran las 8 señales de otras tantas válvulas (1: abierta, 0: cerrada). Se deben implementar otras dos señales de salida por P2.0 y P2.1 para el encendido de dos bombas (B1 y B2, 1: on, 0: off). Cada bomba es capaz de alimentar el caudal de hasta 4 válvulas abiertas. (18 instrucciones) 17. Dado un carácter en una Constante en la memoria de programa, hacer una rutina (strchar()) que lo busque en un string que arranca en una posición determinada de la RAM externa y termina con el carácter /0 (00). La rutina debe devolver la dirección del carácter en el string, si lo encuentra (por ej en
R0 y R1) o NULL ($FFFF) en caso contrario.(16 instrucciones) 18. Una tabla de texto ubicada en la RAM externa está llena con caracteres ASCII y terminada con “\0”. Hacer una rutina que reemplace a todos los caracteres “LF” por “LF CR” sin perder datos. (20 instrucciones)
Guía 7: Interrupciones, Interfaz serie y Timers. 1. Dados el estado de los registros IP e IE y la secuencia siguiente en que suceden las interrupciones, ordenarlas en un cuadro según su prioridad. a) IP = $0D (Interrupt Priority) IE = $9F (Interrupt Enable) Secuencia: Simultáneamente : se recibe un dato por la puerta serie, el Timer 1 termina la cuenta y se genera la interrupción Externa 1. Mientras se está ejecutando la última rutina de interrupción correspondiente a los sucesos anteriores, se produce la interrupción Externa 0, y 6 ciclos de máquina después se produce la interrupción de Timer 0. Suponer que la ISR (interrupt service routine, rutina de interrupción) de la interrupción externa 0 dura mas de 6 ciclos de máquina. Cómo se van atendiendo las interrupciones y cuáles van quedando pendientes según el esquema de prioridad de procesador? b) Idem inciso a) pero con IP = $16. c)¿Que cambia si en vez de recibir un dato por el Serial se quiere Trasmitir ? d) ¿Que pasa si IE = $1F ?con el viejo IP, ¿y si IE = $80 ? con el nuevo IP. Analice. 2. El siguiente programa genera una onda cuadrada en el pin P1.0. =0000 0000 02 0030' =000B 000B B2 90 000D 32 =0030 0030 75 89" 02 0033 75 8C" CE 0036 D2 8C 0038 75 A8" 82 003B 80 FE'
1 ORG 00H 2 LJMP MAIN 3 ORG 000BH 4 T0ISR CPL P1.0 5 RETI 6 ORG 0030H 7 MAIN MOV TMOD, #02 8 MOV TH0, #-50 9 SETB TR0 10 MOV IE, #82H 11 SJMP $ 12 END Suponiendo un cristal de 12Mhz responda: ¿De qué frecuencia es la onda cuadrada generada? ¿En qué modo trabaja el Timer 0? Justifique por qué sostiene está en ese modo y no en otro. TF0 es el flag de Overflow del Timer 0, y se pone en 1 cuando esto ocurre, a la vez que se produce la interrupción. ¿Por qué no se pone en 0 por software, a través de la instrucción CLR TF0, cuando se empieza a ejecutar la ISR? Analice el caso en el que se inviertan en orden las líneas 9 y 10. ¿Cambia algo?.
3. Supongamos que se está ejecutando una ISR mientras se produce una interrupción de igual prioridad. No se ejecutará la nueva ISR hasta que por lo menos se haya ejecutado una instrucción del programa interrumpido originariamente. Teniendo en cuenta lo anterior analice la ISR de INT0 (Interrupción
Externa 0), suponiendo que termina con las siguientes instrucciones. ..... JNB P3.2, $ JB P3.2, $ RETI Nota : P3.2 es el pin correspondiente a la #INT0. Tenga en cuenta que la interrupción externa se habilita cuando se detecta un flanco descendente en dicho pin. 4. Si se quisiera obtener una onda cuadrada de la mayor frecuencia posible usando un cristal de 12 Mhz. ¿Se podrían utilizar los Timers? ¿Qué problema acarrea?. Escriba el programa y analice el ciclo de trabajo de la onda cuadrada. ¿Podría obtenerse un ciclo de trabajo diferente?.
5. Codificar una subrutina llamada OUTSTR que envíe una cadena terminada en \0 de caracteres ASCII por el port serie. El puntero a la cadena dato viene por el stack y la cadena se encuentra en memoria externa. Incluir la programación de todos los registros que sean necesarios para el funcionamiento correcto del sistema.
6. Codificar una subrutina llamada INSTR que reciba una cadena terminada en 0 de caracteres ASCII por el port serie. El puntero a la posición de almacenamiento viene por el stack y la cadena debe almacenarse en memoria externa. Incluir la programación de todos los registros.