Листинг

advertisement
Листинг.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;
Download