Sie sind auf Seite 1von 4

.include"m164pdef.

inc"
.dseg
binario:.byte 2
bcds: .byte 5
digs: .byte 4
punto: .byte 4
.cseg
.org 0x00
clr r16
out ddra, r16 ; declaro como entrada al porta
; como entrada potbd
ser r16
; cargo con ff
out porta,r16 ;pull up
ldi
out
ldi
out
ldi
out
out
ldi
out
ldi
out

r16,0b01111111
ddrb,r16
r16,0b10000000
portb,r16
r16,0b00011111
ddrc,r16
ddrd,r16
r16,high(ramend);
sph,r16
r16,low(ramend)
spl,r16

inicio:
ldi r22,254
in r16,pina
mul r16,r22
sts binario,r0
sts binario+1,r1
call bcd
call seg7
call barrido
rjmp inicio
bcd:
push r16
push r17
push r18
push r19
push r20
push r22
push r23
lds r16,binario
lds r17,binario+1
ldi r19,0b00100111
ldi r18,0b00010000
demiles:
sub r16,r18
sbc r17,r19
brcs miles
inc r20
rjmp demiles
miles:
add r16,r18
adc r17,r19

;carga
;utilizo los 7 pines como salida
;
;mandas ceros
;
;4 bit low como salidas en c

;stack iniocializado

;cogo el dato del port a


;almacenan en la ram

;mantenemos el valor

sts bcds+4,r20
mov r15,r20
clr r20
ldi r22,0b00000011
ldi r23,0b11101000
clr r19
mil:
sub r16,r23
sbc r17,r22
brcs centenas
inc r20
rjmp mil
centenas:
add r16,r23
adc r17,r22
sts bcds+3,r20
clr r20
ldi r18,100
clr r19
centena:
sub r16,r18
sbc r17,r19
brcs decenas
inc r20
rjmp centena
decenas:
add r16,r18
adc r17,r19
sts bcds+2,r20
clr r20
ldi r18,10
clr r19
decena:
sub r16,r18
sbc r17,r19
brcs unidades
inc r20
rjmp decena
unidades:
add r16,r18
adc r17,r19
sts bcds+1,r20
sts bcds,r16
pop r23
pop r22
pop r20
egistros.
pop r19
pop r18
pop r17
pop r16
ret
seg7:
push r16
push r17
push zh

;restituyo todos los valores originales de los r

push zl
push yh
push yl
push xh
push xl
;leer el digito en bdc
ldi r23,0
cp r23,r15
brne cargar
ldi xh,high(bcds)
ldi xl,low(bcds)
ldi yh,high(digs)
ldi yl,low(digs)
ldi r25,0b00000010
out portd,r25
ldi r17,5
;numro de displays
seg7_0:
ldi zh,high(tabla<<1) ;apunta a la direccion
ldi zl,low(tabla<<1)
ld r16,x+
;guarda en el registro16
add zl,r16
clr r16
adc zh,r16
lpm r16,z
st y+,r16
;guardas en la ram
dec r17
;siguiente display
brne seg7_0
pop
pop
pop
pop
pop
pop
pop
pop

xl
xh
yl
yh
zl
zh
r17
r16

ret
barrido:
push r16
push r17
push yh
push yl
push r18
ldi
ldi
ser
out
ldi
ldi

yh,high(digs)
yl,low(digs)
r16;
cargo ff
portc,r16
r17,5
r18,0b11111110

barrido_0:
ld r16,y+

out portb,r16
out portc,r18
call retardo
sec
rol r18
ser r16
out portc,r16
dec r17
brne barrido_0
pop r18
pop yl
pop yh
pop r17
pop r16
ret
retardo:
push r16
ldi r16,250
retardo_0:
nop
dec r16
brne retardo_0
pop r16
ret
cargar:
ldi xh,high(bcds+1)
ldi xl,low(bcds+1)
ldi yh,high(digs)
ldi yl,low(digs)
ldi r17,5
ldi r25,0b00000001
out portd,r25
rjmp seg7_0
tabla:
.db 0b10111111,0b10000110
.db 0b11011011,0b11001111
.db 0b11100110,0b11101101
.db 0b11111101,0b10000111
.db 0b11111111,0b11101111

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

Das könnte Ihnen auch gefallen