![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с com портами [D6, Win95/98]
mike_g © (2004-03-04 15:34:00)Не в одной литературе по Delphi я не нашол информации по встроеному языку assembler. Большая просьба помоч разрешить одну проблему.
Я задался целью написать на Delphi аналог программы кат. написана на TurboPascal 7.0. В ней имются процедуры написанные на assembler кат. производят передачу информации в COM-порт.
Например-
procedure TfmNmz.FormCreate(Sender: TObject);
begin //FormCreate
SetRate(6); // установить скорость 19200
SetControl(cc8Bits); // установить длинну 8 бит, 1
....
....
end;
cc8Bits= 3;-константа
//==========================================
procedure SetRate(W:word);assembler;
asm
mov dx,comControl
in al,dx
mov ah,al чтение регистра контроля линии и сохранение его значения
or al,ccDividerBit установка 7 бита в 1 для установки скорости обмена out dx,al
mov dx,comDividerLo
mov al,W.byte[0]
out dx,al
mov dx,comDividerHi
mov al,W.byte[1]
out dx,al пишем в регистры делителя значение переданное параметром
mov dx,comControl
mov al,ah
out dx,al возвращаем начальное значение регистра
end;
//==========================================
procedure SetControl(V:byte);assembler;
asm
mov dx,comControl
mov al,V
out dx,al инициализация регистра управления портом
end;
//==========================================
Как дело доходит до непосредственной передачи в порт (out dx,al) компьютер начинает виснуть.
Может в Delphi эти действия вообще производятся както по другому, ведь в программе написанной на TurboPascal всё работает.
И вобще хотелось бы получить информцию по работе с портами. Зарание блогадарен Андрей.
KSergey (2004-03-05 07:59:00) [1]> [8] Graf (05.03.04 07:52)
> Чего вы все про 9х! Кто ею сейчас юзается. А как это сделать
> в 2K и XP?
А почитать форум за последние дня 2-3 - стабо? Этот вопрос поднимался уже не раз!!!
PS
Может новые темы для курсовых выдали? ;)
Graf (2004-03-05 07:52:00) [2]Чего вы все про 9х! Кто ею сейчас юзается. А как это сделать в 2K и XP?
Talla2k (2004-03-05 02:29:00) [3]В 9x можно!
Вот процедурки:
procedure port(addr:word;value:byte);
begin
asm
mov dx,addr
mov al,value
out dx,al
end;
end;
procedure onbyte(bbyte:char);
var dermo:word;
begin
dermo:=base+5;
{G+} asm
mov al,bbyte
mov dx,base
out dx,al
@si: mov dx,dermo
in al,dx
and al,0100000b
jz @si
end; {G-}
end;
procedure priem(var dat:byte);
var ddat:byte; dermo:word;
begin
dermo:=base+5;
asm
jmp @st
@ss3: mov al,$0d
jmp @ss4
@st: mov cx,$5000
@ss2: dec cx
cmp cx,0
jz @ss3
mov dx,dermo
in al,dx
and al,$01
jz @ss2
mov dx,base
in al,dx
@ss4:mov ddat,al
end; dat:=ddat;
end;
А работать так
base:=$3f8;
port(base+3,$80);port(base+1,$0);
port(base,$0c);port(base+3,$03);
port(base+1,$0);port(base+4,$01);
port(base+2,$0);
priem(data);priem(data);
onbyte(chr($02));priem(data);
Asdor (2004-03-04 17:19:00) [4]>jack128
Точно, мастдай и есть... :)
jack128 (2004-03-04 17:07:00) [5]
> Win95/98 C COM-портом дадут
поэтому они - маст дай !!! :-))
Pat (2004-03-04 16:59:00) [6]>Asdor © (04.03.04 15:51) [3]
Win95/98 C COM-портом дадут
Asdor (2004-03-04 15:51:00) [7]Ну кто же тебе даст в Windows работать напрямуюспортами на ассемлере?...
см. CreateFile, SetCommTimeouts, SetCommConfig, WriteFile...
Reindeer Moss Eater (2004-03-04 15:48:00) [8]Не в одной литературе по Delphi
В любой литературе по Windows (в т.ч. встроенной в Delphi):
Device i/o functions
idiliya (2004-03-04 15:47:00) [9]http://crazy-fish.narod.ru/new/Doc/com_lpt.htm
на асм вставках впринципе тоже помучиться-получится но Только в Win9x!!!