Practicas VHDL Ene-Jun 2014
Practicas VHDL Ene-Jun 2014
Practicas VHDL Ene-Jun 2014
INSTITUTO TECNOLGICO DE
CHIHUAHUA
Integrantes:
INSTITUTO TECNOLGICO DE
CHIHUAHUA
Prctica #1
Integrantes:
NDICE
MARCO TERICO
LGICA SECUENCIAL
LENGUAJE VHDL
MQUINA DE ESTADO FINITO
GAL: GENERIC ARRAY LOGIC
3
3
3
3
3
OBJETIVO
MATERIAL
DESARROLLO
CONCLUSIONES
6
8
9
9
10
10
11
11
12
12
13
13
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).
http://pdf.datasheetcatalog.net/datasheets/400/91494_DS.pdf
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
D
iseo en Flip-Flop tipo D
Simulacin Proteus
Diseo en Flip-Flop JK
Simulacin en Proteus
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
__________________________________________
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;
Compilacin
Pinout y utilizacin
Description
Used Max
______________________________________
| Dedicated Inputs | 11 | 11 |
| Clock/Inputs
| 1 | 1 |
| I/O Macrocells | 10 | 10 |
______________________________________
22 / 22 = 100 %
Simulacin
CIRCUITO ARMADO
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.
INSTITUTO TECNOLGICO DE
CHIHUAHUA
Prctica No.2
Integrantes:
NDICE
MARCO TERICO
LENGUAJE VHDL
GAL: GENERIC ARRAY LOGIC
4
4
4
OBJETIVO
MATERIAL
DESARROLLO
6
7
8
9
9
10
10
10
11
12
12
CIRCUITO ARMADO
13
CONCLUSIONES
14
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
http://pdf.datasheetcatalog.net/datasheets/400/91494_DS.pdf
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
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;
Pinout
Simulacin
Utilizacin de hardware
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
Pinout
Simulacin
CIRCUITO ARMADO
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.
INSTITUTO TECNOLGICO DE
CHIHUAHUA
Prctica No.3
Integrantes:
NDICE
Diseo digital con VHDL
MARCO TERICO
PROCESADOR
CDIGOS DE INSTRUCCIN
REGISTROS
5
5
5
6
OBJETIVO
MATERIAL
DESARROLLO
6
7
8
8
9
10
11
11
12
13
13
14
14
15
CIRCUITO ARMADO
16
CONCLUSIONES
16
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:
Cdigo de Operacin
Campo de Operacin
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:
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
Desarrollo
Operacin
CA
CA+B
C M[MAR]
Cdigo de
Operacin
0001
0010
0011
C A;
T T+1
PC PC+1; T T+1
T T +1
Ciclo de Ejecucin
T3Q1: C A;
T0
2. Operacin
C A + B;
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
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
Description
Used Max
______________________________________
| Dedicated Inputs | 1 | 11 |
| Clock/Inputs
| 1 | 1 |
| I/O Macrocells
| 7 | 10 |
______________________________________
9 / 22 = 40 %
Simulacin Timer
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
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
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.
INSTITUTO TECNOLGICO DE
CHIHUAHUA
Prctica No.4
Men de Rotacin
26 de Mayo de 2014
Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
NDICE
MARCO TERICO
LENGUAJE ENSAMBLADOR
MICRO CONTROLADOR
3
3
OBJETIVO
MATERIAL
DESARROLLO
3
3
3
3
3
CIRCUITO ARMADO
CONCLUSIONES
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.
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
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
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
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.
INSTITUTO TECNOLGICO DE
CHIHUAHUA
Prctica No. 5
Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468
NDICE
MARCO TERICO
OBJETIVO
MATERIAL
DESARROLLO
7
8
CIRCUITO ARMADO
CONCLUSIONES
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.
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
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;!!!
Simulacin
CIRCUITO ARMADO
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.
INSTITUTO TECNOLGICO DE
CHIHUAHUA
Prctica No.6
Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468
NDICE
MARCO TERICO
ESTRUCTURA DEL TECLADO HEXADECIMAL
3
3
OBJETIVO
MATERIAL
DESARROLLO
CDIGO EN ENSAMBLADOR
SIMULACIN
5
7
CIRCUITO ARMADO
CONCLUSIONES
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.
Datasheet AT89S52
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
Material
Mc AT89S52
Protoboard
Push button
Teclado Hexadecimal
Fuente de voltaje
Cable telefnico
Software
Keil uVision4
Proteus ISIS
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
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
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.
INSTITUTO TECNOLGICO DE
CHIHUAHUA
Prctica No.7
Sumador de 4 bits
3 de Junio de 2014
Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468
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
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
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
Keil uVision4
Proteus ISIS
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
en ctodo comn
en ctodo comn
en ctodo comn
en ctodo comn
en ctodo comn
en ctodo comn
en ctodo comn
en ctodo comn
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
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
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
INSTITUTO TECNOLGICO DE
CHIHUAHUA
Prctica No.8
Cronmetro de 0-59
13 de Junio de 2014
Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468
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
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.
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.
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
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
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
//Unidades
//GND
//Decenas
//GND
//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
ret
END
Simulacin
CIRCUITO ARMADO
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.
INSTITUTO TECNOLGICO DE
CHIHUAHUA
Prctica No.9
PWM
13 de Junio de 2014
Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468
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
Marco Terico
9.1.1 TMOD: Timer Mode Register
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)
C/T
M1
M0
GATE
C/T
Timer 1
M1
M0
Timer 0
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
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
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
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
Material
Desarrollo
Cdigo en ensamblador
//PWM
org 0
jmp inicio
org 0003H
call s1
reti
org 0013H
call s2
reti
inicio:
mov p1,#00H
mov IE,#085H
jmp inicio
s1:
//Seal 1
mov r4,#04H
mov r6,#06H
x1:
//20us alto
setb p1.0
setb p0.0
call tiempo
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
//10us
//FFH - AH
//inicia el temporizador; TR0 = '1'
//espera el desbordamiento
//repone la bandera de desbordamiento
end
Simulacin
CIRCUITO ARMADO
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.
INSTITUTO TECNOLGICO DE
CHIHUAHUA
Prctica No.9
Semforo Inteligente
17 de Junio de 2014
Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468
NDICE
MARCO TERICO
OBJETIVO
MATERIAL
DESARROLLO
CDIGO EN ENSAMBLADOR
SIMULACIN
4
14
CIRCUITO ARMADO
15
CONCLUSIONES
15
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:
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
VERDE
N S
E O
S N
O E
AMARILLO
ROJO
30
30
30
30
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:
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
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
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
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
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
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.
INSTITUTO TECNOLGICO DE
CHIHUAHUA
Proyecto
Cerradura Electrnica
18 de Junio de 2014
Integrantes:
Irving Hernndez Gallegos 12060397
Manuel Pin Flores 12060541
Julin Alejandro Solorio Gonzlez 12060544
David Adolfo Soto Tarango 12060468
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
Marco Terico
Datasheet 74LS245
Datasheet CTB06
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.
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
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
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
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:
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
mov TL0,#00H
setb TR0
jnb TF0,$
clr TR0
clr TF0
ret
end
Simulacin
CIRCUITO ARMADO
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).