• No se han encontrado resultados

LABORATORIO DE SISTEMAS MICROPROCESADOS PRÁCTICA N 6 INSTRUCCIONES DE SALTO, LAZOS DE REPETICIÓN Y CREACIÓN DE TABLAS DE DATOS EN LA FLASH.

N/A
N/A
Protected

Academic year: 2022

Share "LABORATORIO DE SISTEMAS MICROPROCESADOS PRÁCTICA N 6 INSTRUCCIONES DE SALTO, LAZOS DE REPETICIÓN Y CREACIÓN DE TABLAS DE DATOS EN LA FLASH."

Copied!
7
0
0

Texto completo

(1)

ELECTRÓNICA

Carrera de Ingeniería en Electrónica y Automatización

LABORATORIO DE SISTEMAS MICROPROCESADOS

1.

TEMA :

PRÁCTICA N°6

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. MARCO TEÓRICO

Muchos de los algoritmos en un sistema microprocesado son repetitivos, por lo que es necesario crear las estructuras de control para tal fin.

SALTOS:

SALTOS INCONDICIONALES (Sin condición):

Si el conjunto de instrucciones se debe 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:

...

… (aquí va el código) ...

rjmp lazo

SALTOS CONDICIONALES:

Si el código debe ejecutarse sólo si se cumple cierta condición, por ejemplo: si debe repetirse un número determinado de veces, o si un número es mayor a otro, ó si un bit en un registro tiene algún valor. Existen dos maneras de realizar saltos condicionales, la primera es la ramificación (BRANCH) y la segunda el SKIP.

(2)

LABORATORIO DE SISTEMAS MICROPROCESADOS

BRANCH

Con estas instrucciones solamente se puede probar el estado de una de las 8 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 al condicional para que las banderas se actualicen.

DETERMINACIÓN DE 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 de 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 que 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.

Para 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 se puede 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)

Las instrucciones BRMI, BRPL, BRGE, BRLT sólo se deben usar con números expresados en complemento a 2. No usarlas si se desean comparar números sin signo.

(3)

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 es 0L).

• SBRS Rr,b ( Saltarse la siguiente instrucción si bit b del registro Rr es 1L).

• SBIC A,b ( Saltarse la siguiente instrucción si bit b del registro de entrada/salida A es 0L).

• SBIS A,b ( Saltarse la siguiente instrucción si bit b del registro de entrada/salida A es 1L).

(4)

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 apunta a la primera localidad de las 24 reservadas a

;este nombre

ldi xl,low(GANADOR) ;Los punteros son de 16 bits y se deben cargar 8 bits a la vez.

;LOW indica que se toman los 8 bits menos significativos, y HIGH

;indica que se toman los 8 bits más significativos.

ldi yh,high(RESULTADO) ;El puntero Y apunta a la primera localidad de las 4 reservadas a ldi yl,low(RESULTADO) ;este nombre

...

...

ldi tempo,’a’ ;Carga 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 valores que no cambian. Puede almacenarse información en forma de tablas. La forma de crear una tabla en la FLASH con datos numéricos se muestra con un ejemplo de pedazos de código:

(5)

…….

…….

ldi zh,high(Mensaje1<<1) ;Al usar la instrucción LPM, se usa el puntero Z

;los bits del 15 al 1 deben indicar 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 multiplicar 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 al final del programa la forma de crear

;Crear una tabla en FLASH con textos se muestra a

;continuación.

Mensaje1: .db “Este es un mensaje alfanumérico”

Mensaje2: .db “Otro mensaje alfanumérico”

4.

TRABAJO PREPARATORIO

4.1. Revisar acerca del conjunto de instrucciones para los saltos incondicionales y condicionales y acerca de las directivas en ASSEMBLER que crean tablas de datos en la memoria de programa. (no presentar nada escrito en este numeral).

4.2 Crear un 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.

4.3 Crear un programa que cargue datos en dos registros llamados VALA y VALB, luego los compare (usando CP) y dependiendo del resultado, usando los condicionales, salte a una de las siguientes etiquetas AIGUALB, AMAYORB o AMENORB.

4.4 Crear un programa que defina como entrada el pin PA0 y dependiendo del valor que tenga ese pin salte a una de las siguientes etiquetas: ENTRADAES1 o ENTRADAES0.

4.5 Crear un proyecto en Microchip Studio, cargar el programa que se especifica en el anexo y crear la respectiva hoja en PROTEUS como en el anexo.

4.6 Presentar los códigos generados y las capturas de pantallas de la hoja de proteus tal como solicite el instructor.

(6)

LABORATORIO DE SISTEMAS MICROPROCESADOS

5. EQUIPO Y MATERIALES

Computador con Microchip Studio y Proteus

6. PROCEDIMIENTO

6.1 Probar el programa del numeral 4.2 6.2 Probar el programa del numeral 4.3 6.2 Probar el programa del numeral 4.4 6.3 Probar el programa del numeral 4.5

6.4 El instructor indicará un programa sencillo a ser desarrollado y debe ser concluido antes de la finalización de la sesión para subirlo en el espacio previsto.

6.5 El instructor puede solicitar modificaciones a los programas anteriores.

7. INFORME:

7.1 Presentar los resultados de las comprobaciones mediante capturas de pantallas.

7.2 Presentar adicionalmente lo que el instructor solicite 7.3 Comentarios y conclusiones.

8 REFERENCIAS:

atmel-0856-avr-instruction-set-manual

ANEXO

; leer_pin.asm

;

; Created: 3/1/2022 17:46:02

; Author : pchico

;PROGRAMA BASE

;Este programa lee un interruptor colocado en PA7,

;si es 0L en el puerto PORTB se encenderán los leds pares (PA0, PA2,PA4,PA6)

;mientras los otros están apagados

;si es 1L en el puerto PORTB se encenderán los leds impares (PA1, PA3,PA5,PA7)

;mientras los otros están apagados

;2)Se debe leer el estado del pin PA7 y de acuerdo a su valor

;se debe acceder a una de las dos tablas en la FALSH, leerlas y

;sacar esta información a los LED

;3)Esta rutina se repite indefinidamente

;*****************************

;ZONA DE DEFINICIÓN DE VARIABLES .def tempo=r16

;*****************************

.cseg

.org 0x00

;Se deben configurar adecuadamente los puertos

ldi tempo,0b00000000 ;el bit mas significativo del PuertoA es entrada out ddra,tempo ;para el interruptor, los otros pines no se usan out ddrc,tempo ;por lo que también los defino como entrada con pullup out ddrd,tempo ;el PuertoC y PuertoD no se usan, son entradas

;con pullup activo

ldi tempo,0b11111111 ;el PuertoB es salida para los LED out ddrb,tempo

out porta,tempo ;activo pullup del pin de entrada y de los pines no usados

(7)

in tempo,mcucr ;el bit PUD del mcucr debe estar en 0 para que andi tempo,0b11101111 ;puedan activarse los pullup.

out mcucr,tempo lazo:

sbic pina,7 ;si el pin PA7 está en 0L se salta la siguiente instrucción rjmp pin_es_1 ; el pin estuvo en 1L y salta a esa etiqueta

pin_es_0:

ldi zh, high (PARES<<1);el puntero Z apunta al inicio de la tabla PARES ldi zl, low (PARES<<1) ; que está en la FLASH, El puntero es de 16 bits

;por lo que se lo hace en dos partes, primero los

;8 bits mas significativos de la dirección a zh (r31)

; y luego los 8 bits menos significativos a zl (r30)

;En Z la dirección está del bit 1 al 15

;y el bit 0 indica que apunte al LSB

;de acuerdo al formato de la instrucción LPM

;que se va a utilizar, por eso se desplaza

;la dirección una posición a la izquierda (<<1)

lpm tempo,z ;recupero el primer elemento de la tabla (en este caso la tabla solo tiene

;un solo elemento)

out portb,tempo ;saco por el PuertoB el valor que estaba en la tabla rjmp lazo ;salto a verificar nuevamente el valor del pin PA7

pin_es_1:

ldi zh, high (IMPARES<<1);el puntero Z apunta al inicio de la tabla IMPARES ldi zl, low (IMPARES<<1); que está en la FLASH, El puntero es de 16 bits

;por lo que se lo hace en dos partes, primero los

;8 bits mas significativos de la dirección a zh (r31)

; y luego los 8 bits menos significativos a zl (r30)

;En Z la dirección está del bit 1 al 15

;y el bit 0 indica que apunte al LSB

;de acuerdo al formato de la instrucción LPM

;que se va a utilizar, por eso se desplaza

;la dirección una posición a la izquierda (<<1)

lpm tempo,z ;recupero el primer elemento de la tabla (en este caso la tabla solo tiene

;un solo elemento)

out portb,tempo ;saco por el PuertoB el valor que estaba en la tabla rjmp lazo ;salto a verificar nuevamente el valor del pin PA7

;********************************************

;Creación de las tablas PARES: .db 0b10101010 IMPARES: .db 0b01010101

Elaborado por: Ing. Patricio Chico

Ing. Ronald Pillajo

Revisado por:

Ing. Alex Oña

Referencias

Documento similar

Y tendiendo ellos la vista vieron cuanto en el mundo había y dieron las gracias al Criador diciendo: Repetidas gracias os damos porque nos habéis criado hombres, nos

Where possible, the EU IG and more specifically the data fields and associated business rules present in Chapter 2 –Data elements for the electronic submission of information

The 'On-boarding of users to Substance, Product, Organisation and Referentials (SPOR) data services' document must be considered the reference guidance, as this document includes the

In medicinal products containing more than one manufactured item (e.g., contraceptive having different strengths and fixed dose combination as part of the same medicinal

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

Products Management Services (PMS) - Implementation of International Organization for Standardization (ISO) standards for the identification of medicinal products (IDMP) in

This section provides guidance with examples on encoding medicinal product packaging information, together with the relationship between Pack Size, Package Item (container)

Package Item (Container) Type : Vial (100000073563) Quantity Operator: equal to (100000000049) Package Item (Container) Quantity : 1 Material : Glass type I (200000003204)