Autor Tema: traducir de ccs a hitech  (Leído 1734 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
traducir de ccs a hitech
« en: 28 de Junio de 2012, 08:24:49 »
Hay funciones equivalentes a las siguientes que os pongo, de trabajo con bits, de CCS en Hitech, cuales serian?


bit_test(variable, bit);
bit_clear(variable, bit);
bit_set(variable,bit);

Donde podria ver esa documentacion de funcion de trabajo con bits?
Es para no tener que escribir toda la rutina entera.
Muchas gracias

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: traducir de ccs a hitech
« Respuesta #1 en: 28 de Junio de 2012, 09:34:39 »
  El siguiente párrafo está sacado del manual de HiTech...

Código: C
  1. Wherever possible, HI-TECH C will attempt to use the PIC10/12/16 bit instructions. For
  2. example, when using a bitwise operator and a mask to alter a bit within an integral type,
  3. the compiler will check the mask value to determine if a bit instruction can achieve the
  4. same functionality.
  5. unsigned int foo;
  6.  
  7. foo |= 0x40;
  8.  
  9. will produce the instruction:
  10.  
  11. BSF _foo,6
  12.  
  13. To set or clear individual bits within integral type, the following macros could be used:
  14.  
  15. #define bitset(var, bitno)  ((var) |= 1UL << (bitno))
  16. #define bitclr(var, bitno)  ((var) &= ~(1UL << (bitno)))
  17.  
  18. To perform the same operation as above, the bitset macro could be employed as follows:
  19.  
  20. bitset(foo,6);
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: traducir de ccs a hitech
« Respuesta #2 en: 28 de Junio de 2012, 09:46:15 »
gracias mil, me falta bit_test pero a ver si lo encuentro.
Un saludo

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: traducir de ccs a hitech
« Respuesta #3 en: 28 de Junio de 2012, 10:43:11 »
si estas dos son asi
#define bitset(var, bitno)  ((var) |= 1UL << (bitno))
#define bitclr(var, bitno)  ((var) &= ~(1UL << (bitno)))

como seria la definicion de bittest?

No entiendo el codigo que usan, que es UL?
Podeis definirme bittest en el mismo formato?
No se suficiente como para hacerlo yo mismo.



 

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: traducir de ccs a hitech
« Respuesta #4 en: 28 de Junio de 2012, 11:26:14 »
  UL es para definir que es un valor sin signo. Yo imagino que es la abreviación de UnsignedLiteral.

  Nunca me puse a ver como serían estas funciones, ya que para setar por ejemplo el bit 7 de una variable suelo hacer

Código: C
  1. varible = variable | 0b10000000;

  que se puede escribir como...

Código: C
  1. variable |= 0b10000000;

  para borrar un bit hago una and con un valor que tenga a 0 el bit que quiero borrar

Código: C
  1. variable &= 0b11110111;

  en este caso borro el bit 3 de la variable.

  Para testear un bit, yo suelo hacer una and con un número que tenga a 1 el bit que quiero testear, y luego evalúo el valor...

Código: C
  1. variable_aux = variable & 0b10000000; // si el bit 7 de variable estaba en 1, el resultado de la and es 128
  2. if (variable_aux == 128) ....   // evaluo el valor, para saber si el bit estaba en 1

  Se podría hacer un función que desplace hacia la izquierda la variable según el bit que quieras testear y luego una XOR con 0. Así, se el resultado da 1 es porque el bit estaba en 1 y si da 0 es porque el bit estaba en 0
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: traducir de ccs a hitech
« Respuesta #5 en: 28 de Junio de 2012, 11:28:18 »
Si prefecto, solo tendria que usar lo que necesite en cada caso. Es el codigo mas simple y masrapido.
Gracias , como siempre sois lo mejor

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: traducir de ccs a hitech
« Respuesta #6 en: 28 de Junio de 2012, 11:35:20 »
 
  Se podría hacer un función que desplace hacia la izquierda la variable según el bit que quieras testear y luego una XOR con 0. Así, se el resultado da 1 es porque el bit estaba en 1 y si da 0 es porque el bit estaba en 0

  Perdón, tiene que desplazar a la derecha y NO a la izquierda
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything