Lire un bit précis dans les registre du port LPT

Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011 - 13 déc. 2008 à 16:34
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011 - 14 déc. 2008 à 15:21
Bonjour

J'arrive a lire les registre du port LPT mais j'aimerais etre capable de lire un bit spécifique

au fond j'aimerais savoir si le bit est a 1 ou 0 sans a avoir a lire tous le registre

voici la routine que j'utilise pour un registre

Public Function read_DataReg()

If Self Then Exit Function
 
  initc = True
  register = Inp(PortAddress)
  read_DataReg = register

End Function

6 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
13 déc. 2008 à 16:40
Tu ne peux pas lire un bt, il te faut lire le registre entier (8 bits) et faire un masque sur la valeur pour avoir l'état de ton bit.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
0
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011
13 déc. 2008 à 16:50
J'aime l'idée..

peut-tu developper un peu svp
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
13 déc. 2008 à 16:58
Une fois que tu as lu ta valeur, tu applique un masque dessus pour isoler le bit

Par exemple si tu veux lire le bit 3, tu lis ta valeur, tu applique un masque avec 8 (2^3=8). Si le résultat est égal au masque (ici 8) c'est que le bit est à 1 sinon le résultat =0

If read_DataReg and 8 = 8 Then
    msgbox("le bit 3 est à 1") ' le bit 3 correspondant évidement au 4eme bit
End If

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
0
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011
13 déc. 2008 à 18:04
merci..

seul problème, c'est que ca fonctionne que si seulement un des bit est mis a 1

quoi que c'est peut être moi alors voici comment je me suis pris

Public Function read_Data(bytes As Integer)
If Self Then Exit Function
 
  initc = True
 
  register = Inp(PortAddress)
  If register = 2 ^ bytes Then
     read_Data = 1
  Else
    read_Data = 0
  End If

End Function
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mikaels35 Messages postés 146 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 17 novembre 2009 2
14 déc. 2008 à 14:58
Tu écris: 

If register = 2 ^ bytes Then
 
Le test fonctionne en effet si  "register" n'à qu'un seul bit positionné et au bon endroit, n'importe quel autre bit à "1" en plus de celui testé entrainera une condition fausse !

Pour tester un bit quelconque quelle que soit la valeur de "register", il faut faire:

If (register And 2^ bytes) = 2^ bytes Then (comme le dit Casy)

ou on peut tout simplement écrire (puisqu'on fait un masque sur un seul bit, tous les autres sont mis à "0")

If (register And 2^ bytes) > 0 Then

@+
0
Moritus Messages postés 130 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 23 novembre 2011
14 déc. 2008 à 15:21
j'avais essayer mais ca ne fonctionnait pas...
par contre ca ma donner une bonne piste et j'ai réussi a trouver comment faire!!

Merci!
0
Rejoignez-nous