PORTB |= (1<<SCK) qu'est-ce que sa fait??????

Migg3006 Messages postés 2 Statut Membre -  
 Utilisateur anonyme -
Bonjour,

J'aimerai savoir qu'Est-ce qu'exécute la ligne de code en C;

PORTB |= (1<<SCK); //où SCK = RB1

Et comment elle est exécuter par un PIC 16f877A.

Pour vous mettre un peu dans le contexte, je tente de programmer un communication SPI avec un MAX7456 et je me base un peu sur un autre code en C pour écrire le mein, mais je tombe sur cette ligne de code que je n'arrive pas a comprendre.

3 réponses

Utilisateur anonyme
 
Bonjour

SCK représente un nombre le numéro d'un bit. il s'agit probablement de 1 d'après sa définition RB1, il faudrait vérifier en regardant la définition de RB1 lui-même.

<< est l'opérateur de décalage à gauche
1<<SCK représente donc un 1 décalé SCK bits à gauche. Soit ici 10 (en binaire), ou, sur un octet 0000010

PORTB != qqchose; signifie PORTB = PORTB || qqchose
Donc ici
PORTB = PORTB || 00000010;

On a mis à 1 le bit SCK du port B

C'est une façon d'écrire très classique.
0
Migg3006 Messages postés 2 Statut Membre
 
Ha merci bien,

Alors si ce n'est que simplement dans le but de mette SCK du port B a 1, pour quoi on écrit simplement pas SCK = 1;?
0
Utilisateur anonyme
 
Certains compilateurs permettent de définir des champs bits qui permettent d'écrire directement ce genre de chose. Mais dans ce cas, il faudrait modifier la définition de SCK. Car actuellement, c'est une constante (qui vaut 1), et non pas une variable. Donc tu ne peux pas écrire SCK=qqchose.
Et si tu tu t'interrogeais sur le "|=" au lieu d'un simple "=" dans PORTB |= 1 << SCK, c'est parce que si tu fais un simple =, tu mets bien le bit qui t'intéresse à 1, mais tu mets tous les autres à 0. En faisant un ou ( |= ) tu forces à 1 celui qui l'intéresse et tu ne modifies pas les autres.
0