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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2011, 08:54   #1
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
Смущение Считка данных по-битно из COM порта

Всем привет! У меня возник вопрос. Как можно из COM порта считать информацию по-битно? В виде 0 и 1.
Вот пример кода, который позволяет читать байты из порта:
Код:
Function TByte(X: Byte): Byte;
Var
N: Integer;
B: Byte;
D,Time: DWord;
Begin
Result:=$FF;
SetModCom(115200,8,NOPARITY,ONESTOPBIT,True,False);
PurgeCom;
Time:=GetTickCount + 50;
For N:=1 To 8 Do
Begin
If Odd(X) Then
TxByteCOM($FF)
Else
TxByteCOM($00);
X:=X Shr 1;
Repeat
RxDataCOM(B,1,D);
Until
(D = 1) Or (Time < GetTickCount);
If D <> 1 Then
Exit;
If Odd(B) Then
X:=X Or $80;
If Odd(B Xor CRC) Then
CRC:=((CRC Xor $18) Shr 1) Or $80
Else
CRC:=CRC Shr 1;
End;
Result:=X;
End;
Как его можно изменить, что бы можно было читать биты в виде 0 и 1? Или может нужно написать дополнительную функцию, которая конвертировала из байт в биты?
На С++ я видел используется следующий код:
Код:
* Read a bit from the 1-wire bus and return it.
 */
uint8_t
OWReadBit(void) {
    OWdelay();

    OWIREOUTPORT &= ~(_BV(OWIREOUTPIN));
    OWIREDDR |= _BV(OWIREOUTPIN);
    DELAY_A;
    OWIREDDR &= ~(_BV(OWIREOUTPIN));
    DELAY_E;
    return(OWIREINPORT & _BV(OWIREINPIN) ? 1 : 0);
}
но С++ я не знаю...
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 22.11.2011, 09:00   #2
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

так в чем проблема? если вы получили байты, то и напишите функцию, которая будет байты превращать в последовательностей битов, и выводите ее хоть строкой или массивом динамическим из логических переменных
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 22.11.2011, 09:34   #3
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Вот набросал для вас функцию получения битов из байта:
Код:
function ByteToBits(const AByte:Byte):AnsiString;
var
  i,LMask:Byte;
  LBit:AnsiString;
begin
  LMask:=1;
  SetLength(Result,8);
  for i:=8 downto 1 do
  begin
    LBit:=IntToStr(Ord((AByte and LMask)=LMask));
    Result[i]:=LBit[1];
    LMask:=LMask shl 1;
  end;
end;

//использование
procedure TForm2.Button1Click(Sender: TObject);
begin
  Label1.Caption:=ByteToBits(StrToInt(Edit1.Text));
end;
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 23.11.2011, 04:19   #4
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

3D Hunter, большое спасибо!
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
расшифровка данных, принятых с COM-порта IIUH Общие вопросы Delphi 25 12.04.2021 14:05
получение данных с COM порта Delphi (проблема) IIUH Помощь студентам 6 08.11.2011 12:22
считка массива из файла aank10 C++ Builder 0 10.10.2011 18:43
Чтение данных с COM порта 232 Dimitr_88 Общие вопросы C/C++ 10 03.09.2010 10:39
Приём данных с com порта kyc0k Помощь студентам 3 28.03.2008 15:04