2 votes

Comment puis-je stocker les données de 2 registres de 8 bits dans une variable de 16 bits ?

Je regarde prendre les données de 10 bits de ma conversion ADC et les stocker dans 1 donnée entière de 16 bits qui ressemble à 0x03 ADRESH 0xFF ADRESL. Ce que je fais actuellement est

    data = 0x03 & ADRESH;
    data = data << 8;
    data = data & 0x03FF & ADRESL;

Est-ce que cela fonctionnera comme je pense que cela devrait ou est-ce que j'oublie quelque chose? Merci pour l'aide

6voto

Thomas Ruiz Points 3044

Pourquoi n'utilisez-vous pas l'opérateur | ? short data = ((0x03 & ADRESH) << 8) | ADRESL; devrait fonctionner correctement.

1voto

chux Points 13185

Votre code ne fonctionnera pas

data = data & 0x03FF & ADRESL;

Devrait être plus proche de

data = data | ADRESL;
ou 
data |= ADRESL;

C'est bien que vous ayez effectué le décalage de 8 octets dans votre data sur 16 bits.

Note : le & 0x03FF n'est pas nécessaire.
Note : Assurez-vous que le type de données de data est d'au moins 16 bits.
Note : Si vous continuez à avoir des problèmes, assurez-vous que l'alignement de 10 bits est tel que vous pensez. De nombreux modules A/D permettent que les données de 10 bits soient sur les 10 bits supérieurs plutôt que les inférieurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X