hey hab mal n kleinen code geschrieben müsste eig relativ selbst erklärend sein wen was unklar ist einfach frage bitte fersuch mal ob es so funktioniert
Code:
$regfile = "M16def.dat"
$crystal = 8000000
Config Timer1 = Timer , Prescale = 1024 'hier wird der timer configuriert
Timer1 = 57722
On Timer1 Ontimer1 'bei einem timerüberlauf springt der controller zu ontimer0
Config Portd = Input
Config Portc = Output
Dim Zeit As Byte
Taster1 Alias Pind.1
Taster2 Alias Pind.0
Hauptprogramm:
Do
If Taster1 = 0 Then Gosub Relais1
If Taster2 = 0 Then Gosub Relais2
Loop
Relais1:
Enable Timer1 'der timer wird eingeschaltet
Enable Interrupts 'die interrupts werden eingeschaltet (hier nur der timer interrupt ist nötig dass der AVR interrupts zulässt)
Portc.0 = 1
Do
If Zeit < 1 Then ' wen die zeit Über 1 sekunde ist werden der timer und die interrupts wieder deaktiviert
Disable Timer0
Disable Interrupts
Portc.0 = 0 'das relai fällt ab
Goto Hauptprogramm 'der controller verlässt die do loop schleife und kommt weider zum hauptprogramm zurück
End If
Loop
Return
Relais2:
Enable Timer1
Enable Interrupts
Portc.1 = 1
Do
If Zeit < 2 Then
Portc.1 = 0
Goto Hauptprogramm
End If
Loop
Return
Ontimer1: ' hier der timer interrupt
Zeit = Zeit + 1 ' zeit wird um eins erhöht
Timer1 = 57722
Return ' der timer bekommt einen wert dass er nicht die vollen 65535 takte zählen muss das würde länger als eine sekunde dauern
' der controller kehrt zum programm zurück
müsste so eig funktionieren
einfach für die anderen relais erweitern
wen etwas unklar ist einfach fragen
Lesezeichen