| Autor |
Beitrag |
Oliver70
      
Beiträge: 16
|
Verfasst: So 05.10.03 14:39
Hi,Delphi Experten !!!
Wie kann ich mit Delphi(3.0) die TxD,RxD,RTS auf LOW/HIGH setzen ?
Für Ihre Hilfe wäre ich sehr Dankbar(ein kleines SourceCode wäre nicht schleht)
MfG
Oliver70
|
|
Adrian
      
Beiträge: 314
|
Verfasst: Mo 06.10.03 12:44
Servus!
Die RxD-Leitung wird nicht vom Pc sondern vom angeschlossenen Gerät bestimmt, die kannst Du deshalb nicht setzen. Für die anderen Signale müsste ich wissen, welches Betriebssysten Du verwendest. Bei Win 95/98/Me gehts halbwegs einfach, bei NT/2000/XP wird es komplizierter.
Gruß,
Adrian
|
|
Oliver70 
      
Beiträge: 16
|
Verfasst: Di 07.10.03 06:00
HI,Adrian !!!
Es ist schon Richtig,RxD ist nur zum lesen(Empfangenn) da,ich benutze Wn98 SE
MfG
Oliver70
|
|
Adrian
      
Beiträge: 314
|
Verfasst: Do 09.10.03 13:34
Servus!
Jetzt hat es zwar ein wenig gedauert, aber ich denke mir, Du kannst die Infos noch brauchen.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64:
| function InPort (PortAddr: Word): Byte;
{$IFDEF WIN32} assembler; stdcall; asm mov dx,PortAddr in al,dx end; {$ELSE} begin Result:=Port(PortAddr); end; {$ENDIF}
procedure OutPort(PortAddr: Word; DataByte: Byte);
{$IFDEF WIN32} assembler; stdcall; asm mov al,DataByte mov dx,PortAddr out dx,al end; {$ELSE} begin Port(PortAddr):=DataByte; end; {$ENDIF}
procedure Setzen_und_Lesen;
var a: Byte; begin OutPort($3FC,$00); a:=InPort($3FC); end;
|
Das dürfte so hinkommen, aber probiers lieber nochmal aus.
Gute Informationen zum Thema gibt es im Internet unter "Serielle Schnittstelle mit Windows API ansprechen" von Thomas Steinhauer, eine ausgezeichnete Darstelleung, da findest Du alles sehr detaillert beschrieben.
Gruß,
Adrian
|
|
Oliver70 
      
Beiträge: 16
|
Verfasst: Do 09.10.03 13:50
Hi,Adrian !!!
Herzlichen Dank,werde mal Testen
MfG
Oliver70
|
|
Oliver70 
      
Beiträge: 16
|
Verfasst: So 12.10.03 17:00
Hi,Adrian !!
Irgenwie komme ich nicht klar mit deine Sourcecode,nach eintippen und starten zeigt mir Delpi ständich fehlermeldung z.b Result:=Port(PortAddr);
oder mov al,dx,PortAddr.
Ich möchte noch einmal schildern was möchte ich machen:Ich möchte eine Ampel über die RS232 Schnittstelle steuern:Ich habe drei Buttons zur verfügung:Button1=TxD;Button=DTR;Button3=RTS:
so,wenn ich auf TxD drücke soll LED aufleuchten,wenn ich noch einmal drücke soll ausgehen,das selbe mit DTR und RTS:da heb ich eine Bitte,könntest du Sourcecode schreiben und dann als ZIP Datei mir zu verfügung stellen und an meine E-Mail Adresse senden,wäre sehr Dankbar dafür,bin nämlich Anfänger und habekein grosse erfahungen mit Delphi
MfG
Oliver70
meine E-Mail adresse:
oliver_1970@gmx.de
|
|
Adrian
      
Beiträge: 314
|
Verfasst: Di 14.10.03 23:48
Servus!
Da es vielleicht andere auch interessiert, stelle ich den Quellcode auch hier zur Verfügung.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121:
| unit AmpelUnit;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Shape1: TShape; Shape2: TShape; Shape3: TShape; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.DFM}
function InPort (PortAddr: Word): Byte;
{$IFDEF WIN32} assembler; stdcall; asm mov dx,PortAddr in al,dx end; {$ELSE} begin Result:=Port(PortAddr); end; {$ENDIF}
procedure OutPort(PortAddr: Word; DataByte: Byte);
{$IFDEF WIN32} assembler; stdcall; asm mov al,DataByte mov dx,PortAddr out dx,al end; {$ELSE} begin Port(PortAddr):=DataByte; end; {$ENDIF}
procedure TForm1.Button1Click(Sender: TObject); begin OutPort($2FB,InPort($2FB) xor $70); if (InPort($2FB) and $70)=0 then begin Shape1.Pen.Width:=25; Shape1.Pen.Color:=clWhite; end else begin Shape1.Pen.Width:=25; Shape1.Pen.Color:=clRed; end; end;
procedure TForm1.Button2Click(Sender: TObject); begin OutPort($2FC,InPort($2FC) xor $01); if (InPort($2FC) and $01)=0 then begin Shape2.Pen.Width:=25; Shape2.Pen.Color:=clWhite; end else begin Shape2.Pen.Width:=25; Shape2.Pen.Color:=clYellow; end; end;
procedure TForm1.Button3Click(Sender: TObject); begin OutPort($2FC,InPort($2FC) xor $02); if (InPort($2FC) and $02)=0 then begin Shape3.Pen.Width:=25; Shape3.Pen.Color:=clWhite; end else begin Shape3.Pen.Width:=25; Shape3.Pen.Color:=clLime; end; end;
end. |
Gruß,
Adrian
|
|
Oliver70 
      
Beiträge: 16
|
Verfasst: Do 16.10.03 16:27
Hi,Adrian !!!
Herzlichen Dank für deine Hilfe
Hast du meine E-Mail bekommen ?
MfG
Oliver
|
|
nagash369
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 31.03.04 21:08
sorry wenn ich jetzt so eine leiche ausgrabe, aber ich weiß mir nicht mehr anders zu helfen.
ich möchte für ein schulprojekt einzelne pins auf der rs232 schnittstelle auf high und low setzen und die einzige lösung die ich immer wieder finde ist diese hier.
hab mir einen alten rechner mit windows 98 besorgt, an dem ich rumbasteln kann. aber es will nicht klappen.
ich habe exakt deinen code kopiert, adrian, aber es tut sich rein gar nix. immer konstante 10V
hab es auf beiden ports (com1 und com2) probiert. es nützt nichts, kann mir jemand vielleicht einen tip geben?
|
|
Adrian
      
Beiträge: 314
|
Verfasst: Sa 03.04.04 13:23
Servus!
In dem Programm, das ich hier mal gepostet hatte, sind in der Zwischenzeit einige Veränderungen erfolgt. Probiert habe ich es unter Win98 und XP, aber eigentlich müßte von Win95 bis XP jedes Betriebssystem damit klarkommen. Man braucht die ComPort-Library von Dejan Crnila und Paul Doland (Freeware) sowie die IO.dll von Fred Bulback (auch Freeware). Unten steht ein Programmauszug, der das Setzen und Löschen verschiedener Signale demonstriert. Sollte das Deine Probleme noch nicht Lösen, dann schreib einfach nochmal hier rein.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73:
| unit RS232Unit;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus, CPort;
type TForm1 = class(TForm) MainMenu1: TMainMenu; COM11: TMenuItem; COM21: TMenuItem; Rein: TButton; ComPort1: TComPort; procedure COM11Click(Sender: TObject); procedure COM21Click(Sender: TObject); procedure ReinClick(Sender: TObject); private public end;
var Form1: TForm1; BA: Word; implementation
{$R *.DFM}
procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll'; function PortIn(Port:Word):Byte; stdcall; external 'io.dll';
procedure Delay(ms : DWord); var TheTime : DWord; begin TheTime := GetTickCount + ms; while GetTickCount < TheTime do Application.ProcessMessages; end;
procedure TForm1.COM11Click(Sender: TObject); begin COM11.Checked:=True; ComPort1.Port:='COM1'; ComPort1.Open; BA:=$3F8; PortOut(BA+4,PortIn(BA+4) or $02); Delay(5); end;
procedure TForm1.COM21Click(Sender: TObject); begin COM21.Checked:=True; ComPort1.Port:='COM2'; ComPort1.Open; BA:=$2F8; PortOut(BA+4,PortIn(BA+4) or $02); Delay(5); end;
procedure TForm1.ReinClick(Sender: TObject); begin PortOut(BA+3,PortIn(BA+3) or $40); PortOut(BA+4,PortIn(BA+4) or $01); PortOut(BA+3,PortIn(BA+3) and $BF); PortOut(BA+4,PortIn(BA+4) and $FE);end;
end. |
Gruß,
Adrian
|
|
nagash369
Hält's aus hier
Beiträge: 11
|
Verfasst: Sa 03.04.04 19:36
danke, ich werd mal sehen obs damit klappt
|
|
|