martin66119
30.12.2012, 12:14
Hallo an alle hier im Forum!
Bevor ich meine Frage stelle wünsche ich euch allen einen guten Rutsch und alles Gute für das kommende Jahr.
Vor einiger Zeit hatte ich mir Bascom zugelegt und Dank der Hilfe hier ein kleines Programm hinbekommen, um mehrere DS18B20 auszulesen. Nun habe ich ein wenig gelesen und die Info gefunden, dass bei gleichem Programm der hex-Code aus C deutlich kleiner ist im Vergleich zu Bascom. Auch die Geschwindigkeit wäre besser. Was mich aber am meisten interessiert ist die Codelänge. Deshalb eine Frage.
Kann mir jemand helfen wie man folgenden Code von Bascom in C überführt?
Hier der Bascomcode:
$regfile = "m168def.dat"
$crystal = 4000000 '3686400
$hwstack = 46
$swstack = 40
$framesize = 40
'**************************Funktionen LCD-Display*******************************
Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs = Portb.0 , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , E2 = Portd.7
Config Lcdbus = 4
Config Lcdmode = Port
Dim ___lcdno As Byte
___lcdno = 0
Initlcd
Cursor Off
Cls
___lcdno = 1
Initlcd
Cursor Off
Cls
'**************************Def. allgemeiner Variabeln***************************
$baud = 19200
Match_rom Alias &H55
Skip_rom Alias &HCC
Read_scratchpad Alias &HBE
Write_scratchpad Alias &H4E
Copy_scratchpad Alias &H48
Start_conversion Alias &H44
' Pin für 1wire Schnittstelle festlegen. => DS1820 am Port C.1
Config 1wire = Portc.1
Dim Ds1820id(32) As Byte
Dim Sc(9) As Byte '????
Dim T As Integer
Dim I As Byte
Dim Id As Byte
Dim T_mess As Single
Dim Spalte As Byte
'Die Adresse aller meiner DS1820 die ich vorher ausgelesen habe:
Restore Sensor_ids
For I = 1 To 32
Read Ds1820id(i)
Next I
1wreset
1wwrite Skip_rom
1wwrite Start_conversion 'Alle angeschlossenen DS18B20 zum Messen veranlassen
Waitms 500
'Ausgabe alle 0,5 Sekunden
Do
___lcdno = 0
Locate 1 , 1 : Lcd "Zeile 1"
'Locate 2 , 1 : Lcd "Zeile 2"
For Id = 1 To 25 Step 8 'ID für alle 4 DS1820 1,9,17,25
1wreset '1Wire Reseten
1wwrite &H55 'MATCHROM=>Adress.den DS1820 anhand des ROM Inhaltes
1wwrite Ds1820id(id) , 8 '8 Byte ID wird uebertragen
1wwrite &HBE 'READ SCATCHPAD => Liest alle Bytes des SP Memorys
Sc(1) = 1wread(9)
T = Sc(1)
T = Makeint(sc(1) , Sc(2)) 'komprimiert zwei Bytes in die Integervariable T
T_mess = T / 16 'Die Nachkommastelle entfernen
'Locate I , 11
Spalte = I * 6
Spalte = Spalte + 1
___lcdno = 0
'Locate 1 , 1 : Lcd " Inn Auss Kess Vorl Rück "
Locate 2 , Spalte 'Temperatur in Grad ausgeben
Lcd Fusing(t_mess , "#.#" )
Incr I
Next Id
I = 0
Spalte = 0
1wreset
1wwrite Skip_rom
1wwrite Start_conversion 'Alle angeschlossenen DS1820 zum Messen veranlassen
Waitms 2000
' Cls 'Ausgabe alle 0,5 Sekunden
Loop
End
Sensor_ids:
Data &H28 , &H25 , &H67 , &HAA , &H03 , &H00 , &H00 , &H55
Data &H28 , &HA2 , &H75 , &HAA , &H03 , &H00 , &H00 , &HC5
Data &H28 , &HA7 , &H64 , &HAA , &H03 , &H00 , &H00 , &H9F
Data &H28 , &HE6 , &H63 , &HAA , &H03 , &H00 , &H00 , &H8C
'Data &H10 , &HE8 , &HF4 , &H23 , &H01 , &H08 , &H00 , &HEF '
Danke schon einmal für die Hilfe
Martin
Bevor ich meine Frage stelle wünsche ich euch allen einen guten Rutsch und alles Gute für das kommende Jahr.
Vor einiger Zeit hatte ich mir Bascom zugelegt und Dank der Hilfe hier ein kleines Programm hinbekommen, um mehrere DS18B20 auszulesen. Nun habe ich ein wenig gelesen und die Info gefunden, dass bei gleichem Programm der hex-Code aus C deutlich kleiner ist im Vergleich zu Bascom. Auch die Geschwindigkeit wäre besser. Was mich aber am meisten interessiert ist die Codelänge. Deshalb eine Frage.
Kann mir jemand helfen wie man folgenden Code von Bascom in C überführt?
Hier der Bascomcode:
$regfile = "m168def.dat"
$crystal = 4000000 '3686400
$hwstack = 46
$swstack = 40
$framesize = 40
'**************************Funktionen LCD-Display*******************************
Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs = Portb.0 , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , E2 = Portd.7
Config Lcdbus = 4
Config Lcdmode = Port
Dim ___lcdno As Byte
___lcdno = 0
Initlcd
Cursor Off
Cls
___lcdno = 1
Initlcd
Cursor Off
Cls
'**************************Def. allgemeiner Variabeln***************************
$baud = 19200
Match_rom Alias &H55
Skip_rom Alias &HCC
Read_scratchpad Alias &HBE
Write_scratchpad Alias &H4E
Copy_scratchpad Alias &H48
Start_conversion Alias &H44
' Pin für 1wire Schnittstelle festlegen. => DS1820 am Port C.1
Config 1wire = Portc.1
Dim Ds1820id(32) As Byte
Dim Sc(9) As Byte '????
Dim T As Integer
Dim I As Byte
Dim Id As Byte
Dim T_mess As Single
Dim Spalte As Byte
'Die Adresse aller meiner DS1820 die ich vorher ausgelesen habe:
Restore Sensor_ids
For I = 1 To 32
Read Ds1820id(i)
Next I
1wreset
1wwrite Skip_rom
1wwrite Start_conversion 'Alle angeschlossenen DS18B20 zum Messen veranlassen
Waitms 500
'Ausgabe alle 0,5 Sekunden
Do
___lcdno = 0
Locate 1 , 1 : Lcd "Zeile 1"
'Locate 2 , 1 : Lcd "Zeile 2"
For Id = 1 To 25 Step 8 'ID für alle 4 DS1820 1,9,17,25
1wreset '1Wire Reseten
1wwrite &H55 'MATCHROM=>Adress.den DS1820 anhand des ROM Inhaltes
1wwrite Ds1820id(id) , 8 '8 Byte ID wird uebertragen
1wwrite &HBE 'READ SCATCHPAD => Liest alle Bytes des SP Memorys
Sc(1) = 1wread(9)
T = Sc(1)
T = Makeint(sc(1) , Sc(2)) 'komprimiert zwei Bytes in die Integervariable T
T_mess = T / 16 'Die Nachkommastelle entfernen
'Locate I , 11
Spalte = I * 6
Spalte = Spalte + 1
___lcdno = 0
'Locate 1 , 1 : Lcd " Inn Auss Kess Vorl Rück "
Locate 2 , Spalte 'Temperatur in Grad ausgeben
Lcd Fusing(t_mess , "#.#" )
Incr I
Next Id
I = 0
Spalte = 0
1wreset
1wwrite Skip_rom
1wwrite Start_conversion 'Alle angeschlossenen DS1820 zum Messen veranlassen
Waitms 2000
' Cls 'Ausgabe alle 0,5 Sekunden
Loop
End
Sensor_ids:
Data &H28 , &H25 , &H67 , &HAA , &H03 , &H00 , &H00 , &H55
Data &H28 , &HA2 , &H75 , &HAA , &H03 , &H00 , &H00 , &HC5
Data &H28 , &HA7 , &H64 , &HAA , &H03 , &H00 , &H00 , &H9F
Data &H28 , &HE6 , &H63 , &HAA , &H03 , &H00 , &H00 , &H8C
'Data &H10 , &HE8 , &HF4 , &H23 , &H01 , &H08 , &H00 , &HEF '
Danke schon einmal für die Hilfe
Martin