C kode til aduc832

Oct 25, 2003 3 Replies

Hey



jeg sidder og leger lidt med noget c kode, og der går total ged i det... assambler er keil...



void readadc(void) { char adh,adl,chid; unsigned int regn; if(ADCI==1) { adl = ADCDATAL; adh = ADCDATAH; chid = (adh & 0xf0);



adh = adh & 0x0f;



regn = adh * 0xf0;



printf ("\t ADC %03d:%03d %1d \n",(int)adh,(int)adl,(int)chid/16); ADCI = 0; } }



Problemet ligger i jeg gerne vil have lavet adl og adh til en variabel derfor har jeg lagt dem i 2 char (8bit), som jeg så gerne vil have over i en integer... jeg regnede med at gøre det ved at ligge den øverste del over i (bemærk den adh er kun den nederste nibbel jeg bruger resten er and'et væk) regn og vil gange det med 16, for at flytte det 4 bit opaf (mener det skulle virke) og derefter or adl over i den nederste del af reg, men det er ikke lavet endnu når jeg laver den linie regn = adh * 16, så flipper mit board helt ud....



hvad går der lige galt siden jeg ikke kan gøre det ?


nogle der har en smartere måde.. er lidt grøn i d et c noget



Kasper


Jeg er ikke helt med på problemet, men jeg har efterhånden skrevet en del C kode til Microchip's PIC kontrolere.

Og til HiTech's PIC-C bruger jeg følgende macroer til at flytte data mellem 8- og 16 bits variable:

#define LO(x) *(((uchar*)(&(x)))+0) #define HI(x) *(((uchar*)(&(x)))+1)

Og disse "lidt kryptiske pointer ting" giver mulighed for:

LO(regn) = ADCDATAL; HI(regn) = ADCDATAH;

Men også den anden vej:

adl = LO(regn); adh = HI(regn);

Om det her så hjælper med en løsning på opgaven, og om det virker i alle kompilere ved jeg ikke.

Med venlig hilsen, Ove Kjeldgaard, nospam AT privat DOT dk Natur og Friluftsliv:

hej

i linien adh * 0xF0, prøv lige at konvertere 0xF0 til decimal, jeg mener ikke det 16.

I øvrigt går det meget hurtigere hvis du laver bit-shift 4 til venstre.

Mvh Jens

"Repzak" skrev i en meddelelse news:3f9ac0ed$0$45318$ snipped-for-privacy@dread11.news.tele.dk...

en

den

vil

endnu

"Jens Gydesen" skrev i en meddelelse news:3f9acbd0$0$45345$ snipped-for-privacy@dread11.news.tele.dk...

hehe det er sandt, havde det dog i decimal i starten.... men tror jeg har fundet ud af det er noget timing der går galt for mig.... noget med nogle løkker der går i selvsving...

ja, men kunne ikke lige huske hvordan man gjorde det i c, er ret grøn i det... desværre... men tak for svaret

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required