Zündung für ein Motorrad . 2-Zylinder
Code:
$regfile = "m8def.dat"
$crystal = 10000000
$baud = 9600
Ddrb = &B00000111
Portb = &B00000000
Ddrc = &B00000000
Portc = &B00000000
Ddrd = &B11110011
Portd = &B00001100
Dim A As Byte
Dim Pause As Integer
Dim Aus As Integer
Dim Dzmax As Integer
Pause = 100
Aus = 0
Dzmax = 10000 'Drehzahlbegrenzung
'Testrotine der Ausgänge
A = 0
While A <= 4
A = A + 1
Waitms Pause
Portb.0 = 1
Portb.1 = 0
Waitms Pause
Portb.0 = 0
Portb.1 = 1
Wend
Portb.0 = 1
'Zündung
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output
Config Pinb.3 = Output
Config Pind.2 = Input
Config Pind.3 = Input
Portd.2 = 1 'Pullup ein
Portd.3 = 1 'Pullup ein
On Int0 Int0serv
On Int1 Int1serv
Config Int0 = Falling 'Überprüfung ob der Pegel vom Geber fällt oder steigt....Falling!
Config Int1 = Falling
Enable Int0
Enable Int1
'Drehzahl
Config Timer1 = Timer , Prescale = 256
Const Timervorgabe = 3036
Const Markierungenproscheibe = 1
Dim Zaehlerirq0 As Long
Dim Impulseprosekunde As Long
Dim Impulseprominute As Long
Dim Umdrehungenprominute As Integer
Zaehlerirq0 = 0
On Timer1 Timer_irq
Enable Timer1
Enable Interrupts
'-------------------
Do
Portb.0 = 1
Portb.1 = 1
'Drehzahlüberwachung
Impulseprominute = Impulseprosekunde * 60
Umdrehungenprominute = Impulseprominute / Markierungenproscheibe
If Umdrehungenprominute > Dzmax Then
Disable Int1
Print "Drehzahlbegrenzung hat angesprochen"
Else
Enable Int1
End If
Select Case Umdrehungenprominute
Case 1000 To 1200 : Portb.2 = 1
Case Else : Portb.2 = 0
End Select
Impulseprominute = Impulseprosekunde * 60
Umdrehungenprominute = Impulseprominute / Markierungenproscheibe
Print "Umdreh. Min: " ; Umdrehungenprominute
Loop
'--------------------
'linker Zylinder
Int0serv:
Portb.0 = 0
waitms 50
Incr Zaehlerirq0
Enable Int0
Return
'rechter Zylinder
Int1serv:
Portb.1 = 0
Waitms 50
Enable Int1
Return
'Pro Sekunde ein Aufruf
Timer_irq:
Timer1 = Timervorgabe
Impulseprosekunde = Zaehlerirq0
Zaehlerirq0 = 0
Return
End
Lesezeichen