-
Mhhh.... Das n bisschen merkwürdig. Musst noch mal ein wenig rumprobieren, aber schon schön zu sehen, das du anscheinend die switch anweisung verstanden hast, haste ja auch gleich oben reingepackt ;) cool. Für solche sachen is die gedacht.
ahh mom, ich glaube du brauchst immer ein Else Case, schreib einfach nix dahinter, einige Proggersprachen brauchen das.
Probier einfach mal
-
hallo
jo, habe die oben reingepackt, für die tastenabfrage, läuft gut ;)
habe es jetzt so (mit else case)
Select Case Tag
Case 1 : Wochentag = "Montag"
Case 2 : Wochentag = "Dienstag"
Case 3 : Wochentag = "Mittwoch"
Case 4 : Wochentag = "Donnerstag"
Case 5 : Wochentag = "Freitag"
Case 6 : Wochentag = "Samstag"
Case 7 : Wochentag = "Sonntag"
Else Case
End Select
geht nicht. Auch wenn ich end select rausmache, geht nicht.
immer die selben fehler :(
-
wenn ich die doppelpunkte zwischen case 1 und wochentag weglasse kommt bei den errors: 2x error 35 in der case 1 & 2 Zeile
und einmal 269 in der case 2 zeile.
hier nochmal der komplette code:
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
Declare Sub Plussekunde()
Declare Sub Plusminute()
Declare Sub Plusstunde()
Declare Sub Clockstart()
Declare Sub Showdigitalporta()
Declare Function Tastenabfrage() As Byte
Dim I As Integer
Dim N As Integer
Dim Ton As Integer
Dim Sekunde As Word
Dim Minute As Word
Dim Stunde As Word
Dim Wochentag As Word
Dim Tag As Word
Dim Taste As Byte
Config Portc = Output
Portc = 11111111
Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1
Do
Taste = Tastenabfrage()
If Taste <> 0 Then
Select Case Taste
Case 1
Call Plussekunde
Case 2
Call Plusminute
Case 3
Call Plusstunde
Case 4
Call Clockstart
End Select
Sound Portd.7 , 400 , 500 'BEEP
End If
Waitms 100
If Sekunde = 60 Then
Sekunde = 0
Minute = Minute + 1
Else
End If
If Minute = 60 Then
Minute = 0
Stunde = Stunde + 1
Else
End If
If Stunde = 24 Then
Stunde = 0
Tag = Tag + 1
End If
Select Case Tag
Case 1 Wochentag = "Montag"
Case 2 Wochentag = "Dienstag"
Case 3 Wochentag = "Mittwoch"
Case 4 Wochentag = "Donnerstag"
Case 5 Wochentag = "Freitag"
Case 6 Wochentag = "Samstag"
Case 7 Wochentag = "Sonntag"
Else Case
End Select
Loop
End
Function Tastenabfrage() As Byte
Local Ws As Word
Tastenabfrage = 0
Ton = 600
Start Adc
Ws = Getadc(7)
If Ws < 500 Then
Select Case Ws
Case 400 To 450
Tastenabfrage = 1
Ton = 550
Case 330 To 380
Tastenabfrage = 2
Ton = 500
Case 260 To 305
Tastenabfrage = 3
Ton = 450
Case 180 To 220
Tastenabfrage = 4
Ton = 400
Case 90 To 130
Tastenabfrage = 5
Ton = 350
End Select
Sound Portd.7 , 400 , Ton
End If
End Function
Sub Plussekunde()
Sekunde = Sekunde + 1
Print Stunde ; ":" ; Minute ; ":" ; Sekunde
End Sub
Sub Plusminute()
Minute = Minute + 1
Print Stunde ; ":" ; Minute ; ":" ; Sekunde
End Sub
Sub Plusstunde()
Stunde = Stunde + 1
Print Stunde ; ":" ; Minute ; ":" ; Sekunde
End Sub
Sub Clockstart()
Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1
Enable Interrupts
Enable Timer1
Sekunde = Sekunde + 1 ' + 1Sekunden für Timerausgleich
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Enable Interrupts
Timer1 = 68570 'Timer1 soll schon von 34285 wegzählen
End Sub
Isr_von_timer1: 'ISR von Timer1
Timer1 = 68570
'Sound Portd.7 , 400 , 550
'Print "Stunde" ; Stunde ; " Minute:" ; Minute ; " Sekunde:" ; Sekunde
Print Stunde ; ":" ; Minute ; ":" ; Sekunde ; ":" ; Wochentag
Sekunde = Sekunde + 1
Toggle Portc.0
Return
-
Wenn ich anstat Der Namen zahlen hinschreibe geht es, aber es geht doch gerade um die namen :(
Kann es sein das man bei vairablen nur zahlen machen kann?
weil das mit den wörtern ist eigentlich genau das ,was ich wollte.
Edit: So, habe herausgefunden das word variablen keine wörter speichern können, also den type oben auf byte gesetzt, da die dan buchstaben speichern können.
Nun kommen keine error meldungen meer aber im terminal steht:
0:2:25:68
0:2:26:68
0:2:27:68
0:2:28:68
0:2:29:68
Warum 68? da müsster doch ein Tag stehen!
Der gesammte code:
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
Declare Sub Plussekunde()
Declare Sub Plusminute()
Declare Sub Plusstunde()
Declare Sub Clockstart()
Declare Sub Plustag()
Declare Function Tastenabfrage() As Byte
Dim I As Integer
Dim N As Integer
Dim Ton As Integer
Dim Sekunde As Word
Dim Minute As Word
Dim Stunde As Word
Dim Wochentag As Byte
Dim Tag As Word
Dim Taste As Byte
Config Portc = Output
Portc = 11111111
Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1
Do
Taste = Tastenabfrage()
If Taste <> 0 Then
Select Case Taste
Case 1
Call Plussekunde
Case 2
Call Plusminute
Case 3
Call Plusstunde
Case 4
Call Clockstart
Case 5
Call Plustag
End Select
Sound Portd.7 , 400 , 500 'BEEP
End If
Waitms 100
If Sekunde = 60 Then
Sekunde = 0
Minute = Minute + 1
Else
End If
If Minute = 60 Then
Minute = 0
Stunde = Stunde + 1
Else
End If
If Stunde = 24 Then
Stunde = 0
Tag = Tag + 1
End If
If Tag > 7 Then
Tag = 1
End If
'Select Case Tag
'Case 1 Wochentag = "Montag"
'Case 2 Wochentag = "Dienstag"
'Case 3 Wochentag = "Mittwoch"
'Case 4 Wochentag = "Donnerstag"
'Case 5 Wochentag = "Freitag"
'Case 6 Wochentag = "Samstag"
'Case 7 Wochentag = "Sonntag"
'Else Case
'End Select
Select Case Tag
Case 1
Wochentag = "Montag"
Case 2
Wochentag = "Dienstag"
Case 3
Wochentag = "Mittwoch"
Case 4
Wochentag = "Dönnerstag"
Case 5
Wochentag = "Freitag"
Case 6
Wochentag = "Samstag"
Case 7
Wochentag = "Sonntag"
End Select
Loop
End
Function Tastenabfrage() As Byte
Local Ws As Word
Tastenabfrage = 0
Ton = 600
Start Adc
Ws = Getadc(7)
If Ws < 500 Then
Select Case Ws
Case 400 To 450
Tastenabfrage = 1
Ton = 550
Case 330 To 380
Tastenabfrage = 2
Ton = 500
Case 260 To 305
Tastenabfrage = 3
Ton = 450
Case 180 To 220
Tastenabfrage = 4
Ton = 400
Case 90 To 130
Tastenabfrage = 5
Ton = 350
End Select
Sound Portd.7 , 400 , Ton
End If
End Function
Sub Plussekunde()
Sekunde = Sekunde + 1
Print Stunde ; ":" ; Minute ; ":" ; Sekunde ; ":" ; Wochentag
End Sub
Sub Plusminute()
Minute = Minute + 1
Print Stunde ; ":" ; Minute ; ":" ; Sekunde ; ":" ; Wochentag
End Sub
Sub Plusstunde()
Stunde = Stunde + 1
Print Stunde ; ":" ; Minute ; ":" ; Sekunde ; ":" ; Wochentag
End Sub
Sub Plustag()
Tag = Tag + 1
Print Stunde ; ":" ; Minute ; ":" ; Sekunde ; ":" ; Wochentag
End Sub
Sub Clockstart()
Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1
Enable Interrupts
Enable Timer1
Sekunde = Sekunde + 1 ' + 1Sekunden für Timerausgleich
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Enable Interrupts
Timer1 = 68570 'Timer1 soll schon von 34285 wegzählen
End Sub
Isr_von_timer1: 'ISR von Timer1
Timer1 = 68570
'Sound Portd.7 , 400 , 550
'Print "Stunde" ; Stunde ; " Minute:" ; Minute ; " Sekunde:" ; Sekunde
Print Stunde ; ":" ; Minute ; ":" ; Sekunde ; ":" ; Wochentag
Sekunde = Sekunde + 1
Toggle Portc.0
Return
Isr_von_timer1: 'ISR von Timer1
Timer1 = 68570
'Sound Portd.7 , 400 , 550
'Print "Stunde" ; Stunde ; " Minute:" ; Minute ; " Sekunde:" ; Sekunde
Print Stunde ; ":" ; Minute ; ":" ; Sekunde ; ":" ; Wochentag
Sekunde = Sekunde + 1
Toggle Portc.0
Return
-
Verstehe nicht, wieso eine Hochsprache genutzt wird, wenn eh alles zu Fuss gemacht wird..
Wenn die Uhr im synchron Modus laufen soll, dann einfach statt config clock ein config dcf
oben die bascom Uhr Routinen aktivieren
Dim Wochentag As String * 12
dim wtag as byte
config clock = modus
weiter unten den Wochentag ausgeben:
Wtag = Dayofweek()
If Wtag = 0 Then Wochentag = " Montag "
If Wtag = 1 Then Wochentag = " Dienstag "
If Wtag = 2 Then Wochentag = " Mittwoch "
If Wtag = 3 Then Wochentag = " Donnerstag "
If Wtag = 4 Then Wochentag = " Freitag "
If Wtag = 5 Then Wochentag = " Samstag "
If Wtag = 6 Then Wochentag = " Sonntag "
-
also bei deinem code kommen nur immer weiter errors :(
kansst du vieleicht einen code reinstellen der besserfunktioniert, als zu fuss?
bei diesem test code kommt auch immer nur 77 im terminal raus :(
Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
Dim Wochentag As Byte
Do
Wochentag = "Montag"
Print Wochentag
Wait 2
Loop
wenn ich da abc eingwbe kommt im terminal 97.
-
77 ist der ASCII des ersten Zeichens von "Montag", also des M.
Du musst Wochentag schon als String definieren, wenn du der Variablen einen String zuweisen willst.
So, wie das bei Peterfido auch steht.
-
Ich habe nur die Wochentags"geschichte" gepostet. Natürlich muss die Uhr und vor Allem das Datum gestellt werden, damit es richtig läuft. Doch dafür verweise ich lieber auf die Bascom-Hilfe. >config clock; >config dcf77
-
Mhh gib ma deinen kompletten Code her, dann hau ich das mal bei mir rein, kann soetwas doch besser, wenn ich es live sehe.
-
Danke habe es geschaft ! Vielen dank :D
habe oben Dim Wochentag As String * 12 reingeschrieben und das wars.
dim wtag as byte
config clock = modus
hatt fehler verursacht, jetzt da's raus ist läufts super.
Den code poste ich morgen, nach getaner arbeit lege ich mich jetzt erstmal schlafen ;)