ejercicio 04 calculos

15
SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 1 Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información EJERCICIOS DE UTILIZACIÓN DE LAS INSTRUCCIONES ARITMÉTICAS Y LÓGICAS ENUNCIADO DEL EJERCICIO: Desarrollar un programa para los microcontroladores ATmega164P, que permita transformar un valor de millas a metros, considerando que una milla es igual a 1609 m (mil seiscientos nueve metros). ANÁLISIS DE LA SOLUCIÓN: Para resolver este problema, delimitar el valor de millas a un número entero de 8 bits; es decir que el rango está comprendido entre 0 y 255 millas. Por lo tanto, el resultado de la transformación tendrá valores de 0 a 410295 metros. Este rango de valores expresados en hexadecimal es de 0x0 a 0x642B7; lo que significa que, el resultado ocupa 3 bytes. Como consecuencia de este análisis, la distribución de la información que utiliza el programa o “Mapa de Memoria” va ser el siguiente: ETIQUETA SRAM DESCRIPCIÓN MILBIN Valor de las millas a transformar METBIN Resultado de la transformación a metros: El byte más significativo es el primero El último es el byte menos significativo Analizando varios casos de transformaciones, se tendrán los siguientes resultados: ETIQUETA Caso 1 Caso 2 Caso 3 Caso 4 MILBIN 0x00 0x02 0x7F 0xFF METBIN 0x00 0x00 0x03 0x06 0x00 0x0C 0x1E 0x42 0x00 0x92 0x37 0xB7 Utilizando instrucciones de multiplicación de 8 bits es necesario realizar dos y los resultados parciales sumarlos para obtener el resultado final. Como se observa a continuación: Caso 1 Caso 2 Caso 3 Caso 4 Multiplicando (millas) 0x00 0x02 0x7F 0xFF Multiplicador (1609) 0x0649 0x0649 0x0649 0x0649 Resultado Parcial 1 0x0000 0x0092 0x2437 0x48B7 Resultado Parcial 2 0x0000__ 0x000C__ 0x02FA__ 0x05FA__ Resultado Final 0x000000 0x000C92 0x031E37 0x0642B7

Upload: jaime-e-velarde

Post on 01-Jul-2015

3.280 views

Category:

Education


0 download

DESCRIPTION

Ejercicios para el uso de instrucciones aritméticas y lógicas en el cálculo de funciones

TRANSCRIPT

Page 1: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 1

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

EJERCICIOS DE UTILIZACIÓN DE LAS INSTRUCCIONES ARITMÉTICAS Y LÓGICAS

ENUNCIADO DEL EJERCICIO:

Desarrollar un programa para los microcontroladores ATmega164P, que permita

transformar un valor de millas a metros, considerando que una milla es igual a 1609 m

(mil seiscientos nueve metros).

ANÁLISIS DE LA SOLUCIÓN:

Para resolver este problema, delimitar el valor de millas a un número entero de 8 bits; es

decir que el rango está comprendido entre 0 y 255 millas. Por lo tanto, el resultado de la

transformación tendrá valores de 0 a 410295 metros. Este rango de valores expresados

en hexadecimal es de 0x0 a 0x642B7; lo que significa que, el resultado ocupa 3 bytes.

Como consecuencia de este análisis, la distribución de la información que utiliza el

programa o “Mapa de Memoria” va ser el siguiente:

ETIQUETA SRAM DESCRIPCIÓN

MILBIN Valor de las millas a transformar

METBIN Resultado de la transformación a metros: El byte más significativo es el primero El último es el byte menos significativo

Analizando varios casos de transformaciones, se tendrán los siguientes resultados:

ETIQUETA Caso 1 Caso 2 Caso 3 Caso 4

MILBIN 0x00 0x02 0x7F 0xFF

METBIN 0x00 0x00 0x03 0x06

0x00 0x0C 0x1E 0x42

0x00 0x92 0x37 0xB7

Utilizando instrucciones de multiplicación de 8 bits es necesario realizar dos y los

resultados parciales sumarlos para obtener el resultado final. Como se observa a

continuación:

Caso 1 Caso 2 Caso 3 Caso 4

Multiplicando (millas) 0x00 0x02 0x7F 0xFF

Multiplicador (1609) 0x0649 0x0649 0x0649 0x0649

Resultado Parcial 1 0x0000 0x0092 0x2437 0x48B7

Resultado Parcial 2 0x0000__ 0x000C__ 0x02FA__ 0x05FA__

Resultado Final 0x000000 0x000C92 0x031E37 0x0642B7

Page 2: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 2

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

ALGORITMO QUE SE IMPLEMENTA:

• Tomar desde la memoria el valor de las millas y multiplicar por el byte menos

significativo de 1609.

• De los 16 bits de este primer resultado parcial, el byte menos significativo ya se

lo puede almacenar como parte del resultado final; mientras que el byte más

significativo se lo guarda momentáneamente para ser tomado en cuenta en la

suma con el segundo resultado parcial.

• El segundo resultado parcial se obtiene multiplicando el valor de las millas por

el byte más significativo de 1609.

• De los 16 bits del segundo resultado parcial, el byte menos significativo se lo

suma con el byte guardado anteriormente y su resultado se almacena como el

byte intermedio del resultado final.

• Finalmente, el byte más significativo del resultado final será igual al byte más

significativo del segundo resultado parcial, más el llevo o carry de la suma

anterior.

CODIFICACIÓN CORRESPONDIENTE AL ALGORITMO:

.NOLIST

.INCLUDE "m164pdef.inc"

.LIST ; .DEF AUX1 = R16 ; REGISTRO AUXILIAR 1 .DEF AUX2 = R17 ; REGISTRO AUXILIAR 2 .DEF AUX3 = R18 ; REGISTRO AUXILIAR 3 ; SEGMENTO DE DATOS o MEMORIA SRAM .DSEG MILBIN: .BYTE 1 ; VALOR DE LAS MILLAS EN BINARIO METBIN: .BYTE 3 ; RESULTADO DE LOS METROS EN BINARIO ; SEGMENTO DE CÓDIGO o MEMORIA FLASH .CSEG ; MULTIPLICACIÓN DE LAS MILLAS POR EL BYTE BAJO DE 1609 LDS AUX1,MILBIN LDI AUX2,LOW(1609) MUL AUX1,AUX2 ; ALMACENAMIENTO DEL RESULTADO PARCIAL STS METBIN+2,R0 MOV AUX3,R1 ; MULTIPLICACIÓN DE LAS MILLAS POR EL BYTE ALTO DE 1609 LDI AUX2,HIGH(1609) MUL AUX1,AUX2 ; RESULTADO FINAL ADD AUX3,R0 STS METBIN+1,AUX3 LDI AUX3,0 ADC AUX3,R1 STS METBIN,AUX3 ; FINAL: RJMP FINAL .EXIT ; FIN DEL MODULO FUENTE

COMPROBACIÓN DE LA SOLUCIÓN:

Las pantallas obtenidas en las simulaciones con el AVR Studio 4 para los casos

analizados anteriormente se muestran a continuación:

Page 3: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 3

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

PRIMERA MODIFICACIÓN AL EJERCICIO:

Modificar al programa anterior para que el valor de las millas que se va a transformar se

exprese en BCD no empaquetado o Decimal Codificado en Binario que ocupa una

localidad por cada dígito. El resultado también debe ser expresado en BCD no

empaquetado.

ANÁLISIS DE LA PRIMERA MODIFICACIÓN:

Considerando los rangos que tiene la información que procesa el programa, el nuevo

“Mapa de Memoria” que se va a utilizar es el siguiente:

ETIQUETA SRAM DESCRIPCIÓN

MILBCD Dígito de las Centenas de las millas

Dígito de las Decenas de las millas

Dígito de las Unidades de las millas

MILBIN Valor binario de las millas a transformar

METBIN Resultado en binario de la transformación a metros: El byte más significativo es el primero El último es el byte menos significativo

METBCD Dígito de las Centenas de miles de los metros

Dígito de las Decenas de miles de los metros

Dígito de las Unidades de miles de los metros

Dígito de las Centenas de los metros

Dígito de las Decenas de los metros

Dígito de las Unidades de los metros

Page 4: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 4

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

En el nuevo mapa de memoria los datos de entrada al programa ocupan 3 localidades:

MILBCD, MILBCD+1 y MILBCD+2; mientras que el resultado se obtiene en 6

localidades, desde METBCD hasta METBCD+5. Por lo tanto, los cuatro casos

analizados tendrán la siguiente estructura de la información en el mapa:

ETIQUETA Caso 1 Caso 2 Caso 3 Caso 4

MILBCD 0x00 0x00 0x01 0x02 DA

TO

S

MILBCD+1 0x00 0x00 0x02 0x05

MILBCD+2 0x00 0x02 0x07 0x05

MILBIN 0x00 0x02 0x7F 0xFF

METBIN 0x00 0x00 0x03 0x06

0x00 0x0C 0x1E 0x42

0x00 0x92 0x37 0xB7

METBCD 0x00 0x00 0x02 0x04 RE

SUL

TA

DO

S

METBCD+1 0x00 0x00 0x00 0x01

METBCD+2 0x00 0x03 0x04 0x00

METBCD+3 0x00 0x02 0x03 0x02

METBCD+4 0x00 0x01 0x04 0x09

METBCD+5 0x00 0x08 0x03 0x05

TRANSFORMACIÓN DE BCD A BINARIO

Para cumplir con la primera parte de la modificación al programa, se debe implementar

el algoritmo de la transformación de BCD a Binario; que consiste en el “Desarrollo

Polinomial” del número BCD, realizando multiplicaciones de las potencias de 10 por

cada dígito decimal. Es decir: las centenas se deben multiplicar por 102 o 100, las

decenas por 101 o simplemente por 10 y las unidades por 10

0 o no multiplicar. Luego

estos resultados se suman y se obtiene el número binario equivalente.

Caso 1 Caso 2 Caso 3 Caso 4

Centenas ���� 100 0x00 ����

0x64 =

0x00 ����

0x64 =

0x01 ����

0x64 =

0x02 ����

0x64 =

Centenas en binario 0x00 0x00 0x64 0xC8

Decenas ���� 10 0x00 ����

0x0A =

0x00 ����

0x0A =

0x02 ����

0x0A =

0x05 ����

0x0A =

Decenas en binario 0x00 0x00 0x14 0x32

Unidades en binario 0x00 0x02 0x07 0x05

Sumas de los equivalentes binarios

0x00 +

0x00 +

0x00 =

0x00

0x00 +

0x00 +

0x02 =

0x02

0x64 +

0x14 +

0x07 =

0x7F

0xC8 +

0x32 +

0x05 =

0xFF

Page 5: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 5

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

TRANSFORMACIÓN DE BINARIO A BCD

El algoritmo de la segunda parte de la modificación al programa, corresponde a la

transformación de Binario a BCD del resultado; que consiste en “Divisiones Sucesivas”

del número binario para 10, porque esa es la base del sistema de numeración al que se

va a transformar. Como este microcontrolador no posee instrucciones de división, se

debe recurrir a otras instrucciones como las de desplazamiento, rotación y restas para

implementar el algoritmo.

En el presente ejemplo, el algoritmo que se implementa es una variación al mencionado

en el párrafo anterior, pero que acorta el tiempo de ejecución del programa y consiste en

ir dividiendo el número binario para las potencias de 10, con fin de ir obteniendo los

dígitos decimales desde el más significativo. Como el resultado contiene hasta centenas

de miles o 105, las divisiones que se deben realizar son para las siguientes potencias:

POTENCIAS DE 10 DECIMAL HEXADECIMAL CON 3 BYTES

105 100.000 0x186A0 0x0186A0

104 10.000 0x2710 0x002710

103 1.000 0x3E8 0x0003E8

102 100 0x64 0x000064

101 10 0xA 0x00000A

A continuación se muestran las cinco divisiones hexadecimales o binarias y sus

resultados para el CASO 4, donde los cinco cocientes y el último residuo son los dígitos

decimales o BCD de la transformación.

0x0642B5 0x0186A0

Residuo ���� 0x002837 0x04 Cociente

���� ���� Centenas de miles

0x002837 0x002710

Residuo ���� 0x000127 0x01 Cociente

���� ���� Decenas de miles

0x000127 0x0003E8

Residuo ���� 0x000127 0x00 Cociente

���� ���� Unidades de miles

0x000127 0x000064

Residuo ���� 0x00005F 0x02 Cociente

���� ���� Centenas

0x00005F 0x00000A

Residuo ���� 0x000005 0x09 Cociente

Unidades ���� ���� Decenas

Page 6: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 6

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

La división dentro del algoritmo es implementada mediante restas sucesivas de tres

bytes, con un contador de restas que será el cociente de la división y el control para

detener las restas sucesivas se realiza mediante el chequeo de la bandera del “carry” que

corresponde al debo de las restas.

El residuo de la división se recupera sumando con el substraendo el resultado de la resta

que generó el debo. En la siguiente tabla se muestran los valores que se obtienen en las

restas sucesivas en la división de 0x0642B5 para 0x0186A0, que corresponde a la

primera de las cinco divisiones del CASO 4.

MINUENDO SUSTRAENDO RESULTADO CONTADOR DEBO (carry)

0x0642B5 0x0186A0 0x04BC17 0x01 0

0x04BC17 0x0186A0 0x033577 0x02 0

0x033577 0x0186A0 0x01AED7 0x03 0

0x01AED7 0x0186A0 0x002837 0x04 0

0x002837 0x0186A0 0xFEA197 ���� 1

RESIDUO ���� COCIENTE

Finalmente, las restas de tres bytes se implementan mediante tres restas de 8 bits, la

resta de los bytes menos significativos es sin debo y las otras dos son con debo.

CODIFICACIÓN DE LA PRIMERA MODIFICACIÓN DEL EJERCICIO:

.NOLIST

.INCLUDE "m164pdef.inc"

.LIST ; .DEF AUX1 = R16 ; REGISTRO AUXILIAR 1 .DEF AUX2 = R17 ; REGISTRO AUXILIAR 2 .DEF AUX3 = R18 ; REGISTRO AUXILIAR 3 ; SEGMENTO DE DATOS o MEMORIA SRAM .DSEG MILBCD: .BYTE 3 ; TRES DÍGITOS PARA LAS MILLAS MILBIN: .BYTE 1 ; VALOR DE LAS MILLAS EN BINARIO METBIN: .BYTE 3 ; RESULTADO DE LOS METROS EN BINARIO METBCD: .BYTE 6 ; SEIS DÍGITOS PARA EL RESULTADO ; SEGMENTO DE CÓDIGO o MEMORIA FLASH .CSEG ; TRANSFORMACIÓN DE LAS CENTENAS A BINARIO LDS AUX1,MILBCD LDI AUX2,100 MUL AUX1,AUX2 MOV AUX3,R0 ; TRANSFORMACIÓN DE LAS DECENAS A BINARIO LDS AUX1,MILBCD+1 LDI AUX2,10 MUL AUX1,AUX2 ; OBTENCIÓN DE LA TRANSFORMACIÓN TOTAL ADD AUX3,R0 LDS AUX1,MILBCD+2 ADD AUX1,AUX3 STS MILBIN,AUX1

Page 7: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 7

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

; MULTIPLICACIÓN DE LAS MILLAS POR EL BYTE BAJO DE 1609 LDS AUX1,MILBIN LDI AUX2,LOW(1609) MUL AUX1,AUX2 ; ALMACENAMIENTO DEL RESULTADO PARCIAL STS METBIN+2,R0 MOV AUX3,R1 ; MULTIPLICACIÓN DE LAS MILLAS POR EL BYTE ALTO DE 1609 LDI AUX2,HIGH(1609) MUL AUX1,AUX2 ; RESULTADO FINAL ADD AUX3,R0 STS METBIN+1,AUX3 LDI AUX3,0 ADC AUX3,R1 STS METBIN,AUX3 ; TRANSFORMACIÓN DE BINARIO A BCD DEL RESULTADO LDI XL,LOW(METBCD) LDI XH,HIGH(METBCD) LDI ZL,LOW(CONST<<1) LDI ZH,HIGH(CONST<<1) LDI AUX3,5 ; PARA OBTENER UN NUEVO DÍGITO NEWDIG: LDI AUX2,0 LPM R0,Z+ LPM R1,Z+ LPM R2,Z+ ; DIVISIÓN MEDIANTE RESTAS SUCESIVAS RESTAS: LDI YL,LOW(METBIN+3) LDI YH,HIGH(METBIN+3) LD AUX1,-Y SUB AUX1,R0 ST Y,AUX1 LD AUX1,-Y SBC AUX1,R1 ST Y,AUX1 LD AUX1,-Y SBC AUX1,R2 ST Y,AUX1 BRCS FINDIV INC AUX2 RJMP RESTAS ; ALMACENAMIENTO DEL DIGITO Y RECUPERACIÓN DEL RESIDUO FINDIV: ST X+,AUX2 LDI YL,LOW(METBIN+3) LDI YH,HIGH(METBIN+3) LD AUX1,-Y ADD AUX1,R0 ST Y,AUX1 LD AUX1,-Y ADC AUX1,R1 ST Y,AUX1 LD AUX1,-Y ADC AUX1,R2 ST Y,AUX1 ; CONTROL DEL LAZO PARA OBTENER TODOS LOS DÍGITOS LD R0,Z+ ; EVITA EL BYTE 4 DE LA TABLA DEC AUX3 BRNE NEWDIG LDS AUX2,METBIN+2 ST X,AUX2

Page 8: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 8

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

; FINAL: RJMP FINAL ; TABLA DE CONSTANTES PARA LAS DIVISIONES SUCESIVAS CONST: .DW 100000,1,10000,0,1000,0,100,0,10,0 ; .EXIT ; FIN DEL MODULO FUENTE

COMPROBACIÓN DE LA PRIMERA MODIFICACIÓN:

Pantallas obtenidas al final de las simulaciones de este nuevo programa donde se debe

tomar en cuenta que el valor de los metros en binario no se mantiene, porque esas

mismas localidades se utilizan para realizar las divisiones sucesivas mediante restas y al

final queda el último residuo que corresponde al dígito de las unidades.

Millas en BCD

Metros en BCD Millas en

Binario Último residuo

Millas en BCD Millas en

Binario Último residuo

Metros en BCD

Metros en BCD

Metros en BCD

Último residuo

Último residuo

Millas en Binario

Millas en Binario

Millas en BCD

Millas en BCD

Page 9: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 9

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

SEGUNDA MODIFICACIÓN AL EJERCICIO:

Realizar una nueva modificación al programa, para que los dígitos BCD, sean

ingresados mediante DIP-switches conectados a los pórticos.

ANÁLISIS DE LA SEGUNDA MODIFICACIÓN:

Para cumplir con esta nueva modificación, es necesario utilizar 12 DIP-switches

conectados al microcontrolador como se muestran en la figura, asignándoles de la

siguiente forma:

• Los cuatro que se conectan al Pórtico B para las Centenas.

• Los cuatro que se conectan a los bits más significativos del Pórtico A para las

Decenas, y.

• Los cuatro que se conectan a los bits menos significativos del Pórtico A para las

Unidades.

La modificación en este nuevo programa consiste en habilitar las resistencias de pull-up

de los Pórticos A y B, leer lo que se encuentran en los terminales de estos pórticos,

separar los dígitos BCD para almacenarlos en las localidades que están reservadas y

continuar con lo desarrollado en la primera modificación.

CODIFICACIÓN DE LA PARTE INICIAL, DONDE SE ENCUENTRA LA SEGUNDA MODIFICACIÓN DEL EJERCICIO:

.NOLIST

.INCLUDE "m164pdef.inc"

.LIST ; .DEF AUX1 = R16 ; REGISTRO AUXILIAR 1 .DEF AUX2 = R17 ; REGISTRO AUXILIAR 2 .DEF AUX3 = R18 ; REGISTRO AUXILIAR 3

Page 10: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 10

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

; SEGMENTO DE DATOS o MEMORIA SRAM .DSEG MILBCD: .BYTE 3 ; TRES DÍGITOS PARA LAS MILLAS MILBIN: .BYTE 1 ; VALOR DE LAS MILLAS EN BINARIO METBIN: .BYTE 3 ; RESULTADO DE LOS METROS EN BINARIO METBCD: .BYTE 6 ; SEIS DÍGITOS PARA EL RESULTADO ; SEGMENTO DE CÓDIGO o MEMORIA FLASH .CSEG ; HABILITACIÓN DE LAS RESISTENCIAS DE PULL-UP LDI AUX1,0xFF OUT PORTB,AUX1 OUT PORTA,AUX1 ; LECTURA DE LOS DIP-SWITCHES LEER: IN AUX1,PINB IN AUX2,PINA MOV AUX3,AUX2 ; SEPARACIÓN DE LOS DÍGITOS Y ALMACENAMIENTO ANDI AUX1,0x0F STS MILBCD,AUX1 ANDI AUX2,0xF0 SWAP AUX2 STS MILBCD+1,AUX2 ANDI AUX3,0x0F STS MILBCD+2,AUX3 ; TRANSFORMACIÓN DE LAS CENTENAS A BINARIO

TERCERA MODIFICACIÓN AL EJERCICIO:

Esta modificación al programa consiste en: Mostrar mediante seis displays de 7

segmentos y de ánodo común los metros que resultan de la transformación de las millas

que se ingresan a través de los DIP-switches.

ANÁLISIS DE LA TERCERA MODIFICACIÓN:

Para dar solución a esta modificación, se debe tomar en cuenta que se dispone de dos

pórticos y medio, es decir 20 líneas; por lo tanto, no se puede manejar individualmente

los seis displays debido a que se necesitarían 42 líneas; sino, que se los debe manejar

con la técnica de barrido.

Esta técnica consiste en ir mostrando los símbolos en los displays uno por uno y en

forma repetitiva, a una velocidad en la que el ojo humano no puede apreciar lo que se

apagan y parece que están encendidos todos los símbolos a la vez. Para esto el

microcontrolador por uno de los pórticos maneja los cátodos de los segmentos de los

seis displays, que se encuentran conectados en forma paralela; mientras que con seis

líneas de otro pórtico maneja los ánodos comunes de cada display. La desventaja de esta

DESDE AQUÍ, IDÉNTICO A LO DESARROLLADO EN LA PRIMERA MODIFICACIÓN

Page 11: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 11

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

técnica es que se necesita refrescar constantemente a los displays, que se soluciona con

la repetición de un lazo infinito desde la lectura de los DIP-switches.

El circuito para cumplir con lo solicitado es el que se muestra a continuación, en el que

la pantalla es un arreglo de seis displays de ánodos comunes.

ALGORITMO PARA EL BARRIDO DE LOS DISPLAYS:

• Establecer los pórticos que actúan como salidas para controlar los cátodos de los

segmentos y los que controlan los ánodos comunes de cada display, se

recomienda realizar al inicio del programa, una sola vez.

• Transformar los seis dígitos BCD a los códigos de 7 segmentos para displays de

ánodo común, mediante la tabla de códigos y almacenarlos en memoria en

localidades reservadas para este propósito.

• Proceder al barrido de los displays para mostrar el resultado, con los códigos

obtenidos anteriormente, considerando que para un adecuado barrido es

necesario incluir un tiempo de espera mientras se muestra cada símbolo, entre 1

y 10 milisegundos. También, se debe considerar que se deben apagar los

segmentos antes de continuar con el siguiente display.

• Si los pasos anteriores se ejecutan una sola vez, el resultado se muestra por

fracciones de segundo y luego quedarán los displays apagados; lo que hace

necesario que se deba repetir el programa desde la lectura de la información.

Page 12: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 12

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

El mapa de memoria utilizado en la tercera modificación es:

ETIQUETA SRAM DESCRIPCIÓN

MILBCD Dígito de las Centenas de las millas

Dígito de las Decenas de las millas

Dígito de las Unidades de las millas

MILBIN Valor binario de las millas a transformar

METBIN Resultado en binario de la transformación a metros: El byte más significativo es el primero El último es el byte menos significativo

METBCD Dígito de las Centenas de miles de los metros

Dígito de las Decenas de miles de los metros

Dígito de las Unidades de miles de los metros

Dígito de las Centenas de los metros

Dígito de las Decenas de los metros

Dígito de las Unidades de los metros

METSEG Código de 7 segmentos de las centenas de miles

Código de 7 segmentos de las decenas de miles

Código de 7 segmentos de las unidades de miles

Código de 7 segmentos de las centenas

Código de 7 segmentos de las decenas

Código de 7 segmentos de las unidades

CODIFICACIÓN DE LA TERCERA MODIFICACIÓN DEL EJERCICIO:

.NOLIST

.INCLUDE "m164pdef.inc"

.LIST ; .DEF AUX1 = R16 ; REGISTRO AUXILIAR 1 .DEF AUX2 = R17 ; REGISTRO AUXILIAR 2 .DEF AUX3 = R18 ; REGISTRO AUXILIAR 3 ; SEGMENTO DE DATOS o MEMORIA SRAM .DSEG MILBCD: .BYTE 3 ; TRES DÍGITOS PARA LAS MILLAS MILBIN: .BYTE 1 ; VALOR DE LAS MILLAS EN BINARIO METBIN: .BYTE 3 ; RESULTADO DE LOS METROS EN BINARIO METBCD: .BYTE 6 ; SEIS DÍGITOS PARA EL RESULTADO METSEG: .BYTE 6 ; SEIS CÓDIGOS DE 7 SEGMENTOS ; SEGMENTO DE CÓDIGO o MEMORIA FLASH .CSEG

Page 13: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 13

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

; HABILITACIÓN DE LAS RESISTENCIAS DE PULL-UP LDI AUX1,0xFF OUT PORTB,AUX1 OUT PORTA,AUX1 ; LOS PÓRTICOS C Y D COMO SALIDAS OUT DDRC,AUX1 LDI AUX1,0xFC OUT DDRD,AUX1 ; LECTURA DE LOS DIP-SWITCHES LEER: IN AUX1,PINB IN AUX2,PINA MOV AUX3,AUX2 ; SEPARACIÓN DE LOS DÍGITOS Y ALMACENAMIENTO ANDI AUX1,0x0F STS MILBCD,AUX1 ANDI AUX2,0xF0 SWAP AUX2 STS MILBCD+1,AUX2 ANDI AUX3,0x0F STS MILBCD+2,AUX3 ; TRANSFORMACIÓN DE LAS CENTENAS A BINARIO LDS AUX1,MILBCD LDI AUX2,100 MUL AUX1,AUX2 MOV AUX3,R0 ; TRANSFORMACIÓN DE LAS DECENAS A BINARIO LDS AUX1,MILBCD+1 LDI AUX2,10 MUL AUX1,AUX2 ; OBTENCIÓN DE LA TRANSFORMACIÓN TOTAL ADD AUX3,R0 LDS AUX1,MILBCD+2 ADD AUX1,AUX3 STS MILBIN,AUX1 ; MULTIPLICACIÓN DE LAS MILLAS POR EL BYTE BAJO DE 1609 LDS AUX1,MILBIN LDI AUX2,LOW(1609) MUL AUX1,AUX2 ; ALMACENAMIENTO DEL RESULTADO PARCIAL STS METBIN+2,R0 MOV AUX3,R1 ; MULTIPLICACIÓN DE LAS MILLAS POR EL BYTE ALTO DE 1609 LDI AUX2,HIGH(1609) MUL AUX1,AUX2 ; RESULTADO FINAL ADD AUX3,R0 STS METBIN+1,AUX3 LDI AUX3,0 ADC AUX3,R1 STS METBIN,AUX3 ; TRANSFORMACIÓN DE BINARIO A BCD DEL RESULTADO LDI XL,LOW(METBCD) LDI XH,HIGH(METBCD) LDI ZL,LOW(CONST<<1) LDI ZH,HIGH(CONST<<1) LDI AUX3,5 ; PARA OBTENER UN NUEVO DÍGITO NEWDIG: LDI AUX2,0 LPM R0,Z+ LPM R1,Z+ LPM R2,Z+

Page 14: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 14

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

; DIVISIÓN MEDIANTE RESTAS SUCESIVAS RESTAS: LDI YL,LOW(METBIN+3) LDI YH,HIGH(METBIN+3) LD AUX1,-Y SUB AUX1,R0 ST Y,AUX1 LD AUX1,-Y SBC AUX1,R1 ST Y,AUX1 LD AUX1,-Y SBC AUX1,R2 ST Y,AUX1 BRCS FINDIV INC AUX2 RJMP RESTAS ; ALMACENAMIENTO DEL DIGITO Y RECUPERACIÓN DEL RESIDUO FINDIV: ST X+,AUX2 LDI YL,LOW(METBIN+3) LDI YH,HIGH(METBIN+3) LD AUX1,-Y ADD AUX1,R0 ST Y,AUX1 LD AUX1,-Y ADC AUX1,R1 ST Y,AUX1 LD AUX1,-Y ADC AUX1,R2 ST Y,AUX1 ; CONTROL DEL LAZO PARA OBTENER TODOS LOS DÍGITOS LD R0,Z+ ; EVITA EL BYTE 4 DE LA TABLA DEC AUX3 BRNE NEWDIG LDS AUX2,METBIN+2 ST X,AUX2 ; BARRIDO DEL DISPLAY ; ASIGNACIÓN DE ETIQUETAS PARA EL MANEJO DEL DISPLAY .EQU SEGME = PORTC ; SEGMENTOS DEL DISPLAY .EQU DISPL = PORTD ; ÁNODOS COMUNES ; CONVERSIÓN DE BCD A 7 SEGMENTOS ASEG: LDI AUX2,6 ; 6 TRANSFORMACIONES LDI YL,LOW(METBCD) ; INICIO DE LOS DÍGITOS LDI YH,HIGH(METBCD) ASEG1: LDI ZL,LOW(TABLA<<1) ; TABLA DE CÓDIGOS LDI ZH,HIGH(TABLA<<1) LD AUX1,Y+ ; TOMAR EL DÍGITO ADD ZL,AUX1 ; SUMAR AL PUNTERO LDI AUX1,0 ADC ZH,AUX1 LPM AUX1,Z ; TOMAR EL CÓDIGO STD Y+5,AUX1 ; ALMACENAR CÓDIGO DEC AUX2 BRNE ASEG1 ; REPETIR 6 VECES ; BARRIDO DEL DISPLAY SCAN: LDI XL,LOW(METSEG) ; INICIO DE CÓDIGOS LDI XH,HIGH(METSEG) LDI AUX2,0B00000100 ; INICIO DE DISPLAYS LDI AUX3,6 ; 6 DISPLAYS SCAN1: LD AUX1,X+ ; TOMA EL CÓDIGO OUT SEGME,AUX1 ; A LOS SEGMENTOS OUT DISPL,AUX2 ; ACTIVA UN DISPLAY ;

Page 15: Ejercicio 04 Calculos

SISTEMAS MICROPROCESADOS: Utilización de instrucciones aritméticas y lógicas Página 15

Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información

DLY: LDI AUX1,5 ; PARA DAR TIEMPO CLR R15 DLY1: DEC R15 BRNE DLY1 DEC AUX1 BRNE DLY1 ; CLC ROL AUX2 ; PARA EL SIGUIENTE LDI AUX1,0xFF ; APAGAR SEGMENTOS OUT SEGME,AUX1 DEC AUX3 BRNE SCAN1 ; REPETIR 6 VECES ;

RJMP LEER ; REPETIR TODO EL PROCESO ; TABLA DE CONSTANTES PARA LAS DIVISIONES SUCESIVAS CONST: .DW 100000,1,10000,0,1000,0,100,0,10,0 ;TABLA DE CÓDIGOS PARA DISPLAYS DE ÁNODO COMÚN TABLA: .DB 0b11000000,0b11111001 ; CÓDIGOS 0 y 1 .DB 0b10100100,0b10110000 ; CÓDIGOS 2 y 3 .DB 0b10011001,0b10010010 ; CÓDIGOS 4 y 5 .DB 0b10000010,0b11111000 ; CÓDIGOS 6 y 7 .DB 0b10000000,0b10010000 ; CÓDIGOS 8 y 9 ; .EXIT ; FIN DEL MODULO FUENTE

A continuación se presentan pantallas capturadas del simulador del PROTEUS, para los

cuatro casos que se vienen analizando: