/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
ADUC832 uC i C
Fra : Repzak


Dato : 25-10-03 19:42

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





 
 
Dennis (25-10-2003)
Kommentar
Fra : Dennis


Dato : 25-10-03 20:21

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

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

Du kan evt. bit shifte det 4 pladser til venstre istedet:


regn = adh <<4;

Dennis

Ivar (26-10-2003)
Kommentar
Fra : Ivar


Dato : 26-10-03 15:53


Repzak skrev:

> regn = adh * 0xf0;

Hvorfor ganger du med 240 her?


Jeg ville lave noget ca. som dette:

void readadc(void)
{
unsigned char adh,adl,chid;
unsigned int adcval;
if(ADCI==1)
{
adl = ADCDATAL;
adh = ADCDATAH;
adcval = (adh & 0x0f) * 256 + adl;
ADCI = 0;
}
}

Du bør anvende unsigned char når det er unsiged. Det kan spare
dig for nogle lumske problemer og spare processoren for nogle
beregninger, hvis du skal lave sammenligninger. ADUC832 har
ikke specielle instruktioner til signed sammenligning.



Ivar



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste