Вы находитесь на странице: 1из 5

Universidad Autónoma de Chihuahua

Facultad de ingeniería

Microprocesadores
Practica 3

Integrantes del equipo:

Marcos Samuel Gómez García 199441


Luís Gerardo Arreola Vivanco 199470
Hugo Cesar Ortiz Palma 199729
Reporte Práctica #3
Objetivo:

Implementar un contador de interrupciones externas

Material:

- Un microcontrolador del tipo 8051


- 2 displays de 7 segmentos
- 2 transistores 2n2222
- Un circuito inversor
- 1 capacitor
- 2 push buttons
- Un cristal de 12Mhz
- Protoboard
- Cable

Desarrollo:

Se manejará el pin 12 del microcontrolador que es el tercer pin de puerto 3 (P3.2)


asignado para las interrupciones externas al dispositivo.
Las interrupciones serán mandadas por un push button que estará conectado a dicho pin
del dispositivo. Cada vez que se presione el push button se deberá de generar una
interrupción, la cual será acumulada en memoria de programa para su procesamiento y
su posterior despliegue en los displays.
Se utilizarán 2 displays de 7 segmentos los cuales deberán de estar conectados en forma
multiplexada y generaran una numeración del 0 al 9 cada display para que de ese modo
se pueda lograr un conteo hasta el 99 y rebasando ese numero debe de regresar a 00
Los displays se encenderán alternadamente pero a una gran velocidad para que de esa
manera se puedan visualizar el contenido de cada display casi al mismo tiempo. Para
esto se utilizará un circuito inversor, el cual dependiendo del dato que provenga del pin
P2.0 mandará una bandera hacia los displays previamente pasando por los transistores
para que de esa manera puedan encender alternadamente según sea requerido.
Los displays deben de mostrar un 00 al encendido asi como al momento de resetear el
programa.

La configuración del reset y del cristal es la típica configuración que se debe seguir al
utilizar este tipo de microcontrolador.

Las conversiones de los números a 7 segmentos se deben realizar por medio de software
así como el switcheo de los displays y el conteo de las interrupciones al presionar el
botón correspondiente.

Observaciones:

Antes que nada se debe hacer un salto hacia el programa principal para respetar el
espacio en donde el vector de interrupciones trabaja.
Se deben de activar las interrupciones, definir el tipo de disparo de la interrupción así
como el tipo de interrupción a utilizar.
La subrutina de interrupción debe de regresar con la instrucción RETI.

Los datos que irán a ambos displays saldrán por el mismo puerto.
Se debe declarar una tabla para la conversión a 7 segmentos.

Comentarios:

Esta práctica también se pudo haber realizado utilizando circuitos decodificadores para
no tener que realizar la conversión a 7 segmentos por medio de software ni los
transistores y el circuito inversor, ya que si se realiza un ajuste a decimal se nos
mostraban los números de 0 a 99 en formato BCD lo cual facilitaba la tarea ya que ya
nos daban las decenas en 4 pines y las unidades en los otros 4 pines restantes.
También se podía mostrar las unidades por un puerto y las decenas por otro y cada uno
conectarse a displays distintos. Pero esto ya es cuestión de diseño.
Al presionar el botón de la interrupciones en veces se contaban más de las instrucciones
pedidas, al parecer el botón era demasiado sensible al toque y mientras mas se
presionaba mas interrupciones contaba. También se dio el caso de que al llegar a 99 y
volver a empezar no quería avanzar de nuevo hasta que se presionará el reset, pero solo
al probarlo físicamente ya que en la simulación funcionaba perfectamente.

Conclusiones:

Se utilizó la interrupción por transición ya que de esa manera automáticamente al


presionar el botón se genera la interrupción y sale de la rutina de interrupción casi al
instante.
Se utilizaron displays de ánodo común para conectarlos directamente a Vcc para su
mejor visualización.

Código:

JMP INICIO;Salta a la etiqueta INICIO

ORG 3;Direccion del vector de interrupcion


CLR A;Pone en ceros el registro acumulador
MOV A,R0;Mueve lo que traiga R0 al acumulador
ADD A,#01;Incrementa la cuenta en 1
MOV R0,A;Mueve lo del acumulador a R0

CJNE R0,#0Ah,FINAL;Compara si lo que tiene R0 es un 10


avanza sino salta a la etiqueta FINAL
MOV R0,#0;Pone en ceros el contenido de R0

CLR A;Pone en ceros el registro acumulador


MOV A,R1;Mueve lo que traiga R1 al acumulador
ADD A,#01;Incrementa la cuenta en 1
MOV R1,A;Mueve lo del acumulador a R0

CJNE R1,#0Ah,FINAL;Compara si lo que tiene R1 es un 10


avanza sino salta a la etiqueta FINAL
MOV R1,#0;Pone en ceros el contenido de R1
FINAL: RETI;Termina subrutina de interrupcion

INICIO: MOV DPTR,#TABLA;Mueve los datos de la direccion de la


tabla al registro DPTR
MOV R0,#0;Manda un cero al registro R0
MOV R1,#0;Manda un cero al registro R1
MOV R2,#81H;Manda un 81h al registro R2
MOV P0,R2;Muestra 00 en displays por el puerto cero

PRINCIPAL: SETB IT0;Activa la interrupcion por transicion


SETB EA;Habilita todas las interrupciones del puerto
SETB EX0;Habilita la interrupcion externa cero

MOV A,R0;Mueve lo que traiga R0 al acumulador


MOVC A,@A+DPTR;Agrega al acumulador los datos que
traiga el puntero
CLR C;Mueve un cero al registro de acarreo
MOV P2.0,C;Mueve lo que traiga el acarreo al pin cero del
puerto dos
MOV P0,A;Muestra por el puerto cero los datos que traiga el
registro A

CLR A;Pone en ceros el registro acumulador

MOV A,R1;Mueve lo que traiga R1 al acumulador


MOVC A,@A+DPTR;Agrega al acumulador los datos que
traiga el puntero
SETB C;Mueve un uno al registro de acarreo
MOV P2.0,C;Mueve lo que traiga el acarreo al pin cero del
puerto dos
MOV P0,A;Muestra por el puerto cero los datos que traiga el
registro A

CJNE R0,#0AH,PRINCIPAL;Compara si lo que tiene R0 es un


10 avanza sino salta a la etiqueta PRINCIPAL
CJNE R1,#0AH,PRINCIPAL;Compara si lo que tiene R1 es un
10 avanza sino salta a la etiqueta PRINCIPAL
JMP INICIO;Salta a la etiqueta INICIO
;xabc defg
TABLA: DB 0081h;0 1000 0001
DB 00CFh;1 1100 1111
DB 0092h;2 1001 0010
DB 0086h;3 1000 0110
DB 00CCh;4 1100 1100
DB 00A4h;5 1010 0100
DB 00A0h;6 1010 0000
DB 008Fh;7 1000 1111
DB 0080h;8 1000 0000
DB 0084h;9 1000 0100

END;Fin del programa

Вам также может понравиться