'*****************************
'* Name    : ShiftLight.bas  *
'* Author  : SSh             *
'* MCU     : PIC12F629       *
'* OSC     : Internal        *
'*****************************

@ DEVICE PIC12F629,intrc_osc_noclkout 'Set oscillator - internal  
DEFINE OSC 4           ' Internal Freq. 4 MHz

TACHO     var GPIO.0
LED_GREEN var GPIO.2
SETB      var GPIO.4


LPULSE    VAR WORD
PERIOD    VAR WORD
STORED    VAR WORD
WMODE     VAR BYTE

TRISIO = %010001                      
CMCON  = %00000111         
GPIO  = 0
CLEAR

IF SETB = 0 THEN ' Если при включении зажигания держать кнопку нажатой то устройство отключается
   WMODE = 1
   WRITE 2, WMODE
ENDIF

main:
READ 0, STORED.Byte0
READ 1, STORED.Byte1
READ 2, WMODE

IF WMODE = 1 THEN
   LED_RED = 0
      IF SETB = 0 THEN
         WMODE = 0
         WRITE 2, WMODE
      ENDIF
goto main
ENDIF

   pulsin TACHO, 0, LPULSE
  
   PERIOD = LPULSE

     IF SETB = 0 THEN
        WRITE 0, PERIOD.Byte0
        WRITE 1, PERIOD.Byte1
     ENDIF

     IF PERIOD = 0 THEN
        LED_RED   = 0
        
        GOTO main
     ENDIF

     IF PERIOD < STORED THEN
        LED_RED = 1
     ENDIF
     IF PERIOD > STORED + STORED/100 THEN ' Гистерезис, возможно придется подправить коэфф.
        LED_RED = 0
     ENDIF

if SETB = 0 THEN ' Включение выключенного устройства, надо-бы еще добавить притормаживание
   WMODE = 0     ' программы до отпускания кнопки
   WRITE 2, WMODE
ENDIF

goto main
END