LPT mit C Programm ansteuern
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 135486
Url: https://administrator.de/contentid/135486
Ausgedruckt am: 26.11.2024 um 14:11 Uhr
3 Kommentare
Neuester Kommentar
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
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
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:
Sowie das Blinken lassen einer LED:
Achja, und die verwendeten Konstanten:
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
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:
/** windows **/
/* lade inpout32.dll fuer LPT port zugriff unter win xp */
/* prototype (function typedef) for DLL function Inp32: */
typedef short _stdcall (*inpfuncPtr)(short portaddr);
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);
HINSTANCE hLib;
inpfuncPtr inp32;
oupfuncPtr oup32;
// lade inpout.dll
hLib = LoadLibrary("inpout32.dll");
if(hLib==NULL)
{
cout<<"Load inpout32.dll failed !\n";
}
/* get the address of the function Inp32 */
inp32 = (inpfuncPtr)GetProcAddress(hLib,"Inp32");
if(inp32==NULL)
{
cout<<"GetProcAddress for Inp32 Failed !\n";
}
/* get the address of the function Outp32 */
oup32 = (oupfuncPtr)GetProcAddress(hLib,"Out32");
if(oup32==NULL)
{
cout<<"GetProcAddress for Oup32 Failed !\n";
}
/** windows **/
/* lasse die LED am LPT mehrfach blinken */
void lptFlash()
{
// aktuellen status auslesen um ihn am ende wiederherstellen zu koennen
int status = (inp32)(LPT_PORT);
// blinken
for(int x=1; x<=10; x++)
{
(oup32)(LPT_PORT,LPT_ON);
Sleep(LED_FLASH_ON);
(oup32)(LPT_PORT,LPT_OFF);
Sleep(LED_FLASH_OFF);
}
// alten status wiederherstellen
(oup32)(LPT_PORT,status);
}
#define LPT_PORT 0x378 {{comment_single_line_double_slash:0}}
#define LPT_ON 0xFF {{comment_single_line_double_slash:1}}
#define LPT_OFF 0x00 {{comment_single_line_double_slash:2}}
#define LED_FLASH_ON 50 {{comment_single_line_double_slash:3}}
#define LED_FLASH_OFF 70 {{comment_single_line_double_slash:4}}
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
hier http://forums.highrez.co.uk/viewforum.php?f=7 gibts das Forum dazu. Man muss tricksen um es unter Vista und Windows zum laufen zu bekommen.