TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Algec en 28 de Junio de 2012, 08:24:49

Título: traducir de ccs a hitech
Publicado por: Algec 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
Título: Re: traducir de ccs a hitech
Publicado por: AngelGris 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);
Título: Re: traducir de ccs a hitech
Publicado por: Algec en 28 de Junio de 2012, 09:46:15
gracias mil, me falta bit_test pero a ver si lo encuentro.
Un saludo
Título: Re: traducir de ccs a hitech
Publicado por: Algec 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.



 
Título: Re: traducir de ccs a hitech
Publicado por: AngelGris 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
Título: Re: traducir de ccs a hitech
Publicado por: Algec 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
Título: Re: traducir de ccs a hitech
Publicado por: AngelGris 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