por diogo_18sp » 26 Jul 2010 23:48
valeu andre e dejano pela ajuda alias toda a galeraestou quase concluindo a rotina de calculo que fiz e agora com esse arquivo posso ter a ideia de onde estao alguns erros na minha rotina vou postala uma parte aki que estou testando ela..
multi
clrf flag
clrf multi_l
clrf multi_h
movlw 0x05 ;carrega com 4 2x2x2x2 = 16
movwf auxi_multi ;contem 4
movf aux_ad,f ;move o conteudo para ele mesmo
btfss status,z ;verrifica se o valor e zero
goto nao_zero ;nao e zero faz o calculo
return ;sim e zero
nao_zero
movf aux_ad,w ;coloca valor em w
movwf multi_l ;carrega com o valor do conversor ad byte parte baixa
movwf auxi_metade ;coloca valor na variavel
rrf auxi_metade,f ;rotaciona divide por 2 e guarda nele mesmo o valor valor de 50%
btfss status,c ;verifica se e negativo a divisao
goto volta_mul
clrf auxi_metade
volta_mul
decfsz auxi_multi,f ;decementa multi 4 vezez a multiplicaçao sera 16
goto mult
movlw 0x04
movwf auxi_multi ;soma 3 vezes
;return;9999999999999999999
goto soma ;soma os valores para atingir 19 vezes
mult
bcf status,c ;limpa a flag c para a multiplicaçao
rlf multi_l,f ;multiplica por 2
rlf multi_h,f
btfss status,c ;testa carry pra ver se e 1
goto volta_mul ;carry e zero
bsf flag,0 ;bit que indica que houve estouro
goto volta_mul ;volta a multiplicar
;***************************************************************************************************
soma
decfsz auxi_multi,f ;decrementa
goto cont
;return;((((((((((((((((((((((((((((((((((((((((((((
goto soma_50 ;soma os 0,5 da conta
cont
bcf status,c ;limpa carry
movf aux_ad,w ;move auxi ad em w
addwf multi_l,f ;soma w + multi_l
btfss status,c ;houve estouro do carry
goto soma ;nao houve estouro do carry
movlw 0x01
addwf multi_h,f
; bsf flag,0
goto soma
soma_50
bcf status,c
movf auxi_metade,w ;coloca o valor de metade em w
addwf multi_l,f ;soma w na parte baixa
btfss status,c ;houve estouro
goto n_houve1 ;naum houve
movlw 0x01
addwf multi_h,f ;sim houve estouro rotaciona bit
return
n_houve1
; btfss flag,0 ;e para incrementar parte alta?
return ;nao incrementa
; incf multi_h,f ;incrementa
; return