Форум: "Система";
Текущий архив: 2002.05.16;
Скачать: [xml.tar.bz2];
ВнизCOM-порт Найти похожие ветки
← →
Tosha13 (2002-02-15 18:39) [0]Господа, помогите прочесть
и зарегистрировать импульс (0-1),подаваемый на COM порт.
Интереснеа любая информация.
Заранее благодарен.
Антон. (electret@aaanet.ru)
← →
Королев (2002-02-16 11:05) [1]можно из ассемблера, а можно из апи:
hhfile:=CreateFile("com1",
GENERIC_WRITE or GENERIC_READ,
FILE_SHARE_WRITE or FILE_SHARE_READ,
nil,
CREATE_NEW ,
FILE_ATTRIBUTE_NORMAL,
0);
with bcdc do begin bcdc тип dcb
baudrate:=2400;
bytesize:=8;
parity:=noparity;
stopbits:=onestopbit;
end;
setcommstate(hhfile,bcdc);
readfile(hhfile,bukva[i],1,nmb,0);
инициализация порта:
asm
mov dx,01h dx=>0..3 com1..com4
mov ah,0h
mov al,00000011b скорость 110бит/с
int 14h
end;
чтение:
asm
mov dx,01h
mov ah,03h
mov Result,al
int 14h
end;
← →
Королев (2002-02-16 11:55) [2]еще есть такие функции:
opencomm()
setcomm
readcomm()
тоже отлично работают
← →
Ihor Osov'yak (2002-02-17 22:17) [3]Королеву с копирайтом: за ответ двойка. Импульс это далеко
не байт, который можно читать с порта ....
Ответ по существу.
Но для начала уточняющий вопрос - На какую ногу импульс? В зависимости от ноги может быть решение через вызов
SetCommMask с соотв. атрибутами, с последующим юзанием WaitCommEvent ....
Более подробно - Serial Communications in Win32 в MSDN ...
← →
Королев (2002-02-19 06:55) [4]To Ihor Osov"yak и Tosha13
ну если действительно нужно читать именно импульс или состояние 0/1 , то лучше всего для этих целей использовать LPT порт. А вот COM порт лучше все-таки для чтения конкретного протокола RS232.
быстрее всего это будет так:
в LPT уходит Bukva - выходы порта примут значения битов Bukvы
asm
mov dx,$378
mov al,Bukva
out dx,al
end
чтение Bukvы
asm
mov dx,$378
in al,dx
mov Bukva,al
end
читает состояние линий данных порта и отсылает в Bukvу.
← →
EsKor (2002-02-20 07:40) [5]Если действительно приспичило ловить импульс по COM-порту, то это можно сделать используя следующие линии (сигналы):
DSR - сигнал готовности от аппаратуры передачи данных (6/6);
CTS - разрешение передачи данных терминалу (8/5);
DCD - сигнал обнаружения несущей удаленного модема (1/8);
RI - сигнал (индикатор) вызова (звонка) (9/22).
В скобках указаны номера контактов 9-ти/25-и контак-го разъемов.
А далее: открыть порт CreateFile(...); настроить порт GetCommState(...), SetCommState(...), GetCommTimeouts(...), SetCommTimeouts(...); установить маску (на какие события реагировать) SetCommMask(...); ждать соответствующего события WaitCommEvent(...).
Хотя поскольку, на самом деле, никакой информации приниматься не будет, то скорее всего и настраивать порт нет необходимости, как и читать его ReadFile(...).
Подробнее можно почитать (на английском) не только в MSDN, но и в Delphi Help - Windows SDK.
Можно посмотреть некоторые детали в статьях:
http://delphi.mastak.ru/articles.html - тут надо поискать статьи.
Есть статья, из пяти глав, на эту тему (не ловля импульсов), первая на http://www.delphikingdom.com/mastering/ports1.htm. В ней, правда, много ошибок, особенно где приводится перевод с английского. Главы 4 и 5 - практически в чистом виде перевод Help-а (другого автора), ошибок вроде бы нет.
← →
pasha676 (2002-02-20 10:39) [6]
Если надо найти именно 0-1 на какой нибудь ноге, то лучше подавать импульс на DSR
В проге надо
1. Создать файл порта CreateFile
2. Заполнить его DCB: GetCommState, заполняем структуру DCB, SetCommState.
3. Задать маску события которое ждем SetCommMask(<нэндл файла компорта>,EV_DSR) - если анализируем DSR.
4. Создаем паралельный поток - CreateThread
5. Функция запускаемая в этом Thread-e должна содержать
WaitCommEvent, потом сравнение какой эвент пришел:if (Mask and EV_DSR)=EV_DSR then - реакцию на событие.
Следует отметить что этот эвент реагирует на смену состояния DSR
для того чтоб узнать состояние вроде есть какая-то апишка, но я почемуто (исторически сложилось :)) пользуюсь функцией
asm
mov DX,NumComm
add DX,6
in AL,DX
mov S,AL
end;
Result:=(S and $20)=0;
S - byte, результат true, false, 20 в хексе это именно маска DSR
Все побробности использования API функций можно узнать в хелпе.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.05.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c