Com Port
На этом сайте есть статья Программирование COM портов. Там указаны адреса портов и изменения битов в зависимости от операции.
...биты у меня не меняются при обращении на эти адреса, (всё включено, прибор посылает данные на порт)...
Насколько я могу понять программа будет состоять из "2 строчек"
mov dx, 3FDh
in ax,dx ;ввод значения из порта ввода-вывода
ax постоянно равен 0000h Помогите разобраться, плз!
ORG 100h
lup:
call listen
call Compare
jmp lup
listen:
mov dx, 3FDh
in ax,dx
ret
Compare:
cmp ax,(твоё значение)
je (Твоя метка)
cmp ax,1
je Print
ret
Send:
mov dx,3FDh
out ax,dx
ret
Print:
mov ax,1
call Send
ret
(Это конечно не идеальный алгоритм,просто времени нет!)
Если можешь,предоставь нам код!(На расмотрение,а в друг у тебя там синтаксическая ошибка ;) )
...И что это за прибор,принтер? ;)
CSEG segment
start:
X:
mov dx, 3fdh
in ax,dx
jmp x
CSEG ends
end start
Может будешь читать КОМ порт средствами ДОС?
DOS Fn 03H: Вспомогательный ввод AUX
Вход
* AH = 03H
Выход
* AL = символ, полученный со стандартного вспомогательного устр-ва
Описание:
Считывает (ожидает) символ со стандартного вспомогательного устройства, COM1 или AUX и возвращает этот символ в AL.
Замечание:
ввод не буферизуется и должен опрашиваться (не управляется прерываниями). при запуске DOS порт AUX (COM1) инициализируется так: 2400 бод, без проверки на четность, 1 стоп-бит, 8-битовые слова. Команда DOS MODE используется для установки иных характеристик.
PS Если последовательный порт это КОМ1,то тебе к INT 14h
Этого не досчтаточно,ты видно плохо читал!
Может будешь читать КОМ порт средствами ДОС?
DOS Fn 03H: Вспомогательный ввод AUX
Вход
* AH = 03H
Выход
* AL = символ, полученный со стандартного вспомогательного устр-ва
Описание:
Считывает (ожидает) символ со стандартного вспомогательного устройства, COM1 или AUX и возвращает этот символ в AL.
Замечание:
ввод не буферизуется и должен опрашиваться (не управляется прерываниями). при запуске DOS порт AUX (COM1) инициализируется так: 2400 бод, без проверки на четность, 1 стоп-бит, 8-битовые слова. Команда DOS MODE используется для установки иных характеристик.
PS Если последовательный порт это КОМ1,то тебе к INT 14h
...собственно у меня не стоит задача считывать данные с ком_порта на низко уровнев, мне нужно узнать что данные готовы к отправке тоесть (если я правильно понимаю) состояние пинов... как раз адрес 3fdh это мне и даёт. А эта часть программы будет являться функцией в моей основной программе... Где я и считываю данные с компорта. Да тогда возникает вопрос, а почему я не могу отследить данные с помощью дельфи, (основная программа пишиться на дельфе) в основной программе, а не могу потому, что не знаю как работает та или иная фанкция,... тоесть например откуда комп будет знать, что For это цикл... получается что for описан некоторым командным кодом,... так или нет? Так вот... поэтому я и решил написать обработчик порта... работа которого как наладони,... мне просто нужна некая переменная которая будет содержать "1"-данные готовы для чтения, или "0" данных нет, реализованная на низком уровне...
...собственно у меня не стоит задача считывать данные с ком_порта на низко уровнев, мне нужно узнать что данные готовы к отправке тоесть (если я правильно понимаю) состояние пинов... как раз адрес 3fdh это мне и даёт. А эта часть программы будет являться функцией в моей основной программе... Где я и считываю данные с компорта. Да тогда возникает вопрос, а почему я не могу отследить данные с помощью дельфи, (основная программа пишиться на дельфе) в основной программе, а не могу потому, что не знаю как работает та или иная фанкция,... тоесть например откуда комп будет знать, что For это цикл... получается что for описан некоторым командным кодом,... так или нет? Так вот... поэтому я и решил написать обработчик порта... работа которого как наладони,... мне просто нужна некая переменная которая будет содержать "1"-данные готовы для чтения, или "0" данных нет, реализованная на низком уровне...
Как я понял из жутко сбивчивого сего объяснения - так называемая "прога" пишется все таки под Windows. В таком случае чем не устраивает функция ClearCommError()?
The ClearCommError function retrieves information about a communications error and reports the current status of a communications device. The function is called when a communications error occurs, and it clears the device's error flag to enable additional input and output (I/O) operations.
BOOL ClearCommError(
HANDLE hFile,
LPDWORD lpErrors,
LPCOMSTAT lpStat
);
Parameters:
hFile
[in] Handle to the communications device. The CreateFile function returns this handle.
lpErrors
[out] Pointer to a variable to be filled with a mask indicating the type of error. This parameter can be one or more of the following values. Value Meaning
CE_BREAK The hardware detected a break condition.
CE_DNS Windows Me/98/95: A parallel device is not selected.
CE_FRAME The hardware detected a framing error.
CE_IOE An I/O error occurred during communications with the device.
CE_MODE The requested mode is not supported, or the hFile parameter is invalid. If this value is specified, it is the only valid error.
CE_OOP Windows Me/98/95: A parallel device signaled that it is out of paper.
CE_OVERRUN A character-buffer overrun has occurred. The next character is lost.
CE_PTO Windows Me/98/95: A time-out occurred on a parallel device.
CE_RXOVER An input buffer overflow has occurred. There is either no room in the input buffer, or a character was received after the end-of-file (EOF) character.
CE_RXPARITY The hardware detected a parity error.
CE_TXFULL The application tried to transmit a character, but the output buffer was full.
lpStat
[out] Pointer to a COMSTAT structure in which the device's status information is returned. If this parameter is NULL, no status information is returned.
Return Values
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Remarks
If a communications port has been set up with a TRUE value for the fAbortOnError member of the setup DCB structure, the communications software will terminate all read and write operations on the communications port when a communications error occurs. No new read or write operations will be accepted until the application acknowledges the communications error by calling the ClearCommError function.
The ClearCommError function fills the status buffer pointed to by the lpStat parameter with the current status of the communications device specified by the hFile parameter.
Параметр №3. Поле "cbInQue " в структуре "COMSTAT" как раз отражает наличие байтов во входном буфере.
The COMSTAT structure contains information about a communications device. This structure is filled by the ClearCommError function.
typedef struct _COMSTAT
{
DWORD fCtsHold :1;
DWORD fDsrHold :1;
DWORD fRlsdHold :1;
DWORD fXoffHold :1;
DWORD fXoffSent :1;
DWORD fEof :1;
DWORD fTxim :1;
DWORD fReserved :25;
DWORD cbInQue;
DWORD cbOutQue;
} COMSTAT, *LPCOMSTAT;
Members:
fCtsHold
If this member is TRUE, transmission is waiting for the CTS (clear-to-send) signal to be sent.
fDsrHold
If this member is TRUE, transmission is waiting for the DSR (data-set-ready) signal to be sent.
fRlsdHold
If this member is TRUE, transmission is waiting for the RLSD (receive-line-signal-detect) signal to be sent.
fXoffHold
If this member is TRUE, transmission is waiting because the XOFF character was received.
fXoffSent
If this member is TRUE, transmission is waiting because the XOFF character was transmitted. (Transmission halts when the XOFF character is transmitted to a system that takes the next character as XON, regardless of the actual character.)
fEof
If this member is TRUE, the end-of-file (EOF) character has been received.
fTxim
If this member is TRUE, there is a character queued for transmission that has come to the communications device by way of the TransmitCommChar function. The communications device transmits such a character ahead of other characters in the device's output buffer.
fReserved
Reserved; do not use.
cbInQue
Number of bytes received by the serial provider but not yet read by a ReadFile operation.
cbOutQue
Number of bytes of user data remaining to be transmitted for all write operations. This value will be zero for a nonoverlapped write.
MSDN читать надо, для того его и писали в конце концов.
Стоит только хорошо поискать и заниматься имением мозгов и вовсе не придется см. аттач. Добавляем требуемый функционал и радуемся.