2010-11-19 5 views
0

Ich habe den folgenden Code, Umwandlung Dezember binär (als int gespeichert) und es läuft ganz gut in C :: B:Grund Binärkonversion nicht auf PIC

for(i=0;i<8;i++) 
    { 
    carry = start_value%2; 
    tab[bla] = carry; 
    bla++; 
    start_value = start_value/2; 
    } 

for(i=bla; i>0; i--) 
     { 
     binary = binary + tab[i]*pow(10,i); 
     } 

Aber wenn ich versuche, das gleiche auf einem PIC18F4550 mit MikroC nicht tut es einfach! Ich habe 'pow' eingefügt und respektiere die Deklarationen für die Variablen, die ich verwende. Egal was, die Ausgabe ist falsch (-62053 zum Beispiel statt 110110).

Dank für einen Blick hinein :) Einen schönen Tag

+0

Könnten Sie ein Beispiel übersetzbar mit Variablendeklarationen liefern und zeigen, wie die Ausgabe erfolgt, bitte? – philant

+0

Unterschiedliche Größe von (int) auf PIC? –

Antwort

0

Sie sollten die zweite Schleife von i = bla - 1 starten, da es als dort Binärziffern ein weiteres Mal erhöht wurde. es könnte auch sein, dass tab[] nicht auf 0

initialisiert und die zweite Schleife wird das erste Register Element umfassen: Registerkarte [0]:

for(i = bla - 1; i >= 0; i--) 
{ 
    binary += tab[i] * pow(10, i); 
} 
0

Überprüfen Sie die Größe eines int Typ (sizeof(int)) für diese PIC-Architektur. Wenn beispielsweise ein 16-Bit-int ist, ist der maximale Wert, den er halten kann, 65535 (für ein unsigned int) oder -32.768-32.767 (für ein int). Wahrscheinlich ist das Problem, dass der Wert, den Sie berechnen, zu groß für den Typ ist, den Sie verwenden.

0

Um einen Dezimalwert von einem Array von Binärziffern zu erhalten, müssen Sie sie mit den entsprechenden Potenzen von 2, nicht von 10 multiplizieren. Unter der Annahme, dass pow() das ist, was es zu sein scheint, pow (Basis, Exponent), Sie müssen stattdessen pow (2, i) verwenden.

0

jmpcm: ein int 16 Bits (2 Bytes) auf meinem PIC18F. Aber das Problem ist, dass der Code auf meinem Computer, aber nicht auf dem PIC läuft, während Variablen, die ich verwende, die gleiche Größe haben.

philippe: Ich habe ein Gefühl, das man über den Tisch rechts möglicherweise nicht gelöscht werden! Kann es aber noch nicht testen.

Jeanne Pindar: Nein. Ich speichere ein Array von Bits, mit denen ich in einem int interagieren muss (muss RAM-Speicher sparen), so arbeiten wir noch Base10 bei der endgültigen Speicherung.

All: konnte ich meine Art und Weise mit einer Struktur aus ihm heraus, für die ich alle Bits definiert:

struct { 
unsigned int bit0: 1; 
unsigned int bit1: 1; 
... 

So kann ich speichern 1 Bit in einer Gruppe von 8 Bits und behandeln es als int in Hauptberechnungen und greifen Sie darauf in einer Nx1-Matrix zu. dennoch

Vielen Dank für Ihre Hilfe!

+0

Dies ist keine Antwort auf Ihre Frage. Dies sollte als einzelner Kommentar zu jeder Antwort veröffentlicht worden sein. Sie können Ihre Frage auch bearbeiten. Siehe die FAQ: http://stackoverflow.com/faq#howtoask – philant