- Contador reversible síncrono
- Registros de desplazamiento
- Estudio de una memoria EPROM. Borrado grabado y aplicaciones
- Prácticas con el 8085
- Simulador SIM8085
- Prácticas con el entrenador 8085
PRÁCTICA 7
Contador reversible síncrono
Los siguientes circuitos, preferentemente se realizarán en el ordeandor, no es necesario imprimirlos, sólo mostrar el diseño funcional de todos ellos atrás.
Realizar un circuito … | Con el integrado … | ||||||||||
1 | Contador módulo 7 | 7490 | |||||||||
2 | Divisor 26 | 7493 | |||||||||
3 | Contador 2 a 8 ascendente | 74190 o 74191 | |||||||||
4 | Contador 13 a 5 descendente | 74190 o 74191 | |||||||||
5 | Contador 7 a 9 ascendente | 74192 |
PRACTICA 8
Registros de desplazamiento
Dibuja el diseño funcional de estos circuitos:
1.- Con el 74194 realiza un circuito secuenciador de Leds en el taller, es decir, que se desplace un Led encendido, (hay que realizar un pulso corto en el SR)
Ejemplo de funcionamiento : 1000 0100 0010 0001
2.- ¿Cómo harias que se recoriese siempre? Es decir :1000 0100 0010 0001 1000 0100 ..
3.- RETO ¿Cómo harias un "coche fantástico" ? es decir
1000 0100 0010 0001 0001 0010 0100 1000 y otra vez a empezar
pista: añadir "algo que recuerde" que dirección tomar, ejem RS
PRÁCTICA 9
Estudio de una memoria EPROM. Borrado grabado y aplicaciones
1.- Supongamos que un tribunal esta compuesto de 5 personas, disponen de un interruptor para determinar si es culpable (1) o inocente (0) el acusado, como la votación se desea que sea secreta, se precisa de un circuito electrónico que realice las siguientes salidas
a) Mostrar el número de votos culpables , que por simplificación, se visualizará en un solo Display
b) Que un LED rojo se encienda si el acusado es culpable
c) Que un LED verde se encienda si hay más de un 75% que opina que es inocente
d) Que un LED rojo pequeño que determine el empate
Implementar este circuito con la EPROM 27C64A, borrarla y programarla, despues montar el circuito, rellena la tabla de verdad (paciencia), y los valores en hexadecimal que se graban en la memoria. Hay que poner a la salida de la EPROM unos trigger 7414, como son inversores, o grabarlo al revés, o poner dos trigger en cascada. Dibujar diseño funcional del circuito atrás.
decimal | Binario | Grabación en binario | Grabación en hexadecimal | ||
0 | 00000 | ||||
1 | 00001 | ||||
2 | 00010 | ||||
3 | 00011 | ||||
4 | 00100 | ||||
5 | |||||
6 | |||||
7 | |||||
8 | |||||
9 | |||||
10 | |||||
11 | |||||
12 | |||||
13 | |||||
14 | |||||
15 | |||||
16 | |||||
17 | 1 | ||||
18 | |||||
19 | |||||
20 | |||||
21 | |||||
22 | |||||
23 | |||||
24 | |||||
25 | |||||
26 | |||||
27 | |||||
28 | |||||
29 | |||||
30 | |||||
31 |
2.- Contestar a las siguientes preguntas
Capacidad de palabras que almacena | |
El tamaño de la palabra que almacena | |
El número total de bits que almacena | |
El tipo de memoria integrada | |
Características eléctricas de la pastilla |
Haz un dibujo de la estructura interna de la memoria EPROM 27C64A:
Prácticas con el 8085
Indice:
Generalidades del 8085
Harware del 8085
Instrucciones del 8085
Instrucciones de transferencia de datos
Instrucciones aritméticas
Instrucciones lógicas
Instrucciones de desplazamiento
Instrucciones de salto
Instrucciones de subrutinas
Instrucciones de pila
Instrucciones de control
Manejo del simulador 8085
PRÁCTICA 10
Manejo del micro 8085 desde el PC
Introducción
Comandos
Subrutinas
direcciones de nuestros programas
Manejo del micro 8085 desde la consola
Introducción
Comandos
Interrupciones
Grabar y leer desde una cinta cassette
Prácticas
Manejo del entrenador
PRÁCTICA 11
Semáforo
PRÁCTICA 12
1.- Generalidades del 8085
1.1.- Hardware del 8085
Dentro del 8085 tenemos los siguientes registros:
Todos estan conectados entre si, y el 8085 tiene exteriormente 3 buses como todos los microprocesadores (pero con tamaños diferentes):
Nombre | bits | comentarios | |||||||||||||||
D.B. | Bus de datos (data bus) | 8 | conectado al R.I. desde este registro la U.C. lee las instrucciones y las procesa. | ||||||||||||||
A.B. | Bus de direcciones (Adrress Bus) | 16 | conectado al PC indica la dirección de memoria del programa que se esta leyendo. | ||||||||||||||
C.B. | Bus de Control | 10 | Conectado a la U.C. para controlar el sistema |
Hay que señalar que el 8085 tiene el bus de direcciones multiplexado, es decir, tiene 8 pines AD0 …. AD7 que son bus de datos y bus de direcciones (la parte baja), para diferenciarlo tiene un pin llamadoALE que cuando es 0 las lineas AD0…AD7 es bus de datos D0…D7, y cuando ALE=1, las lineas AD0…AD7 es parte baja del bus de direcciones A0…A7.
El bus de control además del ALE, tiene los siguientes pines:
? Acceso a memoria o a periféricos: IO/M#.
? pin indicador de estar preparado para atender al dispositivo exterior : READY.
? pin indicador que el dispositivo externo esta ocupando los buses : HOLD.
? pin indicador que el 8085 no hace caso a los buses HLDA.
? pin indicador que el 8085 se ha reseteado RESETOUT.
? y pines indicadores de estado S0 S1 (S0S1 =01 Escribe dato, =10 Lee dato, =11 Busca dirección).
En la pag 280 y 281 explica el funcionamiento de cada uno de los registros, unidades etc.., señala brevemente el significado de cada uno de ellos:
Descripción | ||||||||
A | ||||||||
B, C D, E H, L | ||||||||
Flag S Z AC P CY | ||||||||
ALU | ||||||||
U.C. | ||||||||
R.I. | ||||||||
P.C. | ||||||||
S.P. |
1.2.- Instrucciones del 8085
Nomenclatura:
r = un registro de 1 byte , puede ser cualquiera de estos : A, B,C,D,E,H,L.
(rs =registro origen de datos, source, rd = registro destino de los datos)
[1000] = el dato almacenado en la dirección 1000H
[HL] = el dato almacenado en la dirección contenida en el registro HL
M = " " "
dato = un número de 1 byte, por ejemplo 4AH, suelen ser los datos.
addr = un número de 2 bytes, por ejemplo 10B2H, suelen ser las direcciones
H=hexadecimal, B=Binario, D = Decimal
1.2.1.- Instrucciones de transferencia de datos
MOV rd,rs MOV rd,M MOV M,rs MVI rd,dato | LDA addr STA addr |
LDAX B STAX B LDAX D STAX D | LHLD addr SHLD addr |
XCHG | LXI B,addr LXI D,addr LXI H,addr |
ejemplo de utilización :
1.2.2.- Instrucciones aritméticas
ADD rs ADD M ADI dato | SUB rs SUB M SBI dato |
ADC rs ADC M ACI dato | SBB rs SBB M SBI dato |
INR rs INR M INX B INX D INX H | DCR rs DCR M DCX B DCX D DCX H |
DAD B DAD D DAA | STC CMC |
1.2.3.- Instrucciones lógicas
ANA rs ANA M ANI dato | XRA rs XRA M XRA dato |
ORA rs ORA M ORI dato CMA | CMP rs CMP M CPI dato alteran solo el flag : Z, S, CY, AC … |
1.2.4 Instrucciones de desplazamiento
RLC RRC RAL RAR |
1.2.5 Instrucciones de salto
1.2.6 Instrucciones para las subrutinas
CALL addr Ccondición | RET Rcondición |
1.2.7.- Pila
PUSH B POP B | PUSH D POP D | XTHL SPHL |
1.2.8.-Instrucciones de control
HLT NOP | IN puerto OUT puerto |
SIM EI |
2.- Manejo del simulador 8085
Vamos a realizar un pequeño ejemplo de funcionamiento. Vamos a mover el contenido de la dirección 2000H al acumulador, y almacenarlo en la 2001H, y el contenido de la dirección 2002H moverlo al registro B, y almacenarlo en la 2003H.
a) Escribir el siguiente programa en un editor, por ejemplo el EDIT de MS-DOS, guardarlo como PRUEBA.ASM el archivo fuente debe de tener la extensión *.ASM
(vamos al direcctorio 8085, desde el raiz : CD 8085, y EDIT PRUEBA.ASM)
todo lo que se escribe después de ; no se ensambla, así que se puede utilizar como comentarios.
ORG = organizar las siguientes líneas a partir de la dirección en este caso 2000H
DB=se utiliza para poner datos, en este caso, pone 05 en 2000, A4 en 2001 etc…
aquí DATO1 es una etiqueta, y toma el valor de la dirección donde esta escrita, en este caso DATO1 es igual a 2000 ¿y DATO2? hay que poner : y escribirlas en la primera columna, el resto del programa a partir de la columna 10.
también puede haberse escrito:
DATO1 EQU 2000H
EQU= equivale a …
el programa se ha escrito a partir de la dirección 1000H, carga el acumulador (loadA) y lo almacena (storeA), podría haberse escrito STA 2000H y LDA 2001H, para el registro B hay que utilizar el registro M, antes de utilizar el registro M hay que cargar HL la dirección que queremos, LXI H,DATO3 = LXI H,2002H, lo mueve a B, y para moverlo al 2003 podría haberse escrito LXI H,2003H o como en este caso, incrementando lo que tenía, movemos de B a M, y para finalizar END.
b) después de guardarlo ensamblarlo con la instrucción: ASM8085 PRUEBA.CCC esto crea 3 ficheros, si salen errores hay que corregirlo en el prueba.asm:
PRUEBA.ERR = listado de errores de 1ª pasada.
(A=argumento erróneo, D=etiqueta no existe, L=etiqueta erronea, U=símbolo indefenido, S= error sintaxis)
PRUEBA.LST = listado del programa, aquí salen los errores de 2ª pasada.
PRUEBA.OBJ = listado en lenguaje máquina.
c) simularlo con el programa SIM8085, una vez dentro pulsar F4 y cargar el PRUEBA.OBJ, utilizar los siguientes comandos:
V=ver memoria, en este caso nos interesa ver lo que hay en la 2000H y siguientes.
M=modificar memoria, si queremos alterar los nº que hemos metido.
R=modificar los registros, en este caso pondremos el contador del programa PC en la dirección de comienzo de nuestro programa: 1000H
T=trazar o ejecutar paso a paso, ir pulsando y observar lo que ocurre en cada instrucción.
Q=salir
otras utilidades:
F1 visualiza una ayuda
C=ver el código
E=ejecutar entre dos direcciones, ESC para salir, I para interrupción 7.5
PRÁCTICA 10
Simulador SIM8085
En esta práctica la intención es que toméis un primer contacto con el 8085, y realizar los ejercicios de un microprocesador en un PC, para después pasarlos a la práctica.
Los ejercicios van ordenados de menor a mayor complejidad, realízalos primero en una hoja aparte, discutiéndolo con tus compañeros de práctica, y realízalos en el ordenador.
Tienes que ensamblarlos, comprobar que funcionan, y entregar los listados *.LST o *.ASM, no entregues una hoja por ejercicio, sino un listado donde estén todos los listados de los ejercicios para ahorrar papel.
Ejercicios:
10.1.- Realizar una transferencia de datos [1500] <= [1503] y [2500] <= 0
con las instrucciones MOV MVI.
10.2.- Idem pero con las funciones LDA y STA
10.3 .- Sumar 3 números de 1 byte, almacenar su resultado y su posible acarreo, [1003] <= [1000]+[1001]+[1002] el acarreo almacenarlo en [1004]
10.4.- Sumar dos números de 2 bytes de la siguiente forma, con registros simples
10.5.- Idem con registros dobles.
10.6.- Multiplicar un número por 4 de la siguiente forma : [1001] <= [1000] * 4
10.7.- Multiplicar 2 números de un byte : [1002] <= [1000]*[1001]
10.8.- Dividir 2 números de un byte : [1002] <= cociente [1000]/[1001]
[1003] <= resto de [1000]/[1001]
10.9.- Hacer un intermitente de un LED por el puerto paralelo OUT 00H
10.10 .- Encender 8 Leds secuencialmente por el puerto paralelo OUT 00H
10.11.- Ejercicio de libre enunciado, tiene que ser original respecto a los demás grupos de prácticas, si no se te ocurren enunciados, consulta al profesor, imprime el listado *.ASM y adjúntalo a los anteriores, crea una transparencia del diagrama en bloques para exponerlo a la clase y explicar a los demás qué has hecho y cómo. Este ejercicio es el que realmente puntúa. Cuando acabes con la exposición, enseña todos los listados al profesor. (Esto se hace para obligar a que tengas los listados, quizás el día de mañana los necesites)
3.- Manejo del micro 8085 desde el PC
3.1 Introducción
Para utilizar el micro 8085 desde el PC, se debe de poner el conmutador Teclado/CRT en la posición CRT. En el fichero CONFIG.SYS del PC debe de existir la línea DEVICE=ANSI.SYS. Y también tener conectado un cable conexión serie de tres hilos de la siguiente forma:
Ejecutar el fichero DDT85 he indicar en qué puerto esta COM1 COM2 etc…, de esta forma se consigue una comunicación de 2400 baudios cada dato de 8 bits, con 2 de stop. Pulsar INIC antes de utilizar los comandos. Si se quiere ensamblar un fichero por ejemplo PRUEBA.ASM para el 8085, ejecutar HACERHEX PRUEBA, es un fichero BATH que ensambla y ejecuta a la vez el DDT85.
3.2 Comandos
D dirección baja,dirección alta =Visualiza la memoria desde la dirección alta hasta la baja, ejem D1009,2A50
Gdirección comienzo =ejecuta el programa desde la dirección comienzo, si no se pone, ejecuta desde donde apunta el registro PC.
N =ejecución paso a paso
I dirección =inserta en la memoria a partir de dirección.
Mdirección baja, dirección alta, destino = mueve la memoria, ejem M1E00,1E06,1F00 = mueve el bloque de memoria desde la 1E00 hasta 1E06 a la 1F00
Sdirección =Visualiza y modifica la dirección, ejem S1000
Xregistro =Visualiza y modifica los registros, ejem XA, si no se pone el registro, los visualiza en este orden: A B C D E F H L M P S
L nombre del programa offset = carga un programa desde el ordenador a partir de la dirección 1000H, el offset es el número de posiciones de memoria que se incrementa el programa, ejem offset=10, entonces lo carga en la 1010, luego es aconsejable utilizar en vuestros programas ORG 0000H o ORG 0500H
H = fin de la comunicación
3.3 Subrutinas
Estas son algunas de las subrutinas que podéis utilizar:
Dirección | nombre | descripción | Interrupc | reg. alt. | ||
0A51 | CI1 | Carácter de consola al acumulador | Masc | F | ||
0A5D | CO1 | Del registro C al display | A F | |||
0A33 | PRIMES | un mensaje que esta en memoria, que comienza en la dirección apuntada por HL se visualiza en el display | A H L F | |||
0AB7 | ADRD | el contenido de HL se visualiza en el display | A B C F | |||
04C9 | UPDAD | " | TODOS | |||
04D5 | UPDDT | el contenido del acumulador se visualiza en el display | " | |||
0B74 | DELAY | retraso de 1 mseg | ||||
044E | RDKBD | ídem CI1 | H L F | |||
041D | OUTPT | ídem Primes | ||||
037D | GTHEX | nº hex de 2 bytes ejem A725 desde el teclado, al display y al registro DE | ||||
02BF | TODIR | Idem que el anterior, pero sin visualizarlo |
Para utilizar estas subrutinas, hay que utilizar el comando EQU, por ejemplo:
RDKBD EQU 044EHUPDDT EQU 04D5H
Para permitir desenmascarar todas las interrupciones, es necesario poner 08H al Acumulador, y ejecutar SIM, y para habilitar el sistema de interrupciones EI
Estas direcciones pertenecen a la ROM y son inalterables, pues vienen de fábrica.
3.4 Direcciones de nuestros programas.
Nos dividiremos la memoria RAM para efectuar nuestros programas y así no "chafar" los programas de nuestros compañeros:
grupo | direcciones | grupo | direcciones |
1000 10FF | GRUPO 4 | 1700H 18FFH | |
GRUPO 1 | 1100H 12FFH | GRUPO 5 | 1900H 1ªFFH |
GRUPO 2 | 1300H 14FFH | GRUPO 6 | 1B00H 1CFFH |
GRUPO 3 | 1500H 15FFH | LIBRE | 1D00H 1FFFH |
4 Manejo del micro 8085 desde la cónsola
4.1 Introducción
El 8085 como tiene los buses de datos y el de direcciones multiplexado, el 74373 los demultiplexa, 8085 —— AB y DB (8) ——- 74373 —– ABL (8) —– DB(8)
Tiene un reloj de cuarzo de 4.915 MHz, un dedodificadro de 3 a 8 canalies 74138 y puertas and 7408 para la realización del mapa de memoria, que es la siguiente:
Direcciones | chip, mapa hardware | descripción, mapa software | |
0000 0FFF | EPROM 4k 2732 | Programa monitor de la cónsola y subrutinas anteriores | |
1000 1FFF | 2x RAM 2k 4016 | Programas de usuario | |
2000 20FF | RAM 256 bytes 8155 U17 | Utilizado por la cónsola |
Periféricos:
Tiene una ranura de expansión J1 de 50 hilos, una salida MIC EAR para comunicarse con un cassette, como memoria externa, y tres puertos:
tipo | jumper | puerto | chip | ref |
SERIE | J8 | 8251 | U13 U11 U12 | |
PARALELO | J5 J6 J7 | PA PB PC | 81555 | U14 |
" | J2 J3 J4 | PA PB PC | 8255 | U15 |
4.2 Comandos
INIC = Se produce un "reset" y aparece en el display 8085.
S.M/ANT =Sustituir memoria y anterior
POST =Posterior, equivale al "enter"
ejemplo, queremos meter a partir de la dirección 1000 los siguientes datos 31,8C,1F, solución: SM/ANT 1000 POST 31 POST 8C POST 1F
si hay error: SM/ANT 1000 POST 31 POST 8D POST SM/ANT 8C POST 1F
E REG =Examinar los registros, para ver uno concreto, pulsar su nombre, si quieres ver todos, pulsar POST (hacia delante) o ANT (hacia atrás) y se verán en el siguiente orden: A B C D E F I H L SPH SPL PCH PCL
F= S Z X AC X P C
I=X X X IE M7.5 M6.5 M5.5
IE =Validación de interrupciones, y las M son las máscaras de las interrupciones
GO = Ejecuta el programa, visualiza el PC, introducir la dirección de comienzo, y pulsar EJEC, para interrumpir INIC, el programa puede finalizar con alguna instrucción como RST0, RST1 o JMP 0000H, se aconseja situar la pila al final (LXI SP. 1FFFH)
EJEC =Ejecuta paso a paso, POST para pasar al siguiente paso
INTR VECT = Se realiza la interrupción 7.5, (RST 7.5), es un interruptor conectado directamente al pin 7 del 8085 (Ver interrupciones)
E =Lee un programa desde el cassette C =Graba un programa al cassette
4.3 Interrupciones
En las interrupciones vectorizadas, el micro salta a una dirección fijada, donde se trata a la interrupción, hay de dos tipos:
Interrupciones tipo software: RST0, RST1, RST2 …. RST7
Interrupciones tipo hardware: RST5.5, RST 6.5, RST7.5, INTR, TRAP
(la interrupción 5.5 es la que utiliza el teclado)
En las interrupciones tipo hardware, es necesario que para que no tengan máscara, para quitarles las máscara se puede modificar el registro I, o con la instrucción SIM.
También hay que validarlas con la instrucción EI
En la interrupción 7.5 el 8085 salta a la dirección 00CEH, que en este entrenador esta en la ROM, y tiene grabado la siguiente tabla:
Página siguiente |