Een heel domme vraag over C, 3 draads seriële interface

G

glenjoy

Guest
Hoi,

Ik heb deze code en me af of dit echt werkt om een 8-bits MSB eerste gegevens.Please post comments:

unsigned char read_0831 () (

unsigned char bits;

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

terugkeer bits;
)

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.Is de inhoud van de char-bits 1000 000 of 0000 0001 als d_out is gelijk aan een.

2.Is deze code juist?want ik ben verward met de draai naar links als zij zal in adc_data de juiste plaatsing van de bits van de ADC.

Het spijt me om te vragen, maar ik ben een beginner in C, ik ben gewend in assemblage programmering.

Bedankt.

 
Salam,

Citaat:

1.
Is de inhoud van de char-bits 1000 000 of 0000 0001 als d_out is gelijk aan een.
 
Kan iemand me uitleggen wat er zal gebeuren in dit stukje 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, de code ziet er gebroken.
Voor elke ingang beetje, wil je naar links de accu en vervolgens plaatst u de ingang beetje in accu bit 0.Probeer dit te vervangen:
adc_data = adc_data | read_0831 () <<1;
met dit:
adc_data = (adc_data <<1) | read_0831 ();

Om dat te werken, read_0831 () moet terugkeren ofwel 0 of 1.

Voor alle duidelijkheid, het
is een goed idee om extra haakjes naar C uitdrukkingen waarbij verschuivingen en logische operatoren.Dat helpt u ook voorkomen dat het maken van bugs, want C's voorrang is soms verrassend.Als antwoord op uw tweede vraag betreft, deze verklaring:adc_data = adc_data | read_0831 () <<1;gelijkwaardig is aanadc_data = adc_data | (read_0831 () <<1);die blijft om uw input beetje in accu bits 1.
Niet wat je wilt.Zoals je leert C, zult u veel vragen.U zult willen op deze site:
http://www.eskimo.com/ ~ scs / C-faq / top.html

By the way, markeer uw broncode en klik op de "Code" knop zodat we kunnen zien uw inspringen, zoals Sphinx deed.

 
terwijl het goed is voor het leren van doeleinden, maar voor de tijd kritische operaties zoals deze vergadering is een betere keuze.

 
Hoi,

Bedankt voor de hulp die ik had gecorrigeerd de code:

Code:

# include "C: \ broncode \ Website \ 0831_lm35 \ 0831_lm35.h"# beetje d_out = 0x05.2

# beetje clk = 0x05.3

# beetje csel = 0x05.4unsigned char adc_value;

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

bit = d_out;

clk = 1;terugkeer bits;

)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])

terugkeer adc_data;

csel = 1;)
 
Gelukkig het werkt.Succes leren C.

Dat
is makkelijker te lezen.

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Lachten" border="0" />Lijkt erop dat de "kleur" tag werkt niet in een code tag.

Bluechem, assembler is een betere keuze alleen als de C-compiler heeft een slechte Optimizer.

 
deze dagen compilers zijn zeer efficiënt, maar iedere taal heeft een doel!C is zeer convinient maar nooit kunnen verslaan assemblage in snelheid niet uit hoe goed de compiler is.

 
C kan verslaan assemblage in snelheid.

Snelheid met verwijzing naar het debuggen van code en een wijziging van de microcontroller platform.

Maar natuurlijk, C niet kan verslaan assemblage in snelheid in uitvoering.

Maar deze dagen, microcntrollers krijgt sneller en geheugen grootte gaat groot en mensen willen hun projecten te doen snel.

Ik denk dat C van toepassing is, heb ik een vergadering gebruiker ook, maar door de tijd vraag in ontwikkeling, ben ik nu probeer te kijken naar C.

 
Ik geef toe!Een deskundige assembleertaal programmeur kan schrijven gelijk of sneller dan een code optimaliseren compiler.Maar ik bedoel echt * deskundige *.Veel moderne processoren hebben meerdere executie-eenheden en fancy geheugen overdracht pijpleidingen die zeer moeilijk te optimaliseren met de hand.Als je dat in assembler, je moet beginnen wanneer een nieuwe versie van de CPU komt.

Ok, dat meestal niet gebeurt tot en met 8-bits micros.In kritieke strakke loops, ik controleren wat de compiler gegenereerd, en als ik het niet leuk vinden, ik viool met de C (hoopte te krijgen geluk), of schrijf ik de lus in assembler.

 
echo47 schreef:

In kritieke strakke loops, ik controleren wat de compiler gegenereerd, en als ik het niet leuk vinden, ik viool met de C (hoopte te krijgen geluk), of schrijf ik de lus in assembler.
 

Welcome to EDABoard.com

Sponsor

Back
Top