Division de 2 números binarios

;En el display se muestra segun la entrada de 2 dip switch el cuociente o el residuo y con el otro las (decenas|unidades) o (cero|centenas)

.include “m16def.inc”

.def rsd =r16 ;residuo
.def dvdnd =r17 ;dividend
.def dvsr =r18 ;divisor
.def cont =r19 ;contador
.def aux =r20
.def bcd1 =r21 ;auxiliar

.org 0×00
ldi dvdnd,0×00
out ddra,dvdnd
out ddrc,dvdnd
ldi dvdnd,0×7f
out ddrb,dvdnd;decenas,centenas
out ddrd,dvdnd;cuociente,residuo
inicio:
in dvdnd,pina
in dvsr,pinc
sub rsd,rsd
ldi cont,9
lazo1:
rol dvdnd
dec cont
brne lazo2
rjmp resultado
lazo2:
rol rsd
sub rsd,dvsr
brcc lazo3
add rsd,dvsr
clc
rjmp lazo1
lazo3:
sec
rjmp lazo1

resultado:

sbic pinb,7
rjmp resultado_residuo
sub bcd1,bcd1
ldi cont,8
clr dvsr
clr bcd1

inicio1:

clc
rol dvdnd
rol dvsr
rol bcd1
dec cont
breq mostrar_decena
mov aux,dvsr
andi aux,0×0f
cpi aux,5
brsh sumar
dos:
mov aux,dvsr
swap aux
andi aux,0×0f
cpi aux,5
brsh sumar2
rjmp inicio1

sumar:
subi dvsr,-0×03
rjmp dos
sumar2:
subi dvsr,-0×30
rjmp inicio1

resultado_residuo:
sub bcd1,bcd1
ldi cont,8
clr dvsr
clr bcd1

inicio2:

clc
rol rsd
rol dvsr
rol bcd1
dec cont
breq mostrar_decena
mov aux,dvsr
andi aux,0×0f
cpi aux,5
brsh sumarr
dosr:
mov aux,dvsr
swap aux
andi aux,0×0f
cpi aux,5
brsh sumar2r
rjmp inicio2

sumarr:
subi dvsr,-0×03
rjmp dosr
sumar2r:
subi dvsr,-0×30
rjmp inicio2

mostrar_decena: ;Para mostrar en decimal en 2 Displays

sbic pind,7
rjmp mostrar_centena
mov aux,dvsr
cbr dvsr,0xf0
ldi zl,low(tabla<<1)
ldi zh,high(tabla<<1)
add zl,dvsr
clr dvsr
adc zh,dvsr
lpm dvsr,z
out portb,dvsr
swap aux
cbr aux,0xf0
ldi zl,low(tabla<<1)
ldi zh,high(tabla<<1)
add zl,aux
clr aux
adc zh,aux
lpm aux,z
out portd,aux
rjmp inicio
mostrar_centena:
clr aux
cbr bcd1,0xf0
ldi zl,low(tabla<<1)
ldi zh,high(tabla<<1)
add zl,bcd1
clr bcd1
adc zh,bcd1
lpm dvsr,z
out portb,dvsr
ldi zl,low(tabla<<1)
ldi zh,high(tabla<<1)
add zl,aux
adc zh,aux
lpm aux,z
out portd,aux
rjmp inicio
tabla:; display anodo común
.dw 0×7940;1,0
.dw 0×3024;3,2
.dw 0×1219;5,4
.dw 0×7802;7,6
.dw 0×1000;9,8

No response to “Division de 2 números binarios”