Está en la página 1de 13

UNIVERSIDAD APEC

Decanato de Ingeniería e
Informática

Práctica SP de MICRO II

Nombre: JOSE OSVALDO RODRIGUEZ SEPULVEDA Matrícula A00103781 Fecha: 10/07/2022

1. ¿Cuáles son los tipos de memorias con que cuentan los microcontroladores AVR?
• Memoria de programa (Flash/ROM).
• RAM (SRAM)
• EEPROM

2. ¿Cuáles de las memorias encontradas en los MCU (MicroController Unit ) AVR son volátil?

La única que cumple con esto es la SRAM, ya que la Flash y la EEPROM, mantienen su data al apagarse.

La SRAM es una memoria volátil que significa que la información que se almacena temporalmente en el
módulo se borra cuando reinicia o apaga su computadora. Debido a que la información se almacena de
forma eléctrica en los transistores, cuando no hay corriente eléctrica, los datos desaparecen. Este tipo de
memoria tiene como peculiaridad que la información se pierde con se interrumpe el flujo eléctrico.

3. ¿En cuál memoria se almacenan las instrucciones que ejecuta el MCU?


Esta se almacena en la memoria de programa (Flash/ROM).

4. ¿Qué tamaño, en bits, puede tener una instrucción de los AVRs?


De 16 o 32 bits

5. El MCU ATmega32, un miembro común de la familia AVR, tiene 32 KBytes de memoria de


programa(32,768 bytes), sin embargo, solo cuenta con 16K direcciones (ubicaciones).
¿Explicar por qué?
Esto debido a que las instrucciones en la memoria de programa tienen un tamaño de 16 bits. La
memoria de programa se organiza en palabras de 16 bits, el doble de un byte (8 bits).

La capacidad entonces, calculando la en palabras:


(32KBytes)( 8 bits/byte ) ( 1 𝑝𝑎𝑙𝑎𝑏𝑟𝑎/16 𝑏𝑖𝑡𝑠 ) = 16𝑘 𝑝𝑎𝑙𝑎𝑏𝑟𝑎𝑠.

6. ¿Cuántos registros de propósito general (GPR) tiene el núcleo del MCU AVR? ¿Qué tamaño
tiene cadauno? (en bytes).
Este cuenta con 32 registros, cada uno con un byte.
7. ¿Cuál es el nombre del registro que siempre contiene la dirección de la próxima
instrucción a serejecutada?
Contador de Programa, este registro, normalmente denominado PC, es totalmente equivalente
al de todos los microprocesadores y contiene la dirección de la próxima instrucción a ejecutar.

8. Si un microcontrolador AVR opera con un reloj de 4 MHz, ¿cuál es la máxima cantidad de


instrucciones que puede ejecutarse en un segundo?
4 MIPS = 4 millones de instrucciones por segundo. Esto lo podemos encontrar en la página 3
datasheet ATmega32: "By exesutina Rewerful instructions in a single glack suele the ATmega32
achieves, throughnuts, aparaushing I MIPS per MHz"

9. Cuando el microcontrolador AVR es reiniciado, ¿Cuál dirección se carga en el registro PC?


La dirección que se carga en el registro PC es $0000.

10. Identifique cuatro fuentes de señales de reinicio (Reset) para un microcontrolador AVR.

• Power-on Reset: Voltaje VCC menor al límite operacional (VPOT).


• External Reset: Se presenta una señal LOW en el pin RESET
• Watchgod System Reset: Se expira el tiempo del Watchdog Timer, asumiendo que el resetpor
watchdog esté activado.
• Brown-out Reset: Cuando el voltaje VCC es menor al voltaje de Brown-out.

11. ¿Cómo se le llama a la sección de códigos que se ejecuta cuando ocurre una interrupción?
El número de interrupciones de interrupción de hardware externo varía en diferentes AVR. El ATmega32
tiene tres interrupciones de hardware externas: pines PD2 (PORTD.2), PD3 (PORTD.3) y PB2 (PORTB.2),
designados como INTO, INTI e INT2, respectivamente.

En lenguaje C: En lenguaje C no hay instrucciones para gestionar las interrupciones. Entonces, en


WinAVR se ha agregado lo siguiente para administrar las interrupciones:

• Archivo de inclusión de interrupción: debemos incluir el archivo de encabezado de interrupción si


queremos usar interrupciones en nuestro programa.

• Definición de ISR: para escribir una ISR (rutina de servicio de interrupción) para una interrupción
utilizar la siguiente estructura: ISR (nombre del vector de interrupción).

12. ¿En un MCU AVR, en cual dirección usualmente comienza la tabla de vectores de interrupción?
La tabla de vectores de interrupción se encuentra desde $00 hasta $28.

13. ¿Cuál interrupción no puede ser deshabilitada?


La interrupción RESET, la cual no puede ser deshabilitada.
14. En un MCU AVR, ¿cuál es la función de los registros TCNT y TIFR?
El registro TIFR es el que indica cuando una interrupción esta activa. No es necesario cambiar los valores
de este registro, ya que cambian sus valores por automático.

El registro TCNT es un tipo de contador de 0 hasta 255, lo que permite hacer desbordamientos. En pocas
palabras, es un registro de 8 bits y cuenta con cada pulso.

15. ¿Qué función realiza el Prescaler en la operación de los Timers?


Un prescaler es un circuito divisor de frecuencia que se ubica a la entrada de un temporizador/contador.
Divide la frecuencia del oscilador en determinadas relaciones entradasalida (1:n) que se configuran por
medio de la programación.

16. ¿Cuáles modos son generalmente usados en la operación del Timer0?


Puede programarse en cuatro diferentes formas de operación:
• Modo Normal
• Modo CTC (Clear on Compare Match)
• Fast PWM (Pulse Width Modulation)
• Phase Correct PWM Mode

17. ¿Cuál de los Timers del MCU ATmega32 opera en la condición de 16 bits?
El timer1 es el que opera en la condición de 16bits

18. ¿En qué se diferencia la operación del modo Normal y el modo CTC de los Timers?

Modo normal: Es el modo más simple de operar, la dirección de conteo siempre se incrementa y
cuando llega a desbordarse llegando a su valor máximo de 8 bits se reinicia el conteo.

Modo CTC: En este modo el contador se borra y se reinicia a cero cuando el valor de TCNTn es igual al
valor de OCRNA, esto nos ayuda a contar los eventos externos.

19. ¿Cuál es el contenido del registro SREG al reiniciar el microcontrolador ATmega32?


I = 0 significa que todas las interrupciones están enmascaradas y, como resultado, ninguna interrupción
será respondida por el AVR.

20. ¿Qué uso tiene el registro TIMSK?


Este registro indica si se requiere que el Timer0 genere una interrupción cada vez que ocurra un
desbordamiento (overflow al alcanzar el TCNT un valor de 255), o que genere una interrupción toda vez
que el valor del TCNT0 sea igual al valor del OCR0.

Del bit siete al bit dos el valor tiene que ser0. Si se requiere que se habilite la interrupción por
comparación se deberá cargar un 1 al bit OCIE0 y si se desea que se habilite la interrupción por overflow
hay que cargarle un 1 al bit TOIE0.
21. ¿Por qué se usa la instrucción RETI después de una ISR?
La instrucción RETI debe ser la última instrucción de ISR porque regresa al programa principal donde se
genera la interrupción y establece el bit de habilitación de interrupción global en SREG.

22. ¿Cuál es la dirección asignada para atender el evento de Overflow del Timer0?
La dirección asignada a este es 0x16

23. ¿Qué pasa si ocurre una interrupción mientras el MCU está atendiendo otra interrupción?
Si se activan dos interrupciones al mismo tiempo, la interrupción con mayor prioridad se atenderá
primero. La prioridad de la interrupción de caché está relacionada con la dirección de esa interrupción
en el vector de interrupción. La interrupción que tiene una dirección más baja tiene una prioridad más
alta.

24. En los MCU AVR, ¿Cuáles son los registros disponibles para programar los puertos I/O?

• PINx: Lectura de pines (solo lectura).


• DDRx: Modo de dirección (salida/entrada).
• PORTx: Valor de salida/pull-up (dependiendo si el pin es entrada o salida) Donde la “x” puede
ser desde A-F, dependiendo del microcontrolador.

25. ¿Qué valor toma el registro DDR cuando el MCU AVR se reinicia?
Este toma el valor de 0x00 (todos como entradas)

26. AVR es un microcontrolador de 8 bits

27. Los registros de propósito general tienen un ancho de 8 bits

28. El valor más grande que se puede cargar en los GPRs es (en hex)

29. El valor en LDI tiene un ancho de 8 bits

30. ¿Cuál es el resultado del código siguiente y donde se almacena?

• El resultado es R20= 0x28 (es decir el código anterior suma los valores 0x15 y 0x13 cargados
en los registros R20 y R21 y el valor se almacena en R2
31. ¿Cuáles de las siguientes expresiones son incorrectas?

a) LDI R20, 500


b) LDI R23, 50
c) LDI R1, 00
d) LDI R16,
$255
e) LDI R42, $25
f) LDI R23,
0xF5
g) LDI 123,
0x50
h) ADD R20, R11
i) ADD R16, R1
j) ADD R52, R16

• La expresión a es incorrecta porque no se puede cargar un decimal 500 a un registro


• La expresión b es incorrecta porque no se puede cargar un decimal 50 a un registro
• La expresión c es incorrecta
• La expresión e es incorrecta
• La expresión g es incorrecta
• La expresión i es incorrecta
• La expresión j es incorrecta

32. Cual es el resultado de la ejecución de los siguientes códigos y donde se almacena?

a)

En este caso se carga el valor de 0x25 al registro R19 y luego se suma el registro R19 con el valor de 0x1F
b)

En este caso se carga el valor de 0x15 al registro R21 y luego se suma el registro R21 con el valor 0XEA

33. Verdadero o falso: los registros de funciones especiales (SFRs) del AVR se denominan registros de
I/O
34. Verdadero o falso: los registros de I/O son parte del espacio de la memoria de datos V
35. Verdadero o falso: los registros de propósito general no forman parte de la memoria de datos F
36. Verdadero o falso: la memoria de datos es del mismo tamaño en todos los miembros AVR V
37. Si juntamos los registros de I/O, la RAM interna y los GPRs, obtenemos el espacio total de
.

38. Encuentre el tamaño de la memoria de datos de los siguientes AVR:


a) ATmega32
De 32KB

b) ATmega16

De 32Kb

c) ATtiny44
De 4kb

39. Especifique la diferencia entre la EEPROM y el espacio de RAM de datos de los AVR.

40. ¿Podemos adquirir un chip AVR sin EEPROM?

No
41. ¿Podemos adquirir un chip AVR sin memoria de datos?
No
42. ¿Cuál es el rango de direcciones para la RAM interna del MCU Atmega32?
Desde 0x0100 a 0x00FF

43. ¿Cuál es el número máximo de bytes que puede tener el AVR para la memoria de datos?
32 bytes

44. Muestre un código simple para cargar los valores $30 y $97 en las ubicaciones $105 y
$106,respectivamente.
LDI R16, 0x30
LDI R17, 0X97
STS 0X105, R16
STS 0X106, R17

45. Muestre el código para cargar el valor de $55 en ubicaciones de $300 a $308.
LDI R18, 0X55
STS 0X300, R18
STS 0X301, R18
STS 0X302, R18
STS 0X303, R18
STS 0X304, R18
STS 0X305, R18
STS 0X306, R18
STS 0X307, R18
STS 0X308, R18

46. Muestre el código para cargar el valor $5F en el PORTB.


LDI R22, 0X5F
STS 0X38, R22

47. Verdadero o falso: no podemos cargar valores inmediatos en la memoria RAM interna directamente

48. Muestre un código simple para cargar el valor $11 en las ubicaciones $100–$105, sumar los
valores ycolocar el resultado en R20.
LDI R19, 0X11
STS 0X100, R19
STS 0X101, R19
STS 0X102, R19
STS 0X103, R19
STS 0X104, R19
STS 0X105, R19
LDS R20, 0X100
LDS R21, 0X101
LDS R22, 0X102
LDS R23, 0X103
LDS R24, 0X104
LDS R25, 0X105
ADD R20, R21
ADD R20, R22
ADD R20, R23
ADD R20, R24
ADD R20, R25 (OBTENGO LA SUMA TOTAL CON UN VALOR DE 0X66 Y COLOCO EL RESULTADO EN R20)

49. Repita el problema 48, excepto que coloque el resultado en la ubicación $105 después de
realizar lasuma.

LDI R19, 0X11


STS 0X100, R19
STS 0X101, R19
STS 0X102, R19
STS 0X103, R19
STS 0X104, R19
STS 0X105, R19
LDS R20, 0X100
LDS R21, 0X101
LDS R22, 0X102
LDS R23, 0X103
LDS R24, 0X104
LDS R25, 0X105
ADD R20, R21
ADD R20, R22
ADD R20, R23
ADD R20, R24
ADD R20, R25
STS 0X105, R20 (ALMACENO EL RESULTADO DE LA SUMA FINAL 0X66, QUE SE ENCONTRABA EN EL
REGISTRO R20, LO PASO A LA UBICACIÓN 0X105)

50. Muestre un código simple para cargar el valor $15 en la ubicación $67, agregarlo a R19 cinco
veces ycolocar el resultado en R19 a medida que se suman los valores. R19 debe ser cero antes
de que comience la suma.
LDI R16, 0X15
STS 0X67, R16
LDS R20, 0X67
ADD R19, R20

51. Repita el problema 49, excepto que coloque el resultado en la ubicación $67.
52. Escriba un código simple para complementar el contenido de la ubicación $68 y colocar el
resultado en el registro R27.
53. Escriba un código simple para copiar datos desde la ubicación $68 al Puerto C usando R19.
54. El registro de estado es de 8 bits
55. ¿Cuáles bits del registro de estado son usados para las banderas C y H?
Para la bandera C se utiliza el bit 7
Para la bandera H se utiliza el bit 5

56. ¿Cuáles bits del registro de estado se utilizan para las banderas V y N?
Para la bandera V el bit 3
Para la bandera N el bit 2

57. ¿Cuál es el estado de las banderas C y Z después de ejecutar el siguiente código?

LDI R20, 0xFF


LDI R21, 1
ADD R20, R21

• Con esta operación no se obtiene ningún resultado, ya que la instrucción LDI R21, 1 ES INCORRECTA

58. Encuentre el valor de la bandera C después de ejecutar los códigos siguientes:


a)
LDI R20, 0x54
LDI R25, 0xC4
ADD R20, R25

b)

LDI R23, 0
LDI R16, 0xFF
ADD R23, R16

LDI R30, 0xFF


LDI R18, 0x05
ADD R30, R18
c)

59. Escriba un programa simple en el que el valor 0x55 es sumado 5 veces.


LDI R16, 0X55
LDI R17, 0X55
LDI R18, 0X55
LDI R19, 0X55
ADD R16, R17 (0X55 + 0X55) = 0X110
ADD R18, R19 (0X55 + 0X55) = 0X110
ADD R16, R18 (0X110 + 0X110) = 0X220
LDI R20, 0X55
ADD R20, R16 (0X220 + 0X55) = 0X275

60. Indique el valor (en hexadecimal) utilizado para cada uno de los siguientes datos:

.EQU myDato1 = 55 =37HEX


.EQU myDato2 = 98 =62HEX
.EQU myDato3 = 'G' =47HEX
.EQU myDato4 = 0x50 = 50HEX
.EQU myDato5 = 200 =C8HEX
.EQU myDato6 = 'A' = 41HEX
.EQU myDato7 = 0xAA = AAHEX
.EQU myDato8 = 255 = FF HEX
.EQU myDato9 = 0B10010000 = B90 HEX
.EQU myDato10 = 0b01111110 = 0 HEX
.EQU myDato11 = 10 = A
.EQU myDato12 = 15 = F
61. Muestre un código simple para cargar el valor $11 en las ubicaciones $60 – $65, sumarlos y
colocar el resultado en R29 a medida que se suman los valores. Utilizar la directiva .EQU para
asignar nombres a las ubicaciones $60 –$65.
.EQU Registro1 = 0x60
.EQU Registro2 = 0x61
.EQU Registro3 = 0x62
.EQU Registro4 = 0x63
.EQU Registro5 = 0x64
.EQU Registro6 = 0x65

LDI R19, 0X11


STS Registro1, R19
STS Registro2, R19
STS Registro3, R19
STS Registro4, R19
STS Registro5, R19
STS Registro6, R19

LDS R29, Registro1


LDS R30, Registro2
LDS R16, Registro3
LDS R17, Registro4
LDS R18, Registro5
LDS R31, Registro6

ADD R29, R30


ADD R29, R16
ADD R29, R17
ADD R29, R18
ADD R29, R31 ; -(OBTENGO EL VALOR DE 0X66 AL HABER SUMADO LOS REGISTROS Y GUARDO EL VALOR EN
R29)

62. Un programador pone el primer código de operación en la dirección $100. ¿Qué sucederá
cuando seencienda el microcontrolador?
Puede provocar un DELAY En al inicio del programa
63. Encuentre el número de bytes que ocupa cada una de las siguientes instrucciones:

a) LDI R19, 0x5


b) LDI R30, $9F
c) ADD R20, R21
d) ADD R22, R20
e) LDI R18,
0x41
f) LDI R28, 20
g) ADD R1, R3
h) JMP

ADD ocupa 2 bytes


LDI ocupa 2 bytes
JMP ocupa 4 bytes

64. Escriba un programa para colocar el número de su ID de estudiante en la ubicación de 0x100 de


la RAMinterna del AVR.

MI ID ES A00103781

.EQU A = 0X41

.EQU 0 = 0X30

.EQU 0 = 0X30

.EQU 1 = 0X31

.EQU 0 = 0X30

.EQU 3 = 0X33

.EQU 7 = 0X37

.EQU 8 = 0X38

.EQU 1 = 0X31

LDS R20, 0X41

LDS R21, 0X30

LDS R22, 0X30

LDS R23, 0X31


LDS R24, 0X30

LDS R25, 0X33

LDS R26, 0X37

LDS R27, 0X38

LDS R28, 0X31

STS 0X100, R20

STS 0X101, R21

STS 0X102, R22

STS 0X103, R23

STS 0X104, R24

STS 0X105, R25

STS 0X106, R26

STS 0X107, R27

STS 0X108, R28

65. Encuentre la dirección de la última ubicación de la ROM de programa para cada uno de los
MCUsiguientes:

a) AVR con 32 KB
b) AVR con 8 KB
c) AVR con 64 KB
d) AVR con 16 KB
e) AVR con 128 KB

66. Muestra los valores más bajo y alto (en hexadecimal) que puede tomar el contador del
programa ATmega32.
67. Asuma que un AVR tiene $7FFF como la dirección de la última ubicación de su ROM de programa.
¿Cuál el tamaño de la ROM de ese AVR?
Tiene una ROM de 32K

68. Encuentre el tamaño de la ROM de programa en K para el AVR con los siguientes rangos de
direcciones:

d) $0000 - $1FFF 8k

f) $0000 - $3FFF 16K

g) $0000 - $7FFF 32K

h) $0000 - $FFFF 64K


i) $0000 - $1FFFF 128K

j) $00000 - $3FFFF 256K

k) $00000 - $FFF 4K

l) $00000 - $1FF 0.5K

69. ¿Qué ancho tiene la ROM del programa en el AVR?


16 BITS

70. ¿Qué ancho tiene el bus de datos entre la CPU y la ROM de programa en el AVR?
71. En la instrucción "LDI R21,K", explique por qué el valor K no puede ser mayor que 255.
Por la limitación que impone el formato de la instrucción

72. $0C01 es el código de máquina para la instrucción (LDI, STS, JMP, ADD).

73. En la instrucción “STS memLoc, R22”, explique cuál es el tamaño de la instrucción y porqué
permitecubrir todo el rango de la memoria de datos del chip AVR.
Es de 32 bit y esta instrucción permite cubrir todo el rango de la memoria ya que su operando va desde
0 ≤ r ≤ 31, 0 ≤ k ≤ 65535

74. En la instrucción “LDS Rd, memLoc”, explique cuál es el tamaño de la instrucción y porqué
permiteacceder a toda la memoria de datos del AVR.

Es de 32 bit y esta instrucción permite cubrir todo el rango de la memoria ya que su operando va desde
0 ≤ r ≤ 31, 0 ≤ k ≤ 65535

75. Explique cómo la instrucción "JMP addr" puede cubrir todo el espacio de direcciones de 4M del
AVR.
Porque esta Salta a una dirección dentro de toda la memoria de programa de 4M (palabras).
Contiene 3 ciclos del reloj y su operando va 0 ≤ k < 4M

También podría gustarte