Железо

[назад]



Звук через системный спикер Получить файл
Открыть-закрыть CDROM Получить файл
Получение информации из COM портов Получить файл


Звук через системный спикер
asm
MOV BX,Hz //переменная Hz является частотой с которой пищит динамик
MOV AX,34DCh
MOV DX,0012h
CMP DX,BX
JAE @SoundExit
DIV BX
MOV BX,AX
IN AL,61h
TEST AL,00000011b
JNZ @SetCount
{Включение спикера}
OR AL,00000011b
OUT 61h,AL
MOV AL,182
OUT 43h,AL
@SetCount:
MOV AL,BL
OUT 42h,AL
MOV AL,BH
OUT 42h,AL
@SoundExit:
end;
//Выключение спикера
asm
IN AL,61h
AND AL,11111100b
OUT 61h,AL
end; Следует помнить что Assembler штука намного круче чем Dtlphi,
Поэтому с переменными следует быть поосторожней, бывают случаи когда
Ваша переменная описанная в другой процедуре попадает под раздачу и меняет
Свое значение, решение проблемы это описать ее как глобальную, либо сместить
регистры памяти в коде написанном на Asm
К оглавлению

Открыть-закрыть CDROM
Все сводиться к следующим командам
Открыть
mciSendString('Set cdaudio door open wait', nil, 0, handle);
Закрыть
mciSendString('Set cdaudio door closed wait', nil, 0, handle);
Не забудте поставить в Uses mmsystem
К оглавлению

Получение информации из COM портов
После удачного выполнения этой программы, на диске c:\ создаcтся файл с названием out.txt? в который собственно и сохранялись те самые 11 байт считанные из com порта. Естественно для того чтобы программа работала, нужно чтобы что-то передавало данные в порт, например если у вас в com порт подсоединен модем то просто переключите его несколько раз с войса на дату
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
  dcb : TDcb;    // структура ( виндусовская ) с установками СОМ портов
  hCom : THandle;    // handler СОМ2
  fSuccess : boolean;
  dwRead : DWORD;
  CharArray : array[0..10] of char; // временный массив данных в оперативной памяти
  fileOut : file of char;  // файл в который будут писаться данные из СОМ2
  i : integer;
begin
 hCom := CreateFile(PChar('COM2'),GENERIC_READ,0,nil,OPEN_EXISTING,0,0);  //получение указателя на СОМ2

 try


      fSuccess:= GetCommState(hCom, dcb); // Получение данных о текущих установках СОМ2 и заполнение
                                       // структуры dcb

   dcb.BaudRate := CBR_38400;      //  Установка новых параметров
   dcb.ByteSize := 8;              //  для СОМ2, скорость 38400, 8-ми битный обмен,
   dcb.Parity := NOPARITY;         //  нет контроля четности,
   dcb.StopBits := ONESTOPBIT;     //  один стоповый бит

   fSuccess := SetCommState(hCom, dcb);  // Установка новых параметров для СОМ2

 except
   ShowMessage('Error');
 end;

  if  fSuccess then ShowMessage('Success!')
     else   ShowMessage('Error of initiate ComPort...');

  for i:=0 to 10 do   // цикл чтения из СОМ2 ( к примеру ) одиннадцати байт
  begin
    ReadFile(hCom, CharArray[i], 1, dwRead, nil);  // чтение одного байта из порта
  end;

  AssignFile(FileOut,'c:\out.txt');
  Rewrite(FileOut);
  for i:=0 to 10 do        // цикл записи полученной информации в файл на диске
  begin
    Application.ProcessMessages;
    Write(FileOut,CharArray[i]);
  end;

CloseFile(FileOut);
CloseHandle(hCom);
end;

end.

К оглавлению