logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Tłumaczenie kodu PASCAL do VB z użyciem inpout32.dll dla karty chipowej LPT

chemicalkash 22 Lis 2006 10:57 1386 6
REKLAMA
  • #1 3250396
    chemicalkash
    Poziom 19  
    Posty: 214
    Pomógł: 32
    Ocena: 7
    Witam!!!

    Znalazłem w internecie kawałek kodu w PASCALU do odczytu danych z karty chipowej podpiętej bezpośrednio do LPT. Proszę o przetłymaczenie tego kodu na język VisualBasic najlepiej przy użyciu biblioteki inpout32.dll

    oto kod:
    
    program CHIPR;
    
    uses crt;
    
    Procedure VCC(aa : boolean);            {power}
             Begin
             If aa = true Then port[$378] := port[$378] + 1 Else port[$378] := 0;
             End;
    Procedure RST(aa : boolean);            {reset}
             Begin
             If aa = true Then port[$378] := port[$378] + 8 Else port[$378] := port[$378] - 8;
             End;
    Procedure CLK(aa : boolean);            {clock}
             Begin
             If aa = true Then port[$378] := port[$378] + 4 Else port[$378] := port[$378] - 4;
             End;
    Function IO(aa : byte) : byte;       {I/O}
             Begin
             If aa = 0 Then port[$37A] := 255;
             If aa = 1 Then port[$37A] := 0;
             If aa = 3 Then Begin
                            If port[$37A] mod 2 = 0 then IO := 1 Else IO := 0;
                            End;
             End;
    var
    DANEK : array[1..1024] of Byte;   {tutaj beda dane z karty}
    bit : array[1..8] of byte;
    {VCC, RST, CLK, IO : byte;}
    i,ii,bajt : integer;
    
    Begin
    clrscr;
    Writeln('Wcisnij cos aby odczytac !!!');
    Readkey;
    port[$378] := 0;    {wszystkie V na wyjsciach 0.V}
    port[$379] := 0;
    port[$37A] := 0;
    VCC(true);             {power ON}
    Delay(1);
    RST(true);
    Delay(1);
    CLK(true);
    Delay(1);
    CLK(false);
    Delay(1);
    RST(False);
    ii :=0;
    bajt:=0;
    For i := 1 To 128 Do
     Begin
      Delay(1);
      ii := ii+1;
      Bit[ii]:=IO(3);
      If ii = 8 Then Begin
                     Bajt :=bajt + 1;
                     Danek[bajt]:=Bit[1]*1 + Bit[2]*2 +Bit[3]*4 + Bit[4]*8 + Bit[5]*16 + Bit[6]*32 + Bit[7]*64 + Bit[8]*128;
                     ii:=0;
                     End;
      CLK(True);
      Delay(1);
      CLK(False);
     End;
    VCC(false);             {power OFF}
    port[$378] := 0;    {wszystkie V na wyjsciach 0.V}
    port[$379] := 0;
    port[$37A] := 0;
    Writeln;
    For i:=1 to 16 do Write(Danek[i],' ');
    Writeln;
    Writeln('UDAťO SI¨ !!!!!!!');
    Readkey;
    end.
    


    Z góry bardzo dziękuje
  • REKLAMA
  • #2 3250466
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38693
    Pomógł: 3162
    Ocena: 6464
    Nie znam w/w biblioteki ale w normalny sposób pod Windowsem nie można w ten sposób odwoływać się do portu.
  • REKLAMA
  • Pomocny post
    #4 3252724
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Wszystko wpisuj w module.

    'Deklaracja
    Public Declare Function Inp Lib "inpout32.dll" _
    Alias "Inp32" (ByVal PortAddress As Integer) As Integer
    Public Declare Sub Out Lib "inpout32.dll" _
    Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)


    Z RST i CLK zrob podobnie:


    Sub VCC(aa As Boolean)  'power
    Dim Odczyt As Byte
    Odczyt = Inp(&H378)
    
    If aa = True Then
    If Odczyt And 1 Then Exit Sub ' dodałem funkcje sprawdzającą czy już nie jest bit1= 1
    Out &H378, Odczyt + 1
    Else
    If Not Odczyt And 1 Then Exit Sub ' dodałem funkcje sprawdzającą czy już nie jest  bit1=0
    Out &H378, Odczyt - 1
    End If
    
    End Sub


    Funkcja testująca wej/wyj

    Function IO(aa As Byte) As Byte 'I/O
    
    If aa = 0 Then Out &H37A, 255
    If aa = 1 Then Out &H37A, 0
    If aa = 3 Then
    If Inp(&H37A) Mod 2 = 0 Then
    IO = 1
    Else
    IO = 0
    End If
    
    End Function


    Pączątek juz masz.

    P.S. a wjakim języku dobrze Ci idzie programowanie?


    pozdr.
  • REKLAMA
  • #5 3252795
    tzok
    VIP Zasłużony dla elektroda
    Posty: 38693
    Pomógł: 3162
    Ocena: 6464
    Na końcu strony masz uwagę:
    Uwaga! Przedstawiona metoda nie działa na systemach opartych na technologii NT.

    ...i o to właśnie mi chodziło, nie zadziała na Windows NT/2000/XP/2003/Vista.
  • REKLAMA
  • #6 3252845
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    (do arturkaszuba Spec od komputerów nie musi być specem od programowania)

    Biblioteka InpOut32 działa pod XP


    pozdr.
  • #7 3254105
    chemicalkash
    Poziom 19  
    Posty: 214
    Pomógł: 32
    Ocena: 7
    Znacznie lepiej idzie mi programowanie w pascalu a vb sie dopiero uczę stąd ten post.

    Dziękuje za pomoc!

Podsumowanie tematu

✨ Dyskusja dotyczy tłumaczenia kodu w języku Pascal służącego do odczytu danych z karty chipowej podłączonej do portu LPT na język Visual Basic z wykorzystaniem biblioteki inpout32.dll. Wskazano, że standardowe metody dostępu do portów w Windows są ograniczone, zwłaszcza w systemach opartych na technologii NT (Windows NT/2000/XP/2003/Vista). Biblioteka inpout32.dll jest popularnym rozwiązaniem umożliwiającym bezpośrednie sterowanie portami LPT w systemach Windows, w tym XP. Przykładowy kod w VB pokazuje deklaracje funkcji Inp i Out z inpout32.dll oraz implementację procedur VCC, RST, CLK i funkcji IO, które odpowiadają oryginalnym funkcjom w Pascalu, umożliwiając manipulację bitami portu LPT pod adresem 0x378 i 0x37A. Autor przyznaje, że lepiej zna Pascala i uczy się VB, dlatego prosił o pomoc w tłumaczeniu.
Wygenerowane przez model językowy.
REKLAMA