C kode til aduc832

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

Reply to
Repzak
Loading thread data ...

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:
Reply to
Ove Kjeldgaard

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

Reply to
Jens Gydesen

"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

Reply to
Repzak

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.