INSTITUTO POLITÉCNICO NACIONAL Unidad Profesional Interdisciplinaria en Ingeniería y Tecnologías Tecnologías Avanzadas Ingeniería Mecatrnica Microprocesadores! Microcontroladores e Interfaz
Pr"ctica #$ %&tinas en A'% Al&(nos) Grande Roldán Carlos Medina Torres Jael Sebastian Sánchez Mata Mario Israel Tovar To var Daphne
*r&po) 2MV4
Profesor) Trejo Salazar David enja!"n
+ec,a de -ntrega)
2# de $nero de 2%
OBJETIVO. Que el alumno conozca la utilización y el funcionamiento de las Rutinas en AVR, así como las instrucciones básicas y banderas.
INTRODUCCIÓN Las rutinas pre generadas en ensamblador se utilizan para ahorrarse tiempo de diseo en generar un código !ue ya han hecho otros o !ue puedes generar tu mismo y necesitarlo en más de un proyecto y así no tener !ue "ol"er a escribirlo o disearlo. La e#tensión de archi"o por defecto en rutinas es .lib y contienen $nicamente las instrucciones necesarias para el traba%o al !ue se destinan. &ara incluir una sub'rutina o librería en nuestro programa tendremos !ue usar la directi"a include de la manera siguiente( include )rutina.lib) *na "ez hecho esto, será como si tu"i+semos las líneas de código contenidas en la librería, incluidas en el listado principal del programa .asm y accederemos a las partes de la librería utilizando la llamada a subrutinas )ALL) ya !ue todas las funciones contenidas en las librerías retornan con la instrucción )R-*R/) o similar !ue de"uel"en el proceso del programa a la posición siguiente a la instrucción )ALL).
Instrucciones Básicas y Banderas -l %uego de 0nstrucciones 1ásico dentro de AVR, puede clasificarse de la siguiente manera( 2 0nstrucciones de transferencia de datos 2 0nstrucciones aritm+tico'lógicas 2 0nstrucciones de salto 2 0nstrucciones de mane%o de bits 2 0nstrucciones de control del sistema. &or otro lado, los banderines 3flags4 !ue refle%an el resultado de la e%ecución de algunas instrucciones 3principalmente aritm+ticas, lógicas, etc.4 son los siguientes( ' 1it 3arry4 ' 1it 5 35ero4. 6e pone a 7 para resultado cero, 8 en otro caso. ' 1it / 3/egati"e4. 1it 9 del resultado.
PROCEDIMIENTO Y DE!RRO""O. E#ercicio $. Rea%i&ar un 'ro(ra)a ensa)*%ador ten(a 'ro(ra)adas + secuencias de , %eds y 'ueda tener %a o'ci-n de 'oner%o a dos e%ocidades de ca)*io distintas /+00 )s1 y $00 )s21 en e% dise3o inc%uir un *ot-n de on4o55.
&aso 7. &rimeramente se procede a implementar la solución mediante la generación de código en ensamblador, se recurre a la apertura de la herramienta Atmel 6tudio para la programación del AVR.
Fig. 1 Acceso a la herramienta Atmel Studio 6.0
&aso :. *na "ez !ue abrimos el soft;are de programación del AVR, generamos un nue"o proyecto mediante la ruta &ro%ect< /e; &ro%ect y seleccionamos la opción AVR Assambler indicando a su "ez el nombre y la ruta del proyecto como se muestra en la =ig. :> posteriormente en la "entana ?e"ice 6election 3=ig. @4 , seleccionamos el integrado a utilizar> en nuestro caso será el de la familia Atmega @:&.
Fig. 2 Asignación de nombre y ruta de Proyecto.
Fig. 3 Ventana de diálogo de asignación de selección de microchi.
&aso @. &osteriormente, procederemos a la generación de nuestro archi"o .asm cuyos blo!ues principales se describen a continuación( .include "m328Pdef.inc" .cseg .org 0X0 ldi r16, low(ramend) out spl,r16 ldi r16, ig(ramend) out sp, r16 ser r16 out ddrd,r16 clr r16 out ddr! ,r16
-n este blo!ue se muestra la utilización de la librería )m@:&def.inc) como principio, para posteriormente inicializar en esta caso el 1 y el ? res ecti"amente.
loop on#o$ ldi r21,0X00 out portd,r21 s!is pin!,3 %mp on#o$ in r16, Pin& andi r16, 0X03 cpi r16,0X03 !rne otra1 rcall rut#3 %mp loop otra1 cpi r16, '02 !rne otra2 rcall rut#2 %mp loop
-n este blo!ue de %oo', implementamos a su "ez una sub'rutina on6o55 !ue inicializa en cero el puerto de salida ? hasta !ue nuestro interruptor destinado este en uno y pueda e%ecutar la estructura rinci al de nuestro ro rama.
-n esta parte mostramos el e%emplo de la e%ecución del seleccionador de Rutina de B bits mediante la comparación del &uerto de -ntrada asignado a los interruptores destinados a dicha acción.
rut#0 ldi r1,0X out portd,r1 s!is pin!,2 rcall t#100ms s!ic pin!, 2 rcall t#*00ms ldi r1,0X++ out portd,r1 s!is pin!,2 rcall t#100ms s!ic pin!, 2 rcall t#*00ms ret
-ste blo!ue representa la estructura principal de nuestro programa> ya !ue muestra la carga de la secuencia asignada dependiendo de la comparación de rutina realizada en el blo!ue anterior, además e%ecuta el delay aplicado a la "elocidad de cambio seleccionada por el usuario.
t#100ms ---------------------------- delaing ////0 ccles ldi 18, '+ 44P0 ldi 1/, '5/ 44P1 dec 1/ !rne 44P1 =inalmente la dec 18 !rne 44P0 aplicación de la rutina ----------------------------de retraso para el delaing / ccles seleccionador de ldi 18, '03 "elocidad de cambio. 44P2 dec 18 !rne 44P2 ---------------------------- delaing 1 ccle nop ret
&aso B. *na "ez generado el código, procedemos a la "erificación de errores mediante la construcción de la solución en el Cen$ 1uild< 1uild 6olution.
Fig. ! Veri"icación del código.
&aso D. 6i no se generaron en errores, continuamos a "erificar el funcionamiento de nuestro programa mediante un soft;are de simulación. -n este caso usaremos la herramienta 0606 de &roteus.
Fig. # $mlementación del %ódigo en el so"t&are de dise'o.
E#ercicio 7.
E#ercicio 8
Conc%usiones ?entro de la presente práctica, pude implementar a mayor detalle las instrucciones básicas para la programación en AVR, cosa !ue adiferencia de la práctica 8 no habíamos logrado en su totalidad. Ce di cuenta !ue el mane%o de rutinas simplifica mucho el diseo para la poramación en ensamblador y mediante la ayuda de estas pude ir ligando cada parte del programa sin ning$n problema.
&or Eael 6ebastian Cedina orres -n la primera practica despues de poder reconocer y poder mane%ar me%er el lengua%e ensamblador empezamos con un tema para poder di"idir el programa en pe!ueos segmentos de codigo llamado rutinas. &or otro lado el uso de las rutinas nos ayudo a conceptualizar lo "isto el clase , sabiendo !ue las rutinas de"iden el codigo en diferentes segmentos. arlos Frande Roldán
Bi*%io(ra59as •
ttp77www.-ro!otics.com7rutinas.tm
•
htt())&&&.dte.us.es)ersonal)arra)*d%+,!+AV-+0+1a+arte
Ane#o conclusión &ráctica 8 -sta práctica me sir"ió mucho de parteaguas para el entendimiento en general de la herramienta de programación para AVR Atmel 6tudio así como el mane%o y comprensión de la estructura general del integrado AVR @:&. onsidero !ue este práctica fue de suma utilidad para poder in"olucrarnos lo suficiente dentro del entorno de los microcontroladores para así poder desarrollar futuros proyectos de mayor comple%idad. &or Eael 6ebastian Cedina orres
-n la practica 8 se pudo apreciar y conocer a fondo los conceptos basicos y lo necesario para poder utilizar el AVR AC-FA@:&, pudimos hacer uso del programador por primera "ez y su funcionamiento. =ue la primera practica para poder familiarizarnos con la programacion en ensamblador con los fundamentos para poder realizar futuras practicas. arlos Frande Roldán
Ane#o conclusión &ráctica : &ara esta práctica, pude darme cuenta del uso general de las 0nterrupciones dentro del lengua%e ensamblador mediante la herramienta de utilización Atmel 6tudio. Cediante la práctica, al traba%ar con el uso del timer en sus diferentes configuraciones como lo son G"er'=lo;, fast &HC o , pude darme cuenta de la utilidad !ue estas tienen dentro de la programación de nuestro integrado @:&. 6in duda considero !ue el mane%o de estas instrucciones es una parte fundamental !ue debemos mane%ar para la programación en AVR. &or Eael 6ebastian Cedina orres -n la segunda practica se estudio el mane%o de la interrupción timer , !ue es muy util cuando se tiene un con%unto de codigo !ue se tiene !ue e%ecutar cada determinado tiempo , mientras !ue en el codigo principal puede seguir e%ecutando y cuando se llama a la interrupcion regresa al mismo momento !ue fue llamado. ambien se hace el uso de &HC para poder "ariar la intensidad y frecuencia. arlos Frande Roldán