Go Down

Topic: 0x01<<PINB0 ? A quoi ça correspond ? (Read 719 times) previous topic - next topic

legolas95

Bonjour ,

Dans le bout de code suivant l'on declare les PINs de l'arduino , mais j'aimerais avoir plus détails sur le fonctionnement de ce code.
A quoi correspond "0x01" et PINB0 , PIND4 , PINC3 etc...qu'elle sont ces PINs ? pourquoi les déclarer de cette façon ?

Merci

Code: [Select]

#define Fil_A_A1 (0x01<<PINB0)
#define Fil_A_A2 (0x01<<PINB1)
#define Fil_A_B1 (0x01<<PINB2)
#define Fil_A_B2 (0x01<<PINB3)

#define Fil_B_A1 (0x01<<PIND4)
#define Fil_B_A2 (0x01<<PIND5)
#define Fil_B_B1 (0x01<<PIND6)
#define Fil_B_B2 (0x01<<PIND7)

#define Fil_C_A1 (0x01<<PINC0)
#define Fil_C_A2 (0x01<<PINC1)
#define Fil_C_B1 (0x01<<PINC2)
#define Fil_C_B2 (0x01<<PINC3)
DiyFr
Passionné de nouvelles technologies et constructions en tout genre, ce blog m'offre la possibilité de mett

Christian_R

C'est du bitwise : http://skyduino.wordpress.com/2013/04/05/tuto-le-bitwise-pour-les-nuls/

0x01  vaut en binaire  0000 0001
L'opérateur >> (Shift right) décale les bits vers la droite
par exemple  0110 0101>> 4 retourne 0000 0110

L'oppérateur << (Shift left) décale les bits vers la gauche
par exemple  0110 0101 << 4 retourne 0101 0000

#define Fil_A_B1    (0x01<<PINB2)
avec par exemple  PINB2 = 4

0x01 << 4 vaut 0000 0001 << 4 et retourne 0001 0000

Sans le reste du code c'est difficile de savoir à quoi ça va servir.
Christian

B@tto

PINB0 etc .... Ce sont des masques pour manipuler les registres (enfin pas sur à 100% vu que je code pas en dur chez Atmel)

skywodd

Bonjour ,


Dans le bout de code suivant l'on declare les PINs de l'arduino , mais j'aimerais avoir plus détails sur le fonctionnement de ce code.
A quoi correspond "0x01" et PINB0 , PIND4 , PINC3 etc...qu'elle sont ces PINs ? pourquoi les déclarer de cette façon ?

0x01 = valeur 1 en notation hexadécimal

PINB0, PIND4 , PINC3, ... = équivaut à des numéro de broche et de port du microcontrôleur
PINB0 = 0
PINB1 = 1
PINB2 = 2
PINB3 = 4
...
C'est juste des mémo pour faire de la manipulation de port direct.
(personnellement je trouve ces mémo inutiles mais bon ...)

Dans tout les cas je ne vois pas pourquoi tu part dans l'exploration de code d'un niveau déjà relativement élevé (et bas niveau) sans connaitre les bases tel que l'hexadécimal ;)

Edit :
Grosse remarque à noter : ceci n'est pas vraiment du domaine de l'Arduino mais du domaine de la programmation AVR "de base".
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

68tjs

Quote
ceci n'est pas vraiment du domaine de l'Arduino mais du domaine de la programmation AVR "de base"

C'est pas interdit ?  :smiley-mr-green: :smiley-mr-green:

skywodd

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Christian_R


tu part dans l'exploration de code d'un niveau déjà relativement élevé (et bas niveau)

Il faut avoir un haut niveau pour programmer en bas niveau.
c'est de la logique d'informaticien :smiley-mr-green:
Christian

skywodd



tu part dans l'exploration de code d'un niveau déjà relativement élevé (et bas niveau)

Il faut avoir un haut niveau pour programmer en bas niveau.
c'est de la logique d'informaticien :smiley-mr-green:

La vie est une perpétuelle contradiction, et comme l'informatique c'est la vie ... CQFD 8)
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Go Up