'***********Compiler Informationen**************************** $regfile = "m32def.dat" '* 'Taktfrequenz 1MHz '* $crystal = 16000000 '* 'Baudrate für UART '* $baud = 9600 '* $hwstack = 100 $swstack = 100 '************************************************************* '************************************** '********* Datenrichtungsregister ***** '************************************** '===================Aliase Festlegen=========================== Lcd_db4 Alias Portb.2 Lcd_db5 Alias Portb.3 Lcd_db6 Alias Portb.4 Lcd_db7 Alias Portb.5 Lcd_e Alias Portb.6 Lcd_rs Alias Portb.7 Taster1 Alias Pind.2 Taster2 Alias Pind.3 Taster3 Alias Pind.4 Summer Alias Portd.7 '************************************** '********* LCD-Konfiguration ********** '************************************** 'LCD als 16x2 Zeichen konfigurieren Config Lcd = 16 * 2 'LCD-Pins konfigurieren Config Lcdpin = Pin , Db4 = Lcd_db4 , Db5 = Lcd_db5 , Db6 = Lcd_db6 , Db7 = Lcd_db7 , E = Lcd_e , Rs = Lcd_rs 'LCD wird im 4-Bit-Modus betrieben Config Lcdbus = 4 '************************************** '********* LCD-Konfiguration ENDE****** '************************************** '******************************************************* '************************************** '******** LCD initialisieren ********** '************************************** Initlcd 'Display löschen Cls '************************************** '******** LCD initialisieren ENDE****** '************************************** '************************************** '******** Variable Deklaration ******** '************************************** Dim Sekunden As Byte Dim Minuten As Byte Dim Stunden As Byte Declare Sub Einstellung '=============Programmstart / Init Sound Summer , 100 , 900 'Summer Piep Locate 1 , 1 'Display 1. Reihe, 1. Position Lcd "Uhr-Testprogramm" 'Ausgabe Displaytest Locate 2 , 1 'Display 2. Reihe, 1. Position Lcd "Uhr.bas" 'Displayausgabe Print "Programm wird initialisiert" 'config 16Bit Timer1 Config Timer1 = Timer , Prescale = 256 Enable Timer1 'schalte den Timer1 ein On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1 Enable Interrupts Timer1 = 3036 'Timer1 soll schon von 3036 wegzählen damit überlauf bei 65536 bei 1 Sek. ist 'Warte 1,5 Sekunde Sound Summer , 50 , 500 'Ausgabe Summer 'Display löschen 'TEMP Stunden = 15 Minuten = 4 Sekunden = 0 'TEMP Cls Do Locate 1 , 1 'Display 1. Reihe, 1. Position Lcd "Uhrzeit" 'Ausgabe Displaytest Locate 2 , 1 'Display 2. Reihe, 1. Position Lcd Stunden ; ":" ; Minuten ; ":" ; Sekunden Waitms 50 Print "Hauptschleife" Loop Isr_von_timer1: Disable Interrupts Print "ISR" Timer1 = 3036 'Timer erneut vorladen Incr Sekunden If Sekunden = 60 Then Sekunden = 0 Incr Minuten End If If Minuten = 60 Then Minuten = 0 Incr Stunden End If If Stunden = 24 Then Stunden = 0 End If Debounce Taster1 , 1 , Einstellung , Sub Debounce Taster2 , 1 , Einstellung , Sub Cls Enable Interrupts Waitms 50 Return Einstellung: Disable Timer1 While Taster1 = 1 Print "Taster1 " ; Stunden ; ":" ; Minuten ; ":" ; Sekunden Incr Sekunden Locate 1 , 1 Lcd "Einstellungen" Locate 2 , 1 Lcd Stunden ; ":" ; Minuten ; ":" ; Sekunden If Sekunden = 60 Then Sekunden = 0 Incr Minuten End If If Minuten = 60 Then Minuten = 0 Incr Stunden End If If Stunden = 24 Then Stunden = 0 End If Waitms 50 Wend While Taster2 = 1 Print "Taster2, Minuten " ; Stunden ; ":" ; Minuten ; ":" ; Sekunden Incr Minuten Locate 1 , 1 Lcd "Einstellungen" Locate 2 , 1 Lcd Stunden ; ":" ; Minuten ; ":" ; Sekunden If Sekunden = 60 Then Sekunden = 0 Incr Minuten End If If Minuten = 60 Then Minuten = 0 Incr Stunden End If If Stunden = 24 Then Stunden = 0 End If Waitms 50 Wend Enable Timer1 Return