Funktion von Bascom auf C portiert

Gast #1613927
Lesenswert?

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 #1613960
Lesenswert?

@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.
#1613974
Lesenswert?

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 #1614195
Lesenswert?

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.
#1614196
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren