Ejercicio 04 Calculos

  • 2,816 views
Uploaded on

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

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

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,816
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
496
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 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
  • 2. 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:
  • 3. 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
  • 4. 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 DATOS 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 RESULTADOS 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 100 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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 BCDMillas 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
  • 9. 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
  • 10. 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
  • 11. 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.
  • 12. 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
  • 13. 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+
  • 14. 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 ;
  • 15. 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: