PIC MPLAB C30 Fråga - Binär omvandling

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
mcdanne82
EF Sponsor
Inlägg: 213
Blev medlem: 22 november 2004, 19:51:31

PIC MPLAB C30 Fråga - Binär omvandling

Inlägg av mcdanne82 »

Hej
Jag har kört fast och googlandet har inte gett något konkret.
Jag har precis börjat överge Basic för att börja med C.

Jag har ett tal, som just nu är en byte men kan behöva bli en Integer och skulle behöva omvandla detta till bitar för att kunna skicka olika långa pulser beroende på om biten är 1 eller 0

Så har jag tex 4 (00000100)
så vill jag anropa:

Kod: Markera allt

funcLow();  //0  128
funcLow();  //0  64
funcLow();  //0  32
funcLow();  //0  16
funcLow();  //0  8
funcHigh();  //1  4
funcLow();  //0  2
funcLow();  //0  1
Jag skulle behöva kunna variera antalet "ut bitar" som i fallet ovan 8bitar, ibland kan det vara ett lägre tal tex 4bitar



Det borde väl finnas något fint kommando så man skulle kunna använda tex:

Kod: Markera allt

BYTE bValue;

if (bValue.bit8==1)
    funcHigh();
else
    funcLow();

if (bValue.bit7==1)
    funcHigh();
else
    funcLow();

if (bValue.bit6==1)
    funcHigh();
else
    funcLow();

osv....
Man kan ju kanske skriva en funktion själv som drar av -16 och kollar om den är positiv -8 kollar om den är positiv -4 osv, men det känns inte som enklaste vägen.

Eller om man kan göra denna omvandling på ett annat smartare sätt.
Användarvisningsbild
stekern
Inlägg: 453
Blev medlem: 2 november 2008, 08:24:18
Ort: Esbo, Finland

Re: PIC MPLAB C30 Fråga - Binär omvandling

Inlägg av stekern »

Det du vill göra är att skifta ut bitarna, ungefär såhär t.ex..

Kod: Markera allt

  for(int i=0;i<8;i++) {
    if(bValue & 0x80)
      funcHigh();
    else
      funcLow();
    bValue <<= 1;
  }
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC MPLAB C30 Fråga - Binär omvandling

Inlägg av sodjan »

Det vanligaste/enklaste är att shifta variablen och kolla
någon lämplig bit. I ASM hade det sannolikt varit C-flaggan,
men om det är enkelt att göra i C (alltså inte samma "C" som
ovan) vet jag inte...
mcdanne82
EF Sponsor
Inlägg: 213
Blev medlem: 22 november 2004, 19:51:31

Re: PIC MPLAB C30 Fråga - Binär omvandling

Inlägg av mcdanne82 »

Tackar!!
Verkar funka precis som önskat, fick dock bara deklarera i före for loopen då kompilatorn klagade.
Efter denna lilla justering funkar de fint! :P

Kod: Markera allt

int i;
for(i=0;i<8;i++) 
Skriv svar