Вы находитесь на странице: 1из 12

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 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

Solucin:
a. Diagrama esquemtico


b. Contenido del archivo de proyecto (*.prj)

K7 VDD PD7 ; pulsador K7 en PD7
R9 PD7 VSS 10K

; Panel de LEDs D8-D1
D1 VDD N0 ; LED / Resistencia / Inversor (NAND)
R1 N0 N1 330
X1 ND2 PB0 PB0 N1

D2 VDD N2
R2 N2 N3 330
X2 ND2 PB1 PB1 N3

D3 VDD N4
R3 N4 N5 330
X3 ND2 PB2 PB2 N5

D4 VDD N6
R4 N6 N7 330
X4 ND2 PB3 PB3 N7

D5 VDD N8
R5 N8 N9 330
X5 ND2 PB4 PB4 N9

D6 VDD N10
R6 N10 N11 330
X6 ND2 PB5 PB5 N11

D7 VDD N12
R7 N12 N13 330
X7 ND2 PB6 PB6 N13

D8 VDD N14
R8 N14 N15 330
X8 ND2 PB7 PB7 N15

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

Solucin:
a. Diagrama esquemtico


b. Contenido del archivo de proyecto (*.prj)

K7 VDD PD7 ; pulsador K7 en PD7
R9 PD7 VSS 10K

K3 VSS PD3 LATCHED ; pulsadores en PD3 .. PD0
K2 VSS PD2 LATCHED
K1 VSS PD1 LATCHED
K0 VSS PD0 LATCHED

;Panel de LEDs D8-D1
D1 VDD N0
R1 N0 N1 330
X1 ND2 PB0 PB0 N1

D2 VDD N2
R2 N2 N3 330
X2 ND2 PB1 PB1 N3

D3 VDD N4
R3 N4 N5 330
X3 ND2 PB2 PB2 N5

D4 VDD N6
R4 N6 N7 330
X4 ND2 PB3 PB3 N7

D5 VDD N8
R5 N8 N9 330
X5 ND2 PB4 PB4 N9

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

sts mayor, R17 ;mayor <-- menor
sts menor, R16 ;menor <-- residuo
rjmp Divide ;Continua dividiendo

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
; *******************************************************************

.include "d:\VMLAB\include\m8def.inc"

.equ sram = $60

.dseg
.org sram
terminos: .byte $1 ;reservamos espacios de memoria
serie: .byte $f

.cseg
.org 0
rjmp start
start:

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.






Actualizacin: abril de 2012

Вам также может понравиться