gxanren de lnformática C.l.T de examen: Libre Reglgrngllqle! Ejercicio 1. Explique cómo se tiene que usar el software MPLAB para poder escribir en et áo ior el programa en lenquaie assembler' Ejercicio 2. En el software MpLAB, cómo se puede verificar que el programa funciona bien? Dé un ejemplo con el siguiente programa: LIST P1 6F69 0 ]N]CIO rqu ORG MOVLTü ADDLI/ü MO\/WF 0x020 0x0000 INICfO ox8 1 0x8 3 Ejercicio 3. Desarrolle la subrutina que convierte el número cargado en el registro de trabajo (W) su letra correspondiente a la palabra "febrero, considerando: o RCO ) segmento E. RC1 ) segmento D RC2 ) segmento C o RC3 ) segmento B o RC4 ) segmento A o RC5 ) segmento F o RCG ) segmento G o RC7 permanece como 0. Ejercicio 4. si se supone que inicialmente valen cero los registros w y los que ocupan las direcciones 0x23 y Ot24 de la memoria de datos, Qué valor contendrán después de ejecutar el siguiente programa? COMF IORlIE XORWF 0x2 3, 0 0x24,L 0x2 3, 1 0x23,0 0x24,7 Página 1 de 1
, Período C.I.T Tipo de examen: Librel-l Reglamentadol-l CETP - ITS Resolución del Examen - Teórico. Ejercicio 1. Explique cómo se tiene que usar el software MPLAB para poder escribir en el editor el programa en lenouaie assembler. Primero hay que crear un proyecto nuevo siguiendo los pasos correspondientes (Proiect>New o el botón New Project de la barra de herramientas Project Manager) o abrir un proyecto existente (Praiect>Open). Luego, hay que crear un archivo nuevo (File>New o el botón New File de la barra de heramientas Standard). Aparecerá una ventana titulada Untitled donde se podrá empezar a escribir el programa en código assembler. Antes, durante o después de escribir el código, se puede guardar el archivo del código con extensión. asm, la extensión de los archivos código fuente assembler (es la extensión dada por defecto en la ventana Save As). Cuando el archivo se guarda, el nombre de la ventana cambia al camino del archivo y los diferentes campos del código (números hexadecimales, etiquetas, comentarios, etc.) toman el formato programado en la configuración del editor (Edit>Properties..., pestaña Text). Ejercicio 2. -+- En el software MPLAB, cómo se puede verificar que el programa funciona bien? Dé un ejemplo con el siguiente programa: TNICIO LI ST EQU ORG MOVLT{ ADDLI^7 MO\/[fF P=16F690 0x02 0 0x0000 INICIO 0x81 0xB3 Primero se debe elegir el depurador. Elegimos "MPLAB SIM" como depurador del programa (Debuqaer>Select Tools>MPLAB SIW y luego depuramos el programa (Proiect>Build All, <Ctrl> + <F10> o el botón Build All de la barra de herramientas Project Manager). Elegimos la ventana Watch (View>Watch), donde elegiremos las variables a observar (En este caso serán RESULTADo, status y wreg (registro de Página 1 de 8
, Período i 4oaño c.l.t Examen de Informática Cedula de ldentidad No: Tipo de examen: Librel--l Reglamentadon CETP.ITS trabajo)). Debido a la velocidad y duración del programa del ejemplo, corremos el programa como animación paso a paso (Debuoger>Animate o el botón Animate de la barra de herramientas Debug) o por pasos individuales (Debuqqer>Step lnto, <FT> o el botón Step lnto de la barra de herramientas Debug). Cuando se depura se tiene que observar la siguiente secuencia de hechos: PROGRAMA ü]reg STATUS ]NICIO B'00000000' B'00000000' B'00011000' IN]C]O MOVLW OXB1 B'00000000' B'00000000' B'00011000' ADDLVü OXB3 B'00000000' B'1.000000i' B'00011000' MOWF B'00000000' B'4i0000i0ü' B'0001100-L' B,00000i00, B'00000100' B'00011001' En rojo, están marcados los bits Al sumarse el numero 0xB 1 (ya almacenado en wreg) y el número oxa3 (proveniente del literal) en wreg, el bit c (bit de acarreo, localizado en sratus,l (el 1o de derecha a izquierda)) se pone a'1'debido a que el resultado de la suma en vüreg (0x104) sobre pasa los 8 bits, por lo que el 90 bit se pasa al acarreo. Sin el 90 bit, el resultado almacenado en wreg (0x04) se pasa al. Ejercicio 3. -+- Desarrolle la subrutina que convierte el número cargado en el registro de trabajo (W) su letra correspondiente a la palabra "febrero", considerando:. RCO ) segmento E. RC1 ) segmento D o RC2 ) segmento C o RC3 ) segmento B. RC4 ) segmento A. RC5 ) segmento F. RC6 ) segmento G. RC7 permanece como 0. ;4-- ^->. illl /'l/"j Ya -o-x [l-lj ittt IJ (J 'l --D X Tenga en cuenta cómo se va a implementar el mecanismo: a la subrutina entrará el valor "x" de la posición de la letra en la palabra mediante wreg. Este valor "x" se sumará al valor de pcr, (contador de programa), lo que provocará que el programa saltee "x" instrucciones dentro de la subrutina. Luego, la subrutina devolverá el valor la configuración del display de 7 segmentos. Aclarado esto, empecemos con la subrutina. Página 2 de 8
Período Electrotecnia c.r.t Tipo de examen: LibreE CETP - ITS Reglamentadon Primero, el cabezal de la subrutina. Llamaremos TABLA a la subrutina, por lo que la primera línea empezará con esta etiqueta. Luego se debe insertar la operación de suma entre pcl, y wreg. La instrucción es ADDWE f, d, donde f es el valor del registro fuente (rcl) y d indica a dónde se cargará el resultado (r, para que se cargue en pcr, y realice el salto). Entonces quedaría así: TABLA PCL, F ADDWF Ahora, empezamos con la tabla. Considere primero cómo se verán las letras de la palabra en el display, y luego haga la tabla correspondiente. Para nuestro ejemplo, las letras que usaremos ('F', 'E', 'B', 'R' y'o') se verán de la siguiente forma: Letra'F' Letra'E' Letra'B' Letra'R' Letra'O' ffi Luego que tenga el esquema de empiece a diseñar la tabla con los segmentos según el orden que poseen. Luego se cambian de lugar para ajustarse a la configuración que se da en el problema (Sigan el resaltado de las letras para ver los cambios y el fondo para ver a qué configuración pertenecen): Segr,nentos F E B R o Una vez arreglado ese asunto, debe pensar como cargar el valor de la tabla en wreg y al mismo tiempo volver al procedimiento anterior. Hay una instrucción de retorno diseñada para estos casos. Es Rntr,w r, donde t representa un literal que se cargará en wreg antes de que se salga de la subrutina. En nuestro caso el literal será el valor que se deba cargar en portc y que acabamos de calcular. Según la Ietra, RC7 permanecerá como'0'. Si se van a mostrar en hexadecimal, esto significa que los literales no van a ser mayores que 0x7r. Luego de arreglado este asunto se pueden armar las tablas. Así se verá la tabla en ambas versiones (binaria y hexadecimal): Página 3 de 8
." Período c.t.t Gedula de ldentidad N": Tipo de examen: Libre[--l Reglamentadon CETP.ITS LETRA RUTINA (BIN) RUTINA (HEX) F RETLW B'O111OOO1' RETLW OX71 E RETLW 8'01110011' RETLW OX73 B RETLW 8'01100111' RETLW OX67 R RETLVü B' O1OOOOO1' RETLVü OX41 E RETLW 8'0111001-1' RETLW OX73 R RETLW B'O1OOOOO1' RETLW OX41 O RETLW B' O1OOO111' RETLW OX47 Al final, se pondrá un simple RETURN por si accidentalmente el número'7' pasa a la tabla. Si esto ocurre, el número'7' se conservará en wnrc y se cargara en portc \- como la configuración del display, por lo que se mostrará una "u" minúscula en el display cuando se salga de la subrutina que indicará que el filtrado está fallando. Dado esto, se ahora si podemos dar la subiutina completa en sus dos versiones, con tabla binaria (BlN) y hexadecimal (HEX). Según la opción que quiera, así es como deberá verse la subrutina terminada: (BtN) TABLA ADDWF PCL, F RETLVü B'O111OOO1' RETLVü B' 01110011' RETLW B'01100111' RETLVü B' O].OOOOO1' RETLW B' 01110011' RETLW B'O1OOOOO1' RETLW B'01000111' (HEx) RETURN TABLA ADDWF PCL, E RETLW OX71 RETLVü OX7 3 RETLW OX67 RETLW OX41 RETLW OX73 RETLVü OX41 RETLVü OX41 RETURN Página 4 de 8
. Período 4oaño c.t.t Tipo de examen: LibreE Reglamentadof--l CETP. lts Ejercicio 4. Si se supone que inicialmente valen cero los registros W y los que ocupan las direcciones 0x20 y Ox21 de la memoria de datos, Qué valor contendrán después de ejecutar el siguiente programa? INCE come f ORVüF xori{f 0X02 0, i I 0X020, E 0x021, E 0X021,I/ü 0X020f F Bien, lo primero revisar las líneas de programa una por una para ver qué sucede.. Se incrementa oxo2 0 (0x00 ) 0x01) y se carga en WREG, sin afectar a 0x2 0.. Se incrementa 0x021 (0x00 ) 0x01) y se carga en el propio registro sin afectar a wreg.. Se invierte el valor de oxozl (0x00 ) oxrr) y se carga en el propio registro.. Se suman lógicamente (ron) wreg y oxo21 (0x01 + oxff ) oxrr) y se carga el valor en htreg, sin afectar a 0x021. Se hace un xon entre wreg y ox02 o (oxee o 0x01 ) oxfe) y se carga en 0x21 sin afectar a wreg. Ahora revisemos esto en frio: PROGRAMA rnce comf rorütf XORITTF 0X2 0,I I 0X20, F 0x21, F 0x21, tr\7 0X2 0, F I^IREG 0x2 0 0x2\ B]N HEX BIN HEX BTN HEX B' 00000000' 0x0 0 B,00000000, 0x0 0 B'00000000, 0x00 B,0000000i, 0x0 i B',00000000, 0x0 0 B,00000000, 0x0 0 B'00000001, 0x0l_ B'0000000i.. 0x01 B'00000000, 0x0 0 B 00000001, 0x01 B',00000001, 0x01 B'.i.1i i:lil-"1_, 0xL,'P' B'r1, l.ji 111' NY;'Ii B' 00000001, 0x01 B'11111111' OXFE B'11111111/ OXFF B i-i-"lr1i1ü' OXF]E B',11111111'.OXFF La última fila contiene los resultados finales de los registros 0x020, 0x021 y wreg, los cuales solo se ven cuando se llega alfinal del programa. Página 5 de 8
, Período Febrero 2O1O c.r.t Tipo de examen: Libre E Reqlamentado fi CETP. ITS PROBLEMA 1: parte del PROGRAMA PRINCIPAL: NEWCONT BUCLE VER DESB UNI INC_DEC VER-X_I.INI VER Y DEC CLRF CLRF CALL MOVLW SUBWF BTFSS CLRF GOT'O MOVLW SUBWF BTFSS MOVLW SUBWF BTFSS CALL UNIDAD DECENA DESPLE IINIDAD,I D'10' UNIDAD,O STATUS,2 VER_X-LINI UNIDAD DECENAsl BLiCi,E D'X' LINIDAD,O STATUS,2 BUCLE D'Y' DECENA5o STATUS,2 BUCLE DESPLE NEWCONT \ NOTA: La línea en roio impide que se revise el límite si el número es múltiplo de 10, por lo que debe borrarse.