Mit C/C++ eine rote Low-Current-LED, die mit der Anode an GND (Pin 5) und mit der Kathode über einen Vorwiderstand 3,3k - 3,9k an RTS (Pin 7) angeschlossen ist, zum Leuchten zu bringen, ist ein simples Programm notwendig:
Code:
#include <windows.h>
int main (void)
{
HANDLE hPort;
hPort = CreateFile (TEXT("COM1"),
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
0,
0);
EscapeCommFunction (hPort, SETRTS); // RTS setzten
Sleep (2000);
EscapeCommFunction (hPort, CLRRTS); // RTS rücksetzten
Sleep (2000);
EscapeCommFunction (hPort, SETRTS); // RTS setzten
Sleep (2000);
CloseHandle (hPort);
return (0);
}
Für andere LEDs ist nur der Vorwiderstand neu zu dimensionieren.
In Basic/VB geht das über die port.dll von B. Kainka (http://www.b-kainka.de/msrwin.htm):
Code:
Attribute VB_Name = "Port"
Declare Function OPENCOM Lib "Port" (ByVal A$) As Integer
Declare Sub RTS Lib "Port" (ByVal b%)
...
i = OPENCOM("COM1,9600,N,8,1")
If i = 0 Then MsgBox ("Schnittstelle nicht verfügbar!")
RTS 1
DELAYUS (10)
RTS 0
DELAYUS (10)
RTS 1
...
Alternativ kann man auch die Port.dll in C/C++ benutzen:
Code:
typedef int (CALLBACK* LPFNDLLFUNC)(char*);
char szFuncName[] = "OPENCOM";
...
OPENCOM "COM2: baud=19200 data=8 parity=N stop=1"
...
typedef int (CALLBACK* LPFNDLLFUNC)(WORD);
char szFuncName[] = "RTS";
...
RTS "1";
Das sind aber nur code-Beispiele, einbauen in Deinen Code mußt Du schon alleine.
Blackbird
PS: Geht für W95/98/NT/2000/XP/ME. Unter W95/98 könnte man in C/C++ auch inp(...) und outp(...) (oder inport(...) und outport(...)) verwenden und direkt auf die UART-Register zugreifen. Assembler braucht man nur, wenn man interruptgesteuert einlesen will. Unter NT aufwärts braucht man keinen Assembler dazu mehr, weil das Win-Api alle Funktionen bereitstellt.
Lesezeichen