Перейти к содержанию
    

Как последовательно вытаскивать биты из массива?

Пойти изучать Баском АВР чтоли, все таки для себя самому сделать охота..

JAVA.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Байт то в порт выводит, в том же коде есть,просто из массива вытаскивать не умею.

На JAVA для АВР компилятор есть чтоли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Байт то в порт выводит, в том же коде есть,просто из массива вытаскивать не умею.

Все просто.

 

(code&(1<<j))?1:0

 

Разберем.

 

code

Это просто берем значение с индексом i из массива (вектора) code.

(1<<j)

Напишите прогу (для ПС)

for (int i=0;i<10;i++) printf ( " i= %i 1<<i= %i\n" i, (1<<i));

Полученные 10 значений переведите в бинарную форму из десятичной. Потом сами догадаетесь что значит 1<<i

 

Ну а & просто http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%...%86%D0%B8%D1%8F

 

В С, переменная истинна, если хоть один бит в ней не равен 0.

 

 

На JAVA для АВР компилятор есть чтоли?

На java можно писать для более хорошо оплачиваемых вещей, кроме как AVR.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Приведите код который у вас выводит байт в порт

 for (counter = 0; counter < 64; counter++){  // цикл
DS = 1;      //записываем в линию данных 1 
//Дергаем ногой чтоб пропихнуть бит в регистр-отправляем через порт на сдвиговые регисты
SH_CP = 1;
SH_CP = 0;
  }
  //Дергаем ногой и защёлкиваем данные
  ST_CP = 1;
  ST_CP = 0;

-отправляются 64 бита и горят все светодиоды

 

Ах да,вы про байт,я про бит

Изменено пользователем мега16

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#include <limits.h>

typedef unsigned char my_type;

my_type code[]={0x38,0x7C,0x38,0xFE,0xFE,0x7C,0x38,0x7C};

int main()
{
    unsigned int i, j;

    DDRD = 0x0F;
    RESET = 1;

    for (i=0; i<sizeof(code)/sizeof(code[0]); i++) {
        for (j=0; j<(sizeof(my_type)*CHAR_BIT); j++) {
            if (code[i] & j) {
                DS = 1;
            }
            else {
                DS = 0;
            }
            SH_CP = 1;
            SH_CP = 0;
        }

    }

    ST_CP = 1;
    ST_CP = 0;

    return 0;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#include <limits.h>

typedef unsigned char my_type;

my_type code[]={0x38,0x7C,0x38,0xFE,0xFE,0x7C,0x38,0x7C};

int main()
{
    unsigned int i, j;

    DDRD = 0x0F;
    RESET = 1;

    for (i=0; i<sizeof(code)/sizeof(code[0]); i++) {
        for (j=0; j<(sizeof(my_type)*CHAR_BIT); j++) {
            if (code[i] & j) {
                DS = 1;
            }
            else {
                DS = 0;
            }
            SH_CP = 1;
            SH_CP = 0;
        }

    }

    ST_CP = 1;
    ST_CP = 0;

    return 0;
}

Это чё?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

    for (i=0; i<sizeof(code)/sizeof(code[0]); i++) {
        for (j=0; j<(sizeof(my_type)*CHAR_BIT); j++) {
            if (code[i] & j) {

В последней строчке надо

            if (code[i] & (1 << j)) {

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот так оптимальнее будет:-)

uint8_t temp = code[i];

for (uint8_t j=0; j<8; j++, temp>>=1)
{
  if (temp & 1)
  {
    ...
  }
  else
  {
     ...
  }
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему же так?

my_type code[]={11111111,00000000,11110000,11100111};

4ef41c4d76bf.jpg

11110000 это десятичное число. И причем my_type должно быть 32 бита.

Лучше сделайте себе файлик,

#define BIN0000_0000 0x00

#define BIN0000_0001 0x01

#define BIN0000_0010 0x02

#define BIN0000_0011 0x03

и инклюдьте его туда где вам нужно что-то в бинарном виде рисовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...