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
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
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
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 ?