hallo che,

erstmal danke für deine antwort ! hab mich auch entschlossen das ganze via interrupt zu messen. am oszi habe ich erstmal den grundablauf des programmes überprüft, doch leider hapert es jetzt an der automatischen vermessung via interrupts. kannst du mir eventuell dabei helfen?

hier der quellcode:
Code:
 '#########################################################
'Füllstandsmessung mit Ultraschallsensor USM-18A
'
'Aufgabe:
'Entfernung wird gemessen und in Zentimetern ausgegeben
'
'
'Autor: Micha
'Datum: 11.09.2008
'Version: 0.11
'
'Changelog:
'0.11: Zeitmessung zw. Interrupts integriert
'0.1: erste Version, Grundfunktionen der Entfernungsmessung
'##########################################################

'Die üblichen Definitionen bei Standardprogrammen auf Miniboard
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40

Dim Overflow As Integer
Dim Zeitmessung As Single
Dim Entfernung As Single

'LED1 an PC0
 Led1 Alias Portc.0
 Config Led1 = Output
 Led1 = 0


 'Timer konfigurieren
 Config Timer1 = Timer , Prescale = 1
 On Timer1 Timer_int

 'Timervorgabe = 61536 -> Overflow = Anzahl ms bei 4MHz Quarz
 Const Timervorgabe = 0

 'Wenn der Interrupt INT0 auftritt, dann springe zum Label On_int0
 On Int0 On_int0 Nosave

 'INT0 auf fallende Flanke
 Config Int0 = Falling

 'PortC.3 als Trigger-Ausgang für Oszimessungen
 Config Portc.3 = Output
 Portc.3 = 1

 'Globale Interrupts freischalten
 Enable Interrupts

Do
   Print "Loop Anfang!"

   'Low-Puls von 250us um US-Modul zu aktivieren
   Config Portd.2 = Output
   Portd.2 = 0

   'Timer starten
   Enable Timer1
   Overflow = 0

   Toggle Portc.3

   Waitus 250

   'US-Pin auf Input und Pull-UP setzen
   Config Portd.2 = Input
   Portd.2 = 1
   Toggle Portc.3

   'INT0 einschalten um Echo-Puls zu detektieren
   Enable Int0

   Waitms 50

   Print "Loop Ende!"
   Print "Entfernung: " ; Entfernung ; "m"
Loop

End

On_int0:
'Quick'n'Dirty Interrupt ausschalten um Streuungen nicht zu detektieren
Disable Int0

'Timerwert auslesen
Zeitmessung = Timer1
Print "Zeit:" ; Zeitmessung

Disable Timer1

If Zeitmessung <> 0 Then
      Print "Overflow" ; Overflow
      Overflow = Overflow * 65536
      Zeitmessung = Zeitmessung + Overflow
      Zeitmessung = Zeitmessung / 1000
      Entfernung = 0.1715 * Zeitmessung
End If

Toggle Led1
Print "Interrupt!!!"

Return

Timer_int:
  Timer1 = Timervorgabe
  Overflow = Overflow + 1
Return

'Berechnung der Entfernung: s = 0,343*t/2; t in ms -> s in m