PROGRAM ZA KONTROLU DATA PORTA

 

Izgled ekrana ovog programa prikazan je na slici 1 (PORT02).

 

 

Slika 1

 

          Klikom mišom na neku od dioda D0-D7 menjamo njeno stanje, odnosno ako je crvena onda će ona biti uključena inače ako je bela biće isključena. Nakon postavljanja stanja dioda pritiskom na Upisi biće prenesno stanje dioda sa ekrana na naše testno kolo. Moguće je takođe promeniti adresu Data porta na LPT1, LPT2 ili LPT3 pri čemu se podrazumeva adresa 378H ako ništa ne menjamo.

          Sam program u Visual Basicu je:

 

Dim Data As Byte 'Used in Save Restore Bios.

Private Declare Sub Anjan Lib "vbio.dll" ()

Private Declare Function Inp Lib "vbio.dll" (ByVal portaddr&) As Integer

Private Declare Function Inpw Lib "vbio.dll" (ByVal portaddr&) As Long

Private Declare Sub Out Lib "vbio.dll" (ByVal port&, ByVal byt%)

Private Declare Sub Outw Lib "vbio.dll" (ByVal port&, ByVal wrd&)

Private Declare Function Peek Lib "vbio.dll" (ByVal MemAddr&) As Integer

Private Declare Function Peekw Lib "vbio.dll" (ByVal MemAddr&) As Long

Private Declare Function Poke Lib "vbio.dll" (ByVal MemAddr&, ByVal byt%) As Integer

Private Declare Function Pokew Lib "vbio.dll" (ByVal MemAddr&, ByVal wrd&) As Integer

Private Declare Function GetLptBaseAddr Lib "vbio.dll" (ByVal lpt&) As Integer

Private Declare Function GetComBaseAddr Lib "vbio.dll" (ByVal com&) As Integer

Private Declare Sub Enable Lib "vbio.dll" ()

Private Declare Sub Disable Lib "vbio.dll" ()

Private Declare Sub Delay Lib "vbio.dll" (ByVal count&)

Private Declare Sub AboutVBIO Lib "vbio.dll" ()

Public Broj, LPTadresa As Integer

____________________________________________________________

Private Sub Command2_Click()

    Call Out(LPTadresa, Broj)

End Sub

____________________________________________________________

Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim i, j As Integer

         

        i = 9

        If (X >= 230) And (X < 840) And (Y > 1440) And (Y < 1775) Then i = 7

        If (X >= 840) And (X < 1440) And (Y > 1440) And (Y < 1775) Then i = 6

        If (X >= 1440) And (X < 2040) And (Y > 1440) And (Y < 1775) Then i = 5

        If (X >= 2040) And (X < 2640) And (Y > 1440) And (Y < 1775) Then i = 4

        If (X >= 2640) And (X < 3240) And (Y > 1440) And (Y < 1775) Then i = 3

        If (X >= 3240) And (X < 3840) And (Y > 1440) And (Y < 1775) Then i = 2

        If (X >= 3840) And (X < 4440) And (Y > 1440) And (Y < 1775) Then i = 1

        If (X >= 4440) And (X < 5040) And (Y > 1440) And (Y < 1775) Then i = 0

        If i <> 9 Then

          

         If (Shape1(i).BackColor = RGB(255, 255, 255)) Then

            Shape1(i).BackColor = RGB(255, 0, 0)

            Else: Shape1(i).BackColor = RGB(255, 255, 255)

            End If

        End If

     

          Broj = 0

       

          For i = 0 To 7

            j = 0

            If (Shape1(i).BackColor = RGB(255, 0, 0)) Then j = 1

            Broj = Broj + 2 ^ i * j

          Next i

         

          Lpt1h = Hex(Broj)

          Text1.Text = Lpt1h

 

End Sub

___________________________________________________________

Private Sub Form_Load()

   Anjan

    LPTadresa = &H378

    Text1.Text = 0

    Call Out(LPTadresa, 0)

End Sub

____________________________________________________________

Private Sub Option1_Click()

If Option1 Then LPTadresa = &H378

End Sub

_____________________________________________________________

Private Sub Option2_Click()

    If Option2 Then LPTadresa = &H278

End Sub

_____________________________________________________________

Private Sub Option3_Click()

    If Option3 Then LPTadresa = &H3BC

End Sub

 

 

          Suština ovog programa sastoji se u tome da se prikazane diode  posmatraju kao 8 bitni binarni broj. Pri tome se svakoj od dioda pripiše odgovarajući težinski faktor prema donjoj tabeli.

 

Dioda

Težinski faktor

D0

20

D1

21

D2

22

D3

23

D4

24

D5

25

D6

26

D7

27

 

          Zatim se na osnovu toga sračunava decimalna vrednost broja. Tako naprimer binarni broj prikazan u donjoj tabeli imaće decimalnu vrednost :

 

Dioda

D7

D6

D5

D4

D3

D2

D1

D0

Pozicija

27

26

25

24

23

22

21

20

Bin.broj

0

1

1

0

1

1

1

0

 

broj=21+22+23+25+26=2+4+8+32+64=110

 

          Ovaj se princip u programu rešava u okviru for ciklusa podprograma Form_MouseDown na taj način što se ispituje pozicija diode (zavisno od promenljive i) i ako je ona crvena (RGB (255, 0, 0)) množi se sa odgovarajućim težinskim faktorom (2^i) i sabir u broj.

          Opisaćemo ukratko pojedine podprograme :

 

Private Sub Form_Load()

 

          Ovaj se podprogram startuje automatski učitavanjem forme a zatim se adresi LPT portra priduži vrednost 378H (LPT1). Nakon tog se na Data port komandom Call Out(LPTadresa, 0) gase sve dioda, slanjem broja 0 i postavlja heksa vrednost boja na 0 Text1.Text = 0.

 

Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y)

 

          U okviru ovog podprograma se rešava postavljanje dioda na crvenu ili belu boju upotrebom podprograma koji se aktivira na pritisak miša. U njemu se ispituje pozicija kursora i zavisno od toga na kojoj se diodi on nalazi menja boja. Za određivanje pozicije kursora koristimo niz if naredbi pri čemu ispitujemo X i Y kordinatu. Nakon toga se sračunava decimalna vrednost broja, njegova heksa prezentacija i prikazivanje.

 

Private Sub Command2_Click()

 

          U okviru ovog podprograma se dobijeni decimalni broj upisuje na Data port primenom VBIO funkcije OUT pritiskom na taster upiši.

 

Private Sub Option1_Click()

         

Ovom se kontrolom bira adresa LPT porta i to LPT1, dok se sa ostale dve Option2 i Option3 biraju adrese LPT2 i LPT3.

 

 PROGRAM ZA KONTROLU CONTROL PORTA

 

Izgled ekrana ovog programa prikazan je na slici 2 (PORT03).

 

 

Slika 2

 

          Princip njegovog rada je sličan prethodnom programu. Kod ovog programa je sledeći:

 

'

' Deo za VBIO.DLL

'

Public Broj, LPTadresa, CPTAdresa As Integer

________________________________________________

Private Sub Command2_Click()

        Call Out(CPTAdresa, Broj)

End Sub

_________________________________________________

Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim i, j As Integer

         

        i = 5

 

        If (X >= 2640) And (X < 3240) And (Y > 1440) And (Y < 1775) Then i = 3

        If (X >= 3240) And (X < 3840) And (Y > 1440) And (Y < 1775) Then i = 2

        If (X >= 3840) And (X < 4440) And (Y > 1440) And (Y < 1775) Then i = 1

        If (X >= 4440) And (X < 5040) And (Y > 1440) And (Y < 1775) Then i = 0

          

        If i <> 5 Then

         If (Shape1(i).BackColor = RGB(255, 255, 255)) Then

            Shape1(i).BackColor = RGB(0, 255, 0)

            Else: Shape1(i).BackColor = RGB(255, 255, 255)

            End If

        End If

     

          Broj = 0

       

          For i = 0 To 4

            j = 0

            If (Shape1(i).BackColor = RGB(0, 255, 0)) Then j = 1

            Broj = Broj + 2 ^ i * j

          Next i

         

          Lpt1h = Hex(Broj)

          Text1.Text = Lpt1h

          Broj = Broj Xor 11

 

End Sub

___________________________________________________

Private Sub Form_Load()

    Anjan

    LPTadresa = &H378

    CPTAdresa = LPTadresa + 2

    Text1.Text = 0

    Call Out(CPTAdresa, 11)

End Sub

____________________________________________________

Private Sub Option1_Click()

If Option1 Then LPTadresa = &H378

    CPTAdresa = LPTadresa + 2

End Sub

___________________________________________________

Private Sub Option2_Click()

    If Option2 Then LPTadresa = &H278

    CPTAdresa = LPTadresa + 2

End Sub

____________________________________________________

Private Sub Option3_Click()

    If Option3 Then LPTadresa = &H3BC

    CPTAdresa = LPTadresa + 2

End Sub

 

 

          U okviru programa za kontrolu kontrol Control porta postoje neke specifičnosti a to su:

 

·         adresa kontrol porta je za dva veća od Data porta pa je njegova adresa : CPTAdresa=LPTadresa+2

·          budući da su signali C0, C1 i C3 invertovani to smo morali pre prikaza ove bite invertovati što  smo uradili komandom:  Broj=Broj Xor 11

 

 PROGRAM ZA KONTROLU STATUS PORTA

 

Izgled ekrana ovog programa dat je na slici 3 (PORT4).

 

 

Slika 3

 

          Program za kontrolu Status porta je sledeći:

 

'

' Deo za VBIO.DLL

'

Public broj, LPTadresa, SPTAdresa As Integer

________________________________________________

Private Sub Command2_Click()

Dim j As Integer

Dim broj As Byte

Dim i As Byte

  broj = Inp(SPTAdresa)

  broj = broj Xor 128

   

  For i = 3 To 7

    If broj And 2 ^ i Then

      Shape1(i).BackColor = RGB(0, 0, 255)

      Else

      Shape1(i).BackColor = RGB(255, 255, 255)

     End If

  Next i

  

End Sub

________________________________________________

Private Sub Form_Load()

   Anjan

    LPTadresa = &H378

    SPTAdresa = LPTadresa + 1

End Sub

________________________________________________

Private Sub Option1_Click()

If Option1 Then LPTadresa = &H378

    SPTAdresa = LPTadresa + 1

End Sub

________________________________________________

Private Sub Option2_Click()

    If Option2 Then LPTadresa = &H278

    SPTAdresa = LPTadresa + 1

End Sub

________________________________________________

Private Sub Option3_Click()

    If Option3 Then LPTadresa = &H3BC

    SPTAdresa = LPTadresa + 1

End Sub

 

 

Specifičnosti ovog programa su sledeće:

 

·         Adresa Status porta je za 1 veća od LPTadresa pa je SPTAdresa=LPTadresa+1

·         Očitavanje statusa prekidača vrši se u podprogramu Sub Command2_Click koji se automatski poziva pritiskom na Ocitaj.

 

Moguće je objediniti sva tri programa u jedan pa se dobije ekran kao na slici 4 (PORT05)

 

 

Slika 4

 

Date programe možete preuzeti na downolads.

 

 

http://vojo.milanovic.org
© Copyright, 2003 Milanović Voja

All Rights Reserved.