habe es mal so versucht.
geht relativ gut.

'Auwertung einer Drezahl mit einem CNY70
'Die LED des CNY70 wird an Protb.5 mit Timer2 gepulst
'am Transitor des CNY wird das Singnal mit einem RC Hochpaß aufbereitet und
'auf den INT0 (Portd.2) gegeben.
'Die Signale an Portd.2 werden während einer Torzeit(Timer0/Merker1) gezählt
'Liegt eine Frequenz an gab es während der Torzeit ca.6 Impulse
'Liegt eine Frequenz an wird hochgezählt und gewartet bis die Frequenz wieder weg ist.
'Liegt erneut eine Frequenz an wird wieder hochgezählt

$regfile = "m8adef.dat"
$crystal = 1000000
$hwstack = 40
$swstack = 16
$framesize = 32

Dim Wert As Word 'Erkannte Impulse
Dim Zaehler As Word 'Impulse Frequenz zählen
Dim Merker As Bit 'Merker Torzeit abgelaufen
Dim Merker2 As Bit 'Frequenz Ja/Nein

Config Portb.5 = Output 'Ausgang LED CNY 70
Config Portd.2 = Input 'Impulseingang
Config Portb.1 = Output 'Anzeige-LED Frequenz erkannt

Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portb.0
Config Lcd = 20 * 4
Cursor Off
Cls

Config Timer0 = Timer , Prescale = 256 'Torzeit Impulse
On Timer0 Torzeit
Enable Timer0

Config Timer2 = Timer , Prescale = 8 'LED Pulsen CNY70
On Timer2 Ledpulsen
Enable Timer2

Config Int0 = Rising 'Interrupt zum Frquenz zählen
On Int0 Eingangsimpuls
Enable Int0
Enable Interrupts

Do
If Merker = 1 Then Gosub Auswerten 'Auswert nach Torzeit Frequenz Ja/Nein '

Locate 1 , 1
Lcd Wert ; " " 'Anzeige der erkannten Impulse


Loop

End

Auswerten:
Merker = 0 'Torzeitmerker auf 0
If Zaehler > 3 And Merker2 = 0 Then 'Prüfung neuer Frequenzimpuls Ja/Nein bei dieser Torzeit ca.6 Impulse
Incr Wert 'Erkannte Impulse hochzälen
Portb.1 = 1 'Frequenz erkannt
Else
Portb.1 = 0 'Frequenz nicht erkannt
End If

If Zaehler > 3 Then
Merker2 = 1 'Frequenz erkannt
Else
Merker2 = 0 'keine Frequenz erkannt
End If
Zaehler = 0 'Zähler auf 0 für nächsten Durchgang
Return

Ledpulsen:
Timer2 = 130
Toggle Portb.5 'LED CNY70 pulsen
Return

Eingangsimpuls:
Incr Zaehler
Return

Torzeit:
Timer0 = 100 'Timer0 auf Startwert 100
Merker = 1 'Torzeit abgelaufen
Return