/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Delphi program til styring af paralelport
Fra : Casper Bang


Dato : 31-01-04 21:50

Hej,

Jeg har brug for at kunne styre alle pins på min paralelport vha. Delphi.
Det vil sige sætte styrepins, og læse de forskellige input pins etc...

Lige nu bruger jeg zlportio.sys men kan kun finde ud af at sætte de 8
datapins med den. Jeg har hørt at den kan bruges til alle pins, men jeg ved
ikke hvordan :(

Jeg bruger Delphi 4, men hvis i kan hjælpe med lidt source code burde jeg
kunne få det tilpadset.

Håber i kan hjælpe, og at det her er den rigtige gruppe :)

¨Casper



 
 
Calle. (31-01-2004)
Kommentar
Fra : Calle.


Dato : 31-01-04 23:18

Casper Bang wrote:
> Hej,
>
> Jeg har brug for at kunne styre alle pins på min paralelport vha.
> Delphi. Det vil sige sætte styrepins, og læse de forskellige input
> pins etc...
>
> Lige nu bruger jeg zlportio.sys men kan kun finde ud af at sætte de 8
> datapins med den. Jeg har hørt at den kan bruges til alle pins, men
> jeg ved ikke hvordan :(
>
> Jeg bruger Delphi 4, men hvis i kan hjælpe med lidt source code burde
> jeg kunne få det tilpadset.
>
> Håber i kan hjælpe, og at det her er den rigtige gruppe :)
>
> ¨Casper

sådan læser du fra den:

a:=portreadb($379); // altid printerportens adresse +1
edit1.text:=inttostr(a);

--
Calle



Calle. (31-01-2004)
Kommentar
Fra : Calle.


Dato : 31-01-04 23:30

Calle. wrote:
> Casper Bang wrote:
>> Hej,
>>
>> Jeg har brug for at kunne styre alle pins på min paralelport vha.
>> Delphi. Det vil sige sætte styrepins, og læse de forskellige input
>> pins etc...
>>
>> Lige nu bruger jeg zlportio.sys men kan kun finde ud af at sætte de 8
>> datapins med den. Jeg har hørt at den kan bruges til alle pins, men
>> jeg ved ikke hvordan :(
>>
>> Jeg bruger Delphi 4, men hvis i kan hjælpe med lidt source code burde
>> jeg kunne få det tilpadset.
>>
>> Håber i kan hjælpe, og at det her er den rigtige gruppe :)
>>
>> ¨Casper
>
> sådan læser du fra den:
>
> a:=portreadb($379); // altid printerportens adresse +1
> edit1.text:=inttostr(a);

Dette var hvis du skulle læse input benene i porten.
Kom lige i tanke om hvor du finder den bedste info.
åbn. zlportio.pas med notesblok ell. lign, så er der en masse infolinier +
eksempler

--
Calle



Casper Bang (01-02-2004)
Kommentar
Fra : Casper Bang


Dato : 01-02-04 10:34

> Kom lige i tanke om hvor du finder den bedste info.
> åbn. zlportio.pas med notesblok ell. lign, så er der en masse infolinier +
> eksempler

I min zlportio.pas er der kun:

{ procedure zlioportread( const
ord ):dword; }
{ procedure zlioportwrite( const
ta:dword ); }
{
}
{ function portreadb( const
}
{ function portreadw( const
}
{ function portreadl( const
}
{
}
{ procedure portwriteb( const Port:Dword;const
}
{ procedure portwritew( const Port:dword;const
}
{ procedure portwritel( const
}


som eksempler... Der står ikke hvad de gør :(
Derudover skal det siges at jeg i mine andre programmer bruger PortReadb til
at tjekke hvad der står på mine OUTPUT pins!
Jeg lægger godt nok ikke 1 til port-nummeret... ændrer det noget?



Casper Bang (01-02-2004)
Kommentar
Fra : Casper Bang


Dato : 01-02-04 10:27

> sådan læser du fra den:
>
> a:=portreadb($379); // altid printerportens adresse +1
> edit1.text:=inttostr(a);

Den giver så resultatet i heltal, for alle pins samlet?
Jeg har ikke opbygget den tekniske del endnu, så kan ikke teste...

Det var jo meget nemt så... Thanks



Calle. (03-02-2004)
Kommentar
Fra : Calle.


Dato : 03-02-04 06:27

Casper Bang wrote:
>> sådan læser du fra den:
>>
>> a:=portreadb($379); // altid printerportens adresse +1
>> edit1.text:=inttostr(a);
>
> Den giver så resultatet i heltal, for alle pins samlet?

Ja, så skal du bruge AND & OR for at sortere

> Jeg har ikke opbygget den tekniske del endnu, så kan ikke teste...
>
> Det var jo meget nemt så... Thanks

Ja, velbekomme


--
Calle



Casper Bang (03-02-2004)
Kommentar
Fra : Casper Bang


Dato : 03-02-04 07:15

> >> sådan læser du fra den:
> >>
> >> a:=portreadb($379); // altid printerportens adresse +1
> >> edit1.text:=inttostr(a);
> >
> > Den giver så resultatet i heltal, for alle pins samlet?
>
> Ja, så skal du bruge AND & OR for at sortere

Jeg er ikke den store haj til Delphi... kan du give et eksempel på hvad du
mener?



Calle. (04-02-2004)
Kommentar
Fra : Calle.


Dato : 04-02-04 06:49

Casper Bang wrote:
>>>> sådan læser du fra den:
>>>>
>>>> a:=portreadb($379); // altid printerportens adresse +1
>>>> edit1.text:=inttostr(a);
>>>
>>> Den giver så resultatet i heltal, for alle pins samlet?
>>
>> Ja, så skal du bruge AND & OR for at sortere
>
> Jeg er ikke den store haj til Delphi... kan du give et eksempel på
> hvad du mener?

AND & OR er ikke specielt delphi, men den måde man sorterer bit på, i både
programering og elektronik.

Det er ikke nemt, at styre porten, hvis du ikke har styr på AND og OR
AND kræver at alle de ANDede betingelser er der inden den går ON
OR kræver et af dem.
f.eks

AND
ind ud
0 0 0
0 1 0
1 0 0
1 1 1

OR
ind ud
0 0 0
0 1 1
1 0 1
1 1 1


--
Calle



Casper Bang (04-02-2004)
Kommentar
Fra : Casper Bang


Dato : 04-02-04 08:51

> AND & OR er ikke specielt delphi, men den måde man sorterer bit på, i både
> programering og elektronik.
>
> Det er ikke nemt, at styre porten, hvis du ikke har styr på AND og OR
> AND kræver at alle de ANDede betingelser er der inden den går ON
> OR kræver et af dem.
> f.eks

Jo ok, kender godt and og or... mener du i en normal IF sætning, eller på en
speciel måde?



Casper Bang (02-02-2004)
Kommentar
Fra : Casper Bang


Dato : 02-02-04 18:03

Fandt frem til:
http://www.delphi32.com/vcl/2467/

thanks :)



Casper Bang (02-02-2004)
Kommentar
Fra : Casper Bang


Dato : 02-02-04 18:58


> Fandt frem til:
> http://www.delphi32.com/vcl/2467/

hmm.. I manualen som er i den fil, står der bland andet:

[Boolean function] GetPin(PinNumber)

[procedure] SetPin(PinNumber, State)


Vil i ikke tro at de funktioner skal bruges med:
DLPrinterPortIO1.SetPin(2,1);
? Men Delphi skriver:
[Error] Main.pas(281): Undeclared identifier: 'SetPin'

Kan i se hvad jeg gør galt?



Calle. (03-02-2004)
Kommentar
Fra : Calle.


Dato : 03-02-04 06:32

Casper Bang wrote:
>> Fandt frem til:
>> http://www.delphi32.com/vcl/2467/
>
> hmm.. I manualen som er i den fil, står der bland andet:
>
> [Boolean function] GetPin(PinNumber)
>
> [procedure] SetPin(PinNumber, State)
>
>
> Vil i ikke tro at de funktioner skal bruges med:
> DLPrinterPortIO1.SetPin(2,1);
> ? Men Delphi skriver:
> [Error] Main.pas(281): Undeclared identifier: 'SetPin'
>
> Kan i se hvad jeg gør galt?

Ja, du bruger en manual til et helt andet IO program.
åbn nu din zlportio.pas og læs, der er masser af info.
se her er noget af det der står i filen
:
{
}
{ // get data bits from LPT
}
{ databits := portreadb(
}
{ // set data bits from LPT
}
{ portwriteb( $378,
}
{ // The second parameter determine the databus length for
ion }


--
Calle



Casper Bang (03-02-2004)
Kommentar
Fra : Casper Bang


Dato : 03-02-04 07:14

> Ja, du bruger en manual til et helt andet IO program.

Det ved jeg godt... men jeg har ikke kunnet få zlportio til at styre alle
pins :s

> åbn nu din zlportio.pas og læs, der er masser af info.
> se her er noget af det der står i filen
> :
> {
> }
> { // get data bits from LPT
> }
> { databits := portreadb(
> }
> { // set data bits from LPT
> }
> { portwriteb( $378,
> }
> { // The second parameter determine the databus length for
> ion }

I min manual er der ikke meget info... Der står kun hvilke funktioner der
er, men ikke hvordan de bruges eller hvad de gør :s
Jeg har ovenstående - men hvordan skal jeg vælge hvilke pins der skal
læses/skrives etc...?



Calle. (04-02-2004)
Kommentar
Fra : Calle.


Dato : 04-02-04 06:43

Casper Bang wrote:
>> Ja, du bruger en manual til et helt andet IO program.
>
> Det ved jeg godt... men jeg har ikke kunnet få zlportio til at styre
> alle pins :s
>
>> åbn nu din zlportio.pas og læs, der er masser af info.
>> se her er noget af det der står i filen
>>>
>> {
>> }
>> { // get data bits from LPT
>> }
>> { databits := portreadb(
>> }
>> { // set data bits from LPT
>> }
>> { portwriteb( $378,
>> }
>> { // The second parameter determine the databus length for
>> ion }
>
> I min manual er der ikke meget info... Der står kun hvilke funktioner
> der er, men ikke hvordan de bruges eller hvad de gør :s
> Jeg har ovenstående - men hvordan skal jeg vælge hvilke pins der skal
> læses/skrives etc...?

ud fra hvad du skriver som databit, de tælles sammen binært.
255 vil så tænde alle 8 pins.

Der er nemmere at svare helt præcist, når du skriver hvilke pins du har
problemer med.

--
Calle



Casper Bang (04-02-2004)
Kommentar
Fra : Casper Bang


Dato : 04-02-04 08:53

> Der er nemmere at svare helt præcist, når du skriver hvilke pins du har
> problemer med.

1, 10, 13, 16

jeg skal bruge de fleste pins for at kunne styre mit hardware.
Jeg tænkte på om der ikke var en funktion ala
changestate(pin, state)
eller noget i den retning :s



Calle. (04-02-2004)
Kommentar
Fra : Calle.


Dato : 04-02-04 16:02

Casper Bang wrote:
>> Der er nemmere at svare helt præcist, når du skriver hvilke pins du
>> har problemer med.
>
> 1, 10, 13, 16
>
> jeg skal bruge de fleste pins for at kunne styre mit hardware.
> Jeg tænkte på om der ikke var en funktion ala
> changestate(pin, state)
> eller noget i den retning :s

det er det du skal gøre med AND & OR, så den kun ændre den pin du vil, og
lader de andre stå hvor de er.


--
Calle



Calle. (04-02-2004)
Kommentar
Fra : Calle.


Dato : 04-02-04 16:06

Casper Bang wrote:
>> Der er nemmere at svare helt præcist, når du skriver hvilke pins du
>> har problemer med.
>
> 1, 10, 13, 16
>
1 & 16 er udgange & 10 & 13 er indgange hvis du kører med alm. printerport



--
Calle



Calle. (03-02-2004)
Kommentar
Fra : Calle.


Dato : 03-02-04 06:29

Casper Bang wrote:
> Fandt frem til:
> http://www.delphi32.com/vcl/2467/
>
det er jo til et helt andet program, og ikke til Zlportio

--
Calle



Casper Bang (03-02-2004)
Kommentar
Fra : Casper Bang


Dato : 03-02-04 07:13

> > Fandt frem til:
> > http://www.delphi32.com/vcl/2467/
> >
> det er jo til et helt andet program, og ikke til Zlportio

Skal ikke nødvendigvis buge zlportio... jeg har ikke kunnet finde svar til
HVORDAN man sætte de forskellige pins med den, så jeg vil i stedet prøve med
nogle andre drivere...



Nicolai Hansen (03-02-2004)
Kommentar
Fra : Nicolai Hansen


Dato : 03-02-04 10:00

> Skal ikke nødvendigvis buge zlportio... jeg har ikke kunnet finde svar til
> HVORDAN man sætte de forskellige pins med den, så jeg vil i stedet prøve
med
> nogle andre drivere...

Hvilket styresystem kører du med?
Hvis du kører med Windows 98 kan du læse/skrive direkte til/fra porten.

procedure WritePort(port: word; value:byte);
begin
asm
push dx
push ax
mov dx, port
mov al, value
out dx, al
pop ax
pop dx
end;
end;

WritePort($379, $ff); vil så "tænde" alle pins.

function ReadPort(port: word): Byte;
begin
asm
push dx
push ax
mov dx, port
in al, dx
mov result, al
pop ax
pop dx
end;
end;

b:=ReadPort($378); vil læse lpt portens IN-pins og lægge dem i variablen b.

Ovenstående virker kun på Windows 95/98. Selv gennem en general port driver
har jeg ikke fået dette til at virke på NT/2000/XP.

I/O porten ($37a) virker på en lidt mere speciel måde.

Og tag mine port adresser med et forbehold - jeg har ikke lige en oversigt
liggende.




Casper Bang (03-02-2004)
Kommentar
Fra : Casper Bang


Dato : 03-02-04 15:41

> Hvilket styresystem kører du med?

Win 2K :(

> Hvis du kører med Windows 98 kan du læse/skrive direkte til/fra porten.

Ja, det var nemmere i de gode gamle dage med win 9x :/

> procedure WritePort(port: word; value:byte);
> begin
> asm
> push dx
> push ax
> mov dx, port
> mov al, value
> out dx, al
> pop ax
> pop dx
> end;
> end;
>
> WritePort($379, $ff); vil så "tænde" alle pins.
>
> function ReadPort(port: word): Byte;
> begin
> asm
> push dx
> push ax
> mov dx, port
> in al, dx
> mov result, al
> pop ax
> pop dx
> end;
> end;
>
> b:=ReadPort($378); vil læse lpt portens IN-pins og lægge dem i variablen
b.
>
> Ovenstående virker kun på Windows 95/98. Selv gennem en general port
driver
> har jeg ikke fået dette til at virke på NT/2000/XP.


Tak for hjælpen anyway. Bruger desværre et nyere windows -:(



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste