Oprogramowanie LPT w DELPHI - Pomocy
-
Autor tematu - Nowy użytkownik, używaj wyszukiwarki
- Posty w temacie: 2
- Posty: 2
- Rejestracja: 09 wrz 2005, 09:26
- Lokalizacja: Katowice-Cz?stochowa
Oprogramowanie LPT w DELPHI - Pomocy
Hej! Czy ktoś mógłby zamieścić listing procedury oprogramowującej wyjście LPT w DELPHI? W Pascalu była to instrukcja PORT. Niestety nie ma jej w DELPHI.
Być może to banalne pytanie, ale dzięki za pomoc
Być może to banalne pytanie, ale dzięki za pomoc
Tagi:
-
- Specjalista poziom 2 (min. 300)
- Posty w temacie: 1
- Posty: 346
- Rejestracja: 07 cze 2004, 13:11
- Lokalizacja: Bielsko-Biała
- Kontakt:
Pozdrawiam Andrzej
http://www.ottop.republika.pl/
http://www.ottop.republika.pl/
-
- Czytelnik forum poziom 1 (min. 10)
- Posty w temacie: 1
- Posty: 13
- Rejestracja: 24 lip 2005, 10:56
- Lokalizacja: Opole
Jak Ci to pomoże to proszę:
Jako adresy przy wywołaniu procedur podaj
dla LPT1 - $0378
LPT2 - $0278
dla danych
a dla linii sterujących $0379 i $0279
w/g opisu portu LPT
Pocedury może niezbyt optymalnie napisane, ale działają napewno.
Żeby nie było nieporozumień, tą metodą całość działa tylko pod wcześniejszymi windowsami
95,98,Me
jeżeli potrzebujesz tego pod Win2000, NT lub XP
szukaj biblioteki "io.dll" dla Delphi (i innych)
niestety nie pamiętam linka...
Jako adresy przy wywołaniu procedur podaj
dla LPT1 - $0378
LPT2 - $0278
dla danych
a dla linii sterujących $0379 i $0279
w/g opisu portu LPT
Pocedury może niezbyt optymalnie napisane, ale działają napewno.
Żeby nie było nieporozumień, tą metodą całość działa tylko pod wcześniejszymi windowsami
95,98,Me
jeżeli potrzebujesz tego pod Win2000, NT lub XP
szukaj biblioteki "io.dll" dla Delphi (i innych)
niestety nie pamiętam linka...
Kod: Zaznacz cały
// funkcja odczytu danej z portu
function odczytaj_z_portu(adres:word):byte;
var odczyt:byte;
begin
asm
mov DX,adres
in AL,DX
mov odczyt,AL
end;
odczytaj_z_portu:=odczyt;
end;
// procedura zapisu danych do portu
procedure wpisz_do_portu(adres:word;dana:byte);
begin
asm
mov DX,adres
mov AL,dana
out DX,AL
end;
end;
procedure wylacz_bit(adres:word;numer:byte);
begin
case numer of
0:asm
mov dx,adres
in al,dx
and al,11111110b
out dx,al
end;
1:asm
mov dx,adres
in al,dx
and al,11111101b
out dx,al
end;
2:asm
mov dx,adres
in al,dx
and al,11111011b
out dx,al
end;
3:asm
mov dx,adres
in al,dx
and al,11110111b
out dx,al
end;
4:asm
mov dx,adres
in al,dx
and al,11101111b
out dx,al
end;
5:asm
mov dx,adres
in al,dx
and al,11011111b
out dx,al
end;
6:asm
mov dx,adres
in al,dx
and al,10111111b
out dx,al
end;
7:asm
mov dx,adres
in al,dx
and al,01111111b
out dx,al
end;
end;
end;
procedure wlacz_bit(adres:word;numer:byte);
begin
case numer of
0:asm
mov dx,adres
in al,dx
or al,00000001b
out dx,al
end;
1:asm
mov dx,adres
in al,dx
or al,00000010b
out dx,al
end;
2:asm
mov dx,adres
in al,dx
or al,00000100b
out dx,al
end;
3:asm
mov dx,adres
in al,dx
or al,00001000b
out dx,al
end;
4:asm
mov dx,adres
in al,dx
or al,00010000b
out dx,al
end;
5:asm
mov dx,adres
in al,dx
or al,00100000b
out dx,al
end;
6:asm
mov dx,adres
in al,dx
or al,01000000b
out dx,al
end;
7:asm
mov dx,adres
in al,dx
or al,10000000b
out dx,al
end;
end;
end;
-
- Sympatyk forum poziom 2 (min. 50)
- Posty w temacie: 1
- Posty: 58
- Rejestracja: 22 lis 2004, 21:27
- Lokalizacja: okolice Poznania
Wstawki asm są fajne, ale z pewnych przyczyn nie działają pod winXP. Proponuję bibliotekę (+komponent) dlportIO, można tego używać również pod linuxem.
To jest freeware, więc daję w załączniku.
To jest freeware, więc daję w załączniku.
- Załączniki
-
- dlportio.zip
- (1.32 MiB) Pobrany 624 razy
-
- Specjalista poziom 1 (min. 100)
- Posty w temacie: 2
- Posty: 125
- Rejestracja: 19 sty 2005, 10:38
- Lokalizacja: Olsztyn
Pod Delphi przetestowalem i biblioteke IOPort jak i inne ale z czystego lenistwa i niecheci do WIN XP napisalem w pracy magisterskiej ze wymaganym systemem jest win98 i sterowanie zrobilem na wstawkach ASM
jest to krotsza wersja 
a samo obracanie silnikami w moim programie wygladalo tak
Prace nad programikiem jednak ustaly po otrzymaniu zadawalajacej oceny z obrony
a teraz czekam az ruszy Open Sorsowy projekt 

Kod: Zaznacz cały
function PortWe(Adres : Word) : Byte;
Asm
mov DX,AX {ustawienie danych we właściwym miejscu}
in AL,DX {odczyt portu, w AL pojawi sie czytany bajt}
End;
procedure PortWy( Dane : Byte; Adres : Word);
//procedura wysyla na port o adresie ADRES dane zawarte w zmiennej DANE
Asm
out DX,AL
End;

a samo obracanie silnikami w moim programie wygladalo tak

Kod: Zaznacz cały
procedure Obracanie(kierunek_1 : Byte; kierunek_2 : Byte);
Var
DaneSilnik1, DaneSilnik2 : Word;
begin
DaneSilnik1 := 0;//sekwencja z pierwszego silnika
DaneSilnik2 := 0;//sekwencja z drugiego silnika
Dane := 0;//suma sekwencji wysylane na lpt
Silnik_1[1]:=1;
Silnik_1[2]:=3;
Silnik_1[3]:=2;
Silnik_1[4]:=6;
Silnik_1[5]:=4;
Silnik_1[6]:=12;
Silnik_1[7]:=8;
Silnik_1[8]:=9;
Silnik_2[1]:=16;
Silnik_2[2]:=48;
Silnik_2[3]:=32;
Silnik_2[4]:=96;
Silnik_2[5]:=64;
Silnik_2[6]:=192;
Silnik_2[7]:=128;
Silnik_2[8]:=144;
Case kierunek_1 of
0: Begin //zatrzymuje
DaneSilnik1 := 0;
End;
1: Begin //kreci w prawo
I_s1 := I_s1 + 1;
If (I_s1 > 8) then I_s1 := 1;
DaneSilnik1 := Silnik_1[I_s1];
End;
2: Begin //kreci w lewo
I_s1 := I_s1 - 1;
If (I_s1 < 1) then I_s1 := 8;
DaneSilnik1 := Silnik_1[I_s1];
End;
End;
Case kierunek_2 of
0: Begin //zatrzymuje
DaneSilnik2 := 0;
End;
1: Begin //kreci w prawo
I_s2 := I_s2 + 1;
If (I_s2 > 8) then I_s2 := 1;
DaneSilnik2 := Silnik_2[I_s2];
End;
2: Begin //kreci w lewo
I_s2 := I_s2 - 1;
If (I_s2 < 1) then I_s2 := 8;
DaneSilnik2 := Silnik_2[I_s2];
End;
End;
Dane := DaneSilnik1 + DaneSilnik2;
PortWy(Dane,888);
Delay(30);
end;

