|
| 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 |
| | |
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 (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 -:(
| |
|
|