Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Decanato de Ingeniería e
Informática
Práctica SP de MICRO II
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.
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.
10. Identifique cuatro fuentes de señales de reinicio (Reset) para un microcontrolador AVR.
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.
• 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.
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.
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.
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?
25. ¿Qué valor toma el registro DDR cuando el MCU AVR se reinicia?
Este toma el valor de 0x00 (todos como entradas)
28. El valor más grande que se puede cargar en los GPRs es (en hex)
• 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)
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
.
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.
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
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.
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
• Con esta operación no se obtiene ningún resultado, ya que la instrucción LDI R21, 1 ES INCORRECTA
b)
LDI R23, 0
LDI R16, 0xFF
ADD R23, R16
60. Indique el valor (en hexadecimal) utilizado para cada uno de los siguientes datos:
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:
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
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
k) $00000 - $FFF 4K
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