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