Está en la página 1de 10

ESCUELA POLITCNICA NACIONAL

FACULTAD DE INGENIERA ELCTRICA Y ELECTRNICA

Laboratorio de Sistemas Microprocesados

X INFORME TRABAJO PREPARATORIO

Prctica #: _4_
Tema: Utilizacin de las herramientas de simulacin del PROTEUS con los microcontroladores
ATmega164P

Realizado por:

Alumno (s): Margarita Ruiz Proao Grupo: GR-5

(Espacio Reservado)
Fecha de entrega: 2016 / 06 / 06 f. _________________________
Ao mes da Recibido por:

Sancin: ____________________________________________________

PERODO
2016 A
1) Realizar lo que el instructor solicite. Realizar un programa que nos muestre que
numero es mayor, intermedio o menor.

.include "m164pdef.inc"
.def cont = r16
.def tempo = r17
.def mayor = r18
.def intermedio = r19
.def menor = r20

.dseg
numeros: .byte 3
nummayor: .byte 1
nummedio: .byte 1
nummenor: .byte 1

.cseg

.org 0x00

ldi xh,high(numeros) ; inicilizamos el puntero x


ldi xl,low(numeros)

ldi tempo,5 ;definimos valores


st x+,tempo ; se guarda el valor del registro tempo en el puntero x \
;pero apunta a la siguiente direccion

ldi tempo,8
st x+,tempo
ldi tempo,15
st x+,tempo

ldi cont,2 ; Cargamos el contador en 2

ld mayor,-x ;nos permite guardar el mayor numero de tres valores

Lazo:
ld tempo,-x
cp mayor,tempo ; compara los dos numeros
brcs cambio ; si se prende el carry tempo es mayor, si no se prende
sigue la siguiente lnea

dec cont ; analiza el siguiente numero


brne lazo ; si no son iguales va a lazo
rjmp salir

cambio:
mov mayor,tempo; al ser mayor tempo se coloca en mayor
dec cont
breq salir
rjmp lazo
salir:
sts nummayor,mayor ; Guarda el numero mayor
; aqui se guarda el numero intermedio

ldi xh,high(numeros)
ldi xl,low(numeros)

ldi cont,2
ld intermedio,x+

lazo1:
ld tempo, x+
cp intermedio,tempo
brcc cambio2
brcs cambio3
cambio2:
mov intermedio,tempo
ld tempo,x+
cp tempo,intermedio
brcc medio
rjmp medio1
cambio3:
mov intermedio,tempo
ld tempo,x+
cp intermedio,tempo
brcs medio1
rjmp medio
medio:
sts nummedio,tempo
rjmp programa
medio1:
sts nummedio,intermedio

programa:

; El siguinte codigo nos permite guardar el menor numero de tres


ldi xh,high(numeros)
ldi xl,low(numeros)

ldi cont,2
ld menor,x+

lazo2:
ld tempo,x+
cp menor,tempo
brcc cambio4
dec cont
brne lazo2
rjmp salir2

cambio4:
mov menor,tempo
dec cont
breq salir2 ; cuado el contador ha llegado a cero va a la etiqueta
salir2
rjmp lazo2
salir2:
sts nummenor,menor ; numero menor

fin:
rjmp fin

`
PARA MOISTRAR EN LOS DISPLAY ES NECESARIO REALIZAR
UN BARRIDO
.include "m164pdef.inc"
.def cont = r16
.def tempo = r17
.def mayor = r18
.def intermedio = r19
.def menor = r20
.def contador=r21
.dseg
numeros: .byte 3
nummayor: .byte 1
nummedio: .byte 1
nummenor: .byte 1
temph: .byte 1
templ: .byte 1

Binariol: .byte 1
Binarioh: .byte 1
Bcd0: .byte 1
Bcd1: .byte 1
Bcd2: .byte 1
Bcd3: .byte 1
Dig0: .byte 1
Dig1: .byte 1
Dig2: .byte 1
Dig3: .byte 1

.cseg
.org 0x0

//ddr
ldi tempo,0b00000000
out ddrb,tempo
ldi tempo,0b01111111
out ddra,tempo
ldi tempo,0b00001111
out ddrc,tempo

//port
ldi tempo,0b11111111
out portb,tempo
ldi tempo,0b10000000
out porta,tempo
ldi tempo,0b11110000
out portc,tempo

// ramend
ldi tempo,high(ramend)
out sph,tempo
ldi tempo,low(ramend)
out spl,tempo
fin:
ldi xh,high(numeros) ; inicilizamos el puntero x
ldi xl,low(numeros)

ldi tempo,5 ;definimos valores


st x+,tempo ; se guarda el valor del registro tempo en el puntero x \
;pero apunta a la siguiente direccion

ldi tempo,8
st x+,tempo
ldi tempo,15
st x+,tempo

ldi cont,2 ; Cargamos el contador en 2

ld mayor,-x ;nos permite guardar el mayor numero de tres valores

Lazo:
ld tempo,-x
cp mayor,tempo ; compara los dos numeros
brcs cambio ; si se prende el carry tempo es mayor, si no se prende
sigue la siguiente linea
dec cont ; analiza el siguiente numero
brne lazo ; si no son iguales va a lazo
rjmp salir

cambio:
mov mayor,tempo; al ser mayor tempo se coloca en mayor
dec cont
breq salir
rjmp lazo

salir:
sts nummayor,mayor ; Guarda el numero mayor

; aqui se guarda el numero intermedio


ldi xh,high(numeros)
ldi xl,low(numeros)

ldi cont,2
ld intermedio,x+

lazo1:
ld tempo, x+
cp intermedio,tempo
brcc cambio2
brcs cambio3
cambio2:
mov intermedio,tempo
ld tempo,x+
cp tempo,intermedio
brcc medio
rjmp medio1
cambio3:
mov intermedio,tempo
ld tempo,x+
cp intermedio,tempo
brcs medio1
rjmp medio
medio:
sts nummedio,tempo
rjmp programa
medio1:
sts nummedio,intermedio

programa:

; El siguinte codigo nos permite guardar el menor numero de tres


ldi xh,high(numeros)
ldi xl,low(numeros)

ldi cont,2
ld menor,x+

lazo2:
ld tempo,x+
cp menor,tempo
brcc cambio4
dec cont
brne lazo2
rjmp salir2

cambio4:
mov menor,tempo
dec cont
breq salir2 ; cuado el contador ha llegado a cero va a la etiqueta
salir2
rjmp lazo2

salir2:
sts nummenor,menor ; numero menor

ldi xl,low(nummayor)
ldi xh,high(nummayor)
ldi contador,3

mostrar:
ld r16,x+

call Bin_bcd
call Bcd_7seg
call Barrido4
dec contador
brne mostrar

rjmp fin
Bin_bcd:

push r16
push r17
push r18

ldi r19,100

Centenas1:

sub r16,r19
brcs Decenas
inc r17; valor de centenas
rjmp Centenas1

Decenas:
add r16,r19; recupero el valor normal
sts Bcd2,r17
clr r17

Decenas1:
subi r16,10
brcs Unidades
inc r17
rjmp Decenas1

Unidades:
subi r16,-10
sts Bcd0,r16
sts Bcd1,r17

pop r18
pop r17
pop r16
ret

Bcd_7seg:
push r16
in r16,sreg // guardo variables de entrada
push r16
push r17
push zh
push zl
push xh
push xl
push yh
push yl

ldi r17,7
ldi xh,high(Bcd0)
ldi xl,low(Bcd0)
ldi yh,high(Dig0)
ldi yl,low(Dig0)

Bcd7seg_1:
ld r16,x+
ldi zh,high(Tabla_7seg<<1)
ldi zl,low(Tabla_7seg<<1)

add zl,r16
clr r16
adc zh,r16
lpm r16,z

st y+,r16
dec r17
brne Bcd7seg_1

pop yl
pop yh
pop xl
pop xh
pop zl
pop zh
pop r17
pop r16
out sreg,r16 // guardo variables de entrada
pop r16

ret

Barrido4:
push r16
in r16,sreg // guardo variables de entrada
push r16
push r17
push r18
push xh
push xl

Ldi r17,4
ldi r18,0b11111110
ldi xh,high(dig0)
ldi xl,low(dig0)
ldi r16,0b10000000
out porta,r16 //Eligo el puerto a salir

barrido_1:
ld r16,x+
out porta,r16
out portc,r18
rcall retardo
ldi r16,0b11111111
out portc,r16
sec
rol r18
dec r17
brne barrido_1

pop r18
pop xl
pop xh
pop r17
pop r16
out sreg,r16
pop r16
ret

retardo:
push r16
ldi r16,255

retardo_barrido:
dec r16
nop
brne retardo_barrido
pop r16
ret

Tabla_7seg: // anodo con CEROS....... catodo con 1

.db 0b00111111,0b00000110 ;0,1


.db 0b01011011,0b01001111 ;2,3
.db 0b01100110,0b01101101 ;4,5
.db 0b01111101,0b00000111 ;6,7
.db 0b01111111,0b01101111 ;8,9

2) Bibliografa
http://www.atmel.com/products/microcontrollers/avr/default.aspx?tab=documents

También podría gustarte