;
;   
;     "sekmetr.txt"
;
;   rcall sekmetr
;
 sekmetr:
    cbr flags,1<<tim_tik ;    -
    sbrs flags,en_sek ;    en_sek=1
    ret ;     - en_sek=0
		dec tic_cntl ; tic_cntl=tic_cntl-1
		brbs SREG_Z,loop_cntsh
		ret ; ,    tic_cntl
 loop_cntsh:
			 ldi tmp0,cnts_l ; cnts_l=200
			 mov tic_cntl,tmp0 ;    
		dec tic_cnth ; tic_cnth=tic_cnth-1
    brbs SREG_Z,loop_cntss
	 ret ; ,    tic_cnth
 loop_cntss:
			 ldi tmp0,cnts_h ; cnts_h=5
			mov tic_cnth,tmp0 ;    
 sek_plus:
			lds tmp0,sekond ;  
			inc tmp0 ; tmp0=tmp0+1
			cpi tmp0,over60 ;    
			 brbs SREG_C,point11 ;   =1   60 -   point11
				;   =0  : tmp0=>60
				clr tmp0 ;  0
				sbr flags,1<<min_plus ;        point11
point11:
			sts sekond,tmp0 ;    
        ldiw x,vram ;      Xh:Xl
      rcall decod ;     
       sbrs flags,min_plus ;    
      rjmp point12 ;     point12
       cbr flags,1<<min_plus ; min_plus=0
 minuta:
     lds tmp0,minut ;   
     inc tmp0 ; tmp0=tmp0+1
			cpi tmp0,over60 ;    
     brbs SREG_C,point14 ;   =1   60 -   point14
				;   =0  : tmp0=>60
			clr tmp0 ;       
 point14:
    sts minut,tmp0 ;     
       ;    X  vram+3
     rcall decod ;     
 point12:
   rcall print ;    
  ret

;
;
;
;
;-------------------------------------------------------------------------
;     /
;       ,    
;   
;
 decod:
		clr tmp1 ;   
    clr tmp2 ;   0  ADC
 loop1:
     inc tmp1 ;  +1
		subi tmp0,10 ;    tmp1
    brcc loop1 ; jnc loop1   
     dec tmp1 ;   -1
     subi tmp0,-10 ; adi 10   (   tmp0)
    rcall tbdt ;         tmp0
     mov tmp0,tmp1 ;    
    rcall tbdt
   ret
 tbdt:
     ldiw z,ss_table ;        Zh:Zl
     add zl,tmp0 ;    
     adc zh,tmp2
     lsl zl
     rol zh ; Z=Z*2
     lpm tmp0,z ;   
     st x+,tmp0 ;      
    ret
;
;-------------------------------------------------------------------------
;    0N    N  
;
 ss_table:
 .dw (1<<sg_A | 1<<sg_B | 1<<sg_C | 1<<sg_D | 1<<sg_E | 1<<sg_F),/*0*/\
     (1<<sg_B | 1<<sg_C),/*1*/ (1<<sg_A | 1<<sg_B | 1<<sg_G | 1<<sg_D | 1<<sg_E),/*2*/\
     (1<<sg_A | 1<<sg_B | 1<<sg_G | 1<<sg_C | 1<<sg_D),/*3*/\
     (1<<sg_B | 1<<sg_C | 1<<sg_G | 1<<sg_F),/*4*/\
     (1<<sg_A | 1<<sg_F | 1<<sg_G | 1<<sg_C | 1<<sg_D),/*5*/\
     (1<<sg_A | 1<<sg_F | 1<<sg_G | 1<<sg_C | 1<<sg_D | 1<<sg_E),/*6*/\
     (1<<sg_A | 1<<sg_B | 1<<sg_C),/*7*/\
     (1<<sg_A | 1<<sg_B | 1<<sg_C | 1<<sg_D | 1<<sg_E | 1<<sg_F | 1<<sg_G),/*8*/\
     (1<<sg_A | 1<<sg_B | 1<<sg_C | 1<<sg_D | 1<<sg_F | 1<<sg_G),/*9*/\
     (1<<sg_A | 1<<sg_B | 1<<sg_C | 1<<sg_E | 1<<sg_F | 1<<sg_G),/*A*/\
     (1<<sg_C | 1<<sg_D | 1<<sg_E | 1<<sg_F | 1<<sg_G),/*b*/\
     (1<<sg_A | 1<<sg_D | 1<<sg_E | 1<<sg_F),/*C*/\
     (1<<sg_B | 1<<sg_C | 1<<sg_D | 1<<sg_E | 1<<sg_G),/*d*/\
     (1<<sg_A | 1<<sg_D | 1<<sg_E | 1<<sg_F | 1<<sg_G),/*E*/\
     (1<<sg_A | 1<<sg_E | 1<<sg_F | 1<<sg_G)/*F*/
;
;
;-------------------------------------------------------------------------
;
;    4*595
;    
;       vram
;     
;
 print:
    ldiw x,vram ;      Xh:Xl
    ld tmp0,x+
     rcall trs_595 ; DISP0 
    ld tmp0,x+
     rcall trs_595 ; DISP1 
    ld tmp0,x+
     rcall trs_595 ; DISP2 
    ld tmp0,x+
     rcall trs_595 ; DISP3 
   sbi PORTB,WR_ln
   nop
   nop
   cbi PORTB,WR_ln
   nop
  ret
;--------------------------------------------
;     tmp0 
;  
;        
;
 trs_595:
     trsbt 7
     strob
     trsbt 6
     strob
     trsbt 5
     strob
     trsbt 4
     strob
     trsbt 3
     strob
     trsbt 2
     strob
     trsbt 1
     strob
     trsbt 0
     strob
     cbi PORTB,DATO_ln
    ret
;