República Bolivariana de Venezuela
Ministerio del Poder Popular para la Educación
Facultad Experimental de Ciencias Y Tecnología
Universidad de Carabobo
Naguanagua. Edo. Carabobo
Arquitectura del computador
Practica 3:
Puertos E/S del Microcontrolador 8051
Profesor: Integrante(s):
José Canache Jesús Machado
CI-28.553.080
Octubre 2022.
1. Explique detalladamente los puertos
Funcionamiento de los pines del microcontrolador
Los microcontroladores 8051 tienen cuatro puertos de E / S donde en cada puerto contiene 8
pines que se pueden configurar como entradas o salidas. La configuración de los pines, ya sea que
se configure como I / P (1) o O / P (0), depende de su estado lógico. Para configurar un pin del
microcontrolador como salida, es necesario aplicar un cero lógico (0) a los bits del puerto de E / S
adecuados. En este caso, el nivel de voltaje en el pin apropiado será 0.
Asimismo, para configurar un pin de microcontrolador como entrada, es necesario aplicar uno
lógico (1) al puerto adecuado. En este caso, el nivel de voltaje en el pin apropiado será de 5V. Esto
puede parecer confuso, todo queda claro después de estudiar circuitos electrónicos simples
conectado a un pin de E / S.
¿Qué características tienen los cuatro puertos del 8051?
Cada puerto tiene 8 pines. Por lo tanto, los cuatro puertos suman 32 pines.
Todos los puertos son bidireccionales.
Están construidos con un latch de salida tipo D. Tienen drivers de salida y buffers de
entrada.
Podemos modificar sus funciones mediante el software y el hardware al que se conectan.
Todos los puertos se configuran como puertos de entrada en el Reset.
Para configurar los puertos como puerto de entrada hay que escribir 1 en ese puerto
Para configurarlo como puerto de salida se debe escribir 0 en él.
Características del puerto 0
La dirección es 80H
Construcción: El puerto 0 tiene un latch tipo D, un buffer unidireccional y 2 FETs en cada
pin. No tiene una resistencia interna de pull-up. Se necesita una resistencia de pull-up
externa cuando el puerto 0 se define como puerto de salida.
El puerto 0 del 8051 tiene dos funciones principales: Ser utilizado como un simple puerto
de entrada-salida y acceder a la memoria externa junto con el puerto 2.
Funciones del puerto 0
Puerto de E/S simple:
Cuando usamos el puerto 0 como puerto de entrada, el latch interno debe saber que está siendo
usado para entrada, y por lo tanto, se escribe un 1 digital (FFH) en la dirección del puerto de 80H.
Esto apaga los transistores haciendo que el pin flote en estado de alta impedancia conectándolo al
buffer de entrada. Podemos leer los datos desde 'Read Pin Data'/'Read Latch Bit'.
Cuando usamos el puerto 0 como puerto de salida, el latch programado a 0 se encenderá. En
consecuencia, el FET se conectará a GND. Aquí necesitaremos una resistencia externa de pull up
(10k Ohm) para dar un '1' lógico para usar el puerto 0 como puerto de salida.
Acceso a la memoria externa:
Cuando el 8051 quiere acceder a la memoria externa, la dirección de la memoria se genera por el
puerto 0 y el puerto 2. Obtenemos la mitad inferior de la dirección desde el Puerto 0 y la mitad
superior desde el Puerto 2. Esto se hace mediante pulsos ALE, que ayudan a enganchar la
dirección al bus externo. Una vez hecho esto, el Puerto 0 vuelve a ser un puerto de entrada para
leer datos de esa memoria.
Características del puerto 1:
La dirección es 90H
Construcción: El puerto 1 tiene un latch D, dos buffers unidireccionales, 1 FET y una
resistencia interna de pull-up en cada pin.
Sólo tiene una función: actuar como puerto de entrada-salida.
La función del puerto 1 - puerto de E/S:
Cuando el Puerto 1 está funcionando en la capacidad de un puerto de entrada, un '1' digital (FFH)
se escribe en el latch. A los 90H. Esto apaga el transistor, y el pin flota en un estado de alta
impedancia. En consecuencia, se conecta al buffer de entrada.
Cuando el puerto 1 está funcionando en la capacidad de un puerto de salida, el latch recibe una
señal 'LOW' (00H). Esto hace que el FER (Transistor de Efecto de Campo) se ponga en O. La
resistencia de pull-up está en OFF, y el puerto se utiliza como puerto de salida.
Características del puerto 2
La dirección es 10H
Construcción: El puerto 2 tiene un latch tipo D, 1 FET, una resistencia interna de pull-up,
dos buffers unidireccionales y un bloque de lógica de control.
Sus funciones principales son similares a las del puerto 0. Puede ser utilizado como un
puerto de entrada-salida. Y puede acceder a la memoria externa junto con el puerto 0.
Funciones del puerto 2
Puerto de E/S:
Bastante similar al Puerto 0. La única diferencia aquí es que en el Puerto 2, usamos un FET con una
resistencia interna de pull-up en lugar de los dos FETs que vimos en el Puerto 0.
Acceso a la memoria:
El puerto 2 se utiliza junto con el puerto 0 para generar la dirección superior de la ubicación de
memoria externa a la que se necesita acceder. Sin embargo, una diferencia clave es que no
necesita girar y obtener un 1 en el latch inmediatamente para la entrada como en el Puerto 0.
Puede permanecer estable.
Características del puerto 3
La dirección es B0H
Construcción: El tercer puerto del 8051 tiene un latch de tipo D. Además, tiene tres buffers
unidireccionales. Un FET con una resistencia interna de pull-up. Además, también tiene
una puerta NAND conectada al FET.
El puerto 3 realiza dos funciones principales, como veremos a continuación.
Funciones del puerto 3
Puerto de E/S
Al igual que el puerto 2, el puerto 3 puede funcionar como un puerto de entrada-salida.
Función del SFR alternativo
La entrada al SFR 1, obtenemos la salida del latch como 1, que enciende la puerta NAND, y
dependiendo del valor del 'Alternate Output Pin', el FET estará ON/OFF.
RXD: se utiliza para un puerto de entrada en serie
TXD: se utiliza para un puerto de salida en serie
INT0: se utiliza para una interrupción externa 0
INT1: se utiliza para la interrupción externa 1
T0: Entrada externa del temporizador 0
T1: Entrada externa del temporizador 1
WR: Estroboscopio de escritura de la memoria de datos externa
RD: Estroboscopio de lectura de la memoria de datos externa
Instrucciones para los puertos:
A continuación, se muestra una lista de instrucciones que leen los búferes de entrada
Instrucción Ejemplo Explicación
MOV A, puerto Mueve los datos de un puerto
dado a la bandera de acarreo
MOV
MOV A, puerto Mueve los datos de un puerto
dado al acumulador
JNB JNB puerto, dirección Comprueba el valor del buffer
de entrada. Si el valor es cero
entonces transfiere el control
a la dirección dada
JB JB puerto, dirección Comprueba el valor del búfer
de entrada. Si el valor es
distinto de cero, transfiere el
control a la dirección indicada
CJNE CJNE A, puerto, dirección Comprueba el valor del búfer
de entrada de un puerto. Lo
compara con el valor del
acumulador. Si los valores no
son iguales entonces el
control se transfiere a una
dirección dada
La siguiente tabla muestra todas las instrucciones que leen el valor del latch del puerto
Instrucción Ejemplo Explicación
ANL ANL P1, A Realiza el AND lógico entre el
valor almacenado en el latch
del puerto y el acumulador.
Después escribe el nuevo
valor en el latch
ORL ORL P1, A Realiza el OR lógico entre el
valor almacenado en el latch
del puerto y el acumulador.
Después de esto, escribe el
nuevo valor en el latch
XRL XRL P1, A Realiza el XOR lógico entre el
valor almacenado en el latch
del puerto y el acumulador.
Después, escribe el nuevo
valor en el latch
JBC JBC puerto, Dirección Si el valor en un puerto dado
es 1 entonces salta a una
dirección dada y luego borra
el latch
CPL CPL, puerto Completa los datos en el latch
MOV MOV puerto, C Lee el valor en el latch de un
puerto dado y luego lo
transfiere a la bandera de
acarreo
CLR CLR puerto Borra el valor almacenado en
el latch de un puerto
SETB SETB puerto Establece el valor de un latch
2. ¿Qué secuencia de instrucciones podría utilizarse para leer el bit 0 del puerto 0 y escribir
el estado del bit leído en el bit 0 del puerto 3?
MOV C, P0.0
MOV P3.0, C
3. Muestre una secuencia de instrucciones útil para leer los bits 0 y 1 del puerto 0 y escribir
una condición de estado en el bit 0 del puerto 3 como se indica a continuación: si los dos
bits leídos son 1, escriba un 1 en el bit de estado de salida; en caso contrario escriba un 0
MOV C, P1.0
ANL C, P1.1
MOV P3.0, C
4. ¿Cuáles son las diferencias entre una E/S por asignación de memoria y un puerto de E/S?
Explique su respuesta.
Los microcontroladores que utilizan E/S mapeadas en memoria tratarían los dispositivos de E/S
como ubicaciones de memoria, por lo que todas las instrucciones que acceden a la memoria se
aplicarían también a estos dispositivos de E/S. Por el contrario, algunos microcontroladores se
conectan a los dispositivos de E/S a través de puertos de E/S diseñados especialmente para ellos.
En este caso, se requieren instrucciones de E/S de propósito especial para acceder a estos
dispositivos de E/S.
5. Explicar detalladamente los registros con funciones especiales (TCON-TMOD-TL0-TH0-
TL1-TH1)
TCON (Timer Control Register, Dirección 88H, Direccionable a nivel Bit)
Configura y modifica las funciones de los Timers T0 y T1.
TMOD (Timer Mode Control Register, Dirección 89H)
TMOD es un registro de 8 bits que se utiliza para seleccionar temporizador o contador y modo de
temporizadores. Los 4 bits inferiores se usan para controlar la operación del temporizador 0 o el
contador 0, y los 4 bits restantes se usan para controlar la operación del temporizador 1 o el
contador 1. Este registro está presente en el registro SFR, la dirección para el registro SFR es 89th.
TLx/THx (Timer x Low/High, Direcciones 8AH/8BH ó 8CH/8DH) (x sea 0 o 1)
Un timer puede pedir una interrupción con carácter periódico (modo temporizador), o después de
recibir un determinado número de flancos de bajada en una patilla (modo contador). Los dos
modos incrementan los registros TLx y THx que piden una interrupción en el momento en que se
desbordan.
6. Explicar detalladamente los modos del temporizador (Timer)
Modo 0: Este es un modo de 13 bits que significa que la operación del temporizador se
completa con pulsos “8192”.
Modo 1: Este es un modo de 16 bits, lo que significa que la operación del temporizador se
completa con pulsos de reloj máximos de '65535'.
Modo 2: Este modo es un modo de recarga automática de 8 bits, lo que significa que la
operación del temporizador se completa con solo '256' pulsos de reloj.
Modo 3: Este modo es un modo de temporizador dividido, lo que significa los valores de
carga en T0 e inicia automáticamente el T1.
7. Explicar detalladamente la relación entre los modos del temporizador y las banderas de
desbordamiento
Un temporizador consta de una serie de flip-flops de división entre 2, los cuales reciben una señal
de entrada como su fuente de reloj. El reloj se aplica al primer flip-flop, el cual divide la frecuencia
del reloj entre 2. La salida del primer flip-flop se aplica a la entrada de reloj del segundo flip-flop,
que también divide la frecuencia entre 2, y así sucesivamente. Un temporizador con un número n
de etapas divide la frecuencia del reloj de entrada entre , ya que cada etapa sucesiva divide entre
2. La salida de la última etapa se aplica a la entrada de reloj de un flip-flop de desbordamiento del
temporizador, o flag, cuyo estado puede ser verificado mediante el software y su establecimiento
en 1 puede generar una interrupción. Podemos considerar al valor binario de las salidas de los flip-
flops del temporizador como la “cuenta” del número de pulsos del reloj (o “eventos”) desde que el
temporizador se inició. Por ejemplo, un temporizador de 16 bits contaría desde 0000H hasta
FFFFH. La bandera de desbordamiento se establecería en 1 en el desbordamiento de FFFFH a
0000H del conteo.
8. Explicar detalladamente las fuentes de interrupción y el registro IE
Una interrupción es la ocurrencia de una condición (o evento) que ocasiona la suspensión
temporal de un programa mientras que otro programa se encarga de servir a dicha condición. Las
interrupciones cumplen una función importante en el diseño y la implementación de las
aplicaciones con microcontroladores. Las interrupciones permiten que un sistema pueda
responder a un evento en forma asíncrona y se encargue del evento mientras se ejecuta otro
programa.
Fuentes de interrupción:
Interrupción interna (interrupción del temporizador): 8051 tiene dos interrupciones
internas, a saber, timer0 y timer1. Cada vez que el temporizador se desborda, se
establecen las banderas de desbordamiento del temporizador (TF0 / TF1). Luego, el
microcontrolador salta a su dirección vectorial para servir la interrupción. Para esto, se
debe habilitar la interrupción global y del temporizador.
Interrupción en serie: 8051 tiene un puerto de comunicación en serie y tiene indicadores
de interrupción en serie relacionados (TI / RI). Cuando se transmite el último bit (bit de
detención) de un byte, se establece el indicador de interrupción en serie de TI y cuando se
recibe el último bit (bit de detención) del byte de datos de recepción, se establece el
indicador RI.
Interrupciones externas en 8051:
8051 tiene dos interrupciones externas INT0 e INT1.
El controlador 8051 puede ser interrumpido por una interrupción externa,
proporcionando nivel o borde en los pines de interrupción externa PORT3.2, PORT3.3.
Los periféricos externos pueden interrumpir el microcontrolador a través de estas
interrupciones externas si se habilitan las interrupciones globales y externas.
Luego, el microcontrolador ejecutará la instrucción actual y saltará a la Rutina de servicio
de interrupción (ISR) para servir para interrumpir.
En el método de sondeo, el microcontrolador debe verificar continuamente el pulso
mediante el monitoreo del pin, mientras que, en el método de interrupción, el
microcontrolador no necesita sondear. Cada vez que ocurre una interrupción, el
microcontrolador atiende la solicitud de interrupción.
El registro de interrupciones IE: Cada una de las fuentes de interrupción se habilita o deshabilita
en forma individual mediante el registro de función especial IE (habilitador de interrupción), el
cual es direccionable por bit y está ubicado en la dirección 0A8H. Así como existen bits individuales
de habilitación para cada fuente de interrupción, hay un bit de habilitación/deshabilitación global
que se desactiva para deshabilitar todas las interrupciones o se activa para habilitarlas.
Se deben activar dos bits para habilitar cualquier interrupción: el bit individual de habilitación y el
bit de habilitación global. Por ejemplo, las interrupciones del temporizador 1 se habilitan como
sigue:
SETB ET1 ;HABILITA INTERRUPCION DE TEMPORIZADOR 1
SETB EA ;ACTIVA EL BIT DE HABILITACION GLOBAL
También podemos codificar esto como
MOV IE,#l000l000B
9. Explicar detalladamente la secuencia de sondeo, el esquema de prioridades y el registro
IP:
Prioridad de las interrupciones
Cada fuente de interrupción se programa de manera individual con uno de dos niveles de
prioridad mediante el registro de función especial direccionable por bit IP (prioridad de
interrupción) en la dirección 0B8H.
El registro IP se borra después de una reinicialización del sistema para que todas las interrupciones
empiecen en el nivel de prioridad más bajo de manera predeterminada. El concepto de
“prioridades” permite que una rutina de servicio de interrupciones se interrumpa mediante una
interrupción si esta nueva interrupción es de una prioridad más alta que la interrupción a la que se
está dando servicio. Esto es simple y directo en el 8051, ya que sólo existen dos niveles de
prioridad. Si una ISR de baja prioridad se está ejecutando cuando ocurre una interrupción de alta
prioridad, esta ISR se interrumpe. Una ISR de alta prioridad no puede ser interrumpida.
Bit Símbolo Dirección de Descripción (1 = alto nivel, 0 = bajo nivel)
bit
IP.7 ------- ------ Indefinido
IP.6 ------- ------ Indefinido
IP.5 PT2 0BDH Prioridad de interrupción del temporizador 2 (8052)
IP.4 PS 0BCH Prioridad de interrupción del puerto serial
IP.3 PT1 0BBH Prioridad de interrupción del temporizador 1
IP.2 PX1 0BAH Prioridad de interrupción externa 1
IP.1 PT0 0B9H Prioridad de interrupción del temporizador 0
IP.0 PX0 0B8H Prioridad de interrupción externa 0
Resumen del registro IP (prioridad de interrupción)
El programa principal, que se ejecuta a nivel base y no está asociado con ninguna interrupción,
siempre puede interrumpirse sin importar la prioridad de la interrupción. Si ocurren dos
interrupciones de diferente prioridad simultáneamente, se le dará servicio a la interrupción de
más alta prioridad primero.
Secuencia de sondeo
Si ocurren dos interrupciones de la misma prioridad simultáneamente, una secuencia de sondeo
fija determina a cuál se le dará servicio primero. La secuencia de sondeo es: externa 0,
temporizador 0, externa 1, temporizador 1, puerto serial, temporizador 2.
El cuadro anterior ilustra las cinco fuentes de interrupción, el mecanismo de habilitación individual
y global, la secuencia de sondeo, y los niveles de prioridad. El estado de todas las fuentes de
interrupción está disponible mediante sus bits de bandera respectivos en los SFR. Por supuesto
que, si cualquier interrupción está deshabilitada, entonces no ocurre ninguna interrupción, pero
aun así el software puede probar la bandera de interrupción. Los ejemplos del temporizador y del
puerto serial presentados en los dos capítulos anteriores utilizaron las banderas de interrupción en
forma extensa, sin aplicar interrupciones.
Una interrupción del puerto serial es resultado de un OR lógico de una interrupción de recepción
(RI) o una interrupción de transmisión (TI). De la misma forma, las interrupciones del temporizador
2 se generan mediante un desbordamiento del temporizador (TF2) o mediante la bandera de
entrada externa (EXF2).
10. Explicar detalladamente la sincronización de interrupciones y su relación con los ciclos
de máquina
Las interrupciones se muestrean y fijan en la etapa S5P2 de cada ciclo de máquina. (Consulte la
figura anterior). Estas interrupciones se sondean en el siguiente ciclo de máquina y, cuando existe
una condición de interrupción, se aceptan si (a) no existe otra interrupción de una prioridad igual
o más alta en proceso, (b) el ciclo de sondeo es el último ciclo en una instrucción, y (c) la
instrucción en proceso no es una RETI ni algún acceso a IE o IP. El procesador almacena el
contador de programa en la pila durante los siguientes dos ciclos, y carga el PC con la dirección del
vector de interrupción. La ISR comienza. La condición de que la instrucción en proceso no sea una
instrucción RETI asegura que, por lo menos, una instrucción se ejecutará después de cada rutina
de servicio de interrupción. La figura siguiente muestra la sincronización.
El tiempo entre la ocurrencia de una condición de interrupción y el comienzo de la ISR se conoce
como latencia de interrupción. Este tiempo es crítico en muchas de las aplicaciones de control.
Con un cristal de 12 MHz, la latencia de interrupción puede ser tan corta como 3.25 us en el 8051.
Un sistema basado en el 8051 que utilice una interrupción de alta prioridad siempre tendrá una
latencia de interrupción, en el peor caso, de 9.25 us (si asumimos que la interrupción de alta
prioridad siempre está habilitada). Esto ocurre si existe una condición justo antes de la instrucción
RETI de una ISR de nivel 0 que está seguida por una instrucción de multiplicación