AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Parallelport abfragen

Ein Thema von Hagbart · begonnen am 16. Apr 2009 · letzter Beitrag vom 28. Apr 2009
 
Hagbart

Registriert seit: 9. Dez 2006
Ort: Alsfeld
35 Beiträge
 
Delphi 7 Personal
 
#15

Re: Parallelport abfragen

  Alt 26. Apr 2009, 13:15
Mittag,

habe doch noch eine andere Lösung gefunden. Ist zwar sehr Prozessorlasstig, daher die Freuqenz aber nur kurz gemesen werden muss, ist das akzeptabel (zumindest für mich ).

Hier mal der gesamte Quelltext, benötigt wird die Inpout32.dll

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, mmsystem, AppEvnts, ShellApi, ExtCtrls, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
    Timer1: TTimer;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure OnIdle(Sender: TObject; var Done: Boolean);
    procedure OnTimer;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Zeit: int64;
    Counter: integer; //Variable zum Zählen der Timer durchläufe
  end;

var
  Form1: TForm1;
  gelesen, schreiben: Integer;
  STyp: String[3] = 'LPT';
  BasAdr: Integer = $378;
  ComHandle: THandle;
  before: boolean = true;

implementation

{$R *.dfm}

procedure Out32(Addresse:Integer; Wert:byte);stdcall;export;
external 'INPOUT32.DLL';
function Inp32(Addresse:Integer):Byte;stdcall;export;
external 'INPOUT32.DLL';

procedure TForm1.OnIdle(Sender: TObject; var Done: Boolean);
begin
  done:=false;
  OnTimer;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle := OnIdle;
end;

procedure TForm1.OnTimer;
var
  adr: integer;
begin
  adr:=Inp32(BasAdr+1);//Lesen
  if (adr = 254) and (before = true) then
  begin
    inc(counter);//Zähler um 1 erhöhen
    before := false;
  end;
  if adr = 126 then
    before := true;
  if timegettime-Zeit>1000 then //Jeweil nach einer Sekunde Frequenz ausgeben
  begin
    Label1.Caption := IntToStr(counter); //Freuqenz ausgeben
    zeit:= timegettime; //neue Start Zeit ermitteln
    Counter := 0; //und Zähler wieder auf 0
  end;
end;

end.
Einzigster Haken ist, das die Freuqenz nur bis ca. 900 Hz. angezeigt wird, deswegen habe ich einen Freuqenzteiler (2:1) eingebaut. Die angezeigte Frequenz muss dann einfach nurnoch mal 2 genommen werden (ich weiß, ist zwar ungenau, aber meiner Meinung nach kommt es auf 1 Hertz meist sowieso nicht an).
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz