Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› модем
Посл.ответ Сообщение

Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 25 октября 2006 02:03
· Личное сообщение · #1

Проблема в следующем:
запрограммировал COM1 порт (скорость, стоп-биты, четность, прерывания...), затем начинаю передавать через регистр данных (3f8h) команды модему, а он молчит.
смотрел исходники Menuet, но разобраться не смог, там все через int 40h делается.
прочитал Фролова - "Программирование модемов", вроде все так делаю
Может чего-то не понимаю?
Вот текст программы:
code segment
org 100h

base equ 3f8h
assume cs:code, ds:code
start: jmp short entry

at db 'at dp 490497'

label entry near

;инициализация порта COM1

;записать нулевое заначение в регист управления модемом
;чтобы обнулить сигналы DTR и RTS

mov dx,base+4
xor al,al
out dx,al

;обнуляем регистры: состояния линии, данных и регистр состояния модема

mov dx,base ;регистр данных
xor al,al
out dx,al
mov dx,base+5 ;состояния линии
out dx,al
mov dx,base+6 ;регистр состояния модема
out dx,al

;устанавливаем скорость порта

mov dx,base+3
mov al,80h
out dx,al
mov dx,base
mov al,60h ;скорость 1200 bod
out dx,al
mov dx,base+1
xor al,al
out dx,al

;устанавливаем кол-во стоп бит, четность и прерывания

mov dx,base+3
mov al,03h
out dx,al
mov dx,base+1
xor al,al
out dx,al

;устанавливаем сигналы DTR и RTS

mov dx,base+4
in al,dx
or al,03h
out dx,al

;ожидаем когда освободится регистр передатчика

_wait: mov dx,base+5
in al,dx
test al,40h
jz _wait

;передаем модему команду AT

xor si,si
mov dx,base
mov al,at[si]
out dx,al

inc si
mov dx,base
mov al,at[si]
out dx,al
mov al,13h
out dx,al

;передаем команду ATD

xor si,si
mov dx,base
mov al,at[si]
out dx,al

_at: inc si
mov dx,base
mov al,at[si]
out dx,al
cmp si,11
jnz _at

mov al,13h
out dx,al ;после этого модем должен начать дозвон

_exit: mov ax,4c00h
int 21h

code ends
end start



Ранг: 20.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 27 октября 2006 04:02
· Личное сообщение · #2

Когда я работал с модемом, то использовал WriteFile, т.е. вызываем CreateFile в качестве имени передаём строку типа "com1" (номер com'a где модем), а затем через WriteFile посылаем команды. Возможно, винда блочит прямое обращение к порту.



Ранг: 22.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 27 октября 2006 06:14
· Личное сообщение · #3

Интересно кто тебе разрешит прямое взаимодействие с портом из ring3, вот из ring0 это сработало бы. А тут Player прав, через CreateFile\WriteFile нужно.



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 27 октября 2006 22:45
· Личное сообщение · #4

kirillxskynet пишет:
запрограммировал COM1 порт

И на Си и на Дельфи есть туча свободных прог/библ (в т.ч. и с текстами) для Виндов.
Или работай в ДОС.



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 28 октября 2006 01:43
· Личное сообщение · #5

Ребята, я и работаю в DOS, реальный режим
с виндой все понятно и так



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 01 ноября 2006 05:32
· Личное сообщение · #6

kirillxskynet пишет:
я и работаю в DOS,

А чего в инструкциях на модем написано, что команду AT можно маленькими буквами давать ?! Все большими, может только где-то в спец-командах маленькие. Про пробел не уверен, но всю жизнь ATDP и ATDT задавал. Это ж изначально простая железяка была, там даже процессора не было сначала.



Ранг: 20.8 (новичок)
Активность: 0.010
Статус: Участник

Создано: 02 ноября 2006 01:54
· Личное сообщение · #7

Точно, tundra37 прав нельзя с пробелом писать atdp.
AT - Начало (префикс) командной строки. Эти две буквы являются префиксом для остальных команд, и в тоже время имеют самостоятельное значение. Это так называемая пустая команда. После получения этой команды модем автоматически подстраивает скорость передачи и формат знака к параметрам терминала.
Также, лучше писать команды в верхнем регистре (на всякий случай :s3.



Ранг: 7.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 ноября 2006 03:17
· Личное сообщение · #8

в верхнем регистер писать или в нижнем никакой разницы
это во всех мануалах написано, и сам пробовал



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 08 ноября 2006 03:01
· Личное сообщение · #9

kirillxskynet пишет:
mov al,13h

Может ты и прав. Но вот "Enter" имеет код 13(десятичное), а шестнадцатиричное будет 0Dh


 eXeL@B —› Программирование —› модем
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати