Introducción a las
Download
1 / 70

Introducción a las Interfaces de entrada / salida - PowerPoint PPT Presentation


  • 123 Views
  • Uploaded on

Introducción a las Interfaces de entrada / salida. Puerto de Salida Básico. Registro (Latch). #CE. CLK. #WR. #OE. D0 D7. Q0 Q7. Bus de Datos del Sistema. Salidas. Sintesis en vhdl de un puerto de salida. Entity Salida is port ( HCLK : in std_logic;

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Introducción a las Interfaces de entrada / salida' - aloha


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

Introducción a las

Interfaces de entrada / salida


Puerto de Salida Básico

Registro (Latch)

#CE

CLK

#WR

#OE

D0

D7

Q0

Q7

Bus de Datos

del Sistema

Salidas


Sintesis en vhdl de un puerto de salida

Entity Salida is

port (

HCLK : in std_logic;

RESET : in std_logic;

CS : in std_logic;

WR : in std_logic;

D : in std_logic_vector (7 downto 0);

--Bus datos es siempre entrada

O : out std_logic_vector (7 downto 0)

--Salidas al exterior

);

end Salida;


architecture B2 of Salida is

begin

process (HCLK, RESET)

begin

if RESET = '1' then

O ( 7 downto 0 )<= "00000000";

else

if HCLK = '1' and HCLK'event then -- Flanco de ascendente

if CS = '0' then

if WR = '0' then

O (7 downto 0) <= D ( 7 downto 0 );

end if;

end if;

end if;

end if;

end process;

end B2;




Puerto de Entrada Básico

Puerta de 3 estados

(Transceiver)

#CE

#RD

#OE

O0

O7

I0

I7

Bus de Datos

del Sistema

Entradas


Sintesis en vhdl de un puerto de entrada

entity Entrada is

port (

HCLK : in std_logic;

RESET : in std_logic;

CS : in std_logic;

RD : in std_logic;

D : out std_logic_vector (7 downto 0);

-- Bus Datos es siempre salida

I : in std_logic_vector (7 downto 0)

-- Entradas externas

);

end Entrada;


architecture B2 of Entrada is

Begin

process (HCLK, RESET)

Begin

if RESET = '1' then

D ( 7 downto 0 )<= "ZZZZZZZZ";

else

if HCLK = '1' and HCLK'event then -- Flanco de ascendente

if CS = '0' then -- Acceso al registro solo si CS es 0

if RD = '0' then

D ( 7 downto 0 ) <= I (7 downto 0);

else

D ( 7 downto 0 ) <="ZZZZZZZZ";

-- Si RD esta en 1 el bus esta en "Z"

end if;

else

D ( 7 downto 0 ) <="ZZZZZZZZ";

-- Si CS esta en 1 el bus esta en "Z"

end if;

end if;

end if;

end process;

end B2;




Síntesis en vhdl de un registro interno (sin líneas de entrada ni salida)

entity Registro is

port (

HCLK : in std_logic;

RESET : in std_logic;

CS : in std_logic;

RD : in std_logic;

WR : in std_logic;

D : inout std_logic_vector (7 downto 0)

-- Bus de datos es Entrada/Salida

);

end Registro;


architecture B2 of Registro is entrada ni salida)

Begin

process (HCLK, RESET)

variable REGISTRO : std_logic_vector (7 downto 0) := "00000000";

Begin

if RESET = '1' then

D ( 7 downto 0 )<= "ZZZZZZZZ";

else

if HCLK = '1' and HCLK'event then -- Flanco de ascendente

if CS = '0' then -- Acceso al registro solo si CS es 0

if RD = '0' then

D ( 7 downto 0 ) <= REGISTRO (7 downto 0);

else

D ( 7 downto 0 ) <="ZZZZZZZZ"; -- Si RD = 1, bus en "Z"

if WR = '0' then

REGISTRO (7 downto 0) := D ( 7 downto 0 );

end if;

end if;

else

D ( 7 downto 0 ) <="ZZZZZZZZ"; -- Si CS = 1, bus en "Z"

end if;

end if;

end if;

end process;

end B2;




Generador PWM entrada ni salida)

Contador

Comparador

HCLK

CLK

Q0

Q7

Salida

PWM

Registro

#CE

#WR

#OE

CLK

D0

D7

Q0

Q7

Bus de Datos

del Sistema


entity PWM is entrada ni salida)

port (

HCLK : in std_logic;

RESET : in std_logic;

CS : in std_logic;

RD : in std_logic;

WR : in std_logic;

D : inout std_logic_vector (7 downto 0);

PWM : out std_logic

);

end PWM;


architecture B2 of PWM is entrada ni salida)

Begin

process (HCLK, RESET)

variable REGISTRO : std_logic_vector (7 downto 0) := "00000000";

variable CICLO : std_logic_vector (7 downto 0) := "00000000";

variable CONTADOR : std_logic_vector (7 downto 0) := "00000000";

Begin

if RESET = '1' then

D ( 7 downto 0 )<= "ZZZZZZZZ";

PWM <= '0';

else

if HCLK = '1' and HCLK'event then -- Flanco de ascendente

if CS = '0' then -- Acceso al registro solo si CS es 0

if RD = '0' then

D ( 7 downto 0 ) <= REGISTRO (7 downto 0);

else

D ( 7 downto 0 ) <="ZZZZZZZZ"; -- Si RD es 1 el bus es "Z"

if WR = '0' then

REGISTRO (7 downto 0) := D ( 7 downto 0 );

end if;

end if;

else

D ( 7 downto 0 ) <="ZZZZZZZZ"; -- Si CS es 1 el bus es "Z"

end if;


CONTADOR := CONTADOR +1; entrada ni salida)

if CONTADOR > CICLO then

PWM <= '0';

else

PWM <= '1';

end if;

if CONTADOR = "00000000" then

CICLO := REGISTRO;

end if;

end if;

end process;

end B2;


Puerto de Entrada + Salida Básico entrada ni salida)

#CE

Registro

(Latch)

#WR

#OE

Salida

Bus de Datos

Entrada

Puerta de

3 estados

(Transceiver)

#OE

#RD


Puerto de Entrada + Salida Básico entrada ni salida)

#CE

Registro

(Latch)

#WR

#OE

Salida

Bus de Datos

Entrada

Puerta de

3 estados

(Transceiver)

#OE

#RD


Puerto de Entrada / Salida Programable entrada ni salida)

#CE

Registro

(Latch)

#WR

#OE

Exterior

Salida

Bus de Datos

Entrada

Puerta de

3 estados

(Transceiver)

#OE

#RD


Puerto de Entrada / Salida Programable entrada ni salida)

#CE 1

#WR

#OE

Exterior

#CE

#WR

#OE

Salida

Bus de Datos

Entrada

#OE

#RD


Puerto de Entrada / Salida Programable entrada ni salida)

A0

#WR

#OE

#CE

Exterior

#WR

#OE

Salida

Bus de Datos

Entrada

#OE

#RD


Puerto de Entrada / Salida Programable entrada ni salida)

#CE #WR

A0 #RD

#OE

Lógica de control de lectura y escritura (LCLE)

Exterior

#OE

Salida

Bus de Datos

Entrada

#OE


Puerto de Entrada / Salida Programable entrada ni salida)

#CE #WR

A0 #RD

#OE

Lógica de control de lectura y escritura (LCLE)

Exterior

#OE

Salida

Bus de Datos

Entrada

#OE


Puerto de Entrada / Salida Programable entrada ni salida)

#CE #WR

A0 #RD

#OE

LCLE

Puerta bidireccional de 3 estados (Transceiver)

#OE

Salida

#OE Dd

Entrada

Bus de Datos del sistema

#OE


Puerto de Entrada / Salida Programable con Reset entrada ni salida)

#CE #WR

A0 #RD

RESET

#OE

LCLE

Puerta bidireccional de 3 estados (Transceiver)

#OE

Salida

#OE Dd

Entrada

Bus de Datos del sistema

#OE


Puerto de Entrada / Salida Programable con Reset entrada ni salida)

#CE #WR

A0 #RD

RESET

#OE

LCLE

Puerta bidireccional de 3 estados (Transceiver)

#OE

Salida

#OE Dd

Entrada

Bus de Datos del sistema

#OE


entity IOP is entrada ni salida)

port (

HCLK : in std_logic;

RESET : in std_logic;

CS : in std_logic;

AD0 : in std_logic; --0 = DATOS 1 = DDR

WR : in std_logic;

RD : in std_logic

D : inout std_logic_vector (7 downto 0);

-- El bus de datos es Entrada/Salida

ES : inout std_logic_vector (7 downto 0)

-- Entradas/Salidas al exterior

);

end IOP;


architecture B2 of IOP is entrada ni salida)

Begin

process (HCLK, RESET)

variable DDR : std_logic_vector ( 7 downto 0) :="00000000"; -- 0 = entrada

variable DAT : std_logic_vector ( 7 downto 0) :="00000000";

Begin

if RESET = '1' then

ES ( 7 downto 0 )<= "ZZZZZZZZ";

DDR ( 7 downto 0 ) := "00000000";

DAT ( 7 downto 0 ) := "00000000";

D ( 7 downto 0 )<= "ZZZZZZZZ";

else

if HCLK = '1' and HCLK'event then -- Flanco de ascendente

if CS = '0' then

if WR = '0' then

if AD0 = '0' then

DAT( 7 downto 0 ) := D( 7 downto 0 );

n1: for i in 0 to 7 loop

if DDR(i) = '1' then

ES (i) <= D (i);

else

ES (i) <= 'Z';

end if;

end loop n1;


else entrada ni salida)

DDR( 7 downto 0 ) := D( 7 downto 0 );

n2: for i in 0 to 7 loop

if D(i) = '1' then

ES (i) <= DAT (i);

else

ES (i) <= 'Z';

end if;

end loop n2;

end if;

else

if RD = '0' then

if AD0 = '0' then

n3: for i in 0 to 7 loop

if DDR(i) = '1' then

D (i) <= DAT (i);

else

D (i) <= ES(i);

end if;

end loop n3;

else

D(7 downto 0) <= DDR(7 downto 0);

end if;

else

D( 7 downto 0 ) <= "ZZZZZZZZ";

end if;

end if;


else entrada ni salida)

D( 7 downto 0 ) <= "ZZZZZZZZ";

end if;

end if;

end if;

end process;

end B2;




Puerto de E / S con Pedido de Atención y Bandera entrada ni salida)

Habilitación

INTR

Bandera

Puertas de

3 estados

(Transceiver)

1

#OE

D

Q

#R

Bus de Datos

#OE

Entrada


Puerto de Entrada con Líneas de control y con capacidad de solicitar interrupciones

Bandera

INTR

#OE0

#CE

A0

#WR

#RD

#OE1

Habilitación

LCLE

1

CLK1

D

Q

DAV

#R

#OE

Bus de Datos

#OE1

DAC

#OE

#CE

#OE0

Entradas


8 solicitar interrupciones.

8.

8.

8.

Aplicación

Q7

CE1

Excitación

(Ánodos)

WL

CLK

D7

D0

OE

Q0

CE1

WH

CLK

K3

K2

K1

K0

D15

D8

Q3

Q0

OE

Habilitaciones

(Cátodos)


a solicitar interrupciones

f

b

g

e

c

p

d


ÁNODOS solicitar interrupciones

CÁTODO COMÚN

ÁNODOS


Vcc solicitar interrupciones

a

b

c

d

e

f

g

p

CÁTODO COMÚN

ÁNODOS


ÁNODOS solicitar interrupciones

5.

8.

8.

8.

KHH

KMH

KML

KLL

ULN2003

1 0 0 0


ÁNODOS solicitar interrupciones

8.

8.

3.

8.

KMH

KML

KLL

ULN2003

0 1 0 0


ÁNODOS solicitar interrupciones

8.

9.

8.

8.

KMH

KML

KLL

ULN2003

0 0 1 0


ÁNODOS solicitar interrupciones

8.

8.

8.

6.

KMH

KML

KLL

ULN2003

0 0 0 1


;Subrutina DISP solicitar interrupciones

;Variables utilizadas:

;STATUS : Próximo dígito de Buffer que es necesario refrescar

;BUFFER : Tabla de 8 bytes que contiene los datos para el display y los códigos de habilitación correspondientes

STATUS dw 0

BUFFER db 1, 1 ;LSD , 00000001

db 3, 2 ; , 00000010

db 5, 4 ; , 00000100

db 7, 8 ;MSD; 00001000

;PORT_A : Etiqueta que especifica la dirección del puerto del display

PORT_A equ XXXX


;SUB. DE REFRESCO------------ solicitar interrupciones

DISP PROC NEAR

XOR AX,AX

MOV DX, PORT_A

OUT DX,AX ;APAGA DISPLAY

MOV BX, STATUS ;BUSCA DATOS EN BUFFER

MOV SI, OFFSET BUFFER

MOV AX,(BX+SI)

OUT DX,AX ;ENCIENDE DIGITO

ADD BX, 2 ;APUNTA AL PROXIMO DIGITO EN MEMORIA

AND BX, 7

MOV STATUS,BX

RET


;SUB. DE REFRESCO------------ solicitar interrupciones

DISP PROC NEAR

XOR AX,AX

MOV DX, PORT_A

OUT DX,AX ;APAGA DISPLAY

MOV BX, STATUS ;BUSCA DATOS EN BUFFER

MOV SI, OFFSET BUFFER

MOV AX,(BX+SI)

OUT DX,AX ;ENCIENDE DIGITO

ADD BX, 2 ;APUNTA AL PROXIMO DIGITO EN MEMORIA

AND BX, 7

MOV STATUS,BX

RET


;SUB. DE REFRESCO------------ solicitar interrupciones

DISP PROC NEAR

XOR AX,AX

MOV DX, PORT_A

OUT DX,AX ;APAGA DISPLAY

MOV BX, STATUS ;BUSCA DATOS EN BUFFER

MOV SI, OFFSET BUFFER

MOV AX,(BX+SI)

OUT DX,AX ;ENCIENDE DIGITO

ADD BX, 2 ;APUNTA AL PROXIMO DIGITO EN MEMORIA

AND BX, 7

MOV STATUS,BX

RET


; solicitar interrupcionesSUB. DE REFRESCO------------

DISP PROC NEAR

XOR AX,AX

MOV DX, PORT_A

OUT DX,AX ;APAGA DISPLAY

MOV BX, STATUS ;BUSCA DATOS EN TRABLA

MOV SI, OFFSET BUFFER

MOV AX,(BX+SI)

OUT DX,AX ;ENCIENDE DIGITO

ADD BX, 2 ;APUNTA AL PROXIMO DIGITO EN MEMORIA

AND BX, 7

MOV STATUS,BX

RET


;SUB. DE REFRESCO------------ solicitar interrupciones

DISP PROC NEAR

XOR AX,AX

MOV DX, PORT_A

OUT DX,AX ;APAGA DISPLAY

MOV BX, STATUS ;BUSCA DATOS EN TRABLA

MOV SI, OFFSET BUFFER

MOV AX,(BX+SI)

OUT DX,AX ;ENCIENDE DIGITO

ADD BX, 2 ;APUNTA AL PROXIMO DIGITO EN MEMORIA

AND BX, 7

MOV STATUS,BX

RET


;SUB. DE REFRESCO------------ solicitar interrupciones

DISP PROC NEAR

XOR AX,AX

MOV DX, PORT_A

OUT DX,AX ;APAGA DISPLAY

MOV BX, STATUS ;BUSCA DATOS EN TRABLA

MOV SI, OFFSET BUFFER

MOV AX,(BX+SI)

OUT DX,AX ;ENCIENDE DIGITO

ADD BX, 2 ;APUNTA AL PROXIMO DIGITO EN MEMORIA

AND BX, 7

MOV STATUS,BX

RET


Teclado solicitar interrupciones

C0

C1

Entradas

C2

C3

F0

F1

Teclas

Salidas

F2

F3


TECLADO solicitar interrupciones

0

0

Entradas

0

0

0

1

Salidas

0

0


TECLADO solicitar interrupciones

0

1

Entradas

0

0

0

1

Salidas

0

0


TECLADO solicitar interrupciones

0

0

Entradas

0

0

0

1

Salidas

0

0


TECLADO solicitar interrupciones

0

0

Entradas

0

0

0

1

Salidas

0

0


Teclado solicitar interrupciones

C0

C1

Entradas

C2

C3

F0

F1

Teclas

Salidas

F2

F3


8 solicitar interrupciones.

8.

8.

8.

Aplicación

Q7

CE1

Excitación

(Ánodos)

WL

CLK

D7

D0

OE

Q0

CE1

WH

CLK

K3

K2

K1

K0

D15

D8

Q3

Q0

OE

Habilitaciones

(Cátodos)


Teclado solicitar interrupciones

C0

C1

Entradas

C2

C3

Q0

Q1

Teclas

Q2

Q3


PUERTO_B solicitar interrupciones

Puerta de 3 estados

CE

OE1

RDL

OE2

Entradas

D0

D7

O0

O7

I0

I7


Teclado solicitar interrupciones

I0

I1

Entradas

I2

I3

P

U

E

R

T

O

A

Q0

Q1

Teclas

Q2

Q3


Teclado solicitar interrupciones

I3 I2 I1 I0 I4 I5 I6 I7

Entradas

PUERTO_B

P

U

E

R

T

O

A

Q0

Q1

Teclas

Q2

Q3


Subrutina SCAN : solicitar interrupciones

Variables utilizadas :

TECLA : Código ultima tecla presionada

TECLA db 0

;SUB. DE EXPLORACION DE TECLADO

SCAN PROC NEAR

MOV DX, PORT_B

IN AL, DX

TEST AL, 0F0h

JZ notec

MOV TECLA, AL

notec:

RET


; SUB. HS_INP solicitar interrupciones

; PUNTERO variable que apunta al lugar de almacenamiento

; N variable que contiene el numero de bytes que se van a recibir

; CRSR etiqueta con la dirección del registro de control/estados (Wr/Rd)

; DATR etiqueta con la dirección del registro de entrada

; FLAG etiqueta con todos “0” y un solo “1” en posición de la “Flag”

HS_INP PROC NEAR

TEST N,0FFFFh

JNZ OK_DAT ;salta a recepción

MOV DX, CRSR ;apunta al registro de control

XOR AL,AL

OUT DX,AL ;deshabilita pedido de interrupción

SALE RET

OK_DAT MOV DX, CRSR ;Apunta al registro de estados

IN AL,DX ;verifica si hay dato para leer

TEST AL, FLAG ; “

JZ SALE ;si no hay dato sale

MOV DX, DATR ;apunta al registro de entrada

MOV SI, PUNTERO ;carga el puntero para guardar el dato

IN AL,DX

MOV (SI),AL ;guarda el dato

DEC N ;actualiza contador

INC PUNTERO ;actualiza puntero

RET

ENDP


; SUB. INI solicitar interrupciones_HS_INP

; Parámetros de entrada: BX puntero al área de memoria libre

CX cantidad de datos para almacenar

AL configuracion del puerto

; PUNTERO variable que apunta al lugar de almacenamiento

; N variable que contiene el numero de bytes que se van a recibir

;CRSR etiqueta con la dirección del registro de control/estados (Wr/Rd)

INI_HS_INP PROC NEAR

MOV N, CX

MOV PUNTERO, BX

MOV DX, CRSR

OUT DX,AL

RET

ENDP


ad