Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2011, 23:32   #1
Oleg1988
 
Регистрация: 31.05.2010
Сообщений: 7
По умолчанию Сложить биты в байт и разложить назад

С помощью форума нашел пример как из массива бит сделать байт
Код:
if pinb4_bit=0 then   b[i] :=1 else  b[i] :=0;

  if i=7 then begin
    For I := 0 to 7 do  

  d[a] := d[a] or (b[i]);
  d[a]:=d[a] shl 1;
End;    inc(a);  i:=-1; end; inc(i);
Теперь незнаю как разложить обратно.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 30.03.2011 в 23:41.
Oleg1988 вне форума Ответить с цитированием
Старый 30.03.2011, 23:49   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

давай так - напишите, что у Вас есть и что Вы хотите получить...

p.s. а вообще из одного байта получить массив бит не просто, А ОЧЕНЬ ПРОСТО:
Код:
  for i:=8 downto 1 do begin
    b[i] := (A and 1);
    A := A shr 1;
  end;
кроме описания переменных - это полный код!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.03.2011, 23:51   #3
Oleg1988
 
Регистрация: 31.05.2010
Сообщений: 7
По умолчанию

Афигеть, теперь скорость передачи данных повысится до 2кб\с . Раньше я передавал каждый бит отдельным пакетом. Более детальный код.

[CODE]

begin

if pinb4_bit=0 then b[i] :=1 else b[i] :=0;

if i=7 then begin // сдесь мы принимаем биты и слаживаем их в байты
For I := 0 to 7 do
d[a] := d[a] or (b[i]);
d[a]:=d[a] shl 1;
End; inc(a); i:=-1;

end;
inc(i); tcnt0:=0; TOIE0_bit :=1; tcnt0:=0;
end;


procedure peredacha; org $012;
begin
TOIE0_bit:=0; k:=0; k:=a; a:=0;


for a:=0 to k do begin b[i]:= d[a] ; \\ сдесь принимаем байты и разлаживаем на биты
for i:=7 downto 0 do begin
b[i]:= (b[i] and 1); if b[i]=%1 then UART1_Write_text ('1'); if b[i]=%0 then UART1_Write_text ('0'); \\ выводим на экран принятое
b[i]:= b[i] shr 1;
End;

end; TOIE0_bit:=0; UART1_Write(10); UART1_Write(13);

end;
[/СODE]
Почемуто после разложения байт=бит на экране одни 000. Гдето есть ошибка.

Последний раз редактировалось Oleg1988; 31.03.2011 в 00:31. Причина: pзабы
Oleg1988 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Биты Leshiy1 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 20.03.2011 16:21
Найти байт максимальным количестов единиц и байт с максмальным количеством нулей и разность (ассемблер) Beren42 Помощь студентам 0 15.12.2010 20:32
Зеркально поменять местами биты. Си. Аnтоn Помощь студентам 0 09.12.2010 16:22
Байты и биты Karp_13 Общие вопросы Delphi 9 10.11.2009 00:33
Сбросить 3,5,7 биты veter_s_morya Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 20.05.2008 09:43