Está en la página 1de 4

ESCUELA POLITÉCNICA NACIONAL

LABORATORIO DE SISTEMAS MICROPROCESADOS


PRÁCTICA N° 5
NOMBRE: Hansel Lara GRUPO: GR2-1
1. TEMA
UTILIZACIÓN DE LA HERRAMIENTAS DE SIMULACIÓN PROTEUS CON LOS
MICROCONTROLADORES ATMEGA164P

2. OBJETIVOS
Familiarizar al estudiante con las herramientas existentes para la simulación gráfica de Sistemas
Microprocesados con el paquete de software PROTEUS.
3. INFORME

3.1. Justificar mediante cálculos el tiempo tomado en el numeral 1 de la parte práctica.


Presentar los cálculos respectivos.

Lo que se va a calcular es el tiempo de retardo en el código proporcionado en la hoja guía, el número


de ciclos de maquina en base al código es el siguiente
.def contador = R16 ; se define R16 como el contador

.def tempo = R17 ; este es un registro auxiliar

.cseg

.org 0x0000 ; todos los programas inician en 0x0000

clr contador ; inicio la cuenta en cero

ldi tempo,0b11111111 ; para definir al Puerto A como salida se debe

out ddra,tempo ; poner 1L en cada uno de los bits del DDRA

lazo:

out porta,contador ; envío del contenido de contador al Puerto A 1CM

ldi tempo,249 ; se inicia una rutina de retardo 1CM

salto:

dec tempo ; salto se repite 249 veces 1CM x 249 veces

brne salto ; hasta que la bandera Z=1 (2CM x 249 veces)-1CM

inc contador ; incremento del contador en una unidad 1CM

; si llega al máximo 255, al incrementar vuelve a 0

rjmp lazo ; repetir el proceso indefinidamente 1CM

Por lo tanto, el ciclo de máquina tota es:


1 + 1 + 249 + (2 ∗ 249 − 1) + 1 + 2 =751 ciclos de máquina

Para hallar el retardo se utiliza la siguiente formula


𝑡 𝑑𝑒𝑙𝑎𝑦 = #𝐶𝑖𝑐𝑙𝑜 𝑠𝑑𝑒𝑀á𝑞𝑢𝑖𝑛𝑎 ∗ 𝑇

Donde 𝑇 es el tiempo de ejecución de un ciclo de reloj en AVR donde este es de 1𝑢𝑠 por lo cual el
1
tren de pulsos del reloj en AVR tiene una frecuencia de 𝑓 = = 1𝑀𝐻𝑧 Por tal motivo el tiempo de
𝑇
retardo para un número de ciclos igual a 751es de:
𝑡 𝑑𝑒𝑙𝑎𝑦 = 751 ∗ 1𝑢𝑠 = 751𝑢𝑠

3.2 Modificar el programa para que alternativamente sea un contador ascendente y luego
descendente. Simular el diseño y capturar la pantalla del Analizador Lógico con las 8 señales
individuales, en la que se pueda ver las secuencias ascendente y descendente en forma alternada.
Adjuntar el código del programa incluyendo comentarios y justificaciones.

El código implementado es el siguiente:


.def contador = R16 ; se define R16 como el contador
.def tempo = R17 ; este es un registro auxiliar
.def comparar= R18 ; registro para comparar cuando el contador llegue
a 255
.cseg
.org 0x0000 ; todos los programas inician en 0x0000
ldi comparar,255 ; Declaración de la variable comparar
clr contador ; Se limpia el contador
ldi tempo,0b11111111 ; para definir al Puerto A como salida se debe
out ddra,tempo ; poner 1L en cada uno de los bits del DDRA

ascendente:
out porta,contador ; envío del contenido de contador al Puerto
ascendente1:
ldi tempo,0xf9 ; se inicia una rutina de retardo
ascendente2:
ldi R19, 1
ascendente3:
ldi R20, 255
ascendente4:
dec R20 ; decremento del registro 20
brne ascendente4 ; salta a ascendente4 si Z=0
dec R19 ; decremento del registro 19
brne ascendente3 ; salta a ascendente3 si Z=0
dec tempo ; decremento del registro 17
brne ascendente2 ; salta a ascendente2 si Z=0
inc contador ; incremento del registro 16
cp comparar,contador ; Compara si el contador es igual 255, si es igual
la bandera Z se establece en 1 (Z=1)
breq descendente ; Si Z=1 de la comparación, salta a bucle llamado
descendente
rjmp ascendente ; repetir el proceso hasta que el contador sea 255

descendente:
out porta,contador ; envío del contenido de contador al Puerto
descendente1:
ldi tempo,0xf9 ; se inicia una rutina de retardo
descendente2:
ldi R19, 1
descendente3:
ldi R20, 255
descendente4:
dec R20 ; decremento del registro 20
brne descendente4 ; salta a descendente4 si Z=0
dec R19 ; decremento del registro 19
brne descendente3 ; salta a descendente3 si Z=0
dec tempo ; decremento del registro 17
brne descendente2 ; salta a descendente3 si Z=0
dec contador ; decremento del registro 17
breq ascendente ; salta a bucle llamado ascendente si el contador
es 0 (Z=1)
rjmp descendente ; repetir el proceso hasta que el contador sea
cero

La captura de analizador lógico cuando la cuenta es ascendente se presenta a continuación:

La captura de analizador lógico cuando la cuenta es descendente se presenta a continuación:


3.3 Escriba un programa que calcule el resultado de 9+8+7+6+…+1. Genere el código y
adjúntelo.
El código es el siguiente:
.def contador = R16 ; se define R16 como el contador
.def Resultado = R17 ; este es un registro auxiliar
.cseg
.org 0x0000 ; todos los programas inician en 0x0000
ldi R16, 9 ; Se carga inmediatamente R16 con el número 9
ldi R17,0 ; Se carga inmediatamente R17 con el número 0
Suma:
Add R17,R16 ;Se suma R17 con R16 y se almacena el resultado en
R17
Dec R16 ; Se decrementa R16 en 1
Brne Suma ; Salta a Suma en caso de que R16 sea mayor que
cero
Fin Suma: jmp Fin Suma ; Aquí termina la suma.

3.4. Conclusiones y Recomendaciones


Conclusiones:

• La implementación de un código generado en el software de Microchip Studio en Proteus es


muy versátil dado que ayuda a comprender de mejor manera el funcionamiento de dicho
código y así poder corregirlo en el caso de que exista algún error
• Los tiempos de retardo o en general un bucle de retardo puede ser muy útil dado que permite
que el programa se establezca un poco más lento esto ayuda como se pudo observar en la
practica a que al momento de implementar displays estos puedan ser observados de una
manera óptima.
• Proteus es un software que nos permite implementar el microcontrolador Atmega164P lo cual
permite comprobar el correcto funcionamiento del código programado en el
microcontrolador para así poder implementarlo en la vida real.
Recomendaciones:

• Es sumamente recomendable cada vez que se modifique el código en Microchip Studio


verificar que este se halla guardado correctamente y así implementar el archivo. hex en el
simulador de Proteus y así evitar errores.
• Dado que ya se está implementado de manera visual al microcontrolador se debe conocer
tanto los puertos y como estos interactúan con el código ya que de estos depende tanto las
entradas como las salidas del microprocesador, esto se verá a mayor detalle en practicas
posteriores, pero es clave tomarlo en cuenta.

Referencias:
[1]. Atmel, “AVR Instruction Set”, [En línea], Disponible en:
http://ww1.microchip.com/downloads/en/devicedoc/atmel-0856-avr-instruction-set-manual.pdf,
[Ultimo acceso: 30/06/2022]

También podría gustarte