El documento describe varias soluciones para llenar las primeras 12 localidades de la memoria SRAM de un microcontrolador ATmega164P con los códigos ASCII del número 1, la letra A mayúscula y la letra a minúscula de forma alternada. La primera solución utiliza direccionamiento directo y valores hexadecimales, mientras que las siguientes variaciones emplean expresiones con valores numéricos o etiquetas.
Este documento describe un programa para convertir millas a metros utilizando un microcontrolador ATmega164P. Explica cómo almacenar los valores de entrada y salida, y detalla los algoritmos para realizar las conversiones mediante multiplicaciones y sumas, usando instrucciones aritméticas y lógicas del microcontrolador. Luego, propone modificar el programa para que los valores se expresen en formato BCD no empaquetado, requiriendo transformaciones entre BCD y binario usando multiplicaciones y divisiones.
Este documento describe un programa para un microcontrolador ATmega164P que recibe información de un receptor GPS y muestra la hora local en un LCD. Explica cómo el receptor GPS transmite tramas NMEA con datos como la latitud, longitud y hora UTC. El programa inicializa la comunicación serial, almacena los datos recibidos y extrae la hora UTC de la trama GPRMC para corregirla a la hora local del Ecuador continental y mostrarla en el LCD.
Este documento presenta tres programas para verificar el funcionamiento del conversor analógico-digital (ADC) en un microcontrolador ATmega164P. El primer programa muestra el funcionamiento básico del ADC sin interrupciones. El segundo programa genera interrupciones del ADC para iniciar nuevas conversiones. El tercer programa implementa un voltímetro digital de 0 a 5 voltios usando la entrada ADC y un temporizador. Se analizan los resultados de la simulación y se proponen modificaciones para mejorar la precisión.
Este documento describe programas para comprobar el funcionamiento del Timer/Contador 0 mediante la simulación en AVR Studio. El programa inicializa los registros comparadores y de control del timer, y luego ejecuta 3 bucles: 1) espera a que el contador alcance OCR0A, 2) espera a que alcance OCR0B, y 3) espera al desbordamiento. Capturas de pantalla muestran los cambios en los registros del timer a medida que avanza el programa.
Este documento presenta tres programas para probar el funcionamiento del USART en un microcontrolador ATmega164. El primer programa transmite un texto y lo recibe en un hiperterminal. El segundo programa identifica la recepción de un carácter específico. El tercer programa recibe un texto, lo almacena en la SRAM y lo vuelve a transmitir.
Este documento describe el código fuente de un programa para microcontrolador que permite la conversión de millas a metros utilizando subrutinas. Incluye la codificación de la subrutina principal, la subrutina de cálculo y las subrutinas para el manejo de un display de cristal líquido y un teclado matricial.
Este documento describe un programa para convertir millas a metros utilizando un microcontrolador ATmega164P. Explica cómo almacenar los valores de entrada y salida, y detalla los algoritmos para realizar las conversiones mediante multiplicaciones y sumas, usando instrucciones aritméticas y lógicas del microcontrolador. Luego, propone modificar el programa para que los valores se expresen en formato BCD no empaquetado, requiriendo transformaciones entre BCD y binario usando multiplicaciones y divisiones.
Este documento describe un programa para un microcontrolador ATmega164P que recibe información de un receptor GPS y muestra la hora local en un LCD. Explica cómo el receptor GPS transmite tramas NMEA con datos como la latitud, longitud y hora UTC. El programa inicializa la comunicación serial, almacena los datos recibidos y extrae la hora UTC de la trama GPRMC para corregirla a la hora local del Ecuador continental y mostrarla en el LCD.
Este documento presenta tres programas para verificar el funcionamiento del conversor analógico-digital (ADC) en un microcontrolador ATmega164P. El primer programa muestra el funcionamiento básico del ADC sin interrupciones. El segundo programa genera interrupciones del ADC para iniciar nuevas conversiones. El tercer programa implementa un voltímetro digital de 0 a 5 voltios usando la entrada ADC y un temporizador. Se analizan los resultados de la simulación y se proponen modificaciones para mejorar la precisión.
Este documento describe programas para comprobar el funcionamiento del Timer/Contador 0 mediante la simulación en AVR Studio. El programa inicializa los registros comparadores y de control del timer, y luego ejecuta 3 bucles: 1) espera a que el contador alcance OCR0A, 2) espera a que alcance OCR0B, y 3) espera al desbordamiento. Capturas de pantalla muestran los cambios en los registros del timer a medida que avanza el programa.
Este documento presenta tres programas para probar el funcionamiento del USART en un microcontrolador ATmega164. El primer programa transmite un texto y lo recibe en un hiperterminal. El segundo programa identifica la recepción de un carácter específico. El tercer programa recibe un texto, lo almacena en la SRAM y lo vuelve a transmitir.
Este documento describe el código fuente de un programa para microcontrolador que permite la conversión de millas a metros utilizando subrutinas. Incluye la codificación de la subrutina principal, la subrutina de cálculo y las subrutinas para el manejo de un display de cristal líquido y un teclado matricial.
El documento describe un programa para un microcontrolador ATmega164P que permite ingresar valores máximo y mínimo mediante teclado y luego comparar el valor de un conversor analógico-digital con esos valores. El programa muestra en un LCD los valores ingresados, medido y sus relaciones. Incluye subrutinas para conversión BCD a binario, binario a BCD, borrado y comparación.
Este documento describe cómo utilizar subrutinas para mostrar información en un display de cristal líquido (LCD) de 80 caracteres conectado a un microcontrolador. Incluye subrutinas para inicializar el LCD, escribir comandos, caracteres y números, y leer entrada de un teclado. El objetivo es desarrollar un programa que convierta millas a metros usando estas subrutinas para mostrar los resultados en el LCD de forma amigable al usuario.
El documento describe los puertos paralelos de entrada y salida de los microcontroladores ATmega. Explica que los ATmega tienen cuatro puertos (A, B, C y D) cada uno con ocho pines. Cada puerto contiene tres registros: PORTx, DDRx y PINx que controlan el direccionamiento y los datos de los pines. También presenta ejemplos de código para la lectura y escritura de los puertos.
El documento describe un programa para convertir un número decimal de tres dígitos ingresado mediante un teclado telefónico a su equivalente en hexadecimal y mostrarlo en displays. Se utilizan subrutinas para tareas comunes como mostrar los dígitos, leer el teclado y convertir entre bases numéricas. El programa permite ingresar cada dígito secuencialmente, corregirlos y confirmar para ver el resultado antes de repetir el proceso.
Este documento describe un programa para un microcontrolador ATmega164P que controla una cerradura eléctrica mediante la detección de secuencias de pulsaciones de teclas. El programa utiliza interrupciones externas para identificar las teclas pulsadas y abre la cerradura si coincide la secuencia ingresada con la clave almacenada en la EEPROM. También permite cambiar la clave almacenada modificando el contenido de la EEPROM mediante otra secuencia de pulsaciones.
El documento describe la organización y funcionamiento de un display gráfico de cristal líquido (GLCD) de 128x64 píxeles. El GLCD contiene dos circuitos independientes que controlan matrices de 64x64 píxeles cada una. La información para controlar los píxeles se almacena en una RAM de 1024 bytes accesible mediante comandos que especifican la sección, página y columna. El documento también incluye tablas de comandos y un programa de ejemplo para probar el funcionamiento del GLCD.
El documento describe tres soluciones propuestas para llenar las localidades de la SRAM con los códigos ASCII correspondientes a las letras de un texto, tomados de una tabla creada en la memoria del programa. La primera solución es ineficiente porque el programa genera los códigos. La segunda mejora esto leyendo los códigos de la tabla, pero presenta problemas de alineamiento. La tercera usa palabras constantes (.DW) para definir la tabla, resolviendo el problema de alineamiento pero leyendo los bytes en el orden incorrecto.
Este documento describe las interrupciones en el microcontrolador ATmega164P. Explica que las interrupciones desvían la ejecución del programa principal hacia rutinas de servicio. Detalla las 3 interrupciones externas y 4 interrupciones por cambios en los puertos, así como cómo habilitarlas y cómo identifican el evento que causó la interrupción.
Este documento describe la configuración y registros del conversor analógico a digital (ADC) en el microcontrolador ATmega164P. El ADC tiene 10 bits de resolución y puede convertir señales de entrada analógicas individuales o diferenciales a valores digitales. El documento explica los registros para seleccionar el voltaje de referencia, el canal de entrada, la velocidad de muestreo y habilitar las conversiones y las interrupciones.
Este documento proporciona una descripción detallada del PIC16F87, incluyendo:
1) Una explicación de los puertos de entrada/salida y su configuración.
2) Ejemplos de código para configurar los puertos y controlar LEDs y botones.
3) Una discusión sobre el efecto rebote de los botones y cómo eliminarlo en el código.
4) Diferentes implementaciones de una subrutina para pausas de 20 milisegundos.
Este documento describe el conversor analógico-digital (A/D) de 10 bits y 8 canales que incluye el microcontrolador PIC16F87XA. Explica que este conversor convierte señales analógicas en valores digitales para su procesamiento por una computadora. Detalla los registros de control del conversor A/D, el proceso de conversión, y los pasos requeridos para realizar una conversión, como configurar los puertos, seleccionar el canal y la frecuencia, iniciar la conversión, y leer el resultado digital.
Este documento describe cómo configurar y usar el módulo EUSART en el microcontrolador PIC16F887 para comunicaciones serie asíncronas. Explica que el EUSART puede configurarse para comunicaciones asíncronas bidireccionales usando dos líneas TX y RX, y describe los pasos para configurar la transmisión y recepción asíncrona, incluyendo la configuración de registros como TXSTA, RCSTA y BAUDCTL para establecer la velocidad de baudios.
El documento describe el módulo Timer1 de un microcontrolador PIC. Tiene tres modos de operación: temporizador, contador asincrónico y contador sincrónico. Puede contar impulsos internos o externos y generar una interrupción cuando alcanza su valor máximo de 16 bits. Como ejemplo, se propone un diseño para generar un retardo de 500 ms usando este módulo.
Este documento describe el funcionamiento del USART (Universal Synchronous Asynchronous Receiver Transmitter) en modo asíncrono serie para realizar comunicaciones seriales entre un microcontrolador PIC16F87X y un computador. Explica los registros TXSTA y RCSTA para la configuración del transmisor y receptor, respectivamente, y cómo generar la frecuencia de baudios mediante el registro SPBRG. Además, detalla los pasos para implementar la transmisión y recepción de datos de forma asíncrona. Finalmente, comenta cómo simular esta comunicación serial en Proteus
Este resumen describe un decodificador DTMF que utiliza un PIC16F628A para decodificar dígitos DTMF ingresados desde un teléfono. Detecta secuencias de 4 dígitos para activar o desactivar pines de salida, o para activar un pin durante 10 segundos. También enciende un pin cada 12 horas durante 1 hora. El código en C implementa estas funciones de decodificación y temporización.
El documento describe el módulo Timer 1 del PIC16F887. Explica que el Timer 1 es un temporizador/contador de 16 bits que usa dos registros de 8 bits concatenados (TMR1H:TMR1L) para almacenar el valor del conteo. Puede operar como temporizador, contador asíncrono o síncrono dependiendo de la configuración del registro T1CON. También presenta un ejemplo de diseño de un sistema que genera un retardo de 500ms usando el Timer 1.
El documento explica cómo funciona el temporizador Timer0 en el PIC16F84A. Puede usarse como temporizador o contador mediante la configuración del registro OPTION_REG. Explica los términos como prescaler, que divide la frecuencia para alargar los tiempos, y cómo calcular el tiempo de temporización en función del prescaler, ciclo de máquina y valor de carga en TMR0. También cubre el uso de TMR0 como contador a través del pin RA4 y como temporizador usando los pulsos internos.
El documento describe el bus I2C, incluyendo sus características, formatos de transferencia de datos y dispositivos compatibles. Explica que el bus I2C es un bus serie de dos líneas (SDA y SCL) más la línea de masa que permite conectar múltiples dispositivos. También describe el funcionamiento del periférico PCF8574A, un dispositivo de entrada/salida digital que se puede conectar al bus I2C para ampliar los puertos de un microcontrolador.
Este documento describe los sistemas combinacionales MSI (Medium Scale Integration), que contienen entre 100 y 1000 puertas lógicas. Explica cómo los decodificadores, codificadores, convertidores de códigos y multiplexores son ejemplos comunes de circuitos MSI utilizados en computadoras para funciones como codificación, decodificación, transmisión y procesamiento de datos. También proporciona ejemplos detallados de circuitos MSI populares como decodificadores, codificadores y multiplexores, junto con sus tablas de verdad y diagramas
1. El microcontrolador PIC16F87X es de 8 bits con CPU RISC, memoria flash hasta 8KB y RAM hasta 368B. Tiene conversor A/D de 10 bits, timers y módulos de comunicación.
2. Los registros de funciones especiales incluyen el registro de estado, registro de opciones y registro INTCON para programar interrupciones.
3. El PIC16F87X tiene periféricos como timers, módulos CCP, USART, SPI y puertos I/O.
Este documento describe el método 6 de Hoenadl para calcular el incremento diamétrico anual en un bosque. El método implica 1) anotar las clases diamétricas, 2) calcular los incrementos para cada clase, 3) restar los incrementos de clases consecutivas y 4) usar esas diferencias junto con las diferencias de diámetro para calcular el incremento anual total. El método fue introducido en México y proporciona una forma de estimar el crecimiento de un bosque.
El documento describe un programa para un microcontrolador ATmega164P que permite ingresar valores máximo y mínimo mediante teclado y luego comparar el valor de un conversor analógico-digital con esos valores. El programa muestra en un LCD los valores ingresados, medido y sus relaciones. Incluye subrutinas para conversión BCD a binario, binario a BCD, borrado y comparación.
Este documento describe cómo utilizar subrutinas para mostrar información en un display de cristal líquido (LCD) de 80 caracteres conectado a un microcontrolador. Incluye subrutinas para inicializar el LCD, escribir comandos, caracteres y números, y leer entrada de un teclado. El objetivo es desarrollar un programa que convierta millas a metros usando estas subrutinas para mostrar los resultados en el LCD de forma amigable al usuario.
El documento describe los puertos paralelos de entrada y salida de los microcontroladores ATmega. Explica que los ATmega tienen cuatro puertos (A, B, C y D) cada uno con ocho pines. Cada puerto contiene tres registros: PORTx, DDRx y PINx que controlan el direccionamiento y los datos de los pines. También presenta ejemplos de código para la lectura y escritura de los puertos.
El documento describe un programa para convertir un número decimal de tres dígitos ingresado mediante un teclado telefónico a su equivalente en hexadecimal y mostrarlo en displays. Se utilizan subrutinas para tareas comunes como mostrar los dígitos, leer el teclado y convertir entre bases numéricas. El programa permite ingresar cada dígito secuencialmente, corregirlos y confirmar para ver el resultado antes de repetir el proceso.
Este documento describe un programa para un microcontrolador ATmega164P que controla una cerradura eléctrica mediante la detección de secuencias de pulsaciones de teclas. El programa utiliza interrupciones externas para identificar las teclas pulsadas y abre la cerradura si coincide la secuencia ingresada con la clave almacenada en la EEPROM. También permite cambiar la clave almacenada modificando el contenido de la EEPROM mediante otra secuencia de pulsaciones.
El documento describe la organización y funcionamiento de un display gráfico de cristal líquido (GLCD) de 128x64 píxeles. El GLCD contiene dos circuitos independientes que controlan matrices de 64x64 píxeles cada una. La información para controlar los píxeles se almacena en una RAM de 1024 bytes accesible mediante comandos que especifican la sección, página y columna. El documento también incluye tablas de comandos y un programa de ejemplo para probar el funcionamiento del GLCD.
El documento describe tres soluciones propuestas para llenar las localidades de la SRAM con los códigos ASCII correspondientes a las letras de un texto, tomados de una tabla creada en la memoria del programa. La primera solución es ineficiente porque el programa genera los códigos. La segunda mejora esto leyendo los códigos de la tabla, pero presenta problemas de alineamiento. La tercera usa palabras constantes (.DW) para definir la tabla, resolviendo el problema de alineamiento pero leyendo los bytes en el orden incorrecto.
Este documento describe las interrupciones en el microcontrolador ATmega164P. Explica que las interrupciones desvían la ejecución del programa principal hacia rutinas de servicio. Detalla las 3 interrupciones externas y 4 interrupciones por cambios en los puertos, así como cómo habilitarlas y cómo identifican el evento que causó la interrupción.
Este documento describe la configuración y registros del conversor analógico a digital (ADC) en el microcontrolador ATmega164P. El ADC tiene 10 bits de resolución y puede convertir señales de entrada analógicas individuales o diferenciales a valores digitales. El documento explica los registros para seleccionar el voltaje de referencia, el canal de entrada, la velocidad de muestreo y habilitar las conversiones y las interrupciones.
Este documento proporciona una descripción detallada del PIC16F87, incluyendo:
1) Una explicación de los puertos de entrada/salida y su configuración.
2) Ejemplos de código para configurar los puertos y controlar LEDs y botones.
3) Una discusión sobre el efecto rebote de los botones y cómo eliminarlo en el código.
4) Diferentes implementaciones de una subrutina para pausas de 20 milisegundos.
Este documento describe el conversor analógico-digital (A/D) de 10 bits y 8 canales que incluye el microcontrolador PIC16F87XA. Explica que este conversor convierte señales analógicas en valores digitales para su procesamiento por una computadora. Detalla los registros de control del conversor A/D, el proceso de conversión, y los pasos requeridos para realizar una conversión, como configurar los puertos, seleccionar el canal y la frecuencia, iniciar la conversión, y leer el resultado digital.
Este documento describe cómo configurar y usar el módulo EUSART en el microcontrolador PIC16F887 para comunicaciones serie asíncronas. Explica que el EUSART puede configurarse para comunicaciones asíncronas bidireccionales usando dos líneas TX y RX, y describe los pasos para configurar la transmisión y recepción asíncrona, incluyendo la configuración de registros como TXSTA, RCSTA y BAUDCTL para establecer la velocidad de baudios.
El documento describe el módulo Timer1 de un microcontrolador PIC. Tiene tres modos de operación: temporizador, contador asincrónico y contador sincrónico. Puede contar impulsos internos o externos y generar una interrupción cuando alcanza su valor máximo de 16 bits. Como ejemplo, se propone un diseño para generar un retardo de 500 ms usando este módulo.
Este documento describe el funcionamiento del USART (Universal Synchronous Asynchronous Receiver Transmitter) en modo asíncrono serie para realizar comunicaciones seriales entre un microcontrolador PIC16F87X y un computador. Explica los registros TXSTA y RCSTA para la configuración del transmisor y receptor, respectivamente, y cómo generar la frecuencia de baudios mediante el registro SPBRG. Además, detalla los pasos para implementar la transmisión y recepción de datos de forma asíncrona. Finalmente, comenta cómo simular esta comunicación serial en Proteus
Este resumen describe un decodificador DTMF que utiliza un PIC16F628A para decodificar dígitos DTMF ingresados desde un teléfono. Detecta secuencias de 4 dígitos para activar o desactivar pines de salida, o para activar un pin durante 10 segundos. También enciende un pin cada 12 horas durante 1 hora. El código en C implementa estas funciones de decodificación y temporización.
El documento describe el módulo Timer 1 del PIC16F887. Explica que el Timer 1 es un temporizador/contador de 16 bits que usa dos registros de 8 bits concatenados (TMR1H:TMR1L) para almacenar el valor del conteo. Puede operar como temporizador, contador asíncrono o síncrono dependiendo de la configuración del registro T1CON. También presenta un ejemplo de diseño de un sistema que genera un retardo de 500ms usando el Timer 1.
El documento explica cómo funciona el temporizador Timer0 en el PIC16F84A. Puede usarse como temporizador o contador mediante la configuración del registro OPTION_REG. Explica los términos como prescaler, que divide la frecuencia para alargar los tiempos, y cómo calcular el tiempo de temporización en función del prescaler, ciclo de máquina y valor de carga en TMR0. También cubre el uso de TMR0 como contador a través del pin RA4 y como temporizador usando los pulsos internos.
El documento describe el bus I2C, incluyendo sus características, formatos de transferencia de datos y dispositivos compatibles. Explica que el bus I2C es un bus serie de dos líneas (SDA y SCL) más la línea de masa que permite conectar múltiples dispositivos. También describe el funcionamiento del periférico PCF8574A, un dispositivo de entrada/salida digital que se puede conectar al bus I2C para ampliar los puertos de un microcontrolador.
Este documento describe los sistemas combinacionales MSI (Medium Scale Integration), que contienen entre 100 y 1000 puertas lógicas. Explica cómo los decodificadores, codificadores, convertidores de códigos y multiplexores son ejemplos comunes de circuitos MSI utilizados en computadoras para funciones como codificación, decodificación, transmisión y procesamiento de datos. También proporciona ejemplos detallados de circuitos MSI populares como decodificadores, codificadores y multiplexores, junto con sus tablas de verdad y diagramas
1. El microcontrolador PIC16F87X es de 8 bits con CPU RISC, memoria flash hasta 8KB y RAM hasta 368B. Tiene conversor A/D de 10 bits, timers y módulos de comunicación.
2. Los registros de funciones especiales incluyen el registro de estado, registro de opciones y registro INTCON para programar interrupciones.
3. El PIC16F87X tiene periféricos como timers, módulos CCP, USART, SPI y puertos I/O.
Este documento describe el método 6 de Hoenadl para calcular el incremento diamétrico anual en un bosque. El método implica 1) anotar las clases diamétricas, 2) calcular los incrementos para cada clase, 3) restar los incrementos de clases consecutivas y 4) usar esas diferencias junto con las diferencias de diámetro para calcular el incremento anual total. El método fue introducido en México y proporciona una forma de estimar el crecimiento de un bosque.
El documento describe los conceptos básicos de los microcontroladores y el microcontrolador PIC16F877 en particular. Explica que los microcontroladores son circuitos integrados que incorporan todos los bloques funcionales de un sistema microprocesador en un único encapsulado. Luego describe la organización de la memoria del PIC16F877, incluyendo la memoria de programa, la memoria RAM de datos y la memoria EEPROM de datos. Finalmente, explica brevemente algunas características clave del PIC16F877 como sus diferentes tipos de memoria y registros.
El documento describe el microcontrolador PIC16F84. Explica que tiene memoria FLASH que permite reprogramarlo fácilmente, y que usa un oscilador externo como cristal de 4 MHz para funcionar a 1 MHz. También describe sus puertos A y B, su arquitectura interna con memoria de programa y datos, y sus características como el reset y la alimentación.
Este documento describe cómo se utiliza un analizador lógico para verificar el barrido de displays mediante un microcontrolador. Muestra cómo el programa controla secuencialmente cada display para mostrar el número 410295 y cómo la duración del barrido completo es de 23.16 ms. También identifica un problema con el circuito real que usa transistores y cómo se modifica el programa para solucionarlo.
Este documento presenta una introducción práctica a los microcontroladores PIC de gama media y mejorada. Explica brevemente qué es un microcontrolador y las familias y gamas de los PIC de 8 bits. Recomienda instalar el software necesario para programar los PIC y practicar con programas similares a los presentados para afianzar los conocimientos.
Este documento presenta una guía de tres pasos para resolver problemas de programación: 1) Enunciado y delimitación del hardware, 2) Diagrama de flujo, 3) Elaboración del lenguaje ensamblador. Explica cada paso en detalle y proporciona ejemplos de código ensamblador para tres ejercicios de programación de microcontroladores.
Problema #1: (15%) Indique que tabla comparativa es la correcta con respecto a la comparativa entre #Multicore y #Multiprocessor
Problema #2: (15%) ¿Cuáles de las siguientes afirmaciones de los registros de configuración del #AVR #ATmega328P son ciertos?
Problema #3: (15%) ¿Cuáles de las siguientes afirmaciones referentes a la arquitectura del #AVR #ATmega328P son ciertas?
Problema #4: (15%) ¿Cuál de las siguientes afirmaciones referentes al registro #ADMUX son ciertas?
Problema #5: (20%) En los siguientes diagramas de bloques funcionales, se muestra la escritura y lectura de datos usando el protocolo de comunicación #I2C (Inter-Integrated Circuit). Colocar los nombres que describen cada bloque.
Problema #6: (20%) La siguiente gráfica corresponde al diagrama de tiempo al transmitir un dato usando el protocolo de comunicación #RS_232, agregar los textos en las cajas de comentarios.
El documento describe el uso del ensamblador MPASM con el entorno MPLAB para programar PICs. Explica directivas como LIST, ORG, END y REM. También muestra ejemplos de código en ensamblador para contar en un display y medir distancias usando el temporizador TMR0.
El documento describe el ensamblador MPASM que se usa con el entorno de trabajo MPLAB para programar PICs. Explica algunas directivas como LIST, ORG, END y REM y cómo se usan. Luego presenta un ejemplo de código en ensamblador para un PIC16F84A que cuenta hasta 59 y muestra el valor en LEDs, usando directivas como EQU, BSF y MOVWF. Finalmente, discute aspectos del PIC16F84A como su memoria y periféricos.
El documento describe el ensamblador MPASM que se usa con el entorno de trabajo MPLAB para programar PICs. Explica algunas directivas como LIST, ORG, END y REM y cómo se usan. Luego presenta un ejemplo de código en ensamblador para un PIC16F84A que cuenta hasta 59 y muestra el valor en LEDs, y otro ejemplo que muestra dígitos en un display de 7 segmentos.
Este documento describe el código de Hamming y la paridad. Explica que el código de Hamming puede detectar y corregir errores de 1 bit, mientras que la paridad solo puede detectar errores de 1 bit. También cubre cómo calcular la paridad longitudinal y vertical, y realiza ejemplos numéricos de codificación de Hamming y detección de errores.
Este documento presenta un examen final sobre microcontroladores de 60 puntos. Consiste en 20 preguntas de opción múltiple sobre temas como convertidores ADC, comunicación serial, USART, interrupciones y PWM en PIC16F877. Incluye tablas para llenar con las respuestas y fórmulas de ayuda.
Este documento presenta un examen final de 60 puntos sobre microcontroladores. Contiene 20 preguntas de opción múltiple sobre temas como conversión ADC, comunicación serial, USART, interrupciones y PWM en PIC16F877. El estudiante debe marcar la respuesta correcta para cada pregunta en una tabla de respuestas.
grabacion de microcontroladores PIC, en el presente seminario examinaremos la familia de microcontroladores, su evoluicion, aplicaciones mas comunes e iniciaremos la grabacion, decodificacion y simulacion ayudados de la herramienta PROTEUS APLICADOS a la robotica
Problema #1: (5%) Indique cuáles de las siguientes afirmaciones referentes a la revolución industrial son correctas
Problema #2: (5%) ¿Cuáles de las siguientes afirmaciones referentes a las memorias FLASH son ciertas?
Problema #3: (10%) ¿Cuáles de las siguientes afirmaciones referentes al bloque PWM del AVR ATmega328P son ciertas?
Problema #4: (5%) ¿Cuáles de las siguientes afirmaciones referentes a las memorias EEPROM son ciertas?
Problema #5: (5%) ¿Cuáles de las siguientes afirmaciones referentes a las memorias SRAM son ciertas?
Problema #6: (15%) Dado el siguiente código en lenguaje C que genera una señal PWM, ¿cuál de las siguientes afirmaciones son correctas?
Problema #7: (15%) Dado el siguiente código en lenguaje C que usa el bloque ADC para digitalizar señales analógicas, ¿cuál de las siguientes afirmaciones son correctas?
Problema #8: (5%) La siguiente gráfica corresponde al diagrama de tiempo al transmitir un dato usando el protocolo de comunicación RS-232. Indicar cuales de las siguientes afirmaciones son correctas
Problema #9: (10%) El siguiente bloque convertidor analógico digital (ADC) de 8 bits de resolución, se tiene un voltaje de referencia de 5Vcc. ¿cuáles de las siguientes afirmaciones son correctas?
Problema #10: (25%) Dado el siguiente código en lenguaje C modificado de Arduino que utiliza conceptos de máquinas de estado, graficar el diagrama de estados que represente el funcionamiento del código.
Este documento presenta un examen final sobre microcontroladores de 60 puntos con 20 preguntas de opción múltiple. Se da una hora y 20 minutos para completar la prueba. Cada pregunta vale 3 puntos y se debe marcar la respuesta correcta en una tabla de respuestas provista al final. El examen cubre temas como el convertidor ADC, comunicación serial USART, interrupciones y modos de funcionamiento del PIC16F877.
Este documento presenta un examen final sobre microcontroladores de 60 puntos con 20 preguntas de opción múltiple. Se da una hora y 20 minutos para completar la prueba. Cada pregunta vale 3 puntos y se debe marcar la respuesta correcta en una tabla de respuestas provista al final. El examen cubre temas como el convertidor ADC, comunicación serial USART, interrupciones y modos de funcionamiento del PIC16F877.
Este documento resume 15 temas sobre el microprocesador Motorola 68020. Cubre las características del 68020, sus registros y organización de datos, el juego de instrucciones y ensamblador, modos de direccionamiento, uso de la pila, aspectos hardware, excepciones y tipos de excepciones.
El documento describe la historia y características del microprocesador 4004 de Intel, el primer microprocesador comercialmente exitoso. El 4004 fue desarrollado originalmente para ser utilizado en calculadoras pero luego se expandió a otros usos. Contenía alrededor de 2300 transistores, direccionaba 32768 bits de ROM y 5120 bits de RAM, e incluía instrucciones básicas como suma, resta y saltos condicionales. El 4004 marcó el comienzo de la era de los microprocesadores modernos.
Este documento describe cómo configurar los puertos de entrada y salida en microcontroladores PIC. Explica que los puertos se configuran manipulando los registros TRIS, cuyas localizaciones varían según el microcontrolador. Para configurar un puerto como entrada, el registro TRIS debe contener todos 1s lógicos, mientras que para configurarlo como salida debe contener todos 0s lógicos. También es posible configurar parte del puerto como entrada y otra parte como salida. El documento incluye ejemplos de código para configurar los puertos en
Curso de Redes y Telemática para la Universidad Fidélitas (SC-625), 1 cuatrimestre del 2015, presentación de la clase 2
Para mas información visitar el sitio web www.randyvv.com
El documento describe la historia y características de los microprocesadores Intel 8086 y 8088. Estos fueron los primeros microprocesadores de 16 bits lanzados por Intel en 1978 y 1979 respectivamente. El documento explica las diferencias entre arquitecturas CISC y RISC, y proporciona detalles sobre los registros, unidades y buses de datos internos de los microprocesadores 8086/8088.
El documento describe la historia y características de los microprocesadores Intel 8086/8088. Explica que fueron los primeros microprocesadores de 16 bits lanzados por Intel en 1978/1979. Describe sus registros, unidades aritméticas y lógicas, modos de direccionamiento, estructura de interrupciones y otros componentes internos. También compara los enfoques CISC y RISC en el diseño de microprocesadores.
El documento describe la historia y características de los microprocesadores Intel 8086 y 8088. Estos fueron los primeros microprocesadores de 16 bits lanzados por Intel en 1978 y 1979 respectivamente. El documento explica las diferencias entre arquitecturas CISC y RISC, y proporciona detalles sobre los registros, unidades y buses de datos internos de los microprocesadores 8086/8088.
El documento describe la historia y características de varios microprocesadores Intel, incluyendo el 4004 lanzado en 1971, el 8008 de 1972, el 8080 de 1974, el 8085 de 1977, y el 8086/8088 de 1978. Explica sus registros, modos de direccionamiento, y otros detalles técnicos.
El documento describe el módulo transmisor USART (Universal Synchronous Asynchronous Receiver Transmitter) que se encuentra en los microcontroladores PIC16F87X. El USART puede configurarse en modo asíncrono o síncrono para comunicarse con dispositivos periféricos. Incluye generador de baudios, circuitos de transmisión y recepción, y registros para configurar el modo, velocidad y flujo de datos.
El documento describe los puertos serie asincrónicos del microcontrolador ATmega164P. Explica las características y registros de los USART, incluyendo los registros de control para la configuración del modo de operación, número de bits, paridad y velocidad de transmisión. También presenta ejemplos de aplicaciones de comunicación serial como la interfaz con PCs, calculadoras, dispositivos Bluetooth y redes inalámbricas.
Este documento describe los tres timers del microcontrolador ATmega164P. El Timer 0 es de 8 bits y puede usarse en modo normal, PWM o CTC. El Timer 1 es de 16 bits y también admite PWM y captura. El Timer 2 es de 8 bits y puede funcionar de forma asíncrona o generar PWM. Cada timer se configura mediante registros de control y cuenta con registros de comparación y banderas de interrupción.
El documento proporciona instrucciones sobre el uso de subrutinas en ensamblador. Explica que las subrutinas permiten optimizar programas al agrupar instrucciones repetidas. Describe que las instrucciones de llamada a subrutina almacenan la dirección de retorno en la pila para poder volver a la instrucción siguiente una vez finalizada la subrutina. Además, enfatiza que las subrutinas siempre deben terminar con la instrucción de retorno para evitar errores en el funcionamiento de la pila.
This document discusses arithmetic and logical instructions that can be performed by microprocessors. It describes instructions for addition, subtraction, logical operations like AND and OR, and other operations like increments, decrements, clearing registers. It also covers multiplication instructions for signed and unsigned whole numbers as well as fractional numbers.
Este documento describe las instrucciones de manejo de bits en los microcontroladores ATmega. Explica cómo borrar y poner en uno bits individuales de registros y banderas, realizar desplazamientos lógicos y rotaciones de bits, e intercambiar nibbles. También cubre el cargado y almacenado de bits individuales usando la bandera T.
El documento describe los bits de seguridad y fusibles de configuración del microcontrolador ATmega164P. Incluye secciones sobre la protección de las memorias flash y EEPROM a través de bits de seguridad, y la configuración de opciones como el reloj, interfaces y watchdog a través de fusibles.
Este documento describe las instrucciones de salto en los microcontroladores ATmega. Explica los dos tipos de saltos, incondicionales y condicionados. Luego detalla las instrucciones de salto directo, indirecto y relativo, así como las instrucciones condicionales de salto que comparan registros, banderas y bits para bifurcar el flujo del programa.
Este documento proporciona información sobre las instrucciones de transferencia de los microcontroladores ATmega. Explica las instrucciones para copiar registros, cargar valores a registros desde la memoria SRAM usando diferentes tipos de direccionamiento, y almacenar registros en la SRAM. Incluye los mnemónicos, códigos de máquina, operaciones y ejemplos de cada instrucción.
Este documento describe el conjunto de instrucciones de los microcontroladores ATmega. Explica que las instrucciones se pueden clasificar en diferentes tipos como de transferencia de datos, saltos y bifurcaciones, aritméticas y lógicas, y de control. También describe los componentes de las instrucciones y los diferentes modos de direccionamiento como directo, indirecto, inmediato, entre otros. El objetivo es explicar cómo la combinación de operaciones e instrucciones y modos de direccionamiento forman el conjunto de instrucciones de los microcontroladores ATmega.
El documento describe las diferentes memorias del microcontrolador ATmega164P, incluyendo 16KB de memoria flash para almacenar instrucciones, 1280 bytes de SRAM para datos y registros, y 512 bytes de EEPROM no volátil también para datos. Explica que la memoria flash se direcciona con un bus de 14 bits, la SRAM incluye registros de propósito general, de entrada/salida y un área para datos, y la EEPROM se accede a través de registros de E/S especiales.
Los microcontroladores AVR son una familia de microcontroladores RISC de 8 bits fabricados por Atmel. Tienen una arquitectura Harvard con 32 registros de 8 bits y memoria de datos, programa e I/O separadas. Los AVR tienen una arquitectura de tubería de dos etapas que los hace relativamente rápidos para microcontroladores de 8 bits. La familia incluye modelos desde el ATtiny11 de 1KB hasta el ATxmega256A3 con 256KB de memoria y periféricos avanzados.
ACERTIJO DESCIFRANDO CÓDIGO DEL CANDADO DE LA TORRE EIFFEL EN PARÍS. Por JAVI...JAVIER SOLIS NOYOLA
El Mtro. JAVIER SOLIS NOYOLA crea y desarrolla el “DESCIFRANDO CÓDIGO DEL CANDADO DE LA TORRE EIFFEL EN PARIS”. Esta actividad de aprendizaje propone el reto de descubrir el la secuencia números para abrir un candado, el cual destaca la percepción geométrica y conceptual. La intención de esta actividad de aprendizaje lúdico es, promover los pensamientos lógico (convergente) y creativo (divergente o lateral), mediante modelos mentales de: atención, memoria, imaginación, percepción (Geométrica y conceptual), perspicacia, inferencia y viso-espacialidad. Didácticamente, ésta actividad de aprendizaje es transversal, y que integra áreas del conocimiento: matemático, Lenguaje, artístico y las neurociencias. Acertijo dedicado a los Juegos Olímpicos de París 2024.
José Luis Jiménez Rodríguez
Junio 2024.
“La pedagogía es la metodología de la educación. Constituye una problemática de medios y fines, y en esa problemática estudia las situaciones educativas, las selecciona y luego organiza y asegura su explotación situacional”. Louis Not. 1993.
Examen de Selectividad. Geografía junio 2024 (Convocatoria Ordinaria). UCLMJuan Martín Martín
Examen de Selectividad de la EvAU de Geografía de junio de 2023 en Castilla La Mancha. UCLM . (Convocatoria ordinaria)
Más información en el Blog de Geografía de Juan Martín Martín
http://blogdegeografiadejuan.blogspot.com/
Este documento presenta un examen de geografía para el Acceso a la universidad (EVAU). Consta de cuatro secciones. La primera sección ofrece tres ejercicios prácticos sobre paisajes, mapas o hábitats. La segunda sección contiene preguntas teóricas sobre unidades de relieve, transporte o demografía. La tercera sección pide definir conceptos geográficos. La cuarta sección implica identificar elementos geográficos en un mapa. El examen evalúa conocimientos fundamentales de geografía.
1. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 1
EJERCICIO PARA PRACTICAR EL USO DE LAS
INSTRUCCIONES DE TRANSFERENCIA
Desarrollar un programa para el microcontrolador ATmega164P, que
permita llenar las doce primeras localidades de la memoria de datos, con
los códigos ASCII del número 1, de la letra A mayúscula y de la letra a
minúscula en forma alternada, tal como se muestra en la siguiente figura;
donde 0x31 es el ASCII del 1, 0x41 es el ASCII de la A y 0x61 es el
ASCII de la a:
PRIMERA SOLUCIÓN
Esta solución utiliza direccionamiento directo y valores numéricos hexadecimales.
LDI R16,0x31
LDI R17,0x41
LDI R18,0x61
STS 0x100,R16
STS 0x101,R17
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
2. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 2
STS 0x102,R18
STS 0x103,R16
STS 0x104,R17
STS 0x105,R18
STS 0x106,R16
STS 0x107,R17
STS 0x108,R18
STS 0x109,R16
STS 0x10A,R17
STS 0x10B,R18
El Módulo Fuente contenido en el archivo .ASM es el que muestra a continuación:
; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1,
; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA,
; ALTERNADAMENTE.
; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO DIRECTO
; Y VALORES NUMÉRICOS HEXADECIMALES
;
.DEVICE ATMEGA164P
;
.CSEG
LDI R16,0x31
LDI R17,0x41
LDI R18,0x61
STS 0x100,R16
STS 0x101,R17
STS 0x102,R18
STS 0x103,R16
STS 0x104,R17
STS 0x105,R18
STS 0x106,R16
STS 0x107,R17
STS 0x108,R18
STS 0x109,R16
STS 0x10A,R17
STS 0x10B,R18
;
FIN: RJMP FIN
;
.EXIT ; FIN DEL MODULO FUENTE
El resultado del ensamblado contenido en el archivo .LST es:
AVRASM ver. 2.1.12 C:Documents_and_SettingsAdministradorMis_documentos
AVRfilesLlenarATmega164Llenar01Llenar01.asm Sun Mar 22 10:35:41 2009
; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1,
; DE LA LETRA A MAYÚSCULA Y DE LA LETRA A MINÚSCULA,
; ALTERNADAMENTE.
; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO DIRECTO
; Y VALORES NUMÉRICOS HEXADECIMALES
;
.DEVICE ATMEGA164P
;
.CSEG
000000 e301 LDI R16,0x31
000001 e411 LDI R17,0x41
000002 e621 LDI R18,0x61
000003 9300 0100 STS 0x100,R16
000005 9310 0101 STS 0x101,R17
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
3. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 3
000007 9320 0102 STS 0x102,R18
000009 9300 0103 STS 0x103,R16
00000b 9310 0104 STS 0x104,R17
00000d 9320 0105 STS 0x105,R18
00000f 9300 0106 STS 0x106,R16
000011 9310 0107 STS 0x107,R17
000013 9320 0108 STS 0x108,R18
000015 9300 0109 STS 0x109,R16
000017 9310 010a STS 0x10A,R17
000019 9320 010b STS 0x10B,R18
;
00001b cfff FIN: RJMP FIN
;
RESOURCE USE INFORMATION
------------------------
Notice:
The register and instruction counts are symbol table hit counts,
and hence implicitly used resources are not counted, eg, the
'lpm' instruction without operands implicitly uses r0 and z,
none of which are counted.
x,y,z are separate entities in the symbol table and are
counted separately from r26..r31 here.
.dseg memory usage only counts static data declared with .byte
ATMEGA164P register use summary:
r0 : 0 r1 : 0 r2 : 0 r3 : 0 r4 : 0 r5 : 0 r6 : 0 r7 : 0
r8 : 0 r9 : 0 r10: 0 r11: 0 r12: 0 r13: 0 r14: 0 r15: 0
r16: 5 r17: 5 r18: 5 r19: 0 r20: 0 r21: 0 r22: 0 r23: 0
r24: 0 r25: 0 r26: 0 r27: 0 r28: 0 r29: 0 r30: 0 r31: 0
x : 0 y : 0 z : 0
Registers used: 3 out of 35 (8.6%)
ATMEGA164P instruction use summary:
adc : 0 add : 0 adiw : 0 and : 0 andi : 0 asr : 0
bclr : 0 bld : 0 brbc : 0 brbs : 0 brcc : 0 brcs : 0
break : 0 breq : 0 brge : 0 brhc : 0 brhs : 0 brid : 0
brie : 0 brlo : 0 brlt : 0 brmi : 0 brne : 0 brpl : 0
brsh : 0 brtc : 0 brts : 0 brvc : 0 brvs : 0 bset : 0
bst : 0 call : 0 cbi : 0 cbr : 0 clc : 0 clh : 0
cli : 0 cln : 0 clr : 0 cls : 0 clt : 0 clv : 0
clz : 0 com : 0 cp : 0 cpc : 0 cpi : 0 cpse : 0
dec : 0 eicall: 0 eijmp : 0 elpm : 0 eor : 0 fmul : 0
fmuls : 0 fmulsu: 0 icall : 0 ijmp : 0 in : 0 inc : 0
jmp : 0 ld : 0 ldd : 0 ldi : 3 lds : 0 lpm : 0
lsl : 0 lsr : 0 mov : 0 movw : 0 mul : 0 muls : 0
mulsu : 0 neg : 0 nop : 0 or : 0 ori : 0 out : 0
pop : 0 push : 0 rcall : 0 ret : 0 reti : 0 rjmp : 1
rol : 0 ror : 0 sbc : 0 sbci : 0 sbi : 0 sbic : 0
sbis : 0 sbiw : 0 sbr : 0 sbrc : 0 sbrs : 0 sec : 0
seh : 0 sei : 0 sen : 0 ser : 0 ses : 0 set : 0
sev : 0 sez : 0 sleep : 0 spm : 0 st : 0 std : 0
sts : 12 sub : 0 subi : 0 swap : 0 tst : 0 wdr : 0
Instructions used: 3 out of 114 (2.6%)
ATMEGA164P memory use summary [bytes]:
Segment Begin End Code Data Used Size Use%
---------------------------------------------------------------
[.cseg] 0x000000 0x000038 56 0 56 9999999 0.0%
[.dseg] 0x000060 0x000060 0 0 0 9999999 0.0%
[.eseg] 0x000000 0x000000 0 0 0 9999999 0.0%
Assembly complete, 0 errors, 0 warnings
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
4. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 4
El código de máquina contenido en el archivo .HEX es:
:020000020000FC
:1000000001E311E421E60093000110930101209324
:100010000201009303011093040120930501009352
:100020000601109307012093080100930901109322
:080030000A0120930B01FFCF30
:00000001FF
VARIACIÓN DE LA PRIMERA SOLUCIÓN
Esta solución utiliza direccionamiento directo y expresiones con valores numéricos.
LDI R16,0x31
LDI R17,0x41
LDI R18,0x61
STS 0x100+0,R16
STS 0x100+1,R17
STS 0x100+2,R18
STS 0x100+3,R16
STS 0x100+4,R17
STS 0x100+5,R18
STS 0x100+6,R16
STS 0x100+7,R17
STS 0x100+8,R18
STS 0x100+9,R16
STS 0x100+10,R17
STS 0x100+11,R18
VARIACIÓN DE LA PRIMERA SOLUCIÓN, PERO
QUE NO CUMPLE LO SOLICITADO
Esta solución utiliza también direccionamiento directo y expresiones con valores
numéricos. ATENCIÓN: esta solución llena otras localidades, con otros valores.
LDI R16,31
LDI R17,41
LDI R18,61
STS 100+0,R16
STS 100+1,R17
STS 100+2,R18
STS 100+3,R16
STS 100+4,R17
STS 100+5,R18
STS 100+6,R16
STS 100+7,R17
STS 100+8,R18
STS 100+9,R16
STS 100+10,R17
STS 100+11,R18
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
5. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 5
NUEVA VARIACIÓN DE LA PRIMERA SOLUCIÓN
Esta solución utiliza direccionamiento directo y expresiones con etiquetas.
LDI R16,NUMERO
LDI R17,MAYUSC
LDI R18,MINUSC
STS BLOQUE+0,R16
STS BLOQUE+1,R17
STS BLOQUE+2,R18
STS BLOQUE+3,R16
STS BLOQUE+4,R17
STS BLOQUE+5,R18
STS BLOQUE+6,R16
STS BLOQUE+7,R17
STS BLOQUE+8,R18
STS BLOQUE+9,R16
STS BLOQUE+10,R17
STS BLOQUE+11,R18
El Módulo Fuente contenido en el archivo .ASM es el que muestra a continuación:
; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1
; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA,
; ALTERNADAMENTE.
; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO DIRECTO
; Y EXPRESIONES CON ETIQUETAS
;
.DEVICE ATMEGA164P
;
.EQU NLOC = 12
.EQU NUMERO = 0x31
.EQU MAYUSC = 0x41
.EQU MINUSC = 0x61
;
.DSEG
.ORG 0x100
BLOQUE: .BYTE NLOC
;
.CSEG
LDI R16,NUMERO
LDI R17,MAYUSC
LDI R18,MINUSC
STS BLOQUE+0,R16
STS BLOQUE+1,R17
STS BLOQUE+2,R18
STS BLOQUE+3,R16
STS BLOQUE+4,R17
STS BLOQUE+5,R18
STS BLOQUE+6,R16
STS BLOQUE+7,R17
STS BLOQUE+8,R18
STS BLOQUE+9,R16
STS BLOQUE+10,R17
STS BLOQUE+11,R18
;
FIN: RJMP FIN
;
.EXIT ; FIN DEL MODULO FUENTE
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
6. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 6
Para asignar los valores numéricos a las etiquetas, se utiliza la Directiva de
EQUIVALENCIA (.EQU)
Para asignar los valores de las direcciones de la SRAM a las etiquetas, se utilizan: la
Directiva de Reservación de zonas de memoria SRAM (.BYTE) y la Directiva de
Reubicación (.ORG), que permite establecer el origen del bloque de localidades de la
SRAM. Esta misma directiva, sirve para reubicar los programas cuando es necesario.
De esta manera se facilita al programador la actualización de los programas, porque es
más comprensible el algoritmo implementado y es más rápido de modificarlo, como se
ve en el siguiente Módulo Fuente.
; PROGRAMA PARA LLENAR LAS QUINCE LOCALIDADES A PARTIR DE LA 200 HEXADECIMAL
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 0
; DE LA LETRA Z MAYÚSCULA Y DE LA LETRA t MINÚSCULA,
; ALTERNADAMENTE.
; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO DIRECTO
; Y EXPRESIONES CON ETIQUETAS
;
.DEVICE ATMEGA164P
;
.EQU NLOC = 15
.EQU NUMERO = '0'
.EQU MAYUSC = 'Z'
.EQU MINUSC = 't'
;
.DSEG
.ORG 0x200
BLOQUE: .BYTE NLOC
;
.CSEG
LDI R16,NUMERO
LDI R17,MAYUSC
LDI R18,MINUSC
STS BLOQUE+0,R16
STS BLOQUE+1,R17
STS BLOQUE+2,R18
STS BLOQUE+3,R16
STS BLOQUE+4,R17
STS BLOQUE+5,R18
STS BLOQUE+6,R16
STS BLOQUE+7,R17
STS BLOQUE+8,R18
STS BLOQUE+9,R16
STS BLOQUE+10,R17
STS BLOQUE+11,R18
STS BLOQUE+12,R16
STS BLOQUE+13,R17
STS BLOQUE+14,R18
;
FIN: RJMP FIN
;
.EXIT ; FIN DEL MODULO FUENTE
En esta solución, se ha incorporado la ayuda del ensamblador para obtener los códigos
ASCII de los símbolos, únicamente colocando al símbolo entre apóstrofes.
También, se ha utilizado de Directiva de Reubicación (.ORG)
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
7. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 7
SEGUNDA SOLUCIÓN
La solución utiliza direccionamiento indirecto, incrementos del puntero y etiquetas. El
puntero que se utiliza es el puntero X, que está conformado por los Registros R26 y
R27. Por lo que hace falta inicializar el puntero antes de utilizarlo.
LDI R16,NUMERO
LDI R17,MAYUSC
LDI R18,MINUSC
LDI R26,LOW(BLOQUE)
LDI R27,HIGH(BLOQUE)
ST X,R16
INC R26
ST X,R17
INC R26
ST X,R18
INC R26
ST X,R16
INC R26
ST X,R17
INC R26
ST X,R18
INC R26
ST X,R16
INC R26
ST X,R17
INC R26
ST X,R18
INC R26
ST X,R16
INC R26
ST X,R17
INC R26
ST X,R18
INC R26
Esta solución para inicializar el Puntero X de 16 bits, utiliza dos instrucciones de carga
inmediata de 8 bits a los registro R26 y R27 (LDI); donde el operando de origen que
utiliza direccionamiento inmediato es el resultado de las funciones LOW y HIGH, que
posee este ensamblador, para separar un número de 16 bits en dos bytes el menos
significativo con LOW y el más significativo con HIGH.
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
8. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 8
TERCERA SOLUCIÓN
Esta solución utiliza direccionamiento indirecto con post incremento, funciones y
etiquetas
LDI R16,NUMERO
LDI R17,MAYUSC
LDI R18,MINUSC
LDI R26,LOW(BLOQUE)
LDI R27,HIGH(BLOQUE)
ST X+,R16
ST X+,R17
ST X+,R18
ST X+,R16
ST X+,R17
ST X+,R18
ST X+,R16
ST X+,R17
ST X+,R18
ST X+,R16
ST X+,R17
ST X+,R18
La ventaja de esta solución, radica en que el código de máquina de todas las
instrucciones que llenan las localidades de la SRAM, es el mismo.
; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1
; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA,
; ALTERNADAMENTE.
; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO INDIRECTO CON
; POST INCREMENTO, FUNCIONES Y ETIQUETAS
;
.DEVICE ATMEGA164P
;
.EQU NLOC = 12
.EQU NUMERO = '1'
.EQU MAYUSC = 'A'
.EQU MINUSC = 'a'
;
.DSEG
.ORG 0x100
000100 BLOQUE: .BYTE NLOC
;
.CSEG
000000 e301 LDI R16,NUMERO
000001 e411 LDI R17,MAYUSC
000002 e621 LDI R18,MINUSC
000003 e0a0 LDI R26,LOW(BLOQUE)
000004 e0b1 LDI R27,HIGH(BLOQUE)
000005 930d ST X+,R16
Códigos de Máquina
000006 931d iguales
ST X+,R17
000007 932d ST X+,R18
000008 930d Códigos de Máquina ST X+,R16
000009 931d iguales ST X+,R17
00000a 932d ST X+,R18
00000b 930d Códigos de Máquina ST X+,R16
00000c 931d iguales ST X+,R17
00000d 932d ST X+,R18
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
9. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 9
00000e 930d ST X+,R16
Códigos de Máquina
00000f 931d ST X+,R17
iguales
000010 932d ST X+,R18
;
000011 cfff FIN: RJMP FIN
;
.EXIT ; FIN DEL MODULO FUENTE
Por lo tanto, con este modo de direccionamiento se puede conseguir una solución
eficiente mediante el uso de LAZOS DE REPETICIÓN
CUARTA SOLUCIÓN
Esta solución utiliza direccionamiento indirecto con post incremento, expresiones con
funciones, etiquetas y un lazo de repetición controlado por el valor del puntero
LDI R16,NUMERO
LDI R17,MAYUSC
LDI R18,MINUSC
LDI R26,LOW(BLOQUE)
LDI R27,HIGH(BLOQUE)
REPITA: ST X+,R16
ST X+,R17
ST X+,R18
CPI R26,LOW(BLOQUE)+11
BRNE REPITA
Resultado del ensamblado de este Módulo Fuente:
; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1
; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA,
; ALTERNADAMENTE.
; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO INDIRECTO CON
; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y
; UN LAZO DE REPETICIÓN CONTROLADO POR EL VALOR DEL PUNTERO
;
.DEVICE ATMEGA164P
;
.EQU NLOC = 12
.EQU NUMERO = '1'
.EQU MAYUSC = 'A'
.EQU MINUSC = 'a'
;
.DSEG
.ORG 0x100
000100 BLOQUE: .BYTE NLOC
;
.CSEG
000000 e301 LDI R16,NUMERO
000001 e411 LDI R17,MAYUSC
000002 e621 LDI R18,MINUSC
000003 e0a0 LDI R26,LOW(BLOQUE)
000004 e0b1 LDI R27,HIGH(BLOQUE)
000005 930d REPITA: ST X+,R16
000006 931d ST X+,R17
000007 932d ST X+,R18
000008 30ab CPI R26,LOW(BLOQUE)+11
000009 f7d9 BRNE REPITA
;
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
10. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 10
00000a cfff FIN: RJMP FIN
;
Lamentablemente esta solución no cumple con lo solicitado, “Llenar doce localidades”;
porque, el programa sigue llenando más localidades debido a una falla en el control del
lazo de repetición tal como se puede ver en la siguiente prueba de escritorio.
R16 R17 R18 R26 R27 Localidades de la SRAM Comparación Salto
0x31 0x41 0x61 0x00 0x01 (0x0100) = 0x31
0x01 0x01
(0x0101) = 0x41
0x02 0x01
(0x0102) = 0x61
0x03 0x01 0x03<>0x0B Si
(0x0103) = 0x31
0x04 0x01
(0x0104) = 0x41
0x05 0x01
(0x0105) = 0x61
0x06 0x01 0x06<>0x0B Si
(0x0106) = 0x31
0x07 0x01
(0x0107) = 0x41
0x08 0x01
(0x0108) = 0x61
0x09 0x01 0x09<>0x0B Si
(0x0109) = 0x31
0x0A 0x01
(0x010A) = 0x41
0x0B 0x01
(0x010B) = 0x61
0x0C 0x01 0x0C<>0x0B Si
(0x010C) = 0x31
0x0D 0x01
(0x010D) = 0x41
0x0E 0x01
(0x010E) = 0x61
0x0F 0x01 0x0F<>0x0B Si
(0x010F) = 0x31
0x10 0x01
(0x0110) = 0x41
0x11 0x01
(0x0111) = 0x61
0x12 0x01 0x12<>0x0B Si
La solución es modificar la instrucción de comparación por:
CPI R26,LOW(BLOQUE)+12
O, mejor:
CPI R26,LOW(BLOQUE)+NLOC
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
11. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 11
QUINTA SOLUCIÓN
Esta solución utiliza direccionamiento indirecto con post incremento, expresiones con
funciones, etiquetas y un lazo de repetición controlado por un contador descendente.
LDI R16,NUMERO
LDI R17,MAYUSC
LDI R18,MINUSC
LDI R19,NLOC/3
LDI R26,LOW(BLOQUE)
LDI R27,HIGH(BLOQUE)
REPITA: ST X+,R16
ST X+,R17
ST X+,R18
DEC R19
BRNE REPITA
VARIACIÓN A LA QUINTA SOLUCIÓN
Esta variación permite visualizar mejor el algoritmo, cuando al registro contador se
etiqueta precisamente como “CONTADOR”, mediante la Directiva que Define un
Nombre Simbólico para un Registro (.DEF)
; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1
; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA,
; ALTERNADAMENTE.
; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO INDIRECTO CON
; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y
; UN LAZO DE REPETICIÓN CONTROLADO POR UN CONTADOR DESCENDENTE
; EL REGISTRO CONTADOR ESTA ETIQUETADO PRECISAMENTE COMO "CONTADOR"
;
.DEVICE ATMEGA164P
;
.EQU NLOC = 12
.EQU NUMERO = '1'
.EQU MAYUSC = 'A'
.EQU MINUSC = 'a'
;
.DEF CONTADOR = R19
;
.DSEG
.ORG 0x100
BLOQUE: .BYTE NLOC
;
.CSEG
LDI R16,NUMERO
LDI R17,MAYUSC
LDI R18,MINUSC
LDI CONTADOR,NLOC/3
LDI R26,LOW(BLOQUE)
LDI R27,HIGH(BLOQUE)
REPITA: ST X+,R16
ST X+,R17
ST X+,R18
DEC CONTADOR
BRNE REPITA
;
FIN: RJMP FIN
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
12. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 12
;
.EXIT ; FIN DEL MODULO FUENTE
La ventaja de elaborar lazos de repetición bajo este esquema, es que se pueden observar
en forma clara las tres partes que conforman el lazo de repetición:
• La inicialización de los registros, del contador de repeticiones y del o de los
punteros, que intervienen en el lazo.
• El cuerpo del lazo de repetición, que realiza la tarea repetitiva, y
• La disminución del contador y el correspondiente chequeo para determinar el
final de las repeticiones, mediante la instrucción de bifurcación.
A continuación se muestra el Módulo Fuente en el que se ha unido la solución a los dos
problemas que se resolvieron antes, en forma individual.
; PROGRAMA PARA LLENAR LAS DOCE PRIMERAS LOCALIDADES
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 1
; DE LA LETRA A MAYÚSCULA Y DE LA LETRA a MINÚSCULA,
; ALTERNADAMENTE.
; TAMBIÉN, DEBE LLENAR QUINCE LOCALIDADES A PARTIR DE 200 HEXADECIMAL
; DE LA MEMORIA DE DATOS, CON LOS CÓDIGOS ASCII DEL NÚMERO 0
; DE LA LETRA Z MAYÚSCULA Y DE LA LETRA t MINÚSCULA,
; ALTERNADAMENTE.
; LA SOLUCIÓN UTILIZA DIRECCIONAMIENTO INDIRECTO CON
; POST INCREMENTO, EXPRESIONES CON FUNCIONES, ETIQUETAS Y
; DOS LAZOS DE REPETICIÓN CONTROLADO POR UN CONTADOR DESCENDENTE
; EL REGISTRO CONTADOR ESTA ETIQUETADO PRECISAMENTE COMO "CONTADOR"
;
.DEVICE ATMEGA164P
;
.EQU NLOC1 = 12
.EQU NUMERO1 = '1'
.EQU MAYUSC1 = 'A'
.EQU MINUSC1 = 'a'
.EQU NLOC2 = 15
.EQU NUMERO2 = '0'
.EQU MAYUSC2 = 'Z'
.EQU MINUSC2 = 't'
;
.DEF CONTADOR = R19
;
.DSEG
.ORG 0x100
BLQ1: .BYTE NLOC1
.ORG 0x200
BLQ2: .BYTE NLOC2
;
.CSEG
LDI R16,NUMERO1
LDI R17,MAYUSC1
LDI R18,MINUSC1
LDI CONTADOR,NLOC1/3
LDI R26,LOW(BLQ1)
LDI R27,HIGH(BLQ1)
LAZO1: ST X+,R16
ST X+,R17
ST X+,R18
DEC CONTADOR
BRNE LAZO1
;
LDI R16,NUMERO2
LDI R17,MAYUSC2
LDI R18,MINUSC2
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
13. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 13
LDI CONTADOR,NLOC2/3
LDI R26,LOW(BLQ2)
LDI R27,HIGH(BLQ2)
LAZO2: ST X+,R16
ST X+,R17
ST X+,R18
DEC CONTADOR
BRNE LAZO2
;
FIN: RJMP FIN
;
.EXIT ; FIN DEL MODULO FUENTE
Esta última solución al problema, permite al programador crear sus propias
MACROINSTRUCCIONES, que le faciliten aún más la elaboración de los programas.
INCLUSIÓN DE MACROINSTRUCCIONES EN LA
QUINTA SOLUCIÓN
La creación de Macroinstrucciones consiste en agrupar un bloque de instrucciones que
forman la nueva instrucción. La condición que deben cumplir es que se diferencien
únicamente en ciertos operandos como registros, localidades o valores entre las
instrucciones de los diferentes bloques.
Para construir la nueva instrucción: Se empieza por la Directiva de Encabezado de las
Macroinstrucciones (:MACRO), donde se define el nombre que le corresponde a la
nueva instrucción. A continuación sigue el bloque de instrucciones, donde los elementos
que cambian son reemplazados por @0, @1, @2 … hasta @9 y que constituyen los
parámetros que se especifican cuando se invoca a la nueva instrucción, dentro del
programa. Se termina la construcción de la nueva instrucción con la Directiva de
Finalización de las Macroinstrucciones (:ENDMACRO)
La invocación de la nueva instrucción se realiza utilizando el nombre que se estableció
en la construcción, seguido de los parámetros separados por comas y en el orden que se
los numeró.
A continuación esta ilustrado la creación de la Macroinstrucción para inicializar los
registros que se utilizan en los lazos de repetición de la solución, a la que se le nombra
como “INICIAR”.
.LISTMAC
.MACRO INICIAR
LDI R16,@0
LDI R17,@1
LDI R18,@2
LDI CONTADOR,@3/2
LDI R26,LOW(@4)
LDI R27,HIGH(@4)
.ENDMACRO
;
.CSEG
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
14. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 14
INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1
LAZO1: ST X+,R16
ST X+,R17
ST X+,R18
DEC CONTADOR
BRNE LAZO1
;
INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2
LAZO2: ST X+,R16
ST X+,R17
ST X+,R18
DEC CONTADOR
BRNE LAZO2
El uso de Macroinstrucciones no ahorra código de máquina, como se puede ver en el
resultado del ensamblado, que a continuación se muestra:
.DEVICE ATMEGA164P
;
.EQU NLOC1 = 12
.EQU NUMERO1 = '1'
.EQU MAYUSC1 = 'A'
.EQU MINUSC1 = 'a'
.EQU NLOC2 = 15
.EQU NUMERO2 = '0'
.EQU MAYUSC2 = 'Z'
.EQU MINUSC2 = 't'
;
.DEF CONTADOR = R19
;
.DSEG
.ORG 0x100
000100 BLQ1: .BYTE NLOC1
.ORG 0x200
000200 BLQ2: .BYTE NLOC2
;
.LISTMAC
.MACRO INICIAR
LDI R16,@0
LDI R17,@1
LDI R18,@2
LDI CONTADOR,@3/2
LDI R26,LOW(@4)
LDI R27,HIGH(@4)
.ENDMACRO
;
.CSEG
+
000000 e301 +LDI R16 , NUMERO1
000001 e411 +LDI R17 , MAYUSC1
000002 e621 +LDI R18 , MINUSC1
000003 e036 +LDI CONTADOR , NLOC1 / 2
000004 e0a0 +LDI R26 , LOW ( BLQ1 )
000005 e0b1 +LDI R27 , HIGH ( BLQ1 )
INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1
000006 930d LAZO1: ST X+,R16
000007 931d ST X+,R17
Códigos de Máquina
000008 932d ST X+,R18
iguales
000009 953a DEC CONTADOR
00000a f7d9 BRNE LAZO1
;
+
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
15. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 15
00000b e300 +LDI R16 , NUMERO2
00000c e51a +LDI R17 , MAYUSC2
00000d e724 +LDI R18 , MINUSC2
00000e e037 +LDI CONTADOR , NLOC2 / 2
00000f e0a0 +LDI R26 , LOW ( BLQ2 )
000010 e0b2 +LDI R27 , HIGH ( BLQ2 )
INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2
000011 930d LAZO2: ST X+,R16
000012 931d ST X+,R17
000013 932d Códigos de Máquina ST X+,R18
iguales
000014 953a DEC CONTADOR
000015 f7d9 BRNE LAZO2
;
000016 cfff FIN: RJMP FIN
; ;
Analizando el listado anterior, se puede observar que las instrucciones de los lazos de
repetición tienen el mismo código de máquina, lo que permite convertirles en
Subrutinas, como lo que si indica a continuación:
INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1
CALL LAZO
INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2
CALL LAZO
INCLUSIÓN DE MACROINSTRUCCIONES Y
SUBRUTINAS EN LA QUINTA SOLUCIÓN
Cuando se utilizan Subrutinas es necesario inicializar el Puntero del Stack (SP) que
generalmente se lo ubica al final de la SRAM. Además se ha eliminado la directiva que
lista completamente las macroinstrucciones.
.DEVICE ATMEGA164P
;
.EQU NLOC1 = 12
.EQU NUMERO1 = '1'
.EQU MAYUSC1 = 'A'
.EQU MINUSC1 = 'a'
.EQU NLOC2 = 15
.EQU NUMERO2 = '0'
.EQU MAYUSC2 = 'Z'
.EQU MINUSC2 = 't'
;
.DEF CONTADOR = R19
;
.DSEG
.ORG 0x100
000100 BLQ1: .BYTE NLOC1
.ORG 0x200
000200 BLQ2: .BYTE NLOC2
;
;.LISTMAC
.MACRO INICIAR
LDI R16,@0
LDI R17,@1
LDI R18,@2
LDI CONTADOR,@3/2
LDI R26,LOW(@4)
LDI R27,HIGH(@4)
.ENDMACRO
;
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
16. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 16
.CSEG
000000 ef0f LDI R16,LOW(0x04FF)
000001 9300 005e STS $5E,R16 Inicialización del
000003 e004 LDI R16,HIGH(0x04FF) Stack Pointer
000004 9300 005d STS $5D,R16
;
000006 e301
000007 e411
000008 e621
000009 e036
00000a e0a0
00000b e0b1 INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1
00000c 940e 0017 CALL LAZO
;
00000e e300
00000f e51a
000010 e724
000011 e037
000012 e0a0
000013 e0b2 INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2
000014 940e 0017 CALL LAZO
;
000016 cfff FIN: RJMP FIN
;
000017 930d LAZO: ST X+,R16
000018 931d ST X+,R17
000019 932d ST X+,R18
00001a 953a DEC CONTADOR
00001b f7d9 BRNE LAZO
00001c 9508 RET
;
INCLUSIÓN DEL ARCHIVO DE DEFINICIONES
PROPORCIONADO POR EL FABRICANTE
El fabricante proporciona el archivo “m164pdef.inc”, para facilitar la elaboración de los
programas; a fin de, reemplazar los valores numéricos de las direcciones de memoria
por las Etiquetas que se utilizan en las hojas de datos. En el siguiente listado se ha
reemplazado la definición del dispositivo (.DEVICE ATMEGA164P) por la inclusión
del archivo de definiciones y se han utilizado las directivas .NOLIST y .LIST para que
en el archivo de resultado del ensamblado no se listen las líneas que contiene el archivo
de definiciones.
.NOLIST
.INCLUDE "m164pdef.inc"
.LIST
;
.EQU NLOC1 = 12
.EQU NUMERO1 = '1'
.EQU MAYUSC1 = 'A'
.EQU MINUSC1 = 'a'
.EQU NLOC2 = 15
.EQU NUMERO2 = '0'
.EQU MAYUSC2 = 'Z'
.EQU MINUSC2 = 't'
;
.DEF CONTADOR = R19
;
.DSEG
.ORG 0x100
BLQ1: .BYTE NLOC1
.ORG 0x200
BLQ2: .BYTE NLOC2
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información
17. SISTEMAS MICROPROCESADOS – Ejercicio para llenar localidades de la SRAM
Pag. 17
;
;.LISTMAC
.MACRO INICIAR
LDI R16,@0
LDI R17,@1
LDI R18,@2
LDI CONTADOR,@3/2
LDI R26,LOW(@4)
LDI R27,HIGH(@4)
.ENDMACRO
;
.CSEG
LDI R16,LOW(RAMEND) Etiquetas que se
OUT SPH,R16 encuentran en el archivo
LDI R16,HIGH(RAMEND) de definiciones
OUT SPL,R16
;
INICIAR NUMERO1,MAYUSC1,MINUSC1,NLOC1,BLQ1
CALL LAZO
;
INICIAR NUMERO2,MAYUSC2,MINUSC2,NLOC2,BLQ2
CALL LAZO
;
FIN: RJMP FIN
;
LAZO: ST X+,R16
ST X+,R17
ST X+,R18
DEC CONTADOR
BRNE LAZO
RET
;
.EXIT ; FIN DEL MODULO FUENTE
La utilización de este archivo de definiciones permite escoger rápidamente el
microcontrolador con el cual se va ha trabajar, grabado el código de máquina que
resulta del proceso de ensamblado. Así por ejemplo, el último programa en una ocasión
se desea utilizarlo con el ATmega164P y en otra con el ATmega16; una de las
diferencias entre estos microcontroladores es la dirección final de la SRAM. en el
primer caso esta dirección es 0x04FF y en el segundo caso es 0x045F. Únicamente
cambiando el archivo de definiciones “m164pdef.inc” por “m16def.inc” y sin modificar
ninguna otra línea, se obtiene para cada caso los códigos de máquina correspondientes.
Para el ATmega164P
:020000020000FC
:100000000FEF0EBF04E00DBF01E311E421E636E07F
:10001000A0E0B1E00E94150000E31AE524E737E014
:10002000A0E0B2E00E941500FFCF0D931D932D9329
:060030003A95D9F708958E
:00000001FF Códigos de Máquina
diferentes, por el cambio de
microcontrolador
Para el ATmega16
:020000020000FC
:100000000FE50EBF04E00DBF01E311E421E636E089
:10001000A0E0B1E00E94150000E31AE524E737E014
:10002000A0E0B2E00E941500FFCF0D931D932D9329
:060030003A95D9F708958E
:00000001FF
Ing. Jaime E. Velarde – Departamento de Electrónica, Telecomunicaciones y Redes de Información