Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: VB päättymätön luuppi

Sivun loppuun

Milu [14.12.2003 21:55:33]

#

Jos formilta käskee hyppäämään aliohjelmaan, jossa pyörii
päättymättömässä luupissa ja lukee lpt portin pinnejä ja tulostaa näytölle arvot ja jossa tietty pinnin nouseminen ylös vasta päästää luupista pois.

Miksi tilttaa kun käskee hyppäämään aliohjelmaan.

Vai onko nyt ajatus moka.

sooda [15.12.2003 12:57:10]

#

onko sulla siellä luupissa DoEvents?

Milu [15.12.2003 14:13:29]

#

Ei pitäiskö olla mitä toi Events meinaa.

Mitä eroo pelkkään do:loop

JTJ [15.12.2003 15:59:29]

#

Siis DoEventsiä käytetään tähän tyyliin:

Do
  ..koodia..
  DoEvents
  ..koodia..
Loop

Eikä tuon DoEventsin tarvitse edes olla välttämättä loopissa eikä juuri noin kuin tuossa esimerkissä.
Tuo DoEvents antaa muillekkin prosesseille suoritusaikaa eikä vaan sille ohjelmasi loopille.

trinit [15.12.2003 17:24:55]

#

MSDN kertoo DoEvents:stä näin (lyhennettynä):

"DoEvents is most useful for simple things like allowing a user to cancel a process after it has started, for example a search for a file."

Käytetään tuollain kuin JTJ esittikin.

Milu [15.12.2003 19:39:15]

#

No nyt se ei tilttaa kokonaan kun käytää tuota DoEvent:siä välissä, mutta jos pulssia ei tule lpt pinneihin se ei hyppää tohon aliohjelmaan ilman kaksois klikkausta ja jää jotenkin päälle, silloin jos pulsseja tulee se hyppää normaalisti aliohjelmaan.

Pätkän on tarkotus lukee pic16f84 piiristä 16 bittinen luku sarja tietona lpt portista.

Joku tossa VB:ssä sotkee mun ajatusmaailmaa qbasikin jälkeen.

tollein testasin sitä se basikilla toimi normaalisti.

Private Sub luedata()

Dim n As Byte
Dim luku As Long
Dim vara2 As Byte ,swap
Dim vara1 As Byte ,swap
Dim vara As Byte ,swap
Dim apu As Long
Dim lahetetty As Byte


Do
luku = 0
vara = 2
vara1 = 3
'Call vbOut(&H21, &HFF)
'Call vbOut(&HA1, &HFF)
Call vbOut(888, 0)
Call vbOut(888, 3)
For n = 0 To 15
DoEvents
apu = 2 ^ n
If vara1 = 2 Then lahetetty = 16
if vara1 = 3 Then lahetetty = 0

takasin:

DoEvents
If pois = 1 Then pois = 0: GoTo loppu
If (vbInp(889) And 16) = lahetetty Then GoTo takasin
If (vbInp(889) And 64) = 64 Then luku = luku + apu
If n <> 15 Then vara2 = vara: vara = vara1: vara1 = vara2 Call vbOut(888, vara1)
Next n
Picture6.Cls
Picture6.Print luku
'Call vbOut(&H21, 0)
'Call vbOut(&HA1, 0)

Loop

loppu:

End Sub

Noi keskeytyksetkään ei olut käytössä.

Jelpatkaa nyt, että pääsee juonesta kiinni.

Missä välissä tuo DoEvents pitää olla?

Milu [15.12.2003 19:43:48]

#

Swapin eteen tuli pilkut vaikka piti olla '
ja vara1=vara2: call puuttuu toi kaksoispiste, mutta eiköhän siitä toiminta kummiskin selviä.

Milu [16.12.2003 23:57:59]

#

Onko tuossa ongelmana, että se vie liikaa prosessilta aikaa?
Kun pätkän kääntää exe:ä niin se ei sammu ollenkaa muuta kuin Ctrl+Alt+Del ja lopeta tehtävä.

Tuota portia pitäis lukee kokoajan kun sinne tulis n.200 kertaa sekunnissa 16 bittinen luku ja se siirto ei ole synkronisoitu jolloin täytyy odottaa kun yhdessä pinnissä jännite nousee ylös ja alas, että tietää milloin toinen on valmis lukemaan ja vastaanottamaan bitti tiedon.

Miten com porttiin tehdään kesketys jos yrittäis sitä sieltä kautta, ettei täydy sitä porttia lukea kokoajan?

remontti-reiska [18.12.2003 18:10:13]

#

Muokkaus toiminto on olemassa! Käytä sitä.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta