;*******************************************************************************
;                                                                              *
;    Filename:      simplified BMS with PIC                                    *
;    Date:          2017.12.02                                                 *
;    File Version:  v 1.0                                                      *
;    Author:        Domonkos Márk                                              *
;    on Device:     PIC12F629                                                  *
;                                                                              *
;*******************************************************************************
#include <p12f629.inc>   
   
__CONFIG _FOSC_INTRCIO & _WDTE_OFF & _PWRTE_ON & _MCLRE_ON & _BOREN_ON & _CP_OFF & _CPD_OFF

    cblock 0x20			    ;
    d1				    ; register for delay
    d2				    ; register for delay
    endc			    ;
  
    org     0x00		    ; processor reset vector
;*******************************************************************************
; MAIN PROGRAM
;*******************************************************************************
INIT:
    bsf	    STATUS,RP0		    ; BANK1
    movlw   0x10		    ;
    movwf   TRISIO		    ; GP5 kimenet
    movlw   0x8F		    ; 3,5937V a referencia
    movwf   VRCON		    ;
    bsf	    PIR1,CMIF		    ; komparátor interrupt engedélyezve
    bcf	    STATUS,RP0		    ; BANK0
    movlw   0x14		    ; bels? ref szerint kommparálás
    movwf   CMCON
    clrf    GPIO  
    call    delay		    ; egy kicsit várunk, hogy minden				    ; ténylegesen felálljon
Komparalas:    
    bsf	    GPIO,GPIO5		    ; felkapcsoljuk a GPIO5 ha a
    btfsc   CMCON,COUT		    ; feszültség nagyobb, mint a CVref
    goto    $-1			    ;
    bcf	    GPIO,GPIO5		    ; ellenkez? esetben kikapcs 
    
    SLEEP
    
;------------- SUB: Delay cycle 0,01 s @ 4 MHz   -------------------------------
delay:			    
	movlw	0xCF
	movwf	d1
	movlw	0x08
	movwf	d2
Delay_0:
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	Delay_0		    ;9998 cycles
	
	goto	$+1		    ;+2 cycles
	
	return
    END