Isoler un bit

carmodelisme Messages postés 4 Date d'inscription samedi 27 mai 2006 Statut Membre Dernière intervention 4 avril 2015 - 4 avril 2015 à 22:51
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 - 7 avril 2015 à 11:50
Bonjour à tous

Je viens de me construire une carte branchée sur le port parallèle d'un "vieux" pc.
Cette carte e/s me sert à piloter des petits trains.
Mon idée et de recevoir une information sur ma carte, écrire un programme qui lise cette information et en fonction de cela, renvoyer une information à un aiguillage par exemple.
Je m'explique : l'aiguillage A1 est en position droite, un contacteur envoie un signal 1 à ma carte qui lit en permanence les entrées. Quand un certain bit est à 1 alors j'envoie une information pour manoeuvrer l'aiguillage.
J'ai un programme qui tourne en entrée et en sortie mais je n'arrive pas à isoler une valeur précise en entrée.
J'espère avoir été clair et je remercie par avance pour votre aide.
Cordialement
Marc

--

2 réponses

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
5 avril 2015 à 15:40
bonjour
regarde ce que fait cette fonction

  Public Function Isbitset(ByVal valeur As Byte, ByVal posoctet As Byte) As Boolean

Isbitset = (valeur And CByte(2 ^ posoctet)) <> 0

End Function


en sachant que valeur est la valeur 8 bits récupéré sur ton port parallèle et posoctet est la position du bit dont tu veux avoir la valeur

Cette fonction renvoie True si le bit est à 1 et False si ce bit est à 0

Attention les bits vont de 7 à 0 pour un octets
Ainsi 1000000 en binaire a son bit 7 à 1 (128 en décimal)
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
6 avril 2015 à 09:41
Bonjour a tous,

Juste en complément (en VB.Net)

Pour analyser la structure binaire d'un byte sous forme de texte, j'ai cette fonction


Public Function ByteToString(ByVal b As Byte) As String
Return Convert.ToString(b, 2).PadLeft(8, Microsoft.VisualBasic.ChrW(48))
End Function


Ce qui donne d'un 3 ( en byte ), un "00000011" en string,

Juste pour info:
Pour les fonctions utilisant le sigle ^ attention au temps d'exécution si ce critère est important
Voici ce que donnait un benchmark de 2 opérations similaires:

Dim b as double, c as double
b ^ 2 + c ^ 2 ==> 1.233296 Ticks (ou unitée de temps)
b * b + c * c ==> 0.005938 Ticks (ou unitée de temps)

Bonne Prog
CGSI3

--
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
6 avril 2015 à 11:11
Salut CSGi3
Evite en VB net d'importer Microsoft.VisualBasic

ta fonction devient alors

 Private Function ByteToString(ByVal b As Byte) As String

Return Convert.ToString(b, 2).PadLeft(8, Convert.ToChar(48))

End Function
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
7 avril 2015 à 11:50
Bonjour VB95

Oui biensur

Merci pour la correction
0
Rejoignez-nous