Hallo,
ich möchte die Zeit zwischen Interrupt0 und Interrupt1 messen. Wenn bei Int0 ein high Signal kommt soll der Timer1 gestartet werden und wenn high bei Interrupt2 kommt soll der Timer gestoppt werden. Aber irgendwie reagiert das Programm nicht auf die Interrupts. Weiß jemand warum?
Code:'7Segmentanzeige mit 5 (oder 4) Anzeigen $regfile = "ATtiny2313.dat" 'ATTiny2313 $crystal = 18432000 '18,4320MHz Quarz $hwstack = 64 ' default use 32 for the hardware stack $swstack = 64 ' default use 10 for the SW stack '_______________________________________________________________________________ Ddrb = &B11111111 'PortB = Ausgang (PB0=A usw.) Ddrd = &B1110011 'PortD = Ausgang (PD0=Anzeige1, PD4=A2, PD5=A3, PD6=A4) PD2/3 =INT Config Int0 = Rising 'Falling 'wechsel von High auf Low Config Int1 = Rising 'Falling 'wechsel von High auf Low Enable Int0 Enable Int1 '_______________________________________________________________________________ Dim Anzeige_akt As Word 'Aktuelle Zeitmessung Dim Anzeige_str As String * 5 'Zeit als String Dim Anzeige_str_len As Byte 'String-Länge Dim Anzeige_ziffer As String * 1 'Aktuelle Ziffer Dim Anzeige_pos As Byte 'Aktuelle Ziffer im String Dim I As Byte 'Allgem. Laufzahl I = 1 Dim Zeit As Single 'gemessene Zeit von Timer1 Dim Kmh As Single 'Geschwindigkeit '_______________________________________________________________________________ 'TIMER0 Konfiguration für Ziffernwechsel: Config Timer0 = Timer , Prescale = 256 ' Timer0 für Anzeige Const T0_preload = &H70 ' Startwert Timer0 für 500Hz Tcnt0 = T0_preload On Timer0 Timer_irq_led ' Timer0-Overflow-Interrupt Enable Timer0 ' Timer0 starten Sreg.7 = 1 'Globale Interruptfreigabe '_______________________________________________________________________________ 'TIMER1 Konfiguration für Messzeit: Config Timer1 = Timer , Prescale = 1024 Const Timervorgabe = 0 '29535 -> 0,5 Hz On Timer1 Timer_irq_kmh 'Unteprogramm aufrufen 'Enable Interrupts '_______________________________________________________________________________ Do ' Dauerschleife als Hauptprogramm Waitms 250 Anzeige_akt = Timer1 'Zeit 'Wert zum anzeigen Loop '_______________________________________________________________________________ Timer_irq_led: Tcnt0 = T0_preload 'Timer wieder laden Anzeige_str = Str(anzeige_akt) ' Wert in String umwandeln Anzeige_str_len = Len(anzeige_str) ' Stringlänge messen Anzeige_pos = Anzeige_str_len - I Anzeige_pos = Anzeige_pos + 1 Anzeige_ziffer = Mid(anzeige_str , Anzeige_pos , 1) Portd = 0 'Ghosting vermeiden Select Case Anzeige_ziffer 'Ziffer auf Port Case "0" : Portb = 63 'NULL Case "1" : Portb = 6 'EINS Case "2" : Portb = 91 'ZWEI Case "3" : Portb = 79 'DREI Case "4" : Portb = 102 'VIER Case "5" : Portb = 109 'FÜNF Case "6" : Portb = 125 'SECHS Case "7" : Portb = 7 'SIEBEN Case "8" : Portb = 127 'ACHT Case "9" : Portb = 111 'NEUN Case Else : Portb = 0 End Select 'Segment wählen If I = 1 Then Portd.0 = 1 'EINER 'If I = 2 Then Portd.1 = 1 'ZEHNER If I = 2 Then Portd.4 = 1 'HUNDERTER 'Portb.7 = 1 'Kommastelle End If If I = 3 Then Portd.5 = 1 'TAUSENDER If I = 4 Then Portd.6 = 1 'ZEHNTAUSENDER I = I + 1 'Nächste Ziffer If I >= 6 Then I = 1 'max Anzeigen angeben! damit Anzeige möglichst hell ist(bei 5Anzeigen muss bei der 6. wieder bei 1 Angefangen werden) Return Irq0: 'Aufruf bei Lichtschranke 1 per Interrupt Timer1 = 0 'Timer auf 0 setzen Start Timer1 'Timer starten Portb.7 = 1 Return Irq1: 'Aufruf bei Lichtschranke 2 per Interrupt Stop Timer1 'Timer stoppen 'Zeit = Timer1 Portb.7 = 0 Return Timer_irq_kmh: 'Aufruf jede oder jede halbe Sekunde Timer1 = Timervorgabe 'AUF TIMER EINSTELLUNG ACHTEN!!!!!!! Return







Zitieren

Lesezeichen