Você está na página 1de 5

.include"m164pdef.

inc"
.def tempo=r16
.def frech=r17
.def frecl=r18
.def veces=r19
.def bcd0=r20
.def bcd1=r21
.def bcd2=r22
.def cnt=r23
.def aux=r24
.dseg
BCD: .byte 4
DIG: .byte 1
.cseg
.org 0x00
rjmp inicio
.org 0x1A
rjmp unseg
.org 0x24
rjmp desborde
inicio:
ldi
tempo,0xff
out
ddrc,tempo
com
tempo
out
portc,tempo
ldi
tempo,0x00
out
ddrb,tempo
out
ddrd,tempo
com
tempo
out
portb,tempo
out
portd,tempo
ldi
tempo,0b01111111
out
ddra,tempo
com
tempo
out
porta,tempo
ldi
tempo,high(ramend)
out
sph,tempo
ldi
tempo,low(ramend)
out
spl,tempo
ldi
tempo,0b00000000
out
tccr0a,tempo
ldi
tempo,0b00000110
out
tccr0b,tempo
clr
veces
out
tcnt0,veces
ldi
tempo,0b00000001
sts
timsk0,tempo
ldi
tempo,high(31249)
sts
ocr1ah,tempo
ldi
tempo,low(31249)
sts
ocr1al,tempo
ldi
tempo,0b00000000
sts
tccr1a,tempo
ldi
tempo,0b00001100
sts
tccr1b,tempo
ldi
tempo,0b00000010
sts
timsk1,tempo
sei

principal:
;rcall
bin_bcd
rcall bcd_7seg
rcall barrido
rjmp principal
desborde:
push tempo
in
tempo,sreg
push tempo
inc
veces
pop
tempo
out
sreg,tempo
pop
tempo
reti
unseg:
push tempo
in
tempo,sreg
push tempo
in
frecl,tcnt0
clr
tempo
out
tcnt0,tempo
mov
frech,veces
rcall bin_bcd
;rcall
bcd_7seg
;rcall
barrido
clr
veces
pop
tempo
out
sreg,tempo
pop
tempo
reti
bin_bcd:
push
tempo
in
tempo,sreg
push
tempo
push
bcd0
push
bcd1
push
bcd2
push
cnt
clr
bcd0
clr
bcd1
clr
bcd2
clc
ldi
cnt,16
lazo:
rol
frecl
rol
frech
rol
bcd0
rol
bcd1
rol
bcd2
dec
cnt
breq
fin1
mov
tempo,bcd2
call
bin2bcd
mov
bcd2,tempo
mov
tempo,bcd1

call
bin2bcd
mov
bcd1,tempo
mov
tempo,bcd0
call
bin2bcd
mov
bcd0,tempo
rjmp
lazo
fin1:
mov
tempo,bcd1
andi
bcd1,0b00001111
andi
tempo,0b11110000
swap
tempo
mov
bcd2,bcd0
andi
bcd0,0b00001111
andi
bcd2,0b11110000
swap
bcd2
rjmp
fin2
bin2bcd:
push
frecl
push
frech
ldi
frecl,0x03
ldi
frech,0x30
add
tempo,frecl
sbrs
tempo,3
sub
tempo,frecl
add
tempo,frech
sbrs
tempo,7
sub
tempo,frech
pop
frech
pop
frecl
ret
fin2:
sts
BCD+0,bcd0
sts
BCD+1,bcd2
sts
BCD+2,bcd1
sts
BCD+3,tempo
pop
cnt
pop
bcd2
pop
bcd1
pop
bcd0
pop
tempo
out
sreg,tempo
pop
tempo
ret
bcd_7seg:
push
tempo
in
push
tempo
push
cnt
push
xh
push
xl
push
yh
push
yl
push
zh
push
zl
ldi
ldi
ldi

tempo,sreg

xh,high(BCD)
xl,low(BCD)
yh,high(DIG)

ldi
yl,low(DIG)
ldi
cnt,4
lazoz:
ldi
zh,high(tabla<<1)
ldi
zl,low(tabla<<1)
ld
tempo,x+
add
zl,tempo
clr
tempo
adc
zh,tempo
lpm
tempo,z
st
y+,tempo
dec
cnt
brne
lazoz
pop
zl
pop
zh
pop
yl
pop
yh
pop
xl
pop
xh
pop
cnt
pop
tempo
out
sreg,tempo
pop
tempo
ret
barrido:
push tempo
in
tempo,sreg
push tempo
push cnt
push aux
ldi
cnt,4
ldi
aux,0b00000001
ldi
yh,high(DIG)
ldi
yl,low(DIG)
lazo1:
ldi
tempo,0x00
out
portc,tempo
ld
tempo,y+
ori
tempo,0b10000000
out
porta,tempo
out
portc,aux
rcall retardo
lsl
aux
dec
cnt
brne lazo1
pop
aux
pop
cnt
pop
tempo
out
sreg,tempo
pop
tempo
ret
retardo:
push tempo
in
tempo,sreg
push tempo
ldi
tempo,255

lazoret:
dec
tempo
brne lazoret
pop
tempo
out
sreg,tempo
pop
tempo
ret
tabla:
.db 0b11000000,0b11111001
.db 0b10100100,0b10110000
.db 0b10011001,0b10010010
.db 0b10000010,0b11111000
.db 0b10000000,0b10011000
.db 0b10001000,0b10000011
.db 0b11000110,0b10100001
.db 0b10000110,0b10001110

Você também pode gostar