'Terminal:
'обычный режим -   V>292 I>0 Pa>0 Pf>0 F>0
'нажата кнопка при старте - аналоговый SETUP. DC shift
'нажата кнопка в конце полосы - цифровой SETUP. Калибровка.

$regfile = "m32def.dat"                                     ' мега8
$crystal = 8000000
$baud = 4800
$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 64                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space

Config Timer0 = Timer , Prescale = 1024                     'настройка прерывания Pulse по таймеру
On Timer0 Pulse:
Enable Interrupts
Enable Timer0
'*******************************************************************************
'********************* Установки Дисплея и Инициализация ***********************

Nokia_spi_data Alias Portd.5 : Config Portd.5 = Output      'MOSI       - можно задать любую ножку
Nokia_spi_clock Alias Portd.4 : Config Portd.4 = Output     'SCK        - можно задать любую ножку
Nokia_cs Alias Portd.3 : Config Portd.3 = Output            'CS         - можно задать любую ножку
Display_reset Alias Portd.2 : Config Portd.2 = Output       'LCD_RESET  - можно задать любую ножку
Display_reset = 1
Nokia_cs = 1

Declare Sub Nokia_init()
Declare Sub Nokia_clear()
Declare Sub Nokia_text(byval Nokia_x As Byte , Byval Nokia_y As Byte , Byval Nokia_text As String , Byval Nokia_inversion As Byte)
Declare Sub Nokia_picture(bylabel Nokia_label As Word)

Dim W As Iram Word At 8 Overlay
Dim Nokia_data_9 As Integer

Call Nokia_init()                                           ' Инициализируем дисплей


'*******************************************************************************
'*******************************************************************************



Config Portb.3 = Output , Portb.4 = Output , Portc.3 = Input , Portb.0 = Input , Portb.2 = Input , Portb.1 = Input
Set Portc.3 : Set Portb.0 : Set Portb.2 : Set Portb.1
Led1 Alias Portb.3 : Led2 Alias Portb.4 : Button1 Alias Pinc.3 : Plus Alias Pinb.0 : Ok Alias Pinb.2 : Minus Alias Pinb.1


'Const Uk = 800 : Const Ik = 216 : Const Ik2 = 5000   :period=25 : dmod.0=1-VAPFI(default):dmod.1=1-osc

Dim I(200) As Word , U(200) As Word
Dim N As Byte , Zzz As Word , A As Byte                     ', Xxx As Integer
Dim Result As Word At $0388 , L As Byte At $0388 Overlay , H As Byte At $0389 Overlay , K As Byte , Button1state As Byte , Dispmode As Byte , X As Byte
Dim Umax As Word , Umin As Word , Umid As Long , Chan As Byte
Dim Imax As Word , Imin As Word , Imid As Long
Dim Urms As Long , Irms As Long , Xl As Long , Pact As Long , Pl As Long , Ns As Word , Pfull As Long , Fi As Long , Icom As Long
Dim Uk As Word , Ik As Word , Ik2 As Word , Ur As Integer , Ir As Integer , Lin As String * 6 , Urms_2 As String * 3 , Irms_2 As String * 4 , Pact_2 As String * 4 , Pfull_2 As String * 5 , Fi_2 As String * 4 , Countdisp_2 As String * 5 , N_2 As String * 2 , Gumin_2 As String * 3 , Gumax_2 As String * 3
Dim Countmes As Long , Countsum As Long , Countdisp As Long
Dim Mmode As Byte , Sflag As Byte
Dim M As Byte , D As Byte , Digs As Byte , Dign As Byte , Digraz(4) As Byte , P1 As Word , J As Byte
Dim Period As Byte , Gumax As Byte , Gumin As Byte , Gimax As Byte , Dmod As Byte
Dim Uke As Eram Word , Ike As Eram Word , Ik2e As Eram Word , Periode As Eram Byte , Gumaxe As Eram Byte , Gumine As Eram Byte , Gimaxe As Eram Byte , Dmode As Eram Byte
Dim Count1 As Byte , Pusk_1 As Byte , Sec_1 As Byte , Count2 As Byte , Pusk_2 As Byte , Sec_2 As Integer , Count3 As Byte , Pusk_3 As Byte , Sec_3 As Byte , Count4 As Byte , Pusk_4 As Byte , Sec_4 As Byte
Dim U_set As Byte , U_max As Integer , Rele_u As Byte , U_min As Byte , Sec_1_ust As Integer , Sec_2_ust As Integer , Pod_1 As Byte , Sec_3_ust As Integer , Urms_nov As Long , Irms_nov As Long , Fi_nov As Long , Pfull_nov As Long , Pact_nov As Long , Countdisp_nov As Long
Dim Sec_1_2 As String * 3 , Sec_2_2 As String * 4 , Sec_3_2 As String * 3
Dim I_otc As Integer , I_set As Eram Word , Pod_2 As Byte , I_xx As Integer , Pod_3 As Byte , Rele_ixx As Byte , Rele_iotc As Byte , Plus_2 As Byte , Minus_2 As Byte , Ok_2 As Byte , U_min_nov As Byte , U_max_nov As Integer , Sec_1_ust_nov As Integer , Sec_2_ust_nov As Integer , Sec_3_ust_nov As Integer , I_xx_nov As Integer , I_otc_nov As Integer
Dim Pod_4 As Byte , Menu As Byte , Uskor As Byte , Sk As Byte , Sk_2 As Byte , Uskor_2 As Byte , Uskor_3 As Byte , Uskor_4 As Byte , Kursor_1 As Byte , Kursor_2 As Byte , Kursor_3 As Byte , Kursor_4 As Byte , Kursor_5 As Byte , Kursor_6 As Byte , Kursor_7 As Byte

Declare Sub Dval(byval Dsing As Long)
'*******************************************************************************
 '-------------------------- Выводим текст --------------------------------------
'Call Nokia_clear()                                          'очищаем дисплей
'Call Nokia_text(3 , 1 , "*** МЕНЮ ***" , 0)                 'выводим текст:

'Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3  Rs = Portd.2
'Config Lcd = 20 * 2
'Cursor Off
'Deflcdchar 0 , 31 , 17 , 17 , 17 , 31 , 32 , 32 , 32         пустышка
'Deflcdchar 1 , 31 , 17 , 21 , 17 , 31 , 32 , 32 , 32        ' 1 точка
'Deflcdchar 2 , 31 , 31 , 27 , 31 , 31 , 32 , 32 , 32        ' черный квадрат
'Deflcdchar 3 , 31 , 31 , 32 , 32 , 32 , 32 , 32 , 32        ' replace ? with number (0-7)
'Deflcdchar 4 , 32 , 32 , 32 , 32 , 32 , 32 , 31 , 31        ' replace ? with number (0-7)
'Deflcdchar 5 , 31 , 31 , 32 , 32 , 32 , 32 , 31 , 31        ' replace ? with number (0-7)
'Deflcdchar 6 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31        ' replace ? with number (0-7)
'***чтение уставок из памяти***



Cls
Config Adc = Single , Prescaler = 16 , Reference = Internal ' 0-Is 1-Ib 2-Uref(1.26) 5-U
On Adc Adc_int
Start Adc
Reset Led1 : Reset Led2

Cls
'    1234567801234567890
'Lcd "Power Meter  v2.0"
Print "PM 1.0"
'Locate 2 , 1

For N = 1 To 20
  N_2 = Str(n)
 N_2 = Format(n_2 , "00")
 Call Nokia_text(7 , 1 , N_2 , 0)
   'Lcd Chr(255)
   Waitms 100

Next
Call Nokia_clear()                                          'очищаем дисплей
Gosub Init
If Button1 = 0 Then Gosub Setup
Set Led2
N = 1 : Countmes = 0 : Countsum = 0
Enable Adc
'Enable Timer1
Config Watchdog = 2048
Start Watchdog
Enable Interrupts
Mmode = 1
Dispmode = 1
Cls
Start Adc

Readeeprom U_min , 11                                       'чтение из ячейки 11 EEPROM
 U_min_nov = U_min

Do

'Waitms 300
 Urms = 0 : Irms = 0 : Pact = 0 : Ns = 0
 For J = 1 To Period
   Reset Watchdog
   Admux = 197
   Do : Power Adcnoise : Loop Until Result < 500
   Do : Power Adcnoise : Loop Until Result > 500
   If Mmode = 1 Then
      Chan = 192                                            '0 channel
      Icom = Ik
    Else
      Chan = 193                                            '1 channel
      Icom = Ik2
   End If
   'Pk = Uk * Icom                                           вычисление константы для мощности
   For N = 1 To 200
      Admux = Chan                                          'выбор ADC0 (192+номер ADC)
      Power Adcnoise                                        'замер
      I(n) = Result
      Admux = 197                                           'выбор ADC5 (192+номер ADC)
      Power Adcnoise                                        'замер
      U(n) = Result
      If N > 120 And Result > 500 Then Exit For
      For K = 1 To 4 : Next K
   Next N
   Ns = Ns + N                                              'all count
   Umax = 0 : Umin = 1023 : Umid = 0 : Imax = 0 : Imin = 1023 : Imid = 0
   For K = 1 To N
       If Umax < U(k) Then Umax = U(k)
       If Umin > U(k) Then Umin = U(k)
       Umid = Umid + U(k)
       If Imax < I(k) Then Imax = I(k)
       If Imin > I(k) Then Imin = I(k)
       Imid = Imid + I(k)
   Next K
   If Imin = 0 Or Imax = 1023 Then
      Set Led1
    Else
      Reset Led1
   End If

   Umid = Umid / N
   Imid = Imid / N

   If Dmod.1 = 1 Then                                       'osc
      For K = 1 To N
         Print K ; " " ; U(k) ; " " ; I(k)
         Reset Watchdog
      Next
   End If

   For K = 1 To N                                           'rms main calculation
      Ur = U(k) - Umid : Xl = Ur * Ur : Urms = Urms + Xl
      Ir = I(k) - 512 : Xl = Ir * Ir : Irms = Irms + Xl : Ir = -ir
      Pl = Ur * Ir : Pact = Pact + Pl
   Next K
   If Button1 = 0 Then
      Dispmode = 1 - Dispmode
      Waitms 300 : Cls
   End If
 Next J                                                     'end of measuring of 8 waves
   'calc
   Urms = Urms / Ns : Urms = Sqr(urms) : Urms = Urms * Uk : Urms = Urms / 1000       '  Urms - напряжение, реал
   Irms = Irms / Ns : Irms = Sqr(irms) : Irms = Irms * Icom : Irms = Irms / 1000       'Irms - ток*100
   Pact = Pact / Ns : Pact = Pact / 1000 : Pact = Pact * Uk : Pact = Pact * Icom : Pact = Pact / 10000 : If Pact < 0 Then Pact = 0       'активная
   Pfull = Urms * Irms : Pfull = Pfull / 10                 'полная*10
   Fi = Pact * 100 : Fi = Fi / Pfull
   If Dmod.0 = 1 Then Print "V>" ; Urms ; " I>" ; Irms ; " Pa>" ; Pact ; " Pf>" ; Pfull ; " F>" ; Fi
   If Mmode = 1 Then
        If Imax = 1023 Or Imin = 0 Then Mmode = 2
   End If
   If Mmode = 2 Then
        If Imax < 522 And Imin > 488 Then Mmode = 1
   End If
   Zzz = Irms / 100
   If Urms < Gumin Or Urms > Gumax Or Zzz > Gimax Then Reset Led2       'предохранитель
   Incr Countmes : Countsum = Countsum + Pact
   If Button1state = 1 Then
      'Locate 1 , 1 : Lcd "U " ; Umin ; " " ; Umax ; " >" ; Umid ; " #" ; N ; "  "
      'Locate 2 , 1 : Lcd "I " ; Imin ; " " ; Imax ; " >" ; Imid
      'Locate 2 , 18 : Zzz = Getadc(2) : Lcd Zzz
    Else                                                    'основной режим ++++++++++++
      If Dispmode = 0 Then
         'Gosub Dispdig
         'Locate 1 , 17 : Lcd Urms
         'Lin = Str(irms)
         'Locate 2 , 17 : Lcd Format(lin , "0.00")           '\\\\\\\\\\\\\
      Else
         'Locate 1 , 1
         'Call Dval(pact)                                    ' отображаем активную мощность
         If Pact_nov <> Pact Then                           'если значение новое не равно старому
         Pact_2 = Str(pact)                                 'выводим на ЛСД мощность активную:
         Pact_2 = Format(pact_2 , "0000")
         Call Nokia_text(0 , 2 , "Pакт=" , 0)
         Call Nokia_text(7 , 2 , Pact_2 , 0)
         Call Nokia_text(15 , 2 , "Вт" , 0)
         Pact_nov = Pact                                    'новое значение равно старому
         Else
         End If

         If Pfull_nov <> Pfull Then                         'если значение новое не равно старому
         Pfull_2 = Str(pfull)                               'выводим на ЛСД полную мощность :
         Pfull_2 = Format(pfull_2 , "00000")
         Call Nokia_text(0 , 3 , "Pпол=" , 0)
         Call Nokia_text(7 , 3 , Pfull_2 , 0)
         Call Nokia_text(15 , 3 , "ВА" , 0)
         Pfull_nov = Pfull                                  'новое значение равно старому
         Else
         End If

         If Fi_nov <> Fi Then                               'если значение новое не равно старому
         Fi_2 = Str(fi)                                     'выводим на ЛСД cosF :
         Fi_2 = Format(fi_2 , "0.00")
         Call Nokia_text(0 , 4 , "cosF=" , 0)
         Call Nokia_text(7 , 4 , Fi_2 , 0)
         Call Nokia_text(15 , 4 , "Гр" , 0)
         Fi_nov = Fi                                        'новое значение равно старому
         Else
         End If


         If Urms_nov <> Urms Then                           'если значение новое не равно старому
         Urms_2 = Str(urms)                                 'выводим на ЛСД напряжение:
         Urms_2 = Format(urms_2 , "000")
         Call Nokia_text(0 , 1 , "U=" , 0)
         Call Nokia_text(3 , 1 , Urms_2 , 0)
         Call Nokia_text(6 , 1 , "В" , 0)
         Urms_nov = Urms                                    'новое значение равно старому
         Else
         End If

         If Irms_nov <> Irms Then                           'если значение новое не равно старому
         Irms_2 = Str(irms)                                 'выводим на ЛСД ток:
         Irms_2 = Format(irms_2 , "00.00")
         Call Nokia_text(8 , 1 , "I=" , 0)
         Call Nokia_text(10 , 1 , Irms_2 , 0)
         Call Nokia_text(16 , 1 , "А" , 0)
         Irms_nov = Irms                                    'новое значение равно старому
         Else
         End If


         'Lcd "W  " ; Urms ; "V "                            'V
         'Lcd "W  " ; Urms ; "V "                            'V
         'If Irms < 1000 Then Lcd " "
         'Lin = Str(irms)
         'Lcd Format(lin , " 0.00") ; "A "                   'A  \\\\\\\\\\\\\\\\
         'Locate 2 , 1                                       'Full Power
         'Call Dval(pfull)
         'Lcd "VA " ;
         If Pact < 1 Then
            'Lcd "    "
         Else
            'If Fi > 100 Then Fi = 100
            'Lin = Str(fi)
            'Lcd Format(lin , "0.00")                        'Fi  \\\\\\\\\\\\\\\\\\\\
         End If
         'Lcd " "
         Countdisp = Countsum / Countmes
         If Countdisp_nov <> Countdisp Then                 'если значение новое не равно старому
         Countdisp_2 = Str(countdisp)                       'выводим на ЛСД среднюю мощность :
         Countdisp_2 = Format(countdisp_2 , "000.0")
         Call Nokia_text(0 , 5 , "Рсред=" , 0)
         Call Nokia_text(7 , 5 , Countdisp_2 , 0)
         Call Nokia_text(13 , 5 , "авВт" , 0)
         Countdisp_nov = Countdisp                          'новое значение равно старому
         Else
         End If

         Gumin_2 = Str(u_min)                               'выводим на ЛСД минимальную уставку по напряжению :
         Gumin_2 = Format(gumin_2 , "000")
         Call Nokia_text(0 , 6 , Gumin_2 , Kursor_1)
         Call Nokia_text(4 , 6 , "В" , 0)
           Call Nokia_text(5 , 6 , ">Uотк>" , 0)

         Gumax_2 = Str(u_max)                               'выводим на ЛСД максимальную уставку по напряжению :
         Gumax_2 = Format(gumax_2 , "000")
         Call Nokia_text(11 , 6 , Gumax_2 , Kursor_2)
         Call Nokia_text(14 , 6 , "В" , 0)

         Sec_1_2 = Str(sec_1)                               'выводим на ЛСД уставку задержки отключения при  мин напряжении. :
         Sec_1_2 = Format(sec_1_2 , "000")
         Call Nokia_text(0 , 7 , "Tu=от" , 0)
         Call Nokia_text(6 , 7 , Sec_1_2 , Kursor_3)
         Call Nokia_text(9 , 7 , "/вк" , 0)

         Sec_2_2 = Str(sec_2)                               'выводим на ЛСД уставку задержки включения если напряжение в норме. :
         Sec_2_2 = Format(sec_2_2 , "0000")
         'Call Nokia_text(10 , 7 , "t=вк" , 0)
         Call Nokia_text(12 , 7 , Sec_2_2 , Kursor_4)
         Call Nokia_text(16 , 7 , "с" , 0)

          Sec_3_2 = Str(sec_3)                              'выводим на ЛСД уставку задержки включения /отключение реле по холостому ходу . :
         Sec_3_2 = Format(sec_3_2 , "000")
         Call Nokia_text(0 , 8 , "Txx,вк/от=" , 0)
         Call Nokia_text(12 , 8 , Sec_3_2 , Kursor_5)
         Call Nokia_text(15 , 8 , "с" , 0)
         'Locate 2 , 14
         'Call Dval(countdisp)
         'Lcd "avW"                                          ' Last Mode
      End If
   'End If
      'Locate 1 , 20
      'If Sflag = 1 Then
         'Lcd Chr(mmode)                                     'symbol
         'Sflag = 0
      'Else
         'Lcd Chr(0)
         'Sflag = 1
      End If


If U_set > U_max Then                                       ' Если U больше Uзаданного то отключаем нагрузку
Rele_u = 0                                                  ' ОТК реле
Else                                                        'иначе
End If                                                      'выход из условия

If U_set < U_min Then                                       ' Если U меньше Uзаданного то пускаем таймер 1
Pusk_1 = 1                                                  ' Запускаем Таймер 1
If Sec_1 = 0 Then                                           ' если Sec_1 = 0 то отключаем реле
Rele_u = 0                                                  ' ОТК реле
Else
End If
Else                                                        'иначе
Sec_1 = Sec_1_ust                                           ' если напряжение в норме то таймер = уставке
End If                                                      'выход из условия

If U_set > U_min And U_set < U_max Then                     ' Если U в норме то пускаем таймер 2
If Sec_2 = 0 Then                                           ' если Sec_2 = 0 то отключаем реле
Pod_1 = 1                                                   ' если напряжение в норме розрешаем работу защиты ХХ по току
Rele_u = 0                                                  ' ОТК реле
Else                                                        'Иначе
Pusk_2 = 1                                                  ' запускаем таймер 2 если напряжение в норме
End If                                                      'выход из условия
Else                                                        'Иначе
Sec_2 = Sec_2_ust                                           ' Если Напряжение В Норме То Таймер = Уставке
End If                                                      'выход из условия


If I_set > I_otc Or Pod_2 = 1 Then                          ' Если I больше I_otc (отсечка) заданного то отключаем нагрузку
Rele_iotc = 0                                               ' ОТК реле
Pod_2 = 1                                                   ' одхват при токовой отсечке
Else                                                        'иначе
Rele_iotc = 1                                               'ВКЛ реле
End If                                                      'выход из условия


If I_set < I_xx And Pod_1 = 1 Or Pod_3 = 1 Then             ' Если I меньше заданного и напряжение в норме то запускаем таймер3 на отключение
Pusk_3 = 1                                                  ' запускаем таймер 3
If Sec_3 = 0 Then                                           ' если Sec_3 = 0 то отключаем реле
Pod_3 = 1                                                   ' Запрещаем Включение Реле При Отключении По Сухому Ходу
Rele_ixx = 0                                                ' ОТК реле
Else                                                        'Иначе
End If                                                      'выход из условия
Else                                                        'Иначе
Sec_3 = Sec_3_ust                                           ' Если Ток В Норме То Таймер = Уставке
Rele_ixx = 1                                                ' ВКЛ реле
End If                                                      'выход из условия

If Rele_u = 1 And Rele_ixx = 1 And Rele_iotc = 1 Then       'выходное условия включение реле
                                                            ' тут ВКЛ реле
Else                                                        'Иначе
                                                            'тут ОТКЛ реле
End If                                                      'выход из условия

    '**кнопка ОК**
Ok_2 = Ok                                                   'кнопка ОК
If Ok_2 = 0 And Pod_4 = 0 And Menu < 8 Then                 'кнопка меню
Menu = Menu + 1 : Pod_4 = 1
Else                                                        'Иначе
If Menu >= 8 Then
Menu = 0
Else                                                        'Иначе
End If                                                      'выход из условия
If Ok = 1 And Pod_4 = 1 Then
Pod_4 = 0
 Else                                                       'Иначе
End If                                                      'выход из условия
End If                                                      'выход из условия
  '**управление курсором**
  'Меню_1
If Menu = 1 Then                                            'УСЛ  меню=1 здесь курсор переключает отображаемую уставку на негатив
KURSOR_1=1
Else                                                        'Иначе
Kursor_1 = 0
End If
'Меню_1
If Menu = 2 Then                                            'УСЛ  меню=2 здесь курсор переключает отображаемую уставку на негатив
Kursor_2 = 1
Else                                                        'Иначе
Kursor_2 = 0
End If
'Меню_3
If Menu = 3 Then                                            'УСЛ  меню=3 здесь курсор переключает отображаемую уставку на негатив
Kursor_3 = 1
Else                                                        'Иначе
Kursor_3 = 0
End If
'Меню_4
If Menu = 4 Then                                            'УСЛ  меню=4 здесь курсор переключает отображаемую уставку на негатив
Kursor_4 = 1
Else                                                        'Иначе
Kursor_4 = 0
End If
'Меню_5
If Menu = 5 Then                                            'УСЛ  меню=5 здесь курсор переключает отображаемую уставку на негатив
Kursor_5 = 1
Else                                                        'Иначе
Kursor_5 = 0
End If
'Меню_6
If Menu = 6 Then                                            'УСЛ  меню=6 здесь курсор переключает отображаемую уставку на негатив
Kursor_6 = 1
Else                                                        'Иначе
Kursor_6 = 0
End If
'Меню_7
If Menu = 7 Then                                            'УСЛ  меню=7 здесь курсор переключает отображаемую уставку на негатив
Kursor_7 = 1
Else                                                        'Иначе
Kursor_7 = 0
End If

  '**кнопка ПЛЮС**
Plus_2 = Plus                                               'кнопка ПЛЮС
If Plus_2 = 0 Then                                          'кнопка ПЛЮС  УСЛ 1
If Uskor > Sk Then                                          'УСЛ 2
'Меню_1
If Menu = 1 And U_min < 250 Then                            'УСЛ 3 меню=1 здесь увеличиваем уставку минимального напряжения
U_min = U_min + 1
Else                                                        'Иначе 3
End If                                                      'выход из условия 3
'Меню_2
If Menu = 2 And U_max < 300 Then                            'УСЛ 4 меню=2 здесь увеличиваем уставку максимального напряжения
U_max = U_max + 1
Else                                                        'Иначе4
End If                                                      'выход из условия 4
'Меню_3
If Menu = 3 And Sec_1_ust < 900 Then                        'УСЛ 5 меню=3 здесь увеличиваем уставку время задержки откл при низком напряжении
Sec_1_ust = Sec_1_ust + 1
Else                                                        'Иначе 5
End If                                                      'выход из условия 5
'Меню_4
If Menu = 4 And Sec_2_ust < 900 Then                        'УСЛ 6 меню=4 здесь увеличиваем уставку время задержки включении если нопряжение в норме
Sec_2_ust = Sec_2_ust + 1
Else                                                        'Иначе 6
End If                                                      'выход из условия 6
'Меню_5
If Menu = 5 And Sec_3_ust < 900 Then                        'УСЛ 7 меню=5 здесь увеличиваем уставку время задержки включение/отключение При Холостом Ходе , Если Уставка = 0 То отключаем защиту холостого хода
Sec_3_ust = Sec_3_ust + 1
Else                                                        'Иначе 7
End If                                                      'выход из условия 7
'Меню_6
If Menu = 6 And I_xx < 10000 Then                           'УСЛ 8 меню=6 здесь увеличиваем уставку  токовая уставка отключения при холостом ходе
I_xx = I_xx + 1
Else                                                        'Иначе 8
End If                                                      'выход из условия 8
'Меню_7
If Menu = 7 And I_otc < 10000 Then                          'УСЛ 9 меню=7 здесь увеличиваем уставку  токовая отсечка
I_otc = I_otc + 1
Else                                                        'Иначе 9
End If                                                      'выход из условия 9
'ускорение 2
If Uskor_2 > 1 Then                                         'УСЛ 10 меню=7 здесь увеличиваем уставку  токовая отсечка
Sk = 2
Else                                                        'Иначе 10
Uskor_2 = Uskor_2 + 1
End If                                                      'выход из условия 10

Else                                                        'Иначе
Uskor = Uskor + 1
End If                                                      'выход из условия 2
Else                                                        'Иначе
Sk = 1 : Uskor_2 = 0 : Uskor = 0
End If                                                      'выход из условия 1
 '**кнопка МИНУС**
 Minus_2 = Minus                                            'кнопка ПЛЮС
If Minus_2 = 0 Then                                         'кнопка ПЛЮС  УСЛ 1
If Uskor_4 > Sk_2 Then                                      'УСЛ 2
'Меню_1
If Menu = 1 And U_min >0 Then                            'УСЛ 3 меню=1 здесь уменьшаем уставку минимального напряжения
U_min = U_min - 1
Else                                                        'Иначе 3
End If                                                      'выход из условия 3
'Меню_2
If Menu = 2 And U_max > 0 Then                              'УСЛ 4 меню=2 здесь уменьшаем уставку максимального напряжения
U_max = U_max - 1
Else                                                        'Иначе4
End If                                                      'выход из условия 4
'Меню_3
If Menu = 3 And Sec_1_ust > 0 Then                          'УСЛ 5 меню=3 здесь уменьшаем уставку время задержки откл при низком напряжении
Sec_1_ust = Sec_1_ust - 1
Else                                                        'Иначе 5
End If                                                      'выход из условия 5
'Меню_4
If Menu = 4 And Sec_2_ust > 0 Then                          'УСЛ 6 меню=4 здесь уменьшаем уставку время задержки включении если нопряжение в норме
Sec_2_ust = Sec_2_ust - 1
Else                                                        'Иначе 6
End If                                                      'выход из условия 6
'Меню_5
If Menu = 5 And Sec_3_ust > 0 Then                          'УСЛ 7 меню=5 здесь уменьшаем уставку время задержки включение/отключение При Холостом Ходе , Если Уставка = 0 То отключаем защиту холостого хода
Sec_3_ust = Sec_3_ust - 1
Else                                                        'Иначе 7
End If                                                      'выход из условия 7
'Меню_6
If Menu = 6 And I_xx > 0 Then                               'УСЛ 8 меню=6 здесь уменьшаем уставку  токовая уставка отключения при холостом ходе
I_xx = I_xx - 1
Else                                                        'Иначе 8
End If                                                      'выход из условия 8
'Меню_7
If Menu = 7 And I_otc > 0 Then                              'УСЛ 9 меню=7 здесь уменьшаем уставку  токовая отсечка
I_otc = I_otc - 1
Else                                                        'Иначе 9
End If                                                      'выход из условия 9
'ускорение 2
If Uskor_3 > 1 Then                                         'УСЛ 10 меню=7 здесь уменьшаем уставку  токовая отсечка
Sk_2 = 1
Else                                                        'Иначе 10
Uskor_3 = Uskor_3 - 1
End If                                                      'выход из условия 10

Else                                                        'Иначе
Uskor_4 = Uskor_4 - 1
End If                                                      'выход из условия 2
Else                                                        'Иначе
Sk_2 = 5 : Uskor_3 = 0 : Uskor_4 = 0
End If                                                      'выход из условия 1

'**заносим уставки в память**
If Menu = 0 Then                                            'УСЛ 1 если меню =0
  'уставка 1
If U_min_nov <> U_min Then                                  'УСЛ 2 если уставка новая не равна старой
U_min_nov = U_min                                           'уставка новая  равна старой
Writeeeprom U_min , 11 : X = X + 1                          'здесь заносим в память уставку
Else                                                        'Иначе 2
End If                                                      'выход из условия 2
  'уставка 2
If U_max_nov <> U_max Then                                  'УСЛ 3 если уставка новая не равна старой
U_max_nov = U_max                                           'уставка новая  равна старой
                                                            'здесь заносим в память уставку
Else                                                        'Иначе 3
End If                                                      'выход из условия 3
 'уставка 3
If Sec_1_ust_nov <> Sec_1_ust Then                          'УСЛ 4 если уставка новая не равна старой
Sec_1_ust_nov = Sec_1_ust                                   'уставка новая  равна старой
                                                            'здесь заносим в память уставку
Else                                                        'Иначе 4
End If                                                      'выход из условия 4
 'уставка 4
If Sec_2_ust_nov <> Sec_2_ust Then                          'УСЛ 5 если уставка новая не равна старой
Sec_2_ust_nov = Sec_2_ust                                   'уставка новая  равна старой
                                                            'здесь заносим в память уставку
Else                                                        'Иначе 5
End If                                                      'выход из условия 5
  'уставка 5
If Sec_3_ust_nov <> Sec_3_ust Then                          'УСЛ 6 если уставка новая не равна старой
Sec_3_ust_nov = Sec_3_ust                                   'уставка новая  равна старой
                                                            'здесь заносим в память уставку
Else                                                        'Иначе 6
End If                                                      'выход из условия 6
 'уставка 6
If I_xx_nov <> I_xx Then                                    'УСЛ 7 если уставка новая не равна старой
I_xx_nov = I_xx                                             'уставка новая  равна старой
                                                            'здесь заносим в память уставку
Else                                                        'Иначе 7
End If                                                      'выход из условия 7
'уставка 7
If I_otc_nov <> I_otc Then                                  'УСЛ 8 если уставка новая не равна старой
I_otc_nov = I_otc                                           'уставка новая  равна старой
                                                            'здесь заносим в память уставку
Else                                                        'Иначе8
End If                                                      'выход из условия 8



Else                                                        'Иначе 1

End If                                                      'выход из условия 1


 Loop
'-------------------------------------------------------------------------------------------------------------------

Adc_int:
   L = Adcl                                                 'младший байт результата - считывать обязательно первым
   H = Adch                                                 'старший байт результата
Return

'Sub Dval(byval Dsing As Long)                               'мощность*10
      'Local L1 As String * 6
      'If Dsing < 1000 Then
         'L1 = Str(dsing)
         'Lcd Format(l1 , " 0.0")
      'Else
         'Dsing = Dsing \ 10
        'L1 = Str(dsing)
        ' Lcd Format(l1 , "   0")
      'End If
'End Sub

Dispdig:                                                    'xp
P1 = Pact \ 10
Zzz = P1 \ 1000 : Digraz(1) = Zzz
Zzz = P1 \ 100 : Digraz(2) = Zzz Mod 10
Zzz = P1 \ 10 : Zzz = Zzz Mod 10 : Digraz(3) = Zzz
Zzz = P1 Mod 10 : Digraz(4) = Zzz
If Digraz(1) = 0 Then
   Digraz(1) = 10
   If Digraz(2) = 0 Then
   Digraz(2) = 10
      If Digraz(3) = 0 Then
         Digraz(3) = 10
      End If
   End If
End If
For M = 0 To 3                                              'Знакоместо
   For D = 1 To 3                                           'символ из трех клеток
      Dign = M * 4 : Dign = Dign + D
      Zzz = Digraz(m + 1) * 3 : Zzz = Zzz + D : Decr Zzz
      'Locate 1 , Dign : Digs = Lookup(zzz , Digh) : Lcd Chr(digs)
      'Locate 2 , Dign : Digs = Lookup(zzz , Digl) : Lcd Chr(digs)
   Next
Next
Return

Init:
If Periode = 255 Then
   Uke = 800 : Ike = 216 : Ik2e = 5000 : Periode = 25 : Gumine = 160 : Gumaxe = 245 : Gimaxe = 16 : Dmode = 1
End If
Uk = Uke : Ik = Ike : Ik2 = Ik2e : Period = Periode : Gumin = Gumine : Gumax = Gumaxe : Gimax = Gimaxe : Dmod = Dmode
Return

Setup:
Cls : Lcd "setup"
Print "Setup"
Do
Gosub Setup2
Input "Choice >" , Zzz
Print "> ";
If Zzz = 1 Then Input Uk
If Zzz = 2 Then Input Ik
If Zzz = 3 Then Input Ik2
If Zzz = 4 Then Input Period
If Zzz = 5 Then Input Gumin
If Zzz = 6 Then Input Gumax
If Zzz = 7 Then Input Gimax
If Zzz = 8 Then Input Dmod

Loop Until Zzz = 0
Uke = Uk : Ike = Ik : Ik2e = Ik2 : Periode = Period : Gumine = Gumin : Gumaxe = Gumax : Gimaxe = Gimax : Dmode = Dmod

Print " EXIT"
Return

Setup2:
Print "---"
Print "1.Uk " ; Uk
Print "2.Ik1 " ; Ik
Print "3.Ik2 " ; Ik2
Print "4.Period " ; Period
Print "5.Umin " ; Gumin
Print "6.Umax " ; Gumax
Print "7.Imax " ; Gimax
Print "8.Disp " ; Dmod
Print "0.Exit"

Return

Pulse:                                                      ' прерывание по таймеру
If Count1 > 2 And Pusk_1 = 1 And Sec_1 <> 0 Then            'условые-Таймер 1 задержки отключения отключения при U<U_min
Sec_1 = Sec_1 - 1 : Count1 = 0
Else                                                        'иначе
Count1 = Count1 + 1
End If                                                      'выход из условия

If Count2 > 2 And Pusk_2 = 1 And Sec_2 <> 0 Then            'условые-Таймер2 задержки включения при U= U норма
Sec_2 = Sec_2 - 1 : Count2 = 0
Else                                                        'иначе
Count2 = Count2 + 1
End If                                                      'выход из условия

If Count3 > 2 And Pusk_3 = 1 And Sec_3 <> 0 Then            'условые-Таймер3 задержки отключения при I<I_xx холостой ход
Sec_3 = Sec_3 - 1 : Count3 = 0
Else                                                        'иначе
Count3 = Count3 + 1
End If                                                      'выход из условия

If Count4 > 2 And Pusk_4 = 1 And Sec_4 <> 0 Then            'условые-Таймер 4задержки отключения при I>Inom РТ-80
Sec_4 = Sec_4 - 1 : Count4 = 0
Else                                                        'иначе
Count4 = Count4 + 1
End If                                                      'выход из условия
Return


'         0    |     1      |    2      |      3    |    4       |     5     |     6     |    7      |    8      |    9      | 10 pusto
'Digh:
'Data 6 , 3 , 6 , 3 , 6 , 32 , 5 , 5 , 6 , 3 , 5 , 6 , 6 , 4 , 6 , 6 , 5 , 5 , 6 , 5 , 5 , 3 , 3 , 6 , 6 , 5 , 6 , 6 , 5 , 6 , 32 , 32 , 32

'Digl:
'Data 6 , 4 , 6 , 4 , 6 , 4 , 6 , 4 , 4 , 4 , 4 , 6 , 32 , 32 , 6 , 4 , 4 , 6 , 6 , 4 , 6 , 32 , 32 , 6 , 6 , 4 , 6 , 4 , 4 , 6 , 32 , 32 , 32


'Setup
'---
'1.uk 800
'2.Ik1 216
'3.Ik2 5000
'4.Period 25
'5.Umin 160
'6.Umax 245
'7.Imax 16
'8.Disp 1  1-то же, что на дисплее 2-осциллограмма 3=1+2
'0.Exit
'Choice >
  '*******************************************************************************
$include "Nokia-1100 Library.inc"                           'сама библиотека
'$inc Phone , 293 , "Phone.bgf"                              'картинка №1
'$inc Scull , 657 , "Scull.bgf"                              'картинка №2
'$inc Bunny , 490 , "Bunny.bgf"                              'картинка №3
'*******************************************************************************