Nickname
Passwort | vergessen?

300 anonyme User

3 angemeldete Mitglieder


2hard4you
lighningcrow
Spanish
69003 Mitglieder freuen sich auf Dich!
Top-Aktivitäten
Sehen Sie hier, wer zu den aktivsten Mitgliedern der letzten Woche zählt:
Sponsored Links
In den Bereich C und C++ wechseln ..

LPT mit C Programm ansteuern

Mitglied: achim13
Geschrieben von achim13 (Level 1 - Frischling)
Erstellt am 08.02.2010, um 21:51:55 Uhr, Permanent-ID: 135486
Dieser Beitrag wurde bisher 1388 mal aufgerufen und gilt als gelöst.
Melden Sie sich mit Ihrem Nicknamen an, um diesen Beitrag zu bewerten!
Neutral0 NeutralDruckenBeobachten
Hallo,
ich habe ein c++ Programm geschrieben, leider zeigt es mir Fehler, kann mir jemand helfen. Ich bin ein neuling in diesem Thema!!!!!
Das Programm soll an LPT (0x378h) ein Clock senden und den Port 0x379h auslesen (da sollten Spannungswerte sein). Wie ich schon vorhier geschrieben habe das ist mein erstes c Programm. Ich weiss es nicht wie mann Input / Output in c schreibt welche dll oder... und bei der Definition von Funktionen zeigt der Compailer auch Fehler, bin sehr dankbar für jeder Hilfe. Unten die Quellcode:
#include <ctime>
#include <stdio.h>
#include <string.h>
#include <io.h>
#include <conio.h>
#include <dos.h>
#include <unistd.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>
#include <iostream>
---------------------------------------------------------------------------
#define LPT1 0x378
Data Register (Base + 0h) Ausgang
#define LPT2 0x379 //Status Register (Base + 1h) Eingang
#define oo 4
using namespace std;
int StatusPort1=0;
int StatusPort2=0;
int anzeige_spannung_array[100];
int anzeige_zeit_array[100];
int i=0;
int i1=0;
int i2=0;
float bit2;
int bit1;
int t1;
int main (int argc, const char *argv[])
{
StatusPort1=(LPT1);
StatusPort2=(LPT2);
cout<<"LPT1 - Ausgang = "<<StatusPort1;
cout<<endl;
cout<<"LPT2 - Eingang = "<<StatusPort2;
Sleep(10000);
function_SpannungLesen(void)
{
For(i1=0; i1<1000; i1++)
{
function_ClockSenden(void)
{
For(i2=0; i2<7; i2++)
{
bit2==1;
output(LPT1, bit1);
bit2==0;
output(LPT1, bit1);
}
}
}
input(LPT2, bit2);
t1 = (clock()/CLOCKS_PER_SEC);
anzeige_spannung_array[i]=bit2;
anzeige_zeit_array[i]=t1;
i=i+1;
if i=99 goto Ausgabe
}
Ausgabe:
function_Ausgabe(void)
{
For(i1=0; i1<25; i1++)
{i=0;
bit2=anzeige_spannung_array[i];
bit1=anzeige_zeit_array[i];
cout<<"Spannung = "<<bit2<<" um "bit1<<" ";
i=i+1
bit2=anzeige_spannung_array[i];
bit1=anzeige_zeit_array[i];
cout<<"Spannung = "<<bit2<<" um "bit1<<" ";
i=i+1
bit2=anzeige_spannung_array[i];
bit1=anzeige_zeit_array[i];
cout<<"Spannung = "<<bit2<<" um "bit1<<" ";
i=i+1
bit2=anzeige_spannung_array[i];
bit1=anzeige_zeit_array[i];
cout<<"Spannung = "<<bit2<<" um "bit1<<" ";
cout<<endl;
}
Return 0;
}

Gruß Achim
Kommentar schreibenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
Diskussionsverlauf (3 Kommentare)
thread
StefanKittel
Kommentar StefanKittel schreibt am 08.02.2010, 23:44:40 Uhr
Hallo,
der direkte Zugriff auf "Legacy" Hardware unter Windows ist tricky. Ich glaube Du must unter Win7 sogar einen Treiber dafür schreiben.
Warum machst Du es Dir nicht viel einfacher und verwendest einen GamePort? Den gibts als USB für 5 Euro und läßt sich über einen Joystick sehr einfach programmieren.
Stefan
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
Arano
Kommentar Arano schreibt am 09.02.2010, 00:44:43 Uhr
Hm... kann ich helfen oder kann ich es nicht !?

Muss schon sagen das mich die Fragestellung und die Antwort von StefanKittel etwas überfordern - ist halt nicht mein Bereich .-)
ABER ich habe mir mal eine C++ Progrämmchen zusammengeschrieben mit dem ich die Pins des LPT setzen und lesen konnte, vielleicht hilft dir das ja schon.
Wichtig dabei war eine zusätzliche inpout32.dll die vorher ins System kopiert wurde um über diese den Zugriff auf den LPT zu ermöglichen.

Die "inpout32.dll" wurde mit gelinkt.
Dann die Prototypen und Initialisierung:
01.
/** windows **/ 
02.
/* lade inpout32.dll fuer LPT port zugriff unter win xp */ 
03.
 
04.
/* prototype (function typedef) for DLL function Inp32: */ 
05.
typedef short _stdcall (*inpfuncPtr)(short portaddr); 
06.
typedef void  _stdcall (*oupfuncPtr)(short portaddr, short datum); 
07.
 
08.
HINSTANCE  hLib; 
09.
inpfuncPtr inp32; 
10.
oupfuncPtr oup32; 
11.
 
12.
      // lade inpout.dll 
13.
      hLib = LoadLibrary("inpout32.dll"); 
14.
      if(hLib==NULL) 
15.
16.
            cout<<"Load inpout32.dll failed !\n"; 
17.
18.
 
19.
      /* get the address of the function Inp32 */ 
20.
      inp32 = (inpfuncPtr)GetProcAddress(hLib,"Inp32"); 
21.
      if(inp32==NULL) 
22.
23.
            cout<<"GetProcAddress for Inp32 Failed !\n"; 
24.
25.
 
26.
      /* get the address of the function Outp32 */ 
27.
      oup32 = (oupfuncPtr)GetProcAddress(hLib,"Out32"); 
28.
      if(oup32==NULL) 
29.
30.
            cout<<"GetProcAddress for Oup32 Failed !\n"; 
31.
      }
Sowie das Blinken lassen einer LED:
01.
/** windows **/ 
02.
/* lasse die LED am LPT mehrfach blinken */ 
03.
 
04.
void lptFlash() 
05.
06.
      // aktuellen status auslesen um ihn am ende wiederherstellen zu koennen 
07.
      int status = (inp32)(LPT_PORT); 
08.
      // blinken 
09.
      for(int x=1; x<=10; x++) 
10.
11.
            (oup32)(LPT_PORT,LPT_ON); 
12.
            Sleep(LED_FLASH_ON); 
13.
            (oup32)(LPT_PORT,LPT_OFF); 
14.
            Sleep(LED_FLASH_OFF); 
15.
16.
      // alten status wiederherstellen 
17.
      (oup32)(LPT_PORT,status); 
18.
}
Achja, und die verwendeten Konstanten:
01.
#define LPT_PORT      0x378         // adresse des LPT 
02.
#define LPT_ON        0xFF          // wert der auf LPT beim "einschalten" geschrieben wird 
03.
#define LPT_OFF       0x00          // wert der auf LPT beim "ausschalten" geschrieben wird 
04.
#define LED_FLASH_ON  50            // zeit in ms die die LED brennen soll bevor sie wieder erlischt 
05.
#define LED_FLASH_OFF 70            // zeit in ms zwischen zwei brennden bevor sie wieder brennt

So, jetzt nur noch hoffen das das überhaupt für dich nützlich ist *g*
Ggf. kann ich auch alles einmal Packen zur Verfügung stellen falls tatsächlich benötig...

Gute Nacht
~Arano
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.
thread
StefanKittel
Kommentar StefanKittel schreibt am 09.02.2010, 00:52:04 Uhr
hier http://forums.highrez.co.uk/viewforum.php ... gibts das Forum dazu. Man muss tricksen um es unter Vista und Windows zum laufen zu bekommen.
AntwortenMit Zitat
Anmeldung erforderlich!
Bitte melden Sie sich erst mit Ihrem Nicknamen und Passwort an.