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