Funktion von Bascom auf C portiert

Gast #1613927
Hallo zusammen steige zur zeit von Bascom auf den gcc compilier um. Da 
ich den SRF02 (Ultraschall Sensor) ansprechen möchte, es aber nur Code 
für Bascom gibt habe ich versucht die funktion in C zu schreiben. Und 
wollte euch fragen ob das so richtig ist. Als software uart wurde das 
hier 
http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=133&item_type=project 
benutzt.

Hier das portierte:
1
int messung( char ID) {
2
    unsigned char highbyte, lowbyte;
3

4
    // ID + Befehl zum messen senden
5
    sputchar( ID );
6
    sputchar( 84 );
7
    
8
    // Antwort
9
    while( !kbhit() );
10
    highbyte = sgetchar();
11
    while( !kbhit() );
12
    lowbyte = sgetchar();
13

14
    return ( (highbyte << 8) | lowbyte );
15
}

Hier den Bascom code:
1
Function Srf02_entfernung(byval Slaveid As Byte) As Integer
2

3
Local Lob As Byte
4

5
Local Hib As Byte
6

7

8

9
   Print #1 , Chr(slaveid) ; Chr(84);                       'Messvorgang in cm starten
10

11
   Inputbin #2 , Hib , Lob                                  'Warte auf Ergebnis
12

13
   Srf02_entfernung = Makeint(lob , Hib)
14

15
End Function

Grüße

drakesoft
Gast
@drakesoft:

Ohne dir jetzt eine konkrete Hilfe zum Beispiel zu geben:

Im Grunde mußt du Basic und C beherrschen. Funktionen sollten sich auch 
separat zerlegen und portieren lassen.

Ich selbst, portiere gerade einen Assemblercode nach C. Das ist nicht 
weniger einfach. Manchmal komme ich nicht umhin, für eine Funktion den 
Umweg über Flußdiagramme oder Struktogramme zu nehmen. Also, aus der 
Assemblerfunktion, ein Struktogramm erstellen, und daraus dann den 
C-Code.

Natürlich, ist das Arbeit im Detail.
Das Bascom-Beispiel sieht nach Hardware-UART aus, oder? Wie groß ist 
Dein Empfangspuffer? Warum wartet Die C-Funktion auf eine Taste (kbhit?)

Naja Du wirst es wissen.

also sende erstmal an den PC/Terminalprogramm, guck, daß dann die 
gleichen 2 Zeichen rauskommen mit beiden Funktionen. Wenn das 
funktioniert, sende 2 Zeichen mit dem PC(Tastatur) zurück und guck ob 
sie richtig ankommen. Du wirst so sicher viele Deiner Probleme finden.
Gast
Ich dachte kbhit läuft so lange bis ein zeichen gesendet wird und ich es 
dann mit sgetchar auslesen kann.
Und in Bascom ist es auch ein Soft UART und Inputbin wartet auch so 
lange bis ein Zeichen gesendet wird.
drakesoft schrieb:
> Ich dachte kbhit läuft so lange bis ein zeichen gesendet wird und ich es
> dann mit sgetchar auslesen kann.

kbhit macht das, was du in die Funktion hineinprogrammierst.
Genauso wie sgetchar

Beide Funktionen gibt es nicht in C. Du musst sie selber programmieren.


Vielleicht doch erst mal ins avr-gcc-Tutorial schauen und nachlesen, wie 
man mit er UART umgeht?
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#UART

Edit: Kann natürlich auch sein, dass diese Funktionen bereits jemand in 
dem AVR-Freaks Paket für dich implementiert hat. Aber ich melde mich da 
jetzt nicht an, um mir das von dir verlinkte Paket anzusehen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.