Листинг.1. Процедура BS_data_exchange. //перед вызовом процедуры в глобальном массиве 3-х переменных out_buff //должны содержаться 3 байта с информацией в соответствии с алгоритмом, //описанным в пункте 2.1. настоящей документации procedure BS_data_exchange(port_number: LPCTSTR); var byte_count, bit_count: integer; //счетчики байт и бит modemstatus: dword; //регистр состояния COM-порта comh: hFile; //файл COM-порта CONST DELAY_=2; //задержка формирования //импульсов интерфейса begin in_buff:=0; //инициализируем входной буффер comh:=CreateFile(port_number,GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); //открываем //порт на чтение и запись в соответствии с описанием функции CreatFile, //первым параметром передается передается номер COM-порта: если //port_number=’\\.\COM1’, то COM1, если port_number=’\\.\COM2’, то COM2 EscapeCommFunction(comh, CLRDTR); //сброс EscapeCommFunction(comh, CLRDTR);sleep(DELAY_); EscapeCommFunction(comh, SETDTR);sleep(DELAY_); //формируем EscapeCommFunction(comh, SETRTS);sleep(DELAY_); //стартовую EscapeCommFunction(comh, CLRRTS);sleep(DELAY_); //последовательность EscapeCommFunction(comh, CLRDTR);sleep(DELAY_); //импульсов for byte_count:=0 to 2 do //отсчитывааем байты begin for bit_count:=0 to 7 do //отсчитываем биты begin if(out_buff[byte_count] shl bit_count) and $80>0 then EscapeCommFunction(comh, SETRTS) //передаем один бит else EscapeCommFunction(comh, CLRRTS); sleep(DELAY_); GetCommModemStatus(comh, modemstatus); //принимаем один бит if (modemstatus and MS_CTS_ON<>0) then in_buff[byte_count]:=in_buff[byte_count]+($80 shr bit_count); EscapeCommFunction(comh, SETDTR);sleep(2* DELAY_); // формируем EscapeCommFunction(comh, CLRDTR);sleep(DELAY_); // импульс //синхронизации end; end; CloseHandle(comh); //закрываем порт end;