mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C-Code HP03 Veständnissproblem


Autor: Humix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Habe folgenden C-Code für den Drucksensor HP03 gefunden und möchte
ihn in Basic(Bascom) übersetzen.

http://www.hoperf.com/pdf/hp03_code.pdf

Da meine C-Kentnisse gegen Null gehen verstehe  ich die folgenden 
Funktion nicht.

   //function: calculate power for 2
   //*************************************
   long int Get2_x(unsigned char i)
   {
            uiData=2;
            i=i-1;
            while(i)
                {
                   uiData<<=1;
                      i--;
                    }
    return uiData;
   }
   //****************************************
Kann mir das jemand in Basic übersetzen oder den Inhalt erklären.
Vielen Danck Humix

Autor: Hans Josef (hjm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Humix,

da hast Du uns auch was unterschlagen, die Variable uiData muß noch 
deklariert sein als long int.

Aber ansosten macht dies Routine nichts anders dir den Wert als 2 hoch 
Var zurückzugeben. Will heißen:

Get2_x(4) ist 16,
Get2_x(1) ist 2,

Get2_x(0) wird falsch berechnet, sollte nämlich 1 sein.

In Basic sähe es so aus:

Im Hauptprogramm
var = 1              ' ist der Exponent
Gosub Get2_x         ' Ergebnis steht in nachher in der Variablen erg

...
...

'Unterprogramm
Get2_x:
  erg = 1
  i = 0
  while i < var
   erg = erg * 2
   i=i+1
  wend
return

Hoffe mein Basic ist nicht eingerostet.

Grüße
Hans-Josef

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Humix wrote:
> Hallo Habe folgenden C-Code für den Drucksensor HP03 gefunden und möchte
> ihn in Basic(Bascom) übersetzen.
>
> http://www.hoperf.com/pdf/hp03_code.pdf
>
> Da meine C-Kentnisse gegen Null gehen

Nicht nur die. Was denkst du was CodeSAMMLUNG bedeuten könnte?

Thread verschoben

> verstehe  ich die folgenden
> Funktion nicht.
>
>    //function: calculate power for 2

Hmm. Was könnte wohl 'power for 2' heissen?
Eventuell das Berechnen einer 2-er Potenz. Du weist
schon: 2 hoch 2 ist 4, 2 hoch 3 ist 8, 2 hoch 4 ist 16 etc.

>    //*************************************
>    long int Get2_x(unsigned char i)
>    {
>             uiData=2;
>             i=i-1;
>             while(i)
>                 {
>                    uiData<<=1;
>                       i--;
>                     }
>     return uiData;
>    }

Jep. Das ist genau das was die Funktion macht. Sie
berechnet 2 zur i-ten Potenz, wobei i in die Funktion
hineingeht.
NB: Hat die Funktion einen Fehler. 2 hoch 0 kann sie nicht
berechnen.
NB2: Dem original Autor sollte man einen Ausdruck der
Funktion so lange um die Ohren schlagen bis er 100 mal
geschrieben hat: Ich soll keine globalen Variablen benutzen
solange es nicht unbedingt notwendig ist.

Autor: Hans Josef (hjm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Karl Heinz

ätsch war schneller. :-)))

Karl heinz Buchegger wrote:
> NB: Hat die Funktion einen Fehler. 2 hoch 0 kann sie nicht
> berechnen.
> NB2: Dem original Autor sollte man einen Ausdruck der
> Funktion so lange um die Ohren schlagen bis er 100 mal
> geschrieben hat: Ich soll keine globalen Variablen benutzen
> solange es nicht unbedingt notwendig ist.


Ne die Variable ist nicht Global, wie oben beschrieben fehlt die 
Deklaration.

Im Orginal-Source stehts richtig drin.



Grüße
Hans-Josef

Autor: Humix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Hilfe,werd mich gleich an die Arbeit machen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Humix wrote:

>    //function: calculate power for 2
>    //*************************************
>    long int Get2_x(unsigned char i)
>    {
>             uiData=2;
>             i=i-1;
>             while(i)
>                 {
>                    uiData<<=1;
>                       i--;
>                     }
>     return uiData;
>    }

Das kann aber kein C-Programmierer geschrieben haben.

Ein C-Programmierer würde es (ohne den Fehler bei 0) so schreiben:
#define Get2_x(x) (1L<<x)


Peter

Autor: Humix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr interessant ist das Datum

Titl                          HP03 simple example based on 8051 C
Current version:              v1.0
Function:                     Calcul
Processor                     STC12LE5410AD(8051 core)
Clock:                        11.0592MHz Crystal
Author:                       Merrick
Company:                      Hope mi
Contact:                      +86-0755-86106557
E-MAIL:                       hopefsk@hoperf.com
Date:                         2007-10-24

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.