Отговори на тема  [ 5 мнения ] 
Бит тест на юзърска променлива в HI-TECH PICC18, как става? 
Автор Съобщение
Ранг: Ориентиран
Ранг: Ориентиран

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


Нед Окт 14, 2007 2:08 am
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пет Юни 29, 2007 10:59 pm
Мнения: 113
Мнение Re: Бит тест на юзърска променлива в HI-TECH PICC18, как ста
След като компилатора ти не позволява създаване на побитова структура (интересно), тогава ползвай маски.


Нед Окт 14, 2007 7:39 am
Профил ICQ
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Сеп 24, 2005 2:00 pm
Мнения: 787
Мнение 
ами ако нямаш бит си направи


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


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

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

или

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

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


Нед Окт 14, 2007 10:22 am
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Вто Фев 06, 2007 2:45 am
Мнения: 263
Мнение 
Бит полетата и маските са ясни. Просто се запитах дали не съм пропуснал побитовото достъпване някъде из менюала...


Нед Окт 14, 2007 10:23 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
Скоро не съм писал на 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;
}


Нед Окт 14, 2007 11:53 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 5 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 5 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни