' 31.01.2017
' Timereingang T0 ist der Messeingang,bei jedem eintreffenden Signal wird die
' grüne Status Led den Zustand anzeigen und der Timerwert von Timer null wird
' um jeweils eins aufaddiert.Bei 255 Impulse dann wird ein Interrupt ausgelöst.
'--------------------- Allgemeine Prozessor Konfiguration ----------------------
$regfile "m8def.dat" 'Definiert den Atmega als Atmega8
$crystal = 16000000 'Gibt die Quarzfrequenz an in Herz
$hwstack = 32 'Default use 32 Hardware reservierte Speicher
$swstack = 10 'Default Software resvierung Speicher
'--------------------- Konfiguration fürs Display-----------------------------
Config Lcd = 16 * 4
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , Rs = Portc.5 , E = Portc.4
'--------------------------- I/O -----------------------------------------
Ddrd = &B01100011
Ddrb.0 = 1
Ddrb.2 = 1
'----------------------------- Interrupt Konfiguration ------------------------
Timsk = &B00000101 ' Interrupt für Timer 0 und 1 einschalten
Sreg = &B10000000 ' Interrupts Global einschalten
' --------------------------- Timer 0 Konfigurieren ---------------------------
On Timer0 Timer_null
Tccr0 = &B00000111 ' Timer zählt externes Signal an steigender Flanke
'--------------------------- Version anzeigen ---------------------------------
Cls
Locate 1 , 1
Lcd "Frequenzmesser50 Hz"
Locate 2 , 1
Lcd "Version 8B"
Locate 3 , 1
Lcd "Jan. - 2017"
Wait 5
'------------------------------ Einschalt Test --------------------------------
Portb.0 = 1
Portb.2 = 1
Portd.0 = 1
Wait 1
Portb.0 = 0
Portb.2 = 0
Portd.0 = 0
'-------------------- H a u p t p r o g r a m m ---------------------------
Do
Cls
Lcd "T0= " ; Timer0
If Pind.4 = 1 Then Portb.0 = 1 Else Portb.0 = 0 ' Zustand des
Waitms 200
Loop
'------------------------Interrupt Routine für Timer0 -------------------------
Timer_null:
Toggle Portb.2
Return