$crystal = 4915200 'Quarzfrequenz Dim Dtmf As Byte Dim N As Integer Config Pinb.0 = Input 'nsa Kontakt Config Pinb.1 = Output '"Masse" Config Pinb.2 = Input 'nsi / nsr Kontakt Config Pinb.3 = Output 'DTMF Ausgang (OC1) Portb.1 = 0 'Port auf "0" Pinb.0 = 1 'Pull-UP für nsa ein Nsi_pu Alias Portb.2 Nsi Alias Pinb.2 Nsa Alias Pinb.0 Nsi_pu = 0 'Pull-UP für nsi/nsr aus (Strom sparen!) Enable Interrupts 'Unbedingt nötig für die MFV Tonerzeugung Config Debounce = 5 '5ms Prellzeit für nsi/nsr Kontakt Enable Pcint 'Bei Pin Change den Controller aufwecken und Unterprogramm ausführen Pcmsk = &B00000001 'Maskierung für PortB.6 On Pcint Wahl_auswerten Do Power Powerdown 'Den Controller in den Sleep Mode versetzen Loop Wahl_auswerten: Disable Pcint 'Keine weitere Störung durch IRQ Waitms 5 'entprellen If Nsa = 0 Then 'Unterprogramm nur ausführen, wenn nsa geschlossen wird! Dtmf = 0 Nsi_pu = 1 'Pull-UP für nsi/nsr ein Waitms 1 While Nsa = 0 'Während nsa geschlossen ist, läuft die Wählscheibe ab ... Debounce Nsi , 1 , Count_up , Sub 'Kontakt entprellen, Impulse zählen ... Wend If Dtmf > 0 Then 'MFV Wahl nur, wenn wirklich ein Impuls gezählt wurde If Dtmf = 10 Then '10 Pulse = Ziffer 0 Dtmf = 0 End If Enable Interrupts 'Ist nötig, damit DTMFOUT funktioniert Dtmfout Dtmf , 100 '100ms DTMF Signal senden Nsi_pu = 0 'Pull-UP für nsi/nsr aus End If End If Enable Pcint 'Bereit für neuen Interrupt Return Count_up: Incr Dtmf 'Variable Dtmf um eins hochzählen Return