C kode til aduc832

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Danish to

Threaded View
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



Re: C kode til aduc832

Quoted text here. Click to load it

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: <http://hiker.dk

Re: C kode til aduc832
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


Quoted text here. Click to load it
en
den
vil
endnu



Re: C kode til aduc832

Quoted text here. Click to load it

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...

Quoted text here. Click to load it

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


Quoted text here. Click to load it



Site Timeline