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







Zitieren

Lesezeichen