Terminales del P 8085 (vistos hasta ahora)pmp/archivos/teoria8y9_2014.pdfTerminales del P 8085...

21
Terminales del P 8085 (vistos hasta ahora) Buses de direcciones y datos Bus de control Alimentación, clock, reset

Transcript of Terminales del P 8085 (vistos hasta ahora)pmp/archivos/teoria8y9_2014.pdfTerminales del P 8085...

Terminales del P 8085(vistos hasta ahora)

Buses de direcciones y datos

Bus de control

Alimentación, clock, reset

Registros internos del P 8085

Instrucciones del P 8085(vistas hasta ahora?)

Transferencia:MVI r,datoMOV r1,r2LDA dirSTA dir

Aritméticas:ADD rSUB rADC rSBB rCMP rINR rDCR r

ADI datoSUI datoACI datoSBI datoCPI dato

Lógicas (bit a bit):ANA rORA rXRA rANI datoORI datoXRI dato

Complemento, rotación, etc.:CMARRCRLCRALRAR

Acceso a I/O:IN portOUT port

Salto:JMP dirJ[cond] dir

Subrutinas:CALL dirRETC[cond] dirR[cond]

Pila:PUSH rpPOP rp

Registros pares:LXI rp,dato16INX rpDCX rpDAD rpLDAX rpSTAX rpLHLD dirSHLD dir

Donde:r = A,B,C,D,E,H,L,Mrp = HL,DE,BC,SPdato = número de 8 bitsdir = dirección de 16 bitsport = dirección de 8 bitsdato16 = número de 16 bits

[cond]:NZZNCCPOPEPM

Resto de las instrucciones del P 8085Quedan por ver:SIMRIM

DAACMCSTC

EIDI

HLT

RST n

PCHLXTHLSPHLXCHG

NOP

Terminales SID y SODTrabajan con las intrucciones RIM y SIM:

Mnemónico: RIM

Código máquina: 00100000 = 20h (opcode)

registro acumuladordespués de la instrucción

5 terminal SID (signal input data)

7 6 5 4 3 2 1 0

Assembler: SIM

Código máquina: 00110000 = 30h (opcode)

registro acumuladorantes de la instrucción

latch

4 terminal SOD (signal output data)

7 6 5 4 3 2 1 0

1

Interrupciones• Para saber si se produce un cambio en algún periférico, podemos preguntar

permanentemente por su estado, con instrucciones conocidas tipo IN o LDA.

• Si la velocidad de esos cambios es muy baja respecto a la frecuencia de lectura, el sistema es muy poco eficiente.

CambióPer_0?

IN Per_0

CALLSub_0

CambióPer_n?

IN Per_n

CALLSub_n

• En general, los periféricos tienen tiempos de cambio >> que el del loop mostrado.

• Esta manera de monitorear los cambios es aceptable si el P no tiene otra cosa que hacer.

• Cuando el P debe realizar otras tareas, como realizar algún cálculo por ejemplo, es probable que no pueda hacer ambas cosas simultáneamente.

Interrupciones• En general, los P trabajan con interrupciones.

• Estas se producen cuando se activa alguna de la/las entrada/s que el P tiene previstas para tal efecto.

• Cuando se produce, el P termina de ejecutar la instrucción en curso y salta a un lugar fijo de la memoria de programa, donde busca el código de operación de la siguiente instrucción.

• Previamente almacena en RAM (pila) la dirección donde debe continuar, luego de la interrupción (retorno).

Interrupciones en el P 8085Existen 5 entradas de interrupciones:

Dirección de salto Prioridad Máscara Sensible aTRAP 0024 Mayor No -

RST 7.5 003C Sí FlancoRST 6.5 0034 Sí NivelRST 5.5 002C Sí Nivel

INTR sin dirección fija Menor Sí -

• La prioridad se refiere a cual interrupción es atendida si llegan dos pedidos simultáneos.

• Para que las interrupciones enmascarables puedan ser atendidas, deben ser previamente habilitadas (quitar máscaras).

• Existe una máscara o habilitación general que afecta a todas

• También, en el caso de RST7.5, RST6.5 y RST5.5, existen máscaras individuales.

Interrupciones en el P 8085• La RST7.5 se activa por flanco (un biestable retiene la transición) mientras que la 6.5 y la

5.5 se activan por nivel.

• Todas las máscaras correspondientes a una interrupción deben quitarse para que esta pueda ser atendida.

• Cuando se atiende una interrupción cualquiera, se activa automáticamente la máscara general de interrupciones, la cual debe ser quitada por software (EI), para que a continuación se puedan seguir atendiendo otras interrupciones.

• Cuando el µP se resetea quedan puestas todas las máscaras.

Terminales del P 8085asociados a las interrupciones

Entradas de interrupción:

TRAP: interrupción no-enmascarable de mayor prioridad.

RST7.5: interrupción enmascarable (sensible al flanco ascendente).

RST6.5, RST5.5: interrupciones enmascarables (por nivel).

INTR: interrupción de propósito general

/INTA: reconocimiento del pedido a través de INTR

Otros terminales especiales:

HOLD: indica que algún periférico está pidiendo eluso de los buses (dirección, datos y control).

HLDA: indica que el P ha recibido el pedido de HOLD y liberará los buses en el próximo clock.

* HOLD y HLDA son usados normalmente por periféricos que realizan acceso directo a memoria (DMA).

Instrucciones del P 8085asociadas a las interrupciones

SIM setea máscaras individuales,resetea el FF de la RST7.5,fija estado de la pata SID.

RIM lee estado de máscaras individuales,lee estado de habilitación de interrupciones (máscara general),lee estado de interrupciones pendientes,lee estado de terminal SID.

EI habilita interrupciones (quita máscara general).

DI inhibe interrupciones (pone máscara general).

HLT pone al P en estado de detención (halt)(bajo consumo, preserva contenido de registros)

Formato del acumulador antes de la instrucción SIM:

SOD Bit que fija el estado del pin SOD de µP, si SOE esta en uno

SOE Si este bit es uno, SOD puede cambiar según el valor del bit 7, pero si es cero SOD no cambia

R7.5 Si este bit es 1 se resetea el flip flop de la interrupción RST 7.5 (sin importar si la interrupción 7.5 está enmascarada o no)

MSE Un cero en este bit inhabilita la posibilidad de cambiar las máscaras 7.5, 6.5 y 5.5

M7.5 Máscara de la Interrupción 7.5 (un cero la habilita un uno la inhabilita)M6.5 Máscara de la Interrupción 6.5 (un cero la habilita un uno la inhabilita)M5.5 Máscara de la Interrupción 5.5 (un cero la habilita un uno la inhabilita)

InterrupcionesEl registro de máscaras no es accesible directamente, pero puede ser escrito y leido por medio de las instrucciones SIM y RIM, usando el acumulador:

SIM reg. máscaras A

7 6 5 4 3 2 1 0

SOD SOE X R7.5 MSE M7.5 M6.5 M5.5

Formato del acumulador después de la instrucción RIM:

SID Estado del pin SID del µP

I7.5I6.5I5.5 Indican si hay alguna interrupción pendiente

IE Indica si están habilitadas las interrupciones en general (máscara general quitada)

M7.5M6.5M5.5 Indican el estado actual de las máscaras individuales

Interrupciones

RIM A reg. máscaras

7 6 5 4 3 2 1 0

SID I7.5 I6.5 I5.5 IE M7.5 M6.5 M5.5

Ejemplo 1: uso de interrupciones

Dir. Assembler

0000 JMP 0100h ; Salta al comienzo del programa...

003C DCR B ; Atención de la interrupción 7.5, decrementa contador003D RET...

0100 LXI SP,2100h ; Inicializa el SP apuntando a memoria RAM0103 MVI A,080105 SIM ; Quita todas las máscaras de las interrupciones0106 MVI B,0Ch ; Carga el contador con el valor inicial (12)0108 EI ; Habilita las interrupciones (máscara general)0109 HLT ; Entra en estado de halt010A MOV A,B010B ORA A ; Verifica si el contador llegó a cero010C JNZ 0108h

010F MVI A,FFh0111 STA 1000h ; Cuando el contador llega a cero se escribe FFh en la 0114 HLT ; dirección 1000h y se termina el programa

Realizar un programa que cuente 12 pulsos de una señal de entrada (conectada a la interrupción rst7.5) y termine:

INT7.5

INT6.5

Ejemplo 2: contador de pulsos

No se cuentan

No se cuentan

Se cuentan

Realizar un programa que permita contar cuantos pulsos hay en una señal de entrada, mientras otra entrada de control está en alto.

Señal de control

Señal de entrada

µP

Señal de Control

Señal de Entrada

Ejemplo 2: contador de pulsos

- Inicialización- Cargar SP- Quitar máscara 6.5

INICIO

Habilitar interrupción

INT6.5

RET

Habilitar int7.5

Sigue señal de control?

Mostrar resultado

INT7.5

Incrementar contador

RETSí

No (programa principal)

(subrutinas)

Ejemplo 2: contador de pulsos

.org h'0000jmp start ; Salta al comienzo del programa principal

.org h'003C ; Se ubica en la posición donde esta la int 7.5jmp int75 ; Salta a la etiqueta int75 donde se atiende esta

; interrupción..org h'0034 ; Se ubica en la posición donde esta la int 6.5jmp int65 ; Salta a la etiqueta int65 donde se atiende esta

; interrupción.

;******************PROGRAMA PRINCIPAL***********************************

.org h'0050

start: lxi sp,h'20FF ; Inicializa el stack pointermvi b,h'00 ; Se pone el contador de pulsos en ceromvi a,b'00011101 ; Se ponen máscaras sobre la 5.5 y 7.5sim ; y se quita la correspondiente a la 6.5

; además se borra el FF de la 7.5

sigue: ei ; Se habilitan las interrupciones y se entrajmp sigue ; en un loop infinito...

Programa principal:

Ejemplo 2: contador de pulsos

;*********** INTERRUPCION 6.5 **********************************************

int65: mvi a,b'0011011 ; Pone máscara a la 6.5 y a la 5.5 y limpia sim ; el FF de la 7.5

loop: ei ; A partir de aquí solo está habilitada la 7.5rimani h'20 ; Pregunta si sigue la entrada de la 6.5jnz loop ; en alto para mantener la 7.5 habilitadamov a,b ; Cuando la señal de control baja termina deout 00 ; contar y muestra el resultado.mvi b,h'00 ; Prepara el contador para la próxima mediciónmvi a,b'00011101 ; Se ponen máscaras sobre la 5.5 y 7.5,sim ; se quita la correspondiente a la 6.5

; y de paso se borra el FF de la 7.5ret

;*************** INTERRUPCION 7.5 ******************************************

int75: inr b ; Incrementa el contadorret

.end

Subrrutinas:

Ejemplo 3: reloj de tiempo real

INT7.5

µP

Señal de entrada (50 Hz)INT7.5

RET

Guardar “estado”en la pila

contador = 50?

Recuperar “estado”de la pila

No

Incrementarcontador

contador = 0

“Incrementa la hora en un segundo”

Ejemplo 3: reloj de tiempo real

.ORG h'0000JMP start ; Salta al comienzo del programa principal

.ORG h'003C ; Se ubica en la posición donde esta la rst7.5JMP rtc ; Salta a la etiqueta rtc donde se atiende esta

; interrupción.

;******************DEFINE ETIQUETAS*************************************Segundos .EQU h’3000Minutos .EQU h’3001Horas .EQU h’3002

Contador .EQU h’3003

;******************PROGRAMA PRINCIPAL***********************************.ORG h'0100

start: LXI SP,h'20FF ; Inicializa el stack pointer

MVI A,17 ; Fija como hora inicial las 17:13:30STA HorasMVI A,13STA MinutosMVI A,30STA Segundos

MVI A,b'00011011 ; Se ponen máscaras sobre la 5.5 y 6.5SIM ; y se quita la correspondiente a la 7.5EI ; Se habilitan las interrupciones.. . ; El programa principal continua. ; con lo suyo...

Inicialización y programa principal:

Ejemplo 3: reloj de tiempo real

;****** INTERRUPCION 7.5 ******

rtc: PUSH PSW ; guarda acumulador y flags en la pilaPUSH HL ; guarda contenido de HLLXI HL,ContadorDCR M ; decrementaJNZ volver ; y retorna si no llegó a cero...

cont: MVI M,50

LXI HL,Segundos ; apunta a SegundosINR M ; incrementa los segundosMVI A,60CMP MJNZ volverMVI M,0 ; si dió 60, lo vuelve a 0

INX HL ; apunta a MinutosINR M ; incrementa los minutosCMP MJNZ volverMVI M,0 ; si dió 60, lo vuelve a 0

INX HL ; apunta a HorasINR M ; incrementa las horasMVI A,24CMP MJNZ volverMVI M,0 ; si dió 24, lo vuelve a 0

volver: POP HL ; recupera el contenido original de POP PSW ; los registros H, L, A y flagsEI ; habilita interrupcionesRET

Subrrutina que atiende a la rst7.5: