Microprocesadores. Guía 2 1 Facultad: Ingeniería. Escuela: Electrónica. Asignatura: Microprocesadores. Lugar de ejecución: Laboratorio de Microprocesadores (Edificio 3, 2a planta). Tema: Lazos y Control de Flujo en HC12. Objetivos generales Analizar las instrucciones de lazo en programas que requieren rutinas repetitivas. Objetivos específicos Que el estudiante: Analice el uso de algunas instrucciones de control de flujo, haciendo énfasis en las condiciones (estado de las banderas) que se necesitan para realizar o no el salto. Aplique algunas instrucciones de control de flujo en la resolución de problemas simples como la realización de un lazo repetitivo y la comparación entre dos datos. Analizar el concepto de dato “ascii” Introducción teórica Instrucciones de bifurcación Las instrucciones de bifurcación causan que exista un cambio en la secuencia cuando existan condiciones específicas. El CPU12 usa tres clase de instrucciones de bifurcación, ellas son: saltos cortos, saltos largos y saltos con una condición de bit. Las instrucciones de bifurcación también pueden ser clasificadas por el tipo de condición que debe ser satisfecha para que se dé un salto. Algunas instrucciones pertenecen a más de una clasificación. Instrucciones de salto unarios siempre se ejecutan. Los saltos simples son realizados cuando un bit específico en el registro de condición de código (CCR) está en un estado específico como resultado de una operación previa. Los Saltos sin signo se realizan cuando una comparación o prueba de cantidades sin signo resultan en una combinación específica de bits en el registro de condición de código (CCR). 2 Microprocesadores. Guía 2 Los saltos signados se dan cuando la comparación o prueba de cantidades con signo resultan en una combinación específica de los bits del registro de condición de código. Instrucciones de salto corto Las instrucciones de salto corto operan de la siguiente manera. Cuando una condición específica es cumplida, un valor de desplazamiento con signo de 8 bits es sumado al valor del contador de programa. La ejecución del programa continúa en la nueva dirección. El rango numérico del desplazamiento del salto corto es desde $80 (-128) hasta $7F(127) desde la dirección de la siguiente localidad de memoria después del valor de desplazamiento. La Tabla 1 es un sumario de las instrucciones de salto corto. Tabla 1. Instrucciones de salto corto Instrucciones de salto largo Las instrucciones de salto largo operan de la siguiente manera. Cuando una condición Microprocesadores. Guía 2 1 específica es cumplida, un valor de desplazamiento con signo de 16 bits es sumado al valor en el contador de programa. La ejecución del programa continúa en la nueva dirección. Los saltos largos son usados cuando se dan desplazamientos grandes entre pasos de marca de decisión son necesarios. El rango numérico del valor de desplazamiento de salto largo es desde $8000 (-32,768) a $7FFF (32,767) desde la dirección de la siguiente localidad de memoria después del valor de desplazamiento. Ello permite bifurcaciones desde cualquier localidad en el estándar de mapa de direcciones de 64Kbytes hacia cualquier otra localidad en el mapa. La Tabla 2 es un sumario de las instrucciones de salto largo. Tabla 2. Instrucciones de salto largo Instrucciones de salto por condición de bit Estos saltos son realizados cuando bits en un byte de memoria están en un estado específico. Un operando de máscara es usado para probar la localidad. Si todos los bits en 4 Microprocesadores. Guía 2 esa localidad que corresponden a unos en la máscara están a uno lógico (BRSET) o en cero lógico (BRCLR), el lazo se realiza. El rango numérico del desplazamiento de los saltos por condición de bit es desde $80 (-128) hasta $7F(127) desde la dirección de la siguiente localidad de memoria después del valor de desplazamiento. La Tabla 3 es un sumario de las instrucciones de salto por condición de bit. Tabla 3. Instrucciones de salto por condición de bit Instrucciones de lazo primitivas Los lazos primitivos pueden también ser conocidos como bifurcaciones por contador. Las instrucciones prueban un valor de contador en un registro o acumulador (A, B, D, X, Y, o SP) para la condición de salto de cero o diferente de cero. Hay versiones de pre-decremento, preincremento y sólo prueba de estas instrucciones. El rango numérico del desplazamiento de los lazos con contador es desde $80 (-128) hasta $7F(127) desde la dirección de la siguiente localidad de memoria después del valor de desplazamiento La Tabla 4 es un sumario las instrucciones de lazo primitivas Tabla 4. Instrucciones de lazo primitivas Microprocesadores. Guía 2 1 Materiales y equipo • • Computadora con Windows 98 o superior con el software CodeWarrior IDE. Tabla (set) de instrucciones del microcontrolador HC12. Procedimiento PARTE I: Ejemplos de uso de lazos 1. Haga un proyecto nuevo en Code Warrior IDE, y modifíquelo de acuerdo al siguiente código fuente. ;***************************************************************** ;* This stationery serves as the framework for a * ;* user application (single file, absolute assembly application) * ;* For a more comprehensive program that * ;* demonstrates the more advanced functionality of this * ;* processor, please see the demonstration applications * ;* located in the examples subdirectory of the * ;* Freescale CodeWarrior for the HC12 Program directory * ;***************************************************************** ; export symbols XDEF Entry, _Startup ABSENTRY Entry as application entry point ; export 'Entry' symbol ; for absolute assembly: mark this ; Include derivative-specific definitions INCLUDE 'derivative.inc' ROMStart EQU $4000 ; absolute address to place my code/constant data ; variable/data section ORG RAMStart ; Insert here your data definition. fuente ds.b 5 destino ds.b 5 ; code section ORG Entry: ROMStart 6 Microprocesadores. Guía 2 _Startup: LDS lazo: #RAMEnd+1 ; initialize the stack pointer LDX #$0000 LDAA fuente,X SUBA #$20 STAA destino,X INCX CPX #$5 BNE lazo STOP ;************************************************************** ;* Interrupt Vectors * ;************************************************************** ORG $FFFE DC.W Entry ; Reset Vector Listado 1. Programa de ejemplo saltos 2. Compile el programa 3. En el simulador hay una ventana llamada “DATA”, ahí están los dos arreglos declarados fuente y destino dé clic en el signo más (+) a la par de fuente y luego doble clic en la palabra “undefined” en el elemento [0], a continuación escriba 0x61, al dar enter observe el equivalente mostrado. 4. Haga lo mismo con los elementos [1] al [4] con los siguientes datos respectivos: 0x65, 0x69, 0x6F, 0x75. 5. Comience a ejecutar el programa paso a paso, hasta llegar a CPX, verifique el valor que está en el arreglo llamado destino dando clic en el signo más (+) a la par de este, analice con una tabla ASCII el por qué de este resultado. 6. Vea el estado de la memoria en la ventana memory, dando clic derecho en esta ventana, y seleccionando la opción Address y poniendo en el cuadro de diálogo 0x2000 7. Ejecute la instrucción CPX #$5 y verifique el estado de las banderas en el registro CCR, anótelo en el siguiente espacio: ______________________________ 8. Accione otro paso y verifique qué es lo que hace la instrucción BNE lazo: ______________________________ ¿cuál es el estado del IP? 9. Continúe ejecutando el programa observando el valor del registro X, hágalo hasta que llegue al valor de 5 y llegue hasta CPX #$5 después de correr esta instrucción anote el estado de las banderas en CCR: _________________________________________ 10. Ahora ejecute la instrucción BNE lazo ¿Hizo lo mismo que las veces anteriores? ¿Cuál es el estado del IP? ______________________________________ 11. Pruebe las condiciones para los demás saltos usando operaciones aritméticas para accionar las banderas. Microprocesadores. Guía 2 1 Problemas de aplicación: Haga un programa que a un vector de 10 datos numéricos de 0 a 9 cada dato en el vector se le sume el valor de $30 y se guarde en otro vector resultado. Haga un programa que sume 5 bytes en memoria y presente su resultado en la memoria (utilice el acarreo y lazos), pruebe su programa con dos operandos de $FFFFFFFFFF. Bibliografía J. C. Vega Ferreira y otros “Microcontroladores Motorola-Freescale: programación, familias y sus distintas aplicaciones en la industria”, Alfaomega 20081. • MOTOROLA “CPU12 Reference Manual” • Ayuda de programa CodeWarrior IDE. • 8 Microprocesadores. Guía 2 Hoja de cotejo: 2 Guía 2: Uso de la herramienta de desarrollo y los modos de direccionamiento del HC12. Alumno: Maquina No: Docente: GL: Fecha: EVALUACION % 1-4 5-7 8-10 CONOCIMIENTO 25% Conocimiento deficiente de los fundamentos teóricos Conocimiento y explicación incompleta de los fundamentos teóricos Conocimiento completo y explicación clara de los fundamentos teóricos APLICACIÓN DEL CONOCIMIENTO 70% No termina el procedimiento planteado en la guía 10% Termina el procedimiento con bastante asistencia 10% Termina el procedimiento de forma independiente 10% No modifica el programa 30% Modifica el programa no interpreta correctamente los resultados 30% Modifica el programa interpretando correctamente sus resultados 30% Sus respuestas son incompletas 30% Sus respuestas son correctas y completas 30% No responde a preguntas de retroalimentación 30% ACTITUD TOTAL 2.5% Es un observador pasivo. Participa ocasionalmente o lo hace constantemente pero sin coordinarse con su compañero. Participa propositiva e integralmente en toda la práctica. 2.5% Es ordenado; pero no hace un uso adecuado de los recursos Hace un uso adecuado de los recursos, respeta las pautas de seguridad; pero es desordenado. Hace un manejo responsable y adecuado de los recursos conforme a pautas de seguridad e higiene. 100% Nota