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

 
 
> Как из Байта получить восемь значений 0 и 1, CodeVision AVR
Vny4ek
сообщение Dec 23 2008, 13:27
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 145
Регистрация: 11-01-08
Пользователь №: 34 001



Есть байт который я могу вывести на дисплей в виде FF или 02 но мне нужно записать в битовый масив на 8 ячеек что бы там было 0 или 1
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Goodefine
сообщение Dec 25 2008, 21:03
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Цитата(Сергей Борщ @ Dec 25 2008, 23:42) *
Я заменил PORTW на PORTD, поскольку у меги8 нет порта...

Дык и я заменил smile.gif
Код
#define PORTW PORTD

Цитата(Сергей Борщ @ Dec 25 2008, 23:42) *
Никакой ругани...

У Вас объектный код (*.cpp)? Привожу скриншот компиляции Вашего кода (просто вставил его в рабочий проект) в WinAVR 20080610 под AVR Studio 4
А вот так компилится:
Код
void Test1(uchar byte, uchar bitmask)
{
PORTD=(byte & bitmask)? PORTD | (1<<BIT): PORTD & ~(1<<BIT);
}

Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post
DenisIV
сообщение Dec 25 2008, 21:27
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 68
Регистрация: 11-12-08
Из: Республика Беларусь, г.Минск
Пользователь №: 42 380



Цитата(Goodefine @ Dec 26 2008, 00:03) *
Дык и я заменил smile.gif
Код
#define PORTW PORTD


У Вас объектный код (*.cpp)? Привожу скриншот компиляции Вашего кода (просто вставил его в рабочий проект) в WinAVR 20080610 под AVR Studio 4
А вот так компилится:
Код
void Test1(uchar byte, uchar bitmask)
{
PORTD=(byte & bitmask)? PORTD | (1<<BIT): PORTD & ~(1<<BIT);
}

Попробуйте разделить все три прцедуры на строчки и поймёте где трабл. Да, не нравятся ему аргументы, но в какой позиции строки он не написал.
Кстати, посмотрите, byte может у вас определено ранее #defin'ом как unsigned char? Может просто имя переменной поменять?

Ксати, глотнул пива, идея пришла: А не прокатит ли такая конструкция:
Код
for ((Direction)? mask=1<<0:mask=1<<7;mask;(Direction)? mask<<=1:mask>>1)
{PORTx=(*byte&mask)? PORTx|(1<<BIT):PORTx&~(1<<BIT);delay_us(x);}

Сюда даже вместо 7 (в 'for') можно как-то подставить sizeof(); (хоть в байтах*8-1,хоть в битах-1) ?
Тогда прога будет просто супер универсальной! (Я даже себе в библию программиста запишу lol.gif )
И если Direction задано через union...struct... как бит, то налицо ещё и прямая экономия места... ?

Сообщение отредактировал DenisIV - Dec 25 2008, 22:08
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 25 2008, 22:46
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(DenisIV @ Dec 25 2008, 23:27) *
Сюда даже вместо 7 (в 'for') можно как-то подставить sizeof(); (хоть в байтах*8-1,хоть в битах-1) ?
sizeof(mask) * __CHAR_BITS__
Цитата(DenisIV @ Dec 25 2008, 23:27) *
И если Direction задано через union...struct... как бит, то налицо ещё и прямая экономия места... ?
Скажем так: если это константа, известная на этапе компиляции. В С++ она может быть параметром шаблона.


Цитата(DenisIV @ Dec 26 2008, 00:40) *
итого мы можем:
Код
(Direction)? mask=1<<0:mask=1<<7;
while(mask)
  {
   PORTx=(*byte&mask)? PORTx|(1<<BIT):PORTx&~(1<<BIT);
   delay_us(x);
   (Direction)? mask<<=1:mask>>1)
  }
Да. Если мы пойдем еще дальше, и заметим, что при входе в цикл mask никак не может быть равно нулю, т.е. цикл всегда должен выполниться хотя бы один раз - мы можем заменить цикл while() {} на более оптимальный do {} while():
Код
mask=1<<(Direction) ? 0 : 7;
do
{
   *byte & mask ? PORTx |= (1<<BIT) : PORTx &= ~(1<<BIT);
   delay_us(x);
}
while ( Direction ? mask<<=1 : mask>>1 );


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Vny4ek   Как из Байта получить восемь значений 0 и 1   Dec 23 2008, 13:27
- - Палыч   Используем цикл Кодunsigned char Byte, i, Bit...   Dec 23 2008, 13:31
- - SysRq   А цель-то какая сего действа? Как "битовый ма...   Dec 23 2008, 16:39
- - Goodefine   Цитата(Vny4ek @ Dec 23 2008, 16:27) Есть ...   Dec 23 2008, 17:40
- - Vny4ek   цель такая: нужно сделать передачу информации, в в...   Dec 24 2008, 06:21
|- - Палыч   Цитата(Vny4ek @ Dec 24 2008, 09:21) ...во...   Dec 24 2008, 06:51
- - Goodefine   Цитата(Vny4ek @ Dec 24 2008, 10:21) цель ...   Dec 24 2008, 07:31
|- - SysRq   Цитата(Goodefine @ Dec 24 2008, 10:31) Ко...   Dec 24 2008, 10:55
- - Goodefine   Цитата(SysRq @ Dec 24 2008, 14:55) Правил...   Dec 24 2008, 11:07
|- - Палыч   Цитата(Goodefine @ Dec 24 2008, 14:07) Ну...   Dec 24 2008, 11:51
|- - DenisIV   Цитата(Goodefine @ Dec 24 2008, 14:07) Ну...   Dec 24 2008, 12:19
- - Goodefine   Цитата(Палыч @ Dec 24 2008, 15:51) ...Пер...   Dec 24 2008, 12:01
|- - SysRq   Цитата(Goodefine @ Dec 24 2008, 15:01) С ...   Dec 25 2008, 12:50
|- - DenisIV   Цитата(SysRq @ Dec 25 2008, 15:50) Вполне...   Dec 25 2008, 13:15
- - Goodefine   Цитата(DenisIV @ Dec 24 2008, 16:19) Обыч...   Dec 24 2008, 13:22
- - xemul   Странно, что еще до интегралов не добрались... Код...   Dec 25 2008, 14:13
|- - DenisIV   Цитата(xemul @ Dec 25 2008, 17:13) Странн...   Dec 25 2008, 17:23
|- - rezident   Цитата(DenisIV @ Dec 25 2008, 22:23) иног...   Dec 25 2008, 17:36
- - Goodefine   Цитата(xemul @ Dec 25 2008, 17:13) Код......   Dec 25 2008, 18:19
|- - Сергей Борщ   Цитата(Goodefine @ Dec 25 2008, 20:19) Ко...   Dec 25 2008, 20:13
|- - _Pasha   Цитата(Сергей Борщ @ Dec 26 2008, 00:13) ...   Dec 26 2008, 12:45
- - Goodefine   Цитата(Сергей Борщ @ Dec 25 2008, 23:13) ...   Dec 25 2008, 20:27
|- - Сергей Борщ   Цитата(Goodefine @ Dec 25 2008, 22:27) у ...   Dec 25 2008, 20:42
|- - Сергей Борщ   Цитата(Goodefine @ Dec 25 2008, 23:03) У ...   Dec 25 2008, 22:40
- - DenisIV   Ещё глотнул пива... Ведь оператор for работает так...   Dec 25 2008, 22:40
- - Goodefine   Цитата(DenisIV @ Dec 26 2008, 00:27) Попр...   Dec 25 2008, 22:56
|- - DenisIV   Цитата(Goodefine @ Dec 26 2008, 01:56) Та...   Dec 25 2008, 23:42
|- - zltigo   Цитата(DenisIV @ Dec 26 2008, 02:42) Похо...   Dec 26 2008, 07:48
|- - DenisIV   Цитата(zltigo @ Dec 26 2008, 10:48) Реком...   Dec 26 2008, 12:25
|- - zltigo   Цитата(DenisIV @ Dec 26 2008, 15:25) Я ра...   Dec 26 2008, 13:06
- - Goodefine   Цитата(DenisIV @ Dec 26 2008, 03:42) Могу...   Dec 26 2008, 06:52
- - Goodefine   Цитата(_Pasha @ Dec 26 2008, 16:45) была ...   Dec 26 2008, 13:47
- - rezident   Сообщение модератора. Уважаемые, участники! За...   Dec 26 2008, 14:05


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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