TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: beto0350 en 02 de Agosto de 2009, 16:58:29
-
Hola:
tengo un campo longint y quiero descomponerlo en 4 bytes independientes para poder operarlos y luego desde esos 4 bytes recomponer el mismo longint
en otro momento.
Alguna sugerencia por favor.
Gracias
-
Hola buenos dias, oye colega nose a que lenguaje de compilador te refieres pero en proton un longint es un DWORD que no es mas que una variable de 32bit es decit 4 byte como tu bien lo dices y lo que quieres es hacer la separacion de esos 4 byte se puede hace de la manera manual o comentanos que compilador de basic estas usando yo en lo pensonal lo he hecho con proton pero para los word y es muy simple con lowbyte y highbyte pero eso es en proton uy para una variable word que solo son 16bit es decir 2 byte pero lo podriamos hacer de forma manual aplicando un and pero es cuestion de ponerse si gusta con gusto lo desarrolo para proton.
Saludos.
Atten.
Alexander santana.
Barcelona-venezuela.
-
Cómo se hace concretamente depende del lenguaje que uses, es decir, si usas assembler, basic ó c.
La idea es hacer una máscara y un desplazamiento. Por ej, para capturar el primer byte haces una operación and:
primer_byte= variable32bits AND 0x000000FF
Para el segundo byte hay que hacer la and y un desplazamiento:
temp=variable32bits AND 0x0000FF00 //tem tiene que ser de 32 bits
seg_byte = temp >> 8 // desplazo 8 bits a la derecha
y asi siguiendo para el 3er y 4to bytes.
Si decis el lenguaje que estas usando te podemos decir más concretamente la instrucción para hacer la and y el desplazamiento.
-
Eso seria lo mas logico que indique que tipo de lenguaje esta usando y se los de seguridad si eso lo esta aplicando a un codigo para un pic o en un codigo que esta desarrollando en basic o delphy o cualquier otro lenguaje para pc.
Saludos y no se te olvide sacarnos de la duda.
Atten.
Alexander Santana.
Barcelona-Venezuela.
-
Bueno gracias por su ayuda y disculpen que me olvide el lenguaje
que es Mikrobasic y es para un PIC , lo hice asi y me funciona.
Dim Digit as Byte[5]
Dim restauro , valor As Longint
Digit[0] = ((valor and $FFFF0000) >> 4)*10 + ((valor >> 24) and $0000FFFF)
Digit[1] = ((valor and $FFFF0000) >> 4)*10 + ((valor >> 16) and $0000FFFF)
Digit[2] = ((valor and $FFFF0000) >> 4)*10 + ((valor >> 8) and $0000FFFF)
Digit[3] = ((valor and $FFFF0000) >> 4)*10 + (valor and $0000FFFF)
restauro = Digit[0]
restauro = Digit[1] + (restauro << 8)
restauro = Digit[2] + (restauro << 8)
restauro = Digit[3] + (restauro << 8)
Si hay alguna forma de hacerlo mas simple se agradece