Está en la página 1de 12

JESSICA VARGAS

SEBASTIAN REINOSA
VALENTINA ESCOBAR
SEBASTIAN DELGADO

TAREA 1
MICROPROCESADORES
SANTIAGO DE CALI,SEPTIEMBRE 9/2023
1. Leer un número entero sin signo de 8 bits desde el puerto B, y se debe conectar al puerto
D un display de 7 segmentos cátodo común.

• Si el número del puerto B es menor que 86, en el display se debe visualizar L (low -
bajo).
• Si el número del puerto B es mayor o igual que 86 y menor o igual que 169, el
display debe tener todos sus segmentos apagados.
• Si el número es mayor que 169, en el display se debe visualizar H (high – alto).

Como primer paso se debe configurar los puertos del micro ATMEGA328P que se van a
necesitar para realizar este algoritmo.

LDI R16, 0X00 El puerto B se configura con todos sus bits en cero (0X00) para que
OUT DDRB, R16 el microprocesador lo tome como entrada

LDI R16, 0XFF Los puertos C y D se configuran con todos sus bits en uno (0XFF)
OUT DDRD, R16 para que se tomen como salidas
OUT DDRC, R16:

LDI R18, 0x38 Valor hexadecimal para que aparezca una “L” en el display
LDI R19, 0x76 Valor hexadecimal para que aparezca una “H” en el display

Aquí comienza un bucle infinito nombrado "LEER", que se encarga de leer los valores de
entrada y realizar ciertas acciones en función de esos valores.

LEER:
IN R17, PINB Lee el valor del registro PINB y lo guarda en el registro R17.
ANDI R17,0xC0 Aplica una operación AND bit a bit entre R17 y el valor
hexadecimal 0xC0, dejando solo los 2 bits más significativos
del registro R17
SWAP R17 Intercambia los 4 bits menos significativos y los 4 bits más
significativos de R17
OUT PORTC, R17 Escribe el valor de R17 en el registro PORTC, mostrando los
2 bits más significativos en los pines del puerto C

Estas líneas se encargan de mostrar los 2 bits más significativos del puerto B en los pines
del puerto C.

CPI R17, 0X0C Compara el valor de R17 con 0x0C


BREQ ALTO Si la comparación anterior es verdadera (R17 es igual a
0x0C), salta a la etiqueta "ALTO"

Si los 2 bits más significativos del puerto B son iguales a 0x0C, se ejecuta el código
denominado "ALTO". Si no, se continúa con el siguiente bloque del código.

CPI R17, 0X08 Compara el valor de R17 con 0x08


BREQ MEDIO Si la comparación anterior es verdadera (R17 es igual a 0x08),
salta a la etiqueta "MEDIO"
Si los 2 bits más significativos del puerto B son iguales a 0x08, se ejecuta el código
"MEDIO". Si no, se continúa con el siguiente bloque de código.

OUT PORTD, R18 Escribe el valor de R18 en el registro PORTD, mostrando el


valor correspondiente en los pines del puerto D.
JMP LEER Salta a la etiqueta "LEER" para comenzar nuevamente el
bucle.

Estas líneas se encargan de mostrar el valor de R18 (0x38) en los pines del puerto D si los
2 bits más significativos del puerto B no son iguales a 0x0C ni 0x08, es decir, se mostrará la
“L”.

MEDIO:

CLR R16 Limpia el contenido del registro R16 (lo establece en 0)


OUT PORTD, R16 Escribe el valor de R16 en el registro PORTD, apagando los
LEDs conectados a los pines del puerto D
JMP LEER Salta a la etiqueta "LEER" para comenzar nuevamente el
bucle

Estas líneas se ejecutan si los 2 bits más significativos del puerto B son iguales a 0x08,
mostrando un estado intermedio apagando los LEDs del puerto D.

ALTO:
OUT PORTD, R19 Escribe el valor de R19 en el registro PORTD, mostrando el
valor correspondiente en los pines del puerto D.
JMP LEER Salta a la etiqueta "LEER" para comenzar nuevamente el
bucle.

Estas líneas se ejecutan si los 2 bits más significativos del puerto B son iguales a 0x0C,
mostrando un estado alto utilizando el valor de R19 (0x76) en los pines del puerto D, es
decir, se mostrará la “H” en el display.
2. Leer desde el puerto B un número entero codificado en BCD. El número se debe
visualizar en un display de siete segmentos cátodo común conectado al puerto D de
la siguiente forma:

• Si el bit 0 del puerto C es igual a 0, se debe visualizar en el display el dígito


decimal correspondiente a los 4 bits menos significativos del puerto B.
• Si el bit 0 del puerto C es igual a 1, se debe visualizar en el display el dígito
decimal correspondiente a los 4 bits más significativos del puerto B.
• En los dos casos anteriores, si el número binario de 4 bits corresponde a un
número decimal mayor que 9, los segmentos del display se deben apagar.

LDI R16, 0X00


OUT DDRB, R16 ; PUERTO DE ENTRADA
OUT DDRC, R16 ; PUERTO DE ENTRADA
LDI R16, 0XFF
OUT DDRD, R16 ; PUERTO DE SALIDA

LEER:
IN R16, PINC
ANDI R16, 0X01
CPI R16, 0
BREQ MSM

IN R17, PINB
SWAP R17
ANDI R17, 0X0F
CPI R17, 10
BRGE LED_OFF

CALL BCD
JMP LEER

MSM:

IN R17, PINB
ANDI R17, 0X0F
CPI R17, 10
BRGE LED_OFF

CALL BCD
JMP LEER

LED_OFF:

LDI R20, 0
OUT PORTD, R20
JMP LEER

BCD:

CPI R17, 0
BREQ CERO
CPI R17, 1
BREQ UNO
CPI R17, 2
BREQ DOS
CPI R17, 3
BREQ TRES
CPI R17, 4
BREQ CUATRO
CPI R17, 5
BREQ CINCO
CPI R17, 6
BREQ SEIS
CPI R17, 7
BREQ SIETE
CPI R17, 8
BREQ OCHO
JMP NUEVE

CERO:

LDI R20, 0X3F


OUT PORTD, R20
RET

UNO:
LDI R20, 0X06
OUT PORTD, R20
RET

DOS:

LDI R20, 0X5B


OUT PORTD, R20
RET

TRES:

LDI R20, 0X4F


OUT PORTD, R20
RET

CUATRO:
LDI R20, 0X66
OUT PORTD, R20
RET

CINCO:

LDI R20, 0X6D


OUT PORTD, R20
RET
SEIS:

LDI R20, 0X7D


OUT PORTD, R20
RET

SIETE:

LDI R20, 0X07


OUT PORTD, R20
RET

OCHO:

LDI R20, 0X7F


OUT PORTD, R20
RET

NUEVE:

LDI R20, 0X67


OUT PORTD, R20
RET

LDI R16, 0X00: Carga el valor hexadecimal 0x00 en el registro R16.


OUT DDRB, R16: Escribe el valor de R16 en el registro DDRB, configurando
los pines del puerto B como pines de entrada.

Estas primeras líneas configuran el puerto B como un puerto de entrada.

LDI R16, 0XFF: Carga el valor hexadecimal 0xFF en el registro R16.


OUT DDRD, R16: Escribe el valor de R16 en el registro DDRD, configurando
los pines del puerto D como pines de salida.
OUT DDRC, R16: Escribe el valor de R16 en el registro DDRC, configurando
los pines del puerto C como pines de salida.

Estas líneas configuran los puertos D y C como puertos de salida.

A partir de aquí, comienza un bucle infinito etiquetado como "LEER", que se encarga de leer
los valores de entrada y realizar ciertas acciones en función de esos valores.

IN R17, PINB: Lee el valor del registro PINB y lo guarda en el registro R17.
ANDI R17, 0xC0: Aplica una operación AND bit a bit entre R17 y el valor
hexadecimal 0xC0, dejando solo los 2 bits más significativos
del registro R17.
SWAP R17: Intercambia los 4 bits menos significativos y los 4 bits más
significativos de R17.
OUT PORTC, R17: Escribe el valor de R17 en el registro PORTC, mostrando los
2 bits más significativos en los pines del puerto C.

Estas líneas se encargan de mostrar los 2 bits más significativos del puerto B en los pines
del puerto C.

CPI R17, 0X0C: Compara el valor de R17 con 0x0C.


BREQ ALTO: Si la comparación anterior es verdadera (R17 es igual a
0x0C), salta a la etiqueta "ALTO".

Si los 2 bits más significativos del puerto B son iguales a 0x0C, se ejecuta el código
etiquetado como "ALTO". Si no, se continúa con el siguiente bloque de código.

CPI R17, 0X08: Compara el valor de R17 con 0x08.


BREQ MEDIO: Si la comparación anterior es verdadera (R17 es igual a
0x08), salta a la etiqueta "MEDIO".

Si los 2 bits más significativos del puerto B son iguales a 0x08, se ejecuta el código
etiquetado como "MEDIO". Si no, se continúa con el siguiente bloque de código.

OUT PORTD, R18: Escribe el valor de R18 en el registro PORTD, mostrando el


valor correspondiente en los pines del puerto D.
JMP LEER: Salta a la etiqueta "LEER" para comenzar nuevamente el
bucle.

Estas líneas se encargan de mostrar el valor de R18 (0x38) en los pines del puerto D si los
2 bits más significativos del puerto B no son iguales a 0x0C ni 0x08.

MEDIO: Etiqueta que marca el comienzo del código para mostrar un estado
intermedio.
CLR R16: Limpia el contenido del registro R16 (lo establece en 0).
OUT PORTD, R16: Escribe el valor de R16 en el registro PORTD, apagando los
LEDs conectados a los pines del puerto D.
JMP LEER: Salta a la etiqueta "LEER" para comenzar nuevamente el bucle.

Estas líneas se ejecutan si los 2 bits más significativos del puerto B son iguales a 0x08,
mostrando un estado intermedio apagando los LEDs del puerto D.

ALTO: Etiqueta que marca el comienzo del código para mostrar un estado alto.
OUT PORTD, R19: Escribe el valor de R19 en el registro PORTD, mostrando el valor
correspondiente en los pines del puerto D.
JMP LEER: Salta a la etiqueta "LEER" para comenzar nuevamente el bucle.

Estas líneas se ejecutan si los 2 bits más significativos del puerto B son iguales a 0x0C,
mostrando un estado alto utilizando el valor de R19 (0x76) en los pines del puerto D.

También podría gustarte