TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: micro_pepe en 03 de Julio de 2005, 07:34:00
-
Hola, aqui os dejo una rutina para convertir 32 bits en binario (cuatro registros), a 10 digitos BCD. Osea resolucion para aburrir...
LIST p=16F84A
#INCLUDE "p16f84a.inc"
RADIX HEX
contador1 EQU H"0C"
R0 EQU H"0D" ;resultado BCD parte baja
R1 EQU H"0E"
R2 EQU H"0F"
R3 EQU H"10"
R4 EQU H"11" ;resultado BCD parte alta
byte0 EQU H"12" ;parte baja en binario
byte1 EQU H"13"
byte2 EQU H"14"
byte3 EQU H"15" ;parte alta en binario
temp EQU H"16"
ORG 0
goto INICIO
ORG 5
INICIO
B2_BCD bcf STATUS,C ;Borra el carry
movlw .32
movwf contador1
clrf R4
clrf R3
clrf R2
clrf R1
clrf R0
loop rlf byte0,f ;parte baja binario
rlf byte1,f
rlf byte2,f
rlf byte3,f ;parte alta binario
rlf R0,f
rlf R1,f
rlf R2,f
rlf R3,f
rlf R4,f
decfsz contador1,f
goto adjDEC
return
adjDEC movlw R0
movwf FSR
call adjBCD
movlw R1
movwf FSR
call adjBCD
movlw R2
movwf FSR
call adjBCD
movlw R3
movwf FSR
call adjBCD
movlw R4
movwf FSR
call adjBCD
goto loop
adjBCD movlw 3
addwf INDF,W
movwf temp
btfsc temp,3 ; test if result > 7
movwf INDF
movlw 30
addwf INDF,W
movwf temp
btfsc temp,7 ; test if result > 7
movwf INDF ; save as MSD
return
end
-
Pues estaba intentando traducir y comprender la rutina que lo hace con 16 bits y entre aqui para ver que habia sobre el tema, ambas rutinas tienen la misma estructura,excepto que en adjBCD donde en esta pone INDF coloca un 0.
Al intentar comprenderla me topado con el FSR, por mas que he buscado lo unico que he sacado en claro es que este se emplea para el direccionamiento indirecto, pero no entiendo la utilidad de pasar el dato de Ri a FSR y tampoco entiendo mucho el ajustebcd. Alguien puede explicarmelo o decirme alguna pagina que pueda aclarar estas dudas, muchas gracias