Une question tout à fait stupide sur C, une interface série 3 fils

G

glenjoy

Guest
Salut,

J'ai vu ce code, et demande si
c'est vraiment de travail pour obtenir un premier MSB 8 bits de données.S'il vous plaît écrire des commentaires:

unsigned char read_0831 () (

unsigned char bit;

clk = 0;
bit = d_out;
clk = 1;

return bit;
)

unsigned int start_read () (

unsigned char i;
unsigned int adc_data;

adc_data = 0;
CSEL = 0;

for (i = 0; i <8; i ) (

adc_data = adc_data | read_0831 () <<1;
CSEL = 1;

)

)

1.Est-ce que le contenu de la char 1000 000 bit ou 0000 0001 si d_out est égal à un.

2.Est-ce code?parce que je suis confondu avec le tourner à gauche si elle va mettre en adc_data le bon arrangement de bits de l'ADC.

Je suis désolé de poser cette question, mais je suis un débutant en C, je suis habitué de programmation en assembleur.

Merci.

 
Salam,

Citation:

1.
Est-ce que le contenu de la char 1000 000 bit ou 0000 0001 si d_out est égal à un.
 
Est ce que
quelqu'un peut
m'expliquer ce qui se passera dans ce morceau de code?

unsigned int start_read () (

unsigned char i;
unsigned int adc_data;

adc_data = 0;
CSEL = 0;

for (i = 0; i <8; i ) (

adc_data = adc_data | read_0831 () <<1;
CSEL = 1;

)

)

 
glenjoy, le code ressemble cassé.
Pour chaque bit d'entrée, vous voulez passer à gauche et l'accumulateur, puis insérez l'entrée dans l'accumulateur bit bit 0.Essayez de remplacer ceci:
adc_data = adc_data | read_0831 () <<1;
avec ceci:
adc_data = (adc_data <<1) | read_0831 ();

Pour que cela fonctionne, read_0831 () doit renvoyer 0 ou 1.

Par souci de clarté, c'est une bonne idée d'ajouter des parenthèses C expressions impliquant des équipes et des opérateurs logiques.Cela vous aide également à éviter les bugs, parce que C
la priorité est parfois surprenant.Pour répondre à votre deuxième question, cette déclaration:adc_data = adc_data | read_0831 () <<1;est équivalent àadc_data = adc_data | (read_0831 () <<1);qui tient en peu de votre entrée dans l'accumulateur bit 1.
Non ce que vous voulez.Comme vous l'apprendre le C, vous aurez beaucoup de questions.Vous aimez ce site:
http://www.eskimo.com/ ~ scs / C-faq / top.html

Par ailleurs, mettre votre code source et cliquez sur le "Code" bouton pour que nous puissions voir votre retrait, comme le Sphinx fait.

 
alors
qu'il est bien à des fins d'apprentissage, mais aussi pour le temps des opérations critiques telles que cette assemblée est un meilleur choix.

 
Salut,

Merci pour l'aide
j'avais corrigé le code:

Code:

# include "C: \ Sourcecode \ Site \ 0831_lm35 \ 0831_lm35.h"# d_out bit = 0x05.2

# bit clk = 0x05.3

# bit CSEL = 0x05.4unsigned char adc_value;

unsigned char read_0831 () (unsigned char bit;clk = 0;

bit = d_out;

clk = 1;return bit;

)unsigned char start_read () (unsigned char i;

unsigned char adc_data;
adc_data = 0x00;

CSEL = 0;[color = blue] for (i = 0; i <10; i ) (adc_data = (adc_data <<1) | read_0831 ();[/ color])

retour adc_data;

CSEL = 1;)
 
Bon ça fonctionne.Bonne chance apprentissage C.

C'est plus facile à lire.

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Sourire" border="0" />On dirait que la "couleur" balise ne fonctionne pas au sein d'un "code" tag.

Bluechem, l'assembleur est un meilleur choix que si le compilateur C a une mauvaise optimiseur.

 
ces jours-ci les compilateurs sont très efficaces, mais chaque langue a une fin!C est très Convinient mais ne peut battre l'assemblage de la vitesse, peu importe la façon dont le compilateur est bonne.

 
C peut battre l'assemblage de la vitesse.

En référence à la vitesse de débogage du code et du changement de plate-forme de microcontrôleurs.

Mais bien sûr, C ne peut pas battre l'assemblage de la vitesse d'exécution.

Mais ces jours-ci, microcntrollers est plus rapide et la taille de la mémoire est grand et les gens veulent que leurs projets pour se faire rapidement.

Je pense que C le cas,
j'ai été un utilisateur de montage aussi, mais, faute de temps, la demande en matière de développement, je suis en train d'essayer de regarder C.

 
Je reconnais!Un langage d'assemblage expert programmeur peut écrire égale ou plus rapide que le code d'un compilateur optimisant.Mais je signifie vraiment expert * *.De nombreux processeurs modernes ont de multiples unités d'exécution de fantaisie et de la mémoire de transfert des pipelines qui sont très difficiles à optimiser à la main.Si vous le faites en assembleur, vous devrez recommencer quand une nouvelle version de la CPU sort.

Ok, qui habituellement ne se fait pas de micros 8-bits.Dans des boucles serrées,
j'ai inspecter ce que le compilateur a généré, et si je ne l'aime pas, je jouer avec le C (l'espoir d'obtenir la chance), ou écrire, je la boucle en assembleur.

 
echo47 a écrit:

Dans des boucles serrées, j'ai inspecter ce que le compilateur a généré, et si je ne l'aime pas, je jouer avec le C (l'espoir d'obtenir la chance), ou écrire, je la boucle en assembleur.
 

Welcome to EDABoard.com

Sponsor

Back
Top