Practicas VHDL Ene-Jun 2014

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 135

_DISEO DIGITAL CON VHDL_

INSTITUTO TECNOLGICO DE
CHIHUAHUA

Prcticas Diseo Digital II ene-jun 2014


18 de Junio de 2014

Ing. Carlos Gasson Espinoza

Integrantes:

Irving Hernndez Gallegos 12060397


Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468

Diseo digital con VHDL

_DISEO DIGITAL CON VHDL_

INSTITUTO TECNOLGICO DE
CHIHUAHUA

Prctica #1

Detector de Secuencia con Registro de Corrimiento


28 de Febrero de 2014

Ing. Carlos Gasson Espinoza

Integrantes:

Irving Hernndez Gallegos 12060397


Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468

Diseo digital con VHDL

NDICE
MARCO TERICO
LGICA SECUENCIAL
LENGUAJE VHDL
MQUINA DE ESTADO FINITO
GAL: GENERIC ARRAY LOGIC

3
3
3
3
3

OBJETIVO

MATERIAL

DESARROLLO

CDIGO EN VHDL DE LA MQUINA DE ESTADOS


TABLA DE TRANSICIN DE ESTADOS
COMPILACIN DEL CDIGO
UTILIZACIN DEL DISPOSITIVO
PINOUT
SIMULACIN
REGISTRO DE CORRIMIENTO
CDIGO
COMPILACIN
PINOUT Y UTILIZACIN
SIMULACIN

CONCLUSIONES

6
8
9
9
10
10
11
11
12
12
13

13

Diseo digital con VHDL

Marco Terico
Lgica secuencial
La lgica secuencial es un tipo de circuito de lgica que salida dependa no slo de la actual
entrada pero tambin de la historia de la entrada. Esto est en contraste con lgica
combinacional, del que salida es una funcin, y solamente de, la actual entrada. Es decir la
lgica secuencial tiene almacenaje (memoria) mientras que la lgica combinacional no.
Lenguaje VHDL
Los estudios para la creacin del lenguaje VHDL (VHSIC HDL) comenzaron en el ao
1981, bajo la cobertura de un programa para el desarrollo de Circuitos Integrados de Muy
Alta Velocidad (VHSIC), del Departamento de
Defensa de los Estados Unidos. En 1983 las compaas Intermetrics, IBM y Texas
Instruments obtuvieron la concesin de un proyecto para la realizacin del lenguaje y de
un conjunto de herramientas auxiliares para su aplicacin.
Finalmente, en el ao 1987, el lenguaje VHDL se convierte en la norma IEEE-1076 como
todas las normas IEEE, se somete a revisin peridica, por lo que en 1993 sufri algunas
leves modificaciones.
Mquina de estado finito
Se denomina mquina de estados a un modelo de comportamiento de un sistema con
entradas y salidas, en donde las salidas dependen no slo de las seales de entradas actuales
sino tambin de las anteriores.
Las mquinas de estados se definen como un conjunto de estados que sirve de intermediario
en esta relacin de entradas y salidas, haciendo que el historial de seales de entrada
determine, para cada instante, un estado para la mquina, de forma tal que la salida depende
nicamente del estado y las entradas actuales.
Una mquina de estados se denomina mquina de estados finitos (FSM por finite state
machine) si el conjunto de estados de la mquina es finito, este es el nico tipo de mquinas
de estados que podemos modelar en un computador en la actualidad; debido a esto se
suelen utilizar los trminos mquina de estados y mquina de estados finitos de forma
intercambiable.
GAL: Generic Array Logic
Un GAL es un componente electrnico programable que permite construir circuitos
digitales. La familia completa es llamada PLD (Dispositivo lgico programable).

Diseo digital con VHDL

El uso principal es minimizar la cantidad de circuitos integrados (y as bajar el costo y


tamao del equipo).
Por lo general, es posible sintetizar cualquier circuito del tipo suma de productos
(minitrminos) y en algunos dispositivos tambin circuitos secuenciales (aunque por lo
general muy sencillos).
Una GAL permite implementar cualquier expresin en suma de productos con un nmero
de variables definidas. El proceso de programacin consiste en activar o desactivar cada
celda E2CMOS con el objetivo de aplicar la combinacin adecuada de variables a cada
compuerta AND y obtener la suma de productos.
Las celdas E2CMOS activadas conectan las variables deseadas o sus complementos con las
apropiadas entradas de las puertas AND. Las celdas E2CMOS estn desactivadas cuando
una variable o su complemento no se utiliza en un determinado producto. La salida final de
la puerta OR es una suma de productos. Cada fila est conectada a la entrada de una puerta
AND, y cada columna a una variable de entrada o a su complemento. Mediante la
programacin se activa o desactiva cada celda E2CMOS, y se puede aplicar cualquier
combinacin de variables de entrada, o sus complementos, a una puerta AND para generar
cualquier operacin producto que se desee. Una celda activada conecta de forma efectiva su
correspondiente fila y columna, y una celda desactivada desconecta la fila y la columna.
Las celdas se pueden borrar y reprogramar elctricamente. Una celda E2CMOS tpica
puede mantener el estado en que se ha programado durante 20 aos o ms. Las macroceldas
lgicas de salida (OLMCs) estn formadas por circuitos lgicos que se pueden programar
como lgica combinacional o como lgica secuencial. Las OLMCs proporcionan mucha
ms flexibilidad que la lgica de salida fija de una PAL.

Diseo digital con VHDL

http://pdf.datasheetcatalog.net/datasheets/400/91494_DS.pdf

Diseo digital con VHDL

Objetivo
Disear un circuito sncrono detector de secuencia paridad impar de dos bits con el modelo
Mealy. Este circuito debe detectar la secuencia de una seal W dando como salida Z=1 si la
secuencia es impar, Z=0 de lo contrario.
Material
Dos GAL22V10
Protoboard
Dip switch
Fuente de voltaje
LEDs
Cable telefnico
Software
Galaxy Wrap
Proteus ISIS
Desarrollo
Mquina de estado finito Detector de Secuencia paridad par
Z=1 Cuando w = 11 o 00 ; Z=0 de lo contrario.
Cloc
k
W
z

T0

T1

T2

T3

T4

T5

T6

T7

T8

T9

0
0

1
0

1
1

0
0

0
1

1
0

0
0

1
0

1
1

0
0

Diseo digital con VHDL

D
iseo en Flip-Flop tipo D

Diseo digital con VHDL

Diseo digital con VHDL

Simulacin Proteus

Diseo en Flip-Flop JK

Diseo digital con VHDL

Simulacin en Proteus

Diseo digital con VHDL

Cdigo en VHDL de la mquina de estados


-- DETECTOR DE SECUENCIA PARIDAD PAR
-- si W es 00 o 11 Z=1
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SEC IS
PORT(CLOCK, RESETN, W: IN STD_LOGIC;
Z
: OUT STD_LOGIC);
END SEC;
ARCHITECTURE FSM OF SEC IS
TYPE STATE_TYPE IS (A, B, C);
SIGNAL Y: STATE_TYPE;
BEGIN
PROCESS (RESETN, CLOCK)
BEGIN
IF RESETN = '0' THEN
Y<= A;
ELSIF(CLOCK'EVENT AND CLOCK='1') THEN
CASE Y IS
WHEN A=>
IF W='0' THEN Y<= B;
ELSE Y<= C;
END IF;
WHEN B=>
IF W='0' THEN Y<= B;
ELSE Y<= C;
END IF;
WHEN C=>
IF W='0' THEN Y<= B;
ELSE Y<= C;
END IF;
END CASE;
END IF;
END PROCESS;
PROCESS(Y,W)
BEGIN
CASE Y IS
WHEN A=>
Z<= '0';
WHEN B=>
Z<= not W;
WHEN C=>
Z<= W;
-when others Z<= '0';
END CASE;
END PROCESS;
END FSM;

Diseo digital con VHDL

Compilacin del cdigo para el detector de secuencia

Pinout
C22V10
__________________________________________
clock =| 1|
|24|* not used
w =| 2|
|23|= (ySBV_1)
resetn =| 3|
|22|* not used
not used *| 4|
|21|* not used
not used *| 5|
|20|* not used
not used *| 6|
|19|* not used
not used *| 7|
|18|* not used
not used *| 8|
|17|* not used
not used *| 9|
|16|* not used
not used *|10|
|15|= (ySBV_0)
not used *|11|
|14|= z
not used *|12|
|13|* not used
__________________________________________

Diseo digital con VHDL

Utilizacin del dispositivo


Description
Used Max
______________________________________
| Dedicated Inputs | 2 | 11 |
| Clock/Inputs
| 1 | 1 |
| I/O Macrocells | 3 | 10 |
______________________________________
6 / 22 = 27 %
Simulacin

Diseo digital con VHDL

Registro de corrimiento
Este ser la seal de entrada para nuestro detector de secuencia. Mediante el dipswitch
ingresaremos un vector de bits, luego los cargaremos con el botn load.
Cdigo
-- REGISTRO DE CORRIMIENTO ENTRADA PARALELO SALIDA SERIE
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY REGISTRO IS
PORT(P: IN STD_LOGIC_VECTOR(9 DOWNTO 0);
CLOCK, LOAD: IN STD_LOGIC;
S: BUFFER STD_LOGIC_VECTOR(9 DOWNTO 0));
-- Buffer es el equivalente a un INOUT con la
-- diferencia que una sola fuente puede escribir sobre l.
END REGISTRO;
ARCHITECTURE CORRIMIENTO OF REGISTRO IS
BEGIN
PROCESS
BEGIN
WAIT UNTIL CLOCK'EVENT AND CLOCK='1';
IF LOAD='1' THEN
S<=P;
ELSE
S(0)<=S(1);
S(1)<=S(2);
S(2)<=S(3);
S(3)<=S(4);
S(4)<=S(5);
S(5)<=S(6);
S(6)<=S(7);
S(7)<=S(8);
S(8)<=S(9);
S(9)<=S(0);
END IF;
END PROCESS;
END CORRIMIENTO;

Diseo digital con VHDL

Compilacin

Pinout y utilizacin
Description
Used Max
______________________________________
| Dedicated Inputs | 11 | 11 |
| Clock/Inputs
| 1 | 1 |
| I/O Macrocells | 10 | 10 |
______________________________________
22 / 22 = 100 %

Diseo digital con VHDL

Simulacin

Diseo digital con VHDL

CIRCUITO ARMADO

Diseo digital con VHDL

Conclusiones
Para el detector de secuencia utilizamos el modelo de Mealy puesto que queremos obtener
la salida al momento. En el cdigo de este tuvimos que separar en dos process los cambios
de estados y la salida ya que como se desea en este modelo la salida depende de la entrada
tanto como de los estados previos, si no se separaran los process la salida no tomara en
cuenta los valores de w anteriores.
Para el registro de corrimiento se declara un bit_vector que almacena las 10 entradas
ingresadas para luego mostrarlas en una nica salida tipo beffer la cual sirve como
entrada/salida.

Diseo digital con VHDL

_DISEO DIGITAL CON VHDl_

INSTITUTO TECNOLGICO DE
CHIHUAHUA

Prctica No.2

Contador con Display Multiplexado en VHDL


3 de Marzo de 2014

Profesor. Ing. Carlos Gasson Espinoza

Integrantes:

Irving Hernndez Gallegos 12060397


Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468

Diseo digital con VHDL

NDICE
MARCO TERICO
LENGUAJE VHDL
GAL: GENERIC ARRAY LOGIC

4
4
4

OBJETIVO

MATERIAL

DESARROLLO

DISEO DEL CONTADOR SNCRONO


CDIGO EN VHDL DEL CONTADOR USANDO EL MODELO DE MOORE
COMPILACIN DEL CONTADOR
PINOUT
SIMULACIN
UTILIZACIN DE HARDWARE
DISEO DEL DISPLAY MULTIPLEXADO EN VHDL
CDIGO
COMPILACIN
PINOUT
SIMULACIN

6
7
8
9
9
10
10
10
11
12
12

CIRCUITO ARMADO

13

CONCLUSIONES

14

Diseo digital con VHDL

Marco Terico
Multiplexor
Los multiplexores son circuitos combinacionales con varias entradas y una nica salida de
datos, estn dotados de entradas de control capaces de seleccionar una, y slo una, de las
entradas de datos para permitir su transmisin desde la entrada seleccionada hacia dicha
salida.
En el campo de la electrnica el multiplexor se utiliza como dispositivo que puede recibir
varias entradas y transmitirlas por un medio de transmisin compartido. Para ello lo que
hace es dividir el medio de transmisin en mltiples canales, para que varios nodos puedan
comunicarse al mismo tiempo.
GAL: Generic Array Logic
Un GAL es un componente electrnico programable que permite construir circuitos
digitales. La familia completa es llamada PLD (Dispositivo lgico programable).
Una GAL permite implementar cualquier expresin en suma de productos con un nmero
de variables definidas. El proceso de programacin consiste en activar o desactivar cada
celda E2CMOS con el objetivo de aplicar la combinacin adecuada de variables a cada
compuerta AND y obtener la suma de productos.
Mquinas de estado finito

Diseo digital con VHDL

http://pdf.datasheetcatalog.net/datasheets/400/91494_DS.pdf

Diseo digital con VHDL

Objetivo
Con el uso del lenguaje VHDL disear un contador sncrono con la secuencia; 00, 48, 79,
98 y desplegar la cuente en dos displays multiplexados.
Material
Dos GAL22V10
Protoboard
2 Push buttons
Fuente de voltaje
LEDs
2 Displays de 7 segmentos
Cable telefnico
Software
Galaxy Wrap
Proteus ISIS
Desarrollo

Diseo del contador sncrono


Mquina de estado finito del contador
Cuando w = 1 avanza la cuenta
Cuando w = 0 permanece en el estado presente

Diseo digital con VHDL

Cdigo en VHDL del contador usando el modelo de MOORE


-- CONTADOR EN BCD; 00-48-79-98
-- CUANDO W=1 PASA AL EDO. SIGUIENTE
-- CUANDO W=0 SE QUEDA EN EL EDO. PRESENTE
-- FSM MODELO MOORE
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CONTADOR IS
PORT(CLOCK, RESETN, W: IN STD_LOGIC;
DEC, UNI: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END CONTADOR;
ARCHITECTURE FSM OF CONTADOR IS
TYPE STATE_TYPE IS (A, B, C, D);
SIGNAL Y: STATE_TYPE;
BEGIN
PROCESS(CLOCK, RESETN)
BEGIN
IF RESETN='0' THEN
Y<=A;
ELSIF(CLOCK'EVENT AND CLOCK='1')THEN
CASE Y IS
WHEN A=>
IF W='0' THEN
Y<=A;
ELSE
Y<=B;
END IF;
WHEN B=>
IF W='0' THEN
Y<=B;
ELSE
Y<=C;
END IF;
WHEN C=>
IF W='0' THEN
Y<=C;
ELSE
Y<=D;
END IF;
WHEN D=>
IF W='0' THEN
Y<=D;
ELSE
Y<=A;
END IF;
END CASE;

Diseo digital con VHDL

END IF;
END PROCESS;
Process(Y,w)
begin
if y=A then
DEC<="0000";
UNI<="0000";
end if;
if Y=B then
DEC<="0100";
UNI<="1000";
end if;
if Y=C then
DEC<="0111";
UNI<="1001";
end if;
if Y=D then
DEC<="1001";
UNI<="1000";
end if;
end process;
END FSM;

Compilacin del contador

Diseo digital con VHDL

Pinout

Simulacin

Diseo digital con VHDL

Utilizacin de hardware

Diseo del Display Multiplexado en VHDL


El segundo gal recibir dos vectores en BCD las cuales tendr que decodificarla a 7
segmentos para que los displays los puedan desplegar.
Cdigo
-- MULTIPLEXOR PARA EL CONTADOR 00-48-79-98
-- RECIBE LOS CODIGOS BCD, LOS CONVIERTE A 7 SEGMENTOS
-- Y LOS DESPLIEGA EN DOS DISPLAYS MULTIPLEXADOS.
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY PLEXOR IS
PORT(DEC, UNI: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
CLOCK: IN BIT;
Z: OUT STD_LOGIC_VECTOR(0 TO 6);
GNDD, GNDU: OUT STD_LOGIC);
END PLEXOR;
ARCHITECTURE MULTI OF PLEXOR IS
BEGIN
PROCESS(CLOCK, DEC, UNI)
BEGIN
IF (CLOCK='1') THEN
CASE DEC IS
--abcdefg-WHEN "0000"=>Z<="1111110"; -- 0
WHEN "0100"=>Z<="0110011"; -- 4
WHEN "0111"=>Z<="1110000"; -- 7
WHEN "1001"=>Z<="1111011"; -- 9

Diseo digital con VHDL

WHEN OTHERS=>Z<="0000000";
END CASE;
GNDD <= '0';
GNDU <= '1';
ELSIF(CLOCK ='0')THEN
CASE UNI IS
--abcdefg-WHEN "0000"=>Z<="1111110"; -- 0
WHEN "1000"=>Z<="1111111"; -- 8
WHEN "1001"=>Z<="1111011"; -- 9
WHEN OTHERS=>Z<="0000000";
END CASE;
GNDD <= '1';
GNDU <= '0';
END IF;
END PROCESS;
END MULTI;

Compilacin

Diseo digital con VHDL

Pinout

Simulacin

Diseo digital con VHDL

CIRCUITO ARMADO

Diseo digital con VHDL

Conclusiones
La prctica consiste de la siguiente manera; en el GAL 1 est el programa del contador el
cual manda la salida al GAL 2 en dos vectores con los nmeros BCD, este ltimo GAL lo
decodifica a 7 segmentos para luego desplegarlos a los displays, adems enva las seales
de tierra para el display correspondiente.
Para el contador empleamos el modelo de Moore ya que es la manera ms simple para
realizarlo. Mediante un Push button externo es posible modificar el valor de w y como
consecuencia el orden de la cuenta.

Diseo digital con VHDL

_DISEO DIGITAL CON VHDl_

INSTITUTO TECNOLGICO DE
CHIHUAHUA

Prctica No.3

Diseo de un procesador discreto de 4 bits VHDL


9 de Abril de 2014

Profesor. Ing. Carlos Gasson Espinoza

Integrantes:

Irving Hernndez Gallegos 12060397


Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468

NDICE
Diseo digital con VHDL

MARCO TERICO
PROCESADOR
CDIGOS DE INSTRUCCIN
REGISTROS

5
5
5
6

OBJETIVO

MATERIAL

DESARROLLO

DISEO DEL PROCESADOR


LISTA DE INSTRUCCIONES
AGRUPAMIENTO DE MICROPERACIONES
PLANTILLA DE OPERACIONES
ARQUITECTURA DEL PROCESADOR
CDIGO EN VHDL DEL TIMER ASCENDENTE DE 4 BITS
COMPILACIN DEL CONTADOR
PINOUT Y UTILIZACIN DE HARDWARE TIMER
SIMULACIN TIMER
DISEO DE LA UC
CDIGO DE LA UC
COMPILACIN UC
PINOUT Y UTILIZACIN DE HARDWARE
SIMULACIN

6
7
8
8
9
10
11
11
12
13
13
14
14
15

CIRCUITO ARMADO

16

CONCLUSIONES

16

Diseo digital con VHDL

Marco Terico
Procesador
El microprocesador (o simplemente procesador) es el circuito integrado central y ms
complejo de un sistema informtico; a modo de ilustracin, se le suele llamar por analoga
el cerebro de un computador. Es un circuito integrado conformado por millones de
componentes electrnicos. Constituye la unidad central de procesamiento (CPU) de un PC
catalogado como microcomputador.
Es el encargado de ejecutar los programas, desde el sistema operativo hasta las aplicaciones
de usuario; slo ejecuta instrucciones programadas en lenguaje de bajo nivel, realizando
operaciones aritmticas y lgicas simples, tales como sumar, restar, multiplicar, dividir, las
lgicas binarias y accesos a memoria.
Esta unidad central de procesamiento est constituida, esencialmente, por registros, una
unidad de control, una unidad aritmtica lgica (ALU) y una unidad de clculo en coma
flotante (conocida antiguamente como coprocesador matemtico).
Cdigos de instruccin
Una instruccin es una operacin elemental que el procesador puede cumplir Las
instrucciones se almacenan en la memoria principal, esperando ser tratadas por el
procesador. Las instrucciones poseen dos campos:

El cdigo de operacin, que representa la accin que el procesador debe ejecutar;


El cdigo operando, que define los parmetros de la accin. El cdigo operando
depende a su vez de la operacin. Puede tratarse tanto de informacin como de una
direccin de memoria.

Cdigo de Operacin

Campo de Operacin

El nmero de bits en una instruccin vara de acuerdo al tipo de informacin (entre 1 y 4


bytes de 8 bits).
Las instrucciones pueden agruparse en distintas categoras. A continuacin presentamos
algunas de las ms importantes:

Acceso a Memoria: acceso a la memoria o transferencia de informacin entre


registros.
Operaciones Aritmticas: operaciones tales como suma, resta, divisin o
multiplicacin.
Operaciones Lgicas: operaciones tales como Y, O, NO, NO EXCLUSIVO, etc.
Diseo digital con VHDL

Control: controles de secuencia, conexiones condicionales, etc.

Registros
Cuando el procesador ejecuta instrucciones, la informacin almacena en forma temporal en
pequeas ubicaciones de memoria local de 8, 16, 32 o 64 bits, denominadas registros.
Dependiendo del tipo de procesador, el nmero total de registros puede variar de 10 a
varios cientos.
Los registros ms importantes son:

El registro acumulador (ACC), que almacena los resultados de las operaciones


aritmticas y lgicas;
El registro de estado (PSW, Processor Estado: Word o Palabra de Estado del
Procesador), que contiene los indicadores de estado del sistema (lleva dgitos,
desbordamientos, etc.);
El registro de instruccin (RI), que contiene la instruccin que est siendo
procesada actualmente;
El contador ordinal (OC o PC por Program Counter, Contador de Programa), que
contiene la direccin de la siguiente instruccin a procesar;
El registro del bfer, que almacena informacin en forma temporal desde la
memoria.

Objetivo
Disear un procesador discreto de 4 bits con al menos tres operaciones e incorporar un
ALU (Unidad Lgica Aritmtica).
Material
Dos GAL22V10
Protoboard
1 Push buttons
Fuente de voltaje
9 LEDs
Cable telefnico
Software
Galaxy Wrap
Proteus ISIS

Diseo digital con VHDL

Desarrollo

Diseo del procesador


Lista de instrucciones
Instruccin
MOV A
LDI A + B
LDA ADRS

Operacin
CA
CA+B
C M[MAR]

Cdigo de
Operacin
0001
0010
0011

Operaciones y cdigos de instruccin


1. Operacin

C A;

Ciclo de Acarreo (Fetch)


T0:
MAR PC,
T1:
MBR M[MAR];
T2:
IR MBR;

T T+1
PC PC+1; T T+1
T T +1

Ciclo de Ejecucin
T3Q1: C A;

T0

2. Operacin

C A + B;

Ciclo de Acarreo (Fetch)


T0:
MAR PC,
T1:
MBR M[MAR];
T2:
IR MBR;

T T+1
PC PC+1; T T+1
T T +1

Ciclo de Ejecucin
T3Q2: C A + B;

T0

3. Operacin
Ciclo de Acarreo (Fetch)
T0:
MAR PC,
T1:
MBR M[MAR];

C M[MAR];

C.O. 0001

C.O. 0010

C.O. 0011

T T+1
PC PC + 1; T T + 1
Diseo digital con VHDL

T2:

IR MBR;

T T +1

Ciclo de Ejecucin
T3Q3: MAR PC;
T4Q3: MBR M[MAR];
T5Q3 : C MBR ;

TT+1;
TT+1
T 0;

PC PC + 1

Agrupamiento de Microperaciones
MICROOPERACION
TT+1
PC MAR
PC PC + 1
MBR M[MAR]
IR MBR
TT+1
CA
CA+B
MBR C
M[DIR] MBR

ECUACIN LGICA
X0 = T0 + T1 + T2 + T3Q3 + T4Q3
X1 = Q1T3 + T3Q2 + T4Q3 + T3Q4
X2 = T1
X3 = T1
X4 = T2
X5 = T0 + T1 + T2 + Q3T3
X6 = T3Q1
X7 = T3Q2
X8 = T3Q3
X9 = T4Q3

Plantilla de operaciones
x1
T0Q0
T1Q0
T2Q0
T3Q1
T4Q0
T5Q0
T6Q0
T7Q2
T8Q0
T9Q0
T10Q0
T11Q3
T12Q3
T13Q3

x2
1
1
1
0
1
1
1
0
1
1
1
1
1
0

x3
1
0
0
0
1
0
0
0
1
0
0
1
0
0

x4
0
1
0
0
0
1
0
0
0
1
0
0
1
0

x5
0
1
0
0
0
1
0
0
0
1
0
1
0
0

x6
0
0
1
0
0
0
1
0
0
0
1
0
0
0

x7
0
0
0
1
0
0
0
0
0
0
0
0
0
0

x8
0
0
0
0
0
0
0
0
0
0
0
0
0
1

Diseo digital con VHDL

x9
0
0
0
0
0
0
0
1
0
0
0
0
0
0

0
0
0
0
0
0
0
0
0
0
0
0
0
1

Arquitectura del procesador

Diseo digital con VHDL

Diseo digital con VHDL

Cdigo en VHDL del Timer ascendente de 4 bits


-- TIMER
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE WORK.STD_ARITH.ALL;
ENTITY CONTADOR IS
PORT(T: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);
CLOCK: IN BIT;
Q: OUT STD_LOGIC_VECTOR(2 DOWNTO 0);
START: IN BIT);
END CONTADOR;
ARCHITECTURE LOGICA OF CONTADOR IS
BEGIN
PROCESS(CLOCK, START)
BEGIN
IF CLOCK'EVENT AND CLOCK='1' THEN
IF START='1' THEN
CASE T IS
WHEN "0000" =>Q<= "000";
WHEN "0001" =>Q<= "000";
WHEN "0010" =>Q<= "000";
WHEN "0011" =>Q<= "001";
WHEN "0100" =>Q<= "000";
WHEN "0101" =>Q<= "000";
WHEN "0110" =>Q<= "000";
WHEN "0111" =>Q<= "010";
WHEN "1000" =>Q<= "000";
WHEN "1001" =>Q<= "000";
WHEN "1010" =>Q<= "000";
WHEN "1011" =>Q<= "011";
WHEN "1100" =>Q<= "011";
WHEN "1101" =>Q<= "011";
WHEN OTHERS =>Q<= "000";
END CASE;
T<= T+1;
IF T="1101" THEN T<="0000";
END IF;
END IF;
END IF;
END PROCESS;
END LOGICA;

Diseo digital con VHDL

Compilacin del contador

Pinout y utilizacin de Hardware Timer


C22V10
__________________________________________
clock =| 1|
|24|* not used
start =| 2|
|23|= t(2)
not used *| 3|
|22|= q(1)
not used *| 4|
|21|= t(0)
not used *| 5|
|20|* not used
not used *| 6|
|19|* not used
not used *| 7|
|18|* not used
not used *| 8|
|17|= q(2)
not used *| 9|
|16|= q(0)
not used *|10|
|15|= t(1)
not used *|11|
|14|= t(3)
not used *|12|
|13|* not used
__________________________________________

Diseo digital con VHDL

Description
Used Max
______________________________________
| Dedicated Inputs | 1 | 11 |
| Clock/Inputs
| 1 | 1 |
| I/O Macrocells
| 7 | 10 |
______________________________________
9 / 22 = 40 %
Simulacin Timer

Diseo digital con VHDL

Diseo de la UC
El programa recrear la tabla de comportamiento de la unidad de control para las
operaciones que diseamos.
Cdigo de la UC
-- UNIDAD DE CONTROL "UC"
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY UC IS
PORT(CLOCK: IN BIT;
T: IN BIT_VECTOR(3 DOWNTO 0);
Q: IN BIT_VECTOR(3 DOWNTO 0);
X: OUT BIT_VECTOR(0 TO 8));
END UC;
ARCHITECTURE CONTROL OF UC IS
BEGIN
PROCESS(CLOCK,T,Q)
BEGIN
IF CLOCK='1' THEN
IF (T="0000" OR T="0100"OR T="1000") THEN
X<="110000000";
END IF;
IF (T="0001" OR T="0101"OR T="1001") THEN
X<="101100000";
END IF;
IF (T="0010" OR T="0110"OR T="1010") THEN
X<="100010000";
END IF;
IF Q="0001" and T="0011" THEN
X<="000001000";
END IF;
IF Q="0010" and T="0111" THEN
X<="000000010";
END IF;
IF T="1011" THEN
X<="110100000";
END IF;
IF Q="0100" and T="1100" THEN
X<="101000000";
END IF;
IF Q="0100" and T="1101" THEN
Diseo digital con VHDL

X<="000000101";
END IF;
END IF;
END PROCESS;
END CONTROL;

Compilacin UC

Pinout y utilizacin de hardware


Description
Used
Max
______________________________________
| Dedicated Inputs | 8 | 11 |
| Clock/Inputs
| 1 | 1 |
| I/O Macrocells
| 9 | 10 |
______________________________________
18 / 22 = 81 %

Diseo digital con VHDL

C22V10
__________________________________________
t(3) =| 1|
|24|* not used
t(2) =| 2|
|23|* not used
t(1) =| 3|
|22|= x(0)
t(0) =| 4|
|21|= x(7)
q(3) =| 5|
|20|= x(6)
q(2) =| 6|
|19|= x(4)
q(1) =| 7|
|18|= x(5)
q(0) =| 8|
|17|= x(2)
clock =| 9|
|16|= x(8)
not used *|10|
|15|= x(1)
not used *|11|
|14|= x(3)
not used *|12|
|13|* not used
__________________________________________

Simulacin

Diseo digital con VHDL

CIRCUITO ARMADO

Conclusiones
En esta prctica vimos el principio de todo procesador digital, adems de las tareas bsicas
que se realizan para la transferencia entre registros.
La primera parte consiste en un contador de 4 bits ascendente, el cual se encarga de mandar
los tiempos y la codificacin de qs al segundo GAL, este contador llega hasta t13 que es
nmero de tiempos requeridos para realizar todas las instrucciones del procesador, al llegar
a t13 el contador se resetea a ceros y comienza la cuenta de nuevo.
El segundo GAL se encarga de la unidad de control (UC) del procesador el cual al recibir
una determinada combinacin de ts y qs manda una salida x que representa las
microoperaciones realizadas en ese tiempo.

Diseo digital con VHDL

_DISEO DIGITAL CON VHDl_

INSTITUTO TECNOLGICO DE
CHIHUAHUA

Prctica No.4

Men de Rotacin
26 de Mayo de 2014

Profesor. Ing. Carlos Gasson Espinoza

Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544

Diseo digital con VHDL

David Adolfo Soto Tarango 12060468

NDICE
MARCO TERICO

LENGUAJE ENSAMBLADOR
MICRO CONTROLADOR

3
3

OBJETIVO

MATERIAL

DESARROLLO

CDIGO EN ENSAMBLADOR DEL MENU DE ROCIONES


COMPILACIN DEL CONTADOR
PINOUT
SIMULACIN
UTILIZACIN DE HARDWARE

3
3
3
3
3

CIRCUITO ARMADO

CONCLUSIONES

Diseo digital con VHDL

Marco Terico
Lenguaje ensamblador
El lenguaje ensamblador, o assembler (assembly language), es un lenguaje de programacin
de bajo nivel para los computadores, microprocesadores, micro controladores y otros
circuitos integrados programables. Implementa una representacin simblica de los cdigos
de mquina binarios y otras constantes necesarias para programar una arquitectura dada de
CPU y constituye la representacin ms directa del cdigo mquina especfico para cada
arquitectura legible por un programador.
El nico lenguaje que entiende el micro controlador es el cdigo mquina formado por
ceros y unos del sistema binario.
El lenguaje ensamblador expresa las instrucciones de una forma ms natural al hombre a la
vez que muy cercana al micro controlador, ya que cada una de esas instrucciones se
corresponde con otra en cdigo mquina.
El lenguaje ensamblador trabaja con neumnicos, que son grupos de caracteres
alfanumricos que simbolizan las rdenes o tareas a realizar.
La traduccin de los neumnicos a cdigo mquina entendible por el microcontrolador la
lleva a cabo un programa ensamblador.
El programa escrito en lenguaje ensamblador se denomina cdigo fuente (*.ASM). El
programa ensamblador proporciona a partir de este fichero el correspondiente cdigo
mquina, que suele tener la extensin *.hex.
Micro controlador
Un micro controlador (abreviado C, UC o MCU) es un circuito integrado programable,
capaz de ejecutar las rdenes grabadas en su memoria. Est compuesto de varios bloques
funcionales, los cuales cumplen una tarea especfica. Un micro controlador incluye en su
interior las tres principales unidades funcionales de una computadora: unidad central de
procesamiento, memoria y perifricos de entrada/salida.

Diseo digital con VHDL

Diseo digital con VHDL

http://www.atmel.com/images/doc1919.pdfhttp://www.atmel.com/images/doc19
19.pdf

Objetivo
Con el uso del lenguaje ensamblador disear un men de rotaciones que cambie la
secuencia de LEDs.
Material

Micro 89S52
Protoboard
Push button
Fuente de voltaje
8 LEDs
Cable telefnico
Software
Keil uvision4

Desarrollo
Cdigo en Ensamblador del men de rotaciones
;Menu de Rotas
MOV A, #10000000B
CALL menu
menu:
JB P0.0, der
JB P0.1, izq
JB P0.2, zigzag
JB P0.3, centro
JMP menu
der:
RR A
MOV P1,A
CALL delay
CALL menu
izq:
RL A
MOV P1,A

Diseo digital con VHDL

CALL delay
CALL menu
zigzag:
MOV P1,#00000001B
CALL delay
MOV P1,#00000010B
CALL delay
MOV P1,#00000100B
CALL delay
MOV P1,#00001000B
CALL delay
MOV P1,#00010000B
CALL delay
MOV P1,#00100000B
CALL delay
MOV P1,#01000000B
CALL delay
MOV P1,#10000000B
CALL delay
MOV P1,#01000000B
CALL delay
MOV P1,#00100000B
CALL delay
MOV P1,#00010000B
CALL delay
MOV P1,#00001000B
CALL delay
MOV P1,#00000100B
CALL delay
MOV P1,#00000010B
CALL delay
CALL menu
centro:
MOV P1,#00011000B
CALL delay
MOV P1,#00100100B
CALL delay
MOV P1,#01000010B
CALL delay
MOV P1,#10000001B
CALL delay
MOV P1,#01000010B
CALL delay

Diseo digital con VHDL

MOV P1,#00100100B
CALL delay
CALL menu
delay:
MOV
R2,#0FAH
//250 en hexa
delay3:
MOV
R1,#0FAH
delay2:
MOV
R0,#008H
//8 en hexa
delay1: DJNZ
R0,delay1 ;comienza decremento (-1) desde 8
hasta cero
DJNZ R1,delay2 ;comienza decremento (-1) desde 250 hasta
cero
DJNZ R2,delay3 ;comienza decremento (-1) desde 250 hasta
cero
RET
END

Simulacin

Diseo digital con VHDL

CIRCUITO ARMADO

Conclusiones
Mediante las combinaciones del Dip Switch cambiamos el orden de encendido de los
LEDs conectados en el puerto 1 (P1), lo que da un efecto de rotacin.
El desplazamiento a la derecha se hace con la instruccin RR, la cual mueve bit a bit el
acumulador, el desplazamiento a la izquierda se hace similarmente con la instruccin RL, la
tercera y cuarta rotacin rotacin se realiz moviendo bit a bit.
Para lograr el retardo de 1 segundo se crea una subrutina la cual multiplica3 registros con
valores de (250*250*8) como cada instruccin dura 2us en realizarse, esto produce un
retardo de 1 segundo.

Diseo digital con VHDL

_DISEO DIGITAL CON VHDl_

INSTITUTO TECNOLGICO DE
CHIHUAHUA

Prctica No. 5

Circuito comparador de bytes.


29 de Mayo de 2014

Profesor. Ing. Carlos Gasson Espinoza

Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468

Diseo digital con VHDL

NDICE
MARCO TERICO

OBJETIVO

MATERIAL

DESARROLLO

CDIGO EN ENSAMBLADOR DEL CIRCUITO COMPARADOR.

7
8

CIRCUITO ARMADO

CONCLUSIONES

Diseo digital con VHDL

Marco Terico
Lenguaje ensamblador
El lenguaje ensamblador, o assembler (assembly language), es un lenguaje de programacin
de bajo nivel para los computadores, microprocesadores, micro controladores y otros
circuitos integrados programables. Implementa una representacin simblica de los cdigos
de mquina binarios y otras constantes necesarias para programar una arquitectura dada de
CPU y constituye la representacin ms directa del cdigo mquina especfico para cada
arquitectura legible por un programador.
El nico lenguaje que entiende el micro controlador es el cdigo mquina formado por
ceros y unos del sistema binario.
El lenguaje ensamblador expresa las instrucciones de una forma ms natural al hombre a la
vez que muy cercana al micro controlador, ya que cada una de esas instrucciones se
corresponde con otra en cdigo mquina.
El lenguaje ensamblador trabaja con neumnicos, que son grupos de caracteres
alfanumricos que simbolizan las rdenes o tareas a realizar.
La traduccin de los neumnicos a cdigo mquina entendible por el microcontrolador la
lleva a cabo un programa ensamblador.
El programa escrito en lenguaje ensamblador se denomina cdigo fuente (*.ASM). El
programa ensamblador proporciona a partir de este fichero el correspondiente cdigo
mquina, que suele tener la extensin *.hex.
Micro controlador
Un micro controlador (abreviado C, UC o MCU) es un circuito integrado programable,
capaz de ejecutar las rdenes grabadas en su memoria. Est compuesto de varios bloques
funcionales, los cuales cumplen una tarea especfica. Un micro controlador incluye en su
interior las tres principales unidades funcionales de una computadora: unidad central de
procesamiento, memoria y perifricos de entrada/salida.

Diseo digital con VHDL

Diseo digital con VHDL

http://www.atmel.com/images/doc1919.pdfhttp://www.atmel.com/images/doc19
19.pdf

Objetivo
Con el uso del lenguaje ensamblador disear un circuito comparador de 2 bytes, que
identifique si es, mayor que, menor que o igual que las cantidades dispuestas expresadas,
con el dip switch, de forma que lo indique con el encendido de un led, para indicar la
comparacin en la cual esta.
Material
Micro 89S52
Cristal de 12 MHz
2 capacitores de 33pF.
1 resistencia de 8Kohms
1 Capacitor de 10uF
Protoboard
Push button
Fuente de voltaje
2 Dip switch
3 LEDs
8 resistencias de 220 ohms.
Cable telefnico
Software

Keil uvision4

Diseo digital con VHDL

Desarrollo
Cdigo en Ensamblador del circuito comparador.
;Comparador de 2 Bytes
;Byte A en P0, Byte B en P1, Salida P2
;P2.0: P0 menor que P1
;P2.1: P0 mayor que P1
;P2.2: P0 igual que P1
mov p2,#0h
Inicio:
;Reseteamos en ceros los puertos
;MOV P0,#00000000B
;MOV P1,#00000000B
;MOV P2,#0H
;Movemos P0 a A para cumplir con el sintaxis de CJNE
MOV A,P0
;A
;MOV R7,P1 ;B
Compara:
CJNE A,P1,Diferente
;Si A es menor que P1, C=1
Diferente:
JC menor
;Si C=1 brinca de lo contrario continua a la sig. linea
mov A,P1
;Artificio para hacer una nueva comparacion
Compara2:
CJNE A,P0,diferente2
;Invertimos el orden de los registros para que el C=1
si P0 mayor que P1
diferente2:
JC mayor
JNC igual
Igual:
mov P2,#00000100B
CALL inicio
Menor:
MOV P2,#00000001B
CALL inicio
Mayor:
MOV P2,#00000010B
CALL inicio
END;!!!

Diseo digital con VHDL

Simulacin

CIRCUITO ARMADO

Diseo digital con VHDL

Conclusiones
Lo primero que se debi hacer fue limpiar los puertos, de lo contrario la salida
siempre est en alto.
Con la instruccin CJNE, comparamos dos bytes utilizando direccionamiento
directo por lo que movemos el valor puerto cero al acumulador, esta
instruccin nos dice que si el primer byte comparado es menor al segundo
levanta una bandera de carry y pone en alto el bit C del PSW, lo que nos lleva a
la etiqueta menor.
Para obtener el mayor que ahora invertimos el orden de comparacin de los
bytes, para que ahora la comparacin sea mayor que, levante la bandera de
carry.
Si no es mayor que, por lo tanto los bytes son iguales.

Diseo digital con VHDL

_DISEO DIGITAL CON VHDl_

INSTITUTO TECNOLGICO DE
CHIHUAHUA

Prctica No.6

Decodificador de Teclado Hexadecimal


3 de Junio de 2014

Profesor. Ing. Carlos Gasson Espinoza

Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468

Diseo digital con VHDL

NDICE
MARCO TERICO
ESTRUCTURA DEL TECLADO HEXADECIMAL

3
3

OBJETIVO

MATERIAL

DESARROLLO

CDIGO EN ENSAMBLADOR
SIMULACIN

5
7

CIRCUITO ARMADO

CONCLUSIONES

Diseo digital con VHDL

Marco Terico
Estructura del teclado Hexadecimal
Un teclado matricial es un conjunto de botones (switches) dispuestos en forma de malla, de
modo que no se requieran de muchas lneas para su interface, cada botn del teclado est
conectado a alguna de las filasRow, por un lado; y por el otro, a alguna de las
columnas Col.

La siguiente figura esboza la conexin entre un microcontrolador y un teclado de 44. Una


tecla pulsada establece la conexin entre una de las filas Row y una de las columnas Col.

Datasheet AT89S52

Diseo digital con VHDL

http://www.atmel.com/images/doc1919.pdfhttp://www.atmel.com/images/doc19
19.pdf

Objetivo
Al presionar la tecla respectiva se deber representar en el display de 7 segmentos.

COL 0
COL 1
COL 2
COL 3
REN 0

P1.0
P1.1
P1.2
P1.3
P1.4

REN 1

P1.5

REN 2

P1.6

REN 3

P1.7

8
0
5
2

P2.0 a
b
P2.1 c
P2.2
P2.3 d
e
P2.4
f
P2.5
g
P2.6

TECLADO MATRICIAL 4X4

Material

Mc AT89S52
Protoboard
Push button
Teclado Hexadecimal
Fuente de voltaje
Cable telefnico
Software
Keil uVision4
Proteus ISIS

Diseo digital con VHDL

Desarrollo
Cdigo en Ensamblador
;Hexa Keypad
//mov p2,#00H
mov P1,#0FH
inicio:
mov A,p1
//mov p2,r6
cjne A,#0FH,col_scan
jmp inicio
col_scan:
jnb p1.0,col1
jnb p1.1,col2
jnb p1.2,col3
jnb p1.3,col4
ret

//Columnas (parte baja puerto 1) en alto

//Detecta que columna se presion

//Pone un 0 rengln por rengln para detectar cual fue presionado


//La posicin de la tecla se identifica con la columna y el rengln que fue
presionado (se pone en 0)
; con la instruccin JNB
col1:
mov p1,#11101111B
jnb p1.0,uno
mov p1,#11011111B
jnb p1.0,cuatro
mov p1,#10111111B
jnb p1.0,siete
mov p1,#01111111B
jnb p1.0,e
col2:
mov p1,#11101111B
jnb p1.1,dos
mov p1,#11011111B
jnb p1.1,cinco
mov p1,#10111111B
jnb p1.1,ocho
mov p1,#01111111B

Diseo digital con VHDL

jnb p1.1,zero
col3:
mov p1,#11101111B
jnb p1.2,tres
mov p1,#11011111B
jnb p1.2,seis
mov p1,#10111111B
jnb p1.2,nueve
mov p1,#01111111B
jnb p1.2,f
col4:
mov p1,#11101111B
jnb p1.3,aa
mov p1,#11011111B
jnb p1.3,be
mov p1,#10111111B
jnb p1.3,cc
mov p1,#01111111B
jnb p1.3,d
//Despliega el nmero correspondiente en 7 segmentos
uno:mov p2,#00110000B
jmp inicio
cuatro: mov p2,#00110011B
jmp inicio
siete: mov p2,#01110000B
jmp inicio
e: mov p2,#01001111B
jmp inicio
zero: mov p2,#01111110B
jmp inicio
dos: mov p2,#01101101B
jmp inicio
tres: mov p2,#01111001B
jmp inicio
cinco: mov p2,#01011011B
jmp inicio
seis: mov p2,#01011111B
jmp inicio
ocho: mov p2,#011111111B
jmp inicio
nueve: mov p2,#01110011B
jmp inicio
aa: mov p2,#01110111B
Diseo digital con VHDL

jmp inicio
be: mov p2,#00011111B
jmp inicio
cc: mov p2,#01001110B
jmp inicio
d: mov p2,#00111101B
jmp inicio
f: mov p2,#01000111B
jmp inicio
end;!!!
Simulacin

CIRCUITO ARMADO

Diseo digital con VHDL

Conclusiones
Para hacer el programa en ensamblador del decodificador de un teclado hexadecimal y
mostrar el botn presionado en un display de 7 segmentos se utiliz el mtodo de escaneo
por regln row scanning que procede de la siguiente manera:
Se declara un estado inicial, que son todas las columnas en alto, si hay algn cambio salta a
una subrutina que detecta que columna fue presionado, esto es cundo de 1 cambia a 0.
Luego salta a otra subrutina que pone todo en alto y va probando con 0s rengln por
rengln, donde se pongo la columna y rengln en cero, esa es la tecla que se presion.

Diseo digital con VHDL

_DISEO DIGITAL CON VHDl_

INSTITUTO TECNOLGICO DE
CHIHUAHUA

Prctica No.7

Sumador de 4 bits
3 de Junio de 2014

Profesor. Ing. Carlos Gasson Espinoza

Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468

Diseo digital con VHDL

NDICE
MARCO TERICO
NUEVAS INSTRUCCIONES UTILIZADAS

5
5

OBJETIVO

MATERIAL

DESARROLLO

CDIGO EN ENSAMBLADOR
SIMULACIN
TABLA PARA DISPLAY DE 7 SEGMENTOS CTODO/NODO COMN

7
9
10

CIRCUITO ARMADO

10

CONCLUSIONES

10

Diseo digital con VHDL

Marco Terico
Nuevas instrucciones utilizadas
ADD
Suma la variable (SRC-BYTE) indicada y el Acumulador, dejando el resultado en el
Acumulador. Las banderas de acarreo y acarreo auxiliar son establecidas, si hay un acarreo
hacia afuera del bit 7 o del bit 3, de otro modo son limpiadas.
Cuando se suman enteros sin signo, la bandera de acarreo indica que ocurrir un sobreflujo.
OV se establece si hay un acarreo del bit 6 al 7 pero sin existir acarreo del bit 7 hacia
afuera, o un acarreo hacia afuera del bit 7 pero no del bit 6 al 7; de otro modo OV es
limpiada. Cuando se suman enteros signados, el OV indica un nmero negativo producido
como la suma de dos operandos positivos, o uno positivo producido por la suma de dos
operandos negativos.
Cuatro modos de fuentes de operandos dirigidos estn permitidos: registro, directo, registro
indirecto, o inmediato.
SWAP A
Intercambia los NIBBLES (campos de 4 bits) de alto y bajo orden del acumulador (bits
3-0 y bits 7-4). La operacin puede tambin ser vista como una instruccin de rotacin de 4
bits sin acarreo. Las banderas no son afectadas
ANL
Ejecuta la operacin lgica AND, bit a bit entre las variables indicadas y guarda los
resultados en la variable destino. Las banderas no son afectadas.
Esta operacin lgica permite 6 combinaciones de direccionamientos. Cuando el destino es
el acumulador, los direccionamientos pueden ser por registro, directo, registro-indirecto, o
inmediato. Cuando el destino es una direccin, la fuente puede ser el acumulador o el dato
inmediato.
http://www.atmel.com/images/doc1919.pdfhttp://www.atmel.com/images/doc19
19.pdf

Diseo digital con VHDL

Objetivo
Sumar dos nmeros A y B de 4 bits cada uno, el resultado de la suma se debe desplegar en
los displays multiplexados.

P1.0
P1.1

P1.2
P1.3
P1.4
P1.5

P1.6
P1.7

8
0
5
2

P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6

P2.7

a
b
c
d
e
f
g

74LS373

Material

Mc AT89S52
Protoboard
Push button
Dos dipswitches de 8 pines
2 Display 7 segmentos
Fuente de voltaje
Cable telefnico
Software

Diseo digital con VHDL

Keil uVision4
Proteus ISIS

Diseo digital con VHDL

Desarrollo
Cdigo en Ensamblador
; Sumador de 4 bits
; salida multiplexada en display 7 segmentos
; Un display nodo comn otro ctodo comn
mov p1,#00H
mov p2,#00H
inicio:
call suma
;mov r2,a
mov b,#0AH
;10 en hexa a B
div ab
//Divide sobre 10 para separa digitos en BCD
mov r3,a
mov r4,b
jmp unidades
unidades:
cero: cjne r4,#00H,uno
mov p2,#00111111B //0
call decenas
jmp inicio
uno: cjne r4,#001H,dos
mov p2,#00000110B //1
call decenas
jmp inicio
dos: cjne r4,#02H,tres
mov p2,#01011011B //2
call decenas
jmp inicio
tres: cjne r4,#03H,cuatro
mov p2,#01001111B //3
call decenas
jmp inicio
cuatro: cjne r4,#04H,cinco
mov p2,#01100110B //4
call decenas
jmp inicio
cinco: cjne r4,#05H,seis

en ctodo comn

en catodo comn

en catodo comn

en catodo comn

en catodo comn

Diseo digital con VHDL

mov p2,#01101101B //5


call decenas
jmp inicio
seis: cjne r4,#06H,siete
mov p2,#01111101B //6
call decenas
jmp inicio
siete: cjne r4,#07H,ocho
mov p2,#00000111B //7
call decenas
jmp inicio
ocho: cjne r4,#08H,nueve
mov p2,#01111111B //8
call decenas
jmp inicio
nueve: cjne r4,#09H,cero
mov p2,#01100111B //9
call decenas
jmp inicio
decenas:
zero: cjne r3,#00H,diez
mov p2,#10111111B //0
ret
diez: cjne r3,#01H,veinte
mov p2,#10000110B //1
ret

en ctodo comn

en ctodo comn

en ctodo comn

en ctodo comn

en ctodo comn

en ctodo comn

en ctodo comn

veinte: cjne r3,#02H,treinta


mov p2,#11011011B //2
en catodo comn
ret
treinta: cjne r3,#03H,zero
mov p2,#11001111B //3
ret

en ctodo comn

Diseo digital con VHDL

suma:
//mov p1,#00010001B //Dato por software
mov a,p1
anl a,#0F0H ;quiero la parte alta
anl p1,#0FH
;quiero la parte baja
//mov r1,p1 //opcional
swap a
//mov p3,a //solo para verificar que se halla pasado el dato de 4 bits a la
parte baja
add a,p1
//mov p2,a
ret
end
Simulacin

Diseo digital con VHDL

Tabla para display de 7 segmentos ctodo/nodo comn

CIRCUITO ARMADO

Conclusiones
Para realizar la suma de dos nmeros de 4 bits en un mismo puerto se cre la siguiente
rutina; Se lee el puerto 1 y se traslada al acumulador, luego se enmascara la parte alta y baja

Diseo digital con VHDL

con la instruccin ANL, la parte baja queda guardada en P1, mientras que la parte alta se
queda en A. Luego se utiliza la instruccin SWAP para cambiar de NIBBLE lo que hay en
A, finalmente A y P1 se suman con la instruccin ADD, el resultado se guarda en el
acumulador.
El resultado debe mostrarse en dos displays multiplexados, por lo que hay que convertir el
nmero binario a BCD. Usando la instruccin DIV se divide el resultado de la suma (A)
entre 10 (guardado en B), la parte entera se almacena en A y el residuo en B. Movemos A
hacia R3 y B a R4 para luego comparar estos registros con los valores posibles de la
adicin.
El multiplexado se solucion usando un display ctodo comn para las unidades y un
display nodo comn para las decenas

Diseo digital con VHDL

_DISEO DIGITAL CON VHDl_

INSTITUTO TECNOLGICO DE
CHIHUAHUA

Prctica No.8

Cronmetro de 0-59
13 de Junio de 2014

Profesor. Ing. Carlos Gasson Espinoza

Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468

Diseo digital con VHDL

NDICE
MARCO TERICO
TIMMER/CONTADOR AT89S52
MODOS DE OPERACIN
MODO 0
MODO 1
MODO 2
MODO 3

3
3
3
3
3
4
4

OBJETIVO

MATERIAL

DESARROLLO

CDIGO EN ENSAMBLADOR
SIMULACIN

6
8

CIRCUITO ARMADO

CONCLUSIONES

Diseo digital con VHDL

Marco Terico
Timmer/Contador AT89S52
En el 89S52 se puede configurar de manera independiente los timers Timer 0 y Timer 1
para operar en una variedad de modos, ya sea como timer o como contador. Cuando opera
como timer, corre a una determinada longitud de tiempo ya programada. Al operar como
contador, depende de las interrupciones externas en el pin.
Las funciones del Timer 0 pueden ser tanto de timer como de contador de eventos, en
cuatro modos de operacin. Es importante parar el timer/contador antes de cambiar de
modo.
Es controlado por los cuatro bits ms bajos del registro TMOD y los bits 0, 1, 4 y 5 del
registro TCON. El registro TMOD selecciona el mtodo de activacin del timer (GATE0),
operacin como timer o contador (T/C0#) y el modo de registro (M10 y M00). El registro
TCON provee el control de las funciones del Timer 0: bandera de desbordamiento (TF0),
bit de control de ejecucin (TR0), bandera de interrupcin (IE0) y el bit de control del tipo
de interrupcin (IT0).
Para una operacin normal del timer (GATE0 = 0) poniendo en alto TR0 permite que TL0
incremente por la entrada seleccionada, se controla el timer por software. Poniendo en alto
tanto el GATE0 como TR0 permite al pin externo INT0# controlar la operacin del timer, lo
que se conoce como control por hardware.
Modos de operacin
Modo 0
Configura el Timer 0 como un timer de 13 bits que se compone con 8 bits en el registro
TH0 y los 5 bits ms bajos del registro TL0. Los 3 bits ms altos del registro TL0 estan
indeterminados y deben ser ignorados.

Diseo digital con VHDL

Modo 1
El modo 1 es igual que el Modo 0, excepto porque el registro del Timer trabaja con los 16
bits.
El modo 1 configura el Timer 0 como un timer de 16 bits con los registros TH0 y TL0
conectados en cascada

Modo 2
El modo 2 configura el Timer 0 como un timer de 8 bits (registro TL0) que
automticamente se recarga con el registro TH0. El desbordamiento de TL0 activa la
bandera de TF0 en el registro TCON y recarga TL0 con el contenido de TH0, que est
preestablecido en el software. Cuando se realiza esto, el hardware borra TF0 y la recarga

deja a TH0 sin cambios. El prximo valor de recarga puede ser cambiado en cualquier
momento escribiendo en el registro TH0.
El modo de operacin 2 es el mismo para el timer/contador 1.
Modo 3
Este modo configura el Timer 0 para que los registros TL0 y TH0 operen como timers de 8
bits separados. Este modo est previsto para operaciones que requieren un timer o contador
de 8 bits adicional.

Diseo digital con VHDL

Objetivo
Cronometro 00 a 59 (utilizar timers del micro) con las siguientes funciones:
a) ON: Arranca el contador
b) OFF: Apaga el contador
c) RESET: Reinicia cuenta en 00 y continua contado.
d) STOP: Detiene la cuenta
e) CONTINUE: Sigue contando

Desplegar cada digito en un display multiplexado utilizando solo un 74LS47 o 74LS48.

Diseo digital con VHDL

P2.0
ON

P0.0

OFF

P0.1

RESET

P0.2

STOP

P0.3

CONTINUE

P0.4

8
0
5
2

P2.1
P2.2
P2.3

7 7
4 4
LoL
S S
4 4
7 8

Material

Mc AT89S52
74LS48
Protoboard
5 Push button
2 Display 7 segmentos
Fuente de voltaje
Cable telefnico
Software
Keil uVision4
Proteus ISIS

Diseo digital con VHDL

Desarrollo
Cdigo en ensamblador
//Cronmetro 00-59 en displays multiplexados
inicio:
mov tmod,#01H
//Timer 0 modo 1
mov r3,#3BH
//cuenta regresiva 59
mov r1,#00H
//inicia registro de cuenta
jmp kronos
Kronos:
jb p0.0,on
jb p0.1,of
jb p0.2,rst
jb p0.3,stp
jb p0.4,rsm
jmp kronos
OFF:
mov p2,#0H
jb p0.0,inicio
jmp of
rst:
mov r3,#3BH
mov r1,#00H
mov p2,#0
jmp on
stp:
jb p0.4,inicio
mov p2,b
setb p2.4
call tiempo
mov p2,a
clr p2.4
call tiempo
jmp stp

//Opciones
//Encender
//Apagar
//Reset
//Detener
//Resume (continuar)

//Pone en 0 el Puerto
//Se cicla hasta que se presione on

//reinicia registro de cuenta

//Unidades
//GND
//Decenas
//GND

Diseo digital con VHDL

ON:;--- Aqu comienza


rsm:
jb p0.1,of
jb p0.2,rst
jb p0.3,stp
dec r3
inc r1
mov r5,#1F4H
mov r6,#04H
call mux
cjne r3,#00H,kronos
mov r1,#00H
registros
mov r3,#3BH
jmp on
mux:
jb p0.1,of
jb p0.2,rst
mov b,#0AH
mov a,r1
div ab
bunidades
mov p2,b
setb p2.4
call tiempo
mov p2,a
clr p2.4
call tiempo
djnz r5,mux
djnz r6,mux
ret
tiempo:
mov TH0,#0FEH
mov TL0,#00CH
-500
mov tcon,#10H
jnb TF0,$
clr TR0
clr TF0

todo el Show -----------------------------------------------//

//cuenta hasta 59
//Incrementa cuenta
//500 en haxa
//4 en haxa
//Se regresa a kronos si aun no es 0
//Si ya decremento de 59 a 0, se reinician los

//Divide la cuenta sobre 10; en a decenas,


//Unidades
//GND
//Decenas
//GND
//Decrementa y salta si el R5 con valor 1000 si no es 0
//Es decir multiplexar a 1kHz
//el byte alto incrementar de 0FEH hasta FFH -500
//el byte bajo incrementar de 00CH hasta FFH
//inicia el temporizador; TR0 = '1'
//espera el desbordamiento
//Apaga el timer
//repone la bandera de desbordamiento

Diseo digital con VHDL

ret
END

Simulacin

CIRCUITO ARMADO

Diseo digital con VHDL

Conclusiones
Se configur el timmer 0 en modo 1 de 16 bits.
El proceso para la cronometro hasta 59 consta de 3 rutinas principales, el conteo, tiempo y
multiplexado.
Primero se realiza una rutina que genere un periodo de 1ms, haciendo que las cuentas del
timmer comiencen 500 cuentas antes del desbordamiento.
La cuenta se realiza con dos registros R3 decrementa desde 59, esto sirve para saber cuando
se ha llegado a la cuenta mxima. R1 incrementa desde 0, en el se guarda el valor del
conteo que luego se mostrar.
En la rutina de multiplexeo el valor de R1 se divide entre 10 para separar decenas y
unidades, luego se muestran por separado en el puerto 2 por un tiempo de 1ms creado en la
subrutina, esto se repite 1000 veces para crear el segundo.

Diseo digital con VHDL

_DISEO DIGITAL CON VHDl_

INSTITUTO TECNOLGICO DE
CHIHUAHUA

Prctica No.9

PWM
13 de Junio de 2014

Profesor. Ing. Carlos Gasson Espinoza

Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468

Diseo digital con VHDL

NDICE
MARCO TERICO
9.1.1 TMOD: TIMER MODE REGISTER
9.1.2 TCON: TIMER CONTROL REGISTER
9.1.3 GATE

4
4
4
4

OBJETIVO

MATERIAL

DESARROLLO

CDIGO EN ENSAMBLADOR
SIMULACIN

CIRCUITO ARMADO

7
9

10
11
11

CONCLUSIONES

11

Diseo digital con VHDL

Marco Terico
9.1.1 TMOD: Timer Mode Register

Es un registro de 8 bits que define el uso de los timers 0 y 1:

Utiliza los 4 bits menores para el Timer 0 (Se debe poner a 0000 si no se usa)
Utiliza los 4 bits mayores para el Timer 1 (Se debe poner a 0000 si no se usa)

No es direccionable bit a bit.


GATE

C/T

M1

M0

GATE

C/T

Timer 1

M1

M0

Timer 0

M0 y M1 seleccionan el modo de trabajo de los timers 0 y 1


M1
0
0
81
1

M0
0
1
0
1

Modo
0
1
2
3

Operacin
Modo Timer de 13 bits
Modo Timer de 16 bits
Timer/Contador de 8 bits con autorrecarga
Modo de Timer partido

9.1.2 TCON: Timer Control Register

La parte alta se utiliza para timer/contador, y la parte baja para las interrupciones.
TF1
TR1
TF0
TR0
IE1
IT1
IE0
Timer 1
Timer 0
Interrupciones
TR: Run Control Bit
Se emplea para habilitar o deshabilitar el timer/contador.
TR0 se utiliza para el timer/contador 0 y TR1 se utiliza para el timer/contador 1

IT0

TF: Timer Flag, Control Flag


Trabaja como un carry, originalmente TF = 0. Cuando TH-TL pasa de FFFFH a 0000, el
valor de TF cambia: TF = 1. Si se habilita las interrupciones, TF=1 disparar ISR
9.1.3 GATE

GATE = 0 se arranca y para el timer de forma interna, por software


GATE = 1 utiliza el hardware para arrancar y parar el timer por software y por una fuente
externa. El timer/contador solo es habilitado cuando la pata INT est alta y el flag TR = 1

Diseo digital con VHDL

Objetivo
Mediante los timers e interrupciones generar dos seales peridicas con variacin de ancho de
pulso, segn la interrupcin activada:
INTERRUPCIN 0 SEAL 1 ENCENDER INDICADOR SEAL 1
INTERRUPCIN 1 SEAL 2 ENCENDER INDICADOR SEAL 2

Diseo digital con VHDL

SEAL 1

20

20

40

20

60

20

30

10

t (microsegundos)

SEAL 2

10

10

20

10

t (microsegundos)

P0.0
R

SEAL 1

Vcc
R

SEAL 2

Vcc
R

8
0
P3.2 (INT0)
5
2
(INT1)

C
OSCILOSCOPIO

P2.0

SEAL 1

P2.1

SEAL 2

P3.3

Diseo digital con VHDL

Material

Tablilla de desarrollo para c89S52


Osciloscopio
Laptop
Software
Keil uVision4
Proteus ISIS

Desarrollo
Cdigo en ensamblador
//PWM
org 0
jmp inicio

//Direccion de vector reset

org 0003H
call s1
reti

//Direccion de vector de iterrupcin externa 0

org 0013H
call s2
reti

//Direccion de vector de iterrupcin externa 1

inicio:
mov p1,#00H
mov IE,#085H
jmp inicio

//Habilita EA, EX1 y EX0

s1:
//Seal 1
mov r4,#04H
mov r6,#06H
x1:
//20us alto
setb p1.0
setb p0.0
call tiempo

Diseo digital con VHDL

call tiempo
x2:
//20us bajo
clr p1.0
clr p0.0
call tiempo
call tiempo
x3:
//40us alto
setb p1.0
setb p0.0
call tiempo
djnz r4,x3
x4:
//20us bajo
clr p1.0
clr p0.0
call tiempo
call tiempo
x5: //60us alto
setb p1.0
setb p0.0
call tiempo
djnz r6,x5
x6:
//20us bajo
clr p1.0
clr p0.0
call tiempo
call tiempo
ret
s2:
//Seal 2
mov r3,#03H
y1:
//10us alto
setb p1.1
setb p0.0
call tiempo
y2:
//10us bajo
clr p1.1
clr p0.0
call tiempo
y3:
//20us alto
setb p1.1
setb p0.0
call tiempo
call tiempo
y4:
//10us bajo
clr p1.1
clr p0.0
call tiempo
Diseo digital con VHDL

y5: //30us alto


setb p1.1
setb p0.0
call tiempo
djnz r3,y5
y6:
//10us bajo
clr p1.1
clr p0.0
call tiempo
ret
tiempo:
mov TMOD,#02H
mov TH0,#0F5H
mov TL0,#0F5H
setb TR0
jnb TF0,$
clr TF0
ret

//10us
//FFH - AH
//inicia el temporizador; TR0 = '1'
//espera el desbordamiento
//repone la bandera de desbordamiento

end
Simulacin

Diseo digital con VHDL

CIRCUITO ARMADO

Diseo digital con VHDL

Conclusiones
Se utiliz el modo 2 de autorrecarga de 8 bits del timer 0, debido que este modo de
operacin no presenta error de prdida de tiempo por instrucciones de recarga.
Se gener una rutina de tiempo de 10us que se repitiera las veces que se necesitaran, para
ello a los Bytes TL0 y TH0 se les rest FFH AH, como cada cuenta del timer consume 1
ciclo de mquina de 1 micro segundo.
Utilizamos la tablilla de desarrollo del tec para mayor comodidad y evitar armado.

Diseo digital con VHDL

_DISEO DIGITAL CON VHDl_

INSTITUTO TECNOLGICO DE
CHIHUAHUA

Prctica No.9

Semforo Inteligente
17 de Junio de 2014

Profesor. Ing. Carlos Gasson Espinoza

Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468

Diseo digital con VHDL

NDICE
MARCO TERICO

OBJETIVO

MATERIAL

DESARROLLO

CDIGO EN ENSAMBLADOR
SIMULACIN

4
14

CIRCUITO ARMADO

15

CONCLUSIONES

15

Diseo digital con VHDL

Marco Terico
Actualmente el mundo exige, por la complejidad del trfico y para
brindar una calidad de vida ms equitativa a los peatones, que los
dispositivos de sealizacin para vehculos y personas, electrnicos y
elctricos, sean ms confiables y seguros y que ofrezcan ms
posibilidades de accesibilidad para aquel que lo desee, sin importar sus
limitaciones fsicas.

Objetivo
1. Utilizando timers e interrupciones controlar un semforo inteligente en un crucero como se
muestra en el siguiente esquema:

Diseo digital con VHDL

ARRANQUE
PARO

P 1 .0

P 1 .1

P 0 .0

P 0 .1

P 0 .2

P 0 .3

P 0 .4

P 0 .5

8
A

S
E
N
S
O
R
E
S

P 1 .2

P 1 .3

P 1 .4

P 1 .5

BOT N D E
E MER GEN CIA

P 3 .2

(INT 0)

P 2 .0

P 2 .1

P 2 .2

P 2 .3

P 2 . 4

P 2 .5

2. Los semforos debern iniciar su secuencia con un botn de << ARRANQUE>>.


3. La secuencia ser CCLICA de la siguiente forma:
a. N S
b. E O
c. S N
d. O E
4. Para detener la secuencia y dejar en punto de arranque el sistema deber presionar un botn
de <<PARO>>.
5. El foco VERDE en todos los casos, antes de pasar al amarillo deber parpadear 3 veces.
6. Los tiempos estndar en segundos de cada semforo son los siguientes:

VERDE

N S

E O

S N

O E

Diseo digital con VHDL

AMARILLO

ROJO

30

30

30

30

7. A, B, C y D son sensores que miden la longitud de la fila de autos.


8. Si el sensor est apagado significa que la fila de autos es corta lo cual deber acortar solo el
tiempo del VERDE a 3 segundos y en consecuencia ajustar los tiempos del ROJO.
Un botn de emergencia pondr indefinidamente todos los semforos en ROJO.

Material

c89S52
12 LEDs
4 push buttons o dip switch
Software
Keil uVision4
Proteus ISIS

Desarrollo
Cdigo en ensamblador

//Semforo Inteligente
org 0
jmp inicio
org 03H
//Interrupcin externa 0; EX0
call emergencia
inicio:
jb p1.0,arranque
paro:
jmp inicio
arranque:

Diseo digital con VHDL

mov tmod,#01H
//Timer modo 1 de 13 bits
mov IE,#81H
//Habilita EA y EX0
NaS:
//Direccin Norte a Sur: Semforo 1
call sem2rojo
//Pone el semaforo en rojo
call sem3rojo
call sem4rojo
call regs
//Llama a los registros que se usarn
adelante
jnb p1.2,sA
//Si el sensor A est activado
verde1:
clr p0.1
//Amarillo
clr p0.2
//Rojo
setb p0.0
//Verde
call segundo
djnz r1,verde1
//Encendido por 5 segs. Luego parpadea 3
veces
cpl p0.0
//0 5.5
Complementa el bit
call medsegundo
cpl p0.0
//1 6s
call medsegundo
cpl p0.0
//0 6.5s
call medsegundo
cpl p0.0
//1 7s
call medsegundo
cpl p0.0
//0 7.5s
call medsegundo
cpl p0.0
//1 8s
call medsegundo
amarillo1:
mov p0,#00100010B
call segundo
djnz r2,amarillo1
rojo1:
mov p0,#00001100B
jmp EaO
sA:
call regs
Diseo digital con VHDL

verde1a:
clr p0.1
//Amarillo
clr p0.2
//Rojo
setb p0.0
//1 1
call segundo
cpl p0.0
//0 1.5
call medsegundo
cpl p0.0
//1 2
call medsegundo
cpl p0.0
//0 2.5
call medsegundo
cpl p0.0
//1 3
call medsegundo
amarillo1a:
mov p0,#00100010B
call segundo
djnz r2,amarillo1a
rojo1a:
mov p0,#00001100B
EaO:
//Direccin Este a Oeste: Semforo 2
call sem1rojo
call sem3rojo
call sem4rojo
call regs
jnb p1.4,sC
//Si el sensor C est activado
verde2:
clr p0.4
clr p0.5
setb p0.3
call segundo
djnz r1,verde2
cpl p0.3
//0 5.5
Complementa el bit
call medsegundo
cpl p0.3
//1 6
call medsegundo
cpl p0.3
//0 6.5
Diseo digital con VHDL

call medsegundo
cpl p0.3
//1
call medsegundo
cpl p0.3
//0
call medsegundo
cpl p0.3
//1
call medsegundo
amarillo2:
clr p0.3
clr p0.5
setb p0.4
call segundo
djnz r2,amarillo2
rojo2:
clr p0.3
clr p0.4
setb p2.0
setb p0.5
jmp SaN
sC:
verde2c:
setb p0.3
//1
call segundo
cpl p0.3
//0
call medsegundo
cpl p0.3
//1
call medsegundo
cpl p0.3
//0
call medsegundo
cpl p0.3
//1
call medsegundo
amarillo2c:
clr p0.3
clr p0.5
setb p0.4
call segundo
djnz r2,amarillo2c

7
7.5
8

1
1.5
2
2.5
3

Diseo digital con VHDL

rojo2c:
clr p0.3
clr p0.4
setb p2.0
setb p0.5
SaN:
//Direccin Sur a Norte: Semforo 3
call sem1rojo
call sem2rojo
call sem4rojo
call regs
jnb p1.3,sB
//Si el sensor B est activado
verde3:
clr p2.1
clr p2.2
setb p2.0
call segundo
djnz r1,verde3
cpl p2.0
//0 5.5
Complementa el bit
call medsegundo
cpl p2.0
//1 6
call medsegundo
cpl p2.0
//0 6.5
call medsegundo
cpl p2.0
//1 7
call medsegundo
cpl p2.0
//0 7.5
call medsegundo
cpl p2.0
//1 8
call medsegundo
amarillo3:
clr p2.0
clr p2.2
setb p2.1
call segundo
djnz r2,amarillo3
rojo3:
Diseo digital con VHDL

clr p2.0
clr p2.1
setb p2.3
setb p2.2
jmp OaE
sB:
verde3b:
clr p2.1
clr p2.2
setb p2.0
//1
call segundo
cpl p2.0
//0
call medsegundo
cpl p2.0
//1
call medsegundo
cpl p2.0
//0
call medsegundo
cpl p2.0
//1
call medsegundo
amarillo3b:
clr p2.0
clr p2.2
setb p2.1
call segundo
djnz r2,amarillo3b
rojo3b:
clr p2.0
clr p2.1
setb p2.2
setb p2.3
OaE:
call sem1rojo
call sem2rojo
call sem3rojo
call regs
jnb p1.5,sD

1
1.5
2
2.5
3

//Direccin Oeste a Este: Semforo 4

//Si el sensor D est activado


Diseo digital con VHDL

verde4:
clr p2.4
clr p2.5
setb p2.3
call segundo
djnz r1,verde4
cpl p2.3
//0
call medsegundo
cpl p2.3
//1
call medsegundo
cpl p2.3
//0
call medsegundo
cpl p2.3
//1
call medsegundo
cpl p2.3
//0
call medsegundo
cpl p2.3
//1
call medsegundo
amarillo4:
clr p2.3
clr p2.5
setb p2.4
call segundo
djnz r2,amarillo4
rojo4:
clr p2.3
clr p2.4
setb p0.0
setb p2.5
jmp NaS
sD:
verde4d:
clr p2.4
clr p2.5
setb p2.3
//1
call segundo
cpl p2.3
//0

5.5

Complementa el bit

6
6.5
7
7.5
8

1
1.5
Diseo digital con VHDL

call medsegundo
cpl p2.3
//1 2
call medsegundo
cpl p2.3
//0 2.5
call medsegundo
cpl p2.3
//1 3
call medsegundo
amarillo4d:
clr p2.3
clr p2.5
setb p2.4
call segundo
djnz r2,amarillo4d
rojo4d:
clr p2.3
clr p2.4
setb p2.5
setb p0.0
jmp NaS
regs:
mov r1,#05H
mov r2,#02H
mov r3,#01EH //30 decimal
mov r4,#03H
mov r5,#023H //35 decimal
ret
sem1rojo:
clr p0.0
clr p0.1
setb p0.2
ret
sem2rojo:
clr p0.3
clr p0.4

//Semaforo 1 en rojo

//Semaforo 2 en rojo

Diseo digital con VHDL

setb p0.5
ret
sem3rojo:
clr p2.0
clr p2.1
setb p2.2
ret
sem4rojo:
clr p2.3
clr p2.4
setb p2.5
ret

//Semaforo 3 en rojo

//Semaforo 4 en rojo

segundo:
mov r6,#0FH
//15 decimal
seg:
mov TH0,#00H
//el byte alto incrementar de 00H hasta FFH
mov TL0,#00H
//el byte bajo incrementar de 00H hasta FFH
setb TR0
//inicia el temporizador; TR0 = '1'
jnb TF0,$
//espera el desbordamiento
clr TR0
clr TF0
//repone la bandera de desbordamiento
jb p1.1,paro3
djnz r6,seg
//Se repite esto 15 veces; es decir .65*15 aprox
1seg
ret
paro3: lcall paro//llamada larga porque paro se encuentra muy
lejos
medsegundo:
mov r6,#07H
mseg:
mov TH0,#00H
mov TL0,#00H
setb TR0
jnb TF0,$
clr TR0

//7 decimal
//el byte alto incrementar de 00H hasta FFH
//el byte bajo incrementar de 00H hasta FFH
//inicia el temporizador; TR0 = '1'
//espera el desbordamiento

Diseo digital con VHDL

clr TF0
//repone la bandera de desbordamiento
jb p1.1,paro2
djnz r6,mseg // es decir .65s
ret
paro2: lcall paro
emergencia:
mov p0,#000100100B
mov p2,#000100100B
jmp emergencia
END
Simulacin

Diseo digital con VHDL

CIRCUITO ARMADO

Conclusiones
Se crearon dos rutinas de tiempo, una de medio segundo, y otra de un segundo para luego
ser llamada las veces necesarias.
Para simplificar el cdigo se crearon subrutinas separadas para cuando los semforos
estuvieran en rojo.
Como podemos observar crear cruces con semforos que se adapten a las condiciones de
trfico no nada complejo.

Diseo digital con VHDL

_DISEO DIGITAL CON VHDl_

INSTITUTO TECNOLGICO DE
CHIHUAHUA

Proyecto

Cerradura Electrnica
18 de Junio de 2014

Profesor. Ing. Carlos Gasson Espinoza

Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468

Diseo digital con VHDL

NDICE
Contenido
MARCO TERICO..................................................................................2
DATASHEET MOC 3011........................................................................................... 4
............................................................................................................................ 5
DATASHEET CTB06................................................................................................. 6
SENSOR DE HERRADURA H21A1................................................................................ 7
CHAPA ELCTRICA 12V AC....................................................................................... 8

OBJETIVO

MATERIAL...........................................................................................8
DESARROLLO.......................................................................................9
CDIGO EN ENSAMBLADOR....................................................................10
SIMULACIN......................................................................................................... 17
CIRCUITO ARMADO.........................................................................18

18
CONCLUSIONES..................................................................................19

Diseo digital con VHDL

Marco Terico
Datasheet 74LS245

Diseo digital con VHDL

Datasheet MOC 3011

Diseo digital con VHDL

Diseo digital con VHDL

Datasheet CTB06

Diseo digital con VHDL

Sensor de herradura H21A1

Diseo digital con VHDL

Chapa elctrica 12V AC

Objetivo
Implementar un microcontrolador para abrir una chapa elctrica. La seal de control deber
pasar por la etapa de acondicionamiento de seal para evitar la cada de voltaje de la seal,
adems de aislar opto electrnicamente el circuito digital del circuito de corriente alterna de
salida.
La cerradura deber ser activada por una combinacin de 4 teclas o una tarjeta perforada.
Por medio de indicadores LEDs se mostrar el estado actual del sistema. Por medio de una
interrupcin se podr modificar la contrasea en cualquier momento.

Material

c89S52
LED RGB
4 Sensores de herradura H21A1
7 push buttons
Transformador de 12V AC
Cerradura Elctrica
Optoacoplador MOC 3011
Triac CTB06
Diseo digital con VHDL

Buffer 74LS245
Resistencias segn diseo
Software
Keil uVision4
Proteus ISIS
Desarrollo
El funcionamiento de la cerradura electrnica trabaja de la siguiente manera:
La cerradura se podr abrir por medio de una combinacin de teclas o al pasar una tarjeta
perforada por 4 sensores, el usuario debe elegir que mtodo utilizar.
La combinacin de 4 dgitos por default es 1-1-1-1 de izquierda a derecha, mientras que el
cdigo de acceso por tarjeta perforada es la suma binaria de la combinacin de las teclas, la
cual es 1111B.
Si la contrasea introducida ya sea por combinacin o por tarjeta es correcta el LED
encender en verde por 3 segundos y mandar la seal para abrir la chapa, de lo contrario el
LED encender rojo por un segundo. Despus de tres intentos fallidos el LED enciende rojo
por 3 segundos.
El usuario puede cambiar de contrasea en cualquier momento activando una interrupcin,
se le pedir que verifique la contrasea anterior, luego entrar en estado de lectura (LED en
azul) una vez que se guarden los 4 dgitos el LED parpadea dos veces y se apaga indicando
que fue guardada. Ahora se puede hacer uso de la nueva contrasea.
Para el optoacoplador
Rs = 385
El optoaislador no debe ser usado para
manejar la carga directamente. Es solo un
dispositivo de disparo, por lo que se hace
uso de un Triac (CTB06) que funciona
como interruptor para la carga AC.
R2 = 180 propuesta por el fabricante
Para la respuesta ptima del sensor de
herradura se eligi 2.5K ohms segn
muestra la grfica.

Diseo digital con VHDL

Cdigo en ensamblador
//Cerradura Electrnica tipo Spiderman
org 0
jmp inicio
org 03H
//Interrupcin externa 0; EX0
call ingresar_N
inicio:
mov IE,#81H
//Habilita interrupciones EA y EX0
mov p2,#00H
cjne r2,#00H,nueva
//Default
mov r4,#01H //4to dgito
mov r5,#02H //3er dgito
mov r6,#04H //2do dgito
mov r7,#08H //1er dgito
call rgb
jb p3.3,combinacin
jb p3.4,tarjeta
jmp inicio
nueva:
inc r2
default
jb p3.3,combinacion
jb p3.4,tarjeta
jmp nueva

//Aumenta para indicar que ya no se urar la contrasea por

tarjeta:
mov a,r7
//Suma cada dgito para crear el cdigo de la tarjeta perforada
add a,r6
add a,r5
add a,r4
mov r1,a
//El cdigo de la tarjeta perforada se guarda en r1
call segundo
//Espera 3 segundo para leer la tarjeta
call segundo
call segundo
mov a,p2
mov b,r1
cjne a,b,incorrecto2
Diseo digital con VHDL

call correcto
incorrecto2: lcall incorrecto
binario
jmp inicio

//en R1 se guarda la combinacin en

//Rutina para ingresar contrasea por combinacin////////////////////////////////////////////////////


combinacion:
presionado1:
call antirrebote
//antirrebote 65 mili segundos
mov a,p2
//Lee el puerto 2
jz presionado1
//Si nada fue presionado vuelve a leer
mov b,r7
//Primer dgito
cjne a,b,error1
//Si no son iguales es la tecla erronea de lo contrario es la correcta y
continua
bien1:
mov a,p2
jnz
bien1
//Se dej de presionar la ltima tcla? ;Diferente de cero
presionado2:
//No hay ninguna tecla presionada
call antirrebote
mov a,p2
jz presionado2
//Si nada fue presionado vuelve a leer
mov b,r6
//Segundo dgito
cjne a,b,error2
//Si no son iguales es la tecla erronea de lo contrario es la correcta y
continua
bien2:
mov a,p2
jnz
bien2
//Se dej de presionar la ltima tcla?
presionado3:
call antirrebote
mov a,p2
jz presionado3
mov b,r5
//Tercer dgito
cjne a,b,error3
//Si no son iguales es la tecla erronea de lo contrario es la correcta y
continua
bien3:
mov a,p2
jnz
bien3
//Se dej de presionar la ltima tcla?
;Diferente de cero
presionado4:
call antirrebote
mov a,p2
jz presionado4
Diseo digital con VHDL

mov b,r4
cjne a,b,error4
continua
call correcto
jmp inicio
error1:
call antirrebote
mov a,p2
jz error1
error2:
mov a,p2
jnz
error2
call antirrebote
mov a,p2
jz error2
que est mal
error3:
mov a,p2
jnz
error3
call antirrebote
mov a,p2
jz error3
error4:
mov a,p2
jnz
error4
call antirrebote
mov a,p2
jz error4
call incorrecto
jmp inicio

//Primer dgito
//Si no son iguales es la tecla erronea de lo contrario es la correcta y

//Primer tecla erronea

//No se ha presionado ninguna tecla, vuelve a leer

//Se dej de presionar la ltima tcla?; Diferente de cero

//Se presion alguna tecla, no nos interesa cual, ya sabemos

//Se dej de presionar la ltima tcla?; Diferente de cero

//Se dej de presionar la ltima tcla?; Diferente de cero

intruso:
//Ingresaron 3 veces la combinacin incorrecta
mov p1,#02H
call segundo
mov p1,#00H
call segundo
mov p1,#02H
call segundo
mov p1,#00H
mov r3,#00H
Diseo digital con VHDL

ret
correcto:
//Verde
mov p1,#00000101B
call segundo
mov p1,#00H
ret
incorrecto:
//Rojo
mov p1,#02H
call segundo
mov p1,#00H
inc r3
cjne r3,#03,Linicio
call intruso
ret
Linicio: lcall inicio
//Interrupcin para ingresar nueva contrasea//////////////////////////////////
ingresar_N:
//Primero se introduce la contrasea vieja, si es correcta se cambia, de lo contrario se
regresa
N_presionado1:
call antirrebote
//antirrebote
mov a,p2
//Lee el puerto 2
jz N_presionado1
//Si nada fue presionado vuelve a leer
mov b,r7
//Primer dgito
cjne a,b,error
//Si no son iguales es la tecla errnea de lo contrario es la correcta y
continua
N_bien1:
mov a,p2
jnz
N_bien1
//Se dej de presionar la ltima tecla? ;Diferente de
cero
N_presionado2:
//No hay ninguna tecla presionada
call antirrebote
mov a,p2
jz N_presionado2
//Si nada fue presionado vuelve a leer
mov b,r6
//Segundo dgito
cjne a,b,error
//Si no son iguales es la tecla errnea de lo contrario es la correcta y
continua
N_bien2:
Diseo digital con VHDL

mov a,p2
jnz
N_bien2
//Se dej de presionar la ltima tcla?
N_presionado3:
call antirrebote
mov a,p2
jz N_presionado3
mov b,r5
//Tercer dgito
cjne a,b,error
//Si no son iguales es la tecla errnea de lo contrario es la correcta y
continua
N_bien3:
mov a,p2
jnz
N_bien3
//Se dej de presionar la ltima tecla?
; Diferente
de cero
N_presionado4:
call antirrebote
mov a,p2
jz N_presionado4
mov b,r4
//Cuarto dgito
cjne a,b,error
//Si no son iguales es la tecla errnea de lo contrario es la correcta y
continua
call N_correcto
call N_captura
jz Lnueva
//No hay tecla presionada
Lnueva: lcall nueva //Larga llamada
error:
//Tecla erronea
call antirrebote
mov p1,#02H
call segundo
call segundo
mov p1,#00H
jmp N_presionado1 //Vuelve a leer sin aumentar el r0
N_Correcto:
mov p1,#00000101B
call segundo
mov p1,#00H
ret
N_Captura:
mov p1,#08H
Diseo digital con VHDL

digito1:
//primer digito nuevo
mov a,p2
jnz
digito1
//Se dej de presionar la ltima tecla?; Diferente de cero
lee1:
call antirrebote
mov r7,p2
mov a,p2
jz lee1
digito2:
mov a,p2
jnz
digito2
//Se dej de presionar la ltima tecla?; Diferente de cero
lee2:
call antirrebote
mov r6,p2
mov a,p2
jz lee2
digito3:
mov a,p2
jnz
digito3
//Se dej de presionar la ltima tecla?; Diferente de cero
lee3:
call antirrebote
mov r5,p2
mov a,p2
jz lee3
digito4:
mov a,p2
jnz
digito4
//Se dej de presionar la ltima tecla?; Diferente de cero
lee4:
call antirrebote
mov r4,p2
mov a,p2
jz lee4
mov p1,#00H
call segundo
mov p1,#08H
call segundo
mov p1,#00H
ret
//Termina interrupcin para ingresar nueva contrasea/////////////////////////
RGB:

//PWM para RGB


Diseo digital con VHDL

y1:
mov p1,#00001000B
call tiempo
call tiempo
mov p1,#00001100B
call tiempo
call tiempo
mov p1,#00001110B
call tiempo
call tiempo
mov p1,#00001100B
call tiempo
call tiempo
ret
tiempo://25ms
mov TMOD,#00H
mov TH0,#1FH
mov TL0,#0FH
setb TR0
jnb TF0,$
clr TF0
ret
segundo:
mov tmod,#01H
mov r0,#0FH
seg:
mov TH0,#00H
mov TL0,#00H
setb TR0
jnb TF0,$
clr TR0
clr TF0
djnz r0,seg
ret

//Modo 0
//
//
//inicia el temporizador; TR0 = '1'
//espera el desbordamiento
//repone la bandera de desbordamiento

//15 decimal
//el byte alto incrementar de 00H hasta FFH
//el byte bajo incrementar de 00H hasta FFH
//inicia el temporizador; TR0 = '1'
//espera el desbordamiento
//repone la bandera de desbordamiento
//Se repite esto 15 veces; es decir .666*15 aprox 1seg

//65 ms para el antirrebote


antirrebote:
mov tmod,#01H
mov TH0,#00H
//el byte alto incrementar de 00H hasta FFH
Diseo digital con VHDL

mov TL0,#00H
setb TR0
jnb TF0,$
clr TR0
clr TF0
ret

//el byte bajo incrementar de 00H hasta FFH


//inicia el temporizador; TR0 = '1'
//espera el desbordamiento
//repone la bandera de desbordamiento

end
Simulacin

Diseo digital con VHDL

CIRCUITO ARMADO

Diseo digital con VHDL

Conclusiones
Este programa comienza con una combinacin por default, sin embargo el usuario puede
cambiar de contrasea en cualquier momento, desde luego verificando la contrasea
anterior.
Al crear el cdigo para leer una secuencia de teclas es necesario tomar ciertas
consideraciones.
Primero debemos evitar el rebote al presionar una tecla, ya que esto puede causar que una
sola tecla se tome como varias lecturas. Una vez que se presion la primera tecla el
programa debe esperar para que se suelte la tecla anterior para aceptar la siguiente lectura
de la prxima tecla.
Cada dgito se guard en un registro diferente, por lo que accediendo a la interrupcin para
el cambio de contrasea se puede sobre escribir la combinacin que abra la puerta.
Para aislar el circuito de control digital de la carga de corriente alterna y evitar daos en los
componentes caso de fallas se utiliz el optoacoplador moc 3011, que dispara el gate de un
triac externo el cual activa la carga (cerradura).

Diseo digital con VHDL

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy