Ejercicios resueltos en avr ensamblador con el ATmega328P PDF

Title Ejercicios resueltos en avr ensamblador con el ATmega328P
Course Microprocesadores
Institution Instituto Politécnico Nacional
Pages 30
File Size 1.3 MB
File Type PDF
Total Downloads 45
Total Views 146

Summary

Se describe la solución a distintos ejercicios para su realización en lenguaje avr ensamblador, así como ilustración de su funcionamiento, se debe tomar en cuenta que es para el ATmega328P y su funcionamiento podría ser diferente con otro microcontrolador...


Description

TUTORIAL DE ATMEL AVR´s de 8-bits

Logo propiedad de Atmel Ensamblador Autor: Luis Antonio Méndez Soto PARTE 1 Libre distribución. Solo pongan de donde lo obtuvieron y referencias bibliográficas.

Atmel®, the Atmel logo and combinations thereof, and others are the registered trademarks or trademarks of Atmel Corporation of its subsidiaries "AVR®" and "AVR is a registered trademark of Atmel Corporation".

Introducción. Decidí hacer este tutorial por que yo aprendí a programar los Avr´s en c++ y quería aprender en ensamblador, estuve buscando y nunca encontré un tutorial que en realidad le entendiera entonces decidí aprender por mi cuenta. Tengo conocimientos sobre ensamblador de Z80 y como funciona un sistema mínimo conecte uno en una protoboard que ya no era tan sistema mínimo estaba bastante grande todavía lo tengo por ahí armado de hecho no lo quiero desarmar, no lo uso por que que no tengo programador de memorias paralelas. Y pues se poco ensamblador de PIC16F84 pero pues aquí tratamos de aprender ensamblador de los Avr´s. En general el ensamblador es lo mismo en todos los Avr´s no como en los PIC que cada uno tiene un ensamblador diferente. Desde mi punto de vista y lo poco que conozco al arquitectura del uC Pic no fue muy bien pensada en comparación con la de los Avr´s. Pero eso ya es decisión de cada uno.

Dedico este pequeño tutorial a todas las personas que me apoyan y me dicen que siga adelante que cumpla con mis sueños a mis papas que siempre han sido la base de mi de mi crecimiento como persona y que sin ellos no sabría todo esto, los quiero mucho. A mi novia que siempre me apoya y mas que nada por el tiempo que no le dedico a ella y se lo dedico a estas actividades que tanto me gustan.

Conocimientos Necesarios. 1. Electrónica básica(conexiones) 2. Programación ya sea en c o algún otro lenguaje. 3. Ganas de Aprender bien y hacer preguntas. Componentes Necesarios. 1.-Programador de Avr´s cualquiera que funcione. 2.-uC Atmel Serie Avr Attiny 461, Atmega8(cualquier Avr funciona por que va a ser en ensamblador y todo ensamblador de Avr es muy parecido) 3.-Protoboard 4.-Pequeña fuente de 5 Volts 5.-Resistencias (variadas) 6.-Led´s Varios Software necesario Avr Studio 4 Avr Dude (dependiendo de el programador) Pony Prog (dependiendo de el programador)

Sobre los componentes. 1.-Programador de Avr´s, yo tengo el Avr Dragon pero cualquiera que tengan y que funcione debe de funcionar bien y servirnos y si no tiene chequeen paginas como http://www.pictronico.com/shop/osc/index.php?cPath=33 que tienen desde $ 300 pesos Aquí en Celaya Voltix vende el Avr Dragon que cuesta aproximadamente $1000 En Queretaro esta Advandix ahi venden también En la Ciudad de México en el Centro en la calle de República de el Salvador deben de encontrar yo e visto en al plaza con el numero 24 en la parte de arriba es cosa de que pregunten. O otra opción es hacerlo en lo personal yo no los e probado pero les dejo varios links. Miren http://www.obdev.at/products/vusb/prjprog.html http://www.forosdeelectronica.com/f24/diagrama-programador-atmel-atmega16-32-a16274/ http://www.foroselectronica.es/f65/programador-atmega32-16pi-745.html Mas adelante haber si agarramos un tutorial de estos y los probamos haber que pasa, si alguien ve alguno y le funciono pues que nos diga 2.-Aquí en Celaya en Voltix los venden o pueden ponerse en contacto conmigo por correo electrónico [email protected] y [email protected] y yo se los puedo vender. 3.- Esta las pueden conseguir en Voltix o en Steren en cualquier tienda que venda componentes electrónicos como para hobistas 4.-Pues esto pueden usar la de un cargador de celular una computadora o varias cosas así o hacer una pequeña fuente con LM7805 y un transformador ahí esta el diagrama. 5.- Igualmente en Voltix o en cualquier Steren si quiere me pueden contactar y yo también se las puedo vender. 6.- Igualmente en Voltix o en cualquier Steren si quiere me pueden contactar y yo también se las puedo vender.

Software necesario Pues el Avr Studio lo pueden conseguir directo de la pagina de Atmel www.atmel.com este software es gratuito solo hace falta registrarse y si quieren aprender pues con este basta por que también es simulador y para programas simples como con los que vamos a empezar con este software basta. El Avr dude y el pony prog también son gratuitos esos hay que echarle una buscada en google. Les recomiendo también tener la hoja de datos de su uC que quieren programar la pueden buscar directo en Atmel tiene todo muy bien organizado y las instrucciones de ensamblador de loa Avr´s también están en Atmel pero a esa si les dejo el link seria http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf Estas son las instrucciones de los Avr´s de 8 bits

Inicio y pura teoria. Que es un Microcontrolador?De Wikipedia: Un circuito Integrado o chip que incluye en sus interior las tres unidades básicas de una computadora: Unidad central de procesamiento (CPU) , Memoria y unidades de E/S. Desde mi punto de vista: es una computadora en un circuito integrado. Pueden tener mas dispositivos dentro de ellos mismo como: Convertidores DAC, ADC, timers, PWM, USART, UART, SPI, Comparadores, Interfaz usb, Ethernet, Controladores de LCD, etc.. Dependiendo de los módulos extras que tenga es su precio y complejidad. Existen muchos fabricantes como: Atmel, Microchip, Motorola, Parallax, Hitachi, National Instruments, Texas Instruments, Zilog , etc... Aplicaciones: Pues sus aplicaciones son prácticamente infinitas, imaginate cuantos aparatos conoces que tiene una pantalla ya sea de leds, touch, lcd como hornos, celulares,cámaras, refrigeradores, relojes, aires acondicionados, lavadoras, controles remotos, etc... Los aparatos que traen botones para interactuar con nosotros, los aparatos con leds pequeños y así muchos mas. Todo este tipo de aparatos necesita un controlador, generalmente es una computadora pero son muy caras para tenerlas dentro, ahí es donde entra el uC. Un carro es un buen ejemplo, sin temor a equivocarme un carro moderno trae cerca de 50 uC, casi casi uno por sensor por que van interconectados a un una computadora central que controla todo pero algo necesita enviar los datos de una manera para que los entienda el CPU principal esto lo hace el uC. El bus que usan generalmente los carros se llama Bus CAN. Pues bueno nosotros vamos a usar el Attiny461 pero como ya lo dije y lo vuelvo a repetir es ensamblador y pues sirve para casi todos los microcontroladores Atmel de la seria AVR tiny y Avr Mega no se decirles de los Xmega nunca e usado uno pero espero y pronto poder usarlo. Ejecución de instrucciones Todos los uC tiene arquitectura Harvard al menos todos los que conozco esto quiere decir tiene una memoria diferente para programa y para datos mientras que una arquitectura Von Neuman es la misma memoria para datos y programa. Tener arquitectura Harvard es mejor por que es mas rápido de accesar. Veamos lo así mientras en Harvard yo lee el programa y también obtengo los datos al mismo tiempo en el mismo ciclo de reloj en el de Von Neuman necesito dos ciclos de reloj uno para leer la acción a hacer y la otra para el dato.

Les dejo una figura de como se lee los datos y el programa en los Avr´s

Imagen propiedad de Atmel Figura 1 de la hoja de datos del Attiny461 Como se alcanza a ver en el primer ciclo de reloj se decodifica la primera instrucción y en el segundo ciclo ya se sabe que tiene que hacer y ejecuta la primera instrucción, mientras que en ese mismo ciclo la segunda instrucción se decodifica y al tercer ciclo se ejecuta esa segunda instrucción y se obtiene la 3er instrucción y así sucesivamente, todo esto es gracias a las dos memorias separadas para datos y para programa.

Un poco de la arquitectura. Les dejo una imagen de la arquitectura y explicación de los componentes que vamos a usar en esta primera parte de el tutorial. Contiene 32 Registros de propósito general de 8 bits con un tiempo de acceso de un ciclo de reloj. El flujo de el programa es proveído por saltos condicionados y no condicionados la función Call o llamada a subrutina y esto es capaz de accesorio a toda la memoria de el uC.

Imagen propiedad de Atmel

ALU Este esta conectado a los 32 registros de propósito general.se ejecutan instrucciones entre los registros en un solo ciclo de reloj puede ser con otro registro o con otro dato. Se divide en tres categorías :operaciones aritméticas, operaciones lógicas y operaciones de tipo bit. Statur register.(SREG) Contiene información de la operación aritmética ejecutada mas recientemente. Este registro no se guarda automáticamente cuando entras a una subrutina, hay que guardarlo automáticamente.

Imagen propiedad de Atmel Esta parte es muy importante es la que nos dice como debe de seguir el programa o las condiciones apréndansela o impriman la es muy importante les explico cada bit. Bit 7 Global Interupt enable (GIE) Cuando este bit es 1 están habilitadas la interrupciones del uC, si no esta habilitado y en los otros registros se habilitan no va a pasar nada por que este no esta habilitado. Se cambia a 0 automáticamente por hardware cuando ocurre alguna interrupción. Y puede ser puesto a uno de nuevo con la instrucción RETI. Puede ser puesto a 1 o 0 con las instrucciones SEI y CLI. Bit 6 Bit Copy Storage (BCS) Este se usa para copiar un bit de el SREG a un registro o de un registro al SREG no se usa mucho en programación. Bit 5 Half Carry Flag (HCF) Indica si hay medio carry en la ultima operación. O si la operación anterior fue mayor a 15. Bit 4 Sign Bit (SB) Siempre es una operación exclusive or con la bandera de negativo y la de complemento a dos y sobre flujo Bit 3 Two complements overflow flag

Esta la Explico un poco mas adelante Bit 2 Negative flag (NF) Indica si el resultado de la ultima operación fue menor que cero. Tambien podemos checarla y ver que el numero es 128 o mayor Bit 1 Zero flag(ZF) Indica si la ultima operación fue cero. Bit 0 Carry flag (CF) Indica si el resultado de la ultima operación fue mas de 255.

Sobre los registros. Los registros son una especie de memoria Ram pero no lo son estos están conectados directo al ALU y todas las operaciones pasan por el ALU. Para un programa pequeño no necesita Ram pero si necesita guardar información para esto nos sirven los registros como lo dice son 32 registros les dejo una pequeña imagen de como están.

Imagen propiedad de Atmel

Como se alcanza a ver aquí los registro del 26 al 31 de pueden usar como registros de 16 bits para lograr accesar a toda la memoria del uC. Las operaciones que se pueden hacer son: Una entrada de 8 bits de entrada y el resultado ser de 8 bits. Dos entradas de 8 bits y un resultado de 8 bits. Dos entradas de 8 bits y una salida de 16 bits. Una entrada de 16 bits y una salida de 16 bits. Pues eso seria toda la teoria por este primera parte de el tutorial ahora si viene lo mismo espero y ya tengamos al menos instalado el Avr Studio todos en nuestra maquina. Si no recuerden descargarlo de la pagina de Atmel www.atmel.com

INICIO Esta es la imagen con la que empezamos

Aquí le tenemos que dar click en new project y esta es la imagen que sale

Aquí seleccionamos Atmel Avr Assembler esto nos habilita el nombre de el proyecto y el nombre de el archivo con extensión .asm y le damos en Next y sale esto. ASEGURENSE TAMBIEN DE PONER CREATE INITIAL FILE.

Aquí seleccionamos Avr Simulator y en mi caso Selecciono Attiny461 si ustedes tiene

otro uC seleccionen el modelo de el uC que tiene si no aparece en Avr Simulator seleccionen el Avr Simulator 2 y ahí de seguro debe aparecer y damos click en Finish.

Pues ahora si viene lo bueno no se si recuerden el Sreg que tiene un numero en hexadecimal a la hora de programar no existe el Sreg y los demás registros del timer, adc usart y demás cosas cada uno tiene un numero pero pues así es un poco mas difícil recordarlo por ejemplo el que les digo el Sreg tiene el numero hexadecimal 0x3F de ahora en adelante cuando vean 0xA0 va a ser un numero en hexadecimal es mas fácil aprender que es el Sreg que el registro 0x3F. Entonces lo que podemos hacer es que escribamos. De ahora en adelante todo texto en cursiva y negritas es parte de el programa .equ Sreg = 0x3F y así para todos los demás registros que vayamos a y usar. Pero esta la otra opción que se me hace mas fácil, donde se instalo el Avr Studio en mi caso C:\Program Files\Atmel hay una carpeta que dice Avr Tools le damos click ahí después hay una que dice Avr Assembler click y por fin en la que dice Appnotes. Vemos que nos aparece cosas así : m32def, m48def, tn2313def, tn45def, etc... abramos uno el que sea en este caso les pego una parte de lo que tiene el tn2313def aquí lo tienen: ;*************************************************************************** ;* A P P L I C A T I O N N O T E F O R T H E A V R F A M I L Y ;* Number :AVR000 ;* File Name :"tn2313def.inc" ;* Title :Register/Bit Definitions for the ATtiny2313 ;* Date :03.06.17 ;* Version :1.00 ;* Support E-mail :[email protected] ;* Target MCU :ATtiny2313

;* DESCRIPTION ;* When including this file in the assembly program file, all I/O register names and I/O register bit names appearing in the data book can be used.In addition, the two registers forming the data pointer Z have been assigned names ZL - ZH. ;* The Register names are represented by their hexadecimal address. ;* The Register Bit names are represented by their bit number (0-7). ;* Please observe the difference in using the bit names with instructions such as "sbr"/"cbr" (set/clear bit in register) and "sbrs"/"sbrc" (skip if bit in register set/cleared). The following example illustrates this: ;* in r16,PORTB ;read PORTB latch ;* sbr r16,(1...


Similar Free PDFs