;
;          "termo.txt"     DS18B20
;   mlan_3a.txt  kasdis_b.txt    
;  /  
;
;
;----------------------------------------------------------------------
;
; ------------  ------------
;
; mt_e4  equ 0x2710 ; 10000  
; mt_e3  equ 0x3E8  ;  1000 
; mt_e2  equ 0x64   ;   100 
; mt_e1  equ 0x0A   ;    10 
; mt_sz  equ 0      ;   
; mt_smi equ b'00001000' ;    
;
;    mt_flags

; ZFI   ;    
; mins  ;   
; fobl  ;     
; shot  ;   (  )
;    mt_tmp (  )
;
; ------------  ------------
;
; mt_datl       
; mt_dath       
; mt_tmp_fsr   fsr     mt_
; mt_flags  
;
; mt_didl    
; mt_didh    
; mt_disl     
; mt_dish     
; mt_tmp       ()
; mt_re4    *10000
; mt_re3    *1000
; mt_re2    *100
; mt_re1    *10
; mt_re0    *1
; kd_pos1        1
; kd_pos2        2
; kd_pos3        3
; kd_pos4        4
; kd_pos5        5
; kd_pos6        6
; kd_pos7        7
; kd_pos8        8
; kd_pos9        9
; kd_pos10       10
; -----   -----
;
MT     CODE
;     -
divider
  clrf mt_re4
  clrf mt_re3
  clrf mt_re2
  clrf mt_re1
  clrf mt_re0 ;   
zero_1
  movlw 2
  movwf mt_tmp
  clrw
  xorwf mt_datl,w
  btfsc STATUS,Z
  decf mt_tmp,f
  clrw
  xorwf mt_dath,w
  btfsc STATUS,Z
  decf mt_tmp,f
  tstf mt_tmp
  btfsc STATUS,Z
 return ; ,     0
  btfsc mt_flags,shot
  goto div_shot ; for ds18b20 (155 max)
	movlw low(mt_e4)
	movwf mt_disl
	movlw high(mt_e4)
	movwf mt_dish ;   (10000)
dv_x10000
  call s_ubb
  incf mt_re4,f ;   +1
  btfsc mt_tmp,0 ;    
  goto dv_x10000 ;     
  call a_ddc ;  
  decf mt_re4,f ;   -1
   movlw low(mt_e3)
	 movwf mt_disl
	 movlw high(mt_e3)
	 movwf mt_dish ;   (1000)
dv_x1000
  call s_ubb
  incf mt_re3,f ;   +1
  btfsc mt_tmp,0 ;    
  goto dv_x1000 ;     
  call a_ddc ;  
  decf mt_re3,f ;   -1
div_shot
   movlw mt_e2
	 movwf mt_disl
	 clrf mt_dish ;   (100)
dv_x100
  call s_ubb
  incf mt_re2,f ;   +1
  btfsc mt_tmp,0 ;    
  goto dv_x100 ;     
  call a_ddc ;  
  decf mt_re2,f ;   -1
   movlw mt_e1
   movwf mt_disl ;   (10)
dv_x10
  movf mt_disl,w ;     W
  subwf mt_didl,f ;    
  rlf mt_tmp,f ;      mt_tmp.0
  incf mt_re1,f ;   +1
  btfsc mt_tmp,0 ;    
  goto dv_x10 ;     
  movf mt_disl,w ;     W
  addwf mt_didl,w ;  
  movwf mt_re0 ;      
  decf mt_re1,f ;   
 return
;
;--------------------------------
;
s_ubb
   movf mt_disl,w ;      W
   subwf mt_didl,f ;     
   rlf mt_tmp,f ;      mt_tmp.0
   movf mt_dish,w ;      W
   btfss mt_tmp,0 ;      W
   addlw 1 ;    (=0)  +1
   subwf mt_didh,f ;     
   rlf mt_tmp,f ;      mt_tmp.0
  return
;
;--------------------------------
;
a_ddc
   movf mt_disl,w ;      W
   addwf mt_didl,f ;    
   rlf mt_tmp,f ;      mt_tmp.0
   movf mt_dish,w ;      W
   btfsc  mt_tmp,0 ;      W
   addlw 1 ;    (=1)  +1
   addwf mt_didh,f ;    
  return
;
;------------------------------------------------
;
;       
;      mt_dath:mt_datl
;
kopy_am
   clrf mt_tmp
   bcf mt_flags,ZFI
   movf mt_didl,w
   xorwf mt_datl,w
   btfss STATUS,Z
   incf mt_tmp,f
   movf mt_didh,w
   xorwf mt_dath,w
   btfss STATUS,Z
   incf mt_tmp,f
   tstf mt_tmp
   btfsc STATUS,Z
  return ;  mt_tmp=0     
   bsf mt_flags,ZFI ;    -  
   movf mt_didl,w ;   
   movwf mt_datl
   movf mt_didh,w
   movwf mt_dath
  return
;
;------------------------------------------------
;
;      
;    (   ,
;    -    !!!)
;
manus
   bcf mt_flags,mins ;   ""
   btfss mt_didh,7 ;   
  return ;   - 
   bsf mt_flags,mins ;  mins=1
   comf mt_didl,f
   comf mt_didh,f ;  (  1)
   movlw 1 ; W=1
   addwf mt_didl,f ;  1   
   btfss STATUS,C ;    
   clrw ;    - W=0
   addwf mt_didh,f ;     
  return
;
;------------------------------------------------
;
;  -    
;         
;
segmes
    movf FSR,w
    movwf mt_tmp_fsr
    bsf mt_flags,fobl
    movlw mt_re4
    movwf FSR
  call kont_zs ; mt_re4
   decf FSR,f
  call kont_zs ; mt_re3
   decf FSR,f
  call kont_zs ; mt_re2
   decf FSR,f
  call kont_zs ; mt_re1
   decf FSR,f
  call fsegs1 ; mt_re0    
   btfss mt_flags,mins ; only mins=1
    goto d_segmes
   movlw mt_re1
   movwf FSR
rp_smi
   clrw
   xorwf INDF,w
   btfsc STATUS,Z
   goto tszm_2
   incf FSR,f
   goto rp_smi ;         ( -0  -55)
tszm_2
    movlw  mt_smi
    movwf INDF
d_segmes
   movf mt_tmp_fsr,w
   movwf FSR
  return
;
;-----------------------------------
;
kont_zs
      tstf INDF
      btfss STATUS,Z
      goto fsegs1
      btfss mt_flags,fobl
      goto fsegs
    return ; 0     
fsegs1
    bcf mt_flags,fobl
fsegs
      movf INDF,w
      call kaznak
      movwf INDF
    return
;
;------------------------------------------------
;
;        
;      manus
;         kopy
;
drift
  swapf mt_didh,w
  andlw 0xF0
  movwf mt_didh
  swapf mt_didl,w
  andlw 0x0F
  iorwf mt_didh,w
  xchwf mt_didl
  clrf mt_didh
 return
;
;------------------------------------------------
;
;    
; '  nnn*C   ' nnn  
;
dabuf
  clrf kd_pos1
  clrf kd_pos2
  clrf kd_pos8
  clrf kd_pos9
  clrf kd_pos10
  movlw 0x8B
  movwf kd_pos6
  movlw 0x17
  movwf kd_pos7
  movf mt_re0,w
  movwf kd_pos5
  movf mt_re1,w
  movwf kd_pos4
  movf mt_re2,w
  movwf kd_pos3
 return
;
;------------------------------------------------
;