
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo Laika! Den C-Control/BASIC Quelltext konnte ich jetzt kompilieren lassen. Wie ich bereits vermutet hatte, fehlte lediglich die Deklaration der verwendeten Variablen. Ich habe diese jetzt wie folgt deklariert: define datum_vom_pc byte define i1 byte define b1_i1 byte define i2 byte define b2_i1 byte define SUB_RETURN byte Und ein paar Kleinigkeiten im Quelltext angepasst. Das erzeugte Kompilat umfasst 485 Bytes und leistet im Prinzip das Gewünschte. Die Benutzerführung ist klar ersichtlich, und sogar ein Timeout ist realisiert. Im Falle von Nichteingabe terminiert das Programm zurück in den Hostmodus. Allerdingss ist es mir nicht gelungen, die Uhrzeit Sekundensynchron einzustellen. Das ist ein Feature das ich mir noch wünschen würde. Das Visual Basic Programm habe ich hingegen noch nicht ausprobiert. Denn zwischenzeitlich hatte ich im Kapitel 10.3 im PDF zum Buch C-Control Hardwareerweiterungen den folgenden VBA-Quelltext (wieder)-gefunden: Sub Form_Load () Comm1.CommPort = 2 Comm1.Settings = "9600,N,8,1" Comm1.InputLen = 1 Comm1.PortOpen = True If Comm1.PortOpen = False Then Comm1.CommPort = 1 Comm1.PortOpen = True End If MsgBox "C-Control Uhr stellen", 0 Sende 14 'Kommando Uhr stellen Sende Second(Now) Mod 256 Sende Minute(Now) Mod 256 Sende Hour(Now) Mod 256 Sende Weekday(Now) Mod 256 Sende Day(Now) Mod 256 Sende Month(Now) Mod 256 Sende (Year(Now) Mod 100) Mod 256 End End Sub Viele Grüsse Dirk PS: Hier der angepasste Quelltext des C-Control/BASIC Programms. '-------------------------------------------------------------------------------- 'Datum + Uhrzeit setzen. ' 'Gelegentlich geraten Datum und Zeit falsch, z.B. wenn an der Elektronik des Hausleitsystems 'gebastelt wird und RN abgeklemmt wird oder dieser aus Versehen auf HI geht. Dann setzt der MC 'die Uhrzeit auf RN-kommen-Zeit. Das z.B. soll korrigiert werden können. 'Ein: - 'Aus: datum_vom_PC = LO, wenn nichts eingegeben wurde 'Table wochentag_tabelle 'Hinter das Programmende verschoben ' 19823 17513 19817 17519 18034 21345 21359 ' 'Mo Di Mi Do Fr Sa So 'TabEnd 'define WOCHENTAG_TABELLE_LAENGE 6 'eins weniger als Anzahl Einträge define datum_vom_pc byte define i1 byte define b1_i1 byte define i2 byte define b2_i1 byte define SUB_RETURN byte #datum_zeit_setzen ' datum_vom_PC = LO 'Wenn 'datum_vom_PC = LO' bleibt, wurde nichts eingegeben 'Datum und Uhrzeit vom PC anfordern. 'Beginnen mit dem Tag ("day") print "Alles zweistellig eingeben !" print "Tag 00 - 31: "; for i1 = 0 to 50 '50 * 300 msec = 15 sec auf eine Eingabe warten if RXD then goto datum_zeit_eingeben pause 15 '15 * 20 = 300 msec next goto datum_zeit_eingeben_ende 'Wenn nichts eingegeben wird, kommt das Programm über "next" aus der 'Warteschleife heraus, darf dann natürlich NICHT in die folgende Eingabe laufen! END #datum_zeit_eingeben 'Die weiteren Daten: Monat, Jahr, Stunde, Minute, Sekunde und Wochentag 'Vom PC werden alle Daten - day, month, ... zweistellig (!) gesendet, 'd.h. in zwei Byte 'Vom MC werden sie zu einer Zahl day = 1 - 31, month = 1 - 12 usw. 'zusammen gesetzt. 'Damit kann man auch mit Hyperterminal arbeiten. 'Nach "get" immer ein Zeilenvorschub, sonst überschreibt das folgende 'print die Eingabe get b1_i1 'print "Tag ... " war oben schon get b2_i1 i2 = (b1_i1 - 48)*10 + b2_i1 - 48 '48 ^= ASCII-Basiswert der Ziffer "0" if i2 = 0 then goto datum_zeit_eingeben_ende day = i2 print "Monat 01 - 12: "; get b1_i1 get b2_i1 month = (b1_i1 - 48)*10 + b2_i1 - 48 print "Jahr 20, 21, ...: "; get b1_i1 get b2_i1 year = 23 '(b1_i1 - 48)*10 + b2_i1 - 48 print "Stunde 00 - 23: "; get b1_i1 get b2_i1 hour = (b1_i1 - 48)*10 + b2_i1 - 48 print "Minute 00 - 59: "; get b1_i1 get b2_i1 minute = (b1_i1 - 48)*10 + b2_i1 - 48 print "Wochentag: Mo = 01, Di = 02, Mi = 03, Do = 04, Fr = 05, Sa = 06, So = 07: "; get b1_i1 get b2_i1 dow = (b1_i1 - 48)*10 + b2_i1 - 48 print 'noch ein Zeilenvorschub zum Abschluss ' datum_vom_PC = HI #datum_zeit_eingeben_ende 'Ausgabe, damit es auch in Hyperterminal lesbar ist ''' gosub print_version print day; "."; month; "."; year; ", "; ''' gosub print_zeit print ", dow = "; dow;' " ^= "; looktab wochentag_tabelle, dow - 1, i1 put b1_i1 'Der als Zahlenäquivalent des 2-stelligen ASCII-Strings nach ´i1´ put b2_i1 'geladene Wochentag kann als Buchstabe nur mit ´put´ ausgegeben werden. print 'Noch einen print = Zeilenvorschub ausgeben, da ´put´ nichts macht i1 = SUB_RETURN 'i1 als Returnwert "alles ok" return Table wochentag_tabelle 19823 17513 19817 17519 18034 21345 21359 'Mo Di Mi Do Fr Sa So TabEnd |
| Antwort schreiben |