SECCION ELECTRICIDAD Y ELECTRONICA I EE 256 SI STEMAS DI GI TALES - LABORATORI O SEMESTRE 2012-1 Pgina 1 LABORATORIO 2
Programacin empleando las instrucciones del microcontrolador. Manejo de arreglos en memoria RAM
I. OBJETIVO
Aprender a programar el microcontrolador ATmega8, utilizando instrucciones cada vez ms complejas.
Comprender el concepto de registros y arreglos en memoria SRAM. Desarrollar programas donde se emplean registros de SRAM.
II. MATERIALES Y EQUIPOS
1 mdulo de entrenamiento AvrPUCP -Mega8. 1 mdulo de E/S 1 Cable de programacin ISP 1 computadora personal 1 Fuente de alimentacin Cables de fuente y de E/S
III. HERRAMIENTAS DE DESARROLLO
VMLAB v3.15 AVRPUCP v0.96
IV. PROCEDIMIENTO
En el laboratorio se utilizar las instrucciones que hacen uso del espacio de datos del microcontrolador ATmega8, que contiene a los 32 registros de propsito general (R0 al R31), a los 64 registros de E/S (desde $20 al $5F) y a los 1024 registros que componen la memoria SRAM (entre $0060 y $045F), tal como se observa en la Figura 1.
Figura 1: Espacio de datos
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA I EE 256 SI STEMAS DI GI TALES - LABORATORI O SEMESTRE 2012-1 Pgina 2 Se debe considerar que los registros R26 y R27 forman el registro X de 16 bits, los registros R28 y R29 forman el registro Y de 16 bits y los registros R30 y R31 forman el registro Z de 16 bits, tal como se observa en la Figura 2.
Figura 2
Las instrucciones que se utilizan son del modo de direccionamiento directo e indirecto para el espacio de datos tales como: LDS, STS, LD, ST
En el modo de direccionamiento indirecto con pre-decremento: El registro X, Y o Z es decrementado antes de la operacin. La direccin del operando es el nuevo contenido del registro X, Y Z. Ejemplo: LD R16,-Z ST Z,R16
En el modo de direccionamiento con Post-Incremento: El registro X, Y o Z es incrementado despus de la operacin. Ejemplo:
LD R16,Z+ ST Z+,R16
Arreglos en SRAM
Los arreglos son colecciones de datos, generalmente del mismo tipo, que ocupan posiciones consecutivas en la memoria de datos, el tamao reservado para un arreglo siempre se mantiene a lo largo del programa. La memoria misma del ATMEGA8 y de cualquier otro microcontrolador es un arreglo de celdas que guardan informacin, cuyo ndice es la direccin de la celda
Para reservar espacio de memoria en la memoria de datos del microcontrolador ATMEGA8 usamos la directiva .byte, ejemplo:
.ORG $60 Arreglo: .BYTE $0F ; Indica que reservamos 15 posiciones de memoria
Para escribir o leer del arreglo (acceder al arreglo), se hace necesario el uso de ndices que nos permitan recorrer al arreglo, el microcontrolador ATMEGA8 nos proporciona 3 registros ndices para lograr ese cometido, estos son X(R26, R27), Y(R28, R29) y Z(R30, R31).
Adems las instrucciones ld, ldd, st y std nos permiten recorrer el arreglo en ambos sentidos, en sentido creciente (+) y en sentido decreciente (-), como se describi anteriormente.
Es posible simular tipos de datos ms complejos que los almacenados por los bytes a partir de conjuntos de bytes, de hecho los lenguajes de alto nivel simulan sus tipos de datos primitivos a partir de bytes individuales con diferentes estructuras.
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA I EE 256 SI STEMAS DI GI TALES - LABORATORI O SEMESTRE 2012-1 Pgina 3 Ejemplo 1 Se desea hallar los trminos de una progresin aritmtica creciente de nmeros enteros de 20 hasta 120, con razn igual a 10. Los trminos se observan en un panel de LEDs y se utiliza un pulsador para mostrar cada trmino (el pulsador debe ser presionado y soltado). Conexiones: 01 pulsador conectado al pin PD7 08 diodos LED conectados al puerto B
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA I EE 256 SI STEMAS DI GI TALES - LABORATORI O SEMESTRE 2012-1 Pgina 4 c. Diagrama de flujo
INICIO Configurar puertos de entrada y salida cuenta 20 Mostrar cuenta Se presion y solt el pulsador? cuenta cuenta + 10 cuenta > 120? NO SI FIN SI NO
d. Programa
; **************************************************************************** ; Nombre del programa: Progresin_aritmtica.asm ; Semestre: 2010.1 ; Autor: Zenn Cucho ; Descripcin: El programa muestra una progresin aritmtica creciente de ; nmeros enteros de 20 a 120, con razn igual a 10. ; Conexiones: Pulsador al puerto PD7 ; Diodos leds al puerto B ; ****************************************************************************
.include "C:\VMLAB\include\m8def.inc"
;Uso de directivas .equ y .def .equ razon = 10 ; razn aritmtica .def utermino = R24 ; ltimo trmino de la serie
.dseg .org $60 cuenta: .byte 1 ;reservamos el espacio de memoria $60
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA I EE 256 SI STEMAS DI GI TALES - LABORATORI O SEMESTRE 2012-1 Pgina 5 .cseg .org 0 rjmp inicio inicio:
; Configurar puertos B y D ldi r16, 0b00000000 ; Puerto D como entrada out ddrd, r16 ldi r16, 0b11111111 ; Puerto B como salida out ddrb, r16 ldi utermino, 20 ; valor inicial igual a 20 out portb, utermino sts cuenta,utermino ; guarda en SRAM
;Espera que presione y libere el pulsador conectado a PD7 ; uso de la instruccin sbis y sbic EsperaPulso: sbis PIND,7 rjmp EsperaPulso EsperaSoltar: sbic PIND,7 rjmp EsperaSoltar
;Muestra los trminos de la serie de 20 hasta 120 lds utermino,cuenta cpi utermino,120 brlo SiguienteTermino ldi utermino,20 ; valor inicial rjmp salida SiguienteTermino: ldi r17,razon add utermino,r17 salida: out portb, utermino ;visualiza valor sts cuenta,utermino ;almacena siguiente trmino rjmp EsperaPulso
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA I EE 256 SI STEMAS DI GI TALES - LABORATORI O SEMESTRE 2012-1 Pgina 6 Ejemplo 2 Escriba un programa que calcule el mximo comn divisor (MCD) segn el siguiente mtodo: El MCD de dos nmeros se obtiene dividiendo el mayor de los nmeros dados por el menor. Si la divisin es exacta, el menor es el MCD; si es inexacta, se divide el divisor por el residuo. Lo anterior se repite hasta obtener una divisin exacta, siendo el ltimo divisor el MCD. Se emplearn 04 interruptores y 01 pulsador para el ingreso de los dos nmeros. Conexiones: 01 pulsador conectado al pin PD7 04 interruptores conectados a los pines PD3 .. PD0 08 diodos LED conectados al puerto B
D6 VDD N10 R6 N10 N11 330 X6 ND2 PB5 PB5 N11 PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA I EE 256 SI STEMAS DI GI TALES - LABORATORI O SEMESTRE 2012-1 Pgina 7 D7 VDD N12 R7 N12 N13 330 X7 ND2 PB6 PB6 N13
D8 VDD N14 R8 N14 N15 330 X8 ND2 PB7 PB7 N15
c. Diagrama de flujo
INICIO Configurar puertos de entrada y salida Se presion y solt el pulsador? NO Leer num1 Se presion y solt el pulsador? NO Leer num2 may num1 men num2 1 1 may men? may num2 men num1 res Residuo (may / men) res = 0? may men men res Mostrar men FIN SI SI NO NO SI SI
d. Programa
;****************************************************************************** ;*Nombre: MCD.asm ;*Autor: Ing. Freri Orihuela Q. ;*Descripcin: Calcula el Mximo Comn Divisor de dos nmeros ;*Entrada: nmeros de 4 bits (PD3 .. PD0) ;*Salida: MCD en 8 LEDs (PB7 .. PB0) ;******************************************************************************
.include "C:\VMLAB\include\m8def.inc"
.DSEG .ORG $60 mayor: .byte 1 ;Numero mayor menor: .byte 1 ;Numero menor MCD: .byte 1 ;Resultado
; Programa principal .CSEG .ORG $0 rjmp Inicio PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA I EE 256 SI STEMAS DI GI TALES - LABORATORI O SEMESTRE 2012-1 Pgina 8
Inicio: ; Configurar puertos B y D ldi r16, 0b00000000 ;PD0 .. PD3 (interruptores) ;PD7 (pulsador) como entrada out DDRD, r16 ldi r16, 0b10001111 out PORTD, r16 ldi r16, 0b11111111 ;Puerto B como salida: LEDs out DDRB, r16
EsperaPulso1: sbis PIND,7 ;Espera que presione y libere ;el pulsador conectado a PD7 rjmp EsperaPulso1 EsperaSoltar1: sbic PIND,7 rjmp EsperaSoltar1
in R16, PIND ;Lectura del primer nmero (4 bits) andi R16, 0b00001111
EsperaPulso2: sbis PIND,7 ;Espera que presione y libere ;el pulsador conectado a PD7 rjmp EsperaPulso2 EsperaSoltar2: sbic PIND,7 rjmp EsperaSoltar2
in R17, PIND ;Lectura del segundo nmero (4 bits) andi R17, 0b00001111
sts mayor, R16 ;mayor <-- primer nmero ledo sts menor, R17 ;menor <-- segundo nmero ledo
cp R16, R17 ;Si mayor >= menor ir a Divide brsh Divide ;En caso contrario intercambiar valores
sts mayor, R17 ;menor <-- primer nmero ledo sts menor, R16 ;mayor <-- segundo nmero ledo
;Divisin por restas sucesivas ;Dividendo = mayor (R16) ;Divisor = menor (R17) Divide: ldi R18, 0 ;Cociente, valor inicial = 0 (R18) lds R16, mayor lds R17, menor Resta_Sucesiva: cp R16, R17 brlo Analiza_Resto
inc R18 sub R16, R17 ;Dividendo <-- Dividendo - Divisor rjmp Resta_Sucesiva Analiza_Resto: cpi R16, 0 ;Se analiza el residuo breq Fin
Fin: lds R17, menor ;Se muestra el MCD (menor) out PORTB, R17
Espera: rjmp Espera
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA I EE 256 SI STEMAS DI GI TALES - LABORATORI O SEMESTRE 2012-1 Pgina 9 Ejemplo 3 Se desea calcular los trminos de una serie que siga las siguientes reglas de formacin: El trmino de posicin par es igual a la suma de los 2 trminos de posicin impar anteriores El trmino de posicin impar es igual a la suma de los 2 trminos de posicin par anteriores Los primeros trminos de la serie sern 1, 2 y 3 Se empelarn 04 interruptores y 01 pulsador para el ingreso de la cantidad de trminos de la serie. La cantidad de trminos de la serie ser como mximo 12; en caso de ingresarse un nmero mayor, se activar un indicador luminoso como mensaje de error. Luego de haber calculado todos los trminos de la serie, debern ser mostrados en los LEDs, empleando el pulsador, el cual debe ser presionado y soltado. Conexiones: 01 pulsador conectado al pin PD7 04 interruptores conectados a los pines PD3 .. PD0 08 diodos LED conectados al puerto B
Solucin: a. Diagrama esquemtico: Ver ejemplo anterior.
b. Contenido del archivo de proyecto (*.prj): Ver ejemplo anterior.
c. Diagrama de flujo
INICIO Configurar puertos de entrada y salida Se presion y solt el pulsador? NO Leer num_term num_term < 13? NO i 0 1 1 Mostrar serie[i] FIN SI SI Valores iniciales serie[0] 1 serie[1] 2 serie[2] 3 i i + 1 Se termin de generar la serie? NO SI 2 2 i 0 Se presion y solt el pulsador? NO SI i i + 1 Se termin de mostrar la serie? NO SI Encender LEDs Apagar LEDs Apagar LEDs serie[i+3] serie[i] + serie[i+2]
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA I EE 256 SI STEMAS DI GI TALES - LABORATORI O SEMESTRE 2012-1 Pgina 10
d. Programa
; ******************************************************************* ; Nombre : serie1.asm ; Autor : Martn Arbail Martinez , Semestre : 2009.1 ; Descripcin: Muestra los trminos de una serie grabada en SRAM ; *******************************************************************
ldi r16, 0b00000000 ;configuramos los puertos out ddrd, r16
ldi r16, 0b11111111 out ddrb, r16 out portd, r16 ldi r16, 0b00000000 ;apagamos los leds out portb, r16 librei: ;verificamos que el pulsador sea in r17, pind ;presionado y soltado andi r17, 0b10000000 cpi r17, 0 breq librei
presionadoi: in r17, pind andi r17, 0b10000000 cpi r17, 0 brne presionadoi
in r17, pind andi r17, 0b00001111 cpi r17, 13 ;verificamos que la cantidad de trminos brlo terminosok ;a calcular sea como mximo 12
ldi r16, 0b11111111 ;prendemos todos los leds out portb, r16 ;como mensaje de error rjmp librei
terminosok: sts terminos, r17 ;almacenamos la cantidad de trminos ldi r16, 0b00000000 ;apagamos nuevamente los leds para el out portb, r16 ;caso de un mensaje de error previo
ldi XL, low(serie) ;inicializamos el puntero X ldi XH, high(serie)
ldi r16, 1 ;guardamos los valores iniciales de st X+, r16 ;la serie ldi r16, 2 st X+, r16 ldi r16, 3 st X+, r16
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA I EE 256 SI STEMAS DI GI TALES - LABORATORI O SEMESTRE 2012-1 Pgina 11
ldi XL, low(serie) ;inicializamos los punteros para el calculo ldi XH, high(serie) ldi YL, low(serie+2) ldi YH, high(serie+2) ldi ZL, low(serie+3) ldi ZH, high(serie+3)
ldi r18, 0 calculo: ld r16, X+ ld r17, Y+ add r16,r17 ;calculamos el termino n st Z+, r16 ;y lo almacenamos inc r18 lds r16, terminos subi r16, 3 cp r18, r16 ;verificamos que hemos calculado todos los brge muestra ;trminos rjmp calculo muestra: ldi XL, low(serie) ;apuntamos X al inicio de la serie ldi XH, high(serie)
ldi r18, 0 librem: ;mostramos los trminos de la serie luego in r17, pind ;de presionar y soltar el pulsador andi r17, 0b10000000 cpi r17, 0 breq librem presionadom: in r17, pind andi r17, 0b10000000 cpi r17, 0 brne presionadom
ld r16, X+ out portb, r16 inc r18 lds r16, terminos cp r18, r16 brge fin rjmp librem
fin: rjmp fin
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA SECCION ELECTRICIDAD Y ELECTRONICA I EE 256 SI STEMAS DI GI TALES - LABORATORI O SEMESTRE 2012-1 Pgina 12
Programas Propuestos
Pregunta 1 Se desea leer una secuencia de nmeros de 4 bits cada uno, empleando 4 interruptores y un primer pulsador (debe ser presionado y soltado). Separar los valores pares de los impares, almacenndolos en arreglos distintos. A continuacin, a travs de un juego de cuatro LEDs, se deben mostrar, uno a uno, cada nmero almacenado. Usando un segundo pulsador, se muestra la secuencia de nmeros pares; con un tercer pulsador, se muestran los nmeros impares. El proceso finaliza una vez que se hayan mostrado todos los valores almacenados. Dibuje el diagrama esquemtico, elabore el diagrama de flujo y escriba el programa correspondiente. Conexiones: 03 pulsadores conectados a los pines PD0, PD1 y PD2 04 interruptores conectados a los pines (MSbit) PC5, PC4, PC3 y PC2 (LSbit) 04 diodos LED conectados a los pines (MSbit) PB3, PB2, PB1, PB0 (LSbit)
Pregunta 2 Se desea leer una secuencia de datos (formato BCD de 4 bits), empleando 4 interruptores y un pulsador (debe ser presionado y soltado). Cada valor debe ser mostrado en cuatro LEDs antes de ser ledo. Se espera que el usuario ingrese la serie Fibonacci. Si falla, se encendern todos los LEDs indicando error. Luego de presionar y soltar el pulsador, se reiniciar el ingreso. Dibuje el diagrama esquemtico, elabore el diagrama de flujo y escriba el programa correspondiente. Conexiones: 01 pulsadores conectados al pin PD2 04 interruptores conectados a los pines (MSbit) PC5, PC4, PC3 y PC2 (LSbit) 04 diodos LED conectados a los pines (MSbit) PB3, PB2, PB1, PB0 (LSbit)
Pregunta 3 Se desea leer una secuencia de datos (formato BCD de 4 bits) sin repeticiones, los cuales deben ser almacenados en un arreglo. Al leer el valor 1111 2 , terminar el ingreso. A continuacin, deber mostrarse cada nmero almacenado, empleando un pulsador. Dibuje el diagrama esquemtico, elabore el diagrama de flujo y escriba el programa correspondiente. Conexiones: 01 pulsadores conectados al pin PD2 04 interruptores conectados a los pines (MSbit) PC5, PC4, PC3 y PC2 (LSbit) 04 diodos LED conectados a los pines (MSbit) PB3, PB2, PB1, PB0 (LSbit)
Pregunta 4 En el problema anterior, ordenar el arreglo de menor a mayor antes de mostrar los datos. Dibuje el diagrama esquemtico, elabore el diagrama de flujo y escriba el programa correspondiente.