Transposition d'un vieux code

Signaler
Messages postés
17
Date d'inscription
mardi 21 octobre 2003
Statut
Membre
Dernière intervention
8 septembre 2010
-
Messages postés
13
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
5 février 2014
-
Bonjour,

Je possède une carte d'acquisition analogique/digital à 6 voies sur port imprimante.
La dernière fois que j'ai utilisé cette carte (ça date !), elle fonctionnait très bien, mais avec un bout de code en GWBasic ou QBasic (je ne sais plus).
J'aimerais transposer ce code en VB6, mais avec les "peek", les "poke" et les "data", je n'y arrive pas.
Si une âme charitable pouvait m'aider, je lui serai reconnaissant.

Merci.

Voici le code :
10 CLS:GOSUB 1090
20 POKE 40000!,7:POKE 40001!,15
30 CALL VOLTMETRE
40 TEMPS7=PEEK(40000!)+PEEK(40001!)*256
50 POKE 40000!,0:POKE 40001!,8
60 CALL VOLTMETRE
70 TEMPS0=PEEK(40000!)+PEEK(40001!)*256
80 LOCATE 1,1,0
90 PRINT TEMPS0,TEMPS7:FOR I=1 TO 6
100 POKE 40000!,I:POKE 40001!,(I+8)
110 CALL VOLTMETRE
120 PRINT PEEK(40000!)+PEEK(40001!)*256,:PRINT USING "#.##";(2.85*((PEEK(40000!)+PEEK(40001!)*256)-TEMPS0))/(TEMPS7-TEMPS0)
130 NEXT
140 GOTO 80
1090 RESTORE 1150:FOR I=&H9C42 to &H9C75
1100 READ A$
1110 POKE I,VAL("&h"+A$)
1120 NEXT I
1130 VOLTMETRE=&H9C42
1140 RETURN
1150 DATA FA,53,51,50,52,BB,40,9C,8A,07,BA,78,03,EE,89,00,10,49,75,FD
1160 DATA BB,41,9C,8A,07,EE,8A,79,03,BB,00,00,43,EC,24,80,74,FA,89,1E
1170 DATA 40,9C,5A,58,59,5B,FB,CB,0,0,0,0,0,0,0,0,0,0,0

Christian.

3 réponses

Messages postés
13
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
5 février 2014

Bonjour,
Tiens je croyais etre le seul a utiliser encore ce genre de truc en  basic!!
si j'ai bien compris  les adresses 40000 -40001 representent deux bytes du port imprimante, transposés a l'aide de la routine VOLTMETRE sur le port LPT


Je pense que tu as deux solutions:


-Trouver en VB6 l'état de port lpt1: pour ma part j'ai jamais utilisé
-Utiliser ou construire une dll qui remplace  VOLTMETRE

J'ai peut etre une piste pour ton probleme
Pour lire les ports J'ai utilisé XVB32.dll  qui remplace des PEEK et POKE dans la zone &h300,  d'une vielle carte de saisie 40 E/S basée sur deux 8255 dans un slot interne du PC . je l'avais adaptée sur un compteur industriel. il suffirait le la trafiquer un peu pour l'adapter aux adresses du port LPT
La syntaxe est simple et rapide:
Ceci est l'exemple utilisé pour ma carte:

Dans un module .bas
Declare Sub xOut Lib "ccovb32.dll" (ByVal port As Long, octet As Byte)
Declare Function xInp Lib "ccovb32.dll" (ByVal port As Long) As Byte

Dans le Form:

Private Sub lirecart()
xOut &H30B, 128: xOut &H307, 155: xOut &H309, 0. rem positionne l'état de la carte en lecture
For mc = 1 To qp
AD = Int(mc / 10) * 16 + mc Mod (10)
xOut &H30A, AD. 'positionne un octet en sortie
For t = 1 To 100000 ' laisse le temps au 8255 de se positionner 
Next
TA = xInp(&H306)' lit les trois adresses consécutives
TB = xInp(&H305)
TC = xInp(&H304)
te = TA * 65536 + TB * 256 + TC: calcul decimal
DoEvents
Next
End Sub
Si tu trouve pas xvb32.dll, je peux te l'envoyer


.a+
 

APISOURCE
Messages postés
13
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
5 février 2014

Bonjour,
Tiens je croyais etre le seul a utiliser encore ce genre de truc en  basic!!
si j'ai bien compris  les adresses 40000 -40001 representent deux bytes du port imprimante, transposés a l'aide de la routine VOLTMETRE sur le port LPT


Je pense que tu as deux solutions:


-Trouver en VB6 l'état de port lpt1: pour ma part j'ai jamais utilisé
-Utiliser ou construire une dll qui remplace  VOLTMETRE

J'ai peut etre une piste pour ton probleme
Pour lire les ports J'ai utilisé XVB32.dll  qui remplace des PEEK et POKE dans la zone &h300,  d'une vielle carte de saisie 40 E/S basée sur deux 8255 dans un slot interne du PC . je l'avais adaptée sur un compteur industriel. il suffirait le la trafiquer un peu pour l'adapter aux adresses du port LPT
La syntaxe est simple et rapide:
Ceci est l'exemple utilisé pour ma carte:

Dans un module .bas
Declare Sub xOut Lib "ccovb32.dll" (ByVal port As Long, octet As Byte)
Declare Function xInp Lib "ccovb32.dll" (ByVal port As Long) As Byte

Dans le Form:

Private Sub lirecart()
xOut &H30B, 128: xOut &H307, 155: xOut &H309, 0. rem positionne l'état de la carte en lecture
For mc = 1 To qp
AD = Int(mc / 10) * 16 + mc Mod (10)
xOut &H30A, AD. 'positionne un octet en sortie
For t = 1 To 100000 ' laisse le temps au 8255 de se positionner 
Next
TA = xInp(&H306)' lit les trois adresses consécutives
TB = xInp(&H305)
TC = xInp(&H304)
te = TA * 65536 + TB * 256 + TC: calcul decimal
DoEvents
Next
End Sub
Si tu trouve pas xvb32.dll, je peux te l'envoyer


.a+
 

APISOURCE
Messages postés
13
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
5 février 2014

Bon j'ai cliqué deux fois sur envoyer sans le vouloir. Mille excuses pour le message en double,
C'est pour te signaler que j'avais renommé ma XVB32.dll  en CCOVB32.dll apres modif de mon cru,  ce qui explique la différence de code; mais j'ai les deux versions
PS: Je viens de rechercher sur google, pas de xvb32.dll
As tu un lien ou je pourrais l'envoyer ?

, APISOURCE