;****************************Подпрограмма Индикации заряда батареи
ind_bat:
        push    r14
        goto    perehod
nazad:
        pop     r14     ; Восстановить r14
        return
;**************************** Настраиваем модуль АЦП
perehod:
        bcf     LATA, 2
        MOVLW   b'10001111'        ; опорное напряжение на порты AN2 и AN3, используется только вход AN0, правое выравнивание
        MOVWF   ADCON1, 0
        MOVLW   b'01000001'        ; делитель - Fosc/8, выбираем на мультиплексор канал AN0, и включаем АЦП
        MOVWF   ADCON0, 0
        BCF     PIE1, ADIE, 0      ; прерывание использовать не будем
                                   ; ждем  когда зарядиться конденсатор Chold (acquisition time=12,86мкс)
                                   ; на каждую команду требуется 200нсек (4/20000000), таким образом, 12,86/0,2=65 - столько команд потребуется, чтобы выдержать интервал в 12,86 мкс
                                   ; организуем программную задержку (пусть и будет погрешность, но она будет в сторону увеличения времени, а это не критично)
        MOVLW   0x11
        MOVWF   temp, 0           ; счетчик циклов    

Wait_aq:      
   
        NOP
        NOP       
        DECFSZ  temp, 1, 0        ; Цикл выполняется за 4-5 команд 
        BRA     Wait_aq           ; поэтому, грубо 4*17=72 команды

Start_ADC:

        BSF     ADCON0, GO_DONE, 0   ; старт преобразования                                                         
        BTFSC   ADCON0, GO_DONE, 0   ; ждем пока не сброситься данный бит    
        BRA     $-2
		
;********************************** читаем результат  
        MOVFF   ADRESH, ADC_value_h    
        MOVFF   ADRESL, ADC_value_l

                                   ; измеряемый канал один – AN0, поэтому мультиплексор не трогаем
                                   ; ждем 2 периода Tad = 1,6*2/0,2 = 16 команд, пока заряжается конденсатор
        MOVLW   0x04
        MOVWF   temp, 0           ; счетчик циклов     

Wait_Chold:  
  
        NOP
        NOP       
        DECFSZ  temp, 1, 0       ; Цикл выполняется за 4-5 команд 
        BRA     Wait_Chold       ; поэтому, грубо 4*4=16 команд
        CLRWDT
		
;		 call    STROKA_0          ; Вывод показаний АЦП на дисплей, используется для настройки 
;        call    POZIZ_1

;        swapf   ADC_value_l 
;        movff   ADC_value_l,bufer
;        call    hexx
;        swapf   ADC_value_l 
;        movff   ADC_value_l,bufer
;        call    hexx

;*********************************Вывод индикации на дисплей
sr0
         movlw   0x83              ;w
         CPFSLT  ADC_value_l     ;f       если напр больше или равно нижнему порогу 1-го диап. уходим на _BAT_4
         call    _BAT_4
		 bra     sr1               ;        если меньше нижнего порога 1-го диап. уходим на		 
         goto    nazad   ;knopka_1		 
;*****************************************************************************
sr1
         movlw   0x82              ;w       если напр меньше или равно верхнему порогу 2-го диап. уходим сравн. с нижн. диап.
         CPFSGT  ADC_value_l     ;f 
		 bra     sr1_1
		 bra     sr0
sr1_1	 
         movlw   0x63              ;w
         CPFSLT  ADC_value_l     ;f       если напр больше или равно нижнему порогу 2-го диап. уходим на _BAT_3
         call    _BAT_3		 
         bra     sr2 	 
         goto    nazad   ;knopka_1		 
;****************************************************************************
sr2
         movlw   0x62              ;w       если напр меньше или равно верхнему порогу 3-го диап. уходим сравн. с нижн. диап.
         CPFSGT  ADC_value_l    ;f 
		 bra     sr2_1
		 bra     sr0
sr2_1	 
         movlw   0x47              ;w       если напр больше или равно нижнему порогу 3-го диап. уходим на _BAT_2
         CPFSLT  ADC_value_l     ;f 
         call    _BAT_2		 
         bra     sr3	 
         goto    nazad   ;knopka_1				 
;*****************************************************************************
sr3	 
         movlw   0x46              ;w       если напр меньше или равно верхнему порогу 4-го диап. уходим сравн. с нижн. диап.
         CPFSGT  ADC_value_l     ;f
		 bra     sr3_1
		 bra     sr0
sr3_1	 
         movlw   0x23              ;w
         CPFSLT  ADC_value_l     ;f       если напр больше или равно нижнему порогу 4-го диап. уходим на _BAT_1
         call    _BAT_1		 
         call    _BAT_0            ;        если напр меньше нижнего порога 4-го диап. уходим на _BAT_0	 
         goto    nazad   ;knopka_1

;*******************************************************************
;*******************************************************************
;*******************************************************************
;**********************Подпрограмма индикации заряда батареи

_BAT_4                                 ;   Батарея 4-х

        call    STROKA_0
        call    POZIZ_12

        movlw   b'00000000'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'00011100'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'00111110'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'00111110'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'00000000'
        movwf   wibrosreg
        call    wiwodim  
        goto    nazad

_BAT_3                                 ;   Батарея 3-х

        call    STROKA_0
        call    POZIZ_12

        movlw   b'00000000'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'00011100'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'00111110'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'00111110'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'00000000'
        movwf   wibrosreg
        call    wiwodim  
        goto    nazad

_BAT_2                                 ;   Батарея 2-х

        call    STROKA_0
        call    POZIZ_12

        movlw   b'00000000'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'00011100'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'00111110'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'00111110'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'00000000'
        movwf   wibrosreg
        call    wiwodim  
        goto    nazad

_BAT_1                                 ;   Батарея 1-х

        call    STROKA_0
        call    POZIZ_12

        movlw   b'00000000'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'00011100'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'00111110'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01011101'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'00111110'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'00000000'
        movwf   wibrosreg
        call    wiwodim  
        goto    nazad
_BAT_0                                 ;   Батарея 0-х

        call    STROKA_0
        call    POZIZ_12

        movlw   b'00000000'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'00011100'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'00111110'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim 
        movlw   b'01000001'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'00111110'
        movwf   wibrosreg
        call    wiwodim
        movlw   b'00000000'
        movwf   wibrosreg
        call    wiwodim  
        goto    nazad
;***************************************************************************

                END 