Logo Studenta

Taller 1 - Microcontroladores

¡Estudia con miles de materiales!

Vista previa del material en texto

Universidad Autónoma de Occidente 
Microprocesadores 
Taller # 1 
 
1. Memoria de programa y memoria de datos de un microcontrolador 
Un microcontrolador con arquitectura Harvard tiene memorias de programa y datos con los 
tamaños indicados (el tamaño de palabra en las memorias de programa y datos es 2 bytes y 
1 byte, respectivamente). Indique el tamaño y las señales (An-1..A0) del bus de direcciones 
para las memorias de programa y datos en cada caso. Hacer los respectivos mapas de 
memoria. 
a) 4 KBytes memoria de programa y 512 Bytes memoria de datos. 
b) 8 KBytes memoria de programa y 1K Bytes memoria de datos. 
c) 16 KBytes memoria de programa y 1 KBytes memoria de datos. 
d) 32KBytes memoria de programa y 2KBytes memoria de datos. 
 
2. Ejecución de instrucciones del microcontrolador ATMega328P 
La Figura 1 muestra el camino de datos del microcontrolador ATMega328P. Para las 
instrucciones de este microcontrolador presentadas a continuación, explique cómo son 
ejecutadas indicando los bloques (ALU, banco de registros, memoria SRAM, etc) que son 
usados por la unidad de control para ejecutar las instrucciones. Indicar el modo de 
direccionamiento usado en cada caso. 
a) MULS Rd, Rr 
b) DEC Rd 
c) OR Rd, Rr 
d) CP Rd, Rr 
e) LDI Rd, K 
f) LDS Rd, k 
g) LD Rd, Y 
h) ST – X, Rr 
i) STS k, Rr 
 
 
Figura 1. Camino de datos del microcontrolador ATmega328P 
3. Análisis de programas en ensamblador ATMega328P 
 
a) Cuáles son los valores finales de los registros r0, r1 y 16 al ejecutar este programa? 
ldi r16, 0x0F 
mov r0, r16 
ldi r16, 0x0E 
mov r1, r16 
and r1, r0 
or r0, r16 
lazo: jmp lazo 
 
b) Hacer el mapa de memoria de datos SRAM, indicando los valores de las posiciones de 
memoria modificadas por el programa. 
ldi r16, 0x0A 
ldi r17, 0x0C 
mul r16, r17 
sts 0x3B0, r0 
ldi r16, 0x2C 
mov r0, r16 
ldi r16, 0x1E 
sub r0, r16 
sts 0x3B1, r0 
lazo: jmp lazo 
 
c) Hacer el mapa de memoria de datos SRAM, indicando los valores finales de las 
posiciones de memoria modificadas por el programa. 
ldi r16, 0x00 
ldi r17, 0x05 
ldi r18, 0x00 
ldi r19, 0x01 
sts 0x301, r18 
sts 0x302, r19 
ldi xh, 0x03 
ldi xl, 0x03 
bucle: cp r16, r17 
 brge salir_bucle 
 inc r16 
 add r18, r19 
 mov r20, r19 
 mov r19, r18 
 mov r18, r20 
 st x+, r19 
 jmp bucle 
salir_bucle: jmp salir bucle 
 
d) Determinar el valor del registro portb (salida del puerto B), para los siguientes valores 
del registro pinc (valor actual del puerto C): 
- pinc = 0x04 
- pinc = 0x05 
- pinc = 0x02 
 
ldi r16, 0x00 
out ddrc, r16 
ldi r16, 0xff 
out portc, r16 
out ddrb, r16 
out portb, r16 
 
inicio: in r16, pinc 
andi r16, 0x07 
cpi r16, 0 
breq clr0 
cpi r16, 1 
breq clr1 
cpi r16, 2 
breq clr2 
cpi r16, 3 
breq clr3 
cpi r16, 4 
breq clr4 
cpi r16, 5 
breq clr5 
cpi r16, 6 
breq clr6 
cpi r16, 7 
breq clr7 
 
clr0: ldi r16, 0xfe 
out portb, r16 
jmp inicio 
 
clr1: ldi r16, 0xfd 
out portb, r16 
jmp inicio 
 
clr2: ldi r16, 0xfb 
out portb, r16 
jmp inicio 
 
clr3: ldi r16, 0xf7 
out portb, r16 
jmp inicio 
 
clr4: ldi r16, 0xef 
out portb, r16 
jmp inicio 
 
clr5: ldi r16, 0xdf 
out portb, r16 
jmp inicio 
 
clr6: ldi r16, 0xbf 
out portb, r16 
jmp inicio 
 
clr7: ldi r16, 0x7f 
out portb, r16 
jmp inicio