You are on page 1of 7

TEMA: Microcontrolador en modo extendido

PRACTICA: No. 1

REALIZADO POR:

Juan Villacrs

GRUPO:

GR3

HORARIO:

14:00 a 16:00

FECHA DE ENTREGA:

2014/02/11

1.- Realizar el circuito completo y el programa de control en lenguaje ensamblador para: leer 8
SW y ese valor mostrarlo en 8 Leds (BINARIO) o en 3 Displays de 7 Segmentos (decimal), la
seleccin del lugar donde se mostrar el resultado se lo hace con un pulsador que genera
interrupcin externa, cada vez que este se presiona, cambia el destino de la lectura. Todos los
perifricos deben estar conectados al Puerto B a travs de latch o buffers segn el caso.
Simulacin:

Cdigo:
/*
* Preparatorio_1.asm
*
* Created: 11/12/2013 6:57:50 AM
*
Author: Juan Fernando
*/
.include "m164pdef.inc"
.def
tempo=R16
.def
num=R17
.def
aux=R18
.def
cont=R19
.dseg
binario:
bcd0:
bcd1:
bcd2:
dig0:
dig1:
dig2:

.byte
.byte
.byte
.byte
.byte
.byte
.byte

1
1
1
1
1
1
1

.cseg
.org
.org

0x00
rjmp
0x02
rjmp

Inicio
Contador

Inicio:
; Configuracin de puertos
ldi
tempo,0b00111111
out
ddra,tempo
ldi
tempo,0
out
ddrc,tempo
ldi
tempo,0
out
ddrd,tempo
ldi
tempo,0b00000100
out
portd,tempo
; Aseguro pull up
in
tempo,mcucr
ldi
tempo,0b11101111
out
mcucr,tempo
; Stack pointer
ldi
tempo,high(ramend)
out
sph,tempo
ldi
tempo,low(ramend)
out
spl,tempo

; Lneas de control

; Pull up INT0

; Configuracion de interrupciones externas


ldi
tempo,0b00000010
sts
EICRA,tempo
ldi
tempo,0b00000001
out
EIMSK,tempo
out
EIFR,tempo
sei
ldi

cont,0

; Inicio el contador en 0

ldi
out
cbi
in

tempo,0
ddrb,tempo
porta,0
num,pinb

; Defino portb como entrada

sts
call
call
sbi
call
out
cpi
breq
rjmp

binario,num
binbcd
bcd7seg
porta,0
retardo
portc,num
cont,0
LED
DIS

ldi
out
cbi
sbi
call
out
cbi

tempo,0xFF
; Defino portb como salida
ddrb,tempo
porta,5
; OL en OE del latch de leds
porta,1 ; 1L en LE del latch de leds (Pasa el dato)
retardo
portb,num
porta,1 ; OL en LE del latch de leds (Muestra dato
; almacenado)

MAIN:

; Habilito el Buffer
; Almaceno en el registro

num

; Buffer en Alta impedancia

LED:

call

retardo

rjmp main
DIS:
ldi
tempo,0xFF
out
ddrb,tempo
; DIGITO 0
cbi
porta,3
cbi
porta,4
sbi
porta,5 ; 1L
sbi
porta,2 ; 1L
call
retardo
lds
tempo,dig0
out
portb,tempo
call
ret_dis
cbi
porta,2
call
retardo
; DIGITO 1
cbi
porta,2
cbi
porta,4
sbi
porta,5 ; 1L
sbi
porta,3 ; 1L
call
retardo
lds
tempo,dig1
out
portb,tempo
call
ret_dis
cbi
porta,3
call
retardo
; DIGITO 2
cbi
porta,3

; Defino portb como salida

en OE del latch de leds (Compuerta NOT 0L)


en LE del latch de DISP1 (Pasa el dato)

en OE del latch de leds (Compuerta NOT 0L)


en LE del latch de DISP2 (Pasa el dato)

cbi
sbi
sbi
call
lds
out
call
cbi
call

porta,2
porta,5 ; 1L en OE del latch de leds (Compuerta NOT 0L)
porta,4 ; 1L en LE del latch de DISP3 (Pasa el dato)
retardo
tempo,dig2
portb,tempo
ret_dis
porta,4
retardo

rjmp main
retardo:
push
ldi

R16
R16,255

lazo_retardo:
nop
dec
R16
brne
lazo_retardo
pop
R16
ret

contador:
cpi
cont,0
breq
inc_cont
rjmp
dec_cont
inc_cont:
inc
cont
rjmp
continuar
dec_cont:
dec
cont
continuar:
reti
binbcd:
push R16
push R17
lds R16,binario
ldi R17,0
centenas:
subi R16,100
brcs decenas1
inc R17
rjmp centenas
decenas1:
subi R16,-100
sts bcd0,R17
clr R17
decenas:
subi R16,10
brcs unidades
inc R17
rjmp decenas
unidades:
subi R16,-10
sts bcd1,R17
sts bcd2,R16
pop R17

pop R16
ret
bcd7seg:
push R16
push zh
push zl
lds R16,bcd0
ldi
ldi
add
clr
adc
lpm
sts

zh,high(tablita<<1)
zl,low(tablita<<1)
zl,R16
R16
zh,R16
R16,z
dig0, R16

lds
ldi
ldi
add
clr
adc
lpm
sts

R16,bcd1
zh,high(tablita<<1)
zl,low(tablita<<1)
zl,R16
R16
zh,R16
R16,z
dig1, R16

lds
ldi
ldi
add
clr
adc
lpm
sts

R16,bcd2
zh,high(tablita<<1)
zl,low(tablita<<1)
zl,R16
R16
zh,R16
R16,z
dig2, R16

pop zl
pop zh
pop R16
ret
ret_dis:
ldi
R20,255
ret_lazo:
call
retardo
dec
R20
brne
ret_lazo
ret
tablita:
.db
0b00111111,
.db
0b01011011,
.db
0b01100110,
.db
0b01111101,
.db
0b01111111,

0b00000110
0b01001111
0b01101101
0b00000111
0b01101111

;0,1
;2,3
;4,5
;6,7
;8,9

You might also like