' 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., Db5 = Portc., Db6 = Portc., Db7 = Portc., Rs = Portc., E = Portc.4
'---------------------------    I/O   -----------------------------------------
Ddrd = &B01100011
Ddrb.= 1
Ddrb.= 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.= 1
Portb.= 1
Portd.= 1
Wait 1
Portb.= 0
Portb.= 0
Portd.= 0
'--------------------   H a u p t p r o g  r a m m  ---------------------------
Do

Cls

Lcd "T0= " ; Timer0

If Pind.= 1 Then Portb.= 1 Else Portb.= 0       ' Zustand des

Waitms 200

Loop

'------------------------Interrupt Routine für Timer0 -------------------------
Timer_null:
Toggle Portb.2
Return