Zitat Zitat von Ceos
ausserdem ist das waitms IN einer ISR schon fast sträflich!
Ja ich wunder mich auch ein bisschen, aber ich hab das 1:1 aus einem Buch abgeschrieben und da stand es so drin , ich hab nirgens eine anleitung gefunden wie man soetwas in ein bestehendes programm einbaut, deswegen weiß ich eben nicht wie ich das einsetzen muss, damit beides läuft .

Edit: Ich habs jetzt etwas umgeschrieben, ohne goto, mir ist grad so ein Geistesblitz gekommen , das funktioniert auch, auch wenn der timer drin ist funktioniert es noch, allerdings blinkt nichts.

Hier der neue Code:
Code:
$regfile = "m8def.dat"

$crystal = 8000000


Config Portc.1 = Input
Config Portc.2 = Input
Config Portc.3 = Input
Config Portc.4 = Input
Config Portc.5 = Input


Config Portd.0 = Output
Config Portd.1 = Output
Config Portd.2 = Output
Config Portd.3 = Output


Set Portc.1
Set Portc.2
Set Portc.3
Set Portc.4
Set Portc.5


Config Debounce = 30


Const An = 1
Const Aus = 0



Einschalten Alias Pinc.1
Ausschalten Alias Pinc.2
Rauchmelder Alias Pinc.3
Notaus Alias Pinc.4
Feuer Alias Pinc.5


Schuetz Alias Portd.0
Gelb Alias Portd.1
Rot Alias Portd.2
Alarm Alias Portd.3

Dim F As Bit
Dim B As Bit
Dim A As Bit
Dim C As Bit
C = 1


Config Timer0 = Timer , Prescale = 1024
Enable Timer0
Enable Interrupts

'On Timer0 Timer0_isr
Do
NOP
'Rauchmelder unscharf schalten

Debounce Rauchmelder , 0 , Rmtoggle , Sub


'Schütz An/Aus
If Einschalten = 0 Then Gosub Setzen
If Ausschalten = 0 Then Gosub Rsetzen


'Not-Aus
If Notaus = 1 And B = 1 Then
Gelb = C
Elseif Notaus = 0 And B = 1 Then
Gelb = 1
End If


'Rauchmelder-Ausgelöst
If Feuer = 0 And F = 0 Then
Alarm = An
Gosub Rsetzen
Else
Alarm = Aus

End If

Loop

                                                         'loop
'Flip-Flop setzen
Setzen:
Schuetz = An
Gelb = An
B = An
Return

'Flip-Flop zurücksetzen
Rsetzen:
Schuetz = Aus
Gelb = Aus
B = Aus
If F = 1 Then
Gosub Rmtoggle
End If
Return


Rmtoggle:
Toggle F
If F = 1 Then
Rot = C
Else
Rot = 0
End If

Return

'Timer0_isr:
'Load Timer0 , 195
'C = 0 : Waitms 5 : C = 1
'Return

End
Ich hab den Timer da jetzt mal auskommentiert und C auf 1 gesetzt, weil sonst gar nichts geleuchtet geschweige denn geblinkt hat .