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.