|
|
  |
вопрос по си, сдвиг |
|
|
|
Feb 27 2006, 04:10
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата(d71 @ Feb 27 2006, 11:13)  есть байт, надо его по битам выпихнуть на ногу МК --- сижу туплю со сдвигом, смотрю в чужие исходники и нихрена не понимаю, подскажите, а Может быть так: Код unsigned char byte; for(unsigned char i=0;i<7;i++) if(byte & (1 << i)) PORTA|=(1<<PB0); else PORTA&=~(1<<PB0); Код написал на вскидку, не проверял.
--------------------
Выбор.
|
|
|
|
|
Feb 27 2006, 04:20
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Код char c, i;
for (i = 0; i < 8; i++) { PXX = (c & 0x80) > 0; c <<= 1; // +задержка.. } или Код char c, i;
for (i = 0; i < 8; i++) { PXX = c & 1; c >>= 1; // +задержка.. } или учитывая особенности signed: Код signed char c; for (i = 0; i < 8; i++) { PXX = c < 0; c <<= 1; // +задержка.. }
Сообщение отредактировал defunct - Feb 27 2006, 04:32
|
|
|
|
|
Feb 27 2006, 04:55
|

Частый гость
 
Группа: Новичок
Сообщений: 91
Регистрация: 24-12-05
Из: г. Благовещенск
Пользователь №: 12 614

|
ну точно!  я же говорил что туплю, не в ту степь двигал вообще и получал кракозябры огромное спасибо от начинающего --- прикрепляю то над чем тупил proteus проект mega16 + 6 сдвиговых hc595 с семисегментными iar проект внутре
--------------------
нет ничего невозможного, есть трудные пути... других не ищем
|
|
|
|
|
Feb 27 2006, 05:23
|

Частый гость
 
Группа: Новичок
Сообщений: 91
Регистрация: 24-12-05
Из: г. Благовещенск
Пользователь №: 12 614

|
согласен, учту пока не владею скорострельностью Си  дельфист, пхпист, перлист - вобщем херней маялся раньше, вот и замашки соответствующей организации  спасиба
--------------------
нет ничего невозможного, есть трудные пути... других не ищем
|
|
|
|
|
Feb 27 2006, 06:30
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(defunct @ Feb 27 2006, 12:05)  Цитата(d71 @ Feb 27 2006, 06:55)  прикрепляю то над чем тупил
скомпилированный код будет более оптимальным если написать так: Код [u]signed[/u] char a; ... a=CharString(str_out[i]);
for (int y=0;y<8;y++){ isp_ds= a < 0; isp_clk=1; isp_clk=0; a <<= 1; } можно и вот так: Код
#define SSTB PB4// строб записи в параллельный регистр вывода 74595 #define SDATA PB5// последовательные данные #define SCLK PB7// синхронизация для последовательных данных
........
char count = 0x08; // счетчик выводимых бит
do { // формируем бит данных для вывода PORTB &= ~(1 << SDATA); // обнуляем порт данных if(data & (1 << 7)) // если бит 7 байта данных установлен , то устанавливаем порт данных { PORTB |= (1 << SDATA); } data <<= 1; // сдвигаем байт данных
// формируем строб записи в последовательный регистр 74595 PORTB &= ~(1 << SCLK); PORTB |= (1 << SCLK); } while(--count);
--------------------
|
|
|
|
|
Feb 27 2006, 07:30
|

Частый гость
 
Группа: Новичок
Сообщений: 91
Регистрация: 24-12-05
Из: г. Благовещенск
Пользователь №: 12 614

|
вот-вот, пугающие исходники получаются я остановлюсь пока на том что работает. дело в том что проект не маленький, и вот таких кусочков много. оптемизировать пока смысла нет, если войдет в мегу16, то мозможно вообще не надо будет оптемизации, но всё равно спасибо, думаю можно в факи эту тему
--------------------
нет ничего невозможного, есть трудные пути... других не ищем
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|