Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Бит тест на юзърска променлива в HI-TECH PICC18, как става?
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=4958
Страница 1 от 1

Автор:  tolstolob [ Нед Окт 14, 2007 2:08 am ]
Заглавие:  Бит тест на юзърска променлива в HI-TECH PICC18, как става?

Значи имам дефиниран от мен unsigned char CONTROL_REG, който пази някакви състояния. Често тествам някои битове от него, за да управлявам други битове/променливи, и отвреме-навреме се налага да написвам/трия наведнъж целия CONTROL_REG. В mikroC си има нормално битово достъпване, но компилатора като цяло е една рядка чорба... Бит тест на SFR-ите при HI-TECH-a може да се прави съвсем културно (знаете това много добре:)), обаче как да подходя в случая с моя регистър?

Автор:  Yanek [ Нед Окт 14, 2007 7:39 am ]
Заглавие:  Re: Бит тест на юзърска променлива в HI-TECH PICC18, как ста

След като компилатора ти не позволява създаване на побитова структура (интересно), тогава ползвай маски.

Автор:  kiiid [ Нед Окт 14, 2007 10:22 am ]
Заглавие: 

ами ако нямаш бит си направи


#define bit(x) (1<<x)


после ползваш по стандартния начин - примерно

if (CONTROL_REG & bit(5)) .... // ако бит 5 е 1 ...

или

CONTROL_REG&=~(bit(2)|bit(7)); // нулираш битове 2 и 7

и така нататък... 8)

Автор:  tolstolob [ Нед Окт 14, 2007 10:23 am ]
Заглавие: 

Бит полетата и маските са ясни. Просто се запитах дали не съм пропуснал побитовото достъпване някъде из менюала...

Автор:  Gogo [ Нед Окт 14, 2007 11:53 pm ]
Заглавие: 

Скоро не съм писал на Hi-Tech, но това работеше на някоя от по-старите версии
Код:
#include <pic18.h>

typedef union
{   unsigned char Val;
   struct {
       unsigned           b0:1;
       unsigned            b1:1;
       unsigned            b2:1;
       unsigned            b3:1;
       unsigned           b4:1;
       unsigned             b5:1;
       unsigned          b6:1;
       unsigned              b7:1;
   } Flag ;
}
   CONTROL_REG, Stat;


#define GOGO Stat.Flag.b1
#define BOBO CONTROL_REG.Flag.b5

main()
{
   Stat.Val = 128;
   CONTROL_REG.Val = 255;
   GOGO = 1;
   GOGO = ~GOGO;
   BOBO = GOGO;
}

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/