Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
03 de Septiembre de 2010, 05:22:55
1 Hora
1 Día
1 Semana
1 Mes
Siempre
Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:
Búsqueda Avanzada
257111
Mensajes en
28437
Temas por
27916
Usuarios
Último usuario:
zororyuzaki
Buscar en TodoPIC
TODOPIC
Microcontroladores PIC
Lenguaje C para microcontroladores PIC
(Moderadores:
Modulay
,
pikman
,
pocher
,
vszener
,
Suky
)
funciones a nivel de bits/bytes
0 Usuarios y 1 Visitante están viendo este tema.
« anterior
próximo »
Páginas:
[
1
]
Autor
Tema: funciones a nivel de bits/bytes (Leído 314 veces)
devaronaomar
PIC10
Desconectado
España
Mensajes: 24
funciones a nivel de bits/bytes
«
:
05 de Marzo de 2010, 02:22:35 »
Hola a todos. Mi pregunta es simple:
Alguien sabe cómo puedo cambiar el lugar los bits de un byte en CCS de forma que el más significativo pase a ser el menos significativo y viceversa? He mirado en la ayuda pero no encuentro una función que me ayude en eso.
Gracias.
En línea
Cryn
Colaborador
DsPIC30
Desconectado
Sexo:
Bolivia
Mensajes: 3914
ahora con C18 C30 C32
Re: funciones a nivel de bits/bytes
«
Respuesta #1 :
05 de Marzo de 2010, 04:07:31 »
si, no creo que haya una función incorporada en el CCS para eso...
te tocará hacerte la función
saludos.
En línea
El peor día, cuando te fuiste.
Cuando estabas a nuestro lado, los mejores
felipito
PIC10
Desconectado
Mensajes: 19
Re: funciones a nivel de bits/bytes
«
Respuesta #2 :
06 de Marzo de 2010, 05:23:31 »
Por aquì hay algo, entre dir y sale dir_out invertido
void invert_bits(int dir )
{int i,dir_out;
dir_out = 0;
for(i =0; i<8; i++)
{if( bit_test(dir, i)==1 )
bit_set(dir_out, 7-i);
}
return ( dir_out );
}
«
Última modificación: 06 de Marzo de 2010, 05:26:17 por felipito
»
En línea
devaronaomar
PIC10
Desconectado
España
Mensajes: 24
Re: funciones a nivel de bits/bytes
«
Respuesta #3 :
08 de Marzo de 2010, 07:27:33 »
gracias felipito, voy a probarlo
En línea
jim_17
Colaborador
PIC18
Desconectado
Sexo:
España
Mensajes: 269
Re: funciones a nivel de bits/bytes
«
Respuesta #4 :
08 de Marzo de 2010, 07:44:36 »
Una pregunta, en la función de filipito él está devolviendo un valor, entonces no tendría que definir la función así: int invert_bits(int dir) ?
En línea
Share the world !
JIM17 Blog's
http://jimjim17.blogspot.com
felipito
PIC10
Desconectado
Mensajes: 19
Re: funciones a nivel de bits/bytes
«
Respuesta #5 :
08 de Marzo de 2010, 09:39:46 »
Es correcto.
En línea
devaronaomar
PIC10
Desconectado
España
Mensajes: 24
Re: funciones a nivel de bits/bytes
«
Respuesta #6 :
09 de Marzo de 2010, 12:47:49 »
Ahora me encuentro con otro problema en mi código.. tengo dos valores hexadecimales de 16bits cada uno tal que así
A)0x00XX
B)0xXXXX
En binario sería algo así:
A)0000 0000 xxxx xxxx
B)xxxx xxxx xxxx xxxx
Y necesito en primer lugar cambiar los primeros bits de A) para tener un 0x2, es decir que sean 0000 0010 en lugar de 0000 0000, y en segundo lugar concatenar A) y B) de forma que :
A) concatenado B) = 0x02XX XXXX
Había pensado en pasar A) a binario para cambiarle únicamente el bit número 7 (leyendo de izda a dcha) y luego pasar el resultado a hexadecimal, concatenar con B) y transmitir.
El caso es que no encuentro las funciones adecuadas en CCS para pasar de una base a otras, y tampoco sé como puedo cambiar un único bit en una trama.
Alguien me indica cómo puedo hacerlo?
gracias!
En línea
AngelGris
PIC16
Desconectado
Argentina
Mensajes: 222
Re: funciones a nivel de bits/bytes
«
Respuesta #7 :
09 de Marzo de 2010, 12:59:05 »
Para cambiar x cantidad de bits, tenés que usar máscaras....
El tema es hacer una or con un número que tenga a 1 los bits que querés que se seteen en tu variable (esto si querés setear bits)
Para borrar bits tenés que hacer una and con un número que tenga a 0 los bits que querés que se borren en tu variable.
Ejemplo con un byte, si tenés el valor 0b10000000 (que sería lo mismo que decir 128 en decimal) y querés setearle (hacer 1) el bit 1 (teniendo en cuenta que los bits van de 0 a 7).
sólo basta con decir
variable = variable | 0b00000010... o lo mismo a variable |= 0b00000010.... variable |= 2
En línea
devaronaomar
PIC10
Desconectado
España
Mensajes: 24
Re: funciones a nivel de bits/bytes
«
Respuesta #8 :
09 de Marzo de 2010, 01:08:29 »
muchas gracias, eso resuelve en parte mi problema, aunque para poder aplicarlo necesito una función que pase de hexadecimal a binario y de binario a hexadecimal.. me extraña que css no tenga alguna, aunque no la encuentro por ninguna parte
En línea
pablomanieri
Colaborador
PIC18
Desconectado
Sexo:
Argentina
Mensajes: 413
Re: funciones a nivel de bits/bytes
«
Respuesta #9 :
09 de Marzo de 2010, 01:14:26 »
es lo mismo trabajar en binario que en hexadecimal, por que dices que lo necesitas convertir?
En línea
devaronaomar
PIC10
Desconectado
España
Mensajes: 24
Re: funciones a nivel de bits/bytes
«
Respuesta #10 :
09 de Marzo de 2010, 02:11:36 »
no sé, me resulta más fácil trabajar en binario, aunque supongo que será cuestión de práctica.. lo que sí que sigo necesitando es una forma de concatenar A) y B) :-s
En línea
pablomanieri
Colaborador
PIC18
Desconectado
Sexo:
Argentina
Mensajes: 413
Re: funciones a nivel de bits/bytes
«
Respuesta #11 :
09 de Marzo de 2010, 02:55:17 »
Se puede hacer así
int32 concatena
....
concatena= ((int32)A)<<16|(int32)B;
En línea
MarkKnopfler81
PIC12
Desconectado
Sexo:
España
Mensajes: 54
Re: funciones a nivel de bits/bytes
«
Respuesta #12 :
09 de Marzo de 2010, 02:59:25 »
Para concatenar dos int16 solo debes multiplicar el byte mas significativo por 65536 y sumarlo al menos significativo de esta forma:
Código:
int32 valor;
int16 A=64;
int16 B=8;
A|=2; // Aquí le hago un OR con 0b00000010 a la variable A, como explico AngelGris
Valor=A;
Valor*=65536;
Valor+=B;
Saludos.
Edito: esta solución y la que te dió pablomanieri tienen el mismo resultado pero la de pablomanieri es mas corta, elegante y rápida, jeje
Saludos.
«
Última modificación: 09 de Marzo de 2010, 03:08:00 por MarkKnopfler81
»
En línea
http://picrobot.blogspot.com/
TODOPIC
En línea
Páginas:
[
1
]
« anterior
próximo »
Ir a:
Por favor selecciona un destino:
-----------------------------
Microcontroladores PIC
-----------------------------
=> Todo en microcontroladores PIC
=> Primeros pasos - Iniciación a los microcontroladores
=> Lenguaje C para microcontroladores PIC
=> Lenguaje Basic para microcontroladores PIC
=> Almacén del Assembler
=> - Niple -
=> dsPIC
=> Programadores
=> * PROYECTOS *
-----------------------------
Misceláneas - Interés General
-----------------------------
=> Compra / Venta
=> Empleo (Ofertas/Demandas) EN PRUEBAS
=> Uso y aplicaciones de los PIC / Curiosidades electrónicas
=> Off Topic
-----------------------------
Otros microcontroladores/dispositivos programables
-----------------------------
=> Arduino
=> ARM
=> ATMEL
=> Freescale
=> PAL - GAL - FPGA - ASIC
===> VHDL (Lenguaje para descripción y modelado de hardware)
=> Rabbit
=> Texas MPS430
=> ** PROYECTOS **
-----------------------------
Mecatrónica
-----------------------------
=> DMX512 - Diseños y Proyectos
=> Robótica
=> CNC - Control Numérico Computarizado
=> Domótica - X-10
=> PLC - Control Lógico Programable
-----------------------------
Simuladores, editores de PCB, etc
-----------------------------
=> Simuladores de circuitos
===> Proteus ISIS
===> Protel Sim
===> PSpice
=> Diseño de placas PCB
===> Ares
===> Eagle
===> Orcad
===> Altium/Protel
===> Tango
===> Otros....
=> Fabricación de placas PCB
=> Ejemplos para simular
-----------------------------
FORO TÉCNICO
-----------------------------
=> Foro Técnico
=> Telefonía, GPS y Microcontroladores
-----------------------------
Lenguajes de programación para PC
-----------------------------
=> Visual Basic
=> C, C#, C++
=> Delphi
Loading...