Na geht doch! =D>
Code:
$regfile = "m16def.dat" 'definieren des verwendeten Chips
$crystal = 8000000 'definieren des verwendeten externen Quarz (8MHz)
$framesize = 64
'Timer Config
Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1
Enable Timer1 'schalte den Timer1 ein
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Enable Interrupts
Timer1 = 34285 'Timer1 soll schon von 34285 wegzählen
'======================================================
'Konfigurationen für LCD Modul an Port B
'======================================================
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcdbus = 4
Cls
' Ende LCD Config
'dimensionieren der verwendeten Variablen
Dim Sekunde As Byte
Dim Minute As Byte
Dim Stunde As Byte
Dim Tag As Byte
Dim Monat As Byte
Dim Jahr As Byte
Dim Wochentag As Byte
Dim Sek As Bit
Dim Strzeit As String * 16
Dim Strdatum As String * 16
Dim Strwochentag As String * 10
'Alle Variablen auf Null setzen
Sekunde = 0
Minute = 12
Stunde = 10
Tag = 21
Monat = 11
Jahr = 06
Wochentag = 2
Sek = 0
Ddrd = &B11100000 'definieren der verwendeten Ports ( 1 = ausgang; 0= eingang)
Portd = &B00000000 'definieren der einzelnen Pins an einem Port ( 0= low level; 1= high level)
' Hauptprogramm
' Anfang der Schleife
Do
' Überträge
If Sekunde > 59 Then
Sekunde = 0
Minute = Minute + 1
End If
If Minute > 59 Then
Minute = 0
Stunde = Stunde + 1
End If
If Stunde > 23 Then
Stunde = 0
Tag = Tag + 1
End If
If Tag > 30 Then
Tag = 0
Monat = Monat + 1
End If
If Monat > 11 Then
Monat = 0
Jahr = Jahr + 1
End If
' Wenn die Sekunde sich ändert hat, alles neu ausgeben
If Sek = 1 Then
Sek = 0
Gosub Ausgabe
End If
' Tastenabfrage zum stellend er Uhr
Gosub Tastenabfrage
Loop 'zum Anfang der Schleife
' Ende Der Hauptschleife
' Tastenabfrage zum stellen der Uhr
Tastenabfrage:
If Pind.2 = 1 Then 'Wenn an Pin 2 von Port D ein high level anliegt, dann...
Minute = Minute + 1 '...setze Pin 5 von Port D von high auf low oder umgekehrt
Bitwait Pind.2 , Reset
End If 'warte bis an Pin 2 von Port D wieder ein low level anliegt
Return
' Ausgabe der Uhrzeit
Ausgabe:
' Ausgabestrings zusammenstellen
Strzeit = " Zeit: "
If Stunde < 10 Then
Strzeit = Strzeit + "0" + Str(stunde) + ":"
Else
Strzeit = Strzeit + Str(stunde) + ":"
End If
If Minute < 10 Then
Strzeit = Strzeit + "0" + Str(minute) + ":"
Else
Strzeit = Strzeit + Str(minute) + ":"
End If
If Sekunde < 10 Then
Strzeit = Strzeit + "0" + Str(sekunde) + " "
Else
Strzeit = Strzeit + Str(sekunde) + " "
End If
Strdatum = "Datum: "
If Tag < 10 Then
Strdatum = Strdatum + "0" + Str(tag) + "."
Else
Strdatum = Strdatum + Str(tag) + "."
End If
If Monat < 10 Then
Strdatum = Strdatum + "0" + Str(monat) + "."
Else
Strdatum = Strdatum + Str(monat) + "."
End If
If Jahr < 10 Then
Strdatum = Strdatum + "0" + Str(jahr) + " "
Else
Strdatum = Strdatum + Str(jahr) + " "
End If
If Wochentag = 1 Then Strwochentag = "Montag"
If Wochentag = 2 Then Strwochentag = "Dienstag"
If Wochentag = 3 Then Strwochentag = "Mittwoch"
If Wochentag = 4 Then Strwochentag = "Donnerstag"
If Wochentag = 5 Then Strwochentag = "Freitag"
If Wochentag = 6 Then Strwochentag = "Samstag"
If Wochentag = 7 Then Strwochentag = "Sonntag"
'lcd routine und anzeige
Cls
Locate 1 , 1
Lcd Strzeit
Locate 2 , 1
Lcd Strdatum
' Und nun noch per RS232
Print Stunde ; Minute ; Sekunde
Print Strzeit
Print Strwochentag
'Print Zeit$
'Print Datum$
'Print Wochentag$
Print
Print
Return
' Vom Timer jede Sekunde angesprungen
Isr_von_timer1: 'ISR von Timer1
Timer1 = 34285 'Timer1 soll wieder von 34285 wegzählen
Toggle Portd.6
Toggle Portd.5 'schaltet Portd. im Sekundentakt EIN und AUS
Sekunde = Sekunde + 1
Sek = 1
Return
' Programm Ende
End
Lesezeichen