Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с 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!!!


Наверх

Титульная страница Поиск, карта сайта Написать письмо