|
|
  |
Как последовательно вытаскивать биты из массива? |
|
|
|
Dec 26 2010, 14:23
|
Участник

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

|
Байт то в порт выводит, в том же коде есть,просто из массива вытаскивать не умею. На JAVA для АВР компилятор есть чтоли?
|
|
|
|
|
Dec 26 2010, 14:31
|

Гуру
     
Группа: Свой
Сообщений: 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.
|
|
|
|
|
Dec 26 2010, 14:56
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Dec 26 2010, 15:01
|

Гуру
     
Группа: Свой
Сообщений: 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; } Это чё?
|
|
|
|
|
Dec 26 2010, 15:28
|
Участник

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

|
ВОТ СПАСИБО- это работает !
|
|
|
|
|
Dec 28 2010, 02:45
|
Участник

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

|
Блин,работает,но неправильно вытаскивает байты.
|
|
|
|
|
Dec 28 2010, 03:59
|

фанат дивана
     
Группа: Свой
Сообщений: 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)) {
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Dec 28 2010, 07:03
|
Участник

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

|
Почему же так? Код my_type code[]={11111111,00000000,11110000,11100111};
|
|
|
|
|
Dec 28 2010, 07:19
|

Гуру
     
Группа: Свой
Сообщений: 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 и инклюдьте его туда где вам нужно что-то в бинарном виде рисовать.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|