PracticaSEGUNDO PARCIAL MICROPROCESADORES 2
April 8, 2023 | Author: Anonymous | Category: N/A
Short Description
Download PracticaSEGUNDO PARCIAL MICROPROCESADORES 2...
Description
UNIVERSIDAD APEC
Decanato de Ingeniería e Informática Práctica SP de MICRO II
SEPULVEDA Matrícula A00103781 A00103781 Fecha: 10/07/2022 10/07/2022 Nombre: JOSE OSVALDO RODRIGUEZ SEPULVEDA 1. 1. ¿Cuáles son los tipos de memorias con que cuentan los microcontroladores AVR?
Memoria de programa (Flash/ROM).
•
RAM (SRAM)
•
•
EEPROM
2. 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. 3. ¿En cuál memoria se almacenan las instrucciones que ejecuta el MCU?
Esta se almacena en la memoria de programa (Flash/ROM). 4. 4. ¿Qué tamaño, en bits, puede tener una instrucción de los AVRs?
De 16 o 32 bits 5. 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. 6. ¿Cuántos registros de propósito general (GPR) tiene el núcleo d del el MCU AVR? ¿Qué tamaño
tiene cada uno? (en bytes).
Este cuenta con 32 registros, cada uno con un byte.
7. 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. 8. Si un microcontrolador AVR opera con un reloj de 4 MHz, ¿cuál es la máxima cantidad de
instruccionesque 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 instructions in a single glack suele the ATmega32 achieves, throughnuts, aparaushing I MIPS per MHz" 9. 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. 10.
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 11. l a 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, rrespectivam espectivamente. ente. En lenguaje C: En lenguaje C no hay instrucciones para gestionar 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? 12.
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? 14.
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 automático.. El registro TCNT es un tipo de contador de 0 hasta 255, lo que permite hacer desbordamientos. 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? 15.
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 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? 16.
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? 17.
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? 18.
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? 19.
I = 0 significa que todas las interrupciones están enmasca enmascaradas radas y, como resultado, ninguna interrupción será respondida por el AVR. 20. ¿Qué uso tiene el registro TIMSK? 20.
Este registro indica si se requiere que el Timer0 genere una interrupción cada vez que ocurra un desbordamiento (overflow (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 r equiere 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? 21.
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? 22.
La dirección asignada a este es 0x16 23. ¿Qué pasa si ocurre una interrupción mientras el MCU está atendiendo otra interrupción? 23.
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? 24.
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? 25.
Este toma el valor de 0x00 (todos como entradas) 26. AVR es un microcontrolador de 8 bits 26. 27. Los registros de propósito general tienen un ancho de 8 bits 27.
28. El valor más grande que se puede 28. puede cargar en los GPRs es (en hex) 29. El valor en LDI tiene un ancho de 8 bits 29. bits 30. ¿Cuál es el resultado del código siguiente y donde se almacena? 30.
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? 31.
a)
b) c)
d)
LDI LDI LDI LDI
f)
LDI LDI
g)
LDI
h) i) j)
ADD ADD ADD
e)
R20, 500 R23, 50 R1, 00 R16, $255 R42, $25 R23, 0xF5 123, 0x50 R20, R11 R16, R1 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 ccon on el valor de 0x1F
b) En este caso se carga el valor de 0x15 al registro R21 y luego se suma el registro R21 ccon on el valor 0XEA
33. Verdadero o falso: los registros de funciones especiales (SFRs) del AVR se denominan registros de 33. I/O 34. Verdadero o falso: los registros de I/O son parte del espacio de la memoria de datos V 34. 35. Verdadero o falso: los registros de propósito general no forman parte de la memoria de datos F 35. 36. Verdadero o falso: la memoria de datos es del mismo tamaño en todos los miembros AVR V 36. 37. Si juntamos los registros de I/O, la RAM interna y los GPRs, obtenemos el espacio total de 37.
.
38. Encuentre el tamaño de la memoria de datos de los siguientes AVR: 38.
a) a) ATmega32
De 32KB b) b) ATmega16
De 32Kb c) c) ATtiny44
De 4kb 39. Especifique la diferencia entre la EEPROM y el espacio de RAM de datos de los AVR. 39. 40. ¿Podemos adquirir un chip AVR sin EEPROM? 40.
No 41. ¿Podemos adquirir un chip AVR sin memoria de datos? 41.
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? 43.
32 bytes 44. Muestre un código simple para cargar los valores $30 y $97 en las ubicaciones $105 y 44.
$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. 45.
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. 46.
LDI R22, 0X5F STS 0X38, R22 47. Verdadero o falso: no podemos cargar valores inmediatos en la memoria RAM interna directamente 47. 48. Muestre un código simple para cargar el valor $11 en las ubicaciones $100–$105, sumar los 48.
valores y colocar 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 U UN N VALOR DE 0X66 Y COLOCO EL RESULTADO RESULTADO EN R20) 49. Repita el problema 48, excepto que coloque el resultado en la ubicación $105 después de 49.
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 SUM SUMA A 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 50.
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. 51. 52. Escriba un código simple para complementar el contenido de la ubicación $68 y colocar el 52.
resultado en el registro R27. 53. Escriba un código simple para copiar datos desde la ubicación $68 al Puerto C usando R19. 53. 54. El registro de estado es de 8 bits 54. bits 55. ¿Cuáles bits del registro de estado son usados para las banderas C y H? 55.
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? 56.
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? 57. LDI
LDI ADD
•
R20, 0xFF R21, 1 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: 58.
a) LDI R20, 0x54 LDI R25 0xC 4 ADD R20, R25 ,
b)
LDI LDI ADD
R23, 0 R16 0x 0xFF FF R23, R16 ,
LDI R30, 0xFF R18 0x 0x05 LDI 05 ADD R30, R18 ,
c)
59. Escriba un programa simple en el que el valor 0x55 es sumado 5 veces. 59.
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: 60. .EQU .EQU .EQU .EQU .EQU .EQU .EQU .EQU .EQU .EQU .EQU .EQU
myDato1 myDato2 myDato3 myDato4 myDato5 myDato6 myDato7 myDato8 myDato9 myDato10 myDato11 myDato12
= = = = = = = = = = = =
55 98
=37HEX =62HEX =62HEX
'G'
=47HEX
0x50 = 50HEX 200 =C8HEX 'A'
= 41HEX
0xAA = AAHEX 255 = FF HEX 0B10010000 = B90 HEX 0b01111110 = 0 HEX 10 = A 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 lasubicaciones $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á 62.
cuando se encienda 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: 63. instrucciones:
a)
b) c) d) e) f)
g) h)
LDI LDI ADD ADD LDI
R19, 0x5 R30, $9F R20, R21 R22, R20 R18, 0x41 LDI R28, 20 ADD R1, R3 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 64.
la RAMinterna 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 65.
MCUsiguientes: a) a) AVR con 32 KB b) b) AVR con 8 KB c) c) AVR con 64 KB d) 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 66.
programaATmega32. 67. Asuma que un AVR tiene $7FFF como la dirección de la última ubicación de su ROM de programa. 67. ¿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 68. direcciones:
d) $0000 - $1FFF
8k 8k
f) f) $0000 - $3FFF
16K
g) g) $0000 - $7FFF
32K
h) h) $0000 - $FFFF
64K
i) i) $0000 - $1FFFF
128K
j) j) $00000 - $3FFFF
256K
k) k) $00000 - $FFF
4K
l) l) $00000 - $1FF
0.5K
69. ¿Qué ancho tiene la ROM del programa en el AVR? 69.
16 BITS 70. ¿Qué ancho tiene el bus de datos entre la CPU y la ROM de programa en el AVR? 70. 71. En la instrucción "LDI R21,K", explique por qué el valor K no puede ser mayor que 255. 71.
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 72.
(LDI, STS, JMP, ADD).
73. En la instrucción “STS memLoc, R22”, explique cuál es el tamaño de la instrucción 73. i nstrucció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é 74.
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 75. 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
View more...
Comments