Post on 06-Feb-2018
DEPARTAMENTO DE TECNOLOGA ELECTRNICAESCUELA TCNICA SUPERIOR DE INGENIERA INFORMTICA
Introduccin a AVR-STUDIO
Microprocesadores
1.Introduccin y objetivosLos objetivos de la sesin de laboratorio son los siguientes:
Introducir el entorno de programacin y depuracin de microcontroladores de ATMEL1 llamado AVR-STUDIO.
Realizar la simulaciones de programas escritos en lenguaje ensamblador para el microcontrolador
ATMEGA328P.
Depuracin de programas con el AVR Simulator.
Estudiar los procesos para la programacin del microcontrolador del Arduino Duemilanove usando la
plataforma AVR-DRAGON.
Realizar la programacin, depuracin de programas y control del microcontrolador desde AVR-STUDIO.
AVR-STUDIO puede descargarse gratuitamente de desde las pginas del fabricante de ATMEL en
http://www.atmel.com.
2.Estudio tericoSe deben realizar tres programas en lenguaje ensamblador. En el primero se pide desarrollar un programa que
permita el clculo sobre un conjunto de elementos almacenados en la SRAM. Los dos restantes requieren el manejo de
la entrada-salida y se detallarn a continuacin.
1.Programa MEDIANA: Realizar un programa en ensamblador que permita calcular la MEDIANA a una tabla de bytes
con signo que se ubica a partir de la direccin tabla de la SRAM. El resultado se guarda en la SRAM a continuacin de la tabla. Para la realizacin de este programa el alumno deber, primero, desarrollar una subrutina que permita ordenar
la tabla siguiendo el algoritmo que se muestra a continuacin.
1 Fabricante de microcontroladores, ms informacin en http://www.atmel.com
http://www.dte.us.es/http://www.atmel.com/http://www.atmel.com/
Estructura de Computadores 2
Cdigo 1. Pseudocdigo del programa ordena
La mediana se calcula busca el elemento central de la tabla ordenada. Si el nmero de elementos de la tabla es impar,
la mediana es el valor que se encuentra en la mitad de la tabla, pero si el nmero de elementos es par, la mediana se
obtiene como el valor medio de los dos valores centrales de la tabla. Complete la plantilla que se muestra a
continuacin.
.include "m168def.inc"
.equ TAMTABLA=..... //Tamao de la tabla.
.def Temp=r16
.cseg
.org 0
call IniciaTabla //Esta llamada carga la tabla de la EEPROM a la SRAM
call Mediana
fin: jmp fin //Para terminar
Mediana:call Ordena
/* Aqu va el programa Mediana */
Ordena:/*Aqu va el programa de ordenacin */
........IniciaTabla:
push r0 push temppush ylpush yhpush zlpush zh
ldi zl, low(2*TablaEeprom)
Num_Rep TamTabla Repetir X DireccinTabla Y DireccinTabla+1 Num_Rep Num_Rep -1 Cont Num_Rep Ordenado 0 Repetir a (X)
b (Y) si (a < b)
(X) b (Y) a Ordenado 1
fsi X X +1 Y Y +1
Cont Cont -1 Mientras ( Cont > 0) Mientras (Ordenado == 1)
Estructura de Computadores 3
ldi zh, high(2*TablaEeprom)ldi yl, low(Tabla)ldi yh, high(Tabla)ldi temp,TAMTABLA
loop: lpm r0,Z+st Y+,r0subi temp,1brne loop
pop zhpop zlpop yhpop ylpop temppop r0
ret
TablaEeprom: .db 10, 4, -1, 0 , 0, 6, 3, 10, 100, -100, 24, 23, -56, 4, 15, 16 ;Modifique los datos
.dseg
.org $100Tabla: .byte TamTabla //Reservamos 10 bytes para los datos..
Cdigo 2. Cdigo del programa Mediana.
2. Conmutadores. Se pretende realizar un programa que permita manejar los puertos de entrada salida. En concreto, se
trata de activar los leds cuando se pulsa un conmutador.
En el esquema de la figura 9 aparecen dos leds y dos conmutadores que debe operar de la siguiente forma: cuando se
pulse el conmutador conectado a PC5 debe encenderse el led conectado a PC2 y mantenerse encendido hasta que se
vuelva a pulsar el conmutador. Adems, al pulsar el conmutador conectado a PC4 se encender el led conectado a PC3
y permanecer encendido hasta que se pulse nuevamente el conmutador. La tabla 1 muestra los puertos y los bits
asociados a los componentes as como la configuracin necesaria para que operen correctamente.
Puerto Bit Componente Configuracin Funcionamiento
PORTC 2 Led Como salida DDRC2=1 PC2=0 apagadoPC2=1 encendido
PORTC 3 Led Como salida DDRC3=1 PC3=0 apagadoPC3=1 encendido
PORTC 4 Conmutador Como entrada DDRC4=0 PC4=1 no pulsadoPC4=0 pulsado
PORTC 5 Conmutador Como entrada DDRC5=0 PC5=1 no pulsadoPC5=0 pulsado
Tabla 1. Configuracin de los puertos e/s de los leds y conmutadores
Utilizando el la plantilla de cdigo (fichero conmutadores.asm) debe realizar la siguientes tareas:
1.Cree un nuevo proyecto utilizando el cdigo suministrado en el fichero conmutadores.asm y complete el programa.
2.Utilice el simulador para comprobar que funciona correctamente. Debe conmutar manualmente los pines PC4 y PC5
Estructura de Computadores 4
desde el simulador. Esto se consigue desplegando el puerto C en rbol de dispositivos que muestra el AVR-STUDIO en
la parte derecha durante la simulacin y pulsando el botn del ratn sobre el cuadro que representa el bit
correspondiente. Cuando el cuadro est relleno de color negro significara que el bit est a 1, si est en blanco es 0.
3.Una vez comprobado en el simulador el correcto funcionamiento, repita los pasos realizados en la seccin 11 para
programar el microcontrolador con este nuevo programa. Compruebe que funciona correctamente pulsando los
conmutadores.
3. Programa contador de pulsaciones. El nuevo programa a completar debe contar el nmero de pulsaciones de un
conmutador y mostrarlo en el display 7 segmentos. Habr que completar tres fragmentos de cdigo; el primero es la
inicializacin correcta de los puertos, el segundo es una subrutina que crea una tabla en memoria con el cdigo 7
segmentos y, el tercero es el programa principal.
La tabla 2 muestra la informacin de los componentes de entrada/salida que se usarn. Se incluyen los puertos, los bits
asociados a los componentes as como la configuracin necesaria para que operen correctamente.
Puerto Bit Componente Configuracin Funcionamiento
PORTD 0-7 Segmentos de los displays Como salida DDRD=0xFF; PORTDX=0 apagadoPORTDX=1 encendido
PORTB 0 Display 0 Como salida DDRB0=1 PORTB0=1 apagadoPORTB0=0 encendido
PORTB 1 Display 1 Como salida DDRB1=1 PORTB1=1 apagadoPORTB1=0 encendido
Tabla 2. Configuracin de los puertos e/s de los displays 7 segmentos.
Utilizando el fichero contador_bcd.asm mostrado en el listado de cdigo 3 debe realizar las siguientes tareas:
1.Completar la subrutina de inicializacin de puertos llamada inicializa_puertos. Puede utilizar como ejemplo de
inicializacin la utilizada en el programa de la seccin anterior (listado de cdigo ). Debe inicializar los puertos con la
siguiente configuracin:
1.1.En el puerto C los pines 3 y 2 deben ser salidas, el resto deben ser entradas
1.2.El puerto D est conectado a los segmentos del display, deben ser todos salida.
1.3.El puerto B controla el encendido o apagado completo de cada uno de los dos displays. Debe configurarlo como
salida, as, poniendo un 1 en PORTB0 se activar el display 0 y poniendo un 1 en PORTB1 se activar el display 1.
2.Completar la subrutina que crea una tabla para el convertidor de 7 segmentos llamada inicializa_tabla7seg. Esta tabla
contiene los cdigos 7 segmentos de los dgitos 0 9. Al escribir un elemento de esta tabla en el puerto D aparecer un
nmero BCD en los displays. Como ejemplo se muestran 2 nmeros, donde se puede observar la correspondencia de
los bits a uno con la activacin de los segmentos mostrados en la figura 12. Complete los nmeros que faltan, del 2 al 9.
3.El bucle principal del programa comienza a partir de la etiqueta bucle. Aqu debe escribir el programa que cuente las
pulsaciones detectadas en un conmutador. El programa se puede realizar siguiendo estos pasos:
3.1.Escribir un bucle que espere hasta detectar que el conmutador se ha pulsado. Un valor 1 en el p correspondiente al
conmutador indica que se ha pulsado.
3.2.Tras detectar la pulsacin hay que incrementar el contador en 1
3.3.Comprobar si el contador ha llegado a 10 para ponerlo de nuevo a cero.
Estructura de Computadores 5
3.4.Esperar en un bucle hasta que se suelte en botn, fjese que este fragmento de cdigo ya est hecho y corresponde
a la etiqueta espera.
4.Construya el programa y programe el microcontrolador para comprobar si funciona. Si no opera correctamente puede
utilizar el simulador para detectar los errores. Tenga en cuenta que a veces existen problemas de rebotes en los
conmutadores, esto significa que, al pulsar una vez el conmutador se detectan varias pulsaciones y el valor mostrado en
el display se incrementa en ms de una unidad.
.include "m328pdef.inc"
.def temp = r16 /* Define un registro para uso temporal se ha utilizado el r16 para poder emplear los modos con direccionamiento indirecto.*/
.def contador = r17 // Cuenta el nmero de pulsaciones
.def cero= r18
.dseg
.org $100
TABLA7SEG: .byte 10 // Se reservan 10 bytes para una tabla de valores del convertidor bin7seg .cseg
.org $0
rcall inicializa_puertos // Rutina que inicializa los puertos rcall inicializa_tabla7seg // Rutina que inicializa la tabla del convertidor
bu