-
spitze viellen dank auf das mit dem Dualen system wehre ich jetzt nicht gekommen aber ist ja logisch einbißchen nachdenken werde ich jetzt wohl selber müssen bei der erstellung meines programms ich will versuchen wenigstens das selber machen zu können :-).
Ich habe vielleicht meine vorherige frage schlecht gestellt wollte eigentlich wissen wie ich signale z.B Schalter stellungen einlesen kann ob inp funktinieren würde?wenn Drucker signale eingelesen werden können wie dein beispiel mit dem leeren Papier müsste sowas doch auch gehen?
-
Hi es klappt alles super leider komm ich nicht weiter mit Signalen lesen ich weiss nicht genau was ich da für den Status Register(die dazugehörigen Pins) definiren muss ion der Kopfzeile. define LPT1 0x379 wehre richtig oder?dann weiss ich aber nicht was noch alles dazu geschrieben werden muss.
Ich will halt nur Schalter Stellungen lesen können.
-
hallo
0x379 müsste bei dir richtig sein, wenn das ausgeben funktioniert hat.
mit den einlesen muss ich mal sehen mein rechner ist abgeschmiert und ich komme nicht mehr ins windows
-
Hi ich hab das heute ausprobiert mit dem Beispiel was du mir vorher mit den Ausgängen ansteuern geschrieben hast.hab das etwas umgeändert leider hatte ich nur ein haufen fehlermeldungen.
Ich hoffe dein rechner läuft bald wieder :-).
Soweit habe ich meine Motoren wie gewünscht zum laufen gebracht dank deiner Hilfe.
-
hallo
zeig dein quelltext mal und sag uns bitte mal was du plans
-
Hi das ist mein Probe Quelltext:"Über einen Schalter wollte ich den Pegel mit 5 V auf High setzen".
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <conio.h>
#define Par_Sst 0x378
#define Par_Sst 0x379
#define LPT1 0x378
#define LPT1 0x379
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
bool StatusWert=inp(Par_Sst,1);
//==============================================
void outp (unsigned int portadr, unsigned char value)
{
_asm mov edx,portadr
_asm mov al, value
_asm out dx,al
}
void inp (unsigned int portadr,unsigned char value)
{
_asm mov edx,portadr
_asm mov al,value
_asm in dx,al
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//Falls Eingang in Status Register gesetzt -> Button Farbe "rot"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(StatusWert==true)
{
Button1->Color=clRed;
}
}
Im Großen und ganzen möchte ich Später die Position meines Motors feststellen können um evtl. eine referezfahrt bzw. Nullstellung meines Motors über einen Button Klick zu steuern.
Elektronik dafür habe ich schon im Kopf :-).
-
hallo
also, auf den erten blick sind da einige fehler drin
also du musst erstmal alles einmal definieren
und die inp zeilen müssten so aussehen:
usigned char inp (unsigned int portadr)
{
_asm mov edx,portadr
_asm in al,dx
_asm mov value, al
return (value);
}
so
wenn du jetzt das den "status wert" abfragen willst
muss du die gesammte reihe abfragen: //ich hatte auch erst den gedanken den du hattest , wenn es dich tröstet (bool StatusWert=inp(Par_Sst,1);)
int status;
status=inp(0x378);
so nun haben wir alle pins eingelesen (D0 bis D8)
und nun fragen wir ob d0 = "true" ist
if (status == 1)
{
edt_status->Text="online"; //editfeld
}
else
{
edt_status->Text="offline"; //editfeld
}
ich habe dir ein program geschrieben was dir entweder online oder offline in ein edit feld schreibt, bezug auf den ersten pin
Code:
#include <vcl.h>
#pragma hdstop
#include <conio.h>
#define LPT 0x378
#include "Unit1.h"
//------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
unsigned char inp(unsigned int portadr)
{
unsigned char value;
_asm mov edx, portadr
_asm in al,dx
_asm mov value al
return (value);
}
//-------------------------------------------------------
__fascall TForm1::TForm(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------
void__fascall TForm1::btn_StatusfrageClick(TObject *Sender)
{
int status;
status = inp(0x378);
if(status == 1)
{
edt_status->Text="online";
}
else
{
edt_status->Text="offline";
}
}
//----------------------------------------------------------
so ich habe in wieder abgetippt und hoffe das es funktioniert, bitte um bestätigung.
ich über nehmme keinerlei gewehr :()
nochwas das mit dem papier hast du glaube ich nicht ganz verstanden:
die papier "anzeige" ist nich programmierbar (aufjedenfall meine ich das)
dir stehen nur die D0-D8 zur verfügung die anderen pins sind feste nicht "verstellbare" pins. ich hoffe du hast mein kauderwälsch verstanden
mein rechner läuft wieder habe ihn einfach mal ohne festplatten gestartet und dann wieder mit, seitdem läuft er und der komische update fehler ist verschwunden, keine ahnung woran das lag
-
Hi werde gleich versuchen zu Programmieren :-).
du hast im text geschrieben 0x378 das ist doch für die Ausgänge nicht wahr?
kann ich das ganze auch im bezug auf die eingang pins 0x379 oder 0x37A?
und kann ich auch einzelne Pins von 0x379 oder 0x37A einlesen?
Wenn ich z.B einen Taster betätige.
oder meintest du sogar 0x379 im Quelltext?
ich hab hier so einen Link da hab ich diese bezeichnungen vom Stecker her
http://www.feilner.de/dateien/refera...rallelport.pdf
mein rechner macht manchmal auch was der will aber oft mals reicht es aus vor das gehäuse zu treten ;-) "ohne gewährleistung das es bei jedem so funktioniert"
-
hi habe das Programm abgetippt und bekam eine mir nicht bekannte fehlermeldung.als erstes hat sich ein zweites fenster geöffnet mit dem namen Unit1.asm in diesem fenster ist das Programm stehen geblieben beim Compilieren.
Fehlermeldung:[TasmFehler]Unit1.asm(51):Too few operands to instruction
der Fehler wahr auch dem der Hilfe unbekannt ?:-(.
Zu der Frage oben:und zwar steht in dem Link das das Data Register entweder als Ausgang oder Eingang verarbeitet werden kann beides zusammen geht nicht.
Gibt es keine möglichkeit den Status oder Control Register als Eingang Register zu benutzen um Schalterstellungen einzulesen?
[-o<
Ich habe das zwar mit achtung verstanden was du meintest mit dem Papier Beispiel aber im Link steht das es sich bei den registern um Eingänge bzw. Ausgänge Handel.Oder hat das nur mit dem Drucker zu tun?
-
hallo
habe jezt mal geschaft bites zu empfangen, aber ich verstehe die "pin belegung" nicht
also
ich habe mir ein programm geschrieben mit 3 edit feldern
und mit inp(0x378); inp (0x379); inp(0x37a);
die durch ein timer alle paar msec eingelesen werden, mit einen button setze ich mit out(0x378,0); out(0x379,0); out(0x37a,0); alle pins auf 0.
mein plan war der das ich mit einen draht an den pins rumbore und dann sehe ob was geschied O:) so am anfang habe ich noch ein netzteil mit 5v und einen vorwiederstand von 500ohm benutst, aber dann habe ich gesehen das man nur pins verbinden muss so ergibt zum beispiel von inp(0x37a); 1 bite wenn man pin 1 und einen der masse pins verbindet
man erhält 2 bite wenn man pin 14 und einen der masse pins verbindet
wenn man pin 1 und 14 mit masse verbindet bekommt man 3 bite
8 bite gibt es auch aber keinen "4 bite pin" :-s
mit inp(0x379); merkwürdiger weise kann man den ausgansgswert nicht mit outp(0x379,0); auf 0 setzen, also ist das ausgangsignal immer 120, wenn man dann einige pins mit masse verbindet geht der wert entweder runter oder hoch
inp(0x378); sagt nix aber das sind ja auch die daten leitungen die anscheinend nur als eingang nutsbar sind 8-[
Code:
//-----------------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <conio.h>
#define LPT 0x378
#include "Unit1.h"
//-----------------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1*Form1;
//==============================================
void outp (unsigned int portadr, unsigned char value)
{
_asm mov edx,portadr
_asm mov al, value
_asm out dx,al
}
//==============================================
unsigned char inp(unsigned int portadr)
{
unsigned char value;
_asm mov edx,portadr
_asm in al,dx
_asm mov value,al
return(value);
}
//-----------------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
::TForm(Owner)
{
}
//-----------------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObjekt *Sender)
{
outp(0x378,0);
outp(0x379,0);
outp(0x37a,0);
}
//-----------------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
int status, status1, status2;
status=inp(0x37a);
Edit1->Text=IntToStr(Status);
status1=inp(0x378);
Edit2->Text=IntToStr(Status1);
status2=inp(0x379);
Edit3->Text=IntToStr(Status2);
}
//-----------------------------------------------------------------------------------
ich übernehme keine haftung für den quelltext, wenn hardware oder sonstigen schäden entstehen
kann mir jemand erklären wieso es sokomische "pin brücken" gibt und wo der "4 bite pin" von der controll-register steckt?
wenn du nicht ca 15 taster einbauen willst, können wir damit was anfangen
Edit:
so sorry habe die beiträge und den link noch nicht gelesen, also der "4 bit pin" (ich sollte mir diesen begriff patentieren lassen) ist anscheinend der nicht invertierte
und die 120 in der status anzeige von dem status register könnte auch von dem invertierten pin kommen, aber es müssten doch dann eigendlich 128 stehen oder?
ahm zu den fehler, der wird woll an den asm befehlen liegen, hast du conio.h include, auch wenn er nichts mit den asm befehlen zu tun hat?