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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2010, 00:19   #1
antinup
 
Регистрация: 27.05.2010
Сообщений: 4
По умолчанию win32 RS-232C послать последовательность бит в байте.

Итак, задача:

ОТослать по протоколу RS-232C с помощью программирования под win32 API байт с логигической последовательность бит: 01111111(единица перавая остальные, нули).
Если расматривать на физическом уровне, то сигнал по протоколу RS-232С должен быть с инверсией, то есть:

11111111111111111010000000111111111 1

Там где 1 - уровень напряжения +3-+12В
где 0 -уровень напряжения -3--12В.

Главная задача из этого участка выделить 10100000001 которую будет распозновать МК и что-то с ней делать.

Вопрос реально ли вообще с помощь этого протокола RS-232C создать такую последовательность физических импульсов, или байт будет передаваться пакетом со всеми заголовками, которые будут поступать на МК и мешать нам.

Последний раз редактировалось antinup; 30.05.2010 в 00:31.
antinup вне форума Ответить с цитированием
Старый 30.05.2010, 00:51   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

вы конечно звиняйте, но вы пошли по форумам, и я уже вам ответил... отвечу и тут:

...и что вам мешает послать байт 01111111 = $7F ...а протоколом пусть система занимается
Код:
DCB dcb;
GetCommState(hCom_1, &dcb);

dcb.BaudRate = CBR_115200;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.fParity = 0;
SetCommState(hCom_1, &dcb);

COMMTIMEOUTS timeouts;
timeouts.ReadIntervalTimeout = 1;
timeouts.ReadTotalTimeoutConstant = 1;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.WriteTotalTimeoutConstant = 10;
timeouts.WriteTotalTimeoutMultiplier = 0;
SetCommTimeouts(hCom_1, &timeouts);
далее посылаем байт... прием с ожиданием можете убрать
Код:
OVERLAPPED o;
o.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

// тестовый байт для проверки устройства
const BYTE TEST_BYTE[] = {0, 0x7F};
DWORD bytesCount;

WriteFile(hCom_1, &TEST_BYTE[0], 2, &bytesCount, &o);

DWORD error = GetLastError();
if(error == ERROR_IO_PENDING){
DWORD result = WaitForSingleObject(o.hEvent, 50);
if(result == WAIT_TIMEOUT){
CloseHandle(hCom_1);
return FALSE;
}
}else{
CloseHandle(hCom_1);
return FALSE;
}

Sleep(50);

BYTE receivedByte[128] = {0};
ReadFile(hCom_1, &receivedByte[0], 128, &bytesCount, &o);
error = GetLastError();
if(error == ERROR_IO_PENDING){
DWORD result = WaitForSingleObject(o.hEvent, 200);
if(result == WAIT_TIMEOUT){
CloseHandle(hCom_1);
return FALSE;
}else{
BOOL replyFound = false;
for(int i=0; i<128 && !replyFound; i++){
replyFound = (receivedByte[i] == 0x7F);
}
CloseHandle(hCom_1);
///return replyFound; // возвращаем
}
}else{
CloseHandle(hCom_1);
return FALSE;
}
Цитата:
байт с логигической последовательность бит: 01111111(единица перавая остальные, нули).
кстати, вы уж определитесь, что у вас все таки "1", а что "0"
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 01.06.2010, 22:10   #3
antinup
 
Регистрация: 27.05.2010
Сообщений: 4
По умолчанию

Вот собственно выложил, то что хочу реализовать.
http://holmsk.com/gif_1.gif
запутался с инвертированием, допустим на вход MAX232 идет посылка:
111111110011111111111111111, то есть мы переслали следующий байт:01111111

где, 0 – (напряжение +5 - +15В)
1 – (напряжение -5 - -15В)

тогда после преобразования, что получит?
это же: 111111110011111111111111111
только, 0 – (напряжение примерно 0В)
1 – (напряжение +5В)
antinup вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В каждом байте... yoorich Общие вопросы C/C++ 3 09.04.2010 21:19
сколько электронов в одном байте? Ringsheep Помощь студентам 12 25.03.2010 09:37
Ковертирование из png 24 бит в png 8 бит isat Общие вопросы .NET 0 22.03.2010 13:38
RS-232C и Flash память Into the dark Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 23.01.2010 18:37
HLLW.Shadow.based / Net-Worm.Win32.Kido / Win32.Conficker / W32.Downadup Pirotexnik Безопасность, Шифрование 13 27.03.2009 14:02