TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: arnoldojrm en 26 de Noviembre de 2004, 09:46:00
-
Hola a todos y gracias por leer mi comentario.
Necesito sumar un word y un byte, pero, si existe acarreo, como hago para guardar todos los bit, sin peder ninguno. supongo que debo usar otra variable, pero como verifico el carry en pbp?
Saludos Arnoldo - Venezuela
-
arnoldojrm,
Una opcion para evitar ese problema seria guardar el resultado en una variable tipo float que va de -2147483646.999 a +2147483646.999.
Otra opcion seria chekar a la hora de hacer la suma que no sobre pase el limite de la variable con un condicionante if...then....,
Salu2 pana
-
Gracias Lager, por tu respuesta.
El problema es que necesito hacer esa suma, no puedo condicionarla, y por otro lado estoy trabajando con pbp y MicroCode Studio y este no permite variables float, la más grande es la tipo word
. por esta razon no puedo resolver el problema tan facilmente.
Es posible verificar el valor de carry y asi hacerlo manualmente, o sea que despues de sumar verique el C y se lo sume a otra variable
w1 var word
w2 var word
b var byte
W1 = $ffff
b = $ff
w2 = w1 + b
portb.7 = status.0 " muestra el carry
W1 = $ff00
b = $ff
w2 = w1 + b
portb.6 = status.0 " muestra el carry
con esto estoy verificando que valor tiene el c despues de la operación
Saludos desde Venezuela
-
pana arnoldojrm,
Una opcion mas es desbaratar cualquier numero en bytes, asi puedes manejar cualqueir longitud de numero, asi la informacion o cada byte(para un word serian dos bytes, para un dword serian 4 bytes) estara contenida en el low byte de cada word, para procesarla(dividirla o restarla, o multip. etc) se haria el mismo proceso ya que pbp no soporta variables con mayor capacidad, aqui te ongo un ejemplo "SIN OPTIMIZACION" para que lo tomes de base para mejorarlo a tus necesidades:
alto var w1.1
bajo var w1.0
w1 var word
w2 var word
pb var word
sb var word
tb var word
pba var pb.1
pbb var pb.0
sba var sb.1
sbb var sb.0
tba var tb.1
tbb var tb.0
b var byte
W1 = $ffff
b = $ff
w2 = w1 + b
if status.0 =1 then "Es neceasrio desbaratar??(sobre pasa el limite del word?
pb=bajo+b "sumamos y obtenemos en el hight byte el c
sb=alto+pba "sumamos c
tbb=1 "constante limitante a suma MAXIMA de 2 words
LCDOUT $FE, 1,#tbb ,#sbb,#pbb "impresion de Msb a Lsb
else " como no es necesario no perdemos tiempo y lo imprimimos
w2 = w1 + b
LCDOUT $FE, 1,#w2
end if
Tampoco e probado el codigo(ya que no uso pbp), pero es la base del proceso.
Un abrazo pana
-
gracias lager, tu idea de separar los byte uno por uno me dio la solución definitiva al problema de la suma.
Que seria de los pic maniacos sin el foro!
Nuevamente, gracias !




-
PERFECTO pana arnoldojrm,





No tienes que agradecer nada pana, solo fue una idea ,tu encontraste la solucion a tu problema en especifico,(acuerdate que no es lo mismo decir que hacer y tu lo hiciste) ademas de eso se trata el foro de ideas productivas
Un abrazo pana
-
esta fue la solucion definitiva que consegui al problema
" rutina que suma 4 bytes
" el menos significativo esta en arreglo(7)
" el mas significativo en arreglo(4)
" la variable a sumar es el arreglo contra varanalog
suma1:
acarreo = 0
if (arreglo1(7) + varanalog) > 255 then
arreglo1(7)= arreglo1(7) + varanalog
acarreo = 1
else
arreglo1(7)= arreglo1(7) + varanalog
acarreo = 0
endif
if acarreo = 1 then
gosub suma2
endif
return
suma2:
if (arreglo1(6) + acarreo) > 255 then
arreglo1(6)= arreglo1(6) + acarreo
acarreo = 1
else
arreglo1(6)= arreglo1(6) + acarreo
acarreo = 0
endif
if acarreo = 1 then
gosub suma3
endif
return
suma3:
if (arreglo1(5) + acarreo) > 255 then
arreglo1(5)= arreglo1(5) + acarreo
acarreo = 1
else
arreglo1(5)= arreglo1(5) + acarreo
acarreo = 0
endif
if acarreo = 1 then
arreglo1(4) = arreglo1(4) + acarreo
endif
return
Saludos Venezuela
-
La solución a este problema está en el Protón que tiene variables DWORD y FLOAT.
Con lo que para este tipo de cosas te viene a pelo y te facilita mucho la vida.
Saludos
Ricky