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