0% encontró este documento útil (0 votos)
215 vistas4 páginas

Programa en Ensamblador para ATmega325P

El programa lee el estado de un interruptor conectado al puerto D de un microcontrolador ATmega325P. Si el interruptor está en 0, envía un patrón de bits desplazándose hacia la derecha por el puerto B. Si el interruptor está en 1, envía el patrón desplazándose hacia la izquierda. El programa controla la velocidad del desplazamiento mediante una constante de retardo.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
215 vistas4 páginas

Programa en Ensamblador para ATmega325P

El programa lee el estado de un interruptor conectado al puerto D de un microcontrolador ATmega325P. Si el interruptor está en 0, envía un patrón de bits desplazándose hacia la derecha por el puerto B. Si el interruptor está en 1, envía el patrón desplazándose hacia la izquierda. El programa controla la velocidad del desplazamiento mediante una constante de retardo.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

ENSAMBLADORES E INTERPRETES.

Alumna: Estefanía Rodríguez Sánchez.

Facilitador: Elsa Viveros Galván.

Carrera: Ingeniería en sistemas computacionales.

Ciclo:10.

Tarea 8. Instrucciones de Entrada-Salida.

Fecha: 26 de noviembre del 2023.


Instrucciones de Entrada-Salida.

Diseña, captura, ensambla, depura (si es necesario) y ejecuta un programa en


ensamblador que realice la siguiente función:
Lea el estado de un interruptor conectado a uno de los pines del puerto D.
Si el pin está en 0, que se envíe al puerto B un “bit caminante” hacia la
derecha, es decir, que primero active por un cierto tiempo sólo el pin 7 del
puerto, después que desactive el pin 7 y se active por un tiempo sólo el pin 6,
después que desactive el pin 6 y se active por un tiempo sólo el pin 5, y así
sucesivamente hasta que se active el pin 0. Después de la activación del pin 0,
se repite el ciclo iniciando desde el pin 7 nuevamente.
Si el pin del puerto D está en 1, que se envíe al puerto B un “bit caminante”
hacia la izquierda.

Codigo AVR

;
; [Link]
;
; Created: 26/11/2023 [Link] PM
; Author : Fanny Rodriguez
;
.include "[Link]"
.def TEMP = r16
.def INDEX = r17
.def DELAY_LOW = r18
.def DELAY_HIGH = r19
.equ PORTB_ADDR = 0x18 ; Dirección del registro de datos del puerto B en
ATmega325P
.equ PORTD_ADDR = 0x11 ; Dirección del registro de entrada del puerto D en
ATmega325P
.equ DELAY_COUNT = 10000 ; Ajusta este valor para controlar la velocidad del bit
caminante
.org 0x0000 ; Dirección de inicio de la memoria de programa
rjmp main ; Salta a la etiqueta main al inicio
main:
ldi TEMP, (1 << PD2) ; Configura el pin PD2 como entrada (interruptor)
out DDRD, TEMP ; Establece el bit correspondiente en el registro DDRD
bit_walker_loop:
sbis PIND, PD2 ; Salta si el interruptor está en 1 (no presionado)
rcall bit_walker_right ; Llama a la rutina si el interruptor está en 0
rjmp bit_walker_left ; Salta a la rutina de caminante a la izquierda
bit_walker_right:
ldi TEMP, 0x01 ; Inicializa el registro con el bit más bajo activado
ldi INDEX, 7 ; Inicializa el índice del bit más alto a activar
bit_walker_right_loop:
out PORTB, TEMP ; Envía el contenido de TEMP al puerto B
call delay ; Llama a la rutina de espera
lsl TEMP ; Desplaza el bit hacia la izquierda
dec INDEX ; Decrementa el índice del bit
brne bit_walker_right_loop ; Salta al bucle mientras el índice no sea cero
ret
bit_walker_left:
ldi TEMP, 0x80 ; Inicializa el registro con el bit más alto activado
ldi INDEX, 0 ; Inicializa el índice del bit más bajo a activar
bit_walker_left_loop:
out PORTB, TEMP ; Envía el contenido de TEMP al puerto B
call delay ; Llama a la rutina de espera
lsr TEMP ; Desplaza el bit hacia la derecha
inc INDEX ; Incrementa el índice del bit
cpi INDEX, 8 ; Compara el índice con 8 (número total de bits en el puerto B)
brne bit_walker_left_loop ; Salta al bucle mientras el índice no sea 8
ret
delay:
ldi DELAY_LOW, (DELAY_COUNT & 0xFF) ; Carga el byte menos significativo de
DELAY_COUNT
ldi DELAY_HIGH, (DELAY_COUNT >> 8) ; Carga el byte más significativo de
DELAY_COUNT
delay_loop:
dec DELAY_LOW ; Decrementa el contador de espera (byte menos significativo)
brne delay_loop ; Salta al bucle mientras el byte menos significativo no sea
cero
dec DELAY_HIGH ; Decrementa el contador de espera (byte más significativo)
brne delay_loop ; Salta al bucle mientras el byte más significativo no sea
cero
ret

Captura de pantalla del programa compilando correctamente

En resumen, el programa crea un efecto visual en el puerto B del


ATmega325P, donde un patrón de bits se desplaza hacia la derecha o hacia la
izquierda en función del estado de un interruptor conectado al pin PD2. La
velocidad del desplazamiento está controlada por la constante
DELAY_COUNT.

Referencias

Convertronic., P. T. (5 de mayo de 2020). Microcontroladores AVR y sus funciones de


seguridad funcional para control en tiempo real, conectividad y AP. Obtenido de
[Link]
Portal., R. H. (2020). Supervisión y gestión del Estado y el rendimiento del sistema.
Obtenido de
[Link]
html-single/monitoring_and_manag
Wendy, G. (2023). Instrucciones y modos de direccionamiento ATMEGA328P.
Obtenido de [Link]
direccionamiento-atmega328p

También podría gustarte