Agregar a favoritos      Ayuda      Português      Ingles     

Microprocesador 8085




  1. Componentes
  2. Arquitectura
  3. Set de Instrucciones
  4. Diseño básico del sistema para el microprocesador 8085

El siguiente microprocesador fue creado por la empresa Intel en 1977. La alimentación es única: requiere sólo +5V. Esto se debe a la nueva tecnología utilizada para la fabricación llamada HMOS (High performance N-channel MOS) que además permite una mayor integración, llegando a la VLSI (Very Large Scale of Integration o muy alta escala de integración) con más de diez mil transistores (el 8085 no es VLSI, pero sí el 8088, como se verá más adelante).

Tiene incorporado el generador de pulsos de reloj con lo que sólo hace falta un cristal de cuarzo y un par de capacitores externos (para el 8080 se necesitaba el circuito integrado auxiliar que lleva el código 8224).

Además está mejorado en lo que se refiere a las interrupciones. Incluye las 74 instrucciones del 8080 y posee dos adicionales (RIM y SIM) referidas a este sistema de interrupciones y a la entrada y salida serie.

El bus de datos está multiplexado con los ocho bits menos significativos del bus de direcciones (utiliza los mismos pines para ambos buses), con lo que permite tener más pines libres para el bus de control del microprocesador (el 8080 necesitaba un integrado especial, el 8228, para generar el bus de control). Intel produjo ROMs, RAMs y chips de soporte que tienen también el bus multiplexado de la misma manera que el microprocesador. Todos estos integrados forman la familia MCS-85.

Debido a la gran densidad de integración comparado con el 8080, se utilizó mucho este microprocesador en aplicaciones industriales. Sin embargo, para aplicaciones de computación de uso general, se extendió más el uso del microprocesador Z-80 como se indicó en el apartado referente al 8080.

Componentes

Interrupciones

El microprocesador 8085 posee un complejo y completo sistema de interrupciones. Esta uP posee cinco terminales destinados al tratamiento de interrupciones. Recordemos que una interrupción es un artificio hardware/software por el cual es posible detener el programa en curso para que, cuando se produzca un evento predeterminado, después de concluir la instrucción que está ejecutando, efectúe un salto a una determinada subrutina en donde se efectuará el tratamiento de la interrupción; una vez acabado éste, el uP continúa con la instrucción siguiente del programa principal. Así pues, el 8085 dispone de tres formas diferentes de tratar las interrupciones que le llegan por los citados cinco terminales. Los nombres de estos cinco terminales son:

INTR (Interrupt Request): Por esta entrada se introduce una interrupción que es aceptada o no según haya sido previamente indicado por las instrucciones EI (Permitir interrupciones) o DI (No permitir interrupciones). Cuando una interrupción es permitida y ésta se ha producido, la CPU busca una instrucción RST (de un sólo byte), que es presentada por el bus de datos por el periférico que interrumpe. Este byte tiene el formato binario 11 XXX 111. La subrutina se ubicará en la dirección 00 XXX 000.

RST 5.5, RST 6.5 y RST 7.5: Los terminales de RST 5.5 y RST 6.5 detectan la interrupción sólo si la señal que se les aplica es un uno lógico o nivel alto de una cierta duración, lo mismo que la entrada anterior INTR; sin embargo, la entrada de interrupción correspondiente al terminal RST 7.5 se excita por flanco ascendente, es decir, por una transición de cero a uno. Esta transición se memoriza en un biestable en el interior del uP.

Estas interrupciones se pueden habilitar o deshabilitar mediante las instrucciones EI y DI, como en el caso de INTR; pero además son enmascarables por software mediante la instrucción SIM (Set Interrupt Mask). Es posible leer tanto el estado de la máscara como las interrupciones que se han producido y aún no se atendieron mediante la instrucción RIM. TRAP: Es una interrupción no enmascarable que es activada cuando el terminal del mismo nombre se lleva a nivel lógico uno. Esta interrupción es la de más alta prioridad, por lo que puede ser usada para tratar los acontecimientos más relevantes, tales como errores, fallos de alimentación, etc.

Control de entrada/salida serie

Este microprocesador posee dos terminales denominados SID (Serial Input Data) y SOD (Serial Output Data). Estos terminales se pueden usar con propósitos generales. Por ejemplo el terminal SID se puede conectar a un interruptor y el SOD a un LED (a través de una compuerta inversora externa). Para leer el estado del terminal SID se ejecuta la instrucción RIM, con lo que se puede leer en el bit 7 del acumulador el estado de dicho terminal.

Para enviar un dato por el terminal SOD se ejecuta la instrucción SIM, donde el bit 7 del acumulador debe tener el valor a poner en el terminal, y el bit 6 debe estar a uno.

Terminales (pinout) del 8085

Este microprocesador estaba encapsulado en el formato DIP (Dual Inline Package) de 40 patas (veinte de cada lado). La distancia entre las patas es de 0,1 pulgadas (2,54 milímetros), mientras que la distancia entre patas enfrentadas es de 0,6 pulgadas (15,32 milímetros).

Nótese en el gráfico el semicírculo que identifica la posición de la pata 1. Esto sirve para no insertar el chip al revés en el circuito impreso.

Las funciones de las 40 patas con las que se conecta el 8085 con el exterior son las siguientes:

Arquitectura

Set de Instrucciones

Conjunto de Instrucciones

Explicación de cada instrucción

Cuando me refiero a los registros "r" (ya sea r1,r2 o simplemente r) estoy hablando de cualquier registro propio del 8085, A(Acumulador), o los registros B,C,D,E,H,L de 8 bits respectivamente. Estos registros se pueden agrupar por parejas BC,DE,HL (rp) y así formar registros de 16 bits para direccionar una posición de memoria directamente(16 BITS), siendo el par HL el mas importante por tener instrucciones que trabajan directamente con el.

Todas las anteriores:

BYTE= VALOR ENTRE 0 Y FF (0 Y 255 EN DECIMAL)

DOBLE BYTE= DOS BYTES PARA FORMAR 16 BITS

DIRECCION = 16 BITS o 2 BYTES

**Instrucciones Aritmético lógicas:

instrucción código explicación

ADD r 10000RRR Suma al acumulador el registro r y el Resultado queda en el acumulador.

ADD M 10000110 Suma al acumulador el contenido de la posición apuntada por HL y resultado en

acumulador.

ADI 11000110 Suma al acumulador el 2º byte de la Instrucción y resultado en acumulador.

ADC r 10001RRR Suma al acumulador el registro r y el Carry, resultado en acumulador.

ADC M 10001110 Suma a acumulador el contenido de la Posición apuntada por HL y el carry,

result. en acumulador.

ACI 11001110 Suma al acumulador el 2º byte de la Instrucción y el carry y resultado en

acumulador.

SUB r 10010RRR Resta al acumulador el contenido del Registro r y lo deja en el acumulador.

SUB M 10010110 Resta al acumulador el contenido de la Posición que apunta HL y resultado al

acumulador.

SUI 11010110 Resta al acumulador el 2º byte de la

instrucción.

SBB r 10011RRR Resta al acumulador el registro r + el carry.

SBB M 10011110 Resta al acumulador el contenido de la Posición que apunta HL.

SBI 11011110 Resta al acumulador el 2º byte + el carry.

INR r 00RRR100 Incrementa en 1 el registro r.(Z;S;P;AC)

INR M 00110100 Incrementa en 1 el contenido de la Posición que apunta HL (Z;S;P;AC)

DCR r 00RRR101 Decrementa en 1 el registro r (Z;S;P;AC)

DCR M 00110101 Decrementa en 1 el contenido de la Posición que apunta HL (Z;S;P;AC)

INX rp 00RR0011 Incrementa en 1 el par rp de registros.BC,DE,HL

DCX rp 00RR1011 Decrementa en 1 el par rp de registros.BC,DE,HL

DAD rp 00RR1001 Suma a HL el par de registros rp (CY a veces).

DAA 00100111 Los 8 bits del acumulador se ajusta a BCD=decimal.(flags)

ENTRE PARENTESIS() FLAGS AFECTADOS POR LA INSTRUCCION.

Todas las anteriores:

Instrucción código (Hex) instrucción código (Hex)

ADD A 87 ADC A 8F

ADD B 80 ADC B 88

ADD C 81 ADC C 89

ADD D 82 ADC D 8A

ADD E 83 ADC E 8B

ADD H 84 ADC H 8C

ADD L 85 ADC L 8D

ADD M 86 ADC M 8E

SUB A 97 SBB A 9F

SUB B 90 SBB B 98

SUB C 91 SBB C 99

SUB D 92 SBB D 9A

SUB E 93 SBB E 9B

SUB H 94 SBB H 9C

SUB L 95 SBB L 9D

SUB M 96 SBB M 9E

INR A 3C DCR A 3D

INR B 04 DCR B 05

INR C 0C DCR C 0D

INR D 14 DCR C 15

INR E 1C DCR D 1D

INR H 24 DCR H 25

INR L 2C DCR L 2D

INR M 34 DCR M 35

INX B 03 DCX B 0B

INX D 13 DCX D 1B

INX H 23 DCX H 2B

INX SP 33 DCX SP 3B(SP=STACK POINTER)

ADI BYTE C6 DAD B D9

ACI BYTE CE DAD D 19

SUI BYTE D6 DAD H 29

SBI BYTE DE DAD SP 39

DAA 27

**Intrucciones lógicas:

Instrucción código Explicación

ANA r 10100RRR AND entre el acumulador y el registro r (flags, CY=0,AC=1)

ANA M 10100110 AND entre el acumulador y el contenido

De la posición apuntada por HL (flags Ídem)

ANI 11100110 AND entre el acumulador y el 2º byte de La instrucción (flags ídem)

XRA r 10101RRR OR Exclusiva entre el acumulador y el registro r (flags,CY y AC=0)

XRA M 10110110 OR Exclusiva entre el acumulador y el contenido de la posición de HL(flags

ídem)

XRI 11101110 OR Exclusiva entre el acumulador y el 2º Byte de la instrucción(flags ídem)

ORA r 10110RRR OR entre el acumulador y el registro r(flags ídem)

ORA M 10110110 OR entre el acumulador y el contenido de la posición apuntada por HL(flags ídem)

ORI 11110110 OR entre acumulador y 2º byte de la instrucción(ídem)

CMP r 10111RRR Compara el acumulador con el registro r no laterando el contenido del

acumulador(si A=1 Z=1,si A<r CY=1,flags)

CMP M 10111110 Compara el acumulador con el contenido de la posición apuntada por HL (flags

ídem)

CPI 11111110 Compara el acumulador con el 2º byte de la instruc.(ídem)

RLC 00000111 Rotación del contenido del acumulador un lugar a la izquierda(flags, CY y bit 0=

valor bit 7 del acumulador)

RRC 00001111 Rotación del contenido del acumulador un lugar a la derecha(flags, CY y bit 7=

bit 0 del acumulador)

RAL 00010111 Rotación del acumulador un lugar a la izquierda intercalando el CY (CY)

RAR 00011111 iden anterior pero a la derecha (CY)

CMA 00101111 Complementa el contenido edl acumulador bit a bit

CMC 00111111 Complementa el contenido del carry CY(CY)

STC 00110111 Fija CY a 1 (CY)

todas ellas:

instrucción código instrucción código

ANA A A7 XRA A AF

ANA B A0 XRA B A8

ANA C A1 XRA C A9

ANA D A2 XRA D AA

ANA E A3 XRA E AB

ANA H A4 XRA H AC

ANA L A5 XRA L AD

ANA M A6 XRA M AE

ORA A B7 CMP A BF

ORA B B0 CMP B B8

ORA C B1 CMP C B9

ORA D B2 CMP D BA

ORA E B3 CMP E BB

ORA H B4 CMP H BC

ORA L B5 CMP L BD

ORA M B6 CMP M BE

CMA 2F RLC 07

STC 37 RRC 0F

CMC 3F RAL 17

RAR 1F

ANI BYTE E6

XRI BYTE EE

ORI BYTE F6

CPI BYTE FE

**Instrucciones de bifurcación:

instrucción código Explicación

JMP 11000011 Salto a la posición indicada por el 2º y 3º byte de la instrucción, 2º byte=parte

baja,3º=alta

instrucción Flags código Explicación

JZ Z 11FF1010 Salto a la posición indicada en el 2 y 3º byte de

JC CY la instrucción si el flag (FF) tiene valor 1

JPE P

JM S

JNZ Z 11FF0010 ídem si el valor del Flag es cero

JNC CY

JPO P

JP S

PCHL 11101001 Salto a la posición direccionada por HL.

todas ellas:

instrucción código instrucción código

JMP dir. C3 JPO dir. E2

JNZ dir. C2 JPE dir. EA

jz dir. CA JP dir. F2

JNC dir. D2 JM dir. FA

JC dir. DA PCHL E9

**Instrucciones de salto y retorno a subrutinas:

instrucción flags código Explicación

CALL 11001101 Salto a la posición direccionada por el 2º y 3º byte de la

instrucción.Guarda en el STACK el contenido de P.C.(Contador de programa).

CZ Z 11FF1100 Salto a la posición direccionada por el 2º y 3º

CC CY byte de la instrucción si el flag indicado es uno.

CPE P Guarda el P.C. en el stack.

CM S

CNZ Z 11FF1100 ídem anterior pero si el Flag es cero.

CNC CY Guarda el P.C. en el STACK.

CPO P

CP S

RET 11001001 Retorno a la ultima dirección Almacenada en el STACK.

RZ Z 11FF1000 Retorno a la ultima dirección almacenada

RC CY en el STACK solo si el Flag indicado vale 1.

RPE P

RM S

RNZ Z 11FF0000 ídem caso anterior pero si el Flag vale 0.

RNC CY

RPO P

RP S

todas ellas:

instrucción código instrucción código

CALL dir. CD RET C9

CNZ dir. C4 RNZ C0

CZ dir. CC RZ C8

CNC dir. D4 RNC D0

CC dir. DC RC D8

CPO dir. E4 RPO E0

CPE dir. EC RPE E8

CP dir. F4 RP F0

CM dir. FC RM F8

**Otras instrucciones:

instrucción código Explicación

PUSH rp 11RR0101 Guarda el par de registros rp en el Stack.

PUSH PSW 11110101 Guarda el contenido del acumulador y el registro de Flags en el Stack.

POP rp 11RR0001 Carga el el par de registros rp el contenido de las dos ultimas posiciones

del Stack

POP PSW 11110001 Carga el registro de Flags y el Acumulador con las dos ultimas

posiciones del Stack.

XTHL 11100011 Intercambio del contenido de las Posiciones direccionadas por el Stack

por el contenido de los registros H y L.

SPHL 11111001 Traslada el contenido del par HL al Puntero del Stack. Debe ejecutarse al

iniciar el sistema para ubicar el Stack en la zona elegida de la memo ria.

IN port 11011011 Carga el acumulador con el contenido del canal I/O direccionado por el 2º byte de

la instrucción.

OUT port 11010011 Carga el canal I/O direccionado por el 2º byte de la instrucción con el

acumulador.

EI 11111011 Habilita las interrupciones (no afecta a la interrupcion TRAP)

DI 11110011 Deshabilita las interrupciones ( no afecta a TRAP)

HLT 01110110 Detencion y entrada de la cpu hasta que se realice un Reset, una interrupcion

valida o un HOLD.

NOP 00000000 No opera, solo sirve para perder tiempo.

SIM 00110000 Fija el registro de interrupciones y la linea SOD con el valor del acumulador.

Bit 7 del acumulador= sale por linea SOD.

Bit 6 " " = a 1 habilita la linea SOD.

Bit 5 no se usa.

Bit 4 " " = a 1 borra la bascula RST 7,5

Bit 3 = a 1 permite modificar este registro.

Bit 2 = a 1 prohibe la interrupcion 7,5

Bit 1 = a 1 prohibe la " 6,5

Bit 0 = a 1 prohibe la " 5,5

RIM 00100000 Lee el estado de la línea SID y el estado de las interrupciones cargándolo

en el acumulador:

Bit 7 del acumulador con: Lo que tenga la línea SID,

Bit 6 " : a 1 indica que la interrupción 7,5 esta solicitada por ejecutar.

Bit 5 " : iden anterior pero con la 6,5

Bit 4 " : ídem anterior pero con la 5,5

Bit 3 " : a 1 indica que las interrupciones INTR han sido habilitadas. cion EI. Bit 2 " : Estado de la interrupción 7,5

Bit 1 " : Estado de la interrupción 6,5

Bit 0 " : Estado de la interrupción 5,5

RST 11AAA111 Guarda el P.C. en el Stack y lo carga

con la dir:00000000AAA000

Cuando se produce la interrupción INTR, después de aceptarla con INTA hay que

introducir por el bus de datos el código

AAA que será axial:

AAA RST dirección de salto(en HEX.)

000 0 0000

001 1 0008

010 2 0010

011 3 0018

100 4 0020

101 5 0028

110 6 0030

111 7 0038

todas las que quedaban:

instrucción código instrucción código

PUSH B C5 POP B C1

PUSH D D5 POP D D1

PUSH H E5 POP H E1

PUSH PSW F5 POP PSW F1

XTHL E3 SPHL F9

OUT byte D3 IN byte DB

DI F3 EI FB

NOP D0 HLT 78

RIM 20 SIM 30

RST 0 C7 RST 4 E7

RST 1 CF RST 5 EF

RST 2 D7 RST 6 F7

RST 3 DF RST 7 FF

***Y POR ULTIMO LOS FLAGS:

Los flag (bandera en español) es un registro interno de la cpu que indica el estado de una operación después de haberla realizado (más o menos), estos son controlados por la ALU(una cosa interna que hace todas las operaciones aritméticas y lógicas). Pero veamos que son cada uno:

Flags Explicación

S Cuando un resultado ha sido negativo se pone a 1

Z Cuando una operación ha sido cero este se pone a 1

P Indica la paridad de una operación, si es par P=1

CY Se pone a 1 cuando se produce un acarreo en una operación de 8 bits

**P.D. :Siempre el primer byte que se carga (por ejemplo en la instrucción JMP dir.) es el mas bajo y el segundo el mas alto, por lo tanto al lado de las instrucciones que llevan 2º y 3º byte estos indicaran la dirección pero al revés.

Diseño básico del sistema para el microprocesador 8085

La "tarjeta" que posee el sistema básico para hacer funcionar al microprocesador 8085 se muestra en la figura 1.
En ella podemos ver cómo la conexión de la memoria EEPROM se realiza del mismo modo que se ha indicado en la edición anterior.
El banco de memorias RAM estará constituido en este caso por tres unidades tipo 6116, con idéntico modo de conexión en todas sus líneas a excepción de las líneas de selección de chip, que en este caso serán las CS0, CS1 y CS2 procedentes del decodificador 74LS138 (vea Saber 195).
En lo que se refiere a la conexión del 8212, vemos que nada varía respecto a lo que el lector conoce, únicamente debemos mencionar la colocación de una resistencia de 4k7 de "pull-up" a +5V en la señal ALE con el objeto de reafirmar los niveles de tensión en esta salida del microprocesador.
Este mismo sistema se emplea en la parte alta del bus de direcciones en el que se sitúa un bloque de 8 resistencias de 10 k ohm cada una conectadas a +5V.
El decodificador de direcciones 74LS138, sigue el mismo esquema de conexión explicado oportunamente. Ahora además se refuerzan las salidas del mismo colocando un bloque de 8 resistencias de 4k7 a +5V. Puede verso como en este caso las salidas CS0, CS1 y CS2, tomadas de las patas 15, 14 y 13 respectivamente se emplean para direccionar las tres pastillas de memorias RAM que hemos colocado en el sistema.
Puede verse con claridad cómo el microprocesador se sirve de un cristal de cuarzo de 4MHz y un condensador de 18pF, que colocados entre las patas 1 y 2 generan la oscilación que produce la frecuencia de reloj a la que funcionará el sistema. Es decir, se genera la "frecuencia de trabajo".
Destacamos además el circuito situado en la señal de entrada RESET IN del microprocesador (pata 36) formado por una resistencia de 1 k ohm en paralelo con un diodo y un condensador electrolítico de 1 microfarario. Este circuito es el que asegura un arranque correcto del sistema en el momento de conexión a red iniciándose el contador de programa en la dirección 0000H, después de que la patilla 36 haya alcanzado el nivel lógico 1 (ALTO).
Este circuito produce un retardo en el arranque que viene dado aproximadamente por la constante de tiempo RC

En la parte izquierda de la figura 1 puede verse que las señales INTR, TRAP, RST 7.5, RST 6.5, RST 5.5 y HOLD son conectadas directamente a masa para conseguir un correcto funcionamiento del sistema mientras no vayamos a emplearlas.

Estas conexiones deben realizarse individualmente para cada señal y mediante puentes fácilmente eliminables de modo que si en un momento dado, para una determinada aplicación deseamos emplear alguna de ellas, podamos hacerlo sin más que eliminar el puente a masa correspondiente y tratando dicha entrada del modo adecuado.

Además deben colocarse distribuidos sobre la tarjeta condensadores de desacoplo. Lo más usual es situar uno por cada circuito integrado y deberán ir soldados mediante conexiones cortas y a ser posible directamente sobre las patillas de alimentación de los circuitos integrados.

Este es un medio eficaz y sencillo para impedir la creación de señales parásitas de alta frecuencia que son derivadas a masa a través del condensador. Normalmente estos condensadores son de 100nF. Puede apreciarse también cómo la tarjeta dispones, para su conexión a otros circuitos, de cuatro conectores:
CON1: Constituido por 16 líneas en las cuales podemos encontrar el bus de direcciones completo (A0, A1, A2, ..., A15).
CON2: Constituido por 8 líneas en las que podemos encontrar el bus de datos completo (D0, D1, ..., D7).
CON3: Constituido por un total de 24 líneas entre las que encontramos el bus de control, el bloque completo de señales de interrupción (que podremos utilizar desde el exterior eliminando previamente los puentes a masa) y las señales de selección de chip que se toman del decodificador 74LS138.

CON4: Constituido por nueve líneas divididas en dos grupos que sirven para suministrar la alimentación a la tarjeta (+5V y MASA).

Realizadas todas estas consideraciones, no queda más que analizar con detenimiento, las direcciones de memoria que ocupa cada uno de los componentes que integran esta tarjeta y las direcciones que quedan disponibles para futuras ampliaciones.

Como puede deducirse de la figura 1 y apoyándonos en los valores que adquieren las entradas A0, A1, A2 y E3 del decodificador, se tendrá la siguiente distribución de direcciones:
EPROM 27256: Desde 0000H hasta 7FFFH
RAM 6116-1: Desde 8000H hasta 87FFH
RAM 6116-2: Desde 9000H hasta 97FFH
RAM 6116-3: Desde A000h hasta A7FFH

Al mismo tiempo, los terminales del decodificador 74LS138 que quedan libres para añadir nuevos elementos al sistema, responderán a las siguientes direcciones:
CS3 - B000H
CS4 - C000H
CS5 - D000H
CS6 - E000H
CS7 - F000H

Ejemplo de Programas que realiza el microprocesador 8085

1)

;**************************************************

;* Nombre : Simulador de aut¢mata programable *

;* Programador: Esteban Galeano *

;* Fecha: 13 octubre 1995 *

;* Ult. modif: 31 agosto 2000 *

;* Fichero: AUTOMATA.ASM *

;**************************************************

;***************************************************************

;* Se simular  el funcionamiento de un autómata programable, *

;* en cuyo interior hay un circuito MARCHA/PARO. Para ello, *

;* seguir  el siguiente funcionamiento: *

;* *

;* Marcha Paro ³ Salida *

;* ÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ *

;* 0 0 ³ Salida *

;* 0 1 ³ 0 *

;* 1 0 ³ 1 *

;* 1 1 ³ 0 *

;* *

;* HACER *

;* programar(8255); *

;* MIENTRAS PuertoA[7]=1 HACER *

;* valor:=PuertoA[1..0]; *

;* SI *

;* valor=00b -> í *

;* valor=01b -> PuertoB[0]:=0 *

;* valor=10b -> PuertoB[0]:=1 *

;* valor=11b -> PuertoB[0]:=0 (prio PARO) *

;* FSI *

;* FMIENTRAS *

;* MIENTRAS (cierto) *

;***************************************************************

;****************************

;* Definición de ENTORNO *

;****************************

.RADIX H ;Sistema de numeración ser  hexadecimal

;****************************

;* Definición de CONSTANTES *

;****************************

cero: .EQU 0

DirPila: .EQU 1200 ;Dirección desde donde comenzar  la PILA

ByteControl: .EQU 90 ;8255 -> A in - B out - C out

2)

;***********************************************

;* Nombre : Espera visualizable FFFF-0000 *

;* Programador: Esteban Galeano *

;* Fecha: 11 octubre 1995 *

;* Ult. modif: 31 agosto 2000 *

;* Fichero: CONTADOR.ASM *

;***********************************************

;***************************************************************

;* Se le dar  un valor num‚rico a los registros HL y cada 1ms *

;* se decrementar  su valor hasta llegar a cero, momento en el *

;* cual, se terminar  el programa y regresar  al S.O. *

;* *

;* HL:=selecci¢n *

;* HACER *

;* retardo(1ms); *

;* visualiza(HL); *

;* HL:=HL-1; *

;* MIENTRAS (HL<>0) *

;* visualiza(HL); *

;* restaurar; *

;***************************************************************

;****************************

;* Definición de ENTORNO *

;****************************

.RADIX H ;Sistema de numeración ser  hexadecimal

;****************************

;* Definición de CONSTANTES *

;****************************

cero: .EQU 0

DirPila: .EQU 1200 ;Dirección desde donde comenzar  la PILA

selección: .EQU 2000 ;Numero de veces a decrementar

;***************************

;* Inclusión de SUBRUTINAS *

;***************************

.DATA ;Dirección inicial de las subrutinas

.INCLUDE a:rutinas.asm ;Incluye la definición de direcciones de rutinas del S.O.

;***************************

;* Programa PRINCIPAL *

;***************************

.CODE

.ORG 1000 ;Dirección inicial del programa

LXI SP,DirPila ;SP:=DirPila

LXI H,seleccion ;HL:=seleccion

sigue: PUSH H ;Salvar  los registros H y L

CALL delay ;Retardo de 1ms

CALL updad ;Visualiza HL en el campo de direcciones del ®Display¯

POP H ;Recuperar  los registros H y L

DCX H ;HL:=HL-1

MOV A,H ;Si (H<>0) salta

CPI cero

JNZ sigue

MOV A,L ;Si (L<>0) salta

CPI cero

JNZ sigue

;*******************************

;* Visualizar  el Ultimo valor *

;*******************************

PUSH H ;Salvar  los registros H y L

CALL updad ;Visualiza HL en el campo de direcciones del ®Display¯

POP H ;Recuperar  los registros H y L

RST 1

.END

 

Muebles de Oficina, C.A. "MOCA"


Comentarios


Trabajos relacionados

Ver mas trabajos de Hardware

 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.


Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Iniciar sesión

Ingrese el e-mail y contraseña con el que está registrado en Monografias.com

   
 

Regístrese gratis

¿Olvidó su contraseña?

Ayuda