реклама на сайте
подробности

 
 
6 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Как последовательно вытаскивать биты из массива?
kurtis
сообщение Dec 26 2010, 14:15
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Напишите сначала программу которая просто выдает 1 байт в порт.
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 26 2010, 14:16
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(мега16 @ Dec 26 2010, 19:12) *
Пойти изучать Баском АВР чтоли, все таки для себя самому сделать охота..

JAVA.
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 14:23
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



Байт то в порт выводит, в том же коде есть,просто из массива вытаскивать не умею.
На JAVA для АВР компилятор есть чтоли?
Go to the top of the page
 
+Quote Post
kurtis
сообщение Dec 26 2010, 14:30
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Приведите код который у вас выводит байт в порт
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 26 2010, 14:31
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(мега16 @ Dec 26 2010, 19:23) *
Байт то в порт выводит, в том же коде есть,просто из массива вытаскивать не умею.

Все просто.

(code[i]&(1<<j))?1:0

Разберем.

code[i]
Это просто берем значение с индексом 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.
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 14:56
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893




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

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

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

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

Сообщение отредактировал мега16 - Dec 26 2010, 14:36
Go to the top of the page
 
+Quote Post
kurtis
сообщение Dec 26 2010, 14:57
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Код
#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;
}
Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 26 2010, 15:01
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(kurtis @ Dec 26 2010, 19:57) *
Код
#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;
}

Это чё?
Go to the top of the page
 
+Quote Post
kurtis
сообщение Dec 26 2010, 15:04
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



это автору
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 26 2010, 15:28
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



ВОТ СПАСИБО- это работает !
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 28 2010, 02:45
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



Блин,работает,но неправильно вытаскивает байты.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Dec 28 2010, 03:59
Сообщение #27


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(kurtis @ Dec 26 2010, 22:57) *
Код
    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)) {



--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 28 2010, 06:19
Сообщение #28


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Вот так оптимальнее будет:-)
Код
uint8_t temp = code[i];

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


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
мега16
сообщение Dec 28 2010, 07:03
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 26-12-10
Пользователь №: 61 893



Почему же так?
Код
my_type code[]={11111111,00000000,11110000,11100111};

Go to the top of the page
 
+Quote Post
Methane
сообщение Dec 28 2010, 07:19
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(мега16 @ Dec 28 2010, 12:03) *
Почему же так?
Код
my_type code[]={11111111,00000000,11110000,11100111};


11110000 это десятичное число. И причем my_type должно быть 32 бита.
Лучше сделайте себе файлик,
#define BIN0000_0000 0x00
#define BIN0000_0001 0x01
#define BIN0000_0010 0x02
#define BIN0000_0011 0x03
и инклюдьте его туда где вам нужно что-то в бинарном виде рисовать.
Go to the top of the page
 
+Quote Post

6 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 23:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01495 секунд с 7
ELECTRONIX ©2004-2016