Форум: "Система";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
ВнизРабота с com портами Найти похожие ветки
← →
mike_g (2004-03-04 15:34) [0]Не в одной литературе по 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 всё работает.
И вобще хотелось бы получить информцию по работе с портами. Зарание блогадарен Андрей.
← →
idiliya (2004-03-04 15:47) [1]http://crazy-fish.narod.ru/new/Doc/com_lpt.htm
на асм вставках впринципе тоже помучиться-получится но Только в Win9x!!!
← →
Reindeer Moss Eater © (2004-03-04 15:48) [2]Не в одной литературе по Delphi
В любой литературе по Windows (в т.ч. встроенной в Delphi):
Device i/o functions
← →
Asdor © (2004-03-04 15:51) [3]Ну кто же тебе даст в Windows работать напрямуюспортами на ассемлере?...
см. CreateFile, SetCommTimeouts, SetCommConfig, WriteFile...
← →
Pat © (2004-03-04 16:59) [4]>Asdor © (04.03.04 15:51) [3]
Win95/98 C COM-портом дадут
← →
jack128 © (2004-03-04 17:07) [5]
> Win95/98 C COM-портом дадут
поэтому они - маст дай !!! :-))
← →
Asdor © (2004-03-04 17:19) [6]>jack128
Точно, мастдай и есть... :)
← →
Talla2k © (2004-03-05 02:29) [7]В 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);
← →
Graf (2004-03-05 07:52) [8]Чего вы все про 9х! Кто ею сейчас юзается. А как это сделать в 2K и XP?
← →
KSergey © (2004-03-05 07:59) [9]> [8] Graf (05.03.04 07:52)
> Чего вы все про 9х! Кто ею сейчас юзается. А как это сделать
> в 2K и XP?
А почитать форум за последние дня 2-3 - стабо? Этот вопрос поднимался уже не раз!!!
PS
Может новые темы для курсовых выдали? ;)
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c