2017-08-02 2 views
-1

Désolé redemander ... Mais il me semble lutter avec binaire ... je suis tombé sur la ligne suivanteIF condition avec l'argument binaire

MGC_SSPBUF_REG = (GESTIC_I2C_ADDR << 1) | 1; // write Address to MGC3130 

Outre le fait que ne savent plus, pourquoi on déplacerait l'adresse vers la gauche pour la sauver, je ne peux pas me concentrer sur cette opération OU. Avoir une adresse ORed avec "1" donnera toujours 1111 1111, n'est-ce pas?


Je suis la programmation d'un PIC18F14K50 Microchip en C. Tout en vérifiant un code écrit par une autre société que je suis tombé sur la ligne suivante:

if(MGC_SSPCON2_REG & 0x1F) { // MSSP not idle 
... 
} 

Maintenant, MGC_SSPCON2_REG est mis en œuvre comme suit

#define MGC_SSPCON2_REG   SSPCON2 

Où SSPCON est le registre de contrôle MSSP 8 bits (en MODE I2C).

Ce que je ne comprends pas, c'est comment cette condition if fonctionne. Est-ce vrai lorsque tous les bits des nombres binaires 8 bits sont mis à 1? Pour autant que je sache, l'argument est l'opération ET bits sur le registre 8bit et le nombre binaire 0001 1111 (0x1F).

J'espère avoir fourni assez de code pour comprendre la question. Je ne voulais pas entrer dans les détails sur le fonctionnement du registre.

Nous vous remercions d'avance pour votre aide :)

Répondre

2

Il exécutera si l'un des 5 bits les moins significatifs sont définis (en raison du niveau du bit et avec 0x1F.

+0

Merci beaucoup pour la clarification :) – user3554329

0

ayant une adresse avec ORed « 1 » sera toujours résultat en 1111 1111, il wouldn?

Non, pourquoi devrait-il tous les 1? Si vous ou la valeur 1 (qui est 000000..0001) vous définissez les bits qui ne sont définies dans la valeur OUed, c'est-à-dire seulement 1 bit le moins significatif

Quelle que soit la valeur de votre adresse GESTIC_I2C_ADDR, votre résultat est xyzxyz1.

Il n'y a aucune raison pour que tous les autres bits soient également affectés.


Ce que je ne comprends pas, est de savoir comment cela fonctionne si-condition. Est-ce vrai lorsque tous les bits des nombres binaires 8 bits sont mis à 1?

Eh bien, mathématiquement spaking: Oui. ;) Mais pas "SI et UNIQUEMENT SI" tous les 5 bits sont réglés. Cela est également vrai si un seul des bits est défini. Pour autant que je sache, l'argument est l'opération ET sur le registre 8 bits et le nombre binaire 0001 1111 (0x1F).Si vous comprenez cela, et que vous comprenez le mot «bitwise», tout devrait être clair.

Je me demande comment vous arrivez à la question ci-dessus si vous l'avez déjà fait pour comprendre cette signification.

+0

« Non, pourquoi devrait-il être tous les 1? Si vous ou la valeur 1 (qui est 000000..0001) vous définissez les bits seulement qui sont définies dans la valeur ORed, c'est-à-dire seulement 1 bit le moins significatif. " Parce que je suis stupide et pensé 1 être tous ceux et ainsi chaque bit obtient ORED avec 1. Merci beaucoup pour votre aide !!! – user3554329

+0

Ne mélangez pas "inexpérimenté mais désireux d'apprendre" et "être stupide". Même pour une mauvaise hypothèse, il peut y avoir une raison plausible. – Gerhardh