Masquage de bit

Résolu
runo Messages postés 26 Date d'inscription mercredi 5 octobre 2005 Statut Membre Dernière intervention 15 avril 2011 - 9 nov. 2005 à 12:57
philippe laschweng 1 Messages postés 278 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 13 avril 2013 - 10 nov. 2005 à 15:44
Jai une petite question :

je lis le port parallèle de mon PC :

portD0 = Inp(PortAddress)

Avec cette fonction, je recupère la valeur du port, mais j'aimerais
savoir comment vérifier l'état d'un seul bit ? Par exemple je veux
tester si le bit 0 est à 1 ?



Idem, lorsque j'ecris sur le port, est-il possible de n'écrire que certains bits ?



Merci pour l'aide.

14 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 nov. 2005 à 13:23
AND et OR .... rien besoin de plus ...

If ( portD0 And 8 ) Then ...
3
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
9 nov. 2005 à 16:47
Explique moi ça Renfield stp !!!
Y'a quand même un truc que j'ai pas du piger au nivo de la manipulation binaire via les fonctions logiques!!!
Si tu pouvais me faire un petit topo voire (mais je voudrais pas te donner trop de travail), un tuto sur ce sujet pourtant si fondamentale!

Sinon, tu vas peut-être me prendre pour un lourdingue mais j'ai chercher partout, et en VB6, j'ai pas trouvé ta fonction ChrW !!! Es-tu vraiment certain que ce n'est pas d'une API dont tu parlais et si non, y'a-t-il d'autres fonctions du genre ???

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 nov. 2005 à 17:06
Pour vérifier l'êtat du 4ème bit, par exemple, on fera par exemple

Input = 14
If (Input And 8) Then
'# Le 4ème bit, qui représente la valeur 8, est à 1
End if

14 -> 1110 en binaire
8 -> 1000 en binaire
l'opération And ne prenant que les bits en commun, on obtient :
14 And 8 -> 1000

--------------------

Dans VB
F2 > recherche de "ChrW" :

Function ChrW(CharCode As Long)
Membre de VBA.Strings
Renvoie une chaîne contenant le caractère natif spécifié (Unicode ou ANSI)
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
9 nov. 2005 à 17:30
Mais alors, explique moi l'utilité de OR et de XOR s'il te plait...

Enjoy

<hr size="2" width="100%">
Je vais chercher mieux pour ChrW... Merci du tuyau
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
9 nov. 2005 à 18:07
0
philippe laschweng 1 Messages postés 278 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 13 avril 2013 2
9 nov. 2005 à 21:51
Oui il faut utiliser un masquage logique !


Mais je crois qu'en VB tu ne peux pas utiliser les fonctions logiques (AND, OR...) avec des mots binaires directement. Exemple :
0011 AND 1110 te donne en théorie 0010. Mais je crois que VB n'accepte pas directement cette écriture (pas comme du VHDL). Je me trompe peut être ... mais je crois pas. Il n'accepte que ces fonctions entre 2 bits. Mais tu peux facilement te construire une fonction pour cela.

Pour masquer des bits, tu fais en principe un ET logique avec ton octet (exemple 8 bits) et un second octet ou tu mets les bits à masquer à 0 (les autres étant à 1). Mais tu peux aussi utiliser in InStr() si tu veux isoler un bit en particulier même si ca n'est pas le plus judicieux je te l'accorde ..

Mais c'est vraie qu'en logique booléenne tu fais tout avec les opérateurs AND, OR, XOR (inverseur commandé) etc ...

Phil
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
10 nov. 2005 à 00:46
Merci beaucoup les gars pour toutes ces précieuses (à mes yeux) infos
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 nov. 2005 à 07:32
Phil, je t'assure, VB accepte bien AND et OR pour les opérations binaires....

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
0
philippe laschweng 1 Messages postés 278 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 13 avril 2013 2
10 nov. 2005 à 10:33
Renfield : je sais bien que VB accepte AND et OR pour les opérations binaires mais tu as du mal comprendre ou je me suis mal expliqué. Ce que je voulais dire, peut être que je me trompe, mais je ne suis pas arrivé à faire par exemple un AND bit à bit sur un octet complet, du genre :
000011111 AND 01010101 = 00000101.
VB n'est pas capable de te donner ce résultat directement. Les opérations ne marche que bit à bit.
Ce n'est pas comme avec du VHDL (langage de description hardware) par exemple qui accepte fort heureusement ce type d'opération.
En VB pour faire l'opération du dessus, je me suis fabriqué des fonctions simples mais je n'ai pas trouvé le moyen de faire l'opération directement.
Mais je me répéte je n'affirme rien, j'ai constaté et je n'ai peut être pas trouvé la solution ...

A vous de me dire ...
Phil
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 nov. 2005 à 10:47
tu peux pas mettre tes chiffres direct en binaire, mais VB fais bien l'opération

31 and 85 => 21

ce qui fais bien :
000011111 AND 01010101 = 10101

a moins que je comprenne mal ce que tu veux me dire
0
philippe laschweng 1 Messages postés 278 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 13 avril 2013 2
10 nov. 2005 à 11:16
Oui tu as raison en décimal cela fonctionne. Je n'avais jamais essayé en décimal car je n'y ai jamais pensé vu que mon raisonnement était binaire. Mais c'est un peu bête que VB n'accepte direct du binaire. Pareil je crois (peut être ai-je encore tout faut) qu'il n'existe pas de fonction DIRECTE pour faire des conversions classiques base16 --> base10, base10 -- > base2 ...

Ce qui veut dire que si tu veux faire un ET logique entre deux octets (par exemple), tu es obligé de convertir dans un premier temps les deux octets de b2 en b10, faire l'opération et reconvertir le résultat de b10 en b2. En plus il te faut un module pour convertir b2 en b10 et b10 en b2 (j'ai une fois trouvé un module sur le net qui fait toute les conversions dans toutes les bases).

Sinon, devant ce problème j'avais dans le passé carrément réalisé une fonction qui utilise le AND mais bit à bit pour chaque bit des deux mots binaires (en parallèle).

En tout cas meri pour tes explications, j'aime bien cherché à comprendre ce que je ne comprends pas !! lol


Phil
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
10 nov. 2005 à 11:35
16, si, mais pas en binaire

Hex$( ) pour conversion vers hexa

dans l'autre sens :
MaVal = "C0"
DecimalValue = Val ( "&h" & MaVal )
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
10 nov. 2005 à 15:16
Je crois qu'il existe aussi une fonction de convertion octale!
0
philippe laschweng 1 Messages postés 278 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 13 avril 2013 2
10 nov. 2005 à 15:44
Oui le Hex je conaissais mais binaire rien trouvé dessus !
0
Rejoignez-nous