'*****************************************************************************
'*                   Beléptető rendszer                                      *
'*                                                                           *
'*A belépés irányát a fotocellák megszakadási sorrendje határozza meg. Ha    *
'*adott helyiségben tartózkodik valaki a lámpa felgyullad, az utolsó ember   *
'*után kikapcsol. Nappal a kapcsolás nem müködik - fényerő állítható.        *
'*                                                                           *
'*A mega8-at belső oszcillátor használatára programozzuk be(1MHz).           *
'*Kérdések, észrevételek: pakibec@tvn.hu                                     *
'*****************************************************************************
'
$regfile = "m8def.dat"
$crystal = 1000000
Config Timer0 = Timer , Prescale = 1024
                '1MHz-nél 0.25*1024=256uS 1 ütés, azaz 160 ütés:40,9ms, azaz 2 ciklus kimaradhat a timer tulcsordulásáig                        '
Stop Timer0
Config Timer1 = Timer , Prescale = 1024
Stop Timer1
Config Pinc.5 = Output                                      'LED vezérlése
Config Pinc.3 = Output                                      'adó vezérlése
Config Pinb.0 = Output                                      'Optotriac vezérlése
Config Pinb.1 = Input                                       'TSOP 1 -től
Config Pinb.2 = Input                                       'TSOP 2 -től
Dim Ves As Bit                                              'fényben a vevő lekapcsolását vezérli
Config Aci = On , Compare = On , Trigger = Toggle           'comparátor
Enable Interrupts
Enable Timer0
Enable Timer1
On Timer0 Ide:
On Timer1 Ide2:
Dim A As Bit
Dim B As Byte , C As Byte
Dim D As Bit , I1 As Bit , I2 As Bit
Const Frek = 95
Const Frek2 = 65376
B = 0
I1 = 0
I2 = 0
Dim I3 As Bit , I4 As Bit
I3 = 0
I4 = 0
Ves = 0
Portc = 255
Timer0 = Frek
Timer1 = Frek2
Start Timer0
Start Timer1
Do

      If Ves = 0 Then                                       'Ha sötét van
      A = Pinb.1
      D = Pinb.2
      '-------------------------------------------------------------------
      If I1 = 1 And I2 = 0 Then
         I3 = 1                                             'Az irány: belépés

      End If

      If I1 = 0 And I2 = 1 Then I4 = 1                      'Az irány: kilépés

      If I3 = 1 And I1 = 1 And I2 = 1 Then                  'Mindkét fény megszakadt és belépés történt
         B = B + 1
         I1 = 0
      End If


      If I4 = 1 And I1 = 1 And I2 = 1 Then                  'Mindkét fény megszakadt és kilépés történt
         If B <> 0 Then B = B - 1
         I2 = 0
      End If


      If A = 0 And D = 0 Then                               'Mindkét fény (ismét)világít, rendszer nullázása
         I1 = 0
         I2 = 0
         I3 = 0
         I4 = 0
      End If

      '----------------------------------------------------------------


      If A = 0 Then                                         'jel megjelnik
         Timer0 = Frek
         Start Timer0
      End If
      If D = 0 Then                                         'jel megjelnik
         Timer1 = Frek2
         Start Timer1
      End If


      If B = 0 And Ves = 1 Then                             'senki nincs bent,és világos van
            Portc = 40                                      'LED, adó kikapcs
            Portb = 0                                       'lámpa ki
      End If
      If B = 0 And Ves = 0 Then                             'senki nincs bent, és sötét van
         Portc = 32                                         'adó be, led ki
         Portb = 0                                          'lámpa ki
      End If

      If B <> 0 Then                                        'ha van bent valaki
         Portc = 0                                          'LED be, adó be
         Portb = 1                                          'lámpa be
      End If
      End If
      If B = 0 Then Ves = Acsr.5                            'comparátor lekérdezése, ha nincs bent senki
Loop
Ide:                                                        'Takarás miatt túlcsordult a timer0
   Stop Timer0                                              '1-es fotocella szakadt
   I1 = 1
   Timer0 = Frek
   'Portc = 0
Return

Ide2:
   Stop Timer1                                              '2-es fotocella szakadt
   I2 = 1
   Timer1 = Frek2
   'Portc = 0
Return

End                                                         'end program