Tarea 1 Micro
Tarea 1 Micro
Tarea 1 Micro
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.
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.
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:
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:
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:
UNO:
LDI R20, 0X06
OUT PORTD, R20
RET
DOS:
TRES:
CUATRO:
LDI R20, 0X66
OUT PORTD, R20
RET
CINCO:
SIETE:
OCHO:
NUEVE:
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.
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.
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.
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.