Hallo zusammen!
Der Timer läuft bei einem Wert von 65535 über. Wenn Du ihn in der ISR auf 65500 vorlädst, gibt es alle 35 Taktzyklen einen Timer1-Interrupt. Bei 1MHz wäre das alle 35µS, also knapp 30.000 Interrupts pro Sekunde. Ist das so gewollt? Wenn nicht, müsstest Du den Timer mit einem geeigneten Prescaler versehen (siehe Bascom-Hilfe...), und/oder den Preload-Wert verkleinern.
Das macht natürlich sehr wenig Sinn und ist rein zu Testzwecken gedacht gewesen. Um mit F8 durchs Programm zu springen und um nicht von 49911
losklappern zu müssen habe ich den Timer als Vorgabewert auf diese 65500 gesetzt. Wie gesagt das ist NUR zum Testen mit F8 so gemacht.
Die Geschichte mit "If Zaehler = 25 then..." geschieht natürlich auch nur ein einziges mal, denn in der nächsten ISR wird Zaehler um 1 erhöht, ist also nicht mehr 25.
Auch dieser Wert 25 macht recht wenig Sinn der ist auch nur zu Testzwecken mit F8 so nieder gesetzt wenn ich den Fehler im System gefunden habe werden die 25 auf 1800 gesetzt das sollte dann so ca 30 Minuten entsprechen.
Diese bedein Werte 65500 beim Timer und 25 beim Zähler habe ich nur benutzt um mit der F8 Funktion durchs Programm zu steppen und um zu sehen ob sich dabei etwas ändert.
Aber mir schwant böses.. Kann es sein das selbst mit der Funktion F8 zu viele Interrupts ausgführt worden sind und somit bei jedem Sprung der Zähler gleich wieder auf 0 gesetzt wird? sodaß mir die Werte garnicht angezeigt werden?
Code:
$regfile = "m48def.dat"
$crystal = 1000000
Config Timer1 = Timer , Prescale = 64
Config Portb.1 = Output
Config Portd.0 = Output
Config Portd.1 = Output
Config Pind.2 = Input
Config Pind.3 = Input 'taster'
Config Pind.4 = Input
Config Pind.5 = Input
Config Pind.6 = Input
Config Portd.7 = Output
'Ports einrichten welcher Eingang und welcher Ausgang ist.'
Versorgungfensterschalter Alias Portd.0
Versorgungtuerkontakt Alias Portd.1
Alarm Alias Portb.1
Versorgungtaster Alias Portd.7
Fensterschalter Alias Pind.4
Tuerkontakt Alias Pind.5
Eingangrauchmelder Alias Pind.6
Eingangtaster Alias Pind.3
Dim Dummy As Bit
Dim Zaehler As Integer
Versorgungfensterschalter = 1
Versorgungtuerkontakt = 1
Alarm = 0
Versorgungtaster = 1
'Hier gehts beim Timer Interupt weiter'
On Timer1 Timer_irq
'um 1 Sekunde zu erreichen reichen die ticks von 49911 bis 65535'
Const Timervorgabe = 65500
'49911
'Hier werden die Timer aktiviert
Enable Timer1
Enable Interrupts
Dummy = 0
Timer1 = Timervorgabe
'Hier ist die Programmhauptschleife
Do
If Fensterschalter = 1 And Tuerkontakt = 1 And Eingangrauchmelder = 0 Then
Alarm = 1
Else
Alarm = 0
End If
If Eingangtaster = 1 Then
Dummy = 1
End If
Loop
End
Timer_irq:
Timer1 = Timervorgabe
If Dummy = 1 Then
Portb.1 = 1
Zaehler = Zaehler + 1
End If
If Zaehler = 25 Then
Dummy = 0
Zaehler = 0
Portb.1 = 0
End If
Return
Ihr habt natürlich Recht war Blödsinn von mir nur Schnipsel zu posten.
Ich hoffe ich hab mich nicht allzu schusselig angestellt But nobody is perfect.
Danke schon mal für Eure Geduld und Hilfe...
Grüße aus dem Süden
Lesezeichen