LABORATORIO DE SISTEMAS MICROPROCESADOS ESCUELA POLITÉCNICA NACIONAL Campus Politécnico "J. Rubén Orellana R." FACULTAD DE INGENIERÍA ELÉCTRICA Y ELECTRÓNICA Carrera de Ingeniería Electrónica y Control Carrera de Ingeniería Electrónica y Telecomunicaciones Carrera de Ingeniería Electrónica y Redes de Información Carrera de Ingeniería Eléctrica LABORATORIO DE SISTEMAS MICROPROCESADOS PRÁCTICA Nº5 1. TEMA : INSTRUCCIONES DE SALTO, LAZOS DE REPETICIÓN Y CREACIÓN DE TABLAS DE DATOS EN LA FLASH. 2. OBJETIVO: Desarrollar programas para resolver problemas utilizando lazos de repetición, tomando en cuenta que se producen casos diferentes; por lo que se recurre al uso de instrucciones que producen bifurcaciones en el programa. 3. INFORMACIÓN Muchos de los algoritmos en un sistema microprocesado son repetitivos, por lo que es necesario crear las estructura de control para tal fin. SALTOS: SALTOS INCONDICIONALES (Sin condicion): Si el conjunto de instrucciones se deben repetir incondicionalmente se pueden usar las instrucciones RJMP k (salto relativo, donde k está en complemento a 2 y es el número de líneas que debe saltar hacia adelante o hacia atrás ), ó JMP k (salto absoluto, donde k es cualquier dirección en la zona de programa del micro). Una forma más fácil de especificar a dónde deben ir los saltos es dejar una etiqueta y en lugar de especificar k como un número se pone el nombre de la etiqueta a donde se va a saltar. Un esquema general del código sería el siguiente: lazo: Dirección: Ladrón de Guevara E11-253 Teléfono: (02) 2976300 Ext.2209 Quito - Ecuador Correo: [email protected] LABORATORIO DE SISTEMAS MICROPROCESADOS ..... … (aquí va el código)… ..... rjmp lazo SALTOS CONDICIONALES: Si el código debe ejecutarse sólo si se cumple cierta condición como por ejemplo: si debe repetirse un número determinado de veces, o si un número es mayor a otro, ó si un registro tiene algún valor, etc. Se deben usar saltos condicionados. Existen dos maneras de realizar saltos condicionales, la primera es la ramificación (BRANCH) y la segunda el SKIP. BRANCH. Con estas instrucciones solamente se puede probar el estado de una de las banderas del registro SREG. Si la condición se cumple puede saltar desde 64 posiciones hacia atrás hasta 63 posiciones delante de la línea donde está la instrucción de salto condicional. Si la condición no se cumple, continúa con la siguiente instrucción. Como se prueban las banderas, normalmente se hace una operación previa la condicional para que las banderas se actualicen. MANERA DE DETERMINAR DESIGUALDADES ENTRE DATOS. Muchas veces es necesario tomar alguna acción dependiendo si un registro es mayor, o igual, o menor a otro registro. En este caso se puede realizar una resta entre los dos datos, ó para que los operadores no se alteren se puede usar la instrucción CP Rd,Rr (comparar; que hace una resta, pero el resultado no lo almacena en ningún lugar, solamente mueve las banderas). Estas banderas se deben probar con las instrucciones se salto condicional. En este caso particular se verifica la bandera Z para igualdad, y la bandera C para desigualdad. Para determinar igualdad, se puede usar la bandera Z se pone a uno lógico si la última operación realizada dio como resultado cero, si el resultado fue diferente de cero la bandera Z se pone a cero lógico. Si se desea determinar si un número es mayor que otro, se usa la bandera C. Por ejemplo para saber si el número almacenado en R16 es mayor o igual que el número que está en R17 puedo hacer lo siguiente: CP R16,R17 ( también podría hacer SUB R16,R17) Si R16 es mayor o igual a R17 (resultado de la resta positivo o cero) la bandera de CARRY en el SREG se pone a 0L, pero si R16 es menor que R17 esa bandera se pone a 1L (resultado negativo). Para completar las comparaciones se pueden usar las instrucciones de salto condicional como: BREQ k Salta si Z=1 (si el resultado de la última operación fue cero, caso contrario continúa con la siguiente instrucción) BRNE k Salta si Z=0 (si el resultado de la última operación fue diferente de cero, caso contrario continúa con la siguiente instrucción) BRCS k ó BRLO k Salta si C=1 (si el resultado de la última operación fue negativo) BRCC k ó BRSH k Salta si C=0 (si el resultado de la última operación fue positivo ó cero) Dirección: Ladrón de Guevara E11-253 Teléfono: (02) 2976300 Ext.2209 Quito - Ecuador Correo: [email protected] LABORATORIO DE SISTEMAS MICROPROCESADOS No conviene usar las instrucciones BRMI , BRPL, BRGE, BRLT con números en binario, pues éstas están destinadas a ser usadas con números expresados en complemento a 2. Un ejemplo de uso de estas instrucciones a continuación: Ejemplo: este pedazo de código hace que el código se repita 10 veces: ldi r16,10 ; se carga el número de veces a repetir el lazo (10 veces) lazo: ….. ….. (aquí va el código) ….. ….. dec r16 ;se decrementa el contador de iteraciones brne lazo ;si al decrementar el contador r16 no se llega a cero, .... ;la bandera Z=0,la condición se cumple y salta a la ;etiqueta lazo. Si r16 llega a cero, Z=1, la condición no se ;cumple y continúa con la siguiente instrucción. SKIP Con estas instrucciones solamente se puede probar el estado (si es 1 ó 0) de un bit dentro de un registro, o del estado de un bit en un registro de entrada/salida. La lógica es la siguiente: si la condición se cumple se salta la siguiente instrucción (no la ejecuta), y continúa con la que está después. Si no se cumple , continúa ejecutando normalmente la siguiente instrucción. Ejemplo: ……. ……. sbrs R17,3 ;saltar si el bit 3 del registro r17 está en 1. xxxx ;si el bit probado es cero continúa el programa desde aquí yyyy ;si el bit probado es 1 (si se cumple la condición), la ;instrucción anterior no se ejecuta y se continúa desde aquí. ……. Pueden usarse las siguientes instrucciones: SBRC Rr,b ( Saltarse la siguiente instrucción si bit b del registro Rr esta en 0L) SBRS Rr,b ( Saltarse la siguiente instrucción si bit b del registro Rr esta en 1L) SBIC A,b ( Saltarse la siguiente instrucción si bit b del registro de entrada/salida A esta en 0L) SBIS A,b ( Saltarse la siguiente instrucción si bit b del registro de entrada/salida A esta en 1L). Dirección: Ladrón de Guevara E11-253 Teléfono: (02) 2976300 Ext.2209 Quito - Ecuador Correo: [email protected] LABORATORIO DE SISTEMAS MICROPROCESADOS RESERVAR ESPACIOS DE MEMORIA EN LA SRAM, y USO DE LA SRAM Si se desea usar la SRAM para almacenar información, una forma adecuada se muestra en el siguiente pedazo de código: .include "m164pdef.inc" .def tempo=R16 ...... .DSEG PUNTAJE1: .byte 1 ;Se deja un byte de espacio reservado, asignado a este nombre RESULTADO: .byte 4 ;Se dejan 4 bytes de espacio reservado, asignado a este nombre GANADOR: .byte 24 ;Se dejan 24 bytes de espacio reservado, asignado a este nombre .CSEG .ORG 0X0 ;Aquí inicia el programa ....... ....... ldi xh,high(GANADOR) ;El puntero X va a apuntar a la primera localidad de las 24 reservadas a ;este nombre, los punteros ldi xl,low(GANADOR) ;son de 16 bits, por eso se deben cargar 8 bits a la vez. LOW indica que ;se toman los 8 bits menos significativos, y HIGH indica que se tomen los ;8 bits más significativos. ldi yh,high(RESULTADO) ;El puntero y va a apuntar a la primera localidad de las 4 reservadas a ;este nombre, los punteros ldi yl,low(RESULTADO) ;son de 16 bits, por eso se deben cargar 8 bits a la vez. LOW indica que ;se toman los 8 bits menos significativos, y HIGH indica que se tomen ;los 8 bits más significativos. ....... ....... ldi tempo,’a’ ;Cargo en tempo (R16) el valor ASCII que corresponde a ‘a’ st x+,tempo ;Almaceno el valor que está en tempo (R16) a la primera localidad ;reservada para GANADOR,y el punero X se incrementa y apunta al ;siguiente espacio reservado para GANADOR. ....... ....... lds R0,PUNTAJE1 ;Carga en R0 el valor almacenado en el espacio de SRAM asignado a ;PUNTAJE1 ....... ....... CREACIÓN DE TABLAS EN MEMORIA FLASH. La memoria de programa (Memoria FLASH) puede también contener datos, en este caso esos datos son CONSTANTES. Puede almacenarse información en forma de tablas. La forma de crear una tabla en flash con datos numéricos se muestra con un ejemplo de pedazos de código: ……. ……. Dirección: Ladrón de Guevara E11-253 Teléfono: (02) 2976300 Ext.2209 Quito - Ecuador Correo: [email protected] LABORATORIO DE SISTEMAS MICROPROCESADOS ldi zh,high(Mensaje1<<1) ;Al usar la instrucción LPM, se usa el puntero Zl ;los bits del 15 al 1 indican la dirección ldi zl,low(Mensaje1<<1) ;por eso se desplaza una posición a la izquierda con el operador ;>>1 ( que es igual a mu ltiplicar por 2) luego de esta instrucción ;el puntero Z apunta al primer elemento de la tabla Mensaje1, ;que en este caso es la primera letra que corresponde a la "E" lpm R0,Z+ ; R0 recibe el ASCII de la letra E, y el puntero ahora apunta al ;siguiente elemento, en este caso la letra "s" lpm R1,Z+ ; R1 recibe el ASCII de la letra s , y el puntero ;ahora apunta al siguiente elemento, en este caso la letra "t" ……. ……. ……. Tabla1: .db 10,14,35,22 ;Creo una tabla llamaba "Tabla1" en la FLASH, esta tabla se pone ;a continuación del programa que le antecede la forma de crear ;una tabla en flash con textos se muestra con un ejemplo: Mensaje1: .db “Este es un mensaje alfanumérico” Mensaje2: .db “Otro mensaje alfanumérico” 4. TRABAJO PREPARATORIO 4.1 Revisar el conjunto de instrucciones para los microcontroladores AVR de 8 bits, en particular los saltos incondicionales y condicionales. 4.2 Hacer un resumen de las directivas del ASSEMBLER que crean tablas de datos en la memoria de programa. 4.3 Realizar un pequeño programa que realice la comparación entre dos registros, y determine qué valor toman las banderas Z y C dependiendo si los registros son iguales, ó si el uno es mayor o menor que el otro. Anotar sus conclusiones. 4.4 Escribir el siguiente programa: En la memoria SRAM se deben reservar cuatro espacios de memoria de acuerdo al siguiente detalle: Tres localidades de 1 byte cada una a los que se les asigna los nombres ACTUAL, TMAX y TMIN, y se debe reservar un espacio adicional llamado MENSAJE de 42 bytes para copiar uno de los mensajes que se indicará a continuación correspondiente a todas las letras del texto más extenso incluidos los espacios en blanco. Escribir un programa que copie el contenido de las localidades de SRAM : ACTUAL, TMAX y TMIN a tres registros diferentes. Luego debe proceder a comparar estos registros, de forma que se determine si el valor de ACTUAL está sobre TMAX, bajo TMIN ó entre esos dos valores. De acuerdo al resultado de la acción anterior se debe copiar hacia el espacio MENSAJE dejado en SRAM uno de los textos que se crearon como tablas en la memoria FLASH, de acuerdo al siguiente detalle: Dirección: Ladrón de Guevara E11-253 Teléfono: (02) 2976300 Ext.2209 Quito - Ecuador Correo: [email protected] LABORATORIO DE SISTEMAS MICROPROCESADOS Si el contenido de ACTUAL es igual o mayor que el de TMAX, el texto a copiar es el Nº 1. Si el contenido de ACTUAL es menor o igual que el de TMIN, el texto a copiar es el Nº 3. Si el contenido de ACTUAL está entre TMAX y TMIN el texto a copiar es el Nº 2 (Recordar que se asume que siempre los tres valores de ACTUAL, TMAX y TMIN van a ser diferentes) Los textos a los que se hace mención deben ser creados como tablas en la memoria FLASH luego de la última instrucción de su programa. Los textos son los siguientes, y todos deben tener la misma longitud de 42 caracteres. Si el mensaje es más corto se deben poner espacios en blanco al final: texto1: "LA TEMPERATURA ESTA SOBRE EL VALOR MAXIMO " texto2: "LA TEMPERATURA ESTA EN EL RANGO CORRECTO " texto3: "LA TEMPERATURA ESTA BAJO EL VALOR MINIMO " 5. EQUIPO Y MATERIALES Computador con Atmel Studio y Proteus 6. PROCEDIMIENTO 6.1 Probar el programa, y TMIN que el instructor comprobar, mediante el diferentes contenidos de límites. para los valores de las etiquetas MENSAJE, ACTUAL, TMAX y asigne a cada grupo, obtener el código de máquina. Y simulador del AVR Studio, la ejecución del programa con las localidades que se comparan; en especial con valores 7. INFORME: 7.1 Realizar Presentar los resultados de las comprobaciones mediante capturas de pantallas. 7.2 Escribir los cambios que se debe realizar en el programa, si los números que se comparan son de más de 8 bits. 7.3 Presentar adicionalmente lo que el instructor solicite. Responsables. Ing. Jhon Pilataxi Dirección: Ladrón de Guevara E11-253 Teléfono: (02) 2976300 Ext.2209 Quito - Ecuador Correo: [email protected]